diff --git a/README.md b/README.md index 3ba38604f..8e5c5e23d 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,7 @@ ps:核心功能已经实现,正在对接微信小程序中... | | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 | | 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 | | ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 | -| 🚀 | 文件服务 | 支持本地文件存储,同时支持兼容 Amazon S3 协议的云服务、开源组件 | +| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等 | | 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 | | | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 | | | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 | @@ -218,7 +218,7 @@ ps:核心功能已经实现,正在对接微信小程序中... |---------------|----------------------------------------------------------------------|--------------------------------------------------------------------|------------------------------------------------------------------| | 代码生成 | ![代码生成](https://static.iocoder.cn/images/ruoyi-vue-pro/代码生成.jpg) | ![生成效果](https://static.iocoder.cn/images/ruoyi-vue-pro/生成效果.jpg) | - | | 文档 | ![系统接口](https://static.iocoder.cn/images/ruoyi-vue-pro/系统接口.jpg) | ![数据库文档](https://static.iocoder.cn/images/ruoyi-vue-pro/数据库文档.jpg) | - | -| 文件 & 配置 | ![文件管理](https://static.iocoder.cn/images/ruoyi-vue-pro/文件管理.jpg) | ![配置管理](https://static.iocoder.cn/images/ruoyi-vue-pro/配置管理.jpg) | - | +| 文件 & 配置 | ![文件配置](https://static.iocoder.cn/images/ruoyi-vue-pro/文件配置.jpg) | ![文件管理](https://static.iocoder.cn/images/ruoyi-vue-pro/文件管理2.jpg) | ![配置管理](https://static.iocoder.cn/images/ruoyi-vue-pro/配置管理.jpg) | | 定时任务 | ![定时任务](https://static.iocoder.cn/images/ruoyi-vue-pro/定时任务.jpg) | ![任务日志](https://static.iocoder.cn/images/ruoyi-vue-pro/任务日志.jpg) | - | | API 日志 | ![访问日志](https://static.iocoder.cn/images/ruoyi-vue-pro/访问日志.jpg) | ![错误日志](https://static.iocoder.cn/images/ruoyi-vue-pro/错误日志.jpg) | - | | MySQL & Redis | ![MySQL](https://static.iocoder.cn/images/ruoyi-vue-pro/MySQL.jpg) | ![Redis](https://static.iocoder.cn/images/ruoyi-vue-pro/Redis.jpg) | - | diff --git a/pom.xml b/pom.xml index 46502fe42..5494bacd6 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ https://github.com/YunaiV/ruoyi-vue-pro - 1.6.0-snapshot + 1.6.1-snapshot 1.8 ${java.version} diff --git a/sql/ruoyi-vue-pro.sql b/sql/ruoyi-vue-pro.sql index 2a779a82d..96183a703 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: 11/03/2022 00:39:00 + Date: 20/03/2022 02:30:52 */ SET NAMES utf8mb4; @@ -35,7 +35,7 @@ CREATE TABLE `bpm_form` ( `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=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流的表单定义'; +) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流的表单定义'; -- ---------------------------- -- Records of bpm_form @@ -46,6 +46,7 @@ INSERT INTO `bpm_form` VALUES (8, '啊哈哈', 0, '{\"formRef\":\"elForm\",\"for INSERT INTO `bpm_form` VALUES (9, '新增', 0, '{\"formRef\":\"elForm\",\"formModel\":\"formData\",\"size\":\"medium\",\"labelPosition\":\"right\",\"labelWidth\":100,\"formRules\":\"rules\",\"gutter\":15,\"disabled\":false,\"span\":24,\"formBtns\":true}', '[\"{\\\"label\\\":\\\"单行文本\\\",\\\"tag\\\":\\\"el-input\\\",\\\"tagIcon\\\":\\\"input\\\",\\\"placeholder\\\":\\\"请输入单行文本\\\",\\\"span\\\":24,\\\"labelWidth\\\":null,\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"clearable\\\":true,\\\"prepend\\\":\\\"\\\",\\\"append\\\":\\\"\\\",\\\"prefix-icon\\\":\\\"\\\",\\\"suffix-icon\\\":\\\"\\\",\\\"maxlength\\\":null,\\\"show-word-limit\\\":false,\\\"readonly\\\":false,\\\"disabled\\\":false,\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/input\\\",\\\"formId\\\":101,\\\"renderKey\\\":1640959561705,\\\"layout\\\":\\\"colFormItem\\\",\\\"vModel\\\":\\\"field101\\\"}\",\"{\\\"label\\\":\\\"单选框组\\\",\\\"tag\\\":\\\"el-radio-group\\\",\\\"tagIcon\\\":\\\"radio\\\",\\\"span\\\":24,\\\"labelWidth\\\":null,\\\"style\\\":{},\\\"optionType\\\":\\\"default\\\",\\\"border\\\":false,\\\"size\\\":\\\"medium\\\",\\\"disabled\\\":false,\\\"required\\\":true,\\\"options\\\":[{\\\"label\\\":\\\"选项一\\\",\\\"value\\\":1},{\\\"label\\\":\\\"选项二\\\",\\\"value\\\":2}],\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/radio\\\",\\\"formId\\\":102,\\\"renderKey\\\":1640959563240,\\\"layout\\\":\\\"colFormItem\\\",\\\"vModel\\\":\\\"field102\\\"}\"]', '哈哈哈', '1', '2021-12-31 22:06:11', '1', '2022-02-19 17:27:54', b'1', 1); INSERT INTO `bpm_form` VALUES (10, '11333', 1, '{\"formRef\":\"elForm\",\"formModel\":\"formData\",\"size\":\"medium\",\"labelPosition\":\"left\",\"labelWidth\":100,\"formRules\":\"rules\",\"gutter\":15,\"disabled\":false,\"span\":24,\"formBtns\":true}', '[\"{\\\"label\\\":\\\"多行文本\\\",\\\"tag\\\":\\\"el-input\\\",\\\"tagIcon\\\":\\\"textarea\\\",\\\"type\\\":\\\"textarea\\\",\\\"placeholder\\\":\\\"请输入多行文本多行文本多行文本\\\",\\\"span\\\":24,\\\"labelWidth\\\":null,\\\"autosize\\\":{\\\"minRows\\\":4,\\\"maxRows\\\":4},\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"maxlength\\\":null,\\\"show-word-limit\\\":false,\\\"readonly\\\":false,\\\"disabled\\\":false,\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/input\\\",\\\"formId\\\":101,\\\"renderKey\\\":1640959720587,\\\"layout\\\":\\\"colFormItem\\\",\\\"vModel\\\":\\\"field101\\\",\\\"defaultValue\\\":\\\"1111\\\"}\",\"{\\\"label\\\":\\\"滑块\\\",\\\"tag\\\":\\\"el-slider\\\",\\\"tagIcon\\\":\\\"slider\\\",\\\"defaultValue\\\":0,\\\"span\\\":24,\\\"labelWidth\\\":null,\\\"disabled\\\":false,\\\"required\\\":true,\\\"min\\\":0,\\\"max\\\":100,\\\"step\\\":1,\\\"show-stops\\\":false,\\\"range\\\":false,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/slider\\\",\\\"formId\\\":101,\\\"renderKey\\\":1640959732257,\\\"layout\\\":\\\"colFormItem\\\",\\\"vModel\\\":\\\"field101\\\"}\"]', '222211', '1', '2021-12-31 22:08:45', '1', '2022-02-19 17:27:52', b'1', 1); INSERT INTO `bpm_form` VALUES (11, 'biubiu', 0, '{\"formRef\":\"elForm\",\"formModel\":\"formData\",\"size\":\"medium\",\"labelPosition\":\"right\",\"labelWidth\":100,\"formRules\":\"rules\",\"gutter\":15,\"disabled\":false,\"span\":24,\"formBtns\":true}', '[\"{\\\"__config__\\\":{\\\"label\\\":\\\"单行文本\\\",\\\"labelWidth\\\":null,\\\"showLabel\\\":true,\\\"changeTag\\\":true,\\\"tag\\\":\\\"el-input\\\",\\\"tagIcon\\\":\\\"input\\\",\\\"required\\\":true,\\\"layout\\\":\\\"colFormItem\\\",\\\"span\\\":24,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/input\\\",\\\"regList\\\":[],\\\"formId\\\":121,\\\"renderKey\\\":\\\"1211641657675668\\\"},\\\"__slot__\\\":{\\\"prepend\\\":\\\"\\\",\\\"append\\\":\\\"\\\"},\\\"placeholder\\\":\\\"请输入单行文本\\\",\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"clearable\\\":true,\\\"prefix-icon\\\":\\\"\\\",\\\"suffix-icon\\\":\\\"\\\",\\\"maxlength\\\":null,\\\"show-word-limit\\\":false,\\\"readonly\\\":false,\\\"disabled\\\":false,\\\"__vModel__\\\":\\\"field121\\\"}\",\"{\\\"__config__\\\":{\\\"label\\\":\\\"多选框组\\\",\\\"tag\\\":\\\"el-checkbox-group\\\",\\\"tagIcon\\\":\\\"checkbox\\\",\\\"defaultValue\\\":[],\\\"span\\\":24,\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"layout\\\":\\\"colFormItem\\\",\\\"optionType\\\":\\\"default\\\",\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"border\\\":false,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/checkbox\\\",\\\"formId\\\":122,\\\"renderKey\\\":\\\"1221641097529857\\\"},\\\"__slot__\\\":{\\\"options\\\":[{\\\"label\\\":\\\"选项一\\\",\\\"value\\\":1},{\\\"label\\\":\\\"选项二\\\",\\\"value\\\":2}]},\\\"style\\\":{},\\\"size\\\":\\\"medium\\\",\\\"disabled\\\":false,\\\"__vModel__\\\":\\\"field122\\\"}\"]', '嘿嘿', '1', '2022-01-02 12:25:55', '1', '2022-02-19 17:27:57', b'0', 1); +INSERT INTO `bpm_form` VALUES (15, 'leave-form', 0, '{\"formRef\":\"elForm\",\"formModel\":\"formData\",\"size\":\"medium\",\"labelPosition\":\"right\",\"labelWidth\":100,\"formRules\":\"rules\",\"gutter\":15,\"disabled\":false,\"span\":24,\"formBtns\":true}', '[\"{\\\"__config__\\\":{\\\"label\\\":\\\"开始时间\\\",\\\"tag\\\":\\\"el-date-picker\\\",\\\"tagIcon\\\":\\\"date\\\",\\\"defaultValue\\\":null,\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"span\\\":24,\\\"layout\\\":\\\"colFormItem\\\",\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/date-picker\\\",\\\"formId\\\":101,\\\"renderKey\\\":\\\"1011647692195671\\\"},\\\"placeholder\\\":\\\"请选择开始时间\\\",\\\"type\\\":\\\"date\\\",\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"disabled\\\":false,\\\"clearable\\\":true,\\\"format\\\":\\\"yyyy-MM-dd\\\",\\\"value-format\\\":\\\"yyyy-MM-dd\\\",\\\"readonly\\\":false,\\\"__vModel__\\\":\\\"field101\\\"}\",\"{\\\"__config__\\\":{\\\"label\\\":\\\"结束时间\\\",\\\"tag\\\":\\\"el-date-picker\\\",\\\"tagIcon\\\":\\\"date\\\",\\\"defaultValue\\\":null,\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"span\\\":24,\\\"layout\\\":\\\"colFormItem\\\",\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/date-picker\\\",\\\"formId\\\":102,\\\"renderKey\\\":\\\"1021647692207701\\\"},\\\"placeholder\\\":\\\"请选择结束时间\\\",\\\"type\\\":\\\"date\\\",\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"disabled\\\":false,\\\"clearable\\\":true,\\\"format\\\":\\\"yyyy-MM-dd\\\",\\\"value-format\\\":\\\"yyyy-MM-dd\\\",\\\"readonly\\\":false,\\\"__vModel__\\\":\\\"field102\\\"}\",\"{\\\"__config__\\\":{\\\"label\\\":\\\"请假类型\\\",\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"tag\\\":\\\"el-select\\\",\\\"tagIcon\\\":\\\"select\\\",\\\"layout\\\":\\\"colFormItem\\\",\\\"span\\\":24,\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/select\\\",\\\"formId\\\":103,\\\"renderKey\\\":\\\"1031647692231884\\\"},\\\"__slot__\\\":{\\\"options\\\":[{\\\"label\\\":\\\"事假\\\",\\\"value\\\":1},{\\\"label\\\":\\\"年假\\\",\\\"value\\\":2}]},\\\"placeholder\\\":\\\"请选择请假类型\\\",\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"clearable\\\":true,\\\"disabled\\\":false,\\\"filterable\\\":false,\\\"multiple\\\":false,\\\"__vModel__\\\":\\\"field103\\\"}\",\"{\\\"__config__\\\":{\\\"label\\\":\\\"原因\\\",\\\"labelWidth\\\":null,\\\"showLabel\\\":true,\\\"tag\\\":\\\"el-input\\\",\\\"tagIcon\\\":\\\"textarea\\\",\\\"required\\\":false,\\\"layout\\\":\\\"colFormItem\\\",\\\"span\\\":24,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/input\\\",\\\"formId\\\":105,\\\"renderKey\\\":\\\"1051647692319768\\\"},\\\"type\\\":\\\"textarea\\\",\\\"placeholder\\\":\\\"请输入原因\\\",\\\"autosize\\\":{\\\"minRows\\\":4,\\\"maxRows\\\":4},\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"maxlength\\\":null,\\\"show-word-limit\\\":false,\\\"readonly\\\":false,\\\"disabled\\\":false,\\\"__vModel__\\\":\\\"field105\\\"}\"]', NULL, '1', '2022-03-19 20:20:56', '1', '2022-03-19 20:20:56', b'0', 1); COMMIT; -- ---------------------------- @@ -122,7 +123,7 @@ CREATE TABLE `bpm_process_definition_ext` ( `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=95 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Bpm 流程定义的拓展表\n'; +) ENGINE=InnoDB AUTO_INCREMENT=96 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Bpm 流程定义的拓展表\n'; -- ---------------------------- -- Records of bpm_process_definition_ext @@ -210,6 +211,7 @@ INSERT INTO `bpm_process_definition_ext` VALUES (91, 'oa_leave:3:1fad3d93-7b75-1 INSERT INTO `bpm_process_definition_ext` VALUES (92, 'oa_leave:4:991f2193-7b7f-11ec-a3c8-acde48001122', 'e4a1a1ef-7628-11ec-8477-a2380e71991a', 'OA 请假的示例', 20, NULL, NULL, NULL, '/bpm/oa/flow', '/oa/oa/leave', '1', '2022-01-22 20:34:10', '1', '2022-02-19 17:29:14', b'0', 1); INSERT INTO `bpm_process_definition_ext` VALUES (93, 'oa_leave:5:004b710b-7b8a-11ec-8ef0-acde48001122', 'e4a1a1ef-7628-11ec-8477-a2380e71991a', 'OA 请假的示例', 20, NULL, NULL, NULL, '/bpm/oa/leave/create', '/bpm/oa/leave/detail', '1', '2022-01-22 21:48:38', '1', '2022-02-19 17:29:14', b'0', 1); INSERT INTO `bpm_process_definition_ext` VALUES (94, 'flowable_01:1:c0bb5b36-97ed-11ec-a2b9-862bc1a4a054', '4b4909d8-97e7-11ec-8e20-862bc1a4a054', 'ooxx', 10, 11, '{\"formRef\":\"elForm\",\"formModel\":\"formData\",\"size\":\"medium\",\"labelPosition\":\"right\",\"labelWidth\":100,\"formRules\":\"rules\",\"gutter\":15,\"disabled\":false,\"span\":24,\"formBtns\":true}', '[\"{\\\"__config__\\\":{\\\"label\\\":\\\"单行文本\\\",\\\"labelWidth\\\":null,\\\"showLabel\\\":true,\\\"changeTag\\\":true,\\\"tag\\\":\\\"el-input\\\",\\\"tagIcon\\\":\\\"input\\\",\\\"required\\\":true,\\\"layout\\\":\\\"colFormItem\\\",\\\"span\\\":24,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/input\\\",\\\"regList\\\":[],\\\"formId\\\":121,\\\"renderKey\\\":\\\"1211641657675668\\\"},\\\"__slot__\\\":{\\\"prepend\\\":\\\"\\\",\\\"append\\\":\\\"\\\"},\\\"placeholder\\\":\\\"请输入单行文本\\\",\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"clearable\\\":true,\\\"prefix-icon\\\":\\\"\\\",\\\"suffix-icon\\\":\\\"\\\",\\\"maxlength\\\":null,\\\"show-word-limit\\\":false,\\\"readonly\\\":false,\\\"disabled\\\":false,\\\"__vModel__\\\":\\\"field121\\\"}\",\"{\\\"__config__\\\":{\\\"label\\\":\\\"多选框组\\\",\\\"tag\\\":\\\"el-checkbox-group\\\",\\\"tagIcon\\\":\\\"checkbox\\\",\\\"defaultValue\\\":[],\\\"span\\\":24,\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"layout\\\":\\\"colFormItem\\\",\\\"optionType\\\":\\\"default\\\",\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"border\\\":false,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/checkbox\\\",\\\"formId\\\":122,\\\"renderKey\\\":\\\"1221641097529857\\\"},\\\"__slot__\\\":{\\\"options\\\":[{\\\"label\\\":\\\"选项一\\\",\\\"value\\\":1},{\\\"label\\\":\\\"选项二\\\",\\\"value\\\":2}]},\\\"style\\\":{},\\\"size\\\":\\\"medium\\\",\\\"disabled\\\":false,\\\"__vModel__\\\":\\\"field122\\\"}\"]', NULL, NULL, '1', '2022-02-28 00:53:14', '1', '2022-02-28 00:53:14', b'0', 1); +INSERT INTO `bpm_process_definition_ext` VALUES (95, 'common-form:1:7fdfc407-a786-11ec-96d6-8e557beca7ad', '02217e82-a77e-11ec-96d6-8e557beca7ad', '通用表单简单示例', 10, 15, '{\"formRef\":\"elForm\",\"formModel\":\"formData\",\"size\":\"medium\",\"labelPosition\":\"right\",\"labelWidth\":100,\"formRules\":\"rules\",\"gutter\":15,\"disabled\":false,\"span\":24,\"formBtns\":true}', '[\"{\\\"__config__\\\":{\\\"label\\\":\\\"开始时间\\\",\\\"tag\\\":\\\"el-date-picker\\\",\\\"tagIcon\\\":\\\"date\\\",\\\"defaultValue\\\":null,\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"span\\\":24,\\\"layout\\\":\\\"colFormItem\\\",\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/date-picker\\\",\\\"formId\\\":101,\\\"renderKey\\\":\\\"1011647692195671\\\"},\\\"placeholder\\\":\\\"请选择开始时间\\\",\\\"type\\\":\\\"date\\\",\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"disabled\\\":false,\\\"clearable\\\":true,\\\"format\\\":\\\"yyyy-MM-dd\\\",\\\"value-format\\\":\\\"yyyy-MM-dd\\\",\\\"readonly\\\":false,\\\"__vModel__\\\":\\\"field101\\\"}\",\"{\\\"__config__\\\":{\\\"label\\\":\\\"结束时间\\\",\\\"tag\\\":\\\"el-date-picker\\\",\\\"tagIcon\\\":\\\"date\\\",\\\"defaultValue\\\":null,\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"span\\\":24,\\\"layout\\\":\\\"colFormItem\\\",\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/date-picker\\\",\\\"formId\\\":102,\\\"renderKey\\\":\\\"1021647692207701\\\"},\\\"placeholder\\\":\\\"请选择结束时间\\\",\\\"type\\\":\\\"date\\\",\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"disabled\\\":false,\\\"clearable\\\":true,\\\"format\\\":\\\"yyyy-MM-dd\\\",\\\"value-format\\\":\\\"yyyy-MM-dd\\\",\\\"readonly\\\":false,\\\"__vModel__\\\":\\\"field102\\\"}\",\"{\\\"__config__\\\":{\\\"label\\\":\\\"请假类型\\\",\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"tag\\\":\\\"el-select\\\",\\\"tagIcon\\\":\\\"select\\\",\\\"layout\\\":\\\"colFormItem\\\",\\\"span\\\":24,\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/select\\\",\\\"formId\\\":103,\\\"renderKey\\\":\\\"1031647692231884\\\"},\\\"__slot__\\\":{\\\"options\\\":[{\\\"label\\\":\\\"事假\\\",\\\"value\\\":1},{\\\"label\\\":\\\"年假\\\",\\\"value\\\":2}]},\\\"placeholder\\\":\\\"请选择请假类型\\\",\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"clearable\\\":true,\\\"disabled\\\":false,\\\"filterable\\\":false,\\\"multiple\\\":false,\\\"__vModel__\\\":\\\"field103\\\"}\",\"{\\\"__config__\\\":{\\\"label\\\":\\\"原因\\\",\\\"labelWidth\\\":null,\\\"showLabel\\\":true,\\\"tag\\\":\\\"el-input\\\",\\\"tagIcon\\\":\\\"textarea\\\",\\\"required\\\":false,\\\"layout\\\":\\\"colFormItem\\\",\\\"span\\\":24,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/input\\\",\\\"formId\\\":105,\\\"renderKey\\\":\\\"1051647692319768\\\"},\\\"type\\\":\\\"textarea\\\",\\\"placeholder\\\":\\\"请输入原因\\\",\\\"autosize\\\":{\\\"minRows\\\":4,\\\"maxRows\\\":4},\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"maxlength\\\":null,\\\"show-word-limit\\\":false,\\\"readonly\\\":false,\\\"disabled\\\":false,\\\"__vModel__\\\":\\\"field105\\\"}\"]', NULL, NULL, '1', '2022-03-19 21:14:26', '1', '2022-03-19 21:14:26', b'0', 1); COMMIT; -- ---------------------------- @@ -234,7 +236,7 @@ CREATE TABLE `bpm_process_instance_ext` ( `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=199 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流的流程实例的拓展'; +) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流的流程实例的拓展'; -- ---------------------------- -- Records of bpm_process_instance_ext @@ -357,6 +359,7 @@ INSERT INTO `bpm_process_instance_ext` VALUES (194, 1, 'eeee', 'b243fa82-7c06-11 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-02-19 17:29:20', b'0', 1); 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-02-19 17:29:20', b'0', 1); INSERT INTO `bpm_process_instance_ext` VALUES (198, 1, 'flowable测试', 'c964c377-97ed-11ec-a2b9-862bc1a4a054', 'flowable_01:1:c0bb5b36-97ed-11ec-a2b9-862bc1a4a054', '1', 2, 2, '2022-02-28 00:53:35', '{\"field121\":\"AAA\",\"field122\":[1]}', '1', '2022-02-28 00:53:28', '1', '2022-02-28 00:53:35', b'0', 1); +INSERT INTO `bpm_process_instance_ext` VALUES (199, 1, '通用表单', '6be9f198-a787-11ec-96d6-8e557beca7ad', 'common-form:1:7fdfc407-a786-11ec-96d6-8e557beca7ad', '1', 2, 2, '2022-03-19 22:16:00', '{\"field101\":\"2022-03-16\",\"field102\":\"2022-03-18\",\"field103\":1,\"field105\":\"生病了\"}', '1', '2022-03-19 21:21:01', '114', '2022-03-19 22:16:00', b'0', 1); COMMIT; -- ---------------------------- @@ -377,7 +380,7 @@ CREATE TABLE `bpm_task_assign_rule` ( `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=183 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Bpm 任务规则表'; +) ENGINE=InnoDB AUTO_INCREMENT=187 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Bpm 任务规则表'; -- ---------------------------- -- Records of bpm_task_assign_rule @@ -526,6 +529,10 @@ INSERT INTO `bpm_task_assign_rule` VALUES (179, 'e4a1a1ef-7628-11ec-8477-a2380e7 INSERT INTO `bpm_task_assign_rule` VALUES (180, 'e4a1a1ef-7628-11ec-8477-a2380e71991a', 'oa_leave:5:004b710b-7b8a-11ec-8ef0-acde48001122', 'task-21', 30, '[1]', '1', '2022-01-22 21:48:38', '1', '2022-02-19 17:29:26', b'0', 1); INSERT INTO `bpm_task_assign_rule` VALUES (181, '4b4909d8-97e7-11ec-8e20-862bc1a4a054', '', 'task01', 50, '[10]', '1', '2022-02-28 00:53:09', '1', '2022-02-28 00:53:09', b'0', 1); INSERT INTO `bpm_task_assign_rule` VALUES (182, '4b4909d8-97e7-11ec-8e20-862bc1a4a054', 'flowable_01:1:c0bb5b36-97ed-11ec-a2b9-862bc1a4a054', 'task01', 50, '[10]', '1', '2022-02-28 00:53:14', '1', '2022-02-28 00:53:14', b'0', 1); +INSERT INTO `bpm_task_assign_rule` VALUES (183, '02217e82-a77e-11ec-96d6-8e557beca7ad', '', 'Activity_06rmtz9', 50, '[20]', '1', '2022-03-19 20:58:24', '1', '2022-03-19 20:58:24', b'0', 1); +INSERT INTO `bpm_task_assign_rule` VALUES (184, '02217e82-a77e-11ec-96d6-8e557beca7ad', '', 'Activity_1hxzcyl', 22, '[3]', '1', '2022-03-19 20:59:35', '1', '2022-03-19 20:59:35', b'0', 1); +INSERT INTO `bpm_task_assign_rule` VALUES (185, '02217e82-a77e-11ec-96d6-8e557beca7ad', 'common-form:1:7fdfc407-a786-11ec-96d6-8e557beca7ad', 'Activity_06rmtz9', 50, '[20]', '1', '2022-03-19 21:14:26', '1', '2022-03-19 21:14:26', b'0', 1); +INSERT INTO `bpm_task_assign_rule` VALUES (186, '02217e82-a77e-11ec-96d6-8e557beca7ad', 'common-form:1:7fdfc407-a786-11ec-96d6-8e557beca7ad', 'Activity_1hxzcyl', 22, '[3]', '1', '2022-03-19 21:14:26', '1', '2022-03-19 21:14:26', b'0', 1); COMMIT; -- ---------------------------- @@ -549,7 +556,7 @@ CREATE TABLE `bpm_task_ext` ( `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=211 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流的流程任务的拓展表'; +) ENGINE=InnoDB AUTO_INCREMENT=213 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流的流程任务的拓展表'; -- ---------------------------- -- Records of bpm_task_ext @@ -685,6 +692,8 @@ INSERT INTO `bpm_task_ext` VALUES (206, 1, '1.2', 'ee7cbc97-7c07-11ec-a41d-acde4 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-02-19 17:29:32', b'0', 1); 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-02-19 17:29:32', b'0', 1); INSERT INTO `bpm_task_ext` VALUES (210, 1, 'task01', 'c97146a4-97ed-11ec-a2b9-862bc1a4a054', 2, '嗯嗯嗯', '2022-02-28 00:53:35', 'c964c377-97ed-11ec-a2b9-862bc1a4a054', 'flowable_01:1:c0bb5b36-97ed-11ec-a2b9-862bc1a4a054', '1', '2022-02-28 00:53:28', '1', '2022-02-28 00:53:35', b'0', 1); +INSERT INTO `bpm_task_ext` VALUES (211, 104, '部门领导审批', '6bf71106-a787-11ec-96d6-8e557beca7ad', 2, '关注【芋道源码】公众号', '2022-03-19 22:00:45', '6be9f198-a787-11ec-96d6-8e557beca7ad', 'common-form:1:7fdfc407-a786-11ec-96d6-8e557beca7ad', '1', '2022-03-19 21:21:02', '104', '2022-03-19 22:00:45', b'0', 1); +INSERT INTO `bpm_task_ext` VALUES (212, 114, 'HR 审批', 'f8beb356-a78c-11ec-bf87-8e557beca7ad', 2, '不错!', '2022-03-19 22:16:00', '6be9f198-a787-11ec-96d6-8e557beca7ad', 'common-form:1:7fdfc407-a786-11ec-96d6-8e557beca7ad', '104', '2022-03-19 22:00:45', '114', '2022-03-19 22:16:00', b'0', 1); COMMIT; -- ---------------------------- @@ -1175,7 +1184,7 @@ CREATE TABLE `infra_api_error_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=299 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统异常日志'; +) ENGINE=InnoDB AUTO_INCREMENT=323 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统异常日志'; -- ---------------------------- -- Records of infra_api_error_log @@ -1250,6 +1259,30 @@ INSERT INTO `infra_api_error_log` VALUES (295, '', 1, 2, 'yudao-admin-server', ' INSERT INTO `infra_api_error_log` VALUES (296, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/test-demo/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-11 00:31:39', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/test/TestDemoMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM infra_test_demo WHERE deleted = 0\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist', 'MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/test/TestDemoMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM infra_test_demo WHERE deleted = 0\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy132.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy257.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy257.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.test.TestDemoMapper.selectPage(TestDemoMapper.java:22)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy257.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.test.TestDemoServiceImpl.getTestDemoPage(TestDemoServiceImpl.java:77)\n at cn.iocoder.yudao.module.infra.service.test.TestDemoServiceImpl$$FastClassBySpringCGLIB$$87e06bb3.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.test.TestDemoServiceImpl$$EnhancerBySpringCGLIB$$bb38d6a8.getTestDemoPage()\n at cn.iocoder.yudao.module.infra.controller.admin.test.TestDemoController.getTestDemoPage(TestDemoController.java:81)\n at cn.iocoder.yudao.module.infra.controller.admin.test.TestDemoController$$FastClassBySpringCGLIB$$a44aec12.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.GeneratedMethodAccessor316.invoke(Unknown Source)\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.module.infra.controller.admin.test.TestDemoController$$EnhancerBySpringCGLIB$$285fe62e.getTestDemoPage()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor198.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor285.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:141)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:75)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\n at sun.reflect.GeneratedMethodAccessor281.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 189 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-11 00:31:39', NULL, '2022-03-11 00:31:39', b'0', 1); INSERT INTO `infra_api_error_log` VALUES (297, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/codegen/table/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-11 00:31:41', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM tool_codegen_table WHERE deleted = 0 AND tenant_id = 1\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'', 'MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM tool_codegen_table WHERE deleted = 0 AND tenant_id = 1\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy132.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper.selectPage(CodegenTableMapper.java:19)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.getCodegenTablePage(CodegenServiceImpl.java:229)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl$$FastClassBySpringCGLIB$$6152dfac.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.infra.service.codegen.CodegenServiceImpl$$EnhancerBySpringCGLIB$$9a105fba.getCodegenTablePage()\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.getCodeGenTablePage(CodegenController.java:72)\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController$$FastClassBySpringCGLIB$$8f5d07f9.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.GeneratedMethodAccessor316.invoke(Unknown Source)\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.module.infra.controller.admin.codegen.CodegenController$$EnhancerBySpringCGLIB$$7d976243.getCodeGenTablePage()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor198.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor285.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:141)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:75)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\n at sun.reflect.GeneratedMethodAccessor281.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 183 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-11 00:31:41', NULL, '2022-03-11 00:31:41', b'0', 1); INSERT INTO `infra_api_error_log` VALUES (298, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/codegen/table/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-11 00:35:08', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM tool_codegen_table WHERE deleted = 0 AND tenant_id = 1\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist', 'MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM tool_codegen_table WHERE deleted = 0 AND tenant_id = 1\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy132.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper.selectPage(CodegenTableMapper.java:19)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.getCodegenTablePage(CodegenServiceImpl.java:229)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl$$FastClassBySpringCGLIB$$6152dfac.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.infra.service.codegen.CodegenServiceImpl$$EnhancerBySpringCGLIB$$8c6c6e0d.getCodegenTablePage()\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.getCodeGenTablePage(CodegenController.java:72)\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController$$FastClassBySpringCGLIB$$8f5d07f9.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.codegen.CodegenController$$EnhancerBySpringCGLIB$$eff51984.getCodeGenTablePage()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor254.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor253.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:141)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:75)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 184 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-11 00:35:08', NULL, '2022-03-11 00:35:08', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (299, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-15 00:21:05', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT id, config_id, path, `type`, url, size, content, create_time, update_time, creator, updater, deleted FROM infra_file WHERE deleted = 0 ORDER BY create_time DESC LIMIT ?\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'', 'MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT id, config_id, path, `type`, url, size, content, create_time, update_time, creator, updater, deleted FROM infra_file WHERE deleted = 0 ORDER BY create_time DESC LIMIT ?\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy136.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy187.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy187.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.file.FileMapper.selectPage(FileMapper.java:19)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy187.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.file.FileServiceImpl.getFilePage(FileServiceImpl.java:33)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController.getFilePage(FileController.java:82)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController$$FastClassBySpringCGLIB$$2e43158f.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileController$$EnhancerBySpringCGLIB$$7dddbafd.getFilePage()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor262.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor261.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\n at sun.reflect.GeneratedMethodAccessor255.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 180 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-15 00:21:05', NULL, '2022-03-15 00:21:05', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (300, '', 1, 2, 'yudao-admin-server', 'POST', '/admin-api/infra/file-config/create', '{\"query\":{},\"body\":\"{\\n \\\"name\\\": \\\"本地\\\",\\n \\\"remark\\\": \\\"\\\",\\n \\\"storage\\\": 20,\\n \\\"config\\\": {\\n\\n }\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', '2022-03-15 19:49:57', 'org.springframework.dao.DataIntegrityViolationException', 'DataIntegrityViolationException: \n### Error updating database. Cause: java.sql.SQLException: Field \'master\' doesn\'t have a default value\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileConfigMapper.java (best guess)\n### The error may involve cn.iocoder.yudao.module.infra.dal.mysql.file.FileConfigMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO infra_file_config (name, storage, remark, create_time, update_time, creator, updater) VALUES (?, ?, ?, ?, ?, ?, ?)\n### Cause: java.sql.SQLException: Field \'master\' doesn\'t have a default value\n; Field \'master\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'master\' doesn\'t have a default value', 'SQLException: Field \'master\' doesn\'t have a default value', 'org.springframework.dao.DataIntegrityViolationException: \n### Error updating database. Cause: java.sql.SQLException: Field \'master\' doesn\'t have a default value\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileConfigMapper.java (best guess)\n### The error may involve cn.iocoder.yudao.module.infra.dal.mysql.file.FileConfigMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO infra_file_config (name, storage, remark, create_time, update_time, creator, updater) VALUES (?, ?, ?, ?, ?, ?, ?)\n### Cause: java.sql.SQLException: Field \'master\' doesn\'t have a default value\n; Field \'master\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'master\' doesn\'t have a default value\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:251)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy136.insert(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy251.insert(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.createFileConfig(FileConfigServiceImpl.java:116)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$FastClassBySpringCGLIB$$b713a674.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$EnhancerBySpringCGLIB$$91f4eb4b.createFileConfig()\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigController.java:39)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$5b778e58.createFileConfig()\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:117)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: java.sql.SQLException: Field \'master\' doesn\'t have a default value\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor239.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)\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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.update(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)\n at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)\n at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)\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.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.update(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:181)\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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 180 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 251, 0, NULL, 0, NULL, '2022-03-15 19:49:57', NULL, '2022-03-15 19:49:57', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (301, '', 1, 2, 'yudao-admin-server', 'POST', '/admin-api/infra/file-config/create', '{\"query\":{},\"body\":\"{\\n \\\"name\\\": \\\"本地\\\",\\n \\\"remark\\\": \\\"\\\",\\n \\\"storage\\\": 20,\\n \\\"config\\\": {\\n\\n }\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', '2022-03-15 19:50:53', 'java.lang.RuntimeException', 'RuntimeException: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type, class cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig]: missing type id property \'@class\'\n at [Source: (String)\"{}\"; line: 1, column: 2]', 'InvalidTypeIdException: Could not resolve subtype of [simple type, class cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig]: missing type id property \'@class\'\n at [Source: (String)\"{}\"; line: 1, column: 2]', 'java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type, class cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig]: missing type id property \'@class\'\n at [Source: (String)\"{}\"; line: 1, column: 2]\n at cn.iocoder.yudao.framework.common.util.json.JsonUtils.parseObject(JsonUtils.java:63)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.parseAndSetConfig(FileConfigServiceImpl.java:139)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.createFileConfig(FileConfigServiceImpl.java:117)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$FastClassBySpringCGLIB$$b713a674.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$EnhancerBySpringCGLIB$$91f4eb4b.createFileConfig()\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigController.java:39)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$5b778e58.createFileConfig()\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:117)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type, class cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig]: missing type id property \'@class\'\n at [Source: (String)\"{}\"; line: 1, column: 2]\n at com.fasterxml.jackson.databind.exc.InvalidTypeIdException.from(InvalidTypeIdException.java:43)\n at com.fasterxml.jackson.databind.DeserializationContext.missingTypeIdException(DeserializationContext.java:1943)\n at com.fasterxml.jackson.databind.DeserializationContext.handleMissingTypeId(DeserializationContext.java:1456)\n at com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._handleMissingTypeId(TypeDeserializerBase.java:307)\n at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedUsingDefaultImpl(AsPropertyTypeDeserializer.java:180)\n at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:115)\n at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeWithType(BeanDeserializerBase.java:1292)\n at com.fasterxml.jackson.databind.deser.impl.TypeWrappedDeserializer.deserialize(TypeWrappedDeserializer.java:74)\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)\n at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)\n at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3548)\n at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3516)\n at cn.iocoder.yudao.framework.common.util.json.JsonUtils.parseObject(JsonUtils.java:60)\n ... 175 more\n', 'cn.iocoder.yudao.framework.common.util.json.JsonUtils', 'JsonUtils.java', 'parseObject', 63, 0, NULL, 0, NULL, '2022-03-15 19:50:53', NULL, '2022-03-15 19:50:53', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (302, '', 1, 2, 'yudao-admin-server', 'POST', '/admin-api/infra/file-config/create', '{\"query\":{},\"body\":\"{\\n \\\"name\\\": \\\"本地\\\",\\n \\\"remark\\\": \\\"\\\",\\n \\\"storage\\\": 20,\\n \\\"config\\\": {\\n\\n }\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', '2022-03-15 19:52:09', 'java.lang.RuntimeException', 'RuntimeException: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type, class cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig]: missing type id property \'@class\'\n at [Source: (String)\"{}\"; line: 1, column: 2]', 'InvalidTypeIdException: Could not resolve subtype of [simple type, class cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig]: missing type id property \'@class\'\n at [Source: (String)\"{}\"; line: 1, column: 2]', 'java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type, class cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig]: missing type id property \'@class\'\n at [Source: (String)\"{}\"; line: 1, column: 2]\n at cn.iocoder.yudao.framework.common.util.json.JsonUtils.parseObject(JsonUtils.java:63)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.parseAndSetConfig(FileConfigServiceImpl.java:139)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.createFileConfig(FileConfigServiceImpl.java:117)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$FastClassBySpringCGLIB$$b713a674.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$EnhancerBySpringCGLIB$$91f4eb4b.createFileConfig()\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigController.java:39)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$5b778e58.createFileConfig()\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:117)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type, class cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig]: missing type id property \'@class\'\n at [Source: (String)\"{}\"; line: 1, column: 2]\n at com.fasterxml.jackson.databind.exc.InvalidTypeIdException.from(InvalidTypeIdException.java:43)\n at com.fasterxml.jackson.databind.DeserializationContext.missingTypeIdException(DeserializationContext.java:1943)\n at com.fasterxml.jackson.databind.DeserializationContext.handleMissingTypeId(DeserializationContext.java:1456)\n at com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._handleMissingTypeId(TypeDeserializerBase.java:307)\n at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedUsingDefaultImpl(AsPropertyTypeDeserializer.java:180)\n at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:115)\n at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeWithType(BeanDeserializerBase.java:1292)\n at com.fasterxml.jackson.databind.deser.impl.TypeWrappedDeserializer.deserialize(TypeWrappedDeserializer.java:74)\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)\n at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)\n at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3548)\n at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3516)\n at cn.iocoder.yudao.framework.common.util.json.JsonUtils.parseObject(JsonUtils.java:60)\n ... 175 more\n', 'cn.iocoder.yudao.framework.common.util.json.JsonUtils', 'JsonUtils.java', 'parseObject', 63, 0, NULL, 0, NULL, '2022-03-15 19:52:09', NULL, '2022-03-15 19:52:09', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (303, '', 1, 2, 'yudao-admin-server', 'PUT', '/admin-api/infra/file-config/update', '{\"query\":{},\"body\":\"{\\n \\\"id\\\": 2,\\n \\\"name\\\": \\\"本地\\\",\\n \\\"remark\\\": \\\"\\\",\\n \\\"config\\\": {\\n \\\"accessKey\\\": \\\"LTAI5t5aV34DwxLioJGKbhSe\\\",\\n \\\"accessSecret\\\": \\\"k403OCIRFc8EgPxTxv7WRsSecpnlED\\\",\\n \\\"bucket\\\": \\\"yunai-aoteman\\\",\\n \\\"endpoint\\\": \\\"oss-cn-beijing.aliyuncs.com\\\",\\n \\\"region\\\": \\\"oss-cn-beijing\\\"\\n }\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', '2022-03-15 20:57:01', 'java.lang.NullPointerException', 'NullPointerException: null', 'NullPointerException: null', 'java.lang.NullPointerException\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.parseAndSetConfig(FileConfigServiceImpl.java:138)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.updateFileConfig(FileConfigServiceImpl.java:130)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$FastClassBySpringCGLIB$$b713a674.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$EnhancerBySpringCGLIB$$bfa2ea65.updateFileConfig()\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfig(FileConfigController.java:46)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$b97f6b6.updateFileConfig()\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.doPut(FrameworkServlet.java:920)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:684)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:117)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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.module.infra.service.file.FileConfigServiceImpl', 'FileConfigServiceImpl.java', 'parseAndSetConfig', 138, 0, NULL, 0, NULL, '2022-03-15 20:57:01', NULL, '2022-03-15 20:57:01', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (304, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file-config/test', '{\"query\":{\"id\":\"2\"},\"body\":\"\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', '2022-03-15 22:15:20', 'software.amazon.awssdk.services.s3.model.NoSuchBucketException', 'NoSuchBucketException: The specified bucket does not exist. (Service: S3, Status Code: 404, Request ID: 62309F77998B3E37395F1106)', 'NoSuchBucketException: The specified bucket does not exist. (Service: S3, Status Code: 404, Request ID: 62309F77998B3E37395F1106)', 'software.amazon.awssdk.services.s3.model.NoSuchBucketException: The specified bucket does not exist. (Service: S3, Status Code: 404, Request ID: 62309F77998B3E37395F1106)\n at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlPredicatedResponseHandler.handleErrorResponse(AwsXmlPredicatedResponseHandler.java:156)\n at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlPredicatedResponseHandler.handleResponse(AwsXmlPredicatedResponseHandler.java:108)\n at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlPredicatedResponseHandler.handle(AwsXmlPredicatedResponseHandler.java:85)\n at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlPredicatedResponseHandler.handle(AwsXmlPredicatedResponseHandler.java:43)\n at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler$Crc32ValidationResponseHandler.handle(AwsSyncClientHandler.java:95)\n at software.amazon.awssdk.core.internal.handler.BaseClientHandler.lambda$successTransformationResponseHandler$6(BaseClientHandler.java:233)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:40)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:30)\n at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:73)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:42)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:78)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:40)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:50)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:36)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:81)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:36)\n at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)\n at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:56)\n at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:36)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.executeWithTimer(ApiCallTimeoutTrackingStage.java:80)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:60)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:42)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:48)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:31)\n at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)\n at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:37)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:26)\n at software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient$RequestExecutionBuilderImpl.execute(AmazonSyncHttpClient.java:193)\n at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.invoke(BaseSyncClientHandler.java:103)\n at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.doExecute(BaseSyncClientHandler.java:167)\n at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lambda$execute$1(BaseSyncClientHandler.java:82)\n at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:175)\n at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:76)\n at software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45)\n at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:56)\n at software.amazon.awssdk.services.s3.DefaultS3Client.putObject(DefaultS3Client.java:9325)\n at cn.iocoder.yudao.framework.file.core.client.s3.S3FileClient.upload(S3FileClient.java:82)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.testFileConfig(FileConfigServiceImpl.java:213)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$FastClassBySpringCGLIB$$b713a674.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$EnhancerBySpringCGLIB$$c3b0d51c.testFileConfig()\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.testFileConfig(FileConfigController.java:86)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$9418357e.testFileConfig()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:117)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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', 'software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlPredicatedResponseHandler', 'AwsXmlPredicatedResponseHandler.java', 'handleErrorResponse', 156, 0, NULL, 0, NULL, '2022-03-15 22:15:20', NULL, '2022-03-15 22:15:20', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (305, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file-config/test', '{\"query\":{\"id\":\"2\"},\"body\":\"\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', '2022-03-15 22:16:28', 'software.amazon.awssdk.services.s3.model.NoSuchBucketException', 'NoSuchBucketException: The specified bucket does not exist. (Service: S3, Status Code: 404, Request ID: 62309FBB99F00D3831B22E84)', 'NoSuchBucketException: The specified bucket does not exist. (Service: S3, Status Code: 404, Request ID: 62309FBB99F00D3831B22E84)', 'software.amazon.awssdk.services.s3.model.NoSuchBucketException: The specified bucket does not exist. (Service: S3, Status Code: 404, Request ID: 62309FBB99F00D3831B22E84)\n at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlPredicatedResponseHandler.handleErrorResponse(AwsXmlPredicatedResponseHandler.java:156)\n at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlPredicatedResponseHandler.handleResponse(AwsXmlPredicatedResponseHandler.java:108)\n at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlPredicatedResponseHandler.handle(AwsXmlPredicatedResponseHandler.java:85)\n at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlPredicatedResponseHandler.handle(AwsXmlPredicatedResponseHandler.java:43)\n at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler$Crc32ValidationResponseHandler.handle(AwsSyncClientHandler.java:95)\n at software.amazon.awssdk.core.internal.handler.BaseClientHandler.lambda$successTransformationResponseHandler$6(BaseClientHandler.java:233)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:40)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:30)\n at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:73)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:42)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:78)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:40)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:50)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:36)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:81)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:36)\n at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)\n at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:56)\n at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:36)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.executeWithTimer(ApiCallTimeoutTrackingStage.java:80)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:60)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:42)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:48)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:31)\n at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)\n at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:37)\n at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:26)\n at software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient$RequestExecutionBuilderImpl.execute(AmazonSyncHttpClient.java:193)\n at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.invoke(BaseSyncClientHandler.java:103)\n at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.doExecute(BaseSyncClientHandler.java:167)\n at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lambda$execute$1(BaseSyncClientHandler.java:82)\n at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:175)\n at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:76)\n at software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45)\n at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:56)\n at software.amazon.awssdk.services.s3.DefaultS3Client.putObject(DefaultS3Client.java:9325)\n at cn.iocoder.yudao.framework.file.core.client.s3.S3FileClient.upload(S3FileClient.java:82)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.testFileConfig(FileConfigServiceImpl.java:213)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$FastClassBySpringCGLIB$$b713a674.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$EnhancerBySpringCGLIB$$c3b0d51c.testFileConfig()\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.testFileConfig(FileConfigController.java:86)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$9418357e.testFileConfig()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:117)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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', 'software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlPredicatedResponseHandler', 'AwsXmlPredicatedResponseHandler.java', 'handleErrorResponse', 156, 0, NULL, 0, NULL, '2022-03-15 22:16:28', NULL, '2022-03-15 22:16:28', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (306, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file-config/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-15 22:38:21', 'org.springframework.web.util.NestedServletException', 'NestedServletException: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO.getPrimary()Ljava/lang/Boolean;', 'NoSuchMethodError: cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO.getPrimary()Ljava/lang/Boolean;', 'org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO.getPrimary()Ljava/lang/Boolean;\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1082)\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: java.lang.NoSuchMethodError: cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO.getPrimary()Ljava/lang/Boolean;\n at cn.iocoder.yudao.module.infra.convert.file.FileConfigConvertImpl.convert(FileConfigConvertImpl.java:61)\n at cn.iocoder.yudao.module.infra.convert.file.FileConfigConvertImpl.convertList(FileConfigConvertImpl.java:75)\n at cn.iocoder.yudao.module.infra.convert.file.FileConfigConvertImpl.convertPage(FileConfigConvertImpl.java:89)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.getFileConfigPage(FileConfigController.java:79)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.GeneratedMethodAccessor305.invoke(Unknown Source)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$67a26040.getFileConfigPage()\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 ... 122 more\n', 'org.springframework.web.servlet.DispatcherServlet', 'DispatcherServlet.java', 'doDispatch', 1082, 0, NULL, 0, NULL, '2022-03-15 22:38:21', NULL, '2022-03-15 22:38:21', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (307, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file-config/test', '{\"query\":{\"id\":\"7\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-16 00:13:42', 'java.lang.NullPointerException', 'NullPointerException: null', 'NullPointerException: null', 'java.lang.NullPointerException\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.testFileConfig(FileConfigServiceImpl.java:230)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$FastClassBySpringCGLIB$$b713a674.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$EnhancerBySpringCGLIB$$f9a97de4.testFileConfig()\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.testFileConfig(FileConfigController.java:86)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.GeneratedMethodAccessor298.invoke(Unknown Source)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$69282b6b.testFileConfig()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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.module.infra.service.file.FileConfigServiceImpl', 'FileConfigServiceImpl.java', 'testFileConfig', 230, 0, NULL, 0, NULL, '2022-03-16 00:13:42', NULL, '2022-03-16 00:13:42', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (308, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-16 00:22:01', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT id, config_id, path, `type`, url, size, content, create_time, update_time, creator, updater, deleted FROM infra_file WHERE deleted = 0 ORDER BY create_time DESC LIMIT ?\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'', 'MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT id, config_id, path, `type`, url, size, content, create_time, update_time, creator, updater, deleted FROM infra_file WHERE deleted = 0 ORDER BY create_time DESC LIMIT ?\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy136.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy187.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy187.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.file.FileMapper.selectPage(FileMapper.java:19)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy187.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.file.FileServiceImpl.getFilePage(FileServiceImpl.java:33)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController.getFilePage(FileController.java:82)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController$$FastClassBySpringCGLIB$$2e43158f.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.GeneratedMethodAccessor298.invoke(Unknown Source)\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.module.infra.controller.admin.file.FileController$$EnhancerBySpringCGLIB$$1ea8de45.getFilePage()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor236.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor240.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\n at sun.reflect.GeneratedMethodAccessor247.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 179 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-16 00:22:01', NULL, '2022-03-16 00:22:01', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (309, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-16 21:27:26', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT id, config_id, path, `type`, url, size, content, create_time, update_time, creator, updater, deleted FROM infra_file WHERE deleted = 0 ORDER BY create_time DESC LIMIT ?\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'', 'MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT id, config_id, path, `type`, url, size, content, create_time, update_time, creator, updater, deleted FROM infra_file WHERE deleted = 0 ORDER BY create_time DESC LIMIT ?\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy136.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy187.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy187.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.file.FileMapper.selectPage(FileMapper.java:19)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy187.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.file.FileServiceImpl.getFilePage(FileServiceImpl.java:33)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController.getFilePage(FileController.java:82)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController$$FastClassBySpringCGLIB$$2e43158f.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileController$$EnhancerBySpringCGLIB$$12dedf82.getFilePage()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor243.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor242.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 180 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-16 21:27:26', NULL, '2022-03-16 21:27:26', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (310, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file-config/test', '{\"query\":{\"id\":\"4\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-16 21:29:08', 'java.lang.NullPointerException', 'NullPointerException: null', 'NullPointerException: null', 'java.lang.NullPointerException\n at cn.iocoder.yudao.framework.file.core.client.db.DBFileClient.upload(DBFileClient.java:25)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.testFileConfig(FileConfigServiceImpl.java:233)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$FastClassBySpringCGLIB$$b713a674.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$EnhancerBySpringCGLIB$$7417e9cf.testFileConfig()\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.testFileConfig(FileConfigController.java:86)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$5d5e2ca8.testFileConfig()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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.framework.file.core.client.db.DBFileClient', 'DBFileClient.java', 'upload', 25, 0, NULL, 0, NULL, '2022-03-16 21:29:08', NULL, '2022-03-16 21:29:08', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (311, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file-config/test', '{\"query\":{\"id\":\"4\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-16 21:31:39', 'java.lang.NullPointerException', 'NullPointerException: null', 'NullPointerException: null', 'java.lang.NullPointerException\n at cn.iocoder.yudao.framework.file.core.client.db.DBFileClient.upload(DBFileClient.java:25)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.testFileConfig(FileConfigServiceImpl.java:233)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$FastClassBySpringCGLIB$$b713a674.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$EnhancerBySpringCGLIB$$4de7e65.testFileConfig()\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.testFileConfig(FileConfigController.java:86)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$910f7e7d.testFileConfig()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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.framework.file.core.client.db.DBFileClient', 'DBFileClient.java', 'upload', 25, 0, NULL, 0, NULL, '2022-03-16 21:31:39', NULL, '2022-03-16 21:31:39', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (312, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file-config/test', '{\"query\":{\"id\":\"4\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-16 21:33:18', 'java.lang.NullPointerException', 'NullPointerException: null', 'NullPointerException: null', 'java.lang.NullPointerException\n at cn.iocoder.yudao.framework.file.core.client.db.DBFileClient.upload(DBFileClient.java:25)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.testFileConfig(FileConfigServiceImpl.java:233)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$FastClassBySpringCGLIB$$b713a674.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$EnhancerBySpringCGLIB$$fc53e2ec.testFileConfig()\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.testFileConfig(FileConfigController.java:86)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$108593ee.testFileConfig()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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.framework.file.core.client.db.DBFileClient', 'DBFileClient.java', 'upload', 25, 0, NULL, 0, NULL, '2022-03-16 21:33:18', NULL, '2022-03-16 21:33:18', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (313, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file-config/test', '{\"query\":{\"id\":\"4\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-16 21:47:47', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentMapper.java (best guess)\n### The error may involve cn.iocoder.yudao.module.infra.dal.mysql.file.FileContentMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO infra_file_content (id, config_id, path, content, create_time, update_time, creator, updater) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'', 'MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentMapper.java (best guess)\n### The error may involve cn.iocoder.yudao.module.infra.dal.mysql.file.FileContentMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO infra_file_content (id, config_id, path, content, create_time, update_time, creator, updater) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy136.insert(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy264.insert(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.file.FileContentDAOImpl.insert(FileContentDAOImpl.java:19)\n at cn.iocoder.yudao.module.infra.dal.mysql.file.FileContentDAOImpl$$FastClassBySpringCGLIB$$24b92b66.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.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)\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.infra.dal.mysql.file.FileContentDAOImpl$$EnhancerBySpringCGLIB$$461e55ff.insert()\n at cn.iocoder.yudao.framework.file.core.client.db.DBFileClient.upload(DBFileClient.java:25)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.testFileConfig(FileConfigServiceImpl.java:233)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$FastClassBySpringCGLIB$$b713a674.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$EnhancerBySpringCGLIB$$432275d2.testFileConfig()\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.testFileConfig(FileConfigController.java:86)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$b629df62.testFileConfig()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'config_id\' in \'field list\'\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\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.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)\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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.update(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)\n at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)\n at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)\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.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.update(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:181)\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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 191 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-16 21:47:47', NULL, '2022-03-16 21:47:47', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (314, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file-config/test', '{\"query\":{\"id\":\"4\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-16 21:49:02', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentMapper.java (best guess)\n### The error may involve cn.iocoder.yudao.module.infra.dal.mysql.file.FileContentMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO infra_file_content (id, config_id, path, content, create_time, update_time, creator, updater) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'', 'MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentMapper.java (best guess)\n### The error may involve cn.iocoder.yudao.module.infra.dal.mysql.file.FileContentMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO infra_file_content (id, config_id, path, content, create_time, update_time, creator, updater) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy136.insert(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy264.insert(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.file.FileContentDAOImpl.insert(FileContentDAOImpl.java:19)\n at cn.iocoder.yudao.module.infra.dal.mysql.file.FileContentDAOImpl$$FastClassBySpringCGLIB$$24b92b66.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.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)\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.infra.dal.mysql.file.FileContentDAOImpl$$EnhancerBySpringCGLIB$$461e55ff.insert()\n at cn.iocoder.yudao.framework.file.core.client.db.DBFileClient.upload(DBFileClient.java:25)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.testFileConfig(FileConfigServiceImpl.java:233)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$FastClassBySpringCGLIB$$b713a674.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$EnhancerBySpringCGLIB$$432275d2.testFileConfig()\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.testFileConfig(FileConfigController.java:86)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$b629df62.testFileConfig()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor237.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)\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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.update(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)\n at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)\n at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)\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.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.update(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:181)\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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 191 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-16 21:49:02', NULL, '2022-03-16 21:49:02', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (315, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file-config/test', '{\"query\":{\"id\":\"4\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-16 21:50:41', 'org.springframework.dao.DataIntegrityViolationException', 'DataIntegrityViolationException: \n### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column \'id\' cannot be null\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentMapper.java (best guess)\n### The error may involve cn.iocoder.yudao.module.infra.dal.mysql.file.FileContentMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO infra_file_content (id, config_id, path, content, create_time, update_time, creator, updater) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column \'id\' cannot be null\n; Column \'id\' cannot be null; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column \'id\' cannot be null', 'MySQLIntegrityConstraintViolationException: Column \'id\' cannot be null', 'org.springframework.dao.DataIntegrityViolationException: \n### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column \'id\' cannot be null\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentMapper.java (best guess)\n### The error may involve cn.iocoder.yudao.module.infra.dal.mysql.file.FileContentMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO infra_file_content (id, config_id, path, content, create_time, update_time, creator, updater) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column \'id\' cannot be null\n; Column \'id\' cannot be null; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column \'id\' cannot be null\n at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:87)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy136.insert(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy264.insert(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.file.FileContentDAOImpl.insert(FileContentDAOImpl.java:19)\n at cn.iocoder.yudao.module.infra.dal.mysql.file.FileContentDAOImpl$$FastClassBySpringCGLIB$$24b92b66.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.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)\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.infra.dal.mysql.file.FileContentDAOImpl$$EnhancerBySpringCGLIB$$461e55ff.insert()\n at cn.iocoder.yudao.framework.file.core.client.db.DBFileClient.upload(DBFileClient.java:25)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl.testFileConfig(FileConfigServiceImpl.java:233)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$FastClassBySpringCGLIB$$b713a674.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.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.file.FileConfigServiceImpl$$EnhancerBySpringCGLIB$$432275d2.testFileConfig()\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.testFileConfig(FileConfigController.java:86)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController$$FastClassBySpringCGLIB$$1e844831.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileConfigController$$EnhancerBySpringCGLIB$$b629df62.testFileConfig()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column \'id\' cannot be null\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor237.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)\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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.update(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)\n at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)\n at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)\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.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.update(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:181)\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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 191 more\n', 'org.springframework.jdbc.support.SQLExceptionSubclassTranslator', 'SQLExceptionSubclassTranslator.java', 'doTranslate', 87, 0, NULL, 0, NULL, '2022-03-16 21:50:41', NULL, '2022-03-16 21:50:41', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (316, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-16 22:33:04', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT id, config_id, path, url, `type`, size, create_time, update_time, creator, updater, deleted FROM infra_file WHERE deleted = 0 ORDER BY create_time DESC LIMIT ?\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'', 'MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT id, config_id, path, url, `type`, size, create_time, update_time, creator, updater, deleted FROM infra_file WHERE deleted = 0 ORDER BY create_time DESC LIMIT ?\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy136.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy197.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy197.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.file.FileMapper.selectPage(FileMapper.java:19)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy197.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.file.FileServiceImpl.getFilePage(FileServiceImpl.java:34)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController.getFilePage(FileController.java:82)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController$$FastClassBySpringCGLIB$$2e43158f.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileController$$EnhancerBySpringCGLIB$$32fbae04.getFilePage()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor248.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor247.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 180 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-16 22:33:04', NULL, '2022-03-16 22:33:04', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (317, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-16 22:33:11', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT id, config_id, path, url, `type`, size, create_time, update_time, creator, updater, deleted FROM infra_file WHERE deleted = 0 ORDER BY create_time DESC LIMIT ?\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'', 'MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT id, config_id, path, url, `type`, size, create_time, update_time, creator, updater, deleted FROM infra_file WHERE deleted = 0 ORDER BY create_time DESC LIMIT ?\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy136.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy197.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy197.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.file.FileMapper.selectPage(FileMapper.java:19)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy197.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.file.FileServiceImpl.getFilePage(FileServiceImpl.java:34)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController.getFilePage(FileController.java:82)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController$$FastClassBySpringCGLIB$$2e43158f.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileController$$EnhancerBySpringCGLIB$$32fbae04.getFilePage()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor248.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor247.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 180 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-16 22:33:11', NULL, '2022-03-16 22:33:11', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (318, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-16 22:37:32', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT id, config_id, path, url, `type`, size, create_time, update_time, creator, updater, deleted FROM infra_file WHERE deleted = 0 ORDER BY create_time DESC LIMIT ?\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'', 'MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/file/FileMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT id, config_id, path, url, `type`, size, create_time, update_time, creator, updater, deleted FROM infra_file WHERE deleted = 0 ORDER BY create_time DESC LIMIT ?\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy136.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy197.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy197.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.file.FileMapper.selectPage(FileMapper.java:19)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy197.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.file.FileServiceImpl.getFilePage(FileServiceImpl.java:34)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController.getFilePage(FileController.java:82)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController$$FastClassBySpringCGLIB$$2e43158f.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileController$$EnhancerBySpringCGLIB$$a7a9ae3.getFilePage()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'path\' in \'field list\'\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\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.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 180 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-16 22:37:32', NULL, '2022-03-16 22:37:32', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (319, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/file/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-16 22:45:18', 'java.lang.NumberFormatException', 'NumberFormatException: For input string: \"b7de3474-3805-4e09-80e3-185f20c31a74\"', 'NumberFormatException: For input string: \"b7de3474-3805-4e09-80e3-185f20c31a74\"', 'java.lang.NumberFormatException: For input string: \"b7de3474-3805-4e09-80e3-185f20c31a74\"\n at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)\n at java.lang.Long.parseLong(Long.java:589)\n at java.lang.Long.parseLong(Long.java:631)\n at cn.iocoder.yudao.module.infra.convert.file.FileConvertImpl.convert(FileConvertImpl.java:26)\n at cn.iocoder.yudao.module.infra.convert.file.FileConvertImpl.fileDOListToFileRespVOList(FileConvertImpl.java:58)\n at cn.iocoder.yudao.module.infra.convert.file.FileConvertImpl.convertPage(FileConvertImpl.java:45)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController.getFilePage(FileController.java:83)\n at cn.iocoder.yudao.module.infra.controller.admin.file.FileController$$FastClassBySpringCGLIB$$2e43158f.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\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.module.infra.controller.admin.file.FileController$$EnhancerBySpringCGLIB$$993e9b6f.getFilePage()\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.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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', 'java.lang.NumberFormatException', 'NumberFormatException.java', 'forInputString', 65, 0, NULL, 0, NULL, '2022-03-16 22:45:18', NULL, '2022-03-16 22:45:18', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (320, '', 1, 2, 'yudao-admin-server', 'POST', '/admin-api/infra/codegen/create-list-from-db', '{\"query\":{\"tableNames\":\"system_role\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-18 22:25:12', 'org.springframework.dao.DataIntegrityViolationException', 'DataIntegrityViolationException: \n### Error updating database. Cause: java.sql.SQLException: Field \'table_id\' doesn\'t have a default value\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenColumnMapper.java (best guess)\n### The error may involve cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenColumnMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO infra_codegen_column (column_name, column_type, column_comment, nullable, primary_key, auto_increment, ordinal_position, java_type, java_field, create_operation, update_operation, list_operation, list_operation_condition, list_operation_result, html_type, create_time, update_time, creator, updater) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n### Cause: java.sql.SQLException: Field \'table_id\' doesn\'t have a default value\n; Field \'table_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'table_id\' doesn\'t have a default value', 'SQLException: Field \'table_id\' doesn\'t have a default value', 'org.springframework.dao.DataIntegrityViolationException: \n### Error updating database. Cause: java.sql.SQLException: Field \'table_id\' doesn\'t have a default value\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenColumnMapper.java (best guess)\n### The error may involve cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenColumnMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO infra_codegen_column (column_name, column_type, column_comment, nullable, primary_key, auto_increment, ordinal_position, java_type, java_field, create_operation, update_operation, list_operation, list_operation_condition, list_operation_result, html_type, create_time, update_time, creator, updater) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n### Cause: java.sql.SQLException: Field \'table_id\' doesn\'t have a default value\n; Field \'table_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'table_id\' doesn\'t have a default value\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:251)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy136.insert(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy253.insert(Unknown Source)\n at java.util.ArrayList.forEach(ArrayList.java:1249)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.insertBatch(BaseMapperX.java:80)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy253.insertBatch(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.createCodegen0(CodegenServiceImpl.java:86)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.createCodegen(CodegenServiceImpl.java:114)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.lambda$createCodegenListFromDB$0(CodegenServiceImpl.java:122)\n at java.util.ArrayList.forEach(ArrayList.java:1249)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.createCodegenListFromDB(CodegenServiceImpl.java:122)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl$$FastClassBySpringCGLIB$$6152dfac.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.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.module.infra.service.codegen.CodegenServiceImpl$$EnhancerBySpringCGLIB$$f180be30.createCodegenListFromDB()\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(CodegenController.java:92)\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController$$FastClassBySpringCGLIB$$8f5d07f9.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.GeneratedMethodAccessor313.invoke(Unknown Source)\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.module.infra.controller.admin.codegen.CodegenController$$EnhancerBySpringCGLIB$$2551b00b.createCodegenListFromDB()\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: java.sql.SQLException: Field \'table_id\' doesn\'t have a default value\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor196.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)\n at sun.reflect.GeneratedMethodAccessor379.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.update(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)\n at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)\n at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)\n at sun.reflect.GeneratedMethodAccessor386.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.update(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:181)\n at sun.reflect.GeneratedMethodAccessor418.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 190 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 251, 0, NULL, 0, NULL, '2022-03-18 22:25:12', NULL, '2022-03-18 22:25:12', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (321, '', 1, 2, 'yudao-admin-server', 'POST', '/admin-api/infra/codegen/create-list-from-db', '{\"query\":{\"tableNames\":\"system_role\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-18 22:25:34', 'org.springframework.dao.DataIntegrityViolationException', 'DataIntegrityViolationException: \n### Error updating database. Cause: java.sql.SQLException: Field \'table_id\' doesn\'t have a default value\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenColumnMapper.java (best guess)\n### The error may involve cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenColumnMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO infra_codegen_column (column_name, column_type, column_comment, nullable, primary_key, auto_increment, ordinal_position, java_type, java_field, create_operation, update_operation, list_operation, list_operation_condition, list_operation_result, html_type, create_time, update_time, creator, updater) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n### Cause: java.sql.SQLException: Field \'table_id\' doesn\'t have a default value\n; Field \'table_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'table_id\' doesn\'t have a default value', 'SQLException: Field \'table_id\' doesn\'t have a default value', 'org.springframework.dao.DataIntegrityViolationException: \n### Error updating database. Cause: java.sql.SQLException: Field \'table_id\' doesn\'t have a default value\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenColumnMapper.java (best guess)\n### The error may involve cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenColumnMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO infra_codegen_column (column_name, column_type, column_comment, nullable, primary_key, auto_increment, ordinal_position, java_type, java_field, create_operation, update_operation, list_operation, list_operation_condition, list_operation_result, html_type, create_time, update_time, creator, updater) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n### Cause: java.sql.SQLException: Field \'table_id\' doesn\'t have a default value\n; Field \'table_id\' doesn\'t have a default value; nested exception is java.sql.SQLException: Field \'table_id\' doesn\'t have a default value\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:251)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy136.insert(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy253.insert(Unknown Source)\n at java.util.ArrayList.forEach(ArrayList.java:1249)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.insertBatch(BaseMapperX.java:80)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy253.insertBatch(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.createCodegen0(CodegenServiceImpl.java:86)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.createCodegen(CodegenServiceImpl.java:114)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.lambda$createCodegenListFromDB$0(CodegenServiceImpl.java:122)\n at java.util.ArrayList.forEach(ArrayList.java:1249)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.createCodegenListFromDB(CodegenServiceImpl.java:122)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl$$FastClassBySpringCGLIB$$6152dfac.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.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.module.infra.service.codegen.CodegenServiceImpl$$EnhancerBySpringCGLIB$$f180be30.createCodegenListFromDB()\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(CodegenController.java:92)\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController$$FastClassBySpringCGLIB$$8f5d07f9.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.GeneratedMethodAccessor313.invoke(Unknown Source)\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.module.infra.controller.admin.codegen.CodegenController$$EnhancerBySpringCGLIB$$2551b00b.createCodegenListFromDB()\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:102)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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)\nCaused by: java.sql.SQLException: Field \'table_id\' doesn\'t have a default value\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor196.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)\n at sun.reflect.GeneratedMethodAccessor379.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.update(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)\n at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)\n at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)\n at sun.reflect.GeneratedMethodAccessor386.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.update(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:181)\n at sun.reflect.GeneratedMethodAccessor418.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 190 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 251, 0, NULL, 0, NULL, '2022-03-18 22:25:34', NULL, '2022-03-18 22:25:34', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (322, '', 114, 2, 'yudao-admin-server', 'PUT', '/admin-api/bpm/task/approve', '{\"query\":{},\"body\":\"{\\\"id\\\":\\\"f8beb356-a78c-11ec-bf87-8e557beca7ad\\\",\\\"comment\\\":\\\"不错!\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-19 22:16:19', 'org.flowable.common.engine.api.FlowableOptimisticLockingException', 'FlowableOptimisticLockingException: Execution[ id \'6bee3762-a787-11ec-96d6-8e557beca7ad\' ] - activity \'Event_0g5w7ck\' - parent \'6be9f198-a787-11ec-96d6-8e557beca7ad\' was updated by another transaction concurrently', 'FlowableOptimisticLockingException: Execution[ id \'6bee3762-a787-11ec-96d6-8e557beca7ad\' ] - activity \'Event_0g5w7ck\' - parent \'6be9f198-a787-11ec-96d6-8e557beca7ad\' was updated by another transaction concurrently', 'org.flowable.common.engine.api.FlowableOptimisticLockingException: Execution[ id \'6bee3762-a787-11ec-96d6-8e557beca7ad\' ] - activity \'Event_0g5w7ck\' - parent \'6be9f198-a787-11ec-96d6-8e557beca7ad\' was updated by another transaction concurrently\n at org.flowable.common.engine.impl.db.DbSqlSession.flushUpdates(DbSqlSession.java:577)\n at org.flowable.common.engine.impl.db.DbSqlSession.flush(DbSqlSession.java:364)\n at org.flowable.common.engine.impl.interceptor.CommandContext.flushSessions(CommandContext.java:211)\n at org.flowable.common.engine.impl.interceptor.CommandContext.close(CommandContext.java:69)\n at org.flowable.common.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:107)\n at org.flowable.common.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:52)\n at org.flowable.common.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:30)\n at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:56)\n at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:51)\n at org.flowable.engine.impl.TaskServiceImpl.complete(TaskServiceImpl.java:217)\n at cn.iocoder.yudao.module.bpm.service.task.BpmTaskServiceImpl.approveTask(BpmTaskServiceImpl.java:182)\n at cn.iocoder.yudao.module.bpm.service.task.BpmTaskServiceImpl$$FastClassBySpringCGLIB$$5c73399a.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.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.module.bpm.service.task.BpmTaskServiceImpl$$EnhancerBySpringCGLIB$$f5855e16.approveTask()\n at cn.iocoder.yudao.module.bpm.controller.admin.task.BpmTaskController.approveTask(BpmTaskController.java:60)\n at cn.iocoder.yudao.module.bpm.controller.admin.task.BpmTaskController$$FastClassBySpringCGLIB$$5246e6e1.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:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.GeneratedMethodAccessor311.invoke(Unknown Source)\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.module.bpm.controller.admin.task.BpmTaskController$$EnhancerBySpringCGLIB$$ca26d53b.approveTask()\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.doPut(FrameworkServlet.java:920)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:684)\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:78)\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:111)\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.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\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:117)\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:117)\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:117)\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:117)\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:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\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:102)\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:102)\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:117)\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:117)\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:117)\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:117)\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:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\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:117)\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:117)\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:117)\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:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\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.flowable.common.engine.impl.db.DbSqlSession', 'DbSqlSession.java', 'flushUpdates', 577, 0, NULL, 0, NULL, '2022-03-19 22:16:19', NULL, '2022-03-19 22:16:19', b'0', 1); COMMIT; -- ---------------------------- @@ -1282,7 +1315,7 @@ CREATE TABLE `infra_codegen_column` ( `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=684 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代码生成表字段定义'; +) ENGINE=InnoDB AUTO_INCREMENT=804 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代码生成表字段定义'; -- ---------------------------- -- Records of infra_codegen_column @@ -1424,17 +1457,17 @@ INSERT INTO `infra_codegen_column` VALUES (645, 52, 'create_time', 'datetime', ' INSERT INTO `infra_codegen_column` VALUES (646, 52, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 27, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:11:32', '1', '2022-02-02 10:17:59', b'1'); INSERT INTO `infra_codegen_column` VALUES (647, 52, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 28, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 13:11:32', '1', '2022-02-02 10:17:59', b'1'); INSERT INTO `infra_codegen_column` VALUES (648, 52, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 29, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 13:11:32', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `infra_codegen_column` VALUES (649, 53, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); -INSERT INTO `infra_codegen_column` VALUES (650, 53, 'name', 'varchar(100)', '名字', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); -INSERT INTO `infra_codegen_column` VALUES (651, 53, 'status', 'tinyint', '状态', b'0', b'0', '0', 3, 'Integer', 'status', 'user_type', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); -INSERT INTO `infra_codegen_column` VALUES (652, 53, 'type', 'tinyint', '类型', b'0', b'0', '0', 4, 'Integer', 'type', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); -INSERT INTO `infra_codegen_column` VALUES (653, 53, 'category', 'tinyint', '分类', b'0', b'0', '0', 5, 'Integer', 'category', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); -INSERT INTO `infra_codegen_column` VALUES (654, 53, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); -INSERT INTO `infra_codegen_column` VALUES (655, 53, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); -INSERT INTO `infra_codegen_column` VALUES (656, 53, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); -INSERT INTO `infra_codegen_column` VALUES (657, 53, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); -INSERT INTO `infra_codegen_column` VALUES (658, 53, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); -INSERT INTO `infra_codegen_column` VALUES (659, 53, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_column` VALUES (649, 53, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 23:12:18', b'0'); +INSERT INTO `infra_codegen_column` VALUES (650, 53, 'name', 'varchar(100)', '名字', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 23:12:18', b'0'); +INSERT INTO `infra_codegen_column` VALUES (651, 53, 'status', 'tinyint', '状态', b'0', b'0', '0', 3, 'Integer', 'status', 'user_type', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 18:18:17', '1', '2022-03-11 23:12:18', b'0'); +INSERT INTO `infra_codegen_column` VALUES (652, 53, 'type', 'tinyint', '类型', b'0', b'0', '0', 4, 'Integer', 'type', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-02-02 18:18:17', '1', '2022-03-11 23:12:18', b'0'); +INSERT INTO `infra_codegen_column` VALUES (653, 53, 'category', 'tinyint', '分类', b'0', b'0', '0', 5, 'Integer', 'category', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 23:12:18', b'0'); +INSERT INTO `infra_codegen_column` VALUES (654, 53, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 23:12:18', b'0'); +INSERT INTO `infra_codegen_column` VALUES (655, 53, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 23:12:18', b'0'); +INSERT INTO `infra_codegen_column` VALUES (656, 53, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 18:18:17', '1', '2022-03-11 23:12:18', b'0'); +INSERT INTO `infra_codegen_column` VALUES (657, 53, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 23:12:18', b'0'); +INSERT INTO `infra_codegen_column` VALUES (658, 53, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 18:18:17', '1', '2022-03-11 23:12:18', b'0'); +INSERT INTO `infra_codegen_column` VALUES (659, 53, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 18:18:17', '1', '2022-03-11 23:12:18', b'0'); INSERT INTO `infra_codegen_column` VALUES (660, 54, 'id', 'bigint', '部门id', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); INSERT INTO `infra_codegen_column` VALUES (661, 54, 'name', 'varchar(30)', '部门名称', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); INSERT INTO `infra_codegen_column` VALUES (662, 54, 'parent_id', 'bigint', '父部门id', b'0', b'0', '0', 3, 'Long', 'parentId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); @@ -1459,6 +1492,126 @@ INSERT INTO `infra_codegen_column` VALUES (680, 55, 'create_time', 'datetime', ' INSERT INTO `infra_codegen_column` VALUES (681, 55, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 8, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); INSERT INTO `infra_codegen_column` VALUES (682, 55, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 9, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); INSERT INTO `infra_codegen_column` VALUES (683, 55, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 10, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); +INSERT INTO `infra_codegen_column` VALUES (684, 56, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-03-12 00:32:45', '1', '2022-03-11 16:37:48', b'1'); +INSERT INTO `infra_codegen_column` VALUES (685, 56, 'name', 'varchar(255)', '名字', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-03-12 00:32:45', '1', '2022-03-11 16:37:48', b'1'); +INSERT INTO `infra_codegen_column` VALUES (686, 56, 'description', 'varchar(512)', '描述', b'1', b'0', '0', 3, 'String', 'description', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 00:32:45', '1', '2022-03-11 16:37:48', b'1'); +INSERT INTO `infra_codegen_column` VALUES (687, 56, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 4, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 00:32:45', '1', '2022-03-11 16:37:48', b'1'); +INSERT INTO `infra_codegen_column` VALUES (688, 56, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 5, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-12 00:32:45', '1', '2022-03-11 16:37:48', b'1'); +INSERT INTO `infra_codegen_column` VALUES (689, 56, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 6, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 00:32:45', '1', '2022-03-11 16:37:48', b'1'); +INSERT INTO `infra_codegen_column` VALUES (690, 56, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 7, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-03-12 00:32:45', '1', '2022-03-11 16:37:48', b'1'); +INSERT INTO `infra_codegen_column` VALUES (691, 56, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 8, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-03-12 00:32:45', '1', '2022-03-11 16:37:48', b'1'); +INSERT INTO `infra_codegen_column` VALUES (692, 56, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 9, 'Long', 'tenantId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 00:32:45', '1', '2022-03-11 16:37:48', b'1'); +INSERT INTO `infra_codegen_column` VALUES (693, 57, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-03-12 00:43:23', '1', '2022-03-11 16:46:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (694, 57, 'name', 'varchar(255)', '名字', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-03-12 00:43:23', '1', '2022-03-11 16:46:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (695, 57, 'description', 'varchar(512)', '描述', b'1', b'0', '0', 3, 'String', 'description', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 00:43:23', '1', '2022-03-11 16:46:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (696, 57, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 4, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 00:43:23', '1', '2022-03-11 16:46:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (697, 57, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 5, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-12 00:43:23', '1', '2022-03-11 16:46:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (698, 57, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 6, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 00:43:23', '1', '2022-03-11 16:46:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (699, 57, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 7, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-03-12 00:43:23', '1', '2022-03-11 16:46:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (700, 57, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 8, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-03-12 00:43:23', '1', '2022-03-11 16:46:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (701, 57, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 9, 'Long', 'tenantId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 00:43:23', '1', '2022-03-11 16:46:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (702, 58, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-03-12 00:46:45', '1', '2022-03-11 17:07:22', b'1'); +INSERT INTO `infra_codegen_column` VALUES (703, 58, 'name', 'varchar(255)', '名字', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-03-12 00:46:45', '1', '2022-03-11 17:07:22', b'1'); +INSERT INTO `infra_codegen_column` VALUES (704, 58, 'description', 'varchar(512)', '描述', b'1', b'0', '0', 3, 'String', 'description', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 00:46:45', '1', '2022-03-11 17:07:22', b'1'); +INSERT INTO `infra_codegen_column` VALUES (705, 58, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 4, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 00:46:45', '1', '2022-03-11 17:07:22', b'1'); +INSERT INTO `infra_codegen_column` VALUES (706, 58, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 5, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-12 00:46:45', '1', '2022-03-11 17:07:22', b'1'); +INSERT INTO `infra_codegen_column` VALUES (707, 58, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 6, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 00:46:45', '1', '2022-03-11 17:07:22', b'1'); +INSERT INTO `infra_codegen_column` VALUES (708, 58, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 7, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-03-12 00:46:45', '1', '2022-03-11 17:07:22', b'1'); +INSERT INTO `infra_codegen_column` VALUES (709, 58, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 8, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-03-12 00:46:45', '1', '2022-03-11 17:07:22', b'1'); +INSERT INTO `infra_codegen_column` VALUES (710, 58, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 9, 'Long', 'tenantId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 00:46:45', '1', '2022-03-11 17:07:22', b'1'); +INSERT INTO `infra_codegen_column` VALUES (711, 58, 'status', 'tinyint', '状态', b'0', b'0', '0', 4, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-03-12 01:06:44', '1', '2022-03-11 17:07:22', b'1'); +INSERT INTO `infra_codegen_column` VALUES (712, 59, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-03-12 01:08:06', '1', '2022-03-12 14:47:50', b'0'); +INSERT INTO `infra_codegen_column` VALUES (713, 59, 'name', 'varchar(255)', '名字', b'0', b'0', '0', 2, 'String', 'name', '', '芋道', b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-03-12 01:08:06', '1', '2022-03-12 14:47:50', b'0'); +INSERT INTO `infra_codegen_column` VALUES (714, 59, 'description', 'varchar(512)', '描述', b'1', b'0', '0', 3, 'String', 'description', '', '我是个小组', b'1', b'1', b'0', '=', b'1', 'input', '1', '2022-03-12 01:08:06', '1', '2022-03-12 14:47:50', b'0'); +INSERT INTO `infra_codegen_column` VALUES (715, 59, 'status', 'tinyint', '状态', b'0', b'0', '0', 4, 'Integer', 'status', 'common_status', '0', b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-03-12 01:08:06', '1', '2022-03-12 14:47:50', b'0'); +INSERT INTO `infra_codegen_column` VALUES (716, 59, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 5, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 01:08:06', '1', '2022-03-12 14:47:50', b'0'); +INSERT INTO `infra_codegen_column` VALUES (717, 59, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 6, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-12 01:08:06', '1', '2022-03-12 14:47:50', b'0'); +INSERT INTO `infra_codegen_column` VALUES (718, 59, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 7, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 01:08:06', '1', '2022-03-12 14:47:50', b'0'); +INSERT INTO `infra_codegen_column` VALUES (719, 59, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 8, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-03-12 01:08:06', '1', '2022-03-12 14:47:50', b'0'); +INSERT INTO `infra_codegen_column` VALUES (720, 59, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 9, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-03-12 01:08:06', '1', '2022-03-12 14:47:50', b'0'); +INSERT INTO `infra_codegen_column` VALUES (721, 59, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 10, 'Long', 'tenantId', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 01:08:06', '1', '2022-03-12 14:47:50', b'0'); +INSERT INTO `infra_codegen_column` VALUES (722, 60, 'id', 'bigint', '请假表单主键', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (723, 60, 'user_id', 'bigint', '申请人的用户编号', b'0', b'0', '0', 2, 'Long', 'userId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (724, 60, 'type', 'tinyint', '请假类型', b'0', b'0', '0', 3, 'Integer', 'type', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (725, 60, 'reason', 'varchar(200)', '请假原因', b'0', b'0', '0', 4, 'String', 'reason', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (726, 60, 'start_time', 'datetime', '开始时间', b'0', b'0', '0', 5, 'Date', 'startTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (727, 60, 'end_time', 'datetime', '结束时间', b'0', b'0', '0', 6, 'Date', 'endTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (728, 60, 'day', 'tinyint', '请假天数', b'0', b'0', '0', 7, 'Integer', 'day', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (729, 60, 'result', 'tinyint', '请假结果', b'0', b'0', '0', 8, 'Integer', 'result', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (730, 60, 'process_instance_id', 'varchar(64)', '流程实例的编号', b'1', b'0', '0', 9, 'String', 'processInstanceId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (731, 60, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 10, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (732, 60, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 11, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (733, 60, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 12, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (734, 60, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 13, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (735, 60, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 14, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (736, 60, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 15, 'Long', 'tenantId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 14:56:05', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_column` VALUES (737, 61, 'id', 'bigint', '请假表单主键', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (738, 61, 'user_id', 'bigint', '申请人的用户编号', b'0', b'0', '0', 2, 'Long', 'userId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (739, 61, 'type', 'tinyint', '请假类型', b'0', b'0', '0', 3, 'Integer', 'type', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (740, 61, 'reason', 'varchar(200)', '请假原因', b'0', b'0', '0', 4, 'String', 'reason', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (741, 61, 'start_time', 'datetime', '开始时间', b'0', b'0', '0', 5, 'Date', 'startTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (742, 61, 'end_time', 'datetime', '结束时间', b'0', b'0', '0', 6, 'Date', 'endTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (743, 61, 'day', 'tinyint', '请假天数', b'0', b'0', '0', 7, 'Integer', 'day', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (744, 61, 'result', 'tinyint', '请假结果', b'0', b'0', '0', 8, 'Integer', 'result', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (745, 61, 'process_instance_id', 'varchar(64)', '流程实例的编号', b'1', b'0', '0', 9, 'String', 'processInstanceId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (746, 61, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 10, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (747, 61, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 11, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (748, 61, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 12, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (749, 61, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 13, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (750, 61, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 14, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (751, 61, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 15, 'Long', 'tenantId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 14:59:11', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (752, 62, 'id', 'bigint', '请假表单主键', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (753, 62, 'user_id', 'bigint', '申请人的用户编号', b'0', b'0', '0', 2, 'Long', 'userId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (754, 62, 'type', 'tinyint', '请假类型', b'0', b'0', '0', 3, 'Integer', 'type', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (755, 62, 'reason', 'varchar(200)', '请假原因', b'0', b'0', '0', 4, 'String', 'reason', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (756, 62, 'start_time', 'datetime', '开始时间', b'0', b'0', '0', 5, 'Date', 'startTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (757, 62, 'end_time', 'datetime', '结束时间', b'0', b'0', '0', 6, 'Date', 'endTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (758, 62, 'day', 'tinyint', '请假天数', b'0', b'0', '0', 7, 'Integer', 'day', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (759, 62, 'result', 'tinyint', '请假结果', b'0', b'0', '0', 8, 'Integer', 'result', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (760, 62, 'process_instance_id', 'varchar(64)', '流程实例的编号', b'1', b'0', '0', 9, 'String', 'processInstanceId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (761, 62, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 10, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (762, 62, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 11, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (763, 62, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 12, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (764, 62, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 13, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (765, 62, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 14, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (766, 62, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 15, 'Long', 'tenantId', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-12 15:01:28', '1', '2022-03-12 15:01:28', b'0'); +INSERT INTO `infra_codegen_column` VALUES (767, 63, 'id', 'int', '编号', b'0', b'1', '1', 1, 'Integer', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-03-15 00:22:52', '1', '2022-03-14 16:23:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (768, 63, 'name', 'varchar(63)', '配置名', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-03-15 00:22:52', '1', '2022-03-14 16:23:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (769, 63, 'storage', 'tinyint', '存储器', b'0', b'0', '0', 3, 'Integer', 'storage', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-15 00:22:52', '1', '2022-03-14 16:23:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (770, 63, 'remark', 'varchar(255)', '备注', b'1', b'0', '0', 4, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-15 00:22:52', '1', '2022-03-14 16:23:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (771, 63, 'primary', 'bit(1)', '是否为主配置', b'0', b'0', '0', 5, 'Boolean', 'primary', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-03-15 00:22:52', '1', '2022-03-14 16:23:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (772, 63, 'config', 'varchar(4096)', '存储配置', b'0', b'0', '0', 6, 'String', 'config', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-15 00:22:52', '1', '2022-03-14 16:23:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (773, 63, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-15 00:22:52', '1', '2022-03-14 16:23:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (774, 63, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-15 00:22:52', '1', '2022-03-14 16:23:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (775, 63, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-15 00:22:52', '1', '2022-03-14 16:23:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (776, 63, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-03-15 00:22:52', '1', '2022-03-14 16:23:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (777, 63, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-03-15 00:22:52', '1', '2022-03-14 16:23:33', b'1'); +INSERT INTO `infra_codegen_column` VALUES (778, 64, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', '1', b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-03-15 00:23:42', '1', '2022-03-15 22:51:20', b'0'); +INSERT INTO `infra_codegen_column` VALUES (779, 64, 'name', 'varchar(63)', '配置名', b'0', b'0', '0', 2, 'String', 'name', '', 'S3 - 阿里云', b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-03-15 00:23:42', '1', '2022-03-15 22:51:20', b'0'); +INSERT INTO `infra_codegen_column` VALUES (780, 64, 'storage', 'tinyint', '存储器', b'0', b'0', '0', 3, 'Integer', 'storage', 'infra_file_storage', '1', b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-03-15 00:23:42', '1', '2022-03-15 22:51:20', b'0'); +INSERT INTO `infra_codegen_column` VALUES (781, 64, 'remark', 'varchar(255)', '备注', b'1', b'0', '0', 4, 'String', 'remark', '', '我是备注', b'1', b'1', b'0', '=', b'1', 'input', '1', '2022-03-15 00:23:42', '1', '2022-03-15 22:51:20', b'0'); +INSERT INTO `infra_codegen_column` VALUES (782, 64, 'primary', 'bit(1)', '是否为主配置', b'0', b'0', '0', 5, 'Boolean', 'primary', '', NULL, b'1', b'1', b'0', '=', b'1', 'radio', '1', '2022-03-15 00:23:42', '1', '2022-03-15 22:51:20', b'0'); +INSERT INTO `infra_codegen_column` VALUES (783, 64, 'config', 'varchar(4096)', '存储配置', b'0', b'0', '0', 6, 'String', 'config', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '1', '2022-03-15 00:23:42', '1', '2022-03-15 22:51:20', b'0'); +INSERT INTO `infra_codegen_column` VALUES (784, 64, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-15 00:23:42', '1', '2022-03-15 22:51:20', b'0'); +INSERT INTO `infra_codegen_column` VALUES (785, 64, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-15 00:23:42', '1', '2022-03-15 22:51:20', b'0'); +INSERT INTO `infra_codegen_column` VALUES (786, 64, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-15 00:23:42', '1', '2022-03-15 22:51:20', b'0'); +INSERT INTO `infra_codegen_column` VALUES (787, 64, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-03-15 00:23:42', '1', '2022-03-15 22:51:20', b'0'); +INSERT INTO `infra_codegen_column` VALUES (788, 64, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-03-15 00:23:42', '1', '2022-03-15 22:51:20', b'0'); +INSERT INTO `infra_codegen_column` VALUES (789, 67, 'id', 'bigint', '角色ID', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (790, 67, 'name', 'varchar(30)', '角色名称', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (791, 67, 'code', 'varchar(100)', '角色权限字符串', b'0', b'0', '0', 3, 'String', 'code', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (792, 67, 'sort', 'int', '显示顺序', b'0', b'0', '0', 4, 'Integer', 'sort', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (793, 67, 'data_scope', 'tinyint', '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)', b'0', b'0', '0', 5, 'Integer', 'dataScope', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (794, 67, 'data_scope_dept_ids', 'varchar(500)', '数据范围(指定部门数组)', b'0', b'0', '0', 6, 'String', 'dataScopeDeptIds', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (795, 67, 'status', 'tinyint', '角色状态(0正常 1停用)', b'0', b'0', '0', 7, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (796, 67, 'type', 'tinyint', '角色类型', b'0', b'0', '0', 8, 'Integer', 'type', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (797, 67, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 9, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (798, 67, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 10, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (799, 67, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 11, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (800, 67, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 12, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (801, 67, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 13, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (802, 67, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 14, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); +INSERT INTO `infra_codegen_column` VALUES (803, 67, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 15, 'Long', 'tenantId', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-03-18 22:31:29', '1', '2022-03-18 22:31:29', b'0'); COMMIT; -- ---------------------------- @@ -1485,7 +1638,7 @@ CREATE TABLE `infra_codegen_table` ( `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=56 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代码生成表定义'; +) ENGINE=InnoDB AUTO_INCREMENT=68 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代码生成表定义'; -- ---------------------------- -- Records of infra_codegen_table @@ -1501,9 +1654,19 @@ INSERT INTO `infra_codegen_table` VALUES (49, 1, 1, 'bpm_form', '工作流的表 INSERT INTO `infra_codegen_table` VALUES (50, 1, 1, 'bpm_form', '工作流的表单定义', NULL, 'bpm', 'form', 'Form', '工作流的', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 05:10:46', b'1'); INSERT INTO `infra_codegen_table` VALUES (51, 1, 1, 'bpm_oa_leave', 'OA 请假申请表', NULL, 'bpm', 'oaLeave', 'BpmOaLeave', 'OA 请假申请', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 05:11:25', b'1'); INSERT INTO `infra_codegen_table` VALUES (52, 1, 2, 'pay_order', '支付订单\n', NULL, 'pay', 'order', 'PayOrder', '支付订单\n', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:11', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `infra_codegen_table` VALUES (53, 1, 1, 'tool_test_demo', '字典类型表', NULL, 'tool', 'test', 'TestDemo', '字典类型', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:13', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_table` VALUES (53, 1, 1, 'infra_test_demo', '字典类型表', NULL, 'infra', 'test', 'TestDemo', '字典类型', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:13', '1', '2022-03-11 23:12:18', b'0'); INSERT INTO `infra_codegen_table` VALUES (54, 1, 1, 'system_dept', '部门表', NULL, 'system', 'dept', 'SystemDept', '部门', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:11', '1', '2022-02-03 00:39:57', b'0'); INSERT INTO `infra_codegen_table` VALUES (55, 1, 1, 'system_tenant_package', '租户套餐表', NULL, 'system', 'tenantPackage', 'TenantPackage', '租户套餐', '芋道源码', 1, 1224, '1', '2022-02-19 17:20:20', '1', '2022-02-20 01:43:36', b'0'); +INSERT INTO `infra_codegen_table` VALUES (56, 1, 1, 'system_group', '用户组', NULL, 'system', 'group', 'SystemGroup', '用户组', '芋道源码', 1, NULL, '1', '2022-03-11 16:04:17', '1', '2022-03-11 16:37:48', b'1'); +INSERT INTO `infra_codegen_table` VALUES (57, 1, 1, 'system_group', '用户组', NULL, 'system', 'group', 'System', '用户组', '芋道源码', 1, NULL, '1', '2022-03-11 16:04:17', '1', '2022-03-11 16:46:33', b'1'); +INSERT INTO `infra_codegen_table` VALUES (58, 1, 1, 'system_group', '用户组', NULL, 'system', 'group', 'Group', '用户组', '芋道源码', 1, NULL, '1', '2022-03-11 16:04:17', '1', '2022-03-11 17:07:22', b'1'); +INSERT INTO `infra_codegen_table` VALUES (59, 1, 1, 'system_group', '用户组', NULL, 'system', 'group', 'Group', '用户组', '芋道源码', 1, 1, '1', '2022-03-11 17:06:17', '1', '2022-03-12 14:47:50', b'0'); +INSERT INTO `infra_codegen_table` VALUES (60, 1, 1, 'bpm_oa_leave', 'OA 请假申请表', NULL, 'bpm', 'oaLeave', 'OaLeave', 'OA 请假申请', '芋道源码', 1, NULL, '1', '2022-03-10 15:56:15', '1', '2022-03-12 06:56:16', b'1'); +INSERT INTO `infra_codegen_table` VALUES (61, 1, 1, 'bpm_oa_leave', 'OA 请假申请表', NULL, 'bpm', 'oaLeave', 'OaLeave', 'OA 请假申请', '芋道源码', 1, NULL, '1', '2022-03-10 15:56:15', '1', '2022-03-12 07:01:05', b'1'); +INSERT INTO `infra_codegen_table` VALUES (62, 1, 1, 'bpm_oa_leave', 'OA 请假申请表', NULL, 'bpm', 'oaLeave', 'OaLeave', 'OA 请假申请', '芋道源码', 1, NULL, '1', '2022-03-10 15:56:15', '1', '2022-03-12 15:01:25', b'0'); +INSERT INTO `infra_codegen_table` VALUES (63, 1, 1, 'infra_file_config', '文件配置表', NULL, 'infra', 'fileConfig', 'FileConfig', '文件配置', '芋道源码', 1, NULL, '1', '2022-03-14 16:22:45', '1', '2022-03-14 16:23:33', b'1'); +INSERT INTO `infra_codegen_table` VALUES (64, 1, 1, 'infra_file_config', '文件配置表', NULL, 'infra', 'file', 'FileConfig', '文件配置', '芋道源码', 1, 1, '1', '2022-03-14 16:23:19', '1', '2022-03-15 22:51:20', b'0'); +INSERT INTO `infra_codegen_table` VALUES (67, 1, 1, 'system_role', '角色信息表', NULL, 'system', 'role', 'Role', '角色信息', '芋道源码', 1, NULL, '1', '2022-03-10 15:56:18', '1', '2022-03-18 22:31:29', b'0'); COMMIT; -- ---------------------------- @@ -1531,8 +1694,8 @@ CREATE TABLE `infra_config` ( -- Records of infra_config -- ---------------------------- BEGIN; -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 (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', '2022-03-20 02:25:48', 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', '1', '2022-03-20 02:25:51', 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'); @@ -1544,8 +1707,75 @@ COMMIT; -- ---------------------------- DROP TABLE IF EXISTS `infra_file`; CREATE TABLE `infra_file` ( - `id` varchar(188) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件路径', + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '文件编号', + `config_id` bigint DEFAULT NULL COMMENT '配置编号', + `path` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件路径', + `url` varchar(1024) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件 URL', `type` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件类型', + `size` int NOT 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=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表'; + +-- ---------------------------- +-- Records of infra_file +-- ---------------------------- +BEGIN; +INSERT INTO `infra_file` VALUES (1, 2, 'v2-e68697db7bc2aba0924c5b5e7e377dff_r.jpeg', 'http://test.yudao.iocoder.cn/v2-e68697db7bc2aba0924c5b5e7e377dff_r.jpeg', 'jpg', 31809, '1', '2022-03-16 22:50:11', '1', '2022-03-16 15:08:33', b'1'); +INSERT INTO `infra_file` VALUES (2, 2, '1000.jpeg', 'http://test.yudao.iocoder.cn/1000.jpeg', 'jpg', 34126, '1', '2022-03-16 23:07:27', '1', '2022-03-17 11:49:48', b'1'); +INSERT INTO `infra_file` VALUES (3, 2, 'a294ecb2-73dd-4353-bf40-296b8931d0bf', 'http://test.yudao.iocoder.cn/a294ecb2-73dd-4353-bf40-296b8931d0bf', 'jpg', 83115, '1', '2022-03-16 23:51:41', '1', '2022-03-17 11:49:50', b'1'); +INSERT INTO `infra_file` VALUES (4, 2, '43301647479822_.pic.jpg', 'http://test.yudao.iocoder.cn/43301647479822_.pic.jpg', 'png', 423337, '1', '2022-03-17 09:19:11', '1', '2022-03-17 09:19:11', b'0'); +INSERT INTO `infra_file` VALUES (5, 2, '43891647495423_.pic.jpg', 'http://test.yudao.iocoder.cn/43891647495423_.pic.jpg', 'png', 17424, '1', '2022-03-17 19:51:31', '1', '2022-03-17 19:51:31', b'0'); +INSERT INTO `infra_file` VALUES (6, 2, '822aebded6e6414e912534c6091771a4.jpg', 'http://test.yudao.iocoder.cn/822aebded6e6414e912534c6091771a4.jpg', 'jpg', 18385, '1', '2022-03-17 20:48:00', '1', '2022-03-17 20:48:00', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for infra_file_config +-- ---------------------------- +DROP TABLE IF EXISTS `infra_file_config`; +CREATE TABLE `infra_file_config` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '配置名', + `storage` tinyint NOT NULL COMMENT '存储器', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `master` bit(1) NOT NULL COMMENT '是否为主配置', + `config` varchar(4096) 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 '创建时间', + `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=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件配置表'; + +-- ---------------------------- +-- Records of infra_file_config +-- ---------------------------- +BEGIN; +INSERT INTO `infra_file_config` VALUES (2, 'S3 - 七牛云', 20, '戴佩妮真可爱', b'1', '{\"@class\":\"cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"s3-cn-south-1.qiniucs.com\",\"domain\":\"http://test.yudao.iocoder.cn\",\"region\":\"oss-cn-beijing\",\"bucket\":\"ruoyi-vue-pro\",\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\"}', '1', '2022-03-15 20:43:34', '1', '2022-03-19 09:55:12', b'1'); +INSERT INTO `infra_file_config` VALUES (3, '测试', 20, NULL, b'0', '{\"@class\":\"cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"1\",\"domain\":\"\",\"region\":\"2\",\"bucket\":\"3\",\"accessKey\":\"4\",\"accessSecret\":\"5\"}', '1', '2022-03-15 23:30:58', '1', '2022-03-15 15:40:27', b'1'); +INSERT INTO `infra_file_config` VALUES (4, '数据库', 1, '我是数据库', b'0', '{\"@class\":\"cn.iocoder.yudao.framework.file.core.client.db.DBFileClientConfig\",\"domain\":\"http://127.0.0.1:48080\"}', '1', '2022-03-15 23:56:24', '1', '2022-03-19 19:10:11', b'0'); +INSERT INTO `infra_file_config` VALUES (5, '本地磁盘', 10, '测试下本地存储', b'0', '{\"@class\":\"cn.iocoder.yudao.framework.file.core.client.local.LocalFileClientConfig\",\"basePath\":\"/Users/yunai/file_test\",\"domain\":\"http://127.0.0.1:48080\"}', '1', '2022-03-15 23:57:00', '1', '2022-03-19 19:10:11', b'0'); +INSERT INTO `infra_file_config` VALUES (6, 'FTP 服务器', 11, '测试下 FTP', b'0', '{\"@class\":\"cn.iocoder.yudao.framework.file.core.client.ftp.FtpFileClientConfig\",\"basePath\":\"/Users/yunai/file_test\",\"domain\":\"http://127.0.0.1:48080\",\"host\":\"127.0.0.1\",\"port\":22,\"username\":\"root\",\"password\":\"password\",\"mode\":\"Active\"}', '1', '2022-03-16 00:00:43', '1', '2022-03-16 13:23:32', b'1'); +INSERT INTO `infra_file_config` VALUES (7, 'SFTP 服务器', 12, NULL, b'0', '{\"@class\":\"cn.iocoder.yudao.framework.file.core.client.sftp.SftpFileClientConfig\",\"basePath\":\"/Users/yunai/file_test\",\"domain\":\"http://127.0.0.1:48080\",\"host\":\"127.0.0.1\",\"port\":23,\"username\":\"root\",\"password\":\"password\"}', '1', '2022-03-16 00:02:02', '1', '2022-03-16 13:23:31', b'1'); +INSERT INTO `infra_file_config` VALUES (8, 'S3 - 测试', 20, NULL, b'0', '{\"@class\":\"cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"s3-cn-south-1.qiniucs.com\",\"domain\":\"http://test.yudao.iocoder.cn\",\"region\":\"oss-cn-beijing\",\"bucket\":\"ruoyi-vue-pro\",\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\"}', '1', '2022-03-17 18:46:19', '1', '2022-03-17 10:46:28', b'1'); +INSERT INTO `infra_file_config` VALUES (9, 'S3 - 测试', 20, NULL, b'0', '{\"@class\":\"cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"s3-cn-south-1.qiniucs.com\",\"domain\":\"http://test.yudao.iocoder.cn\",\"region\":\"oss-cn-beijing\",\"bucket\":\"ruoyi-vue-pro\",\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\"}', '1', '2022-03-17 19:40:13', '1', '2022-03-17 11:40:16', b'1'); +INSERT INTO `infra_file_config` VALUES (10, 'S3 - 测试七牛', 20, NULL, b'0', '{\"@class\":\"cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"s3-cn-south-1.qiniucs.com\",\"domain\":\"http://test.yudao.iocoder.cn\",\"region\":\"oss-cn-beijing\",\"bucket\":\"ruoyi-vue-pro\",\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\"}', '1', '2022-03-17 19:54:19', '1', '2022-03-17 11:57:19', b'1'); +INSERT INTO `infra_file_config` VALUES (11, 'S3 - 七牛云', 20, NULL, b'1', '{\"@class\":\"cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"s3-cn-south-1.qiniucs.com\",\"domain\":\"http://test.yudao.iocoder.cn\",\"bucket\":\"ruoyi-vue-pro\",\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\"}', '1', '2022-03-19 18:00:03', '1', '2022-03-19 19:10:11', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for infra_file_content +-- ---------------------------- +DROP TABLE IF EXISTS `infra_file_content`; +CREATE TABLE `infra_file_content` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `config_id` bigint NOT NULL COMMENT '配置编号', + `path` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件路径', `content` mediumblob NOT NULL COMMENT '文件内容', `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', @@ -1553,13 +1783,18 @@ CREATE TABLE `infra_file` ( `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 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表'; +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表'; -- ---------------------------- --- Records of infra_file +-- Records of infra_file_content -- ---------------------------- BEGIN; -INSERT INTO `infra_file` VALUES ('b7de3474-3805-4e09-80e3-185f20c31a74', 'jpg', 0xFFD8FFE000104A46494600010100000100010000FFE202284943435F50524F46494C450001010000021800000000043000006D6E74725247422058595A2000000000000000000000000061637370000000000000000000000000000000000000000000000000000000010000F6D6000100000000D32D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964657363000000F0000000747258595A00000164000000146758595A00000178000000146258595A0000018C0000001472545243000001A00000002867545243000001A00000002862545243000001A00000002877747074000001C80000001463707274000001DC0000003C6D6C756300000000000000010000000C656E5553000000580000001C0073005200470042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058595A200000000000006FA2000038F50000039058595A2000000000000062990000B785000018DA58595A2000000000000024A000000F840000B6CF706172610000000000040000000266660000F2A700000D59000013D000000A5B000000000000000058595A20000000000000F6D6000100000000D32D6D6C756300000000000000010000000C656E5553000000200000001C0047006F006F0067006C006500200049006E0063002E00200032003000310036FFDB00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFDB00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101FFC00011080190019003011100021101031101FFC4001F00000007010101010100000000000000000405060708090A030201000BFFC4004D100001030205020403050702040502020B010203110405000612213107410813225161718109143291A1152342B1C1D1F033E1162452F1174362728234B20A25273553182692576393A2C2FFC4001E0100010403010101000000000000000000040305060700020801090AFFC4004A1100010204030506040404050204060203010211000321310441510512617181061391A1B1F02232C1D10714E1F12333425208153462722482164392B2355373A2C2D217250983B3FFDA000C03010002110311003F00733305D12D2689B710A7BEF55CD36CA1241525249F316077D311A4C4C8938E135FE6132CE0E54B2A4862260BD9BD28DD45EBDA6A9626204FCECC798F51A0A03C2AB86AFB5344F322882D49A7532D250B25A53EA4A10B4F98846A0036BF5000A828A40D89383F6262B15B271485296ADD2B4D0E9C0D0366DD5E135ECD4E390A140402CC0035A3DBEA28D0E9A2F3536CA5371A470BF6CBB33198EC4D005A439A4A7F6932804EAAA6D2A84A4A1215A7770418E9CECDED7C3E3B02173A60DE090C925F7ACF577C9BA6AD153F68FB3B3254E504A5812C54DF2E4E4DDB9573730DDE66B4BD97F2854D754BAFD65BDC555B360BD21B49A4AD6168716B6EBD61734950DA1234B490E059D42414E18FB5782C2E270D32605849626F5B5683C9EBAD21C7B3381998652099A5561526BF296E16CFC8C347E1BE81A7557AAB519F3EBAA5CF30252760F29490093DE008F9476C72C6DA989918E5CB771BEA14E06F7190B967AE917360E791292082435E9AF134ABEA5850E9242BA9422A1C295C87541D88FC2A8D1B7237081DF83036181524CC0994016352401636F0E0F585775335256583503F5CDAD7E4CF530A4A378B76E7410202010648924A53BEDEC7B770761B9C3EECFC0270A04D0A2A200701ECF71C6F0DEB99B85BD9E1C2FEEA2101D45AB4DBF28663796B094B164B93C164C1D4AA17488F6D24FA7B981EFB6B8EC495CC4A77696D0B12CFC0B656F485E5AAA16C28E58E6D97584BF84DA7FBBF4B6DAED56A09BB5EEE17871D50DCF94A69B43446FA90B0C8F513A86A200818886D55A7BE12C035201D1AA5EB9905CF5A5625181C1231B2CCE51DD662CE7A0A0CCB97F168B48F02F66556F5CEDF55E595354942FA55E91E8056D695FC371C71CFD2ECFC36D9690B933B7886292CDC35B307D4B12D14F7E24E3D786C34EC3252EE950DFCC3101887D1F880CF17BE02E91A7923D612B7C027FE95BAB58206FD8F1EDB98C5FF00889C52254B6764102A07CA9BB59A997869CDB2D410A98B0CEA3BC406A28B28F9BE5969113FC4ABF3959E6274F9A849D5FC4085A8C0130419E09FE80D65DB51DE4957C4C4825B5D5F5CF933DA24FB0C9C5CD4A08DD00B5A8C070373FBDC08CFA7887AE4D1E5ECF552B7210C65AB8D4924E91AD0CB8022676042A6791C7C4545B3C1188019C1580096A55AFA699680C4AF172C6165B03BC1496C83BFD6C493CEB9E2C72F0FBE5FB36574051ADBF5CEB8924900BB56FA94807B8F59856C4F20024E26F8BC41C2C929671B8054E61200734FAFD603D952F794774554A7A9CD4785B8D6E01B458EF4CE8D34D96A8C36A242E9DA24401E95A4288DA260AA39DC7B718A9F6C23F373F7CFC2028A8E7E74676CBD2D66E0656ECA457301B97EFC7AC398ED3048D6999284FA76827D53B8E07D300CB1DDA58543F2B33FADF530F72190F7229EBEF4808CD187CA8A96527D800781F3EF84A64C1F13860E5CBD98BFE9A9D20D945472BFB1EF3E02003A9536E29BE60FA491123BCC123E3B1E3E3B6015CC72580B10789AD6DE6C5E0D43A0072E413E6496F02D1CA8DBD4F3AB2A091A4888E099EFDC7F5C21324EE5779CABE2B351879C2AA5198C0B0A54EBAD35AC06B0D40A6CCE18090E425C7B512410434B31001D8CC4CEFC47071B485152C020B148739825BDB67A88F01EE8BA6E9A902A19EB52D9E55E66A22DEFECC479CFD81D47AB5B6562A6F95C8D001201716100CEF3A0FA848DCFB62D1EC3615B18A5A54EEC487A8B646FD0B0041D6215DBCC7297B3E5A4CB6DC2589CF3A33014FB4595D352D531569A8692E9769DB752545B90F25C07D2B049012012204F7FAF442D094ECE077AE876721C80DD198EBAD239AD24AB6A3B94B4CB1E2732E0675FAD228EFC7ADF28BA6764E8BE60CAACFDC6B32CF57F3D5452210B2D8531F79726975240534D208441483F84081DAAAC6948C496625CF4A707366AE5C63A03606EFE525BCC6F841625EA457E9E16CE3E75DFA96E74F33BF842F1D5622B4DB1F7B2EE5FEA82EDEA1E515DD6B8591C15F5292970A59152DAC79888579690A001C48365627F28CA4B2B7C3BEAE1A84DDC6A7918CC7CA18A1390297009720B077CDDB9161668D4CE53AE4E6ECB196F3A5A109A9B4E68B1DBEF36EA84AD2A4545356254A0F1520AD293E6A5C6B4933FBB04F301EE64D38A014455ED5B64CCF9D9BC35A736D25585C514B6F33B1B501E2C6FAF11A453E7DB5ACBD6ECB7E1DD97002E56678BE7A64FA106D55254A063D446C008DE67DF0F9B116533D092E00663A9243654D5C696862DAC85CCC04B290DBCA0188D012093953D21B4A85255D0192A09527C3ADD2940E7666C8E94A8C8FC4B281B6E049DC62E2978F32F6794EE8A21C139004B5E9D6FD21A705820B524BB1721F88B8700B9BE5CA2847A2F50E7FE05E614254404676BC6A236EF4FF39300EFFAE2A5DADB40CCC52BE100EF1C831A9177B71BD74B4EB67A3B84248F89803AB71AD05865D61B2A52DBE921C2165B75C7124C6E5462373B4773CEFDF7C01226BCD720B13FB73343C3AC173D5DE256EF5166B037B1E566CE912D7A50B753E16FC44B4109D2C54E5F713EADB4BB73B4A4930081A4AE47331BC0338B57B2CB654BBB1290299DF810CC73D6BA565DA890C85A9CFCA2EE1DC8C8B7ADF908BA5F00AED439D2DE992C9568FD9754C6B933E9538A0771CCA88226200C740EC55B840C8A43748E73DBAB2854CA3B2BF4FBE679C5AFA1016D870AA56DA52008FC526249276E071FEF87B5D873FA188CA669507602BC6175620EB6D6CD824933276DCF68079EDEC4C6045FCC7A7A4129485241AD6B0A48494B6E10428C929DF63A88DA799001931BF6E0E009A196ACEDE6018290192073D353A7BD6B0A4A77921A0B5A821B47FA8A4EE4C8DBF91FE5EF8D237838B557306A12E242869D45A5AD3054749FCB69EFF0F7C233E92C9E51B21450A0A171F6683B62E170A8A82852B4B20801409263B0DC00773EFF005C34ACD83717FA7BE107CA9E54A1467B3EBFAF3E50BAB7542891E91B1039F6030DCBB8E5F530F3255BC0966B5AD6CA09FAB745FB53A4DD41A23B79964756081A882D84AB604FB7C7DF998C47F1E0AA6AC6A0D7980343A8F1E1129D873CA1684B537C7910F93E55E918E9F1F56F5D5F4A2D8B09295DB733C2F48D529A7AB4AD2144EE92E14E9312003227140FE20A7714A502F5AD864CD77F2EB1D11D992F2E5ABFB8834A8B8CFA7D229933C513951D3AB8BBEA21ACC0C3B113A12B61B0A83EDE90446C49DC0DB15860B1CB42262770312DAD9DCB115FA56BA4DD72414953DE8FAD3C3EF41C4C65F201E147F2C273D7DE6F16672FE243FBF6044860DC5E0586C00013302388FEF86FDFDC24B3806D6B1A74E10B26694860078C7858D33DF69C28999DE0DE6662DF5FAC2533F88A0A34E03DFDE022EA0A67D20EF1C9F8FF006C6D044A97F18AE99711C63C0AA2481A06E6393FDB19070960901CD488E9E79FFA47E67190AF728E3E302126403EE01FCC6323CEE53EDFEF1C9F9282236EE7BFF9FE76C23326941602BABB11A111E89400607CBF58194A942182A0A2A502047BCC4998F8607528A8FD3DDE3DEEF8F97EB1AB9C956FC8F9A73AD2E51CD79D6DF94333DD292A4E41A6BABEDD1D3663BCA5A2EFECDA6ABA928A535AA425C2D5379A1E7742BCB428838907667B3D2F696144E2949528B39670CEDFBDC3C19B77B509D9534C8528FC3503C7ADB4B3C0A7686E368B9565B2F08A86EF369AE7ADF70A7729DC6DE66A9B7548056D140506D4CF96E87CA434A6C85A54526485DABECDAF02833512CA4A6A5865705CD038E753583BB2FDB7C36217BAB5A34033A9D2F9DF8F3657D955596FA91528A82F21E712DAD07F7CC42A6440D48524090A20909933A49C44364F69F13809A2495292806B52452C1AC403515D625FB55783C7C9529225EFAECC070140D7A73AF482AEB0DFEB72F74BAFD6045503946F77755DA96914D979FB33E12F90DB2E84A9D6D978BA50A405E9000D503131C5F68958CC2286F824A0E6EE0D4D0D0B5FC219307B38E1D4FBA697A581B0A0E59352B08CF0DC94272C543FB798F4B89527D40A5DF503A9320183C13DF718A236C294BC7A940B82A36D2A2D7B061AD5AA625786F9401604821F419FAF07890CEA14F79447E220221460CC92798DA0883F4C38E030E5694A8BBD2AD6C9C0D469978B12B99DDA774533A00D5A5B5A1830AA42D8A66D8301C5BAD929990530664F11C6D3B7D31324C8099342E5B46ADA967078BC3693BEB3720EB4614BB684DABC04321E206A954DD37CC850A214BA634CB226743AD8694911B93A55103113DA47BA984E77C9D9ED4146259BC73878C3C8051502C4D6E79D8675A503B3C381D13B7B545D29CB1428010B66CE5D4240D254E3EA7162498009D49933CF3C622136609F8C40AFCC28097A52CE5EBC2B12ED9DFC0C22B2252FC2A2BF43C0C5BFFD9DD64454670CD57753414962D6C354AE1804BC5C3AC004CA7600C9001F8C63A77F0EA4018741FF006248393B66D4CCF266E11CD5F89D8CDE9F312EE0A940BD92900BDB37D2BA345BFBE12B6AA140EDA189F8ACB69D600E7F14C6C077DF9369E2490A4BFF00424D3FE49AF3A588A4516851285B350903C776BD00B442CF13D54862C410B542BCB0A800EE94A944911DE38F6F618AC3B633C774455F748A917777C8F9D6AEF12BECC12271207F53F956BC00F1E6F19C4F18976FB8F47BAA77669C29D196EB5B42E083BA5CD80893303B7226315F6C993DE4E0775D94E7317C99EB99D7373130DAF540ADD2F6B539167E76CE3207D37654E5BDCAD7841ABA9A85024C9529E716A6E772A04EA133B0EF044E1F76BFF2F80000F22DAFBAB409B183AD03523DB539D4BF3B4596F4E699C4E59A04A929D6699B3A428709DB99E76303EB8AD31BF3A8D2A0E638E516760CFF000D21B307D290E2BC94940DB72001EC4A791BFCC7C30D0B56E901D811C402C75F0CF4E10F38746F13A5059F5E9EF8C73A46C2490AD890606D1C1F6E0C4F7E7DF00CD9A0D07CA2E5AF95AE2FF7874972C2438724B30D2ECC07B14B412552017D446DB8DBB19E3FDC71ED8115318BB801D85EA388F7CF42D12CB02CE4BF4E156FAE6238A1B28510003AD27F886F1F97BFF53CC850A82C0049CCBD7EB4003FEB1ACC484014637A657D2F6FB425AC454EE6FA97665A6A95C933041432A4A841E778EC679077C152A56E905E835177CDEF46FB469293DEA8245E8486273E1F4B1E317BBF64CD8DA7B22E71A9AB69B29ADCC158A63CC527D410F024C1248309300C2B989C595D859E8463561443350D5E8033BF80AC453B77822367214CC145ED9077734C83E4C5A916DAEDBADCC562DA146812CB8E901B80A4252A07498852B7D9225441E0F38BDE7E350AC0EE06700F86AF60C2A4FED1CE070FB9B402AA5A63B97D5F3F2BDB28C997DAF39D5BCB56DE935A909483559FBA9958FA5035A0229EADB6A4AD32890E3E8004EA3EA544024576B9271388535092775AE4BB540767BF1029A1B3707B486170F2D2556003B8A3DCD433699D465482DFB37B3DE52F15B917A93E133ABCEA2A6D371B7FED8CAEC8AA49A9A6A8B416EE94EEDBF4ACAFCD4BB49E614360A92B0410140C3D230AB92949506DD4D295A1AD4E5A0CAD122C0E3E44F493BC09DD20BB3D68DA54726F5D28FD93DD6BB5E7DE93E73E8817EB6A2EDD06CC95D92BEED5E5EAABA8B4B0D53D45B1D612A0B7AA19579EFA6180B0D290A2BD3AB770C2620254C5A87D6FC72E3935E2BBED36153371056848677A3877D0F0AEA49041788E7F6ECD3D251527866A072A5A37019B6F0FAE8C389352DB2EDAEA0B6B79949F31A27829712920EC779897600A02D2B0D522A1999DEE29C6BC59E23F8BC22958109671BE3801436A312DEB4688F1707F474352C8FF00FA09769DFB7EC47E77E38D87C018DE7164999FFF005EF4AA09CEEDBB9D4D1F93B9CA196520E1C81BACC5999D89704D2B9B9D6BAC50C74394A77A279C91C9A7CE979599EC1418293EC7E004FC40C547B4A6B62D60D812D6777218E619AAEE2C467124C12F780B815248A02720469CE1983715D129485150585292520489077074820C4F3EF8D70F37E301C1A86A87A1F7C7D21CD5280496672CF4B7A86363D291313A277176B7C3AF88CA32252AA0B154C481B22F166127B49038E7B44716BF656693325A450386B51C58BF2D69AE95DF6AE5FF00056D520330E205B911C29CA2EF7ECFEAA6DEE8FF004BD2D42A19AD4B87F0E9285C46F1AA7E13F5C7426C053EE8A8000E35E75A662399BB48962B26FBDBB66B3D7DF8C5AFD036EB958B4012D25B0775247727B9DF8DC624732808FF00737AC445163CCFD21C2B454A12CEFDE483049E4FB7EBC7D701AFE63D3D21C25FC89E5076565E4A0B7B83EFB4428CC4F1C4FCFEB8066FF315D3FF00688251F28EBEA60D58DC368709D20CAD3133C44C73DC73DF09C6D07C1E7DE4A10DD1A596DA1E85A5480543DC80646DD8C6F38467FF002CC6428ED0E294B087840D84EC4F6DFD3F1DA7FA61A1771CBEA60993F3239FDE1716E042883FF57F4186F5DC72FA987FC3FCA74A372683BBDD2A6E19533850A8051A9CB9705360C00AF29B4EA9276113B0304F607B32E2D00CC5BBD45B2A11EEDE548926C67EF903FDD7CDDFDE54EB1907F1CD6674F4AF39292C828B7662AA700948294B75DEB5004CEC127FA6D18A1BF10659FE20A9A598BD49D6AD9B0A33B563A43B2C477287BEEE4D7BF4AEAD4BD5A28F2E6A4D7F4E338A12357DCEA69DE54EC015B4A092998D44E83C4C47C714E48410955DC96229E7A0A75A6B13C50FE08B872E79D4379679F288B0A4A53C88FA93FC8E3D5FCA7A7A886F8E4A1A66761BC7C8600996573FAC6407708331FF0049FEB8DE47C87FE47D046416B80998FF00A8FF005C2D064AF987BCC4730950236EE3B8FEF8C835371CC7AC75C642F02D0B49094CEE001107B40F68C64640996FC9712AFC732911D80DF7820612520A944B036BB468A514B367AFEF0052E96C14998906363B4CC4FF009CF6C6BDDFFB47946BBE741E7F78D32F5472654668B1FF00CC5B9DB9D89A7597AADDB4A14DE74B154B0A0ED25F72656A0AD2DD5DB6AD0CD5DC1B769AA12E5B9BAD40D0541699F7E1DE26589489531681F106722C081AE97EBAC30F6F3644EC4AE662520B6E96D086BDA848CECD7878FA43D48BA75C5FB6748FA9372A6A4F10995AC69A5E9DF501AA6451E5FEB874DADC85FDC175CC38E280CED66A269CB3DEDD6AAD7E7D65ADF7134CC9586D36976A362E1B1FB3D45225A8F777490E0F3F2ADF48ACFB3C676171A10B9A52A4AC0AA99CEF53CD86ACDD1C7FD94F5B2A574B7562A286B5966A5AA6A66E434DA69D4135552E852756CB29D1B891C1C729F69BB3CBC0A3158844A5A44B2A5056E9163D5E9C7C2D1D0FB026AB113F0A954C4AD04A4283D05AF537D0FDE02BF65A2BDD3D45BEF9FF003B97AE082CC93EA6D4A89526662371C6C264E23BB271132761CA5658B0F84BD32A97E8783E9162E2F0E84B94317AD2B9733FDCFE791821E9E65F6724535D2D4CC9A515D569A0249245107DCFBAC98DFF00701BE071BF6C0188C02E6624912D4A0546A03D4B8BE7E63C01812450B28115B500A5DF5CEFF6875838AAD7295E6014B6D8434B81B6B4A8AC9247BA5437F861FB0BB3E64B12FF0086A0295DD3A92FA51CB710C63DC62D2953050A24021DFED73CADE07B7381E549DD0D8511F540E7BF2676F6DB78C3D4D95B9298864B1A14916E2E32F4CE07C3AB796002092284355C55ABE7E5488C1E232B55FF00052E9841FBFDF2D144532771555F4CC2925204994B876FED18AEB6E4C2954D6203826ADEDEA29ECCBB0729D201152CC466E00E2F76AFE9124F28D026D195F2E5220427F62D2881EFA5423BEFDE0C7201F842702B2AC720E6660009E14F0AD6CD587C9A912B06BA11F02BE9FB529C845D37D9D3674A32FE71BC14FA90E34C0511FF00579A489DE4C2789F86C31D7FF87B24FE4D043FCA9228CE5878F3D758E44FC4A9EA18B525CD565EAEC0BD0EB567CC96BC591D5BA5A6A070EB4D2FFF00F54C7C8F6F711BED89FE34904EA12457DF3CF38AAB0CEA94A6049DEE67E6F1F1AFAC404F159713F750CA9437A4749DC4EC14489FD7E1F238A6FB65328778867719B0B3FEBC9AD132ECCA1499E0A92A01C54860C1B5A0A677CD9C46683ED0FBD2AC5E1ABA8F56858497ED2B68FB438A5263907824C41DC1F6C34F6665A56144814176BD78B599FD6912DDACA05202589B034BD7D2BD18C65AFA6ED7FF00C3F45CEEFB31B7FEBFD4FC7FB60ADB228BD0123CC7DA07D8C095A686A416A8D5F8E7165DD3CA750B250A8FE13489F49ED0540FCB8E4FB038ACB1A4EF90F92980EB97D22CCC183B89F84BB8AB1E10E58A76DF424011A092623F8A081DF88C31E289012199DEEFEF9C4870408DF70D68E6BA2436853809948244EFDA27F5FF006C354D5EE824B30A6799007362DD443BCA43D4B3533A97AB17B0F62B08DAAFFEA15EDA86E4EDDBFC27E58116545C8CEA4DC0E4E787873829212F53C00FDAD7F2E11F2980713E64EE12E44EFDBDF9F6FAE0CC26F2D491BA4DAA5C533C99A97CB8340D8C429228091566B1766B1E7F5BC22F2BAB4DF2FB54ADD0DB0FA402240D529246E36FEBC18387FEEF710181A0A38660CF7F0ADA12D9A95EFA42C50915D2B67E5974D62E27C21751332748BC30662CED9592CB7568BE941A9798554269054D6B6C36F2190B47990E390532252391870D838C561718E0B1398A0F3BB1E03C9E35EDF6181D932374124BF1ADDC86734617C853284CE60FB547C4BF4973456359BF27E55EA5599A699ACA1AC719A9B3DCA929DF4B809A5650F54B754EA0049085001644118B970D8F5CDC3A4295931AF071670D534E71CC38BC24C4E314A12D440392680BE95FA3784507FDACBD66CC39F32FF87ECCD72A5363A8CC6EE70CC6E5BC1510D3777A8A0A95A428E9800AB4CC7C36DB129ECE6CE938A99314A4859291BA5C3056F203DAB42607DAB8A9B8692E7E1DD0ECC5CB8E791A0C99C441EF0C9E222FDD04EAFF004FBAB16178BD5D952F56A72B2829DC5205C72D54BACFED94D400A5052D346F5588298948F4EF0655B5B654A9123204A4B307C9ACFAD35A8D0C05D9DDBF366CF523789009A8739D5DE81FC098B56B27DA7DD44E917892EA2F58FC1B3B479719EA450D1A2F6DDE50EDC3FF00CCAA69DC65D7A9281B7295BF312FF9BE5AD4544911FC3BD693D6AC34E2495215BC529A382DF11ABB0DD0A1955C54344AB1A558923792E16C1EBC38BB354B541685054E74F117D5E7F23F577C44666BF667BEE6DCC558FDA9FBB97A959A4698A3AB55533456E51525A696A79829505920200120CE24FB0B16A993529512052F51C8F4B1CA159983FF00A404A480090C46672B862CFCFC445CA5D97A7A1CC39C173A15726CFF00F2B43E0993C4093F3F7C5B62724ECF2C43EE10002092E0B91C9ECD911109C7CBEED6DBA5F7803A31B352CC69778A24E842A3A419F5BE41CE1759FC98ED3BCC6C3DE7152ED2EF062965492C54C097F2E54F7674D9287A149228CEEC4D1A9E1517F08636B53AEBAA907F81F581C76518D840DB79EDFD35C2A899A2D4208E71205A42412AA12D436771678975E1F9C52FA2BE22E9802632DDB1CD31C68BD59F7DB8036E7B4C6D8B4FB333528988DE50497FEA2C6A34B5EA2B9F27AFFB512F7E4CCDC0FF0009F96E6E0654AB387A022D173FF6705CD751D25C8A83C30F57B439812E7C76EFB4F68F89C744F66A6051961C1600B823A071C45B3E6D1CBFDAA965266508F8CD0DEEF907F6D678B99A1596DD2A98D4D247E9F23B73896AEDD7EF1094061CEBE90AFB5FFA09F91FFEE38117F31E9E907CBF913CA14F4BFE9B7FFCFF00FB958066FF00315D3FF688251F28EBEA60F29D694AFD426620FB47F9CF6C271B42A1871B534A098048FCFE5FA6D8467FF2CC6419DB27CE1009DC7F318685DC72FA9826483BC8A1B9FAC2F287F1FD47F4C37AEE397D4C4830FF0020E43EB0AF65A0F5BEEED9FF00CCB754D290373A5F6D5220F63038EFB61BA7A01528D0120873C09EA0726B9891EC56EFD1AEF871CC8BF869FA656FC6ED810ACA7D6BB5408B6D7DE5D40238296D6F8DBDC9F873C6C31457E204B2ADF60EE4870398C8D38E674A07E8EECB1499280F5606EC6BAB1A5F2A1F28CEEAD8D1D3ECEA009FBC5007CC6FEA60BE8023DF71F1F86DB5352C252260A03C6E75D08BF1AE65E2C1511DD29D8306A9D00F5889CF73F51FCB02ABE53EF386C8E6EF1F457F21806624B2A86A72AE7C23201ABF09F91C6F212ADC343F31C8E8232009235113BC9DBEB8598E87C0C192BE71D3D447CC631D0F81835371CC7AC7D83EC7F238F2178F6D8215241FCBE23191E80E5A059E0CF10670AA2C757F7F581A715021A807AB03EC40329D4A3B7D6260813F4C6F086F2B53A7D3D9BC6C0FA579C728D99EBD658CD7654D79CCB46855AAE8A0826D1554A90991AB7FDF05281D3BEFF3C316C8C49D9F3D1244CA24824851152416F2E968B0368E1138CC12A504852886F8AAD4AD726BF3A68F1E3ADDD11551229AED6EBA5722D06F94B9AA8DEB1857EDECA97F6AA5A3499AECE52B68A6A295C6587AA021E657E432A82AD81BD762EDA1364265AD6FF08A28953B8B3170ED5032A509A4517B67B2D3E562664F4254003BC080433135A5ECCF6FABEF91FAEEF75C5CABC979BE9ED762F103936D948BF32D4B4336DEBB654A56D68A3CCB62A95229FF00FE31B716DEA5BBB15686DD505D11454BDBE8F36DE0656D4C1CFC3A65A54672540002D46FA78C2BB23B40764CD44B98A2E926A5446962F51C2D5B0855D0D5B4F219683354D38A754D1D6022BAD8B4CF9B41710A50290F1051216B4A8A606C77E7FDB1D9F5EC6DE251B8139B1CAD971CA2EEECE6DC4ED6DDF8829C2400FBD966386B9F8C1BD552A9E710CD3A4329490548DA121277481DC0DC488FA71864D9FB764CA5EECCDD510684B1CF526EF6CF33489F4FD9A4C92B623E1DE7008D1CDAFF007AB9A429D57DADA1B2A686DB6AB5D47DDDE5545C6A6AC0152E5329284861BFDD2E528F2DC501A80970C0DF7B3F65626463E477894A7FB5C24675F0B387C988110BC7489889CE42AD42497CF4147800BBAD35D417A9A9D0C4D312969B0219425C656B4980009294C08DC03BE10DB186690BDD012594410069E807A81C079839E65A929A86201A9F1045ED4725CE767893D65BAAAED74CA56D11FF003D9CE8076829A3AE429503E01A51F86283ED10DC9D3039CEAF913D4BE638C4F7676284CDC0C1EC1B27E1667D78344CEA07422DF6AA0684A9B61238DA7BC7B48E7891ED1188C6CA4F798E960024058A0E8756A1A7ED126C59DCC0CC76F92F47B5C13D684657356BDEFB3E281DA4E90552EA13A1357772EA0AA46A4942E391BEE41927FB63B47B012B7767CB24004250078171CA94A5FC638C7F1257BDB4D92430EF5C56DBC9D6E7DE9135EE6D794D540891E66DF29F7F8FC38F7DB12DDA8B66A87DD2CFCBC3CEA7CE09B2520AAA010545F42D6E9FA455AF8C2A92115CCA4FA9FA375848EF2E25690041F8FD714576CA602A5125D89D581248A5AA45ECD9DC88B2304948960801CA4568FAE9C7A523323F6B166036DF0D779A05121574BA50D1A413C96DAA82A03B7F16E07E58D3B2246E2852C5870A3654A9A7DA03C692568724D46673BE63DD6F19EBC80969166B2364FF00E6B2373DFEBFA103918536F0010B661551D2C4E7AF9C48763A46F27E1193B0F795F86622C832932136AB6007614E8DE0CFF11FCA7F398231584C7334B926A07BF74EB16860529EE9341D750055B5352DF6872DA468427E237F9F3FD7026D4427B9954150DE66ADE1CEB5BC3C48003B001C1B7317E3F4804FF0BF90FE431169C924D6E0E46C2BC9D9AD68221BDAFF00F5D7F3382644B058902E436B77E5F762F1B249DE153719C076DFF29150DED251F39E67E9F0EFDF6C3CECE40DF2000E0B137C8FA1D7ED0E7315BC94BDCF9D1FCBC6135941CD3559851C17A8AA06D2491A9260183F5EC63688C3E621204A6005080EDEA34EB4B08F30C525690004977A50EA43E63ABDDEF1795E0F1B7A8BC2E5416ADD47712EBEE134F58C87D0902AD4A9424A170A51D8981F3C36ECB9466E395BB4008D4697B79F1D61B3B633F73032B3152C6B473463414B7121A0DBA8967C859E2858A3CD3D2DB63CFD35B5D3F7A6ADCC87530930B42CB29295023D242B6FCB16DE024291874BD1C52874CEE3235BD1EB58A6D5899226A86E26A6A583F31A904BB820F08CB1FDB1549416CB5F875A0B6A95474D4D93732268ADE4406929B9E5B08040F48F4C8E3811F2B5BB1B2F766A54403424F81CDB85065AD22B2EDC4E06594A4312374B100D1A8A6AD89195F918ACCE8074E6BFACB9D72EE42A379E372BE562804A10B3E9A571CD681B10612CAB68EC37C3BF6971FDCA5643028740258DD2F406A1C17F4AD21A3B1982EF276F10E144E5A7AE59E55D22FBF26F857C8FD38E91E69BF5BADEF56756323DDA9EBDFA2AA6629AA6D14AC30E3046AD4A2B1528AD0A1E511012751DE28EC5ED0DEC490E480A34704BEBCC9AFDAB1702F04C123743B06045B47A1BE7944C9EBF67D4F503A69E1BF3525D6E9D171BBDD0565AE963EEB47594D6DD2029234843A90E389034031ABB9C4B761E202A60005400C4675D783BB65A342F8D909978114AEF541EAFCEA6ECDF599F7843755D1260A4EC9E855CD437FF00A6D0FC8EE7B46FDFDB6C5998398AEEC3A8B04D9CDEAFC9C6568AF36901BE7E1496240703978F18A20E81B3FF00E89F3E033B672BA1DB9FFC9FCCF61FD3B31ED72972C19DCBD1892F51D2B7A0D60BD98CCEC3FA9BC035B42C7F788F598EADCA3BB3C5B4CCD439AB4FBCF7F8F7F9E19302419E74722D6AFDBED0E78F43CA0DBB5481516F8A966EBA56265F85CBA9A9E9C7889607E2574FD4B501D88AEB76D131DC7D38C4B306B5A7152C05100DC03C49FA72F188A63A48386985401F85851E9637197EB170BF666B8B3D1BC92A5023CBCC5714C9F88A6006FF00198DFBFC71D39D83515265B92AF8454D68C0FD8FE91CC9DB99613326B01F31272CDAC2993E56B45DA52BBFBB644C8F38C7BFE1F79F96DEDC7C2C85D873FA18ACA16566FC27FF0097F318117F31E9E823214CD7F0FD7FAE075FCC7A7A08DD173CBEA2143408D45C3D8681BFFF002C0536FD55EA20C4D93C841F53B642D2476327E507BFF21FEF80D45C906CE6995DEDCE0B47CC3AFA1856D980F341EE08FE781E6001D80F94FD60847CC3AFA1854DBFF1ABFF0079FE98659F74F23EB0E12B2FF8FDA16B46DA4BAE9E14A65C47CF536B186DC47CABA1B65938BB43D6CB5EECF05C8A8B16AD2F5A5AF58CD3F8D0CBEEAEE7D7DB69042974F5B5C8DB9D03CD3B7C420F69EFC62A8ED64B4A91302C382E6A056805EA6B624D32148E85EC9CDDE4CBF8880C9673C059A84640D18B501AC6686D8FF9964CDD6A70FA9D66E4F204725A2A4C01C99208FD4FBE280C70DDC706B151A0A0078B7A68045AFBC3F2CA6209201E8017E4C038FAE70F5C502F6807FD1351F40081B7CBF3FCC0C2CB48DD341965C619255CBD6A1F3CCF8C138781F633F31FA99C08B005183694D5EDEFCA0D47CC3AFA403A9A812103989E76DE7F5F86D23E98F2484B2830A16B7339DAF1EAEE397D4C1732D14BA5C26414A877E75248E7E008FF000E16DD1A0F0821173CBEA20DD9EDFF00C71AA80DD34196435106A3FA7FEDFA40CC06AB9E67D6088FD8F2323C3DFE82FE63E9C63D13C4BA1C81D2AF56AB70D79563C606E01E91F2893A9B2224EAFD07F9FAE11998B0CC1C135767F6E6E74A6B19BA341E11A9459A75669B43412A29A3A775E5252B501AD480752A140A8026405489131885AE64CDFEF94E96A39A7EA1FA57C62C8C2849504A998814FAF9BF8C3D7417972A6991475212FB2F21D410A4A7CDF2941485B69780F390852250501694C48D3BEF25D91DA33296941987E12001BC1F204D5CD32CA34DB3B3646230F337529DEDC53503D4119FA52F48869D75C86BB7D55BF386567ABF2BD665EAD4DC72EE60B1A9E6EE794EE4D2D2E7DEE896D6A58A271612AADB62D2BB756E949ABA57B424A6DFECFEDC973A7C8EF140A545895005B42C5F901A0B5A39CFB47D9AC51C44C54A42800A25C034AE9D6B4AE5C24BF463A8CDF5FDABC505EEAED9973AF597A8DB39BB2ADBEA9AA7B475628AD6353D9DB213EDB829AADFA62DFDE6BA82D0F794A45580BA42120275EDAECC93B525CC548482E0D12010E6B9020D1F807CEB127EC5E2276CA992933C9DE0402E4A6CCF42438FB73872DABA3F5B56D0A443AB212905756DFDDDE09007FAAD14B70E013E6256994AE440DB1CC3B67B3D8BD9D88993025490165418102A5C96A021EA4545DC5E3A5F64ED7938F912E58503F08A38248E54DE22CDE44985BDB2AD2B0AA651696EEB515A96CB3A8129092824A06A402240548054AEE70F7D97DBC3092FF2D354CAEF2C4B39D5B2602D61AC29B4762778933529C8B508068F516F4ABD73825B8326C2BA9AD650030AD6AA94253E95256950848E1BF594EC8D2381EC0D8B3B1A9C5E13781DE0A0EE0E4DAB004BD74880E230AB913D8248650246803815B1BF957288719FB5BFD55E99DA90AD2DAEADEBD2DA806359A8A8D4A528158052A8001D2362044628EED4C82264D580C0392E6BBA0E63534C9AB9318986C594B2505A8E01A68727B114635A3C4E6B334E7DEEDF1BAD253E783241696AF4083B0813B800FC711BECDCADFDA0871FF9808CF3776D3DD33926DC9A2560666EBB8967A9008B71B39E3D3469E0EED28B5F4472D25D6FCB5D5A8BEB82A0544369283B1023D4A3D81244C9023B7BB1B204BD99289480E01B5986961CC71D0C71376E6777BB5A617A25C568DBC41D0669A8EA2248DF1484B2F28404F96D2D327825A4A947EAAF791131ED8276BAD214417A8E27CAE3324166C86711ED92082092CE696CC961E44EB150BE2D2E6A5DC9C429C1A52447A53B6959FC87CF98F86286ED92CEF900E7576AD4DDEA58F4059EF16360BF929E5FBD0F99F0BC657BED99BE9A6E91E58B521D08FBFDE5552B442095BA86C242A480A0005AA529212644C90213EC8AE8A65024BD1C540B51E9C73E6F0063011312CF5525EA5AA08D470A03A5228DF219749B0D3157EE4ADB3A4EDB81A842BF176EC7E430E5B74BCB51D5CC49363FCE8E9AEA346F5F18B3CC9826DB6C4AB701A8F8C052C0DC6FFAE2B15FF34FFCBED168607F969E2EF4E00F4AC2CEE752E5320794AD2000002124EFCC6A077E3FDB1A63D0172653DD21EC6AC6D4E2DD7C0BBC9FBB7978C055BC54DB2A992EA7D5B01274933F0DC7000E0F61BC5A6A2B7A39C8BE4F4F41044222E1FF00D42BE9F3E060DC2CB246F1229F1540FD1DEC7C2B1EA6E398F584CDC6A96CD33AEB6AD2B292092949DBDA08204FC3EB83F03BA56A15041249B016B00D6A7E9054D580006B301E67EBA5B5CCB32139E7BB7A7DC1AFCBA37CA8FE10015263D23D3D88FCE79D9F3135926A722E055EC294BBBF31AC69869A77C134A1AE99371770C2F9D456340FE09A9856F878B42005169EAE7D2E042969D680F28A44A4F62276E77C09B094063A638FEAB1177A337A915E30D7DB0DE99B3E5354806F5B54921C55BC0708925996D94F4B4D56B14C852D16C7D3A5524101A5EC649237324933FD2DD9139230E921A838002DD5C72BC51338AC62540D439CA953536197BA46367ED97B6BD73AFF000D0CA1969B717927322EB9C10038F2EAEC2E2402366E1D4CE96CA3DA22419EF64F684B495BB6F84B20026E430B5C3518EB67688AF69308B9F2F79A9577CEB57A54F98B5E11FF0064074C1373F167D35ACBDA594D1B2E5CBEECD3ADA120B8D5A6B2A5E51546A70AEA438BF5295B1D29F4C00DDDA8C719895A53BC082A2B51513BE5D925896002404BB0B1A670E3D8BC3A25AD2140067FF9666FC141E956BF1D0B750ACF494B9EB33DFADD69659B63B7D772AE60A45D3B8EB1556B536D2E9AB0B6429B424BB55569F39B095AB414A97084C53D30AD58A25C92F46347734BD4E7519F168B3316A42024D3C7D7871A35DE2BDBAD79773474CF3352F4DABD4A365B266C45EF2E3896D62983376A6AFF0037C8528685A4A0236DC223D206F361EC00A42D249350CF5A1F74CB5CE02DA1342F01BA087DEA6556273C830E7C488B3EAA796DF469A6C184FF00E035D8E93049232FD439DF7FC676DC6DB718B370735A5E5448D40726D5D4F1CE2B8DA2E55C4DF9B8B67E0DA3451E787175153D33CF8CBC0947FC5D74546E93A8F953B8831FA71B4E1936BCE704B9615662C326BB9ADAB6A5AE5ECC141907D2BBA6E333CFC6B11FB3534C9BADC541221356F0492781AB6E49E7E386ED9A5E62585E9CF3F50DD21F71D2FF00829352ECC1B88E6FC3973895FE0FD96DCCADD7F65635077A7956A713A8890DD4522C47700292388E00EF896E147FD54AA675356FB519F9F8C46F192FFE9660A3004E74FAF4FB98B94FB355D07A3397C22229F3056AD0207A14A71A493BEE764A441F698071D3BD81FE5CB7BB0A74BFA78C72E76FD010A9A00A6F0AD7FB88D7A562EC69523CB6E3684A5C1F059104FC67B83B62CA5D873FA18AA61576953ED0852A609FE106413EF1FD67E5C6045FCC7A7A08C853879480950309236040E49236247BFCC7F41D7F31E9E823745CF283FB7543C1C480A012E113E904181B1048FF00D5DBF5DB01CEF9BA9FA7BE106CB0E2B925FC2DD3D615895A92130627E03BA4FC3012AE799F58291F30EBE861456D75681A9260EAE601E37E083DF084DCFF00E27EB0423E61D7D0C29A81F505133C992204C98048DBFCF6C324FBA797D61C25E5CBE99DFDE70B9B629D754DAD0B0145E085120410A4A801C46FD881276F6C0CB43CB55582811C4939D8E61BE8D671C14CDCC4201019C5F42456956A0167AE8D1413E35E87EEFD53EABDAD4D909AFCB7715A8693EBD544EA8C13B8F7D88036E39C559DAA47C331D3FD25C82483A0D4B380E3F6BFFB2730944A20001865A51C7A12D40F68CA35B5B4A734DF285DDD2A72EF42840F4C36B75528F4C15191B289D43DF1CF9B49046309D145E94BD0D9B3E75E516E2260FCAA983B8003E5E7C1D86BA443AAAD2D54D64485FDEEA9A9DF64852BD3041E4003E9CEFBEABF94F4F510DD2AFD47B6824D0A1DBF51FDF022EE397D4C1A8F9875F431C5CA74A9416A49D40403A8C08F700FEB1ED8F24FF5FF00CA3D5DC72FA980AEA9681B18131B81236F72371B6C771FCF0B4108BF311D9975CDBD5FF4F61FDB1AAFE53D3D441A8FE9FF00B7E9037CE5FC3F2C046E799F58220524CA524F24027EA31E464797BFD15F3C8E3E7DBE3BFC7F948F350B528B070C4D89D2ED46E05A323C522B432A50307544F3FA6F80A64958C8D07D1ABF6BB73AE46A26D1509AACD178756205BDB6E941D53E62D5E92A4FFD0447E1F54F13BE10C660BBD494A525009212C1DE86E336E8E0F38960DA4CA094A6A00A87B86A519C6873A3D6EBF45C7CB612299052FB4AF24393212A92E156989829568D33CFA8181188C2B654F9533BC130900D873ADB93034AE75A3A49C519E9092E6B507436E66B6AE97814F915F46F30FB4D3CCBCC943AC3E80E25C5287A8993C286D1BFB03BC895EC7DA9330D3254A25449504BB960CD73957D236C5ECBC34D92B2A402BDDCC5496CC31CCB382284B5222DF527A535996548CE9902AAA6CB7AB755B176B356DB4B88ACCA95A85EA7E9AD8E952E72FD7214B66BAD9562A1D75AF2422B1B28255726CAC7C99C8099AB0A2459EAE050FAB53F4AC36BECB5E1D7BF293B8455F937DF21F78943D28EB3DA3AC964ADA9AAA2FD93D4FC9AD50A337E54A6750A76F34E5BA74D466ECBA52DA0D7D2D5A1D376ABB534CA9CB3A14FD1BD5952BA45BEE30F6A7646171B297DD809749A51C955747BD48A7AC3EF6576ECCC04D499A14B08A674616E02E0BBD5CDE1D37AB9DA750AC6D287695D7528A6AB696343ED1420EB0209250E296D390AD9C6D69FE181CDBDA0D9389D918EEFA5ACA9090E5201AB17BBDD9B224C5F3B3FB4D86DA78512BB8295161BCEE1C8670587505C58D5CBA96AB557DAEA295C502E3F4C14956C661D68E881B824779EDDB8C396C7ED828CB18699214580495126F60720CCF9D5EF0C3B57021330CE4A81773BB4B1CB33467AF3B391166F5454759D7AB2D2ADB57DE286C0B2D2B492967CBA1528F633AA153B83B9F6C0DB7E6CBC5489B30A802504814049666351C00A0D5F53762AC9520194C37AF93B92E5ECDA3D183989D792F27E6BCC55F535365B0545C28534F42DAAA9B5ECD2D093AD6406953B104A7503F1C03D86D90BC66325A82D9974E00A9DDCDC6790E5784BB63B51385C1CC4EE82ADD5541AD45E9C412D5CDF53A42E85D9D76BE9664CA058F29D6AD0C3AEA0A4A4A56EB490504483282932624EDB08C76AEC0C39C26CD972C8DFF803902E430E472CD9DEF9F15F6A272711B427CE7001580100E49DE1BC1C3877B105B76F685BE60708A37513BB6C94A947F8BCB404CC4882636F6F89E59B6EACCBDF511548240BB3E473704DA8333096C8477E1C14FC052966BB3D3803A88A63F14F55F7ABD5627584795A869E7510A571C7707B7C7144769D5F9C9C520104035E64BF220DEEE1F289FE197DDCB092092035E8FC7CB954718C9BFDB4D764B94FD2FCBC85FAEA6A2A1D5AC2814A74259805B024924C7E21F2C2BD9DC3FE512A57CCC9DECEB6B533A599BD01C4AF7E6A000C0A80ABFBF28AA2C86C28545806C4971A9DB891CCC998EC0779C2BB5F1466CB50DD67763E45C6A381895ECE95DC9412ABA416F060F47BB1E0F78B2FC9C4FDDE919D3FE8B493ABB2B56FB0E47E2F8CF3B620AA91FC424A9AAFD7A64699D22C4D9F3C2A5A431A1B82EEFF000F8FAC29AEA5550A2DC79653B49DE7E9B4111EE798F8E3DC4C8DF96901FE106B4AEB71C6DE70F52D610FAFD09D7A5A0202425A1CF940FD7D2418F6E67DA07D711AC4E1C2560025B98CDAA69E90BA266F16CD9ECDF7F7998485D1C2DBCA5682413F2810373B1FF3F45A420EEA99E8082459F4EAE7CA08425CB92C0115F5F0845DDDC3F7558F70A8DF89EDF1ED1F4C2D824AF794024DE858D9DC5C56CF77AC2137112D4E90A17A977F3E39DC65061D35A406D99A1C3EA2E503FA5511A34BAD88E779D8ED07DC6E4E1CB1B366225102528A407762E581C85B91A8BF32B072E5CC5566A43D0B11E1C0DEF4E00BC68AFC095BFEEFE1D72BB6941A871F756E7A44690ED4AD00AA4AA7788E247CE70DDB0B10B9D8E99BE832806A9B352CF57A6B9D213ED4C8423012CA55DE38228CEF502BC454DAF122BA8567AE62DF77754C80866DAF427CC0DF9BA9A51290E14A822360490AF8818B490B5270E91BD46157D2A0E7FB788A0B1208C5148437C4EEF7E01A9E57EB19B8FB42FC3DD93AD9D21E905CB2EA0AB3CE50B026BEBADCA5875FA8B05DAB2D4D9AF6D484A0B6D34A5309524A16141D075A427794F66269133E634BF3A07BDB93F431A6D0C077F2407097069C48A5F835C7A422BECF7E92D2F4FBC43644B25D036D5F2D8D5EEA025920A90CD558AB9DA25AC4EA4F98CBCD2B723F10DE762576927A50953872AB924B1E240A51ACD966EF03F67367AE4CF514ACB052CB33802A4F16356E7CDF481D47F0E7922F9946CD735E655DAEE1996D6AA4BCB54C8674D3D4D255D5BD4D58E255A94A79C4D6149F5276693BED885E0B00315377F7F7413C2CE7439DDFC89BC876A62152CB049360C1C82FC472B3545DA8F509E3EF235A329D2F451F17CABBDE60B9DCEE16DAF79F4B2D843368A74A1B71C4A1056E2DD2E7A25C01090B0759214271B3A42252CCB0A6200F883060E2FE5E70119EA9D86DD2289273CECC7EC6A35D1FA7BF7FD21A770EC84F442ECD149DCA83761A849DE446A0098DF91CC6F31953BB99603BD073E679D1B57A3E518C761CAD458B39074637F7A718A44E808691D37CFBA0688CD974223B6CD44C7CB8FCFE11FDA78A0BA04DC9F073C28C48CA17C14B32E8FBD604DAA400ED6CB9BE5588EF985CD571AF41044D43BEA3C11247E7B71BFCFDC7D958926680536CC0717701837D2D7CA1F718A4F708214280D34A1B8706C6993F94B6F08443162EB96A322A7A77736801B69D2597759E756C82888104CCFA7137C09DEC4A35040D2F5CFA72F188BE3169FCB4C7D0F1B026AD911EF38B7BFB352A853F482DED94970A333553529300157DD9DD506636774C77209F863A83B068225CA34F94740C0B3E64B6639523983B7A7BE5CD16F8897B5892D63A58E9AC5E2D0BBAD942F4C0F25B3133CFD3E38B1D761CFE8629F5AF70B1033E2F7E55A42DAC83CC500A3307791DA0ABDF7D81FCFB70045FCC7A7A08DA5ABBC2000CF0A8A8A5F30252950468037899EFB8903FCEF124751751E6DE1482912989736A5B5EBC20D28131E5A6412D726235033C7B71C7C701CEF9BC7CDA0C420B00EEE1AD6766F2857A51A9B0B07800C7C0823DF63BCE0367511A93F582D128D14EED9589A644D3F683AA154240237924FC3638D264B72DBD70D6E7C6164A58B90430A0706ACCFF00A429E9582D995380CC18D267B1E677FF0036C354DC2951277806058371FA0E2F4EB042663105ADA53C397B6859DA5C52037A55B9AA655DA0213AA7E3FAF7F88C37E20194828209705CBD1B321C16BE9A8BC1F8156F4F4AEC490189C85054D2B6B72222967C76D0A3FF001A6FEF86F40ADCB971660810E7FF00953F0A0637957004EE3907156F6A67B2260DDA87273D45C574395ED945F5D9298E2525C8A019F0AF89A86CF368C87D4D23B4BD53BAD13892CE8BDD7152883042DD51088DA2799D5F02083279D76A4FDEC630FEE2FC4BD72C9C717D32BA70F8551C2A9655FD2E4EA19EFC9B5A1688657FA57292F773A5332C5CEB90A50044941748F4C9235146D27BFC3032A79DD3F08F3D6034CA09FEA27A35BAD3DDA0B5A485B6DAE3495A10A88923524189DA62627BE045E22849151460FAF1FBE50B02C41D23A1602D24EAE3E133EF3B8DBFCF9E489EE936BD69C4E878C6AB99514CB5E278415D5D3C23F101EB03893104C7CBEBFDB0BF7C387818265ADD4D6A73D29FAF94066D3A48133BA7F4C78A9A08229E060F411BC90E0DB220D2DC39C09C0E4B92752F04C0943A084A60C80073ED03191E8AE6D78EAE0D6DA91C4999FF006C152109502E588147B1AD9DF9FEAF44264DDC2CCF47F7EFD69C0A4B4C293F889503B08EFEDBE34992C17058B8F6EDCB8D213FCC1FEDF223D446A03285AEB9E6AFF9916DBC8B7BD78532D542DB5A5B7D21E5A5058D412A7C103D5E4A57A06EBD3896CCECF2BBB27735AD59C1C9C136CBEAC20AC26D394A48254379DCB9B0C8871972BDB5873A9196DD6DD8404A10EA46B223528B692521240546923D44699DA6410231B4763F7495128624302D73A66EFF005B8379260B684B5EEEE97B54B589F98172583F316637811E52C90DA7D29518D646C91EE63727E533B498DB10BC7CA56110B9C9042A58776A8624B52F67FA9894E0A689D365CB2A0A4A8D8D0926B7C9AB5A7D842C870283CC07E99F4F90FD3AA15A9BD81580ADA0C4C73DC89E74D95DA79D2549DE5292D47DE2E05ADF6FA3C6FB6B61A278252804B5C017E005694FD738CBD47E9BD4E57BADB7A8FD3FBABF62BD65675FAFB155DB52B4AEC6FB8E38ED65A2A9292D9A9B7E635B8FB55A13A834D5C9D843BA6153895B7918B4A41980B8173AE46A7DD62B9C5ECB9D83984A50A152EC2AC2A3E873F08923D2CEA5DB3AC7969CBA229DAB2E75B230119B323B276A4710564DEED4D84A52FDBAE1EA774349154DD5B7565DA74A54D38EB2EDCD95271F8754EA1A17600D454D5B4A55ED944A3B378C5CB5096B207C5FD4D4B3822F97A11710EC53B8AA4A6357E7F9CC868A8B86421B129540244AE23D5E58504EC14412062A499B37F2B3D6529B1346E7CF9DEE29C2CE9853889287A9535EF50F6AD7880F91CC407B4DB72CDFEF2CE6AA44B2F5C1848A17EA9004E85430A41901730A22208F8E225B6368CC44F121C80A5EEB036058507ABE4ED6892EC9D992CE126CD4800A10A533312A62D6C8DF87ADC7F823A4A6FD9628574CDBCDD6D71A7A82A6C28B214101A4A819D414954A6098EF1CE2DCFC35929EFE553341B3D1DC919BB3DAE6C33347FE22E3152A44CF8AA8DE2C0800B582AD7A96D39C5B658ADE2DB42C50213A534D4E84253200084CC40E048FE199F808C762ECB90838245E891C68C1EA469461CDDA390F6A628CFC62EB9A88634A1D684E760C3AC26B33BA13455C52A9F2DA735C1E253A849F909DA7E5882F6C1A51007C2929C8D6B5CFC34F21123ECE525AB7854A8114637B93C1FC3998A3BF11B5C6AF35D6252B0A63EF21B5A8130145700763B9DA44FD3B507B54EF620B970ED76246F1E7F6B56CF3895543E9ADF21D63235F6C15C9353D5CE9C5A54F82DB2BABD2832768646C368DE371CF7EF87CD9128F7532EDDD906D40FAE7CB8B3DA03983F8B2EB52B7350189AE7A7EB6884190691B178B5532C429914EE94900FA56125B5771EAD49223DF78E70DDB4253EFBB5CF0D6A5B5E39F12626783AF766EC94839E953A6B5E8F164792A9501A65C527D2A401A8F10362399F873ED88C2A5BAD4E073BD2AD46152D90D2271B3004B135723FF00750FEF07D746101E050242B571B7FD311BFF009F1C6D3107703694D5853ECFA56C61FC860337AFA7DE0B52CCA808E4C7623F2C46B168A9D492E6ACCF7B54E4CFAC2B259C1CC121FA3D6082FD4ADA1A2AF48546F036E7DF81F4F73C63242193549A3920B0248A9D45B8E4D5AC195DC58ABB13E229EFEB0D4DD52574AEA91BA5008519020EFCCC1FD30E980DC33086A83A06E363E6DC39C5F132A7A16A5052802A3C39674B9F185574D69DF4D8F31A56D14EBA3712DEE92565D79B29006A9F573076E38C3D62BB832CB84B91504559C54786B6D20ED9A66AE625254C580CDEE091637A3F5168BDFE8554D7659F0EB915BA6AE7ED550E536B596884A95FBD71C0150A0201F57E29E3BE23B854CA38A57722A4F90008B599DAB5E021EB6F48989C120CD240524B78509AFCA45AB6F32AEAE66FAD6F20DE1CAFCEB5CCD6D634EB6CA9CA8294251E5FE3569754746FA488277DD27BCE921470E052D62097D00E0483C738A6A7E142B145546DE24B73D48B5FF5CE99FC567595EE987557C38DFD4E28586E1D1BA0B4E66B18752175149562C2B6758D5E52954FE51A892A3B34A20C98328ECCA5666502AAC0D4387CBA914F06A427B4CCB9322E1F77AB802BF46A3401F033D44CB59E3C7FD51B0D78A9A5BAA1FA7A10E39A8334F4D97CB284B60EC9F4B211C082493B70B76A90A4A09292C2AECFD073F750D02EC15A0ADC106A4D05588A0F1ADDBC0C689AEF73B3DC2F759962A6F6D525753D536D8A17EADB42921B09597100B9A4A17E646CA9906771188E6C89AB487A836A68492FD466D4A8871DA8996B21807A03C6E7D436A1ED58A9AFB473F719DFA554C9AFA5A8698CC37C43CC3150D3CBA6714DB65AD68696BD3E6252E19E068831B624FB3E72CE29599DDB7071C2F9F370D090908978707743922BC18D7C5C82E5F9087D6E2FB6CF46A9B4ACA49E8BDE545212A2748B15592404824C0EC04CFB93BCD70A85CC60C59803CD5661C8D6D47D0B46F1CA97BC6A181A501218B1059BA5FD2290BC3EB752F74E73CA1862A2A1D77365CC34C53533F5150E15795A7453B4DB8F2813B086F9F6181F17B3662C16492C7A82EDC6B67FAC0327152924F0B826947AE752F473970861F3B5A6EB68BAD43173A0AAB754ADE5ACB35AD2A99F8992BF21D09723BC84C7B609D9DB28CB1BE65B716E542DA3F58D71DB490258485512326F57B1CF3E341128FC253A1CA2EAC5221414ED5F4EEF45A6C4EA714DB3A960030042504C92040D89C3CE193DDE2A5A7E520B52CC2C4D883E9CAED7331089F8798055C1A9001B5981268E46548B71FB34DF6DDE9316B5853D4D9C1F0E20032DA52D50832620FE15707E1C463A8BB06C654B2E7E51CAA903EB6E1D239D7B74865CD21AA493966790E805ED7317A76D20D3346765B2D049F7200D862C49941D7EF14B622E79FF00FB42F2CA434B25CF483113BFF011DA7B9FEBC6045FCC7A7A08DF0BF327AFAC2C3CE69C51085854903607981F0C0C6E799F58721F32BA7A418D1A1495FA846B034F1BEC7D8FC4738127FCC38FE90523FA7A42C1A6D61920A4825298E3D877E3020F9FA9FAC1C8F9475F5832A4F48DF6DC9F7DB71DB18BB8E5F531B4295A7602676E3E5F3EF11DFDFF00906AB1CE993FE9D6321516074B95A96F6282C3C527B17814A908F9901441F86E446ECF8D965414412CCE5AF6E81AD7BDF8C1D82511353A6F0CB8F8731436AE9559F6855A4D1F52728D721A3171B1AD2FAC47E3750FD3A927DCEDA4CC02660E2A7ED5A0844DCC3173724105B8E6D7D75ADE9D9199594C5AA0B35EBA0D3EB9E58FFEA9B29B7F5C7355296FCA759CCEC25B6FF88B6F2D72A11200246FC13C7B639DF6AA1B144B01F11A8E25D9FEF7CAB437E60E6BE094934F818642CEDC497FD6F10DFA8D6C14B9F338D2A5047957A5A9A4ED2A4386A35AB73F860EFC13DB0DCAF94FBF7EDE900C37AA48429481C24948F90303F418026595CFEB191E92404904EE663F218DA4595CC7A424BB8E5F5300AA13B49D86A11BF260ED85E0997F37BD44048476249EC3E3DBB0C641F2FE74F38FBE539FF4FEA9FEF8C8363DB6DAD2A04881F31EE3D8E32323BA949402A5180393BFF4C2D294CF9E4C68CF9BC21392490435BC63C1525E41D0AD427781EC663718F16B6A3E553761A73F7C93DC0D5BEB90FDC79DA3737E2BFA3B59D15B7DB2F99668E8B3DF869BDD47DFADB78CAEDB5519ABA4B515254EBAEDD1AA602B8DAEB1E506EADC7D2FB4C8299D1B4F4F0D908320BA0120541005C3E62A7972314C4EED14EC3E2CCA0A2122B980CE3306EE47D6228D55ADAA6A5A1BA525722F16DBC309ABB65E29C83495346A1FBA434A480952D304BE6094BC1695104148AF76FECC090AFE19B171BA4D1F933DACCE69C22C1ECFEDC388082665CE6439E05CB5A95E1A082E512018C545B570426EFCADD3F1022800A9760E47070FEB1706CDC584A5134A81019AA09E0454D999F3A54C0E553814C1D913B76FEDF2F9EFBC718ABF6BECF381DE29246ED80AD471AFDA8F78B036662138D037D40B8F99CBE4DA6B5CA9A520A50E355285B2FD222A5AAE4BA95B2A405A542902D014530790CCF0607B7668C06D99B21613BE69CD9E80DF31CDBA3982769F67A5CD048092E37890DCAAC03D1AF5111BF39E49CD591AFF006CEAB74A2A5DA3CC76B78D69A6660D1A9942FF00E6296E74DEA65EA4AB43496887D0A42021CD246A5136360F6A99FB397BC48DE7172FAD1DA9E16AD9A2B6C4E157B3B69A50949DD01C901937A97A78D6B4167330FA59D53CB1D6DC9EF5C292DCD5A33252AC3399327240426C4EA92A4D5BF6648510FDB6A5F4A3CF719538DB6E229524A7580A6354818852C80E0B9D5AF73AD5D89D7834D646340928753310C1C575B56961A50DC47EB1D89793731E9A266A2A28AECFA5286D454B434E5438909242890342940F1B111F2AB3B51B3932B1295D1D2B0AA0218EA48BD62C1D898F0709350541952C8625AA68E1D980736ADF38BBCF0956DBA54E54A5B9D8AA59A7BC7DF1F453D312D8F36AA99A6744A48DE5440DF61CEDBE2C9FC34C42C6225302405A402010C41198BD1999CDE9568E7FFC500812E702436EA94A5288018BB39258F1E791877BC1E788CCCD9EF30752BA5FD5559A4CFB972F55171A76CE9495DA94F3ACB69404FA43725100181F09C761ECEC514E0A5FC4194904825941B852E140166CAD48E4F5E1C4CC690920A54A2450B3122D90CE829E512F339D4F9141726CCF99F765296373B3AD85A3EBA1437F6EF880F6CE795293A94834E20A99FD19EB6689C6CB929972C04B104EED0336E929571BB8BF9451A75AAA92EE64BC05EC1B71D7FF00FF00112A1B76020761BF33CE28FC61DFC4B38507372E686C38B3534B449E551039E5D3D9FAC641FED5779779F14F97ACE83E8B7DB0D604F605D7DA41F9081EE41E3E18986C897FC15139A6F514E008C8DE9014C3FC540CB7C07D5B4B1CABFB186372F58C5B737D12162628ED6237FF00A698FE9F1E30DB8F9601515501A00ECCC48072B9ADCDE26B814B04BB004279014BBF0AD627EE5A48434DA13F8421247CC993F993FA622EB43AC9009AB9CDEDD181A44D76690C872E42867C5BD207D7CF9827FF0057EA47F6FCF1ECC0909028080CD4BB53ADE248A2922841393574F0A41795681ABDA3F531FD711DC54B21652D99B0258D1FEBEE91EC97DF7C98F276D2005C98352CCF6891C44C6DCCFB7F938DB0D24CC5A5010A3BC424B0268780199F12F0685A529512A48672C48160F99108BBC65DB8A6D6975CB6DC2A1150A3352CDA1E2DA008E548A5D2763B19236E63165E07B18A54A44C4A4FC612A50218870EF9B663C5AAF100DB1DA39120A905497048770E08E46ADC871044283A6940DBEE5CE8FCD5B8AF21B494ADA5D3A925A71B1A4B4A6DB508DC4946E7704C1C0BB63B373244956E821817A70CF3B03A52BA40DB13B552D53D2CA04B8059EEF6F6ED47716BB9E9FD15D2E9D0ECBF69B55B9AADAD6E80B74A1640D0BF504AC1246F329891DE710FD91B2D52F1AB2A0FF155F5A3307D6F95A8D138DBFB6062766C948A16BD8DEDC48E14203C460EA3F87BEB8E73B15C9170A54515B689979DA84B6EA52E7DD92255A0217255A47A748264F3CE2CC4E007700EED58659E8D56B9AFE862A75E27FEA0B972E5F520E6D6F0AB451B7DA7367A9A6CEFD11B4368AB4A697A5964A22E05B80F9E8A5B7A092410768512677FD3126ECCECF4F7808B5A801A0E2CC4BFEBC229DA7C7AA5C9352010EC5ECFF08E65DACE0C21BECB0A37AD3E36EC2C34DBCBA84655CE6EB8EB4E2DC7456B3976F25859016A507038941E042801833B57B3C890CCFA0A80320496C9B78D4BB12200ECD6D05EF25CB39018AAAE72D435B361A522F2FA8BD39CE97D55AFA9369CC75C9CC36DB93ECDEADD535AF30F2E89BA952D977CA2B482DA925680BEFA0804C6D06D9F83DC06953F2D68DEAE346035CA2558DC528A92C9274A38B935CCB90CC6B4D6A2AF73666CBA5FBAC99B0662AB7ABAA6C59F5FA3A54BD54E540669DD457F985085B8B4A44B2D8D4048E01C3E6C8C36F638B823E0A83506A2D95AEE1BA3B2988C59FC9B935776629A3355864D4E1A45D7D0657AFCD391B295AADEB4D252DE3A43554B57705A56A6EDEC55DA5E65EAD7034953BA291B716F2FCA41590D9D092A806D6D91B384C0084920D8B3F8307E3C6B7CABEDABB4821CEFEED6ACA6E79E4D417CDAB00BC19E5AE9EF476B5AC89D0CCA597AA2E369BEAEE7997AA39F2CCDE73AFCCD74AD71B5D5D058ADD9AA9AEE69699A084A5B2DD153A105C2414898940D888DD1BC9625812CC5F30E6EC08D416A088CA76B9DE2CA7E441B9CE878331BF482CFB677C34D82EBD3CCBDE21F2F65ECBB69CDF97B4D8F3B525AA9EDF6B4D6DAD4DF988BF396EB7258A365752F35A496594246A8091184D7B3654996ADDDD551DE995C6AC296A03946B89C7AD6124A9B3606FD030A727F2114B1E0E6A13557AEA038D8096DFE9C66375B48329F245BDFF294922767110ADE799DC938864D1BB8E4350098D5BD09B0A67E54D21DF05342F0C4B3BA5C81424B3D4DF2A6B9C5B1FD986FEBE9C5FF00996B395509DE20A697B6DC89EDFEFD39D8223B895577487A8BF27B71E06D56A57B7A12944D2481F112E5ADA66F56D732E22F9ED8F7FC95192786D1EC0F0388F8FC31642DC8EAE7CE28B9E5C9CEBA0D0E9EC5B28702C6B350402667F947D4CF1B7FBE035FCC7A7A08570A3E24F5F53F630B614C1A215DE411F97E5EDFDB7C0C6E73A98721F32BA7A418D1BC5C7903FE8D81F98DBE5000C0B3FE61CBC6DFB748291FD3D3D61628A82A534DF00888F920993F323E3EFB60400EF92C4004DE9AC1A8DD61677767CC38B41933C0F91FE78F1771CBEA637853A591A53C7E11DCFB7B604503F106AB1F48C839B3AFEEF52954C0495413F1697FCF8F9E1BF109F8492C058BD2C3E99BDB942F855113D21C8F886E96241A39E0FC4FEF5FFF006865B43D71E9B5C88DDEA3F2B8988A97C1999E3DF6DF7907155F6A90F2E6049268416B1600E57B35F845DDD915B774F7D58558F88751E218BF08C6FF00889B78A1F10F9C5490069BAD15408FFDCEF03E3138E75DB4829C42A80004D6A1EA7503D3E917F604ABF2D72CC07374E799CEA5DB84430EAEA433D45CCAAEEF57833C49D2FF00F11F7F81F9C6D86357CA7DE71A4340E7FA8B9E75ABF99C0132CAE7F58C8F18DA4595CE125DC72FA980D55FE98FFDE3F92B0431D0F8182657CE3A7A88029E47CC7F3C7907CBF9D3CE07E320D8FD8C8C8E153FE8AA78913F9E3C2ADDCC8E46FC2F78C201B8079C72A2FF004CFB6A3FD3FDF034C5A9E8A21EAC0DAF7E7A1E79C78C341E0237B9D1FEBAD6D351D6DBEA69EDF77B4DD294DBB31658BBA10FD357DA2A21B506187B520389442C14A0C284F38EBB563809C2583F03071467714FA3317B88A2B13B0E61266104DEAD577A75714E0DAB4315D73E883FD22A6AFEAEF45A96B335F432E0155D9E3A6A8D75D79C90E3EA2FD65DB2FA805BEDD39A8529A552A592C34C85A9294EE7198BC2C9C5CA244A4124737F1F1AD9BC10C0A27E0E781DE4C4A7783B38A0E8E6D719793176D76C99B2C0CDFF0026D59BBD86AD2A71BAB634B8BB6D408D76BB9690BF2AADB244A55E5A86AFC2271546DBD805266CE4CB64A1CD9ADC6DC39BDA2DBD85B6544224AA62892C1C92E4B0C8D72176A1E51F434EB28F29D047060CFC4C6E4FC38F9E293ED2E04AD330048671602EC5ADEDC1BC5B7B1314B4A804AC8A8CECE03F5B78D9DE398660829110080426080AE408E02A4CC733BCCE2B03B38A269211659A355AD97021DFAE516461F10B5A6B309A332AAED9934F00C38DA023AAF2DCFBBE84BC8791A5FA60912B68954C80924A492AD8820993DCE1F64CC32246E58382D5626C40D430AE879D41DA58497392A9BDDA0CC62914A9045C5696AF488BB9EB2B5F727E6AFF008FBA5752FD15DEDA17515962635045C6902D2E54D3AD86F487125486D6650A034CFC9F3642D1352C402E922F62E19AB570F5E4DC60D8813A54C60A2C2DCA86ACECD91CE27274C3AAD43D51C8965BB3F654DB6E570A861ABB30EA8A2A28AE948F6953CCC805B4A2A180E2900041482140824622BDA8D9DDECC21212378BF2A5012FF7B9CEF24D9F8E54A9613BE406B976BE81B87E956B5FF0EF90F377553A6D60C85966F798BA6D5F6D7DDB8BF9B29D969C15C87EE355EB43AED36FE86C090B3E9006E0462C3FC32D84A46E132C3862E521C072E7C05FC358A43F133193661989EF14505C313A87B75B06A3B0AC4BBCADE091DC9779CB79C98EA3DC2AF3CDB2E2B7EEF991EA765B5660B7A824AE9EA9B690DA1C5B8B4A541075250654940938BF1729527753540190B1038350BE46EC6B14AE11352540AACE59CD5EB4A80FCF57890FD47AA4B160B928BCE294299F0E079210E2162644848242CFADB1BE9410949D220C3BB58DDC03FED356A8704DF83D2AD95CC4CB61A12513B79365963BC4835B8C831BE66F9BC516757AAD3517FA920C95BAF856F3224EC76DC183CFCBE18A26492BDA052A2E90B343E50EEB2527E12454F3A79FB6378C8678F6B8A2F9E34EF1460EB550BB46D1DF56941A858281330824094F1B0204818B1B0E02648028192CD47A7A5F91F08165D66A1EACA17A91580171A5759EA52A95940521BA7B592424426053F61FC8440C4736F9282024900A80A13CFE913B9677528228C91E9C2258D305B09A15905216DA410253242883C6DB81BC8E7DA303609285C92540156EA8BDDC84BE96D6BA4384A9B30594A4D01604863C8B9F3E75300B3254562692A8DBE555E740A749DC6C15A844F03D331F09C354F94A9988A12C08A0CC69C03F287FD9F8B289733BC592A2C53BC4503558F87211FB2F1AE72CEB55EC045C94D92C247A46B891ABDC720CFCF1B4FC08DC0ADC62E1DDAA743C1B4A64F5A3BE0318854C50DE048391CC0AD2A3850F0A43B1D30CB6DE75CED9432ED6694DBEB6E943599856000514544F365ED063D092D30AD7100CAB54EF89BF63F654A9F306F49429C81F125C8F3A352A5F2398111CED6ED35499330CB9A504A17F29634197519BBD1D8434772EB77888EBF752EEF98322E71B4F48FA4193AF2FE5ACB594EC3962CB74A0ABB359DD537555776AEB9D257552DEAC71275385F6D49F504900018E83D95D9152932CB50A429B20326A74BE418347226D7ED84FFCCCE4AA72C944D5FF0051A9073A9A5B3A9B66C716EF149D3DFF00C41A5CBDD6BC9D4D916E3734BB6BCA9D4BB0A14C596ED5150B48A572F54ABF32899F350995AD25A8528690303768BB1257217BA9F8949366AD1B4623CF9087FEC9F6D932A7A7BC5859043EF54392320C451CD699D488B86A9EB1B7E1CFA3B927303167A6CECE56A3C9A17AD2E9A8B45522A429EA7AC45432A73554BA875287182E94B6374A5240C5352BB1B3F0B8D5AB70A89510C5D838CAFABD6A098B8F6CF6FB08AD9D87DC29040AB16341C0D78654E0211798FC72E61CC7932E8ED1647A5B03CBA2729AE3F7971E84335024ACF984692904C107F418960ECE62538749EED4C43D9EED63D0DDFA398AF6576DE4AB144EF24E4D5A5F27F2AE7CE292FED48CB97CABCEBD11CDA681F160AFE9FD85B15C9608B79AB4D251BC502A4260C86D5C2C13079DF128ECCECB5CB98CB963C0B8E4D401E8ED47F067ED276965CF9638B0048A072C41B906A69F6866BECA555257F8FF00B7AD2DA6119673629CF2F76F50B35D8A8A227D304C193A8724CEE076C94B295CB44AA83BA3E1E57D4EACE32CE1CBB3B281126699AC1694AAECC0B9F139E7768D5C751F2858AF3912F373A36DB6AAA86A19696186DB429C42125C585E84CA802E49067F17699302D9B81C44D24F744B9C925ABC0331E7AF18B4A54FC0A648EF1495280B922EC287853C5F368CDDD7F4DAF199BC4B754AD768B355D4D55C7AA2D336141A478D3D6A022F0E54429A0DC069B479EA5494E96C82208894EC4D8B8899B43F94406249008CC52AECDAE8DAC44FB47DA0C160B0C4A66258922960CE0067C85B93176689A7D7FF001294D9493947A0B922BEBEB9FCB160B6B1D44CC36A2DB6CFDFDB432AA9B2B6F36D2D6CD3DBDE3F76AC690F02E229DE439F8944740767B66270F287792D2E41154822E69ABD2B606E2280DBBB7C62E628CA9C59C1649B871968D7EACC21C0F051D56B354F5469685CAF432E17105A538406D4B2B92B8320AA46EAE76127DB7DB21294A932D2106C080CDA8CAECD67A429B0E62E62BE252955490E5C78F89EB99313E7ED03A8B5676F0EDD53B35456B4B26C485A1D4A920B8BA6A868E904124A61461209E4ED048C42674C5096A7391E6FA70E712F56154A521DD8906CD415CF4768CD8F8414314F9C739B2C8010EE40CD748100EC3EE967ACA61A40111FBB063613EC78AEB14B51C7A195F16FE84B806CE0E4D5E56897E0B0AD842C1FE1346A8A5327E39D79BC5A17D986E96727E73A5593FBBCD4B51067953AD191BC4C44FC3E431D1DD819CA54994378D1340FC3E6A5753C1F4631CFDF8932A6CB933544909DF2D4BD7D8CD9DB58BF6B3852ED946779D08DE771207C6627FDF172E1C3820D7E106B78A51242AAA03E6AF9579C2FAD84A6A069253B7631FE7031E62C001C0AB13D5FF534B7083D0900020007F710E05392509924C03C927F888EE70CC54A4A8B123AEB5307CA037416AD2BD041BD3001E4408DC71B7718D0D6F58520E2AD0A70B4DA54A49504EE92411124EE3E037F863C61A0F085257F313D7D0C28A89D34B4E907D7009F57A87EBBF718D56031A0A9D3AE90641F599C5BCE7AC983D893F9FF00DBE986F5DBAFDE321C2A54369A8A6692949D4ECC84A493FB870904F27783863DA8A5096774E56E85F8D79DE1E30025FC25490486A9160DAF4E8C6F9405FB455871394F23DCD008F26BD4C95267D23CF588044948DF8040FCE315FE36599889BBE0295BAABB162D462C2CF58B6FB2AA05686BBB3123514A70AF0ADC463A7C67B0E5BFC44D5D469D0DD4DAA8DE5848D216438E9D6A000D463B904F3F4E78ED723BBC629804FC59061E15D7ABC742ECD20E0F272031D585AA1C70B71358817D6E507F3D5D1C6E126E14EC54B653B47964294531C13AA146783F3188D4800B021E81DF3A123CFD98127D12A62D5FADBDF0E8C756A8EB4C122424EC4EF247E7FEE70362D294A4B003E6F2218F9C23289A702DE377F13005E7549D23519D00F264CCFE5F3E7F2C03863F1104D028B505BC3C7D825AC004505BEA60B1F796A11AD7F8A7F118DA46DBF1BED87A4F77BA3E175589B0E56AE504CB6DEB585BC3C23DB2A540F51E53DCF3B4FF004C013CA5CEE86A9079172D6D1BDD8D401F0B06A83E2D06727DCFE671A8B0E420881A8FC29FFDA3F90C7A0B1C8F38C8F2F4792B903620F1BF3FF7FF0079D879A14554D1EFD3EFE7D469EB622A478DEF973F28E74E4259528011201EDEDDFE0447F2C23B8AF67DDFF768F1131983B9BD6C5FAE91B52A7B42E9D6D3886DB0FA194052D09214821201D307620F7E7E5DFA9E7C89A99E1637824015B8D6B4152723967A46A6190A46EA5896A8A50E79F972D1E1D3C9BD4FB9E4E77EEF58F2AA6DAEA0B0FD3BC9F35B7597E5B759792B212E34F36B53452440D4489E3064AC70941A616A12EED6C80E7605F4E26398BC105A94502A6EC09F7953235AD619CEA6745EAAC9555DD52F0F34FF00756EBF5DD337F4ADB7C1B55CDB6CEB7EB2DF4ADA035495F50952921D09708F2D2208DF0D7B531586C4E1674B4975A8114BD8DC10FD35D28429B324CE918B92AA84A541E8430E3EFEA0B73477BB4E6FB726B6D0F2DBBA53292CDE6C752DF9172A0AA1B38DAE98A89F250E2549F381D86E51BED4EED7D9226A0929AD6C1C1BB125BDDC691766C5C4FC49360F504BE46D5CAA00F0CE3C04A8482002894A8032029261402A04C11B181237818AE719B1C4B5A894E66A2DC0D75B9FDE2C8C2E24F769624B81A87E2052AD95333C8B2B1C2569420252441F31234BA492469D7C940890380493F1C4736860952D0E80775209603DDDAAFC1F210E689E95CB3BE6E492F70CCD9F83F1CA1ACEA53AAB0E57BF667A32E3773A5B65436C3A954A417921275B640D5DB691B9C79B166944C009B0CCDECE4D1D893D185C8111FC6E182D6581722E2A0F3E7CA9AC1DF860A2AF63A6F922A6A53E7D5662ACB8D757AAA925D2E3B52F55BA80D83A7436A2A480993E9240560FDAAA96B988A7C5BC09248B13EEFA3C35AA52E4CB5280A20151D1802730FCE9F48D5FF845A06DAC936CA94D10A7A6A6B1D2D22D29484A75254F3C4A4011216FA8C9991039126E9FC3B9727BB4300681E8E01B0C9F9785A287EDE628CF9BB814C4ACB035A03F2D09CB8D9B463318A0A90028A96D94254842C928414F0520C69241E64ED8B23694AA80000F6A65E550DF7BC5752404A77AC45D8645DC78B64D47788FDD697BC9B15D5D5392EBCC2D32A3B4250502071C01BFD78C56DDAD0448635F82CD9B0E3D580CCBC4AFB38A0654F09F942E83AB67E27578A22EA3AD4BBDD7B8A50250B7B47FEE25500FBEFF0011CFCB144E1FFF0088ABFF00A85BDF287A996BBD7A9BD631EBE27AA577AF1C99D2A195058174A3A53A6480A4553A54073074FF00DB16349FE56574E9662D6CF974A40D2BF9A8FF0090874E9E9D6F7532FAE28255F757914ED123FF0029875096F57BAB4A13276982711BED0FCC3FE43D0C4E91F227FE29F41123EB52DA29A9492029B6D0A027BA86A208F99E3E9C0C21B3DFB951A7CAB0781636E7E34E260C97C2DBA1B5CBDFEF09DAEA94A5C66A4EA53AD873481F87723F124024C40898E4CE044EEFE6AADC1F99E9E306A56532CB3B949ABB581A727B748F14B76A8A85140617ADD3A52E14EA08333E91B4189037D8991C61D27897DDA6A0D05E859EB53625837278CC02E609AC1E977B8C8D3A3DDD835AD20BC3DB373A5EA46572EB050CD455B96F5BCE8D2154D58B521ED44F2B8797A17FC3B73189F763373BC96CFF003039106D5D48C8E9EB1DED8AD6A94B4B9ACB22F6706AED9FD85A0EFA43D38B664DE9EE66A445314D5D5665BCD13A8532214FB752ED4EE09FC2B455267B28471DBA67666302254B0D64A6A0166E1C46993F28E4EDADB242A74F5151ACC5A9F9DB4A1767A33C57B7889CA48CCED5D8D7525C10C282EAA992DD2C523614952E9D0DA92A2109641094848F440DF6C1D8D9CA9D28B21FE17A87AB8D0E9AF16AC32E1257E4A6B95B0058B96142E5AFC7C84267C1178C1ACE9F660A5F0E7E21ABAE2EF436F37A02D19A16E2EAAA7215C7CF0B4DC5E0F96CB940E36945326992E3412493AC8188EE0F63A3178BF8E5805C7F4B12F53A52F4FADE438ADADDE618A4CDF8500D0A9CEADC7969622D1A4DB6F812C959EED1419AB2C75528AFD9033234D5C15756415FDF2DC84031F7343CA14A421402FF007AE49DF68C58A3B192A760D2D29E85CB0ADAE1A87CF9344153B7A54AC5979B5DF6BD2EEDD69C74BC147890F087D30EB7F48723F4BAE5D53A3B2B7936AE9E92DF707ADC9A85229E9A9DCA6422A13F7A6D4F27428920A91B84FCB1E6CCEC4AA5CE204A3F1583387219C1C9C51B9DA821C71FDA0C3AA424AA68A25C310CEE187B7E358693C21FD947D17F07DD5A7BAEB7EEBD2339AEAADF71A3B4D0DAEC89A16DB66ED49514EB6D41774782B4B754B4A163494900C188C17B63F0B138A4A56A975500A2E9D798BB8AD2B4B46B23F124E0D089699A7F869DD0428330E45B8E95D22C79ECEBD26B321FB2D139515D4572AA7AAAA955EEB7EA43A869B0DA1B057A74868A82B51DD6606D24FD87F8398709DE3213A9748397073975B6903637F17F109414A669763FD752E327BF1D4F3610F3C6E75DB20F40FA177CBAF4C3245A69B3C663F35A6334B74ECA6E36C66BD0B72B6E14D5C96FCC6EA421B0C36B105287DC1A8C9C3B4BFC33C3E0B10B988949709219AC5C5746A16FDC083ED9FC4CC56D04094A98B50DEB3B3BD9B89A71A3BD632F3D39CFF96EF6E672EA1E75BE565230F5DBC9A4A4ADAA2ED75CAA03E876BEB4BCB4A0BFE73C8A8757E91AD2549900CE00DA3B246CF07E0DD01C588A8701DDEDCC3F485B6363A763968DE512ECA3773BEC457ADB9E40BCD0E85756721AF32D1DE32B56D3FDE98523CB0B2961460829D50A51279277DC71B6D8ADB6B2B7DC3FC4925B2E76A316B16B6B7BAF6223BB94952807A5C68C4B5C826F6A532898FD7AEB3D4E62E8C67362AD6EBEF38DD3A55F74510DA18AC0EA9495A8156A1A9846924000056DBED03C62C27BC06E1C3F8DB37CFF00711604854B52249AD407E4180AE4797D0C56E7848A70ACF398491A4AB26E735149D8E97282E0E2757B9D246F1BEE47B62B8C5CC3F9F0D4F8FE267FEEBF93D227181DC18255013B85E81C0B07E20F52D1651F66E38EB16BCFA8494848CD4D0889D94E3639DA44410631D1DF87D30144A02A193D1C0E87F7AC739FE296E0C34E02FBC40BDAA4B7A71E346D08D850916EA240E0B4827B99D283DFE6717961F3FF00888A0658A0E27EADC215F6F2E0A848DA38923913F0E3FCF6C6B8AB1B9F86D95E9E77ABF2A43823E51D7D4C2F197169013B6C9EE3DC83FD70CABF98F4F41074BF97DE835838A47565F4831F97C463585214AE994A1CFE24C47B6E0F23EB8C85257F313D7D0C19D1B8A79012B8889D841FCF7F6C6ABF94F4F583214B6E7343834F1A47BC8E7E20FD0FF5C372EDD7EF190BDB73E038CBBABF78D29453EDBA54895277984A881C09DC700E1A76925E4921B307C2A7C3D21CB04B20A6B63721E8ECDEED7D6216FDA20D69E8B5BEE4B4151B6DE10A4948D921D710B49503C82E2CED23D27BE20D8A96F2E668CA7A5737B65D7EF16BF65E61DF96C5EA1F2A1A1E2082F9535118F0F1F8D793D5FB154A5012FDC32C32FBCA88416C2DC8D29FE1304F756D1CF7E75ED94B0316ACC1571BBD6AF9308E86D92B070B425980049777D585EFD6F15BDD62D49BE58AE48DD3556242DB51FC2A0A14E1C247C028C7B183B8C442465C87A18D311F2ABFE43D6192AC521425B2094A469DE7604473DA0778FEE8633E53FF0077A8EBCFA71846565FF21F48247D6EA90498D698481103473EF24C93F3D81E0CB3CB5EEAFF00EE278F1198AFDE0D5DC72FA98068957E3E63B71F97FBE1E25ACF7609206AC5ED4BB5CF8D32348265075B6A3ED0250485240E35276FA8C013A67F140E2D53FDC2FD0101FE906A6840D08F5835C109B0E43D2178E81D5800088000E3DB1EC6476412EA1495F048E363F9E3DEEF7C3D34CDE1BB18A295240CEBE02A3A8F48E8DB29D25BDF49F51DF790477C79DC71F3FD21196B70C68F73A1F6DCA370740D53A9E7941C4A5B53CE00DB895871042C8D0A94E93A771A924A4C4A54463AEF14659F85203B51C0AEB467BEBADA2BAC2E2A64D4A560B82D47E41B2CBCFCCA3335B12AA65AD871B04956D0AE34FA48DA35024149F702710EDA7869DF1290B670F467E99547B34892617756C5428EDC2B9DF33D333A94EF4FF3D5EF2ADD19A40FADD426AC2997D6A97DD323FE5AA4AB65519EE8054773298C43264CC44A9E12B59DD2A2F98BF0A0B397E10F29C3A024AC00080E1807A5ED952BFA30F1D5CE9950E6CB8AFAA5D3C7A9F2EE7E65A26E5494E85314B9852402BA67A9E99069D456A483A9480AF656F18271099739370065CF4E01F50DC9E1FB65628CA58749E8977AFAD29A5EA6184CA99BDBBF3B5D68B9513D65CD344B7DBB8596B50299C2F32A522A1EA352CA5A76954B4AD6C42CBA5A290501448C4176C60C20A8A48A54D7E85B81CADCE2C6C0E382D09052430A3DC3EB5197935F23069A53950F21D525A520923CC9929E25300EF214378E0FC26B8DAB889480A9065952C82CA48AB11A83D5E24187953278DF4A80402033DDEB6C81B7184AF54681BA9E9A668D4E3480E51B6C20B80C05AAA1921440076294293B49950EC768CC95F7134A882D7CDDE86F716F01C616527BA0D32AA2030727EB47E7C2245F40F2DDBCE4BE9AD1AD8F2DE66DB48E343484A56BD1A8B89020E959323B910237031BCE9ABC54D9699658A94056AF935466D9D74686BDA1365AB0B3804B132CB647A6601141908D0F746B3554D88642CA348CCD1E65A22D38B4B634D2BB48868BABA827D5A5C0EA4A74051D882046F7E7E1EE167C9960AD5601C39AD3E13AE77D79C73076C8944F5BD58AB7554762493BA72233D7A1899D50E14369524CA42368EE008F946DDBF4DF1636D0C500406248B393C8D74A1F588A6142672281B7BAB51D9A8EF58889D7AB83DFB0EBDC4AF4210D388824C9249DFB88EC278D873BE2BAED8E2106424B0F903B00EFBAD9D73E66BD251D9E946589C877DE528B9229526B95AB4AE82291B3CD42FF006CD5171414971D70F3B0DC8332391BCEDBE28EC2A49DA0A50A82B3AB33E7972357E70F18B7C3A37955034E5AD9AB5BC63DF36D40BBF8C4CFCF39EBF2F37BCEEA51905A69D7BD0373BC991D86FBCE2C7948224B92EC028DEA0021C788BB7202C3ECF6C5CD4EED00570AB1F7E81F27AEC3546B73EE6A791294A2E0EB52624A92F192209D891CC83F3C4636ABE314D2C314AABBD4059C50FB68B01320EEA4701A37DDBDB68EEDCAE8B5B490851052908827BA0049D87BC13133B8FA2786499328A0D54411C03866BD6C2AC793C10846EF8374A7BFB472B65521D43DF79F51F494131B7E2D5CFC74EFCEDBF6C06B90B13D0A0A152ED514E60791047932A6725290850249B50117FB01A738565B2E94F46B4AC5321D292A5094A08D5074CCEFB1EFCEDB608C425625A095070015077766E9439D89E90560D49967794055D60B3902A43B55ECDCA15549D40BC51BD6DA8A729A67EDF5C9A94B94E020F9695A55A12762150369DA4EE4EF339EC6CDDD9882EE02851FEB77BF9B3432768240C72169453E0533D05429830FAFEEE5E7C19D6BF302ADF96331A2D561CC29A5CE5455D5254DD329852053DC5A01B429C5D40534825284292660AA4E3A87614D918B972D28410420073504E7737D6DE06398FB4D865E0264E0B988A2956218BE94F117AF58687AC1D43CA3D37CB0696E9982DD7AA474AD48454539F35687257A61F612F692364920248E091896FE5E5A0EEA93F31005940E4785BDDA2B19F31738A8CB9A90039AB6A2F9D0B378DAB1585992C5937AF776729327B272C3952B4B6FD536108A4AC52D61003C86D455E5B6E43C884156A00C7070FF00B2B6099D311325EE8620974FC4C492E75E590E911CC6E3674895313DE82E92000A34246E8A134D6DAF23A48F0C9D68CB1E15BC3358B2556DF5CCD17BA0B7BC5C5AAABCF4A92B6DA09A54A6AD602180524948483ED3031756C9D8815874CB56E82D72DC3871F5B5A2A2DA98EC64AC4AA609A775DD9EA4D5ED980F7CA97BF5CA77377AAF4F75CCD4375AAAC695546A1343403553530714A5695856940D3201D1AB71F3C3BCAD892B0842A614124E4327163AF2F18155B531F8A4252898B4D0135B27E86CE79D5A14B5998EFCC79763A9A6A875AA50DA6995E6AC26004E85690AFE1065400DB8038C3BCDC3C8C4CB42105096091515615AF3ABBB31E5016236ACC948DD5A66A940312093BC5AB9E8E3F688EDD6AEA135926D2D572AB6BE9EE22A9F53C8426AAA12194B6C16D492DA5D21057AD3A76DD2607BBB60E44BC2CA20A92F500000E4068C1D9A94E2D11D9DB701510A44C7160C4D32D43DEDAB3E71123AD1E260E62B7D0F4BBA996775CB7B7654DEAE55F594AE354F6DB6CB2299152E290977EF15BE6432942549210E159013386AC4225CB9AB98B095254960001706A0D5CF06D728336762558E9A12842A5FCA4EF397AE57F1F067A52DF5AF33651EA35E514591AD09CB967CAD5CF53D253B250CFDEA9DDD74FF007D7834A28743E1DF3105454A216904020C54BDAD952E709825B2401A80C48370D5F3A39B45D5D949A30C50172DCA9AA403F29A3397A90CE1B4302BA3D534993730DB95597575E15150DA036CBAE00D1D4912E094800489D3AB7C511B4B0865CC5BAC7F51A916AFBE56AC5EDB3B1499926584A56146F702CE01A9373C8FA5EAE5FB7D0D6F846EB5E6DABD152E334F67A7B3A8CB8E108FBE90E82A986DC040449D523703109C6ECF98BEF1408625C3371E6FEB136C3A8F77283B3863C2CCCDE3A0176A4424F09156FBDD45BBD32C1154FE42CCCE2DB800B055976BAA825C2363ADB129D05409226378AB7686166CAC78357DFCDCE757C816D5B9C581824ABF24B3BE9A26EEC4866FA5A8C456B164DF66BADC7EDBD417140A437998BCA0A8D50C38849000FE256831D8C8DF638E86FC3B5253DDA18FC2906A3910D60CD9BF4CA39F7F11F0B37112E74B4AC0049351C5AAE35AE7CD8C68932EA4B96FB7AC1001A569D83CC1091A7E6226783F0C5ED855B872087D45586BE21B878450331264CC128824BB0B66FC616547A51509244FAB7E22077DFBFC3E7BE35C4AE84D69970BB0F2F777646195DC8987890011CEBD2FECC2CD3BC286C081B1DCF03FA8FCBF46825C93AC792E7866A06D41E59532F3832A35CBE98493B81FA823F91F7F7C7904256EDC6CCF41C5FDB7842B160A9091A489D304C471CED3B71DB190AA15BAA0ABB3F98220C581F75682D7EA1C4279DC1F78F6C6ABF94F4F510B99E1A80BF1A0F23F6836A0A8D4A98540DE769131F1DF6E7DBE586F996E47EF19DFA7FB4F97DE1616D79C55424A6422520CFC3DBF59FA779386DC714F704115AD7A16CB9EAE6F4B19839E17342002081AD4B916FDEE04313E38ED4DDD7A03776148F3036E25F276253E516D7F99D303E246FC8C42B17BA65CD0057755C99A96AF0B5A91696C0C60C2CC9616092ADD6CD8B8FAF8C633BED10A679BCE191EF429DC0DBB65345AB4A52436DB8A04133007A84419F9738E75EDA81F9B5518BBB679B9A16AD2BCDDED1D1FD9F59C4E084C05928402CE406D58B57A7D22B27AAEDADDCBDD3AAC23D4AB5565B1E511B97D9A76DC0E13FF00ECCF92B099F5CA86DCE2132524015068FE4DCF9E9EAB622C4717F3FD623EB216128F308274A66279813CFD7DB03631F755C9CF335E36AE708CACBFE5F68F8F04EBD407A42008E4CC9DFDA237DFFDF0D089054A0BCB799EB95720D47196660D5DC72FA982E29975450368234F7991F1FA460D4A541241356615CDAF9F0E3044BAA9B51F511D10DAF5A7D27F127F98C0D3642B7B7DDC02E6B7AFD1F52F483923E248B91CEADF768335FA2677FF00BC6144E2124331A0F6D4830A0004D6CECE3A0B67F58F41254010762277DBFBE1542C280BB91EFDB422A501AB1B5BCED02194948331B9EDF2C2E950018BDFED0D78CFE22C33FC2FA03A71D3D23BA4C19FCF1B6F8D0F97DE074A54336E343FA7A46AB3C2FF008B8C9BD70A3A02CDC196EBDD0457D1D5BADB15D4552484AD979856871094387436A5A65604C9D89EA754F42977A9BBB3F46A0E315E60E589684A2D5A8238E7ABFEF13E2F763A6140BAB4BC8FBBA5943EA70A8684B6E00942D4AE34AD474A544804EDF028E212898924549B0A1A3062E49EAF9DA8ED27C25D20D8AAA0D8815E06BC3A5E19072DF4EBBA694BA943CDE9A80D850D65A930EA5320E931F8B8F89ED09DAB840944D9A90C52FBA496AF577AD0BFD1E2538196262D2821C2983114A93E5A56D5831A0BA5C6CE554D5152D2D961C2F32F34B0B5AE26507720983F848046FDF6C43958B9880028971519333307A83FA56AD12B918144B50A36962CC284501A8347842F5432452752691BBD505426CB9D28025EB4DC28528A745596E16D33745253A4A560043856524EF2649963C7E24CD0A07E17BE547A33BBD0D9AF5AE6FB874F76CD9BFA7DB870E30CFE57CC974A3BA8CBFD46A4A7B55E9290CD33E4F934D746C1525A7A954B3A5E2E2C2D27CB52812081076C42B1D8213A61510E0005C515D7224F5ABF3894ECE9ED20926BBCCF672001E83EBC213BD6DBAABFE02BD5109A5F3ABADF489D5E8512ED5A612011B92949E3B0DA630C33B67A98B03726A2BA39E8FF0068D7133C17143BA1C973502CCF7E2627BF48E81097BA6F6E6377A872FE556C52B625D74D4D2D038E2836254A3E538B7544030805531BE04C360D63132A8434C4E4ED51E634371E4C38D9E4C89AE7FA0D7799F97003CE3455D1EB1D8FF625A2ECED32575B6AA6AA5533AA065BF329980A524CC08710A4CF1A92A1B9118E95EC5C8DD9290526A90C5B90A867C9EBA8CE39AFB69354AC429AA972E05544B9DE1E0C5F8E621F6AED29652842C29294C6A4990401EE0C7CFE387CDAA8DD9BD5AEF463D6F0C5B347C09A569CEF1087C45D5966C55C949D968583A4CFAB518079DFB91CC7037C55FDB058EED09AFC4817340696A67D2BD2261B29250B59625D478558B64D5EAC338A44EA3D638DBD737D277659A8593BCA480B50D8C4498FCBF3AAF674A7C6121C9DEB1ABBD2D5CAD61E0C0CDAFF00C921892C052B501BDF2318FDA3ACFBEF891CF77827CC697996E13500CB5A5B75C3B2F8D94533BEC48E313D9AAEEE4547F43368C03866E7FAC23D9F483302AA5976B787D69E19BEBD3F756FE61CC750665FBA3AE24FFD4DA9D5AB5A4C6E9208323911DB11951724EA49F38B25361C87A43D0FD0871E716A51824109903F847036FEFF002C791EC172FCC65D436250144E9911AA08D86D2627B7C30DF8C5A90B93BA48249B70235A53EF084D6DE48CCDB857CCE835856D2324301C59215A6403B1DC807E63724476EF81F198956EB397A034A3534E5A1703AC384924A006AEEB9705C96E76A9E1AD9A0424EA309F51E206E76F80DF130EC6CF577884DBE216637A97F1B3139708031AE50B6A7C0A0E19EA0F833D07DE2C3320F49F3175C3C365BDECBD690C5FFA7F982A281FCC290B0E3760729D978D23BB846A5B895A9014248931EFD5DD8F42C84302014839921EC2B7CFC748E5AEDFE1711BF3882A72A53100B0B59B46E79C67FBC5DD5B36CCE178B3D65D1378AEB6DC2A28FEEEE2D2DB7488A75B8D3746E3282343F4A121A742A1616215076C59430EA5CD486A83ADF376232243B52D14B1978848517571F84BD2A686C32346E10C474B2B333563EDB160A55D2542DD4E976990B521A1AC1D6A235003E3C08F9CD9FD96C0121D6033039DF4BB820B57EF111DA73A6214AEF0963BCC6DADFD1FC1CDAE0BA2EFE5C5595AB67529EA8B9BEA421154A6DD56B69B50095103D5A488FD0CCE2D190138794EC3E1A674190A73ABE7101DA03BF9A4003865ABD8B70F178D11F840F0A3454B91F2CE60C9C135194F335B9C7EE2A203EE53294DA1C6D0EABFF2D649200500644013B98C6D7DB6254CEEF7B7546C090E45689D459C8D43DE1C3666CB5CC4394BB8B005DB9D5831B0F030D3F8B9CAD69E90668B1DB68024D7DDADB5F52D34E42564B2D54ADB3A0804A521A049020778EDEECEC64E9A52A0A510AC8599FC6AF971B3407B430F225AD68290E9043101C1ABD40AD73348AA1CC7D46A7B165EB9E65CF14D6FBDD3AEB1F4B16E5B687DC0CD39260204A80595040EC4A08E67138C3266CC426B42DC4BE95D3AB398884D9120ACBA452E79EB5623319E874ACBEA85D3A8DE215F6AA2F348C52DB2E97076A6F0F5AE9D349506C94016C59AD25D4C9494A6B16F2D980B57DDF5C420E11C6E0E6290EF9B6AEFBD425B939C89AD20EC14E93835F789DDFED0A3604905C814B519B8D5898877D50CB194BA6B52DDAAD96376E3736C015F50DDCFCD714C94CD390D37F8D7492DADC4C482D282803204076D6C29B390B212ADE21A80BD35D1B5AF9BC587B0B6D4A4CC49528035512E00A5580140FCEED7142DD74E5CA6BAE6DA343AD3ADA5DAA6F48A80A4689501C2A239F871F4C523B77B398A44C51DD55F204FD09CADE622EAD8FDA2C1A65A7788AEEBD58FFB5B262F7F1668D4F7843E92DB7AB5D0DCFF00D1AABAA4533B9CF2CD2B564AE75694533376A64BAAA6690EAFD0A75F2E14B480A2A5949091B1188CFF0093ACCA524A492919E5463A788B573113393B7107714950028C1E89AB5471F66AF15AFD20E8FE76E887895CDFD31CF34B576CCD796F2D66FA1B853DC29D74754F51A72F5CD8B7577DDDD085862A298D3A997234381C41498509ACB6DEC754AC595149150EE2B7E547E44558D5CC58FB1F6BA66617777D2A7407D1F76D7A1BD6DCB39A7F66822B5BA9EA8D1AD65696AF9529F286EA0A9D6640EE12A4A8FC140FC716776164776A416621203706A643F4EB4ABFB6B304C97314EE5EFA87F6EFD338D1CE575A4DAADA6442E85A4277FC4A11291EE40DC8E477C5D9862E9E8478308E7AC6FF00AC1FF34FAAA1654C85A9F4C249F57607DE71A62BE45F4F487F49FF00A51FF1F54902168805294820830363B1DF7FE586B86645CF2FA8831B7921E109D5BA7B48EFCEDF96320D47F4F4859176421B03D47688327B98F7883DB190440A748530109214BFFA4195707B0DF1AAFE53D3D44641FDA29C968EB4C280D819079F6EF3F9EC206DBB7CCB695CEF9F0BF84642DECACA52D8539E973CC50D2602809D8C11DC011FCF0D78EFE57BE3066CDFF54790F3F75868BC5A52B95BD0ACDDE5C0FBBD038E8246DC0023E248F86FC9E0085E2D82276812AE1468B3367165CABFF48D4E95C9CF5CD8698E2FB44E8AA5360E9CDC9E410CA96ED33B50A4C3693E6A21057012099E0C98ED8E74EDB1231649A0723A3ABF431D37D91FFE18A7B1425F2F7D22ACFAB14AD0E9AE5AAE0469A3CC0ED2B6E48D210F3350930A1007A46FDBFA42242DEA9A92075E8F4E19F382A7870A3A1F27E9A0E311A8B28D6A09F50D44248820898046DC1DB7C0B8E5B82465E1600D6CFEDA12919F07F402005536A4A880857E01FC3F133DBDB0DF2261DD3F1067BB8AF8C14ACBFE23EB00984A92EA8942A20F63FF00503F9E150A192878B5BDD2094509E5F5103028C8F41E47BFF6C78B592850DE16E107CA27791C59F2CB31F48E8F216A884A8F1C0F9E05979F4FAC1B3A9E23D238CB89DA08236DC19183257F4F23E860499975FA40A6160214A5909F57276EDF1C110DF37E6239F993F681295050D492143DC6E31909C5D0E7FF000E976E97DDCF52FC3F54D65BEB0B8AABAEB4D12CCD1A132B71754D24A7EF0D559821088520100CC62F7C46D232715B99000000D81F3B9E7CD9A20225EE2C24647CA869E1477B372947E17FC7C51DC9E3937A92D0CBF99680792F3350B3FB26E6FEB2CADE01ED0E26ADC1BA99D2A00990A3DDE24E382D374E94356B0A0074B1BC3EE0DC6E823E17152EE6BC067AF9C4F4B3E63B666579DB8DAAA29DC65E74389A64906A495090A4804FFCB11C4482648ED81E684E24F7343BE59C5457816FDEAFAC9B0D37BA22602C52C6AD93BE7C3EFA1EB7453F24FDD79276E4899DC1DE7E26379C4536D6C9EE52A52521200A00347AE9E5C59EB0FD86DA4262C02431BB96AD80191E835CEC516FAE7285F26AB66CA890924FE12A3A7B46C2044E2B3C592898A04939568E6FAFADB28956117DF0046401CAC474E9AF2AC00CF595B2FE7BB52C548F2D486CA28EB69D20D652D5A654164EC43435208DC190BE7BB6AE727780CED7ADF971E50F928F772D8172727201E66A33E34688B3D5FB0DEF2D74DACF6CCC043CFBF9DEC349435CA926AA9142B1CD4E13B957EEDB912793BE15978544EA6E8391A39C80A66797AC07899EA00BF8836BD5FEBA5DE2D12CABA9CB2DD25C28554A9ACA0E9FDB6A290EC1D152CE4865DA7282770A0EA53A4F6207CB0749D8D2C2D13375208F8A834D6874E6380788FE3A7BCA9AC6BBA6C5DBD9E2EDC22F2BC2C678A3CD5D3DC93454376557D53D9617557D7D2E34B34B5C56F6A61642CC2840E7B004E2E7EC9494264062C3743D98119B8E971D291CEFDAE2A3885A8DB7CA5357714BBD89722F950C497AC79CF295E7021DD2A0B040D94363A8CFB7C7B8F8E15DB6026616BD695AB331F13AE8205D909DE44B24E879B5EDA52F731007C4CDC0D3DB5F6E775870C4F203904FF610714E76CE610A9491FF00CB1E201B16A1CBF689BE0D213300019D45F3B027D73E6FAC527F54AB4B16BCD3567FF2E8AA940CFF00D2D2C99F86D3C0E78F683EC797BF880A24305124171E3F68F76C389048C803415D599FC6FE318EEC9D70357D49CDF52265FCC17A804F30F03CFCC88DFB6E3128DA44A250CC65F5E42AF9FAC27B007F1504D9DEBC395C70A96BD225174992A5DC6E0E3C7F8C9DCCF7FF003B7111EF88EC5902A07210FE3C52A71453F84C47D1201FD7191EC0471943AF305427415C7BEFA7BFD3E3FD7026225F79325076627CC8FB40F3BE64003AE8C4FB3510A1454368D0DA53AD46401F00924C7788DF1A633083BBDE7AB0BD1F23CE97B7521E1C6536E8BFC834A8619117B6B5E11C9B4875F51D41A3247B47F2DBDF9D87067697F63708F310589F8D20B8E46FA861537EB0DF8E524214A661B85EA2D56B915E77B014A5EF78337AC9E1DFC13753FAA1D66AC7ED566CEF5EBA4C956DF2C2EAEB1A4D1B81CB9252B2D85210B71B4CA663604FB766F62367052249DC705176343CB317D1B439F30FE20EDBC3A0CE14A2961B3A0CAB425EFF00D4D5D63297D66CB0AEA9754F335F1BAAAA7AC55F986E6FDB6A45194B953486ADD553BCB01641F31B295920AB549DCE2E4C2EC84A9687439A3B8A3D350C38B9605A968A0311DA09090B2923322A3A06B9E5CA1F1E9274F5CB352B7434F6FA4ABA60A00BF50814EEB29D525C2A295CED2989E7718B070F8446024CA527FADA961D7CDAC72D22BDDABB6138C98421814937F1D75A731C0089F3D2ECADD344BFE75F5EA0A5B851E97984AAA10A4BEF201296C82949324446FF002ED8397892A94588A0CCD788636F7786791FC59A9047C46AF43F414F748D2B7820CF765B2F40EDF515D72A4550A353346D36B11A741D213B8DA047D01DF15AF681615337C97285382E5C5DEC4D2A39F078B6BB3DB3A5CC9497482A292F4A0A677CC71E1C2B17ED6CEB6659A56322DCAD69426BA93EF94D555A929D4DB2FB952882A1BFFA6E81C8F90C7BB3BB452B0C94A7781DD0031344801881CC827ABC4776C766A6AE7CE5252C95295649B645AE5A8055B58CC3E7EF12760B8DBAE3956B6EC9D46B1E14EA52C13FBCD2A23F1011249F8C625B27B6B265207C49B0B100D99F3CB3A5B58864EECBCEEF58214DAD9D2F57C9C684532B3068B35F895CAF62B0D0D82D354A5381A4B754FD3A805A1E2880AF499E358DCEE7E6302627B7F283277C7CC07CC19AA6BA9A0A3F485A4763E7CD64049A87143534777A82D66727462C7A74F6FB9033DDB9C4D45DA899BB3DABCEAABAA9015A5C275692493B249D2098DFDF07E1BB5187C6206F2925C56BC3E8F9C3B4AECA6230CD4219CE62E6D62F4D19CB4373D50C8796F2A3D4D7DB4E6AA2A8790F857976F5892428280012B9FF0006F188FED8C66126BFC29AB9D547CB3A6BA521DA56131523E10B50666F02E3C6AD6A9BB45C57D9A9E28A86DD75B2D9EA9CAA6AA6D9FB3D2DBF52AFDDD43D4AB00B80C890428FCC7BF38878C12272E62A5A431340D4CC781E1FA0944ADA13654992852C852454E440D397D78C5CAF8EFE8FD8F385F7A61E2DB2BD3D27ED2BA658CC562CE5F74489AA42F2C5D9AA576A1491EA525E6E992357602315B769B66A53389DCA851A8160FADDFA1CA916B765369CC5C9014A029CFA5FCCD1B2D6B9FECCFF0035BCC7D5C69D4C2957779E58FF00F66E38A52827DA4B01AEF311DB0E5D989425AD146701B2D05AFD357843B56A0B913140D09147762E1F9398D11655FF00F53D8FFF0060FF00ED4E2D4C35121F376F18A1319FEB3FEF4FA9871E83FD647FEEFE831AE2BE5574F487D4FF00A61FF14FA1856B9F8CFC93FF00DA30D70D08B9E5F5102E835F9DE89E533FAC7F9FD271906A3FA7A42A054E871A0912E1911EF2933DBB093CC7C7190441AA5096509A86D5E63AAF516F9827911FAC7D7DC6355FCA7A7A88C83BA175ED5BFC36E7DB6E70DEB343C4FEB190BBB528909D5C927DFDC7D48DF9C35E3BF95EFF00DD066CEA628F102BE43C4FA4257AFD4C8A9E88E7E6D6DF99164714011C10B2677F971FDB10CC5074CECC10470B6B166ECDACC9633A1BB58FBCA31D5F68536BB8F4C72A2BEEE02296F8FB6A31B20256DEFDBFCEDDB1CE1DBA2F3D570C540B5C6597D0E71D33D92FFE16BFFE9868A7DEA6D532FF004D29EDC7714B9902E3DA1BAADFDFB0DBFB6F5E4951715A6ED5F4F76BE9056205C8A64DD6A7AE7C1A235B7BAA477E3DB72227FCF7C0D8C99F306A5C5CE4001E5966F09492D93BA80E21DBCB58FD50D8519FFD313F53B1DF607DC60294A60EC7959AC6BC6B05AB2FF886E5FBBC16A91A4CFD3BCC1DE3FCFEB857BCE1E7FA41528B2DD9E96F08F89E47CC7F3C7856E086B86BFE907CBF9D3CE07E3D979F4FAC193887BE63D20139F8D5F3C192BFA7AFD60499FD3D7E91CDCFF455F3FE98221BE6FCE7AFA98EF4EAD34C4FFEA03F38C64271ACDCFF00902E792D8B7BF6CAA1528AB422ADA1A3554334F508F34A50F146A6D0E20905295810403B1DEEADA7B3E7499F33781DE0A51240F8989BF8B7400C42F60CF938E9E26A825492430A115CEBE7A1B442EEB2F878C9BD61A05DC32DB5499573EB42A14DD632C374CED55C1B6145A78BCC23587CBC942BCF242C9885EC30D2938A4299331600E6E6B5777B034B9B5844FF001F2B0B264032E52527747C4033D5EB6FB501D6107E1D3A85D6BE9867E6FA579B69157FCD76441A3A0AA5D4F9AF5627D0B6115CB717ADF674B9050F152209DB0F9B3D7382D0B5AD4195772599A95B355ECDC6F0C099E4A26FC4FA07E1A3EBD5AF68B7FA3CDEAAA452D2E66B4FEC5BCA19435514AE3E86FCF79D0002D04B91320E93B7260ED82B6AAC4F4281650AD0BEF6796609BF310460A690454BD4509E27A1CF951EB5E3534B4F54B7080021A2A6CA16428A4A3D0A0A2499524A482A2492779DE71566D4C27C477520397A0A3D73238674A3729C6CFC44C012429551A8701ABCB515A1CA909E4A9CB5D634FB4E285382F17DA4A94969E49080843881E95A5242880B0409240124E2278C4A642482085D0EF5C07BF2E0D9F200CBB0057398A892D7725DF3B519B4A5F5308BEBB5AEE7D52CA7D34B558A914FD6D9738D9EB6E34ED2402BA364B885BAEA44052505C48F54FF00A86264C19B1B1090AF8AADE3534A743935DB80DB6E5CD4A190774D438CEB4A837A69981587E3A8B74FBA5E6A2D6DAEAA9AA0535BADC8690EADB0D269ACEC53AD8404AA12D696D4D94001253292026460CDA78F54B989972545014A1637AF8396D3535BC03B3B08A5C89AA99F1B254A2A55C33915D45AF9E4D16C7F6595ACFF00C2B9DEB9C485B0E5CD8A3A64A84A19D34ED79A96C19090B528A96131A8933338B57B173A62A5277892C2E6C58F4F2F58A2BB7B265A672F7120328D8D5DC925A8DF46A0348B5CAB536291C72410504FCA41DA3E53C1989C19DA1511314412E090E0D6AFD7373C2233B15C840073078D1FD8F38ADFF14F706D36E5052405283B0606A8F3481BEE4F1C6FF2C523DB05AC947C46887F76F7A44E7044AA657FB8656246B7AD628E7C40DD15419173E5721C5A053592BDF252AD234A29DD519208EDCF78C43364CD98311457F57867401F43A8E904ED64A44A096B80FAD9EBE60BFAC6427A56EAAAEFF76ABD32B76EB79AB2E112A295BC80995193C9EE7E5F093ED15A8CA0493D72B7A3C6DD9C969DF248763ABF1CFCA26874BD92DB9504832A0751EEA3C127DC73CFF7C4693317BC9AFEB4F7668B092030A0B0C843BBE690B290A3B122276F90DF63BE094AD45DC9A713EFDF08F58683C047753E8425255C98826277E63B89DA7B7CE302E2E62D2B95BA4B31248A390C589CDBCDA919B89209DD146AB0700BFD5A0D5CA9651461D4A121E4A50A0B48016214907D404EE92A0AF704888E483314B080A2E1937AB12C4B7A7947B84AA940B3076A68EC3D06761C616DD26C9355D5EEA8E4DE9E5238E530CCF992CD44E55364B65A6AA2A299B7125698504A829454010140990677BB7F0F3052672E56F4A0A3BC923339356A7F4EB15CF6E3684EC3256254D5206E97DD2452A72E05AAEDCEDA3FF1E1D1FA5ADE9D647E9659CD3B196B2765F6A8954ECA10CD0B2F2E9980F16D94A52D214E29B2A70A520ACC124F38EDFEC8ECB44B461D5DD848DD49650CAF5A11C7A176768E24FC46DAF35466EECE56F3906B5F137B0E232BC6653ABB4595FA317243D70ADA44DB28FCBA585AD24B7E4A4A1612D6F090410984F1C0ED8B83BAC2C991BDDCA0280A52B46E147A5A86801ABC53BB37BFC54D256A2B49049724E74677CCB0390E310D3ABBE32B2D31494B61E99523B7FCC573AA6A969E96D8CF94E216A28871C5A03616D8255AC1511A412446F886ED8DBC9C1305A86EB9DD493415F10DE6CD5893E1BB34AC7288969092905448491BCC09DD76A97A31A6B4AC57066DF103D5EA5CC8E32FE6EB9D0DF698D4D5D45352DD6A19A5A56905B28A62DB4F25A4D523D63646B015F88702BBDA5DB89928A9299A4393F212180D051EF5A7902625DB33B1684CC0AEECB009F980F89557CF74816357A0CC3468F3EC9FF1C57FEA274D2E9D35CCD7E79EBA5B1C66AA89BA8AE5B8E792C1297033ADC25095050D407223508C4466F6D04D24AE6156849A873EFF0068B1F66EC1EE12001BAD76A64E6D97DA1C6FB48A82E99DFA5AF5DE8EA6A66DFE654BCA69D70108D6A73492956C900C08D80E36E5B57B4264DDE988984255F10DD51B1B0FB03E7074CD8C953950DE0A77243BDDF3617F7511932CCAB22EB5952FAD6E2DB7D612A512A29524904EA26428ED311BC60399B4B12410272C060E77945AA5BD33761E4DB33604A51AA00A9D3A1BD05DBF686AAF959534A955C10A70B4EBC1B2428EEB5256A04C6DC2552499DCF071A4AC74E2B057309D4126A473E0FAFA4692B612659F8433021A8D5E25B3B01616BC15DBB32D738B0962A6A10B540843CE24C9246FA5404CF13FC8CE24381DA739144CE50B66D4A30B81C5AB5AD2B0262F652927799DE859AEE001762DD016E30F56557AFB71530D282EAE54984BE7CC00C8DE164898DE4491F1ED2993B44CC401317BDBA2A497153535EBABBD85A2258BD9738AD40129009B71A3382D524B019398945D24EB666DE9067DB254D55207E8915E69BC8294A909696B4250A283E9F4F6046D33CEC5DF0F3BE1749F84B161C88E9955B4D443662D064A1282495252E4A8B9B86AB92726B9370691B04F0B1D597FC41741B30E41AA583554168A8BAD1D3D4381C210AB6B951A194A89D28856829481B6DC1C05B430D227A495212A531605890058B17F0CEBC624DD9EC64C421D330A69606FA6746A02E7D2220780AA3AFCBFD4BEB1DAABD8553BAE6667D0131A49453E84810236D000EC0A4441030CFB230C65ED10CE2580DBAE400D6A5295AD235DB7B427CD05266A8DA9BC5941D89614AD435C5E952741F941495525AD07F086A424C40F4A7748DC03F21389D03BB661D2222A96859DE524156B99E6617ED8F21E67493BAC4F3C6FF11FA9E31E1F8AF57BE56B5A140A500C096D1CB696B72D217A86D0F3285404A9491240850890076EC07F9BE039A00590037B3CFDE968DD284303BA038CA97A9B47AA7A7769DC242D442E00F518F4F3DCFBF1DFB73B271B8007D1EADCB485630D96D91528650EBE882D85A0124A884AB723FE9519FCB7E3190A4B014B48362EFE04C7E6D55BFB4DA2EB4184282494A004A4ED330981F981EF8D57F29F79C17B88B6EA7C3EA2B0AAA13FBCFCCFF2FEF86F984B7335F3319B88FED4F80857DBF58A89D6A08D86993A79DFBC0F7DBE67006340FCBBB0B915E248AF2D6F044A09432920035B061C0D3ED9404EA9CDC3A639F289B3A8AB2B5DD5A019054DD0BEE21447BA5602927B1008DC4E2273D29DC9941653529F6E4F6CA27FD9B3DECE46F7C47E1615357AFA12399D631EDE3928AA6ABA3ACFA9C2AA5BF3C167512A0439EADC92654237F84738E78EDDCB97BF34800904B16AE64BBF0BFB11D3FD9A50185422C0A58A4BB00D6E835ADE29773CD0F99936F6AD293E45CA9969244E85294E05292636510A2091B91209827154E1D2E5C87A273B9A7DEF0EF8B422AC9FEA66615704900FDCEB11861C69C592A200528804980357A7E11A40F80ED18DF1484D1C3D737D04364A0378FF00C8F90A7847471FD5C288DA089DF93B6DDCFB9FCE70DC258AEEA41ADE95F187D912D0A4B9482CD71F7AFBD1802D75E1BEE7F17BEDF993BF3CF138F7BB3FDA3CA090840A848F08E21E0481A8EFFF00AA3F91C7A997F127E1171FDBAC7A40009000201AB5A0D92079055E6198264AB73F5E7EA3711F4C16109161EFA422A5A885397A67C2BCF282A5A881214791B8277D8F7E4FD71B000580FAF8C033262BE263CB83B3B4040E2C900AD4412362A27F99C7B031528DC9F4F4833A695282493A74CC76240DB6E3E38D549DE0CED57F751EF9C78E753E2636B99F6D2FAE86D2D29C5B8DA69695B405A5B2A084B3A42428A24083B6F1C0EF8EC4ED06C696AC64D52534AB1CAF5E02BAF120D0C54DD84C54CEED0175214CE5E8FE04BF8DF4AB177FC874CDD4DBAA6DAC9A3AC76BA8DB716DF2A4BAFB687080BD4028254A5020013F8A4023107C46CA0859F86AF57A91939A3DB577B82CE45B5B4F13FF004A96361939A10EC5DCDEEE29E0F147A6397557DFB48BA861F4FDEE82D16FB7394A8D4A282F1A648A851D274EA4794D149404C296AD53E9D3B7E4B710480CA676B17C9C568ACB90D5E22B2E793BDBA5C6615A9A3EB402991F389EDD6645BCA735DE2BE8C8ACB4B7515AD3ED2DF6DFA516F0E29B14E12E682959002FCD43A63649044968C6495049DEAB02EEE0E41ABD0DF2875C0CCF8C02432983D86A07466AEB9443DE8978ADCA7D4AA5B8D026B29D8BBD25654522985B852E2DD61E5B4B5292E2CA8A8A90A2A208DC930018C43B1E94872A001F88172CDA679DA26D809A96009A8B17A87A87CADA706B565237569ACA0D41497893AD4A68CA4409082493DBF146F11C493881EDB9456CB424916B1241AE997E879CDF644E4809049BD2AE6CD90B30176716D0275BBDD752DC91576EA97685E4D4301496824A0A5B750A2829710B30A5252541242B600286E0B6ECA96A4A954C8B1A0F0EBC7E906ED65A149C8B964F0353CB9EA3520C2D2F970ACAFCC66E756A15552A09AC579A04799534C1A527D3A55A501C25BDE7501A89120A3B494B18B9209359800273FA722185290A6CD969383C4100525AF74501A824BF8E8D602D5BD6FB3318728BA2D986BDA405B9FB7DCAA675CC3AE06D905B568D24A069000042B73BCF179F61C0387073091E04B7AD68D93C7367E20288C4A92D452A61B58A43D0076B8777667A562C56BDC34F4AEA3F12020985732019D846C278FD706F684FF194066E0F81ADC55B3CB2D2235B0C7C20E419B81AF36CB9EB158BE2B6B92FB6869652D84B4F01E59D24C3DC90A2ADCF1B4038A53B5F747FC33B65789AE03F99FF0070B5FA4519F8A0AF4D3749FA9856521B5E5CB930A737D494BD4AF20A93B81AD23D4931131E938846CA3FF52468BEB619F5AEB066D8F907BCA3295D17093597004029FBD5C29757F1790A742D2F7B7984A0098D2413E9988956D03FC149E793B58F0A79F58DFB39F310726A3F42DC7ED135BA7A94B68538932A713C1DC6FCC4411B0EE4E2328F9875F4316026C390F48700947DE5E415180A11046FA9295099F62A8E3FAE0A45CFBF7EF58F602D5BAD171B6C29436E646FC7C37E77D88C258B015DCBE56766A5FAD29FAC2894FF000D6A766A1E4DFBF2F5EFF7D096D2D2C882529954C90A50481C8E676DA246E37C23DE04AE580AD0106CF9529ADC181A428A4CC53D9D86A6AFE00FEC5A2C13ECEEE9DDEB39F886C849B5D1D434D53DF18B856DC1601348D5BDE4B8DAE99451A12952580A59585C09823B74FF00E136104E548240237904E993039D3EF568A67F10F144266B9664AACF5A1A6957CABA69175BE39AF7588CA55EAB65538BA87EECD51ADC49D5FBA6DB0DA88500540954C898062130063BAF63C944991872DFD0011C93E3FB664470C76D26AE74E9A492DBEA67621DD8306B71B8CCE9998F19DD1CB65C72C5DEFB99EA6A1B2A0E2E9BC97424ACA67415A141409503274A41513B9C3EE2E6A8C9A1705C50EA05EEC38B0E1A431F67E480E4A4001DAA6F76BD8E956F5CE655DE7FE02CE02EF9794F22B6D558E1A671CA794E924B60ACAD075020C9292209E46D8ACF6F6066E3010491BB5702EE4E6D9BD99DEA6CD1656C6C5CBC34C59514D52C015070A22B47A1B9D0DB38682F746F5DB31545E6AD4E28D7D4BB5F5F50A7D1A817B4F99E9FC5A13A04227793CF6AA36BEC29A0AAAA0E3EF6142DAE76A889848DB12CEE84900860080493E448CEE0D730C62C77ECCA5E674789CCA56ECA76EAF5525C2D354DDE16A6AA3EE29494B1A5C6CA0A65455C798B5A77D86E31133B0E7050625A99BF1A9639F868EF07CADB7A390720E4D6C4817E7C846AEBA99E1EF36E7EE96E69CB0B64B2AB85A5E4D2543B4CE15EA758F414150D2773B1D2491064738904BC0AD12902AE10DC09D756B78E76051DA933758300C4970A177B39619BD691986F115F67075AFA6160B95F514AD5EA8D55954F1553B2A2FA124EAD1A50A2490983F8772A81C6C84CC1CCAB825AA59CE4EE3971C9F8B87336A4C049009E40B575CCDEE34AF0AB57328666AAFBD65FABB15DCD7D2BC5428D346F0765054D1502595480A5A53EE756DB7287E556953EEA9FE95CA84B3E5E3481CED498901F3049B97E9C2F5AD5F93CBD38F043D7FCE548EDF2D390AF0C5B596DCA94BF56D29A4A90D24BB3EB6D034C24CC4189C178744C4AAA19AD7DECEE3CEB940589DA8BB25D4E3420583D0B976AD8D2D0B877A33D50E9B531BA5DECCDD3FDC164D4B6F54B4890DC15681A82B7131CFEB879933D69003B12CD9FBCBCB38679B8C98A05D26B4A0BBBD4B8F0E9A34242BB342331DD1A7934CA62A1A530CAC6A0AD2B6960F98954692B27F1287A4F603122C3ED14CA9680A50709615142199B81F51710D3B470B3172D2B08350FA33DDC9D7896E11A28FB297A8F755F53AC965AAACA96E9AE9685DA5C41308583425A6CFE1D254AD2807503254600D86081B41138B062F424351F5D74EAE0C2FB1E42C20905807AF16D34617D6E6C227A74C6C8F656F123D5BA15B09616DDC9CA942024A7CC6DE652B4B8623F11E48DBDB0EB81949EF52B0EFBA2B95896B54B00C5ED036D124CC20839BD41F941AE7737D69CA2E5726CFEC9B35549D6E322533E91E947132677E670F50D70E134B5079826152B1F8B7F8FC319190BA438A4282877093A7F87F08E3BF7F7C093BE73C842E0300340D064C56256A1E684A4A7F004CC19E66493EDC6DEE30947B0AEA174388420A8210A1BAD246B4E91220994C9220C8E2637C646F2BF989E67D0BC09A8520BA8752E294A6F8922151204C006677DBE7ED1AAFE53D3D60D83BB784EA4924EE3F5DBE7EDFE766E5DBAFDE3215B44A871C02084242927E2639889FE980B18DF97208CCB136D5FA57DDB0CCDD60E6A5A82D5E15AEAD46E2447DBF52FDEF26E7024952DDCB17E4047F0902DB55C0DC99893B9C4527FC93392A275D989A7BF96013550150C68AE42C29515F17C8EF8CFA523A4D985BD13F74BE5539BF321C56C781A411D8CC71EC39E7B783E39CEC2A59B3A75BE7D7278EA0ECD2F7A54B0490C96F06E39D5F3F206927392D23266714370AF2D76EAB6676D656E80B0A8FE14859D3A6083CCE2A6C37FF88D0E9EEB4891E3336FEED1EACAF1CBD22235C5D69B4A4A49D4A4A547E0550613B6E37DC19F8F6C2B8AB8E7F410D52BE63FF257A797482276AFCB5694692149D44A8C19248310408D876E67034A97BC09ABEF17A8FADED120C37C87A7A4045D415F3A79F7FD39C2BDC9E3E22088E6A760120A640247D07CF19DD115634ADC461B1AB52FA718F6D573CA4146C06FEF3DBE3F1EFF00EF8F606558F23E90369C979252ADB446E393B779FF003B632009BFD5D3CC880FC3A503849FAEC7FB634528A48B55E9AC0F1F1EAB5B2B4A12131A649333F2E46D822527798D1CEA4002809BFEF191BAACF6D06C5051AC02F34848569DD00349823518F6F6F7E36C775E3C206F998C55F15AB9DAB76B8BD4665DA9BECB138542262E89041A166E632346F6D0DB57B08ABBB58291095F98F5C2852809120A9EA9699415191002FD4A2412120AA0CE2118A12D4B53015701879D7A5DE968B1311B46562A5096925C860E43139FEC49A5F48879E05AD073178D4EB3660B885BBF74A7BC3C5453A949650114F4A15276297296A647094E82092A213A49C389A532D29A970C6C694A682CEFD21A8257250B9AB2C94640F9D6AD561FA44FCCCF97159E730DC6D9494A8A9A8BCBF5D6F4D30909790FB152E275C0510343475424C181BE01DADB1A64A410001425F9D9CB5C696E4D066CEC7CA9A404B825BE221FC9EF6AEAD4D697BAC7E12D397EE175CE1D2CACFD8F982C377B8D3DCED4D3CB690FD7D0D6BCCD7240420950350D3B04A44880A031516DAC1CE94B504B102CF616BB134F4B8D62C4D9DF1212A4B683AE77AB027C99E04F413C53D65A73031923A96DBF62AE2EAE9DB76B9B29A5A8084B680E25F5A924EB56A09F46E53886CF450CB58798A24B8B70152FCAB9D6C2247256B9252B7714A2497F139D2B68B04B1BF6BCCA59B85ADF66A1156EA0B084AC798B4F9AD8F33482469850F56AEFC1C661367AA502B5039BEAE58BFD05DC64D04E2317F980944B2C5DEB5B6B5CFC053A2B2FDAD8BFADBD24269BEEF4AF24FE2D6CA1B5385204CA34A15A4C8331B419C346D1C1CC9F8A966586026015D5C56C2EC2AE6243B3D13256071054778774A0E3421D9BFDB507F5206833ECDCA6451F876A6A9A8074D65FAE3504A46A529842DA4A42B71EAF4AA132471BED8B87B27FF47250261AB2416B3338AF33C6803640737F6F41998953350A8B1399F8694C9B80A51A26C661AB6D0C3A3D5210AD26010440E77EE04FE5F11827B40B0B3DEA5C0209A80E33D4EBEA223DB0E5A9282481A6A4DC86CA87DDA2A67C56D729C712A69442501E6D5220EB2E95EDB99052082646FB4441C51DDACC5CA52D080483BAD5A17A7964EFE069134D9D2CA82E60B215505AC1ABD0DEFC5A28A3C685CCD2F40BA9F52859429DB157A5B5189D4DD3BDAB519F4CF689E3E988E6C4C22E6CF2B040057CF21F6EB1B6D29E89A90914209E4CD77D35A46623A46BFBBB176A95AA036928246E4BEF38B3A80DA5212850D720C91B138916D61DC4B016EF576A162C5C7856DE060DD852D52082A00B90D93F8E57340ECFC226D74F90B55BD354148F28C01EADC8F7883FCE7E188922721C1AD386AF5E99C4F5361C87A42F5411E6BAB2A24A8898DC6C9481BCF603B02368DF0621697A177A52EFCA3D7BF0BC15B5A2A2B9294920371330264ED075476DF6C28B477A13BAFF000DDC589B81C1FCE15429210A412C56401E9F5D7481F7069B42D08DF528120C080B4A4A9327B00B022071EF186C9A423112C024B28020D599816B7BCA075E1D72A5AE613F0904916A16A5F37D6AD16F7F650B776B77586DF5C2E5E732BB15CD4E3041943A1BAC09283324084990049931DB1D7BF82C8DFEE46ED8A6ECC496A6940DAE9C639EBF1171885F7A94903742ABA924F98F205F9D8BF89BB9D1A72BD5523DE6D49F32A9E2B080B87CAD4526490201D89991C0EE71DB18595351265BB36E0BD0B0E17B5BCF28E3AED1246326CD4A375C2D4EE39B80CF51AD1E919B8F18CEDEAFED2DAFDA950C3218607908696EB2743475442920A8C491124ED382553529042F437356BE953FA521BB67E1A6494848A1B6A0D40D46956BF8BC60E8F784CB775CE9A828EA2883EDAAB43351515343F722095842D497417CB92262423DF7E0B26D39928A014B3F1F4273A700FD624181C24F44D52D5F1254D40E6AE5CE7763CB3678B62C8BF61AF868553DBEF7985E7BEFEDB4D542DA5D4B7F742E001643A0B7FE993B2B6FA6C6603B4B0CA9BBCA1B8071E2FF005F589860B0332600EEC555166B5685C0FD4D339BFD28F0ABD05E825C29EAF28657B552D4DB8A5876EE5A4057DD500070B4E36CCA94A090402403B622CAC34C49AB100DC07B7D7CF9187B97859725B79E8C3743707D1EE7322AF0FC67CF18DE1AF2687B2D515C68B34DF6D94887AE96EB6D7A5D7A9DB0CA5C71A71B7299B2875A492875A9506D695A42D406A24CD5C993252562C012CCEF524B11FA75891ECEC361F1ED2E5215BC18156EE990B51B3FDA2AD73078D0E8EF5E73F55E45CA5625B8E22A7C8A8A0525354942D4A8529E296D2941208053A49800CEE61ABF3F859CB32D2E08A17626B4B866639FDDE08C66C618672B96480091F0E8F5BBF5F478595BFA29D1A555BF5172C8B626AB5CD9554ED334D2C294A0A307CA3AB7130772771185E6C94250998DF092284B1CDAB5B65677CC1686B1B353318EE1152E48A56BCC1CAF6D616CFD972865CB79B7DA2DD46E50169492CD32D094A12A4904684B4028004FA7500488053C80CCC94972CCD4B876A0191A5BDB47876420D38E94F127219F1CED15C5E29BC31D9BAA569A876D4BFD98EB856B2D21BD085C83F88A567D8C082277C79F9D909A39376667E0F66F7A831A2B624BB51BCDEA5F3FD72A9115377FF0677ACBB56DB14C0A8A1F0942DAD642C056CA51D13BFCCFB6F00E019F8E054770D2D5D34A0A73CF2CE04C66C55CE9425CA01D0EF70E757CF908B6BF007D35BC74F336D9AE75EC9F3A99DA55B0EA754A1484A0AD0A2523F120288F727B60DD9B3662A624EFF00D900FF4B5FADA05C3ECB5E06593319EA2D7BBD2DA0D4DF278B5CBDDB6993E216EF7D650B43B7ECBF42F389D3A4173C971A9589DA548306098E4E2CBD9615F0EF57E125DDE8D7F471115DB32C0519812D4DDA0BD59DF416B7A4593E4A712BB15A5299961A487246D2A4A634FBF1BEC30F511E870D9F53EC207295827E8378FC8E32321723703FF006A7F4006049DF39E42088F9A14B5A3498D324EF13C7FBE128C83A65FA86511220000FA8CCCF2040EFD8F1FCFC2583C6C856EA82AB4D2F6220EE94B8A48528A4823DCEFF48107FCEFBE8A50208AFBEB0477E96B17D29EAFEFC595746A2820A94636E3E3FE7C87F31552890C159E9FAC677C8D15E03EF0ACB73C9529677F5A34A76EE08E7DBFC386EC78DD92504B901D8660BFABF916AC789266CD09470BDFA0E7AFD215B4D46AA8B4DE69D5A61EB0DF9A82795545B2A9A6BB1FFCC526606C37831BC5A620A9332CCCABE61CBFA44D761A8E1A74AEF4D8EF3F07199D0369F58C9378CDA057FE19F519042669AED717609FC2843AF27DB63285109E08893BE39EFB7D294813D54203D5F8927236D7AF2E9BECA6253365CA280E960E73161661D49E968CFF00D757B773CB77C611AE4DA10B775A441536EB311B9913C481F9ED8A670D894021C10E00F0BDBAE9CE26B8C1425C7CDC8D8FB7E07488AF720928681907CB6E606D3A52491BCCEFC9E7604018316A13FE506F736F6D51E10D32BE736B9E79FBF184DD518713A498D00EE07BAB1BC992B4A4E649240CEE72FD61E2562112C329DC816A8F2F22DAC06D6AF7FD07F6C2DB8A6D381BFB3048C420E47A107EA23F6A51DA79DB81DFE98494581E341CE372B04167A8A75EB02194287B6F31FA7F28C2308296965723941BD28F292A52F854446FEFF2F6C6437CD9893BD7CB2D1BF68E4DB6A71E52923624F3F1FF003FCDB084EA32EFBA0D2D7E3FA42214156CA01DC18702E440D2399E4004F1133EE0FC3056026A6710121B75AFA82C6BD1ADCE3D8DD9E6F3F79BBCAE0034EE3E07B29C4850441E1402B8F79DB1DD1B44EF6F72B686BEBE1E6D4DEC8006152D42F73F7F64067846D8D872A33858948802890F573A9588D28A143B5456A9D9294795AD4A2404A412481885CFF9A967FA06F7FAC49B0F55206A5BC49E5CE2317D993475973EAFF8A3CDAB4A1428A95DA7A752B4E851A8AFBE0094B9B20EAF2C00356F1B4F72304ADD9D288398A8E6FE5A79687E283E1278AB6E805AE01711681E1932BBB9AFAD7635AC25B14F4374B9D43644A1258B754C2960484A75B804AA04A80EE061C36AA8CC49147B0D28ED9F10C7D5AB1FC04E12141CD1245286A48E2D41CB431177AF1D2FA5CB7D40BFD5D982745CAED74BA56B0E8D0DB95571AC7EB1E84ABD2A0E3AF2949890B0A05332062A7DB3823314A648CC13992EC41A0160C4BB3F57B3B636D10C06F5C9B1346248A5980E07C2202757BC3BE4BEACD1BB4977B73767CC8C9F32D379A66C30B0B5952508F35B851F2D68D4ADFD2160F7C40711B34FE64021CE42ACCE751AD4B06B6712D562DA56F3D181705873BB3BE42C5E8612FE14BA61D5BCB1D7DB5F45F35DD94E5AADD4F5178A0B821F2EBAFDBA95A529A68807CC2DBC92970288D2A0D4EA300E1E13B2D4243947F483D6A294247951C17730D5276AA533C242B3D3D4E6435881986789DB99E9E8D579B9BB4F50E3CB15B52DA96A0A095A9B7D54E4851D9509495483C09F7388863249958C42580F8C3B02280F10F71162E0F18266CF9C4177944DDDC6EB3370FA0ADE3431E04A97F66786CCAEC16D49350AB8BDEA0533FBE3EA98FC88DA46C799B03641212949DE0282DA87B02CE5B5B1F0E73ED9ACAB14A20824AB74B97B124B814142DAF94499BE3C452AD2AFC69695A813241833239078E637F698C6FB69CC82E59C000E74CB4E14E2F006C646FCBBB160CE74E0DA5B85DF3A9BF1455014E29215FF009EE857A924032B8077304F201DFB46D8A07B4E9DEC4249E39F46D6EC6D7899605225C99C9373439170413E235FD22817ED0AB93969F0D9D41724A16BA2A968030090EA1C46D3CCCF69E238C13D99410A19FC414065930A9E156B6777867C42FF008A4121C109B8A026D7A9F4E403E68B20DC7EED65B92CAD214E1A75805404FF00AC41890649F603F38C39769103706F3B14BB306A508A558921B3E0CF121D9B34132C104DB462F6F0D3C6F12F7A7D985C4657A3742A4AB46A83C4C6E7FCD8F7F683096779824A78DC0AD471E82260161850D869A7387A68AB0545221ED6095B649015BC82A1BC7B7BFD307CB9562C1EDCC68291EEF8E3E03EF052D57A696B16A52D224833AB6F4CCEF3B726679E7E45200496620A99857958FDA3454F4A26CB15014580D0FBCEE39C1D3D736EAA1416852824F0A063483BEC499EF1FEF806748DE9E821DB785F9B86B5C674CC71874C4CE0BC1ACD5CA1988BAB2019FAD8DAC488B8DFB24DA76ABA9CD3CE28A826D1736D23720ACA2A82503FF5A89109124C8804913D75F82C9EEC49075068C28C072CB908E5FF00C4047C788A929DD51045092CD9E841CFC044FBEBF59EA2AACB704A15A9297EA75B6A3FBC035AE6531A80DE361FEFDA667A5185964A803DD8B58D3C5F4C9D83D1E395B118698AC4CD7493FC45D4B9B916072A0B1B45605E7A6597B34171B75A7ABEB028B6AA447925B40D920E95BA082473E9FE43118C7ED4EEC1ABD451C79559CE6383727BD97B24CC58241200CAA5DF4150D5B30E65E251742FA1D4191ED62B134A5AD70EB54EEA590869C0A2BD48D0B58D44083DC007112C76DC7012545856EF67E76AE75BB178B0703D9D0B403BAEC1C7C21EA3A6B7787B2A6B331DCAADDB753B8B4B0A4F92946A2949492469E00811F1F7DB7186A56D3133FA89143C598DEB536D0DD843C276589000092FC400EC4FB2443C7972BAC960CB8FB3704525755A5003CDBB486A9A42A3D416E069C4244EC64888DF0977C85BB1BF01CF33006270AB5A804A4B923A356FC9B32FC22983C6B654E9FEBCCD9CFA7D972D196B3F5E169A075CB7D334D8AC0E2914EFD4B8A61A0126A1256E28AE0852CEADF119DA5B4107790FF2386274BFA33FD2B169764F6761512E5A9413DE1F99C5A9567177E90CE7873E9AD83A3B409BF5AF2EB073666149B85DAEE945329DFBF3C94A1C521C5AD2B09094208884CCC411388ECBC50131C1CEC5BE9777CAD587DDB186C1286EBA3CB27A123D05B812D1275CBBAAF4DB8E572AE6A7F51694EBAE254D79AA9234A5B796A2400A8504C01B132402F9336805619080A1461CAEF5637B78F188FE2766C81864AA501BC541C8AB50961A0CBC3484BBC9BA59DC52D0E3CF34ECC0256A012BDB83CEC41E230DABC600EEA22EF5A1E3C1F2007586B38150A04934C802E0667ADB90B982CADA9B855364B8D1537C0052A8881B477FA71ED380D78D009AB9E6078BD69667AC79F90516A30E34269936551093AFB252D5794EBD44D2951AA54D899E77F4F33FCCF7C2031449B81C2940EC03D72D45214FF2C1BA08D067A827207C290F87476DED2AF748D25296053BADBC1084C6B094E9D1B082A323D3BCC490762251B197BCA4D4134E0DE56D2DCEF0CDB5306021A96AE64B5155E41EFF00AD82F54FA5B5960CC79533CB696556EBC65AB6B4EB8820ADA7FCEA8425B5C6E95194CA4C1008DB8C5B1B31F7524FF6D3886BF97BB0AA76ECA0894B3FEE241A3F07AFBAD984497C880FEC4A6541D3A1BF546DC0EFC61DA21D0E053B8A35692018D5EC63BFC769FEDEF8C8C85EB265A413CC6FF99C093BE73C842E9B0E43D23A1714CAD0A83B93B0049311EDB9EFB6F84A3D851B34C6AE955541253E5049D041D5054127D31BC6AE076DCEC36D55F29F79C6418DBF51506C83036120FF0084FC3B6118C854B1DB71FC3DFDB19190A5B6F2DFCD5FCCE1A768E7FF0011F582707FEA4724FF00EE87168C9149500027CCA74B262661E3E5AF8DF64A893EC049D862347E45F25FD626D83FE74A04120B5B903CFC2327FE3729C3396FAE36F036A1AFA8084C44798AAB5AA011D8413EC08F718A13B7C92B18848CDFD3DD6C2F1D1BD877EE25B5FF0068CDF5BD536DBFB246EBB42D2946FA94438C92129DCA8889546FC92204E295938273672CD912E2EC45ECE3401B48B0B18A6043BFC56001219F87237F288E37481A01D884A4107B4240FA11041F96F87AC3E0800CC2B52471B3D72D1B5BD416995F32AF5565476777E432FD613355FEA27FF60FFEE56379B2BBA500198A5DB8DBE96E2D9414ACBFE23EB1C9A4852883C413FA8C08BB9F7974825173CBEA23BA5B429400293BF000246FF03FDB012EC39FD0C183E51953965C1BE9060D327FE927E9FCFD86DC77C2503AAC791F4814B4E9409100102620707190DF32CAE7F58E96F09513EA4CEA02091B88F69FEF84678FE193A7D635458F3F7F580F734A405107F84F079DBFA7C3BE35D8C7F887FE4AE95FD3D6378DD1E6A7595DE5C0833A1CF2E0700A2527B733B76E71DE18E2E93CAA75357FA7ECD14FECE0061C01953A55A1276B74D0DCF36DDDE80D5AF20675AB528980128CB3732798DB6F9FD77C43A7FCC79FD34FD3C3390C8BA399F530C9FD993488A2E9EF88BCDFC3173BA535332BECA530EDD5E80AEE41AB07EB85B0D49882D6636A3DFEFCE1C7135C34E7703743EAD53C62D33C1243BD60CC8E7268F28DCD831BC17FC94EF13EDEF3B7C092E589F8C1A02C74AE6E2BE4DE31039B3D528BBB12732D4269D7517CCC345E23AD46B7375C5401229EBA891DF6F2DAA744131F031BFC781188CE2F0895EF1297626C2BC297BFBAD257B0B1CA514328BB8A951B92016E55AF106A2B108EED429A97DD0AFC748A7134F263F7AE2E081C6F094C83BEFDB7C43317B3D3F9F40DD21D2CCC43D697CDCF0C88158B0E6E29430AEF933120D585F5E8F57BDA141D20A362B7C775D6609CA3D13A6A9A9FFD2FB947F774CCED30B5C7699F862527662538470013BAE1854B0A8F1CDFD5E212368A918D4A52A55E841702ACC7DBF026005DDC4395F56DA3709A97AA0C131150EA9527BC4380F7C531B7E50978F4E47BC1F6ADAA753739D62E5D8B8AEF366CD1BCE7B920916B59EBC813707846953C29D39A0F0FBD39447FF516CAA7003B482F2C49E2771F9CFBE255B19BE07B3876E001A39F3CF8C51BDAE5933D4416759A371A742ED5AB93521E1DBCC0F85397154FE22E1063911BFD3DBE471B6DB2461D59B0A52CF7F2D35D20BD8090658372100E7AD03758A8AF122E076BEA1A5EC8150F3C781EA4158064C7B0F976E0628AED125E782C0B38CC9A9E0F4AD5FA562528065A5672F88D68F56E4F503A6919EEFB536E8AB7785ECDCF9D94F16D96C9E34A9C5A4FB4F2780647CF07766523BCA3B795AB9BBD3DDA22B8A59EF95C083D5DE879001E333B97EB134D65595C053CDD328151EEA0E81EDB4C7F51872ED125835E8EECED7E9D0FAC48F65A8B00ED66B35EAFEBC1B844C6E98D538729D3070D2994A49952013F91DA7D87BF6DA61084024EB524E7C48A102264144805CD00B51B2FADE1F1B3D65286521C083E82096EA12948E4FA405EC04C1DB754CCE0B968A07AD99EEE0E761A46E1645C03CF2F06F7E44D77BADB2916A2971868ACAB579CF85EAD3BCA4151E3519889044C9E3798375480FADB5240A70E95E10DF8D9AA4CC90453E22CC4037039E61DB282BA3CD56E4A5405651A09DB5798DEDF50B9E279F7DF05CA9216A964EA0876398D7AF161A43A99AA56114EAAEEE7515ABE8E05401E0C5A2E67EC91CE94B53D6AB2DB29AE014D3952D798585A4EE542679E0F3FAF327A97F0A409694102CCC2AD500D1EB6AF0AF21CF7DB596573A6A4D42B7C17045DFD6A48BB5B28BE0EAAF47EF171CCD7DA0AB9A7A1AE64AE856001A8B9E61246C41D940F02277C744CDDB4B08082A2C94B316F21C1B4178A626EC60262945345177625AA73ADA8FABD1E21256F87DA1C9B7771F69E71FAC5282DC51208D6AF5149DA363B0120FD3117C7635730A8A946A28C0B38BD7E97A5B574D9B824CB58F859EF4B915E0F4E400CDC43B960A5A96A91AA27D868A531FEA244907691AB7E3783CCF1BE2398852D65C92D7FA8B3702E79BD22C9D93265B280497DDA9D036B6AFBAC1ADC6D2DD300EA10D30903538F34121C6C46EA410641126363CF7C374C9CA96AAA880FAB311C0F3BE70A6230E95100061A5DFC35A1A830C1E7DBBDEA92DF574F6A7134D42A07CF7524079D0793CEA25409DE3923724CE055ED754B05D447235146E7466D0B5A16C3EC644F6514D481501EB56B000134AE4C6804534F88EBC5FAEAE56DBECA2B5CA969E7566A10959FC0E95448100EDBFC7999C45311B48CC9B30124BA8972FF00417B1FB11475D9B819D2153025D93BC94DF42011E2DC07404AFA33D52A8FBAD3E56CD54956DD5B4348AF79B710032A01091ACA42765A56447C677C0FF9A5A6A4B8A91F17266CCFA369086D295893303B82E03070F66245EBC6CCF489596DCBCDD6B46A6D97E2E216B0B0D171109904FE62761CFB099C2F2B1C56C9DE2455D8B80D5A87BD4B51EE21CF0B8199DC02A2775C5C679D353EB06F5167AF65B06A6AF5A50028FA87A801247D7E07BC0C7B3314C7E66346714AD7C5B417CAF0B8C0877203DDF74DDB21600FEF1C1C4B5E4198F68F87E71BF1F2FCB00AF14A24FC5E634E4E73A479F9324D8005FF00A41A70A53576CDA99A4AB1C4A14100FE2576923EBB48FEBC77DB24E21D40B9BB1AE648D0D2AC6B40FE2DB3D22595A400E28D473C85DF5D1F93BE1D12B725EBE34F2BFF0029F69DF6D9202B99DA4F6FD2622C0ECFAC29692EFC1EE39F13D6B42CEF0ADB73F752B6290D99219A941AD8DB30D9802D5F381466BE98D1068EA36C5519DB78F217A891DA2393B71DF91726CD1FC341FF006B7AC53BB7311DE2549FF7105CD4696A5C53A3C283A789F332DD320EE1C81F4481076E6379C3A44561C5A44B5F794EF3EAEFC10263FDBDE39EC7232160DA004052770444FB6FBEDF3DBE63B6049DF39E5F7685C5872102D84179C4C004A08927893FCB8EC7F288C251EC2C69CF974C7B4048FCC81F94E3557CA6323BB48D0438637DFE7B7F9B4FBFBE118C81ECB7E5A82BEF0989262779D891FAF18C8C83CA0AA01C4B3E66B82140F3F8A7631C8EC7D8E1A768D8F217B787B7D7427023FEA7A0E1C7ADBE90E8DA2B12B656D288D49648489DC9508E0C93CEDDC7188D1F917C97F589AE13F9D29F54FD3DD6F6BB465CBC67DBD5515DD7DB738092BA8AB7120CFF00132B1F5E0EC39FE742F6F5413DF9CEAD9E9CF865768E8EEC3B8932C8CABCFD98CCEDB998B95453FF00D4DDC198E49E06F3304C4F111C6F8A7644E62083515BD9C64D91F2E31616301624100EF3EB5AFD3EB471118B3225D66B2A9A008F2AA9F6D3D89287169888F87BFB9F887A91880C012E480DAEF73B39A01C2B0D12FE6537CDBC7C2BE953C7C8A6565448D5CC7E927FACE35C52F7E602CDF08E399E1C20B5172390F67DD9A3EA15A751F74107E523FB7F9C61BD773CB9E43282517E9F511CE99F0971647692620EC24FCC77E3F3C06BB0E7F4305D93C93F483C62E0037C892207C369933F13B40DBB77C25081AA4B6863B8AA69E4049227691C4C133EDB8EF8C80260F9BC7EA63CA0258751A23D7EA89F6907B1E79FE58467FF002CC688B1E71C6B9CD5A877D067793C0C6BB1BF9A7FE4AF511BC6E0EF7589A8BFD6B8890DA1E5CEF235254751E3927BFE7071DCB8E98538D54B07E0291434156A83A91E75BC535B1D13BB94A567E5533B33B1676CB326F56A1844675BC9B5F4F3AC776F38B496BA679B2990E6C0A1DAEB2D7D2370AF8B8EA40E79ED88BED729924141290EEEE1DDA85855C5B93D5E2678794121CA6A28157360E5A957A8A3666F096FB3B689CB7F841EA1DCDE5FFF005D9CAADBD644173CAA0A17002644C1A8D4047F11FAEF8159561D7314ADE5848DD566F5AB64CD5D33B98DD64296115295065036BB58F2F131665E0416539FBA8B5F52BDE8FA7950FBAE1227EF6AB95A9943C78F5843AEA676490B2626082254F5AAAA24F938CCD1B3000E19C4636C61A5A0FC29A7001F3CE9987C9A103D587555F996F6FB8E9751E754B84ABBADB52928548037484A40331E91B1C078C53025F76A2B52C2E4F13D215D8092169001201ABD6BECD180AEB94277D80E56F96A542EAEE6EB0DAFBB6E1F24B4B1F14A94A23548DCF27111C4AD4AC7249517091734724D88B821ADF78B326A41D96B2456B5CFE517ABD0E4E3EB07FD1EA249F1A5E296EB4C436DE5EE99B16853C9FE12D57533280099002525C481C80B33BC43D2F113061C8DFA6E9F4D5C71B36B15F6CD419DB4B766071BE4F023780A3F03C72A986F9E52D9BE3085B8A5A5DA87D2F8DA1C67CC58A74A8F308486824EC4691338A9B6BA52BC7CA2B0E0CC454F30DC1E9C7C62F9C1CA9787D9ABDC4B3CA524B66E0E770DEC671A89E80D3A697A35D2A6024065AB46A7D07F096DE56A482398324F3F09ED8996CE932909A0B3313C81D00A3E5AD9AB14376B494E25443BEF13C0B3F0E4FC4D5DA14F797140D4EA51D45B70AC88DCFB9EC4FF0063DB6C30F6966291294107752C69D47EF4F3823B3F314650AE977B36AF578A80F13154E0BB56212E100BAB0003D8BE0286F277048E771F5C511B426AE6E2996ACC8F32073E0D47B44DA400B9130A80BB7BFD633A9F6B756BA3C30D5B3E7295E6DEC30B4C8F5321D6C841F4EE015A88DA7723E726D912D2842549A12535B5737E1AF288B62804CD536848E17F4F742D19C5CBE862E36D5530754E3A85D22425500A1B21D94F13B7BF6F6F7F31F317354A0B2F76A710DAF3195457474D9CA5256901AC09661FA655EB48937916CA95513742CD5D42191F8109AC4C09DFFF00D84EE4F1FDB0CA89482A24872439F1AF27CD98C4A533E630ADC039DEEF7F7D043B56DE9CFDE9CFDEDE9F415C4A4D5994F6489080093B418FE7B9B224A1954CFEC69A741E19FBDF2F51E1EFD88510E89D81F5A0DC2F2BD0BEE1D5BC55104CFA93A7F5E49ED85FF2F254E4A4920382F4151ADF80FAC24B3DE2D054D427A66E34B7DE08EF9D25E9EDB8147ED7B8AB74A9C14E950529295A54B4A495AB7524292241FC5F4C1782C3A5739096058D00193B8CB5ABBDEF7782E7620A30E52154DDB6B9312FC4B701A45EB7D883D28CA55BD7CB5BF65B5DDDBA4A471AAA7DDBDAC292EB28014A532DA50D9D0425477518DE0E2FEEC719984420CA56E12904FDAC1C6B9D748A63B4E44C98B510ECECE5F23CBEFD63583D68CB2D2DD6EB299942154C921B5A12414A522000678D87E2C5992F13394DBCA249D5EEF4CEBC2FE115D4E627500D1DAD53E4620875028289B0A7CD2B4FD4AA0B85493F8A4FA8C11DF7DB6DFDF1AE3274C4A0B16229C83171C3AD73875C04996549F8439619B87A38CB2D5EF10E339666ABB456BAB65E71A994065B3096B409D4362449DB727D8EF388CE2B173D144ACDC1BDA8D41EEF589577624213DD3A778392F523ECE61014FD51A8794A62AEA5F5024A54A5281090604C40F8C72379EC70D53B1535419530D5BADFA1B7847897355573079BBF8FDB8476B8BB6BBFD3150ABD2B2399E67BC0207C38EF86D9B395524926B9D5B8FBD6B787191327218A55B95D1C364383732400219ABC747ACB528A9A8144CBABA8538E29CF2C12B2E294A2A99FE2D53DBE18685AC6FA95BCD526BCAB430EF266CD0125F22496B92357ADAB7A9AC3237AE8BDA9B2A5A6892CA80202D2D252AD209237F81279E49E77C79DED3E70CC4DC675A6620AEEC4D20AD891576F0763F5D60A19CAA8B0521FB9D554248581E5CFA5221475473322363B4FBE05C44F3251BC850497BD7C9AFF00514CE1CE424510A000B8C99B2B56BC4BBF182A55DEAF5966A6A56F267480A3B093C6C01DA7898DF7C0431739446F2C906DA0E0330386B0A2E5A415306A3F3A7B1A08106B1B29D24CA7DA4441C12272CB1761A3E94D38406A0C481C3D0415D525979680902410447CE41E2789DFEBC9387AC084AD5F154642D5F1E5D6DAC3062D090A52833D492CED95ABABF1D21F1E97D4396DA92EA5CD04912447E0D0244C411CC6C36F6138B2F61A5092860C58700ED534E17205E207B7A424A144669A1604904DC8E02CDF51163FD3BCC0DDD726DCED65C0F3AB6965092A060A53320763F03FDE6D0D9534A969482E9666AE86BA7EC58671506D5908DE596A177A3390CF477E595F843B9901B34B68A669C31E529408EDEA8DBBFB7BFF00338904461529003806FEFD3ED0BE084A1E1A446FDA7B13FD86320685C5180AA56A4032933B7FEA380A6175AB816850FF002D3C54474161EFD206B294A163400993BC77DB1A401DE2F7AE6EDCEB9BC29A9FD4C8077052991DB99FE6271AAFE53D3D443B4842549008B939E9062D2429304023DA07B9F87C3F9E11823B9471F18ECDD025449E47B7B773DBB0FF00B6D8C8CEE51C7C60E6DF46DB4B494A00F5448993DFDE3E9F1E06C30D5B45B75F36FA53EBC3CE36C2A427120014E246B43D2BD79C2F2DA8712B4E890A516D06267D4B488F873DBB8EF88D1F915C977B5CDFEB132C129226CB258D52DA52FCFEC097D738DE32AD8559FBAD345A3771A75D56DCCB2F6E47CFDBE510314376EF0EAC52A74942B70AC9653DA94731D15D8F2A5E0809349852C92054A89B8F2E37378CB2B6F7DDEF150D931509AEB8A02F8569D4A103B761BC1DA4E2829DB231D85C400AC71DD7B6EE63997B5DDCEAD48982707B4144F7B354410E5C58F27B682E3326911A3302D5FB52E21D3A89AFAB8276DCBEE0E78206DD862532A4A256182953C1504B934BFCD5E595686F064AC377755A9FAF83E8E6B9966AC27DE692142520CA41FD48FE7380D33553A52CA266FA8123785C001999CB81A3532CA1E132642B0656402A059F46AE8F9F1E153019C6C6984A4024C1F7237D87CC8180E4CBC505033144825D8821855B9B86A5465A88D36777332690B40371566A31B0B867AD1C9B5A0BCB650AF4FA64C18E0C9DC1FF0037FE444F94564252188DD22F42D5E2FCF866D1EED954B93296A9402484960FA7016BE7CAF53DC6C206C3022D2AC387592A3763667D1F41E79C32ECE9AB9F28958248A07B67D3C32CEA5FEA5452652483CFF93814E352480258ABBB1E0E3A6A03738027617153F13B889B42A2376FC7F539E5781B4EE2DC71256A2A293B49E01DF6FA83FE1C101031929442CCA2321C1BA37B37683F11809981909EF6612A5A4149397F535F85F3A3473AE755AC00636209E641FA7CE7E7F97B81D8F8B0B3B93D297DE3BECE58F0DE151D61B304674F9FBBDE9624B24D682E0DAF7CAF4E1B6CAAA92D57D770A0A75C1AB826167788237FEF8ECFC64E7C7296497B1A9C98D2E79EA589A9887E070C9290A480D5E06F436D5FD218FF001077876DFD02EAEA5A82E555869A950B2B2931535ADB4E40E4FA1667700FC24E239B6E603F1352EF6AB1AF0E25B5CACFA995BA872E1EA3A0F27D3CE1C6F056FB941E095748B6827F6B678B93E5E528821B55AECADEC9482141250A8248DC9DB6C6DB3A6ABF273083FD350332C58BD1EAF4B65480801F9801CB1559CB33877B39ADE27C7841B8B742D75A2F45F0D2D593E8A90A0184B65FB9DB9C012BFC44CB5A620483D88C292263067E377E9C406E50DBB66500A279B3071AD331C69C003686E3365D0D4BF76756E0F59A8F505491A8AC9F844C48F79C218C98EF57A75D6D9BE5A016711A6C241EF5361560FCDFF7E5588A95AB53570A3650A2A5D45DA8DCA65910AF34BC438803711A42370779DC6221885B62525DF202D4AB81CBEB1626246EECD5240B8248A7C4E2FA64417AD0EB067D06B807BAB3E35331A9CFDE2A9576A7553212E0BD5390359DCAB4A17098F961DD7377B0D762D4E2A60696E571A68F16D8B85271FBED4241CCB56D5BB5736343610DF2EA3CFBCCA881E5D451B08227D7EA695ACFB15980609E79F7AB769CC3FE612C12E04D16B50BDB3E7E3678B95237702B49A34B2D4672C08A72E7EB1AB5E91D2229FA5991290B840395ED3EBD3BA4BAD6A300F7123BFC79C581B3FE4B3D35B7C290ED9DFDBC73FF006BDFBF2ECFBCAF0F2CB3C8F38F7981C0117178FA7CB0E694C9295083B933EFBEC0FB6231DA7FE51E47D442DD9EFE4A798F2114E3E236A7EF575AF52A1052EACA637D50F899DBB71B48EF8A231BFEAB462AE0D537ABFA1F533AC37FA799CCFD3DFE919ABFB56F31D2D3F482DF6AAF73FE5EBF31B8D2C0325214E3290A4A0C054492018F79C4B365FF0029B83F0D4F5D622F8A2D38DAC2FCCFB68A22B45D32B50A0BED029D5E52964360C86C2C1E4EFA828CC03D84EF184715F328509AB575601EB4F2B6B0E381204C49140C9F639F9F230F1E58EB2E46B2B0033605D691C1FB9212447FED9826013F5DF0DE252D0A21418B59D24DC0C89892A6C390F485952F896B5B2EABEED952A8340FEEC0B653B83689852D41446A982448F909C172436F0377D5FD291EC79AFF00149707B4A6DF971DA3D015ACAE85A6D6E03013E5A5048514C1924A63508D8EC5CB049218176150FF007E35BC2534EE8043835018B5E3DD83AC79FF0035DC1866D5962E7704BAE16DC29B6D284A35A480B4A94F0328510B4EC2488EE0894EC8C105CC428247CC090035F27E17CF31630CB8EC71968520922D52C5A952C4FBF5D61FD87D66768FA9F4D7ACC969BFFEDA361F25A557B0DD3D2D36B65CD2B4B2D3EEA5652540894A6606E062E7D8724CA968041B07A0A01CA96A9AD2839565B5A777AA98097F9B8D817E5C2AC6BCE34CDD45653556E7A5464A57EA89226778276EFDFEBB626D24D056AD4E87E8C22153AE7FE4F99771ECD62BEF3A590175E517144FB9403D9420898D8FD78E63198D7282E4E5527816F3A3E55AC3D6CFA2A59E5EF571F66CE215E7DC9ED2EAEAEA54E29D5292469536213024906491F1DBE5ED888ED02CC5DAD576F7F68951F8900B021B9F0A58578C467BDE5B45112EA428A5D51041401A6644A47C3BE1926CD17CAADE5727CA8F1BCA94565B20D4F16A70D38F4847565626D48252FA808FC24C0D8EFB83FD39C374C9AE4A8A880C4B5492FAF2D0D3C21C508600302732D571C4DBDE70DBDE7AD97DB01A86807AA5861B5291A02A0212094091FC21200F781BEF18609B8A3DE283D890D563CE8FE7A650ED2A58DD486B00EEF9F93D793F286B51E20EE17E7CFDE1A550B7ABC93ACA8A481BEB2551061511BC47D709FE6AB56232BD068EDF4A41E8404E4DA0D3DFB0F63B5E634D7301D156CBED3A40F444A544182446E601DCF3F09C233F1056902F5B3E99D7F5E19C1B290C493D0BF10DA657E9099AC4D2255E679F33BEE13B77D8EAFF00BF6F88E89A1DABA106C33A7ADBCE3C9B4DEE9E60084E575E69E9012858723DD453FCA7FEDF5C1B2E671A51B214C8FEB00ABE63EF282667312DEAA6FF0076982440F30811B0EE3783B8F9CCE245809CE525E9C28D6BD72F1A3544306248DF587735F026DE143EC448BC8F715BA3640984890A24EE91BF1B4EC07F4071646C698DB8090490000E6A34E07D871114DAD27790A396E90CC2805380E7789BBD13AC729AA8216A2B6DE43A95254607A920023993076DBFBE2D0D8AA2A9A90E00676BDBCF5AE5AC549B7246E4B5299AA72B87BD3D6BA13789BB65A569AA61A5D3A5CD2BD80F491D842B8DFE007C7BCAA20CA7091BC450DDF9F2852B6AF31E1B442A3DFDCFC31901C2EA93661B47FD293BFF00F23DBEB80A67CEAE70A5E4A4F127D3EF03A3429246FBF7FF003E38D21B7FAFFEEFAC1CD2D493A1BD02082267FE90A3EDDE31AAFE53D3D443D618D00E24F8BFDA0E5973D3C7EBF13F0C230641BB20CC6A3C09F8F3FEFF009E32320CD87C31A76D4757731CFC60F007E7DB0D7B48812CEAC7301999BC6D5E758CC325F104FF0068A0AD4EF02CF6D7DBC2DED5552E5394B6144BCD48046C943814A26773E90676DC1F9E2344FF000A60AD967CC8E7EF2892495B1942D54D79F4A738CFAF8D65B34DD67EAEA19295B4FD3BAC214F05264A698B855A1B4BAB3BBA42B4214761B628CED92262F10B44A277D4A213BA58E9425857818E82EC36344B972C9B2402DD1AA737E3E1AE472EF50D0CE156E30B2EB2DDDEE2CD4068153A959716006E9F67944910016C131C1E31CFDB670BB4D38A095CC525979A80A5435555A654AD9E2D09DB5DC7C096E42AF96A5AAE43DDF4848D1742BACBD44CC4ED2646E9967ACD2E55D5BCBA74DA329E607838875D5A9A25E72DCD528D40A4EA2FF97BC85E9F561D30BB3A74FC30DFC4B009CD634D01F5A6748689F8DC4ADCA50A62905C5C3073C866E727E5125A9FECAAFB42AEB95AE19B68BC30E7966DF6D6BCDF2EBCDA696AAA2999417AA9D6690DCD554A536D293A1259056AD40C149C01869D2B66ED24ECF5CD2B5CC758B1049A312E5830AB3D08A65056176894E0952E64C1BC5646EF781C38B00E439C81A12ECCC62005C28DFB5DCAA2DF72A5ABA1768AB2AA86E54356C79574B654D138966A19AEA624B6D38975494A521E56A016784E2C3C5E0654BC209C120150046571463D72AF08536663477AEE49512092437377736E996505F5A9A5A75A92971C70A53E61D080A01A23520A8A4901641034C9DF69E26312E595EFCC7A21D4472D32739F51AC2DB5B1616774960A2055CD0B5B5BBDE839180E8F2DD092D22A4EADBD6D25104C7BAFE381152558E701248AA4D1C5DEFC1F3A8E702CB9D2F0B8756E100EE934AE5C2A29EB5E135FC2AFD9E3E2B3C66DC7CBE86F4FD575B0335AAA1B866DBC3CBB6E5EB754A37719A8AE2D3835A52144796871260C1E252181C1E04F798C9C84245F7C80D4B3FD0863E621D33B438B958D099285A994F405A86B95791AEA1E1FBF127F63678FBF0BD63AACD998FA3B519D729D1346A6AF31641BA5B6F9454B4CDFA6A16ED2AEAA96E6A536AD4A01AA070796995282A52114E2367E3F172A5603152D2804A57B931374FCC1D24BA890C357D21DB686D7C5E3F0C920282A524029AEF870F405881BB41918AB575A42DF73EF4F0A54D2A94D57B4F3352C565B5F6F65B15D4952C32EA1C0B1A47961C49E75011893E3B6562F07834CEC3CC25D215450058D5FE6A64F98BB58C306C8DB13A562D9617F31041B9D1A8EC4D0E7F5DA857D5275BCB0ADD6EACEC08D9476E06DCC9E793C118E97C6CF972B1656B2D9BD0920D4F41AE6589A521DF63E196B9014A1F1126E297B3970599E8CD7A651A7C535D051744B35365CD3F7F4D234444EA4B756D3AA9891B2780793B0DF631DDA53918A2D29C8B5F5A061E47AD1E1E2761D413F102CC406BBB100F89B359F4890FE1C966D9E0E7A6F4E004395F51535AB4A60EA53AB6DB4A8C724A58009990009EC30AE11E561268592014B1B5C036E59D3C218132963192D25DB7AE4D3F4D2B5A80C6D1217A0B7D7A9B2475B6AA91C29158D659A3A02B3E5958A8AA3521242B4944B14CE28EB888D24851030561A5AE6CBDF439602AC6B426971CCB0FBA3B6D2C4834AF126D6CEFD7E9092BBDF50BA1B9AD4EA8AF5BED130A30B4B8A490081BEE0891B1DFB6E5BB1D3D29250FF001134A00CD4CC33E409BEB98F3604952A6A592155704861A10E6D5A12584341F794545DF2DFA8934B5E6A160A604A8B7A24FF0011250A037311BF33889E2E66EE365CB26A52142F7724F0AD2A0B0668B071B859C8C0BB3060E3A3B5D9802F6FB4233C395DD75960F16F98D8529C37BCF4C36DAC829529AA8ADAF7D9490A852752185A8C81A54901401201759F3932B0C4A880370EE9241F0273A66E49864D8281F9B00860487B6AEF41419682C1AD0129AA3CCBADA88326A2FD69A7548293E62AA29DB2371C4922620CFE75A6237B15B4252A5D522707ADC3877AE7906AF8C5A38A94460D65FF00F2F79598AA4B572CBCF946B7F25A174B91F23D2A40F311962CAA2241013F76499047A4F7D819DB1656090A4206F381BA1F4B0AD39356D58E78ED4833310B092480A530FDEEC1999C79C25732DCD8FB9D5B616438E21C3010A037DB6311EFCEE7EA7112ED3CC4896A0F605EC06B426F076C0C3CC4C9496A509E01BA8BD229CBC475506EE355A5475ADD2DC4775540D898207E71BEFBE289C7CC4A318058925B8B9A1AB38622B4A5A26521D322638C89B873C3EBC3AC6627ED71A653B9072B15A641CC875A09812A7588DFBFCC6E3BFB625FB289EE450B1CC31A9C9C73FBDA2338B1FC5258E9D41A53573E5C229058B531E4B0DA594EB2105424404C8D5DE0C7B73ED3D86C74C12C9A9058EED1B3E3E3C01CD89875D9F296485904A682A03BF803975CB310F2E5AB1D016525A6E9D13C1553857CCEE93F1E76FA9186B4CD4925CEF134AAAA6A1C9390E24B9B343F0524015C8647ED0B1772DB4DA52E0A8085281F4B4CA1284EF1B0F2E048127DD44E0D933521C16AB317B860F763AF368F77D3AF91FB4096AC2C252979D28A82884A52A690A32B3BC42761B092761F2C192A7A12A0E7319E9C45BA90FE51A4C499A37507E2C8D80F1A74CE1E4E94D15ED9CD766B4E5C6EBAA2B2BEB99069E852975284265D756BD0958425B692B52B5469083C0DC593D9E54A9850AD00F36671A915D79DA21BB7646230E14A5A4EE3280BD1C920FC35B006BE823621F6555B8DB339D2DC6AF33075F7EDA9A16AD558D219AB76B1A6548750C32B6D0E3CD85C82FB614D6CA851D262E1D9D255DD82905AC727191D181397998ADA7CD13D4B4A54E406219D9EAC7EAFC9DEB17979C165344F79DB6CB9EFB19E7900F1B1F8C03890CA411420BD87AE9E6618E64A5AD4A003317A96E0C6E467EB688499F9E6D1E716C000724FA4F79E4731FCCCE3CC6BEE5C3B8239005C71E41C910EF82414140535C0E2C3F7AF4AE913734A915087C812540A4003BEC39EC07C48DFEB888ED096B981A5A77949635D33AF23975312995325ABE10A729BF991957A7A4467CDEDA0B0B4252A0B44950D24003B198DFBF789E768263D3E4CE4B15A5869C73EBE7E505CB5CB4B87EACF67A3DF4A72CE22FE6CA3AB7DC70B7FE9A4993A80DA27827B7FDE70CF367A1054EE4BB0150F95CD9ADD35A4192E6228E46EDC9700B3D852BD78E50C7E62AF34D6BAF0586D6B5216CA5C5212B50526500EF276237307DC1C304C913A62D4A028A248D0D6DFA9CE84DA1E24CD400920B862DA9BE5AF3688D755A487686AAA3438F24D421C6585EA4F9854908F42784944C98E7F2D0E16716E1EDABA8E56BC1D2E74B23D6A01CEA5C1F75E078D86FEF5B56E5AD4EBCB099752EBBAB74A084C6FBEFAF881C6345E1E68497492CC0026CE6873D2D63506C209EF521BD031D74E9E26907B5B9A14E20252F2F5446C17BF6DA46FF023788C792E4CE776CE85AF562E29EF3CC25326A0BD5F858DBEA40AF8E42085CB83D527F138419E52AE7DB8FF002626460B95226805EEE1DCE67214F4FD9BD7346F1FA963E044292C682FBB4E7731A42A411EC7DBEBFF007D9FF0329618102E6D91F5CA9CAD11DC6CC44A5AE62C8009BE7737D19FECE2253E4A5B14C84952C24084AB90A2A29F6E489DF611DB9DB1646C5046E3B166A9E1C6B9136B53AB1626623152D5DD17A115EAF5CEFEAF1307A6977A661CA70975416A582210B8D3227788FA727DA71666C698897390E4B3015CAC72BDF56CF57AD3B4B2FF0082B4A400A06CF46B532CB219F489F760A93536DA675A3A93A1124CA4C44CEF07DFF97C713396A133E5F3D323D47DA2B1C40EE832B53C4161FAC2C195843A952B604C8EE7831B09F7FD304990B1F43917E2F0DE2620D125CE542395C30785D533A8F290A93053B6C7B99C37CC94B2B516CF5E0217149291CFC7E18300E21C234998226411127E3F2C6BDD2F4CDAE3567E50DADF1B7FBBEBEDB5831A6504AD04F0354FC241FEF8D17294104914A79914AD475CE97767890A094955DBF5FBC1DB2EA239FD0FB9F87F9181CA48A91E6217EFD3A1F183D61682A035264C40D43D8CFE5384CAD209048A5F4AF114F38F7BE4E9EFC3DD7839CB74E1652831AC4920411C88DC6DC1E373DB6C376D11BD277831068F4AF039E8DCEC5ABEC8C5CA9537E3DEAEF114247A30BDF942CEDC834681528095790C3EEB885293A8A52D2E4A02B759064C241540123119A944C1BA7FAB225C1C830D6B7EB689061D4AC42E5892E43A6A011987A5EB91AE803BC545F51FA2D61EB778E45F4E6FEAABA7CBF98AD8BB85CCD1BAFD23EBA45043751E4D4B2B438D3D088010B4BA27D33B628CEDB1C46197367CB412A43A9248203569CFDD32BB7B2530C94225CCA96AB10EE1999CF1BD736870ECFE1B7C06745EEB76A0C81E1572DE6FCC762BC229D77FCC56FADBFD65C2E05E5A56E394B7B7EB10A0A52544AFC90D124CF623823F13FF001731BB3317370F26581390A5313BE0B027376D28DCB36B736760C62B12842A72D256374CA4896A49A3125452546A45778D473893964CEB9E3CC16AE9874A320F4DEA96AD0845B32FD82D0F21BE03692F53B70A42213A69F4A4110D800018E7F9DF8F1DBCC5E286CED8E9499D348421254E14A516A296A70492CDBC2E5B26B1E5762F0587C28C76D054F9B2E58077F7E6A004961BAA9721484A856BBC8721DDC561ECCA594BAED6CB8D367BEA0E69452E5DB3935B7CB621D5D4B7516C613E6D586E910A74542EA1A25A0C53B6A243602120AB7E87FC2ED81F8A3B527E1F6EF6A65A24A0A829055884288945883BA66171534672D58ACBB59B47606194A97B3D2832C4B69865CB014160915525214953D892EEE6F7FE691F697E69CA57CFB473C435C3A6D96AF397BA7398B3ADCAB2CF63ACB0DCB2F3B7279AA8AF5BD72A2B6DD29696B9146B52D1E6290D259529C6A4C84CF624D42F17B325C996A42E6A52941AEF2416B3BB56ADC8B088DEC1DAF86C5CF299454A2F40A0A4D053CB4A8B55E153F676782EB8F8F6F12D957A10C6657B27D0DE98B85E730D5D334DD4DCE82D56A6EA6B1F2D256D5404BA29694946A6D490A20B89290418F4AC37F9748C4AB1CA972D1DDACB952433D5AE4D2E72D21EF6D227846F25480AA6E6F2825944505C677AB78B4697EC9FFE1BBF04B5178A6B0D7F8A2EA85D2E4AA97E90D2D38B4512C3F4AA097D0E4D99A0D69511A54AD2163F0C81B57F23F173F0FB078F9DB2266D29231D2D450A41660A393B30E05C41581ECCF69E6ECE5ED099822BC1841985495A14A5243BEEA028ACD050352C2B7B66E8CF4EFC3BF83BF0DEAF0D5D0FCE99A114F60AA6EAAE97EAA61C62E9982BD96DD61C72B6B18A463CF2F1592A5D39420A8483B0C71A7E3F7F891D89B3E6E2764EC5C7E2158D75A508961412A500680802CF77B1AC4B3B19D835ED7DA4266224CAEE4385A779A6A2C7E2F8BBB500010C9048166049801937AC59B32C5432D2EF2E5EB2F55D4845C72F5FC22F36DAAB73C087E99CA7BAA6A8A54F249504A4A41988F7E44EC5FF0088FEDC6CCDACBC562173CE0C626A95AD65D0A5DC2496A6A033E916DEDBFC3BD8D89C31C26065A0CF0865AE5EECB5A549008FE22424900A680920D882097657A87E0C3ECAEEA5668CCF9FB3AF857A77F315F29DCB8DEDCB65EF35D82DCF56B4D1716EB16EB05EADD484B8A13A1A621476D264E3BAA47F8A79587ECD49DA1B58CE9787EED1BCA295BEF10336259AB7FD69791F861B5313B4D586C3225AE6A262AAE94952125FE22198B51C302D625E20054D5A94B5026046C27F5039DBE1FD8E3EAC6D698153CD5BE12E7C4E66A737A430ECBC39952424024EF37D78F891E51093C6FE655DB3A3958942A3CDAFA66889DC853CC83F949E62224C46EC52D644C15A38E00B1E2ED4AFDCD9D27A09410D57BBD18FAF23E4D131BA3976729BC34F47A811CB96266AC24CEEA53CEF6EDDBE7F018772A49C32B4009A1157E19F1D035EF11D08071483BA41DEA1B3D83B68E2D4BBB43EBD38AEFD97D38CE25C568FBEE6DCB96F54103666D97C77E5FF00923FEE7671D9F30270859BE5B3B0059AF771978B5A13DAB83331756346F2D4BF4147CA9095B854055AAE0A0A242EA6A0898120BCA327BEF23B738866D1C484E28EF2AA154AD6F90ABBB71BE41E0BD878128582A0400A63FF007798BBB6BE4D2BF7134B78B6E9569865D766640280A2388DF9E471DC6E711FC64EDFDA928866084D74A9662E299EBD6277B425FF00D26E8170398A657AD5AF08EF09F7409E82756EF2E9495DEF3B506A2762A5205D482789D94A88E3E31872DA8BFF00A5A000EEF1F43AF3E3A446F62E177718144067A972454F1C872CEA20DAD2FF00DE335E57A66C4A5ECE76048D8414B971A59E373C9E3E7DB106C1CCFF00AD96F53DE25DC3BD40FD2AC2B160E3E60460A607BCB23812135A0D1AD967908D7CE5A1A72CE5D1201632E59DA00EC44530E47D63E9209ED69C9732CB1600391D0674D3E8D1CE7DA09A0E24B3305906A4D49B8E63A13686B737A4B2CBAB1B7EE9678D8C83FA031EDB127E702ED4FC8B7B66D9D9AED97843F6C1983B81525806B8162FA64CEEF96514DBE226ACB976AD24C86EAA7F2A81FA8122373FCCD11B587FFD84935C8FA8CA9EB12494A0A95333002B854873EC34670BED78A8653D3EC84D2400BAACC0B70F127CA758F849F9CFF6C4EB640FFA741E2078374CFED9C4771759DC94C3939CFEF537D6291A948F318DFF00807F349FE5BE1BB6B7F30F5F410FF80FE58FFB7D550FF654A2454533410049238DCEDDBB6FDA00FAE1910B0159685EB43986F60E50E3B8353E5F685FDC687EEF4A8D4374A60CF3C93B8E47207D37998C1285DB4CB5078C66E0D4F97DA0AEDA16EB842402129FC278931B81F08F909E6704A5454B4B8CEAD4006A5E947A738D9000586A3B9F02187BD6245F486F367E9CB5537CB854B8C54562C14D73412AA9A34950538967505429E6F55377D9E3ED8B33B313825484312EA0E01E373CFCB2BC34F69A515E114486F85DF519370BB9D3A46863EC79CE6DE6AEADDAF35DC1BBA3F7175DAFA2CBB6FA97B4B349679791FB51D6B4275B84A9D7418483A444F38E89D892BBD909A3860CED527ED6BE5539452041953E680D75283E4D6BDAD5BC69DB34C5451BA55B933F01C4CEFDB79DFF009461E65CBF88D5C82CDAE7D2DE1A40257F12CA482091E21F43C621AF50ACAE3BE7AD04C103610648107DA04F1F100ED8F71185DF974150F70C68EF57ADF21485D1890901C71706A19AFE17EB1152F360AE73CC0C8D452A515F2604013000E37993EF8664605D4B243934AD1B952C1BDE4E984C60DE3917CEE5C67C736F2B430B99EC55A83501E6C69D2B04C198E3B8E6793C827713B967DA1B38328D2A18BD396EDFE200D9F4614872978A2A25C82F62333C41343A5623B661B3A34BC40F7924013BED3DBDFF003F7DF109C56CF1BEA0468C6BC6AFCF852B07CA98ED6670F7667F00F62EF6CDA22066D682AE3556FD8A4B8F28A41078528CF7E3E20CE19D528A09480587D6B6BDCD78C3CCB9A004B10035B3AF5ADC647C619FA3B432FDE9C53A894367C900F1E9254391BFE2D88FEF8F37154B73F1BFBD338365CC0483E963C3F439E8639DEF2A349AB5D45324265051B7B120C6DB8E07D77F6C23352E90F627CC687CBDD0C130D050FA9F384356592A5B75044ECB0663985056FD802763F09F99C928A90F4E22A33E00834F77466CC15A8DE2CE07DFDD9B84724355E2ABCB4A12013BFA4EC3E9F4DE40ED006D83D12E8DE0D77E23E8FC2005CC2F952EF41C1BC73870ED568BAB4969F4A000A42543F43076F81E7DB9DF0ED8543141B39BD684373AD699934A430ED953CAB0735606E5B4CAD9C399647EEADBC84B8AD10B1B030088827FCF87138986CF98121234F0727402ED7E50C3837DC5F53E0FE5D2873AC4C9E98AD61744A5AA76237206E6091FEF3FD713BD91377E72124D581E26A41E02A2D5AC427B49B8D3087DEDD538C89653F1B3708B26C9CE1FD8D4DCEE94004F1DB8FE9EC40DB162E07FAF83748AAF685FAABD042F95F89B1DF6FE470F6AF913D3D0C32CABF54FAC2DE9BFFA76BFF60C36ABE63D3D041E7F949FF92A05B6AD27E7EFC6D3CFE7F9E3586FFF00CCF7A419D3AC95A793B904F1129DA76DFDFE384E6FF2D5D3FF007087397F22B98F583B64809DC81F3F99C02BF94F4F511EC1830AA553E25D57093F8A413B6DF98FAFD30DF32C682F5A5AFE1A5794642D68CB7E623CB56A4E91049133201E7E47F58DF034F58EEC050700DAF466B75AF8F27EC049C1AE4054E037F3761416F2D697B42DE9894B2168A5555BC006DB6524FA83CBF2DC90019F428800C6FBF184133F01224AD73969481BDBF40E007006418B5583B58E70FDB3B0E8EF07E5DCB10CCCC3981666D0C46BCA3D1ACC63C74661EA656655BA37976D5938B365AB2B28A5FDAE51E6252E4B305AFC21494913BEE38C73A7E29F6BF64E1F6563E4E0E761D7B4BBB5F745652997BDF100E1DDAC05685F3262D6D87B3B14264A9CBDE449DE4BA8B80E4BB0D781234A40ACF9D41EA8E507AE1535391327D1D0DE2B2A1CA4AD14EA37153885A96DB8B973F11067603733318F8CBFE21B69F6CA461666D3C29D93BCBDE5256E54A0EFF280B00F115F311D41D88ECC7F9AE2D0B5A96F248EF108200F8838EF3E125D9C8DD23325F2637255BBA999E7348CC9964B5555B6EAB5D755B6FD52DAA74BE5C2F3CD04003D08529484A75184803738E68FC2847E296DFDA8BDA1253B3E6A70F354BEF37569609254EDDE9F0C8F00D173F6B656CFD8DB16561F11311244D969912D2B20EF9DD648B3DA957E6E1CCB8379F153534F50CA464CA043F4A19A615C87AAA9DB6DB046A75A354D051512410541240F9C76EEC4EDAFE2F01270F331BB324E1A484C9525535483F0D3FF009841BE8E0DCDA39DCECAECDCFC2E27BF0838933D45225A77C32D989A8634074B5A2A97ED80FB2FB32F8EDF0D7976FBD38CA9D3CA7F15F932F945726EBAD548DD8292FB97DBA0B852DCEDB4EE533CEBF53737EB2A2DCF30DADC58536CBCA5254520A7B0BF0B76C6D3DA72108DABB4F046729294A84B9CDBCE4390EA5024DC01515E71079B81C1EC6C5932509DC493BAB052E95973F1202414A583156F162C376B141BF60B645CF5E1E3ED641D18EB1D86BB26F51B2D64ECED62BAD9AE092D3EAAF7329DE032FD238F21B5BEDB8E38DBAC8D042D25304C9389B76F7B1D3F696C8DA09C162E619D370B3132CCA9AC37CA0B1700D016A52B486DC5ED45E231922BBD2933126657E129A13BDCECF96B568D73E5AE9B675B3F598DD2E162ACB7DAE9EFF5B5EAB9D7364375ACBEEA5442756848D610408519F62463E50ED6FC2CED4766BB638ADADB4F1D38485620ACA95348052953D4A9858FAD498E8ED9FB7767CCECA4EC1A26A133158554B48490E1451BA900B96AEA0B172C6D1E3A8391B33674EA69362CB167B165CA0B8EB72E35065371A40E0875480B6D0358D46255CC03C61B53D86ECBEDDED12717B467266244C2A2553105C38B1233249350D5C9E1AB60ED0C4EC6428AE6952E6243A87F52CA4BEEF16BE550DC0EFAD796AF9962A6D173CB56CCB755676E8985D77DDE952EA8D53494221652F409483FC3F3279C44FF001B3B1BB2FB32303B47B2E9C3AE44B12973934502B70EE9484B124D1FA33C493B29B6B13B4B15899655882BDE9E3767389842B7D886091BA97001670EDCCE2D9FF11F51FA5975628B28E5FA5BD072998A25AE90346A5130E3692161456E03A5241509236387FD8E8DB1F88DD854EC746CFC14B29EEA57792E514285051F794E4DECF0CA31F37617690E2666267CB4B621E5AD60CB50292EA57C21437457E6A072C6D19C1ACBEA5E14EBD4381C73C46C36F9EDEE7DE71F7C769CD067283BB27266F3AE6471E14680CA92250DD02A5B87AB5EF1003C78DF837D366D949935974A6A3099264D438CA001F2539CFD0C61910B577952785723E79BB5AF0ACF960CB50218B12DC9CB8A5C6469A708B07C8554BA0E96F4CACCBD9549952D09524ED1F784BAA034FF00F19DBB9C3C2663E1D7C0644F57B5CDE96BD623884362E5E8E46998AB819D72ADDF38782DB5E19E9A2173FF00EB2EA25B6A41E243162CC8B9DCC7F10EFF0053872C2A9B086807C0C5F93004DF9FA3B82F733089985258025E86B90AF3D1C1CE13B7CB9B0E591C59501AD5AF9E7528288DFE7F0DF738AD76CE277316AA6640272AFD2AC6DAB3343B6CFC084104A5218DF52D98D4EA3237A431F98EEAEB4DA9CA77006DAB7AD67D4365283BBF6EC91BC08ED278684CF3331F2C9620205E94249E3979130F18E929321833E4E03B9672F5672C031CADAA33C36A2B68BC39D729E5EA4DCF3B5154207331437A00F6DBD7B6241B5964E0CB92E40739D52ED5366BD7CA1B364619226FCB53C29422D7AF51A3C3CDD325ADFEA1F4DA88807CDCE1614081B92ABCD32088F91E679EFDF105C04C271D2904B9EF050E61E8FC343771483F6DA948C3AD228C9346D03F9E777F38D75B20B3F700601A7B35A1A204F6A71F2823933DFBC462DF90DDDD2BF0F851A87466E7E51CEBB7D67F304825B798D684EF106DA5EBCB8420736EF6EAC3DBC85C7E47FBE207DA86DC5BE42A1C8C8B3F510FDB0164C8F9A99D68C45B4B8F6F149BE2052577C784735EF18F680ECFF876046289DAFF00FC4240CE86F955A912AC229E5CDAE6BAE8C48CAB66CE3351F6BED4816CE9B52C9935756AF6FC35123F4FD41C4E7647FA74731E6DE16E661931892273EAAC86A7CB2F1E114C749B963E253FAE1B36C514A2286B5E821FB67FC81ECE87E55893F921418FBB9240F5099EDF3983C0DB9D8F3ED174CC6702AC73E7A56FEDED121DD4916B8CEBC47842C338DC528F5933A8267E8DA44FE9CE0C9735F2F998D1A805C7AF28C12C51CBF0623DF4820B755294C175BEC0127E1EA99E76FAF27E18364281399A8BB0A8E5CDFA40F3984D94050D4DB20D5E3F5AD6860C5CCD75B4F4CB69960D42C29AF2D90275AD0EA149004F62354EDC6C0E27FD989A44F96906C455C5D8B872EEEECD60F704C7BB76405E01D8BEE3BEBF0FEACF930CE34A7F631D86E0DE64A5EA3E72AC4D2A5B0D8A2A32B3E668425294242647C413EFF4C758764A499D861FFD3CB401CBBE7AE59473CED24846226025EABA0146F883B9BB9F66358D7B552BF6E0B528042DA4AD276E149053C91CC89FD6670E3250F3E6BD4A54A6A396A7911E8DA4304C20126E1D86556F6F788E39A0522597590B4992498F8F23F3E237E30F3F960B97FD201A59E87222F95F9C00BC4149371FAD8FB0D7BC32CED9D865AAFA9041F35AD293D810AD5DFD8C6E013B4461AE6CA120A890E082280B9B9627975EB7DF0D8D56FB6F134A0EA29A38CBCE82228F541E55314E91B254A33F1060F68EDC471F908E63D49634B39A351C5BD4F3EB121C1E24A95A8B7C4695000199E9FAC42DCE97757DC2E27FF79F803307E93EC46DEF88463082A3703799CB5001E96BBD9EB127C3ACEE0170E0B702E1A957E2390D62225BD94AAEF5D73AE6C9640777001053BFBF6E3FC898D4C9602D5721E86DEDF4B8D61DA5ABFA4F47C9F27B53210537EA4B755527DF6DA9D2965D5AD703F8C01AB8DB71078F84F7C69DD81707D9F6348390BA06B66FAD1DAAF6D4C70B5D02ABA88BEEA63510A1B7E280644C7791F3C253114A52B9B37219F96505858005092D5F0FBC1355DA10B53C9481B2171DB906639E3D8CCFC31B4B9629C4D1F8E67DFD20798BBDDF33C1ADEDA138CD9D0DBBF2237F61DFE9C472789F6C192D075AE674E5C7C2035AF33D07BA73F485A51B34E865B429425080950E7E239DCC40C38480F5B049A6475A7070FC61A76A12652493523F5CE0EE9EA69E9085029D454371EDC473C7E5BF187BC2CCDD6773419F57EB6866C19F817C1FEF97E86243F4CAEC8A9B95B90B054D170023E04A7724C447BF3F21899F67A71563A5A4156EB0A1B5EED5CA95F5A4423B4AA3BB33FF0048CE957A71B3D8356D170B95B2C15E57B756347CEA52DB4A3A77D3E9040DBF4FF6C5B9813F3B52DEFE91566D0BF557A08387199A804C73EE77E7E1FCB0F4BFE583C3E8618E5FCCE34A357316D615B4608A6641E424FF00F71C372FE63D3D04389FE5A7FE46046AD2B4FC756DF21EFF005C6B000FE68E63D20F52E4D2A93EE044FC0A7FC8F6184E6FF2D5D3FF007087397FCB574F531E59FC3FE7B9C02BF94F4F511907D41F8CFD3F98C372EDD7EF190B4B7FE24FD7F98C038892B9C964DFAE97D035330FABC6C7058D98813A56F776E6A0DB436D5B9D6B0E865AA86296BE85FAB2D0A36DE68D4175DF293A4BA34286C674AE14662009DF104ED46C3DACBC04E56182EB2D751BCEECF4605A9FA5AB2FECBE27F2D8996310411BE904115237AAFD2E38C237A9166EB855DFEF79872FF512DF479298692EB0BA5B938B71965085153094A12105C00A612A5A79E768C7CA4FF11327B65B370BB5F13226CF4770898ADE0B5A58328867009B3B8142D1D7BD899BB1B684CC260664844D9989992D12D0258512B53005AB40C1C920D6AE4D2005F331E6CCD5574D457DBDDC2F55B43E5DB5AA80B5283AB75D6D1AA54E9DD5A4993DBE78F907DAAED976BBB578E4EC29988C44D2A5894C56B36530001E56E15E1D9FD9FECEE1FB3D815CFEE912BE1EF5652901D4CEA529854B39735A6849876A832BD8B2669B75C7AA571CB55AE5322A9EB3D0B156A25D75B0EB854B68A52495A95AA4CCEE49C743FE1C6C6DABD8BD90578952D0A9C80B20B862A0356F8926943958B56B5ED4769D1B43106489692C5484AD6DBDB80A80522E02542A2AEC6A03C1E503FD307C3A9BA75933B5C16E1A6F3521BAD6D90D21C748A64799529274A94B590044380FC71666C7DA7D8AC78549ED0E2B1A9DA93663CBEE660037154B7789737E0CC5F4834CD91B6710957E4E549EE56E5CCC9809D1DA5167CDCD1A97A34DE2D3C4CF854FB3D3A5196FC45754ABFA9F99B2DDE730B56CB1B996A998AEA856607E92B2E5454B569ADBBD0B4DD2BD4D6DAD0B579AB585A50036ADC8EBDFC1EFC3CC0632761F15B2B178E324B293DECC56ED0A592596752F700B351A29CED760F68E0664DFCDCB4CB5CB503F0AD4A0525D892A4A5816A51D9CB460B3C6DFDA79D41F161F6865F3C6EF40577DE875CA84DA2D3D37BC50D4555BF33228F2EE5CA4B3B9557416A4B8D25B7DBA179C7C2AB5495216A05441271DAC9D9F2764E006166E2D0A59400B9732600CEC1210A24A8A8960A203DC54430EC84271F227B25A6142F719CD438D2951466761AC6E13C19F5C7A93E213ECC3E84757BAE198730661CFD996BAE28BAE6672E0A5545D59B6DE1E603EE38ED479AA4B810523519107E58E04FF0017980FF2CECC2768C99A892B589E42C298326A120DC33D757D62C3FC36C2E397B5CE06628B6F20A90CA72951290B3F090C7748172E0B71965D2EE96E5EEA658EEF7C7EF199B2D9B6559A40B2855E3EF1B2A16D34DD47EE82B49812027E831CB5F82FF8713FB69B34E3978F7510858295A89A93527419F30C2862C4FC45C50ECE4CC2012D04AC2BBC2A56E304948A2402542AC7D4B9728EB2F4BD3D27B059AF34199AFF0077A6BB54962A1156D2E9D6197987527CBA755438A6D304123683D8E03FF135F86F8DEC2765518EC3ED292B52D12D5DDCC9A778AB7D2C0020862F5D73A3449BF0976CE1B6D6395297250832D29525695EF256148DEF8814A48525F8B9E309DE88E52AAEA455DDD819D2F1959ACBE9A47ADD52D552E91E23CD5BEE212A4BE8252E15695091A8023E188E7F856DBFB5BB59BDB13138BC261BBAC4250A98B53214190400A67B781A67533F112661F6462C4E978554F33D4A9444B0E52E5B7955F95CDF4A9B4675692BCD42D14E55BA50EA93240DD2613DC71307E3B91231F79768638892669500A2482ECEC01CAC58D1AE68EE62B64E150AC5252C0218655B866CB3624837A9AC57AF8E9BA3EF5B32BD8FCD0054DFED6EB89D28F529158C107540200098D2080779113869D97B4113A600B5820298871ABD8785736684F6AC812524212C58D6C188A90CE01CB2BDE2CC2C17F2AB4E52A452D2154F62B530A94207A69E91A5B4200E525F70CF2A0A1A89013122C4E365CB419685000801DC52CDC6FA17357803676CF913885AD2E4172FC3D6CDEA5A1D7AFBA8A6CA997ED6D2C2186B3754B81B30543C9A0B9D3B64ACCA8E969F71304EFAB511A9208411B4A6895B81608620B114360F4CC71B3EB121182921DA5920EAE79D742357D61237EAF4B76875BD7080FB4DA41330DAD484C7B9F49D8F3264190088AED5216A2B2495645A8F404F324371C8BC2A89210FBA922B6A9CBC8FD3C6193CF75A28EDF74536B52528B53A44927484B4B50E6782A5EE773B72206192462E4CA9EEB62A19BB300ECF501A0D3244DC328AC541E46829C8B8E0F9D008EDD0CB8218F0E96C4A0C1FF881975B04EAF4A18AB6D27D520C075437924AA49DA40DB77B4265CBDC4AD2C45438A0A8B695B5473CD6D918294144849219AA2D6A68E5AA687C4087D3A1EA5DC3ADBD29A78D4CAF3B58B5A02763A2E8C38214901421490A3BC6D1B8305BF6063F0F89C4CA258CC52A8A7E390E1A30C9C067807B4B864A25A89720249201BB060F9066147AE8635C8E28A69D6A74CB8286984FE13FBA6CA51236DC01EDB9E77C5CB24CE0815A14862D9372F1B51AED1CE1DA299834CF50DC23E220FC46A6AE39F0B59F386D33E3CE3361AA79A56959944900FA4A55B42814EFEF13FA620DDA45FC0B0BD08760695AB9A8623330EBB167E153870425D9802198B02F4B674A07193452D75E56AFDB2F2C9DC2DE7768FC654A13F4062389DE369C521B4D495636514D81DD20B39A160E74BBE64501896ECF289F2310B9692C92412C2F9B5EE3F5A46633ED79A852EA7A70C954A52AA9584C01BA9E33BC49EDDFFDA79B24A7F2C036F7C2583E6CE72E22C6F488BE344E13982A8141B882A20E77072AF0B98A81A33FBFA74F29F49807DB491BF3EF23E7B11B61A36C04FC40382C48242AAF9797EB12DD932D6A94E402592A7034B106CDEED6921976A52DD336E690143BF13F011B77EE371F96216B4CF07E03726B4B3DADA6B9EB9BD32E803D3FDD43D328EB9B6B5DA8A7655AC191B909020025300803DA0EFBEDED8565CAC686209E2C90789CB43CAE2AD1E8DFB1B7427DF8F28FB63AE698B73FE611212DE8DC83C2B56DBFC0EFEDEC0E1D30E99C84AFBD624B6E9A00DF15296666F22603C415226C951AB397006A28599ECE464348294E60AB66B1A76DED87EAC3ED0A6652C25F2EBAB71086DA0D84A8AFCC2A08240F4EAD5B69913FEC5933B1D2D330129DF02CC19F27E14BD68C6D0DFDA3DA13A5ECF3B8403B8C41A0666BE59579D23559F657654CF6DDAB2E662CFCCD359D0F21A728F2CB0A529E7583F81F75A6D4B791E60F590A29001FC2044767F67512F0B834196189961C5E8A4DDEAC4F0E95A8E6FDA18EC52B16B7656F2D5C6E7CA8F6A57531A88CDD5218B5538612A424D23240924A7F7288FC52446FCEFCF3BCE389735459DD4557AF9316B7ED014F9AB08A29945CD8575D2CEF6FB18B57DB82DC5AD2A6D6E0E646A00EC7BA48DC11113EDDF83A562567E10A0CEFD1C662CC388D78431AA74C5298A8B6F31A5EBAB0AF1D3C612573B886ED8B2A4299480A9907D42048F54F1BF1C7BEDB7988026A775556A820877B8A0AE9ECC3861A5BB3D2A493E9E97E11127A82E3572D684BA0149525209499249F849823E5EC3119DA1210CAA1A5B851CF88A7DA24BB3C6F1018548FB78D1F43D4C42BCF944A651554BA27CD91B4EF2493FCF81B0F84EF05C6CA46F10C6878B508670C0379559E2678346F0AEA120E79E4F5E6C33E711E333A5369B59A66D212EBE9017B024850123D4091B4811107F3C4526AC898B03251D6E33BD290F699608079E576A675BD7C18C3655CF9A1A06D96404FDE402E8FC5A92A246C0CC49060C03F2EC9998BC94442A91BBC73F4CBDF583CA4AD4D35B5B69A49402D881A493C49E64FC30ACA3DE12141D8674AF17B8E4DCE359931490C0E5C3975CE99F382365C716B7D442945497001064CA480368F97D060A12E58AB87D69716BBFBF21CCD51773566BFD33822AF66E294EB61A5215077D21401FF00E408DF7DA37F6C280A45011E30992497309C7AA6F34E02DE7CA02B7FC0DA403BC48D3FA40F8CCE0456266A14421400A65E36A17A7E8606DA20194976604801866DEF90E4C22DB73AAA8A8436FD487D313094A1213F54246E3D89E38E30EFB3F1136614EF29DD8519BD8E633784F018490A92A25370F9F3B53539E6338953D257DCFBED2E850010E89240FF004F6D43D40F2369E47BF38B2760A112E74B9A94FC6ECEE6D7D699C57DDAB928409812188DE033772685DC55987D2F177FE1FB32B373CB55366A8752E21A693E421453A9308330A1EA246D12A277ED8B5F65CDEF1AA2B705893A72CCDBF4A9F1D29241240A55F5D6CC381CA9D0195DAA69D9AE4B74EB49548DA64983CEFB93ED11F03B625099695A12E0D43B6547BF4F1889E216654C504B00EC1A977D29E30A7A47269992A0428A7711F131CC768C033A4A50A66A9E26D97946E89EB5A1DD8D9E99694F3BC7D5AC12D4EF3AB7E0768F6E301ADC6F3644F803C78478E5DDEA33E507ACAB531132600107F9EFDFF5EF8166294433D0DE8398CBEB0B0C44D00A410C5B2AD2B716F4F18EED9D220FE7F53F0F8E11201A18591314A21F30F73A73FB4292D696D692A23D7C49246E646E2401F2DB0919493FB0B5FD6AFE5042092EFC3EB0A4A4AB6DB204C2E4C7731CF0769DB883C7CF032B09883377A5309628030E752DA8F310EB84DAC64A06194525350CD50016079F13714854523C2B5B769AA2A59669DE6FCB53CE32CBAA68384A65A6DC6D60AF78042491CF22708EDB38D1B366A64A877864A9880EE588CC31B33366F99770C2E3B0631292B00124124FC21DC0D6A5BD0811FBAB790F34DAFA7B6CC9BD2CB43F75B7DE7CEAFCC758DD721CB82FCC084A9C6455D41A9A7484884B54A1B6E41D29904E3E52FF00893ECEF6F36EE1F6AE0766A1732662513132D089095A8B850F840417BE4C75CA3AC3F0BB69EC6C162B038F52D089B24A152E62E6009497E2ABD1EAEC188191AFDBA648CCBD3DBC5B692FD4D5341595028EBA998AAA874348AA6DD68A5CAAA8F30AD294951D492E86CF041DA3E29F6ABB3DDA2EC176925AB6AE166E1B6977C4EFCE905237F79DCA54860E09B805C0B3476FE07B55276FECD9A9933A54E94B42E5ABBA525409DD65252A4BBB5451CE75CE4E3177BDDC08AEBBB5D227EA5DA65B2972E3556235CE6841424A14F3DE6A94A8060CC92411DB1D3BD84C3EDCED36064637B41B430FF904CB4A9BF852C84EEBD42426A4D5C87D43D6293DB9B3E5E1F18D8746213BAA6495CB9EC012480173014B0277402A603401A127D73A0B65B32F649AA6EDD65A2BA54B772A8AE3654D27DD9F42053FDD560D2CB4485F9DBCCA840513A5311AFC60C4F63360C8C363F632E5AB6A4B213DEC9C46FA431765212B280412A0430510CE082044E3F0DE46D2DAB8BC661CAD6BC2CBDC0A4AE58A4D625410A292A2828DCA024024B17706A73EDADCB9479AFEC5ACED5D5035D7E45EA9659BF5154544BEE5229A6AF36D968BBAF482CDC1D6C2602615312011F43BFC14769D7B7FB1E3118D5898B4217DDAA858B02280B9A0E208B5A28BFC7BC163767EDC99879344CC44A74817090A4B9A3D37C177203D9CD709795195D450D254533AD301EA72CA1654DD2A4A174CA4B81C5CA121A58D41F2B3A14D95870946AC742E3F1031BB6678C4F78A12D4771014AA292682840F9873BF08806C1C1CCC16CFEF803DE84953825AA2CD62EF9BD19B41BDEFB1333BD2F8B0FB34EC7D14B238F52E78E8B666BC58EAA8AAE86A6D740F5BAADF6EE74F51455E19A6B755A54AAC7B4BED3EEEE9852C00314B7E3EFE1C0EDCF65A648C66211270F2254C5225CC99B84A168A877480414DC97B335626FD8BED8E1763ED718BC7CA277A5A65CC50967790A94B98A04048DE56F0580C904B8B562CC32C660EAA74E9E4E45B2E69B1581555FB9712459DD7C55A0847EF9E521C538ECA8CA8AD5A8F7249C7CC7ECE769BB53D85ED0FFE11ECB6D0DD95DF89004B0263EEA8A7E6DD528F276D62F9ED16C5D85DABC2236CED4C24E992D12490CB9A8225A8254C12E007DD0E5B4D207758328F5A6D395A9B31F51F322333DB9C75BFD9ECB3F76F2D2E3E425B7C0A74A4A0250A20369841FC5A4983874FF131D88FC5EDB9D9FD97B5F6D6D054DD9064485AD0129096210A48510803FE4E6EFA8868FC37C5F6551DA14E0761485E1D38774E282C4CDE511F06F152892439605EE4584369D32CBB4F986D79DF325D33AB3D3FB0E50B59A9CCB7CADAB6A82DB6EA0432BA87ABEA9FAA52186914AD153A5D511A4249D5B618BFC387E16F6A368896BECD62172677E66599EB402B56F1290A347B0161566158917E36ED7D89B224C91871FF00513A52DD959A46F17DE2D57A034241178CE3D4D622DF5746A6CF981C6DC51DCA40D4524833AB707FBC63EE9EDAC52BB95329807EAF9F2E3C2E62B9C2C9DEC4026E4003AEA39657E168AF5F1BF506A6ED9052C2E1CA8BF5A59F7D05DAA61017B1F5049331B4C448388AECBDA0B44E50DEBA8B9BE77E79E82823CDB78664B86E4D9B5096AB7414CC6761B97EE2955A32F2F57EF13454A951D40157974B4C9D2044C9D24FD448DB778C46D73DEA12B53390017773ADE9AD7EB4436548F84B020FC2F42D5D19F26B647330E8575F3EF1FB16980290E57D4DCC12A04252F32F203700024A7CE0AF3360427F089183E4ED02A006F25983B9B30A1E5AFADDDF4E1AB41715205B9D5A9AD8758F198D4A55B1A4877D4B759303986D49E7E7A7E113BCC1181F17892ADE364D8E75198622AFF41AC7A30C695B8DD19137058D892E6B5199861FAB17666932BE64AC75C2814D627DCD13057A5B701F576274C6E3BFB444744854F9E56E52C58D4B176CB2636670C6D5859527770E4104549EAC05FA5B53762205F41EBA9DFE8965CB687C9F32A5E78BA124A65AD013289077F3227540E379C32EDEC11290778026ACF7CB3FD7958C13B22580B6BEA050D0EAF7AE8E6948997E18295A7BADDD2A0A1FBF5674B6F92CAE35381AB8248583D81D00881B73260E36ECB614A31787515B84CC412199FE20E5B5C9BAEB0D7DAA97FC39A1986EE7A5DDDC1A1A5B2F0D62DC980F53B6B69E64B956CA69E91A4B893E7BCCFA5E46B9F4290481052A2663618E85953659940A59928153A80496F437AF18E5FED26050710A3BDFD64E801241BBE67F4AC3519FA57607DB6079A9282E798BFDC8D92653A4EA24CCEF223DB8C57BDA84A9695949258134019B30CD9647C0439EC5C024C96DF018037AD8E4FCF37E8F14C1D750F39787D1E52BFF003C0F2CF9CB27CC29D9B484FEEC08D4E1302088C5447664DC562D258EEEF640BDCDEF5BFE912FD9B31183C34F42882EB249B3E7C5EA433027531982FB5BD9F3EEB93453D4D1D6AED2CBEED53345548ABA864ADC5292DBCCB63530E7B851246C7E18B43656C39C30E91DDA80029939E6D4FD78445B1FB4240C455607C5ABB87C851EF4E19562A0682BD876A195235AC34FB54EEA02487DB5B814412C9F51034104C8DCFC24B2EDBD893D089AADD340F63D356B66DF796EC6C7C932D829DC003972B9D69A7489236C5269E9A950EB4E2038A214E76680121440035498004A6279818AF3092312B9A4776AA2880E973739D9998160DC1DA1CCE28558DC8B9A0620D2CD4A8AB64EF480D7BA94AA9965B4B8A284AD4D029294BC02881A55B8131FFAA09237C3F09532520954B340EC41A54F0A75B0D48A7A7128372EC38F33937239B01784DA2AD6A634A1494A425255A5CD44154CA540469288E4F24F008C0BDEF78569000DD670336CADAD8F4D5859D384C54BA9005722FE15A3574A72853E4D5322F96B5A94F2162AD1E5B94EDA5E790F6E1A5A10AD4144385248830904ED00E2C4EC1482AC64A2429B7922971573979F95E235DA89FF00F48B4BB3A3C00D2BC064E4EB1B15FB1ABA0D9C734DE8674CD974CD15168669DB2D55563EC7DD534E9693A5B6690D180C84A40025D5EF279DB1D65859FF0097C24B486F912CE684E40D337E2DAE7148090674F5BD492A2E2AD9694D34158D1A7506DCDB347A10AD486DB0DA5444120242524F0012903EBB018F13337882F53525DEB9876AF36D28F402E365B0293FD21859C01C7325FEA4E51116FEAFBAA88053055F84A77F9CCFC041811CFBE0C9331AE471199D4FA580BF02EC29964A9A805FF427334AD213EE334B72A4553D51481A09404EC648833F3E38DB050505051190E60C3861C14B3F2B52A6EF5B5416F188E99F3266A53C689210520A82CFA803C83008DB99DC4FBF3863C79F9EBA789CBE9E9121D9F74E55F1A97B7EBAB64228E78CA0FAD492E142569235129267DCC4ED27DCAA07B620D8DF98F5A6771EB957C22678237E0A1C322EC797EC2E61AE7CB638F572D950290CB8B44413B36A29989004E99EFEDCE2293248EF144E649CFEFF00B43F24FC23C3DFAC378ACBEE5629B6964436AD9650A22247A6350E399E371B0133A7729F6FF78DA0F1CB2B6D21B4AA12848D04949880398D44FE58F4244B7551986B7AD1C96D32D6129C3E17F75B7A41356BD6CB61894BABF70424A48DE48215207B778EDBE33BD4F0F1102422EF39A1969A57968DA37329DBDB6D3F90FE64E33BD4F0FF00D42321A3BF6607EB8A528052827620F224476103DB7F8CE0551755006D7D8A9FB421B42B28533A12F7240B52D0372D13E7257077D20C9DA48F88FCFF00B61EB65D5ABFD4D7B573D3ED0B6007F0720E9A9661502FEF90112DFA60F7DD5E69CFC454B29201829D40099F61B93B027B62CED9277774BB1771E022BEED527796B17770D76635CC5785DF2347B56F0F77734F5ED20381685B3FBC1A8890A1076DF804EFBF618B3B624CDE228F60F9024FDBF4B98AA768CADD06AC45878BF81029CC5AB0B5EA4DECD8B32523F4AB2E53BAF24146AD300EDC99900CFB13DF6DB13F912BF86039A8CAA7A370FBB07AD77B466B2D45B3B0667722BFAFEA5E6B05C3F6A5A29EB12362C8546A90A20A8182008820A78386CC6069BBA320DCF8D214C32B7E4A55ABF48161ED61923624A811331053B1DBFED86C98DF13F1F17A4110AAA4569682F92133A47790263988E7E91DF022EC39DF2CE323BB4AFBCACA043627793ABB898E3BEFC8C2504CBBA797D21434AAFBAC2107CF047E21E91CFB127F9F6C64172F3E9F5833A6A372AAA82D350109201282851320C73AC0DFBC03BF1BC635C56D146130853BA379C87A1B025DBD5DFD61791831889CE1DC8661E67267EBE3758B54CF25A5259D2B79094942D68514A4CEE4A4284CA440DF6304CE233276BAB10568554543166CD9E8FC6AD7E9064DD8F31131052A20B82D9500E035D6B7E7405F6B866CF103D20EA564DCE1D24EB2E75C9EED4DAE81D7ECD4752876D8E79D5CF214914A5A490909614140A8C8501A869335CF6A366ECD13558E9B225CC54B0A59B55FFA4BB8A9166D22DEECCFE6707813352B2E94050490ECD9B1ABD802F4A50C5AF56575DFAF3D21E81F5632E2DCCF69FF00842DB499BC5A9E43EBFDAE8A3A472A1CB93ECA1C0C95BCD3814829494A95B131BFC64FF165F86BB57B47DA45ED8D95B0A6E2E5226AD61326592E90A1BAE5093701C16CADAF54FE16769FF2F8712710BDC33099A029403A97559402001BAA21E8D671064CDFEC748965BAEE8455D5D5D2F988F39D7EB880E12AF5A1694A52A48709293A485246A004C0A8F60ED6ED0ECAD81FE489FC35C662A77742505A44F0B5280037A882D4D07072F59A6DBDAB2A7CF5A8ED39AA0A2148424C900547C249965DC3BB65D21059F6AF356747ADA86328DC2D74B414CF314F6CA765F7F4B4B56A42D3AD3AA544941130744F738A3BB4DF859DB0ED4628AF13D9CC76C242E7850C24D1349292AF9FE348205C356DCA273F879DB3D9BB113365CC988335654B256A482CC122800FEDCC9CF268817F6D95DADDD23FB1D3AC162CFE9A7B3DFF00A919A32E50654B0D554A1ABA2DF7DFABB887BEE8E252E2D0DD3D1BBAF42130569DC718FA97FE10BB0B8BEC8766D184C5257294A425412B49496DD393835777F08A0FF19BB5982DBBDA30B90A44CEEF7E49092082A2A4967152A4EEB1E26DAE137C372F23AB3FF4858EAAB6E9E9C1CE396519EB43C188CA4AADA576FA4929253E75B0D4B092140A54E05C98D38EA356C9C36176E2317892048EF92A9BBD629DE0A503981BA0D49228D7BC0676D3FC8C9C299890995BE8DE7A0DDCF4CAB5722B9D23FA6D5929F2DE43E84640A5F0699732BDA7A1F99B25D0396EBDE50A46D55F575EFB4B6D42E77461C5972A90D8610B42C798A58510A48200E1CFF17DB7BB7B8FC4AB647E1DCBC52B0734094A38442960B863BDBA0EEA86F176C99E913FEC5E17B3FB53143178B99292B44C130CB51484EEB20242017741624BB92BDEAB331CF4ABA0178BCE63B3661CECA364A54542956FA1BC979179BBBCD00E12C533B50DBCE4C13E600B9D5C6F18A2FF0004FF00C3BF6BA4CC4F6B7B5D227A712852710D3E5292B2A27788008772454D59F378B83B59F899D9DD9DB155B17029973E7197DDB05A52841609DE5AEAC012E1200DED431872BAF7D69CB97FB3DDFA6CC596E94B70B23C8A0B625C42834FD5D344EA25A96E0214BD44AB61A7799C4FFF00C47768F6AED4FC3FC6F6770180986648EE70F25494BEE842E5A0D37092EC4B3D03D1E2B9FC2E5E1F0DB5B13B4918A96BEF4CDEF5207CC5454A052A0BA00A60C5ED5222A9BED2DEA7B1E1E3EC91F13D9CEB831497EEADDA5EE97589152A729DD72B73153BD6572B698A1C6DCA9140AAA42CA192852B491E624FAB12FF00F03FD8BDBFD9CECFCDDABB5F09302A7625D026A374170829A91C6848207AC63F19B6BCCDA9B465C844D277120B024B254A50725CDE947A367145D5598D7555F42CB2E87006549D8ED200D437D89D40823DFDF6C76BED5C5483853BCA65871A937BDADADB8EB6BE09291304C58F877457935B43A7956B107BC56D65454E77E9D518971C55FACCA2D82252135AC2A79001EFF3DF7E0C3B0536589C48506DE7172C054E4CC452A2DAE5B6D408C40DD945D4682B739EB41411603952B14BB6DBCBABD259534D69277F4B0CEDB7E5F589E71B63B1681390CA72F50DC98579D9B9D63CD9983992D2C50D50E4F98A0ADC3066AF2871056BEE5E2C94C8D45D6E95C716D8FC49404A3D47788DFE3F2C1B86C58A7C446A1DF37CFEAD70F6879DCD4E8DFB7A5614174AD71C7295831A4AC18EFF0088911C7CFE1C1C1788C64B281F180727F034719B535BC66E71E54FD6183EBB39392733B3E49529FB4D5B48208952CB461B1C0E4F7DBD586356D45489DB8853A4826947A9BE8D4A1F48DD7256A92ADD0F902E00777E3514A0D5B919F879BA525374BB2C532740F3696BFD4A0481EBA5503B03B9D277ED07E1864DBDB5A7945C9B0719717E1FB3C2FB2309352A24CB7A385641EFED9F85224974DBADD957A2F9DF2D754F39871761C8F5D5178B9067FD55D1D279F509431B01E7D50096982AD23CC71056A4095274ECC6D3C42B112810A037C55F206BA695637A9D047BB64A54AC26254CCA4CB5280E2038AF3CFA35E228665FB787C43E6DF16578EAA5754B764E8CE58A94D2F4F32359AA5C0CBB6DA75A96AACBF37A1867EFD5608D5E526A47A402E4E3A1F01885CC969524A8FF000D3BE5800145E835CAB42EF4A578B7B47B571A712B1BAB50DF5356A6AE2FE43A3DA25AE78FFF00139E4DBBE5B76918F0E97C7EF4EB1A1352ED75B9B43AF68D25D5243ABD214A830498FCF006D4C31C5BCB4875AA8DA919B695A86F183F64EDCC54B9037D2A1405DF416A7563C728A93EB27DB19D7FEBCB373CB192329DBBA674F5E8A87AA2E8C54176F6D53A94A94B0A6986D2125B30B02A356B27D27BA5B17B2789130AE7480413BC15725C8A8A6576B9D5EEE1FF0088C2A4CD4AA614904801DDD8815AB006B77CBA56B56D256D6DAF30E6BCC198F335FF0036DC2A855B75170756EB0F5421654A4292ED42CA50A50822088DE0EF8B73676C8C2C8929EF10949018D0D5858F3B125D9E2198ADA93A64F2A4A8B6F56B4B8CDEE3C28D6AC161AF4D45DACCBCC14B456B7EED5B4A972E56F428269D892DADEAA4169A5423CC0B5E80B500151240C306D9D958358989A3106ACED7AD1DDAD5D225DB1B6BCD424778ADD0183920920DDAB4D2AEF9671396A323F4DA833CD8B24E5CEA8D833C26A72DD355DC976C6EE0A34B56EB14EA0858A8A364A9656B80505424C12070C1B23B0F83C6151912C2F370877A8A656F2D28F1275F68244A037E68B00145A9A06A07CDFC998C29BA97D13CAB6ACA2EBB6CCC4D54671A77D352CE5947982A4DA52D365CAA01412D86F50A82525697250A8471297687B2586D9F28F7A9128B1674E45C31CF5E032685B0FB6A5E2960489BBE7FA722E6D9581F0BBBC421A5A2A86291C416901C35953E6693A5C08FDD06CBA958490090BD3CF0638334A6D79385C24E12E4AC12B7028D9BD6BC78D5A8C624385938903BC9A9202802093A5CD3321B324E62F0EEF4C32F2AE398EC6D0A97A894E572102A9A6D6B2CA9495E9234F2567F77B11F8E4E2C9EC06116274B9AA4325C1726E7A06A38F0D6911BED4CF42A5292853AAA19C07D2E74CB8111FD067EC95E975EB25F43EDB72AEB85C6A9374A442993568286DC4AD0120A06B51DFB713F5C7434C983B896949A84A4281CAAFAD8F94563845CB95316671DD725896673E59BBFD8C58D6764A9DA75858242667DB607DF7FF71DB8C2B249500D5074A31CA9EFC1A1BB18B42B7EA189212F6E6E383357236BC438CED4DAAB10968129053AF7234ED249263903B6E782230E084AC0DE20B5C11A38B5398D1B85219101D64B51F95CD1AD70FECC36F5DE6B750A0C2BF77E52402950235EC4889907BF1DB9C1289D2E5EF0528BD869CC5695F439C3ACA90B56E94A778805D8B00EEDD450793DA1A3CDF57704074A6A74809274C99D8CFEB3EFBF230D38D98851584907975F75EB0F38291350B46F0A82097A86CF2146C8D5FC6229676A9AFA82B58A9800EE64822267DA78F7FD798762E4AD6A5109717E848AD8E77F5D2578498941F89EA69C6F7A1A64D9E57AC47CC75AC3B745533CE2439E62D324C1590A20A86C7F1449FE5388FCC9252A5129173CD87E9D61E862250006F548719D0D45BCE092A7C8A2657E514A9625C3A798200E637823F9FD52DD1A0F0B31F7F58504D41A824D1F2B5F5847BD794D436EA4AC00244EE06A93CC80679DB80444EF8131253BA19B3AD4660F2EBECEB3540A330E435BE84F9F1868EFAA4B750A716F829275449DC03B8E763B7B73B601DE4EA3D96F7C2B68161BEB95E9875D34C86F58222408993F103F3FCB19BC9D632082A998082947A48044C6DEC363B0F9448DB1A89A82ADD773C3D9F484717FC5404A3E235B370AF46CE0FACCF0614900EEADF88D24081FD64FD7121D961CA58684DBEB43F5853080C99244D5005B339B301E7C9E24474FAE6F8A868049D24933B11C0DF6E223E3F0EC0D8980500129DE00B82CF77A7B6F43106ED1A54B52D40129AB96A02E59C81A37DF4B36E87DC5EA5F22A813A941093EAEC480771DB7C597B00EE943DA9E2FFB78E84C55FB5D04A15F08173A96B5F8B1A58D1EB0E5F5A69AADD6E9AF14A545A6569708493C0DCFF2F903BE2D1C2CE9225A77CD4245F2666D7C2D6B5E2A7DAC8585A9C37C44039D7A8A1B558DD851E1D5E8AE614DEF2BB075A4F90CB88A8F7694875D10A04033A6082246FC619F1A77A728A6A092C4398DB033509909412CA0EE2E454DDBC73FA97713F774A5AD0E2544951200540FC3BEE073BC6F3B1F861B26215F153C5ACFF6B43900540115197AFD614B40A4A9484957A3D5279000498DC4EF3C7FD8E045A4EE9A5ABF48C0924B015D29AB47E52C36FA8A0C827B7CFF004883FDA36C2104A12433821855F941E53BEDD284A16A95B84048824927B089FA4FCF1904A140020FD61536A5298781A98682E1402BBA57BA789D8893063B48C3663F0BDEA092A213535048BD40E8FEC5330F3F129C614CB49EEC0077813C1F97993C21C0A64A1E82DBA120A7913EA8830001DB7307E98030D82C1A10A3BC37D8E59DFD9E712BFCD4C253BC2CCF470C682E45ABA562873EDA2A2D177C8759ADB75A4DAA85AF59506D6E355758A75B24209052979B2A3A4ECA113B8150F6F31B33092710A908EFCCB49DD412C14C1D9F2F0CF9C5A5D9499F9A4CBC391498C142E5AC4311CEC684D758CD4D9BC7B78D1F0899C733E5CF0E5D63CC193F2B2EA03C328D436BAFB2BEA538AD4E041AF692DA1209D853C90AFC271CF58AED061F1C954AC76C5952A62C14957C24B58BD0BF3BE4F9C5C52F06AC2E14CB97244C620A52A0E014B80AE06AC3AF387B1EFF00F110FDAB394E9996DDCCFD2DBC90D36806B72353B8E2C04A5214EB8AAA25C71400538B29495AE5479D9B703D9CD8CAC47E684B972BE2DEA2124072E6AC1EFAB81688F4E56DC5E2001865197BDF09072FED6034B656B3551F983FFC487F6AFDE5A669177FE98592997E6A56FD872553D35C1B2A4A421CF3D354D9081BE9009505051207792CDECAF6476AAD189C5AE499B2D2101D092295AD1EAEF6E79C2E3FCD25E2C3E1BF86650704D09F89C1CB30E337E3157DE253C5CF8B4F1AF7FB35D7C5175873367EA7B5D59A9A1B0BD5D53FF0DD0B49429A6CA2DAEBEB6DBAA692E84B4A420A52D974057AB75A59C0EC30A91B2E54B2829037C0F8D2412E52A0030228A4877A171BB0CCAD998EC66D893327CAEEF0E85A4EA901EA007F17AF8343288A361943946CA07DDDC5A1B6D53A036DD2A838D12A009425D2D25B252924054949E30DDB43193B1AA4A0FC0953256A625810CE031A87CD9836804599B53636CAC661709244C48ACB4CD2DF2834347AF4A9A6662CC7C20FDAEDE387C0B64DABC83D21CC796F31E49A876A6A99CB1D42A277305B2D554F25294D45AD2F6A4B6B6CA52A4A3CA693291EA1D9CB67ECAECDE15F138BC2E1B1B388496329294B80E000429896048B3925EB485ED3D9B8CD8F3512F62CE5CD9360B492182A8A02A33E1500398405CBED72FB46F3AF889E9F7897CFFD60AACC19ABA7374ABABB164EA75D459721BB6BAA2D1FD9CFDB587EB10D684B2842109A675094EA0144182E789DA7B3B169183978297230C5290484A53BA438290122A8B10AA1A5442B2BB37F9DC219D8BC52A56258A820BBEF3392EECE4862737F0B46AFFF00F14CF8B2097DFB8F850E88D75E9D01D55C8DE6A7CDA874D4212F38107299016592E14853A07FEAC44B6CFE1BF6336AC92670C3CC54C509931E42261DE70A66514820A983BBB3900C0BB28EDCD8F8A54AC399E249592664A99DD9550B3900953F102BD62AAFED0AFB56FC5C7DA52ACAB94BA9D6AB1641E90E52AC15D69E9FE55716BB7AEE2E794E3D70AF9A7A26DC712FA41654195AA1B1F848C49E461F63F67FB3A8D9BB224A0292000994908DD2966DD035A528DC636DA12B6A633682262E5296852D2A99316A254A5503AD4C4A8EEB0739001A9160D495618B9D104AF502874F249951D4679EF107E31F3806DD2129500C0548376E0286B76E5C1C74F225B480322E453C5AF772DC72A4454F10156AAFEAE64264C10DD7513F0473E52C39B083B9D1CED049D81C477674C652B30090E6B5CF37A17F2E508210F343645B2A814B5C96CC5AF160F9147DF286C89327EF287DFF00996514E91EDB6E771B41F9606C7281C54A6243A8D09367EB415A0CA247252F2B2CCD0656A9BBD0EB6CA90E23AE7919E285ADC0FD96F6D1B6E96FBC6D1DBB9FE6EB87CB90F43EF8469DDAAE5B36E2DA7034F620E6B5D8AAA288D949EF3263FAF7F6E678C293ADD07AC78124871FBF2862FAFF0053E474FB34D5EE0D2B008DB8F390B4EDBFBA236FE9BB0CE50189635200E6EE5AB635E4EF583100F704B67ADA8CF9642D5E709AE81DC6720DA5A98FB952A8C6C203CD8246FDFD1BE19F6D2FE1B867A3D3505B3CC647859A1DB665D9BFA5AB6342697E00982BF1137229E86E7EA80A826C15201EE0F94003F43BF33EDEF82FB28B1F99943FDE33D4BB655E5ABF088276EFFD2E28EB294FD01A5865C05CBC671CE7AA9A3AA147AD4E87484C2A4CCEDDE79E23DB7EE31D41B0702A9B212A00FCA1A97A0F2CCBE62388FB4AB2312AA7F52B317DE24532A7D73153AFDA46A1F6D6E084C6A208883B76FF00BFF5C3AA364CC4E293BC96F8A95C9C39F791E0D00C9C484E19897A57570E2B5637A51A8F684F5EFA8AFE57B851AAD509AA5AC29DD86F4C15A5C4991BA49F87BC6D38B33666CB52E4A0049341E14A9CDFCEA7510C1366CC98A9A50E53BC5C825A809E22A6A006F2870687AD6F5D34A5FA9A44530674269F4B72AA8526048037F5CC9FCE37C483FC8CA903E13BA696AD801F357D2A2D686D33B1095B32D9EC2E0D282AF5CE94A98115FD41B7D63948AB8D55326AA9B6453FA53285691B003981F083DC6F861C6F66D6B74896E0B8601812F766BFB726EF584C6CE424156F162EC6E00BF4E7C1ED13A3C1BA2C29CF4C7506A72DB2E52D36965CADAB70B8C2699BA7506750716A040286C8907FB48FB2FD98560E5159414EE82ACEA0B82E6C41C83F0E7BE376977AB0CB772189350746E67C33AD7AF50FA8EE5DF31E74CE76BAC64DD6A330D6D9D20B89FBB52D121C4D330DDA913E5290298A14B0CA4FEFCB80FAB562ADFC4F6942625F2219B864DA86BD3CE257D969FF00C742955F958071987E0F970BC31ABA966B1E7EA9C529F75D53687147D0FBAE27515871ADB484958D329015A95CC10395F1F875623172A81828BD8D0904640B962F76A9CE2EE18B7C2A012592934ADD817195F47FAC4EAF09DD337337674C9CDBB7D45BE89FBDD1A5EB6A025571A84C9504B08D0A7094AD295AF4C10DA564EC0C5E9D89C3197265B8203067268D5AB8676BFDAD5BEDF9A1656CF72D562CE791A66C35E67FA3FF00870CB54791FA2BD3CB3507DE54C3164A152DC7DA2D9512D82A24948EFDFB1DF803169CD504A007D2A452DADB3D4F3D6BFC407510F5203D3967AF3FA9653E6D6C7DD1D3DE1647CC99FCB711DF988C3960883BA45416F430062C16452E54DC6D11173452214ED43AEAF42529DE49EC0F1124713CC083878B22C6EDC072E1973786F957EA9F5311AEEF7DA5A5AB719A7A8F357AE1C4EA27481B4EFB024EDF11B4E1AE78ADC1B3F501B9FD1F9C49B02ADDAB3DF97BF7C8BAA289175A3A8A9704A50CA893B711CFD3E3F9600983E617BDFC7F639DE1DA5CCAD29ABF8121E9C1F94463EA3655AA769EA1DA20529DF4E89E20CEDB03BFB4FC630DEAA6F364FE50E4898376B5701998B58F4B1AE6F15E99B32CDEE9AF2AA9714B203EE4493D9C5013F5FAF6C46311F3AF8A8DEFCBA7D20C410424E45AF06F476E53544ED456FABF767F119D8267899E66606015DC72FA983A5DBAFDA1A3ABAEA42E54B2C84ECB501F313F4EF24193B6F386CC402501B5FB7ED042EC39FD0C37D73B7D4BEE28AA4A552533C7247FB831278ED807715A798FBC250DDDCECAE53BE5D88237104CFF003F8FC7BE33715A798FBC64712A4D3219351042D2083B4413B72076FF006F80F2659EF5C30AD6EF4E5C72AB87CA104315373F11AF875E50A0B68B7B821F58692BD252BE081004031B491B1F68E36C4B76792809635AB6806F387CFE5719D7AC29886DC00FF6B9BD803EEFD21ECC88DD2B0A6D54EEF9C9D601254488DB6EE47063B1EC7989B6CD58EF120DE8581068D4ABF8E47CA21FB546F4858624D98DC872393B350EBC22C13A6F795DBA85832013E5F1EFB6C3923B73F0F6C59BB1A6BA93770C375807E26BD2E3CE2B7DAD2084A856815A7EA3D2C7389976FA56338E58A8A779295B89689130482379DF69ED8B070F31D0962198359ED5FA16F111576D590E545B8EF35DC93EBA1B5E908CE92A1CCB59A6EF602B21871E10D4FA4053485101239124FCA7E20636999733EDBDB758609292898139850E67E219F91D74D24FB2B500E25C6825B25202E048D24956FF005131EDF1180A6FF574FA69EF5891A1F70EAC9F072DE50A2A28144EA298870A8A7D7C94C28130763B811F2DB024CF915CA124FF00393CD41FA86F08EBF765B49F31C264EFF1DC18FF00B6DDE276C0506C1AD3041AA43AE896CC044FFD42378EDC89FCBDF19190A934F52AD0F92749034FB691B27E3C7B613C5FFA53CCFD5E9F5F0B41582FF50E6CCCDD05EBC4DECF52C616369A827C944FA84EE63705247F7022311A45D5CD5E861FE67F4F24FAC5287DB434A95526487A07A29DC503C4429B07E9FEF8A87B6A494621CFF73F41FAFB3169F61CBE2B0E69703A9009BF17F28C7B75A4C7526FA47FFB34CFFF00CDD8F6FD71CD3B5BFD50CEAA78BFFBC21DC0F4F1F6223AE76FC0CFFED6FF0090FEE3FCDB0E9851FC025EE9B6951EB18267006AF73CCF20CE585872AB7CBD2A082A12748EC2624FC231986F957C1440E03484269753F011CE103F0820FC871F4C1309C7859D2952BFE9493F902719191EDB50A9A783BED331C09EFD8EFF000F738C8C8F09A7D2902620444FFB1FE78C8C8F7F74D7EB0CA5CD1B49131DE37F976FE5385E52C87CF2D294FAB5C428816E22B7B83E16F4F1E3AF4CA14CA5099FC4120410769EFF00D23B614EF0E83DF51F58522F7D34017596BAB6D2509434DA8A7518D90099F79E7F433DA0BB6710662497A3963A92E056A280B11C5A2F644A3DC25858F3CFC6B9E8F4E309FAC756A7FAD36582A0961E013B9F4C33FC23B00788F9E23FB366284C352CFF00FE447537BB737684D29758A005C39F0BEB61CBCA2CD7A50F25DA3CBC492422980248DC03A7501F3813DBDF8809E316F8B97A85B9268287467AE7CBC5F70F2FF8754DC30CE97B1D1F4FAC292EEFAC7535C0DA944268D4024289D3F878DE07CBDA7DA712291649D2878D091E51BF765AC282DE5CBE9583DBA2D42BE9A4A87EEDB312601D009DA79E778C6F39826BC47890DE669E519DD9D00F08627C42D69A6E9566A24932D032A255A8685E99D8CC7B7FEA8E6662F8A5018CC9806A06AB9CFC2BA0A08D96E24916A971ADB4CDADC29C610FE1B2B555590B7DC7DDD3B9DE38020C98D8C7E5B61976DAC047C4CEF73639F86BA578B386CC218D2AD5BD7E5A780F3CE3D78A291D05CFE1074CD8903D3B085259078EC64CFBC9C19D915FFD6E1C0A93352DC4B80FC6DE7CE209DBD05383C4825CF746A2A6BA7163CDF8C661B35ACB15F4294A8A1520920A81549120149066761B6D3B7B63B83B17834CE932C2920BA52036A5FD29E3C8470C76989FCC4D2EE0294416B3124F10F635CF8C3A34254686DEA249516DB924C93E927724C99F89DE7E389D1D8E84CE49DDB39B56B57A8390D7871317562952F0E6AE376DC39B365A74A43479D501577257B88296CA54A2E0592084A52089498922083C738996CDC22652529291566A3D3EBC0BD3CE36D8B8B94A958ADF054778A98F0246995C9AB37285374F724E64B95D691EA9B3DC9CA0216A6AA8D2AD14C9000295295E5E9246E412A3BFCF12EC3E111305502828F419E59826B6B718D27E3F06926A92A0EE5E8C34602C6970D9C72CCF69CC1497EB9034C54BA7584D2A8364EA402646E08240031ACDD988DF4164DDAC19BF5B014232168DD1B5B0850A0080A20A5A858E440CED9B87F3746DD9A7AAB95B24D0575155DDA86C15D70768CA9A5169B554B8F2DB2D15A1B483A65709E00480040C39CC93270B82590909FE190D4A9CAB956D5D5F8B6492674C15BA8B51833B82DC4EBA9B3C5897523A7FD22C8FD02E86667B2F51AAEF7D55CF86A2E1D44C97502985365EB5B558E86D4D3AD368783B534CD1AB53EB56B0A7F48309031C75F8A78ADFC4CD4BD946D5D5B3A960F4E366116A765F0AA0A964A402E0390F4A7DC0CFA447DB35EF66D3506991E7A5755E6123F7148EAD29A485054AD67CA7CA8A893C18079A4367E104FC4B90FBA416CAA5AEDE9E2C62CDC529522427FDC0BB1BBD8873417E11A26FB267A776AEA7F50722B94948F57D5DA2BA95FF00BCFDCD0BA649434B0B2E3BE511050549054BDCA809C5FBD95C20972514AEE86A7FB6D57A8CB337E315EED69A56564E4E5DCB8150E6BE7C2379761A13416AA4B6E94A534D47434E9692004234D3B42129034A4493B263BED891E3494929B81BB42356FD8D3C222CA0145CD09BB1D001EFEB086CE8EA830B00010923811B4083BC1FF2630ED80F951C59FF00FBB2CBDBE50DB8AB22B99E8CC69A4442CE74B74BA55A68E9161B61640A84E9821B237214082241F96FCF62F6EE83D0798F75802597513FEE1D2A4374B4471CF96AB3E5862A9EA96C1A66DBD6A79246B4BD12AF57E22049DA6061AA75FA8F4FD3387D90A20538EB9962EC469EEB097C95554B5B486AE9EA15594952B2DA06A24353DD4992204EE1423012EA48D694B9F5AB521C65CC258B364057277ABE42BF78E79B68996E9DC4423F7931B24763C02206DEFDFBF386E5D0A9EB7B1A41D2D6C410EC4B115FA7B3CED0833FD92DC6AEA0AC4291E6AE040048D4A2623DFF00C1388BE22AB597FEA7E156E10F92BE5474F5E5F7886975CD35153980E5BA449FBAEB952C4956A5129227B801093076049FA02B15E61FD60F45BAFDA13B77B2316CFBDBA0CBCA54281EC0C9903DF6ED802680521DEF975821761CFE8610F5EF97299B83EA4B88983B9F56FBED208DBF4DBBA1B8353E5F684A11D761707A7C84A4FB1509DF78F88DB91DB19B8353E5F68C86FABEAAFB6A7DA7EE5489AFB48542C34DC2984EF03500488F8EFF00AE3C44A485B8B96CACCEC7D74E6C2074B6F519C9A807C69C9DFCE17563367B8B45EA5792A43C0290CA885298F4CF9644732098807BE1E70E4A3759882051EB7F4CAB0A620B21EFF08E94B70D74D6AD0E2E560FB15AD34DA486CAF620909DA08E23999E24EFB4624BB326913D09AD40666C8BD1C74D4D22318D495834C8D05EE40F3B989B794AF5E4314B4A7F114A15BF26348983C73064F7E6316A6C598A0A0CC4D2B766CF4E14CF8DE11B5F0E0256E0BB35D83B38CB26B07FAC4F0E925E53554E192A80A1B81ED31F0D8440C5832163BB482433643C037DEB9F08ABB6A480EA24380492F400D694D32630EFB19110ACC8DE646760B2DA961200074A52893020CE9F69C164BA125DD8B7BCB21EDE21CA1BB89DDD0A6D51423EF0E202AF3DF656880DE82994813AB549F9FA47E581A67F53E9F4A7BD61F658F80BFF0068FA91E1E59419372849F2C0049D8276EE39023E7FAE045FC8AE5F58407F347FDDF48E0D36B79F21C52C09DC6A31B71B127FCFA820C1D07F6EA3D4E25454A290440528948FA131F38E07B1C64642FD9753E52590663B1FE51F4EFC71CE13C57FA522B727CBDBF0305607FD40BE4D5D2B6E2EC7933D60CE85B2DA9D7088050609E01009DB781F48C4691FD5CD5E861FE6593C937B5F38A66FB641D4BB96F2A110549A17C8546E2148DBDFB7333BE2A1EDAFC988CA8ABE746F6D90EB168F6289188C39603E24BBBD5B3E74239F38C6DF5A89FF00C4ABE093BA12393FF573FE6DF5C734ED7FF5439ABD22F2EF556FBFDE23FE6457DE42073E584832760447C76E2413BC61CF09FE9D5FF115B13D0DBC39C6778A05811D1F30C6AFA53856108F88581EC903F538F70D65FF00CFE91B85150737B1FD385601BCAD2807DCC7E87B77C131EC16ADFD2A04C9023624F13307DE7DBDBEB8C8C81297BCE0128247CA520FD0471DFBFF002C64640D40210906490237E76F9E32323BA14A0950048E4EC48EDF0F96132A29516E1E90AA2C79FD04027550493B891C9DB71F1FF2719DEAF5F33F78DE2C9EC5D73CE960ABB7525F6DEDD65BDA506EA1F6E9BCA74A5C8F28255AD5006C093CEFC13B5609C5623173CC898C65BF16A96F86EC4BFB37E835250841482450D2F477FA79086E3A83794DE3A996BBAA5A5B297D0ED53085495251F7652D13113B898F8903046270E7008DF920EF103E6B6F1C8D031E3933718193B8263062C7302B47EB5E3567A45A27491FFF00F25B33849D428A9C921249FDE95854275004FA53A448883BEF86794B9B8899DECCA14580B30B966ABB75367A43FE14A54800D8BB5332C0B682D4C89A5214C2A91FF8AB50CBF50B2B6EDEB2A6C5342BCC2501027CDDF93B1107B4E1FE462969DD0542B6773972190AD75D2083292904BFE9C8BD1BF78555CAA54DD4A1750842D42120A5451A40D805242484909D8FA89067B6F87544D9531237C8B0A0A3D6F536B539728194C9A8A8F3D387ED11CFC51D5A99E935F9CA7282D3E86D0BE57061C0A0147494C023B1898F8165DA1270E714148208080EF5255BC4D38E5C6B5CE079C66290E9037417FB3DF46CB5842F853AC72AB235C1B6CA74D21A66132924C38874904F27FD21076E0C8C44B6E02AA01477039BB71E81E0ED94B29F9C500E3400F4B3E7A80D94293C4F9523A1D9EDB70A403656000763BFDDC7D7DBF5F93F763706158AC3A95BDFCC490C035C91527A1FAE502FC42C44B1B3B1AA7A892A6636212F53FBF5B1CC8E766502FB46D6FA6124EE4EFA8CC7E51F2E71DD1D8674C996C01DD08C8B3D1DED46272CAF1C1FB6F10BC42A6A96C0852C66D537E7EE90E0D915555AD5BE9A969155AFB8E22929E9993A1D5BF0427B191B1D80DE4462CCAAA6A524022C4D6C2C39B1E54B18834DC54C51DC24005C3019641B4ABDB2778742C5932BBA7398579BFA8993B5B96FAFA2450DA6E2D79ACD633565A087021680143CC75237993C625B80C2C932FBD5865242425BC9F421EF580A74F9D2D1DCC951014553160800050049ABD46ED72A86BD62C2730751BA8E9A6A3CAD47D12B350D9EF363A4AFA3AFA5B7A29C374754DAB44292CA887941242160ECA2763070B4FC64CC28FE19481BA727AB9E0FD32CDE91199F3E74C591BFF53A585CDC5CF30F0D155F84EEB2672A172E395725D2D6563C1C7BEE7517128AA295254A3A75524A8A44E94C0F9CC1C324EDBF3D248250002F7D0B5185EBA0B52B0E18542CB3A9418D00CC90C28346F3CCBC58FF0084AF035D3CEB87823CE1D24EB2D0D7643EACD8B3AD4DD32CDE9D614D34D4D754B9E4542212BAD4A92EE94E95B601850D501381F1FDA39EAC24C485020A083C68F9677CDFC8C4D763CA98A5CB0B7BDCD47D875CDBA5557884E982FA09D4CB9748AB6F15B7CB9656B4B14EED4DC69D69A27A92A5A556B4E502D6E2F4B4AA6AA6C1004254169E46FCA9DB55E231D8E99BD5495280672439639B876F1B70B8F634F1874A5492010CEE6A58F263E35A8AC1AF86AE8CE6CEB3672B2E5FCBD665576BAF536A4D532B6E97EEA16C796D8A8425E9482A7225000D5B03260BEC5F65B0D8B44F9B89429D0C5240CEB7E767873DA5B716532D2E950142C6A1DC1CB2BF02FABC7F44DFB2C3C1B8E86E43A4BBDDB2F5A2C7515166A0296E9C9AC7AA1E06996548A85535379264296AF4A894028E5538B125E1C6CE1B928300198E55B67D2FE0E62258BC519C097AB96D2A79568ED60D17280C2CAC001454951F69400123E0000361B1C6CADCC4106692FBC925AA0F0BD08C9E1A541750198FA6795C8B65EB089CC944C5532F79A9248493095699E62763B6FB1C3FE1E5A112D3B849A665D8F0D2059A80AF9AC0D81663C2FC5EF488919F1F66CD4D5150127CF21496C24C2E44C1510248E0C7FDF0E490E087A6619C31F7D3A9806621286290C4905FC6FAC43DCC3956B730A9772CC559528B7D438B4D351D3A49150A00EA4382600D107541DF68E65299225962D5E35FB1877D9406216B4CCB253461CCFAB70E50476BB1A32FAB4D29728E88A87974C5B04A8CFF00190B0005773A78EDB6049B8696CFCCF1A0A56B6F18326812963709B589700BD99BECD1C7353A6A69C2C28CA4088E09EC08EFFA7CE7004CC34B02D777CBEADFA5E0992A52C814029402AC5AFC6D5E06F10C7A8354B66BAA3CF4A3D49712211A7D242849DF920EE7DF8C4371E842264C6A379B59C55ADC68DCE25F87909289632291939B64FF006E6F1099EB7B0D6697EE6C801C0F1264828202A4029DB7DCEF3C6DDB1199B3D695917B56A35D32F79438CA9492775835ECE7F6A56B731E734AD356B5949054E0F5848024804EC071B9D873BEE31EA14F42EFAFDE0932524316E14178672AE9AB1B25B48FDD85951D4993B2B544F783F2FEB8DE135C84000F896E7CADFAC1254355350A080AD0769D3239EF3F2E3D8CE32045A4066CDFDF9C16553EDD024535D5B2F53BA20A5BD8C9EEB24104F7263720FC703AD6524B3D49CDADFBC6824A53F1825D9FEFEDA0AEDF64619A85565B56A6DA5B81686F5480923852604EC76F61B0C1D85985652950A16AE57717D1CE709CE3BEC922C2F9E95D7F587E727E971DA64146A524A54A501BFA60C83CF07E83F4976064A5253303850241635A0AF0FBE7AC3362A4812D4B49ABB24350E6DA8F1D6247581F4D4DDE9D2C6C1284820EE3900F1F29FA8EFB627FB2E729052915622B62C5B4CA94A1D408846D3495219418FC44E7A5780FA7389C9D297D6C388095848046C44820713BEE3DBF211CE2C3C14F5AD280A7A80FA3B33793DB26B1A571B4E424A8D2950CEF7343D5BA6B779AD962E0D3ED2295E5A4994A8C18215C800EF3D8C7BE1D0294282C01CBCFA44426606509CA5D5DF314A1A37223CAB0ABADA24CADF29DCA521252601D3AB9E77DF9F69381E6AA6006CF99A9A53D9ADA084A424307E67382F6B500A56DB712246E638EFB7EB8102D4B5142998921ED400DF57E91A89680ADE6A8E3EFDDE04BB4E8437E72490B804C70647B7689C6DDC2753E10A40866A1D604208DF9244FF5C67703FB8F808C83BB5D7B8B7821CD2473B083B91DE7FCDB6E643C7A5489042486E22EE0BD7E9F78DB0B3568C4D00662CFC08AF0F64B085F533C1C4A9B88051BFBC41E08E04FE7F2C47650F986E8248590FC1FD47DEB0F73E7AC096C00F941ADAA2ADAF4FD297FED89404E58CB8A124A2DB52A1ABDE51C8DA44C7CC62ABED961D25339C5DE94CD9CF87EF166764B13325776B0DBC9620B9B9A0F014E118D7EBC38AA7EA256ADB8D5534EA5B814244A488D3DC6FF001E31CCDB5E52062C8C82C8D4D73A9B64C7CE2F9D98B38992264DBA80B65416A8D73E711E2E757080A312B00ABB49201900F024FC637EC670F185C3CBFCB3D01EEDEC7965967CFA3A0B9CA4623BB1F2853375A0C80A5D9F2E3092757E62C9F6DBF2263F423F9E1BD95294528B12E5C390753E3FB4386F6E80CC410FD5CFEDD202542429027B286FEDB1C109248723F58CDF3A0F3FBC13B8DA4AB4C9832363BC1247B7EB85CA031205871A7EF68F42C92052A46BF78ECC80C4689DBFEADFFB6052B209E04FAFB1FAD61481C87CAB923B4EDDFE3F0F8FF83CDF5703CC7D9A3205A57B181CEC67FC1EF8D800B726EF9721CE15458F3FB404AB10D150E752463DDC1C7DF484953540B70CA999E71A4FCC5E03D5514EA6ED15A975D48F3FCBAB4BF50B74344421BA8A66DFA62770427CD052365804E2B4D9A12BC4B9600B58E6F537CA9E978E90C4E1A623E06219376356602B722E79F9D74F88CE81F50FA53D40CB1577DB33CAB35751B8CD1D7D1A0BF4EDAC53B83C97C372B654847A8A9D4210674A564ED87CDB2940929208218BD2CDE21ED9D43F386F4C998169E62A737533B5EA385CB089CBD2BA7AEA7B3D950DA15E7268E8217034A4A94E10A1AB6204190019F6388FE1128DD5337CAF91739548E608F563120C3CB5048500585EB9E647D7CB8A5FA9D96BAB0EF54AFF00987295516D90AA60D36E36AFC3E67A80F2D0A44189E78FCF1B9A12DA96685573400E6AD6619FA9B3D3CA1215DD56EAF58AE2692F194282E2038A43AEB2DA4BAB0957A9C525694AB52A0A884F7263B1C26A99392433B1760E43B66C2A5F23E3415026CC724BF5D2B9BD3CF56CA125D66EA453E70E9266362AED0ED96BADEA65C728DC68342A43A8580592762B942C28A8846C8824EA036932A74E99BC41205053567033A3DCDE0896B4AB0EA7209721DEE330D6A1A718E5E100D43596B3530A47EE935742EA5C0E36A48D4DD590D140595A55126634C8E676C37ED6C3FCBBF67CDE86AE1F8F1AF8BC6D835A5295105D82859AE5CEA0E45F56EAA3F1695AB4F44F38B8014A05050B4A4ED32A7A95333C111CEF3F0C4B7B19265F7924269F1240B54B87A03D3CC3356A4FC459D30E0B161E8652E81C1A24802DC32FDB3619CD61779A57D20A928D292044FA4CCFB0FCFF002D8E3B37B0F29A5245096491434701CF90AFD0911C51B4D4FDED58052CD6A5C13C0BDB85DCBD443A5D24BA53DB334D92E8B52A2D9716EA97AFFD1F4A813A82B63B0998231668964CE4B00C2FCC1F7A75768854DA4C491F0BB9A713C1FD1E2C3F3975BF2FF5DB3FE4AC8597ACD6BB9DD2A1EA06EB6AEE0D3229D87A89C43A96829093B28B00824083CC6F893A26A64C963421234E0C1EB5CC0F5A0206312A21C83BAA600D81203902DA654A54D22D62DB9EEC597AAACF6EEA865EA079CB7D959A4A3A0B4D322B1C729AD2CEB4250DD2A1C73D72420C0009959037C4636B63D284AF74B023C18B97D353686E4482A98CD5A316000ADB8F0660490F092F1039EEDCACC1952E1D24B0E7FCB4F7DCDBA97974765BBB546B1AD92410C33A0FC4110A4CEFC62BFC6ED53BCA6525C5AB6CB5AF57EB489460303BDB85BFAB201ED47A7A13C845B4F85CCD597FA97D1D72F9982969EB2FB955EA5A3AE422DAAA4AB7AB9652D9A9B9B4F53B0EA821C92B2B4A95AB7009DF0348C7AE7C9524A9C10ACCE6FC7261CE27182C34B49147A3B6567A7326A73F4CFBFDA6B6EADEA278B5B659AD76569815D95A9EDEE2DC6E9A9955EF07EB5869EA47D1A4BADA1A0D349D6B0B05AD000D20621D8BD989C4E31C8DE7582497A3971D7975D61E55895494FC27743559DCEA68ED660EC280F03A11FB277C0358F2BD365C7EAAACBB71AEA5A1A8AF69FA30EA28D4029494B2FB8DEA057AD7AF42A0E846FB0C583B1B672367E1C9612FBD0CE59B9F90150E4F16667C46366CD581BC492F572EF959C707E64C6B6B2C59E9F29D9692C144E14515052B4C06C32CCB8B40402A2E11A929D8ABD2A0A9804472DD8F20A95570F46D32A7A9B56FA2D2A62894851AE848CC3B383719B574836556B49310A3F28EDCF7EDDFFB61B25A261538760A1D5CB50D3CB8D21C5265D4A88258B31E0F979E97A413D716EAA9DD5A4A44A4882413C4769037EC3FB1C4AA4FF2D3D69A56C61B66DD5980A35A6A7F4F1E710F7AAB4E9A27BCC7D875F4AC85242220982481ACA44C73EC7F571467D2009F974FAC31D56E5D2E141FF254E28DA6D4B0DAAA909218213FEA9090B890368DE773B0C6CA1F09F65DFD8E03582B674DEED4B3A8E5E7C39F990EC8572EB19A9A94545D5CAB7913E728849A6D33BA1B11AC7FFCA0ED8126FCBD15E9042F11BCA616AB13D33BDF366D4426EED716134DA56754080411CF07BEFC7CE4711C37CDB7457A0877C1B1637A0B727BB6BAF85E21AF572B586EA1C70C996D71A481F8818993F113B73C48C57FB526813262699826ED4B333921AC5F9E7135C3FC92B2F87E86B4F794411BE6676ADB5950E2D64875D5240494EA6C7FD4A93B03F03FC27638884E9A44CD4543F201F4CEDE5A4394902F9E75AE829C9FC608F2EDE577BB8D424385E692DAC850214356B446DC704FF4DB04C85B921DF203303EADE9CA08855DD299865A25683B2544EC249237E78E7DFB73B60B84E67CBEF43CA1A6AFB9314B5863F0C8F6900FC0FCA7DC7CB190DF332EBF4809575167AEA7A82E54345F24A9295F2D93BC1D8EE37989F6ED8126DFA9F268DBFA3FEDF79FBBB65081A5AEA8A4B80430E79B4C090A4A098D40ED00ED007BEDF4DF06E08FC69E0C7D3ED022EE397BF4894DD315D255D2ADF5B4B0EEE800E99121209D8F1EE47C78C4E305540E64D73A0D7EA6D786DC50794A0D5766D2BC3CD865E0FF00D968C51BE9AB4292028831B929120EFDBDCF2676DE3133D9A5D693FF000F27A53A5AB9B443769CB56E5033824022D4E66CDD7944A4C857D6693C9754FA485A9200498573B1DE3BFB4CF18B1367D817C92E199AAEFC39728AF31F289517003EF396345393623931EBAC4A8CBB7E2D3A8AA43A569594A804A84988076511EDDFF331890A65FF000DFEB4D4BF4CEDC622388004C20654B33D4DC6B124EC953FB66DCA70381250944216A254AD4144C69998291BCF7D8606992C10435357259B8E84F12ED7846382DA2CA96D29241570AEDB10771CEF1B11EF81370A55C012D776A8F758C8E8E2C2DAF2C4830049E368F8E368C8FD4CDAAA4129F48133ABD84C911CF18C8C83EB5D1143C16A2150A298133B19E091BED3B7F3DB02E390F2357AE8066E4960D6BEBA078D70E47E6AECCE35CDFF00485CB450C80B0930A0133B6DA8C09DF78264FF007C47A44AF9890F4272033A701D795EAF13851167F8055F350F7F58A6BFB63505194F2AAC9115769B82D0072814EA6642A7FEAD634C13F18C55FDB296D2A7B65BCF6A000166F3A015E5165765AA94A7FE3C743F56E1C63195E201519E7EF1BE879953694FF10248DCF681F024E39736CFFAB57FF50FD3DF8F5E80D8C1B0A91C03F827E90C05CA8CA9A498E109311CFA391FCFB7C70F985FF4B423F96D7B1C9F3F796624EFF57FF707CF33C03F9FD0259CA7D2A57A929DC8833323F3F847CA3B61BF75D468EFC0BD00D28DEA61D4FF004FFC746CCFB7CEF006A000910A07D438F91C132E5BD00AF0AD3974FD74D60A17FEA0F9FF00FF004705994D2D4E1C6E9A870E4667C2D5D328F5371CC7AC7BC371920936BEA6178EA8657F8B58822472489DE3FCFA633B9E5E27ED19029B5E8525B5492B9208E047CCCE3CDCDC2DAF3E3AC2A8B1E7F68E558E0D1E5C192641DA3D2779FE9CE32055DC72FA98D2FE5BEAA750AD094D4D2DEEB4A69EA52945355BE85A1C43A4F9ABF2D68F3549490351D6523688E3149ECADA2944E0B9AB090ECE4D29E34EB4AB17B764E370216A1BA97253460E4D8103216616E8F0E0663EB05DB3D65FBB651CE161CB779A5B853BCC53DC8D30FBF5BF5305697699E2F2879AA592D7A53326399C3EED5DAB879924251390A25340953A8656B67CF8B086B46CD5059DE43105EA2A403E5E1FA37196DB6ADB5146C3A16D5B28DCA26E990014BEB4A16F295AC4496802370200227BE197098C424A9D60156A7D2DAF0D0439AF0A997865FC290423E1CAAC4B3F833E79811312D557D3DB9DA6DEBFBD52535CAAA9546B14FBCCA56DB8948280E85414A9449002801C8F8E1DE44E93308750E01EF5B8E14B68622EB4AC82C2AE466E0370A3D0F56AE50D9DFF00A2969BFDED8B9B579B62494A56945354D3BC164A4105D40528254A2415A4C41911B6EFF87C24B9C90CC5DD8D1CD7913CBC28F00CC0B14DD36B1A71D1F4E7619C333D7CF07FD47CEBD2FCC0BC916FB4DDAAE9E5E08A6424DCAA90DB614DD3B54EC3816EEF25052D9256A201DB120C1ECC96125D2070B1B6A7225DDF2E102CE9B3512CA020906A0548273617D34706B94453F0B1946FD94EC39B2D19AAD0F58F31D257334D75B655A5D66B295D40A90943D4AF1F31A2A01653A9209D2636C443B4D874CB25AFE2E4024337D80A3DC883F652D6410B490E0900B000B3E833E2199E0278BE4A58E846755B90D814740A0546360FD29933DA01E0FC30A763953862A40DD207780354D37B2D4B39600C577F8892E51C06356E292661173FD2E73E75A88CD25CEA535372595AD250932824820FC47C37FD31DCBD8948EE65B8F88A52E08660D5E4CDEF2E1EDA6CB333706F3AD55150DBC436618FA690BEB0D404D0BC8F265C0C15B25849D6A041852C89D8773007C7164779284D4FC4052B5B871C7300F16AE710C9D2E622632811BA59DEA1DE97143F7BE6BDCADD37EABD9B2C55757EC54770A0A1A2AB654CDE2929DD52D21C792D79E978A549084297A54A8D21520EE44158E9F2C21211312E52180AD320482D5147A6546681F1050B12C7C65084A9D88277883F2D183937209B5445DB786DC808CCB6AC9F78CF7D437EE17CBC52D13CD1456D2AEED4FF007D5796964B2E21CFDD3A469595346532010715DEDEC6A24255DE2F75D259CB014624924DCFD2909E0A4AA74D6960920D333C1E8DCECE62E1A96EB5767C9941666F2B3373BADB9E4B34B5B5CCD187D54CD201438EA453A0A9B3A0151D8113F4ACB118B5622701289989510592E6EFA67CF81C9A27584C21932C15A0A684A416E75EB9BB81A428BC3CBA2973DE6DA6371A6AD7FA916CB8DD6EF4D636595582C1726D2BAA6E89C5D385334B53E62436869C585957A40C4A3674A54A9404D050149B9A5C38151C7EAD05E1F11B87F88A091505C116A51EB5AF31C210D7FF00013983C5967557533267ECAA8BBF47D3FB3CD1D4542197EE4A66B6A2E0B084A5D42DF2972AD4D40D5051A4EE36DA5CB031295123742AA486A3B39A70AF1B35C9CB5A668DD96ADE606CE28EFCAB5D748D147D9DFD37CCF95B21D555E7CA0A4B6DEA82A58A0628DB496DE6914AD2828AD2A515C28A93A0989D26379C4876A62D02461D321615F090B096241A01F2DAAE2B473CCC232F0C5254A9819C9092685CDCD4F027AE97B1E7AB1C5B7AC4856B220C854491246E63E7BF077D888E91366AEA9510E727E3EB974368F66008F8925C91600B8E2065E459DAD04D515E51214B092239207BCCCEFF0009DA78E397BC1E11250EB6735037723560EE5CBD88BE869027E66624801C0177A9AF324D1B56B414A6E8194A905F42B54982A12449E277DF61C7C307264AD2198B3D397DBDB42CA9F28A47F112F477238FD44343D42B63D7C75AF2CA4354A038A3B69DD264127DCFD64F7C1884A83D1EB939F7EBE5034D5A5606E97018F888616F14573A8B6DC68685B502A42D1ADB413A52131A8148DB7EF31B19818F560EE9771D0F87BE7947928A828D0DB37635CB8B088759828EED63A8A8A7A92F296EA952B502604EFB8ED1EFEFCFB85394026A75A5EB46A42F2E54E5CC0402C7263636A1FD4E62821B4BCDC94A65412FA145221490B04A624EFB98E779FCA30D73A74A00BAC502B3F2E7CE25780913404928B3120B783674AF28887D5EA97B75959092DCEA24C704F3239E44F6C56DB526033A6A8174B9371634FBE6CF132C3A14A08DD492C321CC3457CE78B8B0D535729D32F294B0D89DC83FC4008F889FE831109AB3BE589B9BDFECCF666870952D69512A0C2D517EBE7D3C555D2D7E8682CECBDA9B3515046B2A502521409083DE4FD38277DF0E3842E7965CABE8C352D5D61771AF0EBA43857F70BEC95807496C9D401D2047BEFB4727D861C63498094B0BFE8618FAEB35657D512D34F2C1223CB4295C1F803FCBE1F3C80572D45A9AFD3478075394EA29D0E2CD25585932B5169C893009DC46FB77DBE7C8936FD55EA23C219241B80D98FD7A676A414DA2D85BA9710A4295ADCEE0FA4EE0031C13CC7F3C1B8323BC474D1DA9E2DC9A055DC06CBD8F7AC491C90D1B65029C20A54569849104A55A41291B1213EFBFC4FB4DB064045C3D5A8D5B54643D21BE712124D994F5AEB99D35FAC3CB457E6D6CA501C41200494850D47E100F3DCFCE7738996CE9D2F7D20283B8B90C4D2DC0BF0CE231B425AA625452973BA7220826E72BF07CE1EFC9D71A52D52EE090B4CFAA2013C1DFB1F84CE2C2D9F8895BA3796378907852A5AACCED15FED290A4A8BA142A1DC1B071601817A937896395AB5B75B6F43E8D094A48D4B1E91F1DE41EFB8C4AA4CE94A949F8D268C403C6C075CB90A8688362A4CC13E67C2A67A50BB5DCE5F68925962F4BA56A9FC9752EB6A03CD283A82408D3AA0C004131F0FD3C988772038B12297B67CDB3810822E08E608F58745CABA7AD6D2EA56D8584884A542492388E7F2F68C01300AF034BEBEF8C6AE1D9C3F380CA052352BD23DCEC3F338463D816D3BE4B0A5A51B44F123BFA8FB7F2C64647AB75E90A3A02D2561C58D00FAB7260C4EF3B9E3DC8C698C03F2AF47A7907D33F3A46B2014E2428B849CEC2E3879661DAF0BAA5AA53E9D2ADA0B644889F50E3B9200DF6F8EDBE18A4800AABC1B400FBD3AE4EF3162614A659DE20A580BDC6AC7DF8D417DB2441C99915C105B55A2F2D858FC2540D21290AE0A86FB73078C55DDB443CAC46E9AA82A99D41A53CF818B2BB2EB4A3BB4295BAA252C0EBBD51D7AF84631FC40B6BFF008B69CE93053AC18E52A29D2A1EE14549008DA48C72C6D8C3CEFCD9F8155986AC5B9DB87988E81D8E41C324FF00B41E8C91EA0C31F70A84A5A0922149104770522083C6E0EC473C61E70F2D69C28DE0CF2F3B9CFCB5AB56901CEA62F3A283F47B7BBC236A40794A5C84EF1A6638EFFDF63FD849619C3B5482797BE17AD21D95FD3FF11EA60A2A101201D532A83B831B1F63DBFDB6C1928A051C3661C39E2FF4F48D60A9CFF53EBFD4E095CC9650A0E1F748C9AC68CDFA7D3D1423988F523DC7E6300B23878FEB0B38D478881ADA8684EE38F718C6470F1FD631C6A3C447C825E6D4374A42A48E071FAE109A039DD0ECCCD5C8B8F1F58DD0B48705496BDC70E31C6B012A0409035491B8DCEDBFC70931D0F81841641342F4FA98D14D23CD8506951AA4920C6F3BFF002DB1CDB250771C9CCB1F7A3476C2D452ABD00760589FBD8F0F3856D253B3285F75100F0491C91F01FCBF2185B709BA89F7CE340B24509BFBE307C586565A493A41501AA06D2409F7247F9BCE14932DE601BDE5C43C213D6152D697351ADAB71C69481EDA7EED3E554FCB7DE3DFB71EF1CFC30FF25E5D5998B52B4F1BBF5BC31CC957A0AD4B3FC4684F2F33E507B437C6E8C82BAAA9F31236D24F3C6DBF1DC09E04C61EE46D6EE500D999F46001761967435E74802620B93476B0F7E5E10E065FEB1E79CB88AAFF00872E88A44AD28703956953DADC6F5EA4068284FA4A22099248E70FD81DBE92010AA1C8F3E59B3D8DEBC479A82659A397CEC297E95C8D7430CE672BE56E60BFDCB34D52294D6DF4876E1534CD7DDC3B50DEBDCB70A927CC5924AA41EDCE18F6F6386200639BBBDC8A370E7C3566F3069DC048F1D49E0380E6E6AF102FC705D9DA7E8466F6E484BB4D6C473B1F32A28D311B700912371F1C3DF62D015899069F38BBD8281045C1AB7878D5BF889301C1E352CC4C8586BB02921F2CFF00468CDA543A7EF83E60CCC77DE7DF8F7DE36F7C76EF635044943073B8963A3642970D5A97BBBB88E30C5A020CD7047C6A2470736E63ED0F964B7EDB46C592B6ED462E167A1AFF00BEDDD842C3750F53A40269D2483283EA307DF838994F413341F036B07233D6EDC444531ACB504A7E225E8CC59C5299B9D738BA7E8166CE97F54728D53D72628727F4BC51A6CF47635D6D38555BE9710E97DF6D49402EF9AD14EC92483CCED857108612C803E4041E0DEBC7CE1AA6485210B04125D596E9152E356BB56A7478957D1BB7F466D3D57A072D4D33E4B142CD35A9F4AF5A12D3282758012102264107BEDBE2ADEDA255DDA8837C9C8D78391AF2043DA0CECF828C48047F5380D4BEB4671C2C0B0AC3C3D6FEBE5BACEEB393F25DC3F69661ADABD1A5B58D69688D2A6C692A2275E9E39ED8836C471337883437CEE01F20DD46558B0F1B31225A40A5010C6EDAF16E353092E96D2F5C3A6FD6AC899BB39D3228B255DEF163A5B4D33752B480C5DD942426E20A027596DEDC7AA55F5C5889698919330605CBB72E8C75CCC47A6AF321EC1DE8435EDC23487E005FB223AA5D5FB5B069A829AE0D9BAB63CD4A90545909748442442DD69644720FBF1E9C3B070033B503DC5BD7F6A93302B6502F42452FED8DFEF175B966DAC505992CB0ED3BC85BEED46B610127F7A86C02A3BEA2747A7DB7F7C24A41706BF0B8A8AD39BD38FA43DE2963711A804733AFA398E5595DE4A9491F13F96C67E1F0FC8E0EC3CA23E2A586777E9CB3A0BD61AE62E85CD73E15E1AE43D211374BA8D4773CFB73EE3624F03E3BC9F7187A9128B03C8EB41C7F47ADAD00CC568189CC706E5E829784F55DCFCB750A99D844CCEF123BEFDCC46E7E430E3B8AD3D21B84CF8DCF8BD296CAC73E1E31F9EA81554952F1FC05BD2379D9208DFE5FCBDF19BAAD2DEFAF4832528134C83B750FA797086E99AEB7D052DD2A5D0959434A29498F528289204FB81F103F9A5352420BD0313E5FAB5B3C98C38C953922C5C52FC387222207754337D2DD6BAB4A29C31F770B208EF048078F84CFF31864C5BD7FE20378D727E55B187DC18B7FDDE56FBC440B866564D5563520C150E7FF00518D8711F3FCCE23188B2B2BE66EFE5CC7930896E1C506800366CBEE6DF788FBD56B807A914A1B432793B46911DF8F6FD7B1C403691F8E7713F5789161AD2B908ADAEA05538F17D483B25C527E07BEFC6DBFBF33F0C46F9C3A4CFE5D740EFF00AE6FD6167D37538AB535AA484292AF944893CF6276F8E1DB05F31EBE90DA9204D539FEAF320FDA1D2B8DD8F901A49F504C091B6A8DA76F7893F5F8E1CA16DE1A8F186EEA7315D285F25A5B00857C7DFDE3FEFF0013CE4638D478C75A8CD4F54B210F2C175694F99A49290AEF063DE36E7E33271A29048DE03F5AFEFE900CD6F89BD7F4F1D79C02B7A61D2F481A9C0A9E7623E7FACEDB6FB6CA618EECC059FE2663C3A7BE100AEE394393437C2CB296C2B881F0FF00388FD312D9130096E4E947A97AD79D29C3586EC4D12402E0B9D6F515AD9E15763BBF9AEEDB6E9120FBCCF22793DBB77E0E1F301353BC0B90497E0FCFCFD0986E54BDF966A756E21F3FD21FCCB5792CBAC2354FA84FBEE4F223BCC9F813B6E3139C0CE1BA2B907D09CD8F03CB9C4436AE1944921273E97BFA52A2EF9C4ABCA5980334E54ADC04A4FB99D89F98F99E712DC0CE00A5CE74A38B641EEEC28FAD620B8B9052B5518D4070FF00338AD6BC19FC290F9D973DD3B34F4E84AF7528EADE248803E9B9FA91C6E7126429D21AD47F7E3C8BC47F11215570DBA4B8D1EDCFA5F8448FCA3736EE9401E49130923F31B4C6FB4FB7B6009C9672695247226DCF5FD61B4CB2953D1BDDB969FBC2CAB3FF00A7FA0FE9842368088AEB8BEA0CB36BA55367627CF1C7009F4724093BF7EF8C8C810ED13CDE9156C334EC93A8354CBD6EEA3F889309FC44123F2938D317FE9C387141E23A3D4BDE9C1E14FF00CB3EF310B5B594229DA0D8568DB485985FB8276FF7E67E0C32AF33918DF0FF00CC1CC72EBEF58A80FB65EAFC8E99E46749FF004E82F8BF86DF73DFEB23E3F2C569DAEBAED73CADAE638BC593D9F2F89917277D1C6D73A3DAFD5EB18D5EB355FED1CC0C3F3BB56FA7F89FF519E7FEDC7E639D36CFFA8EA691D1FB17FD2272F847A0B7BBBC3237141507147F894A3C6C6649FCFF00C9C1127F909D370B0E15A18166FF00AAB0B8BF3197E967E5093793A4A87B827F39FF003E7866CD5FF23E821D0D93FF00103C1FCB4E105151C7FF003FE8AC647904EF6CA27E07F99C646404F3FE1FA7FBE323205B351AA12390237E3F29EFFCF1919062D991F91FCFFED8D929DE0EED56B7EB191E2A7FD23F34FF003C6DDDF1F2FD6323434C38B2F03E53322209426778E224EDCFE7B88C7384A97F0B84820F17AF5F511DA789591335F87DDBCE1574CED4AD2121289111006D3F23B7FDE4E14EECFF0068F281F7CE83CFEF072C2EA0AD1E68494050927784F0627DBE5270AC946EAC1290C2A6DC23C52B78104020E443C0B75C6470531EE04446E7B4FF0091C018723F138615B06F081D68A07A81D2BC5AB1C3EFA83B1503A7604C9D8409DC7B1ED11F2DF03AA52D42942E28F7FA64DAD3A80A64A0EF4DE1E7F66BD7A71FBFB4B4380A1D712A4A4C10A502904EF1B88FA476F6C1B82C3CEDE01880F4A93C79D4E6723A422B93FC02CC492A2A634028D502A752295BC72ACAA4BAC193A94893BCA881A492413C7F5224C98C79B525AD245C8B31228EF952D5AB9AF5806427752A00EA0020302E43EB4AF9717809E3B5EFFF004179BB7548A7B611EE08A9A488E4CC8D8FBFCB13BEC3FF003B0C0872662472F883D78C537DBE53CBC40777491D1ACEFA64328CE2523EA72B13AC6A8200D5EA1B1277F81DBDB73BF6C771763123B8410097486007001EDE7E85E39336D23BB331562A2A2012FAE5C49E7943D2DF94DE565ADB425B5A991A8A1212770677489331F58F9E2673E58334139A8B5E8FFDDAE57CE20C06FCC5004515424BD5EA41E8FE35821C86E663BEE61CB194ED35F523F685EE91AA2A25D438283EF4BA9494EBA52BF248510A2A2510A24EC64CEF8840FE125CDB42D40F7E2064E4D5F815899004A9AB52778355C1142400A068C5DAA4E66A5C88D1074FFC3E679CB8EDBEF171CDEA356DD9293FFC82D4CBACB4C3A180A0A694C32DB2D956DE6842C15F07562AEEDA4B1DDA8906C6B766CFFBABCB891480B627C38824871BC6F952F5AD751A0178745FE96E57C8171ACEB5E68AEA9A8A9B330C9A5B686DC7975552B70294035A485383CB89E77927104D8C8DD52D553777C9B8DDDEAD9B738956D09A7752E410CD7CDC312D7671C07085755F59334751B33D3299B15E2BF2C5CADD6B7E828961C4AACB5D4A6914C55A1B71C1F767E9C36AF2DD400B6C13A489C4CB66284D584AAA0298573E403FD45290C7366D4076193572CC8AFEBD1AF17C28575359B36E57B8DA98AD35F5F95E9ADF7B521C5ABCFAA5AEA01FBDB8167CF7425C41714E15AB54F26712C5E1009454400456DC0966F0E7483B02B4EF80EE6C0BEBA6643BD35B468FB2843596ED2EAD4A417A859F310498D694951244C4FAE0CFB09DF0CCB97F197D4815055737BDE9CDA1EB1330844B72C58B6776B1B9A0F43C88731D784971281A7B05A60122679EC63BF79DB63B1786402A4867B38A8CAA1DD9C0717A917A4362E656A69A6BC4F3E3F786B2E37508242D6A3B81CCC7B0066677931FEF87B928A006957034032A6645EBAF28026CD725D468081A66DD1E95CAB9B437178CC6EA9D052F381293B00E2C6DC7B8D8FB7F85C92805830E6467E061BD333E22F50E5C1D0687DBE902AD99B0AD97E94BCB510DEC0AD444903782793F21EFCE3DEEEFF08A70BF2A57DDE0B973006A8C853A509C8F40D048A9AB6DE42F56874AD26260C9EE3B833F1E7B0C078B004B702E0E4CCC4BF4B547D21DB06BDE5106A490EF5A3D2A6BCF2358899D5CCA54D4ABA95B234A9D6D5B253A46A2644C0E37DE67B7B62398CFFF001FFF006FB7AEA624B84CBFEE8AEFCE14AEDAEBEA57240D66749224824998891B7C7E3C622F89B2BFEEF5112FC3D07FDA2BD067EB11B73DE6C6DC7C52A965C4F97A14952A52080127627E0778C403697CF3F506B7A1F67878DE4386B4ACED58859D51AAA7618AD533A110CF9D280069512B93B441F48120768ED06390E9300EEE997986A3579F4BBC03E995E9EADB5321BAA7530403A5D589F790151F99EE3DB0ED84A2864E2D9176AD1FCF339432CC56EA8B96ADC3D49CF99D61FD4D1B750C20B8F49291254B9DB833277EFB9FE5BE1CA34EF07F71F3828ACCB14550652E344907791AB8F7E49FE8063233BC1FDC7FFBA13D5D65668D240503A360444CFE87E677DFE183572BF840860E01F207EDCB28C5B31CF88B5798F79427C5C9546A500E2CA413C92408DBB98D8F1CFE78092C85B39777A6BE803E659C40732E070E91D1ABFADF7D08438B00EE4256A1B77EFBF03E1C7C30F12E76ECA033D59896B8E43517E10DB8A0774814BF81E19DC30D61C0CBD98534F5010E281236DCC899E073DC8EE373B1F677C06214E38914B0CEB4CF9DB28D654B2B0699720E342F9BFAE50F2D2DD6E6AA4A77E9CB815293ADB594ABEA52419F7FAF7E26D80C400948A9A35C3BD1AAF5D5DC9CCD8BB663B0695E4F5723467AE5736C8F94480C8F9CEEA8B7FDDEA1A5BAB692A05C77D65464A86A2A2498040DFB0DBDB12BC1628BA054540356DDB74FD4B5E2BCDA387DDC4CD003D2A097073D59F9DF93C3C597F33543CB643C8090098038131B911CED3FE1C4E704B2B424BBD059838CC9D4D6B9DBA46B15877D2DE043DDEFEB1377A3B755D530B6CBEE6920424B8A800107F0C98D872903DBB9C6F3C3B9737219AECED970CAF0C98893B92D45AA0BBFFDC296AD2DADF2A486784D389593B0E4CC89EDC7CFF9F7C070DD044EB68A6702A997EA3BC2647B7F9279E3DB19190734AFB8A5256E8D2E11063981C4FCBFC184F19FE9CD721E9EC75853FF002FDEB0AFA778F92544AA4298DC19E5D40306677498DBB189C314ABCCE47D4C2B850F352FAF4B1F7D0F5A69FB6DAA8B1D1FCA8E25453A282F441060804526C083C7C36126778C569DAE1558FF007116E1C7EAD163F67FFD4C835F991C32A9A0278D32318D2CE358AABA92B502B5C040528C9D01521324FE1042484FB8DB618E74DB3FEA3FEE31D1FB17FD225AEC3D130DC5713E4AB73F99F718264FF212F7DD2FE7024DFF00563FE498485428CF27F07BFC55865FEA57FCBE821D4976E01BD60A5649304C8D4763BF656323C80F5C94A53E94A47A47000E409E077EF8C8C84FE323207B094C030274CCC0999E671919070D2524124C6E0760304C84EF0551F9B365AE768C8E75412193067D49EE0F7F8608EECFF68F28C8BB939BAB5BD2A6C85AD51BC2883EC0106781DCFF004C739C9928DD203B3FBF4C89CC475F1C499ECB5DD9A993733F530BBB0665ADA88F37D129DC8D42237DA4C4CF33FD71931012ED93757FDE3554C2598961AD7F6858DBEF8BA97DC654E9F411024933B0DC6FB7C41FD36C249242C0A31039D4B350DF3A8E99C6256A0A15CC06C99E14CC30AAB2616B1BCEC473F59D8EF3DB0E48F987BD6169930B160070EBCFD3F7EAFD029804A94A240E491F4EDEFF002E78118351BAC000C1C3B500D7DBC03327106C1C50352DD7E97B9AC121762A0370AD3A41D407C4883D8C7C06D8593895489A10940B02E7DB01CDEB91A4233B12A1294400C1C36B6FBD98E6E49223ED7D67DDE9D6A6C12A09821C9D3BEC44274FBEDBFE73817694D339490A01C9F507D29501FC21B25CC514AAB5209C8B70B7B7CA20078EDBD24743AFE921BD556BA2A75093FF0096FB0A494EFF00894A409D53B18007227FD86C3A44F9049B4CCB22294CCC53BDBE213267CC604EE1BD05AE34E2DC233E146B49AA074A6646DBC1FD7B773B6FF963B43B298BEE508969627752C4D8FC229C73CFAD847256DDC4297BC180AA98B58396043DE95E55ADDD5A8AA52329BEB40055294246FA4A74AB710419E3BFC3BED63944B5A533379CD4B53ADCD865E44B561F844EF4EA8A3D6ECF9D4533A034B3BE681B1DCEBAD172B2DC6DF59FB32E36FB931594B73490452388252952B56A4CA54750D437DA71E0DDC4A42AC64860D9B063E3767B96022453A4A0C85A375D336514AB3343BC93D087A06606958BB1F0FDE203A90E0CBF42EF50EA738D5D6290F54314F6FA7ADAE6D96C227D3494DAC52D3206A7545274A24AD51B886F68363A71A95051506390AB7A30CE96A931104CC9B82C46F2038724DEB5EA07891EA1D57BA965CCC59AAD59E3A9ED5C156671374CBF964D659E857707DD2B0BA5BA525630B79C6D821050DD2FDDDCD520A8CC082A361AB04A526582A0A704967009BF519F4CA92196B38E09EF5E59625859E9472FEF27B3FDE1E7AB568BFDC35B979550DD4DEE8685FA075348DB0E503AFA5151F776FC84389710830D90B281DD2A3327E170B330535202778920B9ADCD6B95189739598C169D9B865CA277C821D98BD5F43AE5CF268D17F873B39B4664CBF5596E9AE95565BCBD46FBEBAC652EBB44A486D958A575A61B4F92EA9B2F9F312E90A7550A09000B0B0B86188C315CCA1625856AD41A7BA650C4BC4AB0B88EEE52428050049B8D6A0B5DDB200E4634176B4BB49976DE14A7F5B54E8594BC9283A5D42480404A011E8811BFBE2278E47713C84EA4D4381C39E995F9C3DAE7CD992A5A9605438A78B695D1A10F992E010D171C090143D44121404C88927790907DC4E0AC1052C871980721520823367CDF268116B53F37AFD07288F59933732C3CA6D092B0091B493FA7C7E1DB12391202807399F21EFD2015A8D4901C53DD7DBE964A55D6EBA7F39C0949009037E089DF73DB98E37E3904D051DB473F781C4ADF2E35B03F4BB5F3FA424E8732F9170702036A0BD095056B2008E46950F63CEDEDC60754E524B000863ADC65460F583A5CA4BB39A572BD3506245E56453D55025F5B48712E09E090923790779E604CEDF4C018A9EA5A0060D9EA013A0CCEAD4A50B3438614896B2CE491E9E9FBC47BEB6BD6761BA96D5AD3505A712803481AE368F499DC1FD70DB370C9980B9F89B8370E34AD7E90F786C5A90406142D5BD69534EB4CB8C55E75305379CE9F5C29449240D5C9E204491DC0FCB117C6E1D28DEDD248A973951F2AF23ADA26BB3E789A12EC5C073637B643EA18DE2BA7A92E2A86BEA1D694572E3D1E61D923528FF0E93C111DA76E715DED1960AE65181ABD496B8A796BE312A945084A540D998642DEEA418877D48BD8164B9D43CB00F96A6F7240D828C093DB56E49FCB6C464A09537F4925E95E4CF4AF0304AB10923777831A31B836F0C9B5CA3CF436A955367674389295AC90A52BB08DB63F13B46D1ED32E9844B29CBD88A8615D2CEE6D014E4A49A13C9F9DB878F38948C7DE1F7052A9D0DA74690B41F58511B492549324C891DBEB870843706A7CBED1E5CB6DCD95909A852D3D8A940923E903FAFE98C8CEEC6A7CBED047780FB2CA8AD6A2B008549D8286C6237E7DFEBED82CCE3DD330F9521F5B5F872AF18D943E12387A4376FD4834D52B74C2D0B84F3B88077077E446C70DD35452410EE6FA679D6B57B6501AEFD3EBEFDD88ACF765A6BFF0365212E413AA242473EA881CFCE46F38511895A8049B0D727E46B5D757CA059880B2417BA40EA33F010BCA4A9716F25D480248D84C013078333C11BC7D37C3DE0A6A817156AE65F79B2275AE593355FD612E88B5D8D9CB8FA0891593EE2A34C8A671CD6100104C6A201133DBB4FE11F0DCEF2FC1E3160064A6801CFDBB718066AF7CFCA0338B50D4D28D71426FE10FCE5AB82892CB296D4A700054754F11B41038813BC4625780C528B122FCA8412D7BD011C696A445B686CD953264D98490A50B025BE51E201219FCE1D2B35CD74D554ED6842C2C1D6A702A51110130A0379DC2BD81DB13FD998A3BA9040A871990C1BA787217885ED1C3265552490C4816ADAE458FD626DF432E49794B4A949442A11A4FE22A26419267693B444624C65CB5CB2B592966723CF5A87F161CE1F8D9A425418339160CD57E2471C8E6C1A25892E169D0A52FD0DCA220CFA6449833F48D81F860354BC3243EF9258D1EDA3D3C7EB4866DF4EBE460129454A0BD9247FD3C76F79F6F860554CC38B2B577366D5AD19BE9D7C8C096AADCF35208498813B89E36E63BC7CB618DE7CB44DC20526A08D7851AAD98D5A91AAE7EE8DD0CDD5F33A8D2F0ABA5AA708D012982852C9F572C82EA7B8D894C19131C418C324AC3B95B0BD39D6A2FA3D59A16C34E6980FC370D90AD2A49A5C71AB66629B7EDBC73FF00D09E54717B2DCA3CC4820FE1FDCB36C5A607324BABD44C6C13DF735876D251409CA482402A55983B0A17AB7956F163EC19DFF5323740277939BD4375E4CE1E8C32C6CDE9E2AA821484183B120FC7E3F318E64DAF8827125802CB367A87A666FEC4745EC29CB561B7486012E08B9340697E4CCD083BB385B040008519333DFD44082207B72706E1D65587B3320DB882614504AB12145C7C41DF829B2624B393ED922FA89927FE98FCC9FEF86B50652B897F48729E420A426A37454B8F77F0F182C57E2FFE47F92B1E46892E01F778F1704FA06FCC0FE9FD3190B776353EFD9F7723F213FF0051FD3FB6364A429DDE8DF584C8624685A3BA3D0001BC08DF04224254CE4D6B93333E83A9FDE3C8EDE7B9DA07CA7FBE084A3BAA243F476F0F778D14A29666AC7375F5941D46448F7E7F3C6DBCBFEDF231AEF9D079FDE2EB2C7534E95B6C3C90A85924900EE5440009EC37F97B76C739E18BCB7E3C83640728EB997F2D9B87300C3D76C4DB8D3CCA13080469D25531DF71B7C7E1C1C64EFEAE9F48523CDB196D9AE79E9042D403711AA77D889E3F3FA60424098926C19FC4C7A2E0E953C842D69EEC8A5E7548E213B488F88F7F9FD6706A16C6869C327F7F510B1B1274AE7C186B7CE3AD5DF9B791EB591207F0C1E277DE60199EFF001818365CD347ABD38100062FAB373A7386F981F7B504D7AFB1A413B77A61B708400E156F260C76239FACEE37DC0C6CFF00C604682D5E07C055E9CD8C0B3FF92A6D15719901E956A66F7B91684A667BFAD54CE8442415247A4EF009DBB08DC7B447C4E34C6FCE8FF90E9F09D69E34806497493C15EF84576F8E5AE2EF44EE054B33F7EA5DB89FDFB53FE473F1C597D86ACE93C561B27AC541F881FE9F139BCBF1BBE6D9EB9DE28AA9AA52D3C959D404898DF7D86C019DE389F9CE3A9764633B932DCD821C019D1A8E73A30B8B651C95B4A599CB5822AEA190A826B734E4E6FA42AEAB3279F6936F4EA0356D29E511009330088E3792713995B64141014694772681D80D2F4B67C219E5610CB5D81635399BB80DF502DD612AD3B1FBA2E8536B712B292264A401DC83C6DF97BE1E7656D196A9730AD40B9E56B1706AD4734E50E6A7520962087A9A55883AB51DB3CF48782C19F6F5643462D5757EDE864242FC8429B77CAD83894BA9741852762981AB8DB6C1ABC5489A594B4B3B9273CFCADAE5521A182660B7D6A2455CB105831E951C0B7A42A320756EF391B3CD26734B4C5D6A9150B556FDFAA14F7DE69C907CB295B6A1A9665244929924156D80972F04B3FD26E4541A1ADAFD3AC38489424C9557E2DD7B1156F65F8E40459164DF1B3D3E6EB283325A3A6748C662A8709B8533B5059B7D15429CD49718A8453AD4E86F63259471F3C374F9124CE4EEB338E370D5CC83A6BE68E1B10BDC5A0BD1C3BBB723938614259C671A8CF007E2BEDBD7AAAC9763B2D057B2C5A2928537BADA37DB4D3B7520871C4B6A5360A9B6F504054490992913026183C38FC91DD1409360C0B0372055BCFCE18E6293F9C7258EF8B1E21C5781AE42D58D4FD86E1475995681B60296B553B682FAAA7EF0A743681A7CCFDD35E5105476057AB7E20CC17696154710A2CE09A26B4D7E27ABE6C0351F849E731C3C867A03BC1E82CC72AF4E1943719C35FDD9C056801B412A956F0088831CCEFDB6F9637C2C828B8207CB7EA479737194374CB8EB97D7DE5AC467AAD4E5CD2DA594BC5E594A01330648F51236F8EC768F8E1F64FC290406AE7C850F8980A60A1E07EADD213F9D2E4D59D934AE1517D63D2960799A4900428929223E4769C20B5B92C7322A2A2ECC1EBC78E46F1EA2806E90F4F1CF4F3F0868286AD69A8716E2FD6E4291BEC0033EA3B6E044F3BFB760A62D87016C9E99F0BF483105D468D7F516E1A44D0E8AD7D3DCEDC295F7352DB27D94099DF707B08236E7799C0E4EFA881566E5C2AD606F483F0A92A52A8E199B5D7CBC6D09CEB864CB35721C7DA710975095901C504EA573B403331D84CF6C2E65FC001D18D1C8D4B53C5F9BC16964AE872F32D4E3F5B4553F59AC947462A0B6A4EA68AB5011CF78DFF43F2C46B69CB2412C5AA1E8F47F65F8354D64FB3B121212E7FAA9CFA0AB5B273E3156BD564798E54A5B49D52F1483C0F5295DA63F59F89C561B465B4C9A0802A4BE7C87EBF468984B9EC805EAC295A52F534CF3FBC55CF887CC35164CB35AD95AD2B5BCE25252099040E4C8EFCC03F5388E2A590B2E953823AB716FD39D614EFC1A8AF1233E15735E55BB35173E17EB6A2E595ADEF2D4B424682A2410A3C7024C8EC4CCCE1CF0D2DC83A7F76ACDE3A52BCE3C33B7AEFABFB313FEDF6EA57528A90E3BA837E9F48DD607A646A903501BE0EEECD6DF7F28D0CD48A171D398FBC19BADB4DB5A9D5BB3B6E11AB610792A13DCF1F5C6776459BA7ADA304E49B13EFAFBA708435ECA1D4AD0DCEF30A508DB993B93DFE7BFC364D6192469F4304820A1C569F4ADF47FA43099B2BDBB62561C59015A8908F528FAA3604A477E7B71CCE019F74F5CA95E3D2D02AEE394276C9561E87DB9215B024693EAD8920157F3F8E34957EA9F53081F98FF00C91D21E2B30521A42DC04A48042B9F8CFC0707F3C3EE10975022E4505D8BF9D2317707DFBAC3A163B90A7A84C2C947BA448DF69999F8F1FAE25783F94721A6A3DD690D8AB9E67D61EBCB57E0DD4A54DAC9909DF8DC6C637FCF61F0DF127C02D9920B10E33AB937A640B8ADE1AF1AECA60F67347A819F0A52B6D61F4B1DDA9D750DB8FA960369D6A2003294C4E895892244EFDC627BB2975439170F56D1DEF707D7944076B3B58862DAE42F43C4747702B124FA779B53497BB4A2DCEA8B4FBA9529BD83852B491B2029409048313B004CED06692819D29529C3AACCF5AB3E4F9F22583DE201B45DA600F7A35EA5B91B758B12A3AA586299CA9D92FD336A03F8B746FAC6D1F1027DA702CCD9AB09240A3B6B5CB97AF2CE3F1CFF006950198AA68AA7F00D7A86E470503DBDFEB81666CD539BB6A0E9A39ADF48F589C8D3CBA748154AA2F90F3685A90490094C1F490098E636DBE8783387144B4C9D9DB8BBD5F5342F95780B11C4C6196B58A02D472D953EE3D21636F586CA9C710E8436C3A14346E4AD0A42624EF04C9F87BF186B9252C6A2809BD407269A00E6F5CAC20AC24A51500C4B901F990CF561E34F08A68FB73251D1CC9290404299CC80F207AE9ECFB0311C0DFE938AB3B71B9F96C4B6E9242AF5AB1FA7AD348B1FB3F2662715862AC96096720D7A5AD18E1BD24879C7394A4EF1CED3C0EFFEE31C93B5BFD41347736FBE8FF78E97D8928270CEC47C3C6BC74BF0FAC206F6E24252ADE080A1B762911230EF851FF4D5A028BFFDB1A4D504E25EC028E79EF5410731C6FAD6120EBC83B09DC7B0EC4FC70DABF98F3E7CABCA0F9AB0BDD3FEDF7F6BE500CEE67E24FE87FBE358F51503DE663E567EF90023B6E676E271905415E857C30A4BCFA7D610373CCFAC7ED07DC7EBFDB06CBBA797D23C8FDA0FB8FD7FB61CA4210A4FC57275BFBCA352906EF1F0B5A84188FCFF0098C11DCA343E368F37071F7D22DB2AEE6F53CB8D056B99848248927B733F0F7FAE396B061A571734EBEE99475C2014A40550B58E8C3F7837B466CB821480B53A12A84FAA477EE09EDED1B77C6F352A2EC0E595ED9F3FB46CE351E30EDDB330290C254552B56E04EE4FC379F6FF0036C06B429DF7490055BAFBD35A46C823799C568D77E1021DCCEA4CCAA23B2880791EE41FEDF1DF192D556BE8C74A904F066E079428BF97A807CCFD23EA33351BF095CA4EC144F13C1F983B99FACE0B97305892056EF4CE9A8AE5F4802612D9D4E409CF96BC3EB01DEBC32D542034F20365B0777100EA9548DCEE4003BCEF85E54D962701BE9760C0D6C4BFDEA3E8C34E4A8CA5B0CBDFEF6E22E1317CBBA5C69C6FCD4924021214924C2B902648FD446DF15718A0A520820826E32A1AD3EDCA049126689649429995975AE94D620AF8DBAA5B9D16AD12A835F44A9DC424D4B1BCF1A77E660CFB1C59FD82AE230E9A5544F916CADEDB4A77F10C84E1B13BD4265AA8CC5C249A3EAFAF8C523E3A1A577C900EE2A8054001C3694739BB472BCD485A9408FEA246A0B9F660EED1429AC7529797E82401BEE13236FA09DFB7F274913F10F54A803990736E0F96832CA1BE72422C18EA1EEF52F6736D7230EDD9B25D8D6B43AF2840890AE0F1EF3C989E7DF6C1FF009F9D871BA9DE00873C7C0DAA383F927249512951243967A86146B83A8F485B0C8960A85A14D2928849EE3DBD89DF699F6E64CE059DB7E7A1D89B3E96E44E776B3351E0C12125992972CC2AF5B4743D3AB32482569066413B49E7DC71B441F9E1BC76A6789C80A52921C26E466C4D2EF99233168D2761D425A8049343C88A8CE99338A07E10FA74C3A34731545150D9AE54544AB8D534C38FD48D4DA75AE150BD0A123710248236D8409448DAE7113A56EA9C7C2D57033B9232715D7286B461B765AC6E9B1BD6EF4B3736BD84696FC09F4BAF1D0A196AC36CB9A6F55556D3754FDD68566868A803950E3CAFBD553A29D97D28049510A7401E83052A02E4D8B3513B04015241524DAE5C11AF9D81E110BC719D2F1614996B090AA16D33A814E4699C6C4FA2F78A9AEE9DDA9DAD759A8AA4D3B6879F6482870A5B4F0440241265424190413CE19769E14A66B8428824B1CB57A7BA3F1891E1B17DFC94A4A83A28CFEFD8822CDAFBD5554BA76C92959D2A093213B8E62401307DA7BCE1BD1254E46EA80BDF370DF6E39BC7B31690CE452E456FC9CE4D6841FDC5AB379F5F509F314C0D68912498984F727B6C27EB85C2260A8492402DE14BC0731692EC6E69C75CBAC47FCC897AB2B1FB855EA4A54545B6DC94189241D2B83F0DB9FD300CCDF24D286B403974ABD6EEF58F5095005C1BF30DAD1FAF2869AE2EAD80A79B5EE0AC8093BC498D8713C7BFB4CE029A1640012A704D85A94E6FEB4A418821CBD299D3310F67875CEC58BDFDCAB164A5E70368428C104B9125248D882002793F1E3CC36FA54EBF808D68E0720E0E64DAF7872C190EBA8B1CF8449EEB258187ED42B1A7432A5B65C485A8209900CC288DA7BF1CFC65D00494DEAC4FAB7319D2379814140804D4D4E7A39F6358A99EB865F758A3AE75C7041D5054A1A540C9D8926771F946D88DED00EA50268028B80F71A1CEA017EB0E3849A5006F2B74B82C497237ACEDEB6CA2A6BA8AA41A97D1B1292E2001BEE99037E3B03DA7E3B62B4DA32545735A5AB362C082CF72588B83D738984AC50EED1F17F487CD89A80783EB5F08A9AF1654E1768D101B4A5E2E152814248D444C9804129331F1E77C46D5255BDF22C3BBB6BA9370437ED040C43D96E0B3365EC70348757C2D3CD3B95281B65A996DB6C694C85184EE39246D33B083C61D30F2EEE0800538D998B1CB2EB1B4B9A4B8516A64F5AE83DFD6C32DD4CBA4A24ACB6B51537B808528A494F06012009EFC7E67048961AA092FC458DBE9C5F88854A81BAADC7DF580F5D5412C1D493201DA2089E6677237C7A5000B11C58FB3CBC23D703303AC20EE7523EECE3886CAC36DA89D09D411007E2804200F8C46E788C03398150715A8C890FEDF5D21C10B4F75F30B6672E034D3DB43BCE77655D6F48A76DD05B41521412A0A83AF7060983B1DA3E7DF0DD3C8703317AD3DF178456A4920822DAF130A7B384D17DD9B569D05224EC00237DC9004F3CF38F2524EF3317253971845C151ADCA5B8B5EDA7843FD65532FD0A04A54740D9042A36E446FF2E23798C3F61524294E1ACCE3DBD0F506317975FA40945C9365AC485B0F3B48480B29696B040DE410089FCB9118936126200AA80A015E7C583F0D2B0DAA05D5ADC03477D29EF27878B2D5DEDD74432E507EE02812942E1B5050510A0A0608329244EF1F962418450DF4907FAAE3A707AB30A5FC61AF18584C06869E000BFD78F885C3998EB2D4DBCEBDA8A1B6540100906482A881C401C7C3BE273B317BA439601AE7741A0A39617D6EFA44076AB10426EC40AB7439FD5C08919E12B34DB735E7F657763594F6FB6345C5D6374CFBE86C84690101B6D656AD4426120948249000544B538F9587926609A9DE4A40DD77B5F26BB12D58854EC3CC9AB237146B90245AE322DF678B806F37F4D14E21A72FB7621A6529494DA2E2A034A7894D391DB8DBE9D8299DA69601DE981EA1A97D7D2AF9B6754BFCAF106D2661ABFCA453C6EF4A786505957D45E99534AAAAEB7D7D4927479369A968403B4A9696C0EDB93DB7F88533B4C9B2563425DE9D78DBC748F7FCAF101FFE9D60DDF7357BD3F773CA0AFF00F1BFA554261C7333BBA4CEB4028447611F794EE220EDB4C60856DB91330654B9E84ADC86528039D73AB665852E60997B2270415192B7762E92CD770C682BCAD5A47657894E93B14D52196B312D5E52F779C6D281A4150214BAB006F222761B91C61B246D394ADFDD9A92EC2E28F9E9C49E0D4CC9C2ECE4A560141157A8617724E449D189BB52B1523F6D7F562C39AFC3E643ACB45157ADBAB7B3132D552EAA99D660535981725154E15A104E95E80B832089902B2ED962CA913D21419495541FF69D0D35D3890D13ED8986969C4481F0B92286F716F7C99A322F72A84385092E20F980EAF52647CF7DBEA2771B4E399F6AB1C4903FB9BD8F3FA08BEB652E54BC2949980129A8564695E363C322058379985D4A25214212748920EC3B899F6DC0EDEF1877C2857E5DAAC52DA8B3750FD1E1A312BFE3920852778B57222FD7871844BAF12AD9438F7F89E04FE586F54B5A945924D72ADA9C3D21C254C4196965034CAADE11F038B3C0513F09FA6DF51DF1AF7733FB4C172949200073ADE95E9C2C63F15AE374ABEB31FCB1AB104862E2E20A71A8F111CF42E2742A3DF498FCE30A201AD0E591E3089B9E67D63E004F0098E601318325D0A5E94CF94791F30409DB8E2B4B004827E9E7AC2D292540B350E71FA09E04E3DFCCF0578C2BB8751E7F68B40FF8CA89C255E44EE477EDB7B8C739C8C262025437577FEC528FA16E548E9B9DB4B0C540998814CC81F514F577A3C746B34D1BCB0033053EAFF249FE9EDDF0B1C2E27FB167FF00F5ABFF00D7DFA23FE6387CA6CB3D453CF473D347204FFC5EE35594A1A734A7CD4FA06C7727E53B6C7E9DB19F939E4B2A5A98B82E929BF1147CF317E2DE7F98C82DBAB4135B2851BA9AD8FDE0D4E6655739A1265DE609EFDE793F977C783669049DDD6A097AE80B57563CA3CFF3004D5619E8EA04B0B7BA4195BAE2E3E563505942D48224129293A4F03B41F9718F46CD3A1B5892472B9F168CFCFA7FBD2EDC34B5FA654F08E8E3CF54D480A41406D226040D8933133C1E47CB018D98B38B4E54D4DD9DFF00734E158C5ED01DD1763436235232CB2FD20338E26A5F56868BCB4B6E0212AD25234EEB2646C20089EF1030F933669094951235075AD0699DF85AB19276A27BB58052FBBA83D4579F28893E32E8EABFF062B948A75B889B6920540586D3F7DA525446B20803D506761DB165762640953E42C9DD09537CA4B922CC3C1EE0977A4507F8918B54C4E20073BCE0000D3D783BE6738A56223638BDD38F9894A52000C188A1228E3205EFAC7374C4ADD44020B97CAE73245FA88134954ED3B9A9B0601F6F8C93B6F1B7BEE3E582E5ED25D4D1E8E3747807B52F93C05310A22C4F307A0A3357AF385ADBB37DC69040650F2642BD7F8B61B246E3E7C6DB1F9BBE0C7E790A27FA4B076AB70A66F77CAB5A0E3790C7E52F57068C34E2E73AD38C2C58EA6BED35A5FA06DB4EC0BA9499060409078546FF0099C098BD98E5AD5A30734736A9A1D33CA0B913B7482A62E684580E7991C40195CC29687A894B5C9420B40AE521095030544C0041E413CC822398C47E6ECA986612C583D4023377B7A67E30E47149128B816CD8B722C479D06B94EEF04991F3CF5F7AF3963A7193B295DAED515F534ACDE116F71E6A86CC185B6E555C02D0A4B4DA5496D602CAA21DD88318906CAC24C94B412EDE36F5A675672CE2CC2712951507B955000092F4E2F4A9207511AAEF1DD93BFF00DD632A7854A4C8994AA1F5B9455B61CD148C5DAA029FB8079F5155F1D6EA929FDED53EB5B65C28FF00972D44A609B8B614D00212EC0802F42DD4D0F405CE911FDA4B4AC2A82957666A6ACC798A45A2F838F11F74CC569B365ACC86D76BBD9A1A6FBCD92D35E9AD140AD040FBC69A8A82DADD49481A9492AF2CED00C3FED5290893C6A437017CDEFA006F52218F0733717300A825C71727C6CF7A5399B066F53F50E3E5292DBEA524ACC6A1A41588823FE91C89824EFD99C4C09CA99B801FAD6E5BD8838CD26EFE3FA086EF34BD50A714D241F2D3013EC3B0DB83BFC3B718F4E29201040720D6843E5520FB78D03920B675D2F0C7676A9F3CA53C10083F481C6C67BFCB0D0B9E0A956E1F2B8F26F22348744B6EA5B41FAD32AE5943117C0E214B481034A4F69DD3DCFEA3B6C37C6BDF0E0DAB272CBC38C6D043942F55D63CCD475AC4808A9A7F34C6C101D49DCEE4024FD7E984672FBC29B3BB3D01E0ED96BE6F056154CABB5EFC19AF16A79A554D9A32559AE2E439AE8121691064E84933F98100F69E70B2127BB2457992FD38E797A41E661D40F0FAC56CF887CB4156F74367537C06846DC98889F87BF11DB0D38E4062E03B1AD321405BD802B1E8985C7C42E34D62A33A999718A466ADF5D310B48755F8483B13F5276E3E24F1CC2F1C823BC603266D5EE29D328904A5FC29A91F08AB9D2D5CA8D78A36F1939CE9A887EC5AAA585543416C2A1524A9E75007CE51DA227E388EA900CC34736CBCF93DCFEB07C95B067B06AD73A56E299D39C3C7E06A96E973B2D2BAE34B4D3B2A4A112081BC10008888493B76C18940DD0E90DC9AEF4E39BC18899FEE00B796B5E3CA2D3FC84D336EA5E046C904F1EC3BEDF3881F2E31EEE274F33F78584D19EE9EADEFDDA1B9CCCEB4907CBE64F1C7007B73FA0C7BDD8FED3E71E7795770D907F1ABD7ADA1A3CC577163CBD79AB70E92EB0B293C0320F1BFCE7B7F2C32E2E49DE25A86839E7950D05F303892AA0AB76A4DE9906BDB9DA209D8555974B9D45C349D0BAB5E8501B415123E1CF7EFC61A932CEFBB1A9D35BD7D3EB1B39218D6AFEBEFC6242505A6AAAD964141DB493237F499F8C1EC3E23B61DF0D228181A0A38E3C8BBB65E771BCB56EAAB4B57D7D61DBCB948FD1B494C198100773F0FD761FA1C38A25351AA0B1C887B009BE50ACC9A94A4B29C97E2FA8A9A790D348766CF6C66B5A22B620F0144003893F227D81E77C1D2E492FF00ED66B9AF1CD8747E021BA64D7A92346A3F2767073D4B3409732BB74AA71FB556965C492B4A02804C848302446F0639E4F1338956CC5144A960B385072471B656D4E75311ADA58B652D396E8AD1ADD065AD7C0C3699973A5E1822D77250536A5A90DBC9796D82804070A821690A06527706381B98C4B254E0945484B0C8B35DB467D78572884E267EFAC821EBD0D49B9BE5C88F069B3F78D0B97875A2A7A2C8F736A9EB2B51FBFAC05645328A7528ADD7545A4EA828495EC4A847A88C0988C604A14378EED1CBDE99EB5A0CAB68570A02E6A524020B64FD753D296B088A579FB5F7AE8D38FF00DDF3EB8D80A5005A7E96393EC93FF79E76188B6371A0288DEB87704802F4AB3B90D4CEB7896E0B0A0900CB0C48FE9059B4241AE46B4E1786EAE9F6AC7889BA214CABA8F5280B129F2DFA6246AE04683BFCE7713B6D8024635256E16FC2DCFC33AF230E3370B4AA12C7FDA323C016209EA1DF284154FDA07D7CB9294B5F51B303AE28030C2EAD4D9EC00FBB00CCFBE9133F8A4ED8CC7634903756A676B91D4B663875CE133839464B2C21EA48602F616069C6082E5E3A3C442A95C6E8F35671B8B841D3474AD5D1C76A8C7FA4984A8A7CD3E994C133127B97B1269513F12892CC09233BD4D58D795F230C93705202DBE10C68DA83C398BC58DFDA17D59CFD9BBA37E155AB9D8EB726E4F7BA7CE54354D5B53529AABC6607DE685C14F3150F2964BA94536A05006E36DF0D3DA704A265EC49ADC541B30FDA97872D9D87968C4CB55017720934E1E0DC03D22A3CA838758EFEDF1F7F8EDFA4E281DA883F9976AEF16623563E57F0E76248529C55B3001268416CF20C3284B661DC248FE200C0F91DBF4C48B072C8C23D030156B50534B71F28DA7B6EB9195F3BD7D7AC2453C8F98FE78D642400BCFE2352DCBA728CC2381727E3BF56F410674D33FF00C4FE523FDBE98D67015A0B8CB843BC92753739F0814BFC2AFF00DA7F91C00C341E104A4B11CC08EE3FFA557CBFA8C7B0BC00A65B40B9A95041DC13FCA39C64640470A0B8BD064499E39FA6323D722C488F4CFE31F238C8C73A9F13163E8F077D7C4A611D56B169D4A23558DE2773CC9BA0D8F6C5792B1DB182584B50D7F8E09FFF00E434E96CA2ED1B1F6B29892A76FEC57D15EB03693C1FF5F52B255D55B02931B8FD8CEB7FAFED25CFCA3EB8F6663765100206E9AB954D0ACB4DC1CBAF519FE4DB5064B3C9247A9835FF00F737EB93AE34F7FE27D8B520854B56E73CD0447E0FF9E227DA411813118CD9E24CC2E924024328024F50D5CDC65D61691B2368A26A14B0A2907E270580D6BA7B30AFB0F850EACDB1E2F5767EB7542819D4BB7AE678E45501BCF107B9E711956D19249282C2EC560D2BAA4381A9CD80CA242766AA953AB87D0F0F23991D1C6B0F879EA4592F4D5C4DEF2E55D0286B7A9AB6DF50B61E5A84AD6A08AD4AA56B2547D5DC818F0ED147B50073E0348F3FCB55AABCBEDE9FB26FA97D05EB7E60BA22B72C66DCAF96E90D2B54EAA5B3DB6A10952DB75E52DE579F5CF1D6B4389498310DA447BAD85C7E14CE1DE216A531629980016671B849A9D4306611ACFC04D4C974A681EA43BE5A8B65C4B9358401F0A9D70793E5BDD463E6F97A9C7114E1942CFE1504ABCC54956AE277E70662F684B42525C12E1829D9CF26634C8F2BC37E1B053415258B10C4015BB8E3A57CE18CEB07846EA62F2FBB4598336DCEED6875B0A7E950F23C829648750AD250544A1480A48D5C813236330ECB6D89695CB3F0A59556760CA737259C12C4FD8C57BDB0D87327F780025DC7C42A6A006CAF5E06BA44261E102DC9AAD0F57DD424112029BDFB1DBCBDB8E3FBCE2D44768F08404EF205892087CEE68DCBA454733B22B24BCB2E49774B037D3D4DADA408BBF83A085D2FECBBD34D25C6C2B43AD92F76D9D216015CF3091F2DF6325F68703479A9201AD4372D737FADC9126764CA586E060324D43D6BC8E869E8068FC24D732B7535573A078052742DD6960B6903709D2E8001E4C8E7B88DDE703DAAC34A4EEA142A5880401704DEA059CD5CD6F0DD3FB26B0927BBE01D3A3976BF3AD8F8A9A8FC1BDF2E65B66DCBB75679AB4A12DA90E369956C09585AA34CF106783C09956076ACAC6900B170C09A91C9BC2F7EA2229B4765AB060A9496097A31038366CFE2757712A7A2DF676E4971170BAF592B2F362A1A04CB62C570A5692EAA144129A9A370E9052240509076F7C4AB0DB3A5E203EE814D3337C8FEDE220F8DDA664EFA5F759C0BBD6AC4039DDF5B087C3A79D69E9A782FCC9735F460DCFF00E20A9A45D05466371E64563F4C001E5A9D4B4521274260A4257B403270A4CC0A30C6890C0D583B917072C9AA4F0869918D330951CDEB5BBD6A486377D6262E56F19F5DE30B20D47493AA17E551ADF7DDAACBD7BA77C3979A37CACA0381D70FA1D0E3709204684A644CCBEEC79A44C4A6BF30E2455F91714E8210C5CD2429C8218DB3D332D50D6A08B52F00DD31BD749AEF4F5F6DAF66E2CDC16C7ED4CCF999E75EAFB8F91A85396CA5E6DA4796971CD70983A90236C4E26E1CE2654BA3EE825B536BD6AF7AE67286144F5214AA902AC5EADD59DF20C3EF7F596F34335CCA1B0E525596616E3F4E494A4905263D4AE4AA07B026080061A67609697A1228180EAFD33B7DDC30F3CA833EF3D78B5D8FBD38C0ABEBB4AF23568449DE44C93327BFBF702278EF86A9B2141F2670285CDDB8439C86500E375CB9068CF91EB11AAFACB955745B490548951093C73EDDF611CFF5C0664872426E5FE5787201801A424EA32C3D58F2C29A94C01EA1D87F83699EF8F3B8BD3FFB7EBEF847B0488C89514F567437A43852490361E57EF7933FF4F6DA4FB0C7A2400A00D0D684373CCB5BED785A5280351415A5EB4CFDFD679649AF66EBD354365214F5BD0E53049FC4149427D6009F61F960F44BF80A481A9616E2EFC32D3A054CC6DEA532736A72EB10BBACF4EE2D8AD2B4951413A4ABF846A236FF003E1F268C6C9672EF7039D40E1AB3DF48F42ED4AF93F81A4554F566905417D953CA82970A90426351D448880769FAC4403885E39046FD2E6C1DBAFD1B2B448644C742012DBA198F2B96BB3E5A64F1403E3B7227DEAEB60B834D24D334F86EA55A4E9582F9280A22202655B7224CE23CA97F11A1A64DC5DF88B8B73AC1D2E602D5A8AD4B58E872ABBBBE5944C2F07B614D8F26DA69DB4250EA994BCE2929DD4A210104CFB02A13C6FC1D8A4C12DD160012F91D5A997BE85A6610683A0AF8DBC68D1352F0A4B744FADD24ACCA52A24CC9DA391FCB9FA0C79DD0BB87D5BF585BBCE1E7FA43337670A81D4A9F99F6EDEE3E03E78F7BBE3E5FAC6779C3CFF488ADD75BC5DA9EDD4F6AB7A16A4D62615A384A4EDA4EC76DFDC7E586FC461DD24917CDABC08B5478665B37196ADE402401CB460DF7EB080C89635D3D2D2A5D68254002B4FF00EB5024A8C8F9FB7F4C34270EF3374BD0D559D35A87B75AB33C6F126F2ED3532990D1090A053EA20031DFFCE676E0E1EF0D87A268583D3DE7D5C59A139AADD4DD9DDCD3EBEF5A3C3AD476AA30C254037AA39DE636DF981EFB8EDF4C3A4BC3BB1D6A680907CAB419520254E228960006725FCF4FA9783708FBBB0485192236FD7FC3FA1DB074BC3822C589A1B0235D72BB93E356F5E25946C69E361E3E1E4F09AAACC6CA14E5038B521C074950307D4276F96A113CC4EDB0C38486432480D40740C5F85FA5F8C30ED042A6AB7C58D48D4D2F5C99DEB4867B3775472EF48B4661BDD1D1E6565E5A942DF72A84B2C80C94952480D2D6B4AFCC0150531A473BC38AA714CB2EF9B31BF3AFF4DEB563C6B1C38454C98CD5C8E6CFF7D1FC223CE72FB48325BB54E2ADBE18BA2F7265B469454DC915B595024A53AFCBF35B428AA483B8D892371BC77178E29DF02A1CB97A8614AF4B0C8D61FB676017DF20D8654A3816E19B6BC61A3A9FB4469D4E29545E17FC3DB2824ECFE5FAB70EFED15E3BC7B7E9061F8EDA25C834BF276A707B55F4E93EC161030243E5C4B9E1AE669E5096ACFB41EE4CAB5537423A02C2CEE34651AA94EF3009BA198EDB7C237C37CAC7BADC2B362CFD2B4676F426D074DC1A521C258D6EE5C06D72FBEB001EFB46F3D527AA97A61D05A1592211FF0005D42969F656A173020FB4488F84E0D9B8CDE962A6BA3FD43872D6E05A229B4A56225CD5096E007347E45B9921CE9E302D1F6847596E4AA036FCB3D13A453B5B4F4EB55264D71B7596EADF453AAA50575EB9551870D42644053635023892F67A61980B9734F5CFC7D62253538C2BF9560B839D7439E600033239187DFED49EB9E76CF7D4FCB1D32CC56CB2D058720643CB35F966A6CB6D769A8EBFF6E5197EE4EB21750E250A2F53B7ACA7546D0077CED1A4196A7FED56835CF2F661D364A714AC5492B0A67AEF6A08BE5955ABC738ACBA352154E090098983327B0F698EDDE36DBB513B5253E283FF0073568ED9BB3D75CCC5A320070D5666F021FC0FED08ECCCEE95000C0900247B76E7F976EFEF89160A50386CE890EFE1A5FEDC2159C58534AF234A7184629F5075202881A41D877D444F13DBF5C205010A50E3E51E618B8FFB80F03C879D60F587006C11CC6E47264FD23FDB034EBF51E90ED26E399F48EDE6C8833111C0E3001B9FDA0A4DC731EB1F7CF3A744AB4FB6D18C85E0A5E3A56B29DA567F5C6464056DD524F264993C41DBF9FD39C64640F65DDC19DF7EC3DB823DFF00CF9E4646B6C52DA96B09718A94981250A52847D48EDB9038E260CE39230D8DC4AE5EF198ABB785393F9C77AFE4B0C40FE0A6CECC3EC7D3A4198B2581E6CE95BA8511B0AA4AB49F7D2015EFEF20608FCDE23FF98611386C2867932FFF0048F7FBC162B2C5324A821C6FD53A54DA57AB7E0A4E91B8F6F6C7A9C54F5163308079FD3DE503CD918652548121093A848063BA32DB6A469092E98E565D4931CEC1047C3BC7338502CD3E339351B3CF4D32615807F212FF00B8FF00E91AF3E9FAC725E5DB82125B451BCA6FF8415A96981B0224091110206DCFC737CDFBCCE94D7220FAE5E0D9F9097FDC7FF4A613F5795AFCB7096582DB640E404104927B02382003327E58F518A5C95850A817AD7810F52ED67A37528E23052CA37033137B116AD3C40E4F4806EE53BAA695EF39B0E1F2C94F9EF28A0281EC08500A13B111B4C9938226E3A662435A82FA0A33DFF5E90D68D9B2E52944104D9C8CAFCB43118BACB90F345CAC0B6E92A434A28702421F58409D404C0909122763B48EC061D3676D29D854842497538714D43DEFE3CDE1936B6C5958A42A615005350C0D697E4C01F18856AE8A664A65A1EAFBBD092A1EA47DEDF246F276F2B9DF8ED1C7B3D4ADA98B2AFE6ADC8D4D01B55F27FD6AC60B3763494DAB52DF08A36628F9D057AC1C31D367D4EA3CDBDDB99453A74A4A98A8789023D45669FD4660920AA4CE1D6463B144566AAAD573501EF5347342FC2861B276C992C49AE4774598DDB47FD615796FA594571B8AD976E68BB2CC290D53D000849D8685F9A10A954C880ADB6DB80F9B3F198BEF120294A0EEEE68FA17635D1BEB11EDA722461A5A9C0A254E0E600B93602B9D4C3979E0651E8CD9696E35D4ED3556B64AD2CBF4AC84215BA526415289F4EC62011CCF17876497885F77BFBDFD24D753C353E2EEF9473D76C76C252B5CA44A4B242802ED6AE629424D89C9A2B4BAC7E222FF0099DAA872C75AE51D0A5C536E52D2BEE25B786E2550120189DA0F72317FECA9E997290574A67C28CF95FCB4A453B8B909C515CE2B295005603D090EE006CF95C0885F7ABCD655297535158F87173A82DF5B848EE095107DC09FD36C118EC5E1561BBC4A7335BE6CC0B686FCDAE02C0E1FBC555D2450DF56BD441E7487AAD72C859C292E56FAF552AE9DF6C832561435051DCF1249DC7793B6F813058CC34898922602C5F997DE15BB333D850EB056D0C2096853289A657D479FADA2EC3A63F681F516E75997B2ED066216DA24290AA952AA1C5A7CB496C2C80B48437006F044EC49D81C4DF0BB7C11B929016183970E2BF5A97CE217899A533082926BC5EB957339651A6FF049E23ED1D45B1A6869B3050D755B14E86EA5D3551E6B8DA52A767903484294027BA638E5ED0BFCCA42949DC0A6B35C723D3DD4DC34F20A014D581AF0B035CB58B107731B2F2582D3D4CE533BE90FA5F27D5304404C6C7E3C7CF00E2708124EE8705CB1D3DBBB723787F958C0949A0248771FDD402F91CBC6D74D20B06E2A796841104A412083BF00C4F1F09C0625002C2D661E0EF0BC8DA0A9AADD54B60ECFA8A7BEBCA0FA910C3CB539E4A1124C419D8189E0493D87F2DCE11528249F8453969CA90E2A98025F813CBC78FBB3F9ABB7B6E6A282124884A801201241DBBCF1FA7BE12284CF761BACE69A81D72A78C0E9C590A6DDBB68EC696E62BD21C0E95A15E6DD6CE992CAA9D4A427FEA7140CAB4F01463E7B7381E6CCEE090ACC54862330017D6BF687096BDF0E454163F7FBD3CA1A8EB2E56AC2C5604D32C856ADC227E5BC7B9F6DFE980552FF0032F6003901BD681EB6B33397CD2993CA0D0541CDAEF9F865E262A53AAB969FA5A8AA5394C930E3E37253BEB50E236F7C45B158252A64C417A1625A8CF9102A75BB87D40875958E5042592D40EC6BC6AF57CDE29D7C69643AFBAE48ABACA36742A96A10ECA7D4406D454609036502013B446F33186E3B1D054EA580FC0BF1BE4CF91D7842E3692811FC3EB4F6FF006F159F86572A51972C2B2D6A72A281AF31124794A6C369D95A7D5255DE08206C41246D37012E5228B73BD98366D0D1FAE54A9AB86176899D30A0A7768E0F27A0634F06D6259E65A0A87D9F292168F487490379090AD31F12209DBD86051871990DC00BF9379C3989A49B9AB3549F79431B71A6AD5BAF36A65412DCC2C151989DC82223B73C7C4C63D3874E412389F3A42A9637510D53F421CEBEF58E7D576DC3F711012E6A090201547BEF07B7D64768C033E5EFFC1A9A90CE47B6A9340FA4394B9A132D2D90CEE6CCE751635E5941465E697A92D91F84225C8DC95241DC4C6D311F0DF037E452EE541CB3B0F4A3FBA35191998D28048482C1D9EBD74BB8F62162D5C0DBAA52C79A61409D530527DA2783DF73CF187393874A59EA03E83A6AD5D2035ED054D1B9B800BB921FECDE3C61667370A6A76E1E2E4C482A2991DB824EFEFEC0982704A509493BA1927FA7ABDFF4AE6E2902CC9A4F50DE1E8EF503EB07F4D9D9B79AD2A0D2B61B79C419313DBF97F527042660190C981AFDBD60154D01C87A9A5006E8EDF6E309AB95C289A5545EAACA134ED27CC706A109084EC0EC644241EE77FCD3562108513A3533172E68D9F83421DF778AEE4A0B3D14D42E002FA303A456D75D3AE765BD5D2A2D09CAB68BFD153B8EA10E5C1D52FCB3B050692A61694EBD235E923F0A4198C3762F6BF76929012E904D4D3F42E72873C3EC8133E3048245081AB170C1FAC462FF008A2C454A75AE9964FE00434F51B0F36771F892BA3D2AF7008D880449188663F6D2C857F0C0737045B5607C2B627510F783D9E1331093BCA0E295C98921DBE8FD2A3DBCFD4CD2021AE95F4E930395E5DB6B867EB4401FCE3E188E4FC777C1AD462482FF0057EBE9128952532806776CE97E5EF898015B9E54F38970648C88DC01E84E57B594C1DA3FFA71C7122703A27EE1777E6F7CB2F2FD5D5500A041CE0BAA7A8551A9BA76F2EE58A44A8801BA5B351B0CA36FC49690D048513BA9512A26773B033F3A7BA16150E410FA3F0F6ED561A761A4EE1514A546A58B39398B1E957A758727A3155539DBA8F6FCB956C5A52C7DCAE358DA536DA66D4B5D2D0BD5096764890E16C20AB94495804C6279D959E17BA1EEC0835193710D702B96862258C125130B4949B8B0BF1A1E39DD8C48DFB507355CD5D75A9B2A9DA7798B0651CA544C1428B4A69AFD9BADCA4D084C146E99F54F1B1C39F6840126628172012464EC7EC0F07E319869F284C4012521CDE8EE73E9F4880563AAFBE522550104C4A412A1EFDC0F6FF7ED8A1B6ACE27143E13F35C65CDCF86A01719449913422C0F95DFD2A6909ACD48D10A99D92638E76FEFFA6C7124C14D27084EEB9602973405F2A0702DC63D54F2AB8A6B9EB952FE508A6D25C5257A8A6211004EC379FD7D8FF61C12B2A2D517B587BFD4C2D8756E01A3835CB37FD387183B68FA427B44FE667FAED81A6851CB376E029E30E72A6EEDD897E4F978F0E7CA3AE01525490490CC1EADD20D4ADC8A71BE9D23F37EBF847D7DBFBE104CD2A7F86DC79F08281700EA1E39ADA04912793DBE78592379B270FE4F1901554A0107599F90E3DBF5C6E5043900903DBC6AA56EE4F1E92DE98DC98F718454541D851AF982F5A68DEE91AF79C3CFF48D763CABB9AE2D3546E2110911E428EF1BEE126773EFB1E3DCF1E611644B6614279D63E813FC3FF6F0D3A8AFB10A369AB953250F3F481414084876996A1200DC4236241E4FE7828CCA50679DBD6F6816665D7E90A6A276BAA5234D05205A4028269B61B0E414EFB8E3E831AAA61009005B8DECFEFC60557CC60716AF6A2484D1B7C4452081EFC209E3FC9C0DF9950B134B54F56AD29E31AC025359854484EB30480534E529DB98947E13FC31B718CFCCAB8DF534B71BF1CE968C820B9A334B0EA7FE55D75A5A44282002144A814E98076906783C76D9544F7A9360D5DE3C4E7E9E7781E6E61B315A679FBD4F1009ABA9B30AA9D42A681F29541013B19831B88E076E4FD306CA9A030B115B535208CFDE8F00CCB96A9FADA1A1CDF4974142F15DA2A56DB6DB8A00A16B04A52550A482480481A8EDB7C30E1217BD3503788753B573AF2AF2E2D0DD89FE4AC6A950F1043750F5FAB444CB83F449AF75CB95184A90A2452A1879D591BEDA1B0A54CF68EE046DBCAA44A2A6A38001707CFC7F6310B9D2C972D9924F871B70E9711DADC19B9BE1945AAA9865F12C85DB16D2342B885BCC020011F8D53187A912FE1722F902F5F6753A650CB8894E40B24D6D72F5D34A5FD61DFC83959AB4D754D7790DEA6D2A58212D28A549412910D890677DC4EDEC0E2C3EC9ECE4625CAC070A6029CC176CB42F5F3ADFB5D30C81BAEC375F57A11466D412723C62A3FC6C753731DEB3CD759DFADD74542A5328A148F2D25B0A30B2613BA27540327B03DEFCD81B2D12908200E3401E8E3F70D9D63953B5B394B9D32E7E25B5DC81E3F6001A455DDF33B56DB6A5DA24B5146A24952892757C379DBB4713CE25B37146427BB4FF0050205CB1CA99DE87ED112C1CA5CF4A99697760950639B90599C75A9B6ADC5CB3855D49202CE93B199F6EC223F3989E01DF11EC5AF145D94A21C96048CDC743E76B43AE0F67194492402788677726ECFC694F08EB60BABCFD634BF254B5215C84AA0FAA4FAA36207F2E7B60292BC56F3EF2982850935AB01523996C998C7B8EC392900004BD482090C2ECE798FD817EEC7D4E5590BC82CB8C3BE5A1A45424A90A6810A0B28820926133A41FC31CE2C3ECCCE32CCDEFC92E414953EA5E872E0DA10CF10CC66CD5AA60524664DAED51969AFD22C83C0B78CCCC1D2FCC54962A6B83C866E9726DB6AAAA2A56DA5487567EF05D5B8B4A5A029CBC7F7852090948F5100D9583DA1218277A8388E21DBAD0BE763017E4E64B1FEE008714B9CF47E36BBD586CE3A21D7AC8D9AF2AD8A969AF4CDDABD7414F50E0A775550A152E3616B4A8B656042C9049DA061ED33254E49219DA812D7B8EB416A6BC740B5A1924743537D75B665EE6F0FEBB9BA9D452A6AA4128742171A80493D89EFB6C4F03BE191745A87123DF1D78C1D226096C4BD6A5CB9B5B3AEBC8342F68733531A701154DADC4025610A0A320FAA20EE44F0924F700F386F5DCF2CC70F387118ADE000F89C310EDE4FC1E951A42C6D575A675295D42D210A650EA0E924C29510AD23632370608DA709C9536F02E3437B8BB70B7AD0C6E91F103C40F03E9D38C3B7D20653559C94A6005D390D9714200089549524EFC0F63B61AF1931D743BC050B356B434BD1B99F1878C3BEED6E6BE14AF1B78C3D5D44CB16CADA278796D9714081212011DA4988248E6678C2522631A13560D5EB955BC2F03625C28D0D4823C69C2B5FA88A8BEBE74ADE52AB5FA5692101E7D4A1AD0957FA8B274A546540700A6414EE362305CCC1820CCA149171724E75CB3A67054B59084B8CB5E314A7E2C728D6B1926F6DD334E2F4A0F9AD94C1FFCC9500402ADB6DBDA00DA033E2646EB96720166F6F5A50E8066236DF34A0AF31CBDE700BC2EE475AF27D8AAD0CEB5269487039FBB2992D49095C13B81B89E36C342A595382281C925EAD4CE999D38982244F32D448A12299D07D5F9791898159945D79C1FF2C0A4A020105249252129D81E013127FA118D3B8AB80EE326B7869A539D19CA5634920121EEE5DA9C6FE7FAB4F7FC9C2885597A916954287A5054370760520C03EFB71B6E31EFE5C35BD3A3D1B5683A5E281BA85E8C5C732457F7CA2BC3AAEEB09CEF4F6D59FDD35AF52024A8A14952765A5293A08077D51F1C07330A028A9AB6E046AED9DAEF06271C9090870F954B9A5D89778F2DD459EDAD36FAAA1013E59528A0170A4A446E94051111310301CD9643814C836ED41AD19F5BF9026125CF2B77550F03E741E90CE670EA5D8286A94ED3DC1B5B8DA823CB52169249D89D2A015B763C6DC6124920872401CE9D39C78852778006F4CE1B9ACEB4D138BF2135292A20800257133CCC403BC7CFDF0AF783FB8F9C7AB2E7953EF032C1D48A8A9761352548482A51F5C048DF6913D89812627E18CEF1FF00A8F98F41012EC39FBFA421BA97D7B799A6ACB250D5798D383C9A9D416DA93A9090635E926013C0DE277C3363B14A94665490CED5D2EF6D0B16279C1B80C385A828DE8C74AF2B9D6C35883F72BA33535AEBCA3E971656160170A8A8CAA40D440077131326248DA1B8ADA0B5A8A5DCBD05DDDEE065F614A3C4EF038646E0A0B0FF00917B39B001AC051A039AE689084CA5A3B2D5A15291074C240932A8FAEFBC61AF11DE2A515973636F6E0877E25AE60C54944B3BC0804654A13467BFB68F61EA63C3EE1F934E7F6C34FC5FEEF38D7BC1FDC7CE393B508008D6820F10A49FEBCC1DC71BEFC4631967FBBC48F58CEF07F71F382C729D550EB4F250B294AB75250AE018E40209EC46FF0028C6B3672908018D4B925C5A9C8358B56CECF0A4C2F25C167B9243366CF9E752FE30FB78772687AC596ABDB616F0555D3D0003523FFD60E268D6083060A5E2924C800EFB62C0EC9CC5B5CB900D1E8C5AB6BB70D1AF10BC7FF33A9B5B3E9E1D21E7FB5155403C4C6737699A792D3D4D61421C712E200719B350EA4A42C09014E1000041ED3187CDB731665A926BBC9ABBBBDB991CF2E60C0F85FE7A1C52FD7DE794419CAEB2194CCE981F3311DB68ED3C6E314C6D497FF52906952FA64EE7436F7594C06CDC4100883A80F7EDBFB7C7BC624781436188DDC873B0147B87D291908565E6D042544824850D8911B0E47C46369290CB7B8535AE07BD7A41524B83C1878083A6542019DA08077F7C22B08DD2FBAE2D6BB8CB93F2F570480F5E639B88EBAD247277DB8DFF00B601C404F76B29BB1C9E9C0F5B0CF4142E082CA1C8F8318FAD2D299D46267B13EDEDF2C32CBCFA7D60D4D8721E91EB5051306772783EFF001C1B2EE9E5F48F639B820A64812360481FCCE0E97BAD51975BF8D3D1E352906FE51F036A501A6144F6490A57CF48331EE78184A6A105FC0350919F0B1D067AD3CDC1A9F2FB46C71CCD94A8A92BD6DF6E500440D8F3F41EE31C4D21C258051AB060E1837D7E9A47D000A4848720300FEF5D60CBFE3AA4537A14DB6F8024008100F73C6F3C6162A22FBDD41A3F36BC0CB5036D5EDEFDF99C5AB35B0F2541BA54852F64FA47266781EDC081F43B1F37828B392E19FF0078155F31E7FB7BF0836FDBCA1CB007FF0013FDB1B771C7CFF48F18E87C0C7C45FCCFFACDA64C14940F4FFE9E791C4E33B8E3E7FA47BBAAD0FA7BE71D1799596D5FF30EB4A094054684FC63E3DB9F7F71BE355032D8338A93E8387BD6069A935A1A917E3F4F4E8F052EE75A456AA8096AA1B6A416F4A636D8190378EC63BF7C2C851B3B0B8E6E29EB96B002925D418BD6D7AFBF18425DFA94D153EEA2D14EB6BCA74201642C799A084123B89EDC287BC83875C2AD4674AAB8DE03A59F96953C6E21BF1095192AA1A822DC0C479BAE74CD75F5CE96A8B2853D219203B679AF81330A35413ABD8E8F79246F89FE1D293BAE43809763463AD1E957E146D6353E590FBC374177F1BF2F08425CEBEA175697404B4F2A54E2FC908A72B3C94204E8448D86A3B72670FB2058062D5F1B97E39716862C4205921EF405FADA8D4D746D4BED7992AA92EAFB3555AC2D2E21C5A50C0D3B04110B9599323D80F846279D99C4770B007F528137E96A5F85AE62AEEDB4A709A1AA181E6E496A934B366DA452B78C057DE7A8577AD629D69FDF097A0C4151D438EE3F9E3A1760E2E5AA424AA620164820DCD039BE556CB9D872DF69708A5E216774B3A9A8F404E82C72F2A562B9F34D0A6B4ACA4429214547E307BEDBF6FE678C6DB4313284C61313421F74BD29600BD4E7AD59CD1970182482379D2E4558819EACDCDCB9D219A7810208331C6E39223FCE7F3180B11B44292121CB00058B901C97A38CF36E5487C5CA421BFDA07CBC43317CC42AB2EB152EB2B5525BAB5F7900FEF1957A15BC820682447113C83BCE0346D1DC5A410320DC5C90FA1CDDCD2039B2B7CBDC100D188CEFCEF71703362A6A4CAB9CAE014FB36D7920907FE60A95DF680129DF9D4779DB8DC61D86DA12D3F0AB749B807959C8CDDEAD5078C7B2B66227058092A6B960487F7666BC38997ACB9F6C8B6AA99A44D3B94E4ADB754541285942929320820C981046F0676C1585ED1CEEF58AC9A972F6A9A03CF3A186BC76C5525F76528D2FBB936645C90390E91681E0E7C53F5F3A5D79A7669ADD5B7F79F5A514EDB6F3AA4253B252120872040076E3163EC7DB53262002A3F13000B935B9B8EB67EA0444317815A16499669421418105DEB476D074668D43E5DEB2E6C772265DCE59A2CF5195BF695ACD6B8C55AD4AF31D425B2A20292D932498F9F6DB129DEDE01469BCC6A75B7BCA00C405A47C20BB000005F3CF2CB8DDF38EC8F1A792F27DAAD976BC5C90E56DDABEDD6DA5A66DD0942DEB87A5B94A89515288048D8C8F63B83314872CA1635A5C3BF8798109E19533786F0219A8D72E091C072F078B24CA373BED764A66FD5AD161BAD0DD6D228C82AA4A9A66DE651BF685823DFE5BE074A99CA58903DFEFFAC3F26A10599C8AF87BE9C6275F868B33AAB2D4664A8255F7A3E436A3BC102641EC3D477E3E030CB8C5329EA285F3F0A8229CE1DE403BA4EED0B173A1E874F287CF34396E2C29352E8046FB2848E0FF0059DC7D70961964904330DD6FD6BA1F6C605C59A17B03A7BD05B8F28869D5BCB3976E4B5D57ED2D2DA59DD0220AB4C6FC4FC607F39C3E89C77108F84D189045065E4733C61344C4EE80E2C0D4DCB3B574B562A0FC4F74D99ABCB17A7A88375485A0B69D81D81708F73235493F1C26AC3A26E7BCD57BF4141AFDE3C3884A6A54C7FE540347FA718E3D05E87542B24D8C8A37945EA749F2A94695010DFA8FA54348D81DB9237DA0873B03B892BDC72795AB473D3A748C3884166539A7302B767E4E6B506256D3F40154547F7AAAA1B821286D4EF9AE9012D06C1256A946E940492A1EC399C05DD704D3DE9EBF685E5E20A482F4A71A787EEFC4C45BEA3E56A765ABAB5495ADADC692E6894A54490927B2811C8E073DF1E99649764EB419F85CC148C502FF001904E8EFADDFC6D6AC515F5A2E56ECBBD40BFA2FF57F7479C5D52A91D540F365C4C148511133BC7B0ED381274A431258115351E99DCF5EB04267A9442B22EE5EAF4635770C73E6F07FD3ECA76CCD197282E0A7896EB5979295A960F9A54B584AF79090040FCE36E18B1003AAA18070757397383A54D24024B061BA7D3F57A79C56FF008AAE9FDDBA7B982A6E8CD7BA6856A052DA492007545290003C0DE4C6F3C619D454E5C1001A7DF9DE99343949209150FF0009A1F1E96F28847499F6A1550B5B958E1D0A8DD64C199E24989027B7F2C690B2AE73A9892BD33CEAFBE1C5BAB2A8A770F320FA4C73CF78FC86E71EB9D4C0530B00353E80C21335D4D35D2BEB6A5D756853AF28913B0D2037027B9D236EF86BDA002A5A8BB9650E45BCC8BF5AC1B8298A4A850B7930A8A52CFE15D2127FB328204D7A9A90762412A3B4477DBFAFCC620F325133EBBC06F33DAA0EA435DE99539C4EF073FE02A15B5859B91AF0FABBC0B45AADEB1A05D609201D8724FB4FE9FCF0F2BC2CB38359243B021883A50DF5CADCE0999354A4A804DC5F3C9F5CED9DB330A7B6E54A0A94A49BA8236F69E4F1BCFD7E3F0C317E4C5DEBCE9EC72B5B480F7955ADED414A7BD20E074E69C6ED3E56493124C99E239E67F5C6C3040D9CB5F873CBEFC49AFBBEAD7C87DA06B3D3CF40F34D6699FF00C950088DF7128276EF27F29048D3F0A001F093F13545A87C3A3E505853E1C82A7B528E38861EB7873FA4FD33B656677B036CD55E696A9174B73AD3CC389FDDB88AA69614B96F748227B6FDC6275D93C359C33B5282C43FDEF9D9AF10C7902631A1AB3D29EDA90A2F1CBD3EBABF9EAE999EA6F153763E5D254BAAA882E25B6A95A604E93BC0640DC7107BE241B6A42532A61F8450FCC6DA87BD6D47EB48470759F2DAB5CAB98A73CB9C427B5134F4E00990393CFCA06298DA72F7B14080E0A8976704E8E3215D5A253BAAD0F8416E6A6DD2DB4498D4842808DFD401040DB9FEA79DB0FF0083094618BA920EEE658BB06604F437CB8C6004D58F871686F09534F252A064A41EE637500369F69FE5D89659F384B59DD2E09558E4F9BBFB7E5054942802E93CEEC3DD6FA6B0A5A6528A402206991B11DF7C01371643354545FEFCAF435B5A1C509513407C35F4E702C09207B903F3386F56296A24390EE3320BE77AF26E507A1277850E7C3CC866D7855C40AFBBCF009EFB03FD0E364021C90402D53D60C71A8F111D5BA754EC951FFE2763FD4CEDFF006D8C97FD3CBE9EF9C7B06D4F6F7DD428B742AA8880494AA52482424EDDC6FEDCF6C6B3B10649604070CC73E3F4E361730A21ACE1C96AE9EDE3EB963BA046A6ED4F9248012D6AD7B9DCC69540E64471BED86F998B5540279071520357874238C2DBA00F992340E2BC328D6ED551D969DA4BE84217E9002C113E9EC224ED04473F4DC72D61E4A84BDC200ADEC7A9CCF4D3231DAF8998153494AE8D40F5EBC5B8B5F8478A1ACA45ABF76DAD4046DA6131313BEC7F3FAF6C2D3304A9A00090352017E546776AD41FAF92974014A1C8924D0921A8F907B53585EDB5F64211FBAD3246E46C04EC7DBDE7E207C250FF00299891BEC58104E4EC4F0E59F27AB972D684A9CB386A9D0F036CAFC23D57D5B13C8D88E607D38DFF00ED38F3F24A2E6B576CFF007AFD69A13F9897AA69C135F3B711955E091DB8D12404AC02BE12AF8EF12636EDB0DB9C79F9251F6F46CBD6BC3AE7E611C3FF0048F74E193E8E01386A5D579D2CBAD84800A9624241274807B09263E24F38D55845A411BA4D1DD9DBABBFD35358466CD96BD283215CEB4A114AB7A347071F67CB5A174AD29513BA93BF63DBDFE9F9E05FCBA8AF7980C866783F8DB83EB012F76AC4311E0E3C4E74E704F54ED37DD5734ADA4695490512399571DA756D1387EC0E1A63A284B682832AB9A371C9F9C03342420D0384961C38DE9E6FD61A0BDAA83CF30B418EF227F988F872788C4B70B87582EA72EC40275B6ADD5EB5B444B6962A5A52A3BC1D8A5D9DC8CAF563ADA118FD75B106A1B7E1492A50001044F6EFF1303BCF0312BC1CB21831B54D3D3377A97A002C0BC43A6E293BE0EF66D5CDF2CDADA9AC12D9EDB966E3742AFB9A5D73569F5048D95DB7907B7CFBE271B1800853814345701D6966E4D76887F68E4231AB4FC43E521D9AAC401E072D3A4355D5EE86655CC4BA8A872D348EAD6D984D404796641924695411274C03BEF897CAC72A423E19AB14350AEB6A65E54A0AC557B4BB3489AA504A52492720E5FA5342DF68AF6CDFE17F2979752CAACB6F4A8B8A3A5A6525479D84340499E49E62483BE1AF13B7CCB5B9987E12F5278BF96751AE4CD89EC4F780EE3505686BA8C999B9E7486317E1332DD62DF6DACA35EB7501442D696C004772757BF3F3381876E88F84EED0332886A7B70C465CA113D863751258D0331EA3A70A641E0565BF0934AA0E36DBAC581614A0528DEAB65180E1408248DC7ABF094FBE3C3DB97B30D48019CF52783B64066F1B0EC510EAF86E2A5E9D322180D002C0D21734DE1350CB6A65179AC05D8D4FB89594BBA78D1EA3F84AB7989D43DA02F85ED4AB1256CA50DD390D740F6F7CFDFF00C3BF925242920851727916D33D32A7011C2A7C22DF2B1C6DBB6DF1CA92824A595073D7A4130790600D4276EC0CE1EB05B666296821CB9041AF8535EBF63666065774414277825AA905B8D79F41E05D2E997859EABDBAEADD6D8EEAF51D5539012479A3810234F13F08F9C62D2D8DB7A604CBA1494B022F471D1AD78ABF6EECE4998A094203A9A89ABB9352299B8AD0BBB45B66623D68732565CB75DEF375BBD7D053F96DBCA71C96B432D2046A72401A60EDC707B62CA9DB7D0642196CA084D3798F0A9E393E9A447FFF000E950077054BD9FC2976F3AC553758B2D78827F3A582F550BBCDEE872FE68A0CC06D814E293566DB70694D3052A5E9202564267FB4B19DB895CDF98F2DE0CC4D817399195BCF51D9D3BC4776904DD9357CEAD907E4FCE357395BC7EE431D06CB972CE763BBE53CD08CB961A5ADB2D45BD750C38ED05BE91853882D15250A52180A51504C8201EF0F7B3B69CB985601CA9504BB757E61864CF09CED8AB93BAC9CF3E366A03E16B0B45D47871EA7E5CBCF872C859CAD3594EC59730DB955CA41652C84A9A7DED41C04828D942491ED138431B8842A60500EA4850073215BA081E1FB4132F09BA80922DD2D56198672EFD4C478EB878ABCB79428AB6A699EA3AAA8D6A66A52DBCD9D2D6FA947791C0DCF3C4122709E1B18845C548351C7D751C39559F1F84330800BE8C1EBE8E33B718AFACDDE3D72355DAAB69EA6B825C532A69BFDD36423D2109485799B84F00811B4C6169BB4A584FCC2C1C036FAF272EE45A90DDFE573482EED70C08E3539FD4E50C339D69B15EF275FAE95356C545A52CD45434A71E698873CB2A527429CDE13A0EAE0CC6F1184E46D3014412DC0D491C7972FA38737654D04D55FD4CCF4E76BB70F0890FE1C3C5274CCE44CBC2BAEB6FA47596DDA64A15534CEAD499695FE9874903D00CCEC40DB7C3D2F1F2E6CA212471DE666190AFDFA5A3DC260572A6A94A05D4EEEE41AF26E6736F056F889F19396ADD92EB5DCB779A208A7A1A9439059405252C38149D49598DA44F0398C37CDC52025C11A1A006FC19A9CEDE2E0AC315706AB7EFF00BE91520D78CAB0BEB7EA6F575B7A98764941A96C920820ED2077248FD4E00998A160A249673617D45C9CB9E6F1A1C12D4404829D4FA6675B6BA56298BED1CEBF64A5663CB37CCB45AA955C4BEF541A75215A1C58418210A3B833BC89C334FC6A42CFC6F53AB79FA73AC48B0D803DCCBDE0EA090C6A4839E45CEAD6F388F1D21F1A46CF6EA4B6D4573ECB4D29C521A9547E35403B80373B003E586D9B8E4D5886CDC545EB53CC1AFAC15F91983E26A5EF50DA00F6EBAF325EB7F8915752286B5B68A9C525AD0D2D5FC40033C9DCC1807DC9C37CFC5CB0925D2E68F406F60DA351C885B0D8654B981449531D5F2E54CF3E515D34D55796AE9ADB69612F38B3278DD53FA4FCFDF02FE7504FCC18003806EBD2F9D358394973BC06552056F9E83EB7894590EEB7AB6A18529E03CC6B4CEA22494FCB811EDB6E7B633F392E8496BE4188CAAE6EDE8DAC033252B7890CC5F3366E570DAD9EB07774AEBD543AB5ADD4942D6A206A3C499F9CEE7E20EF86BC4CF4A9448538D1C661838F4AB7330F18192F2D0583B9AE438BEAD9479643E5284AE4A97DC7C04EE63E3DA3BF38679A525D831BF1A903D07DC44870C964D0D18371BD4F9B083FA3B23EF292B083C88807B83CFD23EBF4C0CB594A779C948674F087846E8412583817AD6AFADEDD7A42DADD6D7E9C7E1323603683EC3BF7DFDB7E7B63544C76362F4FD6B9C69BC9FEDE5417E3C215AC3CFB604D63A2001002BB44C6F1EF07BF3ED8391300059C1A87A3FB0F1E85A01709AF21C78E4F4836A7AE49582E6B7D5B43842813F293EC63DA76F96B3D1DE242C026A5CD1C303E39EBD290324156228591BB67D6D7E1A967D224574116C56F506C94EB6CA1B5D43454B56C125B5EA44EDC958107DC8DE712BECCA0A40719D1E8D5766F3D1E83388DF6830E413BB9E94209B54793532B42CBC4C38C5EEB73006FD373B538815ED18D6F5AD2824948FE249DF9F94E08ED1A9A5AC0B9496D33AE747B8D72CE3CD8184505A16AAD5CB872083724B3D0D3DBC126B2F5B1CA8FBC21BF2DC3BC1006F3C7C3E43F39E6AF9B3928AAEB992A0E3C4E7975AD1E27FF0097334B25209BD430E6EDFA7D7A66FB1DBF3355DBD6BB7D35B850D2D353A954A13E6D51A7650D1715A5206B7B4EB324995199EED788C70208428E740583B9CB214B72EA42300B486DD0FA019FD6FC784269ACA5686D44FECA73D2A8D4F04EA59007A8193E9236036DC1C354DC5A525CAB40EE4B70C89BDF9D21CB0F835EE9252055AA1BDDA0FA96CD629D0ED9296A404921BA809D32206A10858D43703E04FB1C05331887353E42FCEA2F4F6CBFE5155012E5EEC08AF5FAF0681CDD972E256850CAF691A5695709990A11FF0095BC4446E27011C6A50A0A72374EF5C3100BB5EFE3956374E056B5049000240B55A8EF43C6CF0A162DD6757FA5976D0DFB4E8DA0CCC16B9E3713DB0AAB6FD01DD00248FE967BDB3D3200341C9D86F7666A176CF529BF08304DBADAC00E0B55A90AD8942426019D87FA5A76DF6DFE006C301AF6F9DE72F9BD2D9DC1B71153C05CC97B092C08F8B8D74CEDE547BE71DD2F3064374B4B4E04029A6034A8FBAA10378E3B47180E6ED8EFFE7511BA73604B58FB261557674CC2E9A01A3977D5B3A37DDA3A256A52806400BEC60F1DFB7B612FF304D7F883A911AFFE1957F71F057DA2F3CDDEE0D3E299BA5AE71D5AB534D3CCD4061B493212A51482A20183A94771DB15DC8D8E549DF2924076A6A730C2BC3337E3D14ADB092B277FC2E73B17CB41CC110AEA4CE15F4686DA7E868901A20BCA4B650A488124A9501447B0D441DE0ED87395B282402A4B02D420B920D9AC09A53CF5211B5D058EF004BB01F09E469A548A072E61488EA95196154D4D44CBEE2D25B52E1C416D4785260A42A37236227E985E7E0A5994A0134676177E64B50B53AF08286D40436F0248B3EBC4663D882DA8CE05F488A30167FF00EE2BB4F62B8FAFF7D9906003FCA7235B16661D3F6E3AFF0098A753FF00DD054E5D6B482A4BACA82C4F972C9524193A67750D331CF6E71E1C007F94D2833B5ABE919FE629D4FF00F7413397CA86DCF2DC2EEB500A843CE0414931C2171220F1078E237D558070DBA48AD48F16FD6DA56361B492948F8EA4D5F3E3671E21A3A26E350E4429D4851827CC7098E4892A3BEC0F7323E844FF002FFE20F873E19966635A82FA79420BDAC97BEAE77A8DCB2D45856B9C0D7D9A9769C843CE0946C0B8A892220C9240279FAF6C48705B3923768C2972CFCDCD5CDAA0E79186F9FB552A4286FBD2CE1CD38B5341A528C0968332525553B856E2FCB1FF00A4850064F3F88703F91898C4824E08259907C780EBD68F106DA7B446E905469BD47029A38767CAF5A726D9CA85B8E3C8453D6D614A8805B655A411DC14B7267E3DFF0022ED2A504801AA1AC1C0BE943D4B87885CDC792BDE2A00836247D580F32F581B979354D5C92EB88769B4A814A5F69E41803B250948546F254147B7187EC0CD32D052F5A06B3545A95F5AF486CC7E326CD0F2C121218915B07BB10C731C35854E68AE65D1EB72AAA56111E4D352D4AD6ADBF1692DA904267D478038C384D9AA32D803419BBEBCE9958F0BC3119F3F7882920BBEF0193B3700E0BDC936767861F30BEC3348E3ED5B9497893FBCAAA43B123630B68276D8F12369F6314C64A9CB5B39625B32C342C1D875F0878C1CF586052438AD2AFC056E7A69C1A0BADDABE929B58AA7DC5547A5D34C8295292AE634A3D04EC014C11F3DB0D789C08425F799C00C0B163A31AB1F6D05AD2BA92821C694A8A3B9D3F582BCB4967F696A0C3EB438B0A5A6A8ADD7E550545C5BA54E492494EA57A46900C0DB30380EF57BA0B8714727372FC08A7376D21AE74D526E08068C006B966B397CDD9AF123AC363FBE2B496921B211E5256DEB03583AB4EB04A49813C44091C62C0D97B1E5CB482A206F351547D4BB06A569C40CE1BE62CCF72B482123E1A310737B12732FE15ABF191BA509AB7C381940D664AA20C44C0882266089103E1B62C5D8FB0E4AB74866001671C09A9A59FCCDE19F1B3909490E00482ECD53A38F4ABD2C626064AE95DAED8DB6F9A56C3A002544A952623706413DF7F7DF98C4F70BB264C941A84B0DEB877D2ECFCF9351A20F8F12E6ACA86EB6F0003870694A36B56835CC795AA1F2DA61C086A74042D680124890421402871CEC3E430062E6CE4BA4153024505054353A66F5873978595B89F940DDB503D000FEF4E50DB5574A856D426A4369005430B8502A54F9A95AC92A24C29490A3B80008F618164F7AA58277C8A37D0657F511B7E5255182285DA9E20E469A44DD5E45CBB7EC828B556DAECD54F3F6853150ED4505138F36452167534E2DA538DAB4A40050419DC1D46712CD97DE4B2E5EA0B371D5ACC5EAEFE6219F6CE1A526521400BD180777D7273E246A614374C97D62B1F40F2DE4FE92671AAB3D350315CC354CEA90FD25353BAA42CB653568761016A5EFB9020080061ED52573424872787B0294BDCB8AB0886CE9A8412092188BD883CA8789CB2BC517759F2E78EDB3DD730A6E1D44B657D03EA79B4B4AB559D40B657B695A687503006E1415F1C36CF0B920B38D59C91EF237BDF315051355FD26AF9336A3471D7EB59B987A75E2CEB2B5F15D9DAA1B65FA871CD28429A6D0971C5280494349094806120100240DA0618B138B20ABE237626BAEBD69F70E5F51829665824048DD15A1B00D7068F9E429485AD07477C52666CB15B97DFEAAD750DBCB2B42D08AA430958520028F31694B9AA3B85851D4002230849C64C2AA956F3820DC172737228D636A51CC0D3300825C2402C58D34A39D6FF5A523A64AF045E28A9ADD4F71B27562FF004AC51A56CD336C5E1F7C85B852BD65B75C712A0437C94989007270FC8C6A932DD45C1A3540A3F9EA470248686E9F814A5214C6E5D8543F2BF99D63CE7FF0F1E2E2DD63768EFF00D4CCC972A67B515345F094BBB184A8B4DB72958D941460A4904418292F6802F5F84F1B56DFBD21393824A94FB84866A83982EC3376B74BC4566FC3CF5D2AEA96DD4DEAE6A69B241497D48103B10929DA36E67E7B60099B44317597A86CD9F8F5A9B8E3587695B2F7827E174F26AD4F33521A9FA23FA83E1C73345B85F6B1758F206B426AAA54EE8714215095AD511B082001F0C45717B51426A92154B10555EAE389E37D624F87D943B896C824B330BD855DBAFAE80065BF0D1501A74A29997145C0B2AF30929F4CA8085FA6773000C364DDAAA04B2E9987FA1D1A85AA456F0B7F948724CB01C3310E41B1E9E7CA39661E910B136B6AA184248290025C50542B6FC217FF00DC383F905376AA968F985CBB97238806DD03308511B2028B0439C8352FE34D010F5786D864922A52A65A30D930422763B1E44CC77E06FDF02FF9994B3A9DCB0CB23471AD8C6CBD88ADD20203F119167700D69C33873B2E64876ADA68219793E58096C254F020446FEA20F73BF7983ED9FE685C3906F9D033D1A8E3873A521BD7B1549A84905EE03645F31D6150EE40A92A0DE8AA2E371E62425D237008ECA89491DF69ED85138CDF215BDC055CD2E3AE54306C8C10948DC526D9016F0034E0F519395259BA695D5CEB6DA68EA9202930A536EC4A8FB91BCFB4EC7E185C4EDF0486514D1B47CEDA56A2081242695039102DD748925977C3D5E5FA14D514E96929428A48850D5099239D94AF98FA9C2BDD1580287785BCC7D21552CEE3302400E756232F79C289EF0FF7069BD68D5AA369D47E7D88FE785E5E04900B019DDC0AF971CF47AB0E663D1C0D6BFAC7D6BA2559C389044411A129FD40EF227DF7F960D46014D625DEC68FCDF3F2A6718263660BEA7F58304F465A69B4C300BA0995052E089E22748F8C01F1C18BC194E19941882431BB80752E33B661DDAC8A314918820DC3D29BA402281B83659E50F274A3A56BB5661A7B8ADB5250C252E932B490B42B5B3BCC8873498E143D2A9040320ECFCADCCDE8C00B173C6B99D5E1BB6D4F42C8142C06843973AEB91AF084775B2829A83A9F4770BAD32D7439869D16BBABBA9C6DA702D6A4A0A834A421B80BFC49092477C05DA65FC0B481500BDE808D3F4BDEB771D87B85003D483E3E62C05E231666C9571CBD7ABCDAEBD92154AF22A282A1290943F44EAD5A108291A1708293A84AA073EF486D7C6193426CECF620F176C873A5E2CBD9182EF94C4072C2A3C039A5BEB9D61095346A65D2B4A1406B2449528813D94A9300761318841DAE553141FF00AACF473E3E0D61C0BCAD5B2421055B950D500004306A5FA1C9DF58F66916B00A7CC208932A715BF789512071B0802768C6B336802E4A897C9CB3B5C9FB83CAF1AC8C010184B7AB97AB33656A52800E599E62DCB0A2A0951276DF511F91313DBDF014CDA043B16A1BB53959F3E06BC21538221DD833FF00433677CFAC7DFB92F9D09279DD23B6FEC7FB7D303271C54B4852A85552E38E479C78708A154A006F948D72BEA5BC691DD348E442811B73F844F1DB4CEF1FAE1C97330C4004A5C0068A01DEF639694F28C4A710FF00CB596A589723986B6A3ED066DD2ACB68011A8691BA92093C89260933EE4EFBE0298AC3924EFA6B912F40E01D1C6705CB46240A255CB75A8F5B8D694F1810C5BD6674A3409F540899EF279FFBE18F684D4A16912D4E19E846791D2A0DBED05A4CF03E2965F20CCD5B66F4E27C20C116E523D442811EC483076EC47F3FF76EFCC28594A7F08D82E75C4A3D1C79C6DF6DDF667785DAEBCB567B475BB36AEED55555145469AD7682B0355AA2B090BF269A975A029274A068501CAB93860EC97E2A767B6BE3D7B195325CAC4227AA592AA1749DC26AA2EE6D663AD208DA7B4F6BECDC3A71337669328CA4CC0A1884AC1043970250DDDD04DC934F0A4AF1054970F0E7E2773E7870B9DC9ABE54E5CB85B7F665C6AE9BC8FBED25DE8E8AB99AA34C16A71B436CD606C853CB0B2D15029D400B8F6C4A9181C18C4CA9A2721490B1BADA3B123A3F8F080B60F6C17B5F10242B0E650700282B325B315BB3B07A961918D96E9F7CA8B9525C686DA58B7250155546D9603E5682A3EA538E25929020A8F99CCE98C44F058EFCFAD404B28E073E22858E8E35A44F55366E182664E74C91F32DCB0497AB9B70EAF47101D9BAE5BA8AD669FEED52C05B4EB8FBA2A12EB14AB4010D38E8692145649015E8823838CC077D8FC64FC2CBC39FE12CA77C3B29B4E2C05B53419CB76BE1F676CBECFC9DB7FE6725699B2933049F85C380581DEC9EAF9679C794B3969E67EF49AF793E7542DA6DBA69AB579BAF4693E58469214388241D8E0DC1ECFC762F18BC24BC1A8EE29490A009F94A86952C08CBC0443B09DA2D9D8AC21C59C54B4268C1D39FBBDA3B55E567D4BD540FD6AC0610E043D6B7CA8A895FF18721309889491B92779C698FD9F8FC22561583985692C0316BE4C3327A5AD06CBDA3B127CA5CE9BB62449500E10549722951F10BBD98D1C868F34364A862BA969EE176A06454EA4796F4B2E34E68D482A42D726541288DA0AC1ED05BF0D81DA53BE3382992C3D1C1661A3A73B5397088B4DED1ECF562848938C97301536F02199DBFBA86A2EFCA0D6A28AE21094869474BEAA5AC4B44B8E526B529BA675494805C66A4A9A3E64A03487751D611BC83052D01C4F694B4D92A6DE26A73601F80F0B41B3E604CB1325CEEF12A1BC4021D4F61C5B2005210B73B75D6BEA45B18A15395EFB8DB146D38E050AB7DD714DA1B42F47A095011B284A80E799149C08992BBD0A012685F3E0EEFCD8F1883ED7C79085109218960EE6834BE41B4D349D76DFB1F3C5C55D928B355BCE59A755E822A5AB2D55D5BA6AE6E9DF654FB6A0C2D2A5C909D3E50008247A8ED86C978C0AC58C2A6590EADD0BAD6B7E218BE7D2209376D202D5F082C58824EF035A1AB3D3EAF578ACFCD96CCD5D33EA1E66E9E67142ADB9BB28DD2AED977B695B4F687699E71B4AD0B2CA4E8A8400F2468F4A56132AE4C836860D7B35325615DE77C80A60C025C3B135C8B8CF2BC3D6CADAB227A4CA5490A2A3F31E62C18866A392784094E63BA54212698326A9C3E532D38D3475A97E909D6129324C0E3F9E17D978818B742C1960383BC0D5AC5F8558B55B843C62F0F225CAEFC21243137F2AEB400B0EA21E6E86F855F125E2CA9330AFA499672FDDAD7979619B95DEE895525322B15AE28C282B4959D0A9595ED13A705E3A46CC901D78D9492029DD4974D9DC3E54078521B64ED1C221493302509DE09725BE22E5AA08AB5BF684D757FECD9F1ABD3EB7AAAB347452BCDB298798EDD72A31517BA24A13B9579CD3094A400093CF61BED8896215B231442256D790A5B90120A5C1AB062AF1E57D74DABDA9C26101EEE409E03A49497650A3533605F9D0D04443B3F4C33165BBEAE9F3359AE56B75EAA6D947ED7A27A8098436952925D4FAF4AB527480374C493C1DB33656293312B92A3390E06F2002921F83E54E56CA1BF07B7307B4413380C33FF0071B035D0737CAC6D496D93723217B16D2F16CB5A3CB493AF54C90770008F8CC9888836560B644D9F849B88337BB5E1803DD11550636A86C81A1E99ED8B99B3CA5B0D8C97314C77802971A1A1F77CA9343A7791986D8682D9536E380694F9654AF72001A6494EC408206E0CC8C4D7B2D83C56290A57C4908A01605E8070D6BF4110BDA4A97BC7F8E2C6C45CD1B8B934B30BD0089074D9629E8D8421694A56A0084BE453833B72AD638F8471DF134460714B0A0A251BA087218FC3956B71F5688A4D424A9C4CDE62E0022EF4B66696F0104172B217940A7CB8076499067E0782081CEFB08037C36CD901615BC5B71D35B1E97238BB56B0E289B8C603F2CB09C8906A1AF61439659DE01D3D89680B75CA4F31B88D485CA53060297293A008E473B1182B0783411BC6602521DAD6B0353AE7066EE319CC85017B69EDBD61676C416E84044385454868B3501C4345408871210262402253F31871D9F3FBFC4CDC3893B8940A2DA8A3C2CCF6311BDB9895A25A02D040720699789AEACE2FA4C0C803EFD9668E91F4A5629DB5A0F9634257AE0EA524EA90222354C477C4BF0F87494FC46CC79529CED576B18826256A984914619B93AEADC4F1D61B8EA4F4A6C17A43AB7E9298EA92B2AA742A7B933EF3EF23F961BB1F814ADC858B6953A066CBA5F3CF49334CB21C50B312F911A7B688A39D3A2F92E9E9085DB2894B4350952699B41012981FC24F689F97BE2258DD9243B2F372C3AB125C38A8702FCA27784227CA94030F803BB33FBD72D222166ECB3956D14954CAE8184B6A5A825494E850D809F4E904401020199DC98186512C495904D8B5E942FC9F566B1B4113704B08705F4663E42BC3AD1E1D8E92B56076CEC522A9990CA1234AD2024922000428AB907DFB0EC70799C2620209DDDD639D7A436CCC24C984258800D4906A069D5B5BC2E3A8992F2D5F2CCA69142D4B6C38AD72851569428C001329983BCC7C381841728B13DE52E1EDE54AE5CE0CC2ECE34F8AD5AE94147195358AFBBDE41B051D5D7A1A6E5C833A747EEF9D888DC8DBDA63B1E58B10B32B79CB90F6D7AE6D5F319C4870DB37E1A92D60F76A3D806EB9DF2885FD4EE9C58EE97961B555D436B6D4A1A7C85292B5023704293B1EC44ED880E376813899A195451E028FCEEE6B77CF3127C3ECE50949DDB01C4F5A371E34A39B26AC990ACD6AA8A96D2E3B51C38A6E03642129D2552AD7311DA37277C02AC612EC0D5DC39A3DFD697B42C3679043A73A1208736B3935D4B5290CDF517A774973BA25DA2F30A5D4ACA1B58D60944C881A20CF0773BF1DF01CE9EADDB92E0B96B5F3058B8D6971C208938232E60511AD48B7D3DD041465FE8FD3A1F65370A27108784F9C58529293B6E44FF171CF69E702A66AD45B78EA2A28CCC2C3382958441161AD6A1FCAEC0E9933448BCA5D27CBD48895DB921B0367488076DB681BFB6E77C1004C55976BF5EBF41E3089C0214EE00BB1CBCADC99A1C6A0E9F65BA671E50B6D3B9E711A3536094404A249FE2E260011201F7C19231250A4CACD377635BFADF57B86A07336405289DE005385EB6EB9BF030EF653C839717A595DAE954A56952549652929DD53B106419DB8820FBED29C048388FEA29B559C1A9D1A96A7A8868C6610C80AF89D80E3CF8FBE50F45BBA7F6A29536DD229B6D040223D24181BA604C1329F9024CEF897E0F61A96A96AEF05816A3710081D283388AE2368A504CB28B8B877A1F6E2F7B41E5474D6D658043007B9F2E7F4913B7D7E387F46C30EC1576AB0BE96F3A4087682416097E39412BBD2DB5B80E96D0827DDB2AF86D0A07F29FEC723626EB32937B00326B82FADDC3C20ADAE84923BBB66F46F282A5F4A28C3C0A405252526030AE7B83EAE7E83DE79C2B89D887F2E3E3725DA96A12E0B73075CEA61B4ED30AC5EF0191A586447314F43908595B3A7D46D32E25A6FC95B7E52D4BF2CC3810E249408208274912498E3989D3666095202BE276A960E4B170DD7EC202DABB4AA9203D8163414A7173CE94AD221D78AFCA6C53D82ADF7182A7124D5B2FB6D9F3180CA47A12028952890082080082220E22DDA723F889342410E69A753E357B167890F67768EF207C34700EB9D4DCEBE0F9C478AD0CE7EE93E50CF8079F596175797F38B086CAAA689F71A5356F7AA160EE87DF674252509292B0751833CEBDA79A50A52002492456833A9E1E393562FFECA8139299A40480038A39B7B34A922B0C35CEC094AC875259712A20A14D1252A048509900907630207F2802A52E5BCE72450B64D9D69E7A7279A4E9E83FC2482E581BEA2AFEEBD20A576C2D886D01C24711A7F993B7D3B9C06768EFA8A19880C5DFAD46B47CFCE379125D048352EE0E7521FEFF578F89A24A5254FE962018041549EC3629E47FDB1A99A54010F7BEF37D3CA91B8C31715F163D3DB7DB8269D0B2AD094A82412551D8499EF1DCFBE35EEE639216C722C33F0EB67CA374E1D21554821C12281EB7176F0F36808EA5A1B8D84C903DF7F9731CEFBCEDC6355A7105FF8DC7853ABDB2B0C8E505A5120023BA1EA1FC07879C0C61D63CB42081294EE63BF1F0FAFC79DF01CC4624DA7904E6D6198A67577E8358210BC326F21C80D90D1C7EFF6833610858D4822044ED1C8DBDE4C7C79EF8C952661429532615A81352D6196AC0D338F16B90A34920787BD7281CDA52484A88883B91B7BF024FF009384262CCB504902D5B9BBD748D37A4FFF00287808DD564771B5E7CCB950CB2CFDE2A3305B6B99729F5682C174075FF521B572B4EA94854AB607738F91BD89ED8EDE5FE30AF09227CDEE4E394960A2C91DFA59EAD51E1E116D7697B3D823D85FCCAE5A0CD184240536F5651A55B214B78C502FDB0744FD37DADF9CDF6DD0D26B720E437551212B51CB166087111C296B112638FCBED86C6C0E3317D98C34DC495281C324924DC19608BFD9C0E31C7BD98DA92B0DB60492025A694B1B8DD510D4B68ECED6BB43654170B951348B3D0D22CB152C29EB856D4291A5E74EC9664294BDD324188130630C5B3D7230B8A54A5301BDBB5B06367340452846B68E96C64BC36D6D813A4A0A5332649DD410CE1C51B8F1AC4D8F05DE1AD5E277A929C997278D8F22E54A519833C5530825E75A69484B74A160B63F7CB74804129001330312A4E2F07B0703B436A80921083354A2C18328B92016676BE960D15F76B767CC4767F03B3D78A5AE62A5CB948969A95CC3BA020025B2A936482A67606EE6D4D7870E9B291957A67D02CAD7C4589EFB9B774B951D33EF56D6522FC92F3896E92A1F53EFBA82E38A2982B593AC8DF1C9587FF1413B0DDA1DA52367E0953BF2F88C4A410ADE7DC0A16092CE403435B1677868C4760B19B3361C89D89C79489B2A59EE90808282B01FF89BC4AF75D828A45402D0AFFF00C4ACC0868D4D3F879C9D4B4CB592B29B18534964C211A94BB6A17A8E850290D900413F8B11A99FE25FB51B427627187654EFCBC89AB0490BDD1BB56AA1A9E5580A4F6070F8BC2A671DB4D30FC225AB10952C82D915822E32F1A424AA91E1DBADC2A726F53BA2196EC6BBC297409CCD64A3A362B2DF7070861879B865AA8416DE741D929EC09EE1E3B13FE2F366ED0DB72B60ED09425CF9D313298ABE55295BB5490016240C9A1CF11F8538DD9DB2666D8C262C4C3202A6290B4B89894B9204C049416720B29CB0E22863AEDD3EAAF0C5E24F3A787ABDD656552685BA6CC594EEEA20D6DE32BDD574EFD130E82E11A58A5AC6D856A74A921A25292231D773640DAF87C26D4C3A809734A1659D883F17B6E6CF10FD8FB67158C9E30E90A5A137492E520558E448B122F422D088B616A9734E5EADAD6962DF6DBD51D6BCB3016C32CD50757AE48252940994954F604ED879FCC19128CA259D2DA1722FE87F7873DB52CEE161902D43522A79DF4EB78D30DD7AE7E18B33E6DC8FD563E26323E5FB5D8ECD6EABB865EADBC3B4CF68629497755229B4AB585009285235C9034EF8030921F1499E00705CBDC12458D6DCEA09E515463BBF4AC8DD62E6D576C9DA84B96003718C6F78AAEB3E5EEB97DA31E2273974EAECEE60C8B71CD284DA6EACA426DD54CD2D0A185BF42A2E4AD8716D95952D0DAB513E9237C3F6D5DA5296244B5A838436EBBB101AAE01A353D01710E5D9D5CCEF06F029655064F913767E05DCC186968A52F34F84D4522C3ECA52A015E7B275A01DF7055C89278E79C6B8490A9B2D4649F88827E160C45AC7F5B708B0B1E563081D2C1B5BBF978D817E31A74F02196DDB37D9FF00694F4D174972CD77FCD6E5C7361CBF52D26F0CB68A7E1F6496AA165B5B876DC151D89DE39CFF001717DA8C2603682F01DF29689530A0214B0A2B09252C05595AD74360222FB294856D19099C775095972AF90A494852AA586EB077B02CC6B0ECD0F57FAB7918E976F57E7196E0AA873236EA5B293006AA32E5421493DC6A88DCED8F9D187FC49FC55D893F118CC62368230F2674C510A5CC0932D0B55F7AE08E0CF7D63A1F0DF87DD9BED1095BB3A42D6A4246F00925D98804122E48166358E17ECF7D2BEAF26AACBD7CE90658CC16EAEA1F2DDCC56AA1A36AF34AA702D3E7D3A4B29095B4D16D529A82A94C9854A45F7F84FF00E35B113B6BE1BB3F8F92553D5365E1C1DE24859DD04D47C46A343C41A861ED7FE08E1B656CB998BD9F8D2C02E632C158581BC770289050CA046F00487700E7573E2CFA3995FC27759B2759F2984D574DBAA768174C9E8AA1FF003F46AA075B1706AA42A613A6E5441A209FC0B90204FD61EC062F1FDA71B2710A9731387DA612A62EE47C241C8115D5988A471F63B0F8CD8D8DC5C933D531D65243A992C4D01704D332DCED0E5655CBEE55A29852D0B4F3953E40612E2CB6D4BCA406C2CB6875CDCA804E96D6754021292543A35781C3767404B24324A96CC2C2AEDC8F063A830D826633173000A26A75BB80C0D5CD79189FD96FC2859696CD457BEAFE77A5CA09ABA44D6D2DAE9DA76ADF552A91A90B81E4E90533FEA042B6E04E3997F11BFC42EC2ECDED256CD46265267A028A91BC90AF84AB7999F20465ADA269B27B2D8EC7197DDA264C5152428A4510497A9BDECCECED9340A7BA31E10580D8ACEA166778BA92A6C22DEE00B03652A0D4A548493C05007DB98C5158AFF195D964E24E1C286FA54CA64DCBB12DC49E472E13ADA1D84ED461932B7A40420A12DB9309510750529620713D1A9E13E1FF00C2B6656554396BA9D98ECD5AA6CAA95DABA25A29BCD2B4A11F7C8AA9532B796DA469D64054C461493FE327B2385DA387913E7A11DF4C968016C01DE605C92E1B824F908D667E1EF6CE6E0664E95859AA4849277545D83583006F990D58875D60C8779E84E6BB665CCE55748BB46615B672A5FE99A08B6DEFCC74A1B698712A5382AE36752FB4DA6413AC8209EE5EC7F6E36076C36060F696C954B3326A53316A962A41ADDAB4B8E6EC69142EDFD9DB7767E2E62769A6626585A908DF268A0482083504106F4CC56A5D4E9DDE19A36830E3C80DBCD6A4A89D49536494EA04022241FE600C4E6462035C64E722F9FDF4ADC430A53BE4D6B4E2FEE907F9AEE54EE52ADD42D2A6D20EA5F0003C9F5004F1DA7F2DB0862310069E26F9BEBCAEE042FF00952B292E5413933E7677A8A64CDA4427EA66609F350C3817B2FDF74EF1C81B447F93866DA1889625A94480424125DF85B260FF0047BC4BF65A17F025AC18EBBB9EA585F33CE202750EF2029D71F4EB682A140281F50249113EC447208FA44031B8E42164EF51CF36D05EBE5A458184D9BDECB4929B8B106A3A65D056EE214190332B2D5B92FB01286869006A03D500CEF07688903BFC30DEBDAC896DBAB01DF90C8E77EA69C6159FB0404864B9CD9245327CCB11E99438D559A2E75AC250CA945A765A9D43F8FD23690793CF1C12670AA76A852482A7A30B519C6AE2DF78D646C729664D9C1A6A727B31BBC30D78B7A689FB8D6BEB0EA9E5292A4952490B888224C4FB891BFD30C78EDA1BEEC521E94D4F22F7F46AB43B4AC0292909019B85AC2E58D7467860B315AAA1FAA4553B4AC25A6150D6A080A5373B151DC1303DFBEC3105C54D79EB2546A78FEB12491860252522C0659FECE38BF084857E5266E2CBB5F6C4A55594C3EF0F32DA932EA11F898DF4895F3B988E638C0FDE0FEE3E70B7E5C16B8E1477E4F95F95C9BC2328F2322B4BF70A94FDDD556B90DB804D02DA24794A8912FA840D3220EE44E355A811726BEDDF2F7946932404A46A723E4E3276D6FE106D6CCBF74AB6EADB5394ACB148425B5AC4EA4827F094A55C8DB70049E71AA3E6E958184BCD8F23F6CFCE1494EC21960D22D21086F74B9B10A00EC369267E3C6DB76C3826AA0D4A578FBBF478D8A09A1147CBDDBC23A348402DC2844C020813048278E7DBE98564CB798A5664D9C3EBE4EF9D5C56109A0070DFD3E941C5C37A71879B2236DFDFE9838406CC4933133F09F7983EC713ED8D29F729A5AAE2D99CA9FAB44576B29D0AC8EE8FD2B95BCB5AC4C1B065FB7D40F3014C28013A636DBDC03B7111BCCF69C599B3E56F6EA486B501BE84814BF90AE4D586D0584CC59FED72C5EEE59B5D7817B42F1593E8DC613A120CA641099D84FBC77F9C6FB0C481120E841040AF1000B36A0589F28685E209142D91AB52D5A53DB473FF0081E93696C13F2DFF0097F2EFF5383A5E1CBDAE28587DFD6025E200B9A599F9D1B37BF5E9001FC9AC25E212D48010676D89F63CED31F09F8E169F86270E186A1F2142795C3115BDE1B518A7C4901A9519B935F2C9F362788B6328B05B7F4B47525038038D5BCEFC9F6EDF2C3661B0F45024039E97BF37E94E31E6D09A1652333C6C28416CC64F7B3C41FF0015B636A9ED0B01B6CAD0C3DB3890500C0DD4002481F007DA08DF15F76AA4147786A00701DAF5B07CEAD5B3DA25DD9B45121F8876B820B5EF5CCDDE2BD3C303EDDC3A8799BA555CBA5668FA8762AC438DD53886E9D37CB72DAA9B65623CC294256A7828241D2B95C40831CEDDA0C3F7B3C9CC13D1DF2A06E37AD8C745765A699786B903752FAF0A791D1E12F7DE9FE6DA7BADDED77B2D523F68BA575B1F7D6A4283AED1D53B4CA74796A5929756D950501042BF177C4531D84EEF0CA2AA1292D4B825BA5072AD328907E602F100D8EF0ADDC02EED5E19DAA1E1135D946AA85C54D622A8200D4B6B56949927412A009200D4763F8800710501A62C5284B1CDBEE0923C6255252C848E02BEF2BFBB933B68484A9D75CD606C50012477D476DE38EFC88EF82A5D003C5FCE1480D4D67A55A56BF3821241890BF512081C2773BFF9C60A8C80CF5929209D69923D89F80EDC7B0FD71E2AC791F48C8E2D52D2B274160AB4C242E0418DA4CEFF00A60499975FA4640CD0CFFE5A3CB1DC6C24F63C7D309255F32789F5F60C64750C020957A52010544ED3DA637FC846F849728294EC496F0BD453267A575C8C646E77A6CDA959B326BAB4E92CDC2869200DC0350CC711B9D1EF3BE3E35FE166D1C31FC5C9AA54BDF51C79B2146F3C354066A92FE568B9BB6388987B109483BA918405DD852516AD75A8A8A926AC62853ED7769DBBFDACF9D9B408FB8650E9E52FC91FF0A585CF91FC7DA7DC8EF8FBD1B0B6A4B99D93C24B4A08FF00A6487DD23FF2C0D2E6F539C7176C0D8ABC46D7FCC255554C2B0C417255BCC40A93BC4DC56E46709266D296595ADE415A50D20A92992A20013A48DF7DA00237DB7DF10B9DB2664E188C44A277812A4B102AE7FA47C591B87E91D0987C3E225E191265A885948003B39200243B789E079DCE7D92EDB41DF11AEBBE5B7A723A7C84A40150801F6083AB65CF0049F9EDC8BDB84AF667E1C6D6C44E5328E0DCFC4092EC08604AB4A10388A454FDA19DB57FF10ECCC22D6B21389F83794E904020677DDDEA6B12CF26E6B574D7A39E25FAB996AD34574CE9D32E9B66CCDD975BB95AD354C2AE567CB75576696E26A1871A748A86A545417AA09320E38AFF00C2D6C6ECDF6BFB69B6A56D69682AFCEE2C244E94594E56E3E24331B278926B12CFC60C4ED6D9DD9DD8E24AD6A1364CA2AEEE67C4426585D9041A91F10A7C2EE1A29F3ECDEFB523C7BF8AEF15BD35C9FD46CCD9015D3ACC7982A29B3065EB665AB2B4F525235514F2C38E52DA90E34E061D0550E248D40F2671DF58FF00C2BFC3CD95B0369C8FC948EF17DF4C49561C94BEE52A504283866208C9B4E78C5E33B4D306167E080425A5A664C494A2626B575065E7724F58B8FCF349467AD974A1B3B54E966B33A285338C52061285335C165B428368012A2018100E90778DBE376D7EC761247E394895B2C144918F4D25A4A51FCF4D8240032B5BCA3B6B60E136AFFF00C593B178F99FC418551DD99352A5106512010A5124F8BB1D0452B7DAFF007DFBD7DA7593AD96F3A6BEC5D2BCA3477F508F53B5D64B4D4537986215A5C7D9D8EFB0C7D9B90856C6ECC767A50014664BC221441DE21E521F78076049A97CEED1CA9F87FB530F3B6E6D6913935477E124A68E5468970CD90232219A1A5BB65CAE7A983F50544BC924F9674CFBEC9227F59EDDB0DDB4E7AC622584B976240492CE7806B1AEA2F6A4EB69A12B0A60589203D75600B5AA1F2363112BA8BD06C8B992E8BABBB5038BB93E160BBF79B9B654B541254DB4EA5A58279012A49189760A520E07BCF8428A5C3B0F1058B83C28F419C44E66CA9735649DD04960E4547100B9E833E90D8DABA4168C8AF145A10960B8EF96E3A9A3728D680B3FC4E2D969CA85693FEACACF6247188AE265AF12674D2E04A52939BD282D96B536A712B07B2E5E1A7A12966510FBA475701ECCF6A077A885E7FC3C9A7694FB358A5FDD53F7A77D6483E50F30A55DF4AB48D4388D88C7BB17B43F949C652F78B166A97AFBAE638344AF6860C1C20604FC02D52E469C1DB3CAB0E7F4DBAB3D7AE8CD7AF30F467AA37AC8EED3369AD72DE875CADB1D44A81D2F503A8A9A32094E932C1F4950E3121C727666D85C9462254B2898A4A56E9FE955DCD7237E39443C604A64E219014A2853058CEEC52685CE45DF85CE94FC0DF5EFADDD69F0D9993AB7E3072FF4F2B946B5DB4F4EEF566B35B18B9E6163CF553B0F3ECD0D232752D090A5153695FF00140009C73CFF00883D97D84D81B23118493B3F084CF946589A30E3F99310EFDE043121C9B919421D8EC676970FB4654B9389C4C91DF778A44A9AA08EE92A290C8DEDD482A29F9039726CE614195B2758BC9BEF50BA8F5F4790BA536315F75BEDFEE0A4D13148C53A1551F71B78740275B294FA1B4925E75694FAF61C65F821FE1A70DDA0EDA4AED4C996B18246311880424945160960C4640160DAB5E2E6EDC76C769CBD88AC32E795620E1C9EE8CD01610410662C295BC120855EAA20A5014691445E29BC55B9E3D3C5BE4C3D2CB6D452F497A416F72C196EBDD4169EBBFDEEA9B1595AB4AE16A6942D94C5A5292010A544EF3F7EFF000F305B2F03B1B62E0F0F212856C79212B5777BA4FC081456E87AA0D8B8A9A18E0FDABB7316BDA78B562828BAC9492094D4E573660326A88B74F0D7959159D4AE9CDBEB021C41BA35F7865C8521C1494751530B42A5244B039041EE30F1B4F10BDBEBDABB855FF4D2F12C6A2D2D65E990615AD73876ECF6D144EC4241001512CE970EC40A310C09E0CCCD9449FEA3D25C7A83E212EF95AAAE0FA2D4EDCE82D54F40DB8B4B5496E4B14A85869B41D280AD4E1213037F8E3E0076A717B63B63FE27A7764558A9BF975ED1C461CA0A88010264C458D08005ED4BB4763F63A561309B0A76D05CB44C560F033315BAA00198B9725534A5DAEA20B3B5D86510DBAB1F682782AE84F55336F45AB3A63D4ACFB9C325DCADD69BEDCA9DAB93B44B55717109FBB294F25012DA9A57E11C1E4ED3DA49FF00091D9A18991899930AD7324A262C90E4A9CBEF11F08667EB5CE29AED3FE30EDAFF003318542A52132D625A512C20A50C6852A582AB306538714C8C4A0EB259729D0D2648CC79528ABED366CED9568EF7434150B705750355A28AB1865F254A5A56CA541246AD88222363C13FE2C3B2FD9CFC2FED16CC4E1B12A49FCD4A1B8805446E824BB076A6872BBC74C7E1C76B7686DBECEE244FC3CB98A948520CC29092431624513BC1988486156BC435FB526FB5968F03DD0ECE0AAE2ACC36AEAC35436FAC926AD4CAEE2CD32595BAA1E614250B9092A8EF8FA8BFE0CBB61B3BB45F87BB3538398B54C9387F88CC96A4160E7E65252FE3E397257E34CD9EADA4BEF24A656F4F0A3B868A2180B7FB456B5BE709AE88E6DA47F24E55BC5F1D5B8F1B55132EA0C953EF3C5D5E9D8C92A31B9F7E71DCD22728201700F16E94B3819DD8D6296C2A7BC57C97DD3E04D05CF5E2ED785366ACCB58F51D6BD58F0628215F74A44FA5C7132606C02B607F29DF9C0F8A9CC1CA8015D1C9D78BE4096196912093877090124D9B2AD0876A50535A441AEA3E6C5A9C712CEA40D0A0124994883093CEE361BEFF00913882ED7DA650950C83B806B4CB47CC8CCDAA2B3DD93B3810856E1AB17009C9E87367A3F818809D40CD8E30F3EFD53C435E614F9655B12093C7B991248EC31576D4DAEB0A5313724E4E2F6A87AE834CC459382C2A532C1291403FA4824DAEC34735CD84283A7778A9BAD3B2EA9C5316C410BD6094852810024907BA54A24446DF3C30AB6BAA61090A3520D0DB515B81E65B4021D24E1D135451BA93F0F2F1A07E356E3487E1EBB34D53A554CFCB21B82A0AFC274C03B7706082277EF876C3ED159481BD42E4A9C55AB9D01A52BA42C3032D26AC3880CC788A171C3988645CCCCC5FAFD588A4AA53B49420A2A13A95A4BC2492A9E768124EDF9E34C5631C03BC00B1A8CAED91B97C9C97018C27F95482C00606A46E97D19ED435CF9427B32BBE751B4953A5BD491B82AEFB762278EDF1030C7316EA277AF5BB7BF0103951428A4A0D0D0007E808F06F386E9375A8CA8FA1CA770D48AD4282D06542544A34C19E06E7EA71A6FF00FBBFFBBF58F3BC2FF2AB9329FF00F6C07A7CC46E8ED4533A814E94ABCC21234EE06B076EC4C03B7239C6C8539F99E85EAFD6F1E851516292066E0FD40CE3CD4DC2A6DAB453B00A9159B9544FA677267B6F3826594955C791CC73CA3661A0F08F6D0ADA856966574EA897788DC499E761FF006C38A19B277A6ACD979C610906A123C2063AD38C06D0956A483B2BDC924900FC248F8C7C3076150F302AACF56D01AF5B87CBC21AE7D14B7B55B965A7A56F9C3AF91EA162B6950B3CA9244CFBC7277DBB71FCF161EC64064B683EE1883771C493E514DACC12B00E4C07F516B8CD9A95737B56279E483AE95A2A8321255B8F61CFF938B2F66206F203D58B1A3D5801D6CF4E11556D73498AA534CC034AFEB9D21ECA6433F7713036E3E07FB0FA73F496CA941C38019EB4DE2F9BD7A35BD6253310482379851C9A0B5AACEFC5FC5E3BE96BD87E4707A240C831CC022D4E3CA025CE24002A4E6EEC2B47A791A478553B2E12A2906607E5FAF61FCF7DB0A6224FFD30A3F8519EECF6CED0D627363407D6CF4CAD987D5FA878FC299096DD08489282278E4EC3E1EF23D87CF0DB869237565987C42C284857ABD72D21C310A7291A9492F7D44578F8B9A70BB4D5A0AD6D0552BE35B725C4EC0CA637067B013F2C571DAF4012E69604825F324DF3B3E56C854C4FFB321D293460183546A6B5CD9B96B7A2ABAD4575A336B578B7AEB296EF68AF1757EABCC7299C6EA699454CD0EB4A90528A82A20B6363A77E31CFBB490954EF8B748734D731EF8345E9B1669461D9EA45388BB063966FCE25BE6DB83F9869329F54289D57ECCCDB6C6A9AEB4C164A19CC8D5396AE8DE92635B7726AA1248FE249F9E239B6B0E94E114A0011BAFBBA11E848A8ADA1EF05337F16015101CEF134B9F07143EEA8CAD0DA2D885950538B4A9C76489D654B4FD3D294F7EF8A914089ABA30048B718B0D019080EFF0008E76CFDDA100BAD4A57A52D85852B49D844724FD081D8FC70BCB6601F3AD452ADD3EF1B404A9AC5BAA2C314E1210352C84A4440951D876DCEFF00A704A8C82879DFE5DFBFC7DA7B01C6D8D490C6A2C731190181D427DE7F9E0599975FA46471794B4C1476131EE678F8E022A226A53500957C5467D2B194CFDE9E6D0526E8EA145B513A74AB6DB7E601DA481C73ED07DDC65A1D2E722426A3DDCB5DFCA31FDFBE63D637C5D2FB7AAB3A9995986C1712FDE03A94A6611F76A842944A41800011C0F8C4C63E38FE0D6CBC5A3F14CCF9B843B871B5DE94A61FC606F462DF57D62CCED9627093BB0444B9ED344B586DE4D52996A71A8248198F0319ADFB4133BA73BFDACBD7AB8517FCD0B5D465CCBE5495296869DB3E56B2512D3B484E95D39053B04913138FBB7B3F1527FF000AE124A644B94B1874A6890093B9522BA82470B88E4CEC2499A9DB2662A6AD682B2A092AA007E20FA52C1EBE020FF557A836971E495B94AE686444A893006C4991DB6FCA711AD9E9EED5366CC590806A09A33DB4F1EB4AC5F78CC72A5E270A4384835DD3906A06A35C0F3E1659F656F50A872775DF3264EBB5C9845A3A9795AE19668BEF6E252117268B2F536A5A94028A8B2A09D5C930246D80BB63B2E6EDDD8388952495CA5CA5032403BAA1BA7752067560C4D33A0A55DDA8993A7ED118896E1722605A141DC04AC6F90C3246F5F89205E2CA28AF4F749B3166DCB99DAC3477DCBB990DCAC97CCBD5C97E959B9DA5C53D42E02B43C80E315548371A5495B6B20C820E3E6F62FB5FDA0FC1CED5E2319B3B63A0251885998112267C442CD7E12924BD46A2A5EA22CFC46CB91DA3ECD48EF71930AC4844CC3CD265A8A0290E011310B0014929500CADD762080600E46B8F85BE8FDE939ABA47E1AB29647CC24D58A4BFDBEBEA1C537555096F5B9E5BAEAC25F2AD264104242523603132ED57F8DFED3ED7D8276649D81291394832C4D1859DBE4946EBB8554BE67C0C579B2BB089998F32F118B5773BC02F73752E90544A594952405067A6F5097107DD2AB357E6CCEE9CEB99ADB5B4B976CDFB5333666BE55EBA5B5D0B5465354975BA8584B65656909482E1D4952F98DA0BF81DD9CED1F6F3B572F6F63B00B4295384FEF17297F082B0A049BA45B43966F13DFC40DBE9D9BB0CECFC36216841969929C3CA98C959DD20A580AAB77789CD816CE33019DBA88D78A9FB427AE7D5BB6DCD57AB4359EAE1962D2F2165D65DB465A52AD142CB0BD4B48438D5BD96D0A42A0152549838FA9D3C8D8FB330D86C6A84D9A9421280BAEEAB703140C99B2762239FBB2F8629C72A74A9403ACEFAD22B33E2A9243B9CDD85784588E45C8EDE68CEB93329D7DB9C6AD570CD96EA7AD60A961EF25C72912E3616A9580413B401BF6EEDB271417294B54B0ABB122B99A2B3157A06ABBEB60ED79E254BB31DD7203DDAED91D7CB85DA5D7C3AF84539E283A3772E8936F5CAAECE6D69CD4D555779CA76A90DB8ED5B9A565B4BE8553A4EB40400144000123012368CE18B4C94AA609609050E024D456CDBA6D9740F155E236C4D4FC66694A94B2A034497F87A1CDB3702C63283D60CC193F27789DEBAF486CEC2EA6D7D35CFD9932ADA1A595BAE1A5B75C6AE9D12B714E171492C84EBE7B4E1F71EB050809484EF213BDBB4DE700D4E6E0F5CA94892766B1B371A16B2B2A217424BD8B16E433FDA1BCA8BC53BAEEB72853454A92AFBC3AF28B68F22657B1290A5141F48E0EC2311C32A5A6692109720D4DC972D5BE59F135768B4244C1DC7C60292CF5034D72FDDE90B6E917483A97E23338AB20F49EC15B9B6BEAD1AEA1010F3149434693014F3B4C1052895402A546D8904808127E2242422AB1420067229956F9B9A6514DB1B424E1E5CD20A503759E89166A9CAE3EF478D327861E8AF573267831B9F4A7AB5935CCB5993A677FAFADCA6BA653EE53D6D0D355D4143AA5BC5C2EA4B0A9075EE3711DA9BFF0010E3B2D3FF000C84C46244DC74A9AB519A5482B0A4858292407BEACC03650DFD8BC6E246DCC39589491884992844C05CEFABBC4292490083BA12035428188D5F690E44CD7E223ECEEAF7721661ADB4E66E8CDE9BCC398ED56F5B8C3377B6B6EB0F56A2B1A616D8ABA76D865C4B89A80E2010B4948823047F849ED16CB4F63518748953674A44D0952B74A893316412D525C8ADC06AB444BF1E53B67674C389C389B2BBC28334852BE20025094245C2401BC5228E496A97811E0E3A4B95B2F74EED77CB2A28DEADAD4B2ED5D5341B5AD6E2502520804B694B8A73D293C9223DFE9B76666CADA3B2704995291296659DF284EE95B80C4AAAECC7836B14BE149DADB36477F25099D2D24A97BACB5153072A373F5734CAD3BA335EC65DEA6642BCD52C21866F74ADBC4A82528FBE36ED085198006BA91F0ED81765AC6CEC66D9C228051C4231494EF07BCB99516A86A6AFE0E3B17668C3E29240203921887268CEE356CBEB1267A9173A6E9EF88A773256214AB6D65D6DD50F55810D2A89C6690971B70081A06A9503DB7C7E7EBF12D18EFC3BFF0015D33B538995311833B4A7CD54CDD20774B9CB2482D43BA68752E38F63762E5A31DD9DC4E042C266E2B033F0F28A88F8672A5A9092A7A6E85FCDA8110DF317D9F7D06CDDD7DCF3E2015D72A2A277A8173A0B93F61AAA5A37C24D129D70A1B2F2899FDE94C844C89E71F43657F89FFC31D9DB3247E676DCA3885E111BC17390549528546E92140825AA74E714BED2FC11DAA36BAB1F33098F599B37BD29A994E08002666E6EA82A8410185AAF122FAEF9A6C398EE1952CF956B05C2DB96AD2CE5761E65B4FF00CFA92D34CA12D251E90A6DC61092A40E4C08C7CCBFF115B6BB3BF8BDDB6C04FD953A6E364271729C8652542CA2004967CB50748E93EC6EC45F64FB398C38B5091367AA64D120CC4ABBA4D4A5254000E41621833359845647DB5D9AFF0061F4D7C24F871B786DCCC57EB952E78BD5BDB5853F6C65D2A61876A9B4FAD054AA66D43581EB3AA6667EB7FF00857ECFECDECF76036561309864E1E78909EF7E0DC51043825DAE853F534A3C7207E276D597B536ACE4A4858973B7410E5C0BBD4B1DE71C69CE0FBA3D975365CA566A8B93BF7CAC1436F0C3300354FE433B38A6F747A756E6018DCFB63ACD2BF86E5C80C5EC79E4DA0EB109C0C80F2DD290DC3562C78F0348E3D43BCBE9529214DE993A530981DF68000F9C0F8F7C33E3A6A803F11D2A4834763A654772E5ED489AE0F0B2C84BA05001F2DE94177200CF3D6205F51EEEF87AA5D61685D412F2436215BEA501B769E781EF3CE2B7DB18B1FC41BCEC5EA433877B0A52A6EE7CEC5D97879611280482C122CC00CFCEF7AC439BAD99DBD3D50F5DD5E5B687D6E042B61FC3D8EDC0D84476EF8AAB69E2C05A9CD8D0034EAC1E9671A44BE4C9050DBA1C8161701D9AF52E48D616D92954CE3A291858453B6D14369442525C05052A52473090772393DA30D72710264C0122A337228E1CBE948525A02265010E1CE56BBDA81C70F2832CD5999D61DFF87E80842D48D152EA8C212D2D30E281046986C93332982419DF121C3AC94BBF5D5B3E47968F01E216B13182880C35F2AB780846A9CA1B1D3FECFB5A83B54EFF00CE3AF5290EA94B33E95A86B2A1E9D81246FED84716B2011BC6AF42740323AF263E11BE11D6495543A6F42E6FEF9421EF998AB2EAD9AAACA3750E37C246A689F62509D206C380047B6F81028900924D3F7F310E3B88FED4F80F679C206E3786DF55334D36E34A5215AFCC5294756A8912653B08F89FAE31CEA63CEED1FDA9F0F6FF00BEA63A5385D1253592A5A8AA34C9F56BD802373FEC4E3D048B16A37481B1494A65964806B50067783E5ADCACA74565692D94406D00949F7D86C488026206E36182E40592E49A51CDDA9ED8BDEB0D0BF97AF8F0F6D0B1B6A14F5293AF4B4132A4A4E92440882933F3E76F9E1EE4249DDB9BF938D6C4D6C1F3E00AD458D4F0F7951E0C29A9CBC86D807FE589542D4095095AB512A327998E236C48B052C30703C2EEDEF3D21BB1330A411A07078D08CEA41BF085CE58658173629D8714534CA4952813BF987B1DCC8D24FC3EB389DECA49A30E6FE81EF4B1FAD220DB5262CA96378B9512CEF601EA1A82F7F18B02E9AB9342DB2A0085252352849102490493BEDBF1F9462C5D969577925CB3393A9B973F4FD4C57FB4CBA2655EB63CDCD18966B37D6AFF00D230D9637D3B01F01BF3FAFBFE5895CB72B4D4D38F11EFF6883E394536A3B79B7BF58E8051EFB2A7BEF1F96DFCB07A2E797D4436A0926A4DB8FBF1F568FA9699528946C9F63077DA476E7E118735FF00A27CDCFA1F7D2107FF00AF3D07981AFEFA651EAA996D348E286DA524FF00B76DE77FF6C3448037565BFBB33739D2F6B31CB48789C015BDD806315EFE2890CD4D92E20C92292A04FF00171D8F33C7E5F3C55FDB4732A7005A8AB700F5D62C8ECB80102832A6BE60E66DD6C228FB37535B9AB8D7A97A94E296A52B52A7590A30A513254A1D8AA4FC7738E66DAB3548C43151A28DAD426E3F42D511796C603F2F607E10D407C34B0CC43D3E1EDF566ACA79F3A50E3AD8B936D3B9C32507A15FF314CC26B6BE99A4AE614EF955474B7054A5C9924920E36619B85249DEF835A58B371E76E70E186F871408C956AE6FD3C6832AD2016A435646ADF5A809799F3912A80B94BCE257AC91A89F38391276007B462AFC684CB5AC8157274CF8370CACF13D42D952DC96284DCE77A0E36CB9D5CB65594892E84B0E0290E050D260C42A0ED0637F94C619978869973F3568C2B9DB5AF036D61EA4A5D00900D2C5ADC00AF9E5A968054BFB9ADA841DC96960824C4682393C41DFDBF487391894A9006F02A232BBB0AD3D2F9BC213400680000B66FCABC5EEFE705AF81E7A446D3C76FCB1E13F11209AF1CBDFA08463CB81614A2A8D009D302207F5DBD863C8C8F216D869C08EF13AA0EE046D23611F4DFDCE069C06FA0E767EB092EE397BE3EF9C266A510E95848FCB9FF07E7F438550B5020396AB0CBCE35249A1AF83FDF2D5EDD36B570FB56FECC0E86D35D33C651EA9672EA0E6CB551DC9163B4D165DD54B597970114ED135171696CB6DBA9D2EACB4B0B1244E1A7B23FE1DF60EC8DB8ADA69972C1EF94A7DC4A4B85BD19DDCD5C528D5CA93DBBDB8DB9370AAD9A04C32D9B71056B4A83115709D41B65933C65DF27665CD3D6BEBDF593C41DFA8DFB13FD4ACFB76CD54342EB016E356BAE78374B2E7989F2FFE5D081E4C1D07859C7446D7C1E0F67ECE4E1A4293FC39612D4C83508A73E832853F0FE5E3862D33A7A1490A53B1043B9356D3A9AB67137ACF48690A2E358F0758436616A761C483F88A51064999001F97338AC01993662F0C9040985AF70E6EC4B3FB34223A0A6CA93325CB98B50700E428F9E4D6A9F11781743735B7554F70CBCF5CED97AB555D3D6DB6EF6F7554AAA7A8A5585B6A5A9125695103CC129D6990630F987C7276549EE2782B4901252C0D2BA9CCF88E5110DA9821BE67CB00915767CF4E02D53C78CE3B17DB05D6AE9AD3D35ABAD7D11CA1D6FB15132DD23198A8AB065DBDB34EC36969969FA572DF74556BC94212971E0FB5E72C29CD29D4406E9BD92EC3F6AA66F6D8C0C95951DEDE5C996A203D005139710F619442B1BB6B1B810B461178A92140EF4A9334CB92A5135599601054A3720B5A8ECE26B7EDD7E994BE8B2780AADA9AE5202DB72BF3237496D2B1AB4B89A94D82A1C439AA758F215E84A0EADC81AE3BF02BF08A5E1D58A9782C39580E019728FC4050A438D7843261FB49B712EA337128DD9855F00505292583294E5D99EC00A9BC436EBD7DA57E397C61592EBD35CA795AD1D0FE92DF1B2C5C2D5961976A2EEED18968532AFE845B5C2D969D50707DC21640E2003BF664F643B2934E1F66E1254B09F8404CA40008602C7ABBF1845737696D79A90B13A628A8854C9854B98CA20972C0338043B16BBDA387866E8C35D1BCB3FF0028C53397DA96D49352FA82AA1CAAA856A5563EA29D4E5579AB2EA9F2428AC951064E17ED12D5B77152674A511290B4120161BA963D694C80371468B37B3DB0A5E130AA5CC037CA1C3B3EF6A33B90454816A90F12C2C771CF968BCDB332B15D49F7FB2D7B37464979449A9A752168F31309D68FDD265129983B8260C870783C38C3B1501F000D4D18B8E26D9B57586BDBD862B4280751A8005EAE3C8F2D0D2B0E87547ED80F18994AE2F5AF2B741F20DFEE74F6F7692DF9DBEF0A4552D7E5F949AD7A84DB5412E2C1D5E50AD5004479870D92F05874E302814D14D4352E4024917E028DC8C54D8FD958854D2658203920E67DE7C3378A52C83977AAF9C3AB79DFAC5D4CA14A333E7ABFDE3325E8BE3CBA362E577ACA8ADA8453347595B01E7D5A2540A520263692E9B7654B94990104179697E0C052F12BEC8611783953A5CD4B152CB30A105C82682EFA103585FE6BCBD6D696FDCEF75CAA97DA52949B7B32C5038D927505A53E600B03F0B9A4E93BE9DB7881ACC040C8F0605F9B7ED164A107B82D5A50679727AF8F0CACFBEC73EB374EF207527AD4C75233A58BA735B9A32F52D0650AFAEB829BA46121C7C12D552986FCB75456D4C000812481B9749F266E236762B0F255B9367E1A64A96A7200529218822A03BD6BCCDE201B5F0F3BBC4ACA0AD099A952A580FBC90492002C09258B3EB58BAFA5AD371A65515ABC57F4DEF54EBA67A9D549539AE8434EB6F02950710AAA505AC854851820C18E71CC7DABFF000F9DB5ED1F66A7E1862D7325297396C999314376615905B74D18B367A358AD97DBBD91B276C48189C1254A96B9650172D1BC169237540934524877A8ADC8710CCF5873EF4ABC30F873EBFDF7A91D50C857A633574FAFB9672E65BCBD76A5BB545CEF172A1AD432B7295A5E824BF58D8D96A8002A67D29B4FFC307E0C6D6EC820E0F1CEA082430DEA39B924001B563514ABC337E36FE226CDDB182945185582506AB420B96A33295CEA46658C530FD9E977AFADE9B16DF6D6DB6DD67994E85A08069AA5EA97180504C052520830AE08038DFE91EC9C4A365FE4F0D2C3776E16E0528050820E4EE69C9E39E7676DA5E270604A96529439720077CE9766AD85338B322875C6D41870335692D3D4CE12468798710FB7FF00B4A96D84820929264030417DC36CF462B6B7E7560092A2B5295932D2A17E20DDA071B731186C46F0701EB572CEEF4A55F4F5787CAA3C53F4273065FB5E4EF126BBAE46CC169A74D05BF34DB9815B6EAA6120A1A72B9C4A995EAD32493AA36F6DB8CFFC47FF00868D91DBDDA5FE658092838929503325A015851724966AFC577B6568B6BB2FF88B8AD9E12A134B0DC504AD44004300C4580BB33758F28BCF82E5B6CDC58F1719193494CD9D1F7E6EA18A861B5428A43454A2A5A46C60C482236071C11DA6FF00FC78F683140E3A463710659F8B744C58A5C86008A3BD4F068B8FFF00E70998B95290B480B42777E0515258331512125F903A8778643A8FE3DBECF2F0D74B517FA1EA75CBAF19D6D4B64D9B2E654B791422B1FF00DE30BAFA87EA21B6C2D209790CBEB4CC796AD448B47F03BFC196CAD8BB4254DDB866CF99214164CC62C526AE5557E19877ADE37B73F1471FB430B330C9299614950052B2B7771F294A774E6EE4D86EE94A953D41EA578F2F15D77F1119FECCE586CB4EFD2DBF2DD85A52DEA3A0CB142969BA043554E36CCD51D255508452A1014A590B54E3E8C6C8D83B0BB33224ECCD9046F484250B4861BA18641F2CB48A27109C462F1D367CE24A56490545DCB7117A67E032B44A0AB658A52DD2A14C374F4BF724091A4B41001547FF00B49FE3E7DC0DA24A898772F5C80763956DA7D9F37BC06183A58077F1E25D9ED11FFA83730845538F56F97E592133B713CEE07F93B0C33E366514C49A125F215E367A71CA26D84C37C292C2A43B0A9B5DB4E1C2B7683F986A699DB83D72352EF9095B817AD656852B52A5494764956E01076313DB1536DB2BDE98778D1469771A5DEA3E9C6273B3E59025BE434AB83404D32A508AD6189CD75C1E79C34F540B4E2016D296CA6572A0411AB7D8260489277023155ED22BDF550EB9B3B9A72BC4BE5206E870413912DC8E4D4E9AC16E50AE550B8EBEE2D4A7032B6F40469482A5A4854490140279DE24F1380B02A52277C45C01522D5356F0B694B3468A4142D56B162333A91616D79EA4EB31575ADFA2FBE3CD3A1D58507DD42CA496CECB984991A41913DB9C4AB0D306EB392F502E4663A3713C21A279F8940972F4E9E83DEB08BA7ACA4A7A75AEC0B70BCB4ECA5A82A27800F2071EE39ED84F17305DD8580CC1A8BE9E1A88230A6C059C3D330CFEFEEE0A2ECE9A9A469E7D6FB770099A9FDEFEE56EFF00194A206D3BEE78F7DF1ACB2E907DE47EB0E1088B87DC9C652AA22EFED44F2E38BD4C253DE1B007E23BC6AD8FD71BC640BA2BB3E961295328AAA94405252801B046C56526674F247D79C6F2C12A019EA05D99CDFD605C5FF28F583662EAC5512D5732E8A91BA14D9D34E37D8140064EE3707B77C3AC993F10A3B9A97CEF50685B9D6E7286699F2F5FA1D61576F7E959479BF7D0DBF329A3275EA237D33200E3DB7DB0F72253357F50294E3586F5870FA7D48FA65E70ABB4D43D710EAD74EA6DB4FF00AC847A74A42400506206A480A23B6A389160A5FC2960F5A0398B31D1883AF5866C5ADB7EA410E6BA24D450F969CA1C2CA76C5B95CC3B4854C35AC4F9C4AD4E6F3F8B6D9209EDCABDF6C4EB654B0771C31E59D395ECF4E4403103DA9301724D5DEAC1DBA96FA53589F5D3764A295B438A04E81BA446E013CC9DF689F6F862C3D9F2C05A4D180074776167FBD8BC40F1CBDE0A0EEE73E0737BBB75E261F44292DB10951063633DA073F59ED038C48A5FCE39C43F1F73C93EBE7CBAC094BC204841D84FA3FB7383D173CBEA21B917E902A9994D428A8881FF00A4E91223B6E67DCFFB61CD7FE84733F58407FAF57BCC69EF5CE03DC1B4B74EFA16A2125060CEF31EFCFE9B8ED868920EE2C713CEAECD77F1FB43CCEF9FA08AF2F1021C7D9B8300828432FE9D4246E081ABDC089F7E7B62B2ED80713070501D53F73F48B23B2E1D02D9752C29AD6B68A42CF887DACC0F959661DFBC294037B4A082204EDDFBF271CC3DA20656249603E266B9E279F58BCB637FA7FF00B471F284DE4CCE2EE46CF566CD0CBCF1FD8D71B4D5DC032A23EF141569A6A6A8A26803094792EAD4EA495020ACF7C33EF77920805F78014B50001AF56BE8C78C1B87FF00569AFF005FD9F3BDE24F755EDADDB6E550FB4B4AADF7F699BEDA2A9980C9A2B8A028201498D4D54A2A10A33F8811C8DA1D8FC195A94A01C170C5DC1635A6752D9BB86B44F24B15CB02A020067A55D98D74A8BE90C2B48A8A2A88254B75492438B51535E58235009223512526413DC779311C4E194859A535E1CC5CF487EC390102F621C0A86AB33D5ACF93691F1D7D28A84B84FEF16A4A571C428E95408DBDC6FB7E471BE190BDE0E0D34CC6BD2D5D0C213AF6A1373C296E3580150BFF009B00469911F01267FCDF0E108473056B75F33290A3A67888FD7F9E32323979FEB525E09D32400001B473CEE67FC0391E77CE8F79C26BB8E5EFDBFEBE94DDB940101C5384811AE441D8ED1DB91FE0C6C8F9A138B13A8E98E40A7AD61E196A93EF617ADF4B0CD35407195496B5B84A8255A62742E532488DF1670DA58D941480AAB9538617B641D9F952F530CB27B3BB3000AC4494AD6FBD44B5F522E5B30733785B2296D56BA66A92C96836E6D4A88A525D7DE900F94A2E294842127D4900800881DB0D38BC6E2E7A95DEAF7855C1E576E5A1E17787AC361B67E0D8C8901240B81EDF5A9BC2DBCDA6B65B19ACBB29B61B6C1712CD42CA9E22264B6D95824FB7B9880061191325A0A7751FC4C89AB13CC7D47331A62E6CF5A4F76B6BB0AB0E5763416A52F06167CDD7DB8533B6FB1E5E6EDF44F08172B8B4C86DE4F014CF945C7A0F235206D1B76C1DDC4B9D337B140A92EE521DCF1A1676F37B67A610AA64B299DF116ABF1E9EC66C4328ED793328179BABCDEF357BBA9095B55450F7DD68D446A4B0968212D12CFF00A60B8DC9D32A3327046270F80387EEF0B2D72E63515BC43160F9EB476B3B422BD9980133BC9D24A920B9A3B3D58662E2BC2940F07F70B06504349A86990A435E94B6F314750DAC8DE5148D1753E5C10015B61C2410A1004B08C1E2132664A9D394A4FC440DE36C8B59EE2BA023892AC1EC49B2C04614A480C49481D393D7E83238B0A7430AAAB6D253DB9809F28AE99B6A994EA4A92AF2FEEA8084A4AB4056B2DA634812260B47F966111384C215BEEFF31677CCBE67C1B20617C1E1B65616A30F5150400E4FD5B8E70E659DF6F53750863CB404E87BF68AA56A5286952DA4B3E6264992924A778323787B9499A25284B504FC2C1F21A93734B0A8E194798C9CE42F0FF0CB4D549398193B70B532CC42CD9629DE3AE992D8D505CD6B774288E606E749E2239DF9C29226632520A0CD7268082CE38D98F2EB0C1889D2E7BFC2C6AD421CF1EAE79DE0B6FDF726E814C2ADD42FBA173E6AA9DB42D088DD28792D8795CEC56A93DCCE034CBC72711DE89A007BBD5817B06BD1FDBB39C14A52B78805CB970DA36B6AE9788EF9C9AADAB71B6ADE8F298009952D6148830529299107B027E26230F73F153312842661754B484B9724819BF85FA71D861908527BB1B891553167238001F9447ECC56FAC694FD3D63EB521FD092D8421C2A6898750439B42D248D4924F79C36292D3028F1CE8417F3E9CB8C830D889625EEA92F4AD1EAD6E35E633E10DCDE72DDAEBA99BA4BA5B683EEADEA4B692DA98496569D27CC7929438481EA00129E7E1824ED032A4ABBB077C248428D7E266CC1F2D7C469D85933D41452E9DEF88106A1AA326CBC83C32C7A0F97AE15A5BCB974A9B7252AFF005A91D79A481040820A542091DBB4989270FDD92ED86D5C1C8561368291390ADE480109200513C00667CFA963108ED0763B03B431C8C5E191DD04EEA940920FC2C4B00781A039834890FD39F08F66BD22DCACC19AAF175A769DFBC3B4D71BB5CEA68C3CDBCA0855350B8F2E95A010840500DA353814A224926E8EC4E3E52316B9E5090898536097E45998B31F57B4457B47D96C062E44B95325EF6E062E4F2CF2BD35D22EAFA2393F2BF4FF002DD0DAEC235B08435E72E21F52D234A4140DD481B8404C94CAA427509B5D1244D9B367871DE90658A5054BE5435A8FB441B17B3B656CE908C3E1A46E2C0505919E5AF30DCCE512114A5392B92CB2614A74AD29094801475C196C6C532A832446E462532E71FF002C5E1E5531050026664154B9BD859AD406D105C74890A98A5252401400802941EFD03C34F9ADCB16664D5589343479812E02DA98ADA56AB2DCDAC88579CEBEDADE1F1F28103B6183642317819D8856D55A712958599428A092A0425C3646967A3C661A5105853788481570ED726BC7870688939AFC24F492F2A5D55D6C5442A352961347454CCB29332406D286C2920981A8491078E75D9D8A9D22562E4638226CB9B316A9677524A5241094DA8D666ABD6D12FC06CE4C84852CEF380685BCEAE7A35E11941E197A5964A94AA9B2E5AD491BACA6DF4AC2DC527FD10F161B49A8426370E954080248C46A46CEC3617173A794909980801258D4B8A8B5065C4521CFF2685AC10484BF1ABE5ADEC6BD184489CA561B7E5FA665AA0A3A5A36DA48416281945353F96957A4869B4B6DEB236528A02C9E49D8E1915B31387DA788C6CA5282670002144922801AB926CEC35B5A0BC46165AA4CB12D20149651600AAC5B8BF2A6B0B8AFBD30DB0E2E434D34D95282BD2A2A023723D3EDDFF4C3CA16532D89229F0BF5D6ACCD4BDF9C298397DD10140DEB9D33BB073788C79F7EED98692B934EFA82FD4203891C93310AFE7D8183BE1871F8900281BB1B8F1A5B8815AF2899E011DE00C961606DA74F2B52B10AB301CC3685AE85343F7D68AD5A52197374826015388092600DC1209E0906715AED9C5CA1DE7C24BBBB5086A0F11C45F489B60B0EA97B854433035B861E4DAE421A1CCD76BFA9CA55272E161B617FBE94D390A49206AF4ACFC47A80E37C56F895A713355BBF0B2B3F2B9CAB4F3611229735052C464C5DCD7D9C8068256EEF568F3DCA9453D130F1052EE827CB3BC36A0DA55B900EE047A4FC254FF2B99290260506550BDECECCD9DDFD28DA4E52521D89E57636734FD20DDAB93770A234614DD5A5C0A6C3C8052D2B59298F5A52ADE40E2373F2C132D250D5B00DCD80A8B5A90D1365998ADE040FB505FA410A6DCFB097FC809A44D38512A2A1A5400FE1293C6C798FD631A4D96A5FCA78EB6E1E61B38564FF000B8D5CB7D3A33FB1031B0CBD6D6AAAEA509A729084BA1C68AD64830B542E413C12B123BFB6131384B1B8A0E40BD5AD4A36B7F110509AF563C287CD817E908855BD9456BCB65C4374AA5C32B52BCCF312A04CA4B657004C428A4CF008838F7F349D39DFD1BEB9E6D5F7BDE07C15F681F6BB2BEBA87154AA4A5BF310870AC90B585902504F6E67569E36338230D89495B115243569E6DC682129AF351B82849D0D4F838E75AC195350DD2BAE6F5AADF46DB14ECA25759581B52571325A537AD415009015A4F079C3FE1A6051E67991C4EA035BD4086D9B20A525CBB3BB5380BB5DF519428ED366B552A88AC59FBC410CBAE92A5BABE00404EA5A49EDAD2983227127C348DF486D01B5082ECE2EF4B73E30D935052E1C5EAEE33EB9B72CDA1D7CB945514D46FA9694B69782945B78053A07E14951485264A40526153A549044823122C261CFC20664077B357C1F322D788CED023796876F848724019E791A07D385E1D9C976D43EA6FEF08294B6A05928900EAFC73C1900263E7F5C4E765A0829B508AB69D07B34D220FB4D0A56F070C5C070090C0579FA65C25CE4A4A29C36944881009224FA77E771B6C7F3F689E60D0C5043B02EF60D666D3F6BD441B1D2480A502E1377E3901723843C21E3E413F43B72601F9476EDFAE1E650F881D1BD7F4888E3C67FF1153D69C7DB47B0E981CF0237FF003FAE1C1033A59B8DE1B505D4435867C74F4CB381F47565B51485477927B7C373EDEC77F6C12AC427B9EE08AB3822FA72CDDA91B0C3118933F7A85E95B5FC6005DEB06870A9C4810ADF81C1EDB6FF005F9FBE1B4CD1874A82AC6A4D1D8871C730F7CDEB77309EF9408604B248ABE55ADC5699EB7880BD77AB61CA5BAB7B82BA57D2160821322356C676F8027B738AE3B487BF4CC527FDC1BA0D6C469AF08B1BB3AD282106AA2400CCC1E95240C9AD4CE29CFA934D6864B6F3C8703AF25F487825440246C5512AD277D8031ED20639A7B578398A9AA58500C4D357A9F01AD22EBD8F3C097DDEE972031177B68E2FCA8FA3308E30DB2EA14C943C90C85A0AC15071D535E582B0A125B4B7BA410541606C089C46F02952C094090EE1DED7074B53CED0FB264144D13490C54E59BDF3A1A8E1130327D4D2752BA1776B638A73F6FF004D2A90843D52752FFE17AB49A8A40148D6B258AF4DD75057A52D2DA0933A80F717803255DD2994A500410F99218D18B356FE022432F694B42921A800045DCBB5BADB86548645F76ADE2DE94686596DE654A5905456DADA0DAF520A93A1D4EA5A24CC27D4018C41F6C4818553A8387A53272097F0B545F8C48B0D8F44C0024106C2953A8AE6FD4C1554A452B7E7BEB4A89DD29483A811B890ADB68DB7F96FC36E0928C42494B2581AB80D70CD7D2EF4E706AE495A54B04300FE008F5F280AA712F361F4A86DD8FE2F8FC09E3E4793827F2AACCE79116E79FBAC05056D572BCE70249014ADE60C49DA773EF07E1EF8CFCB2B33E63D9F28C812112A5075C1FBC1A92B851424711B03EA9DE00E3E581A7E1CA54824D1B83BBD3DF9C24BB8E5D3DFE90152DB8DBBE625D0A4A0FE12163527692994C4812449DF8E31E22492A0C4D35E23ED7E639469175961B4518657F7DA6A7A1D41C2A0B782CA5082085EB5A89E373B9098EC062C3C4CA0261660EF46C8503B93C8C6E8295252A762C1C1616E07D72E9096ACCDB64A2AC76D765A34DCAA56B2C0AF6817E9E9DC2481FBC44A12A4A8EFA8F6DF0D5365D4900B50B350DBDF1F5DD92AAD0B71FD63EDAB255C977045DB33D68B9D3B8E25D6289B50532D81BE9782498471AA6361C8C2329044D49167B57AF4CF9C6AA4A58D723471A5B585A5C73351D1D38A7B5A1155554E21AA1A14878A348234A90DCA871DFD80ED87885B07252284BD2FCF967973E309AAC4E71BD066AEE757419528006D6680840ACAC440505A90F2CB8953A214A0900CA88803190BE2A4808702E589B3737D068D9C1CAEED496EA4434C10D1298350B77CFA875C3B128A7593E9E0248444C899046349892A41201A67EA1ED5802521080AD1EA4E94A87F2FDE16F95D8B956538794B7D29542BCFA8058046D09F2884A60C833A4711304CB3290EB04A7D75ADED6FD5DE3764333F9D9A86A6B5A5CFE8EF58291E0E20DC6A10BA5410AD60808210418D40C7689DF7EE30E387967715F08208A07FB70A51BEB09CF09126600D407CCD4EA417F6D0BD4DDA8107C8A36544081E60F5267B9D5C44EDCFF3C6DDDFFB4F9C44CAD89053573727C7F7784DDFDE5A8180A5027D44027FB0E099FD44E33BB1FDA7CE3CEF069FB7BCBCE1B7BFB015440D3D432D2CA80515AD20A49EC751D8C9F99EF85132C3684FBABFE9E71E19951A598B54D73F088F39F1F66D6E53A5D7115952B00A03442D45649D22132773CC0020FC3034E94CA602ACEE2A38D74F43410BCA995A0CC13911AD7461A6AF0DF5432BBED286AFA032762C53528D3527DB5B62564481248C02A9756B64457F5A1D7AC1A174A1B0734B52ACFD6C60B295CB7586A43016D15A0FEFD86D60BC848E75A64A931DE476818330186FE320DC711AD3EDC00ADDA039AB60403911EB4173E16F1891DD31CD34159ABF6734FBED3444A91A96DA4832B0B5007854EDCC6DB738BCFB2600EEC547C490E7C1C06EB9E99442B6D4D4EEA9B3A5F22EF4BB8A9F0D22C1B28665B7D8F2E357CBFA8DB6DE8F2DBA778109A9A97D40C3348D2F57DE0C84EB09428A651C6ADEEDC1A9D08170CE3830E1C6B5FAC555B6082AA660E5666A1F79C389656B356787575F7053B9772D363CC6298A54CDCAEF4CB3A5A53ACB9EB6D32B43C4A109074C70712191F20E43EB103C57CCAE7F51EFADB5551B7DBEC4D299B6B6CA52B92EBAB3352A3DC904CC9991000C078BB9BDBFFC8F9EB1BE15F791AB82FC69E7CE958425F0FEE95F1D71F9CF11C8F9FE7D99A63D0DEB566F37EB60F12E9589DD426AE3740B8A1EA05EA6DCB386EEAD2D8682D4A014A52824120130AE04F3F41F4C053AFD46AEEDCE1C24CD068E0D8F1A87E4F6E9CA01FDEDF65294A15A1531044150DA2018FA91F5ED86CC6282425EAE5AD5726EF7B393FAC39618A56E921B321C59A875E2F006E55ECFDCAA915A17E52D95074A675141104A4F1B49823E4303158EEDC1C882EC4B0A9C864C3D4C1B2E52028101CBDEE074AD9F3FAC469CDCBA4A653CE5A5EAC5254095A51A9703B480363DF71BF6E2711ADA1301DEAB8A9B1721B2D6A19F8C4BF664A494A00209D33150DE0DE560F588999EE75D577379297AFCB525C751A4A834DC82A108259109076489274C193CE2B2DAABDF54C4805F3E6FEEB4E912C42C04A525C8A54E4D5D1CD79FDD9CBCD4663A7A97128B45E6BE9DF9404A6A16B70AC1F5404B662125260444CC89C447B869A4925CE4F7B5EDCC6941C8E9732942FC32E1E14A50D2096CD4554FAEA5F532E53D3B248AB6EBEB43886D6A540A728569D150483A01214529588EE1D9530F721058D473B16AB9766AE44F385672CA8302FEF26E67EB07CB2FB2E0D094525130A69750DA0E95A5B25275093E92B04141833A9313224681215F6CB652660A4A96EDD5150A2A49F316A2541208FE23B40F89E37DB19191D286DF6CA069FCB2FD2D35CD5F77F39E79CA924B21132B80B1A00D5F01F4C0332582A3F092733535E85B41C20C425252699B5BEB7FBBC10D3B56404268D9615454A5CFBCB897BCF6FCC6D4602572A00048D2403F8BE338D3BBFF0069F38DF753A08286EA97745DC1CA1A5ACA3A56149D3541A712C2C37B92970A7491B1120EDFAE08C34B1DE0F874BBDB367CED084E640058354DF31AF0A5891E70A8A7F2980CD1B35C4572DB4B8E92A016841D92A77BA5B2A206A56C60EF38946025904022838D9BC0BB5FD886A9F3C6E92750CE685AEE3D199B3A429AD7686A96AD2F2D48B95D397D093E652B491F894CE8246A4EC44A8C7189BE02510906E0B50DFC1EC59BC4B6AC788C407CAA49770C0F0A9CABE10EE59D14F706D6961D4B8E0D968041712A1B14A923710469098E239E7129C2618EEA542B4A0A02F761A0397EB115DA13FE35063AF2A55ED7B71CA90F9650B5934EC25C64B45A31A969D215AA093262634FF7F84C367A0820166A5C83D0F1714E910EDA388BE5BC14050B644F1E5FAD64165DA66E9C8515A40E124A87707F4DFB4E259845B6E835A01AD299647EDC22158C9D450BD4BF03A00FFB9CA1C74BCDA99D28710A9E405024188EC67B0F903F5C3B21641D2A286F955B2F4889E3D408BE87A02CF1F12B52BF08D5D8C027F38C1B2D6EC4172C5FC5AA3C08F286D945EA6EC7D7ED1E53505B5904804C009DC13F96E7E58466CD798E0503756CC654FDF283E12598EB5E0850929080B52E7B029804830003C027DFE470162E63A157B0D2BE39D2BCA904E11CCC6705883A66FC7214FDCC41BEB13C16CD7BC541C961D2121415A881F8446E7FB481EF8AFF006BADD1341A0208B87376D6F63C8C587B18B4D979BEEAAD95B5B9BF37AD22A97A98AB89BAD3328A46574CE53D42E9D2B4C97600274051F56C676C51DDA34058590010490F7AEB7E043682BAC5B9B326B14B16C8BB16E4CC6F4D6D510C03685ADD525622A35948A503F7893AB74A507D4401213BF1B7CE0B87691343820B9B71351E3CA83A198A260DC17040B9A56F57D491D3C2240F42F30B59573ADB6DF7B4B4C654CDCE272F66865D3E53AFB15C7CAA470059108A55B8FA8AF4C0F32498387B12862D6998E5442588A1667E07539814A7040CF095B580CDC83A52E7918F79CB2CBB92B35DF32704BCF3141757C3752F2082FD31538689C6D5090A6D6CA5D5254242D29241212710BED7600A25A949150282B40CFAB172C7C0F18916CE9F405EB7ADD9F95875786FEE96C72A92971BD4AA656B4A5D4C9694E3615AD0950F4EA4A92A0A0371077DB15E6CE5AE5CC6B07663662CE5B33C8F1896CA9FFC12E40F87202C18035C8D294B42756C2A91BD1AA400477D89F7EDCF3F5F8E2480BD440266D4B14DFDE7052C32FB952B2865D524AC90A4A0949120CC81C7C771ED8C8F3BDE29F1FD60FD2ED525A34E9A6494A88714EB898D0522346A3104FF004F7E459E92A554120337B15FA47855BDA5348F2ED4D4BCC96974ADA10DEC5D426093D848246F313DF1BC996E03B80F41AD29C4640DE3C8FFD9, '1', '2022-02-20 00:11:12', '1', '2022-02-20 00:11:12', b'0'); +INSERT INTO `infra_file_content` VALUES (1, 4, '143fb0617e11454a8b73dfaaaf429c51.jpg', 0xFFD8FFE000104A46494600010100000100010000FFDB0043000302020302020303030304030304050805050404050A070706080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F171816141812141514FFDB00430103040405040509050509140D0B0D1414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414FFC20011080102010203011100021101031101FFC4001E00000301010101010101010000000000000008090701060A02040503FFC4001C0101000203010101000000000000000000000105020406070308FFDA000C03010002100310000000AA6000000000000000000000000000000000070000000000E81C3A70E8001C03A0700000E8001C2401808000FF000BF9808017F8E12007F8C00A0200040102BE0120C0000BFC000708045D03033802AA794029412BC69C0DFC9B206005261020356037F37E1551D33CB1AA1160BFC00070804553201017F4554D50A002A86AA4582FE0800D51164AA66503FE74CA48B22A85FD1551561552A98AB17F8000E1008AA640202FE8AA8AB00FF0BF98097F490007AB12D2D2920C0DF8F564AC2FE8AA8AB0AA954C558BFC00070804553003013CA0AA9AB1540F2A45A3CA95409B27953CB173C55474CF2C4593CB173C4047F80E9208FA27000384FF0032C387406A0CA8D58554D50D5895A6563526A66A82B06546565A61553541AA1013A0700AAA0000004FE37F03002809E449B22AA5D0303384023572E79F3B250030003CA973C6089FE2026FC3002025FE0003F22FE7CEC9AB9E58B9E6A6795030037F18227F9C26C8E913687E8A504303D48FE9BF916874874C6089FC4863E9E8000E1008CAC7F440C7F4E08195407FC4006A8404E9C1A932A1AA22D1AA0D39AA8AB8FE99492B8BFC708045FE000384023033D494A04A8CB0CA0FA261812401E5C7F8DF095A57F2400EA88115E885E3542585A530037F182384022FF0001C20115F0C00A02791303384023572A808794FCF0666B0E8F062D2B32107EC9B23A66A679724015FCC00D4C9B47D3D0001C201169CCA86B0CA0404E92ACAA62AC5F13FA4FF0033E3965D84EBBF58CCFE4D5B671FF2C44C8B03566563FA2AC6AA5501023A5540003F22FE4D93531D303003001582E79164BE50FEA463B41BD9EF975F7FD2DB5FD2F595FBE75D57FC0991F2754009583545262178D51498F5C0007E45FC8B45CF22C9AB0FF1BE1810AA9368A8312CC516DE535BBDEBA973F7DD6D7647E5FD2B29EC9C8FA0FBC4B2CB19AE55315601FE17F26B9400C00FA27000384FF22C0D58D48FE8808FF1014B4A4AD1C786F9C8DB79BF1DEDBC6DD53FBFACDCF1FF001F41FF0027D57C5D84EC6A13EDAC72C3533541AA101032C32A32B3E944000E1200754408C00B4A6006003FC60007874379C6DAFE7F2EFA09F58C5FACAFD4F98DE553F4BF11437B2A4C1A41164D4CAA640203E9E89B26A6501000384022FF001941EA480C3A44DA1FA2BF9D10F1C6A5D9FF002FCEEE7F92B36330DEC3D671B65FC5EE9C96CBD0E9C1437F2BF8BF01EA8CB0C0490057F2948001C2010FE9961958AB0FE0155055055CFF00B4CB59187FA6CB4BC59A4C69713FEB44FEFE9094C01FF2018FE9AA116C7F4E1D2AA0001F917F241969CCACCA495E7AA3E89C9567AB024095EC5D0FEE1EE1A610F10601FE382043FA6FE06006005800003F22FE7961562AA1E449B26A650127F1218F225531561FD32C1A910235326D1F49879522C8FE8810FE9404E1008BFC000709FE2B065635007040CFA503840335632B1A835332B32C2A899512B4D58D50554CB07F0E954C08045FE0003848015837F37F3D41960D48951BF9218FA4C30337C3D719392BCA4C4831FD35635422C0AA9D1803D480FE9404000FC8BF9E58000D509AC6FE745FCC046A46A8F522585272178FF0BF8FF120CC0CFA4C3CA9164BA048527F9F55000070804354006566A85532561C035432B1AA1AA1543551023803FC6544AD2D399512B4AA64AD1A82AA8001C20115F090605531562AA115C09FE5283D58969EA400AA6749046FE55022C801818E91A98E98C10001C201154C80405FD1553CA0EA9008AFE2025CF3CA8809EAC9583023A43A64832D31EA895A30070D588B27963E9E8000E1008B4E20203542AA55422C13FCA002AC5A52568D48AB8AA1400D50AA64021AA32B2D39C10032C1A732B2808001C2010001E5874CAA87CAB9D18032C37C1FD26C95F4E1BE9E549AE6025A62181EA47F85FC7F8C00408BFC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007FFC4004210000003060209020503030203090000000607080004051415160917010203111318195785253810202147671226272829464175223739303142505160616383FFDA0008010100011200FF00C8F7B6F6DEDBDB7B6F6DEDBDB7B6FF008EFF00868D3A34FCBBDBF568F8FEAD0DBDB7B6F6DFF32F05E27A12CABC740D070E28A1B86C8CAB97545539DCD6EA8AA73B9ADD5154E7735BAA2A9CEE6B614EA84CE5279A398C26B8A8B4B9065E0BC4F4259578E81A0E1C514370D919572EA8AA73B9ADD5154E7735BAA2A9CEE6FC5782F13D09655E3A0683871450DC364655C97919E27265278E4640F89D18470C91947DC2995099CA4B3433184D715169721F2F545539DCD6EA88A73B98C830CF139CC93C0E321844EB22389CF4DBEAF233C4E4CA4F1C8C81F13A308E192328FBD5114E7731BAA2A9CEE6B7545539DCD6EA8AA73B9ADD5154E7737E6C51BDF599BE318D0344324C0122631194528E1C86F0A69F7AA2263EE5B75444C7DCC6C51BD8999BE31B032FBD9E1197820E3D0E955E3A190380F5A0DC4A4655F50720E3D09655E06190C40F450DC367A69F4F154658A6EA2E6309ADDAD71E41950A5D335671E82638C9C0CDE05C09256951A542A88B259C450989C2704D781902495A54170A84BC6726CCD1CC70CDB95AA5C8319EBCC8B2607513070C4714611C378534E49752E99A8C4F40C9C671866CF2E03735558D62ACA80B152795F97026B8A8B549F62BD061E8738121A310681EB21C8971655F550AA22C967114262709C135E064092569505E974A73B66DD2E94E76CD92EA5D335189E81938CE30CD9E5C06E6AAB1AC55D50962A4F2BF2E44D71516A93EC839789164B250030346238A288E1B3D34E58A37B13337C636065F7B3C2319EBCC8B2607513070C4714611C378534E5D51131F73188D54458A92ADE5C09AE2A2F027DB146F7D666F8CF9B146F7D666F8C6C51BD8A19BE33E38A37B13337C636067F7B3C232A0C55F96C3D04C5C6575C74595F52FA32E4437CE7593B86D675B53AC9708DE5B48B0D1735AB8A8B35EA785CFBEA2CFC9B6ED1B99506151CC91E82631B346DCAD4B7A62A223799222C4C5CD6ADDAD4AFA9AE4437C98593BC6B78DCB3AD85CFB142CFC9B25DC29F96C3D03463668DC74599F4CD1BB737D195111BCC9116262E6B56ED6A57D4D72A1BE4C2C9DE36BC6E59DF8628DEC4CCDF18D819FDECF08D8A2FBEA337C67C3033FBD9E11B146F7D666F8CF9B146F7D666F8C6C51BD8999BE33E38A37B13337C636067F7B3C23628DEFACCDF18DD5154E7735B0A754267293CD1CC6135C545A5C832F05E27A12CABC740D070E28A1B86C8CAB96171EFACB3F26DFF7EAB2F05E27A12CABC740D070E28A1B86C8CAB920E5E27A1D2ABC0C0D188E2B41B894F4D396397F64FCDB15EBCCF4260090D0703471460E4378B2AE4BC8CF1393293C723207C4E8C238648CA3EF544539DCC6EA8AA73B9AC839789E874AAF030346238AD06E253D34E58E67D93F37F0C51BD8999BE31B033FBD9E11B146F7D666F8CF86067F7B3C23628DEFACCDF19F3628DEFACCDF18DD51131F731BAA2263EE6375444C7DCC65E0BC48B3A5280E81A0E1C5684712919572C0CFEF67846C51BDF599BE3192EA5D335189E81938CE30CD9E5C06E6AAB1A23551962A4AB797226B8A8BC09F633D799164C0EA260E188E28C2386F0A69C8CF4187A13004898C46407A30721BC29A7D2352D99CA46B797219B8A8BC09F64BAA88B2462450689C38C4D679901A9AAAC14CF4187A13004898C46407A30721BC29A7D2392E19CA42B797219B868BC19F6340AE131303B89838650CA308E1BC29A72C51BD8999BE31B032FBD9E118CF5E6459303A898386238A308E1BC29A72C51BD8999BE3188D4BA66A91ADE5C866E2A2F027D8D02B84C4C0EE260E194328C2386F0A69CB146F62666F8C6C29D509629B33473184D6ED6A9720DD51131F731BAA2263EE6375444C9DCB65E467860E655E391903E27590E44A4651F7E554185473267A098C6CD1B72B52BE9BD0CBF3637433FCD8DD0CBF3637432FCD8C8650D72617B7EF5BC6E592654185473267A098C6CD1B72B52BE9B8A27B14337C636067F7B7C232A0C29F9923D04C63668DB95A96F4CC51BD8A19BE3190D2E4E4C2F6DE0ABC2E59265447973247A098C6A2DBD5A95F4C5438AC732645898B9CAEB72B52BEA781A7DEDF08CA830A8E64CF41318D9A36E56A5BD355062AFCC9916262E72BADCAD4AFA92195C9C985EDFB2AF0B96459511E5CC89E82631A8B6ED6A57D33145F62866F8C6C0CFEF6F84654185473267A098C6CD1B72B52DE9AA888DE6488B131735AB76B52BEA5D0D3F3637432FCD8DD0CFF0036B7434FCD8DD0CBF36FFD862B0A84CE4DB96197226B76B5549F64186789CE649E07190C2275911C4E7A6DF57919E27265278E4640F89D18470C91947DC2995099CA4B3433184D715169721F0340AD0C9CE0489838650BAC07225C29A725CBA7A6D595CBA7F1DDE73D5D6EA8AA73B9AC6815A1939C0913070CA17580E44B8534E5D2ED31F6D1BA5DA63ED9FC08D54466A6DADE5C89ADDAD7027D90619E273992781C643089D6447139E9B7D6C2992F162A4F34731833715169720CBC8AF0C132ABC720D07C328C1C8648CA3919EBCCF439C0913070C871590E44B8534E446AA33393756F2E44D6ED6B833EC830CF139CC93C0E321844EB22389CF4DBEB62B0A88CE4D995F97226B76B5549F6EA8AA73B9AC839789E874AAF030346238AD06E253D34E58ABAA133936657E5C89ADDAD5527DBAA2A9CEE6FCBBF768D3A74FF00A319EBCC8B2607513070C4714611C378534E4C46A5D33548D6F2E43371517813EC6815C262607713070CA194611C378534E5D51131F73188D54858A91ADE5C89AE2A2F027D8CF5E6459303A898386238A308E1BC29A725E45789CE649E390683E195911C4E4651CB0A74BE66A6CCD1CC60CDBB5AA5C86933D799164C0EA260E188E28C2386F0A69C9B1574BA67292CAFCB90CDC545AA4FB25D54459231228344E1C626B3CC80D4D5560A830CF0C132ABC0E321844E8C1C864F4DBEAE5FEE476572E7FC8965CF5798D02B84C4C0EE260E194328C2386F0A69C90720E3D09655E06190C40F450DC367A69F4F15445926DA2E6309ADDAD71E4197919E18399578E4640F89D64391291947DE974A73B66D853A5E33935E68E63866DCAD52E418CF5E6459303A898386238A308E1BC29A7233D061E84C01226311901E8C1C86F0A69F7034FBDBE118CF5E6459303A898386238A308E1BC29A726C5612F19CA4B2C32E43371516A93EC6815C262607713070CA194611C378534E5F2E28BEFA8CDF18C9708DE648F40D1735AB76B535EA5F4C183F31664B2A23CB9923D04C63516DDAD4AFA6F432FCD8DFF45FFCC5992CA88F2E648F41318D45B76B32BE9897B157E64CF40D17395D6E56A67D4F768FD2CA830A8E648F41318D9A36E56A5BD31511E5CB69162631A8B7151657D33AE57E136E46BA927F5197B65D5E9FE35D0CBF36B21A435C98DEDFBDAF1B96499506151CC99E82631B346DCAD4AFA6AA23CB96D22C4C63516E2A2CAFA6AE35CBCE7D93FB2ACEB6A7592F614FCC99161A31B346DDAD4CFA625EC55F9933D0345C6575B95A9AF525CAB93931B27F655E372CEB7233D493FA8CBDB2EEF4FF001A54446F32245898B9AD5BD5A95F5343286B930BDBF7ADE172C8B628BEFA8CDF19F0DDA1B145F7D66778CF9B146F7D666F8C62B8D1131303B860C41B14A308E1BC5957D3C55199AA468B98C26B8A8BC790641C8388B3A528018643103D6847129E9A7DEA8AA73B9AC792A333949D1731C4D71D178F21F02BD061164C0EA1A310701E8C2386F1655F7768D1ABB99782F13D09655E3A0683871450DC364655C92EAA2335671E819270E3135E05C0926AAB05E97698FB68C5715A19260090D0703617470E4378B2AE4839789E874AAF030346238AD06E253D34E5BBE9B99782F13D09655E3A0683871450DC364655CB146F62666F8C6C2992F162A4B34331833715169720C5715A19260090D0703617470E4378B2AE585C7BEB2CFC9B6397F64FCDB15EBCCF4260090D0703471460E4378B2AE4BC8CF1393293C723207C4E8C238648CA3EE14EA80CD5279A398C26B8A8B4B90D067A0C22CE71D44C623103D644712E14D3EFC3146F7D666F8CF9B146F7D666F8C65E45789CE649E390683E195911C4E4651CB0A64BC6726DCD0CC60CDBB5AA5C87C0D0344324C0122631194528E1C86F0A69F7AA2263EE5B75444C7DCCF8118974CE5255BCB80CDC545E04FB25D54459231228344E1C626B3CC80D4D5560B07C2C14ABFC4DD9D36E0476856C36DAFF00A35DF50C22F7446EE22CD4BC35C58FE21929C651D860061479CE2330DFC711A833E4625FF5B8F44F05F73442DD13C19DCE10B270275C13992E1D2EDC222F91974834C70DFB6D137777D96BED36BA769B3D9EAE8DFADAF8A82663254D6C8ADD72CC3B73EA422A73BA52EAA12C91891219270E31359E6386A6AAB05418678609955E07190C227460E4327A6DF572E8EA496572E7FC8965CF57992EAA22C9189141A270E31359E6406A6AAB055E0BC48B3A5280E81A0E1C5684712919572DCC839789164B250030346238A288E1B3D34E49752E99A8C4F40C9C671866CF2E03735558D2E5FEE4B6572E7FC8965CF5798D02B84C4C0EE260E194328C2386F0A69CBE5C517DF519BE319511E5CB71162631A8B7151657D310D2E4E73AF6FD95675B523F054446F32445098B9AD5BD5A95F53E867F9B5BA19FE6DF86067F7B3C23628BEFA8CDF18CFF00FAB5DD769A9A9AFA767ADADA75767A35F63B2D4D86CF46CF67ABA353535746ED1AA288FBB85035158D3D7EA9587BAED5EF6AC994EF8A1DA1A103C4760BA81E8DC1E2FB686BCB83E3EEC21EE9B77979DAEA6C361B1D4D3B4DA6D4A050702394482F83C19D5FB61B40EED1DF46B6DB733A3B6AC39E1F75767A74E8D8EB69D5DB68D9AA0C2A39933CC4C63668DB95A95F4CFAB21A5C9C98DEDBC1578DCB24CA88F2E648F41318D45B7AB52BE99D0CBF3632E4435C98D95FBD6F1B967592F614FCC91161A31B346DCAD4D7A62A223799222C4C5CD6ADEAD4AFA9FF00D187F31664B7235D497FA8DBDB2EEF4FF1AF9376FD1A7469633D06116738EA26311881EB2238970A69F52EAA2335671E819270E3135E05C0926AAB055CBFDB6ACAE5CFF8EAF49EAF320C33C4E7324F038C86113AC88E273D36FABC8CF1393293C723207C4E8C238648CA3EE14EA84CE5259A398E26B8A8B4B9065E0BC4F4259578E81A0E1C514370D91957241857860E655E07068C219590E44E7A6DC88D4BA5926DADE5C866DDAD7027DB146F7D666F8C67AD3F4FFF004D9B6FFA31FE3672D806A260972D8ED622258FC35E1DF62EB037B1D02A3A237B0DE80EEDDDE2FB7D8EDD850361D98908B523A1C82B8439EF69B3A8C4137C2E16F8231D8ADDF6BB2D488C45E7610FDBB96E67AFA6D1E74FFF0056CD9772F23D09655A390703471460DC364655CBA5DA63ED9B74BB4C7DB36E97698FB66DD5154E773590CE9EA4B7B7317FC8965C8D098AE2B4324C0121A0E06C2E8E1C86F1655CBAA2A9CEE6B219D3D496F6E62FF912CB91A1315C5686498024341C0D85D1C390DE2CAB97C9BF768D3A74FF00A319EBCC8B2607513070C4714611C378534E4830CF0C132ABC0E321844E8C1C864F4DBE91AA88B25235BCB9135C545E04FB628DEFACCDF18C9752E99A8C4F40C9C671866CF2E03735558D75444C7DCB62B8D10C9CE04868C41B14AC07225C5957DEA8898FB98CB9B4F524B2B973FE44B2E7ABAC6815C262607713070CA194611C378534E58297D0AF33BFDE9C1A04788E824696C204614B3A3BBDED3F4E9D905841B1354C7797F7A803F8D611187E717E7A763FE1AE645449E2C6D9EA43352201C88BF6D2181C2A41B1F7D154076C03DBC2F650FD83B6BBB8DE16338BC38BE0D9A0E8F1BE3908D9687989B0C94582804F102768ABDBF6BBCC69CE7DCB640B1F408CD0E6A08434FD5283BDEA6ED8BCAED41A7A1D2AB872310681EB21B8948CABEB6067F7B3C23628DEFACCDF18DD2E94E76CDB0A74BC6726CCD1CC60CDBB5AA5C832F041C7A1D2ABC74320701EB41B8948CABEB614CA84B14D99A398C26B76B54B9065E467860E655E391903E27590E44A4651F7E554185473247A098C6CD1B72B52DE99F56434B97930BDFF64DE372C937235D493FA8DBDB2EEF4FF1A54446F32245898B9AD5BD5A95F53E86BF9B592E11BCB69161A2E6B5715166BD492E11BCC91E81A2E6B56ED6A6BD4D0D21BE4C2F6FDED78DCB24D8A2FBEB337C6360A1FF002C4CEFF7A7065B503DABFC6A0FA8EBB5D7D8BEC503F157275DB13C58D0800198840C42FB078BE873D9ED767148AC3A3FB533A18268A06844328C425E9F364F5108480A3E25026CE1B121088A030578D9EBEF098049D8EC2843A1DDFB61AAED06D4D8EBBB6D98322E108C2000009BD43363B77A09C43650D866C36F1B8A244493128A4621CEF1E7D0942F8921D72BF09B2A0C2A396C22C4C63668DC74595F4DC0CFEF6F84654185473267A098C6CD1B72B52BE9AA88F2E5B48B1318D45B8A8B2BE9BD733F09B75CDFC24CA830A7E5B08B1318D9A371D1657D310D21BE73AF6FDED675B524CA888DE5B4F4131735AB8A8B2BEA7F2AF05E27A12CABC740D070E28A1B86C8CAB974BB4C7DB36C55D2F1629B32BF2E4336ED6AA93EC57AF33D098024341C0D1C518390DE2CAB92F233C4E4CA4F1C8C81F13A308E192328FB853AA133949668E6389AE2A2D2E419782F13D09655E3A0683871450DC364655C8AF418459303A868C41C07A308E1BC5957DC5595099C9B32BF2E04D6E56AA93EC9752E964B388A0D1C671866F03204935558D609FF00F2C4CDFF007B70654AE9BF685AC4765AFB39A7314EC7535765A9A346AE8DDA3468D1A3FF004DDF4D3F4DFF00FC010F37DD018D47D1A429EF61AFADB6D7D4D47D0B8A21A31826C22D09DAEBEDDC36FBF87B40E47A22FCAD42C1C0FB83DED76F05143CEDA29AE62806046784A361513B954E031376D9EC1F1D3A5DA64EDA3628DEC4CCDF18C462A23393656F2E04D6ED6B813EDD5154E7735B146F62666F8CF89A056864E70244C1C3285D603912E14D392E5D3D36ECAE5CFF008EAF49EAF325D4BA592CE22834719C619BC0C8124D55635F2E28DEFACCDF19F03C5511649BA8B98C25B76B5C79062B8D10C9CE04868C41B14AC07225C5957D418678609955E07190C227460E4327A6DF572FF723B2B973FE44B2E7ABCC6815C262607713070CA194611C378534E4839071E84B2AF030C86207A286E1B3D34FBA3E1861A76311368087AE263076DCDBBFC49D1EDDB40AC030B183EC31F1FF0067ADB57886EB6D35DD74EB95FB2FAF0DF75F57469FF4DA15EF3BFF00E07ED9E9D568DA628BBB461F63213106D431117DD7D3B47BD9B881044E90F77D47ED4D9BDBE6AECF5746DB6A98837B370DA98D16DBB8EA6C226F82678D8ED36BB6DAEA6D36EFBABABADA35B4EA6AECF5759B143F7D065F8C641C838F425957818643103D14370D9E9A7DDFA3F4EF633D799164C0EA260E188E28C2386F0A69C8AF5E6459CE3A868381C38AC88E25C595723C5521629BA8B98C26B76B5C7906EA8898FB98CBC17891674A501D0341C38AD08E25232AE5B99072F122C964A006068C4714511C367A69CBE5C517DF519BE3192F62AFCC99E81A2E32BADCAD4D7A96397F64FCDB25EC56396C22C345CE575C7459AF534B846F3247A068B9AD5BB5A9AF53FA60C3F98B325B91AEA4BFD465ED9777A7F8D6E65CAB97930B2B4595785CB3ADD737F09B4331BB707B89EC3651727B6EEB0AD7D3B9EB6900C4353DC51C364F0EE6B383B6CB5F46FE07500203BB61E6191D4110006DEE3E2114384260EE9FA38EF9CFF901DDB0F3034E9088FC38E91E0F89DC22D077BFD7C07CD617C335F67AFABB18BBBEA6BEB7FE2856DF51EF4EAEC1CF5769ACEDFAB89B67A53F854732479894C6CD1B72B32BE9A97B157E64CF40D17195D6E56A6BD4B7E8D1A37696C513DF5999E3192F614FCB61E81A31B346E3A2CCFA62E5435CE7595FBDACEB6A7595111BCB69E8262E6B57151657D4FA197E6C6E869F9B1BA197E6CF9776FD1A7469633D06116738EA26311881EB2238970A69F70B8F7D659F9363C52E162A4A8B98E19B8A8BC7906E97698FB66CA852E9648C48A131C64E066CF320352B4A8D1E2A90CE52345CC6135C545E3C8315EBCCF4260090D0703471460E4378B2AE4D8E67D93F36C8390711674A50030C86207AD08E253D34FABC1071164B2501D0C81C07A288E1B232AFBFAB4B20F416461D49440E3318826B024894F4D3E25650C602C53EC30501BB1FBACBB11CD5520F8AAA5D2C935E57E5C86A815AAA4FB618900717E43A5B6DB6DB1DFAFAF526D40C43B534EFD0EFA37B62A2A60CA4CB95FA0B5125B75AAA4FB7545539DCD6C2E3DF5967E4DB1575446726CCAFCB9135BB5AAA4FB25D4BA592CE22834719C619BC0C8124D55635D5154E7735B0A754267293CD1CC7135C745A5C8319E8308B39C7513188C40F5911C4B8534FABC8CF1393293C723207C4E8C238648CA3EE14EA84CE5259A398E26B8A8B4B9065E0BC4F4259578E81A0E1C514370D919572F937EED1A74E9FF4633D799164C0EA260E188E28C2386F0A69CB146F62666F8C6C0CBEF6784F81A068864980244C62328A51C390DE14D3EAE5D1D492CAE5CFF916CB9EAF325D54459231228344E1C626B3CC80D4D5560AD8AC25E3394965865C866E2A2D527D8D02B84C4C0EE260E194328C2386F0A69C9B033FBD9E11B146F7D666F8C6542A88B259C450989C2704D781902495A54150D7F6DABDB98CFE3ABCE4682DD51131F73192EA5D335189E81938CE30CD9E5C06E6AAB1A5CBFDC96CAE5CFF00912CB9EAF31A057098981DC4C1C3286518470DE14D391A068864980244C62328A51C390DE14D3E91AA88B15235BD05C89AE2A2F067DB146F7D666F8C6542A88B259C450989C2704D781902495A5417A5CA9CED9B25D54459231228344E1C626B3CC80D4D5560BF0C51BDF599BE33E654185473247A098C6CD1B72B52DE98A83157E64C8B1317195D6E56A57D490D2E4E4BEF7FD9578DCB22DD737F09B73C9D493FA72B272EAF4FF25FA60C3F98B3259511E5CC91E82631A8B6F56A57D337B7D1B145F7D66778C6541853F2D845898C6CD1B8E8B2BE9886972725F7BEE055E372C937235D497FA8DBDB2EEF4FF1A4BD853F2DA7A068C6CD1B8E8B33E998E57D93F36C97B0A8E64C8B0D18D9A36E56A6BD315111BCC8916262E6B56F56A57D4D0D21BE4C6F6DE36BC6E5926C517DF599BE3195062B1CC9916262E72BADCAD4AFA9E067F7B7C23628DEFACCDF18C970F2E5B4F40D18D45B8A8B35E99D733F09B7237D493FA8CBDB2EEF4FF1ADEDBF46ED2D8A2FBEA337C67CCBC1789E84B2AF1D0341C38A286E1B232AE4830AF0C1CCABC0E0D18432B21C89CF4DB962AE97CB14DB95F97219B76B5549F641C8388B3A528018643103D6847129E9A7D542974B246245098E327033679901A95A54690D7F725BDB98CFE45B324682DD2ED31F6CD9072F13D0E955E06068C4715A0DC4A7A69CB1575426726CCAFCB8135BB5AAA4FB1A068898E71DC4C62328A5644712E14D3E9A056864E70244C1C3285D603912E14D3974BC4C9DB462B8AD0C93004868381B0BA38721BC5957263C92E962A4A8B98C19B8A8BC7906542A88CD4627A0989C2704D679701B95A54157919E27265278E4640F89D18470C91947DEA88A73B98C9752E964B388A0D1C671866F03204935558D74BB4C7DB362352E1629B6B797019B76B5C09F6C51BDF599BE33E1A34FE9FAE862BD799E84C0121A0E068E28C1C86F1655CBAA2A9CEE6B7545539DCD64BA974B259C45068E338C3378190249AAAC6BE4DFBB469D3A7FD18CF5E6459303A898386238A308E1BC29A72EA8898FB98DD51131F731BAA2263EE6375444C7DCC623551962A4AB797226B8A8BC09F65E0838F43A5578E8640E03D68371291957D542A88B259C450989C2704D781902495A54170A74BC6726CCD1CC60CDBB5AA5C832F041C7A1D2ABC74320701EB41B8948CABEE171EFACB3F26D8E67D93F36D85C7B132CFC9B2F22BC4E7324F1C8341F0CAC88E272328E4863FB6DDEBCC5FF001DDE7234262B8D10C9CE04868C41B14AC07225C5957DE974A73B66D853A5E33936668E63066DDAD52E4197820E3D0E955E3A190380F5A0DC4A4655F57915E27399278E41A0F865644713919472E976A73B68C6815C262607713070CA194611C378534E4681A2192600913188CA29470E4378534FA46AA22C548D6F417226B8A8BC19F6C51BDF599BE318D0344324C0122631194528E1C86F0A69F715854258A92CB0CB9135C545AA4FFCF8A2FBEA337C637432FCD8DD0CFF0036B7432FCD8CA830A8E5B08B1318D9A371D1657D37032FBD9E11B737235D3737A8CBD7316CBFF1AEB97F84DBAE6FE1264BD85472D87A068C6CD1B8E8B35E9B8E67D93F36D85CFB142CFC9B7D197221AE73ECADC36B3EDA9E64B846F2DA45868B9AD5C5459AF52EB9BF84DBAE5FE136EB9BF8499511E5CB71162631A8B7151657D310D2E4E73AF6D164D9F6D493628BEFACCEF18CA888DE6488B131735AB76B52BEA48690D72637B7EF6BC6E5926C517DF599DE31B144F62866F8C643686B9CFBDB78DACEB6A49BA197E6DF9B146F7D666F8C65E46789C9949E391903E274611C324651F7AA229CEE637545539DCD6C51BD8999BE31B032FBD9E13E09755119AB38F40C9387189AF02E049355582E2AE978B14DB95F97219B76B5549FF820E5E27A1D2ABC0C0D188E2B41B894F4D396397F64FCDB15EBCCF4260090D0703471460E4378B2AE5D5154E7735BAA2A9CEE6B7545539DCD6E97698FB66DD2ED3276D197915E18265578E41A0F86518390C9194724BAA88CD59C7A0649C38C4D78170249AAAC148C4BA58A6DADE5C866DDAD7027DB146F7D666F8C6EA8AA73B9ADD5114E77318D03444C738EE263119452B2238970A69F52EAA2335671E819270E3135E05C0926AAB055CBFDB6ACAE5CFF008EAF49EAF320C33C4E7324F038C86113AC88E273D36FBF2E28DEFACCDF18D8A37B13337C67C7146F62666F8C6C0CBEF678465E0838F43A5578E8640E03D68371291957DC51BD8999BE31B468DEC839789164B250030346238A288E1B3D34E4830CF0C132ABC0E321844E8C1C864F4DBE91AA88B15215BCBA135C545E04FB19EBCC8B2607513070C4714611C378534E4839071E84B2AF030C86207A286E1B3D34FB8E67D93F37F0418678609955E07190C227460E4327A6DF572FF723B2B973FE45B2E7ABCC830AF1393293C0E0D184328C23864F4DB96171EFACB3F26C78AA22C537513418C26B76B5C69062B8D10C9CE04868C41B14AC07225C5957D41C838F425957818643103D14370D9E9A7DC55D2F19CA4F2BF2E43371516A93EC975511648C48A0D1387189ACF32035355582E28DEC4CCDF18C46A5D33548D6F2E43371517813EC6815C262607713070CA194611C378534E5F2E28DEFACCDF18CA888DE6488B131735AB76B52BEA5D0CBF36B7432FCDAD8A2FB14337C636065F7B3C236E65418ABF32645898B9CAEB72B52BEA4C97B0A7E6488B0D18D9A36E56A6BD312E11BCC91E81A2E6B56ED6A6BD490D21AE4C6F6FDED78DCB24D8A27BEB333C6375CDFC24CB9572739F64E8B2ACFB6A7BE0A830A7E5B08B1318D9A371D165BD33033FBDBE11BE8D85C7BEB2CFC9B6397F64FCDB25EC56396C22C345CE575C74599F53FA37D3732A0C2A39923D04C63668DB95A96F4CE793A92FF004E564E5DDE9FE4A8690D72617BFEF6BC6E5926541853F3247A098C6CD1B72B52BE9BF2E28DEFACCDF18DD5154E7735BAA2A9CEE6B7545539DCD633D799E873812260E190E2B21C8970A69CB032FBD9E13E3A34FE9FAE862BD799E84C0121A0E068E28C1C86F1655C8AE3444C4C0EE183106C528C2386F1655F7AA229CEE6325D4BA592CE22834719C619BC0C8124D55634830AF0C1CCABC0E0D18432B21C89CF4DB974BB4C9DB46E97698FB66C6815A1939C0913070CA17580E44B8534E44725C2C53756F2E4336ED6B813ECBC1789E84B2AF1D0341C38A286E1B232AE585C7BEB2CFC9B1E2974B252545CC60CDC545E3C832F22BC304CAAF1C8341F0CA3072192328E5D5154E7735B0A754267293CD1CC6135C545A5C832F05E27A12CABC740D070E28A1B86C8CAB915E8308B260750D188380F4611C378B2AFB8ABAA133936657E5C09ADCAD5527DBAA2A9CEE6FF00EE7FFFC4003E10000102050106030703040004070000000203130001041114150512212232331085D4162023346394E4313541245161624260718206305281B1B3D1FFDA0008010100133F00FF0091349A05DB7281054F9D5408F899C681B2FD34681B2FD34681B2FD34681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C681B2FD34681B2FD34681B2FD378E9340BB6E5020A9F3AA811F13386125DB72BD048F9151209DC0CE5C46302969597B2DCEC2417BB41EEE81B2FD34681B2FD3430920E375F509072242212B0004B80C3092EDB95E8247C8A8904EE0672E231A06CBF4D1A06CBF4D1A06CBF4D1A06CBF4D1A06CBF4DEF795D2463AABB6E2A09072242473B9984B80CED1A06D4F4D1A06D4F4D1E69491F7F1AB5020E37408247C8AAE272B1846AD40BB6E502E907224B91F1338C0AAAA7996DDEC2476B3A1D519F4B43938F4A952ADF06A954960B2C82A1CE11815543938F549552DF1AA924910B2282A7CE719F4B54F3396EF6153B59D08D22BD76DC4C150E7490209DC0C27C0A33E96BB1B22955A547E0D2AAAAC77597483902302AA9597B11AEFA417BB471ABD020E36A9A47C8AAE272B181CB88C605550E4E3D52554B7C6AA492442C8A0A9F39C6BFB2FD4C6BFB2FD4C67D2D7636452AB4A8FC1A555558EEB2E907204605552B2F6237DF482F768E349AF5DB72BD75439D24083A0C23CD2923EFE348AF5DB71305439D24082770309F028D036A7A68C0AAA565E71AEFA417BB47D378F2BA4F7BCAE923CCE93C7CD2923EFE35FC579EA5497ED629DACEDBABC349CEC8C863EBA5B9BAC46262BCF552ABF6B7CED67777AA71E5957E1A06532CD2A48777282F76AFD318994CB35492FDADF0BDDADDEA8D27071B1D8FACAEFEF3F1E67571A062BCF52AA877728ED676FD3E38994CB35492FDADF0BDDADDEA8D27071B1D8FACAEFEF3FE1E69491F7F1E594BE1F7F1E5749EF795D2479A5278F9A5247DFC795D24681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C795D5F869340BB6E5020A9F3AA811F1338D2681071BA05D50E749013E0611F611A4502EDB8A9AA7CEAA0473B999CF8943092EDB95E8247C8A8904EE0672E231A06CBF4D1A06CBF4D1A4D020E3740BAA1CE92027C0C23EC3C3CD2923EFE3CAE93C3EFE3CAE93DEF2BA48D036A7A68D036A7A68D036A7A68D26BD071BAF4153E755010E8038FBF8F2BA48CFA5AEC6C8A556951F834AAAAB1DD65D20E408C0AAA565E71BEFA417BB47D378D22BD76DC4C150E7490209DC0C27C0A357A05DB71504839125C8E7733097018CFA5A565E71BEFAA17BB47D378C0AAAEC6C8AA56A91F8D4A92A89DD15D23E438D5E8176DC54120E4497239DCCC25C06275F4B4ACBCE37DF542F7694E9BC3E92EDB890AA1CE91104EE0613E053B479A5247DFC6915EBB6E260A873A48104EE0613E051E694913AFA5A565E71BEFAA17BB4A74DE1F4976DC48550E748882770309F029DA3CD292302AAA9E672DDEC2476B3A11A06D4F4D1A06D4F4D1A06D4F4D0C2A838DD02091F22A2272B181CB88FBDA06532CD2A48777282F76AFD31ECA7E6C7B29F9B1ECA7E6C7B29F9B1A4E0E3E3E47D7577F79F8D032996695243BB9417BB57E98F33A58FBF8D032996695243BB9417BB57E98F33A48D57071B1F23E82BBFBCFC65E532CD2A48777702F76B7BA651AFE532CD524BF6B142F76ADD51F7F1A06532CD2A48777282F76AFD31AFE532CD524BF6B142F76ADD51AB60E363E47D0577F79F8CBCA659A5490EEEE05EED6F74CA3CCE963EFE340CA659A5490EEE505EED5FA631329966A925FB5BE17BB56EA947B29F9B1ECA7E6C7B29F9B1ECA7E6C7B29F9BFF91814B54F3388DF7D23B59D3861241C6EBEA120E44844256000970186125DB72BD048F9151209DC0CE5C46302969597B2DCEC2417BB41E190AA0E36A82A1CE9109CAC6984F814AF1FBA6662318DF3CFB7B994BF6ED7DF8D0365FA68C855071B54150E74884E5634C27C0A578D7F6A7A98D7F6A7A9F0C0A5AA79971BEFA476B3A7D30C24838DD7D4241C890884AC0012E03E19F554ACBD96E76150BDDA087D55DB7281054F9D52239DCCCE7C4A348A041C6D505439D2404E563009F028C0A5AA79971BEFA476B3A7D30C24838DD7D4241C890884AC0012E03E1814B54F3388D77D23B59D38D0365FA68D2681071BA05D50E749013E0611814B54F3388DF7D23B59D38D0365FA6F7B48AF5DB71305439D24082770309F02F0CFA5A565E71BEFAA17BB47D3787D25DB71215439D22209DC0C27C0A768D036A7A68C0AAA565E71BEFA417BB47D378D22BD76DC4C150E7490209DC0C27C0A1F49071BAF4153E754842560039F128CFA5AA799CB77B0A9DACE846915EBB6E260A873A48104EE0613E05E19F4B4ACBD88D77D50BDDA38C0AAAEC6C8AA56A91F8D4A92A89DD15D23E4386155DB7282A120E44848E7733097018FDAF0F2D8C6F9E65CDFC45FA2F6DC87D25DB71215439D22209DC0C27C0A768D5A8176DCA05D20E449723E2671815554F32DB9D848ED6743AAD0C2A838DD02091F22A2272B181CB88C6BFB2FD4C67D2D53CCE5BBD854ED6742348AF5DB71305439D24082770309F028D5E8176DC54120E4497239DCCC25C063EFE348AF5DB71305439D24082770309F02F0CFA5A565EC46FBEA85EED1C3E92EDB890AA1CE91104EE0613E053B7BDE594B18994CB34AAAFDADF0BDDAB754A3F63D3B4FFB975CCFFF004B3519794CB34A921DDDC0BDDADEE9947B29F9B1FB1E9DA7FDCBAE67FF00A59A8CBCA659A5490EEEE05EED5FA651AFE532CD2AABF6B142F76ADD5E1A06532CD2A48777282F76AFD31978AF3D54921DDDC3B59DDEE99C7B57F851A56A98789FD0FCCBC8B9BF8AE76E56DFB47B29F9B1A4E0E3E3E47D7577F79F8D032996695243BB9417BB57E98CBC579EAA490EEEE1EED9DDEE99C6AD9D9390C7D14B737588D0329966A9543BB9417BB57E98D7F299669555FB58A17BB56EA8D5B071F1D8FA0AEFEF3F1A56A98789FD07CCBE8B9BF8AE76E56DFB4626532CD524BF6B7C2F76ADD51A4E0E363E47D7577F79F8F2CA5F1F2CA4F7BCAE92184976DC48D23E4544827703397119DA3029695979B73B0905EED27D578D5ABD071BAF5D20E449710E8008D0365FA68C0A5A565E6DDEC2417BB41D57F0D5EBD76DC4CD23E4557209DC0CE5C47C349A05DB7281054F9D5408F899C6052D0E4E3D2AB548FC6A5492582CB2091F21C6BFB53D4C642ABB6E2A6A9F3AA4473B9A853E253B469340838DD02EA873A4809F030F0D268176DCA04153E755023E2671E694912AFAAA565ECB73B0A85EED04642ABB6E2A6A9F3AA4473B9A853E253B4795D5C7D8469140BB6E2A6A9F3AA811CEE6673E250C24BB6E57A091F22A2413B819CB88C6052D2B2F65BBD8482F7682357AF41C6D304839125C42560009701F1F2BA4F7BCAE921F49071BAF4153E754842560039F128CFA5AA799CB73B0A9DACE87863AABB6E2A09072242473B9984B80CED1A06D4F4D1A06D4F4DE19F4B4ACBCE35DF542F768FA6F181555D8D9154AD523F1A9525513BA2BA47C87157B7681943FDCDA58CED2FF0003384A8184E98E9DFE12B19DEEFC536CC71306699343AA76BDDA8D1C234708A8A59A6A28F54AABCEE3295A569AB68248E5294BFCCED19F4A836F623567950BDDA38C0AAAEC6C8AA56A91F8D4A92A89DD15D23E5386155DB7282A120E44848E7733097018FDAF0F2D8C6F9D65CDFC55FB77B46055576364552B548FC6A549544EE8AE91F21C6935E838DD7A0A9F3AA8087401F86935EBB6E57AEA873A48107418467D2D7636452AB4A8FC1A555558EEB2E9072047ED78796C637CEB2E6FE2AFDBBDB721F4976DC48550E748882770309F029DBDEF2CA58CBC579EAA490EEEE1DACEEF74CE356CEC8C8C8FA096E6EB1E18994CB35492FDADF0BDDAB754A3D94FCD8F653F37C3EFE3CB29607F51DE9CA5797F995E252E128095E7B8984CA7697FD250139948252909A73BCF8CEE2769CF85E72BCA568527610194AF39CE73FE2528AC49B1AA496099A6AA72FD6425295E5BD294ED69DBC3FE10995E45BB2FE25398DEDFDE739FF31A06532CD2A48777282F76AFD3E1AAE0E363E47D0577F79F8CBCA659A5490EEEE05EED6F74CA3D94FCD8D27071F1D8FAEAEFEF3F1A06532CD52A8777282F76AFD318994CB35492FDADF0BDDADDEA95AF1FB1E9DA7FDCBAE677FA59A8D2B54C3C4FE83E65E45CDFC573B636DFB7BDABD7A0E3698241C892E212B0004B80C6052D0E4E3D2AB548FC6A5492582CB2091F21C7EE99988C637CF3CDEE65AFDBB5F7E1849071BAFA84839121109580025C06184976DCAF4123E4544827703397118C0A5A565ECB73B0905EED0469340BB6E5020A9F3AA811F13387D541C6E82A150E74884E563009F028CFAAAA79971BEFAA76B3A7D368F2BA48FF00BE5E14E52963266049E42E5796E2729CE76FE4A72B0CA73BDB6A3DBE330A74D2B727F1C853BDE7FACB84AD3BECDDB2A2AF2025BC694913404A523DDDC9F35B7665C62F27524E9A46204A87EA247350E72BFEA0DF87FDC51A4502EDB94082A7CEAA047D671AFED4F531AFED4F531AFED4F531A06CBF4D1FB5E1E5BF93F22C39BF8A8772F6DC8C85576DC54D53E75488E77350A7C4A768D0365FA68FDAF0F2DFC9F9161CDFC543B97B6E4642ABB6E2A6A9F3AA4473B9A853E253B7BDA457AEDB8982A1CE920413B8184F81430AAEDB941509072242473B9984B80C605552B2F38DF7D20BDDA3E9BC795D2467D2D7636452AB4A8FC1A555558EEB2E907204681B53D3463AA838DAA691F22A2272B1A652E2328D036A7A68FDAF0F2D8C6F9E61CDFC55FB77B6E43E92EDB890AA1CE91104EE0613E053B78274229A28A467314574AA24A94D407268A4523009DD4BDA366A96651AA56A12A62A8DD9DD8A646986649CA7BB335EE5095E68D32B4AD492A84D39DC46EF148A5294A45619CE2A7E67682CAA6446AA15339B9F0F978EF5AE56B5A2946432DABB384A725F78385F7921782FD256B4E5C6F41B36A2B0954256B9FC202E1CC30D1A7BF3150C4B94E522E1319CBF48D5E81071BA04123E455713E0607E1F7F1E57491AFECBF5319F4B54F3396E76153B59D08D5A81071BA04123E455713958C3C302AAA9E672DCEC2476B3A10C2A838DD02091F22A2272B181CB88FBDA06532CD2A48777282F76AFD3E1AB60E363E47D1577F79F8D2B54C3C4FE83E65E45CDFC573B636DFB4626532CD524BF6B7C2F76ADD51ECA7E6C6262BCF552ABF6B7CF76CEDBAA718994CB34AAAFDADF0BDDADDEA94693838F8F91F5D5DFDE7E3CB297C03F8AA40A9EB11FFE838A0009112469A736493504C4C39653B14A7394F8CA70B8802C549319A694C3993414BDF7E4090CA5212E6B95EE9D624CA03322DD4896107A616DD9CC1DB7198F4C02929A6B23309837219719CA729FE9394B8452593ACAE5123ABA6911D42A5BA92130A4524729094CAD149564926A27906DA6F12739F2818DCB723DABFC28D0315E7AA9243BB9476B3B7E98FBF8D032996695243BB9417BB57E98CBC579EAA490EEEE1EED9DDEE99C7B57F851ED5FE146818AF3D54921DDCA3B59DBF4C6939D919191F5D2DCDD6231315E7A9525FB5BE76B3B6EA9FBDA4D02EDB94082A7CEAA047C4CE35FDA9EA633EAAA9E6711AEFAA76B3A71A4502EDB8A9AA7CEAA0473B999CF8943092EDB95E8247C8A8904EE0672E231814B4ACBD96E76120BDDA08D268176DCA04153E755023E2671ABD7AEDB899A47C8AAE413B819CB88C6052D53CCE235DF48ED674E33EAA87271EA95A547E0D2AA92216450483903C1CDD3553569D748E432FF008AD23DF9CBFF00485E25FA47F78D8FB357A9A79C84B7484E49C8C933039184E45FAEE6F42889A339DA769F298C8A5C65FCCA10E2E20B564D6DF9CA529EE8260B29729CE579A96943CA22E86FCE76DF4C84A5C65FC4E51AFED3F531E69491814B54F32E35DF48ED674FA6D1A06CBF4D1E6949E390AA0E36A82A1CE9109CAC6984F814AF1FBA6662318DF3CF37B994BF6ED7DF8CFAAA1C9C7AA56951F834AAA4885914120E40F7BCAE93C25415554F32DB9D848ED6743AAD18EAA0E36A9A47C8A889CAC6994B88CA185576DCA0A84839121239DCCC25C063F6BC3CB631BE799737F117E8BDB721F4976DC48550E748882770309F029DA356A05DB728174839125C8F899F8E75354EFA412B1CEE8A8768DEE09998EE914A5FA6F6EDC653FE244504129FFF009049CE53FF00E611B2F475273B5CCE9D496EC8F965720984E7C6F38A619260676E2421329CC653FED79DBFBC4E9C4159A69269260332971294B74A728FED3BCE769FFED394E3CAE92356A05DB728174839125C8F899F86915EBB6E260A873A48104EE0613E051A457A0E3699AA7CEAA0212B001CF8946055553CCB6E76123B59D0EA8D036A7A68D26BD071BAF4153E755010E803F0D26BD76DCAF5D50E749020E830F7BCB29635FCA659A5557ED6285EED5BAA3EC235FC579EAA557ED629DACEDBAA313299669555FB5BE17BB56EA8FD8F4ED3FEE5D733BFD2CD4695AA61E27F41F32F22E6FE2B9DB95B7EDE1AB60E363B1F415DFDE7E3DABFC28A5FFC432A951BFF0009952848E7FE37E51B4692A13552FF005B4C061A5E2A1153713DE3101BDA7FC910CA195A29D05260A6E19015AF3FE084A509D31CE729FF007E33B5FF00EB0B4AC7507C39A7C25FDA5FC4BF494A5294A51A06532CD2A48777282F76AFD31AFE532CD2AABF6B142F76ADD5E1E59491A062BCF52AA877728ED676FD31A4E7646431F5D2DCDD6231315E7A9525FB5BE76B3BBBD538F653F363D94FCD8F653F37DED5EBD071B4C120E4497109580025C063CAEAE33EAA95979B77B0A85EED0755E35FDA9EA633EAABB1B22A92A55BE0D52AAA2774575439C23029695979B73B0905EED0755E348A05DB715354F9D5408E773339F12F0FB08D5ABD071BAF5D20E449710E8008D5ABD76DCAF4123E455720E833F0D5EB9071BAF5D20E449610958023029A85FC7A55AA91F8D4C9A6A85964122E0713AFA9AA799C46BBCA1DACE9C799D5786052D53CCE235DF48ED674E340D97E9A3CAEAE30296A9E6711AEFA476B3A719F5543938F54AD2A3F069554910B228241C811A06CBF4D1814B4ACBD96EF6120BDDA08D5EBD071B4C120E4497109580025C06184976DCAF4123E4544827703397118C0A5A565ECB73B0905EED0469340BB6E5020A9F3AA811F133F7B48AF5DB71305439D24082770309F028F34A48FBFF0C75576DC54120E44848E7733097019DA3F6BC3CB631BE799737F157EDDEDB9181555D8D9154AD523F1A9525513BA2BA47C87E19F4B4ACBD88DF7D50BDDA387D25DB71215439D22209DC0C27C0A76F0FBF8F2BA48C0AAA1C9C7AA4AA96F8D54924885914153E738FDD33311FC9F9179BDCCA43B96BEFC681B53D3467D2D7636452AB4A8FC1A555558EEB2E9072047ED78796C637CEB2E6FE2AFDBBDB721F4976DC48550E748882770309F029DA31D55DB71504839121239DCCC25C067689D05552B2F38DF7D20BDDA3E9BC795D24605550E4E3D52554B7C6AA492442C8A0A9F39C6BDB33D4C6055576364552B548FC6A549544EE8AE91F21F8F95D27BDA06532CD2A48777282F76AFD31AFE532CD524BF6B142F76ADD51AB60E363E47D1577F79F8F6AFF0A355D530F13FAEF96651737F15BEE4ADBF78FD8F4ED3FEE5D733BFD2CD465E532CD2A48777702F76B7BA65E3E59491A062BCF5524877728ED676FD31AAE0E363E47D1577F79F8D2B54C3C4FE83E65E45CDFC573B72B6FDA340C579EA5550EEE51DACEDFA63EC2340CA659AA550EEE505EED5FA631329966A925FB5BE17BB56EA8D27071F1F23EBABBFBCFC79652C6BF94CB35492FDAC50BDDAB7547DFC795D2465E2BCF52AA877770ED6777BA671ED5FE14695AA61E27F41F32F22E6FE2B9DB95B7EDE3E594BEF69340BB6E5020A9F3AA811F13387D541C6E82A150E74884E563009F028CFAAAA799C46FBEA9DACE9C6AD5E838DD7AE907224B887400467D557636455254AB7C1AA55544EE8AEA873847ED78796FE4FC8B2E6FE2A1DCBDA35FDA9EA6349A041C6E8175439D2404F81846052D53CCE237DF48ED674E1849071B48520E4484425604C25C06578C855071B54150E74884E5634C27C0A578D7F6A7A98C85576DC54D53E75488E77350A7C4A76F0CFAAA565E6DDEC2A17BB41D578C0A5AEC6C8A54AA96F8D5492AB1DD65D53E7386125DB72BD048F9151209DC0CE5C46340D97E9A33EAA87271EA95A547E0D2AA9221645048390235FDA9EA633EAAA9E65C6BBEA9DACE9F4C795D278E9140BB6E2A6A9F3AA811CEE6673E251A06CBF4D1A06CBF4D19F5543938F54AD2A3F069554910B228241C81EF6915EBB6E260A873A48104EE0613E051A06D4F4D1A06D4F4D1A06D4F4D1A06D4F4D181554ACBCE35DF482F768FA6F1AB5020E37408247C8AAE272B184605550E4E3D52554B7C6AA492442C8A0A9F39C67D2D53CCE5B9D854ED6742356A041C6E81048F9155C4E56308F2BAB8FB08F34AB87D241C6EBD054F9D521095800E7C4A3F74CCC47F27E45F6F73290EE5AFBF18EAA0E36A9A47C8A889CAC6994B88CA35FD97EA633E96A9E672DCEC2A76B3A11AB5020E37408247C8AAE272B1843E920E375E82A7CEA9084AC0073E251AFECBF530FA4BB6E242A873A44413B8184F814ED18EAAEDB8A8241C89091CEE6612E033B44E82AA95979C6FBE905EED1F4DE3CAE9231D55DB71504839121239DCCC25C067689D05552B2F6237DF482F768FDFF002CA58F653F363D94FCD8F653F36340C579EAA490EEE51DACEDFA63EFFC34AD2F332FFA1F997966F7329CED947B57F851ED5FE146818AF3D4AAA1DDCA3B59DBF4C7D84799D5F86939D9190C7D74B737588C4C579EAA557ED6F9EED9DB754E3DABFC28F6AFF0A3DABFC28CBC579EAA490EEEE1DACEEF74CE355CEC9C8C8FA096E6EB11E594918994CB35492FDADF0DEBB56EA94695838D8F91F5D5DFDE7E3CB2923CCE9634ACEC9C8C8FAC96E6EB11ECA7E6FBDE57490C24BB6E57A091F22A2413B819CB88C681B2FD34681B2FD3479A5247DFF86052D0E4E3D2AB548FC6A5492582CB2091F21C67D5553CCE235DF54ED674FC349A041C6E8175439D2404F81847D8469140BB6E2A6A9F3AA811CEE6673E251A06CBF4D1A06CBF4D1A06CBF4D1AFED4F531AFED4F530FAABB6E5020A9F3AA4473B999CF8946052D0E4E3D2AB548FC6A5492582CB2091F21C67D5553CCB8D77D53B59D3E9B4795D24681B2FD34681B2FD3430920E3690A41C890884AC0984B80CAF1814B43938F4AAD523F1A9524960B2C8247C871FBA6662318DF3CF37B996BF6ED7DF861241C6EBEA120E448442560009701F7BCAE923CD293C7CD2923EFE356A041C6E81048F9155C4E56308F34A4F0D26BD76DCAF5D50E749020E83086155DB7282A120E44848E77330970189D05552B2EB8DF7D20BDDA3E9BC6915EBB6E260A873A48104EE0613E051AB502EDB940BA41C892E47C4CE3EC3C185576DCA0A84839121239DCCC25C063F6BC3CB631BE799737F117EDDEDB90FA4BB6E57D42A1CE91104EE0613E051E575712A0AAAA7996DCEC2476B3A9F55A31D541C6D5348F915113958D329711946AD40BB6E502E907224B91F1338CFA5A565EC46FBEA85EED1C6055576364552B548FC6A549544EE8AE91F21C79A5244EBE9695979C6FBEA85EED29D3787D25DB71215439D22209DC0C27C0A76F7BCAE9231329966A925FB5BE1BD76ADD528F653F363D94FCD8F33A58FBFF0D7F29966A925FB58A17BB56EAF0D0329966A9543BB9417BB57E98C4CA659A5557ED6F85EED6EF54A34AC1C6C7C8FAEAEFEF3F1E59491ED5FE146AB9D9390C7D04B73758F0D0315E7AA9243BB9476B3B7E98FBFF0F2BAB8FB08D7F15E7AA955FB58A76B3B6EAF1D032996695243BB9417BB57E98D5754C3C4FEBFE59945CDFC56FB92B6FDE349C1C7C7C8FACAEFEF3F1A06532CD2A48777282F76AFD3EF795D24681B2FD34681B2FD34681B2FD3469140838DAA0A873A4809CAC6013E051F7FEE69140BB6E2A6A9F3AA811CEE6673E250C24BB6E24691F22A2413B819CB88CED1A06CCF4D19F5543938F54AD2A3F069554910B228241C810FAA838DD0542A1CE9109CAC6013E051AFED4F531AFED4F53190AA0E36A82A1CE9109CAC6984F814AF13AFAAAA79971BEFAA76B3A7D368D268176DCA04153E755023E2671E575719F554ACBCDB9D8542F7683AAF0FAABB6E5020A9F3AA4473B999CF894681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C6AF5EBB6E26691F22AB904EE0672E231814B54F3388D77D23B59D38D0365FA6FF99FFFC4002A11000103030205040203000000000000000100020304051106211213314051101422413280162442FFDA0008010201013F00FD9A073E83708641EFA59046325433897A2924118C950CC25E9DEEDD15DEB22A6A77F1EE55B756B2DF172A66F555FAA5B5748EE546412B4C81EC83B8B2E3E9F8F74767A75496CE42A3823ADAA2F937C7D2BD5AA8DF3B1EE6630BD8521A511F00030AD956EB55D1F0039612B9E00C94C7878EE88CABEC8200C7F8475355D1D710C3B29EF02BA2CCB2E0A9357CD08E40391E54B7685E1B237F2F2BDC3EB18C847FA54C0B58223F5DD67016A767F4DEEF0A42E3212A9C1126241B2ABB232439A5F1F6A4824A69431EAC25B253C2E3F41746E3BAE87215C6DCDB93381C765268280E785E9FA065CE5922FE3B5B147CB90712A8D2570E6F1C4CC0565A534B42D63BAAC671DD0F8EC5608DC2F92C1F2B87EC84785FB2D9BF00BA7EDDFF00FFC400251100010401040104030000000000000000010002030411051221403210224180144261FFDA0008010301013F00FB76D6A73709A139B8EEF2AA40F95E24F85269DF907785069E18FDC5CAFEDDFC0F407B4D4C8B729849523DA154B53161084AF7BF20AB359F356DC5A830A23B43C9513FAAB518B8DC151D335FC555A518707CA15FB94DF4042C1CA6E222F47DDDAF95A77364350FE27709B69CDF6BC26B848DE15AE1CF4381DAC65413188E426EB2F09BAD1F9085F8F3951EA9106E15B977BF211E5BDA6AC64AC05C2E10217921F6EFFFD9, '1', '2022-03-16 21:51:33', '1', '2022-03-16 21:51:33', b'0'); +INSERT INTO `infra_file_content` VALUES (2, 4, 'e34bbc550bb8491bb64f804d71048799.jpg', 0xFFD8FFE000104A46494600010100000100010000FFDB0043000302020302020303030304030304050805050404050A070706080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F171816141812141514FFDB00430103040405040509050509140D0B0D1414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414FFC20011080102010203011100021101031101FFC4001E00000301010101010101010000000000000008090701060A02040503FFC4001C0101000203010101000000000000000000000105020406070308FFDA000C03010002100310000000AA6000000000000000000000000000000000070000000000E81C3A70E8001C03A0700000E8001C2401808000FF000BF9808017F8E12007F8C00A0200040102BE0120C0000BFC000708045D03033802AA794029412BC69C0DFC9B206005261020356037F37E1551D33CB1AA1160BFC00070804553201017F4554D50A002A86AA4582FE0800D51164AA66503FE74CA48B22A85FD1551561552A98AB17F8000E1008AA640202FE8AA8AB00FF0BF98097F490007AB12D2D2920C0DF8F564AC2FE8AA8AB0AA954C558BFC00070804553003013CA0AA9AB1540F2A45A3CA95409B27953CB173C55474CF2C4593CB173C4047F80E9208FA27000384FF0032C387406A0CA8D58554D50D5895A6563526A66A82B06546565A61553541AA1013A0700AAA0000004FE37F03002809E449B22AA5D0303384023572E79F3B250030003CA973C6089FE2026FC3002025FE0003F22FE7CEC9AB9E58B9E6A6795030037F18227F9C26C8E913687E8A504303D48FE9BF916874874C6089FC4863E9E8000E1008CAC7F440C7F4E08195407FC4006A8404E9C1A932A1AA22D1AA0D39AA8AB8FE99492B8BFC708045FE000384023033D494A04A8CB0CA0FA261812401E5C7F8DF095A57F2400EA88115E885E3542585A530037F182384022FF0001C20115F0C00A02791303384023572A808794FCF0666B0E8F062D2B32107EC9B23A66A679724015FCC00D4C9B47D3D0001C201169CCA86B0CA0404E92ACAA62AC5F13FA4FF0033E3965D84EBBF58CCFE4D5B671FF2C44C8B03566563FA2AC6AA5501023A5540003F22FE4D93531D303003001582E79164BE50FEA463B41BD9EF975F7FD2DB5FD2F595FBE75D57FC0991F2754009583545262178D51498F5C0007E45FC8B45CF22C9AB0FF1BE1810AA9368A8312CC516DE535BBDEBA973F7DD6D7647E5FD2B29EC9C8FA0FBC4B2CB19AE55315601FE17F26B9400C00FA27000384FF22C0D58D48FE8808FF1014B4A4AD1C786F9C8DB79BF1DEDBC6DD53FBFACDCF1FF001F41FF0027D57C5D84EC6A13EDAC72C3533541AA101032C32A32B3E944000E1200754408C00B4A6006003FC60007874379C6DAFE7F2EFA09F58C5FACAFD4F98DE553F4BF11437B2A4C1A41164D4CAA640203E9E89B26A6501000384022FF001941EA480C3A44DA1FA2BF9D10F1C6A5D9FF002FCEEE7F92B36330DEC3D671B65FC5EE9C96CBD0E9C1437F2BF8BF01EA8CB0C0490057F2948001C2010FE9961958AB0FE0155055055CFF00B4CB59187FA6CB4BC59A4C69713FEB44FEFE9094C01FF2018FE9AA116C7F4E1D2AA0001F917F241969CCACCA495E7AA3E89C9567AB024095EC5D0FEE1EE1A610F10601FE382043FA6FE06006005800003F22FE7961562AA1E449B26A650127F1218F225531561FD32C1A910235326D1F49879522C8FE8810FE9404E1008BFC000709FE2B065635007040CFA503840335632B1A835332B32C2A899512B4D58D50554CB07F0E954C08045FE0003848015837F37F3D41960D48951BF9218FA4C30337C3D719392BCA4C4831FD35635422C0AA9D1803D480FE9404000FC8BF9E58000D509AC6FE745FCC046A46A8F522585272178FF0BF8FF120CC0CFA4C3CA9164BA048527F9F55000070804354006566A85532561C035432B1AA1AA1543551023803FC6544AD2D399512B4AA64AD1A82AA8001C20115F090605531562AA115C09FE5283D58969EA400AA6749046FE55022C801818E91A98E98C10001C201154C80405FD1553CA0EA9008AFE2025CF3CA8809EAC9583023A43A64832D31EA895A30070D588B27963E9E8000E1008B4E20203542AA55422C13FCA002AC5A52568D48AB8AA1400D50AA64021AA32B2D39C10032C1A732B2808001C2010001E5874CAA87CAB9D18032C37C1FD26C95F4E1BE9E549AE6025A62181EA47F85FC7F8C00408BFC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007FFC4004210000003060209020503030203090000000607080004051415160917010203111318195785253810202147671226272829464175223739303142505160616383FFDA0008010100011200FF00C8F7B6F6DEDBDB7B6F6DEDBDB7B6FF008EFF00868D3A34FCBBDBF568F8FEAD0DBDB7B6F6DFF32F05E27A12CABC740D070E28A1B86C8CAB97545539DCD6EA8AA73B9ADD5154E7735BAA2A9CEE6B614EA84CE5279A398C26B8A8B4B9065E0BC4F4259578E81A0E1C514370D919572EA8AA73B9ADD5154E7735BAA2A9CEE6FC5782F13D09655E3A0683871450DC364655C97919E27265278E4640F89D18470C91947DC2995099CA4B3433184D715169721F2F545539DCD6EA88A73B98C830CF139CC93C0E321844EB22389CF4DBEAF233C4E4CA4F1C8C81F13A308E192328FBD5114E7731BAA2A9CEE6B7545539DCD6EA8AA73B9ADD5154E7737E6C51BDF599BE318D0344324C0122631194528E1C86F0A69F7AA2263EE5B75444C7DCC6C51BD8999BE31B032FBD9E1197820E3D0E955E3A190380F5A0DC4A4655F50720E3D09655E06190C40F450DC367A69F4F154658A6EA2E6309ADDAD71E41950A5D335671E82638C9C0CDE05C09256951A542A88B259C450989C2704D781902495A54170A84BC6726CCD1CC70CDB95AA5C8319EBCC8B2607513070C4714611C378534E49752E99A8C4F40C9C671866CF2E03735558D62ACA80B152795F97026B8A8B549F62BD061E8738121A310681EB21C8971655F550AA22C967114262709C135E064092569505E974A73B66DD2E94E76CD92EA5D335189E81938CE30CD9E5C06E6AAB1AC55D50962A4F2BF2E44D71516A93EC839789164B250030346238A288E1B3D34E58A37B13337C636065F7B3C2319EBCC8B2607513070C4714611C378534E5D51131F73188D54458A92ADE5C09AE2A2F027DB146F7D666F8CF9B146F7D666F8C6C51BD8A19BE33E38A37B13337C636067F7B3C232A0C55F96C3D04C5C6575C74595F52FA32E4437CE7593B86D675B53AC9708DE5B48B0D1735AB8A8B35EA785CFBEA2CFC9B6ED1B99506151CC91E82631B346DCAD4B7A62A223799222C4C5CD6ADDAD4AFA9AE4437C98593BC6B78DCB3AD85CFB142CFC9B25DC29F96C3D03463668DC74599F4CD1BB737D195111BCC9116262E6B56ED6A57D4D72A1BE4C2C9DE36BC6E59DF8628DEC4CCDF18D819FDECF08D8A2FBEA337C67C3033FBD9E11B146F7D666F8CF9B146F7D666F8C6C51BD8999BE33E38A37B13337C636067F7B3C23628DEFACCDF18DD5154E7735B0A754267293CD1CC6135C545A5C832F05E27A12CABC740D070E28A1B86C8CAB96171EFACB3F26DFF7EAB2F05E27A12CABC740D070E28A1B86C8CAB920E5E27A1D2ABC0C0D188E2B41B894F4D396397F64FCDB15EBCCF4260090D0703471460E4378B2AE4BC8CF1393293C723207C4E8C238648CA3EF544539DCC6EA8AA73B9AC839789E874AAF030346238AD06E253D34E58E67D93F37F0C51BD8999BE31B033FBD9E11B146F7D666F8CF86067F7B3C23628DEFACCDF19F3628DEFACCDF18DD51131F731BAA2263EE6375444C7DCC65E0BC48B3A5280E81A0E1C5684712919572C0CFEF67846C51BDF599BE3192EA5D335189E81938CE30CD9E5C06E6AAB1A23551962A4AB797226B8A8BC09F633D799164C0EA260E188E28C2386F0A69C8CF4187A13004898C46407A30721BC29A7D2352D99CA46B797219B8A8BC09F64BAA88B2462450689C38C4D679901A9AAAC14CF4187A13004898C46407A30721BC29A7D2392E19CA42B797219B868BC19F6340AE131303B89838650CA308E1BC29A72C51BD8999BE31B032FBD9E118CF5E6459303A898386238A308E1BC29A72C51BD8999BE3188D4BA66A91ADE5C866E2A2F027D8D02B84C4C0EE260E194328C2386F0A69CB146F62666F8C6C29D509629B33473184D6ED6A9720DD51131F731BAA2263EE6375444C9DCB65E467860E655E391903E27590E44A4651F7E554185473267A098C6CD1B72B52BE9BD0CBF3637433FCD8DD0CBF3637432FCD8C8650D72617B7EF5BC6E592654185473267A098C6CD1B72B52BE9B8A27B14337C636067F7B7C232A0C29F9923D04C63668DB95A96F4CC51BD8A19BE3190D2E4E4C2F6DE0ABC2E59265447973247A098C6A2DBD5A95F4C5438AC732645898B9CAEB72B52BEA781A7DEDF08CA830A8E64CF41318D9A36E56A5BD355062AFCC9916262E72BADCAD4AFA92195C9C985EDFB2AF0B96459511E5CC89E82631A8B6ED6A57D33145F62866F8C6C0CFEF6F84654185473267A098C6CD1B72B52DE9AA888DE6488B131735AB76B52BEA5D0D3F3637432FCD8DD0CFF0036B7434FCD8DD0CBF36FFD862B0A84CE4DB96197226B76B5549F64186789CE649E07190C2275911C4E7A6DF57919E27265278E4640F89D18470C91947DC2995099CA4B3433184D715169721F0340AD0C9CE0489838650BAC07225C29A725CBA7A6D595CBA7F1DDE73D5D6EA8AA73B9AC6815A1939C0913070CA17580E44B8534E5D2ED31F6D1BA5DA63ED9FC08D54466A6DADE5C89ADDAD7027D90619E273992781C643089D6447139E9B7D6C2992F162A4F34731833715169720CBC8AF0C132ABC720D07C328C1C8648CA3919EBCCF439C0913070C871590E44B8534E446AA33393756F2E44D6ED6B833EC830CF139CC93C0E321844EB22389CF4DBEB62B0A88CE4D995F97226B76B5549F6EA8AA73B9AC839789E874AAF030346238AD06E253D34E58ABAA133936657E5C89ADDAD5527DBAA2A9CEE6FCBBF768D3A74FF00A319EBCC8B2607513070C4714611C378534E4C46A5D33548D6F2E43371517813EC6815C262607713070CA194611C378534E5D51131F73188D54858A91ADE5C89AE2A2F027D8CF5E6459303A898386238A308E1BC29A725E45789CE649E390683E195911C4E4651CB0A74BE66A6CCD1CC60CDBB5AA5C86933D799164C0EA260E188E28C2386F0A69C9B1574BA67292CAFCB90CDC545AA4FB25D54459231228344E1C626B3CC80D4D5560A830CF0C132ABC0E321844E8C1C864F4DBEAE5FEE476572E7FC8965CF5798D02B84C4C0EE260E194328C2386F0A69C90720E3D09655E06190C40F450DC367A69F4F15445926DA2E6309ADDAD71E4197919E18399578E4640F89D64391291947DE974A73B66D853A5E33935E68E63866DCAD52E418CF5E6459303A898386238A308E1BC29A7233D061E84C01226311901E8C1C86F0A69F7034FBDBE118CF5E6459303A898386238A308E1BC29A726C5612F19CA4B2C32E43371516A93EC6815C262607713070CA194611C378534E5F2E28BEFA8CDF18C9708DE648F40D1735AB76B535EA5F4C183F31664B2A23CB9923D04C63516DDAD4AFA6F432FCD8DFF45FFCC5992CA88F2E648F41318D45B76B32BE9897B157E64CF40D17395D6E56A67D4F768FD2CA830A8E648F41318D9A36E56A5BD31511E5CB69162631A8B7151657D33AE57E136E46BA927F5197B65D5E9FE35D0CBF36B21A435C98DEDFBDAF1B96499506151CC99E82631B346DCAD4AFA6AA23CB96D22C4C63516E2A2CAFA6AE35CBCE7D93FB2ACEB6A7592F614FCC99161A31B346DDAD4CFA625EC55F9933D0345C6575B95A9AF525CAB93931B27F655E372CEB7233D493FA8CBDB2EEF4FF001A54446F32245898B9AD5BD5A95F5343286B930BDBF7ADE172C8B628BEFA8CDF19F0DDA1B145F7D66778CF9B146F7D666F8C62B8D1131303B860C41B14A308E1BC5957D3C55199AA468B98C26B8A8BC790641C8388B3A528018643103D6847129E9A7DEA8AA73B9AC792A333949D1731C4D71D178F21F02BD061164C0EA1A310701E8C2386F1655F7768D1ABB99782F13D09655E3A0683871450DC364655C92EAA2335671E819270E3135E05C0926AAB05E97698FB68C5715A19260090D0703617470E4378B2AE4839789E874AAF030346238AD06E253D34E5BBE9B99782F13D09655E3A0683871450DC364655CB146F62666F8C6C2992F162A4B34331833715169720C5715A19260090D0703617470E4378B2AE585C7BEB2CFC9B6397F64FCDB15EBCCF4260090D0703471460E4378B2AE4BC8CF1393293C723207C4E8C238648CA3EE14EA80CD5279A398C26B8A8B4B90D067A0C22CE71D44C623103D644712E14D3EFC3146F7D666F8CF9B146F7D666F8C65E45789CE649E390683E195911C4E4651CB0A64BC6726DCD0CC60CDBB5AA5C87C0D0344324C0122631194528E1C86F0A69F7AA2263EE5B75444C7DCCF8118974CE5255BCB80CDC545E04FB25D54459231228344E1C626B3CC80D4D5560B07C2C14ABFC4DD9D36E0476856C36DAFF00A35DF50C22F7446EE22CD4BC35C58FE21929C651D860061479CE2330DFC711A833E4625FF5B8F44F05F73442DD13C19DCE10B270275C13992E1D2EDC222F91974834C70DFB6D137777D96BED36BA769B3D9EAE8DFADAF8A82663254D6C8ADD72CC3B73EA422A73BA52EAA12C91891219270E31359E6386A6AAB05418678609955E07190C227460E4327A6DF572E8EA496572E7FC8965CF57992EAA22C9189141A270E31359E6406A6AAB055E0BC48B3A5280E81A0E1C5684712919572DCC839789164B250030346238A288E1B3D34E49752E99A8C4F40C9C671866CF2E03735558D2E5FEE4B6572E7FC8965CF5798D02B84C4C0EE260E194328C2386F0A69CBE5C517DF519BE319511E5CB71162631A8B7151657D310D2E4E73AF6FD95675B523F054446F32445098B9AD5BD5A95F53E867F9B5BA19FE6DF86067F7B3C23628BEFA8CDF18CFF00FAB5DD769A9A9AFA767ADADA75767A35F63B2D4D86CF46CF67ABA353535746ED1AA288FBB85035158D3D7EA9587BAED5EF6AC994EF8A1DA1A103C4760BA81E8DC1E2FB686BCB83E3EEC21EE9B77979DAEA6C361B1D4D3B4DA6D4A050702394482F83C19D5FB61B40EED1DF46B6DB733A3B6AC39E1F75767A74E8D8EB69D5DB68D9AA0C2A39933CC4C63668DB95A95F4CFAB21A5C9C98DEDBC1578DCB24CA88F2E648F41318D45B7AB52BE99D0CBF3632E4435C98D95FBD6F1B967592F614FCC91161A31B346DCAD4D7A62A223799222C4C5CD6ADEAD4AFA9FF00D187F31664B7235D497FA8DBDB2EEF4FF1AF9376FD1A7469633D06116738EA26311881EB2238970A69F52EAA2335671E819270E3135E05C0926AAB055CBFDB6ACAE5CFF8EAF49EAF320C33C4E7324F038C86113AC88E273D36FABC8CF1393293C723207C4E8C238648CA3EE14EA84CE5259A398E26B8A8B4B9065E0BC4F4259578E81A0E1C514370D91957241857860E655E07068C219590E44E7A6DC88D4BA5926DADE5C866DDAD7027DB146F7D666F8C67AD3F4FFF004D9B6FFA31FE3672D806A260972D8ED622258FC35E1DF62EB037B1D02A3A237B0DE80EEDDDE2FB7D8EDD850361D98908B523A1C82B8439EF69B3A8C4137C2E16F8231D8ADDF6BB2D488C45E7610FDBB96E67AFA6D1E74FFF0056CD9772F23D09655A390703471460DC364655CBA5DA63ED9B74BB4C7DB36E97698FB66DD5154E773590CE9EA4B7B7317FC8965C8D098AE2B4324C0121A0E06C2E8E1C86F1655CBAA2A9CEE6B219D3D496F6E62FF912CB91A1315C5686498024341C0D85D1C390DE2CAB97C9BF768D3A74FF00A319EBCC8B2607513070C4714611C378534E4830CF0C132ABC0E321844E8C1C864F4DBE91AA88B25235BCB9135C545E04FB628DEFACCDF18C9752E99A8C4F40C9C671866CF2E03735558D75444C7DCB62B8D10C9CE04868C41B14AC07225C5957DEA8898FB98CB9B4F524B2B973FE44B2E7ABAC6815C262607713070CA194611C378534E58297D0AF33BFDE9C1A04788E824696C204614B3A3BBDED3F4E9D905841B1354C7797F7A803F8D611187E717E7A763FE1AE645449E2C6D9EA43352201C88BF6D2181C2A41B1F7D154076C03DBC2F650FD83B6BBB8DE16338BC38BE0D9A0E8F1BE3908D9687989B0C94582804F102768ABDBF6BBCC69CE7DCB640B1F408CD0E6A08434FD5283BDEA6ED8BCAED41A7A1D2AB872310681EB21B8948CABEB6067F7B3C23628DEFACCDF18DD2E94E76CDB0A74BC6726CCD1CC60CDBB5AA5C832F041C7A1D2ABC74320701EB41B8948CABEB614CA84B14D99A398C26B76B54B9065E467860E655E391903E27590E44A4651F7E554185473247A098C6CD1B72B52DE99F56434B97930BDFF64DE372C937235D493FA8DBDB2EEF4FF1A54446F32245898B9AD5BD5A95F53E86BF9B592E11BCB69161A2E6B5715166BD492E11BCC91E81A2E6B56ED6A6BD4D0D21BE4C2F6FDED78DCB24D8A2FBEB337C6360A1FF002C4CEFF7A7065B503DABFC6A0FA8EBB5D7D8BEC503F157275DB13C58D0800198840C42FB078BE873D9ED767148AC3A3FB533A18268A06844328C425E9F364F5108480A3E25026CE1B121088A030578D9EBEF098049D8EC2843A1DDFB61AAED06D4D8EBBB6D98322E108C2000009BD43363B77A09C43650D866C36F1B8A244493128A4621CEF1E7D0942F8921D72BF09B2A0C2A396C22C4C63668DC74595F4DC0CFEF6F84654185473267A098C6CD1B72B52BE9AA88F2E5B48B1318D45B8A8B2BE9BD733F09B75CDFC24CA830A7E5B08B1318D9A371D1657D310D21BE73AF6FDED675B524CA888DE5B4F4131735AB8A8B2BEA7F2AF05E27A12CABC740D070E28A1B86C8CAB974BB4C7DB36C55D2F1629B32BF2E4336ED6AA93EC57AF33D098024341C0D1C518390DE2CAB92F233C4E4CA4F1C8C81F13A308E192328FB853AA133949668E6389AE2A2D2E419782F13D09655E3A0683871450DC364655C8AF418459303A868C41C07A308E1BC5957DC5595099C9B32BF2E04D6E56AA93EC9752E964B388A0D1C671866F03204935558D609FF00F2C4CDFF007B70654AE9BF685AC4765AFB39A7314EC7535765A9A346AE8DDA3468D1A3FF004DDF4D3F4DFF00FC010F37DD018D47D1A429EF61AFADB6D7D4D47D0B8A21A31826C22D09DAEBEDDC36FBF87B40E47A22FCAD42C1C0FB83DED76F05143CEDA29AE62806046784A361513B954E031376D9EC1F1D3A5DA64EDA3628DEC4CCDF18C462A23393656F2E04D6ED6B813EDD5154E7735B146F62666F8CF89A056864E70244C1C3285D603912E14D392E5D3D36ECAE5CFF008EAF49EAF325D4BA592CE22834719C619BC0C8124D55635F2E28DEFACCDF19F03C5511649BA8B98C25B76B5C79062B8D10C9CE04868C41B14AC07225C5957D418678609955E07190C227460E4327A6DF572FF723B2B973FE44B2E7ABCC6815C262607713070CA194611C378534E4839071E84B2AF030C86207A286E1B3D34FBA3E1861A76311368087AE263076DCDBBFC49D1EDDB40AC030B183EC31F1FF0067ADB57886EB6D35DD74EB95FB2FAF0DF75F57469FF4DA15EF3BFF00E07ED9E9D568DA628BBB461F63213106D431117DD7D3B47BD9B881044E90F77D47ED4D9BDBE6AECF5746DB6A98837B370DA98D16DBB8EA6C226F82678D8ED36BB6DAEA6D36EFBABABADA35B4EA6AECF5759B143F7D065F8C641C838F425957818643103D14370D9E9A7DDFA3F4EF633D799164C0EA260E188E28C2386F0A69C8AF5E6459CE3A868381C38AC88E25C595723C5521629BA8B98C26B76B5C7906EA8898FB98CBC17891674A501D0341C38AD08E25232AE5B99072F122C964A006068C4714511C367A69CBE5C517DF519BE3192F62AFCC99E81A2E32BADCAD4D7A96397F64FCDB25EC56396C22C345CE575C7459AF534B846F3247A068B9AD5BB5A9AF53FA60C3F98B325B91AEA4BFD465ED9777A7F8D6E65CAB97930B2B4595785CB3ADD737F09B4331BB707B89EC3651727B6EEB0AD7D3B9EB6900C4353DC51C364F0EE6B383B6CB5F46FE07500203BB61E6191D4110006DEE3E2114384260EE9FA38EF9CFF901DDB0F3034E9088FC38E91E0F89DC22D077BFD7C07CD617C335F67AFABB18BBBEA6BEB7FE2856DF51EF4EAEC1CF5769ACEDFAB89B67A53F854732479894C6CD1B72B32BE9A97B157E64CF40D17195D6E56A6BD4B7E8D1A37696C513DF5999E3192F614FCB61E81A31B346E3A2CCFA62E5435CE7595FBDACEB6A7595111BCB69E8262E6B57151657D4FA197E6C6E869F9B1BA197E6CF9776FD1A7469633D06116738EA26311881EB2238970A69F70B8F7D659F9363C52E162A4A8B98E19B8A8BC7906E97698FB66CA852E9648C48A131C64E066CF320352B4A8D1E2A90CE52345CC6135C545E3C8315EBCCF4260090D0703471460E4378B2AE4D8E67D93F36C8390711674A50030C86207AD08E253D34FABC1071164B2501D0C81C07A288E1B232AFBFAB4B20F416461D49440E3318826B024894F4D3E25650C602C53EC30501BB1FBACBB11CD5520F8AAA5D2C935E57E5C86A815AAA4FB618900717E43A5B6DB6DB1DFAFAF526D40C43B534EFD0EFA37B62A2A60CA4CB95FA0B5125B75AAA4FB7545539DCD6C2E3DF5967E4DB1575446726CCAFCB9135BB5AAA4FB25D4BA592CE22834719C619BC0C8124D55635D5154E7735B0A754267293CD1CC7135C745A5C8319E8308B39C7513188C40F5911C4B8534FABC8CF1393293C723207C4E8C238648CA3EE14EA84CE5259A398E26B8A8B4B9065E0BC4F4259578E81A0E1C514370D919572F937EED1A74E9FF4633D799164C0EA260E188E28C2386F0A69CB146F62666F8C6C0CBEF6784F81A068864980244C62328A51C390DE14D3EAE5D1D492CAE5CFF916CB9EAF325D54459231228344E1C626B3CC80D4D5560AD8AC25E3394965865C866E2A2D527D8D02B84C4C0EE260E194328C2386F0A69C9B033FBD9E11B146F7D666F8C6542A88B259C450989C2704D781902495A54150D7F6DABDB98CFE3ABCE4682DD51131F73192EA5D335189E81938CE30CD9E5C06E6AAB1A5CBFDC96CAE5CFF00912CB9EAF31A057098981DC4C1C3286518470DE14D391A068864980244C62328A51C390DE14D3E91AA88B15235BD05C89AE2A2F067DB146F7D666F8C6542A88B259C450989C2704D781902495A5417A5CA9CED9B25D54459231228344E1C626B3CC80D4D5560BF0C51BDF599BE33E654185473247A098C6CD1B72B52DE98A83157E64C8B1317195D6E56A57D490D2E4E4BEF7FD9578DCB22DD737F09B73C9D493FA72B272EAF4FF25FA60C3F98B3259511E5CC91E82631A8B6F56A57D337B7D1B145F7D66778C6541853F2D845898C6CD1B8E8B2BE9886972725F7BEE055E372C937235D497FA8DBDB2EEF4FF1A4BD853F2DA7A068C6CD1B8E8B33E998E57D93F36C97B0A8E64C8B0D18D9A36E56A6BD315111BCC8916262E6B56F56A57D4D0D21BE4C6F6DE36BC6E5926C517DF599BE3195062B1CC9916262E72BADCAD4AFA9E067F7B7C23628DEFACCDF18C970F2E5B4F40D18D45B8A8B35E99D733F09B7237D493FA8CBDB2EEF4FF1ADEDBF46ED2D8A2FBEA337C67CCBC1789E84B2AF1D0341C38A286E1B232AE4830AF0C1CCABC0E0D18432B21C89CF4DB962AE97CB14DB95F97219B76B5549F641C8388B3A528018643103D6847129E9A7D542974B246245098E327033679901A95A54690D7F725BDB98CFE45B324682DD2ED31F6CD9072F13D0E955E06068C4715A0DC4A7A69CB1575426726CCAFCB8135BB5AAA4FB1A068898E71DC4C62328A5644712E14D3E9A056864E70244C1C3285D603912E14D3974BC4C9DB462B8AD0C93004868381B0BA38721BC5957263C92E962A4A8B98C19B8A8BC7906542A88CD4627A0989C2704D679701B95A54157919E27265278E4640F89D18470C91947DEA88A73B98C9752E964B388A0D1C671866F03204935558D74BB4C7DB362352E1629B6B797019B76B5C09F6C51BDF599BE33E1A34FE9FAE862BD799E84C0121A0E068E28C1C86F1655CBAA2A9CEE6B7545539DCD64BA974B259C45068E338C3378190249AAAC6BE4DFBB469D3A7FD18CF5E6459303A898386238A308E1BC29A72EA8898FB98DD51131F731BAA2263EE6375444C7DCC623551962A4AB797226B8A8BC09F65E0838F43A5578E8640E03D68371291957D542A88B259C450989C2704D781902495A54170A74BC6726CCD1CC60CDBB5AA5C832F041C7A1D2ABC74320701EB41B8948CABEE171EFACB3F26D8E67D93F36D85C7B132CFC9B2F22BC4E7324F1C8341F0CAC88E272328E4863FB6DDEBCC5FF001DDE7234262B8D10C9CE04868C41B14AC07225C5957DE974A73B66D853A5E33936668E63066DDAD52E4197820E3D0E955E3A190380F5A0DC4A4655F57915E27399278E41A0F865644713919472E976A73B68C6815C262607713070CA194611C378534E4681A2192600913188CA29470E4378534FA46AA22C548D6F417226B8A8BC19F6C51BDF599BE318D0344324C0122631194528E1C86F0A69F715854258A92CB0CB9135C545AA4FFCF8A2FBEA337C637432FCD8DD0CFF0036B7432FCD8CA830A8E5B08B1318D9A371D1657D37032FBD9E11B737235D3737A8CBD7316CBFF1AEB97F84DBAE6FE1264BD85472D87A068C6CD1B8E8B35E9B8E67D93F36D85CFB142CFC9B7D197221AE73ECADC36B3EDA9E64B846F2DA45868B9AD5C5459AF52EB9BF84DBAE5FE136EB9BF8499511E5CB71162631A8B7151657D310D2E4E73AF6D164D9F6D493628BEFACCEF18CA888DE6488B131735AB76B52BEA48690D72637B7EF6BC6E5926C517DF599DE31B144F62866F8C643686B9CFBDB78DACEB6A49BA197E6DF9B146F7D666F8C65E46789C9949E391903E274611C324651F7AA229CEE637545539DCD6C51BD8999BE31B032FBD9E13E09755119AB38F40C9387189AF02E049355582E2AE978B14DB95F97219B76B5549FF820E5E27A1D2ABC0C0D188E2B41B894F4D396397F64FCDB15EBCCF4260090D0703471460E4378B2AE5D5154E7735BAA2A9CEE6B7545539DCD6E97698FB66DD2ED3276D197915E18265578E41A0F86518390C9194724BAA88CD59C7A0649C38C4D78170249AAAC148C4BA58A6DADE5C866DDAD7027DB146F7D666F8C6EA8AA73B9ADD5114E77318D03444C738EE263119452B2238970A69F52EAA2335671E819270E3135E05C0926AAB055CBFDB6ACAE5CFF008EAF49EAF320C33C4E7324F038C86113AC88E273D36FBF2E28DEFACCDF18D8A37B13337C67C7146F62666F8C6C0CBEF678465E0838F43A5578E8640E03D68371291957DC51BD8999BE31B468DEC839789164B250030346238A288E1B3D34E4830CF0C132ABC0E321844E8C1C864F4DBE91AA88B15215BCBA135C545E04FB19EBCC8B2607513070C4714611C378534E4839071E84B2AF030C86207A286E1B3D34FB8E67D93F37F0418678609955E07190C227460E4327A6DF572FF723B2B973FE45B2E7ABCC830AF1393293C0E0D184328C23864F4DB96171EFACB3F26C78AA22C537513418C26B76B5C69062B8D10C9CE04868C41B14AC07225C5957D41C838F425957818643103D14370D9E9A7DC55D2F19CA4F2BF2E43371516A93EC975511648C48A0D1387189ACF32035355582E28DEC4CCDF18C46A5D33548D6F2E43371517813EC6815C262607713070CA194611C378534E5F2E28DEFACCDF18CA888DE6488B131735AB76B52BEA5D0CBF36B7432FCDAD8A2FB14337C636065F7B3C236E65418ABF32645898B9CAEB72B52BEA4C97B0A7E6488B0D18D9A36E56A6BD312E11BCC91E81A2E6B56ED6A6BD490D21AE4C6F6FDED78DCB24D8A27BEB333C6375CDFC24CB9572739F64E8B2ACFB6A7BE0A830A7E5B08B1318D9A371D165BD33033FBDBE11BE8D85C7BEB2CFC9B6397F64FCDB25EC56396C22C345CE575C74599F53FA37D3732A0C2A39923D04C63668DB95A96F4CE793A92FF004E564E5DDE9FE4A8690D72617BFEF6BC6E5926541853F3247A098C6CD1B72B52BE9BF2E28DEFACCDF18DD5154E7735BAA2A9CEE6B7545539DCD633D799E873812260E190E2B21C8970A69CB032FBD9E13E3A34FE9FAE862BD799E84C0121A0E068E28C1C86F1655C8AE3444C4C0EE183106C528C2386F1655F7AA229CEE6325D4BA592CE22834719C619BC0C8124D55634830AF0C1CCABC0E0D18432B21C89CF4DB974BB4C9DB46E97698FB66C6815A1939C0913070CA17580E44B8534E44725C2C53756F2E4336ED6B813ECBC1789E84B2AF1D0341C38A286E1B232AE585C7BEB2CFC9B1E2974B252545CC60CDC545E3C832F22BC304CAAF1C8341F0CA3072192328E5D5154E7735B0A754267293CD1CC6135C545A5C832F05E27A12CABC740D070E28A1B86C8CAB915E8308B260750D188380F4611C378B2AFB8ABAA133936657E5C09ADCAD5527DBAA2A9CEE6FF00EE7FFFC4003E10000102050106030703040004070000000203130001041114150512212232331085D4162023346394E4313541245161624260718206305281B1B3D1FFDA0008010100133F00FF0091349A05DB7281054F9D5408F899C681B2FD34681B2FD34681B2FD34681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C681B2FD34681B2FD34681B2FD378E9340BB6E5020A9F3AA811F13386125DB72BD048F9151209DC0CE5C46302969597B2DCEC2417BB41EEE81B2FD34681B2FD3430920E375F509072242212B0004B80C3092EDB95E8247C8A8904EE0672E231A06CBF4D1A06CBF4D1A06CBF4D1A06CBF4D1A06CBF4DEF795D2463AABB6E2A09072242473B9984B80CED1A06D4F4D1A06D4F4D1E69491F7F1AB5020E37408247C8AAE272B1846AD40BB6E502E907224B91F1338C0AAAA7996DDEC2476B3A1D519F4B43938F4A952ADF06A954960B2C82A1CE11815543938F549552DF1AA924910B2282A7CE719F4B54F3396EF6153B59D08D22BD76DC4C150E7490209DC0C27C0A33E96BB1B22955A547E0D2AAAAC77597483902302AA9597B11AEFA417BB471ABD020E36A9A47C8AAE272B181CB88C605550E4E3D52554B7C6AA492442C8A0A9F39C6BFB2FD4C6BFB2FD4C67D2D7636452AB4A8FC1A555558EEB2E907204605552B2F6237DF482F768E349AF5DB72BD75439D24083A0C23CD2923EFE348AF5DB71305439D24082770309F028D036A7A68C0AAA565E71AEFA417BB47D378F2BA4F7BCAE923CCE93C7CD2923EFE35FC579EA5497ED629DACEDBABC349CEC8C863EBA5B9BAC46262BCF552ABF6B7CED67777AA71E5957E1A06532CD2A48777282F76AFD318994CB35492FDADF0BDDADDEA8D27071B1D8FACAEFEF3F1E67571A062BCF52AA877728ED676FD3E38994CB35492FDADF0BDDADDEA8D27071B1D8FACAEFEF3FE1E69491F7F1E594BE1F7F1E5749EF795D2479A5278F9A5247DFC795D24681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C795D5F869340BB6E5020A9F3AA811F1338D2681071BA05D50E749013E0611F611A4502EDB8A9AA7CEAA0473B999CF8943092EDB95E8247C8A8904EE0672E231A06CBF4D1A06CBF4D1A4D020E3740BAA1CE92027C0C23EC3C3CD2923EFE3CAE93C3EFE3CAE93DEF2BA48D036A7A68D036A7A68D036A7A68D26BD071BAF4153E755010E8038FBF8F2BA48CFA5AEC6C8A556951F834AAAAB1DD65D20E408C0AAA565E71BEFA417BB47D378D22BD76DC4C150E7490209DC0C27C0A357A05DB71504839125C8E7733097018CFA5A565E71BEFAA17BB47D378C0AAAEC6C8AA56A91F8D4A92A89DD15D23E438D5E8176DC54120E4497239DCCC25C06275F4B4ACBCE37DF542F7694E9BC3E92EDB890AA1CE91104EE0613E053B479A5247DFC6915EBB6E260A873A48104EE0613E051E694913AFA5A565E71BEFAA17BB4A74DE1F4976DC48550E748882770309F029DA3CD292302AAA9E672DDEC2476B3A11A06D4F4D1A06D4F4D1A06D4F4D0C2A838DD02091F22A2272B181CB88FBDA06532CD2A48777282F76AFD31ECA7E6C7B29F9B1ECA7E6C7B29F9B1A4E0E3E3E47D7577F79F8D032996695243BB9417BB57E98F33A58FBF8D032996695243BB9417BB57E98F33A48D57071B1F23E82BBFBCFC65E532CD2A48777702F76B7BA651AFE532CD524BF6B142F76ADD51F7F1A06532CD2A48777282F76AFD31AFE532CD524BF6B142F76ADD51AB60E363E47D0577F79F8CBCA659A5490EEEE05EED6F74CA3CCE963EFE340CA659A5490EEE505EED5FA631329966A925FB5BE17BB56EA947B29F9B1ECA7E6C7B29F9B1ECA7E6C7B29F9BFF91814B54F3388DF7D23B59D3861241C6EBEA120E44844256000970186125DB72BD048F9151209DC0CE5C46302969597B2DCEC2417BB41E190AA0E36A82A1CE9109CAC6984F814AF1FBA6662318DF3CFB7B994BF6ED7DF8D0365FA68C855071B54150E74884E5634C27C0A578D7F6A7A98D7F6A7A9F0C0A5AA79971BEFA476B3A7D30C24838DD7D4241C890884AC0012E03E19F554ACBD96E76150BDDA087D55DB7281054F9D52239DCCCE7C4A348A041C6D505439D2404E563009F028C0A5AA79971BEFA476B3A7D30C24838DD7D4241C890884AC0012E03E1814B54F3388D77D23B59D38D0365FA68D2681071BA05D50E749013E0611814B54F3388DF7D23B59D38D0365FA6F7B48AF5DB71305439D24082770309F02F0CFA5A565E71BEFAA17BB47D3787D25DB71215439D22209DC0C27C0A768D036A7A68C0AAA565E71BEFA417BB47D378D22BD76DC4C150E7490209DC0C27C0A1F49071BAF4153E754842560039F128CFA5AA799CB77B0A9DACE846915EBB6E260A873A48104EE0613E05E19F4B4ACBD88D77D50BDDA38C0AAAEC6C8AA56A91F8D4A92A89DD15D23E4386155DB7282A120E44848E7733097018FDAF0F2D8C6F9E65CDFC45FA2F6DC87D25DB71215439D22209DC0C27C0A768D5A8176DCA05D20E449723E2671815554F32DB9D848ED6743AAD0C2A838DD02091F22A2272B181CB88C6BFB2FD4C67D2D53CCE5BBD854ED6742348AF5DB71305439D24082770309F028D5E8176DC54120E4497239DCCC25C063EFE348AF5DB71305439D24082770309F02F0CFA5A565EC46FBEA85EED1C3E92EDB890AA1CE91104EE0613E053B7BDE594B18994CB34AAAFDADF0BDDAB754A3F63D3B4FFB975CCFFF004B3519794CB34A921DDDC0BDDADEE9947B29F9B1FB1E9DA7FDCBAE67FF00A59A8CBCA659A5490EEEE05EED5FA651AFE532CD2AABF6B142F76ADD5E1A06532CD2A48777282F76AFD31978AF3D54921DDDC3B59DDEE99C7B57F851A56A98789FD0FCCBC8B9BF8AE76E56DFB47B29F9B1A4E0E3E3E47D7577F79F8D032996695243BB9417BB57E98CBC579EAA490EEEE1EED9DDEE99C6AD9D9390C7D14B737588D0329966A9543BB9417BB57E98D7F299669555FB58A17BB56EA8D5B071F1D8FA0AEFEF3F1A56A98789FD07CCBE8B9BF8AE76E56DFB4626532CD524BF6B7C2F76ADD51A4E0E363E47D7577F79F8F2CA5F1F2CA4F7BCAE92184976DC48D23E4544827703397119DA3029695979B73B0905EED27D578D5ABD071BAF5D20E449710E8008D0365FA68C0A5A565E6DDEC2417BB41D57F0D5EBD76DC4CD23E4557209DC0CE5C47C349A05DB7281054F9D5408F899C6052D0E4E3D2AB548FC6A5492582CB2091F21C6BFB53D4C642ABB6E2A6A9F3AA4473B9A853E253B469340838DD02EA873A4809F030F0D268176DCA04153E755023E2671E694912AFAAA565ECB73B0A85EED04642ABB6E2A6A9F3AA4473B9A853E253B4795D5C7D8469140BB6E2A6A9F3AA811CEE6673E250C24BB6E57A091F22A2413B819CB88C6052D2B2F65BBD8482F7682357AF41C6D304839125C42560009701F1F2BA4F7BCAE921F49071BAF4153E754842560039F128CFA5AA799CB73B0A9DACE87863AABB6E2A09072242473B9984B80CED1A06D4F4D1A06D4F4DE19F4B4ACBCE35DF542F768FA6F181555D8D9154AD523F1A9525513BA2BA47C87157B7681943FDCDA58CED2FF0003384A8184E98E9DFE12B19DEEFC536CC71306699343AA76BDDA8D1C234708A8A59A6A28F54AABCEE3295A569AB68248E5294BFCCED19F4A836F623567950BDDA38C0AAAEC6C8AA56A91F8D4A92A89DD15D23E5386155DB7282A120E44848E7733097018FDAF0F2D8C6F9D65CDFC55FB77B46055576364552B548FC6A549544EE8AE91F21C6935E838DD7A0A9F3AA8087401F86935EBB6E57AEA873A48107418467D2D7636452AB4A8FC1A555558EEB2E9072047ED78796C637CEB2E6FE2AFDBBDB721F4976DC48550E748882770309F029DBDEF2CA58CBC579EAA490EEEE1DACEEF74CE356CEC8C8C8FA096E6EB1E18994CB35492FDADF0BDDAB754A3D94FCD8F653F37C3EFE3CB29607F51DE9CA5797F995E252E128095E7B8984CA7697FD250139948252909A73BCF8CEE2769CF85E72BCA568527610194AF39CE73FE2528AC49B1AA496099A6AA72FD6425295E5BD294ED69DBC3FE10995E45BB2FE25398DEDFDE739FF31A06532CD2A48777282F76AFD3E1AAE0E363E47D0577F79F8CBCA659A5490EEEE05EED6F74CA3D94FCD8D27071F1D8FAEAEFEF3F1A06532CD52A8777282F76AFD318994CB35492FDADF0BDDADDEA95AF1FB1E9DA7FDCBAE677FA59A8D2B54C3C4FE83E65E45CDFC573B636DFB7BDABD7A0E3698241C892E212B0004B80C6052D0E4E3D2AB548FC6A5492582CB2091F21C7EE99988C637CF3CDEE65AFDBB5F7E1849071BAFA84839121109580025C06184976DCAF4123E4544827703397118C0A5A565ECB73B0905EED0469340BB6E5020A9F3AA811F13387D541C6E82A150E74884E563009F028CFAAAA79971BEFAA76B3A7D368F2BA48FF00BE5E14E52963266049E42E5796E2729CE76FE4A72B0CA73BDB6A3DBE330A74D2B727F1C853BDE7FACB84AD3BECDDB2A2AF2025BC694913404A523DDDC9F35B7665C62F27524E9A46204A87EA247350E72BFEA0DF87FDC51A4502EDB94082A7CEAA047D671AFED4F531AFED4F531AFED4F531A06CBF4D1FB5E1E5BF93F22C39BF8A8772F6DC8C85576DC54D53E75488E77350A7C4A768D0365FA68FDAF0F2DFC9F9161CDFC543B97B6E4642ABB6E2A6A9F3AA4473B9A853E253B7BDA457AEDB8982A1CE920413B8184F81430AAEDB941509072242473B9984B80C605552B2F38DF7D20BDDA3E9BC795D2467D2D7636452AB4A8FC1A555558EEB2E907204681B53D3463AA838DAA691F22A2272B1A652E2328D036A7A68FDAF0F2D8C6F9E61CDFC55FB77B6E43E92EDB890AA1CE91104EE0613E053B78274229A28A467314574AA24A94D407268A4523009DD4BDA366A96651AA56A12A62A8DD9DD8A646986649CA7BB335EE5095E68D32B4AD492A84D39DC46EF148A5294A45619CE2A7E67682CAA6446AA15339B9F0F978EF5AE56B5A2946432DABB384A725F78385F7921782FD256B4E5C6F41B36A2B0954256B9FC202E1CC30D1A7BF3150C4B94E522E1319CBF48D5E81071BA04123E455713E0607E1F7F1E57491AFECBF5319F4B54F3396E76153B59D08D5A81071BA04123E455713958C3C302AAA9E672DCEC2476B3A10C2A838DD02091F22A2272B181CB88FBDA06532CD2A48777282F76AFD3E1AB60E363E47D1577F79F8D2B54C3C4FE83E65E45CDFC573B636DFB4626532CD524BF6B7C2F76ADD51ECA7E6C6262BCF552ABF6B7CF76CEDBAA718994CB34AAAFDADF0BDDADDEA94693838F8F91F5D5DFDE7E3CB297C03F8AA40A9EB11FFE838A0009112469A736493504C4C39653B14A7394F8CA70B8802C549319A694C3993414BDF7E4090CA5212E6B95EE9D624CA03322DD4896107A616DD9CC1DB7198F4C02929A6B23309837219719CA729FE9394B8452593ACAE5123ABA6911D42A5BA92130A4524729094CAD149564926A27906DA6F12739F2818DCB723DABFC28D0315E7AA9243BB9476B3B7E98FBF8D032996695243BB9417BB57E98CBC579EAA490EEEE1EED9DDEE99C7B57F851ED5FE146818AF3D54921DDCA3B59DBF4C6939D919191F5D2DCDD6231315E7A9525FB5BE76B3B6EA9FBDA4D02EDB94082A7CEAA047C4CE35FDA9EA633EAAA9E6711AEFAA76B3A71A4502EDB8A9AA7CEAA0473B999CF8943092EDB95E8247C8A8904EE0672E231814B4ACBD96E76120BDDA08D268176DCA04153E755023E2671ABD7AEDB899A47C8AAE413B819CB88C6052D53CCE235DF48ED674E33EAA87271EA95A547E0D2AA92216450483903C1CDD3553569D748E432FF008AD23DF9CBFF00485E25FA47F78D8FB357A9A79C84B7484E49C8C933039184E45FAEE6F42889A339DA769F298C8A5C65FCCA10E2E20B564D6DF9CA529EE8260B29729CE579A96943CA22E86FCE76DF4C84A5C65FC4E51AFED3F531E69491814B54F32E35DF48ED674FA6D1A06CBF4D1E6949E390AA0E36A82A1CE9109CAC6984F814AF1FBA6662318DF3CF37B994BF6ED7DF8CFAAA1C9C7AA56951F834AAA4885914120E40F7BCAE93C25415554F32DB9D848ED6743AAD18EAA0E36A9A47C8A889CAC6994B88CA185576DCA0A84839121239DCCC25C063F6BC3CB631BE799737F117E8BDB721F4976DC48550E748882770309F029DA356A05DB728174839125C8F899F8E75354EFA412B1CEE8A8768DEE09998EE914A5FA6F6EDC653FE244504129FFF009049CE53FF00E611B2F475273B5CCE9D496EC8F965720984E7C6F38A619260676E2421329CC653FED79DBFBC4E9C4159A69269260332971294B74A728FED3BCE769FFED394E3CAE92356A05DB728174839125C8F899F86915EBB6E260A873A48104EE0613E051A457A0E3699AA7CEAA0212B001CF8946055553CCB6E76123B59D0EA8D036A7A68D26BD071BAF4153E755010E803F0D26BD76DCAF5D50E749020E830F7BCB29635FCA659A5557ED6285EED5BAA3EC235FC579EAA557ED629DACEDBAA313299669555FB5BE17BB56EA8FD8F4ED3FEE5D733BFD2CD4695AA61E27F41F32F22E6FE2B9DB95B7EDE1AB60E363B1F415DFDE7E3DABFC28A5FFC432A951BFF0009952848E7FE37E51B4692A13552FF005B4C061A5E2A1153713DE3101BDA7FC910CA195A29D05260A6E19015AF3FE084A509D31CE729FF007E33B5FF00EB0B4AC7507C39A7C25FDA5FC4BF494A5294A51A06532CD2A48777282F76AFD31AFE532CD2AABF6B142F76ADD5E1E59491A062BCF52AA877728ED676FD31A4E7646431F5D2DCDD6231315E7A9525FB5BE76B3BBBD538F653F363D94FCD8F653F37DED5EBD071B4C120E4497109580025C063CAEAE33EAA95979B77B0A85EED0755E35FDA9EA633EAABB1B22A92A55BE0D52AAA2774575439C23029695979B73B0905EED0755E348A05DB715354F9D5408E773339F12F0FB08D5ABD071BAF5D20E449710E8008D5ABD76DCAF4123E455720E833F0D5EB9071BAF5D20E449610958023029A85FC7A55AA91F8D4C9A6A85964122E0713AFA9AA799C46BBCA1DACE9C799D5786052D53CCE235DF48ED674E340D97E9A3CAEAE30296A9E6711AEFA476B3A719F5543938F54AD2A3F069554910B228241C811A06CBF4D1814B4ACBD96EF6120BDDA08D5EBD071B4C120E4497109580025C06184976DCAF4123E4544827703397118C0A5A565ECB73B0905EED0469340BB6E5020A9F3AA811F133F7B48AF5DB71305439D24082770309F028F34A48FBFF0C75576DC54120E44848E7733097019DA3F6BC3CB631BE799737F157EDDEDB9181555D8D9154AD523F1A9525513BA2BA47C87E19F4B4ACBD88DF7D50BDDA387D25DB71215439D22209DC0C27C0A76F0FBF8F2BA48C0AAA1C9C7AA4AA96F8D54924885914153E738FDD33311FC9F9179BDCCA43B96BEFC681B53D3467D2D7636452AB4A8FC1A555558EEB2E9072047ED78796C637CEB2E6FE2AFDBBDB721F4976DC48550E748882770309F029DA31D55DB71504839121239DCCC25C067689D05552B2F38DF7D20BDDA3E9BC795D24605550E4E3D52554B7C6AA492442C8A0A9F39C6BDB33D4C6055576364552B548FC6A549544EE8AE91F21F8F95D27BDA06532CD2A48777282F76AFD31AFE532CD524BF6B142F76ADD51AB60E363E47D1577F79F8F6AFF0A355D530F13FAEF96651737F15BEE4ADBF78FD8F4ED3FEE5D733BFD2CD465E532CD2A48777702F76B7BA65E3E59491A062BCF5524877728ED676FD31AAE0E363E47D1577F79F8D2B54C3C4FE83E65E45CDFC573B72B6FDA340C579EA5550EEE51DACEDFA63EC2340CA659AA550EEE505EED5FA631329966A925FB5BE17BB56EA8D27071F1F23EBABBFBCFC79652C6BF94CB35492FDAC50BDDAB7547DFC795D2465E2BCF52AA877770ED6777BA671ED5FE14695AA61E27F41F32F22E6FE2B9DB95B7EDE3E594BEF69340BB6E5020A9F3AA811F13387D541C6E82A150E74884E563009F028CFAAAA799C46FBEA9DACE9C6AD5E838DD7AE907224B887400467D557636455254AB7C1AA55544EE8AEA873847ED78796FE4FC8B2E6FE2A1DCBDA35FDA9EA6349A041C6E8175439D2404F81846052D53CCE237DF48ED674E1849071B48520E4484425604C25C06578C855071B54150E74884E5634C27C0A578D7F6A7A98C85576DC54D53E75488E77350A7C4A76F0CFAAA565E6DDEC2A17BB41D578C0A5AEC6C8A54AA96F8D5492AB1DD65D53E7386125DB72BD048F9151209DC0CE5C46340D97E9A33EAA87271EA95A547E0D2AA9221645048390235FDA9EA633EAAA9E65C6BBEA9DACE9F4C795D278E9140BB6E2A6A9F3AA811CEE6673E251A06CBF4D1A06CBF4D19F5543938F54AD2A3F069554910B228241C81EF6915EBB6E260A873A48104EE0613E051A06D4F4D1A06D4F4D1A06D4F4D1A06D4F4D181554ACBCE35DF482F768FA6F1AB5020E37408247C8AAE272B184605550E4E3D52554B7C6AA492442C8A0A9F39C67D2D53CCE5B9D854ED6742356A041C6E81048F9155C4E56308F2BAB8FB08F34AB87D241C6EBD054F9D521095800E7C4A3F74CCC47F27E45F6F73290EE5AFBF18EAA0E36A9A47C8A889CAC6994B88CA35FD97EA633E96A9E672DCEC2A76B3A11AB5020E37408247C8AAE272B1843E920E375E82A7CEA9084AC0073E251AFECBF530FA4BB6E242A873A44413B8184F814ED18EAAEDB8A8241C89091CEE6612E033B44E82AA95979C6FBE905EED1F4DE3CAE9231D55DB71504839121239DCCC25C067689D05552B2F6237DF482F768FDFF002CA58F653F363D94FCD8F653F36340C579EAA490EEE51DACEDFA63EFFC34AD2F332FFA1F997966F7329CED947B57F851ED5FE146818AF3D4AAA1DDCA3B59DBF4C7D84799D5F86939D9190C7D74B737588C4C579EAA557ED6F9EED9DB754E3DABFC28F6AFF0A3DABFC28CBC579EAA490EEEE1DACEEF74CE355CEC9C8C8FA096E6EB11E594918994CB35492FDADF0DEBB56EA94695838D8F91F5D5DFDE7E3CB2923CCE9634ACEC9C8C8FAC96E6EB11ECA7E6FBDE57490C24BB6E57A091F22A2413B819CB88C681B2FD34681B2FD3479A5247DFF86052D0E4E3D2AB548FC6A5492582CB2091F21C67D5553CCE235DF54ED674FC349A041C6E8175439D2404F81847D8469140BB6E2A6A9F3AA811CEE6673E251A06CBF4D1A06CBF4D1A06CBF4D1AFED4F531AFED4F530FAABB6E5020A9F3AA4473B999CF8946052D0E4E3D2AB548FC6A5492582CB2091F21C67D5553CCB8D77D53B59D3E9B4795D24681B2FD34681B2FD3430920E3690A41C890884AC0984B80CAF1814B43938F4AAD523F1A9524960B2C8247C871FBA6662318DF3CF37B996BF6ED7DF861241C6EBEA120E448442560009701F7BCAE923CD293C7CD2923EFE356A041C6E81048F9155C4E56308F34A4F0D26BD76DCAF5D50E749020E83086155DB7282A120E44848E77330970189D05552B2EB8DF7D20BDDA3E9BC6915EBB6E260A873A48104EE0613E051AB502EDB940BA41C892E47C4CE3EC3C185576DCA0A84839121239DCCC25C063F6BC3CB631BE799737F117EDDEDB90FA4BB6E57D42A1CE91104EE0613E051E575712A0AAAA7996DCEC2476B3A9F55A31D541C6D5348F915113958D329711946AD40BB6E502E907224B91F1338CFA5A565EC46FBEA85EED1C6055576364552B548FC6A549544EE8AE91F21C79A5244EBE9695979C6FBEA85EED29D3787D25DB71215439D22209DC0C27C0A76F7BCAE9231329966A925FB5BE1BD76ADD528F653F363D94FCD8F33A58FBFF0D7F29966A925FB58A17BB56EAF0D0329966A9543BB9417BB57E98C4CA659A5557ED6F85EED6EF54A34AC1C6C7C8FAEAEFEF3F1E59491ED5FE146AB9D9390C7D04B73758F0D0315E7AA9243BB9476B3B7E98FBFF0F2BAB8FB08D7F15E7AA955FB58A76B3B6EAF1D032996695243BB9417BB57E98D5754C3C4FEBFE59945CDFC56FB92B6FDE349C1C7C7C8FACAEFEF3F1A06532CD2A48777282F76AFD3EF795D24681B2FD34681B2FD34681B2FD3469140838DAA0A873A4809CAC6013E051F7FEE69140BB6E2A6A9F3AA811CEE6673E250C24BB6E24691F22A2413B819CB88CED1A06CCF4D19F5543938F54AD2A3F069554910B228241C810FAA838DD0542A1CE9109CAC6013E051AFED4F531AFED4F53190AA0E36A82A1CE9109CAC6984F814AF13AFAAAA79971BEFAA76B3A7D368D268176DCA04153E755023E2671E575719F554ACBCDB9D8542F7683AAF0FAABB6E5020A9F3AA4473B999CF894681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C6AF5EBB6E26691F22AB904EE0672E231814B54F3388D77D23B59D38D0365FA6FF99FFFC4002A11000103030205040203000000000000000100020304051106211213314051101422413280162442FFDA0008010201013F00FD9A073E83708641EFA59046325433897A2924118C950CC25E9DEEDD15DEB22A6A77F1EE55B756B2DF172A66F555FAA5B5748EE546412B4C81EC83B8B2E3E9F8F74767A75496CE42A3823ADAA2F937C7D2BD5AA8DF3B1EE6630BD8521A511F00030AD956EB55D1F0039612B9E00C94C7878EE88CABEC8200C7F8475355D1D710C3B29EF02BA2CCB2E0A9357CD08E40391E54B7685E1B237F2F2BDC3EB18C847FA54C0B58223F5DD67016A767F4DEEF0A42E3212A9C1126241B2ABB232439A5F1F6A4824A69431EAC25B253C2E3F41746E3BAE87215C6DCDB93381C765268280E785E9FA065CE5922FE3B5B147CB90712A8D2570E6F1C4CC0565A534B42D63BAAC671DD0F8EC5608DC2F92C1F2B87EC84785FB2D9BF00BA7EDDFF00FFC400251100010401040104030000000000000000010002030411051221403210224180144261FFDA0008010301013F00FB76D6A73709A139B8EEF2AA40F95E24F85269DF907785069E18FDC5CAFEDDFC0F407B4D4C8B729849523DA154B53161084AF7BF20AB359F356DC5A830A23B43C9513FAAB518B8DC151D335FC555A518707CA15FB94DF4042C1CA6E222F47DDDAF95A77364350FE27709B69CDF6BC26B848DE15AE1CF4381DAC65413188E426EB2F09BAD1F9085F8F3951EA9106E15B977BF211E5BDA6AC64AC05C2E10217921F6EFFFD9, '1', '2022-03-16 21:51:37', '1', '2022-03-16 21:51:37', b'0'); +INSERT INTO `infra_file_content` VALUES (3, 4, 'e9b5fa3c7dbf4a4f96f5568c5eb34f3c.jpg', 0xFFD8FFE000104A46494600010100000100010000FFDB0043000302020302020303030304030304050805050404050A070706080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F171816141812141514FFDB00430103040405040509050509140D0B0D1414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414FFC20011080102010203011100021101031101FFC4001E00000301010101010101010000000000000008090701060A02040503FFC4001C0101000203010101000000000000000000000105020406070308FFDA000C03010002100310000000AA6000000000000000000000000000000000070000000000E81C3A70E8001C03A0700000E8001C2401808000FF000BF9808017F8E12007F8C00A0200040102BE0120C0000BFC000708045D03033802AA794029412BC69C0DFC9B206005261020356037F37E1551D33CB1AA1160BFC00070804553201017F4554D50A002A86AA4582FE0800D51164AA66503FE74CA48B22A85FD1551561552A98AB17F8000E1008AA640202FE8AA8AB00FF0BF98097F490007AB12D2D2920C0DF8F564AC2FE8AA8AB0AA954C558BFC00070804553003013CA0AA9AB1540F2A45A3CA95409B27953CB173C55474CF2C4593CB173C4047F80E9208FA27000384FF0032C387406A0CA8D58554D50D5895A6563526A66A82B06546565A61553541AA1013A0700AAA0000004FE37F03002809E449B22AA5D0303384023572E79F3B250030003CA973C6089FE2026FC3002025FE0003F22FE7CEC9AB9E58B9E6A6795030037F18227F9C26C8E913687E8A504303D48FE9BF916874874C6089FC4863E9E8000E1008CAC7F440C7F4E08195407FC4006A8404E9C1A932A1AA22D1AA0D39AA8AB8FE99492B8BFC708045FE000384023033D494A04A8CB0CA0FA261812401E5C7F8DF095A57F2400EA88115E885E3542585A530037F182384022FF0001C20115F0C00A02791303384023572A808794FCF0666B0E8F062D2B32107EC9B23A66A679724015FCC00D4C9B47D3D0001C201169CCA86B0CA0404E92ACAA62AC5F13FA4FF0033E3965D84EBBF58CCFE4D5B671FF2C44C8B03566563FA2AC6AA5501023A5540003F22FE4D93531D303003001582E79164BE50FEA463B41BD9EF975F7FD2DB5FD2F595FBE75D57FC0991F2754009583545262178D51498F5C0007E45FC8B45CF22C9AB0FF1BE1810AA9368A8312CC516DE535BBDEBA973F7DD6D7647E5FD2B29EC9C8FA0FBC4B2CB19AE55315601FE17F26B9400C00FA27000384FF22C0D58D48FE8808FF1014B4A4AD1C786F9C8DB79BF1DEDBC6DD53FBFACDCF1FF001F41FF0027D57C5D84EC6A13EDAC72C3533541AA101032C32A32B3E944000E1200754408C00B4A6006003FC60007874379C6DAFE7F2EFA09F58C5FACAFD4F98DE553F4BF11437B2A4C1A41164D4CAA640203E9E89B26A6501000384022FF001941EA480C3A44DA1FA2BF9D10F1C6A5D9FF002FCEEE7F92B36330DEC3D671B65FC5EE9C96CBD0E9C1437F2BF8BF01EA8CB0C0490057F2948001C2010FE9961958AB0FE0155055055CFF00B4CB59187FA6CB4BC59A4C69713FEB44FEFE9094C01FF2018FE9AA116C7F4E1D2AA0001F917F241969CCACCA495E7AA3E89C9567AB024095EC5D0FEE1EE1A610F10601FE382043FA6FE06006005800003F22FE7961562AA1E449B26A650127F1218F225531561FD32C1A910235326D1F49879522C8FE8810FE9404E1008BFC000709FE2B065635007040CFA503840335632B1A835332B32C2A899512B4D58D50554CB07F0E954C08045FE0003848015837F37F3D41960D48951BF9218FA4C30337C3D719392BCA4C4831FD35635422C0AA9D1803D480FE9404000FC8BF9E58000D509AC6FE745FCC046A46A8F522585272178FF0BF8FF120CC0CFA4C3CA9164BA048527F9F55000070804354006566A85532561C035432B1AA1AA1543551023803FC6544AD2D399512B4AA64AD1A82AA8001C20115F090605531562AA115C09FE5283D58969EA400AA6749046FE55022C801818E91A98E98C10001C201154C80405FD1553CA0EA9008AFE2025CF3CA8809EAC9583023A43A64832D31EA895A30070D588B27963E9E8000E1008B4E20203542AA55422C13FCA002AC5A52568D48AB8AA1400D50AA64021AA32B2D39C10032C1A732B2808001C2010001E5874CAA87CAB9D18032C37C1FD26C95F4E1BE9E549AE6025A62181EA47F85FC7F8C00408BFC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007FFC4004210000003060209020503030203090000000607080004051415160917010203111318195785253810202147671226272829464175223739303142505160616383FFDA0008010100011200FF00C8F7B6F6DEDBDB7B6F6DEDBDB7B6FF008EFF00868D3A34FCBBDBF568F8FEAD0DBDB7B6F6DFF32F05E27A12CABC740D070E28A1B86C8CAB97545539DCD6EA8AA73B9ADD5154E7735BAA2A9CEE6B614EA84CE5279A398C26B8A8B4B9065E0BC4F4259578E81A0E1C514370D919572EA8AA73B9ADD5154E7735BAA2A9CEE6FC5782F13D09655E3A0683871450DC364655C97919E27265278E4640F89D18470C91947DC2995099CA4B3433184D715169721F2F545539DCD6EA88A73B98C830CF139CC93C0E321844EB22389CF4DBEAF233C4E4CA4F1C8C81F13A308E192328FBD5114E7731BAA2A9CEE6B7545539DCD6EA8AA73B9ADD5154E7737E6C51BDF599BE318D0344324C0122631194528E1C86F0A69F7AA2263EE5B75444C7DCC6C51BD8999BE31B032FBD9E1197820E3D0E955E3A190380F5A0DC4A4655F50720E3D09655E06190C40F450DC367A69F4F154658A6EA2E6309ADDAD71E41950A5D335671E82638C9C0CDE05C09256951A542A88B259C450989C2704D781902495A54170A84BC6726CCD1CC70CDB95AA5C8319EBCC8B2607513070C4714611C378534E49752E99A8C4F40C9C671866CF2E03735558D62ACA80B152795F97026B8A8B549F62BD061E8738121A310681EB21C8971655F550AA22C967114262709C135E064092569505E974A73B66DD2E94E76CD92EA5D335189E81938CE30CD9E5C06E6AAB1AC55D50962A4F2BF2E44D71516A93EC839789164B250030346238A288E1B3D34E58A37B13337C636065F7B3C2319EBCC8B2607513070C4714611C378534E5D51131F73188D54458A92ADE5C09AE2A2F027DB146F7D666F8CF9B146F7D666F8C6C51BD8A19BE33E38A37B13337C636067F7B3C232A0C55F96C3D04C5C6575C74595F52FA32E4437CE7593B86D675B53AC9708DE5B48B0D1735AB8A8B35EA785CFBEA2CFC9B6ED1B99506151CC91E82631B346DCAD4B7A62A223799222C4C5CD6ADDAD4AFA9AE4437C98593BC6B78DCB3AD85CFB142CFC9B25DC29F96C3D03463668DC74599F4CD1BB737D195111BCC9116262E6B56ED6A57D4D72A1BE4C2C9DE36BC6E59DF8628DEC4CCDF18D819FDECF08D8A2FBEA337C67C3033FBD9E11B146F7D666F8CF9B146F7D666F8C6C51BD8999BE33E38A37B13337C636067F7B3C23628DEFACCDF18DD5154E7735B0A754267293CD1CC6135C545A5C832F05E27A12CABC740D070E28A1B86C8CAB96171EFACB3F26DFF7EAB2F05E27A12CABC740D070E28A1B86C8CAB920E5E27A1D2ABC0C0D188E2B41B894F4D396397F64FCDB15EBCCF4260090D0703471460E4378B2AE4BC8CF1393293C723207C4E8C238648CA3EF544539DCC6EA8AA73B9AC839789E874AAF030346238AD06E253D34E58E67D93F37F0C51BD8999BE31B033FBD9E11B146F7D666F8CF86067F7B3C23628DEFACCDF19F3628DEFACCDF18DD51131F731BAA2263EE6375444C7DCC65E0BC48B3A5280E81A0E1C5684712919572C0CFEF67846C51BDF599BE3192EA5D335189E81938CE30CD9E5C06E6AAB1A23551962A4AB797226B8A8BC09F633D799164C0EA260E188E28C2386F0A69C8CF4187A13004898C46407A30721BC29A7D2352D99CA46B797219B8A8BC09F64BAA88B2462450689C38C4D679901A9AAAC14CF4187A13004898C46407A30721BC29A7D2392E19CA42B797219B868BC19F6340AE131303B89838650CA308E1BC29A72C51BD8999BE31B032FBD9E118CF5E6459303A898386238A308E1BC29A72C51BD8999BE3188D4BA66A91ADE5C866E2A2F027D8D02B84C4C0EE260E194328C2386F0A69CB146F62666F8C6C29D509629B33473184D6ED6A9720DD51131F731BAA2263EE6375444C9DCB65E467860E655E391903E27590E44A4651F7E554185473267A098C6CD1B72B52BE9BD0CBF3637433FCD8DD0CBF3637432FCD8C8650D72617B7EF5BC6E592654185473267A098C6CD1B72B52BE9B8A27B14337C636067F7B7C232A0C29F9923D04C63668DB95A96F4CC51BD8A19BE3190D2E4E4C2F6DE0ABC2E59265447973247A098C6A2DBD5A95F4C5438AC732645898B9CAEB72B52BEA781A7DEDF08CA830A8E64CF41318D9A36E56A5BD355062AFCC9916262E72BADCAD4AFA92195C9C985EDFB2AF0B96459511E5CC89E82631A8B6ED6A57D33145F62866F8C6C0CFEF6F84654185473267A098C6CD1B72B52DE9AA888DE6488B131735AB76B52BEA5D0D3F3637432FCD8DD0CFF0036B7434FCD8DD0CBF36FFD862B0A84CE4DB96197226B76B5549F64186789CE649E07190C2275911C4E7A6DF57919E27265278E4640F89D18470C91947DC2995099CA4B3433184D715169721F0340AD0C9CE0489838650BAC07225C29A725CBA7A6D595CBA7F1DDE73D5D6EA8AA73B9AC6815A1939C0913070CA17580E44B8534E5D2ED31F6D1BA5DA63ED9FC08D54466A6DADE5C89ADDAD7027D90619E273992781C643089D6447139E9B7D6C2992F162A4F34731833715169720CBC8AF0C132ABC720D07C328C1C8648CA3919EBCCF439C0913070C871590E44B8534E446AA33393756F2E44D6ED6B833EC830CF139CC93C0E321844EB22389CF4DBEB62B0A88CE4D995F97226B76B5549F6EA8AA73B9AC839789E874AAF030346238AD06E253D34E58ABAA133936657E5C89ADDAD5527DBAA2A9CEE6FCBBF768D3A74FF00A319EBCC8B2607513070C4714611C378534E4C46A5D33548D6F2E43371517813EC6815C262607713070CA194611C378534E5D51131F73188D54858A91ADE5C89AE2A2F027D8CF5E6459303A898386238A308E1BC29A725E45789CE649E390683E195911C4E4651CB0A74BE66A6CCD1CC60CDBB5AA5C86933D799164C0EA260E188E28C2386F0A69C9B1574BA67292CAFCB90CDC545AA4FB25D54459231228344E1C626B3CC80D4D5560A830CF0C132ABC0E321844E8C1C864F4DBEAE5FEE476572E7FC8965CF5798D02B84C4C0EE260E194328C2386F0A69C90720E3D09655E06190C40F450DC367A69F4F15445926DA2E6309ADDAD71E4197919E18399578E4640F89D64391291947DE974A73B66D853A5E33935E68E63866DCAD52E418CF5E6459303A898386238A308E1BC29A7233D061E84C01226311901E8C1C86F0A69F7034FBDBE118CF5E6459303A898386238A308E1BC29A726C5612F19CA4B2C32E43371516A93EC6815C262607713070CA194611C378534E5F2E28BEFA8CDF18C9708DE648F40D1735AB76B535EA5F4C183F31664B2A23CB9923D04C63516DDAD4AFA6F432FCD8DFF45FFCC5992CA88F2E648F41318D45B76B32BE9897B157E64CF40D17395D6E56A67D4F768FD2CA830A8E648F41318D9A36E56A5BD31511E5CB69162631A8B7151657D33AE57E136E46BA927F5197B65D5E9FE35D0CBF36B21A435C98DEDFBDAF1B96499506151CC99E82631B346DCAD4AFA6AA23CB96D22C4C63516E2A2CAFA6AE35CBCE7D93FB2ACEB6A7592F614FCC99161A31B346DDAD4CFA625EC55F9933D0345C6575B95A9AF525CAB93931B27F655E372CEB7233D493FA8CBDB2EEF4FF001A54446F32245898B9AD5BD5A95F5343286B930BDBF7ADE172C8B628BEFA8CDF19F0DDA1B145F7D66778CF9B146F7D666F8C62B8D1131303B860C41B14A308E1BC5957D3C55199AA468B98C26B8A8BC790641C8388B3A528018643103D6847129E9A7DEA8AA73B9AC792A333949D1731C4D71D178F21F02BD061164C0EA1A310701E8C2386F1655F7768D1ABB99782F13D09655E3A0683871450DC364655C92EAA2335671E819270E3135E05C0926AAB05E97698FB68C5715A19260090D0703617470E4378B2AE4839789E874AAF030346238AD06E253D34E5BBE9B99782F13D09655E3A0683871450DC364655CB146F62666F8C6C2992F162A4B34331833715169720C5715A19260090D0703617470E4378B2AE585C7BEB2CFC9B6397F64FCDB15EBCCF4260090D0703471460E4378B2AE4BC8CF1393293C723207C4E8C238648CA3EE14EA80CD5279A398C26B8A8B4B90D067A0C22CE71D44C623103D644712E14D3EFC3146F7D666F8CF9B146F7D666F8C65E45789CE649E390683E195911C4E4651CB0A64BC6726DCD0CC60CDBB5AA5C87C0D0344324C0122631194528E1C86F0A69F7AA2263EE5B75444C7DCCF8118974CE5255BCB80CDC545E04FB25D54459231228344E1C626B3CC80D4D5560B07C2C14ABFC4DD9D36E0476856C36DAFF00A35DF50C22F7446EE22CD4BC35C58FE21929C651D860061479CE2330DFC711A833E4625FF5B8F44F05F73442DD13C19DCE10B270275C13992E1D2EDC222F91974834C70DFB6D137777D96BED36BA769B3D9EAE8DFADAF8A82663254D6C8ADD72CC3B73EA422A73BA52EAA12C91891219270E31359E6386A6AAB05418678609955E07190C227460E4327A6DF572E8EA496572E7FC8965CF57992EAA22C9189141A270E31359E6406A6AAB055E0BC48B3A5280E81A0E1C5684712919572DCC839789164B250030346238A288E1B3D34E49752E99A8C4F40C9C671866CF2E03735558D2E5FEE4B6572E7FC8965CF5798D02B84C4C0EE260E194328C2386F0A69CBE5C517DF519BE319511E5CB71162631A8B7151657D310D2E4E73AF6FD95675B523F054446F32445098B9AD5BD5A95F53E867F9B5BA19FE6DF86067F7B3C23628BEFA8CDF18CFF00FAB5DD769A9A9AFA767ADADA75767A35F63B2D4D86CF46CF67ABA353535746ED1AA288FBB85035158D3D7EA9587BAED5EF6AC994EF8A1DA1A103C4760BA81E8DC1E2FB686BCB83E3EEC21EE9B77979DAEA6C361B1D4D3B4DA6D4A050702394482F83C19D5FB61B40EED1DF46B6DB733A3B6AC39E1F75767A74E8D8EB69D5DB68D9AA0C2A39933CC4C63668DB95A95F4CFAB21A5C9C98DEDBC1578DCB24CA88F2E648F41318D45B7AB52BE99D0CBF3632E4435C98D95FBD6F1B967592F614FCC91161A31B346DCAD4D7A62A223799222C4C5CD6ADEAD4AFA9FF00D187F31664B7235D497FA8DBDB2EEF4FF1AF9376FD1A7469633D06116738EA26311881EB2238970A69F52EAA2335671E819270E3135E05C0926AAB055CBFDB6ACAE5CFF8EAF49EAF320C33C4E7324F038C86113AC88E273D36FABC8CF1393293C723207C4E8C238648CA3EE14EA84CE5259A398E26B8A8B4B9065E0BC4F4259578E81A0E1C514370D91957241857860E655E07068C219590E44E7A6DC88D4BA5926DADE5C866DDAD7027DB146F7D666F8C67AD3F4FFF004D9B6FFA31FE3672D806A260972D8ED622258FC35E1DF62EB037B1D02A3A237B0DE80EEDDDE2FB7D8EDD850361D98908B523A1C82B8439EF69B3A8C4137C2E16F8231D8ADDF6BB2D488C45E7610FDBB96E67AFA6D1E74FFF0056CD9772F23D09655A390703471460DC364655CBA5DA63ED9B74BB4C7DB36E97698FB66DD5154E773590CE9EA4B7B7317FC8965C8D098AE2B4324C0121A0E06C2E8E1C86F1655CBAA2A9CEE6B219D3D496F6E62FF912CB91A1315C5686498024341C0D85D1C390DE2CAB97C9BF768D3A74FF00A319EBCC8B2607513070C4714611C378534E4830CF0C132ABC0E321844E8C1C864F4DBE91AA88B25235BCB9135C545E04FB628DEFACCDF18C9752E99A8C4F40C9C671866CF2E03735558D75444C7DCB62B8D10C9CE04868C41B14AC07225C5957DEA8898FB98CB9B4F524B2B973FE44B2E7ABAC6815C262607713070CA194611C378534E58297D0AF33BFDE9C1A04788E824696C204614B3A3BBDED3F4E9D905841B1354C7797F7A803F8D611187E717E7A763FE1AE645449E2C6D9EA43352201C88BF6D2181C2A41B1F7D154076C03DBC2F650FD83B6BBB8DE16338BC38BE0D9A0E8F1BE3908D9687989B0C94582804F102768ABDBF6BBCC69CE7DCB640B1F408CD0E6A08434FD5283BDEA6ED8BCAED41A7A1D2AB872310681EB21B8948CABEB6067F7B3C23628DEFACCDF18DD2E94E76CDB0A74BC6726CCD1CC60CDBB5AA5C832F041C7A1D2ABC74320701EB41B8948CABEB614CA84B14D99A398C26B76B54B9065E467860E655E391903E27590E44A4651F7E554185473247A098C6CD1B72B52DE99F56434B97930BDFF64DE372C937235D493FA8DBDB2EEF4FF1A54446F32245898B9AD5BD5A95F53E86BF9B592E11BCB69161A2E6B5715166BD492E11BCC91E81A2E6B56ED6A6BD4D0D21BE4C2F6FDED78DCB24D8A2FBEB337C6360A1FF002C4CEFF7A7065B503DABFC6A0FA8EBB5D7D8BEC503F157275DB13C58D0800198840C42FB078BE873D9ED767148AC3A3FB533A18268A06844328C425E9F364F5108480A3E25026CE1B121088A030578D9EBEF098049D8EC2843A1DDFB61AAED06D4D8EBBB6D98322E108C2000009BD43363B77A09C43650D866C36F1B8A244493128A4621CEF1E7D0942F8921D72BF09B2A0C2A396C22C4C63668DC74595F4DC0CFEF6F84654185473267A098C6CD1B72B52BE9AA88F2E5B48B1318D45B8A8B2BE9BD733F09B75CDFC24CA830A7E5B08B1318D9A371D1657D310D21BE73AF6FDED675B524CA888DE5B4F4131735AB8A8B2BEA7F2AF05E27A12CABC740D070E28A1B86C8CAB974BB4C7DB36C55D2F1629B32BF2E4336ED6AA93EC57AF33D098024341C0D1C518390DE2CAB92F233C4E4CA4F1C8C81F13A308E192328FB853AA133949668E6389AE2A2D2E419782F13D09655E3A0683871450DC364655C8AF418459303A868C41C07A308E1BC5957DC5595099C9B32BF2E04D6E56AA93EC9752E964B388A0D1C671866F03204935558D609FF00F2C4CDFF007B70654AE9BF685AC4765AFB39A7314EC7535765A9A346AE8DDA3468D1A3FF004DDF4D3F4DFF00FC010F37DD018D47D1A429EF61AFADB6D7D4D47D0B8A21A31826C22D09DAEBEDDC36FBF87B40E47A22FCAD42C1C0FB83DED76F05143CEDA29AE62806046784A361513B954E031376D9EC1F1D3A5DA64EDA3628DEC4CCDF18C462A23393656F2E04D6ED6B813EDD5154E7735B146F62666F8CF89A056864E70244C1C3285D603912E14D392E5D3D36ECAE5CFF008EAF49EAF325D4BA592CE22834719C619BC0C8124D55635F2E28DEFACCDF19F03C5511649BA8B98C25B76B5C79062B8D10C9CE04868C41B14AC07225C5957D418678609955E07190C227460E4327A6DF572FF723B2B973FE44B2E7ABCC6815C262607713070CA194611C378534E4839071E84B2AF030C86207A286E1B3D34FBA3E1861A76311368087AE263076DCDBBFC49D1EDDB40AC030B183EC31F1FF0067ADB57886EB6D35DD74EB95FB2FAF0DF75F57469FF4DA15EF3BFF00E07ED9E9D568DA628BBB461F63213106D431117DD7D3B47BD9B881044E90F77D47ED4D9BDBE6AECF5746DB6A98837B370DA98D16DBB8EA6C226F82678D8ED36BB6DAEA6D36EFBABABADA35B4EA6AECF5759B143F7D065F8C641C838F425957818643103D14370D9E9A7DDFA3F4EF633D799164C0EA260E188E28C2386F0A69C8AF5E6459CE3A868381C38AC88E25C595723C5521629BA8B98C26B76B5C7906EA8898FB98CBC17891674A501D0341C38AD08E25232AE5B99072F122C964A006068C4714511C367A69CBE5C517DF519BE3192F62AFCC99E81A2E32BADCAD4D7A96397F64FCDB25EC56396C22C345CE575C7459AF534B846F3247A068B9AD5BB5A9AF53FA60C3F98B325B91AEA4BFD465ED9777A7F8D6E65CAB97930B2B4595785CB3ADD737F09B4331BB707B89EC3651727B6EEB0AD7D3B9EB6900C4353DC51C364F0EE6B383B6CB5F46FE07500203BB61E6191D4110006DEE3E2114384260EE9FA38EF9CFF901DDB0F3034E9088FC38E91E0F89DC22D077BFD7C07CD617C335F67AFABB18BBBEA6BEB7FE2856DF51EF4EAEC1CF5769ACEDFAB89B67A53F854732479894C6CD1B72B32BE9A97B157E64CF40D17195D6E56A6BD4B7E8D1A37696C513DF5999E3192F614FCB61E81A31B346E3A2CCFA62E5435CE7595FBDACEB6A7595111BCB69E8262E6B57151657D4FA197E6C6E869F9B1BA197E6CF9776FD1A7469633D06116738EA26311881EB2238970A69F70B8F7D659F9363C52E162A4A8B98E19B8A8BC7906E97698FB66CA852E9648C48A131C64E066CF320352B4A8D1E2A90CE52345CC6135C545E3C8315EBCCF4260090D0703471460E4378B2AE4D8E67D93F36C8390711674A50030C86207AD08E253D34FABC1071164B2501D0C81C07A288E1B232AFBFAB4B20F416461D49440E3318826B024894F4D3E25650C602C53EC30501BB1FBACBB11CD5520F8AAA5D2C935E57E5C86A815AAA4FB618900717E43A5B6DB6DB1DFAFAF526D40C43B534EFD0EFA37B62A2A60CA4CB95FA0B5125B75AAA4FB7545539DCD6C2E3DF5967E4DB1575446726CCAFCB9135BB5AAA4FB25D4BA592CE22834719C619BC0C8124D55635D5154E7735B0A754267293CD1CC7135C745A5C8319E8308B39C7513188C40F5911C4B8534FABC8CF1393293C723207C4E8C238648CA3EE14EA84CE5259A398E26B8A8B4B9065E0BC4F4259578E81A0E1C514370D919572F937EED1A74E9FF4633D799164C0EA260E188E28C2386F0A69CB146F62666F8C6C0CBEF6784F81A068864980244C62328A51C390DE14D3EAE5D1D492CAE5CFF916CB9EAF325D54459231228344E1C626B3CC80D4D5560AD8AC25E3394965865C866E2A2D527D8D02B84C4C0EE260E194328C2386F0A69C9B033FBD9E11B146F7D666F8C6542A88B259C450989C2704D781902495A54150D7F6DABDB98CFE3ABCE4682DD51131F73192EA5D335189E81938CE30CD9E5C06E6AAB1A5CBFDC96CAE5CFF00912CB9EAF31A057098981DC4C1C3286518470DE14D391A068864980244C62328A51C390DE14D3E91AA88B15235BD05C89AE2A2F067DB146F7D666F8C6542A88B259C450989C2704D781902495A5417A5CA9CED9B25D54459231228344E1C626B3CC80D4D5560BF0C51BDF599BE33E654185473247A098C6CD1B72B52DE98A83157E64C8B1317195D6E56A57D490D2E4E4BEF7FD9578DCB22DD737F09B73C9D493FA72B272EAF4FF25FA60C3F98B3259511E5CC91E82631A8B6F56A57D337B7D1B145F7D66778C6541853F2D845898C6CD1B8E8B2BE9886972725F7BEE055E372C937235D497FA8DBDB2EEF4FF1A4BD853F2DA7A068C6CD1B8E8B33E998E57D93F36C97B0A8E64C8B0D18D9A36E56A6BD315111BCC8916262E6B56F56A57D4D0D21BE4C6F6DE36BC6E5926C517DF599BE3195062B1CC9916262E72BADCAD4AFA9E067F7B7C23628DEFACCDF18C970F2E5B4F40D18D45B8A8B35E99D733F09B7237D493FA8CBDB2EEF4FF1ADEDBF46ED2D8A2FBEA337C67CCBC1789E84B2AF1D0341C38A286E1B232AE4830AF0C1CCABC0E0D18432B21C89CF4DB962AE97CB14DB95F97219B76B5549F641C8388B3A528018643103D6847129E9A7D542974B246245098E327033679901A95A54690D7F725BDB98CFE45B324682DD2ED31F6CD9072F13D0E955E06068C4715A0DC4A7A69CB1575426726CCAFCB8135BB5AAA4FB1A068898E71DC4C62328A5644712E14D3E9A056864E70244C1C3285D603912E14D3974BC4C9DB462B8AD0C93004868381B0BA38721BC5957263C92E962A4A8B98C19B8A8BC7906542A88CD4627A0989C2704D679701B95A54157919E27265278E4640F89D18470C91947DEA88A73B98C9752E964B388A0D1C671866F03204935558D74BB4C7DB362352E1629B6B797019B76B5C09F6C51BDF599BE33E1A34FE9FAE862BD799E84C0121A0E068E28C1C86F1655CBAA2A9CEE6B7545539DCD64BA974B259C45068E338C3378190249AAAC6BE4DFBB469D3A7FD18CF5E6459303A898386238A308E1BC29A72EA8898FB98DD51131F731BAA2263EE6375444C7DCC623551962A4AB797226B8A8BC09F65E0838F43A5578E8640E03D68371291957D542A88B259C450989C2704D781902495A54170A74BC6726CCD1CC60CDBB5AA5C832F041C7A1D2ABC74320701EB41B8948CABEE171EFACB3F26D8E67D93F36D85C7B132CFC9B2F22BC4E7324F1C8341F0CAC88E272328E4863FB6DDEBCC5FF001DDE7234262B8D10C9CE04868C41B14AC07225C5957DE974A73B66D853A5E33936668E63066DDAD52E4197820E3D0E955E3A190380F5A0DC4A4655F57915E27399278E41A0F865644713919472E976A73B68C6815C262607713070CA194611C378534E4681A2192600913188CA29470E4378534FA46AA22C548D6F417226B8A8BC19F6C51BDF599BE318D0344324C0122631194528E1C86F0A69F715854258A92CB0CB9135C545AA4FFCF8A2FBEA337C637432FCD8DD0CFF0036B7432FCD8CA830A8E5B08B1318D9A371D1657D37032FBD9E11B737235D3737A8CBD7316CBFF1AEB97F84DBAE6FE1264BD85472D87A068C6CD1B8E8B35E9B8E67D93F36D85CFB142CFC9B7D197221AE73ECADC36B3EDA9E64B846F2DA45868B9AD5C5459AF52EB9BF84DBAE5FE136EB9BF8499511E5CB71162631A8B7151657D310D2E4E73AF6D164D9F6D493628BEFACCEF18CA888DE6488B131735AB76B52BEA48690D72637B7EF6BC6E5926C517DF599DE31B144F62866F8C643686B9CFBDB78DACEB6A49BA197E6DF9B146F7D666F8C65E46789C9949E391903E274611C324651F7AA229CEE637545539DCD6C51BD8999BE31B032FBD9E13E09755119AB38F40C9387189AF02E049355582E2AE978B14DB95F97219B76B5549FF820E5E27A1D2ABC0C0D188E2B41B894F4D396397F64FCDB15EBCCF4260090D0703471460E4378B2AE5D5154E7735BAA2A9CEE6B7545539DCD6E97698FB66DD2ED3276D197915E18265578E41A0F86518390C9194724BAA88CD59C7A0649C38C4D78170249AAAC148C4BA58A6DADE5C866DDAD7027DB146F7D666F8C6EA8AA73B9ADD5114E77318D03444C738EE263119452B2238970A69F52EAA2335671E819270E3135E05C0926AAB055CBFDB6ACAE5CFF008EAF49EAF320C33C4E7324F038C86113AC88E273D36FBF2E28DEFACCDF18D8A37B13337C67C7146F62666F8C6C0CBEF678465E0838F43A5578E8640E03D68371291957DC51BD8999BE31B468DEC839789164B250030346238A288E1B3D34E4830CF0C132ABC0E321844E8C1C864F4DBE91AA88B15215BCBA135C545E04FB19EBCC8B2607513070C4714611C378534E4839071E84B2AF030C86207A286E1B3D34FB8E67D93F37F0418678609955E07190C227460E4327A6DF572FF723B2B973FE45B2E7ABCC830AF1393293C0E0D184328C23864F4DB96171EFACB3F26C78AA22C537513418C26B76B5C69062B8D10C9CE04868C41B14AC07225C5957D41C838F425957818643103D14370D9E9A7DC55D2F19CA4F2BF2E43371516A93EC975511648C48A0D1387189ACF32035355582E28DEC4CCDF18C46A5D33548D6F2E43371517813EC6815C262607713070CA194611C378534E5F2E28DEFACCDF18CA888DE6488B131735AB76B52BEA5D0CBF36B7432FCDAD8A2FB14337C636065F7B3C236E65418ABF32645898B9CAEB72B52BEA4C97B0A7E6488B0D18D9A36E56A6BD312E11BCC91E81A2E6B56ED6A6BD490D21AE4C6F6FDED78DCB24D8A27BEB333C6375CDFC24CB9572739F64E8B2ACFB6A7BE0A830A7E5B08B1318D9A371D165BD33033FBDBE11BE8D85C7BEB2CFC9B6397F64FCDB25EC56396C22C345CE575C74599F53FA37D3732A0C2A39923D04C63668DB95A96F4CE793A92FF004E564E5DDE9FE4A8690D72617BFEF6BC6E5926541853F3247A098C6CD1B72B52BE9BF2E28DEFACCDF18DD5154E7735BAA2A9CEE6B7545539DCD633D799E873812260E190E2B21C8970A69CB032FBD9E13E3A34FE9FAE862BD799E84C0121A0E068E28C1C86F1655C8AE3444C4C0EE183106C528C2386F1655F7AA229CEE6325D4BA592CE22834719C619BC0C8124D55634830AF0C1CCABC0E0D18432B21C89CF4DB974BB4C9DB46E97698FB66C6815A1939C0913070CA17580E44B8534E44725C2C53756F2E4336ED6B813ECBC1789E84B2AF1D0341C38A286E1B232AE585C7BEB2CFC9B1E2974B252545CC60CDC545E3C832F22BC304CAAF1C8341F0CA3072192328E5D5154E7735B0A754267293CD1CC6135C545A5C832F05E27A12CABC740D070E28A1B86C8CAB915E8308B260750D188380F4611C378B2AFB8ABAA133936657E5C09ADCAD5527DBAA2A9CEE6FF00EE7FFFC4003E10000102050106030703040004070000000203130001041114150512212232331085D4162023346394E4313541245161624260718206305281B1B3D1FFDA0008010100133F00FF0091349A05DB7281054F9D5408F899C681B2FD34681B2FD34681B2FD34681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C681B2FD34681B2FD34681B2FD378E9340BB6E5020A9F3AA811F13386125DB72BD048F9151209DC0CE5C46302969597B2DCEC2417BB41EEE81B2FD34681B2FD3430920E375F509072242212B0004B80C3092EDB95E8247C8A8904EE0672E231A06CBF4D1A06CBF4D1A06CBF4D1A06CBF4D1A06CBF4DEF795D2463AABB6E2A09072242473B9984B80CED1A06D4F4D1A06D4F4D1E69491F7F1AB5020E37408247C8AAE272B1846AD40BB6E502E907224B91F1338C0AAAA7996DDEC2476B3A1D519F4B43938F4A952ADF06A954960B2C82A1CE11815543938F549552DF1AA924910B2282A7CE719F4B54F3396EF6153B59D08D22BD76DC4C150E7490209DC0C27C0A33E96BB1B22955A547E0D2AAAAC77597483902302AA9597B11AEFA417BB471ABD020E36A9A47C8AAE272B181CB88C605550E4E3D52554B7C6AA492442C8A0A9F39C6BFB2FD4C6BFB2FD4C67D2D7636452AB4A8FC1A555558EEB2E907204605552B2F6237DF482F768E349AF5DB72BD75439D24083A0C23CD2923EFE348AF5DB71305439D24082770309F028D036A7A68C0AAA565E71AEFA417BB47D378F2BA4F7BCAE923CCE93C7CD2923EFE35FC579EA5497ED629DACEDBABC349CEC8C863EBA5B9BAC46262BCF552ABF6B7CED67777AA71E5957E1A06532CD2A48777282F76AFD318994CB35492FDADF0BDDADDEA8D27071B1D8FACAEFEF3F1E67571A062BCF52AA877728ED676FD3E38994CB35492FDADF0BDDADDEA8D27071B1D8FACAEFEF3FE1E69491F7F1E594BE1F7F1E5749EF795D2479A5278F9A5247DFC795D24681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C795D5F869340BB6E5020A9F3AA811F1338D2681071BA05D50E749013E0611F611A4502EDB8A9AA7CEAA0473B999CF8943092EDB95E8247C8A8904EE0672E231A06CBF4D1A06CBF4D1A4D020E3740BAA1CE92027C0C23EC3C3CD2923EFE3CAE93C3EFE3CAE93DEF2BA48D036A7A68D036A7A68D036A7A68D26BD071BAF4153E755010E8038FBF8F2BA48CFA5AEC6C8A556951F834AAAAB1DD65D20E408C0AAA565E71BEFA417BB47D378D22BD76DC4C150E7490209DC0C27C0A357A05DB71504839125C8E7733097018CFA5A565E71BEFAA17BB47D378C0AAAEC6C8AA56A91F8D4A92A89DD15D23E438D5E8176DC54120E4497239DCCC25C06275F4B4ACBCE37DF542F7694E9BC3E92EDB890AA1CE91104EE0613E053B479A5247DFC6915EBB6E260A873A48104EE0613E051E694913AFA5A565E71BEFAA17BB4A74DE1F4976DC48550E748882770309F029DA3CD292302AAA9E672DDEC2476B3A11A06D4F4D1A06D4F4D1A06D4F4D0C2A838DD02091F22A2272B181CB88FBDA06532CD2A48777282F76AFD31ECA7E6C7B29F9B1ECA7E6C7B29F9B1A4E0E3E3E47D7577F79F8D032996695243BB9417BB57E98F33A58FBF8D032996695243BB9417BB57E98F33A48D57071B1F23E82BBFBCFC65E532CD2A48777702F76B7BA651AFE532CD524BF6B142F76ADD51F7F1A06532CD2A48777282F76AFD31AFE532CD524BF6B142F76ADD51AB60E363E47D0577F79F8CBCA659A5490EEEE05EED6F74CA3CCE963EFE340CA659A5490EEE505EED5FA631329966A925FB5BE17BB56EA947B29F9B1ECA7E6C7B29F9B1ECA7E6C7B29F9BFF91814B54F3388DF7D23B59D3861241C6EBEA120E44844256000970186125DB72BD048F9151209DC0CE5C46302969597B2DCEC2417BB41E190AA0E36A82A1CE9109CAC6984F814AF1FBA6662318DF3CFB7B994BF6ED7DF8D0365FA68C855071B54150E74884E5634C27C0A578D7F6A7A98D7F6A7A9F0C0A5AA79971BEFA476B3A7D30C24838DD7D4241C890884AC0012E03E19F554ACBD96E76150BDDA087D55DB7281054F9D52239DCCCE7C4A348A041C6D505439D2404E563009F028C0A5AA79971BEFA476B3A7D30C24838DD7D4241C890884AC0012E03E1814B54F3388D77D23B59D38D0365FA68D2681071BA05D50E749013E0611814B54F3388DF7D23B59D38D0365FA6F7B48AF5DB71305439D24082770309F02F0CFA5A565E71BEFAA17BB47D3787D25DB71215439D22209DC0C27C0A768D036A7A68C0AAA565E71BEFA417BB47D378D22BD76DC4C150E7490209DC0C27C0A1F49071BAF4153E754842560039F128CFA5AA799CB77B0A9DACE846915EBB6E260A873A48104EE0613E05E19F4B4ACBD88D77D50BDDA38C0AAAEC6C8AA56A91F8D4A92A89DD15D23E4386155DB7282A120E44848E7733097018FDAF0F2D8C6F9E65CDFC45FA2F6DC87D25DB71215439D22209DC0C27C0A768D5A8176DCA05D20E449723E2671815554F32DB9D848ED6743AAD0C2A838DD02091F22A2272B181CB88C6BFB2FD4C67D2D53CCE5BBD854ED6742348AF5DB71305439D24082770309F028D5E8176DC54120E4497239DCCC25C063EFE348AF5DB71305439D24082770309F02F0CFA5A565EC46FBEA85EED1C3E92EDB890AA1CE91104EE0613E053B7BDE594B18994CB34AAAFDADF0BDDAB754A3F63D3B4FFB975CCFFF004B3519794CB34A921DDDC0BDDADEE9947B29F9B1FB1E9DA7FDCBAE67FF00A59A8CBCA659A5490EEEE05EED5FA651AFE532CD2AABF6B142F76ADD5E1A06532CD2A48777282F76AFD31978AF3D54921DDDC3B59DDEE99C7B57F851A56A98789FD0FCCBC8B9BF8AE76E56DFB47B29F9B1A4E0E3E3E47D7577F79F8D032996695243BB9417BB57E98CBC579EAA490EEEE1EED9DDEE99C6AD9D9390C7D14B737588D0329966A9543BB9417BB57E98D7F299669555FB58A17BB56EA8D5B071F1D8FA0AEFEF3F1A56A98789FD07CCBE8B9BF8AE76E56DFB4626532CD524BF6B7C2F76ADD51A4E0E363E47D7577F79F8F2CA5F1F2CA4F7BCAE92184976DC48D23E4544827703397119DA3029695979B73B0905EED27D578D5ABD071BAF5D20E449710E8008D0365FA68C0A5A565E6DDEC2417BB41D57F0D5EBD76DC4CD23E4557209DC0CE5C47C349A05DB7281054F9D5408F899C6052D0E4E3D2AB548FC6A5492582CB2091F21C6BFB53D4C642ABB6E2A6A9F3AA4473B9A853E253B469340838DD02EA873A4809F030F0D268176DCA04153E755023E2671E694912AFAAA565ECB73B0A85EED04642ABB6E2A6A9F3AA4473B9A853E253B4795D5C7D8469140BB6E2A6A9F3AA811CEE6673E250C24BB6E57A091F22A2413B819CB88C6052D2B2F65BBD8482F7682357AF41C6D304839125C42560009701F1F2BA4F7BCAE921F49071BAF4153E754842560039F128CFA5AA799CB73B0A9DACE87863AABB6E2A09072242473B9984B80CED1A06D4F4D1A06D4F4DE19F4B4ACBCE35DF542F768FA6F181555D8D9154AD523F1A9525513BA2BA47C87157B7681943FDCDA58CED2FF0003384A8184E98E9DFE12B19DEEFC536CC71306699343AA76BDDA8D1C234708A8A59A6A28F54AABCEE3295A569AB68248E5294BFCCED19F4A836F623567950BDDA38C0AAAEC6C8AA56A91F8D4A92A89DD15D23E5386155DB7282A120E44848E7733097018FDAF0F2D8C6F9D65CDFC55FB77B46055576364552B548FC6A549544EE8AE91F21C6935E838DD7A0A9F3AA8087401F86935EBB6E57AEA873A48107418467D2D7636452AB4A8FC1A555558EEB2E9072047ED78796C637CEB2E6FE2AFDBBDB721F4976DC48550E748882770309F029DBDEF2CA58CBC579EAA490EEEE1DACEEF74CE356CEC8C8C8FA096E6EB1E18994CB35492FDADF0BDDAB754A3D94FCD8F653F37C3EFE3CB29607F51DE9CA5797F995E252E128095E7B8984CA7697FD250139948252909A73BCF8CEE2769CF85E72BCA568527610194AF39CE73FE2528AC49B1AA496099A6AA72FD6425295E5BD294ED69DBC3FE10995E45BB2FE25398DEDFDE739FF31A06532CD2A48777282F76AFD3E1AAE0E363E47D0577F79F8CBCA659A5490EEEE05EED6F74CA3D94FCD8D27071F1D8FAEAEFEF3F1A06532CD52A8777282F76AFD318994CB35492FDADF0BDDADDEA95AF1FB1E9DA7FDCBAE677FA59A8D2B54C3C4FE83E65E45CDFC573B636DFB7BDABD7A0E3698241C892E212B0004B80C6052D0E4E3D2AB548FC6A5492582CB2091F21C7EE99988C637CF3CDEE65AFDBB5F7E1849071BAFA84839121109580025C06184976DCAF4123E4544827703397118C0A5A565ECB73B0905EED0469340BB6E5020A9F3AA811F13387D541C6E82A150E74884E563009F028CFAAAA79971BEFAA76B3A7D368F2BA48FF00BE5E14E52963266049E42E5796E2729CE76FE4A72B0CA73BDB6A3DBE330A74D2B727F1C853BDE7FACB84AD3BECDDB2A2AF2025BC694913404A523DDDC9F35B7665C62F27524E9A46204A87EA247350E72BFEA0DF87FDC51A4502EDB94082A7CEAA047D671AFED4F531AFED4F531AFED4F531A06CBF4D1FB5E1E5BF93F22C39BF8A8772F6DC8C85576DC54D53E75488E77350A7C4A768D0365FA68FDAF0F2DFC9F9161CDFC543B97B6E4642ABB6E2A6A9F3AA4473B9A853E253B7BDA457AEDB8982A1CE920413B8184F81430AAEDB941509072242473B9984B80C605552B2F38DF7D20BDDA3E9BC795D2467D2D7636452AB4A8FC1A555558EEB2E907204681B53D3463AA838DAA691F22A2272B1A652E2328D036A7A68FDAF0F2D8C6F9E61CDFC55FB77B6E43E92EDB890AA1CE91104EE0613E053B78274229A28A467314574AA24A94D407268A4523009DD4BDA366A96651AA56A12A62A8DD9DD8A646986649CA7BB335EE5095E68D32B4AD492A84D39DC46EF148A5294A45619CE2A7E67682CAA6446AA15339B9F0F978EF5AE56B5A2946432DABB384A725F78385F7921782FD256B4E5C6F41B36A2B0954256B9FC202E1CC30D1A7BF3150C4B94E522E1319CBF48D5E81071BA04123E455713E0607E1F7F1E57491AFECBF5319F4B54F3396E76153B59D08D5A81071BA04123E455713958C3C302AAA9E672DCEC2476B3A10C2A838DD02091F22A2272B181CB88FBDA06532CD2A48777282F76AFD3E1AB60E363E47D1577F79F8D2B54C3C4FE83E65E45CDFC573B636DFB4626532CD524BF6B7C2F76ADD51ECA7E6C6262BCF552ABF6B7CF76CEDBAA718994CB34AAAFDADF0BDDADDEA94693838F8F91F5D5DFDE7E3CB297C03F8AA40A9EB11FFE838A0009112469A736493504C4C39653B14A7394F8CA70B8802C549319A694C3993414BDF7E4090CA5212E6B95EE9D624CA03322DD4896107A616DD9CC1DB7198F4C02929A6B23309837219719CA729FE9394B8452593ACAE5123ABA6911D42A5BA92130A4524729094CAD149564926A27906DA6F12739F2818DCB723DABFC28D0315E7AA9243BB9476B3B7E98FBF8D032996695243BB9417BB57E98CBC579EAA490EEEE1EED9DDEE99C7B57F851ED5FE146818AF3D54921DDCA3B59DBF4C6939D919191F5D2DCDD6231315E7A9525FB5BE76B3B6EA9FBDA4D02EDB94082A7CEAA047C4CE35FDA9EA633EAAA9E6711AEFAA76B3A71A4502EDB8A9AA7CEAA0473B999CF8943092EDB95E8247C8A8904EE0672E231814B4ACBD96E76120BDDA08D268176DCA04153E755023E2671ABD7AEDB899A47C8AAE413B819CB88C6052D53CCE235DF48ED674E33EAA87271EA95A547E0D2AA92216450483903C1CDD3553569D748E432FF008AD23DF9CBFF00485E25FA47F78D8FB357A9A79C84B7484E49C8C933039184E45FAEE6F42889A339DA769F298C8A5C65FCCA10E2E20B564D6DF9CA529EE8260B29729CE579A96943CA22E86FCE76DF4C84A5C65FC4E51AFED3F531E69491814B54F32E35DF48ED674FA6D1A06CBF4D1E6949E390AA0E36A82A1CE9109CAC6984F814AF1FBA6662318DF3CF37B994BF6ED7DF8CFAAA1C9C7AA56951F834AAA4885914120E40F7BCAE93C25415554F32DB9D848ED6743AAD18EAA0E36A9A47C8A889CAC6994B88CA185576DCA0A84839121239DCCC25C063F6BC3CB631BE799737F117E8BDB721F4976DC48550E748882770309F029DA356A05DB728174839125C8F899F8E75354EFA412B1CEE8A8768DEE09998EE914A5FA6F6EDC653FE244504129FFF009049CE53FF00E611B2F475273B5CCE9D496EC8F965720984E7C6F38A619260676E2421329CC653FED79DBFBC4E9C4159A69269260332971294B74A728FED3BCE769FFED394E3CAE92356A05DB728174839125C8F899F86915EBB6E260A873A48104EE0613E051A457A0E3699AA7CEAA0212B001CF8946055553CCB6E76123B59D0EA8D036A7A68D26BD071BAF4153E755010E803F0D26BD76DCAF5D50E749020E830F7BCB29635FCA659A5557ED6285EED5BAA3EC235FC579EAA557ED629DACEDBAA313299669555FB5BE17BB56EA8FD8F4ED3FEE5D733BFD2CD4695AA61E27F41F32F22E6FE2B9DB95B7EDE1AB60E363B1F415DFDE7E3DABFC28A5FFC432A951BFF0009952848E7FE37E51B4692A13552FF005B4C061A5E2A1153713DE3101BDA7FC910CA195A29D05260A6E19015AF3FE084A509D31CE729FF007E33B5FF00EB0B4AC7507C39A7C25FDA5FC4BF494A5294A51A06532CD2A48777282F76AFD31AFE532CD2AABF6B142F76ADD5E1E59491A062BCF52AA877728ED676FD31A4E7646431F5D2DCDD6231315E7A9525FB5BE76B3BBBD538F653F363D94FCD8F653F37DED5EBD071B4C120E4497109580025C063CAEAE33EAA95979B77B0A85EED0755E35FDA9EA633EAABB1B22A92A55BE0D52AAA2774575439C23029695979B73B0905EED0755E348A05DB715354F9D5408E773339F12F0FB08D5ABD071BAF5D20E449710E8008D5ABD76DCAF4123E455720E833F0D5EB9071BAF5D20E449610958023029A85FC7A55AA91F8D4C9A6A85964122E0713AFA9AA799C46BBCA1DACE9C799D5786052D53CCE235DF48ED674E340D97E9A3CAEAE30296A9E6711AEFA476B3A719F5543938F54AD2A3F069554910B228241C811A06CBF4D1814B4ACBD96EF6120BDDA08D5EBD071B4C120E4497109580025C06184976DCAF4123E4544827703397118C0A5A565ECB73B0905EED0469340BB6E5020A9F3AA811F133F7B48AF5DB71305439D24082770309F028F34A48FBFF0C75576DC54120E44848E7733097019DA3F6BC3CB631BE799737F157EDDEDB9181555D8D9154AD523F1A9525513BA2BA47C87E19F4B4ACBD88DF7D50BDDA387D25DB71215439D22209DC0C27C0A76F0FBF8F2BA48C0AAA1C9C7AA4AA96F8D54924885914153E738FDD33311FC9F9179BDCCA43B96BEFC681B53D3467D2D7636452AB4A8FC1A555558EEB2E9072047ED78796C637CEB2E6FE2AFDBBDB721F4976DC48550E748882770309F029DA31D55DB71504839121239DCCC25C067689D05552B2F38DF7D20BDDA3E9BC795D24605550E4E3D52554B7C6AA492442C8A0A9F39C6BDB33D4C6055576364552B548FC6A549544EE8AE91F21F8F95D27BDA06532CD2A48777282F76AFD31AFE532CD524BF6B142F76ADD51AB60E363E47D1577F79F8F6AFF0A355D530F13FAEF96651737F15BEE4ADBF78FD8F4ED3FEE5D733BFD2CD465E532CD2A48777702F76B7BA65E3E59491A062BCF5524877728ED676FD31AAE0E363E47D1577F79F8D2B54C3C4FE83E65E45CDFC573B72B6FDA340C579EA5550EEE51DACEDFA63EC2340CA659AA550EEE505EED5FA631329966A925FB5BE17BB56EA8D27071F1F23EBABBFBCFC79652C6BF94CB35492FDAC50BDDAB7547DFC795D2465E2BCF52AA877770ED6777BA671ED5FE14695AA61E27F41F32F22E6FE2B9DB95B7EDE3E594BEF69340BB6E5020A9F3AA811F13387D541C6E82A150E74884E563009F028CFAAAA799C46FBEA9DACE9C6AD5E838DD7AE907224B887400467D557636455254AB7C1AA55544EE8AEA873847ED78796FE4FC8B2E6FE2A1DCBDA35FDA9EA6349A041C6E8175439D2404F81846052D53CCE237DF48ED674E1849071B48520E4484425604C25C06578C855071B54150E74884E5634C27C0A578D7F6A7A98C85576DC54D53E75488E77350A7C4A76F0CFAAA565E6DDEC2A17BB41D578C0A5AEC6C8A54AA96F8D5492AB1DD65D53E7386125DB72BD048F9151209DC0CE5C46340D97E9A33EAA87271EA95A547E0D2AA9221645048390235FDA9EA633EAAA9E65C6BBEA9DACE9F4C795D278E9140BB6E2A6A9F3AA811CEE6673E251A06CBF4D1A06CBF4D19F5543938F54AD2A3F069554910B228241C81EF6915EBB6E260A873A48104EE0613E051A06D4F4D1A06D4F4D1A06D4F4D1A06D4F4D181554ACBCE35DF482F768FA6F1AB5020E37408247C8AAE272B184605550E4E3D52554B7C6AA492442C8A0A9F39C67D2D53CCE5B9D854ED6742356A041C6E81048F9155C4E56308F2BAB8FB08F34AB87D241C6EBD054F9D521095800E7C4A3F74CCC47F27E45F6F73290EE5AFBF18EAA0E36A9A47C8A889CAC6994B88CA35FD97EA633E96A9E672DCEC2A76B3A11AB5020E37408247C8AAE272B1843E920E375E82A7CEA9084AC0073E251AFECBF530FA4BB6E242A873A44413B8184F814ED18EAAEDB8A8241C89091CEE6612E033B44E82AA95979C6FBE905EED1F4DE3CAE9231D55DB71504839121239DCCC25C067689D05552B2F6237DF482F768FDFF002CA58F653F363D94FCD8F653F36340C579EAA490EEE51DACEDFA63EFFC34AD2F332FFA1F997966F7329CED947B57F851ED5FE146818AF3D4AAA1DDCA3B59DBF4C7D84799D5F86939D9190C7D74B737588C4C579EAA557ED6F9EED9DB754E3DABFC28F6AFF0A3DABFC28CBC579EAA490EEEE1DACEEF74CE355CEC9C8C8FA096E6EB11E594918994CB35492FDADF0DEBB56EA94695838D8F91F5D5DFDE7E3CB2923CCE9634ACEC9C8C8FAC96E6EB11ECA7E6FBDE57490C24BB6E57A091F22A2413B819CB88C681B2FD34681B2FD3479A5247DFF86052D0E4E3D2AB548FC6A5492582CB2091F21C67D5553CCE235DF54ED674FC349A041C6E8175439D2404F81847D8469140BB6E2A6A9F3AA811CEE6673E251A06CBF4D1A06CBF4D1A06CBF4D1AFED4F531AFED4F530FAABB6E5020A9F3AA4473B999CF8946052D0E4E3D2AB548FC6A5492582CB2091F21C67D5553CCB8D77D53B59D3E9B4795D24681B2FD34681B2FD3430920E3690A41C890884AC0984B80CAF1814B43938F4AAD523F1A9524960B2C8247C871FBA6662318DF3CF37B996BF6ED7DF861241C6EBEA120E448442560009701F7BCAE923CD293C7CD2923EFE356A041C6E81048F9155C4E56308F34A4F0D26BD76DCAF5D50E749020E83086155DB7282A120E44848E77330970189D05552B2EB8DF7D20BDDA3E9BC6915EBB6E260A873A48104EE0613E051AB502EDB940BA41C892E47C4CE3EC3C185576DCA0A84839121239DCCC25C063F6BC3CB631BE799737F117EDDEDB90FA4BB6E57D42A1CE91104EE0613E051E575712A0AAAA7996DCEC2476B3A9F55A31D541C6D5348F915113958D329711946AD40BB6E502E907224B91F1338CFA5A565EC46FBEA85EED1C6055576364552B548FC6A549544EE8AE91F21C79A5244EBE9695979C6FBEA85EED29D3787D25DB71215439D22209DC0C27C0A76F7BCAE9231329966A925FB5BE1BD76ADD528F653F363D94FCD8F33A58FBFF0D7F29966A925FB58A17BB56EAF0D0329966A9543BB9417BB57E98C4CA659A5557ED6F85EED6EF54A34AC1C6C7C8FAEAEFEF3F1E59491ED5FE146AB9D9390C7D04B73758F0D0315E7AA9243BB9476B3B7E98FBFF0F2BAB8FB08D7F15E7AA955FB58A76B3B6EAF1D032996695243BB9417BB57E98D5754C3C4FEBFE59945CDFC56FB92B6FDE349C1C7C7C8FACAEFEF3F1A06532CD2A48777282F76AFD3EF795D24681B2FD34681B2FD34681B2FD3469140838DAA0A873A4809CAC6013E051F7FEE69140BB6E2A6A9F3AA811CEE6673E250C24BB6E24691F22A2413B819CB88CED1A06CCF4D19F5543938F54AD2A3F069554910B228241C810FAA838DD0542A1CE9109CAC6013E051AFED4F531AFED4F53190AA0E36A82A1CE9109CAC6984F814AF13AFAAAA79971BEFAA76B3A7D368D268176DCA04153E755023E2671E575719F554ACBCDB9D8542F7683AAF0FAABB6E5020A9F3AA4473B999CF894681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C6AF5EBB6E26691F22AB904EE0672E231814B54F3388D77D23B59D38D0365FA6FF99FFFC4002A11000103030205040203000000000000000100020304051106211213314051101422413280162442FFDA0008010201013F00FD9A073E83708641EFA59046325433897A2924118C950CC25E9DEEDD15DEB22A6A77F1EE55B756B2DF172A66F555FAA5B5748EE546412B4C81EC83B8B2E3E9F8F74767A75496CE42A3823ADAA2F937C7D2BD5AA8DF3B1EE6630BD8521A511F00030AD956EB55D1F0039612B9E00C94C7878EE88CABEC8200C7F8475355D1D710C3B29EF02BA2CCB2E0A9357CD08E40391E54B7685E1B237F2F2BDC3EB18C847FA54C0B58223F5DD67016A767F4DEEF0A42E3212A9C1126241B2ABB232439A5F1F6A4824A69431EAC25B253C2E3F41746E3BAE87215C6DCDB93381C765268280E785E9FA065CE5922FE3B5B147CB90712A8D2570E6F1C4CC0565A534B42D63BAAC671DD0F8EC5608DC2F92C1F2B87EC84785FB2D9BF00BA7EDDFF00FFC400251100010401040104030000000000000000010002030411051221403210224180144261FFDA0008010301013F00FB76D6A73709A139B8EEF2AA40F95E24F85269DF907785069E18FDC5CAFEDDFC0F407B4D4C8B729849523DA154B53161084AF7BF20AB359F356DC5A830A23B43C9513FAAB518B8DC151D335FC555A518707CA15FB94DF4042C1CA6E222F47DDDAF95A77364350FE27709B69CDF6BC26B848DE15AE1CF4381DAC65413188E426EB2F09BAD1F9085F8F3951EA9106E15B977BF211E5BDA6AC64AC05C2E10217921F6EFFFD9, '1', '2022-03-16 21:51:49', '1', '2022-03-16 21:51:49', b'0'); +INSERT INTO `infra_file_content` VALUES (4, 4, 'a408952f4db5433b83a275df444b7467.jpg', 0xFFD8FFE000104A46494600010100000100010000FFDB0043000302020302020303030304030304050805050404050A070706080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F171816141812141514FFDB00430103040405040509050509140D0B0D1414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414FFC20011080102010203011100021101031101FFC4001E00000301010101010101010000000000000008090701060A02040503FFC4001C0101000203010101000000000000000000000105020406070308FFDA000C03010002100310000000AA6000000000000000000000000000000000070000000000E81C3A70E8001C03A0700000E8001C2401808000FF000BF9808017F8E12007F8C00A0200040102BE0120C0000BFC000708045D03033802AA794029412BC69C0DFC9B206005261020356037F37E1551D33CB1AA1160BFC00070804553201017F4554D50A002A86AA4582FE0800D51164AA66503FE74CA48B22A85FD1551561552A98AB17F8000E1008AA640202FE8AA8AB00FF0BF98097F490007AB12D2D2920C0DF8F564AC2FE8AA8AB0AA954C558BFC00070804553003013CA0AA9AB1540F2A45A3CA95409B27953CB173C55474CF2C4593CB173C4047F80E9208FA27000384FF0032C387406A0CA8D58554D50D5895A6563526A66A82B06546565A61553541AA1013A0700AAA0000004FE37F03002809E449B22AA5D0303384023572E79F3B250030003CA973C6089FE2026FC3002025FE0003F22FE7CEC9AB9E58B9E6A6795030037F18227F9C26C8E913687E8A504303D48FE9BF916874874C6089FC4863E9E8000E1008CAC7F440C7F4E08195407FC4006A8404E9C1A932A1AA22D1AA0D39AA8AB8FE99492B8BFC708045FE000384023033D494A04A8CB0CA0FA261812401E5C7F8DF095A57F2400EA88115E885E3542585A530037F182384022FF0001C20115F0C00A02791303384023572A808794FCF0666B0E8F062D2B32107EC9B23A66A679724015FCC00D4C9B47D3D0001C201169CCA86B0CA0404E92ACAA62AC5F13FA4FF0033E3965D84EBBF58CCFE4D5B671FF2C44C8B03566563FA2AC6AA5501023A5540003F22FE4D93531D303003001582E79164BE50FEA463B41BD9EF975F7FD2DB5FD2F595FBE75D57FC0991F2754009583545262178D51498F5C0007E45FC8B45CF22C9AB0FF1BE1810AA9368A8312CC516DE535BBDEBA973F7DD6D7647E5FD2B29EC9C8FA0FBC4B2CB19AE55315601FE17F26B9400C00FA27000384FF22C0D58D48FE8808FF1014B4A4AD1C786F9C8DB79BF1DEDBC6DD53FBFACDCF1FF001F41FF0027D57C5D84EC6A13EDAC72C3533541AA101032C32A32B3E944000E1200754408C00B4A6006003FC60007874379C6DAFE7F2EFA09F58C5FACAFD4F98DE553F4BF11437B2A4C1A41164D4CAA640203E9E89B26A6501000384022FF001941EA480C3A44DA1FA2BF9D10F1C6A5D9FF002FCEEE7F92B36330DEC3D671B65FC5EE9C96CBD0E9C1437F2BF8BF01EA8CB0C0490057F2948001C2010FE9961958AB0FE0155055055CFF00B4CB59187FA6CB4BC59A4C69713FEB44FEFE9094C01FF2018FE9AA116C7F4E1D2AA0001F917F241969CCACCA495E7AA3E89C9567AB024095EC5D0FEE1EE1A610F10601FE382043FA6FE06006005800003F22FE7961562AA1E449B26A650127F1218F225531561FD32C1A910235326D1F49879522C8FE8810FE9404E1008BFC000709FE2B065635007040CFA503840335632B1A835332B32C2A899512B4D58D50554CB07F0E954C08045FE0003848015837F37F3D41960D48951BF9218FA4C30337C3D719392BCA4C4831FD35635422C0AA9D1803D480FE9404000FC8BF9E58000D509AC6FE745FCC046A46A8F522585272178FF0BF8FF120CC0CFA4C3CA9164BA048527F9F55000070804354006566A85532561C035432B1AA1AA1543551023803FC6544AD2D399512B4AA64AD1A82AA8001C20115F090605531562AA115C09FE5283D58969EA400AA6749046FE55022C801818E91A98E98C10001C201154C80405FD1553CA0EA9008AFE2025CF3CA8809EAC9583023A43A64832D31EA895A30070D588B27963E9E8000E1008B4E20203542AA55422C13FCA002AC5A52568D48AB8AA1400D50AA64021AA32B2D39C10032C1A732B2808001C2010001E5874CAA87CAB9D18032C37C1FD26C95F4E1BE9E549AE6025A62181EA47F85FC7F8C00408BFC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007FFC4004210000003060209020503030203090000000607080004051415160917010203111318195785253810202147671226272829464175223739303142505160616383FFDA0008010100011200FF00C8F7B6F6DEDBDB7B6F6DEDBDB7B6FF008EFF00868D3A34FCBBDBF568F8FEAD0DBDB7B6F6DFF32F05E27A12CABC740D070E28A1B86C8CAB97545539DCD6EA8AA73B9ADD5154E7735BAA2A9CEE6B614EA84CE5279A398C26B8A8B4B9065E0BC4F4259578E81A0E1C514370D919572EA8AA73B9ADD5154E7735BAA2A9CEE6FC5782F13D09655E3A0683871450DC364655C97919E27265278E4640F89D18470C91947DC2995099CA4B3433184D715169721F2F545539DCD6EA88A73B98C830CF139CC93C0E321844EB22389CF4DBEAF233C4E4CA4F1C8C81F13A308E192328FBD5114E7731BAA2A9CEE6B7545539DCD6EA8AA73B9ADD5154E7737E6C51BDF599BE318D0344324C0122631194528E1C86F0A69F7AA2263EE5B75444C7DCC6C51BD8999BE31B032FBD9E1197820E3D0E955E3A190380F5A0DC4A4655F50720E3D09655E06190C40F450DC367A69F4F154658A6EA2E6309ADDAD71E41950A5D335671E82638C9C0CDE05C09256951A542A88B259C450989C2704D781902495A54170A84BC6726CCD1CC70CDB95AA5C8319EBCC8B2607513070C4714611C378534E49752E99A8C4F40C9C671866CF2E03735558D62ACA80B152795F97026B8A8B549F62BD061E8738121A310681EB21C8971655F550AA22C967114262709C135E064092569505E974A73B66DD2E94E76CD92EA5D335189E81938CE30CD9E5C06E6AAB1AC55D50962A4F2BF2E44D71516A93EC839789164B250030346238A288E1B3D34E58A37B13337C636065F7B3C2319EBCC8B2607513070C4714611C378534E5D51131F73188D54458A92ADE5C09AE2A2F027DB146F7D666F8CF9B146F7D666F8C6C51BD8A19BE33E38A37B13337C636067F7B3C232A0C55F96C3D04C5C6575C74595F52FA32E4437CE7593B86D675B53AC9708DE5B48B0D1735AB8A8B35EA785CFBEA2CFC9B6ED1B99506151CC91E82631B346DCAD4B7A62A223799222C4C5CD6ADDAD4AFA9AE4437C98593BC6B78DCB3AD85CFB142CFC9B25DC29F96C3D03463668DC74599F4CD1BB737D195111BCC9116262E6B56ED6A57D4D72A1BE4C2C9DE36BC6E59DF8628DEC4CCDF18D819FDECF08D8A2FBEA337C67C3033FBD9E11B146F7D666F8CF9B146F7D666F8C6C51BD8999BE33E38A37B13337C636067F7B3C23628DEFACCDF18DD5154E7735B0A754267293CD1CC6135C545A5C832F05E27A12CABC740D070E28A1B86C8CAB96171EFACB3F26DFF7EAB2F05E27A12CABC740D070E28A1B86C8CAB920E5E27A1D2ABC0C0D188E2B41B894F4D396397F64FCDB15EBCCF4260090D0703471460E4378B2AE4BC8CF1393293C723207C4E8C238648CA3EF544539DCC6EA8AA73B9AC839789E874AAF030346238AD06E253D34E58E67D93F37F0C51BD8999BE31B033FBD9E11B146F7D666F8CF86067F7B3C23628DEFACCDF19F3628DEFACCDF18DD51131F731BAA2263EE6375444C7DCC65E0BC48B3A5280E81A0E1C5684712919572C0CFEF67846C51BDF599BE3192EA5D335189E81938CE30CD9E5C06E6AAB1A23551962A4AB797226B8A8BC09F633D799164C0EA260E188E28C2386F0A69C8CF4187A13004898C46407A30721BC29A7D2352D99CA46B797219B8A8BC09F64BAA88B2462450689C38C4D679901A9AAAC14CF4187A13004898C46407A30721BC29A7D2392E19CA42B797219B868BC19F6340AE131303B89838650CA308E1BC29A72C51BD8999BE31B032FBD9E118CF5E6459303A898386238A308E1BC29A72C51BD8999BE3188D4BA66A91ADE5C866E2A2F027D8D02B84C4C0EE260E194328C2386F0A69CB146F62666F8C6C29D509629B33473184D6ED6A9720DD51131F731BAA2263EE6375444C9DCB65E467860E655E391903E27590E44A4651F7E554185473267A098C6CD1B72B52BE9BD0CBF3637433FCD8DD0CBF3637432FCD8C8650D72617B7EF5BC6E592654185473267A098C6CD1B72B52BE9B8A27B14337C636067F7B7C232A0C29F9923D04C63668DB95A96F4CC51BD8A19BE3190D2E4E4C2F6DE0ABC2E59265447973247A098C6A2DBD5A95F4C5438AC732645898B9CAEB72B52BEA781A7DEDF08CA830A8E64CF41318D9A36E56A5BD355062AFCC9916262E72BADCAD4AFA92195C9C985EDFB2AF0B96459511E5CC89E82631A8B6ED6A57D33145F62866F8C6C0CFEF6F84654185473267A098C6CD1B72B52DE9AA888DE6488B131735AB76B52BEA5D0D3F3637432FCD8DD0CFF0036B7434FCD8DD0CBF36FFD862B0A84CE4DB96197226B76B5549F64186789CE649E07190C2275911C4E7A6DF57919E27265278E4640F89D18470C91947DC2995099CA4B3433184D715169721F0340AD0C9CE0489838650BAC07225C29A725CBA7A6D595CBA7F1DDE73D5D6EA8AA73B9AC6815A1939C0913070CA17580E44B8534E5D2ED31F6D1BA5DA63ED9FC08D54466A6DADE5C89ADDAD7027D90619E273992781C643089D6447139E9B7D6C2992F162A4F34731833715169720CBC8AF0C132ABC720D07C328C1C8648CA3919EBCCF439C0913070C871590E44B8534E446AA33393756F2E44D6ED6B833EC830CF139CC93C0E321844EB22389CF4DBEB62B0A88CE4D995F97226B76B5549F6EA8AA73B9AC839789E874AAF030346238AD06E253D34E58ABAA133936657E5C89ADDAD5527DBAA2A9CEE6FCBBF768D3A74FF00A319EBCC8B2607513070C4714611C378534E4C46A5D33548D6F2E43371517813EC6815C262607713070CA194611C378534E5D51131F73188D54858A91ADE5C89AE2A2F027D8CF5E6459303A898386238A308E1BC29A725E45789CE649E390683E195911C4E4651CB0A74BE66A6CCD1CC60CDBB5AA5C86933D799164C0EA260E188E28C2386F0A69C9B1574BA67292CAFCB90CDC545AA4FB25D54459231228344E1C626B3CC80D4D5560A830CF0C132ABC0E321844E8C1C864F4DBEAE5FEE476572E7FC8965CF5798D02B84C4C0EE260E194328C2386F0A69C90720E3D09655E06190C40F450DC367A69F4F15445926DA2E6309ADDAD71E4197919E18399578E4640F89D64391291947DE974A73B66D853A5E33935E68E63866DCAD52E418CF5E6459303A898386238A308E1BC29A7233D061E84C01226311901E8C1C86F0A69F7034FBDBE118CF5E6459303A898386238A308E1BC29A726C5612F19CA4B2C32E43371516A93EC6815C262607713070CA194611C378534E5F2E28BEFA8CDF18C9708DE648F40D1735AB76B535EA5F4C183F31664B2A23CB9923D04C63516DDAD4AFA6F432FCD8DFF45FFCC5992CA88F2E648F41318D45B76B32BE9897B157E64CF40D17395D6E56A67D4F768FD2CA830A8E648F41318D9A36E56A5BD31511E5CB69162631A8B7151657D33AE57E136E46BA927F5197B65D5E9FE35D0CBF36B21A435C98DEDFBDAF1B96499506151CC99E82631B346DCAD4AFA6AA23CB96D22C4C63516E2A2CAFA6AE35CBCE7D93FB2ACEB6A7592F614FCC99161A31B346DDAD4CFA625EC55F9933D0345C6575B95A9AF525CAB93931B27F655E372CEB7233D493FA8CBDB2EEF4FF001A54446F32245898B9AD5BD5A95F5343286B930BDBF7ADE172C8B628BEFA8CDF19F0DDA1B145F7D66778CF9B146F7D666F8C62B8D1131303B860C41B14A308E1BC5957D3C55199AA468B98C26B8A8BC790641C8388B3A528018643103D6847129E9A7DEA8AA73B9AC792A333949D1731C4D71D178F21F02BD061164C0EA1A310701E8C2386F1655F7768D1ABB99782F13D09655E3A0683871450DC364655C92EAA2335671E819270E3135E05C0926AAB05E97698FB68C5715A19260090D0703617470E4378B2AE4839789E874AAF030346238AD06E253D34E5BBE9B99782F13D09655E3A0683871450DC364655CB146F62666F8C6C2992F162A4B34331833715169720C5715A19260090D0703617470E4378B2AE585C7BEB2CFC9B6397F64FCDB15EBCCF4260090D0703471460E4378B2AE4BC8CF1393293C723207C4E8C238648CA3EE14EA80CD5279A398C26B8A8B4B90D067A0C22CE71D44C623103D644712E14D3EFC3146F7D666F8CF9B146F7D666F8C65E45789CE649E390683E195911C4E4651CB0A64BC6726DCD0CC60CDBB5AA5C87C0D0344324C0122631194528E1C86F0A69F7AA2263EE5B75444C7DCCF8118974CE5255BCB80CDC545E04FB25D54459231228344E1C626B3CC80D4D5560B07C2C14ABFC4DD9D36E0476856C36DAFF00A35DF50C22F7446EE22CD4BC35C58FE21929C651D860061479CE2330DFC711A833E4625FF5B8F44F05F73442DD13C19DCE10B270275C13992E1D2EDC222F91974834C70DFB6D137777D96BED36BA769B3D9EAE8DFADAF8A82663254D6C8ADD72CC3B73EA422A73BA52EAA12C91891219270E31359E6386A6AAB05418678609955E07190C227460E4327A6DF572E8EA496572E7FC8965CF57992EAA22C9189141A270E31359E6406A6AAB055E0BC48B3A5280E81A0E1C5684712919572DCC839789164B250030346238A288E1B3D34E49752E99A8C4F40C9C671866CF2E03735558D2E5FEE4B6572E7FC8965CF5798D02B84C4C0EE260E194328C2386F0A69CBE5C517DF519BE319511E5CB71162631A8B7151657D310D2E4E73AF6FD95675B523F054446F32445098B9AD5BD5A95F53E867F9B5BA19FE6DF86067F7B3C23628BEFA8CDF18CFF00FAB5DD769A9A9AFA767ADADA75767A35F63B2D4D86CF46CF67ABA353535746ED1AA288FBB85035158D3D7EA9587BAED5EF6AC994EF8A1DA1A103C4760BA81E8DC1E2FB686BCB83E3EEC21EE9B77979DAEA6C361B1D4D3B4DA6D4A050702394482F83C19D5FB61B40EED1DF46B6DB733A3B6AC39E1F75767A74E8D8EB69D5DB68D9AA0C2A39933CC4C63668DB95A95F4CFAB21A5C9C98DEDBC1578DCB24CA88F2E648F41318D45B7AB52BE99D0CBF3632E4435C98D95FBD6F1B967592F614FCC91161A31B346DCAD4D7A62A223799222C4C5CD6ADEAD4AFA9FF00D187F31664B7235D497FA8DBDB2EEF4FF1AF9376FD1A7469633D06116738EA26311881EB2238970A69F52EAA2335671E819270E3135E05C0926AAB055CBFDB6ACAE5CFF8EAF49EAF320C33C4E7324F038C86113AC88E273D36FABC8CF1393293C723207C4E8C238648CA3EE14EA84CE5259A398E26B8A8B4B9065E0BC4F4259578E81A0E1C514370D91957241857860E655E07068C219590E44E7A6DC88D4BA5926DADE5C866DDAD7027DB146F7D666F8C67AD3F4FFF004D9B6FFA31FE3672D806A260972D8ED622258FC35E1DF62EB037B1D02A3A237B0DE80EEDDDE2FB7D8EDD850361D98908B523A1C82B8439EF69B3A8C4137C2E16F8231D8ADDF6BB2D488C45E7610FDBB96E67AFA6D1E74FFF0056CD9772F23D09655A390703471460DC364655CBA5DA63ED9B74BB4C7DB36E97698FB66DD5154E773590CE9EA4B7B7317FC8965C8D098AE2B4324C0121A0E06C2E8E1C86F1655CBAA2A9CEE6B219D3D496F6E62FF912CB91A1315C5686498024341C0D85D1C390DE2CAB97C9BF768D3A74FF00A319EBCC8B2607513070C4714611C378534E4830CF0C132ABC0E321844E8C1C864F4DBE91AA88B25235BCB9135C545E04FB628DEFACCDF18C9752E99A8C4F40C9C671866CF2E03735558D75444C7DCB62B8D10C9CE04868C41B14AC07225C5957DEA8898FB98CB9B4F524B2B973FE44B2E7ABAC6815C262607713070CA194611C378534E58297D0AF33BFDE9C1A04788E824696C204614B3A3BBDED3F4E9D905841B1354C7797F7A803F8D611187E717E7A763FE1AE645449E2C6D9EA43352201C88BF6D2181C2A41B1F7D154076C03DBC2F650FD83B6BBB8DE16338BC38BE0D9A0E8F1BE3908D9687989B0C94582804F102768ABDBF6BBCC69CE7DCB640B1F408CD0E6A08434FD5283BDEA6ED8BCAED41A7A1D2AB872310681EB21B8948CABEB6067F7B3C23628DEFACCDF18DD2E94E76CDB0A74BC6726CCD1CC60CDBB5AA5C832F041C7A1D2ABC74320701EB41B8948CABEB614CA84B14D99A398C26B76B54B9065E467860E655E391903E27590E44A4651F7E554185473247A098C6CD1B72B52DE99F56434B97930BDFF64DE372C937235D493FA8DBDB2EEF4FF1A54446F32245898B9AD5BD5A95F53E86BF9B592E11BCB69161A2E6B5715166BD492E11BCC91E81A2E6B56ED6A6BD4D0D21BE4C2F6FDED78DCB24D8A2FBEB337C6360A1FF002C4CEFF7A7065B503DABFC6A0FA8EBB5D7D8BEC503F157275DB13C58D0800198840C42FB078BE873D9ED767148AC3A3FB533A18268A06844328C425E9F364F5108480A3E25026CE1B121088A030578D9EBEF098049D8EC2843A1DDFB61AAED06D4D8EBBB6D98322E108C2000009BD43363B77A09C43650D866C36F1B8A244493128A4621CEF1E7D0942F8921D72BF09B2A0C2A396C22C4C63668DC74595F4DC0CFEF6F84654185473267A098C6CD1B72B52BE9AA88F2E5B48B1318D45B8A8B2BE9BD733F09B75CDFC24CA830A7E5B08B1318D9A371D1657D310D21BE73AF6FDED675B524CA888DE5B4F4131735AB8A8B2BEA7F2AF05E27A12CABC740D070E28A1B86C8CAB974BB4C7DB36C55D2F1629B32BF2E4336ED6AA93EC57AF33D098024341C0D1C518390DE2CAB92F233C4E4CA4F1C8C81F13A308E192328FB853AA133949668E6389AE2A2D2E419782F13D09655E3A0683871450DC364655C8AF418459303A868C41C07A308E1BC5957DC5595099C9B32BF2E04D6E56AA93EC9752E964B388A0D1C671866F03204935558D609FF00F2C4CDFF007B70654AE9BF685AC4765AFB39A7314EC7535765A9A346AE8DDA3468D1A3FF004DDF4D3F4DFF00FC010F37DD018D47D1A429EF61AFADB6D7D4D47D0B8A21A31826C22D09DAEBEDDC36FBF87B40E47A22FCAD42C1C0FB83DED76F05143CEDA29AE62806046784A361513B954E031376D9EC1F1D3A5DA64EDA3628DEC4CCDF18C462A23393656F2E04D6ED6B813EDD5154E7735B146F62666F8CF89A056864E70244C1C3285D603912E14D392E5D3D36ECAE5CFF008EAF49EAF325D4BA592CE22834719C619BC0C8124D55635F2E28DEFACCDF19F03C5511649BA8B98C25B76B5C79062B8D10C9CE04868C41B14AC07225C5957D418678609955E07190C227460E4327A6DF572FF723B2B973FE44B2E7ABCC6815C262607713070CA194611C378534E4839071E84B2AF030C86207A286E1B3D34FBA3E1861A76311368087AE263076DCDBBFC49D1EDDB40AC030B183EC31F1FF0067ADB57886EB6D35DD74EB95FB2FAF0DF75F57469FF4DA15EF3BFF00E07ED9E9D568DA628BBB461F63213106D431117DD7D3B47BD9B881044E90F77D47ED4D9BDBE6AECF5746DB6A98837B370DA98D16DBB8EA6C226F82678D8ED36BB6DAEA6D36EFBABABADA35B4EA6AECF5759B143F7D065F8C641C838F425957818643103D14370D9E9A7DDFA3F4EF633D799164C0EA260E188E28C2386F0A69C8AF5E6459CE3A868381C38AC88E25C595723C5521629BA8B98C26B76B5C7906EA8898FB98CBC17891674A501D0341C38AD08E25232AE5B99072F122C964A006068C4714511C367A69CBE5C517DF519BE3192F62AFCC99E81A2E32BADCAD4D7A96397F64FCDB25EC56396C22C345CE575C7459AF534B846F3247A068B9AD5BB5A9AF53FA60C3F98B325B91AEA4BFD465ED9777A7F8D6E65CAB97930B2B4595785CB3ADD737F09B4331BB707B89EC3651727B6EEB0AD7D3B9EB6900C4353DC51C364F0EE6B383B6CB5F46FE07500203BB61E6191D4110006DEE3E2114384260EE9FA38EF9CFF901DDB0F3034E9088FC38E91E0F89DC22D077BFD7C07CD617C335F67AFABB18BBBEA6BEB7FE2856DF51EF4EAEC1CF5769ACEDFAB89B67A53F854732479894C6CD1B72B32BE9A97B157E64CF40D17195D6E56A6BD4B7E8D1A37696C513DF5999E3192F614FCB61E81A31B346E3A2CCFA62E5435CE7595FBDACEB6A7595111BCB69E8262E6B57151657D4FA197E6C6E869F9B1BA197E6CF9776FD1A7469633D06116738EA26311881EB2238970A69F70B8F7D659F9363C52E162A4A8B98E19B8A8BC7906E97698FB66CA852E9648C48A131C64E066CF320352B4A8D1E2A90CE52345CC6135C545E3C8315EBCCF4260090D0703471460E4378B2AE4D8E67D93F36C8390711674A50030C86207AD08E253D34FABC1071164B2501D0C81C07A288E1B232AFBFAB4B20F416461D49440E3318826B024894F4D3E25650C602C53EC30501BB1FBACBB11CD5520F8AAA5D2C935E57E5C86A815AAA4FB618900717E43A5B6DB6DB1DFAFAF526D40C43B534EFD0EFA37B62A2A60CA4CB95FA0B5125B75AAA4FB7545539DCD6C2E3DF5967E4DB1575446726CCAFCB9135BB5AAA4FB25D4BA592CE22834719C619BC0C8124D55635D5154E7735B0A754267293CD1CC7135C745A5C8319E8308B39C7513188C40F5911C4B8534FABC8CF1393293C723207C4E8C238648CA3EE14EA84CE5259A398E26B8A8B4B9065E0BC4F4259578E81A0E1C514370D919572F937EED1A74E9FF4633D799164C0EA260E188E28C2386F0A69CB146F62666F8C6C0CBEF6784F81A068864980244C62328A51C390DE14D3EAE5D1D492CAE5CFF916CB9EAF325D54459231228344E1C626B3CC80D4D5560AD8AC25E3394965865C866E2A2D527D8D02B84C4C0EE260E194328C2386F0A69C9B033FBD9E11B146F7D666F8C6542A88B259C450989C2704D781902495A54150D7F6DABDB98CFE3ABCE4682DD51131F73192EA5D335189E81938CE30CD9E5C06E6AAB1A5CBFDC96CAE5CFF00912CB9EAF31A057098981DC4C1C3286518470DE14D391A068864980244C62328A51C390DE14D3E91AA88B15235BD05C89AE2A2F067DB146F7D666F8C6542A88B259C450989C2704D781902495A5417A5CA9CED9B25D54459231228344E1C626B3CC80D4D5560BF0C51BDF599BE33E654185473247A098C6CD1B72B52DE98A83157E64C8B1317195D6E56A57D490D2E4E4BEF7FD9578DCB22DD737F09B73C9D493FA72B272EAF4FF25FA60C3F98B3259511E5CC91E82631A8B6F56A57D337B7D1B145F7D66778C6541853F2D845898C6CD1B8E8B2BE9886972725F7BEE055E372C937235D497FA8DBDB2EEF4FF1A4BD853F2DA7A068C6CD1B8E8B33E998E57D93F36C97B0A8E64C8B0D18D9A36E56A6BD315111BCC8916262E6B56F56A57D4D0D21BE4C6F6DE36BC6E5926C517DF599BE3195062B1CC9916262E72BADCAD4AFA9E067F7B7C23628DEFACCDF18C970F2E5B4F40D18D45B8A8B35E99D733F09B7237D493FA8CBDB2EEF4FF1ADEDBF46ED2D8A2FBEA337C67CCBC1789E84B2AF1D0341C38A286E1B232AE4830AF0C1CCABC0E0D18432B21C89CF4DB962AE97CB14DB95F97219B76B5549F641C8388B3A528018643103D6847129E9A7D542974B246245098E327033679901A95A54690D7F725BDB98CFE45B324682DD2ED31F6CD9072F13D0E955E06068C4715A0DC4A7A69CB1575426726CCAFCB8135BB5AAA4FB1A068898E71DC4C62328A5644712E14D3E9A056864E70244C1C3285D603912E14D3974BC4C9DB462B8AD0C93004868381B0BA38721BC5957263C92E962A4A8B98C19B8A8BC7906542A88CD4627A0989C2704D679701B95A54157919E27265278E4640F89D18470C91947DEA88A73B98C9752E964B388A0D1C671866F03204935558D74BB4C7DB362352E1629B6B797019B76B5C09F6C51BDF599BE33E1A34FE9FAE862BD799E84C0121A0E068E28C1C86F1655CBAA2A9CEE6B7545539DCD64BA974B259C45068E338C3378190249AAAC6BE4DFBB469D3A7FD18CF5E6459303A898386238A308E1BC29A72EA8898FB98DD51131F731BAA2263EE6375444C7DCC623551962A4AB797226B8A8BC09F65E0838F43A5578E8640E03D68371291957D542A88B259C450989C2704D781902495A54170A74BC6726CCD1CC60CDBB5AA5C832F041C7A1D2ABC74320701EB41B8948CABEE171EFACB3F26D8E67D93F36D85C7B132CFC9B2F22BC4E7324F1C8341F0CAC88E272328E4863FB6DDEBCC5FF001DDE7234262B8D10C9CE04868C41B14AC07225C5957DE974A73B66D853A5E33936668E63066DDAD52E4197820E3D0E955E3A190380F5A0DC4A4655F57915E27399278E41A0F865644713919472E976A73B68C6815C262607713070CA194611C378534E4681A2192600913188CA29470E4378534FA46AA22C548D6F417226B8A8BC19F6C51BDF599BE318D0344324C0122631194528E1C86F0A69F715854258A92CB0CB9135C545AA4FFCF8A2FBEA337C637432FCD8DD0CFF0036B7432FCD8CA830A8E5B08B1318D9A371D1657D37032FBD9E11B737235D3737A8CBD7316CBFF1AEB97F84DBAE6FE1264BD85472D87A068C6CD1B8E8B35E9B8E67D93F36D85CFB142CFC9B7D197221AE73ECADC36B3EDA9E64B846F2DA45868B9AD5C5459AF52EB9BF84DBAE5FE136EB9BF8499511E5CB71162631A8B7151657D310D2E4E73AF6D164D9F6D493628BEFACCEF18CA888DE6488B131735AB76B52BEA48690D72637B7EF6BC6E5926C517DF599DE31B144F62866F8C643686B9CFBDB78DACEB6A49BA197E6DF9B146F7D666F8C65E46789C9949E391903E274611C324651F7AA229CEE637545539DCD6C51BD8999BE31B032FBD9E13E09755119AB38F40C9387189AF02E049355582E2AE978B14DB95F97219B76B5549FF820E5E27A1D2ABC0C0D188E2B41B894F4D396397F64FCDB15EBCCF4260090D0703471460E4378B2AE5D5154E7735BAA2A9CEE6B7545539DCD6E97698FB66DD2ED3276D197915E18265578E41A0F86518390C9194724BAA88CD59C7A0649C38C4D78170249AAAC148C4BA58A6DADE5C866DDAD7027DB146F7D666F8C6EA8AA73B9ADD5114E77318D03444C738EE263119452B2238970A69F52EAA2335671E819270E3135E05C0926AAB055CBFDB6ACAE5CFF008EAF49EAF320C33C4E7324F038C86113AC88E273D36FBF2E28DEFACCDF18D8A37B13337C67C7146F62666F8C6C0CBEF678465E0838F43A5578E8640E03D68371291957DC51BD8999BE31B468DEC839789164B250030346238A288E1B3D34E4830CF0C132ABC0E321844E8C1C864F4DBE91AA88B15215BCBA135C545E04FB19EBCC8B2607513070C4714611C378534E4839071E84B2AF030C86207A286E1B3D34FB8E67D93F37F0418678609955E07190C227460E4327A6DF572FF723B2B973FE45B2E7ABCC830AF1393293C0E0D184328C23864F4DB96171EFACB3F26C78AA22C537513418C26B76B5C69062B8D10C9CE04868C41B14AC07225C5957D41C838F425957818643103D14370D9E9A7DC55D2F19CA4F2BF2E43371516A93EC975511648C48A0D1387189ACF32035355582E28DEC4CCDF18C46A5D33548D6F2E43371517813EC6815C262607713070CA194611C378534E5F2E28DEFACCDF18CA888DE6488B131735AB76B52BEA5D0CBF36B7432FCDAD8A2FB14337C636065F7B3C236E65418ABF32645898B9CAEB72B52BEA4C97B0A7E6488B0D18D9A36E56A6BD312E11BCC91E81A2E6B56ED6A6BD490D21AE4C6F6FDED78DCB24D8A27BEB333C6375CDFC24CB9572739F64E8B2ACFB6A7BE0A830A7E5B08B1318D9A371D165BD33033FBDBE11BE8D85C7BEB2CFC9B6397F64FCDB25EC56396C22C345CE575C74599F53FA37D3732A0C2A39923D04C63668DB95A96F4CE793A92FF004E564E5DDE9FE4A8690D72617BFEF6BC6E5926541853F3247A098C6CD1B72B52BE9BF2E28DEFACCDF18DD5154E7735BAA2A9CEE6B7545539DCD633D799E873812260E190E2B21C8970A69CB032FBD9E13E3A34FE9FAE862BD799E84C0121A0E068E28C1C86F1655C8AE3444C4C0EE183106C528C2386F1655F7AA229CEE6325D4BA592CE22834719C619BC0C8124D55634830AF0C1CCABC0E0D18432B21C89CF4DB974BB4C9DB46E97698FB66C6815A1939C0913070CA17580E44B8534E44725C2C53756F2E4336ED6B813ECBC1789E84B2AF1D0341C38A286E1B232AE585C7BEB2CFC9B1E2974B252545CC60CDC545E3C832F22BC304CAAF1C8341F0CA3072192328E5D5154E7735B0A754267293CD1CC6135C545A5C832F05E27A12CABC740D070E28A1B86C8CAB915E8308B260750D188380F4611C378B2AFB8ABAA133936657E5C09ADCAD5527DBAA2A9CEE6FF00EE7FFFC4003E10000102050106030703040004070000000203130001041114150512212232331085D4162023346394E4313541245161624260718206305281B1B3D1FFDA0008010100133F00FF0091349A05DB7281054F9D5408F899C681B2FD34681B2FD34681B2FD34681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C681B2FD34681B2FD34681B2FD378E9340BB6E5020A9F3AA811F13386125DB72BD048F9151209DC0CE5C46302969597B2DCEC2417BB41EEE81B2FD34681B2FD3430920E375F509072242212B0004B80C3092EDB95E8247C8A8904EE0672E231A06CBF4D1A06CBF4D1A06CBF4D1A06CBF4D1A06CBF4DEF795D2463AABB6E2A09072242473B9984B80CED1A06D4F4D1A06D4F4D1E69491F7F1AB5020E37408247C8AAE272B1846AD40BB6E502E907224B91F1338C0AAAA7996DDEC2476B3A1D519F4B43938F4A952ADF06A954960B2C82A1CE11815543938F549552DF1AA924910B2282A7CE719F4B54F3396EF6153B59D08D22BD76DC4C150E7490209DC0C27C0A33E96BB1B22955A547E0D2AAAAC77597483902302AA9597B11AEFA417BB471ABD020E36A9A47C8AAE272B181CB88C605550E4E3D52554B7C6AA492442C8A0A9F39C6BFB2FD4C6BFB2FD4C67D2D7636452AB4A8FC1A555558EEB2E907204605552B2F6237DF482F768E349AF5DB72BD75439D24083A0C23CD2923EFE348AF5DB71305439D24082770309F028D036A7A68C0AAA565E71AEFA417BB47D378F2BA4F7BCAE923CCE93C7CD2923EFE35FC579EA5497ED629DACEDBABC349CEC8C863EBA5B9BAC46262BCF552ABF6B7CED67777AA71E5957E1A06532CD2A48777282F76AFD318994CB35492FDADF0BDDADDEA8D27071B1D8FACAEFEF3F1E67571A062BCF52AA877728ED676FD3E38994CB35492FDADF0BDDADDEA8D27071B1D8FACAEFEF3FE1E69491F7F1E594BE1F7F1E5749EF795D2479A5278F9A5247DFC795D24681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C795D5F869340BB6E5020A9F3AA811F1338D2681071BA05D50E749013E0611F611A4502EDB8A9AA7CEAA0473B999CF8943092EDB95E8247C8A8904EE0672E231A06CBF4D1A06CBF4D1A4D020E3740BAA1CE92027C0C23EC3C3CD2923EFE3CAE93C3EFE3CAE93DEF2BA48D036A7A68D036A7A68D036A7A68D26BD071BAF4153E755010E8038FBF8F2BA48CFA5AEC6C8A556951F834AAAAB1DD65D20E408C0AAA565E71BEFA417BB47D378D22BD76DC4C150E7490209DC0C27C0A357A05DB71504839125C8E7733097018CFA5A565E71BEFAA17BB47D378C0AAAEC6C8AA56A91F8D4A92A89DD15D23E438D5E8176DC54120E4497239DCCC25C06275F4B4ACBCE37DF542F7694E9BC3E92EDB890AA1CE91104EE0613E053B479A5247DFC6915EBB6E260A873A48104EE0613E051E694913AFA5A565E71BEFAA17BB4A74DE1F4976DC48550E748882770309F029DA3CD292302AAA9E672DDEC2476B3A11A06D4F4D1A06D4F4D1A06D4F4D0C2A838DD02091F22A2272B181CB88FBDA06532CD2A48777282F76AFD31ECA7E6C7B29F9B1ECA7E6C7B29F9B1A4E0E3E3E47D7577F79F8D032996695243BB9417BB57E98F33A58FBF8D032996695243BB9417BB57E98F33A48D57071B1F23E82BBFBCFC65E532CD2A48777702F76B7BA651AFE532CD524BF6B142F76ADD51F7F1A06532CD2A48777282F76AFD31AFE532CD524BF6B142F76ADD51AB60E363E47D0577F79F8CBCA659A5490EEEE05EED6F74CA3CCE963EFE340CA659A5490EEE505EED5FA631329966A925FB5BE17BB56EA947B29F9B1ECA7E6C7B29F9B1ECA7E6C7B29F9BFF91814B54F3388DF7D23B59D3861241C6EBEA120E44844256000970186125DB72BD048F9151209DC0CE5C46302969597B2DCEC2417BB41E190AA0E36A82A1CE9109CAC6984F814AF1FBA6662318DF3CFB7B994BF6ED7DF8D0365FA68C855071B54150E74884E5634C27C0A578D7F6A7A98D7F6A7A9F0C0A5AA79971BEFA476B3A7D30C24838DD7D4241C890884AC0012E03E19F554ACBD96E76150BDDA087D55DB7281054F9D52239DCCCE7C4A348A041C6D505439D2404E563009F028C0A5AA79971BEFA476B3A7D30C24838DD7D4241C890884AC0012E03E1814B54F3388D77D23B59D38D0365FA68D2681071BA05D50E749013E0611814B54F3388DF7D23B59D38D0365FA6F7B48AF5DB71305439D24082770309F02F0CFA5A565E71BEFAA17BB47D3787D25DB71215439D22209DC0C27C0A768D036A7A68C0AAA565E71BEFA417BB47D378D22BD76DC4C150E7490209DC0C27C0A1F49071BAF4153E754842560039F128CFA5AA799CB77B0A9DACE846915EBB6E260A873A48104EE0613E05E19F4B4ACBD88D77D50BDDA38C0AAAEC6C8AA56A91F8D4A92A89DD15D23E4386155DB7282A120E44848E7733097018FDAF0F2D8C6F9E65CDFC45FA2F6DC87D25DB71215439D22209DC0C27C0A768D5A8176DCA05D20E449723E2671815554F32DB9D848ED6743AAD0C2A838DD02091F22A2272B181CB88C6BFB2FD4C67D2D53CCE5BBD854ED6742348AF5DB71305439D24082770309F028D5E8176DC54120E4497239DCCC25C063EFE348AF5DB71305439D24082770309F02F0CFA5A565EC46FBEA85EED1C3E92EDB890AA1CE91104EE0613E053B7BDE594B18994CB34AAAFDADF0BDDAB754A3F63D3B4FFB975CCFFF004B3519794CB34A921DDDC0BDDADEE9947B29F9B1FB1E9DA7FDCBAE67FF00A59A8CBCA659A5490EEEE05EED5FA651AFE532CD2AABF6B142F76ADD5E1A06532CD2A48777282F76AFD31978AF3D54921DDDC3B59DDEE99C7B57F851A56A98789FD0FCCBC8B9BF8AE76E56DFB47B29F9B1A4E0E3E3E47D7577F79F8D032996695243BB9417BB57E98CBC579EAA490EEEE1EED9DDEE99C6AD9D9390C7D14B737588D0329966A9543BB9417BB57E98D7F299669555FB58A17BB56EA8D5B071F1D8FA0AEFEF3F1A56A98789FD07CCBE8B9BF8AE76E56DFB4626532CD524BF6B7C2F76ADD51A4E0E363E47D7577F79F8F2CA5F1F2CA4F7BCAE92184976DC48D23E4544827703397119DA3029695979B73B0905EED27D578D5ABD071BAF5D20E449710E8008D0365FA68C0A5A565E6DDEC2417BB41D57F0D5EBD76DC4CD23E4557209DC0CE5C47C349A05DB7281054F9D5408F899C6052D0E4E3D2AB548FC6A5492582CB2091F21C6BFB53D4C642ABB6E2A6A9F3AA4473B9A853E253B469340838DD02EA873A4809F030F0D268176DCA04153E755023E2671E694912AFAAA565ECB73B0A85EED04642ABB6E2A6A9F3AA4473B9A853E253B4795D5C7D8469140BB6E2A6A9F3AA811CEE6673E250C24BB6E57A091F22A2413B819CB88C6052D2B2F65BBD8482F7682357AF41C6D304839125C42560009701F1F2BA4F7BCAE921F49071BAF4153E754842560039F128CFA5AA799CB73B0A9DACE87863AABB6E2A09072242473B9984B80CED1A06D4F4D1A06D4F4DE19F4B4ACBCE35DF542F768FA6F181555D8D9154AD523F1A9525513BA2BA47C87157B7681943FDCDA58CED2FF0003384A8184E98E9DFE12B19DEEFC536CC71306699343AA76BDDA8D1C234708A8A59A6A28F54AABCEE3295A569AB68248E5294BFCCED19F4A836F623567950BDDA38C0AAAEC6C8AA56A91F8D4A92A89DD15D23E5386155DB7282A120E44848E7733097018FDAF0F2D8C6F9D65CDFC55FB77B46055576364552B548FC6A549544EE8AE91F21C6935E838DD7A0A9F3AA8087401F86935EBB6E57AEA873A48107418467D2D7636452AB4A8FC1A555558EEB2E9072047ED78796C637CEB2E6FE2AFDBBDB721F4976DC48550E748882770309F029DBDEF2CA58CBC579EAA490EEEE1DACEEF74CE356CEC8C8C8FA096E6EB1E18994CB35492FDADF0BDDAB754A3D94FCD8F653F37C3EFE3CB29607F51DE9CA5797F995E252E128095E7B8984CA7697FD250139948252909A73BCF8CEE2769CF85E72BCA568527610194AF39CE73FE2528AC49B1AA496099A6AA72FD6425295E5BD294ED69DBC3FE10995E45BB2FE25398DEDFDE739FF31A06532CD2A48777282F76AFD3E1AAE0E363E47D0577F79F8CBCA659A5490EEEE05EED6F74CA3D94FCD8D27071F1D8FAEAEFEF3F1A06532CD52A8777282F76AFD318994CB35492FDADF0BDDADDEA95AF1FB1E9DA7FDCBAE677FA59A8D2B54C3C4FE83E65E45CDFC573B636DFB7BDABD7A0E3698241C892E212B0004B80C6052D0E4E3D2AB548FC6A5492582CB2091F21C7EE99988C637CF3CDEE65AFDBB5F7E1849071BAFA84839121109580025C06184976DCAF4123E4544827703397118C0A5A565ECB73B0905EED0469340BB6E5020A9F3AA811F13387D541C6E82A150E74884E563009F028CFAAAA79971BEFAA76B3A7D368F2BA48FF00BE5E14E52963266049E42E5796E2729CE76FE4A72B0CA73BDB6A3DBE330A74D2B727F1C853BDE7FACB84AD3BECDDB2A2AF2025BC694913404A523DDDC9F35B7665C62F27524E9A46204A87EA247350E72BFEA0DF87FDC51A4502EDB94082A7CEAA047D671AFED4F531AFED4F531AFED4F531A06CBF4D1FB5E1E5BF93F22C39BF8A8772F6DC8C85576DC54D53E75488E77350A7C4A768D0365FA68FDAF0F2DFC9F9161CDFC543B97B6E4642ABB6E2A6A9F3AA4473B9A853E253B7BDA457AEDB8982A1CE920413B8184F81430AAEDB941509072242473B9984B80C605552B2F38DF7D20BDDA3E9BC795D2467D2D7636452AB4A8FC1A555558EEB2E907204681B53D3463AA838DAA691F22A2272B1A652E2328D036A7A68FDAF0F2D8C6F9E61CDFC55FB77B6E43E92EDB890AA1CE91104EE0613E053B78274229A28A467314574AA24A94D407268A4523009DD4BDA366A96651AA56A12A62A8DD9DD8A646986649CA7BB335EE5095E68D32B4AD492A84D39DC46EF148A5294A45619CE2A7E67682CAA6446AA15339B9F0F978EF5AE56B5A2946432DABB384A725F78385F7921782FD256B4E5C6F41B36A2B0954256B9FC202E1CC30D1A7BF3150C4B94E522E1319CBF48D5E81071BA04123E455713E0607E1F7F1E57491AFECBF5319F4B54F3396E76153B59D08D5A81071BA04123E455713958C3C302AAA9E672DCEC2476B3A10C2A838DD02091F22A2272B181CB88FBDA06532CD2A48777282F76AFD3E1AB60E363E47D1577F79F8D2B54C3C4FE83E65E45CDFC573B636DFB4626532CD524BF6B7C2F76ADD51ECA7E6C6262BCF552ABF6B7CF76CEDBAA718994CB34AAAFDADF0BDDADDEA94693838F8F91F5D5DFDE7E3CB297C03F8AA40A9EB11FFE838A0009112469A736493504C4C39653B14A7394F8CA70B8802C549319A694C3993414BDF7E4090CA5212E6B95EE9D624CA03322DD4896107A616DD9CC1DB7198F4C02929A6B23309837219719CA729FE9394B8452593ACAE5123ABA6911D42A5BA92130A4524729094CAD149564926A27906DA6F12739F2818DCB723DABFC28D0315E7AA9243BB9476B3B7E98FBF8D032996695243BB9417BB57E98CBC579EAA490EEEE1EED9DDEE99C7B57F851ED5FE146818AF3D54921DDCA3B59DBF4C6939D919191F5D2DCDD6231315E7A9525FB5BE76B3B6EA9FBDA4D02EDB94082A7CEAA047C4CE35FDA9EA633EAAA9E6711AEFAA76B3A71A4502EDB8A9AA7CEAA0473B999CF8943092EDB95E8247C8A8904EE0672E231814B4ACBD96E76120BDDA08D268176DCA04153E755023E2671ABD7AEDB899A47C8AAE413B819CB88C6052D53CCE235DF48ED674E33EAA87271EA95A547E0D2AA92216450483903C1CDD3553569D748E432FF008AD23DF9CBFF00485E25FA47F78D8FB357A9A79C84B7484E49C8C933039184E45FAEE6F42889A339DA769F298C8A5C65FCCA10E2E20B564D6DF9CA529EE8260B29729CE579A96943CA22E86FCE76DF4C84A5C65FC4E51AFED3F531E69491814B54F32E35DF48ED674FA6D1A06CBF4D1E6949E390AA0E36A82A1CE9109CAC6984F814AF1FBA6662318DF3CF37B994BF6ED7DF8CFAAA1C9C7AA56951F834AAA4885914120E40F7BCAE93C25415554F32DB9D848ED6743AAD18EAA0E36A9A47C8A889CAC6994B88CA185576DCA0A84839121239DCCC25C063F6BC3CB631BE799737F117E8BDB721F4976DC48550E748882770309F029DA356A05DB728174839125C8F899F8E75354EFA412B1CEE8A8768DEE09998EE914A5FA6F6EDC653FE244504129FFF009049CE53FF00E611B2F475273B5CCE9D496EC8F965720984E7C6F38A619260676E2421329CC653FED79DBFBC4E9C4159A69269260332971294B74A728FED3BCE769FFED394E3CAE92356A05DB728174839125C8F899F86915EBB6E260A873A48104EE0613E051A457A0E3699AA7CEAA0212B001CF8946055553CCB6E76123B59D0EA8D036A7A68D26BD071BAF4153E755010E803F0D26BD76DCAF5D50E749020E830F7BCB29635FCA659A5557ED6285EED5BAA3EC235FC579EAA557ED629DACEDBAA313299669555FB5BE17BB56EA8FD8F4ED3FEE5D733BFD2CD4695AA61E27F41F32F22E6FE2B9DB95B7EDE1AB60E363B1F415DFDE7E3DABFC28A5FFC432A951BFF0009952848E7FE37E51B4692A13552FF005B4C061A5E2A1153713DE3101BDA7FC910CA195A29D05260A6E19015AF3FE084A509D31CE729FF007E33B5FF00EB0B4AC7507C39A7C25FDA5FC4BF494A5294A51A06532CD2A48777282F76AFD31AFE532CD2AABF6B142F76ADD5E1E59491A062BCF52AA877728ED676FD31A4E7646431F5D2DCDD6231315E7A9525FB5BE76B3BBBD538F653F363D94FCD8F653F37DED5EBD071B4C120E4497109580025C063CAEAE33EAA95979B77B0A85EED0755E35FDA9EA633EAABB1B22A92A55BE0D52AAA2774575439C23029695979B73B0905EED0755E348A05DB715354F9D5408E773339F12F0FB08D5ABD071BAF5D20E449710E8008D5ABD76DCAF4123E455720E833F0D5EB9071BAF5D20E449610958023029A85FC7A55AA91F8D4C9A6A85964122E0713AFA9AA799C46BBCA1DACE9C799D5786052D53CCE235DF48ED674E340D97E9A3CAEAE30296A9E6711AEFA476B3A719F5543938F54AD2A3F069554910B228241C811A06CBF4D1814B4ACBD96EF6120BDDA08D5EBD071B4C120E4497109580025C06184976DCAF4123E4544827703397118C0A5A565ECB73B0905EED0469340BB6E5020A9F3AA811F133F7B48AF5DB71305439D24082770309F028F34A48FBFF0C75576DC54120E44848E7733097019DA3F6BC3CB631BE799737F157EDDEDB9181555D8D9154AD523F1A9525513BA2BA47C87E19F4B4ACBD88DF7D50BDDA387D25DB71215439D22209DC0C27C0A76F0FBF8F2BA48C0AAA1C9C7AA4AA96F8D54924885914153E738FDD33311FC9F9179BDCCA43B96BEFC681B53D3467D2D7636452AB4A8FC1A555558EEB2E9072047ED78796C637CEB2E6FE2AFDBBDB721F4976DC48550E748882770309F029DA31D55DB71504839121239DCCC25C067689D05552B2F38DF7D20BDDA3E9BC795D24605550E4E3D52554B7C6AA492442C8A0A9F39C6BDB33D4C6055576364552B548FC6A549544EE8AE91F21F8F95D27BDA06532CD2A48777282F76AFD31AFE532CD524BF6B142F76ADD51AB60E363E47D1577F79F8F6AFF0A355D530F13FAEF96651737F15BEE4ADBF78FD8F4ED3FEE5D733BFD2CD465E532CD2A48777702F76B7BA65E3E59491A062BCF5524877728ED676FD31AAE0E363E47D1577F79F8D2B54C3C4FE83E65E45CDFC573B72B6FDA340C579EA5550EEE51DACEDFA63EC2340CA659AA550EEE505EED5FA631329966A925FB5BE17BB56EA8D27071F1F23EBABBFBCFC79652C6BF94CB35492FDAC50BDDAB7547DFC795D2465E2BCF52AA877770ED6777BA671ED5FE14695AA61E27F41F32F22E6FE2B9DB95B7EDE3E594BEF69340BB6E5020A9F3AA811F13387D541C6E82A150E74884E563009F028CFAAAA799C46FBEA9DACE9C6AD5E838DD7AE907224B887400467D557636455254AB7C1AA55544EE8AEA873847ED78796FE4FC8B2E6FE2A1DCBDA35FDA9EA6349A041C6E8175439D2404F81846052D53CCE237DF48ED674E1849071B48520E4484425604C25C06578C855071B54150E74884E5634C27C0A578D7F6A7A98C85576DC54D53E75488E77350A7C4A76F0CFAAA565E6DDEC2A17BB41D578C0A5AEC6C8A54AA96F8D5492AB1DD65D53E7386125DB72BD048F9151209DC0CE5C46340D97E9A33EAA87271EA95A547E0D2AA9221645048390235FDA9EA633EAAA9E65C6BBEA9DACE9F4C795D278E9140BB6E2A6A9F3AA811CEE6673E251A06CBF4D1A06CBF4D19F5543938F54AD2A3F069554910B228241C81EF6915EBB6E260A873A48104EE0613E051A06D4F4D1A06D4F4D1A06D4F4D1A06D4F4D181554ACBCE35DF482F768FA6F1AB5020E37408247C8AAE272B184605550E4E3D52554B7C6AA492442C8A0A9F39C67D2D53CCE5B9D854ED6742356A041C6E81048F9155C4E56308F2BAB8FB08F34AB87D241C6EBD054F9D521095800E7C4A3F74CCC47F27E45F6F73290EE5AFBF18EAA0E36A9A47C8A889CAC6994B88CA35FD97EA633E96A9E672DCEC2A76B3A11AB5020E37408247C8AAE272B1843E920E375E82A7CEA9084AC0073E251AFECBF530FA4BB6E242A873A44413B8184F814ED18EAAEDB8A8241C89091CEE6612E033B44E82AA95979C6FBE905EED1F4DE3CAE9231D55DB71504839121239DCCC25C067689D05552B2F6237DF482F768FDFF002CA58F653F363D94FCD8F653F36340C579EAA490EEE51DACEDFA63EFFC34AD2F332FFA1F997966F7329CED947B57F851ED5FE146818AF3D4AAA1DDCA3B59DBF4C7D84799D5F86939D9190C7D74B737588C4C579EAA557ED6F9EED9DB754E3DABFC28F6AFF0A3DABFC28CBC579EAA490EEEE1DACEEF74CE355CEC9C8C8FA096E6EB11E594918994CB35492FDADF0DEBB56EA94695838D8F91F5D5DFDE7E3CB2923CCE9634ACEC9C8C8FAC96E6EB11ECA7E6FBDE57490C24BB6E57A091F22A2413B819CB88C681B2FD34681B2FD3479A5247DFF86052D0E4E3D2AB548FC6A5492582CB2091F21C67D5553CCE235DF54ED674FC349A041C6E8175439D2404F81847D8469140BB6E2A6A9F3AA811CEE6673E251A06CBF4D1A06CBF4D1A06CBF4D1AFED4F531AFED4F530FAABB6E5020A9F3AA4473B999CF8946052D0E4E3D2AB548FC6A5492582CB2091F21C67D5553CCB8D77D53B59D3E9B4795D24681B2FD34681B2FD3430920E3690A41C890884AC0984B80CAF1814B43938F4AAD523F1A9524960B2C8247C871FBA6662318DF3CF37B996BF6ED7DF861241C6EBEA120E448442560009701F7BCAE923CD293C7CD2923EFE356A041C6E81048F9155C4E56308F34A4F0D26BD76DCAF5D50E749020E83086155DB7282A120E44848E77330970189D05552B2EB8DF7D20BDDA3E9BC6915EBB6E260A873A48104EE0613E051AB502EDB940BA41C892E47C4CE3EC3C185576DCA0A84839121239DCCC25C063F6BC3CB631BE799737F117EDDEDB90FA4BB6E57D42A1CE91104EE0613E051E575712A0AAAA7996DCEC2476B3A9F55A31D541C6D5348F915113958D329711946AD40BB6E502E907224B91F1338CFA5A565EC46FBEA85EED1C6055576364552B548FC6A549544EE8AE91F21C79A5244EBE9695979C6FBEA85EED29D3787D25DB71215439D22209DC0C27C0A76F7BCAE9231329966A925FB5BE1BD76ADD528F653F363D94FCD8F33A58FBFF0D7F29966A925FB58A17BB56EAF0D0329966A9543BB9417BB57E98C4CA659A5557ED6F85EED6EF54A34AC1C6C7C8FAEAEFEF3F1E59491ED5FE146AB9D9390C7D04B73758F0D0315E7AA9243BB9476B3B7E98FBFF0F2BAB8FB08D7F15E7AA955FB58A76B3B6EAF1D032996695243BB9417BB57E98D5754C3C4FEBFE59945CDFC56FB92B6FDE349C1C7C7C8FACAEFEF3F1A06532CD2A48777282F76AFD3EF795D24681B2FD34681B2FD34681B2FD3469140838DAA0A873A4809CAC6013E051F7FEE69140BB6E2A6A9F3AA811CEE6673E250C24BB6E24691F22A2413B819CB88CED1A06CCF4D19F5543938F54AD2A3F069554910B228241C810FAA838DD0542A1CE9109CAC6013E051AFED4F531AFED4F53190AA0E36A82A1CE9109CAC6984F814AF13AFAAAA79971BEFAA76B3A7D368D268176DCA04153E755023E2671E575719F554ACBCDB9D8542F7683AAF0FAABB6E5020A9F3AA4473B999CF894681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C6AF5EBB6E26691F22AB904EE0672E231814B54F3388D77D23B59D38D0365FA6FF99FFFC4002A11000103030205040203000000000000000100020304051106211213314051101422413280162442FFDA0008010201013F00FD9A073E83708641EFA59046325433897A2924118C950CC25E9DEEDD15DEB22A6A77F1EE55B756B2DF172A66F555FAA5B5748EE546412B4C81EC83B8B2E3E9F8F74767A75496CE42A3823ADAA2F937C7D2BD5AA8DF3B1EE6630BD8521A511F00030AD956EB55D1F0039612B9E00C94C7878EE88CABEC8200C7F8475355D1D710C3B29EF02BA2CCB2E0A9357CD08E40391E54B7685E1B237F2F2BDC3EB18C847FA54C0B58223F5DD67016A767F4DEEF0A42E3212A9C1126241B2ABB232439A5F1F6A4824A69431EAC25B253C2E3F41746E3BAE87215C6DCDB93381C765268280E785E9FA065CE5922FE3B5B147CB90712A8D2570E6F1C4CC0565A534B42D63BAAC671DD0F8EC5608DC2F92C1F2B87EC84785FB2D9BF00BA7EDDFF00FFC400251100010401040104030000000000000000010002030411051221403210224180144261FFDA0008010301013F00FB76D6A73709A139B8EEF2AA40F95E24F85269DF907785069E18FDC5CAFEDDFC0F407B4D4C8B729849523DA154B53161084AF7BF20AB359F356DC5A830A23B43C9513FAAB518B8DC151D335FC555A518707CA15FB94DF4042C1CA6E222F47DDDAF95A77364350FE27709B69CDF6BC26B848DE15AE1CF4381DAC65413188E426EB2F09BAD1F9085F8F3951EA9106E15B977BF211E5BDA6AC64AC05C2E10217921F6EFFFD9, '1', '2022-03-16 22:15:46', '1', '2022-03-16 22:15:46', b'0'); +INSERT INTO `infra_file_content` VALUES (5, 4, '0d9be64ab8674344b236df60f4c39b62.jpg', 0xFFD8FFE000104A46494600010100000100010000FFDB0043000302020302020303030304030304050805050404050A070706080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F171816141812141514FFDB00430103040405040509050509140D0B0D1414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414FFC20011080102010203011100021101031101FFC4001E00000301010101010101010000000000000008090701060A02040503FFC4001C0101000203010101000000000000000000000105020406070308FFDA000C03010002100310000000AA6000000000000000000000000000000000070000000000E81C3A70E8001C03A0700000E8001C2401808000FF000BF9808017F8E12007F8C00A0200040102BE0120C0000BFC000708045D03033802AA794029412BC69C0DFC9B206005261020356037F37E1551D33CB1AA1160BFC00070804553201017F4554D50A002A86AA4582FE0800D51164AA66503FE74CA48B22A85FD1551561552A98AB17F8000E1008AA640202FE8AA8AB00FF0BF98097F490007AB12D2D2920C0DF8F564AC2FE8AA8AB0AA954C558BFC00070804553003013CA0AA9AB1540F2A45A3CA95409B27953CB173C55474CF2C4593CB173C4047F80E9208FA27000384FF0032C387406A0CA8D58554D50D5895A6563526A66A82B06546565A61553541AA1013A0700AAA0000004FE37F03002809E449B22AA5D0303384023572E79F3B250030003CA973C6089FE2026FC3002025FE0003F22FE7CEC9AB9E58B9E6A6795030037F18227F9C26C8E913687E8A504303D48FE9BF916874874C6089FC4863E9E8000E1008CAC7F440C7F4E08195407FC4006A8404E9C1A932A1AA22D1AA0D39AA8AB8FE99492B8BFC708045FE000384023033D494A04A8CB0CA0FA261812401E5C7F8DF095A57F2400EA88115E885E3542585A530037F182384022FF0001C20115F0C00A02791303384023572A808794FCF0666B0E8F062D2B32107EC9B23A66A679724015FCC00D4C9B47D3D0001C201169CCA86B0CA0404E92ACAA62AC5F13FA4FF0033E3965D84EBBF58CCFE4D5B671FF2C44C8B03566563FA2AC6AA5501023A5540003F22FE4D93531D303003001582E79164BE50FEA463B41BD9EF975F7FD2DB5FD2F595FBE75D57FC0991F2754009583545262178D51498F5C0007E45FC8B45CF22C9AB0FF1BE1810AA9368A8312CC516DE535BBDEBA973F7DD6D7647E5FD2B29EC9C8FA0FBC4B2CB19AE55315601FE17F26B9400C00FA27000384FF22C0D58D48FE8808FF1014B4A4AD1C786F9C8DB79BF1DEDBC6DD53FBFACDCF1FF001F41FF0027D57C5D84EC6A13EDAC72C3533541AA101032C32A32B3E944000E1200754408C00B4A6006003FC60007874379C6DAFE7F2EFA09F58C5FACAFD4F98DE553F4BF11437B2A4C1A41164D4CAA640203E9E89B26A6501000384022FF001941EA480C3A44DA1FA2BF9D10F1C6A5D9FF002FCEEE7F92B36330DEC3D671B65FC5EE9C96CBD0E9C1437F2BF8BF01EA8CB0C0490057F2948001C2010FE9961958AB0FE0155055055CFF00B4CB59187FA6CB4BC59A4C69713FEB44FEFE9094C01FF2018FE9AA116C7F4E1D2AA0001F917F241969CCACCA495E7AA3E89C9567AB024095EC5D0FEE1EE1A610F10601FE382043FA6FE06006005800003F22FE7961562AA1E449B26A650127F1218F225531561FD32C1A910235326D1F49879522C8FE8810FE9404E1008BFC000709FE2B065635007040CFA503840335632B1A835332B32C2A899512B4D58D50554CB07F0E954C08045FE0003848015837F37F3D41960D48951BF9218FA4C30337C3D719392BCA4C4831FD35635422C0AA9D1803D480FE9404000FC8BF9E58000D509AC6FE745FCC046A46A8F522585272178FF0BF8FF120CC0CFA4C3CA9164BA048527F9F55000070804354006566A85532561C035432B1AA1AA1543551023803FC6544AD2D399512B4AA64AD1A82AA8001C20115F090605531562AA115C09FE5283D58969EA400AA6749046FE55022C801818E91A98E98C10001C201154C80405FD1553CA0EA9008AFE2025CF3CA8809EAC9583023A43A64832D31EA895A30070D588B27963E9E8000E1008B4E20203542AA55422C13FCA002AC5A52568D48AB8AA1400D50AA64021AA32B2D39C10032C1A732B2808001C2010001E5874CAA87CAB9D18032C37C1FD26C95F4E1BE9E549AE6025A62181EA47F85FC7F8C00408BFC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007FFC4004210000003060209020503030203090000000607080004051415160917010203111318195785253810202147671226272829464175223739303142505160616383FFDA0008010100011200FF00C8F7B6F6DEDBDB7B6F6DEDBDB7B6FF008EFF00868D3A34FCBBDBF568F8FEAD0DBDB7B6F6DFF32F05E27A12CABC740D070E28A1B86C8CAB97545539DCD6EA8AA73B9ADD5154E7735BAA2A9CEE6B614EA84CE5279A398C26B8A8B4B9065E0BC4F4259578E81A0E1C514370D919572EA8AA73B9ADD5154E7735BAA2A9CEE6FC5782F13D09655E3A0683871450DC364655C97919E27265278E4640F89D18470C91947DC2995099CA4B3433184D715169721F2F545539DCD6EA88A73B98C830CF139CC93C0E321844EB22389CF4DBEAF233C4E4CA4F1C8C81F13A308E192328FBD5114E7731BAA2A9CEE6B7545539DCD6EA8AA73B9ADD5154E7737E6C51BDF599BE318D0344324C0122631194528E1C86F0A69F7AA2263EE5B75444C7DCC6C51BD8999BE31B032FBD9E1197820E3D0E955E3A190380F5A0DC4A4655F50720E3D09655E06190C40F450DC367A69F4F154658A6EA2E6309ADDAD71E41950A5D335671E82638C9C0CDE05C09256951A542A88B259C450989C2704D781902495A54170A84BC6726CCD1CC70CDB95AA5C8319EBCC8B2607513070C4714611C378534E49752E99A8C4F40C9C671866CF2E03735558D62ACA80B152795F97026B8A8B549F62BD061E8738121A310681EB21C8971655F550AA22C967114262709C135E064092569505E974A73B66DD2E94E76CD92EA5D335189E81938CE30CD9E5C06E6AAB1AC55D50962A4F2BF2E44D71516A93EC839789164B250030346238A288E1B3D34E58A37B13337C636065F7B3C2319EBCC8B2607513070C4714611C378534E5D51131F73188D54458A92ADE5C09AE2A2F027DB146F7D666F8CF9B146F7D666F8C6C51BD8A19BE33E38A37B13337C636067F7B3C232A0C55F96C3D04C5C6575C74595F52FA32E4437CE7593B86D675B53AC9708DE5B48B0D1735AB8A8B35EA785CFBEA2CFC9B6ED1B99506151CC91E82631B346DCAD4B7A62A223799222C4C5CD6ADDAD4AFA9AE4437C98593BC6B78DCB3AD85CFB142CFC9B25DC29F96C3D03463668DC74599F4CD1BB737D195111BCC9116262E6B56ED6A57D4D72A1BE4C2C9DE36BC6E59DF8628DEC4CCDF18D819FDECF08D8A2FBEA337C67C3033FBD9E11B146F7D666F8CF9B146F7D666F8C6C51BD8999BE33E38A37B13337C636067F7B3C23628DEFACCDF18DD5154E7735B0A754267293CD1CC6135C545A5C832F05E27A12CABC740D070E28A1B86C8CAB96171EFACB3F26DFF7EAB2F05E27A12CABC740D070E28A1B86C8CAB920E5E27A1D2ABC0C0D188E2B41B894F4D396397F64FCDB15EBCCF4260090D0703471460E4378B2AE4BC8CF1393293C723207C4E8C238648CA3EF544539DCC6EA8AA73B9AC839789E874AAF030346238AD06E253D34E58E67D93F37F0C51BD8999BE31B033FBD9E11B146F7D666F8CF86067F7B3C23628DEFACCDF19F3628DEFACCDF18DD51131F731BAA2263EE6375444C7DCC65E0BC48B3A5280E81A0E1C5684712919572C0CFEF67846C51BDF599BE3192EA5D335189E81938CE30CD9E5C06E6AAB1A23551962A4AB797226B8A8BC09F633D799164C0EA260E188E28C2386F0A69C8CF4187A13004898C46407A30721BC29A7D2352D99CA46B797219B8A8BC09F64BAA88B2462450689C38C4D679901A9AAAC14CF4187A13004898C46407A30721BC29A7D2392E19CA42B797219B868BC19F6340AE131303B89838650CA308E1BC29A72C51BD8999BE31B032FBD9E118CF5E6459303A898386238A308E1BC29A72C51BD8999BE3188D4BA66A91ADE5C866E2A2F027D8D02B84C4C0EE260E194328C2386F0A69CB146F62666F8C6C29D509629B33473184D6ED6A9720DD51131F731BAA2263EE6375444C9DCB65E467860E655E391903E27590E44A4651F7E554185473267A098C6CD1B72B52BE9BD0CBF3637433FCD8DD0CBF3637432FCD8C8650D72617B7EF5BC6E592654185473267A098C6CD1B72B52BE9B8A27B14337C636067F7B7C232A0C29F9923D04C63668DB95A96F4CC51BD8A19BE3190D2E4E4C2F6DE0ABC2E59265447973247A098C6A2DBD5A95F4C5438AC732645898B9CAEB72B52BEA781A7DEDF08CA830A8E64CF41318D9A36E56A5BD355062AFCC9916262E72BADCAD4AFA92195C9C985EDFB2AF0B96459511E5CC89E82631A8B6ED6A57D33145F62866F8C6C0CFEF6F84654185473267A098C6CD1B72B52DE9AA888DE6488B131735AB76B52BEA5D0D3F3637432FCD8DD0CFF0036B7434FCD8DD0CBF36FFD862B0A84CE4DB96197226B76B5549F64186789CE649E07190C2275911C4E7A6DF57919E27265278E4640F89D18470C91947DC2995099CA4B3433184D715169721F0340AD0C9CE0489838650BAC07225C29A725CBA7A6D595CBA7F1DDE73D5D6EA8AA73B9AC6815A1939C0913070CA17580E44B8534E5D2ED31F6D1BA5DA63ED9FC08D54466A6DADE5C89ADDAD7027D90619E273992781C643089D6447139E9B7D6C2992F162A4F34731833715169720CBC8AF0C132ABC720D07C328C1C8648CA3919EBCCF439C0913070C871590E44B8534E446AA33393756F2E44D6ED6B833EC830CF139CC93C0E321844EB22389CF4DBEB62B0A88CE4D995F97226B76B5549F6EA8AA73B9AC839789E874AAF030346238AD06E253D34E58ABAA133936657E5C89ADDAD5527DBAA2A9CEE6FCBBF768D3A74FF00A319EBCC8B2607513070C4714611C378534E4C46A5D33548D6F2E43371517813EC6815C262607713070CA194611C378534E5D51131F73188D54858A91ADE5C89AE2A2F027D8CF5E6459303A898386238A308E1BC29A725E45789CE649E390683E195911C4E4651CB0A74BE66A6CCD1CC60CDBB5AA5C86933D799164C0EA260E188E28C2386F0A69C9B1574BA67292CAFCB90CDC545AA4FB25D54459231228344E1C626B3CC80D4D5560A830CF0C132ABC0E321844E8C1C864F4DBEAE5FEE476572E7FC8965CF5798D02B84C4C0EE260E194328C2386F0A69C90720E3D09655E06190C40F450DC367A69F4F15445926DA2E6309ADDAD71E4197919E18399578E4640F89D64391291947DE974A73B66D853A5E33935E68E63866DCAD52E418CF5E6459303A898386238A308E1BC29A7233D061E84C01226311901E8C1C86F0A69F7034FBDBE118CF5E6459303A898386238A308E1BC29A726C5612F19CA4B2C32E43371516A93EC6815C262607713070CA194611C378534E5F2E28BEFA8CDF18C9708DE648F40D1735AB76B535EA5F4C183F31664B2A23CB9923D04C63516DDAD4AFA6F432FCD8DFF45FFCC5992CA88F2E648F41318D45B76B32BE9897B157E64CF40D17395D6E56A67D4F768FD2CA830A8E648F41318D9A36E56A5BD31511E5CB69162631A8B7151657D33AE57E136E46BA927F5197B65D5E9FE35D0CBF36B21A435C98DEDFBDAF1B96499506151CC99E82631B346DCAD4AFA6AA23CB96D22C4C63516E2A2CAFA6AE35CBCE7D93FB2ACEB6A7592F614FCC99161A31B346DDAD4CFA625EC55F9933D0345C6575B95A9AF525CAB93931B27F655E372CEB7233D493FA8CBDB2EEF4FF001A54446F32245898B9AD5BD5A95F5343286B930BDBF7ADE172C8B628BEFA8CDF19F0DDA1B145F7D66778CF9B146F7D666F8C62B8D1131303B860C41B14A308E1BC5957D3C55199AA468B98C26B8A8BC790641C8388B3A528018643103D6847129E9A7DEA8AA73B9AC792A333949D1731C4D71D178F21F02BD061164C0EA1A310701E8C2386F1655F7768D1ABB99782F13D09655E3A0683871450DC364655C92EAA2335671E819270E3135E05C0926AAB05E97698FB68C5715A19260090D0703617470E4378B2AE4839789E874AAF030346238AD06E253D34E5BBE9B99782F13D09655E3A0683871450DC364655CB146F62666F8C6C2992F162A4B34331833715169720C5715A19260090D0703617470E4378B2AE585C7BEB2CFC9B6397F64FCDB15EBCCF4260090D0703471460E4378B2AE4BC8CF1393293C723207C4E8C238648CA3EE14EA80CD5279A398C26B8A8B4B90D067A0C22CE71D44C623103D644712E14D3EFC3146F7D666F8CF9B146F7D666F8C65E45789CE649E390683E195911C4E4651CB0A64BC6726DCD0CC60CDBB5AA5C87C0D0344324C0122631194528E1C86F0A69F7AA2263EE5B75444C7DCCF8118974CE5255BCB80CDC545E04FB25D54459231228344E1C626B3CC80D4D5560B07C2C14ABFC4DD9D36E0476856C36DAFF00A35DF50C22F7446EE22CD4BC35C58FE21929C651D860061479CE2330DFC711A833E4625FF5B8F44F05F73442DD13C19DCE10B270275C13992E1D2EDC222F91974834C70DFB6D137777D96BED36BA769B3D9EAE8DFADAF8A82663254D6C8ADD72CC3B73EA422A73BA52EAA12C91891219270E31359E6386A6AAB05418678609955E07190C227460E4327A6DF572E8EA496572E7FC8965CF57992EAA22C9189141A270E31359E6406A6AAB055E0BC48B3A5280E81A0E1C5684712919572DCC839789164B250030346238A288E1B3D34E49752E99A8C4F40C9C671866CF2E03735558D2E5FEE4B6572E7FC8965CF5798D02B84C4C0EE260E194328C2386F0A69CBE5C517DF519BE319511E5CB71162631A8B7151657D310D2E4E73AF6FD95675B523F054446F32445098B9AD5BD5A95F53E867F9B5BA19FE6DF86067F7B3C23628BEFA8CDF18CFF00FAB5DD769A9A9AFA767ADADA75767A35F63B2D4D86CF46CF67ABA353535746ED1AA288FBB85035158D3D7EA9587BAED5EF6AC994EF8A1DA1A103C4760BA81E8DC1E2FB686BCB83E3EEC21EE9B77979DAEA6C361B1D4D3B4DA6D4A050702394482F83C19D5FB61B40EED1DF46B6DB733A3B6AC39E1F75767A74E8D8EB69D5DB68D9AA0C2A39933CC4C63668DB95A95F4CFAB21A5C9C98DEDBC1578DCB24CA88F2E648F41318D45B7AB52BE99D0CBF3632E4435C98D95FBD6F1B967592F614FCC91161A31B346DCAD4D7A62A223799222C4C5CD6ADEAD4AFA9FF00D187F31664B7235D497FA8DBDB2EEF4FF1AF9376FD1A7469633D06116738EA26311881EB2238970A69F52EAA2335671E819270E3135E05C0926AAB055CBFDB6ACAE5CFF8EAF49EAF320C33C4E7324F038C86113AC88E273D36FABC8CF1393293C723207C4E8C238648CA3EE14EA84CE5259A398E26B8A8B4B9065E0BC4F4259578E81A0E1C514370D91957241857860E655E07068C219590E44E7A6DC88D4BA5926DADE5C866DDAD7027DB146F7D666F8C67AD3F4FFF004D9B6FFA31FE3672D806A260972D8ED622258FC35E1DF62EB037B1D02A3A237B0DE80EEDDDE2FB7D8EDD850361D98908B523A1C82B8439EF69B3A8C4137C2E16F8231D8ADDF6BB2D488C45E7610FDBB96E67AFA6D1E74FFF0056CD9772F23D09655A390703471460DC364655CBA5DA63ED9B74BB4C7DB36E97698FB66DD5154E773590CE9EA4B7B7317FC8965C8D098AE2B4324C0121A0E06C2E8E1C86F1655CBAA2A9CEE6B219D3D496F6E62FF912CB91A1315C5686498024341C0D85D1C390DE2CAB97C9BF768D3A74FF00A319EBCC8B2607513070C4714611C378534E4830CF0C132ABC0E321844E8C1C864F4DBE91AA88B25235BCB9135C545E04FB628DEFACCDF18C9752E99A8C4F40C9C671866CF2E03735558D75444C7DCB62B8D10C9CE04868C41B14AC07225C5957DEA8898FB98CB9B4F524B2B973FE44B2E7ABAC6815C262607713070CA194611C378534E58297D0AF33BFDE9C1A04788E824696C204614B3A3BBDED3F4E9D905841B1354C7797F7A803F8D611187E717E7A763FE1AE645449E2C6D9EA43352201C88BF6D2181C2A41B1F7D154076C03DBC2F650FD83B6BBB8DE16338BC38BE0D9A0E8F1BE3908D9687989B0C94582804F102768ABDBF6BBCC69CE7DCB640B1F408CD0E6A08434FD5283BDEA6ED8BCAED41A7A1D2AB872310681EB21B8948CABEB6067F7B3C23628DEFACCDF18DD2E94E76CDB0A74BC6726CCD1CC60CDBB5AA5C832F041C7A1D2ABC74320701EB41B8948CABEB614CA84B14D99A398C26B76B54B9065E467860E655E391903E27590E44A4651F7E554185473247A098C6CD1B72B52DE99F56434B97930BDFF64DE372C937235D493FA8DBDB2EEF4FF1A54446F32245898B9AD5BD5A95F53E86BF9B592E11BCB69161A2E6B5715166BD492E11BCC91E81A2E6B56ED6A6BD4D0D21BE4C2F6FDED78DCB24D8A2FBEB337C6360A1FF002C4CEFF7A7065B503DABFC6A0FA8EBB5D7D8BEC503F157275DB13C58D0800198840C42FB078BE873D9ED767148AC3A3FB533A18268A06844328C425E9F364F5108480A3E25026CE1B121088A030578D9EBEF098049D8EC2843A1DDFB61AAED06D4D8EBBB6D98322E108C2000009BD43363B77A09C43650D866C36F1B8A244493128A4621CEF1E7D0942F8921D72BF09B2A0C2A396C22C4C63668DC74595F4DC0CFEF6F84654185473267A098C6CD1B72B52BE9AA88F2E5B48B1318D45B8A8B2BE9BD733F09B75CDFC24CA830A7E5B08B1318D9A371D1657D310D21BE73AF6FDED675B524CA888DE5B4F4131735AB8A8B2BEA7F2AF05E27A12CABC740D070E28A1B86C8CAB974BB4C7DB36C55D2F1629B32BF2E4336ED6AA93EC57AF33D098024341C0D1C518390DE2CAB92F233C4E4CA4F1C8C81F13A308E192328FB853AA133949668E6389AE2A2D2E419782F13D09655E3A0683871450DC364655C8AF418459303A868C41C07A308E1BC5957DC5595099C9B32BF2E04D6E56AA93EC9752E964B388A0D1C671866F03204935558D609FF00F2C4CDFF007B70654AE9BF685AC4765AFB39A7314EC7535765A9A346AE8DDA3468D1A3FF004DDF4D3F4DFF00FC010F37DD018D47D1A429EF61AFADB6D7D4D47D0B8A21A31826C22D09DAEBEDDC36FBF87B40E47A22FCAD42C1C0FB83DED76F05143CEDA29AE62806046784A361513B954E031376D9EC1F1D3A5DA64EDA3628DEC4CCDF18C462A23393656F2E04D6ED6B813EDD5154E7735B146F62666F8CF89A056864E70244C1C3285D603912E14D392E5D3D36ECAE5CFF008EAF49EAF325D4BA592CE22834719C619BC0C8124D55635F2E28DEFACCDF19F03C5511649BA8B98C25B76B5C79062B8D10C9CE04868C41B14AC07225C5957D418678609955E07190C227460E4327A6DF572FF723B2B973FE44B2E7ABCC6815C262607713070CA194611C378534E4839071E84B2AF030C86207A286E1B3D34FBA3E1861A76311368087AE263076DCDBBFC49D1EDDB40AC030B183EC31F1FF0067ADB57886EB6D35DD74EB95FB2FAF0DF75F57469FF4DA15EF3BFF00E07ED9E9D568DA628BBB461F63213106D431117DD7D3B47BD9B881044E90F77D47ED4D9BDBE6AECF5746DB6A98837B370DA98D16DBB8EA6C226F82678D8ED36BB6DAEA6D36EFBABABADA35B4EA6AECF5759B143F7D065F8C641C838F425957818643103D14370D9E9A7DDFA3F4EF633D799164C0EA260E188E28C2386F0A69C8AF5E6459CE3A868381C38AC88E25C595723C5521629BA8B98C26B76B5C7906EA8898FB98CBC17891674A501D0341C38AD08E25232AE5B99072F122C964A006068C4714511C367A69CBE5C517DF519BE3192F62AFCC99E81A2E32BADCAD4D7A96397F64FCDB25EC56396C22C345CE575C7459AF534B846F3247A068B9AD5BB5A9AF53FA60C3F98B325B91AEA4BFD465ED9777A7F8D6E65CAB97930B2B4595785CB3ADD737F09B4331BB707B89EC3651727B6EEB0AD7D3B9EB6900C4353DC51C364F0EE6B383B6CB5F46FE07500203BB61E6191D4110006DEE3E2114384260EE9FA38EF9CFF901DDB0F3034E9088FC38E91E0F89DC22D077BFD7C07CD617C335F67AFABB18BBBEA6BEB7FE2856DF51EF4EAEC1CF5769ACEDFAB89B67A53F854732479894C6CD1B72B32BE9A97B157E64CF40D17195D6E56A6BD4B7E8D1A37696C513DF5999E3192F614FCB61E81A31B346E3A2CCFA62E5435CE7595FBDACEB6A7595111BCB69E8262E6B57151657D4FA197E6C6E869F9B1BA197E6CF9776FD1A7469633D06116738EA26311881EB2238970A69F70B8F7D659F9363C52E162A4A8B98E19B8A8BC7906E97698FB66CA852E9648C48A131C64E066CF320352B4A8D1E2A90CE52345CC6135C545E3C8315EBCCF4260090D0703471460E4378B2AE4D8E67D93F36C8390711674A50030C86207AD08E253D34FABC1071164B2501D0C81C07A288E1B232AFBFAB4B20F416461D49440E3318826B024894F4D3E25650C602C53EC30501BB1FBACBB11CD5520F8AAA5D2C935E57E5C86A815AAA4FB618900717E43A5B6DB6DB1DFAFAF526D40C43B534EFD0EFA37B62A2A60CA4CB95FA0B5125B75AAA4FB7545539DCD6C2E3DF5967E4DB1575446726CCAFCB9135BB5AAA4FB25D4BA592CE22834719C619BC0C8124D55635D5154E7735B0A754267293CD1CC7135C745A5C8319E8308B39C7513188C40F5911C4B8534FABC8CF1393293C723207C4E8C238648CA3EE14EA84CE5259A398E26B8A8B4B9065E0BC4F4259578E81A0E1C514370D919572F937EED1A74E9FF4633D799164C0EA260E188E28C2386F0A69CB146F62666F8C6C0CBEF6784F81A068864980244C62328A51C390DE14D3EAE5D1D492CAE5CFF916CB9EAF325D54459231228344E1C626B3CC80D4D5560AD8AC25E3394965865C866E2A2D527D8D02B84C4C0EE260E194328C2386F0A69C9B033FBD9E11B146F7D666F8C6542A88B259C450989C2704D781902495A54150D7F6DABDB98CFE3ABCE4682DD51131F73192EA5D335189E81938CE30CD9E5C06E6AAB1A5CBFDC96CAE5CFF00912CB9EAF31A057098981DC4C1C3286518470DE14D391A068864980244C62328A51C390DE14D3E91AA88B15235BD05C89AE2A2F067DB146F7D666F8C6542A88B259C450989C2704D781902495A5417A5CA9CED9B25D54459231228344E1C626B3CC80D4D5560BF0C51BDF599BE33E654185473247A098C6CD1B72B52DE98A83157E64C8B1317195D6E56A57D490D2E4E4BEF7FD9578DCB22DD737F09B73C9D493FA72B272EAF4FF25FA60C3F98B3259511E5CC91E82631A8B6F56A57D337B7D1B145F7D66778C6541853F2D845898C6CD1B8E8B2BE9886972725F7BEE055E372C937235D497FA8DBDB2EEF4FF1A4BD853F2DA7A068C6CD1B8E8B33E998E57D93F36C97B0A8E64C8B0D18D9A36E56A6BD315111BCC8916262E6B56F56A57D4D0D21BE4C6F6DE36BC6E5926C517DF599BE3195062B1CC9916262E72BADCAD4AFA9E067F7B7C23628DEFACCDF18C970F2E5B4F40D18D45B8A8B35E99D733F09B7237D493FA8CBDB2EEF4FF1ADEDBF46ED2D8A2FBEA337C67CCBC1789E84B2AF1D0341C38A286E1B232AE4830AF0C1CCABC0E0D18432B21C89CF4DB962AE97CB14DB95F97219B76B5549F641C8388B3A528018643103D6847129E9A7D542974B246245098E327033679901A95A54690D7F725BDB98CFE45B324682DD2ED31F6CD9072F13D0E955E06068C4715A0DC4A7A69CB1575426726CCAFCB8135BB5AAA4FB1A068898E71DC4C62328A5644712E14D3E9A056864E70244C1C3285D603912E14D3974BC4C9DB462B8AD0C93004868381B0BA38721BC5957263C92E962A4A8B98C19B8A8BC7906542A88CD4627A0989C2704D679701B95A54157919E27265278E4640F89D18470C91947DEA88A73B98C9752E964B388A0D1C671866F03204935558D74BB4C7DB362352E1629B6B797019B76B5C09F6C51BDF599BE33E1A34FE9FAE862BD799E84C0121A0E068E28C1C86F1655CBAA2A9CEE6B7545539DCD64BA974B259C45068E338C3378190249AAAC6BE4DFBB469D3A7FD18CF5E6459303A898386238A308E1BC29A72EA8898FB98DD51131F731BAA2263EE6375444C7DCC623551962A4AB797226B8A8BC09F65E0838F43A5578E8640E03D68371291957D542A88B259C450989C2704D781902495A54170A74BC6726CCD1CC60CDBB5AA5C832F041C7A1D2ABC74320701EB41B8948CABEE171EFACB3F26D8E67D93F36D85C7B132CFC9B2F22BC4E7324F1C8341F0CAC88E272328E4863FB6DDEBCC5FF001DDE7234262B8D10C9CE04868C41B14AC07225C5957DE974A73B66D853A5E33936668E63066DDAD52E4197820E3D0E955E3A190380F5A0DC4A4655F57915E27399278E41A0F865644713919472E976A73B68C6815C262607713070CA194611C378534E4681A2192600913188CA29470E4378534FA46AA22C548D6F417226B8A8BC19F6C51BDF599BE318D0344324C0122631194528E1C86F0A69F715854258A92CB0CB9135C545AA4FFCF8A2FBEA337C637432FCD8DD0CFF0036B7432FCD8CA830A8E5B08B1318D9A371D1657D37032FBD9E11B737235D3737A8CBD7316CBFF1AEB97F84DBAE6FE1264BD85472D87A068C6CD1B8E8B35E9B8E67D93F36D85CFB142CFC9B7D197221AE73ECADC36B3EDA9E64B846F2DA45868B9AD5C5459AF52EB9BF84DBAE5FE136EB9BF8499511E5CB71162631A8B7151657D310D2E4E73AF6D164D9F6D493628BEFACCEF18CA888DE6488B131735AB76B52BEA48690D72637B7EF6BC6E5926C517DF599DE31B144F62866F8C643686B9CFBDB78DACEB6A49BA197E6DF9B146F7D666F8C65E46789C9949E391903E274611C324651F7AA229CEE637545539DCD6C51BD8999BE31B032FBD9E13E09755119AB38F40C9387189AF02E049355582E2AE978B14DB95F97219B76B5549FF820E5E27A1D2ABC0C0D188E2B41B894F4D396397F64FCDB15EBCCF4260090D0703471460E4378B2AE5D5154E7735BAA2A9CEE6B7545539DCD6E97698FB66DD2ED3276D197915E18265578E41A0F86518390C9194724BAA88CD59C7A0649C38C4D78170249AAAC148C4BA58A6DADE5C866DDAD7027DB146F7D666F8C6EA8AA73B9ADD5114E77318D03444C738EE263119452B2238970A69F52EAA2335671E819270E3135E05C0926AAB055CBFDB6ACAE5CFF008EAF49EAF320C33C4E7324F038C86113AC88E273D36FBF2E28DEFACCDF18D8A37B13337C67C7146F62666F8C6C0CBEF678465E0838F43A5578E8640E03D68371291957DC51BD8999BE31B468DEC839789164B250030346238A288E1B3D34E4830CF0C132ABC0E321844E8C1C864F4DBE91AA88B15215BCBA135C545E04FB19EBCC8B2607513070C4714611C378534E4839071E84B2AF030C86207A286E1B3D34FB8E67D93F37F0418678609955E07190C227460E4327A6DF572FF723B2B973FE45B2E7ABCC830AF1393293C0E0D184328C23864F4DB96171EFACB3F26C78AA22C537513418C26B76B5C69062B8D10C9CE04868C41B14AC07225C5957D41C838F425957818643103D14370D9E9A7DC55D2F19CA4F2BF2E43371516A93EC975511648C48A0D1387189ACF32035355582E28DEC4CCDF18C46A5D33548D6F2E43371517813EC6815C262607713070CA194611C378534E5F2E28DEFACCDF18CA888DE6488B131735AB76B52BEA5D0CBF36B7432FCDAD8A2FB14337C636065F7B3C236E65418ABF32645898B9CAEB72B52BEA4C97B0A7E6488B0D18D9A36E56A6BD312E11BCC91E81A2E6B56ED6A6BD490D21AE4C6F6FDED78DCB24D8A27BEB333C6375CDFC24CB9572739F64E8B2ACFB6A7BE0A830A7E5B08B1318D9A371D165BD33033FBDBE11BE8D85C7BEB2CFC9B6397F64FCDB25EC56396C22C345CE575C74599F53FA37D3732A0C2A39923D04C63668DB95A96F4CE793A92FF004E564E5DDE9FE4A8690D72617BFEF6BC6E5926541853F3247A098C6CD1B72B52BE9BF2E28DEFACCDF18DD5154E7735BAA2A9CEE6B7545539DCD633D799E873812260E190E2B21C8970A69CB032FBD9E13E3A34FE9FAE862BD799E84C0121A0E068E28C1C86F1655C8AE3444C4C0EE183106C528C2386F1655F7AA229CEE6325D4BA592CE22834719C619BC0C8124D55634830AF0C1CCABC0E0D18432B21C89CF4DB974BB4C9DB46E97698FB66C6815A1939C0913070CA17580E44B8534E44725C2C53756F2E4336ED6B813ECBC1789E84B2AF1D0341C38A286E1B232AE585C7BEB2CFC9B1E2974B252545CC60CDC545E3C832F22BC304CAAF1C8341F0CA3072192328E5D5154E7735B0A754267293CD1CC6135C545A5C832F05E27A12CABC740D070E28A1B86C8CAB915E8308B260750D188380F4611C378B2AFB8ABAA133936657E5C09ADCAD5527DBAA2A9CEE6FF00EE7FFFC4003E10000102050106030703040004070000000203130001041114150512212232331085D4162023346394E4313541245161624260718206305281B1B3D1FFDA0008010100133F00FF0091349A05DB7281054F9D5408F899C681B2FD34681B2FD34681B2FD34681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C681B2FD34681B2FD34681B2FD378E9340BB6E5020A9F3AA811F13386125DB72BD048F9151209DC0CE5C46302969597B2DCEC2417BB41EEE81B2FD34681B2FD3430920E375F509072242212B0004B80C3092EDB95E8247C8A8904EE0672E231A06CBF4D1A06CBF4D1A06CBF4D1A06CBF4D1A06CBF4DEF795D2463AABB6E2A09072242473B9984B80CED1A06D4F4D1A06D4F4D1E69491F7F1AB5020E37408247C8AAE272B1846AD40BB6E502E907224B91F1338C0AAAA7996DDEC2476B3A1D519F4B43938F4A952ADF06A954960B2C82A1CE11815543938F549552DF1AA924910B2282A7CE719F4B54F3396EF6153B59D08D22BD76DC4C150E7490209DC0C27C0A33E96BB1B22955A547E0D2AAAAC77597483902302AA9597B11AEFA417BB471ABD020E36A9A47C8AAE272B181CB88C605550E4E3D52554B7C6AA492442C8A0A9F39C6BFB2FD4C6BFB2FD4C67D2D7636452AB4A8FC1A555558EEB2E907204605552B2F6237DF482F768E349AF5DB72BD75439D24083A0C23CD2923EFE348AF5DB71305439D24082770309F028D036A7A68C0AAA565E71AEFA417BB47D378F2BA4F7BCAE923CCE93C7CD2923EFE35FC579EA5497ED629DACEDBABC349CEC8C863EBA5B9BAC46262BCF552ABF6B7CED67777AA71E5957E1A06532CD2A48777282F76AFD318994CB35492FDADF0BDDADDEA8D27071B1D8FACAEFEF3F1E67571A062BCF52AA877728ED676FD3E38994CB35492FDADF0BDDADDEA8D27071B1D8FACAEFEF3FE1E69491F7F1E594BE1F7F1E5749EF795D2479A5278F9A5247DFC795D24681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C795D5F869340BB6E5020A9F3AA811F1338D2681071BA05D50E749013E0611F611A4502EDB8A9AA7CEAA0473B999CF8943092EDB95E8247C8A8904EE0672E231A06CBF4D1A06CBF4D1A4D020E3740BAA1CE92027C0C23EC3C3CD2923EFE3CAE93C3EFE3CAE93DEF2BA48D036A7A68D036A7A68D036A7A68D26BD071BAF4153E755010E8038FBF8F2BA48CFA5AEC6C8A556951F834AAAAB1DD65D20E408C0AAA565E71BEFA417BB47D378D22BD76DC4C150E7490209DC0C27C0A357A05DB71504839125C8E7733097018CFA5A565E71BEFAA17BB47D378C0AAAEC6C8AA56A91F8D4A92A89DD15D23E438D5E8176DC54120E4497239DCCC25C06275F4B4ACBCE37DF542F7694E9BC3E92EDB890AA1CE91104EE0613E053B479A5247DFC6915EBB6E260A873A48104EE0613E051E694913AFA5A565E71BEFAA17BB4A74DE1F4976DC48550E748882770309F029DA3CD292302AAA9E672DDEC2476B3A11A06D4F4D1A06D4F4D1A06D4F4D0C2A838DD02091F22A2272B181CB88FBDA06532CD2A48777282F76AFD31ECA7E6C7B29F9B1ECA7E6C7B29F9B1A4E0E3E3E47D7577F79F8D032996695243BB9417BB57E98F33A58FBF8D032996695243BB9417BB57E98F33A48D57071B1F23E82BBFBCFC65E532CD2A48777702F76B7BA651AFE532CD524BF6B142F76ADD51F7F1A06532CD2A48777282F76AFD31AFE532CD524BF6B142F76ADD51AB60E363E47D0577F79F8CBCA659A5490EEEE05EED6F74CA3CCE963EFE340CA659A5490EEE505EED5FA631329966A925FB5BE17BB56EA947B29F9B1ECA7E6C7B29F9B1ECA7E6C7B29F9BFF91814B54F3388DF7D23B59D3861241C6EBEA120E44844256000970186125DB72BD048F9151209DC0CE5C46302969597B2DCEC2417BB41E190AA0E36A82A1CE9109CAC6984F814AF1FBA6662318DF3CFB7B994BF6ED7DF8D0365FA68C855071B54150E74884E5634C27C0A578D7F6A7A98D7F6A7A9F0C0A5AA79971BEFA476B3A7D30C24838DD7D4241C890884AC0012E03E19F554ACBD96E76150BDDA087D55DB7281054F9D52239DCCCE7C4A348A041C6D505439D2404E563009F028C0A5AA79971BEFA476B3A7D30C24838DD7D4241C890884AC0012E03E1814B54F3388D77D23B59D38D0365FA68D2681071BA05D50E749013E0611814B54F3388DF7D23B59D38D0365FA6F7B48AF5DB71305439D24082770309F02F0CFA5A565E71BEFAA17BB47D3787D25DB71215439D22209DC0C27C0A768D036A7A68C0AAA565E71BEFA417BB47D378D22BD76DC4C150E7490209DC0C27C0A1F49071BAF4153E754842560039F128CFA5AA799CB77B0A9DACE846915EBB6E260A873A48104EE0613E05E19F4B4ACBD88D77D50BDDA38C0AAAEC6C8AA56A91F8D4A92A89DD15D23E4386155DB7282A120E44848E7733097018FDAF0F2D8C6F9E65CDFC45FA2F6DC87D25DB71215439D22209DC0C27C0A768D5A8176DCA05D20E449723E2671815554F32DB9D848ED6743AAD0C2A838DD02091F22A2272B181CB88C6BFB2FD4C67D2D53CCE5BBD854ED6742348AF5DB71305439D24082770309F028D5E8176DC54120E4497239DCCC25C063EFE348AF5DB71305439D24082770309F02F0CFA5A565EC46FBEA85EED1C3E92EDB890AA1CE91104EE0613E053B7BDE594B18994CB34AAAFDADF0BDDAB754A3F63D3B4FFB975CCFFF004B3519794CB34A921DDDC0BDDADEE9947B29F9B1FB1E9DA7FDCBAE67FF00A59A8CBCA659A5490EEEE05EED5FA651AFE532CD2AABF6B142F76ADD5E1A06532CD2A48777282F76AFD31978AF3D54921DDDC3B59DDEE99C7B57F851A56A98789FD0FCCBC8B9BF8AE76E56DFB47B29F9B1A4E0E3E3E47D7577F79F8D032996695243BB9417BB57E98CBC579EAA490EEEE1EED9DDEE99C6AD9D9390C7D14B737588D0329966A9543BB9417BB57E98D7F299669555FB58A17BB56EA8D5B071F1D8FA0AEFEF3F1A56A98789FD07CCBE8B9BF8AE76E56DFB4626532CD524BF6B7C2F76ADD51A4E0E363E47D7577F79F8F2CA5F1F2CA4F7BCAE92184976DC48D23E4544827703397119DA3029695979B73B0905EED27D578D5ABD071BAF5D20E449710E8008D0365FA68C0A5A565E6DDEC2417BB41D57F0D5EBD76DC4CD23E4557209DC0CE5C47C349A05DB7281054F9D5408F899C6052D0E4E3D2AB548FC6A5492582CB2091F21C6BFB53D4C642ABB6E2A6A9F3AA4473B9A853E253B469340838DD02EA873A4809F030F0D268176DCA04153E755023E2671E694912AFAAA565ECB73B0A85EED04642ABB6E2A6A9F3AA4473B9A853E253B4795D5C7D8469140BB6E2A6A9F3AA811CEE6673E250C24BB6E57A091F22A2413B819CB88C6052D2B2F65BBD8482F7682357AF41C6D304839125C42560009701F1F2BA4F7BCAE921F49071BAF4153E754842560039F128CFA5AA799CB73B0A9DACE87863AABB6E2A09072242473B9984B80CED1A06D4F4D1A06D4F4DE19F4B4ACBCE35DF542F768FA6F181555D8D9154AD523F1A9525513BA2BA47C87157B7681943FDCDA58CED2FF0003384A8184E98E9DFE12B19DEEFC536CC71306699343AA76BDDA8D1C234708A8A59A6A28F54AABCEE3295A569AB68248E5294BFCCED19F4A836F623567950BDDA38C0AAAEC6C8AA56A91F8D4A92A89DD15D23E5386155DB7282A120E44848E7733097018FDAF0F2D8C6F9D65CDFC55FB77B46055576364552B548FC6A549544EE8AE91F21C6935E838DD7A0A9F3AA8087401F86935EBB6E57AEA873A48107418467D2D7636452AB4A8FC1A555558EEB2E9072047ED78796C637CEB2E6FE2AFDBBDB721F4976DC48550E748882770309F029DBDEF2CA58CBC579EAA490EEEE1DACEEF74CE356CEC8C8C8FA096E6EB1E18994CB35492FDADF0BDDAB754A3D94FCD8F653F37C3EFE3CB29607F51DE9CA5797F995E252E128095E7B8984CA7697FD250139948252909A73BCF8CEE2769CF85E72BCA568527610194AF39CE73FE2528AC49B1AA496099A6AA72FD6425295E5BD294ED69DBC3FE10995E45BB2FE25398DEDFDE739FF31A06532CD2A48777282F76AFD3E1AAE0E363E47D0577F79F8CBCA659A5490EEEE05EED6F74CA3D94FCD8D27071F1D8FAEAEFEF3F1A06532CD52A8777282F76AFD318994CB35492FDADF0BDDADDEA95AF1FB1E9DA7FDCBAE677FA59A8D2B54C3C4FE83E65E45CDFC573B636DFB7BDABD7A0E3698241C892E212B0004B80C6052D0E4E3D2AB548FC6A5492582CB2091F21C7EE99988C637CF3CDEE65AFDBB5F7E1849071BAFA84839121109580025C06184976DCAF4123E4544827703397118C0A5A565ECB73B0905EED0469340BB6E5020A9F3AA811F13387D541C6E82A150E74884E563009F028CFAAAA79971BEFAA76B3A7D368F2BA48FF00BE5E14E52963266049E42E5796E2729CE76FE4A72B0CA73BDB6A3DBE330A74D2B727F1C853BDE7FACB84AD3BECDDB2A2AF2025BC694913404A523DDDC9F35B7665C62F27524E9A46204A87EA247350E72BFEA0DF87FDC51A4502EDB94082A7CEAA047D671AFED4F531AFED4F531AFED4F531A06CBF4D1FB5E1E5BF93F22C39BF8A8772F6DC8C85576DC54D53E75488E77350A7C4A768D0365FA68FDAF0F2DFC9F9161CDFC543B97B6E4642ABB6E2A6A9F3AA4473B9A853E253B7BDA457AEDB8982A1CE920413B8184F81430AAEDB941509072242473B9984B80C605552B2F38DF7D20BDDA3E9BC795D2467D2D7636452AB4A8FC1A555558EEB2E907204681B53D3463AA838DAA691F22A2272B1A652E2328D036A7A68FDAF0F2D8C6F9E61CDFC55FB77B6E43E92EDB890AA1CE91104EE0613E053B78274229A28A467314574AA24A94D407268A4523009DD4BDA366A96651AA56A12A62A8DD9DD8A646986649CA7BB335EE5095E68D32B4AD492A84D39DC46EF148A5294A45619CE2A7E67682CAA6446AA15339B9F0F978EF5AE56B5A2946432DABB384A725F78385F7921782FD256B4E5C6F41B36A2B0954256B9FC202E1CC30D1A7BF3150C4B94E522E1319CBF48D5E81071BA04123E455713E0607E1F7F1E57491AFECBF5319F4B54F3396E76153B59D08D5A81071BA04123E455713958C3C302AAA9E672DCEC2476B3A10C2A838DD02091F22A2272B181CB88FBDA06532CD2A48777282F76AFD3E1AB60E363E47D1577F79F8D2B54C3C4FE83E65E45CDFC573B636DFB4626532CD524BF6B7C2F76ADD51ECA7E6C6262BCF552ABF6B7CF76CEDBAA718994CB34AAAFDADF0BDDADDEA94693838F8F91F5D5DFDE7E3CB297C03F8AA40A9EB11FFE838A0009112469A736493504C4C39653B14A7394F8CA70B8802C549319A694C3993414BDF7E4090CA5212E6B95EE9D624CA03322DD4896107A616DD9CC1DB7198F4C02929A6B23309837219719CA729FE9394B8452593ACAE5123ABA6911D42A5BA92130A4524729094CAD149564926A27906DA6F12739F2818DCB723DABFC28D0315E7AA9243BB9476B3B7E98FBF8D032996695243BB9417BB57E98CBC579EAA490EEEE1EED9DDEE99C7B57F851ED5FE146818AF3D54921DDCA3B59DBF4C6939D919191F5D2DCDD6231315E7A9525FB5BE76B3B6EA9FBDA4D02EDB94082A7CEAA047C4CE35FDA9EA633EAAA9E6711AEFAA76B3A71A4502EDB8A9AA7CEAA0473B999CF8943092EDB95E8247C8A8904EE0672E231814B4ACBD96E76120BDDA08D268176DCA04153E755023E2671ABD7AEDB899A47C8AAE413B819CB88C6052D53CCE235DF48ED674E33EAA87271EA95A547E0D2AA92216450483903C1CDD3553569D748E432FF008AD23DF9CBFF00485E25FA47F78D8FB357A9A79C84B7484E49C8C933039184E45FAEE6F42889A339DA769F298C8A5C65FCCA10E2E20B564D6DF9CA529EE8260B29729CE579A96943CA22E86FCE76DF4C84A5C65FC4E51AFED3F531E69491814B54F32E35DF48ED674FA6D1A06CBF4D1E6949E390AA0E36A82A1CE9109CAC6984F814AF1FBA6662318DF3CF37B994BF6ED7DF8CFAAA1C9C7AA56951F834AAA4885914120E40F7BCAE93C25415554F32DB9D848ED6743AAD18EAA0E36A9A47C8A889CAC6994B88CA185576DCA0A84839121239DCCC25C063F6BC3CB631BE799737F117E8BDB721F4976DC48550E748882770309F029DA356A05DB728174839125C8F899F8E75354EFA412B1CEE8A8768DEE09998EE914A5FA6F6EDC653FE244504129FFF009049CE53FF00E611B2F475273B5CCE9D496EC8F965720984E7C6F38A619260676E2421329CC653FED79DBFBC4E9C4159A69269260332971294B74A728FED3BCE769FFED394E3CAE92356A05DB728174839125C8F899F86915EBB6E260A873A48104EE0613E051A457A0E3699AA7CEAA0212B001CF8946055553CCB6E76123B59D0EA8D036A7A68D26BD071BAF4153E755010E803F0D26BD76DCAF5D50E749020E830F7BCB29635FCA659A5557ED6285EED5BAA3EC235FC579EAA557ED629DACEDBAA313299669555FB5BE17BB56EA8FD8F4ED3FEE5D733BFD2CD4695AA61E27F41F32F22E6FE2B9DB95B7EDE1AB60E363B1F415DFDE7E3DABFC28A5FFC432A951BFF0009952848E7FE37E51B4692A13552FF005B4C061A5E2A1153713DE3101BDA7FC910CA195A29D05260A6E19015AF3FE084A509D31CE729FF007E33B5FF00EB0B4AC7507C39A7C25FDA5FC4BF494A5294A51A06532CD2A48777282F76AFD31AFE532CD2AABF6B142F76ADD5E1E59491A062BCF52AA877728ED676FD31A4E7646431F5D2DCDD6231315E7A9525FB5BE76B3BBBD538F653F363D94FCD8F653F37DED5EBD071B4C120E4497109580025C063CAEAE33EAA95979B77B0A85EED0755E35FDA9EA633EAABB1B22A92A55BE0D52AAA2774575439C23029695979B73B0905EED0755E348A05DB715354F9D5408E773339F12F0FB08D5ABD071BAF5D20E449710E8008D5ABD76DCAF4123E455720E833F0D5EB9071BAF5D20E449610958023029A85FC7A55AA91F8D4C9A6A85964122E0713AFA9AA799C46BBCA1DACE9C799D5786052D53CCE235DF48ED674E340D97E9A3CAEAE30296A9E6711AEFA476B3A719F5543938F54AD2A3F069554910B228241C811A06CBF4D1814B4ACBD96EF6120BDDA08D5EBD071B4C120E4497109580025C06184976DCAF4123E4544827703397118C0A5A565ECB73B0905EED0469340BB6E5020A9F3AA811F133F7B48AF5DB71305439D24082770309F028F34A48FBFF0C75576DC54120E44848E7733097019DA3F6BC3CB631BE799737F157EDDEDB9181555D8D9154AD523F1A9525513BA2BA47C87E19F4B4ACBD88DF7D50BDDA387D25DB71215439D22209DC0C27C0A76F0FBF8F2BA48C0AAA1C9C7AA4AA96F8D54924885914153E738FDD33311FC9F9179BDCCA43B96BEFC681B53D3467D2D7636452AB4A8FC1A555558EEB2E9072047ED78796C637CEB2E6FE2AFDBBDB721F4976DC48550E748882770309F029DA31D55DB71504839121239DCCC25C067689D05552B2F38DF7D20BDDA3E9BC795D24605550E4E3D52554B7C6AA492442C8A0A9F39C6BDB33D4C6055576364552B548FC6A549544EE8AE91F21F8F95D27BDA06532CD2A48777282F76AFD31AFE532CD524BF6B142F76ADD51AB60E363E47D1577F79F8F6AFF0A355D530F13FAEF96651737F15BEE4ADBF78FD8F4ED3FEE5D733BFD2CD465E532CD2A48777702F76B7BA65E3E59491A062BCF5524877728ED676FD31AAE0E363E47D1577F79F8D2B54C3C4FE83E65E45CDFC573B72B6FDA340C579EA5550EEE51DACEDFA63EC2340CA659AA550EEE505EED5FA631329966A925FB5BE17BB56EA8D27071F1F23EBABBFBCFC79652C6BF94CB35492FDAC50BDDAB7547DFC795D2465E2BCF52AA877770ED6777BA671ED5FE14695AA61E27F41F32F22E6FE2B9DB95B7EDE3E594BEF69340BB6E5020A9F3AA811F13387D541C6E82A150E74884E563009F028CFAAAA799C46FBEA9DACE9C6AD5E838DD7AE907224B887400467D557636455254AB7C1AA55544EE8AEA873847ED78796FE4FC8B2E6FE2A1DCBDA35FDA9EA6349A041C6E8175439D2404F81846052D53CCE237DF48ED674E1849071B48520E4484425604C25C06578C855071B54150E74884E5634C27C0A578D7F6A7A98C85576DC54D53E75488E77350A7C4A76F0CFAAA565E6DDEC2A17BB41D578C0A5AEC6C8A54AA96F8D5492AB1DD65D53E7386125DB72BD048F9151209DC0CE5C46340D97E9A33EAA87271EA95A547E0D2AA9221645048390235FDA9EA633EAAA9E65C6BBEA9DACE9F4C795D278E9140BB6E2A6A9F3AA811CEE6673E251A06CBF4D1A06CBF4D19F5543938F54AD2A3F069554910B228241C81EF6915EBB6E260A873A48104EE0613E051A06D4F4D1A06D4F4D1A06D4F4D1A06D4F4D181554ACBCE35DF482F768FA6F1AB5020E37408247C8AAE272B184605550E4E3D52554B7C6AA492442C8A0A9F39C67D2D53CCE5B9D854ED6742356A041C6E81048F9155C4E56308F2BAB8FB08F34AB87D241C6EBD054F9D521095800E7C4A3F74CCC47F27E45F6F73290EE5AFBF18EAA0E36A9A47C8A889CAC6994B88CA35FD97EA633E96A9E672DCEC2A76B3A11AB5020E37408247C8AAE272B1843E920E375E82A7CEA9084AC0073E251AFECBF530FA4BB6E242A873A44413B8184F814ED18EAAEDB8A8241C89091CEE6612E033B44E82AA95979C6FBE905EED1F4DE3CAE9231D55DB71504839121239DCCC25C067689D05552B2F6237DF482F768FDFF002CA58F653F363D94FCD8F653F36340C579EAA490EEE51DACEDFA63EFFC34AD2F332FFA1F997966F7329CED947B57F851ED5FE146818AF3D4AAA1DDCA3B59DBF4C7D84799D5F86939D9190C7D74B737588C4C579EAA557ED6F9EED9DB754E3DABFC28F6AFF0A3DABFC28CBC579EAA490EEEE1DACEEF74CE355CEC9C8C8FA096E6EB11E594918994CB35492FDADF0DEBB56EA94695838D8F91F5D5DFDE7E3CB2923CCE9634ACEC9C8C8FAC96E6EB11ECA7E6FBDE57490C24BB6E57A091F22A2413B819CB88C681B2FD34681B2FD3479A5247DFF86052D0E4E3D2AB548FC6A5492582CB2091F21C67D5553CCE235DF54ED674FC349A041C6E8175439D2404F81847D8469140BB6E2A6A9F3AA811CEE6673E251A06CBF4D1A06CBF4D1A06CBF4D1AFED4F531AFED4F530FAABB6E5020A9F3AA4473B999CF8946052D0E4E3D2AB548FC6A5492582CB2091F21C67D5553CCB8D77D53B59D3E9B4795D24681B2FD34681B2FD3430920E3690A41C890884AC0984B80CAF1814B43938F4AAD523F1A9524960B2C8247C871FBA6662318DF3CF37B996BF6ED7DF861241C6EBEA120E448442560009701F7BCAE923CD293C7CD2923EFE356A041C6E81048F9155C4E56308F34A4F0D26BD76DCAF5D50E749020E83086155DB7282A120E44848E77330970189D05552B2EB8DF7D20BDDA3E9BC6915EBB6E260A873A48104EE0613E051AB502EDB940BA41C892E47C4CE3EC3C185576DCA0A84839121239DCCC25C063F6BC3CB631BE799737F117EDDEDB90FA4BB6E57D42A1CE91104EE0613E051E575712A0AAAA7996DCEC2476B3A9F55A31D541C6D5348F915113958D329711946AD40BB6E502E907224B91F1338CFA5A565EC46FBEA85EED1C6055576364552B548FC6A549544EE8AE91F21C79A5244EBE9695979C6FBEA85EED29D3787D25DB71215439D22209DC0C27C0A76F7BCAE9231329966A925FB5BE1BD76ADD528F653F363D94FCD8F33A58FBFF0D7F29966A925FB58A17BB56EAF0D0329966A9543BB9417BB57E98C4CA659A5557ED6F85EED6EF54A34AC1C6C7C8FAEAEFEF3F1E59491ED5FE146AB9D9390C7D04B73758F0D0315E7AA9243BB9476B3B7E98FBFF0F2BAB8FB08D7F15E7AA955FB58A76B3B6EAF1D032996695243BB9417BB57E98D5754C3C4FEBFE59945CDFC56FB92B6FDE349C1C7C7C8FACAEFEF3F1A06532CD2A48777282F76AFD3EF795D24681B2FD34681B2FD34681B2FD3469140838DAA0A873A4809CAC6013E051F7FEE69140BB6E2A6A9F3AA811CEE6673E250C24BB6E24691F22A2413B819CB88CED1A06CCF4D19F5543938F54AD2A3F069554910B228241C810FAA838DD0542A1CE9109CAC6013E051AFED4F531AFED4F53190AA0E36A82A1CE9109CAC6984F814AF13AFAAAA79971BEFAA76B3A7D368D268176DCA04153E755023E2671E575719F554ACBCDB9D8542F7683AAF0FAABB6E5020A9F3AA4473B999CF894681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C6AF5EBB6E26691F22AB904EE0672E231814B54F3388D77D23B59D38D0365FA6FF99FFFC4002A11000103030205040203000000000000000100020304051106211213314051101422413280162442FFDA0008010201013F00FD9A073E83708641EFA59046325433897A2924118C950CC25E9DEEDD15DEB22A6A77F1EE55B756B2DF172A66F555FAA5B5748EE546412B4C81EC83B8B2E3E9F8F74767A75496CE42A3823ADAA2F937C7D2BD5AA8DF3B1EE6630BD8521A511F00030AD956EB55D1F0039612B9E00C94C7878EE88CABEC8200C7F8475355D1D710C3B29EF02BA2CCB2E0A9357CD08E40391E54B7685E1B237F2F2BDC3EB18C847FA54C0B58223F5DD67016A767F4DEEF0A42E3212A9C1126241B2ABB232439A5F1F6A4824A69431EAC25B253C2E3F41746E3BAE87215C6DCDB93381C765268280E785E9FA065CE5922FE3B5B147CB90712A8D2570E6F1C4CC0565A534B42D63BAAC671DD0F8EC5608DC2F92C1F2B87EC84785FB2D9BF00BA7EDDFF00FFC400251100010401040104030000000000000000010002030411051221403210224180144261FFDA0008010301013F00FB76D6A73709A139B8EEF2AA40F95E24F85269DF907785069E18FDC5CAFEDDFC0F407B4D4C8B729849523DA154B53161084AF7BF20AB359F356DC5A830A23B43C9513FAAB518B8DC151D335FC555A518707CA15FB94DF4042C1CA6E222F47DDDAF95A77364350FE27709B69CDF6BC26B848DE15AE1CF4381DAC65413188E426EB2F09BAD1F9085F8F3951EA9106E15B977BF211E5BDA6AC64AC05C2E10217921F6EFFFD9, '1', '2022-03-16 22:19:44', '1', '2022-03-16 22:19:44', b'0'); +INSERT INTO `infra_file_content` VALUES (6, 4, '822aebded6e6414e912534c6091771a4.jpg', 0xFFD8FFE000104A46494600010100000100010000FFDB0043000302020302020303030304030304050805050404050A070706080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F171816141812141514FFDB00430103040405040509050509140D0B0D1414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414FFC20011080102010203011100021101031101FFC4001E00000301010101010101010000000000000008090701060A02040503FFC4001C0101000203010101000000000000000000000105020406070308FFDA000C03010002100310000000AA6000000000000000000000000000000000070000000000E81C3A70E8001C03A0700000E8001C2401808000FF000BF9808017F8E12007F8C00A0200040102BE0120C0000BFC000708045D03033802AA794029412BC69C0DFC9B206005261020356037F37E1551D33CB1AA1160BFC00070804553201017F4554D50A002A86AA4582FE0800D51164AA66503FE74CA48B22A85FD1551561552A98AB17F8000E1008AA640202FE8AA8AB00FF0BF98097F490007AB12D2D2920C0DF8F564AC2FE8AA8AB0AA954C558BFC00070804553003013CA0AA9AB1540F2A45A3CA95409B27953CB173C55474CF2C4593CB173C4047F80E9208FA27000384FF0032C387406A0CA8D58554D50D5895A6563526A66A82B06546565A61553541AA1013A0700AAA0000004FE37F03002809E449B22AA5D0303384023572E79F3B250030003CA973C6089FE2026FC3002025FE0003F22FE7CEC9AB9E58B9E6A6795030037F18227F9C26C8E913687E8A504303D48FE9BF916874874C6089FC4863E9E8000E1008CAC7F440C7F4E08195407FC4006A8404E9C1A932A1AA22D1AA0D39AA8AB8FE99492B8BFC708045FE000384023033D494A04A8CB0CA0FA261812401E5C7F8DF095A57F2400EA88115E885E3542585A530037F182384022FF0001C20115F0C00A02791303384023572A808794FCF0666B0E8F062D2B32107EC9B23A66A679724015FCC00D4C9B47D3D0001C201169CCA86B0CA0404E92ACAA62AC5F13FA4FF0033E3965D84EBBF58CCFE4D5B671FF2C44C8B03566563FA2AC6AA5501023A5540003F22FE4D93531D303003001582E79164BE50FEA463B41BD9EF975F7FD2DB5FD2F595FBE75D57FC0991F2754009583545262178D51498F5C0007E45FC8B45CF22C9AB0FF1BE1810AA9368A8312CC516DE535BBDEBA973F7DD6D7647E5FD2B29EC9C8FA0FBC4B2CB19AE55315601FE17F26B9400C00FA27000384FF22C0D58D48FE8808FF1014B4A4AD1C786F9C8DB79BF1DEDBC6DD53FBFACDCF1FF001F41FF0027D57C5D84EC6A13EDAC72C3533541AA101032C32A32B3E944000E1200754408C00B4A6006003FC60007874379C6DAFE7F2EFA09F58C5FACAFD4F98DE553F4BF11437B2A4C1A41164D4CAA640203E9E89B26A6501000384022FF001941EA480C3A44DA1FA2BF9D10F1C6A5D9FF002FCEEE7F92B36330DEC3D671B65FC5EE9C96CBD0E9C1437F2BF8BF01EA8CB0C0490057F2948001C2010FE9961958AB0FE0155055055CFF00B4CB59187FA6CB4BC59A4C69713FEB44FEFE9094C01FF2018FE9AA116C7F4E1D2AA0001F917F241969CCACCA495E7AA3E89C9567AB024095EC5D0FEE1EE1A610F10601FE382043FA6FE06006005800003F22FE7961562AA1E449B26A650127F1218F225531561FD32C1A910235326D1F49879522C8FE8810FE9404E1008BFC000709FE2B065635007040CFA503840335632B1A835332B32C2A899512B4D58D50554CB07F0E954C08045FE0003848015837F37F3D41960D48951BF9218FA4C30337C3D719392BCA4C4831FD35635422C0AA9D1803D480FE9404000FC8BF9E58000D509AC6FE745FCC046A46A8F522585272178FF0BF8FF120CC0CFA4C3CA9164BA048527F9F55000070804354006566A85532561C035432B1AA1AA1543551023803FC6544AD2D399512B4AA64AD1A82AA8001C20115F090605531562AA115C09FE5283D58969EA400AA6749046FE55022C801818E91A98E98C10001C201154C80405FD1553CA0EA9008AFE2025CF3CA8809EAC9583023A43A64832D31EA895A30070D588B27963E9E8000E1008B4E20203542AA55422C13FCA002AC5A52568D48AB8AA1400D50AA64021AA32B2D39C10032C1A732B2808001C2010001E5874CAA87CAB9D18032C37C1FD26C95F4E1BE9E549AE6025A62181EA47F85FC7F8C00408BFC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007FFC4004210000003060209020503030203090000000607080004051415160917010203111318195785253810202147671226272829464175223739303142505160616383FFDA0008010100011200FF00C8F7B6F6DEDBDB7B6F6DEDBDB7B6FF008EFF00868D3A34FCBBDBF568F8FEAD0DBDB7B6F6DFF32F05E27A12CABC740D070E28A1B86C8CAB97545539DCD6EA8AA73B9ADD5154E7735BAA2A9CEE6B614EA84CE5279A398C26B8A8B4B9065E0BC4F4259578E81A0E1C514370D919572EA8AA73B9ADD5154E7735BAA2A9CEE6FC5782F13D09655E3A0683871450DC364655C97919E27265278E4640F89D18470C91947DC2995099CA4B3433184D715169721F2F545539DCD6EA88A73B98C830CF139CC93C0E321844EB22389CF4DBEAF233C4E4CA4F1C8C81F13A308E192328FBD5114E7731BAA2A9CEE6B7545539DCD6EA8AA73B9ADD5154E7737E6C51BDF599BE318D0344324C0122631194528E1C86F0A69F7AA2263EE5B75444C7DCC6C51BD8999BE31B032FBD9E1197820E3D0E955E3A190380F5A0DC4A4655F50720E3D09655E06190C40F450DC367A69F4F154658A6EA2E6309ADDAD71E41950A5D335671E82638C9C0CDE05C09256951A542A88B259C450989C2704D781902495A54170A84BC6726CCD1CC70CDB95AA5C8319EBCC8B2607513070C4714611C378534E49752E99A8C4F40C9C671866CF2E03735558D62ACA80B152795F97026B8A8B549F62BD061E8738121A310681EB21C8971655F550AA22C967114262709C135E064092569505E974A73B66DD2E94E76CD92EA5D335189E81938CE30CD9E5C06E6AAB1AC55D50962A4F2BF2E44D71516A93EC839789164B250030346238A288E1B3D34E58A37B13337C636065F7B3C2319EBCC8B2607513070C4714611C378534E5D51131F73188D54458A92ADE5C09AE2A2F027DB146F7D666F8CF9B146F7D666F8C6C51BD8A19BE33E38A37B13337C636067F7B3C232A0C55F96C3D04C5C6575C74595F52FA32E4437CE7593B86D675B53AC9708DE5B48B0D1735AB8A8B35EA785CFBEA2CFC9B6ED1B99506151CC91E82631B346DCAD4B7A62A223799222C4C5CD6ADDAD4AFA9AE4437C98593BC6B78DCB3AD85CFB142CFC9B25DC29F96C3D03463668DC74599F4CD1BB737D195111BCC9116262E6B56ED6A57D4D72A1BE4C2C9DE36BC6E59DF8628DEC4CCDF18D819FDECF08D8A2FBEA337C67C3033FBD9E11B146F7D666F8CF9B146F7D666F8C6C51BD8999BE33E38A37B13337C636067F7B3C23628DEFACCDF18DD5154E7735B0A754267293CD1CC6135C545A5C832F05E27A12CABC740D070E28A1B86C8CAB96171EFACB3F26DFF7EAB2F05E27A12CABC740D070E28A1B86C8CAB920E5E27A1D2ABC0C0D188E2B41B894F4D396397F64FCDB15EBCCF4260090D0703471460E4378B2AE4BC8CF1393293C723207C4E8C238648CA3EF544539DCC6EA8AA73B9AC839789E874AAF030346238AD06E253D34E58E67D93F37F0C51BD8999BE31B033FBD9E11B146F7D666F8CF86067F7B3C23628DEFACCDF19F3628DEFACCDF18DD51131F731BAA2263EE6375444C7DCC65E0BC48B3A5280E81A0E1C5684712919572C0CFEF67846C51BDF599BE3192EA5D335189E81938CE30CD9E5C06E6AAB1A23551962A4AB797226B8A8BC09F633D799164C0EA260E188E28C2386F0A69C8CF4187A13004898C46407A30721BC29A7D2352D99CA46B797219B8A8BC09F64BAA88B2462450689C38C4D679901A9AAAC14CF4187A13004898C46407A30721BC29A7D2392E19CA42B797219B868BC19F6340AE131303B89838650CA308E1BC29A72C51BD8999BE31B032FBD9E118CF5E6459303A898386238A308E1BC29A72C51BD8999BE3188D4BA66A91ADE5C866E2A2F027D8D02B84C4C0EE260E194328C2386F0A69CB146F62666F8C6C29D509629B33473184D6ED6A9720DD51131F731BAA2263EE6375444C9DCB65E467860E655E391903E27590E44A4651F7E554185473267A098C6CD1B72B52BE9BD0CBF3637433FCD8DD0CBF3637432FCD8C8650D72617B7EF5BC6E592654185473267A098C6CD1B72B52BE9B8A27B14337C636067F7B7C232A0C29F9923D04C63668DB95A96F4CC51BD8A19BE3190D2E4E4C2F6DE0ABC2E59265447973247A098C6A2DBD5A95F4C5438AC732645898B9CAEB72B52BEA781A7DEDF08CA830A8E64CF41318D9A36E56A5BD355062AFCC9916262E72BADCAD4AFA92195C9C985EDFB2AF0B96459511E5CC89E82631A8B6ED6A57D33145F62866F8C6C0CFEF6F84654185473267A098C6CD1B72B52DE9AA888DE6488B131735AB76B52BEA5D0D3F3637432FCD8DD0CFF0036B7434FCD8DD0CBF36FFD862B0A84CE4DB96197226B76B5549F64186789CE649E07190C2275911C4E7A6DF57919E27265278E4640F89D18470C91947DC2995099CA4B3433184D715169721F0340AD0C9CE0489838650BAC07225C29A725CBA7A6D595CBA7F1DDE73D5D6EA8AA73B9AC6815A1939C0913070CA17580E44B8534E5D2ED31F6D1BA5DA63ED9FC08D54466A6DADE5C89ADDAD7027D90619E273992781C643089D6447139E9B7D6C2992F162A4F34731833715169720CBC8AF0C132ABC720D07C328C1C8648CA3919EBCCF439C0913070C871590E44B8534E446AA33393756F2E44D6ED6B833EC830CF139CC93C0E321844EB22389CF4DBEB62B0A88CE4D995F97226B76B5549F6EA8AA73B9AC839789E874AAF030346238AD06E253D34E58ABAA133936657E5C89ADDAD5527DBAA2A9CEE6FCBBF768D3A74FF00A319EBCC8B2607513070C4714611C378534E4C46A5D33548D6F2E43371517813EC6815C262607713070CA194611C378534E5D51131F73188D54858A91ADE5C89AE2A2F027D8CF5E6459303A898386238A308E1BC29A725E45789CE649E390683E195911C4E4651CB0A74BE66A6CCD1CC60CDBB5AA5C86933D799164C0EA260E188E28C2386F0A69C9B1574BA67292CAFCB90CDC545AA4FB25D54459231228344E1C626B3CC80D4D5560A830CF0C132ABC0E321844E8C1C864F4DBEAE5FEE476572E7FC8965CF5798D02B84C4C0EE260E194328C2386F0A69C90720E3D09655E06190C40F450DC367A69F4F15445926DA2E6309ADDAD71E4197919E18399578E4640F89D64391291947DE974A73B66D853A5E33935E68E63866DCAD52E418CF5E6459303A898386238A308E1BC29A7233D061E84C01226311901E8C1C86F0A69F7034FBDBE118CF5E6459303A898386238A308E1BC29A726C5612F19CA4B2C32E43371516A93EC6815C262607713070CA194611C378534E5F2E28BEFA8CDF18C9708DE648F40D1735AB76B535EA5F4C183F31664B2A23CB9923D04C63516DDAD4AFA6F432FCD8DFF45FFCC5992CA88F2E648F41318D45B76B32BE9897B157E64CF40D17395D6E56A67D4F768FD2CA830A8E648F41318D9A36E56A5BD31511E5CB69162631A8B7151657D33AE57E136E46BA927F5197B65D5E9FE35D0CBF36B21A435C98DEDFBDAF1B96499506151CC99E82631B346DCAD4AFA6AA23CB96D22C4C63516E2A2CAFA6AE35CBCE7D93FB2ACEB6A7592F614FCC99161A31B346DDAD4CFA625EC55F9933D0345C6575B95A9AF525CAB93931B27F655E372CEB7233D493FA8CBDB2EEF4FF001A54446F32245898B9AD5BD5A95F5343286B930BDBF7ADE172C8B628BEFA8CDF19F0DDA1B145F7D66778CF9B146F7D666F8C62B8D1131303B860C41B14A308E1BC5957D3C55199AA468B98C26B8A8BC790641C8388B3A528018643103D6847129E9A7DEA8AA73B9AC792A333949D1731C4D71D178F21F02BD061164C0EA1A310701E8C2386F1655F7768D1ABB99782F13D09655E3A0683871450DC364655C92EAA2335671E819270E3135E05C0926AAB05E97698FB68C5715A19260090D0703617470E4378B2AE4839789E874AAF030346238AD06E253D34E5BBE9B99782F13D09655E3A0683871450DC364655CB146F62666F8C6C2992F162A4B34331833715169720C5715A19260090D0703617470E4378B2AE585C7BEB2CFC9B6397F64FCDB15EBCCF4260090D0703471460E4378B2AE4BC8CF1393293C723207C4E8C238648CA3EE14EA80CD5279A398C26B8A8B4B90D067A0C22CE71D44C623103D644712E14D3EFC3146F7D666F8CF9B146F7D666F8C65E45789CE649E390683E195911C4E4651CB0A64BC6726DCD0CC60CDBB5AA5C87C0D0344324C0122631194528E1C86F0A69F7AA2263EE5B75444C7DCCF8118974CE5255BCB80CDC545E04FB25D54459231228344E1C626B3CC80D4D5560B07C2C14ABFC4DD9D36E0476856C36DAFF00A35DF50C22F7446EE22CD4BC35C58FE21929C651D860061479CE2330DFC711A833E4625FF5B8F44F05F73442DD13C19DCE10B270275C13992E1D2EDC222F91974834C70DFB6D137777D96BED36BA769B3D9EAE8DFADAF8A82663254D6C8ADD72CC3B73EA422A73BA52EAA12C91891219270E31359E6386A6AAB05418678609955E07190C227460E4327A6DF572E8EA496572E7FC8965CF57992EAA22C9189141A270E31359E6406A6AAB055E0BC48B3A5280E81A0E1C5684712919572DCC839789164B250030346238A288E1B3D34E49752E99A8C4F40C9C671866CF2E03735558D2E5FEE4B6572E7FC8965CF5798D02B84C4C0EE260E194328C2386F0A69CBE5C517DF519BE319511E5CB71162631A8B7151657D310D2E4E73AF6FD95675B523F054446F32445098B9AD5BD5A95F53E867F9B5BA19FE6DF86067F7B3C23628BEFA8CDF18CFF00FAB5DD769A9A9AFA767ADADA75767A35F63B2D4D86CF46CF67ABA353535746ED1AA288FBB85035158D3D7EA9587BAED5EF6AC994EF8A1DA1A103C4760BA81E8DC1E2FB686BCB83E3EEC21EE9B77979DAEA6C361B1D4D3B4DA6D4A050702394482F83C19D5FB61B40EED1DF46B6DB733A3B6AC39E1F75767A74E8D8EB69D5DB68D9AA0C2A39933CC4C63668DB95A95F4CFAB21A5C9C98DEDBC1578DCB24CA88F2E648F41318D45B7AB52BE99D0CBF3632E4435C98D95FBD6F1B967592F614FCC91161A31B346DCAD4D7A62A223799222C4C5CD6ADEAD4AFA9FF00D187F31664B7235D497FA8DBDB2EEF4FF1AF9376FD1A7469633D06116738EA26311881EB2238970A69F52EAA2335671E819270E3135E05C0926AAB055CBFDB6ACAE5CFF8EAF49EAF320C33C4E7324F038C86113AC88E273D36FABC8CF1393293C723207C4E8C238648CA3EE14EA84CE5259A398E26B8A8B4B9065E0BC4F4259578E81A0E1C514370D91957241857860E655E07068C219590E44E7A6DC88D4BA5926DADE5C866DDAD7027DB146F7D666F8C67AD3F4FFF004D9B6FFA31FE3672D806A260972D8ED622258FC35E1DF62EB037B1D02A3A237B0DE80EEDDDE2FB7D8EDD850361D98908B523A1C82B8439EF69B3A8C4137C2E16F8231D8ADDF6BB2D488C45E7610FDBB96E67AFA6D1E74FFF0056CD9772F23D09655A390703471460DC364655CBA5DA63ED9B74BB4C7DB36E97698FB66DD5154E773590CE9EA4B7B7317FC8965C8D098AE2B4324C0121A0E06C2E8E1C86F1655CBAA2A9CEE6B219D3D496F6E62FF912CB91A1315C5686498024341C0D85D1C390DE2CAB97C9BF768D3A74FF00A319EBCC8B2607513070C4714611C378534E4830CF0C132ABC0E321844E8C1C864F4DBE91AA88B25235BCB9135C545E04FB628DEFACCDF18C9752E99A8C4F40C9C671866CF2E03735558D75444C7DCB62B8D10C9CE04868C41B14AC07225C5957DEA8898FB98CB9B4F524B2B973FE44B2E7ABAC6815C262607713070CA194611C378534E58297D0AF33BFDE9C1A04788E824696C204614B3A3BBDED3F4E9D905841B1354C7797F7A803F8D611187E717E7A763FE1AE645449E2C6D9EA43352201C88BF6D2181C2A41B1F7D154076C03DBC2F650FD83B6BBB8DE16338BC38BE0D9A0E8F1BE3908D9687989B0C94582804F102768ABDBF6BBCC69CE7DCB640B1F408CD0E6A08434FD5283BDEA6ED8BCAED41A7A1D2AB872310681EB21B8948CABEB6067F7B3C23628DEFACCDF18DD2E94E76CDB0A74BC6726CCD1CC60CDBB5AA5C832F041C7A1D2ABC74320701EB41B8948CABEB614CA84B14D99A398C26B76B54B9065E467860E655E391903E27590E44A4651F7E554185473247A098C6CD1B72B52DE99F56434B97930BDFF64DE372C937235D493FA8DBDB2EEF4FF1A54446F32245898B9AD5BD5A95F53E86BF9B592E11BCB69161A2E6B5715166BD492E11BCC91E81A2E6B56ED6A6BD4D0D21BE4C2F6FDED78DCB24D8A2FBEB337C6360A1FF002C4CEFF7A7065B503DABFC6A0FA8EBB5D7D8BEC503F157275DB13C58D0800198840C42FB078BE873D9ED767148AC3A3FB533A18268A06844328C425E9F364F5108480A3E25026CE1B121088A030578D9EBEF098049D8EC2843A1DDFB61AAED06D4D8EBBB6D98322E108C2000009BD43363B77A09C43650D866C36F1B8A244493128A4621CEF1E7D0942F8921D72BF09B2A0C2A396C22C4C63668DC74595F4DC0CFEF6F84654185473267A098C6CD1B72B52BE9AA88F2E5B48B1318D45B8A8B2BE9BD733F09B75CDFC24CA830A7E5B08B1318D9A371D1657D310D21BE73AF6FDED675B524CA888DE5B4F4131735AB8A8B2BEA7F2AF05E27A12CABC740D070E28A1B86C8CAB974BB4C7DB36C55D2F1629B32BF2E4336ED6AA93EC57AF33D098024341C0D1C518390DE2CAB92F233C4E4CA4F1C8C81F13A308E192328FB853AA133949668E6389AE2A2D2E419782F13D09655E3A0683871450DC364655C8AF418459303A868C41C07A308E1BC5957DC5595099C9B32BF2E04D6E56AA93EC9752E964B388A0D1C671866F03204935558D609FF00F2C4CDFF007B70654AE9BF685AC4765AFB39A7314EC7535765A9A346AE8DDA3468D1A3FF004DDF4D3F4DFF00FC010F37DD018D47D1A429EF61AFADB6D7D4D47D0B8A21A31826C22D09DAEBEDDC36FBF87B40E47A22FCAD42C1C0FB83DED76F05143CEDA29AE62806046784A361513B954E031376D9EC1F1D3A5DA64EDA3628DEC4CCDF18C462A23393656F2E04D6ED6B813EDD5154E7735B146F62666F8CF89A056864E70244C1C3285D603912E14D392E5D3D36ECAE5CFF008EAF49EAF325D4BA592CE22834719C619BC0C8124D55635F2E28DEFACCDF19F03C5511649BA8B98C25B76B5C79062B8D10C9CE04868C41B14AC07225C5957D418678609955E07190C227460E4327A6DF572FF723B2B973FE44B2E7ABCC6815C262607713070CA194611C378534E4839071E84B2AF030C86207A286E1B3D34FBA3E1861A76311368087AE263076DCDBBFC49D1EDDB40AC030B183EC31F1FF0067ADB57886EB6D35DD74EB95FB2FAF0DF75F57469FF4DA15EF3BFF00E07ED9E9D568DA628BBB461F63213106D431117DD7D3B47BD9B881044E90F77D47ED4D9BDBE6AECF5746DB6A98837B370DA98D16DBB8EA6C226F82678D8ED36BB6DAEA6D36EFBABABADA35B4EA6AECF5759B143F7D065F8C641C838F425957818643103D14370D9E9A7DDFA3F4EF633D799164C0EA260E188E28C2386F0A69C8AF5E6459CE3A868381C38AC88E25C595723C5521629BA8B98C26B76B5C7906EA8898FB98CBC17891674A501D0341C38AD08E25232AE5B99072F122C964A006068C4714511C367A69CBE5C517DF519BE3192F62AFCC99E81A2E32BADCAD4D7A96397F64FCDB25EC56396C22C345CE575C7459AF534B846F3247A068B9AD5BB5A9AF53FA60C3F98B325B91AEA4BFD465ED9777A7F8D6E65CAB97930B2B4595785CB3ADD737F09B4331BB707B89EC3651727B6EEB0AD7D3B9EB6900C4353DC51C364F0EE6B383B6CB5F46FE07500203BB61E6191D4110006DEE3E2114384260EE9FA38EF9CFF901DDB0F3034E9088FC38E91E0F89DC22D077BFD7C07CD617C335F67AFABB18BBBEA6BEB7FE2856DF51EF4EAEC1CF5769ACEDFAB89B67A53F854732479894C6CD1B72B32BE9A97B157E64CF40D17195D6E56A6BD4B7E8D1A37696C513DF5999E3192F614FCB61E81A31B346E3A2CCFA62E5435CE7595FBDACEB6A7595111BCB69E8262E6B57151657D4FA197E6C6E869F9B1BA197E6CF9776FD1A7469633D06116738EA26311881EB2238970A69F70B8F7D659F9363C52E162A4A8B98E19B8A8BC7906E97698FB66CA852E9648C48A131C64E066CF320352B4A8D1E2A90CE52345CC6135C545E3C8315EBCCF4260090D0703471460E4378B2AE4D8E67D93F36C8390711674A50030C86207AD08E253D34FABC1071164B2501D0C81C07A288E1B232AFBFAB4B20F416461D49440E3318826B024894F4D3E25650C602C53EC30501BB1FBACBB11CD5520F8AAA5D2C935E57E5C86A815AAA4FB618900717E43A5B6DB6DB1DFAFAF526D40C43B534EFD0EFA37B62A2A60CA4CB95FA0B5125B75AAA4FB7545539DCD6C2E3DF5967E4DB1575446726CCAFCB9135BB5AAA4FB25D4BA592CE22834719C619BC0C8124D55635D5154E7735B0A754267293CD1CC7135C745A5C8319E8308B39C7513188C40F5911C4B8534FABC8CF1393293C723207C4E8C238648CA3EE14EA84CE5259A398E26B8A8B4B9065E0BC4F4259578E81A0E1C514370D919572F937EED1A74E9FF4633D799164C0EA260E188E28C2386F0A69CB146F62666F8C6C0CBEF6784F81A068864980244C62328A51C390DE14D3EAE5D1D492CAE5CFF916CB9EAF325D54459231228344E1C626B3CC80D4D5560AD8AC25E3394965865C866E2A2D527D8D02B84C4C0EE260E194328C2386F0A69C9B033FBD9E11B146F7D666F8C6542A88B259C450989C2704D781902495A54150D7F6DABDB98CFE3ABCE4682DD51131F73192EA5D335189E81938CE30CD9E5C06E6AAB1A5CBFDC96CAE5CFF00912CB9EAF31A057098981DC4C1C3286518470DE14D391A068864980244C62328A51C390DE14D3E91AA88B15235BD05C89AE2A2F067DB146F7D666F8C6542A88B259C450989C2704D781902495A5417A5CA9CED9B25D54459231228344E1C626B3CC80D4D5560BF0C51BDF599BE33E654185473247A098C6CD1B72B52DE98A83157E64C8B1317195D6E56A57D490D2E4E4BEF7FD9578DCB22DD737F09B73C9D493FA72B272EAF4FF25FA60C3F98B3259511E5CC91E82631A8B6F56A57D337B7D1B145F7D66778C6541853F2D845898C6CD1B8E8B2BE9886972725F7BEE055E372C937235D497FA8DBDB2EEF4FF1A4BD853F2DA7A068C6CD1B8E8B33E998E57D93F36C97B0A8E64C8B0D18D9A36E56A6BD315111BCC8916262E6B56F56A57D4D0D21BE4C6F6DE36BC6E5926C517DF599BE3195062B1CC9916262E72BADCAD4AFA9E067F7B7C23628DEFACCDF18C970F2E5B4F40D18D45B8A8B35E99D733F09B7237D493FA8CBDB2EEF4FF1ADEDBF46ED2D8A2FBEA337C67CCBC1789E84B2AF1D0341C38A286E1B232AE4830AF0C1CCABC0E0D18432B21C89CF4DB962AE97CB14DB95F97219B76B5549F641C8388B3A528018643103D6847129E9A7D542974B246245098E327033679901A95A54690D7F725BDB98CFE45B324682DD2ED31F6CD9072F13D0E955E06068C4715A0DC4A7A69CB1575426726CCAFCB8135BB5AAA4FB1A068898E71DC4C62328A5644712E14D3E9A056864E70244C1C3285D603912E14D3974BC4C9DB462B8AD0C93004868381B0BA38721BC5957263C92E962A4A8B98C19B8A8BC7906542A88CD4627A0989C2704D679701B95A54157919E27265278E4640F89D18470C91947DEA88A73B98C9752E964B388A0D1C671866F03204935558D74BB4C7DB362352E1629B6B797019B76B5C09F6C51BDF599BE33E1A34FE9FAE862BD799E84C0121A0E068E28C1C86F1655CBAA2A9CEE6B7545539DCD64BA974B259C45068E338C3378190249AAAC6BE4DFBB469D3A7FD18CF5E6459303A898386238A308E1BC29A72EA8898FB98DD51131F731BAA2263EE6375444C7DCC623551962A4AB797226B8A8BC09F65E0838F43A5578E8640E03D68371291957D542A88B259C450989C2704D781902495A54170A74BC6726CCD1CC60CDBB5AA5C832F041C7A1D2ABC74320701EB41B8948CABEE171EFACB3F26D8E67D93F36D85C7B132CFC9B2F22BC4E7324F1C8341F0CAC88E272328E4863FB6DDEBCC5FF001DDE7234262B8D10C9CE04868C41B14AC07225C5957DE974A73B66D853A5E33936668E63066DDAD52E4197820E3D0E955E3A190380F5A0DC4A4655F57915E27399278E41A0F865644713919472E976A73B68C6815C262607713070CA194611C378534E4681A2192600913188CA29470E4378534FA46AA22C548D6F417226B8A8BC19F6C51BDF599BE318D0344324C0122631194528E1C86F0A69F715854258A92CB0CB9135C545AA4FFCF8A2FBEA337C637432FCD8DD0CFF0036B7432FCD8CA830A8E5B08B1318D9A371D1657D37032FBD9E11B737235D3737A8CBD7316CBFF1AEB97F84DBAE6FE1264BD85472D87A068C6CD1B8E8B35E9B8E67D93F36D85CFB142CFC9B7D197221AE73ECADC36B3EDA9E64B846F2DA45868B9AD5C5459AF52EB9BF84DBAE5FE136EB9BF8499511E5CB71162631A8B7151657D310D2E4E73AF6D164D9F6D493628BEFACCEF18CA888DE6488B131735AB76B52BEA48690D72637B7EF6BC6E5926C517DF599DE31B144F62866F8C643686B9CFBDB78DACEB6A49BA197E6DF9B146F7D666F8C65E46789C9949E391903E274611C324651F7AA229CEE637545539DCD6C51BD8999BE31B032FBD9E13E09755119AB38F40C9387189AF02E049355582E2AE978B14DB95F97219B76B5549FF820E5E27A1D2ABC0C0D188E2B41B894F4D396397F64FCDB15EBCCF4260090D0703471460E4378B2AE5D5154E7735BAA2A9CEE6B7545539DCD6E97698FB66DD2ED3276D197915E18265578E41A0F86518390C9194724BAA88CD59C7A0649C38C4D78170249AAAC148C4BA58A6DADE5C866DDAD7027DB146F7D666F8C6EA8AA73B9ADD5114E77318D03444C738EE263119452B2238970A69F52EAA2335671E819270E3135E05C0926AAB055CBFDB6ACAE5CFF008EAF49EAF320C33C4E7324F038C86113AC88E273D36FBF2E28DEFACCDF18D8A37B13337C67C7146F62666F8C6C0CBEF678465E0838F43A5578E8640E03D68371291957DC51BD8999BE31B468DEC839789164B250030346238A288E1B3D34E4830CF0C132ABC0E321844E8C1C864F4DBE91AA88B15215BCBA135C545E04FB19EBCC8B2607513070C4714611C378534E4839071E84B2AF030C86207A286E1B3D34FB8E67D93F37F0418678609955E07190C227460E4327A6DF572FF723B2B973FE45B2E7ABCC830AF1393293C0E0D184328C23864F4DB96171EFACB3F26C78AA22C537513418C26B76B5C69062B8D10C9CE04868C41B14AC07225C5957D41C838F425957818643103D14370D9E9A7DC55D2F19CA4F2BF2E43371516A93EC975511648C48A0D1387189ACF32035355582E28DEC4CCDF18C46A5D33548D6F2E43371517813EC6815C262607713070CA194611C378534E5F2E28DEFACCDF18CA888DE6488B131735AB76B52BEA5D0CBF36B7432FCDAD8A2FB14337C636065F7B3C236E65418ABF32645898B9CAEB72B52BEA4C97B0A7E6488B0D18D9A36E56A6BD312E11BCC91E81A2E6B56ED6A6BD490D21AE4C6F6FDED78DCB24D8A27BEB333C6375CDFC24CB9572739F64E8B2ACFB6A7BE0A830A7E5B08B1318D9A371D165BD33033FBDBE11BE8D85C7BEB2CFC9B6397F64FCDB25EC56396C22C345CE575C74599F53FA37D3732A0C2A39923D04C63668DB95A96F4CE793A92FF004E564E5DDE9FE4A8690D72617BFEF6BC6E5926541853F3247A098C6CD1B72B52BE9BF2E28DEFACCDF18DD5154E7735BAA2A9CEE6B7545539DCD633D799E873812260E190E2B21C8970A69CB032FBD9E13E3A34FE9FAE862BD799E84C0121A0E068E28C1C86F1655C8AE3444C4C0EE183106C528C2386F1655F7AA229CEE6325D4BA592CE22834719C619BC0C8124D55634830AF0C1CCABC0E0D18432B21C89CF4DB974BB4C9DB46E97698FB66C6815A1939C0913070CA17580E44B8534E44725C2C53756F2E4336ED6B813ECBC1789E84B2AF1D0341C38A286E1B232AE585C7BEB2CFC9B1E2974B252545CC60CDC545E3C832F22BC304CAAF1C8341F0CA3072192328E5D5154E7735B0A754267293CD1CC6135C545A5C832F05E27A12CABC740D070E28A1B86C8CAB915E8308B260750D188380F4611C378B2AFB8ABAA133936657E5C09ADCAD5527DBAA2A9CEE6FF00EE7FFFC4003E10000102050106030703040004070000000203130001041114150512212232331085D4162023346394E4313541245161624260718206305281B1B3D1FFDA0008010100133F00FF0091349A05DB7281054F9D5408F899C681B2FD34681B2FD34681B2FD34681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C681B2FD34681B2FD34681B2FD378E9340BB6E5020A9F3AA811F13386125DB72BD048F9151209DC0CE5C46302969597B2DCEC2417BB41EEE81B2FD34681B2FD3430920E375F509072242212B0004B80C3092EDB95E8247C8A8904EE0672E231A06CBF4D1A06CBF4D1A06CBF4D1A06CBF4D1A06CBF4DEF795D2463AABB6E2A09072242473B9984B80CED1A06D4F4D1A06D4F4D1E69491F7F1AB5020E37408247C8AAE272B1846AD40BB6E502E907224B91F1338C0AAAA7996DDEC2476B3A1D519F4B43938F4A952ADF06A954960B2C82A1CE11815543938F549552DF1AA924910B2282A7CE719F4B54F3396EF6153B59D08D22BD76DC4C150E7490209DC0C27C0A33E96BB1B22955A547E0D2AAAAC77597483902302AA9597B11AEFA417BB471ABD020E36A9A47C8AAE272B181CB88C605550E4E3D52554B7C6AA492442C8A0A9F39C6BFB2FD4C6BFB2FD4C67D2D7636452AB4A8FC1A555558EEB2E907204605552B2F6237DF482F768E349AF5DB72BD75439D24083A0C23CD2923EFE348AF5DB71305439D24082770309F028D036A7A68C0AAA565E71AEFA417BB47D378F2BA4F7BCAE923CCE93C7CD2923EFE35FC579EA5497ED629DACEDBABC349CEC8C863EBA5B9BAC46262BCF552ABF6B7CED67777AA71E5957E1A06532CD2A48777282F76AFD318994CB35492FDADF0BDDADDEA8D27071B1D8FACAEFEF3F1E67571A062BCF52AA877728ED676FD3E38994CB35492FDADF0BDDADDEA8D27071B1D8FACAEFEF3FE1E69491F7F1E594BE1F7F1E5749EF795D2479A5278F9A5247DFC795D24681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C795D5F869340BB6E5020A9F3AA811F1338D2681071BA05D50E749013E0611F611A4502EDB8A9AA7CEAA0473B999CF8943092EDB95E8247C8A8904EE0672E231A06CBF4D1A06CBF4D1A4D020E3740BAA1CE92027C0C23EC3C3CD2923EFE3CAE93C3EFE3CAE93DEF2BA48D036A7A68D036A7A68D036A7A68D26BD071BAF4153E755010E8038FBF8F2BA48CFA5AEC6C8A556951F834AAAAB1DD65D20E408C0AAA565E71BEFA417BB47D378D22BD76DC4C150E7490209DC0C27C0A357A05DB71504839125C8E7733097018CFA5A565E71BEFAA17BB47D378C0AAAEC6C8AA56A91F8D4A92A89DD15D23E438D5E8176DC54120E4497239DCCC25C06275F4B4ACBCE37DF542F7694E9BC3E92EDB890AA1CE91104EE0613E053B479A5247DFC6915EBB6E260A873A48104EE0613E051E694913AFA5A565E71BEFAA17BB4A74DE1F4976DC48550E748882770309F029DA3CD292302AAA9E672DDEC2476B3A11A06D4F4D1A06D4F4D1A06D4F4D0C2A838DD02091F22A2272B181CB88FBDA06532CD2A48777282F76AFD31ECA7E6C7B29F9B1ECA7E6C7B29F9B1A4E0E3E3E47D7577F79F8D032996695243BB9417BB57E98F33A58FBF8D032996695243BB9417BB57E98F33A48D57071B1F23E82BBFBCFC65E532CD2A48777702F76B7BA651AFE532CD524BF6B142F76ADD51F7F1A06532CD2A48777282F76AFD31AFE532CD524BF6B142F76ADD51AB60E363E47D0577F79F8CBCA659A5490EEEE05EED6F74CA3CCE963EFE340CA659A5490EEE505EED5FA631329966A925FB5BE17BB56EA947B29F9B1ECA7E6C7B29F9B1ECA7E6C7B29F9BFF91814B54F3388DF7D23B59D3861241C6EBEA120E44844256000970186125DB72BD048F9151209DC0CE5C46302969597B2DCEC2417BB41E190AA0E36A82A1CE9109CAC6984F814AF1FBA6662318DF3CFB7B994BF6ED7DF8D0365FA68C855071B54150E74884E5634C27C0A578D7F6A7A98D7F6A7A9F0C0A5AA79971BEFA476B3A7D30C24838DD7D4241C890884AC0012E03E19F554ACBD96E76150BDDA087D55DB7281054F9D52239DCCCE7C4A348A041C6D505439D2404E563009F028C0A5AA79971BEFA476B3A7D30C24838DD7D4241C890884AC0012E03E1814B54F3388D77D23B59D38D0365FA68D2681071BA05D50E749013E0611814B54F3388DF7D23B59D38D0365FA6F7B48AF5DB71305439D24082770309F02F0CFA5A565E71BEFAA17BB47D3787D25DB71215439D22209DC0C27C0A768D036A7A68C0AAA565E71BEFA417BB47D378D22BD76DC4C150E7490209DC0C27C0A1F49071BAF4153E754842560039F128CFA5AA799CB77B0A9DACE846915EBB6E260A873A48104EE0613E05E19F4B4ACBD88D77D50BDDA38C0AAAEC6C8AA56A91F8D4A92A89DD15D23E4386155DB7282A120E44848E7733097018FDAF0F2D8C6F9E65CDFC45FA2F6DC87D25DB71215439D22209DC0C27C0A768D5A8176DCA05D20E449723E2671815554F32DB9D848ED6743AAD0C2A838DD02091F22A2272B181CB88C6BFB2FD4C67D2D53CCE5BBD854ED6742348AF5DB71305439D24082770309F028D5E8176DC54120E4497239DCCC25C063EFE348AF5DB71305439D24082770309F02F0CFA5A565EC46FBEA85EED1C3E92EDB890AA1CE91104EE0613E053B7BDE594B18994CB34AAAFDADF0BDDAB754A3F63D3B4FFB975CCFFF004B3519794CB34A921DDDC0BDDADEE9947B29F9B1FB1E9DA7FDCBAE67FF00A59A8CBCA659A5490EEEE05EED5FA651AFE532CD2AABF6B142F76ADD5E1A06532CD2A48777282F76AFD31978AF3D54921DDDC3B59DDEE99C7B57F851A56A98789FD0FCCBC8B9BF8AE76E56DFB47B29F9B1A4E0E3E3E47D7577F79F8D032996695243BB9417BB57E98CBC579EAA490EEEE1EED9DDEE99C6AD9D9390C7D14B737588D0329966A9543BB9417BB57E98D7F299669555FB58A17BB56EA8D5B071F1D8FA0AEFEF3F1A56A98789FD07CCBE8B9BF8AE76E56DFB4626532CD524BF6B7C2F76ADD51A4E0E363E47D7577F79F8F2CA5F1F2CA4F7BCAE92184976DC48D23E4544827703397119DA3029695979B73B0905EED27D578D5ABD071BAF5D20E449710E8008D0365FA68C0A5A565E6DDEC2417BB41D57F0D5EBD76DC4CD23E4557209DC0CE5C47C349A05DB7281054F9D5408F899C6052D0E4E3D2AB548FC6A5492582CB2091F21C6BFB53D4C642ABB6E2A6A9F3AA4473B9A853E253B469340838DD02EA873A4809F030F0D268176DCA04153E755023E2671E694912AFAAA565ECB73B0A85EED04642ABB6E2A6A9F3AA4473B9A853E253B4795D5C7D8469140BB6E2A6A9F3AA811CEE6673E250C24BB6E57A091F22A2413B819CB88C6052D2B2F65BBD8482F7682357AF41C6D304839125C42560009701F1F2BA4F7BCAE921F49071BAF4153E754842560039F128CFA5AA799CB73B0A9DACE87863AABB6E2A09072242473B9984B80CED1A06D4F4D1A06D4F4DE19F4B4ACBCE35DF542F768FA6F181555D8D9154AD523F1A9525513BA2BA47C87157B7681943FDCDA58CED2FF0003384A8184E98E9DFE12B19DEEFC536CC71306699343AA76BDDA8D1C234708A8A59A6A28F54AABCEE3295A569AB68248E5294BFCCED19F4A836F623567950BDDA38C0AAAEC6C8AA56A91F8D4A92A89DD15D23E5386155DB7282A120E44848E7733097018FDAF0F2D8C6F9D65CDFC55FB77B46055576364552B548FC6A549544EE8AE91F21C6935E838DD7A0A9F3AA8087401F86935EBB6E57AEA873A48107418467D2D7636452AB4A8FC1A555558EEB2E9072047ED78796C637CEB2E6FE2AFDBBDB721F4976DC48550E748882770309F029DBDEF2CA58CBC579EAA490EEEE1DACEEF74CE356CEC8C8C8FA096E6EB1E18994CB35492FDADF0BDDAB754A3D94FCD8F653F37C3EFE3CB29607F51DE9CA5797F995E252E128095E7B8984CA7697FD250139948252909A73BCF8CEE2769CF85E72BCA568527610194AF39CE73FE2528AC49B1AA496099A6AA72FD6425295E5BD294ED69DBC3FE10995E45BB2FE25398DEDFDE739FF31A06532CD2A48777282F76AFD3E1AAE0E363E47D0577F79F8CBCA659A5490EEEE05EED6F74CA3D94FCD8D27071F1D8FAEAEFEF3F1A06532CD52A8777282F76AFD318994CB35492FDADF0BDDADDEA95AF1FB1E9DA7FDCBAE677FA59A8D2B54C3C4FE83E65E45CDFC573B636DFB7BDABD7A0E3698241C892E212B0004B80C6052D0E4E3D2AB548FC6A5492582CB2091F21C7EE99988C637CF3CDEE65AFDBB5F7E1849071BAFA84839121109580025C06184976DCAF4123E4544827703397118C0A5A565ECB73B0905EED0469340BB6E5020A9F3AA811F13387D541C6E82A150E74884E563009F028CFAAAA79971BEFAA76B3A7D368F2BA48FF00BE5E14E52963266049E42E5796E2729CE76FE4A72B0CA73BDB6A3DBE330A74D2B727F1C853BDE7FACB84AD3BECDDB2A2AF2025BC694913404A523DDDC9F35B7665C62F27524E9A46204A87EA247350E72BFEA0DF87FDC51A4502EDB94082A7CEAA047D671AFED4F531AFED4F531AFED4F531A06CBF4D1FB5E1E5BF93F22C39BF8A8772F6DC8C85576DC54D53E75488E77350A7C4A768D0365FA68FDAF0F2DFC9F9161CDFC543B97B6E4642ABB6E2A6A9F3AA4473B9A853E253B7BDA457AEDB8982A1CE920413B8184F81430AAEDB941509072242473B9984B80C605552B2F38DF7D20BDDA3E9BC795D2467D2D7636452AB4A8FC1A555558EEB2E907204681B53D3463AA838DAA691F22A2272B1A652E2328D036A7A68FDAF0F2D8C6F9E61CDFC55FB77B6E43E92EDB890AA1CE91104EE0613E053B78274229A28A467314574AA24A94D407268A4523009DD4BDA366A96651AA56A12A62A8DD9DD8A646986649CA7BB335EE5095E68D32B4AD492A84D39DC46EF148A5294A45619CE2A7E67682CAA6446AA15339B9F0F978EF5AE56B5A2946432DABB384A725F78385F7921782FD256B4E5C6F41B36A2B0954256B9FC202E1CC30D1A7BF3150C4B94E522E1319CBF48D5E81071BA04123E455713E0607E1F7F1E57491AFECBF5319F4B54F3396E76153B59D08D5A81071BA04123E455713958C3C302AAA9E672DCEC2476B3A10C2A838DD02091F22A2272B181CB88FBDA06532CD2A48777282F76AFD3E1AB60E363E47D1577F79F8D2B54C3C4FE83E65E45CDFC573B636DFB4626532CD524BF6B7C2F76ADD51ECA7E6C6262BCF552ABF6B7CF76CEDBAA718994CB34AAAFDADF0BDDADDEA94693838F8F91F5D5DFDE7E3CB297C03F8AA40A9EB11FFE838A0009112469A736493504C4C39653B14A7394F8CA70B8802C549319A694C3993414BDF7E4090CA5212E6B95EE9D624CA03322DD4896107A616DD9CC1DB7198F4C02929A6B23309837219719CA729FE9394B8452593ACAE5123ABA6911D42A5BA92130A4524729094CAD149564926A27906DA6F12739F2818DCB723DABFC28D0315E7AA9243BB9476B3B7E98FBF8D032996695243BB9417BB57E98CBC579EAA490EEEE1EED9DDEE99C7B57F851ED5FE146818AF3D54921DDCA3B59DBF4C6939D919191F5D2DCDD6231315E7A9525FB5BE76B3B6EA9FBDA4D02EDB94082A7CEAA047C4CE35FDA9EA633EAAA9E6711AEFAA76B3A71A4502EDB8A9AA7CEAA0473B999CF8943092EDB95E8247C8A8904EE0672E231814B4ACBD96E76120BDDA08D268176DCA04153E755023E2671ABD7AEDB899A47C8AAE413B819CB88C6052D53CCE235DF48ED674E33EAA87271EA95A547E0D2AA92216450483903C1CDD3553569D748E432FF008AD23DF9CBFF00485E25FA47F78D8FB357A9A79C84B7484E49C8C933039184E45FAEE6F42889A339DA769F298C8A5C65FCCA10E2E20B564D6DF9CA529EE8260B29729CE579A96943CA22E86FCE76DF4C84A5C65FC4E51AFED3F531E69491814B54F32E35DF48ED674FA6D1A06CBF4D1E6949E390AA0E36A82A1CE9109CAC6984F814AF1FBA6662318DF3CF37B994BF6ED7DF8CFAAA1C9C7AA56951F834AAA4885914120E40F7BCAE93C25415554F32DB9D848ED6743AAD18EAA0E36A9A47C8A889CAC6994B88CA185576DCA0A84839121239DCCC25C063F6BC3CB631BE799737F117E8BDB721F4976DC48550E748882770309F029DA356A05DB728174839125C8F899F8E75354EFA412B1CEE8A8768DEE09998EE914A5FA6F6EDC653FE244504129FFF009049CE53FF00E611B2F475273B5CCE9D496EC8F965720984E7C6F38A619260676E2421329CC653FED79DBFBC4E9C4159A69269260332971294B74A728FED3BCE769FFED394E3CAE92356A05DB728174839125C8F899F86915EBB6E260A873A48104EE0613E051A457A0E3699AA7CEAA0212B001CF8946055553CCB6E76123B59D0EA8D036A7A68D26BD071BAF4153E755010E803F0D26BD76DCAF5D50E749020E830F7BCB29635FCA659A5557ED6285EED5BAA3EC235FC579EAA557ED629DACEDBAA313299669555FB5BE17BB56EA8FD8F4ED3FEE5D733BFD2CD4695AA61E27F41F32F22E6FE2B9DB95B7EDE1AB60E363B1F415DFDE7E3DABFC28A5FFC432A951BFF0009952848E7FE37E51B4692A13552FF005B4C061A5E2A1153713DE3101BDA7FC910CA195A29D05260A6E19015AF3FE084A509D31CE729FF007E33B5FF00EB0B4AC7507C39A7C25FDA5FC4BF494A5294A51A06532CD2A48777282F76AFD31AFE532CD2AABF6B142F76ADD5E1E59491A062BCF52AA877728ED676FD31A4E7646431F5D2DCDD6231315E7A9525FB5BE76B3BBBD538F653F363D94FCD8F653F37DED5EBD071B4C120E4497109580025C063CAEAE33EAA95979B77B0A85EED0755E35FDA9EA633EAABB1B22A92A55BE0D52AAA2774575439C23029695979B73B0905EED0755E348A05DB715354F9D5408E773339F12F0FB08D5ABD071BAF5D20E449710E8008D5ABD76DCAF4123E455720E833F0D5EB9071BAF5D20E449610958023029A85FC7A55AA91F8D4C9A6A85964122E0713AFA9AA799C46BBCA1DACE9C799D5786052D53CCE235DF48ED674E340D97E9A3CAEAE30296A9E6711AEFA476B3A719F5543938F54AD2A3F069554910B228241C811A06CBF4D1814B4ACBD96EF6120BDDA08D5EBD071B4C120E4497109580025C06184976DCAF4123E4544827703397118C0A5A565ECB73B0905EED0469340BB6E5020A9F3AA811F133F7B48AF5DB71305439D24082770309F028F34A48FBFF0C75576DC54120E44848E7733097019DA3F6BC3CB631BE799737F157EDDEDB9181555D8D9154AD523F1A9525513BA2BA47C87E19F4B4ACBD88DF7D50BDDA387D25DB71215439D22209DC0C27C0A76F0FBF8F2BA48C0AAA1C9C7AA4AA96F8D54924885914153E738FDD33311FC9F9179BDCCA43B96BEFC681B53D3467D2D7636452AB4A8FC1A555558EEB2E9072047ED78796C637CEB2E6FE2AFDBBDB721F4976DC48550E748882770309F029DA31D55DB71504839121239DCCC25C067689D05552B2F38DF7D20BDDA3E9BC795D24605550E4E3D52554B7C6AA492442C8A0A9F39C6BDB33D4C6055576364552B548FC6A549544EE8AE91F21F8F95D27BDA06532CD2A48777282F76AFD31AFE532CD524BF6B142F76ADD51AB60E363E47D1577F79F8F6AFF0A355D530F13FAEF96651737F15BEE4ADBF78FD8F4ED3FEE5D733BFD2CD465E532CD2A48777702F76B7BA65E3E59491A062BCF5524877728ED676FD31AAE0E363E47D1577F79F8D2B54C3C4FE83E65E45CDFC573B72B6FDA340C579EA5550EEE51DACEDFA63EC2340CA659AA550EEE505EED5FA631329966A925FB5BE17BB56EA8D27071F1F23EBABBFBCFC79652C6BF94CB35492FDAC50BDDAB7547DFC795D2465E2BCF52AA877770ED6777BA671ED5FE14695AA61E27F41F32F22E6FE2B9DB95B7EDE3E594BEF69340BB6E5020A9F3AA811F13387D541C6E82A150E74884E563009F028CFAAAA799C46FBEA9DACE9C6AD5E838DD7AE907224B887400467D557636455254AB7C1AA55544EE8AEA873847ED78796FE4FC8B2E6FE2A1DCBDA35FDA9EA6349A041C6E8175439D2404F81846052D53CCE237DF48ED674E1849071B48520E4484425604C25C06578C855071B54150E74884E5634C27C0A578D7F6A7A98C85576DC54D53E75488E77350A7C4A76F0CFAAA565E6DDEC2A17BB41D578C0A5AEC6C8A54AA96F8D5492AB1DD65D53E7386125DB72BD048F9151209DC0CE5C46340D97E9A33EAA87271EA95A547E0D2AA9221645048390235FDA9EA633EAAA9E65C6BBEA9DACE9F4C795D278E9140BB6E2A6A9F3AA811CEE6673E251A06CBF4D1A06CBF4D19F5543938F54AD2A3F069554910B228241C81EF6915EBB6E260A873A48104EE0613E051A06D4F4D1A06D4F4D1A06D4F4D1A06D4F4D181554ACBCE35DF482F768FA6F1AB5020E37408247C8AAE272B184605550E4E3D52554B7C6AA492442C8A0A9F39C67D2D53CCE5B9D854ED6742356A041C6E81048F9155C4E56308F2BAB8FB08F34AB87D241C6EBD054F9D521095800E7C4A3F74CCC47F27E45F6F73290EE5AFBF18EAA0E36A9A47C8A889CAC6994B88CA35FD97EA633E96A9E672DCEC2A76B3A11AB5020E37408247C8AAE272B1843E920E375E82A7CEA9084AC0073E251AFECBF530FA4BB6E242A873A44413B8184F814ED18EAAEDB8A8241C89091CEE6612E033B44E82AA95979C6FBE905EED1F4DE3CAE9231D55DB71504839121239DCCC25C067689D05552B2F6237DF482F768FDFF002CA58F653F363D94FCD8F653F36340C579EAA490EEE51DACEDFA63EFFC34AD2F332FFA1F997966F7329CED947B57F851ED5FE146818AF3D4AAA1DDCA3B59DBF4C7D84799D5F86939D9190C7D74B737588C4C579EAA557ED6F9EED9DB754E3DABFC28F6AFF0A3DABFC28CBC579EAA490EEEE1DACEEF74CE355CEC9C8C8FA096E6EB11E594918994CB35492FDADF0DEBB56EA94695838D8F91F5D5DFDE7E3CB2923CCE9634ACEC9C8C8FAC96E6EB11ECA7E6FBDE57490C24BB6E57A091F22A2413B819CB88C681B2FD34681B2FD3479A5247DFF86052D0E4E3D2AB548FC6A5492582CB2091F21C67D5553CCE235DF54ED674FC349A041C6E8175439D2404F81847D8469140BB6E2A6A9F3AA811CEE6673E251A06CBF4D1A06CBF4D1A06CBF4D1AFED4F531AFED4F530FAABB6E5020A9F3AA4473B999CF8946052D0E4E3D2AB548FC6A5492582CB2091F21C67D5553CCB8D77D53B59D3E9B4795D24681B2FD34681B2FD3430920E3690A41C890884AC0984B80CAF1814B43938F4AAD523F1A9524960B2C8247C871FBA6662318DF3CF37B996BF6ED7DF861241C6EBEA120E448442560009701F7BCAE923CD293C7CD2923EFE356A041C6E81048F9155C4E56308F34A4F0D26BD76DCAF5D50E749020E83086155DB7282A120E44848E77330970189D05552B2EB8DF7D20BDDA3E9BC6915EBB6E260A873A48104EE0613E051AB502EDB940BA41C892E47C4CE3EC3C185576DCA0A84839121239DCCC25C063F6BC3CB631BE799737F117EDDEDB90FA4BB6E57D42A1CE91104EE0613E051E575712A0AAAA7996DCEC2476B3A9F55A31D541C6D5348F915113958D329711946AD40BB6E502E907224B91F1338CFA5A565EC46FBEA85EED1C6055576364552B548FC6A549544EE8AE91F21C79A5244EBE9695979C6FBEA85EED29D3787D25DB71215439D22209DC0C27C0A76F7BCAE9231329966A925FB5BE1BD76ADD528F653F363D94FCD8F33A58FBFF0D7F29966A925FB58A17BB56EAF0D0329966A9543BB9417BB57E98C4CA659A5557ED6F85EED6EF54A34AC1C6C7C8FAEAEFEF3F1E59491ED5FE146AB9D9390C7D04B73758F0D0315E7AA9243BB9476B3B7E98FBFF0F2BAB8FB08D7F15E7AA955FB58A76B3B6EAF1D032996695243BB9417BB57E98D5754C3C4FEBFE59945CDFC56FB92B6FDE349C1C7C7C8FACAEFEF3F1A06532CD2A48777282F76AFD3EF795D24681B2FD34681B2FD34681B2FD3469140838DAA0A873A4809CAC6013E051F7FEE69140BB6E2A6A9F3AA811CEE6673E250C24BB6E24691F22A2413B819CB88CED1A06CCF4D19F5543938F54AD2A3F069554910B228241C810FAA838DD0542A1CE9109CAC6013E051AFED4F531AFED4F53190AA0E36A82A1CE9109CAC6984F814AF13AFAAAA79971BEFAA76B3A7D368D268176DCA04153E755023E2671E575719F554ACBCDB9D8542F7683AAF0FAABB6E5020A9F3AA4473B999CF894681B2FD346052D2B2F65B9D8482F7682349A05DB7281054F9D5408F899C6AF5EBB6E26691F22AB904EE0672E231814B54F3388D77D23B59D38D0365FA6FF99FFFC4002A11000103030205040203000000000000000100020304051106211213314051101422413280162442FFDA0008010201013F00FD9A073E83708641EFA59046325433897A2924118C950CC25E9DEEDD15DEB22A6A77F1EE55B756B2DF172A66F555FAA5B5748EE546412B4C81EC83B8B2E3E9F8F74767A75496CE42A3823ADAA2F937C7D2BD5AA8DF3B1EE6630BD8521A511F00030AD956EB55D1F0039612B9E00C94C7878EE88CABEC8200C7F8475355D1D710C3B29EF02BA2CCB2E0A9357CD08E40391E54B7685E1B237F2F2BDC3EB18C847FA54C0B58223F5DD67016A767F4DEEF0A42E3212A9C1126241B2ABB232439A5F1F6A4824A69431EAC25B253C2E3F41746E3BAE87215C6DCDB93381C765268280E785E9FA065CE5922FE3B5B147CB90712A8D2570E6F1C4CC0565A534B42D63BAAC671DD0F8EC5608DC2F92C1F2B87EC84785FB2D9BF00BA7EDDFF00FFC400251100010401040104030000000000000000010002030411051221403210224180144261FFDA0008010301013F00FB76D6A73709A139B8EEF2AA40F95E24F85269DF907785069E18FDC5CAFEDDFC0F407B4D4C8B729849523DA154B53161084AF7BF20AB359F356DC5A830A23B43C9513FAAB518B8DC151D335FC555A518707CA15FB94DF4042C1CA6E222F47DDDAF95A77364350FE27709B69CDF6BC26B848DE15AE1CF4381DAC65413188E426EB2F09BAD1F9085F8F3951EA9106E15B977BF211E5BDA6AC64AC05C2E10217921F6EFFFD9, '1', '2022-03-16 22:22:30', '1', '2022-03-16 22:22:30', b'0'); COMMIT; -- ---------------------------- @@ -2239,7 +2474,7 @@ CREATE TABLE `system_dict_data` ( `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=1150 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典数据表'; +) ENGINE=InnoDB AUTO_INCREMENT=1155 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典数据表'; -- ---------------------------- -- Records of system_dict_data @@ -2278,8 +2513,8 @@ INSERT INTO `system_dict_data` VALUES (41, 20, '用户被禁用', '20', 'system_ INSERT INTO `system_dict_data` VALUES (42, 30, '验证码不存在', '30', 'system_login_result', 0, 'info', '', '登陆结果 - 验证码不存在', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:07', b'0'); INSERT INTO `system_dict_data` VALUES (43, 31, '验证码不正确', '31', 'system_login_result', 0, 'info', '', '登陆结果 - 验证码不正确', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:11', b'0'); INSERT INTO `system_dict_data` VALUES (44, 100, '未知异常', '100', 'system_login_result', 0, 'danger', '', '登陆结果 - 未知异常', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:23', 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 (45, 1, '是', 'true', 'infra_boolean_string', 0, 'danger', '', 'Boolean 是否类型 - 是', '', '2021-01-19 03:20:55', '1', '2022-03-15 23:01:45', b'0'); +INSERT INTO `system_dict_data` VALUES (46, 1, '否', 'false', 'infra_boolean_string', 0, 'info', '', 'Boolean 是否类型 - 否', '', '2021-01-19 03:20:55', '1', '2022-03-15 23:09:45', b'0'); INSERT INTO `system_dict_data` VALUES (47, 1, '永不超时', '1', 'infra_redis_timeout_type', 0, 'primary', '', 'Redis 未设置超时的情况', '', '2021-01-26 00:53:17', '1', '2022-02-16 19:03:35', b'0'); INSERT INTO `system_dict_data` VALUES (48, 1, '动态超时', '2', 'infra_redis_timeout_type', 0, 'info', '', '程序里动态传入超时时间,无法固定', '', '2021-01-26 00:55:00', '1', '2022-02-16 19:03:41', b'0'); INSERT INTO `system_dict_data` VALUES (49, 3, '固定超时', '3', 'infra_redis_timeout_type', 0, 'success', '', 'Redis 设置了过期时间', '', '2021-01-26 00:55:26', '1', '2022-02-16 19:03:45', b'0'); @@ -2375,6 +2610,11 @@ INSERT INTO `system_dict_data` VALUES (1146, 2, '用户 APP', '2', 'infra_codege INSERT INTO `system_dict_data` VALUES (1147, 0, '未退款', '0', 'pay_refund_order_type', 0, 'info', '', '退款类型 - 未退款', '1', '2022-02-16 14:09:01', '1', '2022-02-16 14:09:01', b'0'); INSERT INTO `system_dict_data` VALUES (1148, 10, '部分退款', '10', 'pay_refund_order_type', 0, 'success', '', '退款类型 - 部分退款', '1', '2022-02-16 14:09:25', '1', '2022-02-16 14:11:38', b'0'); INSERT INTO `system_dict_data` VALUES (1149, 20, '全部退款', '20', 'pay_refund_order_type', 0, 'warning', '', '退款类型 - 全部退款', '1', '2022-02-16 14:11:33', '1', '2022-02-16 14:11:33', b'0'); +INSERT INTO `system_dict_data` VALUES (1150, 1, '数据库', '1', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:25:28', '1', '2022-03-15 00:25:28', b'0'); +INSERT INTO `system_dict_data` VALUES (1151, 10, '本地磁盘', '10', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:25:41', '1', '2022-03-15 00:25:56', b'0'); +INSERT INTO `system_dict_data` VALUES (1152, 11, 'FTP 服务器', '11', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:06', '1', '2022-03-15 00:26:10', b'0'); +INSERT INTO `system_dict_data` VALUES (1153, 12, 'SFTP 服务器', '12', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:22', '1', '2022-03-15 00:26:22', b'0'); +INSERT INTO `system_dict_data` VALUES (1154, 20, 'S3 对象存储', '20', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:31', '1', '2022-03-15 00:26:45', b'0'); COMMIT; -- ---------------------------- @@ -2394,7 +2634,7 @@ CREATE TABLE `system_dict_type` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `dict_type` (`type`) -) ENGINE=InnoDB AUTO_INCREMENT=146 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典类型表'; +) ENGINE=InnoDB AUTO_INCREMENT=147 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典类型表'; -- ---------------------------- -- Records of system_dict_type @@ -2438,6 +2678,7 @@ INSERT INTO `system_dict_type` VALUES (142, '任务分配规则的类型', 'bpm_ 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'); INSERT INTO `system_dict_type` VALUES (144, '代码生成的场景枚举', 'infra_codegen_scene', 0, '代码生成的场景枚举', '1', '2022-02-02 13:14:45', '1', '2022-03-10 16:33:46', b'0'); INSERT INTO `system_dict_type` VALUES (145, '角色类型', 'system_role_type', 0, '角色类型', '1', '2022-02-16 13:01:46', '1', '2022-02-16 13:01:46', b'0'); +INSERT INTO `system_dict_type` VALUES (146, '文件存储器', 'infra_file_storage', 0, '文件存储器', '1', '2022-03-15 00:24:38', '1', '2022-03-15 00:24:38', b'0'); COMMIT; -- ---------------------------- @@ -2457,7 +2698,7 @@ CREATE TABLE `system_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=5444 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='错误码表'; +) ENGINE=InnoDB AUTO_INCREMENT=5448 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='错误码表'; -- ---------------------------- -- Records of system_error_code @@ -2518,7 +2759,7 @@ INSERT INTO `system_error_code` VALUES (5329, 1, 'yudao-admin-server', 100300100 INSERT INTO `system_error_code` VALUES (5330, 1, 'yudao-admin-server', 1003001004, '表定义不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); INSERT INTO `system_error_code` VALUES (5331, 1, 'yudao-admin-server', 1003001005, '字段义不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); INSERT INTO `system_error_code` VALUES (5332, 1, 'yudao-admin-server', 1003001006, '同步的字段不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); -INSERT INTO `system_error_code` VALUES (5333, 1, 'yudao-admin-server', 1003001007, '同步失败,不存在改变', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5333, 1, 'yudao-admin-server', 1003001007, '同步失败,不存在改变', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-12 01:23:51', b'0'); INSERT INTO `system_error_code` VALUES (5334, 1, 'yudao-admin-server', 1003000000, '测试示例不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); INSERT INTO `system_error_code` VALUES (5335, 1, 'yudao-admin-server', 1004001000, '用户不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); INSERT INTO `system_error_code` VALUES (5336, 1, 'yudao-admin-server', 1004001001, '密码校验失败', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); @@ -2629,6 +2870,34 @@ INSERT INTO `system_error_code` VALUES (5440, 1, 'yudao-admin-server', 100201700 INSERT INTO `system_error_code` VALUES (5441, 1, 'yudao-admin-server', 1002018000, '社交授权失败,原因是:{}', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); INSERT INTO `system_error_code` VALUES (5442, 1, 'yudao-admin-server', 1002018001, '社交解绑失败,非当前用户绑定', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); INSERT INTO `system_error_code` VALUES (5443, 1, 'yudao-admin-server', 1002018002, '社交授权失败,找不到对应的用户', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5444, 1, 'yudao-admin-server', 1002019000, '用户组不存在', '', NULL, '2022-03-12 16:03:50', NULL, '2022-03-12 16:03:50', b'0'); +INSERT INTO `system_error_code` VALUES (5445, 1, 'yudao-admin-server', 1001005000, '测试示例不存在', '', NULL, '2022-03-15 19:25:23', NULL, '2022-03-15 19:25:23', b'0'); +INSERT INTO `system_error_code` VALUES (5446, 1, 'yudao-admin-server', 1001006000, '文件配置不存在', '', NULL, '2022-03-15 19:25:23', NULL, '2022-03-15 19:25:23', b'0'); +INSERT INTO `system_error_code` VALUES (5447, 1, 'yudao-admin-server', 1001006001, '该文件配置不允许删除,原因:它是主配置,删除会导致无法上传文件', '', NULL, '2022-03-15 23:43:35', NULL, '2022-03-15 23:43:35', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for system_group +-- ---------------------------- +DROP TABLE IF EXISTS `system_group`; +CREATE TABLE `system_group` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名字', + `description` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '描述', + `status` tinyint NOT 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 '是否删除', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户组'; + +-- ---------------------------- +-- Records of system_group +-- ---------------------------- +BEGIN; COMMIT; -- ---------------------------- @@ -2652,7 +2921,7 @@ CREATE TABLE `system_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=1017 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统访问记录'; +) ENGINE=InnoDB AUTO_INCREMENT=1055 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统访问记录'; -- ---------------------------- -- Records of system_login_log @@ -2784,6 +3053,44 @@ INSERT INTO `system_login_log` VALUES (1013, 100, '', 1, 2, 'admin', 31, '127.0. INSERT INTO `system_login_log` VALUES (1014, 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/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:47:01', NULL, '2022-03-07 21:47:01', b'0', 1); INSERT INTO `system_login_log` VALUES (1015, 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/98.0.4758.109 Safari/537.36', NULL, '2022-03-11 00:16:29', NULL, '2022-03-11 00:16:29', b'0', 1); INSERT INTO `system_login_log` VALUES (1016, 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/98.0.4758.109 Safari/537.36', NULL, '2022-03-11 00:24:08', NULL, '2022-03-11 00:24:08', b'0', 1); +INSERT INTO `system_login_log` VALUES (1017, 100, '', 1, 2, 'admin', 30, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-12 16:24:58', NULL, '2022-03-12 16:24:58', b'0', 1); +INSERT INTO `system_login_log` VALUES (1018, 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/98.0.4758.109 Safari/537.36', NULL, '2022-03-12 16:25:02', NULL, '2022-03-12 16:25:02', b'0', 1); +INSERT INTO `system_login_log` VALUES (1019, 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/98.0.4758.109 Safari/537.36', NULL, '2022-03-12 17:55:32', NULL, '2022-03-12 17:55:32', b'0', 1); +INSERT INTO `system_login_log` VALUES (1020, 100, '', 104, 2, 'test', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-12 17:55:44', NULL, '2022-03-12 17:55:44', b'0', 1); +INSERT INTO `system_login_log` VALUES (1021, 200, '', 104, 2, 'test', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-12 18:01:47', NULL, '2022-03-12 18:01:47', b'0', 1); +INSERT INTO `system_login_log` VALUES (1022, 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/98.0.4758.109 Safari/537.36', NULL, '2022-03-12 18:01:54', NULL, '2022-03-12 18:01:54', b'0', 1); +INSERT INTO `system_login_log` VALUES (1023, 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/98.0.4758.109 Safari/537.36', NULL, '2022-03-15 00:19:02', NULL, '2022-03-15 00:19:02', b'0', 1); +INSERT INTO `system_login_log` VALUES (1024, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 19:49:21', NULL, '2022-03-15 19:49:21', b'0', 1); +INSERT INTO `system_login_log` VALUES (1025, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 19:49:57', NULL, '2022-03-15 19:49:57', b'0', 1); +INSERT INTO `system_login_log` VALUES (1026, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 19:50:53', NULL, '2022-03-15 19:50:53', b'0', 1); +INSERT INTO `system_login_log` VALUES (1027, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 19:51:39', NULL, '2022-03-15 19:51:39', b'0', 1); +INSERT INTO `system_login_log` VALUES (1028, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 20:39:10', NULL, '2022-03-15 20:39:10', b'0', 1); +INSERT INTO `system_login_log` VALUES (1029, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 20:41:10', NULL, '2022-03-15 20:41:10', b'0', 1); +INSERT INTO `system_login_log` VALUES (1030, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 20:43:34', NULL, '2022-03-15 20:43:34', b'0', 1); +INSERT INTO `system_login_log` VALUES (1031, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 20:57:01', NULL, '2022-03-15 20:57:01', b'0', 1); +INSERT INTO `system_login_log` VALUES (1032, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 21:06:32', NULL, '2022-03-15 21:06:32', b'0', 1); +INSERT INTO `system_login_log` VALUES (1033, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 21:06:52', NULL, '2022-03-15 21:06:52', b'0', 1); +INSERT INTO `system_login_log` VALUES (1034, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 21:27:30', NULL, '2022-03-15 21:27:30', b'0', 1); +INSERT INTO `system_login_log` VALUES (1035, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 22:15:19', NULL, '2022-03-15 22:15:19', b'0', 1); +INSERT INTO `system_login_log` VALUES (1036, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 22:16:13', NULL, '2022-03-15 22:16:13', b'0', 1); +INSERT INTO `system_login_log` VALUES (1037, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 22:17:59', NULL, '2022-03-15 22:17:59', b'0', 1); +INSERT INTO `system_login_log` VALUES (1038, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 22:18:13', NULL, '2022-03-15 22:18:13', b'0', 1); +INSERT INTO `system_login_log` VALUES (1039, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 22:20:22', NULL, '2022-03-15 22:20:22', b'0', 1); +INSERT INTO `system_login_log` VALUES (1040, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', NULL, '2022-03-15 22:20:26', NULL, '2022-03-15 22:20:26', b'0', 1); +INSERT INTO `system_login_log` VALUES (1041, 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/98.0.4758.109 Safari/537.36', NULL, '2022-03-16 23:46:20', NULL, '2022-03-16 23:46:20', b'0', 1); +INSERT INTO `system_login_log` VALUES (1042, 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/98.0.4758.109 Safari/537.36', NULL, '2022-03-18 22:24:46', NULL, '2022-03-18 22:24:46', b'0', 1); +INSERT INTO `system_login_log` VALUES (1043, 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/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 18:27:50', NULL, '2022-03-19 18:27:50', b'0', 1); +INSERT INTO `system_login_log` VALUES (1044, 100, '', 0, 2, 'aoteman', 10, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 18:37:33', NULL, '2022-03-19 18:37:33', b'0', 121); +INSERT INTO `system_login_log` VALUES (1045, 100, '', 0, 2, 'aoteman', 10, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 18:37:42', NULL, '2022-03-19 18:37:42', b'0', 121); +INSERT INTO `system_login_log` VALUES (1046, 100, '', 0, 2, 'aoteman', 10, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 18:37:56', NULL, '2022-03-19 18:37:56', b'0', 121); +INSERT INTO `system_login_log` VALUES (1047, 100, '', 0, 2, 'aoteman', 10, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 18:38:21', NULL, '2022-03-19 18:38:21', b'0', 121); +INSERT INTO `system_login_log` VALUES (1048, 100, '', 113, 2, 'aoteman', 10, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 18:38:40', NULL, '2022-03-19 18:38:40', b'0', 122); +INSERT INTO `system_login_log` VALUES (1049, 100, '', 113, 2, 'aoteman', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 18:38:51', NULL, '2022-03-19 18:38:51', b'0', 122); +INSERT INTO `system_login_log` VALUES (1050, 100, '', 104, 2, 'test', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 21:45:14', NULL, '2022-03-19 21:45:14', b'0', 1); +INSERT INTO `system_login_log` VALUES (1051, 200, '', 104, 2, 'test', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 21:46:11', NULL, '2022-03-19 21:46:11', b'0', 1); +INSERT INTO `system_login_log` VALUES (1052, 100, '', 104, 2, 'test', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 21:46:19', NULL, '2022-03-19 21:46:19', b'0', 1); +INSERT INTO `system_login_log` VALUES (1053, 200, '', 104, 2, 'test', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 22:13:06', NULL, '2022-03-19 22:13:06', b'0', 1); +INSERT INTO `system_login_log` VALUES (1054, 100, '', 114, 2, 'hrmgr', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 22:15:43', NULL, '2022-03-19 22:15:43', b'0', 1); COMMIT; -- ---------------------------- @@ -2807,7 +3114,7 @@ CREATE TABLE `system_menu` ( `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=1231 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菜单权限表'; +) ENGINE=InnoDB AUTO_INCREMENT=1244 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菜单权限表'; -- ---------------------------- -- Records of system_menu @@ -2920,7 +3227,7 @@ INSERT INTO `system_menu` VALUES (1086, '日志导出', 'infra:api-error-log:exp 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'); 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'); 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'); -INSERT INTO `system_menu` VALUES (1090, '文件管理', '', 2, 5, 2, 'file', 'upload', 'infra/file/index', 0, '', '2021-03-12 20:16:20', '1', '2022-03-11 00:30:17', b'0'); +INSERT INTO `system_menu` VALUES (1090, '文件列表', '', 2, 5, 1243, 'file', 'upload', 'infra/file/index', 0, '', '2021-03-12 20:16:20', '1', '2022-03-16 23:48:19', b'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'); 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'); 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'); @@ -3021,10 +3328,6 @@ INSERT INTO `system_menu` VALUES (1199, '模型发布', 'bpm:model:deploy', 3, 6 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'); 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'); 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'); -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'); -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'); -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'); -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'); 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'); 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'); 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'); @@ -3049,6 +3352,13 @@ INSERT INTO `system_menu` VALUES (1227, '租户套餐创建', 'system:tenant-pac INSERT INTO `system_menu` VALUES (1228, '租户套餐更新', 'system:tenant-package:update', 3, 3, 1225, '', '', '', 0, '', '2022-02-19 17:44:06', '', '2022-02-19 17:44:06', b'0'); INSERT INTO `system_menu` VALUES (1229, '租户套餐删除', 'system:tenant-package:delete', 3, 4, 1225, '', '', '', 0, '', '2022-02-19 17:44:06', '', '2022-02-19 17:44:06', b'0'); INSERT INTO `system_menu` VALUES (1230, '租户套餐导出', 'system:tenant-package:export', 3, 5, 1225, '', '', '', 0, '', '2022-02-19 17:44:06', '', '2022-02-20 14:09:34', b'1'); +INSERT INTO `system_menu` VALUES (1237, '文件配置', '', 2, 0, 1243, 'file-config', 'config', 'infra/fileConfig/index', 0, '', '2022-03-15 14:35:28', '1', '2022-03-16 23:49:31', b'0'); +INSERT INTO `system_menu` VALUES (1238, '文件配置查询', 'infra:file-config:query', 3, 1, 1237, '', '', '', 0, '', '2022-03-15 14:35:28', '', '2022-03-15 14:35:28', b'0'); +INSERT INTO `system_menu` VALUES (1239, '文件配置创建', 'infra:file-config:create', 3, 2, 1237, '', '', '', 0, '', '2022-03-15 14:35:28', '', '2022-03-15 14:35:28', b'0'); +INSERT INTO `system_menu` VALUES (1240, '文件配置更新', 'infra:file-config:update', 3, 3, 1237, '', '', '', 0, '', '2022-03-15 14:35:28', '', '2022-03-15 14:35:28', b'0'); +INSERT INTO `system_menu` VALUES (1241, '文件配置删除', 'infra:file-config:delete', 3, 4, 1237, '', '', '', 0, '', '2022-03-15 14:35:28', '', '2022-03-15 14:35:28', b'0'); +INSERT INTO `system_menu` VALUES (1242, '文件配置导出', 'infra:file-config:export', 3, 5, 1237, '', '', '', 0, '', '2022-03-15 14:35:28', '', '2022-03-15 14:35:28', b'0'); +INSERT INTO `system_menu` VALUES (1243, '文件管理', '', 2, 5, 2, 'file', 'download', NULL, 0, '1', '2022-03-16 23:47:40', '1', '2022-03-16 23:48:27', b'0'); COMMIT; -- ---------------------------- @@ -3112,7 +3422,7 @@ CREATE TABLE `system_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=1480 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志记录'; +) ENGINE=InnoDB AUTO_INCREMENT=1619 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志记录'; -- ---------------------------- -- Records of system_operate_log @@ -3449,6 +3759,145 @@ INSERT INTO `system_operate_log` VALUES (1476, '', 1, 2, '管理后台 - 菜单' INSERT INTO `system_operate_log` VALUES (1477, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"链路追踪\",\"permission\":\"\",\"type\":2,\"sort\":13,\"parentId\":2,\"path\":\"skywalking\",\"icon\":\"eye-open\",\"component\":\"infra/skywalking\",\"status\":0,\"id\":1077}}', '2022-03-11 00:31:12', 39, 0, '', 'true', NULL, '2022-03-11 00:31:12', NULL, '2022-03-11 00:31:12', b'0', 1); INSERT INTO `system_operate_log` VALUES (1478, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"日志中心\",\"permission\":\"\",\"type\":2,\"sort\":14,\"parentId\":2,\"path\":\"log-center\",\"icon\":\"log\",\"component\":\"infra/skywalking/log\",\"status\":0,\"id\":1116}}', '2022-03-11 00:31:27', 39, 0, '', 'true', NULL, '2022-03-11 00:31:27', NULL, '2022-03-11 00:31:27', b'0', 1); INSERT INTO `system_operate_log` VALUES (1479, '', 1, 2, '管理后台 - 代码生成器', '更新数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.updateCodegen(CodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"scene\":1,\"tableName\":\"tool_test_demo\",\"tableComment\":\"字典类型表\",\"remark\":null,\"moduleName\":\"tool\",\"businessName\":\"test\",\"className\":\"TestDemo\",\"classComment\":\"字典类型\",\"author\":\"芋道源码\",\"templateType\":1,\"parentMenuId\":null,\"id\":53},\"columns\":[{\"tableId\":53,\"columnName\":\"id\",\"columnType\":\"bigint\",\"columnComment\":\"编号\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":649},{\"tableId\":53,\"columnName\":\"name\",\"columnType\":\"varchar(100)\",\"columnComment\":\"名字\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":650},{\"tableId\":53,\"columnName\":\"status\",\"columnType\":\"tinyint\",\"columnComment\":\"状态\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"status\",\"dictType\":\"user_type\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":651},{\"tableId\":53,\"columnName\":\"type\",\"columnType\":\"tinyint\",\"columnComment\":\"类型\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"Integer\",\"javaField\":\"type\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"select\",\"id\":652},{\"tableId\":53,\"columnName\":\"category\",\"columnType\":\"tinyint\",\"columnComment\":\"分类\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"Integer\",\"javaField\":\"category\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":653},{\"tableId\":53,\"columnName\":\"remark\",\"columnType\":\"varchar(500)\",\"columnComment\":\"备注\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"remark\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":654},{\"tableId\":53,\"columnName\":\"creator\",\"columnType\":\"varchar(64)\",\"columnComment\":\"创建者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"String\",\"javaField\":\"creator\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":655},{\"tableId\":53,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"创建时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":true,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":656},{\"tableId\":53,\"columnName\":\"updater\",\"columnType\":\"varchar(64)\",\"columnComment\":\"更新者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"String\",\"javaField\":\"updater\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":657},{\"tableId\":53,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"更新时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":658},{\"tableId\":53,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否删除\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":659}]}}', '2022-03-11 00:37:54', 110, 0, '', 'true', NULL, '2022-03-11 00:37:54', NULL, '2022-03-11 00:37:54', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1480, '', 1, 2, '管理后台 - 代码生成器', '更新数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.updateCodegen(CodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"scene\":1,\"tableName\":\"infra_test_demo\",\"tableComment\":\"字典类型表\",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"test\",\"className\":\"TestDemo\",\"classComment\":\"字典类型\",\"author\":\"芋道源码\",\"templateType\":1,\"parentMenuId\":null,\"id\":53},\"columns\":[{\"tableId\":53,\"columnName\":\"id\",\"columnType\":\"bigint\",\"columnComment\":\"编号\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":649},{\"tableId\":53,\"columnName\":\"name\",\"columnType\":\"varchar(100)\",\"columnComment\":\"名字\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":650},{\"tableId\":53,\"columnName\":\"status\",\"columnType\":\"tinyint\",\"columnComment\":\"状态\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"status\",\"dictType\":\"user_type\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":651},{\"tableId\":53,\"columnName\":\"type\",\"columnType\":\"tinyint\",\"columnComment\":\"类型\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"Integer\",\"javaField\":\"type\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"select\",\"id\":652},{\"tableId\":53,\"columnName\":\"category\",\"columnType\":\"tinyint\",\"columnComment\":\"分类\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"Integer\",\"javaField\":\"category\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":653},{\"tableId\":53,\"columnName\":\"remark\",\"columnType\":\"varchar(500)\",\"columnComment\":\"备注\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"remark\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":654},{\"tableId\":53,\"columnName\":\"creator\",\"columnType\":\"varchar(64)\",\"columnComment\":\"创建者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"String\",\"javaField\":\"creator\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":655},{\"tableId\":53,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"创建时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":true,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":656},{\"tableId\":53,\"columnName\":\"updater\",\"columnType\":\"varchar(64)\",\"columnComment\":\"更新者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"String\",\"javaField\":\"updater\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":657},{\"tableId\":53,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"更新时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":658},{\"tableId\":53,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否删除\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":659}]}}', '2022-03-11 23:07:37', 133, 0, '', 'true', NULL, '2022-03-11 23:07:37', NULL, '2022-03-11 23:07:37', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1481, '', 1, 2, '管理后台 - 代码生成器', '更新数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.updateCodegen(CodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"scene\":1,\"tableName\":\"infra_test_demo\",\"tableComment\":\"字典类型表\",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"test\",\"className\":\"TestDemoDO\",\"classComment\":\"字典类型\",\"author\":\"芋道源码\",\"templateType\":1,\"parentMenuId\":null,\"id\":53},\"columns\":[{\"tableId\":53,\"columnName\":\"id\",\"columnType\":\"bigint\",\"columnComment\":\"编号\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":649},{\"tableId\":53,\"columnName\":\"name\",\"columnType\":\"varchar(100)\",\"columnComment\":\"名字\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":650},{\"tableId\":53,\"columnName\":\"status\",\"columnType\":\"tinyint\",\"columnComment\":\"状态\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"status\",\"dictType\":\"user_type\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":651},{\"tableId\":53,\"columnName\":\"type\",\"columnType\":\"tinyint\",\"columnComment\":\"类型\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"Integer\",\"javaField\":\"type\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"select\",\"id\":652},{\"tableId\":53,\"columnName\":\"category\",\"columnType\":\"tinyint\",\"columnComment\":\"分类\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"Integer\",\"javaField\":\"category\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":653},{\"tableId\":53,\"columnName\":\"remark\",\"columnType\":\"varchar(500)\",\"columnComment\":\"备注\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"remark\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":654},{\"tableId\":53,\"columnName\":\"creator\",\"columnType\":\"varchar(64)\",\"columnComment\":\"创建者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"String\",\"javaField\":\"creator\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":655},{\"tableId\":53,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"创建时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":true,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":656},{\"tableId\":53,\"columnName\":\"updater\",\"columnType\":\"varchar(64)\",\"columnComment\":\"更新者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"String\",\"javaField\":\"updater\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":657},{\"tableId\":53,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"更新时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":658},{\"tableId\":53,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否删除\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":659}]}}', '2022-03-11 23:08:20', 101, 0, '', 'true', NULL, '2022-03-11 23:08:20', NULL, '2022-03-11 23:08:20', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1482, '', 1, 2, '管理后台 - 代码生成器', '更新数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.updateCodegen(CodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"scene\":1,\"tableName\":\"infra_test_demo\",\"tableComment\":\"字典类型表\",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"test\",\"className\":\"TestDemo\",\"classComment\":\"字典类型\",\"author\":\"芋道源码\",\"templateType\":1,\"parentMenuId\":null,\"id\":53},\"columns\":[{\"tableId\":53,\"columnName\":\"id\",\"columnType\":\"bigint\",\"columnComment\":\"编号\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":649},{\"tableId\":53,\"columnName\":\"name\",\"columnType\":\"varchar(100)\",\"columnComment\":\"名字\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":650},{\"tableId\":53,\"columnName\":\"status\",\"columnType\":\"tinyint\",\"columnComment\":\"状态\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"status\",\"dictType\":\"user_type\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":651},{\"tableId\":53,\"columnName\":\"type\",\"columnType\":\"tinyint\",\"columnComment\":\"类型\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"Integer\",\"javaField\":\"type\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"select\",\"id\":652},{\"tableId\":53,\"columnName\":\"category\",\"columnType\":\"tinyint\",\"columnComment\":\"分类\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"Integer\",\"javaField\":\"category\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":653},{\"tableId\":53,\"columnName\":\"remark\",\"columnType\":\"varchar(500)\",\"columnComment\":\"备注\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"remark\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":654},{\"tableId\":53,\"columnName\":\"creator\",\"columnType\":\"varchar(64)\",\"columnComment\":\"创建者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"String\",\"javaField\":\"creator\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":655},{\"tableId\":53,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"创建时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":true,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":656},{\"tableId\":53,\"columnName\":\"updater\",\"columnType\":\"varchar(64)\",\"columnComment\":\"更新者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"String\",\"javaField\":\"updater\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":657},{\"tableId\":53,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"更新时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":658},{\"tableId\":53,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否删除\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":659}]}}', '2022-03-11 23:12:18', 163, 0, '', 'true', NULL, '2022-03-11 23:12:18', NULL, '2022-03-11 23:12:18', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1483, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,创建代码生成器的表和字段定义', 2, '', '', 'POST', '/admin-api/infra/codegen/create-list-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(List)', '{\"tableNames\":[\"system_group\"]}', '2022-03-12 00:32:45', 166, 0, '', '[56]', NULL, '2022-03-12 00:32:45', NULL, '2022-03-12 00:32:45', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1484, '', 1, 2, '管理后台 - 代码生成器', '删除数据库的表和字段定义', 4, '', '', 'DELETE', '/admin-api/infra/codegen/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.deleteCodegen(Long)', '{\"tableId\":56}', '2022-03-12 00:37:49', 48, 0, '', 'true', NULL, '2022-03-12 00:37:49', NULL, '2022-03-12 00:37:49', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1485, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,创建代码生成器的表和字段定义', 2, '', '', 'POST', '/admin-api/infra/codegen/create-list-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(List)', '{\"tableNames\":[\"system_group\"]}', '2022-03-12 00:43:20', 3169, 0, '', '[57]', NULL, '2022-03-12 00:43:23', NULL, '2022-03-12 00:43:23', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1486, '', 1, 2, '管理后台 - 代码生成器', '删除数据库的表和字段定义', 4, '', '', 'DELETE', '/admin-api/infra/codegen/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.deleteCodegen(Long)', '{\"tableId\":57}', '2022-03-12 00:46:34', 53, 0, '', 'true', NULL, '2022-03-12 00:46:34', NULL, '2022-03-12 00:46:34', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1487, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,创建代码生成器的表和字段定义', 2, '', '', 'POST', '/admin-api/infra/codegen/create-list-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(List)', '{\"tableNames\":[\"system_group\"]}', '2022-03-12 00:46:45', 149, 0, '', '[58]', NULL, '2022-03-12 00:46:45', NULL, '2022-03-12 00:46:45', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1488, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,同步数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/sync-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.syncCodegenFromDB(Long)', '{\"tableId\":58}', '2022-03-12 01:06:44', 62, 0, '', 'true', NULL, '2022-03-12 01:06:44', NULL, '2022-03-12 01:06:44', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1489, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,同步数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/sync-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.syncCodegenFromDB(Long)', '{\"tableId\":58}', '2022-03-12 01:06:57', 45, 500, 'ServiceException: 同步失败,不存在改变', 'null', NULL, '2022-03-12 01:06:57', NULL, '2022-03-12 01:06:57', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1490, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,同步数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/sync-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.syncCodegenFromDB(Long)', '{\"tableId\":58}', '2022-03-12 01:07:06', 45, 500, 'ServiceException: 同步失败,不存在改变', 'null', NULL, '2022-03-12 01:07:06', NULL, '2022-03-12 01:07:06', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1491, '', 1, 2, '管理后台 - 代码生成器', '删除数据库的表和字段定义', 4, '', '', 'DELETE', '/admin-api/infra/codegen/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.deleteCodegen(Long)', '{\"tableId\":58}', '2022-03-12 01:07:22', 36, 0, '', 'true', NULL, '2022-03-12 01:07:22', NULL, '2022-03-12 01:07:22', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1492, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,创建代码生成器的表和字段定义', 2, '', '', 'POST', '/admin-api/infra/codegen/create-list-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(List)', '{\"tableNames\":[\"system_group\"]}', '2022-03-12 01:08:06', 114, 0, '', '[59]', NULL, '2022-03-12 01:08:06', NULL, '2022-03-12 01:08:06', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1493, '', 1, 2, '管理后台 - 代码生成器', '更新数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.updateCodegen(CodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"scene\":1,\"tableName\":\"system_group\",\"tableComment\":\"用户组\",\"remark\":null,\"moduleName\":\"system\",\"businessName\":\"group\",\"className\":\"Group\",\"classComment\":\"用户组\",\"author\":\"芋道源码\",\"templateType\":1,\"parentMenuId\":1,\"id\":59,\"parentMenuIdValid\":true},\"columns\":[{\"tableId\":59,\"columnName\":\"id\",\"columnType\":\"bigint\",\"columnComment\":\"编号\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":\"1024\",\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":712},{\"tableId\":59,\"columnName\":\"name\",\"columnType\":\"varchar(255)\",\"columnComment\":\"名字\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":\"芋道\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":713},{\"tableId\":59,\"columnName\":\"description\",\"columnType\":\"varchar(512)\",\"columnComment\":\"描述\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"String\",\"javaField\":\"description\",\"dictType\":\"\",\"example\":\"我是个小组\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":714},{\"tableId\":59,\"columnName\":\"status\",\"columnType\":\"tinyint\",\"columnComment\":\"状态\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"Integer\",\"javaField\":\"status\",\"dictType\":\"common_status\",\"example\":\"0\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"select\",\"id\":715},{\"tableId\":59,\"columnName\":\"creator\",\"columnType\":\"varchar(64)\",\"columnComment\":\"创建者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"String\",\"javaField\":\"creator\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":716},{\"tableId\":59,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"创建时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":true,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":717},{\"tableId\":59,\"columnName\":\"updater\",\"columnType\":\"varchar(64)\",\"columnComment\":\"更新者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"String\",\"javaField\":\"updater\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":718},{\"tableId\":59,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"更新时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":719},{\"tableId\":59,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否删除\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":720},{\"tableId\":59,\"columnName\":\"tenant_id\",\"columnType\":\"bigint\",\"columnComment\":\"租户编号\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Long\",\"javaField\":\"tenantId\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":721}]}}', '2022-03-12 14:47:50', 112, 0, '', 'true', NULL, '2022-03-12 14:47:50', NULL, '2022-03-12 14:47:50', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1494, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,创建代码生成器的表和字段定义', 2, '', '', 'POST', '/admin-api/infra/codegen/create-list-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(List)', '{\"tableNames\":[\"bpm_oa_leave\"]}', '2022-03-12 14:56:05', 208, 0, '', '[60]', NULL, '2022-03-12 14:56:05', NULL, '2022-03-12 14:56:05', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1495, '', 1, 2, '管理后台 - 代码生成器', '删除数据库的表和字段定义', 4, '', '', 'DELETE', '/admin-api/infra/codegen/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.deleteCodegen(Long)', '{\"tableId\":60}', '2022-03-12 14:56:16', 41, 0, '', 'true', NULL, '2022-03-12 14:56:16', NULL, '2022-03-12 14:56:16', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1496, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,创建代码生成器的表和字段定义', 2, '', '', 'POST', '/admin-api/infra/codegen/create-list-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(List)', '{\"tableNames\":[\"bpm_oa_leave\"]}', '2022-03-12 14:57:00', 131459, 0, '', '[61]', NULL, '2022-03-12 14:59:11', NULL, '2022-03-12 14:59:11', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1497, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,创建代码生成器的表和字段定义', 2, '', '', 'POST', '/admin-api/infra/codegen/create-list-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(List)', '{\"tableNames\":[\"bpm_oa_leave\"]}', '2022-03-12 15:01:00', 80, 500, 'ServiceException: 表定义已经存在', 'null', NULL, '2022-03-12 15:01:00', NULL, '2022-03-12 15:01:00', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1498, '', 1, 2, '管理后台 - 代码生成器', '删除数据库的表和字段定义', 4, '', '', 'DELETE', '/admin-api/infra/codegen/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.deleteCodegen(Long)', '{\"tableId\":61}', '2022-03-12 15:01:06', 52, 0, '', 'true', NULL, '2022-03-12 15:01:06', NULL, '2022-03-12 15:01:06', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1499, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,创建代码生成器的表和字段定义', 2, '', '', 'POST', '/admin-api/infra/codegen/create-list-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(List)', '{\"tableNames\":[\"bpm_oa_leave\"]}', '2022-03-12 15:01:25', 3187, 0, '', '[62]', NULL, '2022-03-12 15:01:28', NULL, '2022-03-12 15:01:28', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1500, '', 1, 2, '管理后台 - 用户', '重置用户密码', 3, '', '', 'PUT', '/admin-api/system/user/update-password', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.user.UserController.updateUserPassword(UserUpdatePasswordReqVO)', '{\"reqVO\":{\"id\":104,\"password\":\"test\"}}', '2022-03-12 17:55:24', 120, 0, '', 'true', NULL, '2022-03-12 17:55:24', NULL, '2022-03-12 17:55:24', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1501, '', 104, 2, '管理后台 - 用户个人中心', '修改用户个人信息', 3, '', '', 'PUT', '/admin-api/system/user/profile/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.user.UserProfileController.updateUserProfile(UserProfileUpdateReqVO)', '{\"reqVO\":{\"nickname\":\"测试号\",\"email\":\"111@qq.com\",\"mobile\":\"15601691200\",\"sex\":1}}', '2022-03-12 18:01:28', 94, 0, '', 'true', NULL, '2022-03-12 18:01:28', NULL, '2022-03-12 18:01:28', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1502, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,创建代码生成器的表和字段定义', 2, '', '', 'POST', '/admin-api/infra/codegen/create-list-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(List)', '{\"tableNames\":[\"infra_file_config\"]}', '2022-03-15 00:22:52', 190, 0, '', '[63]', NULL, '2022-03-15 00:22:52', NULL, '2022-03-15 00:22:52', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1503, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,同步数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/sync-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.syncCodegenFromDB(Long)', '{\"tableId\":63}', '2022-03-15 00:23:25', 47, 500, 'ServiceException: 同步失败,不存在改变', 'null', NULL, '2022-03-15 00:23:25', NULL, '2022-03-15 00:23:25', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1504, '', 1, 2, '管理后台 - 代码生成器', '删除数据库的表和字段定义', 4, '', '', 'DELETE', '/admin-api/infra/codegen/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.deleteCodegen(Long)', '{\"tableId\":63}', '2022-03-15 00:23:33', 42, 0, '', 'true', NULL, '2022-03-15 00:23:33', NULL, '2022-03-15 00:23:33', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1505, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,创建代码生成器的表和字段定义', 2, '', '', 'POST', '/admin-api/infra/codegen/create-list-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(List)', '{\"tableNames\":[\"infra_file_config\"]}', '2022-03-15 00:23:42', 136, 0, '', '[64]', NULL, '2022-03-15 00:23:42', NULL, '2022-03-15 00:23:42', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1506, '', 1, 2, '管理后台 - 字典类型', '创建字典类型', 2, '', '', 'POST', '/admin-api/system/dict-type/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.dict.DictTypeController.createDictType(DictTypeCreateReqVO)', '{\"reqVO\":{\"name\":\"文件存储器\",\"status\":0,\"remark\":\"文件存储器\",\"type\":\"infra_file_storage\"}}', '2022-03-15 00:24:38', 28, 0, '', '146', NULL, '2022-03-15 00:24:38', NULL, '2022-03-15 00:24:38', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1507, '', 1, 2, '管理后台 - 字典数据', '新增字典数据', 2, '', '', 'POST', '/admin-api/system/dict-data/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.dict.DictDataController.createDictData(DictDataCreateReqVO)', '{\"reqVO\":{\"sort\":1,\"label\":\"数据库\",\"value\":\"1\",\"dictType\":\"infra_file_storage\",\"status\":0,\"colorType\":\"default\",\"cssClass\":null,\"remark\":null}}', '2022-03-15 00:25:28', 35, 0, '', '1150', NULL, '2022-03-15 00:25:28', NULL, '2022-03-15 00:25:28', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1508, '', 1, 2, '管理后台 - 字典数据', '新增字典数据', 2, '', '', 'POST', '/admin-api/system/dict-data/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.dict.DictDataController.createDictData(DictDataCreateReqVO)', '{\"reqVO\":{\"sort\":0,\"label\":\"10\",\"value\":\"本地磁盘\",\"dictType\":\"infra_file_storage\",\"status\":0,\"colorType\":\"default\",\"cssClass\":null,\"remark\":null}}', '2022-03-15 00:25:41', 31, 0, '', '1151', NULL, '2022-03-15 00:25:41', NULL, '2022-03-15 00:25:41', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1509, '', 1, 2, '管理后台 - 字典数据', '修改字典数据', 3, '', '', 'PUT', '/admin-api/system/dict-data/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.dict.DictDataController.updateDictData(DictDataUpdateReqVO)', '{\"reqVO\":{\"sort\":10,\"label\":\"本地磁盘\",\"value\":\"10\",\"dictType\":\"infra_file_storage\",\"status\":0,\"colorType\":\"default\",\"cssClass\":\"\",\"remark\":null,\"id\":1151}}', '2022-03-15 00:25:56', 40, 0, '', 'true', NULL, '2022-03-15 00:25:56', NULL, '2022-03-15 00:25:56', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1510, '', 1, 2, '管理后台 - 字典数据', '新增字典数据', 2, '', '', 'POST', '/admin-api/system/dict-data/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.dict.DictDataController.createDictData(DictDataCreateReqVO)', '{\"reqVO\":{\"sort\":0,\"label\":\"FTP 服务器\",\"value\":\"11\",\"dictType\":\"infra_file_storage\",\"status\":0,\"colorType\":\"default\",\"cssClass\":null,\"remark\":null}}', '2022-03-15 00:26:06', 29, 0, '', '1152', NULL, '2022-03-15 00:26:06', NULL, '2022-03-15 00:26:06', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1511, '', 1, 2, '管理后台 - 字典数据', '修改字典数据', 3, '', '', 'PUT', '/admin-api/system/dict-data/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.dict.DictDataController.updateDictData(DictDataUpdateReqVO)', '{\"reqVO\":{\"sort\":11,\"label\":\"FTP 服务器\",\"value\":\"11\",\"dictType\":\"infra_file_storage\",\"status\":0,\"colorType\":\"default\",\"cssClass\":\"\",\"remark\":null,\"id\":1152}}', '2022-03-15 00:26:10', 39, 0, '', 'true', NULL, '2022-03-15 00:26:10', NULL, '2022-03-15 00:26:10', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1512, '', 1, 2, '管理后台 - 字典数据', '新增字典数据', 2, '', '', 'POST', '/admin-api/system/dict-data/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.dict.DictDataController.createDictData(DictDataCreateReqVO)', '{\"reqVO\":{\"sort\":12,\"label\":\"SFTP 服务器\",\"value\":\"12\",\"dictType\":\"infra_file_storage\",\"status\":0,\"colorType\":\"default\",\"cssClass\":null,\"remark\":null}}', '2022-03-15 00:26:22', 29, 0, '', '1153', NULL, '2022-03-15 00:26:22', NULL, '2022-03-15 00:26:22', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1513, '', 1, 2, '管理后台 - 字典数据', '新增字典数据', 2, '', '', 'POST', '/admin-api/system/dict-data/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.dict.DictDataController.createDictData(DictDataCreateReqVO)', '{\"reqVO\":{\"sort\":20,\"label\":\"S3\",\"value\":\"20\",\"dictType\":\"infra_file_storage\",\"status\":0,\"colorType\":\"default\",\"cssClass\":null,\"remark\":null}}', '2022-03-15 00:26:31', 28, 0, '', '1154', NULL, '2022-03-15 00:26:31', NULL, '2022-03-15 00:26:31', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1514, '', 1, 2, '管理后台 - 字典数据', '修改字典数据', 3, '', '', 'PUT', '/admin-api/system/dict-data/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.dict.DictDataController.updateDictData(DictDataUpdateReqVO)', '{\"reqVO\":{\"sort\":20,\"label\":\"S3 对象存储\",\"value\":\"20\",\"dictType\":\"infra_file_storage\",\"status\":0,\"colorType\":\"default\",\"cssClass\":\"\",\"remark\":null,\"id\":1154}}', '2022-03-15 00:26:45', 37, 0, '', 'true', NULL, '2022-03-15 00:26:45', NULL, '2022-03-15 00:26:45', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1515, '', 1, 2, '管理后台 - 代码生成器', '更新数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.updateCodegen(CodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"scene\":1,\"tableName\":\"infra_file_config\",\"tableComment\":\"文件配置表\",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"fileConfig\",\"className\":\"FileConfig\",\"classComment\":\"文件配置\",\"author\":\"芋道源码\",\"templateType\":1,\"parentMenuId\":1,\"id\":64,\"parentMenuIdValid\":true},\"columns\":[{\"tableId\":64,\"columnName\":\"id\",\"columnType\":\"bigint\",\"columnComment\":\"编号\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":\"1\",\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":778},{\"tableId\":64,\"columnName\":\"name\",\"columnType\":\"varchar(63)\",\"columnComment\":\"配置名\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":\"S3 - 阿里云\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":779},{\"tableId\":64,\"columnName\":\"storage\",\"columnType\":\"tinyint\",\"columnComment\":\"存储器\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"storage\",\"dictType\":\"infra_file_storage\",\"example\":\"1\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":780},{\"tableId\":64,\"columnName\":\"remark\",\"columnType\":\"varchar(255)\",\"columnComment\":\"备注\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"String\",\"javaField\":\"remark\",\"dictType\":\"\",\"example\":\"我是备注\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":781},{\"tableId\":64,\"columnName\":\"primary\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否为主配置\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"Boolean\",\"javaField\":\"primary\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":782},{\"tableId\":64,\"columnName\":\"config\",\"columnType\":\"varchar(4096)\",\"columnComment\":\"存储配置\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"config\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":783},{\"tableId\":64,\"columnName\":\"creator\",\"columnType\":\"varchar(64)\",\"columnComment\":\"创建者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"String\",\"javaField\":\"creator\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":784},{\"tableId\":64,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"创建时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":true,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":785},{\"tableId\":64,\"columnName\":\"updater\",\"columnType\":\"varchar(64)\",\"columnComment\":\"更新者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"String\",\"javaField\":\"updater\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":786},{\"tableId\":64,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"更新时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":787},{\"tableId\":64,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否删除\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":788}]}}', '2022-03-15 00:28:22', 93, 0, '', 'true', NULL, '2022-03-15 00:28:22', NULL, '2022-03-15 00:28:22', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1516, '', 1, 2, '管理后台 - 代码生成器', '更新数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.updateCodegen(CodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"scene\":1,\"tableName\":\"infra_file_config\",\"tableComment\":\"文件配置表\",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"fileConfig\",\"className\":\"FileConfig\",\"classComment\":\"文件配置\",\"author\":\"芋道源码\",\"templateType\":1,\"parentMenuId\":1,\"id\":64,\"parentMenuIdValid\":true},\"columns\":[{\"tableId\":64,\"columnName\":\"id\",\"columnType\":\"bigint\",\"columnComment\":\"编号\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":\"1\",\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":778},{\"tableId\":64,\"columnName\":\"name\",\"columnType\":\"varchar(63)\",\"columnComment\":\"配置名\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":\"S3 - 阿里云\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":779},{\"tableId\":64,\"columnName\":\"storage\",\"columnType\":\"tinyint\",\"columnComment\":\"存储器\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"storage\",\"dictType\":\"infra_file_storage\",\"example\":\"1\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":780},{\"tableId\":64,\"columnName\":\"remark\",\"columnType\":\"varchar(255)\",\"columnComment\":\"备注\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"String\",\"javaField\":\"remark\",\"dictType\":\"\",\"example\":\"我是备注\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":781},{\"tableId\":64,\"columnName\":\"primary\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否为主配置\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"Boolean\",\"javaField\":\"primary\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":782},{\"tableId\":64,\"columnName\":\"config\",\"columnType\":\"varchar(4096)\",\"columnComment\":\"存储配置\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"config\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":783},{\"tableId\":64,\"columnName\":\"creator\",\"columnType\":\"varchar(64)\",\"columnComment\":\"创建者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"String\",\"javaField\":\"creator\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":784},{\"tableId\":64,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"创建时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":true,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":785},{\"tableId\":64,\"columnName\":\"updater\",\"columnType\":\"varchar(64)\",\"columnComment\":\"更新者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"String\",\"javaField\":\"updater\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":786},{\"tableId\":64,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"更新时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":787},{\"tableId\":64,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否删除\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":788}]}}', '2022-03-15 00:28:48', 85, 0, '', 'true', NULL, '2022-03-15 00:28:48', NULL, '2022-03-15 00:28:48', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1517, '', 1, 2, '管理后台 - 代码生成器', '更新数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.updateCodegen(CodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"scene\":1,\"tableName\":\"infra_file_config\",\"tableComment\":\"文件配置表\",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"fileConfig\",\"className\":\"FileConfig\",\"classComment\":\"文件配置\",\"author\":\"芋道源码\",\"templateType\":1,\"parentMenuId\":1,\"id\":64,\"parentMenuIdValid\":true},\"columns\":[{\"tableId\":64,\"columnName\":\"id\",\"columnType\":\"bigint\",\"columnComment\":\"编号\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":\"1\",\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":778},{\"tableId\":64,\"columnName\":\"name\",\"columnType\":\"varchar(63)\",\"columnComment\":\"配置名\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":\"S3 - 阿里云\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":779},{\"tableId\":64,\"columnName\":\"storage\",\"columnType\":\"tinyint\",\"columnComment\":\"存储器\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"storage\",\"dictType\":\"infra_file_storage\",\"example\":\"1\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":780},{\"tableId\":64,\"columnName\":\"remark\",\"columnType\":\"varchar(255)\",\"columnComment\":\"备注\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"String\",\"javaField\":\"remark\",\"dictType\":\"\",\"example\":\"我是备注\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":781},{\"tableId\":64,\"columnName\":\"primary\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否为主配置\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"Boolean\",\"javaField\":\"primary\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":782},{\"tableId\":64,\"columnName\":\"config\",\"columnType\":\"varchar(4096)\",\"columnComment\":\"存储配置\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"config\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":783},{\"tableId\":64,\"columnName\":\"creator\",\"columnType\":\"varchar(64)\",\"columnComment\":\"创建者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"String\",\"javaField\":\"creator\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":784},{\"tableId\":64,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"创建时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":true,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":785},{\"tableId\":64,\"columnName\":\"updater\",\"columnType\":\"varchar(64)\",\"columnComment\":\"更新者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"String\",\"javaField\":\"updater\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":786},{\"tableId\":64,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"更新时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":787},{\"tableId\":64,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否删除\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":788}]}}', '2022-03-15 00:28:55', 79, 0, '', 'true', NULL, '2022-03-15 00:28:55', NULL, '2022-03-15 00:28:55', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1518, '', 1, 2, '管理后台 - 代码生成器', '更新数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.updateCodegen(CodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"scene\":1,\"tableName\":\"infra_file_config\",\"tableComment\":\"文件配置表\",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"file\",\"className\":\"FileConfig\",\"classComment\":\"文件配置\",\"author\":\"芋道源码\",\"templateType\":1,\"parentMenuId\":1,\"id\":64,\"parentMenuIdValid\":true},\"columns\":[{\"tableId\":64,\"columnName\":\"id\",\"columnType\":\"bigint\",\"columnComment\":\"编号\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":\"1\",\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":778},{\"tableId\":64,\"columnName\":\"name\",\"columnType\":\"varchar(63)\",\"columnComment\":\"配置名\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":\"S3 - 阿里云\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":779},{\"tableId\":64,\"columnName\":\"storage\",\"columnType\":\"tinyint\",\"columnComment\":\"存储器\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"storage\",\"dictType\":\"infra_file_storage\",\"example\":\"1\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":780},{\"tableId\":64,\"columnName\":\"remark\",\"columnType\":\"varchar(255)\",\"columnComment\":\"备注\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"String\",\"javaField\":\"remark\",\"dictType\":\"\",\"example\":\"我是备注\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":781},{\"tableId\":64,\"columnName\":\"primary\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否为主配置\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"Boolean\",\"javaField\":\"primary\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":782},{\"tableId\":64,\"columnName\":\"config\",\"columnType\":\"varchar(4096)\",\"columnComment\":\"存储配置\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"config\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":783},{\"tableId\":64,\"columnName\":\"creator\",\"columnType\":\"varchar(64)\",\"columnComment\":\"创建者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"String\",\"javaField\":\"creator\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":784},{\"tableId\":64,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"创建时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":true,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":785},{\"tableId\":64,\"columnName\":\"updater\",\"columnType\":\"varchar(64)\",\"columnComment\":\"更新者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"String\",\"javaField\":\"updater\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":786},{\"tableId\":64,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"更新时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":787},{\"tableId\":64,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否删除\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":788}]}}', '2022-03-15 00:31:30', 89, 0, '', 'true', NULL, '2022-03-15 00:31:30', NULL, '2022-03-15 00:31:30', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1519, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"本地\",\"remark\":\"\",\"storage\":20,\"config\":{}}}', '2022-03-15 19:49:57', 74, 500, 'SQLException: Field \'master\' doesn\'t have a default value', 'null', NULL, '2022-03-15 19:49:57', NULL, '2022-03-15 19:49:57', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1520, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"本地\",\"remark\":\"\",\"storage\":20,\"config\":{}}}', '2022-03-15 19:50:53', 25, 500, 'InvalidTypeIdException: Could not resolve subtype of [simple type, class cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig]: missing type id property \'@class\'\n at [Source: (String)\"{}\"; line: 1, column: 2]', 'null', NULL, '2022-03-15 19:50:53', NULL, '2022-03-15 19:50:53', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1521, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"本地\",\"remark\":\"\",\"storage\":20,\"config\":{}}}', '2022-03-15 19:51:39', 29944, 500, 'InvalidTypeIdException: Could not resolve subtype of [simple type, class cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig]: missing type id property \'@class\'\n at [Source: (String)\"{}\"; line: 1, column: 2]', 'null', NULL, '2022-03-15 19:52:09', NULL, '2022-03-15 19:52:09', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1522, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"本地\",\"remark\":\"\",\"storage\":20,\"config\":{}}}', '2022-03-15 20:39:11', 120, 500, 'NullPointerException: null', 'null', NULL, '2022-03-15 20:39:11', NULL, '2022-03-15 20:39:11', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1523, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"本地\",\"remark\":\"\",\"storage\":20,\"config\":{}}}', '2022-03-15 20:41:10', 92, 500, 'ConstraintViolationException: endpoint: endpoint 不能为空, region: region 不能为空, bucket: bucket 不能为空, accessKey: accessKey 不能为空, accessSecret: accessSecret 不能为空', 'null', NULL, '2022-03-15 20:41:10', NULL, '2022-03-15 20:41:10', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1524, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"本地\",\"remark\":\"\",\"storage\":20,\"config\":{\"accessKey\":\"LTAI5t5aV34DwxLioJGKbhSe\",\"accessSecret\":\"k403OCIRFc8EgPxTxv7WRsSecpnlED\",\"bucket\":\"yunai-aoteman\",\"endpoint\":\"oss-cn-beijing.aliyuncs.com\",\"region\":\"oss-cn-beijing\"}}}', '2022-03-15 20:43:34', 26, 0, '', '2', NULL, '2022-03-15 20:43:34', NULL, '2022-03-15 20:43:34', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1525, '', 1, 2, '管理后台 - 文件配置', '更新文件配置', 3, '', '', 'PUT', '/admin-api/infra/file-config/update', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfig(FileConfigUpdateReqVO)', '{\"updateReqVO\":{\"name\":\"本地\",\"remark\":\"\",\"id\":2,\"config\":{\"accessKey\":\"LTAI5t5aV34DwxLioJGKbhSe\",\"accessSecret\":\"k403OCIRFc8EgPxTxv7WRsSecpnlED\",\"bucket\":\"yunai-aoteman\",\"endpoint\":\"oss-cn-beijing.aliyuncs.com\",\"region\":\"oss-cn-beijing\"}}}', '2022-03-15 20:57:01', 13, 500, 'NullPointerException: null', 'null', NULL, '2022-03-15 20:57:01', NULL, '2022-03-15 20:57:01', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1526, '', 1, 2, '管理后台 - 文件配置', '更新文件配置', 3, '', '', 'PUT', '/admin-api/infra/file-config/update', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfig(FileConfigUpdateReqVO)', '{\"updateReqVO\":{\"name\":\"本地\",\"remark\":\"\",\"id\":2,\"config\":{\"accessKey\":\"LTAI5t5aV34DwxLioJGKbhSe\",\"accessSecret\":\"k403OCIRFc8EgPxTxv7WRsSecpnlED\",\"bucket\":\"yunai-aoteman\",\"endpoint\":\"oss-cn-beijing.aliyuncs.com\",\"region\":\"oss-cn-beijing\"}}}', '2022-03-15 21:06:32', 99, 0, '', 'true', NULL, '2022-03-15 21:06:32', NULL, '2022-03-15 21:06:32', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1527, '', 1, 2, '管理后台 - 文件配置', '更新文件配置', 3, '', '', 'PUT', '/admin-api/infra/file-config/update', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfig(FileConfigUpdateReqVO)', '{\"updateReqVO\":{\"name\":\"S3 - 阿里云\",\"remark\":\"\",\"id\":2,\"config\":{\"accessKey\":\"LTAI5t5aV34DwxLioJGKbhSe\",\"accessSecret\":\"k403OCIRFc8EgPxTxv7WRsSecpnlED\",\"bucket\":\"yunai-aoteman\",\"endpoint\":\"oss-cn-beijing.aliyuncs.com\",\"region\":\"oss-cn-beijing\"}}}', '2022-03-15 21:06:52', 22, 0, '', 'true', NULL, '2022-03-15 21:06:52', NULL, '2022-03-15 21:06:52', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1528, '', 1, 2, '管理后台 - 文件配置', '更新文件配置', 3, '', '', 'PUT', '/admin-api/infra/file-config/update', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfig(FileConfigUpdateReqVO)', '{\"updateReqVO\":{\"name\":\"S3 - 七牛云\",\"remark\":\"\",\"id\":2,\"config\":{\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\",\"bucket\":\"ruoyi-vue-pro\",\"endpoint\":\"oss-cn-beijing.aliyuncs.com\",\"domain\":\"http://test.yudao.iocoder.cn\",\"region\":\"oss-cn-beijing\"}}}', '2022-03-15 21:27:30', 89, 0, '', 'true', NULL, '2022-03-15 21:27:30', NULL, '2022-03-15 21:27:30', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1529, '', 1, 2, '管理后台 - 文件配置', '更新文件配置', 3, '', '', 'PUT', '/admin-api/infra/file-config/update', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfig(FileConfigUpdateReqVO)', '{\"updateReqVO\":{\"name\":\"S3 - 七牛云\",\"remark\":\"\",\"id\":2,\"config\":{\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\",\"bucket\":\"ruoyi-vue-pro\",\"endpoint\":\"s3-cn-south-1.qiniucs.com\",\"domain\":\"http://test.yudao.iocoder.cn\",\"region\":\"oss-cn-beijing\"}}}', '2022-03-15 22:17:59', 1416, 0, '', 'true', NULL, '2022-03-15 22:18:01', NULL, '2022-03-15 22:18:01', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1530, '', 1, 2, '管理后台 - 文件配置', '更新文件配置', 3, '', '', 'PUT', '/admin-api/infra/file-config/update', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfig(FileConfigUpdateReqVO)', '{\"updateReqVO\":{\"name\":\"S3 - 七牛云\",\"remark\":\"\",\"id\":2,\"config\":{\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\",\"bucket\":\"ruoyi-vue-pro\",\"endpoint\":\"s3-cn-south-1.qiniucs.com\",\"domain\":\"http://test.yudao.iocoder.cn\",\"region\":\"oss-cn-beijing\"}}}', '2022-03-15 22:18:13', 24, 0, '', 'true', NULL, '2022-03-15 22:18:20', NULL, '2022-03-15 22:18:20', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1531, '', 1, 2, '管理后台 - 文件配置', '更新文件配置', 3, '', '', 'PUT', '/admin-api/infra/file-config/update', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfig(FileConfigUpdateReqVO)', '{\"updateReqVO\":{\"name\":\"S3 - 七牛云\",\"remark\":\"\",\"id\":2,\"config\":{\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\",\"bucket\":\"ruoyi-vue-pro\",\"endpoint\":\"s3-cn-south-1.qiniucs.com\",\"domain\":\"http://test.yudao.iocoder.cn\",\"region\":\"oss-cn-beijing\"}}}', '2022-03-15 22:20:22', 88, 0, '', 'true', NULL, '2022-03-15 22:20:23', NULL, '2022-03-15 22:20:23', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1532, '', 1, 2, '管理后台 - 代码生成器', '更新数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.updateCodegen(CodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"scene\":1,\"tableName\":\"infra_file_config\",\"tableComment\":\"文件配置表\",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"file\",\"className\":\"FileConfig\",\"classComment\":\"文件配置\",\"author\":\"芋道源码\",\"templateType\":1,\"parentMenuId\":1,\"id\":64,\"parentMenuIdValid\":true},\"columns\":[{\"tableId\":64,\"columnName\":\"id\",\"columnType\":\"bigint\",\"columnComment\":\"编号\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":\"1\",\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":778},{\"tableId\":64,\"columnName\":\"name\",\"columnType\":\"varchar(63)\",\"columnComment\":\"配置名\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":\"S3 - 阿里云\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":779},{\"tableId\":64,\"columnName\":\"storage\",\"columnType\":\"tinyint\",\"columnComment\":\"存储器\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"storage\",\"dictType\":\"infra_file_storage\",\"example\":\"1\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":780},{\"tableId\":64,\"columnName\":\"remark\",\"columnType\":\"varchar(255)\",\"columnComment\":\"备注\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"String\",\"javaField\":\"remark\",\"dictType\":\"\",\"example\":\"我是备注\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":781},{\"tableId\":64,\"columnName\":\"primary\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否为主配置\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"Boolean\",\"javaField\":\"primary\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":782},{\"tableId\":64,\"columnName\":\"config\",\"columnType\":\"varchar(4096)\",\"columnComment\":\"存储配置\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"config\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":783},{\"tableId\":64,\"columnName\":\"creator\",\"columnType\":\"varchar(64)\",\"columnComment\":\"创建者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"String\",\"javaField\":\"creator\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":784},{\"tableId\":64,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"创建时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":true,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":785},{\"tableId\":64,\"columnName\":\"updater\",\"columnType\":\"varchar(64)\",\"columnComment\":\"更新者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"String\",\"javaField\":\"updater\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":786},{\"tableId\":64,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"更新时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":787},{\"tableId\":64,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否删除\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":788}]}}', '2022-03-15 22:50:58', 129, 0, '', 'true', NULL, '2022-03-15 22:50:58', NULL, '2022-03-15 22:50:58', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1533, '', 1, 2, '管理后台 - 代码生成器', '更新数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.updateCodegen(CodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"scene\":1,\"tableName\":\"infra_file_config\",\"tableComment\":\"文件配置表\",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"file\",\"className\":\"FileConfig\",\"classComment\":\"文件配置\",\"author\":\"芋道源码\",\"templateType\":1,\"parentMenuId\":1,\"id\":64,\"parentMenuIdValid\":true},\"columns\":[{\"tableId\":64,\"columnName\":\"id\",\"columnType\":\"bigint\",\"columnComment\":\"编号\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":\"1\",\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":778},{\"tableId\":64,\"columnName\":\"name\",\"columnType\":\"varchar(63)\",\"columnComment\":\"配置名\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":\"S3 - 阿里云\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":779},{\"tableId\":64,\"columnName\":\"storage\",\"columnType\":\"tinyint\",\"columnComment\":\"存储器\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"storage\",\"dictType\":\"infra_file_storage\",\"example\":\"1\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"select\",\"id\":780},{\"tableId\":64,\"columnName\":\"remark\",\"columnType\":\"varchar(255)\",\"columnComment\":\"备注\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"String\",\"javaField\":\"remark\",\"dictType\":\"\",\"example\":\"我是备注\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":781},{\"tableId\":64,\"columnName\":\"primary\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否为主配置\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"Boolean\",\"javaField\":\"primary\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":782},{\"tableId\":64,\"columnName\":\"config\",\"columnType\":\"varchar(4096)\",\"columnComment\":\"存储配置\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"config\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":783},{\"tableId\":64,\"columnName\":\"creator\",\"columnType\":\"varchar(64)\",\"columnComment\":\"创建者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"String\",\"javaField\":\"creator\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":784},{\"tableId\":64,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"创建时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":true,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":785},{\"tableId\":64,\"columnName\":\"updater\",\"columnType\":\"varchar(64)\",\"columnComment\":\"更新者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"String\",\"javaField\":\"updater\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":786},{\"tableId\":64,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"更新时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":787},{\"tableId\":64,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否删除\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":788}]}}', '2022-03-15 22:51:20', 99, 0, '', 'true', NULL, '2022-03-15 22:51:20', NULL, '2022-03-15 22:51:20', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1534, '', 1, 2, '管理后台 - 字典数据', '修改字典数据', 3, '', '', 'PUT', '/admin-api/system/dict-data/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.dict.DictDataController.updateDictData(DictDataUpdateReqVO)', '{\"reqVO\":{\"sort\":1,\"label\":\"是\",\"value\":\"true\",\"dictType\":\"infra_boolean_string\",\"status\":0,\"colorType\":\"danger\",\"cssClass\":\"\",\"remark\":\"Boolean 是否类型 - 是\",\"id\":45}}', '2022-03-15 23:01:45', 59, 0, '', 'true', NULL, '2022-03-15 23:01:45', NULL, '2022-03-15 23:01:45', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1535, '', 1, 2, '管理后台 - 字典数据', '修改字典数据', 3, '', '', 'PUT', '/admin-api/system/dict-data/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.dict.DictDataController.updateDictData(DictDataUpdateReqVO)', '{\"reqVO\":{\"sort\":1,\"label\":\"否\",\"value\":\"false\",\"dictType\":\"infra_boolean_string\",\"status\":0,\"colorType\":\"default\",\"cssClass\":\"\",\"remark\":\"Boolean 是否类型 - 否\",\"id\":46}}', '2022-03-15 23:01:49', 72, 0, '', 'true', NULL, '2022-03-15 23:01:49', NULL, '2022-03-15 23:01:49', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1536, '', 1, 2, '管理后台 - 字典数据', '修改字典数据', 3, '', '', 'PUT', '/admin-api/system/dict-data/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.dict.DictDataController.updateDictData(DictDataUpdateReqVO)', '{\"reqVO\":{\"sort\":1,\"label\":\"否\",\"value\":\"false\",\"dictType\":\"infra_boolean_string\",\"status\":0,\"colorType\":\"info\",\"cssClass\":\"\",\"remark\":\"Boolean 是否类型 - 否\",\"id\":46}}', '2022-03-15 23:09:45', 42, 0, '', 'true', NULL, '2022-03-15 23:09:45', NULL, '2022-03-15 23:09:45', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1537, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"测试\",\"remark\":null,\"storage\":20,\"config\":{\"endpoint\":\"1\",\"region\":\"2\",\"bucket\":\"3\",\"accessKey\":\"4\",\"accessSecret\":\"5\",\"domain\":\"6\"}}}', '2022-03-15 23:30:55', 41, 500, 'ConstraintViolationException: domain: domain 必须是 URL 格式', 'null', NULL, '2022-03-15 23:30:55', NULL, '2022-03-15 23:30:55', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1538, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"测试\",\"remark\":null,\"storage\":20,\"config\":{\"endpoint\":\"1\",\"region\":\"2\",\"bucket\":\"3\",\"accessKey\":\"4\",\"accessSecret\":\"5\",\"domain\":\"\"}}}', '2022-03-15 23:30:58', 23, 0, '', '3', NULL, '2022-03-15 23:30:58', NULL, '2022-03-15 23:30:58', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1539, '', 1, 2, '管理后台 - 文件配置', '删除文件配置', 4, '', '', 'DELETE', '/admin-api/infra/file-config/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.deleteFileConfig(Long)', '{\"id\":3}', '2022-03-15 23:40:28', 29, 0, '', 'true', NULL, '2022-03-15 23:40:28', NULL, '2022-03-15 23:40:28', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1540, '', 1, 2, '管理后台 - 文件配置', '删除文件配置', 4, '', '', 'DELETE', '/admin-api/infra/file-config/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.deleteFileConfig(Long)', '{\"id\":2}', '2022-03-15 23:45:53', 20, 500, 'ServiceException: 该文件配置不允许删除,原因:它是主配置,删除会导致无法上传文件', 'null', NULL, '2022-03-15 23:45:53', NULL, '2022-03-15 23:45:53', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1541, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"数据库\",\"remark\":\"我是数据库\",\"storage\":1,\"config\":{\"domain\":\"http://127.0.0.1:48080\"}}}', '2022-03-15 23:56:24', 37, 0, '', '4', NULL, '2022-03-15 23:56:24', NULL, '2022-03-15 23:56:24', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1542, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"本地磁盘\",\"remark\":\"测试下本地存储\",\"storage\":10,\"config\":{\"domain\":\"http://127.0.0.1:48080\",\"basePath\":\"/Users/yunai/file_test\"}}}', '2022-03-15 23:57:00', 17, 0, '', '5', NULL, '2022-03-15 23:57:00', NULL, '2022-03-15 23:57:00', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1543, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"FTP 服务器\",\"remark\":\"测试下 FTP\",\"storage\":11,\"config\":{\"port\":22,\"basePath\":\"/Users/yunai/file_test\",\"host\":\"127.0.0.1\",\"username\":\"root\",\"password\":\"password\",\"mode\":\"Active\",\"domain\":\"http://127.0.0.1:48080\"}}}', '2022-03-16 00:00:43', 23, 0, '', '6', NULL, '2022-03-16 00:00:43', NULL, '2022-03-16 00:00:43', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1544, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"SFTP 服务器\",\"remark\":null,\"storage\":12,\"config\":{\"port\":23,\"domain\":\"http://127.0.0.1:48080\",\"username\":\"root\",\"password\":\"password\",\"host\":\"127.0.0.1\",\"basePath\":\"/Users/yunai/file_test\"}}}', '2022-03-16 00:02:02', 16, 0, '', '7', NULL, '2022-03-16 00:02:02', NULL, '2022-03-16 00:02:02', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1545, '', 1, 2, '管理后台 - 文件配置', '更新文件配置为 Master', 3, '', '', 'PUT', '/admin-api/infra/file-config/update-master', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfigMaster(Long)', '{\"id\":7}', '2022-03-16 00:20:34', 48, 0, '', 'true', NULL, '2022-03-16 00:20:34', NULL, '2022-03-16 00:20:34', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1546, '', 1, 2, '管理后台 - 文件配置', '更新文件配置为 Master', 3, '', '', 'PUT', '/admin-api/infra/file-config/update-master', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfigMaster(Long)', '{\"id\":2}', '2022-03-16 00:20:36', 34, 0, '', 'true', NULL, '2022-03-16 00:20:36', NULL, '2022-03-16 00:20:36', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1547, '', 1, 2, '管理后台 - 文件配置', '更新文件配置为 Master', 3, '', '', 'PUT', '/admin-api/infra/file-config/update-master', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfigMaster(Long)', '{\"id\":2}', '2022-03-16 00:20:46', 33, 0, '', 'true', NULL, '2022-03-16 00:20:46', NULL, '2022-03-16 00:20:46', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1548, '', 1, 2, '管理后台 - 文件配置', '更新文件配置为 Master', 3, '', '', 'PUT', '/admin-api/infra/file-config/update-master', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfigMaster(Long)', '{\"id\":4}', '2022-03-16 00:21:22', 35, 0, '', 'true', NULL, '2022-03-16 00:21:22', NULL, '2022-03-16 00:21:22', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1549, '', 1, 2, '管理后台 - 文件配置', '更新文件配置为 Master', 3, '', '', 'PUT', '/admin-api/infra/file-config/update-master', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfigMaster(Long)', '{\"id\":5}', '2022-03-16 00:21:24', 34, 0, '', 'true', NULL, '2022-03-16 00:21:24', NULL, '2022-03-16 00:21:24', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1550, '', 1, 2, '管理后台 - 文件配置', '更新文件配置为 Master', 3, '', '', 'PUT', '/admin-api/infra/file-config/update-master', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfigMaster(Long)', '{\"id\":2}', '2022-03-16 00:21:26', 34, 0, '', 'true', NULL, '2022-03-16 00:21:26', NULL, '2022-03-16 00:21:26', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1551, '', 1, 2, '管理后台 - 文件存储', '上传文件', 2, '', '', 'POST', '/admin-api/infra/file/upload', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileController.uploadFile(MultipartFile,String)', '{\"path\":\"d37fe666e7f749f8947d37bfcb8fa756.jpg\",\"file\":\"[ignore]\"}', '2022-03-16 22:33:10', 1089, 500, 'SQLException: Field \'config_id\' doesn\'t have a default value', 'null', NULL, '2022-03-16 22:33:11', NULL, '2022-03-16 22:33:11', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1552, '', 1, 2, '管理后台 - 文件存储', '上传文件', 2, '', '', 'POST', '/admin-api/infra/file/upload', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileController.uploadFile(MultipartFile,String)', '{\"path\":\"v2-e68697db7bc2aba0924c5b5e7e377dff_r.jpeg\",\"file\":\"[ignore]\"}', '2022-03-16 22:46:50', 835, 500, 'SQLException: Incorrect integer value: \'v2-e68697db7bc2aba0924c5b5e7e377dff_r.jpeg\' for column \'id\' at row 1', 'null', NULL, '2022-03-16 22:46:50', NULL, '2022-03-16 22:46:50', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1553, '', 1, 2, '管理后台 - 文件存储', '上传文件', 2, '', '', 'POST', '/admin-api/infra/file/upload', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileController.uploadFile(MultipartFile,String)', '{\"path\":\"822aebded6e6414e912534c6091771a4.jpg\",\"file\":\"[ignore]\"}', '2022-03-16 22:47:13', 139, 500, 'SQLException: Data truncated for column \'id\' at row 1', 'null', NULL, '2022-03-16 22:47:14', NULL, '2022-03-16 22:47:14', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1554, '', 1, 2, '管理后台 - 文件存储', '上传文件', 2, '', '', 'POST', '/admin-api/infra/file/upload', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileController.uploadFile(MultipartFile,String)', '{\"path\":\"v2-e68697db7bc2aba0924c5b5e7e377dff_r.jpeg\",\"file\":\"[ignore]\"}', '2022-03-16 22:50:10', 805, 0, '', '\"http://test.yudao.iocoder.cn/v2-e68697db7bc2aba0924c5b5e7e377dff_r.jpeg\"', NULL, '2022-03-16 22:50:11', NULL, '2022-03-16 22:50:11', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1555, '', 1, 2, '管理后台 - 文件存储', '上传文件', 2, '', '', 'POST', '/admin-api/infra/file/upload', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileController.uploadFile(MultipartFile,String)', '{\"path\":\"1000.jpeg\",\"file\":\"[ignore]\"}', '2022-03-16 23:07:26', 768, 0, '', '\"http://test.yudao.iocoder.cn/1000.jpeg\"', NULL, '2022-03-16 23:07:27', NULL, '2022-03-16 23:07:27', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1556, '', 1, 2, '管理后台 - 文件存储', '删除文件', 4, '', '', 'DELETE', '/admin-api/infra/file/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileController.deleteFile(String)', '{\"id\":\"1\"}', '2022-03-16 23:08:33', 330, 0, '', 'true', NULL, '2022-03-16 23:08:34', NULL, '2022-03-16 23:08:34', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1557, '', 1, 2, '管理后台 - 菜单', '创建菜单', 2, '', '', 'POST', '/admin-api/system/menu/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.createMenu(MenuCreateReqVO)', '{\"reqVO\":{\"name\":\"文件管理\",\"permission\":null,\"type\":2,\"sort\":5,\"parentId\":0,\"path\":\"/file\",\"icon\":\"download\",\"component\":null,\"status\":0}}', '2022-03-16 23:47:40', 33, 0, '', '1243', NULL, '2022-03-16 23:47:40', NULL, '2022-03-16 23:47:40', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1558, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"文件管理\",\"permission\":\"\",\"type\":2,\"sort\":5,\"parentId\":2,\"path\":\"file\",\"icon\":\"download\",\"component\":null,\"status\":0,\"id\":1243}}', '2022-03-16 23:47:56', 32, 500, 'ServiceException: 已经存在该名字的菜单', 'null', NULL, '2022-03-16 23:47:56', NULL, '2022-03-16 23:47:56', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1559, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"文件管理(新)\",\"permission\":\"\",\"type\":2,\"sort\":5,\"parentId\":2,\"path\":\"file\",\"icon\":\"download\",\"component\":null,\"status\":0,\"id\":1243}}', '2022-03-16 23:48:03', 47, 0, '', 'true', NULL, '2022-03-16 23:48:03', NULL, '2022-03-16 23:48:03', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1560, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"文件列表\",\"permission\":\"\",\"type\":2,\"sort\":5,\"parentId\":2,\"path\":\"file\",\"icon\":\"upload\",\"component\":\"infra/file/index\",\"status\":0,\"id\":1090}}', '2022-03-16 23:48:10', 43, 0, '', 'true', NULL, '2022-03-16 23:48:10', NULL, '2022-03-16 23:48:10', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1561, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"文件列表\",\"permission\":\"\",\"type\":2,\"sort\":5,\"parentId\":1243,\"path\":\"file\",\"icon\":\"upload\",\"component\":\"infra/file/index\",\"status\":0,\"id\":1090}}', '2022-03-16 23:48:19', 42, 0, '', 'true', NULL, '2022-03-16 23:48:19', NULL, '2022-03-16 23:48:19', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1562, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"文件管理\",\"permission\":\"\",\"type\":2,\"sort\":5,\"parentId\":2,\"path\":\"file\",\"icon\":\"download\",\"component\":null,\"status\":0,\"id\":1243}}', '2022-03-16 23:48:27', 42, 0, '', 'true', NULL, '2022-03-16 23:48:27', NULL, '2022-03-16 23:48:27', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1563, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"文件配置\",\"permission\":\"\",\"type\":2,\"sort\":0,\"parentId\":1243,\"path\":\"file-config\",\"icon\":\"\",\"component\":\"infra/fileConfig/index\",\"status\":0,\"id\":1237}}', '2022-03-16 23:48:43', 40, 0, '', 'true', NULL, '2022-03-16 23:48:43', NULL, '2022-03-16 23:48:43', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1564, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"文件配置\",\"permission\":\"\",\"type\":2,\"sort\":0,\"parentId\":1243,\"path\":\"file-config\",\"icon\":\"config\",\"component\":\"infra/fileConfig/index\",\"status\":0,\"id\":1237}}', '2022-03-16 23:49:31', 42, 0, '', 'true', NULL, '2022-03-16 23:49:31', NULL, '2022-03-16 23:49:31', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1565, '', 1, 2, '管理后台 - 用户个人中心', '上传用户个人头像', 3, '', '', 'PUT', '/admin-api/system/user/profile/update-avatar', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.user.UserProfileController.updateUserAvatar(MultipartFile)', '{\"file\":\"[ignore]\"}', '2022-03-16 23:51:41', 942, 0, '', '\"http://test.yudao.iocoder.cn/a294ecb2-73dd-4353-bf40-296b8931d0bf\"', NULL, '2022-03-16 23:51:42', NULL, '2022-03-16 23:51:42', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1566, '', 1, 2, '管理后台 - 文件存储', '上传文件', 2, '', '', 'POST', '/admin-api/infra/file/upload', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileController.uploadFile(MultipartFile,String)', '{\"path\":\"43301647479822_.pic.jpg\",\"file\":\"[ignore]\"}', '2022-03-17 09:19:10', 1129, 0, '', '\"http://test.yudao.iocoder.cn/43301647479822_.pic.jpg\"', NULL, '2022-03-17 09:19:11', NULL, '2022-03-17 09:19:11', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1567, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"S3 - 测试\",\"remark\":null,\"storage\":20,\"config\":{\"endpoint\":\"s3-cn-south-1.qiniucs.com\",\"region\":\"oss-cn-beijing\",\"bucket\":\"ruoyi-vue-pro\",\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\",\"domain\":\"http://test.yudao.iocoder.cn\"}}}', '2022-03-17 18:46:19', 86, 0, '', '8', NULL, '2022-03-17 18:46:19', NULL, '2022-03-17 18:46:19', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1568, '', 1, 2, '管理后台 - 文件配置', '删除文件配置', 4, '', '', 'DELETE', '/admin-api/infra/file-config/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.deleteFileConfig(Long)', '{\"id\":8}', '2022-03-17 18:46:28', 32, 0, '', 'true', NULL, '2022-03-17 18:46:28', NULL, '2022-03-17 18:46:28', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1569, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"S3 - 测试\",\"remark\":null,\"storage\":20,\"config\":{\"endpoint\":\"s3-cn-south-1.qiniucs.com\",\"region\":\"oss-cn-beijing\",\"bucket\":\"ruoyi-vue-pro\",\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\",\"domain\":\"http://test.yudao.iocoder.cn\"}}}', '2022-03-17 19:40:13', 21, 0, '', '9', NULL, '2022-03-17 19:40:13', NULL, '2022-03-17 19:40:13', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1570, '', 1, 2, '管理后台 - 文件配置', '删除文件配置', 4, '', '', 'DELETE', '/admin-api/infra/file-config/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.deleteFileConfig(Long)', '{\"id\":9}', '2022-03-17 19:40:16', 26, 0, '', 'true', NULL, '2022-03-17 19:40:16', NULL, '2022-03-17 19:40:16', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1571, '', 1, 2, '管理后台 - 文件配置', '更新文件配置', 3, '', '', 'PUT', '/admin-api/infra/file-config/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfig(FileConfigUpdateReqVO)', '{\"updateReqVO\":{\"name\":\"S3 - 七牛云\",\"remark\":\"戴佩妮真可爱\",\"id\":2,\"config\":{\"@class\":\"cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"s3-cn-south-1.qiniucs.com\",\"domain\":\"http://test.yudao.iocoder.cn\",\"region\":\"oss-cn-beijing\",\"bucket\":\"ruoyi-vue-pro\",\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\"}}}', '2022-03-17 19:43:46', 29, 0, '', 'true', NULL, '2022-03-17 19:43:46', NULL, '2022-03-17 19:43:46', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1572, '', 1, 2, '管理后台 - 文件存储', '删除文件', 4, '', '', 'DELETE', '/admin-api/infra/file/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileController.deleteFile(Long)', '{\"id\":2}', '2022-03-17 19:49:48', 326, 0, '', 'true', NULL, '2022-03-17 19:49:48', NULL, '2022-03-17 19:49:48', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1573, '', 1, 2, '管理后台 - 文件存储', '删除文件', 4, '', '', 'DELETE', '/admin-api/infra/file/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileController.deleteFile(Long)', '{\"id\":3}', '2022-03-17 19:49:50', 82, 0, '', 'true', NULL, '2022-03-17 19:49:50', NULL, '2022-03-17 19:49:50', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1574, '', 1, 2, '管理后台 - 文件存储', '上传文件', 2, '', '', 'POST', '/admin-api/infra/file/upload', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileController.uploadFile(MultipartFile,String)', '{\"path\":\"43891647495423_.pic.jpg\",\"file\":\"[ignore]\"}', '2022-03-17 19:51:30', 317, 0, '', '\"http://test.yudao.iocoder.cn/43891647495423_.pic.jpg\"', NULL, '2022-03-17 19:51:31', NULL, '2022-03-17 19:51:31', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1575, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"S3 - 测试七牛\",\"remark\":null,\"storage\":20,\"config\":{\"endpoint\":\"s3-cn-south-1.qiniucs.com\",\"region\":\"oss-cn-beijing\",\"bucket\":\"ruoyi-vue-pro\",\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\",\"domain\":\"http://test.yudao.iocoder.cn\"}}}', '2022-03-17 19:54:19', 16, 0, '', '10', NULL, '2022-03-17 19:54:19', NULL, '2022-03-17 19:54:19', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1576, '', 1, 2, '管理后台 - 文件配置', '更新文件配置为 Master', 3, '', '', 'PUT', '/admin-api/infra/file-config/update-master', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfigMaster(Long)', '{\"id\":10}', '2022-03-17 19:57:15', 43, 0, '', 'true', NULL, '2022-03-17 19:57:15', NULL, '2022-03-17 19:57:15', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1577, '', 1, 2, '管理后台 - 文件配置', '更新文件配置为 Master', 3, '', '', 'PUT', '/admin-api/infra/file-config/update-master', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfigMaster(Long)', '{\"id\":2}', '2022-03-17 19:57:18', 32, 0, '', 'true', NULL, '2022-03-17 19:57:18', NULL, '2022-03-17 19:57:18', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1578, '', 1, 2, '管理后台 - 文件配置', '删除文件配置', 4, '', '', 'DELETE', '/admin-api/infra/file-config/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.deleteFileConfig(Long)', '{\"id\":10}', '2022-03-17 19:57:19', 20, 0, '', 'true', NULL, '2022-03-17 19:57:19', NULL, '2022-03-17 19:57:19', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1579, '', 1, 2, '管理后台 - 文件存储', '上传文件', 2, '', '', 'POST', '/admin-api/infra/file/upload', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileController.uploadFile(MultipartFile,String)', '{\"path\":\"822aebded6e6414e912534c6091771a4.jpg\",\"file\":\"[ignore]\"}', '2022-03-17 20:48:00', 385, 0, '', '\"http://test.yudao.iocoder.cn/822aebded6e6414e912534c6091771a4.jpg\"', NULL, '2022-03-17 20:48:00', NULL, '2022-03-17 20:48:00', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1580, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,创建代码生成器的表和字段定义', 2, '', '', 'POST', '/admin-api/infra/codegen/create-list-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(List)', '{\"tableNames\":[\"system_role\"]}', '2022-03-18 22:25:12', 270, 500, 'SQLException: Field \'table_id\' doesn\'t have a default value', 'null', NULL, '2022-03-18 22:25:12', NULL, '2022-03-18 22:25:12', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1581, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,创建代码生成器的表和字段定义', 2, '', '', 'POST', '/admin-api/infra/codegen/create-list-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(List)', '{\"tableNames\":[\"system_role\"]}', '2022-03-18 22:25:34', 96, 500, 'SQLException: Field \'table_id\' doesn\'t have a default value', 'null', NULL, '2022-03-18 22:25:34', NULL, '2022-03-18 22:25:34', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1582, '', 1, 2, '管理后台 - 代码生成器', '基于数据库的表结构,创建代码生成器的表和字段定义', 2, '', '', 'POST', '/admin-api/infra/codegen/create-list-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.createCodegenListFromDB(List)', '{\"tableNames\":[\"system_role\"]}', '2022-03-18 22:31:25', 4060, 0, '', '[67]', NULL, '2022-03-18 22:31:29', NULL, '2022-03-18 22:31:29', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1583, '', 1, 2, '管理后台 - 文件配置', '创建文件配置', 2, '', '', 'POST', '/admin-api/infra/file-config/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.createFileConfig(FileConfigCreateReqVO)', '{\"createReqVO\":{\"name\":\"S3 - 七牛云\",\"remark\":null,\"storage\":20,\"config\":{\"endpoint\":\"s3-cn-south-1.qiniucs.com\",\"accessKey\":\"b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8\",\"accessSecret\":\"kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP\",\"bucket\":\"ruoyi-vue-pro\",\"domain\":\"http://test.yudao.iocoder.cn\"}}}', '2022-03-19 18:00:03', 73, 0, '', '11', NULL, '2022-03-19 18:00:03', NULL, '2022-03-19 18:00:03', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1584, '', 1, 2, '管理后台 - 租户', '更新租户', 3, '', '', 'PUT', '/admin-api/system/tenant/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.tenant.TenantController.updateTenant(TenantUpdateReqVO)', '{\"updateReqVO\":{\"name\":\"小租户\",\"contactName\":\"小王2\",\"contactMobile\":\"15601691300\",\"status\":0,\"domain\":\"http://www.iocoder.cn\",\"packageId\":111,\"expireTime\":1710086400000,\"accountCount\":20,\"id\":121}}', '2022-03-19 18:37:20', 44, 0, '', 'true', NULL, '2022-03-19 18:37:20', NULL, '2022-03-19 18:37:20', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1585, '', 1, 2, '管理后台 - 租户套餐', '更新租户套餐', 3, '', '', 'PUT', '/admin-api/system/tenant-package/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.tenant.TenantPackageController.updateTenantPackage(TenantPackageUpdateReqVO)', '{\"updateReqVO\":{\"name\":\"普通套餐\",\"status\":0,\"remark\":\"小功能\",\"menuIds\":[1024,1025,1,103,104,1017,1018,1019,1020,1021,1022,1023],\"id\":111}}', '2022-03-19 18:39:06', 138, 0, '', 'true', NULL, '2022-03-19 18:39:06', NULL, '2022-03-19 18:39:06', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1586, '', 1, 2, '管理后台 - 租户套餐', '更新租户套餐', 3, '', '', 'PUT', '/admin-api/system/tenant-package/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.tenant.TenantPackageController.updateTenantPackage(TenantPackageUpdateReqVO)', '{\"updateReqVO\":{\"name\":\"普通套餐\",\"status\":0,\"remark\":\"小功能\",\"menuIds\":[1024,1025,1,102,103,104,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023],\"id\":111}}', '2022-03-19 18:39:13', 147, 0, '', 'true', NULL, '2022-03-19 18:39:13', NULL, '2022-03-19 18:39:13', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1587, '', 1, 2, '管理后台 - 文件配置', '更新文件配置为 Master', 3, '', '', 'PUT', '/admin-api/infra/file-config/update-master', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.file.FileConfigController.updateFileConfigMaster(Long)', '{\"id\":11}', '2022-03-19 19:10:11', 45, 0, '', 'true', NULL, '2022-03-19 19:10:11', NULL, '2022-03-19 19:10:11', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1588, '', 1, 2, '管理后台 - 流程模型', '新建模型', 2, '', '', 'POST', '/admin-api/bpm/model/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.createModel(BpmModelCreateReqVO)', '{\"createRetVO\":{\"key\":\"common-form\",\"name\":\"通用表单\",\"description\":\"通用表单简单示例\"}}', '2022-03-19 20:13:38', 56, 0, '', '\"02217e82-a77e-11ec-96d6-8e557beca7ad\"', NULL, '2022-03-19 20:13:39', NULL, '2022-03-19 20:13:39', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1589, '', 1, 2, '管理后台 - 动态表单', '创建动态表单', 2, '', '', 'POST', '/admin-api/bpm/form/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmFormController.createForm(BpmFormCreateReqVO)', '{\"createReqVO\":{\"name\":\"leave-form\",\"status\":0,\"remark\":null,\"conf\":\"{\\\"formRef\\\":\\\"elForm\\\",\\\"formModel\\\":\\\"formData\\\",\\\"size\\\":\\\"medium\\\",\\\"labelPosition\\\":\\\"right\\\",\\\"labelWidth\\\":100,\\\"formRules\\\":\\\"rules\\\",\\\"gutter\\\":15,\\\"disabled\\\":false,\\\"span\\\":24,\\\"formBtns\\\":true}\",\"fields\":[\"{\\\"__config__\\\":{\\\"label\\\":\\\"开始时间\\\",\\\"tag\\\":\\\"el-date-picker\\\",\\\"tagIcon\\\":\\\"date\\\",\\\"defaultValue\\\":null,\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"span\\\":24,\\\"layout\\\":\\\"colFormItem\\\",\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/date-picker\\\",\\\"formId\\\":101,\\\"renderKey\\\":\\\"1011647692195671\\\"},\\\"placeholder\\\":\\\"请选择开始时间\\\",\\\"type\\\":\\\"date\\\",\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"disabled\\\":false,\\\"clearable\\\":true,\\\"format\\\":\\\"yyyy-MM-dd\\\",\\\"value-format\\\":\\\"yyyy-MM-dd\\\",\\\"readonly\\\":false,\\\"__vModel__\\\":\\\"field101\\\"}\",\"{\\\"__config__\\\":{\\\"label\\\":\\\"结束时间\\\",\\\"tag\\\":\\\"el-date-picker\\\",\\\"tagIcon\\\":\\\"date\\\",\\\"defaultValue\\\":null,\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"span\\\":24,\\\"layout\\\":\\\"colFormItem\\\",\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/date-picker\\\",\\\"formId\\\":102,\\\"renderKey\\\":\\\"1021647692207701\\\"},\\\"placeholder\\\":\\\"请选择结束时间\\\",\\\"type\\\":\\\"date\\\",\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"disabled\\\":false,\\\"clearable\\\":true,\\\"format\\\":\\\"yyyy-MM-dd\\\",\\\"value-format\\\":\\\"yyyy-MM-dd\\\",\\\"readonly\\\":false,\\\"__vModel__\\\":\\\"field102\\\"}\",\"{\\\"__config__\\\":{\\\"label\\\":\\\"请假类型\\\",\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"tag\\\":\\\"el-select\\\",\\\"tagIcon\\\":\\\"select\\\",\\\"layout\\\":\\\"colFormItem\\\",\\\"span\\\":24,\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/select\\\",\\\"formId\\\":103,\\\"renderKey\\\":\\\"1031647692231884\\\"},\\\"__slot__\\\":{\\\"options\\\":[{\\\"label\\\":\\\"事假\\\",\\\"value\\\":1},{\\\"label\\\":\\\"年假\\\",\\\"value\\\":2}]},\\\"placeholder\\\":\\\"请选择请假类型\\\",\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"clearable\\\":true,\\\"disabled\\\":false,\\\"filterable\\\":false,\\\"multiple\\\":false,\\\"__vModel__\\\":\\\"field103\\\"}\",\"{\\\"__config__\\\":{\\\"label\\\":\\\"原因\\\",\\\"labelWidth\\\":null,\\\"showLabel\\\":true,\\\"tag\\\":\\\"el-input\\\",\\\"tagIcon\\\":\\\"textarea\\\",\\\"required\\\":false,\\\"layout\\\":\\\"colFormItem\\\",\\\"span\\\":24,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/input\\\",\\\"formId\\\":105,\\\"renderKey\\\":\\\"1051647692319768\\\"},\\\"type\\\":\\\"textarea\\\",\\\"placeholder\\\":\\\"请输入原因\\\",\\\"autosize\\\":{\\\"minRows\\\":4,\\\"maxRows\\\":4},\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"maxlength\\\":null,\\\"show-word-limit\\\":false,\\\"readonly\\\":false,\\\"disabled\\\":false,\\\"__vModel__\\\":\\\"field105\\\"}\"]}}', '2022-03-19 20:20:56', 23, 0, '', '15', NULL, '2022-03-19 20:20:56', NULL, '2022-03-19 20:20:56', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1590, '', 1, 2, '管理后台 - 流程模型', '修改模型', 3, '', '', 'PUT', '/admin-api/bpm/model/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.updateModel(BpmModelUpdateReqVO)', '{\"modelVO\":{\"id\":\"02217e82-a77e-11ec-96d6-8e557beca7ad\",\"name\":\"通用表单\",\"description\":\"通用表单简单示例\",\"category\":null,\"bpmnXml\":\"\\nFlow_0119zx3Flow_0119zx3Flow_0dvfklrFlow_0dvfklrFlow_1q9hzx4Flow_1q9hzx4\",\"formType\":null,\"formId\":null,\"formCustomCreatePath\":null,\"formCustomViewPath\":null}}', '2022-03-19 20:40:45', 53, 0, '', 'true', NULL, '2022-03-19 20:40:45', NULL, '2022-03-19 20:40:45', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1591, '', 1, 2, '管理后台 - 流程模型', '修改模型', 3, '', '', 'PUT', '/admin-api/bpm/model/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.updateModel(BpmModelUpdateReqVO)', '{\"modelVO\":{\"id\":\"02217e82-a77e-11ec-96d6-8e557beca7ad\",\"name\":\"通用表单\",\"description\":\"通用表单简单示例\",\"category\":\"1\",\"bpmnXml\":null,\"formType\":10,\"formId\":15,\"formCustomCreatePath\":null,\"formCustomViewPath\":null}}', '2022-03-19 20:40:57', 19, 0, '', 'true', NULL, '2022-03-19 20:40:57', NULL, '2022-03-19 20:40:57', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1592, '', 1, 2, '管理后台 - 任务分配规则', '创建任务分配规则', 2, '', '', 'POST', '/admin-api/bpm/task-assign-rule/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmTaskAssignRuleController.createTaskAssignRule(BpmTaskAssignRuleCreateReqVO)', '{\"reqVO\":{\"type\":50,\"options\":[20],\"modelId\":\"02217e82-a77e-11ec-96d6-8e557beca7ad\",\"taskDefinitionKey\":\"Activity_06rmtz9\"}}', '2022-03-19 20:58:24', 32, 0, '', '183', NULL, '2022-03-19 20:58:24', NULL, '2022-03-19 20:58:24', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1593, '', 1, 2, '管理后台 - 任务分配规则', '创建任务分配规则', 2, '', '', 'POST', '/admin-api/bpm/task-assign-rule/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmTaskAssignRuleController.createTaskAssignRule(BpmTaskAssignRuleCreateReqVO)', '{\"reqVO\":{\"type\":22,\"options\":[3],\"modelId\":\"02217e82-a77e-11ec-96d6-8e557beca7ad\",\"taskDefinitionKey\":\"Activity_1hxzcyl\"}}', '2022-03-19 20:59:35', 33, 0, '', '184', NULL, '2022-03-19 20:59:35', NULL, '2022-03-19 20:59:35', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1594, '', 1, 2, '管理后台 - 流程模型', '部署模型', 2, '', '', 'POST', '/admin-api/bpm/model/deploy', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.deployModel(String)', '{\"id\":\"02217e82-a77e-11ec-96d6-8e557beca7ad\"}', '2022-03-19 21:14:25', 602, 0, '', 'true', NULL, '2022-03-19 21:14:26', NULL, '2022-03-19 21:14:26', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1595, '', 1, 2, '管理后台 - 流程实例', '新建流程实例', 2, '', '', 'POST', '/admin-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/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.task.BpmProcessInstanceController.createProcessInstance(BpmProcessInstanceCreateReqVO)', '{\"createReqVO\":{\"processDefinitionId\":\"common-form:1:7fdfc407-a786-11ec-96d6-8e557beca7ad\",\"variables\":{\"field101\":\"2022-03-16\",\"field102\":\"2022-03-18\",\"field103\":1,\"field105\":\"生病了\"}}}', '2022-03-19 21:21:01', 718, 0, '', '\"6be9f198-a787-11ec-96d6-8e557beca7ad\"', NULL, '2022-03-19 21:21:02', NULL, '2022-03-19 21:21:02', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1596, '', 1, 2, '管理后台 - 用户', '重置用户密码', 3, '', '', 'PUT', '/admin-api/system/user/update-password', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.user.UserController.updateUserPassword(UserUpdatePasswordReqVO)', '{\"reqVO\":{\"id\":104,\"password\":\"test\"}}', '2022-03-19 21:43:41', 131, 0, '', 'true', NULL, '2022-03-19 21:43:41', NULL, '2022-03-19 21:43:41', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1597, '', 1, 2, '管理后台 - 用户', '重置用户密码', 3, '', '', 'PUT', '/admin-api/system/user/update-password', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.user.UserController.updateUserPassword(UserUpdatePasswordReqVO)', '{\"reqVO\":{\"id\":104,\"password\":\"test123\"}}', '2022-03-19 21:44:04', 133, 0, '', 'true', NULL, '2022-03-19 21:44:04', NULL, '2022-03-19 21:44:04', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1598, '', 1, 2, '管理后台 - 权限', '赋予角色菜单', 2, '', '', 'POST', '/admin-api/system/permission/assign-role-menu', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.PermissionController.assignRoleMenu(PermissionAssignRoleMenuReqVO)', '{\"reqVO\":{\"roleId\":101,\"menuIds\":[1216,1217,1218,1219,1220,1221,5,1222,1118,1119,1120,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1207,1208,1209,1210,1211,1212,1213,1215]}}', '2022-03-19 21:45:52', 257, 0, '', 'true', NULL, '2022-03-19 21:45:52', NULL, '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1599, '', 1, 2, '管理后台 - 用户', '新增用户', 2, '', '', 'POST', '/admin-api/system/user/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.user.UserController.createUser(UserCreateReqVO)', '{\"reqVO\":{\"username\":\"hrmgr\",\"nickname\":\"hr 小姐姐\",\"remark\":null,\"deptId\":null,\"postIds\":[3],\"email\":null,\"mobile\":null,\"sex\":null,\"avatar\":null,\"password\":\"hr123\"}}', '2022-03-19 21:50:58', 152, 0, '', '114', NULL, '2022-03-19 21:50:58', NULL, '2022-03-19 21:50:58', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1600, '', 1, 2, '管理后台 - 权限', '赋予用户角色', 2, '', '', 'POST', '/admin-api/system/permission/assign-user-role', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.PermissionController.assignUserRole(PermissionAssignUserRoleReqVO)', '{\"reqVO\":{\"userId\":114,\"roleIds\":[101]}}', '2022-03-19 21:51:13', 20, 0, '', 'true', NULL, '2022-03-19 21:51:13', NULL, '2022-03-19 21:51:13', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1601, '', 104, 2, '管理后台 - 流程任务实例', '通过任务', 3, '', '', 'PUT', '/admin-api/bpm/task/approve', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.task.BpmTaskController.approveTask(BpmTaskApproveReqVO)', '{\"reqVO\":{\"id\":\"6bf71106-a787-11ec-96d6-8e557beca7ad\",\"comment\":\"关注【芋道源码】公众号\"}}', '2022-03-19 21:54:07', 97, 500, 'ServiceException: 操作失败,原因:找不到任务的审批人!', 'null', NULL, '2022-03-19 21:54:08', NULL, '2022-03-19 21:54:08', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1602, '', 104, 2, '管理后台 - 流程任务实例', '通过任务', 3, '', '', 'PUT', '/admin-api/bpm/task/approve', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.task.BpmTaskController.approveTask(BpmTaskApproveReqVO)', '{\"reqVO\":{\"id\":\"6bf71106-a787-11ec-96d6-8e557beca7ad\",\"comment\":\"关注【芋道源码】公众号\"}}', '2022-03-19 21:54:13', 68, 500, 'ServiceException: 操作失败,原因:找不到任务的审批人!', 'null', NULL, '2022-03-19 21:54:13', NULL, '2022-03-19 21:54:13', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1603, '', 104, 2, '管理后台 - 流程任务实例', '通过任务', 3, '', '', 'PUT', '/admin-api/bpm/task/approve', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.task.BpmTaskController.approveTask(BpmTaskApproveReqVO)', '{\"reqVO\":{\"id\":\"6bf71106-a787-11ec-96d6-8e557beca7ad\",\"comment\":\"关注【芋道源码】公众号\"}}', '2022-03-19 21:54:28', 64, 500, 'ServiceException: 操作失败,原因:找不到任务的审批人!', 'null', NULL, '2022-03-19 21:54:28', NULL, '2022-03-19 21:54:28', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1604, '', 104, 2, '管理后台 - 流程任务实例', '通过任务', 3, '', '', 'PUT', '/admin-api/bpm/task/approve', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.task.BpmTaskController.approveTask(BpmTaskApproveReqVO)', '{\"reqVO\":{\"id\":\"6bf71106-a787-11ec-96d6-8e557beca7ad\",\"comment\":\"关注【芋道源码】公众号\"}}', '2022-03-19 21:54:41', 71, 500, 'ServiceException: 操作失败,原因:找不到任务的审批人!', 'null', NULL, '2022-03-19 21:54:41', NULL, '2022-03-19 21:54:41', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1605, '', 104, 2, '管理后台 - 流程任务实例', '通过任务', 3, '', '', 'PUT', '/admin-api/bpm/task/approve', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.task.BpmTaskController.approveTask(BpmTaskApproveReqVO)', '{\"reqVO\":{\"id\":\"6bf71106-a787-11ec-96d6-8e557beca7ad\",\"comment\":\"关注【芋道源码】公众号\"}}', '2022-03-19 21:55:36', 52349, 500, 'ServiceException: 操作失败,原因:找不到任务的审批人!', 'null', NULL, '2022-03-19 21:56:29', NULL, '2022-03-19 21:56:29', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1606, '', 104, 2, '管理后台 - 流程任务实例', '通过任务', 3, '', '', 'PUT', '/admin-api/bpm/task/approve', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.task.BpmTaskController.approveTask(BpmTaskApproveReqVO)', '{\"reqVO\":{\"id\":\"6bf71106-a787-11ec-96d6-8e557beca7ad\",\"comment\":\"关注【芋道源码】公众号\"}}', '2022-03-19 21:58:22', 22929, 500, 'ServiceException: 操作失败,原因:找不到任务的审批人!', 'null', NULL, '2022-03-19 21:58:45', NULL, '2022-03-19 21:58:45', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1607, '', 1, 2, '管理后台 - 权限', '赋予角色数据权限', 2, '', '', 'POST', '/admin-api/system/permission/assign-role-data-scope', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.PermissionController.assignRoleDataScope(PermissionAssignRoleDataScopeReqVO)', '{\"reqVO\":{\"roleId\":101,\"dataScope\":1,\"dataScopeDeptIds\":[]}}', '2022-03-19 22:00:41', 32, 0, '', 'true', NULL, '2022-03-19 22:00:41', NULL, '2022-03-19 22:00:41', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1608, '', 104, 2, '管理后台 - 流程任务实例', '通过任务', 3, '', '', 'PUT', '/admin-api/bpm/task/approve', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.task.BpmTaskController.approveTask(BpmTaskApproveReqVO)', '{\"reqVO\":{\"id\":\"6bf71106-a787-11ec-96d6-8e557beca7ad\",\"comment\":\"关注【芋道源码】公众号\"}}', '2022-03-19 22:00:45', 305, 0, '', 'true', NULL, '2022-03-19 22:00:45', NULL, '2022-03-19 22:00:45', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1609, '', 114, 2, '管理后台 - 流程任务实例', '通过任务', 3, '', '', 'PUT', '/admin-api/bpm/task/approve', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.task.BpmTaskController.approveTask(BpmTaskApproveReqVO)', '{\"reqVO\":{\"id\":\"f8beb356-a78c-11ec-bf87-8e557beca7ad\",\"comment\":\"不错!\"}}', '2022-03-19 22:16:00', 287, 0, '', 'true', NULL, '2022-03-19 22:16:00', NULL, '2022-03-19 22:16:00', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1610, '', 114, 2, '管理后台 - 流程任务实例', '通过任务', 3, '', '', 'PUT', '/admin-api/bpm/task/approve', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.task.BpmTaskController.approveTask(BpmTaskApproveReqVO)', '{\"reqVO\":{\"id\":\"f8beb356-a78c-11ec-bf87-8e557beca7ad\",\"comment\":\"不错!\"}}', '2022-03-19 22:15:59', 18922, 500, 'FlowableOptimisticLockingException: Execution[ id \'6bee3762-a787-11ec-96d6-8e557beca7ad\' ] - activity \'Event_0g5w7ck\' - parent \'6be9f198-a787-11ec-96d6-8e557beca7ad\' was updated by another transaction concurrently', 'null', NULL, '2022-03-19 22:16:18', NULL, '2022-03-19 22:16:18', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1611, '', 1, 2, '管理后台 - 流程模型', '新建模型', 2, '', '', 'POST', '/admin-api/bpm/model/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.createModel(BpmModelCreateReqVO)', '{\"createRetVO\":{\"key\":\"oa_leave\",\"name\":\"OA 请假\",\"description\":null}}', '2022-03-19 23:33:24', 24, 0, '', '\"e9e29c4f-a799-11ec-bf87-8e557beca7ad\"', NULL, '2022-03-19 23:33:24', NULL, '2022-03-19 23:33:24', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1612, '', 1, 2, '管理后台 - 流程模型', '删除模型', 4, '', '', 'DELETE', '/admin-api/bpm/model/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.deleteModel(String)', '{\"id\":\"e9e29c4f-a799-11ec-bf87-8e557beca7ad\"}', '2022-03-19 23:33:30', 27, 0, '', 'true', NULL, '2022-03-19 23:33:30', NULL, '2022-03-19 23:33:30', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1613, '', 1, 2, '管理后台 - 流程模型', '新建模型', 2, '', '', 'POST', '/admin-api/bpm/model/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.createModel(BpmModelCreateReqVO)', '{\"createRetVO\":{\"key\":\"oa_leave\",\"name\":\"OA 请假\",\"description\":null}}', '2022-03-19 23:34:41', 21, 0, '', '\"18348550-a79a-11ec-bf87-8e557beca7ad\"', NULL, '2022-03-19 23:34:41', NULL, '2022-03-19 23:34:41', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1614, '', 1, 2, '管理后台 - 流程模型', '修改模型', 3, '', '', 'PUT', '/admin-api/bpm/model/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.updateModel(BpmModelUpdateReqVO)', '{\"modelVO\":{\"id\":\"18348550-a79a-11ec-bf87-8e557beca7ad\",\"name\":\"OA 请假\",\"description\":null,\"category\":null,\"bpmnXml\":\"\\nsid-59046FB9-ABD0-43B6-9FA0-916D6972573A${day > 3}\",\"formType\":null,\"formId\":null,\"formCustomCreatePath\":null,\"formCustomViewPath\":null}}', '2022-03-19 23:45:02', 43, 0, '', 'true', NULL, '2022-03-19 23:45:02', NULL, '2022-03-19 23:45:02', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1615, '', 1, 2, '管理后台 - 流程模型', '修改模型', 3, '', '', 'PUT', '/admin-api/bpm/model/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.updateModel(BpmModelUpdateReqVO)', '{\"modelVO\":{\"id\":\"18348550-a79a-11ec-bf87-8e557beca7ad\",\"name\":\"OA 请假\",\"description\":null,\"category\":null,\"bpmnXml\":\"\\nsid-59046FB9-ABD0-43B6-9FA0-916D6972573A${day > 3}\",\"formType\":null,\"formId\":null,\"formCustomCreatePath\":null,\"formCustomViewPath\":null}}', '2022-03-20 00:17:27', 23, 0, '', 'true', NULL, '2022-03-20 00:17:27', NULL, '2022-03-20 00:17:27', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1616, '', 1, 2, '管理后台 - 流程模型', '部署模型', 2, '', '', 'POST', '/admin-api/bpm/model/deploy', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.deployModel(String)', '{\"id\":\"18348550-a79a-11ec-bf87-8e557beca7ad\"}', '2022-03-20 00:17:30', 16, 500, 'ServiceException: 部署流程失败,原因:流程表单未配置,请点击【修改流程】按钮进行配置', 'null', NULL, '2022-03-20 00:17:30', NULL, '2022-03-20 00:17:30', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1617, '', 1, 2, '管理后台 - 参数配置', '修改参数配置', 3, '', '', 'PUT', '/admin-api/infra/config/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.config.ConfigController.updateConfig(ConfigUpdateReqVO)', '{\"reqVO\":{\"group\":\"ui\",\"name\":\"主框架页-默认皮肤样式名称\",\"value\":\"skin-blue\",\"sensitive\":false,\"remark\":\"蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow\",\"id\":1}}', '2022-03-20 02:25:48', 46, 0, '', 'true', NULL, '2022-03-20 02:25:49', NULL, '2022-03-20 02:25:49', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1618, '', 1, 2, '管理后台 - 参数配置', '修改参数配置', 3, '', '', 'PUT', '/admin-api/infra/config/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.config.ConfigController.updateConfig(ConfigUpdateReqVO)', '{\"reqVO\":{\"group\":\"biz\",\"name\":\"用户管理-账号初始密码\",\"value\":\"123456\",\"sensitive\":false,\"remark\":\"初始化密码 123456\",\"id\":2}}', '2022-03-20 02:25:51', 36, 0, '', 'true', NULL, '2022-03-20 02:25:51', NULL, '2022-03-20 02:25:51', b'0', 1); COMMIT; -- ---------------------------- @@ -3511,7 +3960,7 @@ CREATE TABLE `system_role` ( BEGIN; INSERT INTO `system_role` VALUES (1, '超级管理员', 'super_admin', 1, 1, '', 0, 1, '超级管理员', 'admin', '2021-01-05 17:03:48', '', '2022-02-22 05:08:21', b'0', 1); INSERT INTO `system_role` VALUES (2, '普通角色', 'common', 2, 2, '', 0, 1, '普通角色', 'admin', '2021-01-05 17:03:48', '', '2022-02-22 05:08:20', b'0', 1); -INSERT INTO `system_role` VALUES (101, '测试账号', 'test', 0, 5, '[]', 0, 2, '132', '', '2021-01-06 13:49:35', '1', '2022-02-27 10:53:20', b'0', 1); +INSERT INTO `system_role` VALUES (101, '测试账号', 'test', 0, 1, '[]', 0, 2, '132', '', '2021-01-06 13:49:35', '1', '2022-03-19 22:00:41', b'0', 1); INSERT INTO `system_role` VALUES (109, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', b'0', 121); INSERT INTO `system_role` VALUES (110, '测试角色', 'test', 0, 1, '[]', 0, 2, '嘿嘿', '110', '2022-02-23 00:14:34', '110', '2022-02-23 13:14:58', b'0', 121); INSERT INTO `system_role` VALUES (111, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); @@ -3532,7 +3981,7 @@ CREATE TABLE `system_role_menu` ( `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=1594 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色和菜单关联表'; +) ENGINE=InnoDB AUTO_INCREMENT=1641 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色和菜单关联表'; -- ---------------------------- -- Records of system_role_menu @@ -3832,7 +4281,7 @@ INSERT INTO `system_role_menu` VALUES (551, 2, 1021, '1', '2022-02-22 13:09:12', INSERT INTO `system_role_menu` VALUES (552, 2, 1022, '1', '2022-02-22 13:09:12', '1', '2022-02-23 12:03:57', b'1', 1); INSERT INTO `system_role_menu` VALUES (553, 2, 1023, '1', '2022-02-22 13:09:12', '1', '2022-02-23 12:03:57', b'1', 1); INSERT INTO `system_role_menu` VALUES (554, 101, 1024, '1', '2022-02-22 13:09:55', '1', '2022-02-23 12:03:57', b'1', 1); -INSERT INTO `system_role_menu` VALUES (555, 101, 1, '1', '2022-02-22 13:09:55', '1', '2022-02-22 13:09:55', b'0', 1); +INSERT INTO `system_role_menu` VALUES (555, 101, 1, '1', '2022-02-22 13:09:55', '1', '2022-03-19 13:45:52', b'1', 1); INSERT INTO `system_role_menu` VALUES (556, 101, 1025, '1', '2022-02-22 13:09:55', '1', '2022-02-23 12:03:57', b'1', 1); INSERT INTO `system_role_menu` VALUES (557, 101, 1026, '1', '2022-02-22 13:09:55', '1', '2022-02-23 12:03:57', b'1', 1); INSERT INTO `system_role_menu` VALUES (558, 101, 1027, '1', '2022-02-22 13:09:55', '1', '2022-02-23 12:03:57', b'1', 1); @@ -4765,7 +5214,7 @@ INSERT INTO `system_role_menu` VALUES (1484, 110, 1022, '110', '2022-02-23 00:23 INSERT INTO `system_role_menu` VALUES (1485, 110, 1023, '110', '2022-02-23 00:23:56', '110', '2022-02-22 16:24:13', b'1', 121); INSERT INTO `system_role_menu` VALUES (1486, 109, 103, '1', '2022-02-23 19:32:14', '1', '2022-02-23 19:32:14', b'0', 121); INSERT INTO `system_role_menu` VALUES (1487, 109, 104, '1', '2022-02-23 19:32:14', '1', '2022-02-23 19:32:14', b'0', 121); -INSERT INTO `system_role_menu` VALUES (1488, 109, 105, '1', '2022-02-23 19:43:22', '1', '2022-02-23 19:43:22', b'0', 121); +INSERT INTO `system_role_menu` VALUES (1488, 109, 105, '1', '2022-02-23 19:43:22', '1', '2022-03-19 10:39:06', b'1', 121); INSERT INTO `system_role_menu` VALUES (1489, 1, 1, '1', '2022-02-23 20:03:57', '1', '2022-02-23 20:03:57', b'0', 1); INSERT INTO `system_role_menu` VALUES (1490, 1, 2, '1', '2022-02-23 20:03:57', '1', '2022-02-23 20:03:57', b'0', 1); INSERT INTO `system_role_menu` VALUES (1491, 1, 3, '1', '2022-02-23 20:03:57', '1', '2022-02-23 12:04:07', b'1', 1); @@ -4808,11 +5257,11 @@ INSERT INTO `system_role_menu` VALUES (1527, 1, 500, '1', '2022-02-23 20:03:57', INSERT INTO `system_role_menu` VALUES (1528, 1, 501, '1', '2022-02-23 20:03:57', '1', '2022-02-23 20:03:57', b'0', 1); INSERT INTO `system_role_menu` VALUES (1529, 109, 1024, '1', '2022-02-23 20:30:14', '1', '2022-02-23 20:30:14', b'0', 121); INSERT INTO `system_role_menu` VALUES (1530, 109, 1025, '1', '2022-02-23 20:30:14', '1', '2022-02-23 20:30:14', b'0', 121); -INSERT INTO `system_role_menu` VALUES (1531, 109, 1026, '1', '2022-02-23 20:30:14', '1', '2022-02-23 20:30:14', b'0', 121); -INSERT INTO `system_role_menu` VALUES (1532, 109, 1027, '1', '2022-02-23 20:30:14', '1', '2022-02-23 20:30:14', b'0', 121); -INSERT INTO `system_role_menu` VALUES (1533, 109, 1028, '1', '2022-02-23 20:30:14', '1', '2022-02-23 20:30:14', b'0', 121); -INSERT INTO `system_role_menu` VALUES (1534, 109, 1029, '1', '2022-02-23 20:30:14', '1', '2022-02-23 20:30:14', b'0', 121); -INSERT INTO `system_role_menu` VALUES (1535, 109, 1030, '1', '2022-02-23 20:30:14', '1', '2022-02-23 20:30:14', b'0', 121); +INSERT INTO `system_role_menu` VALUES (1531, 109, 1026, '1', '2022-02-23 20:30:14', '1', '2022-03-19 10:39:06', b'1', 121); +INSERT INTO `system_role_menu` VALUES (1532, 109, 1027, '1', '2022-02-23 20:30:14', '1', '2022-03-19 10:39:06', b'1', 121); +INSERT INTO `system_role_menu` VALUES (1533, 109, 1028, '1', '2022-02-23 20:30:14', '1', '2022-03-19 10:39:06', b'1', 121); +INSERT INTO `system_role_menu` VALUES (1534, 109, 1029, '1', '2022-02-23 20:30:14', '1', '2022-03-19 10:39:06', b'1', 121); +INSERT INTO `system_role_menu` VALUES (1535, 109, 1030, '1', '2022-02-23 20:30:14', '1', '2022-03-19 10:39:06', b'1', 121); INSERT INTO `system_role_menu` VALUES (1536, 109, 1017, '1', '2022-02-23 20:30:14', '1', '2022-02-23 20:30:14', b'0', 121); INSERT INTO `system_role_menu` VALUES (1537, 109, 1018, '1', '2022-02-23 20:30:14', '1', '2022-02-23 20:30:14', b'0', 121); INSERT INTO `system_role_menu` VALUES (1538, 109, 1019, '1', '2022-02-23 20:30:14', '1', '2022-02-23 20:30:14', b'0', 121); @@ -4848,22 +5297,22 @@ INSERT INTO `system_role_menu` VALUES (1567, 101, 1004, '1', '2022-02-27 12:08:3 INSERT INTO `system_role_menu` VALUES (1568, 101, 1005, '1', '2022-02-27 12:08:37', '1', '2022-02-27 04:11:38', b'1', 1); INSERT INTO `system_role_menu` VALUES (1569, 101, 1006, '1', '2022-02-27 12:08:38', '1', '2022-02-27 04:11:38', b'1', 1); INSERT INTO `system_role_menu` VALUES (1570, 101, 1007, '1', '2022-02-27 12:08:38', '1', '2022-02-27 04:11:38', b'1', 1); -INSERT INTO `system_role_menu` VALUES (1571, 101, 103, '1', '2022-02-27 12:11:39', '1', '2022-02-27 12:11:39', b'0', 1); -INSERT INTO `system_role_menu` VALUES (1572, 101, 1017, '1', '2022-02-27 12:11:39', '1', '2022-02-27 12:11:39', b'0', 1); -INSERT INTO `system_role_menu` VALUES (1573, 101, 1018, '1', '2022-02-27 12:11:39', '1', '2022-02-27 12:11:39', b'0', 1); -INSERT INTO `system_role_menu` VALUES (1574, 101, 1019, '1', '2022-02-27 12:11:39', '1', '2022-02-27 12:11:39', b'0', 1); -INSERT INTO `system_role_menu` VALUES (1575, 101, 1020, '1', '2022-02-27 12:11:39', '1', '2022-02-27 12:11:39', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1571, 101, 103, '1', '2022-02-27 12:11:39', '1', '2022-03-19 13:45:52', b'1', 1); +INSERT INTO `system_role_menu` VALUES (1572, 101, 1017, '1', '2022-02-27 12:11:39', '1', '2022-03-19 13:45:52', b'1', 1); +INSERT INTO `system_role_menu` VALUES (1573, 101, 1018, '1', '2022-02-27 12:11:39', '1', '2022-03-19 13:45:52', b'1', 1); +INSERT INTO `system_role_menu` VALUES (1574, 101, 1019, '1', '2022-02-27 12:11:39', '1', '2022-03-19 13:45:52', b'1', 1); +INSERT INTO `system_role_menu` VALUES (1575, 101, 1020, '1', '2022-02-27 12:11:39', '1', '2022-03-19 13:45:52', b'1', 1); INSERT INTO `system_role_menu` VALUES (1576, 111, 1024, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); INSERT INTO `system_role_menu` VALUES (1577, 111, 1025, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); INSERT INTO `system_role_menu` VALUES (1578, 111, 1, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); -INSERT INTO `system_role_menu` VALUES (1579, 111, 1026, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); -INSERT INTO `system_role_menu` VALUES (1580, 111, 1027, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); -INSERT INTO `system_role_menu` VALUES (1581, 111, 1028, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); -INSERT INTO `system_role_menu` VALUES (1582, 111, 1029, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); -INSERT INTO `system_role_menu` VALUES (1583, 111, 1030, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1579, 111, 1026, '1', '2022-03-07 21:37:58', '1', '2022-03-19 10:39:06', b'1', 122); +INSERT INTO `system_role_menu` VALUES (1580, 111, 1027, '1', '2022-03-07 21:37:58', '1', '2022-03-19 10:39:06', b'1', 122); +INSERT INTO `system_role_menu` VALUES (1581, 111, 1028, '1', '2022-03-07 21:37:58', '1', '2022-03-19 10:39:06', b'1', 122); +INSERT INTO `system_role_menu` VALUES (1582, 111, 1029, '1', '2022-03-07 21:37:58', '1', '2022-03-19 10:39:06', b'1', 122); +INSERT INTO `system_role_menu` VALUES (1583, 111, 1030, '1', '2022-03-07 21:37:58', '1', '2022-03-19 10:39:06', b'1', 122); INSERT INTO `system_role_menu` VALUES (1584, 111, 103, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); INSERT INTO `system_role_menu` VALUES (1585, 111, 104, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); -INSERT INTO `system_role_menu` VALUES (1586, 111, 105, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1586, 111, 105, '1', '2022-03-07 21:37:58', '1', '2022-03-19 10:39:06', b'1', 122); INSERT INTO `system_role_menu` VALUES (1587, 111, 1017, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); INSERT INTO `system_role_menu` VALUES (1588, 111, 1018, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); INSERT INTO `system_role_menu` VALUES (1589, 111, 1019, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); @@ -4871,6 +5320,53 @@ INSERT INTO `system_role_menu` VALUES (1590, 111, 1020, '1', '2022-03-07 21:37:5 INSERT INTO `system_role_menu` VALUES (1591, 111, 1021, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); INSERT INTO `system_role_menu` VALUES (1592, 111, 1022, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); INSERT INTO `system_role_menu` VALUES (1593, 111, 1023, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1594, 109, 102, '1', '2022-03-19 18:39:13', '1', '2022-03-19 18:39:13', b'0', 121); +INSERT INTO `system_role_menu` VALUES (1595, 109, 1013, '1', '2022-03-19 18:39:13', '1', '2022-03-19 18:39:13', b'0', 121); +INSERT INTO `system_role_menu` VALUES (1596, 109, 1014, '1', '2022-03-19 18:39:13', '1', '2022-03-19 18:39:13', b'0', 121); +INSERT INTO `system_role_menu` VALUES (1597, 109, 1015, '1', '2022-03-19 18:39:13', '1', '2022-03-19 18:39:13', b'0', 121); +INSERT INTO `system_role_menu` VALUES (1598, 109, 1016, '1', '2022-03-19 18:39:13', '1', '2022-03-19 18:39:13', b'0', 121); +INSERT INTO `system_role_menu` VALUES (1599, 111, 102, '1', '2022-03-19 18:39:13', '1', '2022-03-19 18:39:13', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1600, 111, 1013, '1', '2022-03-19 18:39:13', '1', '2022-03-19 18:39:13', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1601, 111, 1014, '1', '2022-03-19 18:39:13', '1', '2022-03-19 18:39:13', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1602, 111, 1015, '1', '2022-03-19 18:39:13', '1', '2022-03-19 18:39:13', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1603, 111, 1016, '1', '2022-03-19 18:39:13', '1', '2022-03-19 18:39:13', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1604, 101, 1216, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1605, 101, 1217, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1606, 101, 1218, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1607, 101, 1219, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1608, 101, 1220, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1609, 101, 1221, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1610, 101, 5, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1611, 101, 1222, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1612, 101, 1118, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1613, 101, 1119, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1614, 101, 1120, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1615, 101, 1185, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1616, 101, 1186, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1617, 101, 1187, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1618, 101, 1188, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1619, 101, 1189, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1620, 101, 1190, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1621, 101, 1191, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1622, 101, 1192, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1623, 101, 1193, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1624, 101, 1194, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1625, 101, 1195, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1626, 101, 1196, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1627, 101, 1197, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1628, 101, 1198, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1629, 101, 1199, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1630, 101, 1200, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1631, 101, 1201, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1632, 101, 1202, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1633, 101, 1207, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1634, 101, 1208, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1635, 101, 1209, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1636, 101, 1210, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1637, 101, 1211, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1638, 101, 1212, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1639, 101, 1213, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1640, 101, 1215, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); COMMIT; -- ---------------------------- @@ -4969,7 +5465,7 @@ CREATE TABLE `system_sms_log` ( `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=130 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='短信日志'; +) ENGINE=InnoDB AUTO_INCREMENT=134 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='短信日志'; -- ---------------------------- -- Records of system_sms_log @@ -4978,6 +5474,9 @@ BEGIN; INSERT INTO `system_sms_log` VALUES (127, 1, 'YUN_PIAN', 2, 'test_01', 1, '正在进行登录操作x,您的验证码是1024', '{\"operation\":\"x\",\"code\":\"1024\"}', '4383920', '15601691399', NULL, 2, 10, '2022-02-24 00:51:19', 0, '成功', '0', '发送成功', NULL, '70937649332', 10, '2022-02-24 00:51:23', 'DELIVRD', 'DELIVRD', '1', '2022-02-24 00:51:19', NULL, '2022-02-24 00:51:25', b'0'); INSERT INTO `system_sms_log` VALUES (128, 4, 'DEBUG_DING_TALK', 9, 'bpm_task_assigned', 2, '您收到了一条新的待办任务:flowable测试-task01,申请人:芋道源码,处理链接:http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=c964c377-97ed-11ec-a2b9-862bc1a4a054', '{\"startUserNickname\":\"芋道源码\",\"taskName\":\"task01\",\"detailUrl\":\"http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=c964c377-97ed-11ec-a2b9-862bc1a4a054\",\"processInstanceName\":\"flowable测试\"}', 'suibian', '15612345678', 1, 2, 10, '2022-02-28 00:53:30', 0, '成功', '0', NULL, NULL, 'd7923606-fe81-4196-8ce9-148c0b355496', 0, NULL, NULL, NULL, '1', '2022-02-28 00:53:29', NULL, '2022-02-28 00:53:30', b'0'); INSERT INTO `system_sms_log` VALUES (129, 4, 'DEBUG_DING_TALK', 11, 'bpm_process_instance_approve', 2, '您的流程被审批通过:flowable测试,查看链接:http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=c964c377-97ed-11ec-a2b9-862bc1a4a054', '{\"detailUrl\":\"http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=c964c377-97ed-11ec-a2b9-862bc1a4a054\",\"processInstanceName\":\"flowable测试\"}', 'suibian', '15612345678', 1, 2, 10, '2022-02-28 00:53:35', 0, '成功', '0', NULL, NULL, '6519bf56-b6c2-45ad-b81b-d89e84f95359', 0, NULL, NULL, NULL, '1', '2022-02-28 00:53:35', NULL, '2022-02-28 00:53:35', b'0'); +INSERT INTO `system_sms_log` VALUES (130, 4, 'DEBUG_DING_TALK', 9, 'bpm_task_assigned', 2, '您收到了一条新的待办任务:通用表单-部门领导审批,申请人:芋道源码,处理链接:http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=6be9f198-a787-11ec-96d6-8e557beca7ad', '{\"startUserNickname\":\"芋道源码\",\"taskName\":\"部门领导审批\",\"detailUrl\":\"http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=6be9f198-a787-11ec-96d6-8e557beca7ad\",\"processInstanceName\":\"通用表单\"}', 'suibian', '15612345678', 1, 2, 10, '2022-03-19 21:21:03', 0, '成功', '0', NULL, NULL, '93d3803d-6a95-4d6f-91a1-89416764b34d', 0, NULL, NULL, NULL, '1', '2022-03-19 21:21:02', NULL, '2022-03-19 21:21:03', b'0'); +INSERT INTO `system_sms_log` VALUES (131, 4, 'DEBUG_DING_TALK', 9, 'bpm_task_assigned', 2, '您收到了一条新的待办任务:通用表单-HR 审批,申请人:芋道源码,处理链接:http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=6be9f198-a787-11ec-96d6-8e557beca7ad', '{\"startUserNickname\":\"芋道源码\",\"taskName\":\"HR 审批\",\"detailUrl\":\"http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=6be9f198-a787-11ec-96d6-8e557beca7ad\",\"processInstanceName\":\"通用表单\"}', 'suibian', '15612345678', 1, 2, 10, '2022-03-19 22:00:46', 0, '成功', '0', NULL, NULL, '97635216-89f0-4a97-9459-33f60473a6bb', 0, NULL, NULL, NULL, '104', '2022-03-19 22:00:45', NULL, '2022-03-19 22:00:46', b'0'); +INSERT INTO `system_sms_log` VALUES (132, 4, 'DEBUG_DING_TALK', 11, 'bpm_process_instance_approve', 2, '您的流程被审批通过:通用表单,查看链接:http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=6be9f198-a787-11ec-96d6-8e557beca7ad', '{\"detailUrl\":\"http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=6be9f198-a787-11ec-96d6-8e557beca7ad\",\"processInstanceName\":\"通用表单\"}', 'suibian', '15612345678', 1, 2, 10, '2022-03-19 22:16:00', 0, '成功', '0', NULL, NULL, '1fbb5236-85bc-472a-b6a3-37dee594c162', 0, NULL, NULL, NULL, '114', '2022-03-19 22:16:00', NULL, '2022-03-19 22:16:00', b'0'); COMMIT; -- ---------------------------- @@ -5079,7 +5578,7 @@ CREATE TABLE `system_tenant` ( -- ---------------------------- BEGIN; INSERT INTO `system_tenant` VALUES (1, '芋道源码', NULL, '芋艿', '17321315478', 0, 'https://www.iocoder.cn', 0, '2099-02-19 17:14:16', 9999, '1', '2021-01-05 17:03:47', '1', '2022-02-23 12:15:11', b'0'); -INSERT INTO `system_tenant` VALUES (121, '小租户', 110, '小王2', '15601691300', 0, 'http://www.iocoder.cn', 111, '2022-02-28 00:00:00', 20, '1', '2022-02-22 00:56:14', '1', '2022-02-23 00:08:45', b'0'); +INSERT INTO `system_tenant` VALUES (121, '小租户', 110, '小王2', '15601691300', 0, 'http://www.iocoder.cn', 111, '2024-03-11 00:00:00', 20, '1', '2022-02-22 00:56:14', '1', '2022-03-19 18:37:20', b'0'); INSERT INTO `system_tenant` VALUES (122, '测试租户', 113, '芋道', '15601691300', 0, 'https://www.iocoder.cn', 111, '2022-04-30 00:00:00', 50, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0'); COMMIT; @@ -5105,7 +5604,7 @@ CREATE TABLE `system_tenant_package` ( -- Records of system_tenant_package -- ---------------------------- BEGIN; -INSERT INTO `system_tenant_package` VALUES (111, '普通套餐', 0, '小功能', '[1024,1025,1,1026,1027,1028,1029,1030,103,104,105,1017,1018,1019,1020,1021,1022,1023]', '1', '2022-02-22 00:54:00', '1', '2022-02-23 20:30:14', b'0'); +INSERT INTO `system_tenant_package` VALUES (111, '普通套餐', 0, '小功能', '[1024,1025,1,102,103,104,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023]', '1', '2022-02-22 00:54:00', '1', '2022-03-19 18:39:13', b'0'); COMMIT; -- ---------------------------- @@ -5134,23 +5633,24 @@ CREATE TABLE `system_user` ( `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=114 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表'; +) ENGINE=InnoDB AUTO_INCREMENT=115 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表'; -- ---------------------------- -- Records of system_user -- ---------------------------- BEGIN; -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/admin-api/infra/file/get/b7de3474-3805-4e09-80e3-185f20c31a74', 0, '127.0.0.1', '2022-03-11 00:24:08', 'admin', '2021-01-05 17:03:47', NULL, '2022-03-11 00:24:08', b'0', 1); +INSERT INTO `system_user` VALUES (1, 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://test.yudao.iocoder.cn/a294ecb2-73dd-4353-bf40-296b8931d0bf', 0, '127.0.0.1', '2022-03-19 18:27:50', 'admin', '2021-01-05 17:03:47', NULL, '2022-03-19 18:27:50', b'0', 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$scdhm8AdaYkG6XvV/R21xu7SEBhgyU7QmdmDLv7aR8iWV5IUiwVEC', '测试号', NULL, 107, '[]', '', '15601691200', 1, '', 0, '127.0.0.1', '2022-02-27 11:10:07', '', '2021-01-21 02:13:53', NULL, '2022-02-27 11:10:07', b'0', 1); +INSERT INTO `system_user` VALUES (104, 'test', '$2a$10$e5RpuDCC0GYSt0Hvd2.CjujIXwgGct4SnXi6dVGxdgFsnqgEryk5a', '测试号', NULL, 107, '[]', '111@qq.com', '15601691200', 1, '', 0, '127.0.0.1', '2022-03-19 21:46:19', '', '2021-01-21 02:13:53', NULL, '2022-03-19 21:46:19', b'0', 1); INSERT INTO `system_user` VALUES (107, 'admin107', '$2a$10$dYOOBKMO93v/.ReCqzyFg.o67Tqk.bbc2bhrpyBGkIw9aypCtr2pm', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 22:59:33', '1', '2022-02-27 08:26:51', b'0', 118); INSERT INTO `system_user` VALUES (108, 'admin108', '$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:00:50', '1', '2022-02-27 08:26:53', b'0', 119); INSERT INTO `system_user` VALUES (109, 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:11:50', '1', '2022-02-27 08:26:56', b'0', 120); INSERT INTO `system_user` VALUES (110, 'admin110', '$2a$10$qYxoXs0ogPHgYllyEneYde9xcCW5hZgukrxeXZ9lmLhKse8TK6IwW', '小王', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-02-23 19:36:28', '1', '2022-02-22 00:56:14', NULL, '2022-02-27 08:26:59', b'0', 121); INSERT INTO `system_user` VALUES (111, 'test', '$2a$10$mExveopHUx9Q4QiLtAzhDeH3n4/QlNLzEsM4AqgxKrU.ciUZDXZCy', '测试用户', NULL, NULL, '[]', '', '', 0, '', 0, '', NULL, '110', '2022-02-23 13:14:33', '110', '2022-02-23 13:14:33', b'0', 121); INSERT INTO `system_user` VALUES (112, 'newobject', '$2a$10$jh5MsR.ud/gKe3mVeUp5t.nEXGDSmHyv5OYjWQwHO8wlGmMSI9Twy', '新对象', NULL, NULL, '[]', '', '', 0, '', 0, '', NULL, '1', '2022-02-23 19:08:03', '1', '2022-02-23 19:08:03', b'0', 1); -INSERT INTO `system_user` VALUES (113, 'aoteman', '$2a$10$lAEsjpPIIsC3DFzsoX9.L.yKydbPGkVyeaOcH.J2SqSGoQvB6GZmy', '芋道', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-03-07 21:43:59', '1', '2022-03-07 21:37:58', NULL, '2022-03-07 21:43:59', b'0', 122); +INSERT INTO `system_user` VALUES (113, 'aoteman', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-03-19 18:38:51', '1', '2022-03-07 21:37:58', NULL, '2022-03-19 18:38:51', b'0', 122); +INSERT INTO `system_user` VALUES (114, 'hrmgr', '$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', 'hr 小姐姐', NULL, NULL, '[3]', '', '', 0, '', 0, '127.0.0.1', '2022-03-19 22:15:43', '1', '2022-03-19 21:50:58', NULL, '2022-03-19 22:15:43', b'0', 1); COMMIT; -- ---------------------------- @@ -5168,7 +5668,7 @@ CREATE TABLE `system_user_role` ( `deleted` bit(1) DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户和角色关联表'; +) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户和角色关联表'; -- ---------------------------- -- Records of system_user_role @@ -5189,6 +5689,7 @@ INSERT INTO `system_user_role` VALUES (13, 109, 108, '1', '2022-02-20 23:11:50', INSERT INTO `system_user_role` VALUES (14, 110, 109, '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', b'0', 121); INSERT INTO `system_user_role` VALUES (15, 111, 110, '110', '2022-02-23 13:14:38', '110', '2022-02-23 13:14:38', b'0', 121); INSERT INTO `system_user_role` VALUES (16, 113, 111, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_user_role` VALUES (17, 114, 101, '1', '2022-03-19 21:51:13', '1', '2022-03-19 21:51:13', b'0', 1); COMMIT; -- ---------------------------- @@ -5216,19 +5717,30 @@ CREATE TABLE `system_user_session` ( -- Records of system_user_session -- ---------------------------- BEGIN; +INSERT INTO `system_user_session` VALUES ('084a5a2a737b42e3bb13604a2ff6d4fe', 1, 2, '2022-03-13 18:01:54', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-12 18:01:54', NULL, '2022-03-12 18:01:54', b'0', 1); INSERT INTO `system_user_session` VALUES ('0d7a900b4a5e4089a48a54a71bca83e6', 1, 2, '2022-02-28 11:56:22', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-27 11:56:22', NULL, '2022-02-27 08:25:28', b'1', 1); INSERT INTO `system_user_session` VALUES ('101dc01ff37b4ceaa60a63e1c1005bbf', 1, 2, '2022-03-08 21:47:01', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:47:01', NULL, '2022-03-07 21:47:01', b'0', 1); +INSERT INTO `system_user_session` VALUES ('116ed46314c64d528cadcdc4e5a74710', 1, 2, '2022-03-20 18:27:50', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 18:27:50', NULL, '2022-03-19 18:27:50', b'0', 1); +INSERT INTO `system_user_session` VALUES ('2759180f76414d3d9807c47026b6f5a5', 1, 2, '2022-03-17 21:27:25', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-15 00:19:03', NULL, '2022-03-16 21:27:25', b'0', 1); INSERT INTO `system_user_session` VALUES ('2935322c671b43fbbe7eb5532800bbcf', 110, 2, '2022-02-24 19:36:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-23 19:36:28', NULL, '2022-02-23 19:36:28', b'0', 121); +INSERT INTO `system_user_session` VALUES ('34fafe141291443ab0da27e1bc12a011', 1, 2, '2022-03-13 16:25:02', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-12 16:25:02', NULL, '2022-03-12 09:55:31', b'1', 1); INSERT INTO `system_user_session` VALUES ('3bb5bae78cc24cb5a1c1df9c479b50ad', 1, 2, '2022-02-21 23:57:11', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-20 23:57:11', NULL, '2022-02-20 23:57:11', b'0', 1); +INSERT INTO `system_user_session` VALUES ('3bc770291bc44fcfad0bf91e5bfded0e', 104, 2, '2022-03-20 21:46:19', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 21:46:19', NULL, '2022-03-19 14:13:05', b'1', 1); INSERT INTO `system_user_session` VALUES ('4a97fd8f3721416ebe6c682ca9d70743', 1, 2, '2022-03-12 00:24:08', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-11 00:24:08', NULL, '2022-03-11 00:24:08', b'0', 1); -INSERT INTO `system_user_session` VALUES ('8951e01e18774a92b0382a76dfa5aab9', 1, 2, '2022-03-12 00:16:29', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-11 00:16:29', NULL, '2022-03-11 00:16:29', b'0', 1); +INSERT INTO `system_user_session` VALUES ('7b0c15457686444bb17fb810807859f0', 114, 2, '2022-03-20 22:15:43', 'hrmgr', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 22:15:43', NULL, '2022-03-19 22:15:43', b'0', 1); +INSERT INTO `system_user_session` VALUES ('8951e01e18774a92b0382a76dfa5aab9', 1, 2, '2022-03-13 14:30:59', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-11 00:16:29', NULL, '2022-03-12 14:30:59', b'0', 1); INSERT INTO `system_user_session` VALUES ('95e6336e75794bffbd5b6b7617d24c52', 1, 2, '2022-03-08 21:36:53', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:36:53', NULL, '2022-03-07 13:42:52', b'1', 1); INSERT INTO `system_user_session` VALUES ('9c93fd1cd23a43e3854451b781420aed', 1, 2, '2022-02-28 16:27:05', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-27 16:27:05', NULL, '2022-02-27 16:27:05', b'0', 0); INSERT INTO `system_user_session` VALUES ('a0cd3f0adcaa4bb3951b24969990f235', 1, 2, '2022-03-08 21:08:36', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:08:36', NULL, '2022-03-07 21:08:36', b'0', 1); INSERT INTO `system_user_session` VALUES ('b1bd95d813024acab14dd171ca887a94', 1, 2, '2022-02-28 10:52:17', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-27 10:52:17', NULL, '2022-02-27 10:52:17', b'0', 1); +INSERT INTO `system_user_session` VALUES ('cb97d665c2bd4525b2fbfe9a399f5926', 104, 2, '2022-03-13 17:55:44', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-12 17:55:44', NULL, '2022-03-12 10:01:46', b'1', 1); +INSERT INTO `system_user_session` VALUES ('daadfe0f94f34d60b1f83088612cf3e9', 1, 2, '2022-03-18 18:36:04', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-16 23:46:20', NULL, '2022-03-17 18:36:04', b'0', 1); +INSERT INTO `system_user_session` VALUES ('db48c609bd2840bca7499bddb43eeabe', 113, 2, '2022-03-20 18:38:51', 'aoteman', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 18:38:51', NULL, '2022-03-19 18:38:51', b'0', 122); INSERT INTO `system_user_session` VALUES ('db777da72b0b4a528915d80c7b272141', 113, 2, '2022-03-08 21:43:59', 'aoteman', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:43:59', NULL, '2022-03-07 13:45:02', b'1', 122); +INSERT INTO `system_user_session` VALUES ('df7083510c63407489688a800a55d97b', 1, 2, '2022-03-21 02:25:33', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-18 22:24:46', NULL, '2022-03-20 02:25:33', b'0', 1); INSERT INTO `system_user_session` VALUES ('e769a8511c4043a886f68d1d6c39bddd', 104, 2, '2022-02-28 11:10:07', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-27 11:10:07', NULL, '2022-02-27 11:10:07', b'0', 1); INSERT INTO `system_user_session` VALUES ('ec60e16dfd2546e1a118eef7a42c07ef', 1, 2, '2022-02-24 22:33:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-22 00:44:08', NULL, '2022-02-23 22:33:28', b'0', 1); +INSERT INTO `system_user_session` VALUES ('f088b33f48e640a293b2353a07f67371', 104, 2, '2022-03-20 21:45:14', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-19 21:45:14', NULL, '2022-03-19 13:46:11', b'1', 1); COMMIT; SET FOREIGN_KEY_CHECKS = 1; diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml index e47ee45e5..686b9f633 100644 --- a/yudao-dependencies/pom.xml +++ b/yudao-dependencies/pom.xml @@ -14,7 +14,7 @@ https://github.com/YunaiV/ruoyi-vue-pro - 1.6.0-snapshot + 1.6.1-snapshot 2.5.10 @@ -28,7 +28,7 @@ 3.5.0 3.16.6 - 1.7.0 + 1.9.2 2.2.0 @@ -52,8 +52,12 @@ 2.2 1.0.5 30.1.1-jre + 5.1.0 2.12.2 + 3.8.0 + 0.1.55 + 8.2.2 4.5.25 2.1.0 1.2.7 @@ -487,13 +491,40 @@ ${guava.version} + + com.google.inject + guice + ${guice.version} + + com.alibaba transmittable-thread-local ${transmittable-thread-local.version} + + commons-net + commons-net + ${commons-net.version} + + + com.jcraft + jsch + ${jsch.version} + + + + cn.iocoder.boot + yudao-spring-boot-starter-file + ${revision} + + + io.minio + minio + ${minio.version} + diff --git a/yudao-framework/pom.xml b/yudao-framework/pom.xml index 8c4a9b586..73bb614cd 100644 --- a/yudao-framework/pom.xml +++ b/yudao-framework/pom.xml @@ -16,6 +16,7 @@ yudao-spring-boot-starter-web yudao-spring-boot-starter-security + yudao-spring-boot-starter-file yudao-spring-boot-starter-monitor yudao-spring-boot-starter-protection yudao-spring-boot-starter-config diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java index 56baaed95..63732f1b3 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java @@ -22,13 +22,40 @@ public class FileUtils { */ @SneakyThrows public static File createTempFile(String data) { - // 创建文件,通过 UUID 保证唯一 - File file = File.createTempFile(IdUtil.simpleUUID(), null); - // 标记 JVM 退出时,自动删除 - file.deleteOnExit(); + File file = createTempFile(); // 写入内容 FileUtil.writeUtf8String(data, file); return file; } + /** + * 创建临时文件 + * 该文件会在 JVM 退出时,进行删除 + * + * @param data 文件内容 + * @return 文件 + */ + @SneakyThrows + public static File createTempFile(byte[] data) { + File file = createTempFile(); + // 写入内容 + FileUtil.writeBytes(data, file); + return file; + } + + /** + * 创建临时文件,无内容 + * 该文件会在 JVM 退出时,进行删除 + * + * @return 文件 + */ + @SneakyThrows + public static File createTempFile() { + // 创建文件,通过 UUID 保证唯一 + File file = File.createTempFile(IdUtil.simpleUUID(), null); + // 标记 JVM 退出时,自动删除 + file.deleteOnExit(); + return file; + } + } diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/JsonUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/JsonUtils.java index 35bac965c..21dc101f9 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/JsonUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/JsonUtils.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.framework.common.util.json; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -55,7 +56,6 @@ public class JsonUtils { if (StrUtil.isEmpty(text)) { return null; } - try { return objectMapper.readValue(text, clazz); } catch (IOException e) { @@ -64,11 +64,26 @@ public class JsonUtils { } } + /** + * 将字符串解析成指定类型的对象 + * 使用 {@link #parseObject(String, Class)} 时,在@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) 的场景下, + * 如果 text 没有 class 属性,则会报错。此时,使用这个方法,可以解决。 + * + * @param text 字符串 + * @param clazz 类型 + * @return 对象 + */ + public static T parseObject2(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return null; + } + return JSONUtil.toBean(text, clazz); + } + public static T parseObject(byte[] bytes, Class clazz) { if (ArrayUtil.isEmpty(bytes)) { return null; } - try { return objectMapper.readValue(bytes, clazz); } catch (IOException e) { @@ -90,7 +105,6 @@ public class JsonUtils { if (StrUtil.isEmpty(text)) { return new ArrayList<>(); } - try { return objectMapper.readValue(text, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz)); } catch (IOException e) { diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/validation/ValidationUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/validation/ValidationUtils.java index 9ff5b0583..d9a01747d 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/validation/ValidationUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/validation/ValidationUtils.java @@ -39,8 +39,8 @@ public class ValidationUtils { && PATTERN_XML_NCNAME.matcher(str).matches(); } - public static void validate(Validator validator, Object reqVO, Class... groups) { - Set> constraintViolations = validator.validate(reqVO, groups); + public static void validate(Validator validator, Object object, Class... groups) { + Set> constraintViolations = validator.validate(object, groups); if (CollUtil.isNotEmpty(constraintViolations)) { throw new ConstraintViolationException(constraintViolations); } diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/config/YudaoPayAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/config/YudaoPayAutoConfiguration.java index d49c1c2b2..c4d41b6f5 100644 --- a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/config/YudaoPayAutoConfiguration.java +++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/config/YudaoPayAutoConfiguration.java @@ -11,6 +11,7 @@ import org.springframework.context.annotation.Configuration; * * @author 芋道源码 */ +@Configuration @EnableConfigurationProperties(PayProperties.class) public class YudaoPayAutoConfiguration { diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/AbstractPayClient.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/AbstractPayClient.java index 38b8875a1..292b6cf01 100644 --- a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/AbstractPayClient.java +++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/AbstractPayClient.java @@ -1,7 +1,6 @@ package cn.iocoder.yudao.framework.pay.core.client.impl; import cn.hutool.extra.validation.ValidationUtil; -import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.iocoder.yudao.framework.pay.core.client.AbstractPayCodeMapping; import cn.iocoder.yudao.framework.pay.core.client.PayClient; import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig; @@ -11,7 +10,6 @@ import cn.iocoder.yudao.framework.pay.core.client.dto.PayRefundUnifiedReqDTO; import cn.iocoder.yudao.framework.pay.core.client.dto.PayRefundUnifiedRespDTO; import lombok.extern.slf4j.Slf4j; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; /** @@ -26,7 +24,6 @@ public abstract class AbstractPayClient implemen * 渠道编号 */ private final Long channelId; - /** * 渠道编码 */ @@ -40,10 +37,6 @@ public abstract class AbstractPayClient implemen */ protected Config config; - protected Double calculateAmount(Long amount) { - return amount / 100.0; - } - public AbstractPayClient(Long channelId, String channelCode, Config config, AbstractPayCodeMapping codeMapping) { this.channelId = channelId; this.channelCode = channelCode; @@ -75,6 +68,10 @@ public abstract class AbstractPayClient implemen this.init(); } + protected Double calculateAmount(Long amount) { + return amount / 100.0; + } + @Override public Long getId() { return channelId; @@ -96,12 +93,9 @@ public abstract class AbstractPayClient implemen return result; } - - protected abstract PayCommonResult doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) throws Throwable; - @Override public PayCommonResult unifiedRefund(PayRefundUnifiedReqDTO reqDTO) { PayCommonResult resp; @@ -115,7 +109,6 @@ public abstract class AbstractPayClient implemen return resp; } - protected abstract PayCommonResult doUnifiedRefund(PayRefundUnifiedReqDTO reqDTO) throws Throwable; } diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/PayClientFactoryImpl.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/PayClientFactoryImpl.java index edfd44952..647152196 100644 --- a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/PayClientFactoryImpl.java +++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/PayClientFactoryImpl.java @@ -27,11 +27,11 @@ public class PayClientFactoryImpl implements PayClientFactory { * 支付客户端 Map * key:渠道编号 */ - private final ConcurrentMap> channelIdClients = new ConcurrentHashMap<>(); + private final ConcurrentMap> clients = new ConcurrentHashMap<>(); @Override public PayClient getPayClient(Long channelId) { - AbstractPayClient client = channelIdClients.get(channelId); + AbstractPayClient client = clients.get(channelId); if (client == null) { log.error("[getPayClient][渠道编号({}) 找不到客户端]", channelId); } @@ -42,11 +42,11 @@ public class PayClientFactoryImpl implements PayClientFactory { @SuppressWarnings("unchecked") public void createOrUpdatePayClient(Long channelId, String channelCode, Config config) { - AbstractPayClient client = (AbstractPayClient) channelIdClients.get(channelId); + AbstractPayClient client = (AbstractPayClient) clients.get(channelId); if (client == null) { client = this.createPayClient(channelId, channelCode, config); client.init(); - channelIdClients.put(client.getId(), client); + clients.put(client.getId(), client); } else { client.refresh(config); } @@ -69,7 +69,7 @@ public class PayClientFactoryImpl implements PayClientFactory { case ALIPAY_PC: return (AbstractPayClient) new AlipayQrPayClient(channelId, (AlipayPayClientConfig) config); } // 创建失败,错误日志 + 抛出异常 - log.error("[createSmsClient][配置({}) 找不到合适的客户端实现]", config); + log.error("[createPayClient][配置({}) 找不到合适的客户端实现]", config); throw new IllegalArgumentException(String.format("配置(%s) 找不到合适的客户端实现", config)); } 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 f8a4971a1..fccbab84b 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 @@ -56,5 +56,4 @@ public enum PayChannelEnum { return ArrayUtil.firstMatch(o -> o.getCode().equals(code), values()); } - } diff --git a/yudao-framework/yudao-spring-boot-starter-file/pom.xml b/yudao-framework/yudao-spring-boot-starter-file/pom.xml new file mode 100644 index 000000000..72eafba58 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/pom.xml @@ -0,0 +1,78 @@ + + + + yudao-framework + cn.iocoder.boot + ${revision} + + 4.0.0 + yudao-spring-boot-starter-file + + ${project.artifactId} + 文件客户端,支持多种存储器 + 1. file:本地磁盘 + 2. ftp:FTP 服务器 + 2. sftp:SFTP 服务器 + 4. db:数据库 + 5. s3:支持 S3 协议的云存储服务,例如说 MinIO、阿里云、华为云、腾讯云、七牛云等等 + + https://github.com/YunaiV/ruoyi-vue-pro + + + + cn.iocoder.boot + yudao-common + + + + + org.springframework.boot + spring-boot-starter + + + + + org.springframework.boot + spring-boot-starter-validation + + + + org.slf4j + slf4j-api + + + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.core + jackson-core + + + + commons-net + commons-net + + + com.jcraft + jsch + + + + + io.minio + minio + + + + + cn.iocoder.boot + yudao-spring-boot-starter-test + test + + + + diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/config/YudaoFileAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/config/YudaoFileAutoConfiguration.java new file mode 100644 index 000000000..5f7bd91fe --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/config/YudaoFileAutoConfiguration.java @@ -0,0 +1,21 @@ +package cn.iocoder.yudao.framework.file.config; + +import cn.iocoder.yudao.framework.file.core.client.FileClientFactory; +import cn.iocoder.yudao.framework.file.core.client.FileClientFactoryImpl; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 文件配置类 + * + * @author 芋道源码 + */ +@Configuration +public class YudaoFileAutoConfiguration { + + @Bean + public FileClientFactory fileClientFactory() { + return new FileClientFactoryImpl(); + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/AbstractFileClient.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/AbstractFileClient.java new file mode 100644 index 000000000..a2d7304a8 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/AbstractFileClient.java @@ -0,0 +1,69 @@ +package cn.iocoder.yudao.framework.file.core.client; + +import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; + +/** + * 文件客户端的抽象类,提供模板方法,减少子类的冗余代码 + * + * @author 芋道源码 + */ +@Slf4j +public abstract class AbstractFileClient implements FileClient { + + /** + * 配置编号 + */ + private final Long id; + /** + * 文件配置 + */ + protected Config config; + + public AbstractFileClient(Long id, Config config) { + this.id = id; + this.config = config; + } + + /** + * 初始化 + */ + public final void init() { + doInit(); + log.info("[init][配置({}) 初始化完成]", config); + } + + /** + * 自定义初始化 + */ + protected abstract void doInit(); + + public final void refresh(Config config) { + // 判断是否更新 + if (config.equals(this.config)) { + return; + } + log.info("[refresh][配置({})发生变化,重新初始化]", config); + this.config = config; + // 初始化 + this.init(); + } + + @Override + public Long getId() { + return id; + } + + /** + * 格式化文件的 URL 访问地址 + * 使用场景:local、ftp、db,通过 FileController 的 getFile 来获取文件内容 + * + * @param domain 自定义域名 + * @param path 文件路径 + * @return URL 访问地址 + */ + protected String formatFileUrl(String domain, String path) { + return StrUtil.format("{}/admin-api/infra/file/{}/get/{}", domain, getId(), path); + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClient.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClient.java new file mode 100644 index 000000000..178c27d4c --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClient.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.framework.file.core.client; + +/** + * 文件客户端 + * + * @author 芋道源码 + */ +public interface FileClient { + + /** + * 获得客户端编号 + * + * @return 客户端编号 + */ + Long getId(); + + /** + * 上传文件 + * + * @param content 文件流 + * @param path 相对路径 + * @return 完整路径,即 HTTP 访问地址 + * @throws Exception 上传文件时,抛出 Exception 异常 + */ + String upload(byte[] content, String path) throws Exception; + + /** + * 删除文件 + * + * @param path 相对路径 + * @throws Exception 删除文件时,抛出 Exception 异常 + */ + void delete(String path) throws Exception; + + /** + * 获得文件的内容 + * + * @param path 相对路径 + * @return 文件的内容 + */ + byte[] getContent(String path) throws Exception; + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClientConfig.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClientConfig.java new file mode 100644 index 000000000..9461c05d8 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClientConfig.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.framework.file.core.client; + +import com.fasterxml.jackson.annotation.JsonTypeInfo; + +/** + * 文件客户端的配置 + * 不同实现的客户端,需要不同的配置,通过子类来定义 + * + * @author 芋道源码 + */ +@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) +// @JsonTypeInfo 注解的作用,Jackson 多态 +// 1. 序列化到时数据库时,增加 @class 属性。 +// 2. 反序列化到内存对象时,通过 @class 属性,可以创建出正确的类型 +public interface FileClientConfig { +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClientFactory.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClientFactory.java new file mode 100644 index 000000000..db90f4892 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClientFactory.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.framework.file.core.client; + +public interface FileClientFactory { + + /** + * 获得文件客户端 + * + * @param configId 配置编号 + * @return 文件客户端 + */ + FileClient getFileClient(Long configId); + + /** + * 创建文件客户端 + * + * @param configId 配置编号 + * @param storage 存储器的枚举 {@link cn.iocoder.yudao.framework.file.core.enums.FileStorageEnum} + * @param config 文件配置 + */ + void createOrUpdateFileClient(Long configId, Integer storage, Config config); + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClientFactoryImpl.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClientFactoryImpl.java new file mode 100644 index 000000000..980f8a310 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/FileClientFactoryImpl.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.framework.file.core.client; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ReflectUtil; +import cn.iocoder.yudao.framework.file.core.enums.FileStorageEnum; +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +/** + * 文件客户端的工厂实现类 + * + * @author 芋道源码 + */ +@Slf4j +public class FileClientFactoryImpl implements FileClientFactory { + + /** + * 文件客户端 Map + * key:配置编号 + */ + private final ConcurrentMap> clients = new ConcurrentHashMap<>(); + + @Override + public FileClient getFileClient(Long configId) { + AbstractFileClient client = clients.get(configId); + if (client == null) { + log.error("[getFileClient][配置编号({}) 找不到客户端]", configId); + } + return client; + } + + @Override + @SuppressWarnings("unchecked") + public void createOrUpdateFileClient(Long configId, Integer storage, Config config) { + AbstractFileClient client = (AbstractFileClient) clients.get(configId); + if (client == null) { + client = this.createFileClient(configId, storage, config); + client.init(); + clients.put(client.getId(), client); + } else { + client.refresh(config); + } + } + + @SuppressWarnings("unchecked") + private AbstractFileClient createFileClient( + Long configId, Integer storage, Config config) { + FileStorageEnum storageEnum = FileStorageEnum.getByStorage(storage); + Assert.notNull(storageEnum, String.format("文件配置(%s) 为空", storageEnum)); + // 创建客户端 + return (AbstractFileClient) ReflectUtil.newInstance(storageEnum.getClientClass(), configId, config); + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/db/DBFileClient.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/db/DBFileClient.java new file mode 100644 index 000000000..a227cc314 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/db/DBFileClient.java @@ -0,0 +1,48 @@ +package cn.iocoder.yudao.framework.file.core.client.db; + +import cn.hutool.extra.spring.SpringUtil; +import cn.iocoder.yudao.framework.file.core.client.AbstractFileClient; + +/** + * 基于 DB 存储的文件客户端的配置类 + * + * @author 芋道源码 + */ +public class DBFileClient extends AbstractFileClient { + + private DBFileContentFrameworkDAO dao; + + public DBFileClient(Long id, DBFileClientConfig config) { + super(id, config); + } + + @Override + protected void doInit() { + } + + @Override + public String upload(byte[] content, String path) { + getDao().insert(getId(), path, content); + // 拼接返回路径 + return super.formatFileUrl(config.getDomain(), path); + } + + @Override + public void delete(String path) { + getDao().delete(getId(), path); + } + + @Override + public byte[] getContent(String path) { + return getDao().selectContent(getId(), path); + } + + private DBFileContentFrameworkDAO getDao() { + // 延迟获取,因为 SpringUtil 初始化太慢 + if (dao == null) { + dao = SpringUtil.getBean(DBFileContentFrameworkDAO.class); + } + return dao; + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/db/DBFileClientConfig.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/db/DBFileClientConfig.java new file mode 100644 index 000000000..65d837b44 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/db/DBFileClientConfig.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.framework.file.core.client.db; + +import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +import javax.validation.constraints.NotEmpty; + +/** + * 基于 DB 存储的文件客户端的配置类 + * + * @author 芋道源码 + */ +@Data +public class DBFileClientConfig implements FileClientConfig { + + /** + * 自定义域名 + */ + @NotEmpty(message = "domain 不能为空") + @URL(message = "domain 必须是 URL 格式") + private String domain; + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/db/DBFileContentFrameworkDAO.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/db/DBFileContentFrameworkDAO.java new file mode 100644 index 000000000..9423e065d --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/db/DBFileContentFrameworkDAO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.framework.file.core.client.db; + +/** + * 文件内容 Framework DAO 接口 + * + * @author 芋道源码 + */ +public interface DBFileContentFrameworkDAO { + + /** + * 插入文件内容 + * + * @param configId 配置编号 + * @param path 路径 + * @param content 内容 + */ + void insert(Long configId, String path, byte[] content); + + /** + * 删除文件内容 + * + * @param configId 配置编号 + * @param path 路径 + */ + void delete(Long configId, String path); + + /** + * 获得文件内容 + * + * @param configId 配置编号 + * @param path 路径 + * @return 内容 + */ + byte[] selectContent(Long configId, String path); + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/ftp/FtpFileClient.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/ftp/FtpFileClient.java new file mode 100644 index 000000000..c02b469ff --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/ftp/FtpFileClient.java @@ -0,0 +1,73 @@ +package cn.iocoder.yudao.framework.file.core.client.ftp; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.ftp.Ftp; +import cn.hutool.extra.ftp.FtpException; +import cn.hutool.extra.ftp.FtpMode; +import cn.iocoder.yudao.framework.file.core.client.AbstractFileClient; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; + +/** + * Ftp 文件客户端 + * + * @author 芋道源码 + */ +public class FtpFileClient extends AbstractFileClient { + + private Ftp ftp; + + public FtpFileClient(Long id, FtpFileClientConfig config) { + super(id, config); + } + + @Override + protected void doInit() { + // 补全风格。例如说 Linux 是 /,Windows 是 \ + if (!config.getBasePath().endsWith(File.separator)) { + config.setBasePath(config.getBasePath() + File.separator); + } + // 初始化 Ftp 对象 + this.ftp = new Ftp(config.getHost(), config.getPort(), config.getUsername(), config.getPassword(), + CharsetUtil.CHARSET_UTF_8, null, null, FtpMode.valueOf(config.getMode())); + } + + @Override + public String upload(byte[] content, String path) { + // 执行写入 + String filePath = getFilePath(path); + String fileName = FileUtil.getName(filePath); + String dir = StrUtil.removeSuffix(filePath, fileName); + boolean success = ftp.upload(dir, fileName, new ByteArrayInputStream(content)); + if (!success) { + throw new FtpException(StrUtil.format("上海文件到目标目录 ({}) 失败", filePath)); + } + // 拼接返回路径 + return super.formatFileUrl(config.getDomain(), path); + } + + @Override + public void delete(String path) { + String filePath = getFilePath(path); + ftp.delFile(filePath); + } + + @Override + public byte[] getContent(String path) { + String filePath = getFilePath(path); + String fileName = FileUtil.getName(filePath); + String dir = StrUtil.removeSuffix(path, fileName); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ftp.download(dir, fileName, out); + return out.toByteArray(); + } + + private String getFilePath(String path) { + return config.getBasePath() + path; + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/ftp/FtpFileClientConfig.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/ftp/FtpFileClientConfig.java new file mode 100644 index 000000000..5ccf86cd4 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/ftp/FtpFileClientConfig.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.framework.file.core.client.ftp; + +import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * Ftp 文件客户端的配置类 + * + * @author 芋道源码 + */ +@Data +public class FtpFileClientConfig implements FileClientConfig { + + /** + * 基础路径 + */ + @NotEmpty(message = "基础路径不能为空") + private String basePath; + + /** + * 自定义域名 + */ + @NotEmpty(message = "domain 不能为空") + @URL(message = "domain 必须是 URL 格式") + private String domain; + + /** + * 主机地址 + */ + @NotEmpty(message = "host 不能为空") + private String host; + /** + * 主机端口 + */ + @NotNull(message = "port 不能为空") + private Integer port; + /** + * 用户名 + */ + @NotEmpty(message = "用户名不能为空") + private String username; + /** + * 密码 + */ + @NotEmpty(message = "密码不能为空") + private String password; + /** + * 连接模式 + * + * 使用 {@link cn.hutool.extra.ftp.FtpMode} 对应的字符串 + */ + @NotEmpty(message = "连接模式不能为空") + private String mode; + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/local/LocalFileClient.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/local/LocalFileClient.java new file mode 100644 index 000000000..1c79f8999 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/local/LocalFileClient.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.framework.file.core.client.local; + +import cn.hutool.core.io.FileUtil; +import cn.iocoder.yudao.framework.file.core.client.AbstractFileClient; + +import java.io.File; + +/** + * 本地文件客户端 + * + * @author 芋道源码 + */ +public class LocalFileClient extends AbstractFileClient { + + public LocalFileClient(Long id, LocalFileClientConfig config) { + super(id, config); + } + + @Override + protected void doInit() { + // 补全风格。例如说 Linux 是 /,Windows 是 \ + if (!config.getBasePath().endsWith(File.separator)) { + config.setBasePath(config.getBasePath() + File.separator); + } + } + + @Override + public String upload(byte[] content, String path) { + // 执行写入 + String filePath = getFilePath(path); + FileUtil.writeBytes(content, filePath); + // 拼接返回路径 + return super.formatFileUrl(config.getDomain(), path); + } + + @Override + public void delete(String path) { + String filePath = getFilePath(path); + FileUtil.del(filePath); + } + + @Override + public byte[] getContent(String path) { + String filePath = getFilePath(path); + return FileUtil.readBytes(filePath); + } + + private String getFilePath(String path) { + return config.getBasePath() + path; + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/local/LocalFileClientConfig.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/local/LocalFileClientConfig.java new file mode 100644 index 000000000..1f595ed89 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/local/LocalFileClientConfig.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.framework.file.core.client.local; + +import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +import javax.validation.constraints.NotEmpty; + +/** + * 本地文件客户端的配置类 + * + * @author 芋道源码 + */ +@Data +public class LocalFileClientConfig implements FileClientConfig { + + /** + * 基础路径 + */ + @NotEmpty(message = "基础路径不能为空") + private String basePath; + + /** + * 自定义域名 + */ + @NotEmpty(message = "domain 不能为空") + @URL(message = "domain 必须是 URL 格式") + private String domain; + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClient.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClient.java new file mode 100644 index 000000000..8de178bfc --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClient.java @@ -0,0 +1,112 @@ +package cn.iocoder.yudao.framework.file.core.client.s3; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpUtil; +import cn.iocoder.yudao.framework.file.core.client.AbstractFileClient; +import io.minio.*; + +import java.io.ByteArrayInputStream; + +import static cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig.ENDPOINT_ALIYUN; + +/** + * 基于 S3 协议的文件客户端,实现 MinIO、阿里云、腾讯云、七牛云、华为云等云服务 + * + * S3 协议的客户端,采用亚马逊提供的 software.amazon.awssdk.s3 库 + * + * @author 芋道源码 + */ +public class S3FileClient extends AbstractFileClient { + + private MinioClient client; + + public S3FileClient(Long id, S3FileClientConfig config) { + super(id, config); + } + + @Override + protected void doInit() { + // 补全 domain + if (StrUtil.isEmpty(config.getDomain())) { + config.setDomain(buildDomain()); + } + // 初始化客户端 + client = MinioClient.builder() + .endpoint(buildEndpointURL()) // Endpoint URL + .region(buildRegion()) // Region + .credentials(config.getAccessKey(), config.getAccessSecret()) // 认证密钥 + .build(); + } + + /** + * 基于 endpoint 构建调用云服务的 URL 地址 + * + * @return URI 地址 + */ + private String buildEndpointURL() { + // 如果已经是 http 或者 https,则不进行拼接.主要适配 MinIO + if (HttpUtil.isHttp(config.getEndpoint()) || HttpUtil.isHttps(config.getEndpoint())) { + return config.getEndpoint(); + } + return StrUtil.format("https://{}", config.getEndpoint()); + } + + /** + * 基于 bucket + endpoint 构建访问的 Domain 地址 + * + * @return Domain 地址 + */ + private String buildDomain() { + // 如果已经是 http 或者 https,则不进行拼接.主要适配 MinIO + if (HttpUtil.isHttp(config.getEndpoint()) || HttpUtil.isHttps(config.getEndpoint())) { + return StrUtil.format("{}/{}", config.getEndpoint(), config.getBucket()); + } + // 阿里云、腾讯云、华为云都适合。七牛云比较特殊,必须有自定义域名 + return StrUtil.format("https://{}.{}", config.getBucket(), config.getEndpoint()); + } + + /** + * 基于 bucket 构建 region 地区 + * + * @return region 地区 + */ + private String buildRegion() { + // 阿里云必须有 region,否则会报错 + if (config.getEndpoint().contains(ENDPOINT_ALIYUN)) { + return StrUtil.subBefore(config.getEndpoint(), '.', false) + .replaceAll("-internal", ""); // 去除内网 Endpoint 的后缀 + } + return null; + } + + @Override + public String upload(byte[] content, String path) throws Exception { + // 执行上传 + client.putObject(PutObjectArgs.builder() + .bucket(config.getBucket()) // bucket 必须传递 + .object(path) // 相对路径作为 key + .stream(new ByteArrayInputStream(content), content.length, -1) // 文件内容 + .build()); + // 拼接返回路径 + return config.getDomain() + "/" + path; + } + + @Override + public void delete(String path) throws Exception { + client.removeObject(RemoveObjectArgs.builder() + .bucket(config.getBucket()) // bucket 必须传递 + .object(path) // 相对路径作为 key + .build()); + } + + @Override + public byte[] getContent(String path) throws Exception { + GetObjectResponse response = client.getObject(GetObjectArgs.builder() + .bucket(config.getBucket()) // bucket 必须传递 + .object(path) // 相对路径作为 key + .build()); + return IoUtil.readBytes(response); + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClientConfig.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClientConfig.java new file mode 100644 index 000000000..151159f5e --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClientConfig.java @@ -0,0 +1,76 @@ +package cn.iocoder.yudao.framework.file.core.client.s3; + +import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +import javax.validation.constraints.AssertTrue; +import javax.validation.constraints.NotNull; + +/** + * S3 文件客户端的配置类 + * + * @author 芋道源码 + */ +@Data +public class S3FileClientConfig implements FileClientConfig { + + public static final String ENDPOINT_QINIU = "qiniucs.com"; + public static final String ENDPOINT_ALIYUN = "aliyuncs.com"; + + /** + * 节点地址 + * 1. MinIO:https://www.iocoder.cn/Spring-Boot/MinIO 。例如说,http://127.0.0.1:9000 + * 2. 阿里云:https://help.aliyun.com/document_detail/31837.html + * 3. 腾讯云:https://cloud.tencent.com/document/product/436/6224 + * 4. 七牛云:https://developer.qiniu.com/kodo/4088/s3-access-domainname + * 5. 华为云:https://developer.huaweicloud.com/endpoint?OBS + */ + @NotNull(message = "endpoint 不能为空") + private String endpoint; + /** + * 自定义域名 + * 1. MinIO:通过 Nginx 配置 + * 2. 阿里云:https://help.aliyun.com/document_detail/31836.html + * 3. 腾讯云:https://cloud.tencent.com/document/product/436/11142 + * 4. 七牛云:https://developer.qiniu.com/kodo/8556/set-the-custom-source-domain-name + * 5. 华为云:https://support.huaweicloud.com/usermanual-obs/obs_03_0032.html + */ + @URL(message = "domain 必须是 URL 格式") + private String domain; + /** + * 存储 Bucket + */ + @NotNull(message = "bucket 不能为空") + private String bucket; + + /** + * 访问 Key + * 1. MinIO:https://www.iocoder.cn/Spring-Boot/MinIO + * 2. 阿里云:https://ram.console.aliyun.com/manage/ak + * 3. 腾讯云:https://console.cloud.tencent.com/cam/capi + * 4. 七牛云:https://portal.qiniu.com/user/key + * 5. 华为云:https://support.huaweicloud.com/qs-obs/obs_qs_0005.html + */ + @NotNull(message = "accessKey 不能为空") + private String accessKey; + /** + * 访问 Secret + */ + @NotNull(message = "accessSecret 不能为空") + private String accessSecret; + + @SuppressWarnings("RedundantIfStatement") + @AssertTrue(message = "domain 不能为空") + @JsonIgnore + public boolean isDomainValid() { + // 如果是七牛,必须带有 domain + if (StrUtil.contains(endpoint, ENDPOINT_QINIU) && StrUtil.isEmpty(domain)) { + return false; + } + return true; + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/sftp/SftpFileClient.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/sftp/SftpFileClient.java new file mode 100644 index 000000000..3e18e888d --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/sftp/SftpFileClient.java @@ -0,0 +1,61 @@ +package cn.iocoder.yudao.framework.file.core.client.sftp; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.extra.ssh.Sftp; +import cn.iocoder.yudao.framework.common.util.io.FileUtils; +import cn.iocoder.yudao.framework.file.core.client.AbstractFileClient; + +import java.io.File; + +/** + * Sftp 文件客户端 + * + * @author 芋道源码 + */ +public class SftpFileClient extends AbstractFileClient { + + private Sftp sftp; + + public SftpFileClient(Long id, SftpFileClientConfig config) { + super(id, config); + } + + @Override + protected void doInit() { + // 补全风格。例如说 Linux 是 /,Windows 是 \ + if (!config.getBasePath().endsWith(File.separator)) { + config.setBasePath(config.getBasePath() + File.separator); + } + // 初始化 Ftp 对象 + this.sftp = new Sftp(config.getHost(), config.getPort(), config.getUsername(), config.getPassword()); + } + + @Override + public String upload(byte[] content, String path) { + // 执行写入 + String filePath = getFilePath(path); + File file = FileUtils.createTempFile(content); + sftp.upload(filePath, file); + // 拼接返回路径 + return super.formatFileUrl(config.getDomain(), path); + } + + @Override + public void delete(String path) { + String filePath = getFilePath(path); + sftp.delFile(filePath); + } + + @Override + public byte[] getContent(String path) { + String filePath = getFilePath(path); + File destFile = FileUtils.createTempFile(); + sftp.download(filePath, destFile); + return FileUtil.readBytes(destFile); + } + + private String getFilePath(String path) { + return config.getBasePath() + path; + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/sftp/SftpFileClientConfig.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/sftp/SftpFileClientConfig.java new file mode 100644 index 000000000..1a976f5d9 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/sftp/SftpFileClientConfig.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.framework.file.core.client.sftp; + +import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * Sftp 文件客户端的配置类 + * + * @author 芋道源码 + */ +@Data +public class SftpFileClientConfig implements FileClientConfig { + + /** + * 基础路径 + */ + @NotEmpty(message = "基础路径不能为空") + private String basePath; + + /** + * 自定义域名 + */ + @NotEmpty(message = "domain 不能为空") + @URL(message = "domain 必须是 URL 格式") + private String domain; + + /** + * 主机地址 + */ + @NotEmpty(message = "host 不能为空") + private String host; + /** + * 主机端口 + */ + @NotNull(message = "port 不能为空") + private Integer port; + /** + * 用户名 + */ + @NotEmpty(message = "用户名不能为空") + private String username; + /** + * 密码 + */ + @NotEmpty(message = "密码不能为空") + private String password; + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/enums/FileStorageEnum.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/enums/FileStorageEnum.java new file mode 100644 index 000000000..03c6ed8a7 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/enums/FileStorageEnum.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.framework.file.core.enums; + +import cn.hutool.core.util.ArrayUtil; +import cn.iocoder.yudao.framework.file.core.client.FileClient; +import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; +import cn.iocoder.yudao.framework.file.core.client.db.DBFileClient; +import cn.iocoder.yudao.framework.file.core.client.db.DBFileClientConfig; +import cn.iocoder.yudao.framework.file.core.client.ftp.FtpFileClient; +import cn.iocoder.yudao.framework.file.core.client.ftp.FtpFileClientConfig; +import cn.iocoder.yudao.framework.file.core.client.local.LocalFileClient; +import cn.iocoder.yudao.framework.file.core.client.local.LocalFileClientConfig; +import cn.iocoder.yudao.framework.file.core.client.s3.S3FileClient; +import cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig; +import cn.iocoder.yudao.framework.file.core.client.sftp.SftpFileClient; +import cn.iocoder.yudao.framework.file.core.client.sftp.SftpFileClientConfig; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 文件存储器枚举 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum FileStorageEnum { + + DB(1, DBFileClientConfig.class, DBFileClient.class), + + LOCAL(10, LocalFileClientConfig.class, LocalFileClient.class), + FTP(11, FtpFileClientConfig.class, FtpFileClient.class), + SFTP(12, SftpFileClientConfig.class, SftpFileClient.class), + + S3(20, S3FileClientConfig.class, S3FileClient.class), + ; + + /** + * 存储器 + */ + private final Integer storage; + + /** + * 配置类 + */ + private final Class configClass; + /** + * 客户端类 + */ + private final Class clientClass; + + public static FileStorageEnum getByStorage(Integer storage) { + return ArrayUtil.firstMatch(o -> o.getStorage().equals(storage), values()); + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/resources/META-INF/spring.factories b/yudao-framework/yudao-spring-boot-starter-file/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000..8d2a4be45 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + cn.iocoder.yudao.framework.file.config.YudaoFileAutoConfiguration diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/config/package-info.java b/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/config/package-info.java new file mode 100644 index 000000000..113f3e5e5 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/config/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位,避免 package 无法提交到 Git 仓库 + */ +package cn.iocoder.yudao.framework.file.config; diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/ftp/FtpFileClientTest.java b/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/ftp/FtpFileClientTest.java new file mode 100644 index 000000000..00a3a268e --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/ftp/FtpFileClientTest.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.framework.file.core.client.ftp; + +import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.extra.ftp.FtpMode; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +public class FtpFileClientTest { + + @Test + @Disabled + public void test() { + // 创建客户端 + FtpFileClientConfig config = new FtpFileClientConfig(); + config.setDomain("http://127.0.0.1:48080"); + config.setBasePath("/home/ftp"); + config.setHost("kanchai.club"); + config.setPort(221); + config.setUsername(""); + config.setPassword(""); + config.setMode(FtpMode.Passive.name()); + FtpFileClient client = new FtpFileClient(0L, config); + client.init(); + // 上传文件 + String path = IdUtil.fastSimpleUUID() + ".jpg"; + byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); + String fullPath = client.upload(content, path); + System.out.println("访问地址:" + fullPath); + if (false) { + byte[] bytes = client.getContent(path); + System.out.println("文件内容:" + bytes); + } + if (false) { + client.delete(path); + } + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/local/LocalFileClientTest.java b/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/local/LocalFileClientTest.java new file mode 100644 index 000000000..2062d63d7 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/local/LocalFileClientTest.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.framework.file.core.client.local; + +import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.util.IdUtil; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +public class LocalFileClientTest { + + @Test + @Disabled + public void test() { + // 创建客户端 + LocalFileClientConfig config = new LocalFileClientConfig(); + config.setDomain("http://127.0.0.1:48080"); + config.setBasePath("/Users/yunai/file_test"); + LocalFileClient client = new LocalFileClient(0L, config); + client.init(); + // 上传文件 + String path = IdUtil.fastSimpleUUID() + ".jpg"; + byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); + String fullPath = client.upload(content, path); + System.out.println("访问地址:" + fullPath); + client.delete(path); + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClientTest.java b/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClientTest.java new file mode 100644 index 000000000..de77477cd --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClientTest.java @@ -0,0 +1,117 @@ +package cn.iocoder.yudao.framework.file.core.client.s3; + +import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.util.IdUtil; +import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import javax.validation.Validation; + +public class S3FileClientTest { + + @Test + @Disabled // MinIO,如果要集成测试,可以注释本行 + public void testMinIO() throws Exception { + S3FileClientConfig config = new S3FileClientConfig(); + // 配置成你自己的 + config.setAccessKey("admin"); + config.setAccessSecret("password"); + config.setBucket("yudaoyuanma"); + config.setDomain(null); + // 默认 9000 endpoint + config.setEndpoint("http://127.0.0.1:9000"); + + // 执行上传 + testExecuteUpload(config); + } + + @Test + @Disabled // 阿里云 OSS,如果要集成测试,可以注释本行 + public void testAliyun() throws Exception { + S3FileClientConfig config = new S3FileClientConfig(); + // 配置成你自己的 + config.setAccessKey(System.getenv("ALIYUN_ACCESS_KEY")); + config.setAccessSecret(System.getenv("ALIYUN_SECRET_KEY")); + config.setBucket("yunai-aoteman"); + config.setDomain(null); // 如果有自定义域名,则可以设置。http://ali-oss.iocoder.cn + // 默认北京的 endpoint + config.setEndpoint("oss-cn-beijing.aliyuncs.com"); + + // 执行上传 + testExecuteUpload(config); + } + + @Test + @Disabled // 腾讯云 COS,如果要集成测试,可以注释本行 + public void testQCloud() throws Exception { + S3FileClientConfig config = new S3FileClientConfig(); + // 配置成你自己的 + config.setAccessKey(System.getenv("QCLOUD_ACCESS_KEY")); + config.setAccessSecret(System.getenv("QCLOUD_SECRET_KEY")); + config.setBucket("aoteman-1255880240"); + config.setDomain(null); // 如果有自定义域名,则可以设置。http://tengxun-oss.iocoder.cn + // 默认上海的 endpoint + config.setEndpoint("cos.ap-shanghai.myqcloud.com"); + + // 执行上传 + testExecuteUpload(config); + } + + @Test + @Disabled // 七牛云存储,如果要集成测试,可以注释本行 + public void testQiniu() throws Exception { + S3FileClientConfig config = new S3FileClientConfig(); + // 配置成你自己的 +// config.setAccessKey(System.getenv("QINIU_ACCESS_KEY")); +// config.setAccessSecret(System.getenv("QINIU_SECRET_KEY")); + config.setAccessKey("b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8"); + config.setAccessSecret("kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP"); + config.setBucket("ruoyi-vue-pro"); + config.setDomain("http://test.yudao.iocoder.cn"); // 如果有自定义域名,则可以设置。http://static.yudao.iocoder.cn + // 默认上海的 endpoint + config.setEndpoint("s3-cn-south-1.qiniucs.com"); + + // 执行上传 + testExecuteUpload(config); + } + + @Test + @Disabled // 华为云存储,如果要集成测试,可以注释本行 + public void testHuaweiCloud() throws Exception { + S3FileClientConfig config = new S3FileClientConfig(); + // 配置成你自己的 +// config.setAccessKey(System.getenv("HUAWEI_CLOUD_ACCESS_KEY")); +// config.setAccessSecret(System.getenv("HUAWEI_CLOUD_SECRET_KEY")); + config.setBucket("yudao"); + config.setDomain(null); // 如果有自定义域名,则可以设置。 + // 默认上海的 endpoint + config.setEndpoint("obs.cn-east-3.myhuaweicloud.com"); + + // 执行上传 + testExecuteUpload(config); + } + + private void testExecuteUpload(S3FileClientConfig config) throws Exception { + // 校验配置 + ValidationUtils.validate(Validation.buildDefaultValidatorFactory().getValidator(), config); + // 创建 Client + S3FileClient client = new S3FileClient(0L, config); + client.init(); + // 上传文件 + String path = IdUtil.fastSimpleUUID() + ".jpg"; + byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); + String fullPath = client.upload(content, path); + System.out.println("访问地址:" + fullPath); + // 读取文件 + if (true) { + byte[] bytes = client.getContent(path); + System.out.println("文件内容:" + bytes.length); + } + // 删除文件 + if (false) { + client.delete(path); + } + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/sftp/SftpFileClientTest.java b/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/sftp/SftpFileClientTest.java new file mode 100644 index 000000000..412df1ea8 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/client/sftp/SftpFileClientTest.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.framework.file.core.client.sftp; + +import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.util.IdUtil; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +public class SftpFileClientTest { + + @Test + @Disabled + public void test() { + // 创建客户端 + SftpFileClientConfig config = new SftpFileClientConfig(); + config.setDomain("http://127.0.0.1:48080"); + config.setBasePath("/home/ftp"); + config.setHost("kanchai.club"); + config.setPort(222); + config.setUsername(""); + config.setPassword(""); + SftpFileClient client = new SftpFileClient(0L, config); + client.init(); + // 上传文件 + String path = IdUtil.fastSimpleUUID() + ".jpg"; + byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); + String fullPath = client.upload(content, path); + System.out.println("访问地址:" + fullPath); + if (false) { + byte[] bytes = client.getContent(path); + System.out.println("文件内容:" + bytes); + } + if (false) { + client.delete(path); + } + } + +} diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/enums/package-info.java b/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/enums/package-info.java new file mode 100644 index 000000000..e1da5db23 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-file/src/test/java/cn/iocoder/yudao/framework/file/core/enums/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位,避免 package 无法提交到 Git 仓库 + */ +package cn.iocoder.yudao.framework.file.core.enums; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/file/erweima.jpg b/yudao-framework/yudao-spring-boot-starter-file/src/test/resources/file/erweima.jpg similarity index 100% rename from yudao-module-infra/yudao-module-infra-impl/src/test/resources/file/erweima.jpg rename to yudao-framework/yudao-spring-boot-starter-file/src/test/resources/file/erweima.jpg diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java index e31600cb1..4ca5becb3 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java @@ -80,4 +80,7 @@ public interface BaseMapperX extends BaseMapper { entities.forEach(this::insert); } + default void updateBatch(T update) { + update(update, new QueryWrapper<>()); + } } diff --git a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/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 index 8905893b4..ff51ae306 100644 --- a/yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/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 @@ -22,7 +22,6 @@ public interface BpmMessageService { */ void sendMessageWhenProcessInstanceApprove(@Valid BpmMessageSendWhenProcessInstanceApproveReqDTO reqDTO); - /** * 发送流程实例被不通过的消息 * diff --git a/yudao-module-bpm/yudao-module-bpm-impl-flowable/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmUserTaskActivityBehavior.java b/yudao-module-bpm/yudao-module-bpm-impl-flowable/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmUserTaskActivityBehavior.java index fb2551cbc..d4ab5b67a 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-flowable/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmUserTaskActivityBehavior.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-flowable/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmUserTaskActivityBehavior.java @@ -5,7 +5,6 @@ import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; -import cn.iocoder.yudao.framework.datapermission.core.dept.rule.DeptDataPermissionRule; 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; @@ -69,11 +68,13 @@ public class BpmUserTaskActivityBehavior extends UserTaskActivityBehavior { public BpmUserTaskActivityBehavior(UserTask userTask) { super(userTask); } + public void setScripts(List scripts) { this.scriptMap = convertMap(scripts, script -> script.getEnum().getId()); } @Override + @DataPermission(enable = false) // 不需要处理数据权限, 不然会有问题,查询不到数据 protected void handleAssignments(TaskService taskService, String assignee, String owner, List candidateUsers, List candidateGroups, TaskEntity task, ExpressionManager expressionManager, DelegateExecution execution, ProcessEngineConfigurationImpl processEngineConfiguration) { // 第一步,获得任务的规则 BpmTaskAssignRuleDO rule = getTaskRule(task); @@ -98,7 +99,6 @@ public class BpmUserTaskActivityBehavior extends UserTaskActivityBehavior { return taskRules.get(0); } - @VisibleForTesting Set calculateTaskCandidateUsers(TaskEntity task, BpmTaskAssignRuleDO rule) { Set assigneeUserIds = null; if (Objects.equals(BpmTaskAssignRuleTypeEnum.ROLE.getType(), rule.getType())) { diff --git a/yudao-module-bpm/yudao-module-bpm-impl-flowable/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java b/yudao-module-bpm/yudao-module-bpm-impl-flowable/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java index 59c0732dc..9ead7a6f3 100644 --- a/yudao-module-bpm/yudao-module-bpm-impl-flowable/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java +++ b/yudao-module-bpm/yudao-module-bpm-impl-flowable/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskAssignLeaderX2Script.java @@ -15,7 +15,6 @@ import java.util.Set; @Component public class BpmTaskAssignLeaderX2Script extends BpmTaskAssignLeaderAbstractScript { - @Override @DataPermission(enable = false) // 不需要处理数据权限, 不然会有问题,查询不到数据 public Set calculateTaskCandidateUsers(TaskEntity task) { 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 index 5d55c5731..fa3ec5c6e 100644 --- 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 @@ -15,7 +15,7 @@ public interface FileApi { * @param content 文件内容 * @return 文件路径 */ - default String createFile(byte[] content) { + default String createFile(byte[] content) throws Exception { return createFile(IdUtil.fastUUID(), content); } @@ -26,6 +26,6 @@ public interface FileApi { * @param content 文件内容 * @return 文件路径 */ - String createFile(String path, byte[] content); + String createFile(String path, byte[] content) throws Exception; } diff --git a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java index 5283cda91..1528955f9 100644 --- a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java +++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java @@ -42,8 +42,11 @@ public interface ErrorCodeConstants { ErrorCode CODEGEN_SYNC_COLUMNS_NULL = new ErrorCode(1003001006, "同步的字段不存在"); ErrorCode CODEGEN_SYNC_NONE_CHANGE = new ErrorCode(1003001007, "同步失败,不存在改变"); - // ========== 字典类型(测试) 1003000000 ========== - ErrorCode TEST_DEMO_NOT_EXISTS = new ErrorCode(1003000000, "测试示例不存在"); + // ========== 字典类型(测试)1001005000 ========== + ErrorCode TEST_DEMO_NOT_EXISTS = new ErrorCode(1001005000, "测试示例不存在"); + // ========== 文件配置 1001006000 ========== + ErrorCode FILE_CONFIG_NOT_EXISTS = new ErrorCode(1001006000, "文件配置不存在"); + ErrorCode FILE_CONFIG_DELETE_FAIL_MASTER = new ErrorCode(1001006001, "该文件配置不允许删除,原因:它是主配置,删除会导致无法上传文件"); } diff --git a/yudao-module-infra/yudao-module-infra-impl/pom.xml b/yudao-module-infra/yudao-module-infra-impl/pom.xml index 439c70e82..19c9a1472 100644 --- a/yudao-module-infra/yudao-module-infra-impl/pom.xml +++ b/yudao-module-infra/yudao-module-infra-impl/pom.xml @@ -109,6 +109,13 @@ de.codecentric spring-boot-admin-starter-server + + + + cn.iocoder.boot + yudao-spring-boot-starter-file + + 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 index c5ce8db19..d43eac1d5 100644 --- 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 @@ -1,6 +1,5 @@ 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; @@ -20,7 +19,7 @@ public class FileApiImpl implements FileApi { private FileService fileService; @Override - public String createFile(String path, byte[] content) { + public String createFile(String path, byte[] content) throws Exception { return fileService.createFile(path, content); } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileConfigController.http b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileConfigController.http new file mode 100644 index 000000000..499f64df7 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileConfigController.http @@ -0,0 +1,45 @@ +### 请求 /infra/file-config/create 接口 => 成功 +POST {{baseUrl}}/infra/file-config/create +Content-Type: application/json +tenant-id: {{adminTenentId}} +Authorization: Bearer {{token}} + +{ + "name": "S3 - 七牛云", + "remark": "", + "storage": 20, + "config": { + "accessKey": "b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8", + "accessSecret": "kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP", + "bucket": "ruoyi-vue-pro", + "endpoint": "s3-cn-south-1.qiniucs.com", + "domain": "http://test.yudao.iocoder.cn", + "region": "oss-cn-beijing" + } +} + +### 请求 /infra/file-config/update 接口 => 成功 +PUT {{baseUrl}}/infra/file-config/update +Content-Type: application/json +tenant-id: {{adminTenentId}} +Authorization: Bearer {{token}} + +{ + "id": 2, + "name": "S3 - 七牛云", + "remark": "", + "config": { + "accessKey": "b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8", + "accessSecret": "kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP", + "bucket": "ruoyi-vue-pro", + "endpoint": "s3-cn-south-1.qiniucs.com", + "domain": "http://test.yudao.iocoder.cn", + "region": "oss-cn-beijing" + } +} + +### 请求 /infra/file-config/test 接口 => 成功 +GET {{baseUrl}}/infra/file-config/test?id=2 +Content-Type: application/json +tenant-id: {{adminTenentId}} +Authorization: Bearer {{token}} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileConfigController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileConfigController.java new file mode 100755 index 000000000..8c355d627 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileConfigController.java @@ -0,0 +1,89 @@ +package cn.iocoder.yudao.module.infra.controller.admin.file; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigUpdateReqVO; +import cn.iocoder.yudao.module.infra.convert.file.FileConfigConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO; +import cn.iocoder.yudao.module.infra.service.file.FileConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Api(tags = "管理后台 - 文件配置") +@RestController +@RequestMapping("/infra/file-config") +@Validated +public class FileConfigController { + + @Resource + private FileConfigService fileConfigService; + + @PostMapping("/create") + @ApiOperation("创建文件配置") + @PreAuthorize("@ss.hasPermission('infra:file-config:create')") + public CommonResult createFileConfig(@Valid @RequestBody FileConfigCreateReqVO createReqVO) { + return success(fileConfigService.createFileConfig(createReqVO)); + } + + @PutMapping("/update") + @ApiOperation("更新文件配置") + @PreAuthorize("@ss.hasPermission('infra:file-config:update')") + public CommonResult updateFileConfig(@Valid @RequestBody FileConfigUpdateReqVO updateReqVO) { + fileConfigService.updateFileConfig(updateReqVO); + return success(true); + } + + @PutMapping("/update-master") + @ApiOperation("更新文件配置为 Master") + @PreAuthorize("@ss.hasPermission('infra:file-config:update')") + public CommonResult updateFileConfigMaster(@RequestParam("id") Long id) { + fileConfigService.updateFileConfigMaster(id); + return success(true); + } + + @DeleteMapping("/delete") + @ApiOperation("删除文件配置") + @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('infra:file-config:delete')") + public CommonResult deleteFileConfig(@RequestParam("id") Long id) { + fileConfigService.deleteFileConfig(id); + return success(true); + } + + @GetMapping("/get") + @ApiOperation("获得文件配置") + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('infra:file-config:query')") + public CommonResult getFileConfig(@RequestParam("id") Long id) { + FileConfigDO fileConfig = fileConfigService.getFileConfig(id); + return success(FileConfigConvert.INSTANCE.convert(fileConfig)); + } + + @GetMapping("/page") + @ApiOperation("获得文件配置分页") + @PreAuthorize("@ss.hasPermission('infra:file-config:query')") + public CommonResult> getFileConfigPage(@Valid FileConfigPageReqVO pageVO) { + PageResult pageResult = fileConfigService.getFileConfigPage(pageVO); + return success(FileConfigConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/test") + @ApiOperation("测试文件配置是否正确") + @PreAuthorize("@ss.hasPermission('infra:file-config:query')") + public CommonResult testFileConfig(@RequestParam("id") Long id) throws Exception { + String url = fileConfigService.testFileConfig(id); + return success(url); + } +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java index 48c7e146c..e3d810dec 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java @@ -4,8 +4,8 @@ import cn.hutool.core.io.IoUtil; 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.infra.controller.admin.file.vo.FilePageReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.file.vo.FileRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.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; @@ -23,7 +23,6 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -import java.io.IOException; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -44,30 +43,35 @@ public class FileController { @ApiImplicitParam(name = "path", value = "文件路径", example = "yudaoyuanma.png", dataTypeClass = String.class) }) public CommonResult uploadFile(@RequestParam("file") MultipartFile file, - @RequestParam("path") String path) throws IOException { + @RequestParam("path") String path) throws Exception { return success(fileService.createFile(path, IoUtil.readBytes(file.getInputStream()))); } @DeleteMapping("/delete") @ApiOperation("删除文件") - @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = String.class) + @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('infra:file:delete')") - public CommonResult deleteFile(@RequestParam("id") String id) { + public CommonResult deleteFile(@RequestParam("id") Long id) throws Exception { fileService.deleteFile(id); return success(true); } - @GetMapping("/get/{path}") + @GetMapping("/{configId}/get/{path}") @ApiOperation("下载文件") - @ApiImplicitParam(name = "path", value = "文件附件", required = true, dataTypeClass = MultipartFile.class) - public void getFile(HttpServletResponse response, @PathVariable("path") String path) throws IOException { - FileDO file = fileService.getFile(path); - if (file == null) { - log.warn("[getFile][path({}) 文件不存在]", path); + @ApiImplicitParams({ + @ApiImplicitParam(name = "configId", value = "配置编号", required = true, dataTypeClass = Long.class), + @ApiImplicitParam(name = "path", value = "文件路径", required = true, dataTypeClass = String.class) + }) + public void getFileContent(HttpServletResponse response, + @PathVariable("configId") Long configId, + @PathVariable("path") String path) throws Exception { + byte[] content = fileService.getFileContent(configId, path); + if (content == null) { + log.warn("[getFileContent][configId({}) path({}) 文件不存在]", configId, path); response.setStatus(HttpStatus.NOT_FOUND.value()); return; } - ServletUtils.writeAttachment(response, path, file.getContent()); + ServletUtils.writeAttachment(response, path, content); } @GetMapping("/page") diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/FileRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/FileRespVO.java deleted file mode 100644 index 838f3272b..000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/FileRespVO.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.module.infra.controller.admin.file.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -@ApiModel(value = "管理后台 - 文件 Response VO", description = "不返回 content 字段,太大") -@Data -public class FileRespVO { - - @ApiModelProperty(value = "文件路径", required = true, example = "yudao.jpg") - private String id; - - @ApiModelProperty(value = "文件类型", required = true, example = "jpg") - private String type; - - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigBaseVO.java new file mode 100755 index 000000000..09faa645b --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigBaseVO.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** +* 文件配置 Base VO,提供给添加、修改、详细的子 VO 使用 +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 +*/ +@Data +public class FileConfigBaseVO { + + @ApiModelProperty(value = "配置名", required = true, example = "S3 - 阿里云") + @NotNull(message = "配置名不能为空") + private String name; + + @ApiModelProperty(value = "备注", example = "我是备注") + private String remark; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigCreateReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigCreateReqVO.java new file mode 100755 index 000000000..876757920 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigCreateReqVO.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.util.Map; + +@ApiModel("管理后台 - 文件配置创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class FileConfigCreateReqVO extends FileConfigBaseVO { + + @ApiModelProperty(value = "存储器", required = true, example = "1", notes = "参见 FileStorageEnum 枚举类") + @NotNull(message = "存储器不能为空") + private Integer storage; + + @ApiModelProperty(value = "存储配置", required = true, notes = "配置是动态参数,所以使用 Map 接收") + @NotNull(message = "存储配置不能为空") + private Map config; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigPageReqVO.java new file mode 100755 index 000000000..3b3f0d4e5 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigPageReqVO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +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 java.util.Date; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel("管理后台 - 文件配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class FileConfigPageReqVO extends PageParam { + + @ApiModelProperty(value = "配置名", example = "S3 - 阿里云") + private String name; + + @ApiModelProperty(value = "存储器", example = "1") + private Integer storage; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "开始创建时间") + private Date beginCreateTime; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "结束创建时间") + private Date endCreateTime; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java new file mode 100755 index 000000000..74291925b --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config; + +import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +@ApiModel("管理后台 - 文件配置 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class FileConfigRespVO extends FileConfigBaseVO { + + @ApiModelProperty(value = "编号", required = true, example = "1") + private Long id; + + @ApiModelProperty(value = "存储器", required = true, example = "1", notes = "参见 FileStorageEnum 枚举类") + @NotNull(message = "存储器不能为空") + private Integer storage; + + @ApiModelProperty(value = "是否为主配置", required = true, example = "true") + @NotNull(message = "是否为主配置不能为空") + private Boolean master; + + @ApiModelProperty(value = "存储配置", required = true) + private FileClientConfig config; + + @ApiModelProperty(value = "创建时间", required = true) + private Date createTime; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigUpdateReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigUpdateReqVO.java new file mode 100755 index 000000000..45f8f751a --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/config/FileConfigUpdateReqVO.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.infra.controller.admin.file.vo.config; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.util.Map; + +@ApiModel("管理后台 - 文件配置更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class FileConfigUpdateReqVO extends FileConfigBaseVO { + + @ApiModelProperty(value = "编号", required = true, example = "1") + @NotNull(message = "编号不能为空") + private Long id; + + @ApiModelProperty(value = "存储配置", required = true, notes = "配置是动态参数,所以使用 Map 接收") + @NotNull(message = "存储配置不能为空") + private Map config; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/FilePageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FilePageReqVO.java similarity index 92% rename from yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/FilePageReqVO.java rename to yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FilePageReqVO.java index bf67300ab..346314e83 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/FilePageReqVO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FilePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.infra.controller.admin.file.vo; +package cn.iocoder.yudao.module.infra.controller.admin.file.vo.file; import cn.iocoder.yudao.framework.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -19,7 +19,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ public class FilePageReqVO extends PageParam { @ApiModelProperty(value = "文件路径", example = "yudao", notes = "模糊匹配") - private String id; + private String path; @ApiModelProperty(value = "文件类型", example = "jpg", notes = "模糊匹配") private String type; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileRespVO.java new file mode 100644 index 000000000..8e39a7520 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileRespVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.infra.controller.admin.file.vo.file; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@ApiModel(value = "管理后台 - 文件 Response VO", description = "不返回 content 字段,太大") +@Data +public class FileRespVO { + + @ApiModelProperty(value = "文件编号", required = true, example = "1024") + private Long id; + + @ApiModelProperty(value = "文件路径", required = true, example = "yudao.jpg") + private String path; + + @ApiModelProperty(value = "文件 URL", required = true, example = "https://www.iocoder.cn/yudao.jpg") + private String url; + + @ApiModelProperty(value = "文件类型", example = "jpg") + private String type; + + @ApiModelProperty(value = "文件大小", example = "2048", required = true) + private Integer size; + + @ApiModelProperty(value = "创建时间", required = true) + private Date createTime; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/FileConfigConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/FileConfigConvert.java new file mode 100755 index 000000000..442368302 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/file/FileConfigConvert.java @@ -0,0 +1,36 @@ +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.config.FileConfigCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigUpdateReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 文件配置 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface FileConfigConvert { + + FileConfigConvert INSTANCE = Mappers.getMapper(FileConfigConvert.class); + + @Mapping(target = "config", ignore = true) + FileConfigDO convert(FileConfigCreateReqVO bean); + + @Mapping(target = "config", ignore = true) + FileConfigDO convert(FileConfigUpdateReqVO bean); + + FileConfigRespVO convert(FileConfigDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + +} 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 index affeddba4..ee7e5186b 100644 --- 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 @@ -1,7 +1,7 @@ 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.controller.admin.file.vo.file.FileRespVO; import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileConfigDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileConfigDO.java new file mode 100755 index 000000000..30df60ad5 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileConfigDO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.infra.dal.dataobject.file; + +import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; +import cn.iocoder.yudao.framework.file.core.enums.FileStorageEnum; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.*; + +/** + * 文件配置表 + * + * @author 芋道源码 + */ +@Data +@TableName(value = "infra_file_config", autoResultMap = true) +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FileConfigDO extends BaseDO { + + /** + * 配置编号,数据库自增 + */ + private Long id; + /** + * 配置名 + */ + private String name; + /** + * 存储器 + * + * 枚举 {@link FileStorageEnum} + */ + private Integer storage; + /** + * 备注 + */ + private String remark; + /** + * 是否为主配置 + * + * 由于我们可以配置多个文件配置,默认情况下,使用主配置进行文件的上传 + */ + private Boolean master; + + /** + * 支付渠道配置 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private FileClientConfig config; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileContentDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileContentDO.java new file mode 100644 index 000000000..a7917eda5 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileContentDO.java @@ -0,0 +1,45 @@ +package cn.iocoder.yudao.module.infra.dal.dataobject.file; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 文件内容表 + * + * 专门用于存储 {@link cn.iocoder.yudao.framework.file.core.client.db.DBFileClient} 的文件内容 + * + * @author 芋道源码 + */ +@Data +@TableName("infra_file_content") +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FileContentDO extends BaseDO { + + /** + * 编号,数据库自增 + */ + @TableId(type = IdType.INPUT) + private String id; + /** + * 配置编号 + * + * 关联 {@link FileConfigDO#getId()} + */ + private Long configId; + /** + * 路径,即文件名 + */ + private String path; + /** + * 文件内容 + */ + private byte[] content; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileDO.java index 7ed2c5522..e080fa2fb 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileDO.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/file/FileDO.java @@ -1,9 +1,7 @@ package cn.iocoder.yudao.module.infra.dal.dataobject.file; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; @@ -11,6 +9,7 @@ import java.io.InputStream; /** * 文件表 + * 每次文件上传,都会记录一条记录到该表中 * * @author 芋道源码 */ @@ -24,10 +23,23 @@ import java.io.InputStream; public class FileDO extends BaseDO { /** - * 文件路径 + * 编号,数据库自增 */ - @TableId(type = IdType.INPUT) - private String id; + private Long id; + /** + * 配置编号 + * + * 关联 {@link FileConfigDO#getId()} + */ + private Long configId; + /** + * 路径,即文件名 + */ + private String path; + /** + * 访问地址 + */ + private String url; /** * 文件类型 * @@ -36,8 +48,8 @@ public class FileDO extends BaseDO { @TableField(value = "`type`") private String type; /** - * 文件内容 + * 文件大小 */ - private byte[] content; + private Integer size; } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileConfigMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileConfigMapper.java new file mode 100755 index 000000000..6566347c5 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileConfigMapper.java @@ -0,0 +1,32 @@ +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.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.Date; + +/** + * 文件配置 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface FileConfigMapper extends BaseMapperX { + + default PageResult selectPage(FileConfigPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(FileConfigDO::getName, reqVO.getName()) + .eqIfPresent(FileConfigDO::getStorage, reqVO.getStorage()) + .betweenIfPresent(FileConfigDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByDesc(FileConfigDO::getId)); + } + + @Select("SELECT id FROM infra_file_config WHERE update_time > #{maxUpdateTime} LIMIT 1") + Long selectExistsByUpdateTimeAfter(Date maxUpdateTime); + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentDAOImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentDAOImpl.java new file mode 100644 index 000000000..c4dcfe8a0 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentDAOImpl.java @@ -0,0 +1,41 @@ +package cn.iocoder.yudao.module.infra.dal.mysql.file; + +import cn.iocoder.yudao.framework.file.core.client.db.DBFileContentFrameworkDAO; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileContentDO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; + +@Repository +public class FileContentDAOImpl implements DBFileContentFrameworkDAO { + + @Resource + private FileContentMapper fileContentMapper; + + @Override + public void insert(Long configId, String path, byte[] content) { + FileContentDO entity = new FileContentDO().setConfigId(configId) + .setPath(path).setContent(content); + fileContentMapper.insert(entity); + } + + @Override + public void delete(Long configId, String path) { + fileContentMapper.delete(buildQuery(configId, path)); + } + + @Override + public byte[] selectContent(Long configId, String path) { + FileContentDO fileContentDO = fileContentMapper.selectOne( + buildQuery(configId, path).select(FileContentDO::getContent)); + return fileContentDO != null ? fileContentDO.getContent() : null; + } + + private LambdaQueryWrapper buildQuery(Long configId, String path) { + return new LambdaQueryWrapper() + .eq(FileContentDO::getConfigId, configId) + .eq(FileContentDO::getPath, path); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentMapper.java new file mode 100644 index 000000000..501979dbe --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/file/FileContentMapper.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.module.infra.dal.mysql.file; + +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileContentDO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface FileContentMapper extends BaseMapper { +} 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 index 1786d130f..1938ee285 100644 --- 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 @@ -3,7 +3,7 @@ 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.controller.admin.file.vo.file.FilePageReqVO; import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; import org.apache.ibatis.annotations.Mapper; @@ -17,25 +17,10 @@ public interface FileMapper extends BaseMapperX { default PageResult selectPage(FilePageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX() - .likeIfPresent("id", reqVO.getId()) + .likeIfPresent("path", reqVO.getPath()) .likeIfPresent("type", reqVO.getType()) .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) .orderByDesc("create_time")); } - default Long selectCountById(String id) { - return selectCount(FileDO::getId, id); - } - - /** - * 基于 Path 获取文件 - * 实际上,是基于 ID 查询 - * - * @param path 路径 - * @return 文件 - */ - 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/framework/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 deleted file mode 100644 index f944daa23..000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/config/FileConfiguration.java +++ /dev/null @@ -1,12 +0,0 @@ -package cn.iocoder.yudao.module.infra.framework.file.config; - -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -/** - * 文件 配置类 - */ -@Configuration -@EnableConfigurationProperties(FileProperties.class) -public class FileConfiguration { -} 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 deleted file mode 100644 index c112802b0..000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/config/FileProperties.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.module.infra.framework.file.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.validation.annotation.Validated; - -import javax.validation.constraints.NotNull; - -@ConfigurationProperties(prefix = "yudao.file") -@Validated -@Data -public class FileProperties { - - /** - * 对应 FileController 的 getFile 方法 - */ - @NotNull(message = "基础文件路径不能为空") - private String basePath; - - // TODO 七牛、等等 - -} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/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 deleted file mode 100644 index ee21b922e..000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/file/package-info.java +++ /dev/null @@ -1,16 +0,0 @@ -/** - * 文件的存储,推荐使用七牛、阿里云、华为云、腾讯云等文件服务 - * - * 在不采用云服务的情况下,我们有几种技术选型: - * 方案 1. 使用自建的文件服务,例如说 minIO、FastDFS 等等 - * 方案 2. 使用服务器的文件系统存储 - * 方案 3. 使用数据库进行存储 - * - * 如果考虑额外在搭建服务,推荐方案 1。 - * 对于方案 2 来说,如果要实现文件存储的高可用,需要多台服务器之间做实时同步,可以基于 rsync + inotify 来做 - * 对于方案 3 的话,实现起来最简单,但是数据库本身不适合存储海量的文件 - * - * 综合考虑,暂时使用方案 3 的方式,比较适合这样一个 all in one 的项目。 - * 随着文件的量级大了之后,还是推荐采用云服务。 - */ -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/framework/security/config/SecurityConfiguration.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/security/config/SecurityConfiguration.java index 3b2a5501e..048411769 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/security/config/SecurityConfiguration.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/security/config/SecurityConfiguration.java @@ -36,7 +36,7 @@ public class SecurityConfiguration { registry.antMatchers(adminSeverContextPath).anonymous() .antMatchers(adminSeverContextPath + "/**").anonymous(); // 文件的获取接口,可匿名访问 - registry.antMatchers(buildAdminApi("/infra/file/get/**"), buildAppApi("/infra/file/get/**")).anonymous(); + registry.antMatchers(buildAdminApi("/infra/file/*/get/**"), buildAppApi("/infra/file/get/**")).permitAll(); } }; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/file/FileConfigRefreshConsumer.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/file/FileConfigRefreshConsumer.java new file mode 100644 index 000000000..671b41943 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/file/FileConfigRefreshConsumer.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.infra.mq.consumer.file; + +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; +import cn.iocoder.yudao.module.infra.mq.message.file.FileConfigRefreshMessage; +import cn.iocoder.yudao.module.infra.service.file.FileConfigService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 针对 {@link FileConfigRefreshMessage} 的消费者 + * + * @author 芋道源码 + */ +@Component +@Slf4j +public class FileConfigRefreshConsumer extends AbstractChannelMessageListener { + + @Resource + private FileConfigService fileConfigService; + + @Override + public void onMessage(FileConfigRefreshMessage message) { + log.info("[onMessage][收到 FileConfig 刷新消息]"); + fileConfigService.initFileClients(); + } + +} 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 deleted file mode 100644 index aa5028bec..000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.infra.mq.consumer; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/file/FileConfigRefreshMessage.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/file/FileConfigRefreshMessage.java new file mode 100644 index 000000000..7cc120de3 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/file/FileConfigRefreshMessage.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.infra.mq.message.file; + +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage; +import lombok.Data; + +/** + * 文件配置数据刷新 Message + */ +@Data +public class FileConfigRefreshMessage extends AbstractChannelMessage { + + @Override + public String getChannel() { + return "infra.file-config.refresh"; + } + +} 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 deleted file mode 100644 index 997752c34..000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/message/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.infra.mq.message; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/file/FileConfigProducer.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/file/FileConfigProducer.java new file mode 100644 index 000000000..a666b185d --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/file/FileConfigProducer.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.infra.mq.producer.file; + +import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; +import cn.iocoder.yudao.module.infra.mq.message.file.FileConfigRefreshMessage; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 文件配置相关消息的 Producer + */ +@Component +public class FileConfigProducer { + + @Resource + private RedisMQTemplate redisMQTemplate; + + /** + * 发送 {@link FileConfigRefreshMessage} 消息 + */ + public void sendFileConfigRefreshMessage() { + FileConfigRefreshMessage message = new FileConfigRefreshMessage(); + redisMQTemplate.send(message); + } + +} 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 deleted file mode 100644 index 5bd8d7cc5..000000000 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/package-info.java +++ /dev/null @@ -1 +0,0 @@ -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/service/codegen/CodegenServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java index 1c2b59ba8..cdf5d3dc7 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java @@ -15,7 +15,6 @@ import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper; import cn.iocoder.yudao.module.infra.dal.mysql.codegen.SchemaColumnMapper; import cn.iocoder.yudao.module.infra.dal.mysql.codegen.SchemaTableMapper; import cn.iocoder.yudao.module.infra.enums.codegen.CodegenImportTypeEnum; -import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum; import cn.iocoder.yudao.module.infra.framework.codegen.config.CodegenProperties; import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenBuilder; import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenEngine; @@ -26,7 +25,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -80,11 +82,8 @@ public class CodegenServiceImpl implements CodegenService { table.setAuthor(userApi.getUser(userId).getNickname()); codegenTableMapper.insert(table); // 构建 CodegenColumnDO 数组,插入到 DB 中 - List columns = codegenBuilder.buildColumns(schemaColumns); - columns.forEach(column -> { - column.setTableId(table.getId()); - codegenColumnMapper.insert(column); // TODO 批量插入 - }); + List columns = codegenBuilder.buildColumns(table.getId(), schemaColumns); + codegenColumnMapper.insertBatch(columns); return table.getId(); } @@ -197,11 +196,8 @@ public class CodegenServiceImpl implements CodegenService { } // 插入新增的字段 - List columns = codegenBuilder.buildColumns(schemaColumns); - columns.forEach(column -> { - column.setTableId(tableId); - codegenColumnMapper.insert(column); // TODO 批量插入 - }); + List columns = codegenBuilder.buildColumns(tableId, schemaColumns); + codegenColumnMapper.insertBatch(columns); // 删除不存在的字段 if (CollUtil.isNotEmpty(deleteColumnIds)) { codegenColumnMapper.deleteBatchIds(deleteColumnIds); diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenBuilder.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenBuilder.java index 4c7ba479f..2a4281e50 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenBuilder.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenBuilder.java @@ -133,9 +133,12 @@ public class CodegenBuilder { table.setTemplateType(CodegenTemplateTypeEnum.CRUD.getType()); } - public List buildColumns(List schemaColumns) { + public List buildColumns(Long tableId, List schemaColumns) { List columns = CodegenConvert.INSTANCE.convertList(schemaColumns); - columns.forEach(this::initColumnDefault); + for (CodegenColumnDO column : columns) { + column.setTableId(tableId); + initColumnDefault(column); + } return columns; } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileConfigService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileConfigService.java new file mode 100755 index 000000000..02197b98e --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileConfigService.java @@ -0,0 +1,102 @@ +package cn.iocoder.yudao.module.infra.service.file; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.file.core.client.FileClient; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigUpdateReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO; + +import javax.validation.Valid; +import java.util.Collection; +import java.util.List; + +/** + * 文件配置 Service 接口 + * + * @author 芋道源码 + */ +public interface FileConfigService { + + /** + * 初始化文件客户端 + */ + void initFileClients(); + + /** + * 创建文件配置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createFileConfig(@Valid FileConfigCreateReqVO createReqVO); + + /** + * 更新文件配置 + * + * @param updateReqVO 更新信息 + */ + void updateFileConfig(@Valid FileConfigUpdateReqVO updateReqVO); + + /** + * 更新文件配置为 Master + * + * @param id 编号 + */ + void updateFileConfigMaster(Long id); + + /** + * 删除文件配置 + * + * @param id 编号 + */ + void deleteFileConfig(Long id); + + /** + * 获得文件配置 + * + * @param id 编号 + * @return 文件配置 + */ + FileConfigDO getFileConfig(Long id); + + /** + * 获得文件配置列表 + * + * @param ids 编号 + * @return 文件配置列表 + */ + List getFileConfigList(Collection ids); + + /** + * 获得文件配置分页 + * + * @param pageReqVO 分页查询 + * @return 文件配置分页 + */ + PageResult getFileConfigPage(FileConfigPageReqVO pageReqVO); + + /** + * 测试文件配置是否正确,通过上传文件 + * + * @param id 编号 + * @return 文件 URL + */ + String testFileConfig(Long id) throws Exception; + + /** + * 获得指定编号的文件客户端 + * + * @param id 配置编号 + * @return 文件客户端 + */ + FileClient getFileClient(Long id); + + /** + * 获得 Master 文件客户端 + * + * @return 文件客户端 + */ + FileClient getMasterFileClient(); + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileConfigServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileConfigServiceImpl.java new file mode 100755 index 000000000..bd0ced564 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileConfigServiceImpl.java @@ -0,0 +1,241 @@ +package cn.iocoder.yudao.module.infra.service.file; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.util.IdUtil; +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.validation.ValidationUtils; +import cn.iocoder.yudao.framework.file.core.client.FileClient; +import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; +import cn.iocoder.yudao.framework.file.core.client.FileClientFactory; +import cn.iocoder.yudao.framework.file.core.enums.FileStorageEnum; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigUpdateReqVO; +import cn.iocoder.yudao.module.infra.convert.file.FileConfigConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO; +import cn.iocoder.yudao.module.infra.dal.mysql.file.FileConfigMapper; +import cn.iocoder.yudao.module.infra.mq.producer.file.FileConfigProducer; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionSynchronization; +import org.springframework.transaction.support.TransactionSynchronizationManager; +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.Date; +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.infra.enums.ErrorCodeConstants.FILE_CONFIG_DELETE_FAIL_MASTER; +import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_CONFIG_NOT_EXISTS; + +/** + * 文件配置 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +@Slf4j +public class FileConfigServiceImpl implements FileConfigService { + + /** + * 定时执行 {@link #schedulePeriodicRefresh()} 的周期 + * 因为已经通过 Redis Pub/Sub 机制,所以频率不需要高 + */ + private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L; + + /** + * 缓存菜单的最大更新时间,用于后续的增量轮询,判断是否有更新 + */ + @Getter + private volatile Date maxUpdateTime; + + @Resource + private FileClientFactory fileClientFactory; + /** + * Master FileClient 对象,有且仅有一个,即 {@link FileConfigDO#getMaster()} 对应的 + */ + @Getter + private FileClient masterFileClient; + + @Resource + private FileConfigMapper fileConfigMapper; + + @Resource + private FileConfigProducer fileConfigProducer; + + @Resource + private Validator validator; + + @Resource + @Lazy // 注入自己,所以延迟加载 + private FileConfigService self; + + @Override + @PostConstruct + public void initFileClients() { + // 获取文件配置,如果有更新 + List configs = loadFileConfigIfUpdate(maxUpdateTime); + if (CollUtil.isEmpty(configs)) { + return; + } + + // 创建或更新支付 Client + configs.forEach(config -> { + fileClientFactory.createOrUpdateFileClient(config.getId(), config.getStorage(), config.getConfig()); + // 如果是 master,进行设置 + if (Boolean.TRUE.equals(config.getMaster())) { + masterFileClient = fileClientFactory.getFileClient(config.getId()); + } + }); + + // 写入缓存 + maxUpdateTime = CollectionUtils.getMaxValue(configs, FileConfigDO::getUpdateTime); + log.info("[initFileClients][初始化 FileConfig 数量为 {}]", configs.size()); + } + + @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD) + public void schedulePeriodicRefresh() { + self.initFileClients(); + } + + /** + * 如果文件配置发生变化,从数据库中获取最新的全量文件配置。 + * 如果未发生变化,则返回空 + * + * @param maxUpdateTime 当前文件配置的最大更新时间 + * @return 文件配置列表 + */ + private List loadFileConfigIfUpdate(Date maxUpdateTime) { + // 第一步,判断是否要更新。 + if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据 + log.info("[loadFileConfigIfUpdate][首次加载全量文件配置]"); + } else { // 判断数据库中是否有更新的文件配置 + if (fileConfigMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) { + return null; + } + log.info("[loadFileConfigIfUpdate][增量加载全量文件配置]"); + } + // 第二步,如果有更新,则从数据库加载所有文件配置 + return fileConfigMapper.selectList(); + } + + @Override + public Long createFileConfig(FileConfigCreateReqVO createReqVO) { + // 插入 + FileConfigDO fileConfig = FileConfigConvert.INSTANCE.convert(createReqVO) + .setConfig(parseClientConfig(createReqVO.getStorage(), createReqVO.getConfig())) + .setMaster(false); // 默认非 master + fileConfigMapper.insert(fileConfig); + // 发送刷新配置的消息 + fileConfigProducer.sendFileConfigRefreshMessage(); + // 返回 + return fileConfig.getId(); + } + + @Override + public void updateFileConfig(FileConfigUpdateReqVO updateReqVO) { + // 校验存在 + FileConfigDO config = this.validateFileConfigExists(updateReqVO.getId()); + // 更新 + FileConfigDO updateObj = FileConfigConvert.INSTANCE.convert(updateReqVO) + .setConfig(parseClientConfig(config.getStorage(), updateReqVO.getConfig())); + fileConfigMapper.updateById(updateObj); + // 发送刷新配置的消息 + fileConfigProducer.sendFileConfigRefreshMessage(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateFileConfigMaster(Long id) { + // 校验存在 + this.validateFileConfigExists(id); + // 更新其它为非 master + fileConfigMapper.updateBatch(new FileConfigDO().setMaster(false)); + // 更新 + fileConfigMapper.updateById(new FileConfigDO().setId(id).setMaster(true)); + // 发送刷新配置的消息 + TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { + + @Override + public void afterCommit() { + fileConfigProducer.sendFileConfigRefreshMessage(); + } + + }); + } + + private FileClientConfig parseClientConfig(Integer storage, Map config) { + // 获取配置类 + Class configClass = FileStorageEnum.getByStorage(storage) + .getConfigClass(); + FileClientConfig clientConfig = JsonUtils.parseObject2(JsonUtils.toJsonString(config), configClass); + // 参数校验 + ValidationUtils.validate(validator, clientConfig); + // 设置参数 + return clientConfig; + } + + @Override + public void deleteFileConfig(Long id) { + // 校验存在 + FileConfigDO config = this.validateFileConfigExists(id); + if (Boolean.TRUE.equals(config.getMaster())) { + throw exception(FILE_CONFIG_DELETE_FAIL_MASTER); + } + // 删除 + fileConfigMapper.deleteById(id); + // 发送刷新配置的消息 + fileConfigProducer.sendFileConfigRefreshMessage(); + } + + private FileConfigDO validateFileConfigExists(Long id) { + FileConfigDO config = fileConfigMapper.selectById(id); + if (config == null) { + throw exception(FILE_CONFIG_NOT_EXISTS); + } + return config; + } + + @Override + public FileConfigDO getFileConfig(Long id) { + return fileConfigMapper.selectById(id); + } + + @Override + public List getFileConfigList(Collection ids) { + return fileConfigMapper.selectBatchIds(ids); + } + + @Override + public PageResult getFileConfigPage(FileConfigPageReqVO pageReqVO) { + return fileConfigMapper.selectPage(pageReqVO); + } + + @Override + public String testFileConfig(Long id) throws Exception { + // 校验存在 + this.validateFileConfigExists(id); + // 上传文件 + byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); + return fileClientFactory.getFileClient(id).upload(content, IdUtil.fastSimpleUUID() + ".jpg"); + } + + @Override + public FileClient getFileClient(Long id) { + return fileClientFactory.getFileClient(id); + } + +} 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 index 4fb658aa5..2d893c082 100644 --- 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 @@ -1,6 +1,6 @@ package cn.iocoder.yudao.module.infra.service.file; -import cn.iocoder.yudao.module.infra.controller.admin.file.vo.FilePageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; @@ -26,21 +26,22 @@ public interface FileService { * @param content 文件内容 * @return 文件路径 */ - String createFile(String path, byte[] content); + String createFile(String path, byte[] content) throws Exception; /** * 删除文件 * * @param id 编号 */ - void deleteFile(String id); + void deleteFile(Long id) throws Exception; /** - * 获得文件 + * 获得文件内容 * + * @param configId 配置编号 * @param path 文件路径 - * @return 文件 + * @return 文件内容 */ - FileDO getFile(String path); + byte[] getFileContent(Long configId, String path) throws Exception; } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java index 1f1724ecd..66af402e0 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java @@ -1,18 +1,19 @@ package cn.iocoder.yudao.module.infra.service.file; import cn.hutool.core.io.FileTypeUtil; +import cn.hutool.core.lang.Assert; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.infra.controller.admin.file.vo.FilePageReqVO; +import cn.iocoder.yudao.framework.file.core.client.FileClient; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.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.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_NOT_EXISTS; /** * 文件 Service 实现类 @@ -23,10 +24,10 @@ import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; public class FileServiceImpl implements FileService { @Resource - private FileMapper fileMapper; + private FileConfigService fileConfigService; @Resource - private FileProperties fileProperties; + private FileMapper fileMapper; @Override public PageResult getFilePage(FilePageReqVO pageReqVO) { @@ -34,37 +35,50 @@ public class FileServiceImpl implements FileService { } @Override - public String createFile(String path, byte[] content) { - if (fileMapper.selectCountById(path) > 0) { - throw exception(FILE_PATH_EXISTS); - } + public String createFile(String path, byte[] content) throws Exception { + // 上传到文件存储器 + FileClient client = fileConfigService.getMasterFileClient(); + Assert.notNull(client, "客户端(master) 不能为空"); + String url = client.upload(content, path); + // 保存到数据库 FileDO file = new FileDO(); - file.setId(path); + file.setConfigId(client.getId()); + file.setPath(path); + file.setUrl(url); file.setType(FileTypeUtil.getType(new ByteArrayInputStream(content))); - file.setContent(content); + file.setSize(content.length); fileMapper.insert(file); - // 拼接路径返回 - return fileProperties.getBasePath() + path; + return url; } @Override - public void deleteFile(String id) { + public void deleteFile(Long id) throws Exception { // 校验存在 - this.validateFileExists(id); - // 更新 + FileDO file = this.validateFileExists(id); + + // 从文件存储器中删除 + FileClient client = fileConfigService.getFileClient(file.getConfigId()); + Assert.notNull(client, "客户端({}) 不能为空", file.getConfigId()); + client.delete(file.getPath()); + + // 删除记录 fileMapper.deleteById(id); } - private void validateFileExists(String id) { - if (fileMapper.selectById(id) == null) { + private FileDO validateFileExists(Long id) { + FileDO fileDO = fileMapper.selectById(id); + if (fileDO == null) { throw exception(FILE_NOT_EXISTS); } + return fileDO; } @Override - public FileDO getFile(String path) { - return fileMapper.selectByPath(path); + public byte[] getFileContent(Long configId, String path) throws Exception { + FileClient client = fileConfigService.getFileClient(configId); + Assert.notNull(client, "客户端({}) 不能为空", configId); + return client.getContent(path); } } diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/views/index.vue.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/views/index.vue.vm index 53ed842cc..aac0c27b6 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/views/index.vue.vm +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/views/index.vue.vm @@ -2,7 +2,7 @@
- + #foreach($column in $columns) #if ($column.listOperation) #set ($dictType=$column.dictType) @@ -11,7 +11,7 @@ #set ($comment=$column.columnComment) #if ($column.htmlType == "input") - + #elseif ($column.htmlType == "select" || $column.htmlType == "radio") @@ -27,11 +27,11 @@ #elseif($column.htmlType == "datetime") #if ($column.listOperationCondition != "BETWEEN")## 非范围 - + #else## 范围 - #end @@ -39,8 +39,8 @@ #end #end - 搜索 - 重置 + 搜索 + 重置 @@ -160,7 +160,7 @@ #elseif($column.htmlType == "datetime")## 时间框 - + #elseif($column.htmlType == "textarea")## 文本框 diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/file/erweima.jpg b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/file/erweima.jpg new file mode 100644 index 000000000..1447283cd Binary files /dev/null and b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/file/erweima.jpg differ diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileConfigServiceImplTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileConfigServiceImplTest.java new file mode 100755 index 000000000..33e85f03b --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/file/FileConfigServiceImplTest.java @@ -0,0 +1,256 @@ +package cn.iocoder.yudao.module.infra.service.file; + +import cn.hutool.core.map.MapUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.file.core.client.FileClient; +import cn.iocoder.yudao.framework.file.core.client.FileClientConfig; +import cn.iocoder.yudao.framework.file.core.client.FileClientFactory; +import cn.iocoder.yudao.framework.file.core.client.local.LocalFileClientConfig; +import cn.iocoder.yudao.framework.file.core.enums.FileStorageEnum; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigUpdateReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO; +import cn.iocoder.yudao.module.infra.dal.mysql.file.FileConfigMapper; +import cn.iocoder.yudao.module.infra.mq.producer.file.FileConfigProducer; +import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest; +import lombok.Data; +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.io.Serializable; +import java.util.Map; + +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.common.util.object.ObjectUtils.cloneIgnoreId; +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.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.infra.enums.ErrorCodeConstants.FILE_CONFIG_DELETE_FAIL_MASTER; +import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_CONFIG_NOT_EXISTS; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + +/** +* {@link FileConfigServiceImpl} 的单元测试类 +* +* @author 芋道源码 +*/ +@Import(FileConfigServiceImpl.class) +public class FileConfigServiceImplTest extends BaseDbUnitTest { + + @Resource + private FileConfigServiceImpl fileConfigService; + + @Resource + private FileConfigMapper fileConfigMapper; + + @MockBean + private FileConfigProducer fileConfigProducer; + @MockBean + private Validator validator; + @MockBean + private FileClientFactory fileClientFactory; + + @Test + public void testInitLocalCache() { + // mock 数据 + FileConfigDO configDO1 = randomFileConfigDO().setId(1L).setMaster(true); + fileConfigMapper.insert(configDO1); + FileConfigDO configDO2 = randomFileConfigDO().setId(2L).setMaster(false); + fileConfigMapper.insert(configDO2); + // mock fileClientFactory 获得 master + FileClient masterFileClient = mock(FileClient.class); + when(fileClientFactory.getFileClient(eq(1L))).thenReturn(masterFileClient); + + // 调用 + fileConfigService.initFileClients(); + // 断言 fileClientFactory 调用 + verify(fileClientFactory).createOrUpdateFileClient(eq(1L), + eq(configDO1.getStorage()), eq(configDO1.getConfig())); + verify(fileClientFactory).createOrUpdateFileClient(eq(2L), + eq(configDO2.getStorage()), eq(configDO2.getConfig())); + assertSame(masterFileClient, fileConfigService.getMasterFileClient()); + // 断言 maxUpdateTime 缓存 + assertEquals(max(configDO1.getUpdateTime(), configDO2.getUpdateTime()), + fileConfigService.getMaxUpdateTime()); + } + + @Test + public void testCreateFileConfig_success() { + // 准备参数 + Map config = MapUtil.builder().put("basePath", "/yunai") + .put("domain", "https://www.iocoder.cn").build(); + FileConfigCreateReqVO reqVO = randomPojo(FileConfigCreateReqVO.class, + o -> o.setStorage(FileStorageEnum.LOCAL.getStorage()).setConfig(config)); + + // 调用 + Long fileConfigId = fileConfigService.createFileConfig(reqVO); + // 断言 + assertNotNull(fileConfigId); + // 校验记录的属性是否正确 + FileConfigDO fileConfig = fileConfigMapper.selectById(fileConfigId); + assertPojoEquals(reqVO, fileConfig, "config"); + assertFalse(fileConfig.getMaster()); + assertEquals("/yunai", ((LocalFileClientConfig) fileConfig.getConfig()).getBasePath()); + assertEquals("https://www.iocoder.cn", ((LocalFileClientConfig) fileConfig.getConfig()).getDomain()); + // verify 调用 + verify(fileConfigProducer).sendFileConfigRefreshMessage(); + } + + @Test + public void testUpdateFileConfig_success() { + // mock 数据 + FileConfigDO dbFileConfig = randomPojo(FileConfigDO.class, o -> o.setStorage(FileStorageEnum.LOCAL.getStorage()) + .setConfig(new LocalFileClientConfig().setBasePath("/yunai").setDomain("https://www.iocoder.cn"))); + fileConfigMapper.insert(dbFileConfig);// @Sql: 先插入出一条存在的数据 + // 准备参数 + FileConfigUpdateReqVO reqVO = randomPojo(FileConfigUpdateReqVO.class, o -> { + o.setId(dbFileConfig.getId()); // 设置更新的 ID + Map config = MapUtil.builder().put("basePath", "/yunai2") + .put("domain", "https://doc.iocoder.cn").build(); + o.setConfig(config); + }); + + // 调用 + fileConfigService.updateFileConfig(reqVO); + // 校验是否更新正确 + FileConfigDO fileConfig = fileConfigMapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, fileConfig, "config"); + assertEquals("/yunai2", ((LocalFileClientConfig) fileConfig.getConfig()).getBasePath()); + assertEquals("https://doc.iocoder.cn", ((LocalFileClientConfig) fileConfig.getConfig()).getDomain()); + // verify 调用 + verify(fileConfigProducer).sendFileConfigRefreshMessage(); + } + + @Test + public void testUpdateFileConfig_notExists() { + // 准备参数 + FileConfigUpdateReqVO reqVO = randomPojo(FileConfigUpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> fileConfigService.updateFileConfig(reqVO), FILE_CONFIG_NOT_EXISTS); + } + + @Test + public void testUpdateFileConfigMaster_success() { + // mock 数据 + FileConfigDO dbFileConfig = randomFileConfigDO().setMaster(false); + fileConfigMapper.insert(dbFileConfig);// @Sql: 先插入出一条存在的数据 + FileConfigDO masterFileConfig = randomFileConfigDO().setMaster(true); + fileConfigMapper.insert(masterFileConfig);// @Sql: 先插入出一条存在的数据 + + // 调用 + fileConfigService.updateFileConfigMaster(dbFileConfig.getId()); + // 断言数据 + assertTrue(fileConfigMapper.selectById(dbFileConfig.getId()).getMaster()); + assertFalse(fileConfigMapper.selectById(masterFileConfig.getId()).getMaster()); + // verify 调用 + verify(fileConfigProducer).sendFileConfigRefreshMessage(); + } + + @Test + public void testUpdateFileConfigMaster_notExists() { + // 调用, 并断言异常 + assertServiceException(() -> fileConfigService.updateFileConfigMaster(randomLongId()), FILE_CONFIG_NOT_EXISTS); + } + + @Test + public void testDeleteFileConfig_success() { + // mock 数据 + FileConfigDO dbFileConfig = randomFileConfigDO().setMaster(false); + fileConfigMapper.insert(dbFileConfig);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbFileConfig.getId(); + + // 调用 + fileConfigService.deleteFileConfig(id); + // 校验数据不存在了 + assertNull(fileConfigMapper.selectById(id)); + // verify 调用 + verify(fileConfigProducer).sendFileConfigRefreshMessage(); + } + + @Test + public void testDeleteFileConfig_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> fileConfigService.deleteFileConfig(id), FILE_CONFIG_NOT_EXISTS); + } + + @Test + public void testDeleteFileConfig_master() { + // mock 数据 + FileConfigDO dbFileConfig = randomFileConfigDO().setMaster(true); + fileConfigMapper.insert(dbFileConfig);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbFileConfig.getId(); + + // 调用, 并断言异常 + assertServiceException(() -> fileConfigService.deleteFileConfig(id), FILE_CONFIG_DELETE_FAIL_MASTER); + } + + @Test + public void testGetFileConfigPage() { + // mock 数据 + FileConfigDO dbFileConfig = randomFileConfigDO().setName("芋道源码") + .setStorage(FileStorageEnum.LOCAL.getStorage()); + dbFileConfig.setCreateTime(buildTime(2022, 11, 11));// 等会查询到 + fileConfigMapper.insert(dbFileConfig); + // 测试 name 不匹配 + fileConfigMapper.insert(cloneIgnoreId(dbFileConfig, o -> o.setName("源码"))); + // 测试 storage 不匹配 + fileConfigMapper.insert(cloneIgnoreId(dbFileConfig, o -> o.setStorage(FileStorageEnum.DB.getStorage()))); + // 测试 createTime 不匹配 + fileConfigMapper.insert(cloneIgnoreId(dbFileConfig, o -> o.setCreateTime(buildTime(2022, 12, 12)))); + // 准备参数 + FileConfigPageReqVO reqVO = new FileConfigPageReqVO(); + reqVO.setName("芋道"); + reqVO.setStorage(FileStorageEnum.LOCAL.getStorage()); + reqVO.setBeginCreateTime(buildTime(2022, 11, 10)); + reqVO.setEndCreateTime(buildTime(2022, 11, 12)); + + // 调用 + PageResult pageResult = fileConfigService.getFileConfigPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbFileConfig, pageResult.getList().get(0)); + } + + @Test + public void testFileConfig() throws Exception { + // mock 数据 + FileConfigDO dbFileConfig = randomFileConfigDO().setMaster(false); + fileConfigMapper.insert(dbFileConfig);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbFileConfig.getId(); + // mock 获得 Client + FileClient fileClient = mock(FileClient.class); + when(fileClientFactory.getFileClient(eq(id))).thenReturn(fileClient); + when(fileClient.upload(any(), any())).thenReturn("https://www.iocoder.cn"); + + // 调用,并断言 + assertEquals("https://www.iocoder.cn", fileConfigService.testFileConfig(id)); + } + + private FileConfigDO randomFileConfigDO() { + return randomPojo(FileConfigDO.class).setStorage(randomEle(FileStorageEnum.values()).getStorage()) + .setConfig(new EmptyFileClientConfig()); + } + + @Data + public static class EmptyFileClientConfig implements FileClientConfig, Serializable { + + } + +} 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 index 259502ca7..4682bfbd9 100644 --- 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 @@ -3,11 +3,11 @@ 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.file.core.client.FileClient; 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.controller.admin.file.vo.file.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; @@ -17,47 +17,46 @@ 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.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.ArgumentMatchers.same; +import static org.mockito.Mockito.*; -@Import({FileServiceImpl.class, FileProperties.class}) +@Import({FileServiceImpl.class}) public class FileServiceTest extends BaseDbUnitTest { @Resource private FileService fileService; - @MockBean - private FileProperties fileProperties; - @Resource private FileMapper fileMapper; + @MockBean + private FileConfigService fileConfigService; + @Test public void testGetFilePage() { // mock 数据 FileDO dbFile = randomPojo(FileDO.class, o -> { // 等会查询到 - o.setId("yunai"); + o.setPath("yunai"); o.setType("jpg"); o.setCreateTime(buildTime(2021, 1, 15)); }); fileMapper.insert(dbFile); - // 测试 id 不匹配 - fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> o.setId("tudou"))); + // 测试 path 不匹配 + fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> o.setPath("tudou"))); // 测试 type 不匹配 fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> { - o.setId("yunai02"); o.setType("png"); })); // 测试 createTime 不匹配 fileMapper.insert(ObjectUtils.cloneIgnoreId(dbFile, o -> { - o.setId("yunai03"); o.setCreateTime(buildTime(2020, 1, 15)); })); // 准备参数 FilePageReqVO reqVO = new FilePageReqVO(); - reqVO.setId("yunai"); + reqVO.setPath("yunai"); reqVO.setType("jp"); reqVO.setBeginCreateTime(buildTime(2021, 1, 10)); reqVO.setEndCreateTime(buildTime(2021, 1, 20)); @@ -67,60 +66,76 @@ public class FileServiceTest extends BaseDbUnitTest { // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); - AssertUtils.assertPojoEquals(dbFile, pageResult.getList().get(0), "content"); + AssertUtils.assertPojoEquals(dbFile, pageResult.getList().get(0)); } @Test - public void testCreateFile_success() { + public void testCreateFile_success() throws Exception { // 准备参数 String path = randomString(); byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); + // mock Master 文件客户端 + FileClient client = mock(FileClient.class); + when(fileConfigService.getMasterFileClient()).thenReturn(client); + String url = randomString(); + when(client.upload(same(content), same(path))).thenReturn(url); + when(client.getId()).thenReturn(10L); // 调用 - String url = fileService.createFile(path, content); + String result = fileService.createFile(path, content); // 断言 - assertEquals(fileProperties.getBasePath() + path, url); + assertEquals(result, url); // 校验数据 - FileDO file = fileMapper.selectById(path); - assertEquals(path, file.getId()); + FileDO file = fileMapper.selectOne(FileDO::getPath, path); + assertEquals(10L, file.getConfigId()); + assertEquals(path, file.getPath()); + assertEquals(url, file.getUrl()); assertEquals("jpg", file.getType()); - assertArrayEquals(content, file.getContent()); + assertEquals(content.length, file.getSize()); } @Test - public void testCreateFile_exists() { + public void testDeleteFile_success() throws Exception { // 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); + FileDO dbFile = randomPojo(FileDO.class, o -> o.setConfigId(10L).setPath("tudou.jpg")); fileMapper.insert(dbFile);// @Sql: 先插入出一条存在的数据 + // mock Master 文件客户端 + FileClient client = mock(FileClient.class); + when(fileConfigService.getFileClient(eq(10L))).thenReturn(client); // 准备参数 - String id = dbFile.getId(); + Long id = dbFile.getId(); // 调用 fileService.deleteFile(id); // 校验数据不存在了 assertNull(fileMapper.selectById(id)); + // 校验调用 + verify(client).delete(eq("tudou.jpg")); } @Test public void testDeleteFile_notExists() { // 准备参数 - String id = randomString(); + Long id = randomLongId(); // 调用, 并断言异常 assertServiceException(() -> fileService.deleteFile(id), FILE_NOT_EXISTS); } + @Test + public void testGetFileContent() throws Exception { + // 准备参数 + Long configId = 10L; + String path = "tudou.jpg"; + // mock 方法 + FileClient client = mock(FileClient.class); + when(fileConfigService.getFileClient(eq(10L))).thenReturn(client); + byte[] content = new byte[]{}; + when(client.getContent(eq("tudou.jpg"))).thenReturn(content); + + // 调用 + byte[] result = fileService.getFileContent(configId, path); + // 断言 + assertSame(result, content); + } } 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 60914d97f..3a2079cdc 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 @@ -26,8 +26,9 @@ spring: port: 16379 # 端口(单元测试,使用 16379 端口) database: 0 # 数据库索引 -mybatis: +mybatis-plus: lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试 + type-aliases-package: ${yudao.info.base-package}.module.*.dal.dataobject --- #################### 定时任务相关配置 #################### @@ -46,4 +47,4 @@ mybatis: # 芋道配置项,设置当前项目所有自定义的配置 yudao: info: - base-package: cn.iocoder.yudao.module + base-package: cn.iocoder.yudao 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 071c77bc7..cc8316837 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 @@ -8,3 +8,4 @@ DELETE FROM "infra_api_access_log"; DELETE FROM "infra_file"; DELETE FROM "infra_api_error_log"; DELETE FROM "infra_test_demo"; +DELETE FROM "infra_file_config"; 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 80213b4a7..3c86102e6 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 @@ -16,10 +16,28 @@ CREATE TABLE IF NOT EXISTS "infra_config" ( PRIMARY KEY ("id") ) COMMENT '参数配置表'; +CREATE TABLE IF NOT EXISTS "infra_file_config" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(63) NOT NULL, + "storage" tinyint NOT NULL, + "remark" varchar(255), + "master" bit(1) NOT NULL, + "config" varchar(4096) 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 NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '文件配置表'; + CREATE TABLE IF NOT EXISTS "infra_file" ( - "id" varchar(188) NOT NULL, + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "config_id" bigint NOT NULL, + "path" varchar(512), + "url" varchar(1024), "type" varchar(63) DEFAULT NULL, - "content" blob NOT NULL, + "size" bigint NOT NULL, "creator" varchar(64) DEFAULT '', "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "updater" varchar(64) DEFAULT '', 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 33505ea3a..edefcdba0 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 @@ -16,9 +16,8 @@ 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.exception.util.ServiceExceptionUtil.exception; 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.infra.enums.ErrorCodeConstants.FILE_IS_EMPTY; @@ -44,7 +43,7 @@ public class AppUserController { @PutMapping("/update-avatar") @ApiOperation("修改用户头像") @PreAuthenticated - public CommonResult updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws IOException { + public CommonResult updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws Exception { if (file.isEmpty()) { throw exception(FILE_IS_EMPTY); } diff --git a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java index 1a38e61af..3c0e62de8 100644 --- a/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java +++ b/yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java @@ -60,7 +60,7 @@ public interface MemberUserService { * @param inputStream 头像文件 * @return 头像url */ - String updateUserAvatar(Long userId, InputStream inputStream); + String updateUserAvatar(Long userId, InputStream inputStream) throws Exception; /** * 修改手机 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 fcfe3ae51..0522e8eda 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 @@ -100,7 +100,7 @@ public class MemberUserServiceImpl implements MemberUserService { } @Override - public String updateUserAvatar(Long userId, InputStream avatarFile) { + public String updateUserAvatar(Long userId, InputStream avatarFile) throws Exception { this.checkUserExists(userId); // 创建文件 String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile)); 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 46d72091c..dc642f9b4 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 @@ -74,7 +74,7 @@ public class MemberUserServiceImplTest extends BaseDbAndRedisUnitTest { } @Test - public void testUpdateAvatar_success(){ + public void testUpdateAvatar_success() throws Exception { // mock 数据 MemberUserDO dbUser = randomUserDO(); userMapper.insert(dbUser); 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 index 1c58cf1e1..62b29ee98 100644 --- 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 @@ -127,6 +127,7 @@ public class PayChannelServiceImpl implements PayChannelService { PayChannelDO channel = PayChannelConvert.INSTANCE.convert(reqVO); settingConfigAndCheckParam(channel, reqVO.getConfig()); channelMapper.insert(channel); + // TODO 芋艿:缺少刷新本地缓存的机制 return channel.getId(); } @@ -138,6 +139,7 @@ public class PayChannelServiceImpl implements PayChannelService { PayChannelDO channel = PayChannelConvert.INSTANCE.convert(updateReqVO); settingConfigAndCheckParam(channel, updateReqVO.getConfig()); channelMapper.updateById(channel); + // TODO 芋艿:缺少刷新本地缓存的机制 } @Override @@ -146,6 +148,7 @@ public class PayChannelServiceImpl implements PayChannelService { this.validateChannelExists(id); // 删除 channelMapper.deleteById(id); + // TODO 芋艿:缺少刷新本地缓存的机制 } private void validateChannelExists(Long id) { @@ -224,6 +227,7 @@ public class PayChannelServiceImpl implements PayChannelService { if (ObjectUtil.isNull(payClass)) { throw exception(CHANNEL_NOT_EXISTS); } + // TODO @芋艿:不要使用 hutool 的 json 工具,用项目的 PayClientConfig config = JSONUtil.toBean(configStr, payClass); // 验证参数 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 c49524245..c0e342383 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 @@ -14,16 +14,16 @@ public interface DictTypeConstants { String USER_SEX = "system_user_sex"; // 用户性别 - String OPERATE_TYPE = "sys_operate_type"; // 操作类型 + String OPERATE_TYPE = "system_operate_type"; // 操作类型 - String LOGIN_TYPE = "sys_login_type"; // 登录日志的类型 - String LOGIN_RESULT = "sys_login_result"; // 登录结果 + String LOGIN_TYPE = "system_login_type"; // 登录日志的类型 + String LOGIN_RESULT = "system_login_result"; // 登录结果 String ERROR_CODE_TYPE = "system_error_code_type"; // 错误码的类型枚举 - String SMS_CHANNEL_CODE = "sys_sms_channel_code"; // 短信渠道编码 - String SMS_TEMPLATE_TYPE = "sys_sms_template_type"; // 短信模板类型 - String SMS_SEND_STATUS = "sys_sms_send_status"; // 短信发送状态 - String SMS_RECEIVE_STATUS = "sys_sms_receive_status"; // 短信接收状态 + String SMS_CHANNEL_CODE = "system_sms_channel_code"; // 短信渠道编码 + String SMS_TEMPLATE_TYPE = "system_sms_template_type"; // 短信模板类型 + String SMS_SEND_STATUS = "system_sms_send_status"; // 短信发送状态 + String SMS_RECEIVE_STATUS = "system_sms_receive_status"; // 短信接收状态 } 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 d68fa96cc..9c6c24092 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 @@ -29,7 +29,6 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.validation.Valid; -import java.io.IOException; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -99,7 +98,7 @@ public class UserProfileController { @PutMapping("/update-avatar") @ApiOperation("上传用户个人头像") - public CommonResult updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws IOException { + public CommonResult updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws Exception { if (file.isEmpty()) { throw ServiceExceptionUtil.exception(FILE_IS_EMPTY); } 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 21584c9fc..21f7a4948 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 @@ -30,7 +30,7 @@ public interface OperateLogConvert { 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())); + MapUtils.findAndThen(userMap, operateLog.getUserId(), user -> excelVO.setUserNickname(user.getNickname())); excelVO.setSuccessStr(SUCCESS.getCode().equals(operateLog.getResultCode()) ? "成功" : "失败"); return excelVO; }).collect(Collectors.toList()); diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/MenuMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/MenuMapper.java index fc2718122..7a9fbfc1e 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/MenuMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/MenuMapper.java @@ -1,12 +1,12 @@ package cn.iocoder.yudao.module.system.dal.mysql.permission; -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.permission.vo.menu.MenuListReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; import java.util.Date; import java.util.List; @@ -28,9 +28,7 @@ public interface MenuMapper extends BaseMapperX { .eqIfPresent(MenuDO::getStatus, reqVO.getStatus())); } - default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) { - return selectOne(new LambdaQueryWrapper().select(MenuDO::getId) - .gt(MenuDO::getUpdateTime, maxUpdateTime).last(SqlConstants.LIMIT1)) != null; - } + @Select("SELECT id FROM system_menu WHERE update_time > #{maxUpdateTime} LIMIT 1") + MenuDO selectExistsByUpdateTimeAfter(Date maxUpdateTime); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMapper.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMapper.java index 1de536caf..c10cfa09b 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMapper.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMapper.java @@ -7,9 +7,8 @@ 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.RoleDO; -import com.baomidou.mybatisplus.annotation.InterceptorIgnore; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; import org.springframework.lang.Nullable; import java.util.Collection; @@ -45,10 +44,7 @@ public interface RoleMapper extends BaseMapperX { return selectList(new LambdaQueryWrapperX().inIfPresent(RoleDO::getStatus, statuses)); } - @InterceptorIgnore(tenantLine = "true") // 该方法忽略多租户。原因:该方法被异步 task 调用,此时获取不到租户编号 - default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) { - return selectOne(new QueryWrapper().select("id") - .gt("update_time", maxUpdateTime).last("LIMIT 1")) != null; - } + @Select("SELECT id FROM system_role WHERE update_time > #{maxUpdateTime} LIMIT 1") + RoleDO selectExistsByUpdateTimeAfter(Date maxUpdateTime); } 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 02008bce8..f519b4ee9 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 @@ -25,8 +25,7 @@ public interface RoleMenuMapper extends BaseMapperX { entity.setMenuId(menuId); return entity; }).collect(Collectors.toList()); - // TODO 芋艿,mybatis plus 增加批量插入的功能 - list.forEach(this::insert); + insertBatch(list); } default void deleteListByRoleIdAndMenuIds(Long roleId, Collection menuIds) { 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 c54a490a6..149f6c7b4 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 @@ -120,7 +120,7 @@ public class MenuServiceImpl implements MenuService { if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据 log.info("[loadMenuIfUpdate][首次加载全量菜单]"); } else { // 判断数据库中是否有更新的菜单 - if (!menuMapper.selectExistsByUpdateTimeAfter(maxUpdateTime)) { + if (menuMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) { return null; } log.info("[loadMenuIfUpdate][增量加载全量菜单]"); 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 ebea1f88c..6bd7af2c6 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 @@ -116,7 +116,7 @@ public class RoleServiceImpl implements RoleService { if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据 log.info("[loadRoleIfUpdate][首次加载全量角色]"); } else { // 判断数据库中是否有更新的角色 - if (!roleMapper.selectExistsByUpdateTimeAfter(maxUpdateTime)) { + if (roleMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) { return null; } log.info("[loadRoleIfUpdate][增量加载全量角色]"); @@ -126,6 +126,7 @@ public class RoleServiceImpl implements RoleService { } @Override + @Transactional public Long createRole(RoleCreateReqVO reqVO, Integer type) { // 校验角色 checkDuplicateRole(reqVO.getName(), reqVO.getCode(), null); @@ -136,7 +137,12 @@ public class RoleServiceImpl implements RoleService { role.setDataScope(DataScopeEnum.ALL.getScope()); // 默认可查看所有数据。原因是,可能一些项目不需要项目权限 roleMapper.insert(role); // 发送刷新消息 - roleProducer.sendRoleRefreshMessage(); + TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { + @Override + public void afterCommit() { + roleProducer.sendRoleRefreshMessage(); + } + }); // 返回 return role.getId(); } diff --git a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java index e9a6fdc96..78d6a88a9 100644 --- a/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java +++ b/yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java @@ -64,7 +64,7 @@ public interface AdminUserService { * @param id 用户 id * @param avatarFile 头像文件 */ - String updateUserAvatar(Long id, InputStream avatarFile); + String updateUserAvatar(Long id, InputStream avatarFile) throws Exception; /** * 修改密码 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 279be9d57..32f0a8e8c 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 @@ -63,6 +63,7 @@ public class AdminUserServiceImpl implements AdminUserService { private FileApi fileApi; @Override + public Long createUser(UserCreateReqVO reqVO) { // 校验账户配合 tenantService.handleTenantInfo(tenant -> { @@ -118,7 +119,7 @@ public class AdminUserServiceImpl implements AdminUserService { } @Override - public String updateUserAvatar(Long id, InputStream avatarFile) { + public String updateUserAvatar(Long id, InputStream avatarFile) throws Exception { this.checkUserExists(id); // 存储文件 String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile)); 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 49d18dc06..5197d422b 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 @@ -196,7 +196,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { } @Test - public void testUpdateUserAvatar_success() { + public void testUpdateUserAvatar_success() throws Exception { // mock 数据 AdminUserDO dbUser = randomAdminUserDO(); userMapper.insert(dbUser); diff --git a/yudao-server/src/main/resources/admin-ui/static/js/12.js b/yudao-server/src/main/resources/admin-ui/static/js/12.js index 472badc4c..f95e0fad4 100644 --- a/yudao-server/src/main/resources/admin-ui/static/js/12.js +++ b/yudao-server/src/main/resources/admin-ui/static/js/12.js @@ -8,7 +8,7 @@ /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/interopRequireDefault.js */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\").default;\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _login = __webpack_require__(/*! @/api/login */ \"./src/api/login.js\");\n\nvar _tenant = __webpack_require__(/*! @/api/system/tenant */ \"./src/api/system/tenant.js\");\n\nvar _jsCookie = _interopRequireDefault(__webpack_require__(/*! js-cookie */ \"./node_modules/js-cookie/dist/js.cookie.js\"));\n\nvar _jsencrypt = __webpack_require__(/*! @/utils/jsencrypt */ \"./src/utils/jsencrypt.js\");\n\nvar _constants = __webpack_require__(/*! @/utils/constants */ \"./src/utils/constants.js\");\n\nvar _ruoyi = __webpack_require__(/*! @/utils/ruoyi */ \"./src/utils/ruoyi.js\");\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n name: \"Login\",\n data: function data() {\n return {\n codeUrl: \"\",\n captchaEnable: true,\n tenantEnable: true,\n loginForm: {\n username: \"admin\",\n password: \"admin123\",\n rememberMe: false,\n code: \"\",\n uuid: \"\",\n tenantName: \"芋道源码\"\n },\n loginRules: {\n username: [{\n required: true,\n trigger: \"blur\",\n message: \"用户名不能为空\"\n }],\n password: [{\n required: true,\n trigger: \"blur\",\n message: \"密码不能为空\"\n }],\n code: [{\n required: true,\n trigger: \"change\",\n message: \"验证码不能为空\"\n }],\n tenantName: [{\n required: true,\n trigger: \"blur\",\n message: \"租户不能为空\"\n }, {\n validator: function validator(rule, value, callback) {\n // debugger\n (0, _tenant.getTenantIdByName)(value).then(function (res) {\n var tenantId = res.data;\n\n if (tenantId >= 0) {\n // 设置租户\n _jsCookie.default.set(\"tenantId\", tenantId);\n\n callback();\n } else {\n callback('租户不存在');\n }\n });\n },\n trigger: 'blur'\n }]\n },\n loading: false,\n redirect: undefined,\n // 枚举\n SysUserSocialTypeEnum: _constants.SystemUserSocialTypeEnum\n };\n },\n // watch: {\n // $route: {\n // handler: function(route) {\n // this.redirect = route.query && route.query.redirect;\n // },\n // immediate: true\n // }\n // },\n created: function created() {\n // 租户开关\n this.tenantEnable = (0, _ruoyi.getTenantEnable)(); // 重定向地址\n\n this.redirect = this.$route.query.redirect;\n this.getCode();\n this.getCookie();\n },\n methods: {\n getCode: function getCode() {\n var _this = this;\n\n // 只有开启的状态,才加载验证码。默认开启\n if (!this.captchaEnable) {\n return;\n } // 请求远程,获得验证码\n\n\n (0, _login.getCodeImg)().then(function (res) {\n res = res.data;\n _this.captchaEnable = res.enable;\n\n if (_this.captchaEnable) {\n _this.codeUrl = \"data:image/gif;base64,\" + res.img;\n _this.loginForm.uuid = res.uuid;\n }\n });\n },\n getCookie: function getCookie() {\n var username = _jsCookie.default.get(\"username\");\n\n var password = _jsCookie.default.get(\"password\");\n\n var rememberMe = _jsCookie.default.get('rememberMe');\n\n var tenantName = _jsCookie.default.get('tenantName');\n\n this.loginForm = {\n username: username === undefined ? this.loginForm.username : username,\n password: password === undefined ? this.loginForm.password : (0, _jsencrypt.decrypt)(password),\n rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),\n tenantName: tenantName === undefined ? this.loginForm.tenantName : tenantName\n };\n },\n handleLogin: function handleLogin() {\n var _this2 = this;\n\n this.$refs.loginForm.validate(function (valid) {\n if (valid) {\n _this2.loading = true; // 设置 Cookie\n\n if (_this2.loginForm.rememberMe) {\n _jsCookie.default.set(\"username\", _this2.loginForm.username, {\n expires: 30\n });\n\n _jsCookie.default.set(\"password\", (0, _jsencrypt.encrypt)(_this2.loginForm.password), {\n expires: 30\n });\n\n _jsCookie.default.set('rememberMe', _this2.loginForm.rememberMe, {\n expires: 30\n });\n\n _jsCookie.default.set('tenantName', _this2.loginForm.tenantName, {\n expires: 30\n });\n } else {\n _jsCookie.default.remove(\"username\");\n\n _jsCookie.default.remove(\"password\");\n\n _jsCookie.default.remove('rememberMe');\n\n _jsCookie.default.remove('tenantName');\n } // 发起登陆\n\n\n _this2.$store.dispatch(\"Login\", _this2.loginForm).then(function () {\n _this2.$router.push({\n path: _this2.redirect || \"/\"\n }).catch(function () {});\n }).catch(function () {\n _this2.loading = false;\n\n _this2.getCode();\n });\n }\n });\n },\n doSocialLogin: function doSocialLogin(socialTypeEnum) {\n // console.log(\"开始Oauth登录...%o\", socialTypeEnum.code);\n // 设置登录中\n this.loading = true; // 计算 redirectUri\n\n var redirectUri = location.origin + '/social-login?type=' + socialTypeEnum.type + '&redirect=' + (this.redirect || \"/\"); // 重定向不能丢\n // const redirectUri = 'http://127.0.0.1:48080/api/gitee/callback';\n // const redirectUri = 'http://127.0.0.1:48080/api/dingtalk/callback';\n // 进行跳转\n\n (0, _login.socialAuthRedirect)(socialTypeEnum.type, encodeURIComponent(redirectUri)).then(function (res) {\n // console.log(res.url);\n window.location.href = res.data;\n });\n }\n }\n};\nexports.default = _default;\n\n//# sourceURL=webpack:///./src/views/login.vue?./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); +eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/interopRequireDefault.js */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\").default;\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _login = __webpack_require__(/*! @/api/login */ \"./src/api/login.js\");\n\nvar _tenant = __webpack_require__(/*! @/api/system/tenant */ \"./src/api/system/tenant.js\");\n\nvar _jsCookie = _interopRequireDefault(__webpack_require__(/*! js-cookie */ \"./node_modules/js-cookie/dist/js.cookie.js\"));\n\nvar _jsencrypt = __webpack_require__(/*! @/utils/jsencrypt */ \"./src/utils/jsencrypt.js\");\n\nvar _constants = __webpack_require__(/*! @/utils/constants */ \"./src/utils/constants.js\");\n\nvar _ruoyi = __webpack_require__(/*! @/utils/ruoyi */ \"./src/utils/ruoyi.js\");\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n name: \"Login\",\n data: function data() {\n return {\n codeUrl: \"\",\n captchaEnable: true,\n tenantEnable: true,\n loginForm: {\n username: \"admin\",\n password: \"admin123\",\n rememberMe: false,\n code: \"\",\n uuid: \"\",\n tenantName: \"芋道源码\"\n },\n loginRules: {\n username: [{\n required: true,\n trigger: \"blur\",\n message: \"用户名不能为空\"\n }],\n password: [{\n required: true,\n trigger: \"blur\",\n message: \"密码不能为空\"\n }],\n code: [{\n required: true,\n trigger: \"change\",\n message: \"验证码不能为空\"\n }],\n tenantName: [{\n required: true,\n trigger: \"blur\",\n message: \"租户不能为空\"\n }, {\n validator: function validator(rule, value, callback) {\n // debugger\n (0, _tenant.getTenantIdByName)(value).then(function (res) {\n var tenantId = res.data;\n\n if (tenantId && tenantId >= 0) {\n // 设置租户\n _jsCookie.default.set(\"tenantId\", tenantId);\n\n callback();\n } else {\n callback('租户不存在');\n }\n });\n },\n trigger: 'blur'\n }]\n },\n loading: false,\n redirect: undefined,\n // 枚举\n SysUserSocialTypeEnum: _constants.SystemUserSocialTypeEnum\n };\n },\n // watch: {\n // $route: {\n // handler: function(route) {\n // this.redirect = route.query && route.query.redirect;\n // },\n // immediate: true\n // }\n // },\n created: function created() {\n // 租户开关\n this.tenantEnable = (0, _ruoyi.getTenantEnable)(); // 重定向地址\n\n this.redirect = this.$route.query.redirect;\n this.getCode();\n this.getCookie();\n },\n methods: {\n getCode: function getCode() {\n var _this = this;\n\n // 只有开启的状态,才加载验证码。默认开启\n if (!this.captchaEnable) {\n return;\n } // 请求远程,获得验证码\n\n\n (0, _login.getCodeImg)().then(function (res) {\n res = res.data;\n _this.captchaEnable = res.enable;\n\n if (_this.captchaEnable) {\n _this.codeUrl = \"data:image/gif;base64,\" + res.img;\n _this.loginForm.uuid = res.uuid;\n }\n });\n },\n getCookie: function getCookie() {\n var username = _jsCookie.default.get(\"username\");\n\n var password = _jsCookie.default.get(\"password\");\n\n var rememberMe = _jsCookie.default.get('rememberMe');\n\n var tenantName = _jsCookie.default.get('tenantName');\n\n this.loginForm = {\n username: username === undefined ? this.loginForm.username : username,\n password: password === undefined ? this.loginForm.password : (0, _jsencrypt.decrypt)(password),\n rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),\n tenantName: tenantName === undefined ? this.loginForm.tenantName : tenantName\n };\n },\n handleLogin: function handleLogin() {\n var _this2 = this;\n\n this.$refs.loginForm.validate(function (valid) {\n if (valid) {\n _this2.loading = true; // 设置 Cookie\n\n if (_this2.loginForm.rememberMe) {\n _jsCookie.default.set(\"username\", _this2.loginForm.username, {\n expires: 30\n });\n\n _jsCookie.default.set(\"password\", (0, _jsencrypt.encrypt)(_this2.loginForm.password), {\n expires: 30\n });\n\n _jsCookie.default.set('rememberMe', _this2.loginForm.rememberMe, {\n expires: 30\n });\n\n _jsCookie.default.set('tenantName', _this2.loginForm.tenantName, {\n expires: 30\n });\n } else {\n _jsCookie.default.remove(\"username\");\n\n _jsCookie.default.remove(\"password\");\n\n _jsCookie.default.remove('rememberMe');\n\n _jsCookie.default.remove('tenantName');\n } // 发起登陆\n\n\n _this2.$store.dispatch(\"Login\", _this2.loginForm).then(function () {\n _this2.$router.push({\n path: _this2.redirect || \"/\"\n }).catch(function () {});\n }).catch(function () {\n _this2.loading = false;\n\n _this2.getCode();\n });\n }\n });\n },\n doSocialLogin: function doSocialLogin(socialTypeEnum) {\n // console.log(\"开始Oauth登录...%o\", socialTypeEnum.code);\n // 设置登录中\n this.loading = true; // 计算 redirectUri\n\n var redirectUri = location.origin + '/social-login?type=' + socialTypeEnum.type + '&redirect=' + (this.redirect || \"/\"); // 重定向不能丢\n // const redirectUri = 'http://127.0.0.1:48080/api/gitee/callback';\n // const redirectUri = 'http://127.0.0.1:48080/api/dingtalk/callback';\n // 进行跳转\n\n (0, _login.socialAuthRedirect)(socialTypeEnum.type, encodeURIComponent(redirectUri)).then(function (res) {\n // console.log(res.url);\n window.location.href = res.data;\n });\n }\n }\n};\nexports.default = _default;\n\n//# sourceURL=webpack:///./src/views/login.vue?./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); /***/ }), diff --git a/yudao-server/src/main/resources/admin-ui/static/js/12.js.gz b/yudao-server/src/main/resources/admin-ui/static/js/12.js.gz index 78f2812b8..51c4f9b78 100644 Binary files a/yudao-server/src/main/resources/admin-ui/static/js/12.js.gz and b/yudao-server/src/main/resources/admin-ui/static/js/12.js.gz differ diff --git a/yudao-server/src/main/resources/admin-ui/static/js/14.js b/yudao-server/src/main/resources/admin-ui/static/js/14.js index 6d5d563ee..8c3038d51 100644 --- a/yudao-server/src/main/resources/admin-ui/static/js/14.js +++ b/yudao-server/src/main/resources/admin-ui/static/js/14.js @@ -4,11 +4,11 @@ /*!***************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/socialLogin.vue?vue&type=script&lang=js& ***! \***************************************************************************************************************************************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/interopRequireDefault.js */ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\").default;\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _login = __webpack_require__(/*! @/api/login */ \"./src/api/login.js\");\n\nvar _jsCookie = _interopRequireDefault(__webpack_require__(/*! js-cookie */ \"./node_modules/js-cookie/dist/js.cookie.js\"));\n\nvar _jsencrypt = __webpack_require__(/*! @/utils/jsencrypt */ \"./src/utils/jsencrypt.js\");\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar _default = {\n name: \"ThirdLogin\",\n data: function data() {\n return {\n loginForm: {\n username: \"admin\",\n password: \"admin123\",\n rememberMe: false // TODO 芋艿:后面看情况,去掉这块\n\n },\n loginRules: {\n username: [{\n required: true,\n trigger: \"blur\",\n message: \"用户名不能为空\"\n }],\n password: [{\n required: true,\n trigger: \"blur\",\n message: \"密码不能为空\"\n }]\n },\n loading: false,\n redirect: undefined,\n // 社交登录相关\n type: undefined,\n code: undefined,\n state: undefined\n };\n },\n // watch: {\n // $route: {\n // handler: function(route) {\n // this.redirect = route.query && route.query.redirect;\n // },\n // immediate: true\n // }\n // },\n created: function created() {\n var _this = this;\n\n this.getCookie(); // 重定向地址\n\n this.redirect = this.$route.query.redirect; // 社交登录相关\n\n this.type = this.$route.query.type;\n this.code = this.$route.query.code;\n this.state = this.$route.query.state;\n this.$store.dispatch(\"SocialLogin\", {\n code: this.code,\n state: this.state,\n type: this.type\n }).then(function () {\n _this.$router.push({\n path: _this.redirect || \"/\"\n }).catch(function () {});\n }).catch(function () {\n _this.loading = false;\n });\n },\n methods: {\n getCookie: function getCookie() {\n var username = _jsCookie.default.get(\"username\");\n\n var password = _jsCookie.default.get(\"password\");\n\n var rememberMe = _jsCookie.default.get('rememberMe');\n\n this.loginForm = {\n username: username === undefined ? this.loginForm.username : username,\n password: password === undefined ? this.loginForm.password : (0, _jsencrypt.decrypt)(password),\n rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)\n };\n },\n handleLogin: function handleLogin() {\n var _this2 = this;\n\n this.$refs.loginForm.validate(function (valid) {\n if (valid) {\n _this2.loading = true;\n\n if (_this2.loginForm.rememberMe) {\n _jsCookie.default.set(\"username\", _this2.loginForm.username, {\n expires: 30\n });\n\n _jsCookie.default.set(\"password\", (0, _jsencrypt.encrypt)(_this2.loginForm.password), {\n expires: 30\n });\n } else {\n _jsCookie.default.remove(\"username\");\n\n _jsCookie.default.remove(\"password\");\n }\n\n _this2.$store.dispatch(\"SocialLogin2\", {\n code: _this2.code,\n state: _this2.state,\n type: _this2.type,\n username: _this2.loginForm.username,\n password: _this2.loginForm.password\n }).then(function () {\n _this2.$router.push({\n path: _this2.redirect || \"/\"\n }).catch(function () {});\n }).catch(function () {\n _this2.loading = false;\n });\n }\n });\n }\n }\n};\nexports.default = _default;\n\n//# sourceURL=webpack:///./src/views/socialLogin.vue?./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! js-cookie */ \"./node_modules/js-cookie/dist/js.cookie.js\");\n/* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(js_cookie__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_jsencrypt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/utils/jsencrypt */ \"./src/utils/jsencrypt.js\");\n/* harmony import */ var _utils_jsencrypt__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_utils_jsencrypt__WEBPACK_IMPORTED_MODULE_1__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"ThirdLogin\",\n data: function data() {\n return {\n loginForm: {\n username: \"admin\",\n password: \"admin123\",\n rememberMe: false // TODO 芋艿:后面看情况,去掉这块\n\n },\n loginRules: {\n username: [{\n required: true,\n trigger: \"blur\",\n message: \"用户名不能为空\"\n }],\n password: [{\n required: true,\n trigger: \"blur\",\n message: \"密码不能为空\"\n }]\n },\n loading: false,\n redirect: undefined,\n // 社交登录相关\n type: undefined,\n code: undefined,\n state: undefined\n };\n },\n // watch: {\n // $route: {\n // handler: function(route) {\n // this.redirect = route.query && route.query.redirect;\n // },\n // immediate: true\n // }\n // },\n created: function created() {\n var _this = this;\n\n this.getCookie(); // 重定向地址\n\n this.redirect = this.$route.query.redirect; // 社交登录相关\n\n this.type = this.$route.query.type;\n this.code = this.$route.query.code;\n this.state = this.$route.query.state;\n this.$store.dispatch(\"SocialLogin\", {\n code: this.code,\n state: this.state,\n type: this.type\n }).then(function () {\n _this.$router.push({\n path: _this.redirect || \"/\"\n }).catch(function () {});\n }).catch(function () {\n _this.loading = false;\n });\n },\n methods: {\n getCookie: function getCookie() {\n var username = js_cookie__WEBPACK_IMPORTED_MODULE_0___default.a.get(\"username\");\n var password = js_cookie__WEBPACK_IMPORTED_MODULE_0___default.a.get(\"password\");\n var rememberMe = js_cookie__WEBPACK_IMPORTED_MODULE_0___default.a.get('rememberMe');\n this.loginForm = {\n username: username === undefined ? this.loginForm.username : username,\n password: password === undefined ? this.loginForm.password : Object(_utils_jsencrypt__WEBPACK_IMPORTED_MODULE_1__[\"decrypt\"])(password),\n rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)\n };\n },\n handleLogin: function handleLogin() {\n var _this2 = this;\n\n this.$refs.loginForm.validate(function (valid) {\n if (valid) {\n _this2.loading = true;\n\n if (_this2.loginForm.rememberMe) {\n js_cookie__WEBPACK_IMPORTED_MODULE_0___default.a.set(\"username\", _this2.loginForm.username, {\n expires: 30\n });\n js_cookie__WEBPACK_IMPORTED_MODULE_0___default.a.set(\"password\", Object(_utils_jsencrypt__WEBPACK_IMPORTED_MODULE_1__[\"encrypt\"])(_this2.loginForm.password), {\n expires: 30\n });\n } else {\n js_cookie__WEBPACK_IMPORTED_MODULE_0___default.a.remove(\"username\");\n js_cookie__WEBPACK_IMPORTED_MODULE_0___default.a.remove(\"password\");\n }\n\n _this2.$store.dispatch(\"SocialLogin2\", {\n code: _this2.code,\n state: _this2.state,\n type: _this2.type,\n username: _this2.loginForm.username,\n password: _this2.loginForm.password\n }).then(function () {\n _this2.$router.push({\n path: _this2.redirect || \"/\"\n }).catch(function () {});\n }).catch(function () {\n _this2.loading = false;\n });\n }\n });\n }\n }\n});\n\n//# sourceURL=webpack:///./src/views/socialLogin.vue?./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); /***/ }), @@ -50,11 +50,11 @@ eval("// style-loader: Adds some css to the DOM by adding a diff --git a/yudao-ui-admin/src/components/FileUpload/index.vue b/yudao-ui-admin/src/components/FileUpload/index.vue index ea15a5730..aa2296b93 100644 --- a/yudao-ui-admin/src/components/FileUpload/index.vue +++ b/yudao-ui-admin/src/components/FileUpload/index.vue @@ -1,6 +1,7 @@