From c263fa6524e9a629fc11b7f2ce69fae3a337ff66 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Tue, 19 Dec 2023 10:46:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20acs=E5=AF=B9=E6=8E=A5=E3=80=81=E6=89=8B?= =?UTF-8?q?=E6=8C=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lms/nladmin-system/doc/wms.xls | Bin 307712 -> 308736 bytes .../DEVICECODE_IS_UNDEFINED/2023-11-14.0.log | 0 .../service/dao/mapper/CockpitMapper.java | 4 + .../service/dao/mapper/CockpitMapper.xml | 2 +- .../service/impl/CockpitServiceImpl.java | 5 +- .../material/service/dao/MdBaseMaterial.java | 2 + .../controller/AcsToWmsController.java | 26 +- .../{ => acs}/service/AcsToWmsService.java | 7 +- .../{ => acs}/service/WmsToAcsService.java | 9 +- .../{ => acs}/service/dto/PalletizeDto.java | 2 +- .../wms/ext/{ => acs}/service/dto/Resp.java | 2 +- .../{ => acs}/service/dto/ResultForAcs.java | 2 +- .../ext/{ => acs}/service/dto/SignalData.java | 2 +- .../{ => acs}/service/dto/to/BaseRequest.java | 2 +- .../service/dto/to/BaseResponse.java | 2 +- .../dto/to/acs/AgainApplyResponse.java | 45 ++ .../service/dto/to/acs/ApplyTaskResponse.java | 4 +- .../service/dto/to/acs/CancelTaskRequest.java | 4 +- .../service/dto/to/acs/DeviceInfoDto.java | 2 +- .../service/dto/to/wms/AcsResponse.java | 4 +- .../service/dto/to/wms/ApplyDeviceDto.java | 2 +- .../dto/to/wms/ApplySignalStatusRequest.java | 4 +- .../service/dto/to/wms/ApplyTaskRequest.java | 4 +- .../dto/to/wms/CancelTaskResponse.java | 4 +- .../dto/to/wms/FeedBackTaskStatusRequest.java | 4 +- .../service/impl/AcsToWmsServiceImpl.java | 56 ++- .../service/impl/WmsToAcsServiceImpl.java | 12 +- .../SysInteractRecordController.java | 72 +++ .../service/ISysInteractRecordService.java | 88 ++++ .../record/service/dao/SysInteractRecord.java | 52 ++ .../dao/mapper/SysInteractRecordMapper.java | 19 + .../dao/mapper/SysInteractRecordMapper.xml | 19 + .../service/dto/SysInteractRecordDto.java | 41 ++ .../service/dto/SysInteractRecordQuery.java | 12 + .../impl/SysInteractRecordServiceImpl.java | 170 +++++++ .../nl/wms/pda/controller/PdaController.java | 83 +++ .../org/nl/wms/pda/service/PdaService.java | 59 +++ .../pda/service/dao/dto/ManualSortingDto.java | 20 + .../pda/service/dao/dto/SendMaterialDto.java | 20 + .../wms/pda/service/dao/mapper/PdaMapper.java | 43 ++ .../wms/pda/service/dao/mapper/PdaMapper.xml | 80 +++ .../pda/service/dao/vo/DropdownListVo.java | 22 + .../pda/service/dao/vo/ManualWorkOrderVo.java | 20 + .../service/dao/vo/MaterialInventoryVo.java | 36 ++ .../wms/pda/service/dao/vo/PdaResponseVo.java | 22 + .../nl/wms/pda/service/dao/vo/TaskShowVo.java | 19 + .../wms/pda/service/impl/PdaServiceImpl.java | 130 +++++ .../PdmBdSolidifyPlanController.java | 91 ++++ .../service/IPdmBdSolidifyPlanService.java | 62 +++ .../solidifyplan/service/dao/ChangePlan.java | 14 + .../service/dao/PdmBdSolidifyPlan.java | 54 ++ .../service/dao/SolidifyPlanDetail.java | 15 + .../dao/mapper/PdmBdSolidifyPlanMapper.java | 27 + .../dao/mapper/PdmBdSolidifyPlanMapper.xml | 30 ++ .../service/dto/PdmBdSolidifyPlanDto.java | 37 ++ .../service/dto/PdmBdSolidifyPlanQuery.java | 12 + .../impl/PdmBdSolidifyPlanServiceImpl.java | 155 ++++++ ...BdProductionProcessTrackingController.java | 67 +++ ...PdmBdProductionProcessTrackingService.java | 43 ++ .../dao/PdmBdProductionProcessTracking.java | 56 +++ .../PdmBdProductionProcessTrackingMapper.java | 16 + .../PdmBdProductionProcessTrackingMapper.xml | 35 ++ .../PdmBdProductionProcessTrackingDto.java | 29 ++ .../PdmBdProductionProcessTrackingQuery.java | 16 + ...dProductionProcessTrackingServiceImpl.java | 66 +++ .../controller/PdmBdWorkorderController.java | 24 +- .../service/IPdmBdWorkorderService.java | 34 +- .../service/dao/PdmBdWorkorder.java | 6 +- .../dao/mapper/PdmBdWorkorderMapper.java | 6 +- .../dao/mapper/PdmBdWorkorderMapper.xml | 6 +- .../service/dto/PdmBdWorkorderDto.java | 2 +- .../service/dto/PdmBdWorkorderQuery.java | 2 +- .../impl/PdmBdWorkorderServiceImpl.java | 79 ++- .../service/impl/SchBasePointServiceImpl.java | 14 +- .../service/impl/SchBaseTaskServiceImpl.java | 7 +- .../nl/wms/sch/task_manage/AbstractTask.java | 24 +- .../nl/wms/sch/task_manage/AcsTaskDto.java | 4 + .../sch/task_manage/GeneralDefinition.java | 3 + .../task_manage/enums/PointStatusEnum.java | 11 +- .../nl/wms/sch/task_manage/task/AcsUtil.java | 3 +- .../task/tasks/auto/GHCMLTask.java | 69 +-- .../task/tasks/auto/GHCQLTask.java | 38 +- .../task/tasks/auto/mapper/AutoMapper.java | 2 +- .../task/tasks/auto/mapper/AutoMapper.xml | 12 + .../task_manage/task/tasks/kj/KJQKTask.java | 15 +- .../task_manage/task/tasks/kj/KJSKTask.java | 14 +- .../task_manage/task/tasks/tbx/TBXMLTask.java | 161 +++--- .../task_manage/task/tasks/tbx/TBXQKTask.java | 33 +- .../task/tasks/tbx/mapper/TBXMapper.java | 32 +- .../task/tasks/tbx/mapper/TBXMapper.xml | 90 +++- .../main/java/org/nl/wms/util/TaskUtils.java | 11 +- .../src/test/java/org/nl/ApplicationTest.java | 7 +- .../test/java/org/nl/point/PointCreate.java | 41 +- .../src/assets/images/LOGO_副本.png | Bin 0 -> 29020 bytes lms/nladmin-ui/src/assets/images/open.png | Bin 0 -> 8232 bytes lms/nladmin-ui/src/assets/images/open1.png | Bin 0 -> 9046 bytes lms/nladmin-ui/src/assets/images/open2.png | Bin 0 -> 35535 bytes lms/nladmin-ui/src/assets/images/open3.png | Bin 0 -> 89348 bytes lms/nladmin-ui/src/assets/images/open4.jpg | Bin 0 -> 26032 bytes lms/nladmin-ui/src/assets/images/open5.png | Bin 0 -> 122451 bytes .../src/layout/components/Sidebar/Logo.vue | 2 +- .../src/views/tools/codeGen/codeDetail.vue | 2 +- .../src/views/wms/basedata/material/index.vue | 6 +- .../src/views/wms/ext/record/index.vue | 41 +- .../views/wms/ext/record/sysInteractRecord.js | 9 +- .../src/views/wms/pdm/solidifyplan/index.vue | 199 ++++++++ .../wms/pdm/solidifyplan/pdmBdSolidifyPlan.js | 50 ++ .../solidifyplan/solidifyplan-transfer.vue | 472 ++++++++++++++++++ .../src/views/wms/pdm/track/index.vue | 119 +++++ .../track/pdmBdProductionProcessTracking.js | 27 + .../src/views/wms/pdm/workerorder/index.vue | 93 +++- .../wms/pdm/workerorder/pdmBdWorkorder.js | 18 +- .../src/views/wms/sch/group/index.vue | 2 - .../src/views/wms/sch/task/index.vue | 10 +- 114 files changed, 3538 insertions(+), 326 deletions(-) create mode 100644 lms/nladmin-system/logPath_IS_UNDEFINED/XgAgvDeviceDriver/DEVICECODE_IS_UNDEFINED/2023-11-14.0.log rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/controller/AcsToWmsController.java (92%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/AcsToWmsService.java (71%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/WmsToAcsService.java (58%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/PalletizeDto.java (98%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/Resp.java (92%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/ResultForAcs.java (97%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/SignalData.java (91%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/to/BaseRequest.java (96%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/to/BaseResponse.java (98%) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/AgainApplyResponse.java rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/to/acs/ApplyTaskResponse.java (93%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/to/acs/CancelTaskRequest.java (81%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/to/acs/DeviceInfoDto.java (76%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/to/wms/AcsResponse.java (89%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/to/wms/ApplyDeviceDto.java (89%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/to/wms/ApplySignalStatusRequest.java (80%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/to/wms/ApplyTaskRequest.java (85%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/to/wms/CancelTaskResponse.java (61%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/dto/to/wms/FeedBackTaskStatusRequest.java (86%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/impl/AcsToWmsServiceImpl.java (76%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/{ => acs}/service/impl/WmsToAcsServiceImpl.java (65%) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/controller/SysInteractRecordController.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/ISysInteractRecordService.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/SysInteractRecord.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/mapper/SysInteractRecordMapper.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/mapper/SysInteractRecordMapper.xml create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dto/SysInteractRecordDto.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dto/SysInteractRecordQuery.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/impl/SysInteractRecordServiceImpl.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/controller/PdaController.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/PdaService.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/ManualSortingDto.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/SendMaterialDto.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.xml create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/DropdownListVo.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/ManualWorkOrderVo.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/MaterialInventoryVo.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/PdaResponseVo.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/TaskShowVo.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/controller/PdmBdSolidifyPlanController.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/IPdmBdSolidifyPlanService.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/ChangePlan.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/PdmBdSolidifyPlan.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/SolidifyPlanDetail.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/mapper/PdmBdSolidifyPlanMapper.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/mapper/PdmBdSolidifyPlanMapper.xml create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dto/PdmBdSolidifyPlanDto.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dto/PdmBdSolidifyPlanQuery.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/impl/PdmBdSolidifyPlanServiceImpl.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/controller/PdmBdProductionProcessTrackingController.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/IPdmBdProductionProcessTrackingService.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/PdmBdProductionProcessTracking.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.xml create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingDto.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingQuery.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/impl/PdmBdProductionProcessTrackingServiceImpl.java rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/controller/PdmBdWorkorderController.java (72%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/IPdmBdWorkorderService.java (66%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/dao/PdmBdWorkorder.java (94%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/dao/mapper/PdmBdWorkorderMapper.java (68%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/dao/mapper/PdmBdWorkorderMapper.xml (84%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/dto/PdmBdWorkorderDto.java (97%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/dto/PdmBdWorkorderQuery.java (88%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/impl/PdmBdWorkorderServiceImpl.java (55%) create mode 100644 lms/nladmin-ui/src/assets/images/LOGO_副本.png create mode 100644 lms/nladmin-ui/src/assets/images/open.png create mode 100644 lms/nladmin-ui/src/assets/images/open1.png create mode 100644 lms/nladmin-ui/src/assets/images/open2.png create mode 100644 lms/nladmin-ui/src/assets/images/open3.png create mode 100644 lms/nladmin-ui/src/assets/images/open4.jpg create mode 100644 lms/nladmin-ui/src/assets/images/open5.png create mode 100644 lms/nladmin-ui/src/views/wms/pdm/solidifyplan/index.vue create mode 100644 lms/nladmin-ui/src/views/wms/pdm/solidifyplan/pdmBdSolidifyPlan.js create mode 100644 lms/nladmin-ui/src/views/wms/pdm/solidifyplan/solidifyplan-transfer.vue create mode 100644 lms/nladmin-ui/src/views/wms/pdm/track/index.vue create mode 100644 lms/nladmin-ui/src/views/wms/pdm/track/pdmBdProductionProcessTracking.js diff --git a/lms/nladmin-system/doc/wms.xls b/lms/nladmin-system/doc/wms.xls index ca4e76499055ee50b88f14bb86a1792ad4963a30..1f02958505f7bcd53b59bc2ce88180472530e50f 100644 GIT binary patch delta 7435 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 a*uY$%1krWZxI#!9&YATv=4@hec>f1FQS-e3 delta 6909 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 Q>4LLn9Ss@Vm<;p(17%#1NB{r; diff --git a/lms/nladmin-system/logPath_IS_UNDEFINED/XgAgvDeviceDriver/DEVICECODE_IS_UNDEFINED/2023-11-14.0.log b/lms/nladmin-system/logPath_IS_UNDEFINED/XgAgvDeviceDriver/DEVICECODE_IS_UNDEFINED/2023-11-14.0.log new file mode 100644 index 0000000..e69de29 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.java index 7cf01fd..33c502d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.java @@ -20,6 +20,10 @@ public interface CockpitMapper { JSONObject getVehicleGroupInfo(String vehicleCode, String vehicleType); + /** + * 固化室详情 + * @return + */ JSONArray getGHSInteriorList(); JSONArray getSSXInteriorList(); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.xml index b8550a6..786596b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.xml @@ -33,7 +33,7 @@ CAST(point_status - 1 AS SIGNED) AS move, point_code AS device_code, point_name AS device_name, - vehicle_type, + IF(LENGTH(vehicle_type)>0, vehicle_type, '-') AS vehicle_type, parent_point_code AS device FROM `sch_base_point` diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java index 678b686..0fc91ff 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java @@ -7,8 +7,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.nl.wms.cockpit.service.CockpitService; import org.nl.wms.cockpit.service.dao.mapper.CockpitMapper; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; @@ -16,10 +15,8 @@ import org.nl.wms.sch.task_manage.enums.RegionCodeConstant; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; import java.util.Random; -import java.util.function.Consumer; import java.util.stream.Collectors; /** diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java index ad5c250..456eb3e 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java @@ -75,6 +75,8 @@ public class MdBaseMaterial implements Serializable { private String ext_id; @ApiModelProperty(value = "标准数量") private String standard_qty; + @ApiModelProperty(value = "标准重量") + private String standard_weight; @ApiModelProperty(value = "工艺号") private String technique_num; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java similarity index 92% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java index accd3c2..103312f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/controller/AcsToWmsController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java @@ -1,15 +1,13 @@ -package org.nl.wms.ext.controller; +package org.nl.wms.ext.acs.controller; import cn.dev33.satoken.annotation.SaIgnore; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.nl.common.logging.annotation.Log; -import org.nl.wms.ext.service.AcsToWmsService; +import org.nl.wms.ext.acs.service.AcsToWmsService; import org.nl.wms.sch.point.service.ISchBasePointService; -import org.nl.wms.sch.task.service.ISchBaseTaskService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -18,8 +16,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.Map; - /** * @Author: lyd * @Description: acs请求lms接口 @@ -56,28 +52,30 @@ public class AcsToWmsController { return new ResponseEntity<>(acsToWmsService.status(param), HttpStatus.OK); } + @PostMapping("/againApply") + @Log("二次申请任务") + @ApiOperation("二次申请任务") + @SaIgnore + public ResponseEntity againApply(@RequestBody JSONObject task) { + return new ResponseEntity<>(acsToWmsService.againApply(task), HttpStatus.OK); + } + @PostMapping("/feedbackState") @Log("ACS系统反馈AGV取放货状态") @ApiOperation("ACS系统反馈AGV取放货状态") //@SaCheckPermission("@el.check('schBaseTask:add')") @SaIgnore + @Deprecated public ResponseEntity feedbackState(@RequestBody JSONObject param) { return new ResponseEntity<>(acsToWmsService.feedbackState(param), HttpStatus.OK); } - @PostMapping("/againApply") - @Log("二次申请任务") - @ApiOperation("二次申请任务") - @SaIgnore - public ResponseEntity againApply(@RequestBody JSONObject task) { - return new ResponseEntity<>(acsToWmsService.againApply(task), HttpStatus.OK); - } - @PostMapping("/notify") @Log("acs通知wms") @ApiOperation("acs通知wms") //@SaCheckPermission("@el.check('schBaseTask:add')") @SaIgnore + @Deprecated public ResponseEntity notify(@RequestBody JSONObject param) { return new ResponseEntity<>(acsToWmsService.notify(param), HttpStatus.OK); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java similarity index 71% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index 3764ea1..720cb38 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/AcsToWmsService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -1,7 +1,8 @@ -package org.nl.wms.ext.service; +package org.nl.wms.ext.acs.service; import com.alibaba.fastjson.JSONObject; -import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; +import org.nl.wms.ext.acs.service.dto.to.acs.AgainApplyResponse; /** * @Author: lyd @@ -26,5 +27,5 @@ public interface AcsToWmsService { * @param task * @return */ - String againApply(JSONObject task); + AgainApplyResponse againApply(JSONObject task); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java similarity index 58% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java index 73d3c8d..d8e4a5a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToAcsService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java @@ -1,12 +1,7 @@ -package org.nl.wms.ext.service; +package org.nl.wms.ext.acs.service; import com.alibaba.fastjson.JSONObject; -import org.apache.poi.ss.formula.functions.T; -import org.nl.wms.ext.service.dto.ResultForAcs; -import org.nl.wms.ext.service.dto.to.wms.AcsResponse; -import org.nl.wms.sch.task_manage.AcsTaskDto; - -import java.util.List; +import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse; /** * @Author: lyd diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/PalletizeDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/PalletizeDto.java similarity index 98% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/PalletizeDto.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/PalletizeDto.java index 6600787..8d59416 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/PalletizeDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/PalletizeDto.java @@ -1,4 +1,4 @@ -package org.nl.wms.ext.service.dto; +package org.nl.wms.ext.acs.service.dto; import lombok.Data; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/Resp.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/Resp.java similarity index 92% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/Resp.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/Resp.java index 03e3deb..647cd6d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/Resp.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/Resp.java @@ -1,4 +1,4 @@ -package org.nl.wms.ext.service.dto; +package org.nl.wms.ext.acs.service.dto; import lombok.Data; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/ResultForAcs.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/ResultForAcs.java similarity index 97% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/ResultForAcs.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/ResultForAcs.java index ad0a925..424377c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/ResultForAcs.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/ResultForAcs.java @@ -1,4 +1,4 @@ -package org.nl.wms.ext.service.dto; +package org.nl.wms.ext.acs.service.dto; import cn.hutool.core.date.DateUtil; import cn.hutool.http.HttpStatus; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/SignalData.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/SignalData.java similarity index 91% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/SignalData.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/SignalData.java index 2e5f72a..86c0776 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/SignalData.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/SignalData.java @@ -1,4 +1,4 @@ -package org.nl.wms.ext.service.dto; +package org.nl.wms.ext.acs.service.dto; import lombok.Data; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/BaseRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/BaseRequest.java similarity index 96% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/BaseRequest.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/BaseRequest.java index 9a2e3fe..ee50697 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/BaseRequest.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/BaseRequest.java @@ -1,4 +1,4 @@ -package org.nl.wms.ext.service.dto.to; +package org.nl.wms.ext.acs.service.dto.to; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/BaseResponse.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/BaseResponse.java similarity index 98% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/BaseResponse.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/BaseResponse.java index b39b2e1..ff85990 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/BaseResponse.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/BaseResponse.java @@ -1,4 +1,4 @@ -package org.nl.wms.ext.service.dto.to; +package org.nl.wms.ext.acs.service.dto.to; import cn.hutool.core.date.DateUtil; import cn.hutool.http.HttpStatus; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/AgainApplyResponse.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/AgainApplyResponse.java new file mode 100644 index 0000000..f255c82 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/AgainApplyResponse.java @@ -0,0 +1,45 @@ +package org.nl.wms.ext.acs.service.dto.to.acs; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.http.HttpStatus; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/12/11 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class AgainApplyResponse extends BaseResponse { + private String next_point_code; + + public static AgainApplyResponse responseOk(String requestNo) { + AgainApplyResponse response = new AgainApplyResponse(); + response.setRequestNo(requestNo); + response.setMessage("任务二次申请成功"); + response.setResponseDate(DateUtil.now()); + response.setCode(HttpStatus.HTTP_OK); + return response; + } + + public static AgainApplyResponse responseOk(String requestNo, String next_point_code) { + AgainApplyResponse response = new AgainApplyResponse(); + response.setRequestNo(requestNo); + response.setMessage("任务二次申请成功"); + response.setResponseDate(DateUtil.now()); + response.setCode(HttpStatus.HTTP_OK); + response.setNext_point_code(next_point_code); + return response; + } + public static AgainApplyResponse responseError(String requestNo, String message) { + AgainApplyResponse response = new AgainApplyResponse(); + response.setRequestNo(requestNo); + response.setCode(HttpStatus.HTTP_BAD_REQUEST); + response.setMessage(message); + response.setResponseDate(DateUtil.now()); + return response; + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/acs/ApplyTaskResponse.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/ApplyTaskResponse.java similarity index 93% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/acs/ApplyTaskResponse.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/ApplyTaskResponse.java index 12d7790..2cf5063 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/acs/ApplyTaskResponse.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/ApplyTaskResponse.java @@ -1,9 +1,9 @@ -package org.nl.wms.ext.service.dto.to.acs; +package org.nl.wms.ext.acs.service.dto.to.acs; import cn.hutool.core.date.DateUtil; import cn.hutool.http.HttpStatus; import lombok.Data; -import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; @Data public class ApplyTaskResponse extends BaseResponse { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/acs/CancelTaskRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/CancelTaskRequest.java similarity index 81% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/acs/CancelTaskRequest.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/CancelTaskRequest.java index fc00964..749bef8 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/acs/CancelTaskRequest.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/CancelTaskRequest.java @@ -1,7 +1,7 @@ -package org.nl.wms.ext.service.dto.to.acs; +package org.nl.wms.ext.acs.service.dto.to.acs; import lombok.Data; -import org.nl.wms.ext.service.dto.to.BaseRequest; +import org.nl.wms.ext.acs.service.dto.to.BaseRequest; import java.util.Map; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/acs/DeviceInfoDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/DeviceInfoDto.java similarity index 76% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/acs/DeviceInfoDto.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/DeviceInfoDto.java index bd7c7bc..02af60d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/acs/DeviceInfoDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/acs/DeviceInfoDto.java @@ -1,4 +1,4 @@ -package org.nl.wms.ext.service.dto.to.acs; +package org.nl.wms.ext.acs.service.dto.to.acs; import lombok.Data; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/AcsResponse.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/AcsResponse.java similarity index 89% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/AcsResponse.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/AcsResponse.java index fc2df3c..25fa3c0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/AcsResponse.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/AcsResponse.java @@ -1,10 +1,10 @@ -package org.nl.wms.ext.service.dto.to.wms; +package org.nl.wms.ext.acs.service.dto.to.wms; import cn.hutool.core.date.DateUtil; import cn.hutool.http.HttpStatus; import com.alibaba.fastjson.JSONArray; import lombok.Data; -import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; /** * @Author: lyd diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/ApplyDeviceDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/ApplyDeviceDto.java similarity index 89% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/ApplyDeviceDto.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/ApplyDeviceDto.java index 4d2bf42..68a7c18 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/ApplyDeviceDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/ApplyDeviceDto.java @@ -1,4 +1,4 @@ -package org.nl.wms.ext.service.dto.to.wms; +package org.nl.wms.ext.acs.service.dto.to.wms; import lombok.Data; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/ApplySignalStatusRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/ApplySignalStatusRequest.java similarity index 80% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/ApplySignalStatusRequest.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/ApplySignalStatusRequest.java index 60598cd..efb8852 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/ApplySignalStatusRequest.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/ApplySignalStatusRequest.java @@ -1,7 +1,7 @@ -package org.nl.wms.ext.service.dto.to.wms; +package org.nl.wms.ext.acs.service.dto.to.wms; import lombok.Data; -import org.nl.wms.ext.service.dto.to.BaseRequest; +import org.nl.wms.ext.acs.service.dto.to.BaseRequest; /** * @Author: lyd diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/ApplyTaskRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/ApplyTaskRequest.java similarity index 85% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/ApplyTaskRequest.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/ApplyTaskRequest.java index 22fda56..a7ea334 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/ApplyTaskRequest.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/ApplyTaskRequest.java @@ -1,7 +1,7 @@ -package org.nl.wms.ext.service.dto.to.wms; +package org.nl.wms.ext.acs.service.dto.to.wms; import lombok.Data; -import org.nl.wms.ext.service.dto.to.BaseRequest; +import org.nl.wms.ext.acs.service.dto.to.BaseRequest; import java.util.List; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/CancelTaskResponse.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/CancelTaskResponse.java similarity index 61% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/CancelTaskResponse.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/CancelTaskResponse.java index d424a98..e4f94e0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/CancelTaskResponse.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/CancelTaskResponse.java @@ -1,7 +1,7 @@ -package org.nl.wms.ext.service.dto.to.wms; +package org.nl.wms.ext.acs.service.dto.to.wms; import lombok.Data; -import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; /** * @Author: lyd diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/FeedBackTaskStatusRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/FeedBackTaskStatusRequest.java similarity index 86% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/FeedBackTaskStatusRequest.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/FeedBackTaskStatusRequest.java index c3b9015..bf737e5 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/dto/to/wms/FeedBackTaskStatusRequest.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/to/wms/FeedBackTaskStatusRequest.java @@ -1,7 +1,7 @@ -package org.nl.wms.ext.service.dto.to.wms; +package org.nl.wms.ext.acs.service.dto.to.wms; import lombok.Data; -import org.nl.wms.ext.service.dto.to.BaseRequest; +import org.nl.wms.ext.acs.service.dto.to.BaseRequest; /** * ACS任务反馈请求实体 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java similarity index 76% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index a7b6465..77961c9 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -1,4 +1,4 @@ -package org.nl.wms.ext.service.impl; +package org.nl.wms.ext.acs.service.impl; import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpStatus; @@ -6,14 +6,17 @@ import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; -import org.nl.wms.ext.service.AcsToWmsService; -import org.nl.wms.ext.service.dto.to.BaseResponse; -import org.nl.wms.ext.service.dto.to.wms.FeedBackTaskStatusRequest; +import org.nl.wms.ext.acs.service.AcsToWmsService; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; +import org.nl.wms.ext.acs.service.dto.to.acs.AgainApplyResponse; +import org.nl.wms.ext.acs.service.dto.to.wms.FeedBackTaskStatusRequest; +import org.nl.wms.ext.record.service.ISysInteractRecordService; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.task.service.ISchBaseTaskService; import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; import org.nl.wms.sch.task_manage.task.TaskFactory; import org.nl.wms.sch.task_manage.task.core.TaskStatus; @@ -52,6 +55,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { private ISysNoticeService noticeService; @Autowired private PointMapper pointMapper; + @Autowired + private ISysInteractRecordService interactRecordService; // 初始化反射方法 @PostConstruct @@ -66,14 +71,15 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Override public BaseResponse acsApply(JSONObject param) { String requestNo = param.getString("requestNo"); - String requestMethodCode = param.getString("request_medthod_code"); // 获取请求方法名 - String requestMethodName = param.getString("request_medthod_name"); + // 获取请求方法名 + String requestMethodCode = param.getString("request_method_code"); + String requestMethodName = param.getString("request_method_name"); BaseResponse result = BaseResponse.build(requestNo); String device_code = param.getString("device_code"); param.put("config_code",requestMethodCode); try { if(ObjectUtil.isEmpty(requestMethodCode)){ - throw new BadRequestException("任务类型不正确!requestMethodCode:"+requestMethodName+",device_code:"+device_code); + throw new BadRequestException("任务类型不正确!requestMethodCode:"+requestMethodCode+",device_code:"+device_code); } AbstractTask task = taskFactory.getTask(requestMethodCode); // 执行创建任务 @@ -90,6 +96,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { noticeService.createNotice("异常信息:" + message, "acsApply: " + param.getString("request_medthod_code"), NoticeTypeEnum.EXCEPTION.getCode()); } + // acs对接记录 + interactRecordService.saveRecord(requestMethodName, param, result, GeneralDefinition.ACS_LMS); return result; } @@ -99,6 +107,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Override public BaseResponse status(JSONObject param) { String requestNo = param.getString("requestNo"); + String requestMethodName = param.getString("request_method_name"); + BaseResponse result = BaseResponse.build(requestNo); FeedBackTaskStatusRequest taskStatusRequest = param.toJavaObject(FeedBackTaskStatusRequest.class); String taskId = taskStatusRequest.getTask_id(); if (ObjectUtil.isEmpty(taskId)) { @@ -132,11 +142,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { // 更新任务 try { abstractTask.updateTaskStatus(taskId, status); + result.setMessage("任务状态反馈成功!"); } catch (Exception e) { log.error("任务状态更新失败: {}", message); - return BaseResponse.responseError(requestNo, "任务:[" + taskId + "]状态更新失败," + message); + result.setCode(HttpStatus.HTTP_BAD_REQUEST); + result.setMessage("任务:[" + taskId + "]状态更新失败," + message); } - return BaseResponse.responseOk(requestNo, "任务状态反馈成功!"); + interactRecordService.saveRecord(requestMethodName, param, result, GeneralDefinition.ACS_LMS); + return result; } /** @@ -163,19 +176,32 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return BaseResponse.responseOk(requestNo, "反馈成功!"); } - // todo: ??? @Override - public String againApply(JSONObject task) { - String configCode = task.getString("config_code"); - AbstractTask task1 = taskFactory.getTask(configCode); - return task1.againApply(task.getString("task_id")); + public AgainApplyResponse againApply(JSONObject task) { + AgainApplyResponse result = AgainApplyResponse.responseOk(task.getString("request_no")); + try { + String configCode = task.getString("config_code"); + AbstractTask task1 = taskFactory.getTask(configCode); + String pointCode = task1.againApply(task.getString("task_id")); + result.setNext_point_code(pointCode); + } catch (Exception e) { + String message = ObjectUtil.isEmpty(e.getMessage()) + ? ((InvocationTargetException) e).getTargetException().getMessage() + : e.getMessage(); + log.error("ACS请求LMS出现错误: {}", message); + result.setCode(HttpStatus.HTTP_BAD_REQUEST); + result.setMessage(message); + result.setRequestNo(task.getString("requestNo")); + } + // acs对接记录 + interactRecordService.saveRecord(task.getString("request_method_name"), task, result, GeneralDefinition.ACS_LMS); + return result; } /** * 任务阶段反馈最新点位 * todo * */ - @Override public BaseResponse feedbackState(JSONObject param) { String requestNo = param.getString("requestNo"); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java similarity index 65% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java index 4eb2436..848f37b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java @@ -1,18 +1,12 @@ -package org.nl.wms.ext.service.impl; +package org.nl.wms.ext.acs.service.impl; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.ss.formula.functions.T; -import org.nl.wms.ext.service.WmsToAcsService; -import org.nl.wms.ext.service.dto.to.wms.AcsResponse; -import org.nl.wms.sch.task_manage.AcsTaskDto; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse; import org.nl.wms.sch.task_manage.task.AcsUtil; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; - /** * @Author: lyd * @Description: WMS请求ACS - 业务开发 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/controller/SysInteractRecordController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/controller/SysInteractRecordController.java new file mode 100644 index 0000000..39ebfb6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/controller/SysInteractRecordController.java @@ -0,0 +1,72 @@ +package org.nl.wms.ext.record.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.ext.record.service.ISysInteractRecordService; +import org.nl.wms.ext.record.service.dao.SysInteractRecord; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-07-19 +**/ +@Slf4j +@RestController +@Api(tags = "外部系统接口记录管理") +@RequestMapping("/api/sysInteractRecord") +public class SysInteractRecordController { + + @Autowired + private ISysInteractRecordService sysInteractRecordService; + + @GetMapping + @Log("查询外部系统接口记录") + @ApiOperation("查询外部系统接口记录") + //@SaCheckPermission("@el.check('sysInteractRecord:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(sysInteractRecordService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增外部系统接口记录") + @ApiOperation("新增外部系统接口记录") + //@SaCheckPermission("@el.check('sysInteractRecord:add')") + public ResponseEntity create(@Validated @RequestBody SysInteractRecord entity){ + sysInteractRecordService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改外部系统接口记录") + @ApiOperation("修改外部系统接口记录") + //@SaCheckPermission("@el.check('sysInteractRecord:edit')") + public ResponseEntity update(@Validated @RequestBody SysInteractRecord entity){ + sysInteractRecordService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除外部系统接口记录") + @ApiOperation("删除外部系统接口记录") + //@SaCheckPermission("@el.check('sysInteractRecord:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + sysInteractRecordService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + //@SaCheckPermission("@el.check('sysInteractRecord:del')") + @GetMapping("/getAllName") + public ResponseEntity getAllName() { + return new ResponseEntity<>(sysInteractRecordService.getAllInteractName(), HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/ISysInteractRecordService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/ISysInteractRecordService.java new file mode 100644 index 0000000..58b89a7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/ISysInteractRecordService.java @@ -0,0 +1,88 @@ +package org.nl.wms.ext.record.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.param.dao.Param; +import org.nl.wms.ext.acs.service.dto.ResultForAcs; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; +import org.nl.wms.ext.record.service.dao.SysInteractRecord; +//import org.nl.wms.pdm.workorder.service.dao.vo.AcsWorkOrderVo; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-07-19 +**/ +public interface ISysInteractRecordService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(SysInteractRecord entity); + + /** + * 编辑 + * @param entity / + */ + void update(SysInteractRecord entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); + + /** + * 创建记录 + * @param request + * @param response + * @param direction + */ + void saveRecord(Object request, BaseResponse response, String direction); + + /** + * 记录对接日志 + * @param workorder + * @param resultForAcs + * @param direction + */ +// void saveRecord(AcsWorkOrderVo workorder, ResultForAcs resultForAcs, String direction); + + /** + * 保存对接记录 + * @param name 保存对接记录 + * @param request 请求参数 + * @param response 响应参数,分类别 + * @param direction 请求方向 + */ + void saveRecord(String name, K request, V response, String direction); + + void deleteByDay(String day); + + /** + * 删除记录 + * @param maxRowsToKeep 最大保存容量 + * @param maxRowsToDelete 最大删除数 + */ + void deleteByRows(Param maxRowsToKeep, Param maxRowsToDelete); + + /** + * 获取所有标题 + * @return + */ + List getAllInteractName(); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/SysInteractRecord.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/SysInteractRecord.java new file mode 100644 index 0000000..f5ef9a9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/SysInteractRecord.java @@ -0,0 +1,52 @@ +package org.nl.wms.ext.record.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-07-19 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_interact_record") +public class SysInteractRecord implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "interact_id", type = IdType.NONE) + @ApiModelProperty(value = "对接标识") + private String interact_id; + + @ApiModelProperty(value = "对接名称") + private String interact_name; + + @ApiModelProperty(value = "响应编码") + private int code; + + @ApiModelProperty(value = "响应信息") + private String message; + + @ApiModelProperty(value = "请求报文") + private String request_param; + + @ApiModelProperty(value = "响应结果") + private String response_param; + + @ApiModelProperty(value = "记录时间") + private String record_time; + + @ApiModelProperty(value = "方向") + private String direction; + + @ApiModelProperty(value = "是否成功") + private Boolean is_success; + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/mapper/SysInteractRecordMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/mapper/SysInteractRecordMapper.java new file mode 100644 index 0000000..5d24081 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/mapper/SysInteractRecordMapper.java @@ -0,0 +1,19 @@ +package org.nl.wms.ext.record.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.ext.record.service.dao.SysInteractRecord; + +import java.util.List; + +/** +* @author lyd +* @date 2023-07-19 +**/ +public interface SysInteractRecordMapper extends BaseMapper { + + void deleteByDay(String day); + + void deleteByRows(String maxRowsToKeep, String maxRowsToDelete); + + List getAllInteractName(); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/mapper/SysInteractRecordMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/mapper/SysInteractRecordMapper.xml new file mode 100644 index 0000000..9a16974 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dao/mapper/SysInteractRecordMapper.xml @@ -0,0 +1,19 @@ + + + + + + DELETE FROM sys_interact_record + WHERE record_time DATE_SUB(NOW(), INTERVAL #{day} DAY); + + + CALL DeleteRowsIfNeeded(#{maxRowsToKeep}, #{maxRowsToDelete}) + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dto/SysInteractRecordDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dto/SysInteractRecordDto.java new file mode 100644 index 0000000..b6b44d1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dto/SysInteractRecordDto.java @@ -0,0 +1,41 @@ +package org.nl.wms.ext.record.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-07-19 +**/ +@Data +public class SysInteractRecordDto implements Serializable { + + /** 对接标识 */ + private String interact_id; + + /** 对接编码 */ + private String interact_code; + + /** 响应编码 */ + private String code; + + /** 响应信息 */ + private String message; + + /** 请求报文 */ + private String request_param; + + /** 响应结果 */ + private String response_param; + + /** 记录时间 */ + private String record_time; + + /** 方向 */ + private String direction; + + /** 是否成功 */ + private Boolean is_success; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dto/SysInteractRecordQuery.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dto/SysInteractRecordQuery.java new file mode 100644 index 0000000..3222808 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/dto/SysInteractRecordQuery.java @@ -0,0 +1,12 @@ +package org.nl.wms.ext.record.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.ext.record.service.dao.SysInteractRecord; + +/** +* @author lyd +* @date 2023-07-19 +**/ +public class SysInteractRecordQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/impl/SysInteractRecordServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/impl/SysInteractRecordServiceImpl.java new file mode 100644 index 0000000..136b267 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/impl/SysInteractRecordServiceImpl.java @@ -0,0 +1,170 @@ +package org.nl.wms.ext.record.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpStatus; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.param.dao.Param; +import org.nl.wms.ext.acs.service.dto.ResultForAcs; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; +import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse; +//import org.nl.wms.ext.mes.service.dto.ResultForMes; +import org.nl.wms.ext.record.service.ISysInteractRecordService; +import org.nl.wms.ext.record.service.dao.SysInteractRecord; +import org.nl.wms.ext.record.service.dao.mapper.SysInteractRecordMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** +* @description 服务实现 +* @author lyd +* @date 2023-07-19 +**/ +@Slf4j +@Service +public class SysInteractRecordServiceImpl extends ServiceImpl implements ISysInteractRecordService { + + @Autowired + private SysInteractRecordMapper sysInteractRecordMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page){ + String blurry = ObjectUtil.isNotEmpty(whereJson.get("blurry")) + ? whereJson.get("blurry").toString() : null; + String interactDirection = ObjectUtil.isNotEmpty(whereJson.get("interact_direction")) + ? whereJson.get("interact_direction").toString() : null; + String interactName = ObjectUtil.isNotEmpty(whereJson.get("interact_name")) + ? whereJson.get("interact_name").toString() : null; + String httpCode = ObjectUtil.isNotEmpty(whereJson.get("http_code")) + ? whereJson.get("http_code").toString() : null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(interactDirection!=null, SysInteractRecord::getDirection, interactDirection) + .eq(ObjectUtil.isNotEmpty(interactName), SysInteractRecord::getInteract_name, interactName) + .eq(ObjectUtil.isNotEmpty(httpCode), SysInteractRecord::getCode, httpCode) + .and(blurry != null, s -> s.like(SysInteractRecord::getInteract_name, blurry) + .or() + .like(SysInteractRecord::getMessage, blurry) + .or() + .like(SysInteractRecord::getRequest_param, blurry) + .or() + .like(SysInteractRecord::getResponse_param, blurry)); + lam.orderByDesc(SysInteractRecord::getRecord_time); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + sysInteractRecordMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(SysInteractRecord entity) { + + entity.setInteract_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + sysInteractRecordMapper.insert(entity); + } + + @Override + public void update(SysInteractRecord entity) { + SysInteractRecord dto = sysInteractRecordMapper.selectById(entity.getInteract_id()); + if (dto == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + sysInteractRecordMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + sysInteractRecordMapper.deleteBatchIds(ids); + } + + @Override + public void saveRecord(Object param, BaseResponse response, String direction) { + SysInteractRecord entity = new SysInteractRecord(); + entity.setInteract_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setInteract_name(response.getRequestNo()); + entity.setCode(response.getCode()); + entity.setMessage(response.getMessage()); + entity.setRecord_time(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS")); + entity.setDirection(direction); + entity.setRequest_param(JSONObject.toJSONString(param)); + entity.setResponse_param(JSONObject.toJSONString(response)); + entity.setIs_success(response.getCode() == HttpStatus.HTTP_OK); + sysInteractRecordMapper.insert(entity); + } + +// @Override +// public void saveRecord(AcsWorkOrderVo workorder, ResultForAcs resultForAcs, String lmsAcs) { +// SysInteractRecord entity = new SysInteractRecord(); +// entity.setInteract_id(IdUtil.getSnowflake(1, 1).nextIdStr()); +// entity.setInteract_name(workorder.getWorkorder_code()); +// entity.setCode(resultForAcs.getStatus()); +// entity.setMessage(resultForAcs.getMessage()); +// entity.setRecord_time(DateUtil.now()); +// entity.setDirection(lmsAcs); +// entity.setRequest_param(JSONObject.toJSONString(workorder)); +// entity.setResponse_param(JSONObject.toJSONString(resultForAcs)); +// entity.setIs_success(resultForAcs.getStatus() == HttpStatus.HTTP_OK); +// sysInteractRecordMapper.insert(entity); +// } + + @Override + public void saveRecord(String name, K request, V response, String direction) { + SysInteractRecord entity = new SysInteractRecord(); + entity.setInteract_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setRecord_time(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS")); + entity.setInteract_name(name); + entity.setDirection(direction); + entity.setRequest_param(JSONObject.toJSONString(request)); + entity.setResponse_param(JSONObject.toJSONString(response)); + // acs请求wms的返回数据 + if (response instanceof BaseResponse) { + BaseResponse re = (BaseResponse) response; + entity.setCode(re.getCode()); + entity.setMessage(re.getMessage()); + entity.setIs_success(re.getCode() == HttpStatus.HTTP_OK); + } + // wms请求acs的返回数据 + if (response instanceof ResultForAcs) { + ResultForAcs re = (ResultForAcs) response; + entity.setCode(re.getStatus()); + entity.setMessage(re.getMessage()); + entity.setIs_success(re.getStatus() == HttpStatus.HTTP_OK); + } + // wms请求acs的返回数据 + if (response instanceof AcsResponse) { + AcsResponse re = (AcsResponse) response; + entity.setCode(re.getCode()); + entity.setMessage(re.getMessage()); + entity.setIs_success(re.getCode() == HttpStatus.HTTP_OK); + } + sysInteractRecordMapper.insert(entity); + } + + @Override + public void deleteByDay(String day) { + sysInteractRecordMapper.deleteByDay(day); + } + + @Override + public void deleteByRows(Param maxRowsToKeep, Param maxRowsToDelete) { + sysInteractRecordMapper.deleteByRows(maxRowsToKeep.getValue(), maxRowsToDelete.getValue()); + } + + @Override + public List getAllInteractName() { + return sysInteractRecordMapper.getAllInteractName(); + } + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/controller/PdaController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/controller/PdaController.java new file mode 100644 index 0000000..dcb1feb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/controller/PdaController.java @@ -0,0 +1,83 @@ +package org.nl.wms.pda.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.pda.service.PdaService; +import org.nl.wms.pda.service.dao.dto.ManualSortingDto; +import org.nl.wms.pda.service.dao.dto.SendMaterialDto; +import org.nl.wms.pda.service.dao.vo.DropdownListVo; +import org.nl.wms.pda.service.dao.vo.ManualWorkOrderVo; +import org.nl.wms.pda.service.dao.vo.MaterialInventoryVo; +import org.nl.wms.pda.service.dao.vo.PdaResponseVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Author: lyd + * @Description: 手持接口 + * @Date: 2023/12/12 + */ +@Slf4j +@RestController +@Api(tags = "手持接口") +@RequestMapping("/api/pda") +@SaIgnore +public class PdaController { + @Autowired + private PdaService pdaService; + @PostMapping("/manualSorting/orders") + @Log("人工排产-显示工单") + @ApiOperation("人工排产-显示工单") + public ResponseEntity> manualOrders(){ + return new ResponseEntity<>(pdaService.manualOrders(), HttpStatus.OK); + } + + @PostMapping("/manualSorting/productionScheduling") + @Log("人工排产-开工") + @ApiOperation("人工排产-开工") + public ResponseEntity productionScheduling(@Validated @RequestBody ManualSortingDto manualSortingDto){ + return new ResponseEntity<>(pdaService.productionScheduling(manualSortingDto), HttpStatus.OK); + } + + @PostMapping("/manualSorting/productionComplete") + @Log("人工排产-完工") + @ApiOperation("人工排产-完工") + public ResponseEntity productionComplete(@Validated @RequestBody ManualSortingDto manualSortingDto){ + return new ResponseEntity<>(pdaService.productionComplete(manualSortingDto), HttpStatus.OK); + } + + @PostMapping("/manualSorting/coatedWireIntoStorageTask") + @Log("涂板线入库-动作") + @ApiOperation("涂板线入库-动作") + public ResponseEntity coatedWireIntoStorageTask(@Validated @RequestBody SendMaterialDto sendMaterialDto){ + return new ResponseEntity<>(pdaService.coatedWireIntoStorageTask(sendMaterialDto), HttpStatus.OK); + } + + @PostMapping("/manualSorting/coatedWireIntoStorageTaskShow") + @Log("涂板线入库-显示任务信息") + @ApiOperation("涂板线入库-显示任务信息") + public ResponseEntity coatedWireIntoStorageTaskShow(){ + return new ResponseEntity<>(pdaService.coatedWireIntoStorageTaskShow(), HttpStatus.OK); + } + + @PostMapping("/getInventoryMaterialInfo") + @Log("获取暂存区库存信息") + @ApiOperation("获取暂存区库存信息") + public ResponseEntity> getInventoryMaterialInfo(@RequestParam String material_code){ + return new ResponseEntity<>(pdaService.getInventoryMaterialInfo(material_code), HttpStatus.OK); + } + @PostMapping("/materialList") + @Log("设备状态下拉框数据") + @ApiOperation("设备状态下拉框数据") + public ResponseEntity> materialList(){ + return new ResponseEntity<>(pdaService.getmaterialList(), HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/PdaService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/PdaService.java new file mode 100644 index 0000000..c97ef31 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/PdaService.java @@ -0,0 +1,59 @@ +package org.nl.wms.pda.service; + +import org.nl.wms.pda.service.dao.dto.ManualSortingDto; +import org.nl.wms.pda.service.dao.dto.SendMaterialDto; +import org.nl.wms.pda.service.dao.vo.*; + +import java.util.List; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/12/12 + */ +public interface PdaService { + /** + * 获取所有工单 + * @return 涂板线工单 + */ + List manualOrders(); + + /** + * 人工分拣-开工 + * @param manualSortingDto 工单数据 + * @return 统一前端VO + */ + PdaResponseVo productionScheduling(ManualSortingDto manualSortingDto); + /** + * 人工分拣-完工 + * @param manualSortingDto 工单数据 + * @return 统一前端VO + */ + PdaResponseVo productionComplete(ManualSortingDto manualSortingDto); + + /** + * 涂板线送料 + * @param sendMaterialDto 送料实体 + * @return 手持统一VO + */ + PdaResponseVo coatedWireIntoStorageTask(SendMaterialDto sendMaterialDto); + + /** + * 获取任务数据 + * @return 任务数据 + */ + List coatedWireIntoStorageTaskShow(); + + /** + * 根据物料编码获取物料库存信息 + * @param materialCode / + * @return / + */ + List getInventoryMaterialInfo(String materialCode); + + /** + * 获取物料下拉框 + * @return List + */ + List getmaterialList(); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/ManualSortingDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/ManualSortingDto.java new file mode 100644 index 0000000..a084cc2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/ManualSortingDto.java @@ -0,0 +1,20 @@ +package org.nl.wms.pda.service.dao.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 人工排产Dto + * @Date: 2023/12/12 + */ +@Data +public class ManualSortingDto { + /** + * 工单号 + */ + private String workorder_code; + /** + * 用户 + */ + private String username; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/SendMaterialDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/SendMaterialDto.java new file mode 100644 index 0000000..9d96752 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/SendMaterialDto.java @@ -0,0 +1,20 @@ +package org.nl.wms.pda.service.dao.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 送料实体 + * @Date: 2023/12/12 + */ +@Data +public class SendMaterialDto { + /** + * 位置编码 + */ + private String point_code; + /** + * 物料数量 + */ + private Integer qty; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.java new file mode 100644 index 0000000..1ce72d5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.java @@ -0,0 +1,43 @@ +package org.nl.wms.pda.service.dao.mapper; + +import org.nl.wms.pda.service.dao.vo.DropdownListVo; +import org.nl.wms.pda.service.dao.vo.ManualWorkOrderVo; +import org.nl.wms.pda.service.dao.vo.MaterialInventoryVo; +import org.nl.wms.pda.service.dao.vo.TaskShowVo; + +import java.util.List; + +/** + * @Author: lyd + * @Description: 手持mapper接口 + * @Date: 2023/8/1 + */ +public interface PdaMapper { + + /** + * 获取工单列表 + * @return 工单数据 + */ + List getManualOrders(); + + /** + * 根据任务配置和创建方式获取任务数据 + * @param config 配置 + * @param mode 模式 + * @return 手持显示任务 + */ + List getRunningTaskByConfigAndCreateMode(String config, String mode); + + /** + * 查询物料的库存信息 + * @param materialCode 物料 + * @return List + */ + List getInventoryMaterialInfo(String materialCode); + + /** + * 获取物料下拉框 + * @return / + */ + List getmaterialList(); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.xml new file mode 100644 index 0000000..f98d324 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.xml @@ -0,0 +1,80 @@ + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/DropdownListVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/DropdownListVo.java new file mode 100644 index 0000000..179e790 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/DropdownListVo.java @@ -0,0 +1,22 @@ +package org.nl.wms.pda.service.dao.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author: lyd + * @Description: 反馈前端下拉框数据 + * @Date: 2023/12/19 + */ +@Data +public class DropdownListVo implements Serializable { + /** + * 值 + */ + private String value; + /** + * 标签 + */ + private String text; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/ManualWorkOrderVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/ManualWorkOrderVo.java new file mode 100644 index 0000000..a0d2245 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/ManualWorkOrderVo.java @@ -0,0 +1,20 @@ +package org.nl.wms.pda.service.dao.vo; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 人工排产 - 工单显示 + * @Date: 2023/12/12 + */ +@Data +public class ManualWorkOrderVo { + private String workorder_code; + private String material_code; + private String material_name; + private String workorder_status; + private String operator; + private String create_name; + private String plan_qty; + private String real_qty; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/MaterialInventoryVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/MaterialInventoryVo.java new file mode 100644 index 0000000..3177a79 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/MaterialInventoryVo.java @@ -0,0 +1,36 @@ +package org.nl.wms.pda.service.dao.vo; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 物料库存信息 + * @Date: 2023/12/18 + */ +@Data +public class MaterialInventoryVo { + /** + * 物料编码 + */ + private String material_code; + /** + * 物料名称 + */ + private String material_name; + /** + * 货位编码 + */ + private String point_code; + /** + * 货位名称 + */ + private String point_name; + /** + * 载具号 + */ + private String vehicle_code; + /** + * 普涂连涂 + */ + private String vehicle_type; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/PdaResponseVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/PdaResponseVo.java new file mode 100644 index 0000000..af5eb70 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/PdaResponseVo.java @@ -0,0 +1,22 @@ +package org.nl.wms.pda.service.dao.vo; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 手持返回 + * @Date: 2023/8/3 + */ +@Data +public class PdaResponseVo { + /** + * 先提供一个message + */ + private String message; + + public static PdaResponseVo pdaResultOk(String message) { + PdaResponseVo vo = new PdaResponseVo(); + vo.setMessage(message); + return vo; + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/TaskShowVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/TaskShowVo.java new file mode 100644 index 0000000..e3bf668 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/TaskShowVo.java @@ -0,0 +1,19 @@ +package org.nl.wms.pda.service.dao.vo; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 输出前端的任务显示 + * @Date: 2023/9/28 + */ +@Data +public class TaskShowVo { + private String point_name1; + private String point_name2; + private String point_name3; + private String point_name4; + private String task_status; + private String remark; + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java new file mode 100644 index 0000000..23c5a70 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java @@ -0,0 +1,130 @@ +package org.nl.wms.pda.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.database.material.service.IMdBaseMaterialService; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; +import org.nl.wms.pda.service.PdaService; +import org.nl.wms.pda.service.dao.dto.ManualSortingDto; +import org.nl.wms.pda.service.dao.dto.SendMaterialDto; +import org.nl.wms.pda.service.dao.mapper.PdaMapper; +import org.nl.wms.pda.service.dao.vo.*; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskFactory; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/12/12 + */ +@Service +public class PdaServiceImpl implements PdaService { + @Autowired + private PdaMapper pdaMapper; + @Autowired + private IPdmBdWorkorderService workorderService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private IMdBaseMaterialService materialService; + @Autowired + private TaskFactory taskFactory; + + @Override + public List manualOrders() { + return pdaMapper.getManualOrders(); + } + + @Override + public PdaResponseVo productionScheduling(ManualSortingDto manualSortingDto) { + // 查询工单 + PdmBdWorkorder bdWorkorder = workorderService.getByCode(manualSortingDto.getWorkorder_code()); + if (ObjectUtil.isEmpty(bdWorkorder)) { + throw new BadRequestException("工单:[" + bdWorkorder.getWorkorder_code() + "]不存在"); + } + switch (bdWorkorder.getWorkorder_status()) { + case "3": + throw new BadRequestException("工单:[" + bdWorkorder.getWorkorder_code() + "]已开工"); + case "5": + throw new BadRequestException("工单:[" + bdWorkorder.getWorkorder_code() + "]已完工"); + default: + break; + } + // 开工 + bdWorkorder.setOperator(manualSortingDto.getUsername()); + bdWorkorder.setRealproducestart_date(DateUtil.now()); + bdWorkorder.setWorkorder_status(WorkOrderStatusEnum.PRODUCING.getCode()); + TaskUtils.setWorkOrderUpdateByPC(bdWorkorder); + workorderService.updateById(bdWorkorder); + return PdaResponseVo.pdaResultOk("工单:[" + bdWorkorder.getWorkorder_code() + "]开工成功"); + } + + @Override + public PdaResponseVo productionComplete(ManualSortingDto manualSortingDto) { + // 查询工单 + PdmBdWorkorder bdWorkorder = workorderService.getByCode(manualSortingDto.getWorkorder_code()); + if (ObjectUtil.isEmpty(bdWorkorder)) { + throw new BadRequestException("工单:[" + bdWorkorder.getWorkorder_code() + "]不存在"); + } + switch (bdWorkorder.getWorkorder_status()) { + case "1": + throw new BadRequestException("工单:[" + bdWorkorder.getWorkorder_code() + "]未开工"); + case "5": + throw new BadRequestException("工单:[" + bdWorkorder.getWorkorder_code() + "]已完工"); + default: + break; + } + TaskUtils.setWorkOrderUpdateByPC(bdWorkorder); + bdWorkorder.setRealproduceend_date(DateUtil.now()); + bdWorkorder.setWorkorder_status(WorkOrderStatusEnum.COMPLETE.getCode()); + workorderService.updateById(bdWorkorder); + return PdaResponseVo.pdaResultOk("工单:[" + bdWorkorder.getWorkorder_code() + "]完工成功"); + } + + @Override + public PdaResponseVo coatedWireIntoStorageTask(SendMaterialDto sendMaterialDto) { + // 获取工单 + PdmBdWorkorder productionTask = workorderService.getDeviceDockingProductionTask(sendMaterialDto.getPoint_code()); + if (ObjectUtil.isEmpty(productionTask)) { + throw new BadRequestException("点位:[" + sendMaterialDto.getPoint_code() + "]的工单不存在"); + } + MdBaseMaterial material = materialService.getById(productionTask.getMaterial_id()); + AbstractTask tbxmlTask = taskFactory.getTask("TBXMLTask"); + // 准备参数:设备编码 + JSONObject param = new JSONObject(); + param.put("device_code", sendMaterialDto.getPoint_code()); + param.put("config_code", "TBXMLTask"); + param.put("create_mode", GeneralDefinition.PDA_CREATION); + param.put("qty", ObjectUtil.isNotEmpty(sendMaterialDto.getQty()) ? sendMaterialDto.getQty() : material.getStandard_qty()); + param.put("user_id", "1"); + tbxmlTask.apply(param); + return PdaResponseVo.pdaResultOk("涂板线入库请求成功"); + } + + @Override + public List coatedWireIntoStorageTaskShow() { + return pdaMapper.getRunningTaskByConfigAndCreateMode("TBXMLTask", GeneralDefinition.PDA_CREATION); + } + + @Override + public List getInventoryMaterialInfo(String materialCode) { + return pdaMapper.getInventoryMaterialInfo(materialCode); + } + + @Override + public List getmaterialList() { + return pdaMapper.getmaterialList(); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/controller/PdmBdSolidifyPlanController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/controller/PdmBdSolidifyPlanController.java new file mode 100644 index 0000000..3fd6c86 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/controller/PdmBdSolidifyPlanController.java @@ -0,0 +1,91 @@ +package org.nl.wms.pdm.solidifyplan.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; +import org.nl.wms.pdm.solidifyplan.service.IPdmBdSolidifyPlanService; +import org.nl.wms.pdm.solidifyplan.service.dao.ChangePlan; +import org.nl.wms.pdm.solidifyplan.service.dao.PdmBdSolidifyPlan; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-12-04 +**/ +@Slf4j +@RestController +@Api(tags = "固化方案管理") +@RequestMapping("/api/pdmBdSolidifyPlan") +public class PdmBdSolidifyPlanController { + + @Autowired + private IPdmBdSolidifyPlanService pdmBdSolidifyPlanService; + + @GetMapping + @Log("查询固化方案") + @ApiOperation("查询固化方案") + //@SaCheckPermission("@el.check('pdmBdSolidifyPlan:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(pdmBdSolidifyPlanService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增固化方案") + @ApiOperation("新增固化方案") + //@SaCheckPermission("@el.check('pdmBdSolidifyPlan:add')") + public ResponseEntity create(@Validated @RequestBody PdmBdSolidifyPlan entity){ + pdmBdSolidifyPlanService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改固化方案") + @ApiOperation("修改固化方案") + //@SaCheckPermission("@el.check('pdmBdSolidifyPlan:edit')") + public ResponseEntity update(@Validated @RequestBody PdmBdSolidifyPlan entity){ + pdmBdSolidifyPlanService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除固化方案") + @ApiOperation("删除固化方案") + //@SaCheckPermission("@el.check('pdmBdSolidifyPlan:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + pdmBdSolidifyPlanService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/details") + @Log("获取固化方案详情") + @ApiOperation("获取固化方案详情") + public ResponseEntity> details(@RequestBody String code){ + return new ResponseEntity<>(pdmBdSolidifyPlanService.details(code), HttpStatus.OK); + } + + @PostMapping("/detailMaterials") + @Log("获取固化方案详情") + @ApiOperation("获取固化方案详情") + public ResponseEntity> detailMaterials(@RequestBody String code){ + return new ResponseEntity<>(pdmBdSolidifyPlanService.detailMaterials(code), HttpStatus.OK); + } + + @PostMapping("/changePlan") + @Log("修改固化方案") + @ApiOperation("修改固化方案") + public ResponseEntity changePlan(@RequestBody ChangePlan plan){ + pdmBdSolidifyPlanService.changePlan(plan); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/IPdmBdSolidifyPlanService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/IPdmBdSolidifyPlanService.java new file mode 100644 index 0000000..fe970a7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/IPdmBdSolidifyPlanService.java @@ -0,0 +1,62 @@ +package org.nl.wms.pdm.solidifyplan.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; +import org.nl.wms.pdm.solidifyplan.service.dao.ChangePlan; +import org.nl.wms.pdm.solidifyplan.service.dao.PdmBdSolidifyPlan; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-12-04 +**/ +public interface IPdmBdSolidifyPlanService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(PdmBdSolidifyPlan entity); + + /** + * 编辑 + * @param entity / + */ + void update(PdmBdSolidifyPlan entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); + + /** + * 详情 + * @param code + * @return + */ + List details(String code); + + /** + * 获取物料 + * @param code + * @return + */ + List detailMaterials(String code); + + void changePlan(ChangePlan plan); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/ChangePlan.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/ChangePlan.java new file mode 100644 index 0000000..c32aea1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/ChangePlan.java @@ -0,0 +1,14 @@ +package org.nl.wms.pdm.solidifyplan.service.dao; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/12/5 + */ +@Data +public class ChangePlan { + private String curingPlan; + private String planCode; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/PdmBdSolidifyPlan.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/PdmBdSolidifyPlan.java new file mode 100644 index 0000000..70afe10 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/PdmBdSolidifyPlan.java @@ -0,0 +1,54 @@ +package org.nl.wms.pdm.solidifyplan.service.dao; + +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 io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.List; + +/** +* @description / +* @author lyd +* @date 2023-12-04 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("pdm_bd_solidify_plan") +public class PdmBdSolidifyPlan implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "plan_id", type = IdType.NONE) + @ApiModelProperty(value = "方案标识") + private String plan_id; + + @ApiModelProperty(value = "方案编码") + private String plan_code; + + @ApiModelProperty(value = "创建人") + private String create_id; + + @ApiModelProperty(value = "创建人") + private String create_name; + + @ApiModelProperty(value = "创建时间") + private String create_time; + + @ApiModelProperty(value = "修改人") + private String update_id; + + @ApiModelProperty(value = "修改人") + private String update_name; + + @ApiModelProperty(value = "修改时间") + private String update_time; + + @TableField(exist = false) + private List material_ids; + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/SolidifyPlanDetail.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/SolidifyPlanDetail.java new file mode 100644 index 0000000..f72113d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/SolidifyPlanDetail.java @@ -0,0 +1,15 @@ +package org.nl.wms.pdm.solidifyplan.service.dao; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/12/5 + */ +@Data +public class SolidifyPlanDetail { + private String detail_id; + private String plan_code; + private String material_id; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/mapper/PdmBdSolidifyPlanMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/mapper/PdmBdSolidifyPlanMapper.java new file mode 100644 index 0000000..0caf637 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/mapper/PdmBdSolidifyPlanMapper.java @@ -0,0 +1,27 @@ +package org.nl.wms.pdm.solidifyplan.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; +import org.nl.wms.pdm.solidifyplan.service.dao.PdmBdSolidifyPlan; +import org.nl.wms.pdm.solidifyplan.service.dao.SolidifyPlanDetail; + +import java.util.List; + +/** +* @author lyd +* @date 2023-12-04 +**/ +public interface PdmBdSolidifyPlanMapper extends BaseMapper { + + void batchInsert(List list); + + List details(String code); + + List detailMaterials(String code); + + /** + * 删除详情 + * @param planCode + */ + void deleteRelation(String planCode); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/mapper/PdmBdSolidifyPlanMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/mapper/PdmBdSolidifyPlanMapper.xml new file mode 100644 index 0000000..ca86b37 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dao/mapper/PdmBdSolidifyPlanMapper.xml @@ -0,0 +1,30 @@ + + + + + + INSERT INTO pdm_bd_solidify_detail (detail_id, plan_code, material_id) + VALUES + + (#{item.detail_id}, #{item.plan_code}, #{item.material_id}) + + + + DELETE FROM pdm_bd_solidify_detail WHERE plan_code = #{code}; + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dto/PdmBdSolidifyPlanDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dto/PdmBdSolidifyPlanDto.java new file mode 100644 index 0000000..2626f9a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dto/PdmBdSolidifyPlanDto.java @@ -0,0 +1,37 @@ +package org.nl.wms.pdm.solidifyplan.service.dto; + +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-12-04 +**/ +@Data +public class PdmBdSolidifyPlanDto implements Serializable { + + /** 方案标识 */ + private String plan_id; + + /** 方案编码 */ + private String plan_code; + + /** 创建人 */ + private String create_id; + + /** 创建人 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private String update_id; + + /** 修改人 */ + private String update_name; + + /** 修改时间 */ + private String update_time; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dto/PdmBdSolidifyPlanQuery.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dto/PdmBdSolidifyPlanQuery.java new file mode 100644 index 0000000..e2088cd --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/dto/PdmBdSolidifyPlanQuery.java @@ -0,0 +1,12 @@ +package org.nl.wms.pdm.solidifyplan.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.pdm.solidifyplan.service.dao.PdmBdSolidifyPlan; + +/** +* @author lyd +* @date 2023-12-04 +**/ +public class PdmBdSolidifyPlanQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/impl/PdmBdSolidifyPlanServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/impl/PdmBdSolidifyPlanServiceImpl.java new file mode 100644 index 0000000..93e3840 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/solidifyplan/service/impl/PdmBdSolidifyPlanServiceImpl.java @@ -0,0 +1,155 @@ +package org.nl.wms.pdm.solidifyplan.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.system.service.param.ISysParamService; +import org.nl.system.service.param.dao.Param; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; +import org.nl.wms.pdm.solidifyplan.service.IPdmBdSolidifyPlanService; +import org.nl.wms.pdm.solidifyplan.service.dao.ChangePlan; +import org.nl.wms.pdm.solidifyplan.service.dao.SolidifyPlanDetail; +import org.nl.wms.pdm.solidifyplan.service.dao.mapper.PdmBdSolidifyPlanMapper; +import org.nl.wms.pdm.solidifyplan.service.dao.PdmBdSolidifyPlan; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; + +/** +* @description 服务实现 +* @author lyd +* @date 2023-12-04 +**/ +@Slf4j +@Service +public class PdmBdSolidifyPlanServiceImpl extends ServiceImpl implements IPdmBdSolidifyPlanService { + + @Autowired + private PdmBdSolidifyPlanMapper pdmBdSolidifyPlanMapper; + @Autowired + private ISysParamService paramService; + + @Override + public IPage queryAll(Map whereJson, PageQuery page){ + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + pdmBdSolidifyPlanMapper.selectPage(pages, lam); + return pages; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(PdmBdSolidifyPlan entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setPlan_code(CodeUtil.getNewCode("solidifyplan")); + entity.setPlan_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + // 插入数据到详情 + List list = new ArrayList<>(); + entity.getMaterial_ids().forEach(id -> { + SolidifyPlanDetail detail = new SolidifyPlanDetail(); + detail.setDetail_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + detail.setPlan_code(entity.getPlan_code()); + detail.setMaterial_id(id); + list.add(detail); + }); + // 插入数据 + pdmBdSolidifyPlanMapper.batchInsert(list); + pdmBdSolidifyPlanMapper.insert(entity); + // 修改固化方案 + Param param = new Param(); + param.setValue(GeneralDefinition.CUSTOM_MIXING); + paramService.update(param, new LambdaQueryWrapper().eq(Param::getCode, "CuringPlan")); + // 修改物料策略 + param.setValue(entity.getPlan_code()); + paramService.update(param, new LambdaQueryWrapper().eq(Param::getCode, "CurrentMaterials")); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(PdmBdSolidifyPlan entity) { + PdmBdSolidifyPlan dto = pdmBdSolidifyPlanMapper.selectById(entity.getPlan_id()); + if (dto == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + + pdmBdSolidifyPlanMapper.updateById(entity); + // 删除所有的关系数据 + pdmBdSolidifyPlanMapper.deleteRelation(entity.getPlan_code()); + // 新增关系数据 + // 插入数据到详情 + List list = new ArrayList<>(); + entity.getMaterial_ids().forEach(id -> { + SolidifyPlanDetail detail = new SolidifyPlanDetail(); + detail.setDetail_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + detail.setPlan_code(entity.getPlan_code()); + detail.setMaterial_id(id); + list.add(detail); + }); + // 插入数据 + pdmBdSolidifyPlanMapper.batchInsert(list); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + pdmBdSolidifyPlanMapper.deleteBatchIds(ids); + } + + @Override + public List details(String code) { + return pdmBdSolidifyPlanMapper.details(code); + } + + @Override + public List detailMaterials(String code) { + return pdmBdSolidifyPlanMapper.detailMaterials(code); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void changePlan(ChangePlan plan) { + Param param = new Param(); + if (ObjectUtil.isNotEmpty(plan.getCuringPlan())) { + param.setValue(plan.getCuringPlan()); + paramService.update(param, new LambdaQueryWrapper().eq(Param::getCode, "CuringPlan")); + } + if (ObjectUtil.isNotEmpty(plan.getPlanCode())) { + // 修改物料策略 + param.setValue(plan.getPlanCode()); + paramService.update(param, new LambdaQueryWrapper().eq(Param::getCode, "CurrentMaterials")); + } + } + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/controller/PdmBdProductionProcessTrackingController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/controller/PdmBdProductionProcessTrackingController.java new file mode 100644 index 0000000..9bf9d41 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/controller/PdmBdProductionProcessTrackingController.java @@ -0,0 +1,67 @@ +package org.nl.wms.pdm.track.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.pdm.track.service.IPdmBdProductionProcessTrackingService; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; +import org.nl.wms.pdm.track.service.dto.PdmBdProductionProcessTrackingQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Set; +/** +* @author lyd +* @date 2023-07-21 +**/ +@Slf4j +@RestController +@Api(tags = "生产过程跟踪表管理") +@RequestMapping("/api/pdmBdProductionProcessTracking") +public class PdmBdProductionProcessTrackingController { + + @Autowired + private IPdmBdProductionProcessTrackingService pdmBdProductionProcessTrackingService; + + @GetMapping + @Log("查询生产过程跟踪表") + @ApiOperation("查询生产过程跟踪表") + //@SaCheckPermission("@el.check('pdmBdProductionProcessTracking:list')") + public ResponseEntity query(PdmBdProductionProcessTrackingQuery query, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(pdmBdProductionProcessTrackingService + .queryAll(query,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增生产过程跟踪表") + @ApiOperation("新增生产过程跟踪表") + //@SaCheckPermission("@el.check('pdmBdProductionProcessTracking:add')") + public ResponseEntity create(@Validated @RequestBody PdmBdProductionProcessTracking entity){ + pdmBdProductionProcessTrackingService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改生产过程跟踪表") + @ApiOperation("修改生产过程跟踪表") + //@SaCheckPermission("@el.check('pdmBdProductionProcessTracking:edit')") + public ResponseEntity update(@Validated @RequestBody PdmBdProductionProcessTracking entity){ + pdmBdProductionProcessTrackingService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除生产过程跟踪表") + @ApiOperation("删除生产过程跟踪表") + //@SaCheckPermission("@el.check('pdmBdProductionProcessTracking:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + pdmBdProductionProcessTrackingService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/IPdmBdProductionProcessTrackingService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/IPdmBdProductionProcessTrackingService.java new file mode 100644 index 0000000..86758c1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/IPdmBdProductionProcessTrackingService.java @@ -0,0 +1,43 @@ +package org.nl.wms.pdm.track.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; +import org.nl.wms.pdm.track.service.dto.PdmBdProductionProcessTrackingQuery; + +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-07-21 +**/ +public interface IPdmBdProductionProcessTrackingService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(PdmBdProductionProcessTrackingQuery whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(PdmBdProductionProcessTracking entity); + + /** + * 编辑 + * @param entity / + */ + void update(PdmBdProductionProcessTracking entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/PdmBdProductionProcessTracking.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/PdmBdProductionProcessTracking.java new file mode 100644 index 0000000..efa1b22 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/PdmBdProductionProcessTracking.java @@ -0,0 +1,56 @@ +package org.nl.wms.pdm.track.service.dao; + +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 io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-07-21 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("pdm_bd_production_process_tracking") +public class PdmBdProductionProcessTracking implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "process_id", type = IdType.NONE) + @ApiModelProperty(value = "跟踪标识") + private String process_id; + + @ApiModelProperty(value = "记录时间") + private String record_time; + + @ApiModelProperty(value = "动作") + private String process_action; + + @ApiModelProperty(value = "地点") + private String process_location; + + @ApiModelProperty(value = "链路id") + private String buss_move_id; + @TableField(exist = false) + private String vehicle_code; + @TableField(exist = false) + private String point_name; + @TableField(exist = false) + private String device_code; + @TableField(exist = false) + private String material_code; + @TableField(exist = false) + private String material_name; + @TableField(exist = false) + private String pcsn; + @TableField(exist = false) + private String half_material_code; + @TableField(exist = false) + private String raw_material_code; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.java new file mode 100644 index 0000000..ece735f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.java @@ -0,0 +1,16 @@ +package org.nl.wms.pdm.track.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; +import org.nl.wms.pdm.track.service.dto.PdmBdProductionProcessTrackingQuery; + +/** +* @author lyd +* @date 2023-07-21 +**/ +public interface PdmBdProductionProcessTrackingMapper extends BaseMapper { + + IPage selectPageLeftJoin(IPage pages, + PdmBdProductionProcessTrackingQuery query); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.xml new file mode 100644 index 0000000..676f341 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.xml @@ -0,0 +1,35 @@ + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingDto.java new file mode 100644 index 0000000..5a64006 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingDto.java @@ -0,0 +1,29 @@ +package org.nl.wms.pdm.track.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-07-21 +**/ +@Data +public class PdmBdProductionProcessTrackingDto implements Serializable { + + /** 跟踪标识 */ + private String process_id; + + /** 记录时间 */ + private String record_time; + + /** 动作 */ + private String process_action; + + /** 地点 */ + private String process_location; + + /** 链路id */ + private String buss_move_id; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingQuery.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingQuery.java new file mode 100644 index 0000000..25e68fa --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingQuery.java @@ -0,0 +1,16 @@ +package org.nl.wms.pdm.track.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** +* @author lyd +* @date 2023-07-21 +**/ +@Data +public class PdmBdProductionProcessTrackingQuery implements Serializable { + private String buss_move_id; + private String begin_time; + private String end_time; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/impl/PdmBdProductionProcessTrackingServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/impl/PdmBdProductionProcessTrackingServiceImpl.java new file mode 100644 index 0000000..57fc333 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/impl/PdmBdProductionProcessTrackingServiceImpl.java @@ -0,0 +1,66 @@ +package org.nl.wms.pdm.track.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.pdm.track.service.IPdmBdProductionProcessTrackingService; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; +import org.nl.wms.pdm.track.service.dao.mapper.PdmBdProductionProcessTrackingMapper; +import org.nl.wms.pdm.track.service.dto.PdmBdProductionProcessTrackingQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Set; + +/** +* @description 服务实现 +* @author lyd +* @date 2023-07-21 +**/ +@Slf4j +@Service +public class PdmBdProductionProcessTrackingServiceImpl extends ServiceImpl implements IPdmBdProductionProcessTrackingService { + + @Autowired + private PdmBdProductionProcessTrackingMapper pdmBdProductionProcessTrackingMapper; + + @Override + public IPage queryAll(PdmBdProductionProcessTrackingQuery query, PageQuery page){ + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + pages = pdmBdProductionProcessTrackingMapper.selectPageLeftJoin(pages, query); + return pages; + } + + @Override + public void create(PdmBdProductionProcessTracking entity) { + entity.setProcess_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + pdmBdProductionProcessTrackingMapper.insert(entity); + } + + @Override + public void update(PdmBdProductionProcessTracking entity) { + PdmBdProductionProcessTracking dto = pdmBdProductionProcessTrackingMapper.selectById(entity.getProcess_id()); + if (dto == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + pdmBdProductionProcessTrackingMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + pdmBdProductionProcessTrackingMapper.deleteBatchIds(ids); + } + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/controller/PdmBdWorkorderController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/controller/PdmBdWorkorderController.java similarity index 72% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/controller/PdmBdWorkorderController.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/controller/PdmBdWorkorderController.java index a603c79..2bde4b3 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/controller/PdmBdWorkorderController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/controller/PdmBdWorkorderController.java @@ -1,4 +1,4 @@ -package org.nl.wms.pdm.controller; +package org.nl.wms.pdm.workorder.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -6,9 +6,9 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.logging.annotation.Log; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.pdm.service.dto.PdmBdWorkorderQuery; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.workorder.service.dto.PdmBdWorkorderQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -63,4 +63,20 @@ public class PdmBdWorkorderController { pdmBdWorkorderService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); } + + @PostMapping("/submits") + @Log("工单下发") + @ApiOperation("工单下发") + public ResponseEntity submits(@RequestBody PdmBdWorkorder entity){ + pdmBdWorkorderService.submits(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/forceFinish") + @Log("强制完工") + @ApiOperation("强制完工") + public ResponseEntity forceFinish(@RequestBody PdmBdWorkorder entity){ + pdmBdWorkorderService.forceFinish(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/IPdmBdWorkorderService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/IPdmBdWorkorderService.java similarity index 66% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/IPdmBdWorkorderService.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/IPdmBdWorkorderService.java index ac8237d..6daa036 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/IPdmBdWorkorderService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/IPdmBdWorkorderService.java @@ -1,10 +1,10 @@ -package org.nl.wms.pdm.service; +package org.nl.wms.pdm.workorder.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.common.domain.query.PageQuery; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.pdm.service.dto.PdmBdWorkorderQuery; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.workorder.service.dto.PdmBdWorkorderQuery; import java.util.Set; @@ -43,29 +43,41 @@ public interface IPdmBdWorkorderService extends IService { /** * 悲观锁查找工单数据 - * @param id - * @return + * @param id 标识 + * @return 工单数据 */ PdmBdWorkorder selectByIdLock(String id); /** * 根据编码获取 - * @param orderCode - * @return + * @param orderCode 工单号 + * @return 工单数据 */ PdmBdWorkorder getByCode(String orderCode); /** * 获取设备生产中的工单 - * @param deviceCode - * @return + * @param deviceCode 设备实体 + * @return 工单数据 */ PdmBdWorkorder getDeviceProductionTask(String deviceCode); /** * 根据对接位获取工单 - * @param deviceCode - * @return + * @param deviceCode 设备编码 + * @return 工单数据 */ PdmBdWorkorder getDeviceDockingProductionTask(String deviceCode); + + /** + * 提交报工 + * @param entity 工单实体 + */ + void submits(PdmBdWorkorder entity); + + /** + * 完工 + * @param entity + */ + void forceFinish(PdmBdWorkorder entity); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/PdmBdWorkorder.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java similarity index 94% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/PdmBdWorkorder.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java index 3a5c96d..966607a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/PdmBdWorkorder.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java @@ -1,4 +1,4 @@ -package org.nl.wms.pdm.service.dao; +package org.nl.wms.pdm.workorder.service.dao; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; @@ -41,6 +41,10 @@ public class PdmBdWorkorder implements Serializable { @ApiModelProperty(value = "载具类型") private String vehicle_type; + @ApiModelProperty(value = "班组") + private String team; + @ApiModelProperty(value = "开工人") + private String operator; @ApiModelProperty(value = "计划开始时间") private String planproducestart_date; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.java similarity index 68% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.java index 9c0c40b..c4ca4e4 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.java @@ -1,9 +1,9 @@ -package org.nl.wms.pdm.service.dao.mapper; +package org.nl.wms.pdm.workorder.service.dao.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.pdm.service.dto.PdmBdWorkorderQuery; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.workorder.service.dto.PdmBdWorkorderQuery; /** * @author lyd diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.xml similarity index 84% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.xml rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.xml index 6987882..77256a3 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.xml @@ -1,7 +1,7 @@ - - SELECT wo.* ,ma.material_name ,ma.material_code @@ -29,7 +29,7 @@ - SELECT * FROM diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dto/PdmBdWorkorderDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dto/PdmBdWorkorderDto.java similarity index 97% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dto/PdmBdWorkorderDto.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dto/PdmBdWorkorderDto.java index 440a270..1661812 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dto/PdmBdWorkorderDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dto/PdmBdWorkorderDto.java @@ -1,4 +1,4 @@ -package org.nl.wms.pdm.service.dto; +package org.nl.wms.pdm.workorder.service.dto; import lombok.Data; import java.io.Serializable; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dto/PdmBdWorkorderQuery.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dto/PdmBdWorkorderQuery.java similarity index 88% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dto/PdmBdWorkorderQuery.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dto/PdmBdWorkorderQuery.java index 375c115..1171d27 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dto/PdmBdWorkorderQuery.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dto/PdmBdWorkorderQuery.java @@ -1,4 +1,4 @@ -package org.nl.wms.pdm.service.dto; +package org.nl.wms.pdm.workorder.service.dto; import lombok.Data; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/impl/PdmBdWorkorderServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/impl/PdmBdWorkorderServiceImpl.java similarity index 55% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/impl/PdmBdWorkorderServiceImpl.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/impl/PdmBdWorkorderServiceImpl.java index 699b9ab..fd98259 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/impl/PdmBdWorkorderServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/impl/PdmBdWorkorderServiceImpl.java @@ -1,8 +1,9 @@ -package org.nl.wms.pdm.service.impl; +package org.nl.wms.pdm.workorder.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpStatus; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -13,16 +14,21 @@ import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.CodeUtil; import org.nl.common.utils.SecurityUtils; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.pdm.service.dao.mapper.PdmBdWorkorderMapper; -import org.nl.wms.pdm.service.dto.PdmBdWorkorderQuery; +import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.workorder.service.dao.mapper.PdmBdWorkorderMapper; +import org.nl.wms.pdm.workorder.service.dto.PdmBdWorkorderQuery; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum; +import org.nl.wms.util.TaskUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -54,7 +60,6 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl lam = new QueryWrapper().lambda(); + lam.eq(PdmBdWorkorder::getPoint_code, entity.getPoint_code()) + .eq(PdmBdWorkorder::getWorkorder_status, WorkOrderStatusEnum.PRODUCING.getCode()) + .eq(PdmBdWorkorder::getIs_delete, false); + PdmBdWorkorder bdWorkorder = pdmBdWorkorderMapper.selectOne(lam); + if (ObjectUtil.isNotEmpty(bdWorkorder)) { + throw new BadRequestException("该设备已有生产工单,不能重复开工"); + } + // 设置开工人 + pdmBdWorkorder.setOperator(ObjectUtil.isNotEmpty(SecurityUtils.getCurrentUser()) + ? SecurityUtils.getCurrentNickName() : ""); + pdmBdWorkorder.setWorkorder_status(WorkOrderStatusEnum.PRODUCING.getCode()); + TaskUtils.setWorkOrderUpdateByPC(pdmBdWorkorder); + pdmBdWorkorderMapper.updateById(pdmBdWorkorder); + } + + @Override + public void forceFinish(PdmBdWorkorder entity) { + String workorderCode = entity.getWorkorder_code(); + if (workorderCode == null) { + throw new BadRequestException("工单标识不能为空!"); + } + PdmBdWorkorder bdWorkorder = this.getByCode(workorderCode); + if (bdWorkorder == null) { + throw new BadRequestException("未找到工单号[" + workorderCode + "]的记录!"); + } + if (bdWorkorder.getWorkorder_status().equals(WorkOrderStatusEnum.COMPLETE.getCode())) { + throw new BadRequestException("工单号[" + workorderCode + "]已完工,不能重复完工!"); + } + bdWorkorder.setWorkorder_status(WorkOrderStatusEnum.COMPLETE.getCode()); + bdWorkorder.setRealproduceend_date(DateUtil.now()); + TaskUtils.setWorkOrderUpdateByAcs(bdWorkorder); + this.updateById(bdWorkorder); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java index 2204423..eecdfe9 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java @@ -147,13 +147,13 @@ public class SchBasePointServiceImpl extends ServiceImpl lam = new LambdaQueryWrapper<>(); lam.eq(SchBaseTask::getConfig_code, config_code) .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) - .ne(SchBaseTask::getTask_code, task_code) // 不是当前任务 + // 不是当前任务 + .ne(SchBaseTask::getTask_code, task_code) .eq(SchBaseTask::getIs_delete, false); List schBaseTasks = schBaseTaskMapper.selectList(lam); return schBaseTasks; @@ -129,8 +130,8 @@ public class SchBaseTaskServiceImpl extends ServiceImpl lam = new LambdaQueryWrapper<>(); lam.eq(SchBaseTask::getConfig_code, config_code) .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) - .eq(direction.equals("1"), SchBaseTask::getPoint_code1, device_code) - .eq(direction.equals("2"), SchBaseTask::getPoint_code2, device_code) + .eq("1".equals(direction), SchBaseTask::getPoint_code1, device_code) + .eq("2".equals(direction), SchBaseTask::getPoint_code2, device_code) .eq(SchBaseTask::getIs_delete, false); List schBaseTasks = schBaseTaskMapper.selectList(lam); return schBaseTasks; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java index aa80c17..e1e20ec 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java @@ -8,10 +8,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.nl.common.exception.BadRequestException; import org.nl.config.SpringContextHolder; import org.nl.wms.database.material.service.IMdBaseMaterialService; -import org.nl.wms.database.material.service.dao.MdBaseMaterial; -import org.nl.wms.ext.service.dto.to.BaseResponse; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.task.service.ISchBaseTaskService; @@ -28,9 +27,7 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * @author ldjun @@ -99,8 +96,9 @@ public abstract class AbstractTask { taskDto.setRoute_plan_code("normal"); taskDto.setStart_device_code(task.getPoint_code1()); taskDto.setNext_device_code(task.getPoint_code2()); + taskDto.setStart_waite_code(task.getStart_wait_point()); + taskDto.setNext_waite_code(task.getNext_wait_point()); taskDto.setVehicle_code(task.getVehicle_code()); - this.setTask(task.getConfig_code(), taskDto); list.add(taskDto); } @@ -124,6 +122,18 @@ public abstract class AbstractTask { public void schedule() { this.autoCreate(); this.create(); + // 下发 + this.getAllFinishTask(); + } + + public void getAllFinishTask() { + List list = taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_status, TaskStatus.CREATED.getCode())); + if (ObjectUtil.isEmpty(list)) { + return; + } + // 下发 + this.renotifyAcs(list); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AcsTaskDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AcsTaskDto.java index 649d7c0..077790d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AcsTaskDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AcsTaskDto.java @@ -14,6 +14,10 @@ public class AcsTaskDto { private String start_device_code; //下一点 private String next_device_code; + //取货等待点 + private String start_waite_code; + //放货等待点 + private String next_waite_code; //载具号 private String vehicle_code; //载具类型 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java index 6ae6803..d6192a7 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java @@ -39,6 +39,8 @@ public class GeneralDefinition { public static final String AUTO_CREATION = "1"; /**ACS创建**/ public static final String ACS_CREATION = "2"; + /**PDA手持**/ + public static final String PDA_CREATION = "3"; // 请求方向 /**ACS->LMS**/ public static final String ACS_LMS = "1"; @@ -79,4 +81,5 @@ public class GeneralDefinition { public static final String ENTRANCE = "4"; /**出口**/ public static final String EXIT = "3"; + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/PointStatusEnum.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/PointStatusEnum.java index e92e1ef..5b5c488 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/PointStatusEnum.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/PointStatusEnum.java @@ -12,9 +12,18 @@ import lombok.Getter; @AllArgsConstructor public enum PointStatusEnum { + /** 空位/无货 */ EMPTY_POINT("1", "空位/无货"), + /** 空载具/有货 */ + EMPTY_VEHICLE("2", "空载具/有货"), + /** 有料 */ FULL_POINT("3", "有料"), - EMPTY_VEHICLE("2", "空载具/有货"); + /** 可进料 */ + MATERIAL_IN("3", "进料"), + /** 固化中 */ + SOLIDIFY("4", "固化"), + /** 出料 */ + MATERIAL_OUT("5", "出料"); private final String code; private final String label; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java index 3e5ead6..9ab1617 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java @@ -5,13 +5,12 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.nl.config.SpringContextHolder; import org.nl.system.service.param.dao.Param; import org.nl.system.service.param.impl.SysParamServiceImpl; -import org.nl.wms.ext.service.dto.to.wms.AcsResponse; +import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse; import org.nl.wms.sch.task_manage.AcsTaskDto; import org.nl.wms.sch.task_manage.GeneralDefinition; import org.springframework.http.HttpStatus; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCMLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCMLTask.java index cfdb773..ced3846 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCMLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCMLTask.java @@ -1,5 +1,6 @@ package org.nl.wms.sch.task_manage.task.tasks.auto; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; @@ -8,7 +9,9 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.param.ISysParamService; -import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; +import org.nl.wms.pdm.track.service.IPdmBdProductionProcessTrackingService; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.point.service.ISchBasePointService; @@ -42,7 +45,7 @@ import java.util.stream.Collectors; @Slf4j @Component("GHCMLTask") public class GHCMLTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "GHCMLTask"; + private static final String TASK_CONFIG_CODE = "GHCMLTask"; @Autowired private ISchBaseTaskService taskService; @Autowired @@ -59,6 +62,8 @@ public class GHCMLTask extends AbstractTask { private TaskFactory taskFactory; @Autowired private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + private IPdmBdProductionProcessTrackingService processTrackingService; @Override protected void create() throws BadRequestException { @@ -109,7 +114,7 @@ public class GHCMLTask extends AbstractTask { task.setNext_wait_point(point.getPoint_code()); task.setTask_status(TaskStatus.CREATED.getCode()); task.setRemark(""); - TaskUtils.setUpdateByAcs(task); // 修改修改者 + TaskUtils.setUpdateByAcs(task); taskService.save(task); PointUtils.setUpdateByAcs(point); @@ -127,25 +132,26 @@ public class GHCMLTask extends AbstractTask { // 查找是否有相同物料的货位: // 最小排最小列,且列大于1(即不是等待位置,1不写死:使用子查询,寻找当排最小列序号的值) // 多个数据选择一个:Limit 1, 还需要考虑任务数,尽量一排排满 - SchBasePoint sameMaterialPoints = autoMapper.getZCSameMaterialPoint(nextRegionStr.get(0), jsonObject.getString("material_id")); + SchBasePoint sameMaterialPoints = autoMapper.getZCSameMaterialPoint(nextRegionStr.get(0) + , jsonObject.getString("material_id")); if (ObjectUtil.isNotEmpty(sameMaterialPoints)) { // 找到相同物料。分配等待点。 - List points = pointService.list(new LambdaQueryWrapper() + SchBasePoint point = pointService.getOne(new LambdaQueryWrapper() .in(SchBasePoint::getRegion_code, nextRegionStr) .eq(SchBasePoint::getRow_num, sameMaterialPoints.getRow_num()) .eq(SchBasePoint::getIs_used, true) - .orderByAsc(SchBasePoint::getCol_num)); - if (points.size() > 0) { - return points.get(0); + .orderByAsc(SchBasePoint::getCol_num), false); + if (ObjectUtil.isNotEmpty(point)) { + return point; } } // 如果没有找到。或者分配等待点失败,就选择一个空列存放 - return autoMapper.getZCEmptyMaterialPoint(nextRegionStr.get(0)); + return autoMapper.getZCEmptyMaterialPoint(nextRegionStr.get(0), jsonObject.getString("material_id")); } @Override protected void updateStatus(String task_code, TaskStatus status) { -// 校验任务 + // 校验任务 SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); @@ -154,16 +160,16 @@ public class GHCMLTask extends AbstractTask { throw new BadRequestException("该任务已取消!"); } // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + if (status.equals(TaskStatus.EXECUTING)) { taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } - if (status.equals(TaskStatus.FINISHED)) { // 完成 + if (status.equals(TaskStatus.FINISHED)) { this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } - if (status.equals(TaskStatus.CANCELED)) { // 取消 + if (status.equals(TaskStatus.CANCELED)) { this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } } @@ -187,16 +193,17 @@ public class GHCMLTask extends AbstractTask { } public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { - String startPoint = taskObj.getPoint_code1(); // 获取终点 - String endPoint = taskObj.getPoint_code2(); // 获取终点 + String startPoint = taskObj.getPoint_code1(); + String endPoint = taskObj.getPoint_code2(); SchBasePoint startPointObj = pointService.getById(startPoint); SchBasePoint endPointObj = pointService.getById(endPoint); if (ObjectUtil.isNotEmpty(endPointObj)) { SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(taskObj.getGroup_id()); TaskUtils.setGroupUpdateByType(vehiclematerialgroup, taskFinishedType); - vehiclematerialgroup.setTask_code(taskObj.getTask_code()); // 当前任务 - vehiclematerialgroup.setBuss_move_id(taskObj.getTask_code()); // 设置链路id,使用任务编码 - vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + vehiclematerialgroup.setTask_code(taskObj.getTask_code()); + // 设置链路id,使用任务编码 + vehiclematerialgroup.setBuss_move_id(taskObj.getTask_code()); + vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code()); vehiclematerialgroup.setPoint_name(endPointObj.getPoint_name()); vehiclematerialgroup.setMove_way(vehiclematerialgroup.getMove_way() + " -> " + endPointObj.getPoint_code()); vehiclematerialgroupService.updateById(vehiclematerialgroup); @@ -210,12 +217,12 @@ public class GHCMLTask extends AbstractTask { endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); pointService.updateById(endPointObj); // 插入生产过程跟踪表 -// PdmBdProductionProcessTracking processTracking = new PdmBdProductionProcessTracking(); -// processTracking.setBuss_move_id(vehiclematerialgroup.getBuss_move_id()); -// processTracking.setProcess_action("压制送料入双层缓存线"); -// processTracking.setProcess_location(endPoint); -// processTracking.setRecord_time(DateUtil.now()); -// processTrackingService.create(processTracking); + PdmBdProductionProcessTracking processTracking = new PdmBdProductionProcessTracking(); + processTracking.setBuss_move_id(vehiclematerialgroup.getBuss_move_id()); + processTracking.setProcess_action("固化室出口到暂存区"); + processTracking.setProcess_location(endPoint); + processTracking.setRecord_time(DateUtil.now()); + processTrackingService.create(processTracking); } // 起点清空 PointUtils.setUpdateByType(startPointObj, taskFinishedType); @@ -230,7 +237,7 @@ public class GHCMLTask extends AbstractTask { public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { // 获取参数 - String endPoint = taskObj.getPoint_code2(); // 获取终点 + String endPoint = taskObj.getPoint_code2(); SchBasePoint endPointObj = pointService.getById(endPoint); // 终点解锁 if (ObjectUtil.isNotEmpty(endPointObj)) { @@ -275,6 +282,9 @@ public class GHCMLTask extends AbstractTask { if (ObjectUtil.isEmpty(waitPoint)) { throw new BadRequestException("找不到任务:[" + task_id + "]等待点!"); } + if (ObjectUtil.isNotEmpty(task.getPoint_code2())) { + throw new BadRequestException("任务:[" + task_id + "]已请求过!"); + } SchBasePoint waitPointObj = pointService.getById(waitPoint); SchBasePoint result; // 找到这排对应的准确货位, @@ -293,7 +303,8 @@ public class GHCMLTask extends AbstractTask { .eq(SchBasePoint::getRegion_code, waitPointObj.getRegion_code()) .eq(SchBasePoint::getRow_num, waitPointObj.getRow_num()) .eq(SchBasePoint::getCol_num, basePoint.getCol_num() - 1) - .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + // 当前执行的任务为空或者NULL,有数据表示锁住 + .and(la -> la.isNull(SchBasePoint::getIng_task_code) .or() .eq(SchBasePoint::getIng_task_code, "")) .eq(SchBasePoint::getIs_used, true)); @@ -306,12 +317,14 @@ public class GHCMLTask extends AbstractTask { .eq(SchBasePoint::getRegion_code, waitPointObj.getRegion_code()) .eq(SchBasePoint::getRow_num, waitPointObj.getRow_num()) .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) - .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + // 当前执行的任务为空或者NULL,有数据表示锁住 + .and(la -> la.isNull(SchBasePoint::getIng_task_code) .or() .eq(SchBasePoint::getIng_task_code, "")) .eq(SchBasePoint::getIs_used, true) .orderByAsc(SchBasePoint::getIn_order_seq)); - result = points.get(0); // 获取第一条 + // 获取第一条 + result = points.get(0); } // 锁住货位点 PointUtils.setUpdateByAcs(result); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCQLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCQLTask.java index 2bcbd5f..9aceba6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCQLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/GHCQLTask.java @@ -1,5 +1,6 @@ package org.nl.wms.sch.task_manage.task.tasks.auto; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; @@ -9,7 +10,9 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.param.ISysParamService; -import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; +import org.nl.wms.pdm.track.service.IPdmBdProductionProcessTrackingService; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.point.service.ISchBasePointService; @@ -41,7 +44,7 @@ import java.util.stream.Collectors; @Slf4j @Component("GHCQLTask") public class GHCQLTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "GHCQLTask"; + private static final String TASK_CONFIG_CODE = "GHCQLTask"; @Autowired private ISchBaseTaskService taskService; @Autowired @@ -58,6 +61,8 @@ public class GHCQLTask extends AbstractTask { private TaskFactory taskFactory; @Autowired private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + private IPdmBdProductionProcessTrackingService processTrackingService; @Override protected void create() throws BadRequestException { @@ -120,9 +125,10 @@ public class GHCQLTask extends AbstractTask { LambdaQueryWrapper lam = new QueryWrapper().lambda(); lam.in(SchBasePoint::getRegion_code, startRegionStr) .eq(SchBasePoint::getParent_point_code, device.getParent_point_code()) + // 查找固化位 .eq(SchBasePoint::getPoint_type, PointTypeConstant.DOCKING_POINT) .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode()) - .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .and(la -> la.isNull(SchBasePoint::getIng_task_code) .or() .eq(SchBasePoint::getIng_task_code, "")) .orderByAsc(SchBasePoint::getIn_order_seq); @@ -141,16 +147,16 @@ public class GHCQLTask extends AbstractTask { throw new BadRequestException("该任务已取消!"); } // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + if (status.equals(TaskStatus.EXECUTING)) { taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } - if (status.equals(TaskStatus.FINISHED)) { // 完成 + if (status.equals(TaskStatus.FINISHED)) { this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } - if (status.equals(TaskStatus.CANCELED)) { // 取消 + if (status.equals(TaskStatus.CANCELED)) { this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } } @@ -174,8 +180,8 @@ public class GHCQLTask extends AbstractTask { } public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { - String startPoint = taskObj.getPoint_code1(); // 获取起点 - String endPoint = taskObj.getPoint_code2(); // 获取起点 + String startPoint = taskObj.getPoint_code1(); + String endPoint = taskObj.getPoint_code2(); SchBasePoint startPointObj = pointService.getById(startPoint); SchBasePoint endPointObj = pointService.getById(endPoint); String requestParam = taskObj.getRequest_param(); @@ -189,19 +195,19 @@ public class GHCQLTask extends AbstractTask { taskObj.getVehicle_code(), taskObj.getVehicle_type(), GroupBindMaterialStatusEnum.BOUND.getValue()); // 等到变成空盘才能解除 - vehicleMaterialGroupObj.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + vehicleMaterialGroupObj.setPoint_code(endPointObj.getPoint_code()); vehicleMaterialGroupObj.setPoint_name(endPointObj.getPoint_name()); vehicleMaterialGroupObj.setTask_code(taskObj.getTask_code()); vehicleMaterialGroupObj.setMove_way(vehicleMaterialGroupObj.getMove_way() + " -> " + endPointObj.getPoint_code()); TaskUtils.setGroupUpdateByType(vehicleMaterialGroupObj, taskFinishedType); vehiclematerialgroupService.updateById(vehicleMaterialGroupObj); // 插入生产过程跟踪表 -// PdmBdProductionProcessTracking processTracking = new PdmBdProductionProcessTracking(); -// processTracking.setBuss_move_id(vehicleMaterialGroupObj.getBuss_move_id()); -// processTracking.setProcess_action("钢托盘缓存位到分拣"); -// processTracking.setProcess_location(endPoint); -// processTracking.setRecord_time(DateUtil.now()); -// processTrackingService.create(processTracking); + PdmBdProductionProcessTracking processTracking = new PdmBdProductionProcessTracking(); + processTracking.setBuss_move_id(vehicleMaterialGroupObj.getBuss_move_id()); + processTracking.setProcess_action("从固化室出去到出口"); + processTracking.setProcess_location(endPoint); + processTracking.setRecord_time(DateUtil.now()); + processTrackingService.create(processTracking); // 终点设置对应的参数 endPointObj.setVehicle_code(taskObj.getVehicle_code()); endPointObj.setVehicle_type(taskObj.getVehicle_type()); @@ -218,7 +224,7 @@ public class GHCQLTask extends AbstractTask { } public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { - String startPoint = taskObj.getPoint_code1(); // 获取终点 + String startPoint = taskObj.getPoint_code1(); SchBasePoint startPointObj = pointService.getById(startPoint); // 终点解锁 if (ObjectUtil.isNotEmpty(startPointObj)) { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.java index 2b4b3af..87e8372 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.java @@ -17,6 +17,6 @@ public interface AutoMapper { SchBasePoint getZCSameMaterialPoint(String regionCode, String materialId); - SchBasePoint getZCEmptyMaterialPoint(String regionCode); + SchBasePoint getZCEmptyMaterialPoint(String regionCode, String materialId); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.xml index 10a31f9..5edea29 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/mapper/AutoMapper.xml @@ -81,6 +81,18 @@ ]]> (SELECT COUNT(*) FROM sch_base_task t WHERE t.next_wait_point = p.point_code AND t.task_status IN ('1', '2', '3', '4')) + AND ( + 0 = (SELECT COUNT(*) + FROM sch_base_task t + WHERE t.next_wait_point = p.point_code AND t.task_status IN ('1', '2', '3', '4')) + OR + #{materialId} IN (SELECT vg.material_id + FROM sch_base_task t + LEFT JOIN sch_base_vehiclematerialgroup vg ON vg.vehicle_code = t.vehicle_code AND vg.vehicle_type = t.vehicle_type + AND vg.group_bind_material_status = '2' + WHERE t.next_wait_point = p.point_code AND t.task_status IN ('1', '2', '3', '4')) + ) + ORDER BY p.row_num, p.out_order_seq LIMIT 1 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJQKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJQKTask.java index 39f34b3..a4138fb 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJQKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJQKTask.java @@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; -import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.task.service.ISchBaseTaskService; @@ -23,7 +23,6 @@ import org.nl.wms.util.PointUtils; import org.nl.wms.util.TaskUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.List; @@ -37,7 +36,7 @@ import java.util.stream.Collectors; @Slf4j @Component("KJQKTask") public class KJQKTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "KJQKTask"; + private static final String TASK_CONFIG_CODE = "KJQKTask"; @Autowired private ISchBasePointService pointService; @Autowired @@ -114,16 +113,16 @@ public class KJQKTask extends AbstractTask { throw new BadRequestException("该任务已取消!"); } // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + if (status.equals(TaskStatus.EXECUTING)) { taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } - if (status.equals(TaskStatus.FINISHED)) { // 完成 + if (status.equals(TaskStatus.FINISHED)) { this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } - if (status.equals(TaskStatus.CANCELED)) { // 取消 + if (status.equals(TaskStatus.CANCELED)) { this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } } @@ -148,7 +147,7 @@ public class KJQKTask extends AbstractTask { public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { // 获取参数 - String startPoint = taskObj.getPoint_code1(); // 获取起点 + String startPoint = taskObj.getPoint_code1(); SchBasePoint startPointObj = pointService.selectByIdLock(startPoint); // 起点清空 if (ObjectUtil.isNotEmpty(startPointObj)) { @@ -166,7 +165,7 @@ public class KJQKTask extends AbstractTask { public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { // 获取参数 - String startPoint = taskObj.getPoint_code1(); // 获取起点 + String startPoint = taskObj.getPoint_code1(); SchBasePoint startPointObj = pointService.getById(startPoint); // 起点解锁 if (ObjectUtil.isNotEmpty(startPointObj)) { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJSKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJSKTask.java index 87359cb..01aee72 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJSKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/kj/KJSKTask.java @@ -7,7 +7,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.param.ISysParamService; -import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; @@ -42,7 +42,7 @@ import java.util.stream.Collectors; @Slf4j @Component("KJSKTask") public class KJSKTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "KJSKTask"; + private static final String TASK_CONFIG_CODE = "KJSKTask"; @Autowired private ISchBaseTaskService taskService; @Autowired @@ -160,16 +160,16 @@ public class KJSKTask extends AbstractTask { throw new BadRequestException("该任务已取消!"); } // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + if (status.equals(TaskStatus.EXECUTING)) { taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } - if (status.equals(TaskStatus.FINISHED)) { // 完成 + if (status.equals(TaskStatus.FINISHED)) { this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } - if (status.equals(TaskStatus.CANCELED)) { // 取消 + if (status.equals(TaskStatus.CANCELED)) { this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } } @@ -193,7 +193,7 @@ public class KJSKTask extends AbstractTask { } public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { // 获取参数 - String endPoint = taskObj.getPoint_code2(); // 获取终点 + String endPoint = taskObj.getPoint_code2(); String vehicleType = ObjectUtil.isNotEmpty(taskObj.getVehicle_type()) ? taskObj.getVehicle_type() : ""; SchBasePoint endPointObj = pointService.getById(endPoint); // 设置载具类型、点位状态、释放点位 @@ -214,7 +214,7 @@ public class KJSKTask extends AbstractTask { } public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { // 获取参数 - String endPoint = taskObj.getPoint_code2(); // 获取终点 + String endPoint = taskObj.getPoint_code2(); SchBasePoint endPointObj = pointService.getById(endPoint); // 释放点位 if (ObjectUtil.isNotEmpty(endPoint)) { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXMLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXMLTask.java index 72dbd36..c0fb8ac 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXMLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXMLTask.java @@ -11,9 +11,14 @@ import org.nl.common.utils.CodeUtil; import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.dao.Param; -import org.nl.wms.ext.service.dto.to.BaseResponse; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.database.material.service.IMdBaseMaterialService; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; +import org.nl.wms.pdm.solidifyplan.service.IPdmBdSolidifyPlanService; +import org.nl.wms.pdm.track.service.IPdmBdProductionProcessTrackingService; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.point.service.ISchBasePointService; @@ -45,7 +50,7 @@ import java.util.stream.Collectors; @Slf4j @Component("TBXMLTask") public class TBXMLTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "TBXMLTask"; + private static final String TASK_CONFIG_CODE = "TBXMLTask"; @Autowired private ISchBaseTaskService taskService; @Autowired @@ -62,6 +67,12 @@ public class TBXMLTask extends AbstractTask { private IPdmBdWorkorderService workorderService; @Autowired private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + private IMdBaseMaterialService materialService; + @Autowired + private IPdmBdSolidifyPlanService solidifyPlanService; + @Autowired + private IPdmBdProductionProcessTrackingService processTrackingService; /** * hint: 涂板线任务先发到等待点,接着二次请求获取真正的点位。 @@ -76,7 +87,7 @@ public class TBXMLTask extends AbstractTask { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - TaskUtils.setUpdateByAcs(task); // 修改修改者 + TaskUtils.setUpdateByAcs(task); List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) .collect(Collectors.toList()); // 找终点 @@ -131,7 +142,7 @@ public class TBXMLTask extends AbstractTask { task.setTask_status(TaskStatus.CREATED.getCode()); task.setRemark(""); task.setVehicle_code(vehicleCode); - TaskUtils.setUpdateByAcs(task); // 修改修改者 + TaskUtils.setUpdateByAcs(task); taskService.save(task); // point.setIng_task_code(task.getTask_code()); @@ -142,7 +153,6 @@ public class TBXMLTask extends AbstractTask { /** * 在固化室找一个等待点 * hint: 需要校验存放类型 - * todo: 目前不考虑固化方案 * * @param nextRegionStr * @param jsonObject @@ -155,30 +165,48 @@ public class TBXMLTask extends AbstractTask { throw new BadRequestException("当前设备暂无工单"); } PdmBdWorkorder workorder = workorderService.getByCode(workorderCode); - // todo: 获取载具类型 + // 获取载具类型 String vehicle_type = workorder.getVehicle_type(); - Param curingPlan = paramService.findByCode("CuringPlan");// 获取固化方案 + // 获取物料 + MdBaseMaterial material = materialService.getById(workorder.getMaterial_id()); + // 获取固化方案 + Param curingPlan = paramService.findByCode("CuringPlan"); List points = new ArrayList<>(); if (curingPlan.getValue().equals(GeneralDefinition.NOT_MIXING)) { // 不可混料-需要根据工单上物料的信息 // 1 获取含有该物料并且没满的固化室。 points = tbxMapper.getNotFullByMaterial(nextRegionStr, vehicle_type, workorder.getMaterial_id()); - if (points.size() == 0) { - // 2 没有对应的固化室,就找新的固化室 - points = tbxMapper.getEmptyPoint(nextRegionStr, vehicle_type); - } } else if (curingPlan.getValue().equals(GeneralDefinition.CAN_MIXING)) { - // 可混料 - points = tbxMapper.getCanMiningPoint(nextRegionStr, vehicle_type); + // 可混料, 要与物料工艺号相同 + // 1 获取同工艺号的位置 + points = tbxMapper.getCanMiningPoint(nextRegionStr, vehicle_type, material.getTechnique_num()); } else { - // todo:自定义混料 + // 自定义混料 + // 获取自定义混料对应的plan_code(计划编码) + Param currentMaterials = paramService.getOne(new LambdaQueryWrapper().eq(Param::getCode, "CurrentMaterials")); + // 获取plan_code对应的物料数组 + List details = solidifyPlanService.details(currentMaterials.getValue()); + // 判断是否在自定义配方内 + if (details.contains(material.getMaterial_id())) { + // 1 寻找可存放的固化室 + points = tbxMapper.getSamePlanPoint(nextRegionStr, details, vehicle_type); + if (points.size() == 0) { + // 2 没找到需要找个相同物料可用的位置 + // hint: 获取含有该物料并且没满的固化室。 + points = tbxMapper.getNotFullByMaterial(nextRegionStr, vehicle_type, workorder.getMaterial_id()); + } + } + } + // 2 没有对应的固化室、没有同工艺号的固化室、没有计划方案对应的固化室,就找新的固化室 + if (points.size() == 0) { + points = tbxMapper.getEmptyPoint(nextRegionStr, vehicle_type); } return points.size() > 0 ? points.get(0) : null; } @Override protected void updateStatus(String task_code, TaskStatus status) { -// 校验任务 + // 校验任务 SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); @@ -187,16 +215,16 @@ public class TBXMLTask extends AbstractTask { throw new BadRequestException("该任务已取消!"); } // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + if (status.equals(TaskStatus.EXECUTING)) { taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } - if (status.equals(TaskStatus.FINISHED)) { // 完成 + if (status.equals(TaskStatus.FINISHED)) { this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } - if (status.equals(TaskStatus.CANCELED)) { // 取消 + if (status.equals(TaskStatus.CANCELED)) { this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } } @@ -226,26 +254,28 @@ public class TBXMLTask extends AbstractTask { @Override public String setGroupPlate(JSONObject param) { + // hint: 数量是根据物料上的标准数量 // 获取工单 PdmBdWorkorder orderObject = workorderService.getDeviceDockingProductionTask(param.getString("device_code")); if (ObjectUtil.isEmpty(orderObject)) { throw new BadRequestException("设备:[" + param.getString("device_code") + "]工单不存在!"); } String vehicleCode = param.getString("vehicle_code"); - if (ObjectUtil.isEmpty(vehicleCode)) { // 如果不是立即创建,就需要再此生成 + // 如果不是立即创建,就需要再此生成 + if (ObjectUtil.isEmpty(vehicleCode)) { vehicleCode = CodeUtil.getNewCode("VEHICLE_CODE"); } + MdBaseMaterial materialObj = materialService.getById(orderObject.getMaterial_id()); SchBaseVehiclematerialgroup vehicleGroupInfo = vehiclematerialgroupService.getVehicleGroupInfo(vehicleCode, orderObject.getVehicle_type(), GroupBindMaterialStatusEnum.BOUND.getValue()); if (ObjectUtil.isNotEmpty(vehicleGroupInfo)) { throw new BadRequestException("载具号:" + vehicleCode + "-载具类型:" + orderObject.getVehicle_type() + "组盘信息已存在"); } + Integer qty = param.getInteger("qty"); // 获取当前位置 SchBasePoint basePoint = pointService.getById(param.getString("device_code")); SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr()); - // 解绑同载具的信息 -// vehiclematerialgroupService.unBindingSameVehicleMaterial(vehicleCode, vehicleType); // 要把数据存到组盘表 groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(orderObject) ? orderObject.getMaterial_id() @@ -256,19 +286,28 @@ public class TBXMLTask extends AbstractTask { groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(orderObject) ? orderObject.getWorkorder_code() : ""); + groupEntity.setMaterial_qty(ObjectUtil.isNotEmpty(qty) && qty > 0 + ? qty + : Integer.valueOf(materialObj.getStandard_qty())); groupEntity.setCreate_id(GeneralDefinition.ACS_ID); groupEntity.setCreate_name(GeneralDefinition.ACS_NAME); groupEntity.setCreate_time(DateUtil.now()); groupEntity.setVehicle_code(vehicleCode); groupEntity.setVehicle_type(orderObject.getVehicle_type()); - groupEntity.setPoint_code(basePoint.getPoint_code()); // 对接位 + groupEntity.setPoint_code(basePoint.getPoint_code()); groupEntity.setPoint_name(basePoint.getPoint_name()); groupEntity.setSource_vehicle_code(basePoint.getPoint_code()); groupEntity.setMove_way(basePoint.getPoint_code()); - groupEntity.setPcsn(DateUtil.format(DateUtil.date(), "yyyyMMdd")); // 批次号使用自己定义的 + // hint: 批次号:涂板线设备+物料+班组+日期 + StringBuilder pcsn = new StringBuilder(); + pcsn.append(orderObject.getPoint_code()) + .append(orderObject.getMaterial_code()) + .append(orderObject.getTeam()) + .append(DateUtil.format(DateUtil.date(), "yyyyMMdd")); + groupEntity.setPcsn(pcsn.toString()); groupEntity.setInstorage_time(DateUtil.now()); - groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 - groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 + groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); + groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); groupEntity.setIs_delete(false); groupEntity.setIs_full(true); vehiclematerialgroupService.saveOrUpdate(groupEntity); @@ -277,16 +316,19 @@ public class TBXMLTask extends AbstractTask { } public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { - String endPoint = taskObj.getPoint_code2(); // 获取终点 + String endPoint = taskObj.getPoint_code2(); SchBasePoint endPointObj = pointService.getById(endPoint); if (ObjectUtil.isNotEmpty(endPointObj)) { SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(taskObj.getGroup_id()); TaskUtils.setGroupUpdateByType(vehiclematerialgroup, taskFinishedType); - vehiclematerialgroup.setTask_code(taskObj.getTask_code()); // 当前任务 - vehiclematerialgroup.setBuss_move_id(taskObj.getTask_code()); // 设置链路id,使用任务编码 + vehiclematerialgroup.setTask_code(taskObj.getTask_code()); + // 设置链路id,使用任务编码 + vehiclematerialgroup.setBuss_move_id(taskObj.getTask_code()); vehiclematerialgroup.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); - vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code()); vehiclematerialgroup.setPoint_name(endPointObj.getPoint_name()); + // 设置链路id,使用任务编码 + vehiclematerialgroup.setBuss_move_id(taskObj.getTask_code()); vehiclematerialgroup.setMove_way(vehiclematerialgroup.getMove_way() + " -> " + endPointObj.getPoint_code()); vehiclematerialgroupService.updateById(vehiclematerialgroup); // 终点解锁 @@ -298,19 +340,26 @@ public class TBXMLTask extends AbstractTask { endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); pointService.updateById(endPointObj); // 插入生产过程跟踪表 -// PdmBdProductionProcessTracking processTracking = new PdmBdProductionProcessTracking(); -// processTracking.setBuss_move_id(vehiclematerialgroup.getBuss_move_id()); -// processTracking.setProcess_action("压制送料入双层缓存线"); -// processTracking.setProcess_location(endPoint); -// processTracking.setRecord_time(DateUtil.now()); -// processTrackingService.create(processTracking); - // 工单统计实际数量 -// Integer materialQty = vehiclematerialgroup.getMaterial_qty(); -// PdmBdWorkorder bdWorkorder = workorderService.getByCode(vehiclematerialgroup.getWorkorder_code()); -// BigDecimal realQty = bdWorkorder.getReal_qty(); -// bdWorkorder.setReal_qty(NumberUtil.add(realQty, materialQty)); -// TaskUtils.setWorkOrderUpdateByType(bdWorkorder, taskFinishedType); -// workorderService.updateById(bdWorkorder); + PdmBdProductionProcessTracking processTracking = new PdmBdProductionProcessTracking(); + processTracking.setBuss_move_id(vehiclematerialgroup.getBuss_move_id()); + processTracking.setProcess_action("涂板线送到固化室"); + processTracking.setProcess_location(endPoint); + processTracking.setRecord_time(DateUtil.now()); + processTrackingService.create(processTracking); + // todo: 如果是最后一个就申请固化 + SchBasePoint one = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getParent_point_code, endPointObj.getParent_point_code()) + .eq(SchBasePoint::getPoint_type, PointTypeConstant.DOCKING_POINT) + .eq(SchBasePoint::getIs_used, true) + .orderByDesc(SchBasePoint::getIn_order_seq), false); + if (one.getPoint_code().equals(endPointObj.getPoint_code())) { + SchBasePoint ghs = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, endPointObj.getParent_point_code()) + .eq(SchBasePoint::getPoint_type, PointTypeConstant.DEVICE_POINT), false); + ghs.setPoint_status(PointStatusEnum.SOLIDIFY.getCode()); + PointUtils.setUpdateByType(ghs, taskFinishedType); + pointService.updateById(ghs); + } } // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); @@ -321,17 +370,11 @@ public class TBXMLTask extends AbstractTask { } public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // todo: 最后一个位置完成放货需要请求固化,将设备设置为固化状 // 获取参数 -// String waitPoint = taskObj.getNext_wait_point(); // 获取等待点 - String endPoint = taskObj.getPoint_code2(); // 获取终点 -// SchBasePoint waitPointObj = pointService.getById(waitPoint); + String endPoint = taskObj.getPoint_code2(); SchBasePoint endPointObj = pointService.getById(endPoint); - // 等待点解锁 不锁 -// if (ObjectUtil.isNotEmpty(waitPointObj)) { -// waitPointObj.setIng_task_code(""); -// PointUtils.setUpdateByType(waitPointObj, taskFinishedType); -// pointService.updateById(waitPointObj); -// } + // hint: 等待点解锁 不锁 // 终点解锁 if (ObjectUtil.isNotEmpty(endPointObj)) { endPointObj.setIng_task_code(""); @@ -360,6 +403,9 @@ public class TBXMLTask extends AbstractTask { if (ObjectUtil.isEmpty(waitPoint)) { throw new BadRequestException("找不到任务:[" + task_id + "]等待点!"); } + if (ObjectUtil.isNotEmpty(task.getPoint_code2())) { + throw new BadRequestException("任务:[" + task_id + "]已请求过!"); + } // 根据任务上等待点的位置获取准确的固化室位置。 // mark: 不考虑前空中间有货后空的问题 SchBasePoint ghsInPoint = pointService.getById(waitPoint); @@ -367,15 +413,18 @@ public class TBXMLTask extends AbstractTask { .eq(SchBasePoint::getParent_point_code, ghsInPoint.getParent_point_code()) .eq(SchBasePoint::getPoint_type, PointTypeConstant.DOCKING_POINT) .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) - .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + // 当前执行的任务为空或者NULL,有数据表示锁住 + .and(la -> la.isNull(SchBasePoint::getIng_task_code) .or() .eq(SchBasePoint::getIng_task_code, "")) .eq(SchBasePoint::getIs_used, true) .orderByAsc(SchBasePoint::getIn_order_seq)); - if (pointList.size() == 0) { // hint: 如果满了,是否可以考虑转到其他固化室等待点 + // hint: 如果满了,是否可以考虑转到其他固化室等待点 + if (pointList.size() == 0) { throw new BadRequestException("找不到对应的固化室"); } - SchBasePoint point = pointList.get(0); // 获取第一条 + // 获取第一条 + SchBasePoint point = pointList.get(0); // 锁住货位点 PointUtils.setUpdateByAcs(point); point.setIng_task_code(task.getTask_code()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXQKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXQKTask.java index 667760c..fcdc6ff 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXQKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/TBXQKTask.java @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; -import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.ext.acs.service.dto.to.BaseResponse; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.task.service.ISchBaseTaskService; @@ -37,7 +37,7 @@ import java.util.stream.Collectors; @Slf4j @Component(value = "TBXQKTask") public class TBXQKTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "TBXQKTask"; + private static final String TASK_CONFIG_CODE = "TBXQKTask"; @Autowired private ISchBasePointService pointService; @Autowired @@ -54,7 +54,7 @@ public class TBXQKTask extends AbstractTask { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - TaskUtils.setUpdateByAcs(task); // 修改修改者 + TaskUtils.setUpdateByAcs(task); List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) .collect(Collectors.toList()); // 找起点 @@ -120,16 +120,19 @@ public class TBXQKTask extends AbstractTask { /** * 业务过程:到指定的区域获取空架 - * @param startRegionStr - * @param requestParam - * @return + * @param startRegionStr 区域 + * @param requestParam 请求的参数 + * @return 点位 */ private SchBasePoint findStartPoint(List startRegionStr, JSONObject requestParam) { LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); - lam.in(SchBasePoint::getRegion_code, startRegionStr) // hint: 默认一直都有载具 - .eq(SchBasePoint::getPoint_type, GeneralDefinition.EXIT) // 点位类型是拆盘机出口 + // hint: 默认一直都有载具 + lam.in(SchBasePoint::getRegion_code, startRegionStr) + // 点位类型是拆盘机出口 + .eq(SchBasePoint::getPoint_type, GeneralDefinition.EXIT) .eq(SchBasePoint::getCan_vehicle_type, requestParam.getString("vehicle_type")) - .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + // 当前执行的任务为空或者NULL,有数据表示锁住 + .and(la -> la.isNull(SchBasePoint::getIng_task_code) .or() .eq(SchBasePoint::getIng_task_code, "")) .eq(SchBasePoint::getBlock_num, "1") @@ -150,16 +153,16 @@ public class TBXQKTask extends AbstractTask { throw new BadRequestException("该任务已取消!"); } // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + if (status.equals(TaskStatus.EXECUTING)) { taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } - if (status.equals(TaskStatus.FINISHED)) { // 完成 + if (status.equals(TaskStatus.FINISHED)) { this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } - if (status.equals(TaskStatus.CANCELED)) { // 取消 + if (status.equals(TaskStatus.CANCELED)) { this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } } @@ -184,8 +187,8 @@ public class TBXQKTask extends AbstractTask { public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { // 获取参数 - String startPoint = taskObj.getPoint_code1(); // 获取起点 - String endPoint = taskObj.getPoint_code2(); // 获取起点 + String startPoint = taskObj.getPoint_code1(); + String endPoint = taskObj.getPoint_code2(); SchBasePoint startPointObj = pointService.selectByIdLock(startPoint); SchBasePoint endPointObj = pointService.selectByIdLock(endPoint); // 起点清空 @@ -209,7 +212,7 @@ public class TBXQKTask extends AbstractTask { public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { // 获取参数 - String startPoint = taskObj.getPoint_code1(); // 获取起点 + String startPoint = taskObj.getPoint_code1(); SchBasePoint startPointObj = pointService.getById(startPoint); // 起点解锁 if (ObjectUtil.isNotEmpty(startPointObj)) { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.java index 4eb575f..9d74607 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.java @@ -11,26 +11,36 @@ import java.util.List; */ public interface TBXMapper { /** - * 随机找可用的固化室 - * @param regionCode - * @param vehicleType - * @return + * 随机找可用的固化室, 要与物料工艺号相同 + * @param regionCode 区域 + * @param vehicleType 载具类型 + * @return 点位数据 */ - List getCanMiningPoint(List regionCode, String vehicleType); + List getCanMiningPoint(List regionCode, String vehicleType, String technique_num); /** * 获取固化中没满可用的固化室 - * @param nextRegionStr - * @param materialId - * @return + * @param nextRegionStr 区域 + * @param vehicleType 载具类型 + * @param materialId 物料标识 + * @return 点位数据 */ List getNotFullByMaterial(List nextRegionStr, String vehicleType, String materialId); /** * 获取空的固化室 - * @param nextRegionStr - * @param vehicleType - * @return + * @param nextRegionStr 区域 + * @param vehicleType 载具类型 + * @return 点位数据 */ List getEmptyPoint(List nextRegionStr, String vehicleType); + + /** + * 获取方案内的点位 + * @param nextRegionStr 区域 + * @param details 包含的物料id + * @param vehicleType 载具类型 + * @return 点位数据 + */ + List getSamePlanPoint(List nextRegionStr, List details, String vehicleType); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.xml index 3045206..667f848 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/tbx/mapper/TBXMapper.xml @@ -12,13 +12,21 @@ p.point_type = '1' AND p.point_status = '3' AND ( - SELECT COUNT(*) FROM sch_base_point p2 WHERE p2.parent_point_code = p.point_code AND p2.point_type = '2' AND p2.point_status = '2' - ) + ( - SELECT COUNT(*) - FROM sch_base_task t - WHERE t.next_wait_point = p3.point_code AND t.task_status IN ('1', '2', '3', '4') - ) (SELECT COUNT(*) FROM sch_base_point p4 WHERE p4.parent_point_code = p3.parent_point_code AND p4.point_type = '2') - AND p.region_code IN + SELECT COUNT(*) FROM sch_base_point p2 WHERE p2.parent_point_code = p.point_code AND p2.point_type = '2' + AND p2.point_status = '2' + ) + ( + SELECT COUNT(*) + FROM sch_base_task t + WHERE t.next_wait_point = p3.point_code AND t.task_status IN ('1', '2', '3', '4') + ) (SELECT COUNT(*) FROM sch_base_point p4 WHERE p4.parent_point_code = p3.parent_point_code + AND p4.point_type = '2' AND p4.is_used = TRUE) + AND #{technique_num} IN ( + SELECT mm.technique_num FROM sch_base_point p2 + LEFT JOIN sch_base_vehiclematerialgroup vg ON vg.vehicle_code = p2.vehicle_code AND vg.vehicle_type = + p2.vehicle_type AND vg.is_delete = '0' AND vg.group_bind_material_status = '2' + LEFT JOIN md_base_material mm ON mm.material_id = vg.material_id + WHERE p2.parent_point_code = p.point_code AND p2.point_type = '2' AND p2.point_status = '2') + AND p.region_code IN #{code} @@ -44,10 +52,13 @@ p.point_type = '1' AND p.point_status = '3' AND ( - SELECT COUNT(*) FROM sch_base_point p2 WHERE p2.parent_point_code = p.point_code AND p2.point_type = '2' AND p2.point_status = '2' - ) + ( - SELECT COUNT(*) FROM sch_base_task t WHERE t.next_wait_point = p3.point_code AND t.task_status IN ('1', '2', '3', '4') - ) (SELECT COUNT(*) FROM sch_base_point p4 WHERE p4.parent_point_code = p3.parent_point_code AND p4.point_type = '2') + SELECT COUNT(*) FROM sch_base_point p2 WHERE p2.parent_point_code = p.point_code + AND p2.point_type = '2' AND p2.point_status = '2' + ) + ( + SELECT COUNT(*) FROM sch_base_task t WHERE t.next_wait_point = p3.point_code + AND t.task_status IN ('1', '2', '3', '4') + ) (SELECT COUNT(*) FROM sch_base_point p4 WHERE p4.parent_point_code = p3.parent_point_code + AND p4.point_type = '2' AND p4.is_used = TRUE) AND #{materialId} IN ( SELECT vg.material_id FROM sch_base_point p2 LEFT JOIN sch_base_vehiclematerialgroup vg ON vg.vehicle_code = p2.vehicle_code AND vg.vehicle_type = @@ -76,7 +87,7 @@ FROM `sch_base_point` p LEFT JOIN sch_base_point p3 ON p.point_code = p3.parent_point_code AND p3.point_type = '4' - AND (p3.ing_task_code = '' OR p3.ing_task_code IS NULL) -- 没有被锁住 + AND (p3.ing_task_code = '' OR p3.ing_task_code IS NULL) WHERE p.point_type = '1' AND p.point_status = '3' AND 0 = ( @@ -105,4 +116,59 @@ + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java index f451f70..4db80ac 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java @@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.utils.SecurityUtils; import org.nl.config.SpringContextHolder; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.task.service.ISchBaseTaskService; import org.nl.wms.sch.task.service.dao.SchBaseTask; @@ -200,11 +200,14 @@ public class TaskUtils { * @return */ public static int convertMultiply(String needFullNumberStr) { - String[] parts = needFullNumberStr.split("\\*"); // 使用 "*" 来分割字符串 + // 使用 "*" 来分割字符串 + String[] parts = needFullNumberStr.split("\\*"); int result = 1; // 初始化结果为1 for (String part : parts) { - int number = Integer.parseInt(part); // 将字符串部分解析为整数 - result *= number; // 将解析的整数与结果相乘 + // 将字符串部分解析为整数 + int number = Integer.parseInt(part); + // 将解析的整数与结果相乘 + result *= number; } return result; } diff --git a/lms/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java b/lms/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java index 9d7fb11..eb8a201 100644 --- a/lms/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java +++ b/lms/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java @@ -28,8 +28,9 @@ public class ApplicationTest { } @Test void yzMapperTest() { -// List pointForYZSL = yzMapper.findPointForYZSL(new JSONObject( -// MapOf.of("regionCode", "HCSSX", "pointType", "1"))); -// System.out.println(pointForYZSL); + JSONObject res = new JSONObject(); + res.put("UserID", "admin"); + res.put("UserPassword", "admin"); + System.out.println(JSONObject.toJSONString(res)); } } diff --git a/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java b/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java index f6bdd01..86eeda8 100644 --- a/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java +++ b/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java @@ -3,10 +3,13 @@ package org.nl.point; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.junit.jupiter.api.Test; +import org.nl.system.service.param.dao.Param; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.region.service.ISchBaseRegionService; +import org.nl.wms.sch.task_manage.GeneralDefinition; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; @@ -312,30 +315,26 @@ public class PointCreate { } pointService.saveBatch(pointList); } - // 暂存区 9*18 + // 暂存区 9*18 7*12 @Test - void testZCQLeft() { + void testZCQLeftAndRight() { List pointList = new ArrayList<>(); - for (int i = 1; i <= 18; i++) { - for (int j = 1; j <= 9; j++) { + for (int i = 19; i <= 30; i++) { + for (int j = 1; j <= 7; j++) { SchBasePoint point = new SchBasePoint(); - if (i < 10) { - point.setPoint_code("0" + i + "-0" + j + "-01"); - point.setPoint_name("0" + i + "排0" + j + "列01层"); - } else { - point.setPoint_code(i + "-0" + j + "-01"); - point.setPoint_name(i + "排0" + j + "列01层"); - } + point.setPoint_code(i + "-0" + j + "-01"); + point.setPoint_name(i + "排0" + j + "列01层"); point.setRegion_code("ZC"); point.setRegion_name("暂存区域"); point.setRow_num(i); point.setCol_num(j); point.setOut_order_seq(j); - point.setIn_order_seq(9 - j + 1); + point.setIn_order_seq(7 - j + 1); point.setPoint_status("1"); point.setParent_point_code(point.getPoint_code()); point.setIs_has_workder(false); point.setIs_auto(true); + point.setWorkshop_code("A1"); point.setCreate_id("1"); point.setCreate_name("管理员"); point.setCreate_time(DateUtil.now()); @@ -360,4 +359,22 @@ public class PointCreate { res.put("MonthlyWorkOrder", array); System.out.println(res); } + + @Test + void testsout() { + Param param = new Param(); + param.setValue(GeneralDefinition.CUSTOM_MIXING); + System.out.println(param.getValue()); + // 修改物料策略 + param.setValue("ewer"); + System.out.println(param.getValue()); + } + + @Test + void testPoint() { + // 如果多条,返回第一条 + SchBasePoint ghs14 = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, "GHS14"), false); + System.out.println(ghs14); + } } diff --git a/lms/nladmin-ui/src/assets/images/LOGO_副本.png b/lms/nladmin-ui/src/assets/images/LOGO_副本.png new file mode 100644 index 0000000000000000000000000000000000000000..c72024e2e1416eb2b377054c7a666b93ab36291e GIT binary patch literal 29020 zcmagFWl$Vl*ENg=7(6gYa7b{5AVGp#xDwn+7$i8sJvf6qA-G#`_Ze&kcXxMpcX+v< z`u=}ET26OYSJ&RF)>(U<-J!~gvbcbE03;+N+^_#ht0EyGYrmfRV7__X7gx`_zaEes zRb?fS%7-cUUI%Dq5(*MXNLA6;k3Z30$5?j%eRo7cBKh#Y4f(6;`%@$&yR)y-66(M8 zj#@CZ)xOW%96hwO+&G9`49-?I?ByEGRFQT{Y7k1xRFW#QhqSO6XsKHGH_Q0OtW ztJnaloqoQ)yy=2>)1NCh`iH;$$2>gf6?D?ZPFrzSPygX%_vYZXC&( z&j)CdC`KBm^CX@Xaxu2qu2N?RLyFH`^qa(Bu?V;}d{RXaJo3bllSt8Gy7LF)Nx}|! z>b)+*rX3xYPrg2<#FD$le(S3b|WvV;)^&_;19oN!6k%Ic1 z<2tqm2*6(Qfd}}GtJ|eGpdc}nVScsMa|67^w0uODGCA1xiGg9KhaIvNrV2D>V)e)V z$7k*)ePR1dy=urqT8`Jfx({Bk^Ct5TuW7V%kq-19!~t#Zw_hF7An)iX7%3aT zQ0(nwxG;u`irYVof!T-IUal)}NMpI6!YL?P1O2P_J!FfN-K&p}JZ*P_ZCmZcP#8|z zofZ(9Q49ccYN6X4kKhhPYZ}1(RG{?ae(wtL(k}85A6oee;j$MezbJ-n6xz0;+NU~+ zp&5l=1yZ*WUB5t!%^HyK3dS|76jV|nj2ZnGX1hCr$&F6pwXi@tnL^eyDQ>X%R3H(z zqdCpL#|N>u!%S+c4nHx=Nw~oZFaHV9C_ut9{V6P2)8Ibu)1rf3@8N+tpXXK|%dwo$ z>Kpy~fd$+G1rco@dME|j?q&T3LVX7s=%7CU(B(o4fhLsU6*0iD7&57rLdP7??l}cz zMyPxB{&WOs$5KIU1gx?JkXZv5;-$qBgH)!rns`!Pl&R)}SYFN?JMMnsfNaP?E0|hL zQg$LLuerl*>(U^ytCxp_%LeKAa4!nr4P!{z*{edAi&()Gs!%SU549)*K>Q+`DrRsM zbDDpA8?Z}VV67M@ z5K5T@;HSaZ$@C2$BLLHo`ya@@!s3zAt}6ALh@v{7BcKQPEr`bk2c(Rg=&1(zt^KnY zFr>)xayNpulS>C(w1aK`V(6GkJ%~*SsOh^i#Q`n%uWoap59*3! zvvyyezjipy3x3ScVW?cS%QNfTCzeMDO0M}yf6V@b#iSZ^d)9oe{~TslMGF=s0G)s% z3CinH%9Vb-9cFC5`?|JX0$5z+PV*rKfsh-naoQqD?Of2)Mo>Ve0SC#ih#CPy-NZ=2 z)bcVw?W9iQ{|k1Q%vu^ji0^C0R@4QMxf4&K%%3e4CXWAY!!>|5qU0bvNE!oZ2UCkv zx}0-{C@9Oz#TSd}7=+N&-6xRcHW(KT%>aB9vTqfOgAgl6Xjo`DKC_TE(4K0Z!v} z1wRwQOu>JKHp@b&+&s8Q%GZs z%Be%ZVzA*_CW3O?Vt-+{mHu^fcy@k_HNbcUZPEwSo#Hz$ZcJmW4}+pP9buV|^xBDN zQVCGJa-8F9aKEZUK51x20tXj!u%KC6?;XBYu&P_J`V+Am)ryoqW)_d$*Pi=W0&Khk zE)u)HIZ8Wn&IFavl?l#}*4h?h^ZS@QG4>!NjJ8+1Y12f=9WSJ2z$U#$=+(IUs5=a# z6q1hO9-RcW1;0>+gXjt?UfF1cIAW{jf0?rxBiIk|#g39AlZ@r)2>qha78>VE#HZ#9 zein1Qy@sCi8`&8#r{QBp26oFkvdu`8la>{L9p_0MMkdjmyyy6?YhENSp5$bg)NGCB$6WEdN}d~SO` zP#*M7O8|t4tU%oUL0h~l`?FoU5kRt8K!A|9lfNL&r`Xy!by7DxDSKda`L9QWe`@A|;IKX*atI8)Lz~2aoJJ2sQ_>{jtNq!DIZBFU5Y(F|B5uqO z*retG+JJ^dgAbcvc6Wt%R|cvrx+UzT;4$+FbxmGD%m6t&dZq+6UqNLRF5vehV*#!W zbJBmFKUuA#*j~Uyc8-p%q1q{^^foa(DL&<2a)KPvW$;Ir#m!eWHJXKf^K?8?7_JY)mLd;Vq##Y8G>`lgI;?8dmP4FcWl&ZbgxT~J(>xcY?bCcRo2VD5ya~cx6t)r2~ zSbjNR+2^?N+a(MD-4;vk#9EUd2+p|zBCEKeXK5l~r*gyiuW9>lCZ%Zf3^P4-o;QvG z1Oj=Fk)kxV;z-QIa6zj=tYRMLnr^}$3@+2hQRDD>|BcAyr3BD7$X%_Rw!l}O&Mod%P!VD6EQ1N zd|RX}v^DoxSxnGee!G1rSor~EpN9T1;i97}N_j1ACL1SR$$(u6j1xjx!D6WzRL-fk zwoRx^Log?cOsb@j?Oe)QjCi+DH}03B$}8;>$0)8yoG72-#EP<=1;`E+`a*uHrj%q{ z%o=5_#D=SoJ;bHJ@H$I~8$YxwUFvtzuam%X?+To=o&D|I6%;&tuY-0;0YGFayN%su z%o)c?{{0%9$RYJj!A&9pNv~}61PTzww)jpCU-4fCkjp$Nrmk%ra$VOQ!|J1~d4vXJ zyQFxMr`~capsqMDHdZn=xVJC9i*S2_2v%%hwew$g&if9mWM3k&WKE{H?s#Ok24z8A zEMSklBW<k*BT379t%A8QBH z(0OKIzLw|(;yQg><%hM{~u~L2#Pfv)YV~SuT-X8th$Q~d`Fc=sXCfK_!z1E4tB|`=m&FAI% zvOx50q8KrhXQcDikT5(%YjfbwDt)a>ZMj2iyMXn^m>!`r;YT!nJi-e=)yGNONiFhs zvELD)nW@q9KxH^V427EF7fhf6`SI`1H1y~14*_C@(O~wFA_~ez(GqNaG0CS@Pv9t& zx%Q32V^CBPi#i0j{;lF{G?B74tM>OcuYkheG;!8{hA|B4hiK}X#QdVWw9xNklnCHgA5BQD0)^I6Cq{!_pbFX25Fj3B`E1~ z$NXv@3f*y9JSaB8b$NzF=gcswptipC^w~~h+eZ^QY?a0?72XB=Xbl&=X zaZ3#>x0rc)|V*4m<#b4GX?qui9(u5rFZ@jy{@m|FUAwl z60uuc{eawPiQeNJpaIHAA|Qk~2&oA|c-su^8MZ@cfufE@!{u)uCkeR&h=l(wspM&x zh?nckpq)2Q;=e*pDzeV7fX$(JJ7aE%zSg_;4)&(t2@=v;1aPAM&dz$kgB&UKrIWRT zifx4LP&Gh_mw*28qmYj@$yc>($KB1M9K7~=?bt~rK@#N1#DQ?S-T6;w{85I#GAyFD zglEv`eew~J6=w3_EnPN_f7vKu;xZ`a4miLF#tb4wMWmw9DYVt#C}q_`aTQ}aDdQ?4 zaUAQ~w8^|HmAo>#A5>cNuOP-7n@37*|G$sz40Zd+Tn|Lpzad4oc6XDNrHBFevW!-R zB&m^L!$t}#xHY_i(u$u^ek##EW|8$rhJ=QvhUMe93b$|dji&q)9pJ*+6dt?!9;-|d zau{5-NKelP34whMc}xcI%ZeDS1N>{-Sv%uNR5P^EnEbW@|6zY28VoHeLisNn#T=yW zX&fNl*X!4ZMa2|G+`BgOhhJo#TBDT<-G+VmtF^L^z!*@Fz-=;&gZ5WPD2Q?ZgmfxV zF((68$0(nPxJp_yqvRDe>fI>BRs2o3Mv+Jn(J>p^OSwylnaHH(5ZG%^4;Gd7d6ie9 z!{w);+r-&!GSZ%u^cW5xflZ^5up}k6%I?nij87I^3M{nkK*jeO?-&0hrLg)25zrg5 zRvQ3bQCR4UMa$`K*b_>Retyp}@O8+Qu_K~@FMxA5^Hie~au#~aWtKLp+6EMQRo`0I4DC+Dz*hx{BieS1eTGCOa>5edZHZwF3|CJLf{Q608Su}leelIPAT&0V zcFR<@R;J`XS_M!97i+%Z8Mg6R2@Y#mca|gzs(tGFwCdg>JHP*s7FN^{%lP_Q$ds}> zV^va*gsp}+WTf2~Jtcw&BAjjQ&5UX3$*+3EPF!}_;=B}+siWXsVMCjFvtK^sztP|O za?Qs!;6%pL(=d&&92Wi8&UW6u6*Pb~Deb|{h4DE!TR0Sq1(ydZMC(9oblmoHI{jS#Ia-a^tBC z+x{uXj7!SkAkiq047f1G(U>5Hl~@akks@Mui0Vi2*J7tv!pJ`IMNnM$3Hlj1b&?dx z+wB>C%)7HNdM8C4JSs{Q9(_$lnX6knsZUNAE7het?0yk`Pzf};1Tej2C;3Q^T}&X;NsP>kQ6}y{(DpA&Kt;K>(15-g0pZZYL9U$A z%fG_PlXA|!us9+-1Ga_mei2-Dk@&Sq35Ub6Omqv zlGqh?$jtVVKIVk=2uQDx2X=z8_yTmpPO;V;7y)}t6DD~j z22KIvc^BWeWWS@CG-hbcM>qa+qN2#%>t3VGb8>CX8A&qF!wBB^kXL}07@v_#{|Rm$ z%F^@3d-^OQpNPp9rT1hc-9H}0NBGS)*gR`}?)dL`4?#U?d@JS+kF<~ydi~lr&Q5Ai zsZoB6Q#Z`b&7O&G9&}K3^T63KqLjj~aP0mYBThCdCZvs=_{<(z7Ak@nvb>fDU|z?p z`Bo2}S^V@Xg2Tmaq}2$FB16%yrvP-ir}$5?o`|zfy6wUyoz_>Q@-7<1AH6u+ z`$9vcUp@}aY?QN#{j}-U)$~pwD0mb=eoP@NdHjgg`evo|#7WPhZ!17&ush3$(7L?W zz4I|5Ouf|=H8Vgzq?f4s<3~z<(k;mlCSo@)dNDN1*7_#QI#UNj(1xMd76IYYdu6W( z&XE;gCtCxZgvr@sJ*s%cxL@(R!RME<{YLNPv0= zN#t(3i6`^EHG@EFvBhD1pCq@o@g?8s+gjvk()g38?Y9Px?L?b%c4n;8VGiu&xP?XYN`KE@wf&hIs0n>l{*PTiTqn!NB3REA5_|Z%rQzgs$_rx9m0B zzO2pgyt!=oJPJc}N5yHOKNn08%gz#e`aeaE6pY7>DXl$>@T}N)Jg*;-d~@GEI8v%v zsnBuN+Ea9-4^SZiOO0+28o?Ye2)!=zjom)qg4ZUdCrND^iV!zh4)|SXeW-ZU;@}QsfFIUx9W2**IR_lt=GE5-a#e1)~()+P0Mp}RbMb?B6o(ydafVc z#On(mm9(d#$gBO&E4=}_d3sNpH}K`<`2nCaWXpEM3uidJItf4G{XoG;y0aJ&I(w(R zr$n)=t^(wg>oWXuAIvJY;(cYWah4G|*LA=IB(+T`%|rW+z9Q7ja)5#vFdL|{XcRB% z%8kuOBK>&(&p22~uj(Ws=dBOf#at2?yotewnz*^8hu7-yp~X1RD{dVBd^CCdA#I#( zZL0^j>tVWuV;<9}ey~uNkKvDOuk09Kbo*bg0mpOt=p}e&Mw8bbu8DTA!Il|a?Rw`2 zJ*?Rdwvf0|SL6>mnw#;Z>3ZtbgzF_)PN>2anP4!%VX8N;MpZ{jI5mL?B&16b9YNeF z5O7dM_cP_hQ16lN(~bLW{9n}YWfI$T4edrkFEr0cDUXuZy6b~w0Wkhp`{DZRU_Ej= z=9|Z%wWp%@)iNnuKMdCXOmsJo^rFvI1br_+djxJY9NCh_%qtqL!c1g?KYWAVB;tv2 z=%PN4H{T*3(BeObU+DjXW4^<$AnP)f^{rrJ823qiyw;R=>O;r@x>8hF(&hWilb9YCfg!k6`h;|@Kv z_BhTf0PLTD!jAoG9xn1@%Tf8%9RTL7Y<`YBH|iJ5AY)2cDzlk4Fws#*S1 zRf_FVJx8Zd&HMKSt&952Q%p)%9x&c#$Lc{%wRI6yH@MGGYU;>E10I&veVu5w6YvrV z5;?@K^Wwd5DA^)lNi;~8Mmx30UO&?uyxj|X=dxk7ADpZ^%$mOUNvEo$E=svk7^3?h zVcKbJYw-or0HjMfwnMbSKZEsJ+qD$Fi>_#8VyyBJ4X9Z=#vpxn?f&I#@iA9tB0Mqb zxutnIlPmF0cn)q2fTq{Tc9;z>6UU@B1zItmr(fy8eb!!<`BMH$u`Q>4)1oxj zlg1Ly>eiQ@BHoMhfZ!J#X|h*ums?P$NoVFO&7NT zBr^YWahRA`TLrb5hTX%$V1yxWqbW5JL<$j)lTeE*tDA@`OVCF3?M;w?0Qeh$X8HMV zhNHAx&5A3-mWl<4!g5qpfbFa<3eZB2bhXcn#$I5}S|dg8IfqmSp*R!1l$(dd%`^oq zQ*STTJMsz>`lXIIP}SZCxs?;}Sv^h)6h{%@ZY0KEIXgfy|LYvj`nQ|#7QfQ0{f)V+ ze2ejD%Y$3q%@!%m4Dr$FU{BKQSsm829q<-|$uCFd8orY`n?{oHWB+P`T!BgWyGk|{ z0Oes-=6SkZL2V@w5>oUezVrQOF3ab}T_9#D)imWnv;k*`42U3ng>v_|{dthLMFao$ zDiG$}MX43?t*`gk?JtT!{(PSBV0r+In;q`Gp|@^6WV zB%%SmOnHq%3(-Px)xwZ|$!|X$HL6HvmQ?OZ1FU>B-!QdTPrX;#r6@h2*Kb&#yiA1L zev>Jc8x1^ZSk@|a1icYuNyk5UjPB*Uz4o4nyHV2Hw5~>nbp2K~h}BEv0L`zdl;iWl zebCHl904#6oRtSO{*)ZNE2tdmZ4`vU7Pyns!KNS2UOgR$pl644Gb6W+=dM5GRhD?d zE$xR}B3w(}1ha_swHJr6*609pSP?Qys4gm46`~*?d=#DPf9N%=cQz;R zGxRZluGWrOS#k>uG@pkQ)Pq_>MeHl=AT6pW*cn&k6qM2x#NOpH&psNyg4!O+zHiO_ z+GX(IW{WMcD({$?wl>OM1pxhUzn{ z8ufV!4K+D7snv_Ar!AyweqQHX4;aO3D%`uK<#E+P*2B|g-6FYY82oYZTzFH0kTuDj zr)0k`A9}u72_q^c_<;;WQp?`37fmDeQTdy4PhV*_7cj1RiRH-Q`L@veo7?Ds60i+Q zDz!*q23#IypZ&OMWxt~t9PUj(m=Q z!PfBm3{!y%?FU+SgbL0V0O>sI37+*}bDGNM7PZQ4A)B7C902;vv1VW)Jv1rixb0iw zZD}+cU=8QPf~-)NCy<;d0dYCP@AP)xLrhRw9H2( zE=K`0HUL{x`2no5=GF{W0J{ZsH;cq9f!cgNV`y}Ysu1_*s2K~U2TZ= z<*O6)KiR^Cp8@qMXY+F4q=D&FBEGQj{qdOMkN7^>l%I^+0`+vTKYY3rS>l(*wO;qi z_NjPMa$j*f^Y+Sqae8VrJkHi~h+-eO#`h7JG8_(FRv=9~ne)7%II=x0@k`@LaU7f~ zUg$?ORNhWK$2bN$>+k6Ob$XdQdrmbhO}zz^jXFIYQS%tdVQjunYf?cvcsCO{OeP`Y zT?L5j<2!5~*p){;o1y@iv9lOA9sttx7rfL9OFYce#2o8v6 z-p;&y#!UCUqJJ!mKqq(^Bur^0qR?}vhVeD_r5V9_^$6y5WevKHfh#-r!Ue|P*EC0( zCC!7{ft5x9IlIVF`<^X>KVtbuH2bjd{u52hiFmG;RL4EiHu(t*hb_3}S%Nj^`X7&| z?*ji2=sui&Ld&SJ)NA#bwSHloxKXN1qS}1ih>}g@6_+#R?$h>QFCkx%%vkL~wX{LcXSkSC4P?b=0aN9;wQO_2;r0p$Gh3CrXLTc*p;>q;y>1=x{mk;=`zbf^NGW#t1rBX;JC=)$AYq>o6p>7} z?&c-If{!2X*XRy7VnjP4J{nqX(sQH^R4qI7Ex4;eZ%zSVmmYSJcaAUS_f>Va4$aoU z^m)2@VL_kYr@MO=52w*jr$@%O_0p6VTqm5hAMo0(!?kY z2smuI;=y*_XLYDUa$o!7dYsb{BZ`|g6a9;Kc%>fp;*UqK$C{Kc?ikqX*8YxNN%f6c z=0bA&HemnG<*Kt9+WBv^d>MmD0!J}&CzE2`vBj$Mphjons=LsaS;|}gI5pAr{QL+t zD%Edi)|%k1%S`vsYh01-?R2AhvtqbHPQbEv^%|Mva}ndSR%`p1~riu zak~L@S@>p-yC7q!QpPBM^lmU8SB?ODKQ+cl zM=B5WfPZWA_WXEk%IbwFrmt$bKhn2Y8AZWmA#|BFF6{mK-XIH|2|*@P_5Q_;iMl~S z(MZEJH>=`6v(ZUg()0}2m82?S0FmcryMwQ#zEY@5Fnb7Nh?@)#{;R8)7a2sQYE~Mm z0UbY3+-{owz@>|p z==2n#Vc`>$D5)OhyD!^NbHn$BdVdlv9;wbMid<@d70ScW+-Y7l(bA zKr97wuNkic8<0|`EZUuecDhCB5=5~~7?xk_7GYZuPdCN+!N%>GqSfV8TS=4>e;j^t zkd00nMWc7lSm%)9Ea#8a%~F%aFS3KtfV7Zz0u|&_c8gy;!eIp-Yju`an-0)YU89rm zrG24_sxmRtz!uQ~r(2WbDEpc6?%-zKb@l#hu4zVtpU3?jgrd0VT7svJ`xB$~@%|*l zTAkJhb|MfUjlT@UtHsS_S?A;JG=_^Rw1$w~kLPrMjAp_|_xhFkqaSCmWtjzk;|LT! zQ)W13{jt?j;&8uZ=dlAvY?B%_X%fFe3YyiFspj5k>IuGbxHx>ItgIN;{Ye2IPBzQy zTjXN$F(M0@Vkdyl!J}+xPA6I4b~hK3wJp3Io5OdsFe4N@jv5{%Btmo~AO;qL3F<06?6_Cd5+{KOvP;Yov zS$jiHx-gn_289Gm`W9n(*!+RuujUVBxMz((3g@S*b`|&*`yU5%Y^GP^(Z2~igP0X8 zbIH5vPANo5y|&p|_!JxFAbwj{*UdGGFX%`I5B7A}p$_>`3d;B@BwIgwURnc{mJTGz zmNa0UKLcJ^qe6y6n_1b+qT=`c`S31rJqPvn^xkIJ-KYn3$M6=n0Fs;;H6#x}GCi^w2km=lSXZam; z3?_RRf%z>#C{mtdELX8o1jd1)RE3I z5lV0C2RV2kY>rwpg@1LGf?4{GhZ1AOqs3%xp|iF<{^_;mH5gbe*9c)7KZ+RVx$f$j z`krdK?Rb6WK~8(gL<@8B*5aEk=J}`LT14s&i-I@&~Um7t*J##7wMr674xC! zd-**tY_#hk)*E`8K?)_Z8dsI_nYO|YP~Ue-%b$w7>f=CAC}GuX9VX#N3~uV3#dGnh zAry!g>T|Iu=4+XBdUj=)I9}M<)Rs;{ol(k^;7g#YHb!nMZmyEnc&AV0!tm5`k~*b^ zz49AkD_>si!a1mWX*v0p_$>jshkZ*5eK@m>C<#{_Q?qcxVS;I|r~S_STK*c2s~$w(%hlg16D=a!Kv#XVyAOgN1MFkUqzyD;(8nC~4n}7W zjA^JKx&(_$>X0Xk?tCuN4I3)=7WcnxqTX)i7T1TmJ0e#*8(i-zal0Sp$bhqn-aO}e z?mvF%Njm6*n0J8dKa1Q5SK~Ke{8rDL*w;|K$Z%}0tt0JwKsr&6U(N5s@MO*Y0n`%i zkv#9DGZ9QyrgBMbjVKn~#y6JUp~#S-%hZ?`z#;taQO6B;y~pN55TmvA8+tP?q28+< z-I1VdMC)m4QPkK4%y2NJhMym+%}V&-j|WjS15t{5x>Hq>t2;aKaNxMpGkGH8#cbkWOTj^ytbx){H ze7FYS$!UGSPB1I$@q=BMr>XC8f`@}7BXz!Wr~Q3$zFhl~21#K2hT~XSk!untT#|`T zm+W)ZL1V84SEws}HAy6g2Ri+8k?HD=r$IvA_Fda2+isg^?SPpE9V_?6l~-ZT#B#J$ zuEn+(rZ+^_8pc(L$#e6&1CP(01(emThWdqnlSXG1^Ku^} z^U(x;QokD(*hO$Z`93kB)bXY?&M2DnQ!jL@xh`P7lgF#H`REq>t>f#0EU(jwXlb(2 zZ&&xwtiApu#YiR_YE_@+mC<{m$Fkapn~sycQHx{hg+fdGYj}XDx1biBZ??z6gVbzf zj*450El08B@LiNHzogkQz~Dwi{f#17$LYEFMv(_b2@0FO&lI5a9elrKT3k#b`5Rj{t#gP`ciY{L( z+ZW4&C48H55PHMRI~A^;|$W zZniG1olkXXJZ)enx+^3Y4)E(oQ!-ahIxzcGx;`#^wUC|pm+yh2QYku_|D$3r;oCWEiKWA9WTYmk z%GNNpYpou2IPp4|>ae^tk0`ua_`gW|h{QZbOU6rSaTuaF+nQDM6G8Jv4= z3>Pi7_x)c3cQJ;huwR`gWyeo&u))usAe4pn6RuL^kod3<%0*d#Byeb&QF+3$YAJV= z?N_&-v|5}bf;A|qE}m-h;d^ho2OU|P-ufKSAG=d1E$@w+?`LogX?5b6SKTO(#y`Q* zbq>9AWd{&5>3=jm^js&aPp(GFT;R{JyK*h6loPjw*1HTXRt^-s=Shc?0h$=irW$Ya zdbR_PDi0ZP{`uO^kFB~FOPsCNRcsd&-v+3X^#^do&WbypYAN9nTN_F9aX0q+88UMj z$U8gcT~i_k2I06f-hX#wN6Y(%OHWcxI551VQ%;7S6<@uID=iI!nt_DYSpg1CDxCa| z93o>{9*ke(PxJ+HrQg@S$Q(7%U=fPQDx{_*vHVZjz_1=n9Gitfl~BO;z^IiwACC^gWp4c|q47g3;Mh$=8r{TV@^ zO}s^t`j?~4MJYb)CjTAEislF3pd*e6L2Yt^m}mR+)9)kCIH%-j-dnJyg|n@uuE!cR z4T!?SZfd=aDkRMeNOs{_Bm2xvHes(Z`#5aLuze}|INo=jV`vmXM@nqjzlxng7@`X` zY`Tu(zWZrt?6keOM#C-qAyu2FP-DMTg=S;@E$0o`{#U&_R@cF1l6S!cMh-$$fBi=s zgb7DjQib(tfSJtXyFmnQ@`yf8TqET(y{wO5&|5Dd=47#z3~rEF0L&VF6^ zQa`IoSBau1ZL)jz>Q-pL5H^Zm`Qu7pia-?Xrl-Cp-4yoLk4|)e!zu-fJvH2jGfFiQ zudC^6UwVb|VW z^Sp2a^?&(9%lOEgks+3&1i6|9g!h_!0S_PF7*Z5@zI;4b3aZTm$y@h72sn=jmm$`N z>-thG_hp@M={yNU$1JzLpz|5k=`3H6qw6pu>V&CAL|zl-janCd^XV(M~+%k)T{eeg&~n=UHaA@PaS}+VwSKv&%28odC;{ zbPIoDy7=t&{!q&Wqi;0-CM-;755LUhRiv4B?(CsgBZBh0F6DGK^s=_quiZ#6564yV zLRDfKq~20X2k3hI=DL>XE(+M>mnF(DJ+OPSxF$@dP^$6Als#VYA-;aR4caNnxTeYM zh|-(U3mhs!s^+NhN95lMkctGy#=EeK8kPM7b2lGO z5zbl{Ep>77+s9yct`}r6V?r~rJ1GTr5`x3Ly4z&Fj}(X>k7DdkSZOmmT8S;=i^frU zeY!WioI<6;YLHS~c5~PoecEKhh!N`3!g~eRP3Qo|i3rZqmEL{}LTZHAwOQz0*kRVk zyq>Fw8}A~yZs7i=&b0dC~?D9H$)NY0b09` zjlEIRqyGKp-T{us(kLwN1&gLrKHa=4Y4PhRN`9a&Fu@2gW-a%UFjgScW-UBtT2(fn zf&Xq0oiek^&K6Z%+QwDEb{Ys(gx504u2(>+2!D#r^5!n=dQ+xqs^!ZIfbS*Q1P(?0)>=CYSCu^ISVJ z``$!1+A0YyLbQJ`*16&Nc4AI2yF;rPbSQR}`U6x+efrn*m`lTe)5H_(Z=^cOwf>vC z+h>{yawWi5wRK(FR-FYf{`rZqycm(eMmjqgUk<$fkXexRWYLJybP|XPu-fOo@jDkN z8bNw|soF8v+LKR>9uZFKR~1h0&+z!1D4ePGN!3ip=RXK~0!nyB%@t1T%jDGg&A}R7 z13Q1l#oL+U)Im}1R@+gwlGG7L)Qn+AR(HP0h#oTmLScWITVt(2gyK9``B<&EhCw#G zmj9`{OEJ6M0>>>a$#z1di|)vmKW&uG_0=xLYV}?h{LhWsqt|vsn5tj3*;+2v>r32w z&gybOPo!wV4;BNa+e_a#7eC+TY?D$!uIyPn`64IdH(A|!N*4oza}$f;o5+x^gDK`e zubd;eO9s-X*J7@;=y_DTbO;>zeV%!w4XOTAkOt!p2-V3Wa2Nozc=;U^t1`ZZU|i8>^G z2OMI5u$i61$Aaw0hUSv&C6)N8Bh}XJo+>?YUMhelvU=WyVqC{w>yL3^>xNU244g-PmXhVO*Zsyw97Xo=SMlb$WTYFL7^ zXu;(l*9vt5HBI?mr8f@(iuEtX8^)RjY6(rnMgo~Mw?m_Zvm`od>?S{DCD$OY`0!e+ zp5Ws@JL-KDtfo=DE^&-uwTZ+%u(6j|^lsz%%0V)n65;}; z37sV7Nb{>fCVT3i8%!M0lx3w0OcFQ2(>fiRA%9$HgQfb>6eRCBwHIt7sVQ7p z)>Y5nH&x4yK1OF@?rUGcGPm2H&;2zVay)*2#RhNn-fFQ{DkVmZ_-rl**S(l`yw@}s z=pjfo9&D+bU;}EabphAV_}pT2AlYdm*Xe@*tMi;tpi$un+M_7%??}X)xc=C4``HO< z?lI*ro}J#>^M~*T z*-b&kz|YQIW~Udg|J+PX?`@&zoF&wo>clo-#dJCwvl>RQm-Ff;vC&n!!`jV+@04i1 zlTdj`$r_M$C(em{hVmVap%Ir1cF`L^H|ijaHglGZ-n^_uG|m5LX71%#D;MR_nk3ut~I@~}KsIx2zT z|I)|vJOZrf2z}Qwm|66DbC*TZ*cDYfym2F~*h=ns+O3-?0T)BEhl$~KOCYhv-kTqP zzES&&Z|lA5qhxxrKMTacq0ksR+UijOQdb6Ww$^4^;9PgI2zA$32_cn@A zI|NtR-^FfJSY(we33n5B=WW{VJLms%J@7}@#R%|xL`T0qJLLMmd{FWrJ8bbQ0JX0; ztp6ea0U_@sMKcBxd*erNO=c&g4pfh$V_(@0`ZIZ7*@fl0u@!NwpX%ZR=3L_XtiG9D z@B1j4vZj2wdY8&Ey#x5102e7K0{jN@`|7&v*f(h~BUZ_$oh?cR=N~E?uAIzX2 z0D~%rOM*Y$wB!Oxv$$gd=gnQKzWDTA*^S*c3lX_n9Lpc)!ccQU7G=6$a$pU={$?P; za*QB4Hg1zf*A-P6u6U(NU*An=!49UIJTm~tk{cfcuU?*1X2+m`GyR8`XnbW>M=dg- zJ6GIUcuNH7tj7gT^w%GPc`hJABuRslcQx?gbl|KkHWTq8d4DL6$2Xanic1%o2%na zeO~+e0NQUdB{+T zdt~GpG{5K!(S9Ewt(uXJayBHY5?#Fap3X+4a_; zkO7DC^0)M$|0`P*$WB`qWNe9!{$73I2Yb9^)Q*1;vzX~06!MrhS)9Wd`6RE3I4|{p z+xWQ9-b)}F^n#a8{c+Nt-dZagoOIAn?*)c|mmGq?)=3FXw7dNdYG~8MI9u|Y08T>T zWjOs-J<%;{PT>Yo8p0Mf7cbNOVZS*X3H|yfqPTX!=p$SeZs5Ii&&r<|%_2V!qraGL zjo)*>Yb8RMq*BjdO7d**u;f05UZEU z|4_tS`85M{$KQQzaI|uo+zYV!8!Y#%fGWzwk!nzl0LTNsd(yDKUhUEDxYlaqKJn+c zXc3voTYW>UN$p5vsPyCG_0#e$hHPnrET@!}i|+T~>WylWg(I#3t2J%NRee$(-vTG6 z{Sr+B87l0D zn9Rvraqh16gj|Cc?CPHPombfv?pe zRW6SOg(AE+zDLKjnu*BXw_S8kP~&-XWf+yPuYH4zFl=crYnOm~NIgiC7!| ze^7ayjz)@6bbJQ;vxjDwicsXT>BH^lOBgDl;WCgeU3Ph-*M6H>>7d+hh-SSqtSxBkDz zu7WSB=j#iSOD(ZF#jpM)JRYo;UEk zfO~iD%sDf&=X?VIY1?OZQMHLKiPEJm zB8Q-97jlvIS^$2_>Jr+qlI^7TkwA^y&}{whLPK`CV?nc{OIbw#_Pa2WPI^8}F{R$!D|bMQx?kxuCJVHG za|1bWxx}CnE?c9ir+UHaO3Rd@C-Uf#v0iF8?DSp^dd~i@>V^D@j$t2{&iZ=V6>cyZpzy?h_6QPvE)exrGM#!sejbWJ9Ibw!;pCD zc33`dg}>0=*z*!L-PnvQ$388nMz-R}n7gVl7ToV&j9P^@ttY+Eu zp%;@c&(_tHW^%XQMoHIVg$=R9tZLCU})`z z61P~_U?hhrsWY$NcR_#?Tt2M4c#n!i=kHi%e2nIT8O#H%i^i-n@C1>d%x`Fk8=Ry9EXr(vcI_AssWT4HkD^PcwuBpy3!ZBb!e9J4nxu@YcCtg*rN1*w?=9aGp^zDA__mS0;=c^9qb}Fp?IBb!c|&HnE~w`m1F! zN&G;ShhmP6@LzZE)X$gB?S+RpA+W#@dla z@gyFoF}l~d+zV9&iN5X}MCZUOVcMhY(P%@R_eX~5B&9oVOGLNWUCL|>e1>(hn(ci< zI#`^~q4bW9<}sVOM0|XF>yj-*YL;Qi#5xajj@!+sZv4&X*3Lbfnb;zRy%l$u>^m}1 z1N|Sl?lEm;HDPoI>7i~yVd1woJA-fLO`AuDUCj5LO<-HqOsYalcZPGaDj-80^FL++ zz*!4TYfW>~qS(<`x4rzRpsl`7&m5|b%NoU8hnvegPjfK59xg{0Xf!E-^W@NLSeo}1 z@_xT<=r<41eqoP@*L06acYuhrgc+J_6oX*yh1Wn;aRy(C{N_^GiWyb!qI%}*uZ<=a z^T_>4=v;(0=s|1%-jNz#opoWUqve9 zQ04HPnV$WNZ-oB8otfVc33biabd0Bl&Rf;gbC9Kw_t5=J_lelx$*ZwD{`URlH`?QK z7en$ewSy)W%iG=|H)6d^tmIyq(OR!lDo4vj0}to!n9MhKmS2S~C60bOT*IYaRYoyZ zx{b~#9#CeCrtg<7c@!STo@iov8RnvBh3f9pUm5^C60a)jA3j*;wg20jB}5zblSBKK z36F5Z=ad+O$tQ_ooCWr0`H)#vALyudb>6wlVWbDBu(k0&l95kY`M6wm5qj_ z4#ur!vzSipF`>Ad2LMlG$qwKdtb)gT=yZvp@jo0+?_E9*pcSTj+leWLx0hd$c~*n5 zi5oozI!%#x_u(RAC02h&=|pjH@d-U1QA0tlPWlm6iw78Wj z#!?;O>;_W0Y{I8K?+Xe}SB?~SrF=iSz(mlGV3@Ky`V&_U<+5W^NG8<{C}oRaucUIF zebJy#L5+O4**+@ifZB_rx;eAUPRhHic$2- zilmZ-mZm;!__oP&nt{?v;#cg=TT>-e!uV$*~fD-oJaQjU_LjgP+@m_o@V=fgDm|z$*Id{JPoLqfbPa`fpF=B;E6#V!0QHx=df&Gn?>o1* z2wgmRVH%}@jUlL>7()XuzsE)_fk%$wf~QvgI!2)t=_Ab7hjpZuZixR-D2%Hz)wiQ| zKDx9UE1Tmm3J7L$u-zqiXA>4W=4m)4=jjC z;yITFzPOiNJqZ>2U2-A!@&0elDYSC(dA|WCA;XI0SZVgfsJ@PDYZ7@it5ItPIrykB z>_XD)_iMiL4q=Nj=R89_Zap~bj>;-&8xXTDDC1P!JuQSOQ87q$VIwPlCwis@te4V{ zj}a96_eCY19A|4qGGTk|^qubo&T}hT8FOY1jG5`xs;XVwp%05WPfOsnLvE2Yi@jgq#AYsRJ<}!`?b--M%b7rlqHauU`*#E=3ptQ+`0%oLOS5h{hnp0pCHGq zTTbLZ9Qi~L<+LBtOD9$yPY1pDec3VhEABWyobPwvMs*Dfc1A%0ZU&uo7qDW z-|MS&f}j1HW&)AHbWXvgs#5!}0SA<&zsFC8^11^!fx4!9Dxgrn zK0y5$TiQ+0$K|uNZ(MXKSvixw)4lT#A=OF-rrP0ufF(l-c!L^2It`YBB4xCT5SyDp z@xf3U+c6~tgX>!$E&(~N>i60RGpnPBj}MYZ7pEByvzckJJjv_Uybh3)JG9v(Gt8bC zdfm{*sZ-LRV-v5R++rSVS2yE={U5xHK3aFJ<;I}ZO}r%vLNUBd`k3BNj%agsCy%a@ zB(B_QxHVLH4Gs;g(+MUL0`V@f9~mqb<)fBcZce{&MFci+NlI;}l+PZ7o8HXX>WBW$ zu-be1ohTw;=>+nf!ZJ|v9PasTCnfJ>NmTz2dIs4gwEsaq`G~O+s@Fe9Mvd&XqbS`- zc&Dd^Z$>9jPGzL2K1#Lt%U#X zs1H<IAyoOjb37cSAhv>( z`2|XlSkg`qV|ZC!wV2p`2(%IRzDc=~`Z_Z6vNlf$vw99-7B*gjes}1$?YhKG?o|oj zTvpx+?*0O!g$TC~NlpPt9rD){0Q9?TbKBg*|& z$CBc-cZ|s|A6I^w*&tS6&=cfCO^7gwYj*5v%l)61BDe}N9)Gqe9~sb~3bA$EVzhyG zYu-rL)#oOs-_LSM8=qIav^|XTqBJBUWYrgK*H6I{GD+T}n)y4yN@PM1|3)IiXLq9W zo4@+=(q8!hD2Wg2pEu@~A12~kbdC&&=-$~_D}MKWyPZXYq1?8~qjKgI-?yBj zJ!;s$%*G4pjl-*wobeE}(m)3KBna|0i`74g{yRpogxb80BKl|g7uZW}cTV1xJK_V= z%7>mNI_APWDicE>DS1g|HAW^ z(fy~L6^<~0;dtiy5MrtsS<=@!I0x<#SZa=C8Hl+3SD*h={0iWT=Db(o@)`O>k)?DT zlLqm}pr$`4z_$`mmQ)aP}bQ>gph7b==eU`l>kqkLP-L=xB4LiX54CC1cif`r& z$ZddHNh0CHAQ)^Z*Tgw@JTu@4FX#!~(ZX0axc`SXKwIj5VBssE|4vrz8v`Tff6MO<(niH{CPo*G>;euPlG#78F# zGl{7Dj?GQ(Lr8}CK-oBwRhNofo)txl2y7qF}Y}M*azV5>E)QB&D!cX(+ zq`QNki!<5@Mu`=nWmr@u$YFbFTY4eh)UJGVYr7TV3visz-t7iY4$UaW)pOy{m1Nky zRsBm7{;2^uAGGuST&y94<##U|Y_-?%Zec`njT@>JhrYnuV__L0xa>&PKkwAsn( zQi@No-+K-7JBKMv_~q22Mm0Zo=g_4NW#rTDK`-yXbXX9b;H;i{`>y8^RJv;Cq+-z2 z=s1n!!@Oxd_6b$rI_@hlm>NR}h%vJ|Vfok?#DPdLd|7rKKrfWa;9;TPPL#r9+%Rsn za)e8eH7hP~CbFP@UyG)tP+QXF@SpaN+zl2@tajAHWF+es3*SU43DEVp8c%e6cpm664SJQ?Br*Kb6 zD+>nxzWHU+&KVi@TxVaoQ)tetr=jSQrA@$HUH{OO0w7Tl|L{YiZiMvxxTV$mv6n?8 z6sD#^Jm&%JImtk~1|W|97)$VK#J9}jRn5jG*YobY{n26FRqEGP?H*dI{(;J-_jA`D z?nk;)!Y?=pf)v7Jo|jg7O!M|R$%KS260%E?Ll1rK!jy~PX4RfcSz-eGgB>#ULJWpOk3k=*j0#^6_?=xi3uJ+*tzmi66shVTrG~G^sw`-E?v=1&XsVK|b5; ze%VFfj<++J2)qe$B$ecD-DAEjB8@b-Ie$Nv0bj>HXCHk0C?~;Tz-E!h+U7X%;6tv$@XTj?rb&ynl3# zSX<0XXJ5u+M*|HGQXQtUS8tPXOWA^>X%ysR;->}F)kX}dB;C#P>QIRd0TWi;zagz3 z-yT8NF}Fp%gvzdJ=fgV(3O<%PZ9APH%=kLdi^Jz z%AjyTi{Ve$ql@>rN_{|d^M>?~gc$5NY`=M7bZOHNdVSxjHWGMz<>GxH-=AC$THH5! za534N{9AuMuCg1EJXUo1G55KPeXOf99*L)~a| zRj*6h(0A{TDvE&gmzAr{Z11nrJLKIh-I9xbFNOZ?kB!$=d&)Ryd!g%DN zze9~K+2J_xIDe3}{h*2>p>$aFQ*_4nuX-t?|7rE-9#0X*;MN{IFo_9VSh`kxI=!hc zr5+QRE4s{+3%SOTvDS1Z{nl)xsBJ;85jL$Y+p7wW*av-||7lBAnty;rW{EGxXAu(u zoia|_PnCq-o&I@p67?LQ=$6D1Fz_u1tK?Yg(Y=A=L@G>5{445+S|RmuYWn6n;IPX=seneyuS zlLajkfp$Z=GB%kbj9Q84#{brPKw|)#%O$mU!M%RZH(3YX_%AeekOE5<0(&$N; zYHbbx@X=Y~F8AGT2iXwEpI({*B_cNKa}<)f7FnFha6c3QFDS?3xpVn%g~3a*a<+PN zQpcivpfug+`dLvSN5z#R-9_H>w);ccviks`#*ZI1ZauG=mGIdBRO8#;WVMDvT%&ju zN}~jO-=fTb;Q+WHicT0*?S3v5`-Zuf$ z%hhWOXTQ=i)D^j0KDqXJ>N`wNu_7a8`rl3~SX##7mII9-h8#6Fdd%fQChj;Frlz&wZnS>2fnsMBqD;C1-%8T4tQrnfMR;tu@^SYo`HA*PZxZ5lNg|;Uh98) z-lZV2qOQ#zFQQX67df(pjxBSgH!7uLK1mB_7>xTT9jq?jcn*1T9GANgn9PW;(M%g1 zjy}q^fYa%dC!gk~m5oT_?)@ZZY?t2A>ba0Qn!fXi9ga=2eBgGAyW1yq^Y(^G`wL%e z>PGZQQJAx0i#yFp)JUJM_kXAOYy##nllF9;OlQ?=>1%04cHV)cy{%n58^vhc1u@-0 zmB<}P#fZzzZ@Sfef^wm$cCTKz_D)doraf6{@q^Y&_q>Hv#%4~qWKg_M))K;ERVqg6wL1RV<(y& ztbl^==#Xn*Tn+(A^S`jL861g|Md36bpEVFRjD(5P$%_1eO z=Mg0g1JFIsI_DeYi)2c_GkB4BXF5aQ-%z>vRhWU&g0Ta4zodosve2JGv2H=0*Xc+8t zV($}jU$qE>ksDkPwn-MBmOcM!C~fzo9lm5n`A|mr6Vr|s4DQ*$8O~JKwzoP`Lb&p$dPb$Z56Wdl~_zlLppP2!N3RO(&3-z!W`{- z#uH84qKL{}l@1!JrY7Bmtek6__#!EJ%3M|mDB;soEG`CT=Dt5wSmwuc3n*O{HG>Me z4SAapWDBefp&>#~HG9iK+Tpp}HWWrcz1c8N@%ntbV|uTr#!3%f}we+cpcX>$W@M zfa%9KsQ89MD^p>9=9{<~rv)wd`RfTiccd*M%zjPM(0}V#K8>P}BNcZqZuNDdl$aUUnc<9sj*_TI@<@&W5g4#Io5W=B|I8 z#QVZP9=r1g-&Mn55#GwY^Mx}~jI9lh)&T8*o$L@mI!cB0*_1nENV1}~J)lcnB^my* zR{g#sF@(LSV@U)#M*tZ-_L5YBEX_1~AAA5kUNw#t7S zrh`Luk@Y4xdO?S3V@~L9_3>P9a|U+T`>g)ajF473^0`2TdO@$IYN+Zuc5lL*rNm`= zj>e;{4frnkuFkccQsUnV$XMq+{Pub@hxbyn+f!-hvuG>Ztvj)V>PD8oO3$9_8YO?C zRY2vYmMT9K zV#08Q-B)+4*WCg{pmTC92UupXu6SZ$ldN%y3f7@uW1Y}X4q;!6brUglzJtGplcFGk zX|Ou!KwQF+{G&dMSB(Eyt7Y}1{I3dc@p3@8TA!+_?bf226xT9bsmE}UMhs@;Aw0Ja zTCewdIDl^A6+fL@7;F4XyN?(1)Pui5uc6w~Mm)PAa3Ur-T^sft2i{Q_r1aD5;m02L zd#sbN`gopenvuEHpMTqE54q4zH%l(Fbd5AMAKu%v2|~YJa5Q6fBh{B?TIU}RKFFyM zdtibR6;ZoZax{wrIi{yd_#=9a$e*z3`keK;PM>5#zm5w- zkKDw-X}=c#{i8B!)~7{aK>a19W}?1*62ruD-~vy?7`+qU)4edNvoXPb;L1g<=VIsd(fGfc74g&enpld@ynA94BB}$rry}KFET-o5uNa2QiKP%ezz33l+8@TI8XS>P- zWH8%8HAUgt&f|nGL#xV)v#8AZXKj?UaC+r*N!up%;usq}fpGwr5vFx@-Q0#6ta%D#*Z!|~1-oK&DGf8k3>L3C=&&5*XIAsAh zo#sNO$*pvagqG7Lbjw8VV_*+_j^Xd`#H7Yk?m&*@$Im|rOR-T*g)wVuDmv{F>hX{+ z4AU9HGF`8Cf?U&4bq5c{WB>Cmtknq0wH1-3-VU#$E;V?_!xL4zTqZd~i5oj6q zW{RQKy_l({KbEtoZLzNHW5ml_Ec@DH&t?`WrYst@1;Mpax3#f3Pv)2)*0aI2zQFC8 z4-JG?y74mW4#>bZt>yw7KUWEN0FxHtWmn7g~MV zaeX>ysk)TDq+30AZO!z5D!-mH73;Weqg-1lZ}YZ(ZlQh?gtH2iw=4ye&GqWmC4oW| z&MEk|=%c;K(}Q&6Vatnq9EGN zcaF;`3uLG6na|J4SqEvC^wDa=pc<>8#}3B8(#Wi#JYynFj?ft(aV;n^eHOz~%_064 zobXUixO6`SwZX|DriSa2))Lg(57+r%vVRh(txzNOO#w*SK)jUzMUlr#5eg zOvixM=9KJKhw5XDL=hVf3}Z@fy*;vM#amh6sg^$xl(Z&uug^vJO|F!=4)iO`s@9SN zzy#+41K6TDg&CdI8q;Dsxd0x|a`ZJ5^W+rr(1+1Pr-`kDs+Oxe5;Ur{hx_OAA930h zjg8eV&Qw<7LI!Fl4O*TJm;UrAg^RplMk#0OIWsPn;-_PW!Xpsyg-<`D2KqILL6L$n zkpy4#H#2joNwgFqiGtIEH4^1=r7sn9BEg_{0Avaq#Hx3xP$rNB2WF2?sn^Od#_^;` zZm^D#6+=k=CQlBokyozbM64-cXl&@SkYGHSj$SVk6O@m_cSWIzFv)emB>4(8_`c?K z>5)Q&fXMihj6Rm#@F5<#eGHF3oTi~Odg0ubT8X>4b-CWPZK>!KMA*XQd3CB`x1+t+ z%CfU8;83z32h=4@vfDjmd2*qYq}rj;dE>9pkYDj{o>r~*#cD+rq;?X+vzP6hqg*=BsO95(t5*PJ^N~djfMvuv+gRQ2PtpLRJk` zvpwB_j|+63sC*TO7aKp6@~ITBoKB8{H*BVjeZ0{+Bh#!l$f=&ccnpVPmLZIZ7&Pt~ zLrJ2|{w%X-Umlp=xK3gw5Rj_4rUy&1n6}n`X*Ld1dWVjzSy|&mLEK zv8Khh;9o(0A8=5b=iW9NIj^Q%Q6k`l08X&D3~Rx2drK8!BP~pdL^zi)({QJdqh~QP zIJBkGl6g%bIs}lxXDus$C7dmP6?Us`C3x{W5j+b>+&9P=PZ9|GXPR@aCDN`Ega|^) z%qIU6wnph9)w09cLoB7Bxsd6j1o={=Mfg*;dureWA=lQlPSe@#R0i7UI0V z?KfMpU|9jTooG~3h8rx5Hv2`Va~v#yeUf1kK&$-?AI*1~_=Eg_r9RaXE&mjennL3Z zrZE)L{Q<*0%MpDZYggTwX;BEoO{j$m{7IP+15~bEI{l~dgPyT4noSN94xp0j1qMu# zszi^!mWNmY9SZoZpMXf|SUlIOGY0F;GleA?tse5cur&+{v<$y|IE3H>J|e9Yy*_m~ zi1Y|471kYO^90KYL^5EyB2RgQ3y)8k1N#~>VPtuZ zlzICZh`W+VHn}iBo+TC(8N~!r0o;>|`6WS1aO<-j=fE!GaO=0t3WW60R(V?LR?HwYQA z<2K%$B}?GYjS;cdyvu|{fB_ z_Uo+FG^W984DAHqKu9)3lPg~%@mp?O8oKb;pH}SEs{-6HIw1XdUg01Kjc^uSH8Cz6 zJ>JG*_ld@xVgL|(aZ4x22r{im-iSIEIJ$csak$3>Rh=)pb1+5Qkl+fGjnd3Zxmj*- zg>%!9s7Y=U)2Frx;+G}D{MsoP+Po->f_6R;1~$~MfL5{ZT=A&{gc884puDIQc<^|> zTbN>l5)cw=!)}~3E0Dmdn=l+kDxa_EhGc8_k5n0-X(j9owuM(W&X6PjU_xvX5IeEm=>q66u@cQP>pN%d+S?Q zfY=*lJ53-0;-1*3#EXsKQw=ks)CnRjlqSs_!$~34T0@?Qt_PHGiQK_3&YJkJUFZN? zg7AU;bcBBiE=~~*SqUGyL4#%aH$qq zkg)_}039L99^%-y5NZ^P%85@X(})aol-tI-!>Q<6zz=5;X$MjlXKe~!I`ER8;$D-| zUi$7ww7gr{^%^BCCnQe(GtYlL6YAjeA)tFqNr$_VDpd>wSJ7^RxRKX9go{znDbz8h zq)X66wS%kUpY>OA=XPz}7*V~hN|+Ih%y$I*QPpEVdlEWhJ2xQWlX*OsP?#gR)*AK2*fUmhK{VUa!u2y_<-^YM2xLdOtb%DN zPJQ8a?U+3VCTeJ8VUu}-d(=Pv>g{xlSa4?^ql>QiB~u}s&D~c<0b)o4a5mj=r^-9Q^t?VwYt+k%wGJlU0o0O8Qd;%I!%Qlbet*Jpwf=+bp@` zzf^)a$htsv{0-rJAcW}C#J{;P!$Zx*^Lim-7cMOkXBiQcswJp%40jhU3UR}$L3fOk zbpaD1fZ=P=Z`afFSk}@n7;w2+J?|g7%DJdq0tX@cbn6##;ggxt;>NVeL4VCLb;D_# za75Q>jXPsH1%pH(vAW81Fq;M`VUSC#4i;*hYR_L~X5Y7V_HyyQF&Az471Ie)4(D+4 zT&FIJ6MM{FyKO6h?7t5;T18jmaKMP&G1I1TSus=?K_UB6NL}#}k$r2_1#x1?Vp&ftqzZBTgbGVjI?wy$wc94t8%KakhC(!Iu8#*0 zw^VfTG^Pez2V6wMbdY1281lwHWIxbjea0$zOVL*h4Lh`mHG;HqQc>KS;1^ZVY3QSv{819+S&n#@Qj!=$>&)z7iDIny`gZ~G4 CcQY{n literal 0 HcmV?d00001 diff --git a/lms/nladmin-ui/src/assets/images/open.png b/lms/nladmin-ui/src/assets/images/open.png new file mode 100644 index 0000000000000000000000000000000000000000..b936a45ce11e10b0983f69bb6a40edcf8a799b88 GIT binary patch literal 8232 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 literal 0 HcmV?d00001 diff --git a/lms/nladmin-ui/src/assets/images/open1.png b/lms/nladmin-ui/src/assets/images/open1.png new file mode 100644 index 0000000000000000000000000000000000000000..6677e5f19aeff605984ce3b742d774c0b5cd13a6 GIT binary patch literal 9046 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 literal 0 HcmV?d00001 diff --git a/lms/nladmin-ui/src/assets/images/open2.png b/lms/nladmin-ui/src/assets/images/open2.png new file mode 100644 index 0000000000000000000000000000000000000000..392fee20d7f01536a52145d9ee71a02e44ba9a4f GIT binary patch literal 35535 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�-1amG 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

iFKfU!Hu?`4aeL^N03Z z_qTErkRQa_MQ_QAjCBI?mEKmpUM(aVrzx5!WPV#;C{{YC>8%<2dgzTwPNNAr^wNT~ zGUA=m*9esyZHwAY`j2chokCVedJ2C(j9&bHYFdi!Kdg(b z3%32qLnaqnt z7OdtSq|MCjgywSFb34`=xduKvq*}v9s>eL~`@4DOi>Hfwc4H(b(j79*8fO~ju0OuZ zd!F9$GFmLUD{(f_zYi}_JrPx$tRt%f(K*$bDt<9(xWlvKG^y+Ono&26B<)FBU(NTD zw32qOG^fRTEB9i#M!8P4oM#1huXpe4rtaeJNuHUVahy4w4KepK-DRGX@{sa(^YHBV za&&3f$z2v{D{L=p+t#&VwE5kto8*;5tL0Sip};xIx9`h3!#-^E=h$gZ zT7BAl$&AxDqF<&Xpy*1SFO9Lss7>bJ>B%8VZ^gBLHKQP{pcNUn$#3js3^KlgvuISM zb7oEoICamp8!W;5{7j$7%2-_vZsW*y%3^2vW<@sUH{M^AX=D$a3`_|mxX!$iy6i*8 zo;NK+j%kiw;hAE!V69`pLl{D;a2#-exGA`K1fqB!@#^vUNo1)NNQg*5K(_>NGwm_s zg@y3E4NvL_buVECwLaseKtHD%%Oqt?#1P>kMIbo;LT$UhhA?VL*)ggPXh)wydl7Jt z>#@)ezTa=EwLDxsP&|{xYoIF|c+633A@rBjoPCX(mrb#~qo$+9ZdzS%-H*BupUCs) zM@e@*s2&jQyW;nXm@1sUma3iTVNtq1pZ$w=V|%bK(_0!O3X1cWc$a)P zsZwq|j8)+^Kb^*UfwMX@)p2;*JB{a!*&nmtRMghJl>W4lq4VWT0wEQkcxfAq zOr)X74T-1!^ot#-uJdeip?GM98FTY#A@y-f!as48rIz038ZU~4X0kl zgvegh8vBJia*o>Zo!UrFwPxvSG8#4h@7z8HbOt_kDsUD3ap6U4%&Iv>!{(*36A^)&3!TD0DLf<~G!OCP(#(SSbNzRE=O>lHoCx5xI7`QsSPu+h9c zMea~tkuQaxd-|M9PxOCTP@8?Re0yM@G-03<^qBUGNwG`u_tNunrMit3-B%_P{-+S9 z+1Z7cwY_^gDm%G5&c!HDQ`t+n{nLrzh(pp6#-oqxj3!Pm7d*cC+MmV@R1fqH;E0-u z?iuvg6we)h6U#aC%?L8;(?ORM)i%y>&Q3NVy#0`5Va(K03kRQf8-8;8=sLik2b?;O z?uQ~`8O#}BO&fuTI%RK-j?7rUJU@c7=Lb9X9$?4$vZkg=A}39;k1Q%rT-MWq!Lw<5 zsopj93SDA0{gDq%I z2D34MsOR& zp-eeikA1aT6I2g!VKdg~u)*czKFWNKqgJ&xUD`KKxKEu=@fl@7;0K+%jJ3|32&Os?*y*{~*&eO;oqe@=Bi~q`vg^iK^lySo z^4~$#m zSwJ<^8>n*w*>Nx0Ttu&2sSfE~PahIrL=QEULJE;?2StTtPrBH=Z&vz{Pd3H-Qip-m~KMzN97$tjXCN8uic1pHL@B{@FjSd%^$uf=xmB z&kK+B{y(m4z(1wWo?-n<{0Q(ri0|L|SLr|EsQ)Vd2Jp|)|6Tky+W(0EM*AP}-)R3M z{$u<96YYO0|AWlGv;Dtt{VQ;PivO|wKXl8VrvHsw{uj0X7bpI^SO1Oee=7eQ+y99F zAoFjuKLU(!{EL%+L&^US+x}Np{O?BgUw!$n!2NN|U;6T2N%I%K{Sp5i;s4KS|2LHU zW87aVr~DgA{ToXD&u;M``d66zOO*V-i|qfCw*Q|-_FuUEjoaZH|62Y};4y!{Zsk>-M0V5 z_CJ;XU7-4pk^LVsqJO9TKMp1T5#j%0d%VV*Gol;ESOCFV_!A3JMnS2p&ZI@Tm5bV} z4j|@;J2U7CB7Lh^lCOtGJ!qYv_t&~a{fcN4>uDGTz(aZ8>aPaQzsD6T3;{Wp_f&U zk4YTL1f5?b)~<0_LN4p)I6HlbcJM^LbR@T~&Cn&O+qO~ebhtJ=ky`)l*m`Z=@4FD) z_?R{M#3(IURxF^SJ+{%a)3(OMqCDJ`&=g8s*YJ(0m>x<4jopC8Y(Qhn=+$WQLELJ=kbUjv6pHt`tOXe>ys9RRbCdB^$&@6X7|k@ z0>zs-sSFv|z8Ad9?sE{eKpDo-XW-lRB_-WhAi%?#GuBujxiNRk$ZQwe96cMjS-Met zjQxS7?m8wb9?+<6^4_$#W%@1^LG?iRsd?}9O88Ea^3m^gN@S6l;Q&GP+Zb@Yw}A*9 zW4Y0ynd}PYz7pZLo!FcfI>iMCI%tyh<$@SVSyl&%#ev z*pShYx2m|RkX%JG!8NWFq@YRjlCGJ!O!kD39wG^UM%y&JiDQn_6~DP7;VG1k zQJ~T9WWSWRMpTdZVU|VXC2DyMc{1b_Fr_O;5EBv^eu%p$o%)la&P(@G6^4KBC_ zHS{ZPe|f?0vi7l(BB9sZL2$>k%8ZHdlhl;$9N~QO!G2TUTMnC!UhR&Upf#FK0lAE) ztId{l2^MN0q5)8Pvwq6XbU4n>qi8@~iPMROJ>p9_2Q1Nm~Kr6O` zYz&}1^|Y_veZx)gZpr+0F~x+La6LGt3#%Ywbcb?P)GP+@TR`_L9OE&K8X^F*v5Mz7 zBl#`Vxu(rxdI@G9Tj*jdNIUP*X%$>q&l|tK$WIEizlmt5*9Z_$gfd&~QdqdFiA?XO zGVI8u0K#p-#x~6qg83cO3=TY#&!8pcULQpzJL|^z1nXP0cQb1Z_>{o_^2Si*rpP1{ z#j#w8VN1WoF0pf0JHV~6ySNs@P*Mtpa&_OOoEBUHG1UyXoxo&BVG9q;FU3p^rQpmK zUhiCl@EKRwXwL6DDVm>kS~O$owA9lwRVTN=H)@i7xi@RQy}+0-d#cP5OrdUXFlnCM z79o;jr8e<%4qwmwkzlTDYx^Fas?&SNIr7{_ukebT@y6`!Owz2`HDiEzcYWZZS%0M; z*s`qpi2O3Dz@Q#Ik2bLlVY2Y8x0xo zuU0813(??9xBi9Xw!7;1`H?dVO)oBg{+u3oW;lgWrwu-2B$tok{D@T_7-?I7rtM*( z+l;LkpNT`YkY{o}jzd8(Lg^m?R-J`uXpxT=Fb~%#HUL-9Q52EkrnO;LB7Scu?w=2@ zpyO(oM@1AIC=rpt(eYtz-T_!%A;T;z z&xza7z&lKL3NbeI4#rjYeuPpX2JClkEk8$Mo5rS|gjGRMWqEkU|KrLVjS^x#vc|`~ zFIHnJl=^s7JJZ)FftFg(V09;TxO5E4r|zxZwp02}62pY?zR{)2YP~_paReg0xe_1M z10MWbATfUd4N#z4nj1&eS*zss1&1@36Z_G}Q7{Qgm^-?VR`12b>aC=NkMTs7;l&m0)#u zjRrXiv!-DrJaF`rMrxMksAY4{C_~$D727@DkBp-t<0$=OP#jKDU!4eU;i`GjqEEsr zRvo^l%6%ZjO26PYE0*tVO-G?Xz7+zph(eqgG>nmSV~UM!$JPw1xm3MSu!(!$a-FW` zWUHNC&UR9m_XgvxR>(RozOmboVE3ud@Nh_ryIgsFyLU7~S)u3PlG0LFXT%%7a8?2OiQDg5!s#^Z(uVX(SeDCPeV^sJaC??W z&%{C%&4{JK=!K<{SW7ZV=BPN5H3t0h8P3#uk7G{cX@YF0soJHt7)}!XY<~L``|net zMo7EwMe@Zdk?!V0LlY>-F!sAnfI`9nHihPyg_Hnh96PR#HaIzWz~F;%i+y~Rv9)$l zXnwEVPWqBofqr{Lv8`a~tFisEhU+o8E?dHq93$Fdn}7{ki_#%Z9&7gBV(hq8Mw#a7 zDl>5!9Drq3zXt$zJa4pAOB06 zHTAknr>Umqq$Fscuw=$cYm}50&kHF6*Ig(*<&mxqRvA`S4gToR5Xjt$Up0IXNY&zbE1*Zu6f$t||W5 zU(#7_o?h+OzWu&}*@b@LoICl<7E?`;`=C2OyQ|t~qsQDpO#zm$Z`}sBnQ@;3{;K4F zNWq>YRNX=%tpHPJY&9NTNu1eLTtw7&5x(A_{MHkTFr+{44D2+o5qeXD6K7jP1xy3v zE)GTI=h2ZoQs#h^sklZG9UQj>!mw1}3=|eG;B>-LeiSB{b(A!^?_h;|(SHyL1a{C4 z0bL=G{*~h>YtYIRnSNU0n4(C@JI+e7#A05($n!PNc9R?rv!pmd ztlWHp`7a$37ZnYjU`Q}wH}0us=o_?L)Z$G*>c@V!1=oNi9HnN(`z92vNyR!r9oZN6 zBW5hrWIJH8gZe`LwBbHc+ioHwBbWE^HX(gJLIpqY^@y#&&u8kz;7{Ls#uN)o7aQc8 zja|M?l1x~S5$m%!p_)WSx_TW^S4EfA$zG)wMJM=p%9_dUR2iSyr3pod?P!)1QX%^L z!B5U&Wds?(Bs^YNgq)`75BnTGRGLfZ38nH#1iF~T0JDyks(_Nd*U~W>!oCUp_rjto z(mI#k+by_DvD1g;mG~By#;!~tA0DlX2X)+H;!0S4~=~)fz`=(}i=zJbF9-1bbLXm62z} z;6uM~X1{H!tXT93zWWEa2v6PQt*Dk=c<#aP^_v|8YQXI?o$9Q0@5*mMBywnVeXOj` z=S*@_PIhHwUBuWV2E=z&@#Cd}3XV(F9vZgG1w3fSGwMT*jQT{z;`5wbQ7acrRadmb z68i_5O_n|ksJZBu(kRB}(+f69udiI#NZ(+%Gvxy4%7(he-~M($_9vvsTVvZvY#egt zbgTsEudMWQ{gM&O%XmFam3~2Hk?AEFN1sN!m9fTJInFYh>T^o+8v={>Zp5V|APLqA zyZ7+8JQns&%AU)s)Z}FyW@o;bP=KTTY z!rizb*)34U?AN|lncpy-8u4Vo(VjK^8-a*nJ-zk*M0#CX9BW#f(yWZ~Mv3fH_4l#^ z<}~Qkmg)|#s=NaWu}ZmDS=OXMHzs*yoxzN72Me!einh)0Lw?(p#Y$szycIIpN-FP6 zCJK*CQHk}TBf&S8@7dqp+vRwq_{GFnpHIdoQLpB>caE_M-kUBamahR()NjiR))2VL z8_8IDVWe&+?6uN2`x-~ay*?c8)uXKPL2aBFcB-VReKp46+u`krd%jz zJAL^Cx_yLF(`am4r&3zx>TGPD?h~2lO|2H;W;zjl&D-ql_p`W)?h+SC*qTLnP5k3` zSz%FE@hsJk8f8MfLArD{88AXA0U$Cm`Yge?oX^GIpLArHu{fEj$x`5U3YDa{Lugj} z;;K}Mdc>Qm9HU5b=G^%9qo`evwN$pTtm)aYcf!}m%J-PLvTO0|V+d||{Zr*FC3T(GGXrc$Oi%x_}88hneldASilQ*(;l zdb7(=I;ef@Kz1_{oaKTsfBEwjmdZBvulH+4COZ`(xixg=&9DgL1Gd#=#TX?m$AhSb zM}lH^SE1c^>gt)7JM+C3bX-nJtbxT*1vr<@L?t)rKQK7Rby`C{{C=7kPin%F7Rvga zBq1j*QxWZv{9wwq@+R{OQ)mS#d>Pu)qpCC}8)uP$u%>0tpPSQ?-yPGj(3$EolnLmM zK4@Iomb-ahU=l>16@*IetD>yh`2-uZORIjCU`mc1ci#DQCt!b5{1ngx&bRcG>9|rB@o#ZFqE5Q4#4wR3DWXPD z0{h+jwTRl(@TSUnJvy?^5)dp{K!aDDoAn@1gTzmjb>VWT)(*c*y7^pgxcVkE z|AGoRLzIO4)X_UyLqq#5>UDA*LUTXFGaO%$@mmt!56G)Gd?}eRph0|*w^)LEVLd`s zM!?L(?0dL!*&tw5YK9AXMb+3J)pd@@x=93LE;Np2rcB(9-1>KCM?~!8+VdUeo#D}P z@P@TU@4Fih8xNdGe$5@s4@}eW32cdP{JwaRo}p1l!!ZFeRP_wdiyVx zH~77cHqu6dvT%_CjTlf_Z1czND=Oavtd6g-+(MOZiH|kjEGBRNq%p*Lo|0%TVblD1 z+U40!(}VV=Z%#LfR;O`AGf^|6qvJGGW2dtI3-+T(8k`fg+!WLn`6iQ`@1VVGt}*J- z&Pl^XT%s9bySdgN^zF$3U!R-bSsNu6(O&TB3Z*W86LhEv&AxbZVbTu9BsHyXn>0r8 z2l;fLTE(tQ7aUnj4bS0@M5L`V$WCG`7=rcm>%*k7732ZXEnvjrSG8T1qRPa`=x7_F9%! zVt>r>F3$Zuk8Yppl@VI1AJ2h{PaLBRWupDjW$%YDj(P(y4v#>Eb&Wbh>9yVCs48S= z2lng}yg0nq$&4JHfg^+YCJqa$Nr6pQQZWCin4P##N*gm#-X68S6U)}4Ft$}YIj6N+ zUN&2DLK`{h`{6`YRYMRAVpAHu@1BV{jH11z67Q&Cz9gL^0($L5x(EgW6yd#vx)6N} z#&26Ck1id0TkfnfK%KZE@pTOgKz7K!Ea#-Q%^Pf;DHn`l?FFCLJGTWGXq`?N;0`?^ zCt7AxmoXQOyufD2Dt-R=q-)@Ied^v%M1hNp4)T+I%9sxQHv_PvQ>~m8n97$BPhHdu zauMEFkcC`HlRH|KyNN%z*^a#hkKYG_#wjgx( zR5;&ez>miTKSm?QCK(+k&D}K?49u!TJM%(Zp?jsNckDnKClNJ+-*q{PAX)3D!55x` zmGxO^n@d`EC27S{YtOY5khj$6vaA7GBi{jWC5 ze9jPxgC=Tvyh6V(H{7d%!PnzRlpr1}>1$6DQh5QMNSPmy7w|zl2W5i-G;Z4IT%mbt zo)eR2h8Ayqpy{NAmrnK zDL#4NIo!yZ8hzIxrl*g;=QyJHyVk@kV5}=<*|i-e*(uWGF*(d66A^S86naE-opzIc zzM3`WMyT6hFeW6%p6A7E&-MRR_K11(`Uu#l^+yTQ|8 zk@F2g!Z*K%YKZ&;R2|DM$4hcfBPI>hCK(K>1%W&t2WaWU*|{f;KnhLh1g|OAraP~^ zRvS~p4tAV0knb&*pS1=#V^h~OXhCqG)ejn%_z%jVP5#oJjAhH=?V2CSx~Z?}bx zyk|QwF>_ahindQO1<+iOWB3K6BZAObltI@7Q41?~R3EUvHlMv4s@|8JiXa}}Mc}xf zr#m&)Bo4zwiV$zr=A^+_CI=ohdx_$kMplYvLIoA6S#IcK;>;kVa^QJEQ_Lc!4S2CJ z)D*oKgiKE2=j^wk0U9&=cfbR8)k6rtK4b?D__=!viZrlb_BQdt*DBMF!-&9@Gh?Tr zH;0MCmf@Yt@R^z>v{+Zm5_??YqsU2xM}ie99HvGQo-wuq879wmM(+fxb3QnCzQ2z{ z7Ohy03$7=<;F4H8P(~ZqOZj^cAccyoZhG=ZV zI%;E<#J}K(Zwkb7?xyZv`a~ZLRvnhKi6_>)YU#?~_y*^2iEjEDR8A1mWpp}nP$XAX z*7syj{loKSagc6#9{1~enr9!KS60Qdupmc!HsOc2>ljpg#_4V{jOE45X`%Fzg`C=8 z{_{FsY!5&3V1&c9C(hIqUdNclarU=I_9S*0#RJmMoAQ}_1Z156S9rW-;-L?7w4FAG zZn93O7dUVflA7$^gTfph3mGK*N}s2HnQ+$Vcz58cz*o;1{~_LMOExDx53C&paVn-L z*`Z{mSB$KjhA4-JRzOsd#BG4a;#ySa ztj~c5mevdNcjM-hT^IZg#hIV(wea6riRMa{A2AtYG{5rvF;3Q*rNpKnpQfc#ZF>n~f8xi~;pq*b#!Y%@+`w%0hXrlRMo#z4 zc}X{dg#-JYdjvy_emKe4-5C$7ur{S@q_+BJwSNeAI~B}twh*u;>LvRBEd)xQg61AOH)DRs_OG&H5!KZT#;b#QTFs6z1 z)$u~8d%rZS7>({!D(n4 z-=>~$SL$=`(r2>-cNN>~qHg!DmwWtppD%Mc`a-Pc4MR`0u)58>IOkV)f_y&i@mA@J zmsUK~K|&{b-|!3l06ncIl7~G`1dW(S)1>Lv6|-r2&z+1e6l-JgdEqqD&~jsQryG2- zYTNtD5g{VcPnKC*?k%SPvGTw@ zn;VzL0pn1*di52qa~HnTxnB;C(hF**TzdBt7KNgS;?BhDahWP6cJHm~n`bX=2*r5SJqWP6F{Y3z+@j6V`l@b&%6^OD zhqxLBc{`hx+Rw`h@61{^@0#25Wy(VN8_}WvoK*%Q>G@5d$)bff8>}w#{ibzYZ7w)+E8!9$7p|t~bb}o05r)+s;d%-xa_Rcf& z-}s6jD?|q;5q*yy*4ASgG>Q|hn|=kVFjjxyd2K1{`E`&gr@#q&;xPq#-KeQk1o$>- z=`_p&x*n}0BR7@Po9J8vGAiu7nLU0@g={pyFhWe0xDs^Nfjn4Il3NnwHimUpE)76J zv0T#c$hSS~9pT8$g7lm7sGcL$h}F%tbqB^ zj_u0Fpv=nh_44{x%VY;2wUQBWyi>RK>*M6x8IQ!(J`sPDU-vqaD;o4-Y+!TEuSL0M zCuxM`40!Yv5y;~w-@5!jEto2u9&(5b`irNd+P5Q}2SW)P=c2ALFLxjJm~dkF!WS)Sx|VE^;<5kR{1;eM?RSP?_c>Si^?o1ucBCiI*0x-ms<# zk^{_SX$#0_;(f^G;2*sj+gD%cpm3o-?=(}(@)b4r^6Fpj)B4At8tB!&J`oIA|BhOi zT5qWzL%1EBB?&UuKF?P$Gj!HCbS#f(ArEG1a zUPwb};z=;qp*!Zdkq9NIeO5ZtqFRLYo1tNdT}?pjHOb@}{6lu}=t*GINvxYz%%GrG z5C0=ATTb$26AaMQg(L`d^FS8eC9>oSP9d6M>9o>(uQQgBXgdA2e>y8;QKTImw2;eJ zf@6adAy3FA_Vx$vqBee#0d#LfjD2HM%X(A!=+eCP^ljF~eT$iV`fuo`2WFSkEd8Sm zg^DXOgL?C)4!Z)pL%daNkyRvt2YD+YKYqGa(7AXfzO;X(F+>NHDUkCwy9{G_=SeqZ z?zD^FiZIhoi+#Tx2*g#4%vf_OTRKlALmJt*?E8LqF^F_BL2B0RSs|3#%-<+E#|RXi;d#f*)r}Kd4_q_rabFybYh}Tapvr-=T4B}Q zjCU5WQ&HIkgvf?*4%Do+gL{7D4Y^%^y6FabKfnmfYvm0+$gcE8=D4YyvmlSVH{r8|tif9L!&LkB9| zQfqBP4CI+K%VK}|y0%Wt*fliVrfk6S@4`Py_pEChMmdm7TNhk;dc&uAjY!l-4Y46>b$5)DWAh{N&`iHgr$iZ z@wg8TDW3#NLcZD#EqyaaGry!HdoNn z0$>@5Z9enEko;Fya)4q_)7w4r_7(enb1}=Gj|=Tpsak6+2Fa|QcO6&~bs2+D$Gc?2 zFT;crte43K1L|nUBwU*cwj$z>COE7jhmafV6()~byn~#_tcw%dB$}j!s*qY6v|Yuo zxs z$0w{8gG$6{;wj+K3*t1>H9nj;ZJ`=d_-;k|Daepi@Ae*0O?`p~oLPXncNX>0fzvwb z1)BxxvCc7?Q1zUENKga$Y=+}ym`6P+h|=YGbe~qfyKqbMLzn%YhYnTB1v^WMjNf(H zoNUW@1!*XhLpvPAHQv+LDO_i z)>7UXp-4%Zf|XRTTfSG>me%-y8&);W`8qwMY*h0ZScVVm`tBh&4h5bG4J`pc3`T(>_>=m=ktdv7`|k2P!V&8P;$) zULk2q>v(v(DxGh4zUN(yuYbYAX0+K~T#=;0q*MkBNXWL9(ZTDdai`hJZ`VZ@oRh%2 z1x3gykFSwe($IJP&ntOMk7?3sjaJF)uPPza7gkg2wBG4{VZlbH^vZJ{6Hxs~A}(*> z>K@xR1^^Kr`*}ehHe?RpPg(b8qD@k^hKT0rli2NiqBDB@z99*#B^*vT(V%rTEsJ9` zY-7aQCoMq^n*E$%jptoex*T)6BESxqNn4H?_WBa&pO$AYSAvuEYUq?8B?7HE?|h(@ zaOU^3#Hw-2HBjt*TLF3h2r4#3+Na0GH$rskL}`l7fO0lsxO0y~tTvBwVT@-E<5WF^ z_;^?BIUiIN6kGG#xYV0ESdUd-p}TMjZz8+Pcf>~Kpu+gxcoCGs3ylh-R=kQxLVAJH zK3ej{{R-~!*H7G%c1~bxaQ%2N@=VFQO8g-8Nv^v&R1}I&s!U!=&pfmht9yI8AgOlR zS;KrD`btdoL7-Xhrp4oHSN=V?)R-%C{IF6g#rMQ-X?grnfhuFKQcPZf29>ovUoh_0 z{GP(NZMU5PjT5*8BB~vW54RC1dD%3b&XuNi*x<3VHkmu}*Bj5A&k~s-%8R)93Dh~O z^zftf2Hp5|mV^*bdJmQc9;(ecXq01jSUegec#n0%&2qm~F!qY)TfHEjNcu-l*O7fnN2EjSN~ z%-1bMJju;yA5@A_a^Spe>#N&Cble||)!&HGjoq%w0M$-!4`{fSwIObQIda^s1`854 zm5j`Um0h%`|6uIfg~hsetwCl*^hqY~g=trGTZyiJZ_yup`fg77Hv%WFD=55!+7NSI z>i2YiNk39Vo@j5w&y~Wxfxl2!CKdMelrQ6@lQY@%nXqOV3xl`2QI31uDfUHqHWNP= zKKHTlJ9j5aWaoa@ot0rYHc+U&~@#5=)r zu^c1R_avO(Z?p0rk8vGO!#{p^t=C@JBoQIg>Kw$YG**<=OCZ;=M5h+pj;clNy((QG z`!s;~VsBMjZHZ)7*2K>~jey;*p$1GM*(NGAs(KIi22LxlRB6cMJTz?Z#uv)<&gy1& z>mirPISEOh;l!2K&<62`ot}>&mru!m*RLv0uQ->l$%vdHWVN@)k=lH)!aKh`pBk-; zyj3!g3KgFtdQdCw>N@w$EE0P&pwpV0 z-cLKWUKS;`gmkvNdBjZWiRpny={;@4zN>hUrVhPsRmFwqldkx~?=8Bjvo0@IO%K9)%fkFn;B@cHJ+mC3)`vB7OrCQAA|V+apcl^rfrIk*{YoJ{`K19 z*||y(emRJBX9{sum%TNy_FUDtT7nUES&fjoFyhQtoKFvTwhf)ZXI<_2q^vP05$Hd- zWvdiaox3}wH+EMc4`7KDpahfY^*dO54>&lVEf>#Xva0CsIpcRPFedhWT5?ju>54P< zf{Q|e@O(H0HBW>Sz95}_wBS2A&YZDJCYXnI?h{RDes900cf3(aCrW1)O|DnT)-M~rVVSdM_=AFVXRMet8_q%g5Qz-*tNzmtIxq-`l1Df@`)l{Z#AcflLK> zSrNn5)t*lczMR9_YcI|oTsT1*)L(jlOU`!ik&)b;txs(>Ni3g#l`~E|+U95@pe2bd z+a}euw8}V>PF7z6JNG|W902%No%y52FHLO?`fdXpM8?X?t95tx0Uw`IF^#hU)q=a9 zwR=@6mqyiqwU$Gm(RzPr=h4aqmyKLt=g~G^ThBXssIhzlw(w%6LJ*QELP}QVx>Q`w zlRkFfLD!Xp-su26h4LZ2`j;^gJg1B?F_7+NP;EgAob7zNY_#S=r|O=6^70Y1r3X54 zbUOtP#kf3wBU0B7PBMST2l%DYSFQ;#v$c3a(5+02e;Jm#y*)2|y(?LeB_o`(N__0d z5>|G2x)EG}7^0F>$%z+NXV}#>e`yo^EHt*-GuN1L_6x^(dS}x3&ZinaO~74E=9Q_p zTC?CQ0uIo}KKAu;GanHff8UPtWxTK)?#ng~J_jumhOsOlOpO@z$dptNZ;5gYJsT{( z#wWm1(jUg3>3)3?YwhFzLeS8HgoJZYjV1r?c-!`eVZ)U+E&WA{U(S-58WJg}?~@TV z>R2k)_ftp_Pa7#0Dr?fVtzl!bedPft(Vb7H=H1tBpBB)x7CKdd#WZkjvx>fcpiX;3 z$(?oXgH@hnx7WfFse;mQa}PK5AfW>B?~i(6Y1-R?5#GCFE5=P!=6B?0muf&sEw%$k z+wUMJ>*P!_zIIB=x<>fz1;~oP9jxw;Ej|3--$3S+O3+G`O@R&g3J!YjLi>=Epvh52 z-bVz)zG%G38i^_MS0tbXr~8OZp5rqyzo)YdjhLx=l6E-Zr2-25tg7f0rO~V*DuJk3 zmzyuQ1;^4VSI#jxlTQM(%TdsD71GmY1C1H#i58vw$#qERbs&&!@(>`%>8UVzc@M`= z`6oj;EYk&jjHS!}s_qeE>HKFprSsRhfRBhz+(<2pLG|E0b(HYj3HHpKp$$yJwEkke z!JvNeW*QE#6acv&ucap}qMMHrHc9e@j~9IF=^r@a3^-SrG_=|HS4r0UeT%fUO@mJO zx9?tm?gMfUUb&d@PM&}UwF-b?GmYQHr~I1$tr!xE2NUaMlN`t*B3*u#TXO`9x`vMS zD3fjIEWkky?c|639a7g-+t?IY#?O+a40UP;f^)4tv`8t;OZUkc9dXZ(da)zyQ13MO z2O@Quf-s@0L&gHKa7%#{tOp#^JygA%j`_B57wF0mR)n>82H@I;($g3ZrRBkC$9nD zC2!kN>S|BqhH4ECJjeyj}Jf;XO)ThYJRyC zy84ixUTui$a{K#sW9|9mQl$!9pX!=}?ONrqyfjI>kFxLitS*gzs)z@oYx=wjhr&U| z<6)?HpKQ@Z_{{A@*+hCNd&=dD#@L;RFjS-8z<9G$h?O-fKlZIHIk%&S{{=MXA%C*8 zM1h?Cr=%T^P7*mefS{{4B0%6gu2Ine`+1YKNQUdlAxFX(ElEL=CFFMG(GPv+$~M7C z?pJlXF(DZ8E6;nHU+Xyq*q) z_OUp(lNfpj+2A+ET?qqukmefRmk(lzas<Y7F_y_eVPyB>ePcc=l6~yPTA0m9AJ%nsF@MM9ex~NTMhlqsE&k$8(mglJK zA-8y~GIxdQId@xU?k{yS-c=yQxk>t>oi|BuA>H<8aW%5o_{jrywggF6o$uFy+bUdM zU&{6yzBXIm=#xQ9_z(|$ zM9o(ukUwLkUXNi{atBB3uMekozmc^HIX}a>6C_7IVzl7oGe?ncGBa{5_s_uayT)i z#v)_o;qgLe+^)%#c56Nou=b^D`WEE!IT8*^!%43Rq9mw>_2(S-O1Jny>7BM_#&qKR z!pG(f4?3X~lOm^hr}pwcA0Mjg<7bfhz(M`XP7jB@ibz^N0&;Kt#Gmgf8_@3}ox|f` zIJpA<=Bzx9_#N3?l(t8X6N?s}ab)2lAWayPByW@u&O#sgy$V7xk0}prky=mt;|bqIN5lFanKdvj5$BESqOk(MeU8I)jv(X zcuwB7Z02)CP`Ag=HalrU7O`Hr^xsH2&u}*1|9{ig`k1ZSyNcRkQ?*)ECA3vVN$f55 z-W5fOQCcfT)v8f@M}pdW)s~?4j2$cd^Zosw=Q#2p_nqrK&hvF$J16M^y&)g1jNY%> z02PcZYFG`Og#sEH2Jx-N$k$h5OYzg;tt&rl48;zY!ZMKNL${q&y7Qo(1rpQ63AhML z7TDutNkNmgb!GEJ9G1{(E8(y9p{#krPmVYmNk;r?#)NWvvo81&Du~2nRyUB+AO5ze zdSX0GY4q^i+=X2oS2*N=c+C{}T>vwYzzR6RVM7PLs3d5C6zHn)$KiaoKY5ZZ=D$oqX>Bc znr9Or=1SRqW@^cz^tUwp^fY>H^8U`neTWoKH*vSMTnb-E^-2Nl*CGEki9*oDrrd9$ zdF)eJe5KUV(W_9SqSVt3JEa>utW6d2>72W*JS+6)U32BXK$2D z#|n!k?TCEH5pPcd$|m4a50(&`uYzi0kQwgY$ESY~?WC=YI0MbAz|UG!vue`?urenv zWi%=t4KT?!++#Im?2GXt&-Io8438%@R6ZII?=?*j890aol6B05xx0%KE!&ZBr-{9f zjvw6_$atq{DTbY4HaKQ)lK_Q*~_9PtTXz8Q~L%ihN_`Y;}iPjDIP=-SOI?=53* z|Ew<4T6Zx3K1h3WO9S?@Vo9w+bcz1RhRxy?zLq%)M#Dcj&1R*b`XU!bKJvF4*&*8REJ{@S`p zTLlGlueK+^^iTyVmy{Y<~n{j(3N zNY(@^q)3xI+{0fsW=3^0vNao2JT#4ln&_#7^zib4ae=N+BkWB`gegx*89MUP)0Gva zH1$HvCH!AgNu|hk4lO+)g?gg}(G@0tFSUD0s`tGswb+vSA%Z55zVwnB!ca#}%G=P+CT)9FdwsEki09oIaCi7;GhHUpH zwB_`#@I_q`r`-0kkM>=kqM06edyf+)r{XD>Q!;UtEUSrM|KS`=w<1kBqX4z-zXqav6E+;LnnE}Ji@E9jhF4f~qaJ=Er%*F+ z-_S149{t3i*V45K%XTSk#qF8aGA)@_HaOPdq^lBY!HK_l%6Wa`^ip&2epCEubNApQ z?-|&{yVk?Pdd;hWgl6EfICKQsgi{Qw zgdh4&dq8ji*H9Hgv8Bt{cS*hGr*^xUbhFCmk5%Ya=Iv(c^wZ7fiD)!gVfL9!4f#%J z!H}-Ht~I2oYmFXSAHv*Oc1|P42Iwydz2YpAs4=*2u>v2oJJL^B7B>}b8lJqQyj&rW zNCaGHM{&`G8oAh=@5>tIJf+FvG>(bitStY*UheMV5U|3xcAz-ttYtkE;9xXzIVfIO zmKw}@>-fXQMRo%;*+QNRs5Q{75i2fLhCJi0<&*Vv<+=!lHFr$xpUhUljT_QZ)V-n# zPy>9yYv7N)N2;MlQi=pK(y#q+g-M6&S;6MBg5nB?sZVt8UV6;CU}upn>BL%~SODm> zov!(&B9K=jfrp*&&)^p%oleVE1wfC~<|?$DUiPrrIEv1+6tI6dNwB5T6JzE?=CdpH zG;VaBhtrh=h%tr1s@Va`G?UGC87JihdLsJejH-Pf;e<+#Fb~rm3w)_BYF{FY#|Fm`PD=}N;ve$v;g0L?!$G$I>{D@qw;f=v( z>qQ?o;yNy<(nJcbV%lRoB@$0V%gnLy*V$^KBybBF^``50}{BB~p`oD8WPJ z9*9s+OZD6_?{Ii0RBKMIfEzO(3~Rt~xNdfs8HPw_DP{F1Fyd2gtot@sGY+>DI`Wv9 z19i!F5>_#3zG*LG$wc?R4;$~#{zjjyO?A4cbeHd$AWE&z^+kCx%w^qPq{bD6a;9T! zLr=&IXRec&#SiynctqR)J{7v22|XMQzthi)9jsmaV*~tb62kol9JU&;@z_Mnp0j@P-bKUDX!-cUkGDy&vE(?-Q#wkN2o)q|6{d(^yy<+z)H=NiaBmmvlmVZ{`=g~g7K zs7du;Z)n|aKq(j;&;B`CrM5L-G*X(@X`CLGhA^t0j7IqS|J zjuVitNA;X5FVPoQzmYCzI&?@eAXyDyKXl#>TN%j)C@S`>XPm3_8s6n+-SC6-f#7#{NyNXDjo%RqWMg3Z=ei*A$7x1$=K z(ut#%FB(rL46MJvUn^lAnUV)h*l~0{lu=jhv{!rS5f_ly}t!yMXQIhceFANhPUI_RY8~^$lJSfYaXq zA7K7#1Is@y#y#s8l#k_!AxGF@Ka147+DQAmbh`24Q(zV;c({FJ$8@!PZgb}j-Es2> zn~Pb?+6byjbF>iZKC#^RiSBL{^|{cf52UlXw#lE~%Ngf~iRx1#OtqFQT3ad7{M>UEl3}MS@h1O|ViYY4@M%6se$Lz_f*MXZ>_%jkpf*jr z?q`3#8q>!rWwd+gy2|IVgDv;&*rlcoTG_j_ymx_9P!Ml>mqgZ;DxH2!xmI#JW_eu% zC&P|!EqcGCV#%%h%N&$tOQy*gqqa@-^Oj-w<(K)AT=cHyf2!}I%-gIx6Y1x|>&3`{ zy7p4!XD^GqxCGW+u3_+ue>@s@x|vP0tGQ1f*ose3l?gW+7t?+v?&BHAWmg-!ySU$) zg2zO54kbkz<`kdTw9+>vz-HkLd=J8lirGHYMDA*^28oK9hmh{@Z6)?s#_nK2L=O;r zVGeLI5G3}Yz1PsF&DQ8Ev!aUmProy^Tr2R4ObRZC|pvoCU3H*+V^l??`3p~fv;t4QF7>{^vk z>w9KP^WmfURg~@f{4I;QdQxbQFLdp4UmdrML4ik-=4H9Yn(8$>v@Q$!B;2^CL|+2$ zYNh&LuJCClm}T^Yp2xSJ#Ml~0rit}dtF}#aYu1WKR;8cX|J!$~3I9gXhhsIQmi8Vl z8*=MTTKj~t=Zy8x0+(|KSlJ6kRS6d`p2Z_~Np-H&z5r`XWLFFck}m4$potwxa}DuN z-}9+4S%0Rm`~qqN@#J)*7qdH1Xd56T!yd*Amoa@NpnR)H9dcxueBpl!ZGw2mixKr{_mZWJ zxnG{1e?#(>k^s>JQ14f%WLDW8#Mk^EW{{y_+M*TU)Py7rWP7m|a>j=aa99~1Zz((~ zD`yi6IdKo+G#ZLNrZfWiLQjz_i&s-|E@WoPqQCz`KPa;#>R1sYr%3atWP2aO8IG?$ za7Zw3P?*3VtxQ+*h&NgHM)m|}0d&vy6=dY0(_>P!vy9IP0bzYql#o0ZT z*qh30MwTegbN3fO6A3!J)b;we`Ez%4=1_KKnSE7#yPW8xkjLr6a4dOzN3Z(o6m=gsdsH8t-AdY6oc%w_cUK0{@&xV`iRYZY~Pc)_TRYQM!c zXN~00z4`K6DKwSai6dDn#3AVkFwGC9wN*nGRAT<{9o+GQgE`9I&;{WTs1g#vj0>l2 zrBpov2TV7L?A_(iLD=OD#2}Efj|sisDC@zqUySIHg?)bi#nbc!6n)JJGJov@!uS2< zcC_`2oaNvQd1?&m7^OCU>QD}c(fqb}CS|Gwq--2mE|xB<2 z+7cZ#8?QIYU7*13;=hZc?>oWgx3ZV zkXa>c$g>S^tH$Q-o_`2UBP(})Xxi5`QCU|Yru50>26IjGq2z*aqRs!`zZARU|HosW zj0hsrn1Wb^pZ^0NR0&ogd^7R&FMX%m%a}T2x!N1j@&p9Q0V%YyTFBN7tJ{|Jy@1Jm zJ8}!$v6oD!AA;3_YrlH&W?|RB#vN42WG@Q8oX7Q}P;! z!z=kUtwz@)Twa1+GO=xqX}escqsz*vwx+(ZPHpYpkZf&h>OU|kH(3r^%|b4e#!5nr zEVbyI_ovTAae^J#AA;F*T&b6|39y@M1gR}O|CqFjtL|T4U%FLpNpykSUY~F#;_*L> ziJ=rHnp+zn(|o?&p^_`9g%P%71b(T5<3qko8qj}bl;eI|;lkm3f<6$JR85m9#q30m z>6{#NJA~$D6!G=KapeHP84ng6PIFE?&+q>vu>OzU5cgiu)=x|)J{lY?{Ewg`V@`#X$SMs#h$d?0; zvx#pdFl~ipwRClY(x)J_R^vnnT+}yP0*FQwbRkW`<24(Wv-?|lYTu_qD044Fcd?KK zxOoFI;!(U%pfRR9|No9B#;&6xBqQC~ko2Ul^~Q%s4S zx>SjE$nln3q}2zsbscLe-Cp99t}ZFTHwR%mvG)fIvPpj|42H0OsGL{X>2U_j+GvlJ zJ_#VyV}F_%^9qb`Qsi5gUq%&6G=~5E)U>~{_UGEkaLGxU6>Dv7C61oW7EPRM+2U8S z?C&KkzYo(Ag{*72rRI$@-2ft}=d$jMRP6%48EAqdlVnUXw~?GL^FxjiILK z;2EXAdrze;4Dmx=pOOZe?b^KQt$Yll`H;N-;?|-s_@9p<REp(o-$Rq%X+#sP-zBNXS54yzJ11_%t;b=yYPZ+FdJ{2d(OcMtKmX3fzEm9?oG zK16$zk$*#fA8u^o$|qqg4QH-Sqbd9HZG~jbO>4}|D%#fVVP%&{*0+!=lQDLcPoWo~ zI)Pj_`>l_auX;{?tj{`ud)HSGTySdg?%hyuu)I}-qgqQ4>GEA0b+EBdSNq_0y9hrn zNXbq9xH^vOCr^OWoMO>Osx&hlE7x-(d;1bKMR}*zlU}lH*;f;2!qRtT*SX)(r_=E) ztp=OZiM?I+y*}9ZpASR;jeE)rjprJB%gsA)QnG+S^VOxSImT`_&jJ5ypth(h1Oq5d z>${CYcb*wu;IKUC7fBVK+iQuZyUb2p9S0c;r?VV2{)^bL8(hOJy^EuWEV^he z5V5<*f0H(n=RdLbhVJO{j7w|a`%Y%SWF9!)o>br2|3BM!nfNwGte#uL;Jfa?lL_>h z%zoXiPsN_x?i9S!WL`(1lRcDX>b^J%dV0Nw(@l3tk`hJ?MxlYxT_$%^hPIBjteVG7 zqwGRkh9de4E48U2n7OBXq9_lP3f8W%qp*l z@IaSF&QX;9rDkiMoawu>X`>YY!6ziy`6w~;JFDFLV99rj__F6#c8>&rzU*CmCxFbM zF!t3fakk~_Uk)6MXmJ=J;|g70>CSB-d(OFNRHD&$P4ImtG>x9}3cuc-e3aGZ{4QW- z?qt%)Q&Y`VZk_=_y-XUt71p+9kmIP()zC9I%yoQ(5V$_q%Q@cNAHPqn|Zd*soY^6B4 zjg-7V%MxkZ)q9a?e&E{+&@p-T=zP&aC)U%@XafK*&Sj&XTxcyCXVz&b7YTmUUCXR* zHTWP6nocYgEgZcE*1mc18iB<%`BaEvdQ8qNxTYa0$gLh{iHNDO^4C)}_e)E8KXmaj z|L%(=f=T$Gzi-v0Z8mGM*B~<2Z|-py&VR|8Lv3+VEY{sJr17OGRNng#*dDzI{>40T z6!2>0(@i7Wj!ZFV67*eU0}N90NV}ME_F05I1+%p*yftH4DId4Xcp_JE67}^P-UwWP zdb(5K;&S=K2C9B;AjLE5diDt^T8=XIr?9N_!yW*2O_e0wv&W|p2TpjUh& zo&S-V+!kTV8>wiA6sxbgSa#U*#~J<2hyKSzIWWMql6JdR8B+tK&|_T9R%mryQThP1T2|!S= znu*-GPnfG6hyxE}h6p*10a=l2Zxy-r?a&XG?e+Oo7eB({8Vd^{DSn|^2L!c--RYHU zDs!`1FXlouM|Go>0tP|_wrYgTD|F*G%=K>;H7v`dw*3>;nk|&3pO4`9BsA%GS?o7%G1GzEnBR_pi6EK9h8;a=YF8xB@iW zl69b2EVBErU)qpVwHAElI=tS>i7CZa}|b5K9z6a@xS{~EyO{`M@8HlHB{c|hVzNB%;R<{Y+O z8B=sP(yiHMGN))Whl(p0tMVCUigO{7toL5UnMost{1j!o2Z`yvs zyUNphq!G{F}*)hHFnY)(cNmUqAdHV+y9?R?IxM)_AS}PQ*K%uNK8ga)zHCf|`t+CPcCwaJtnS4R8vDvd2!3MnBFO5CDCm_R+rz z1CxoE^N63V-Rn2&{HNxKV?i45o!0diZV_}qML$;+BI5oQi`q1+L8*Y}J*(|W_38IJ z7yu}Lpw}+zKw-Z3SdR{uTFQMp@rmX9E9(9|!cPxgUx6y$3*@SiW7*!_5ond2mc(Y~ zUML*y+zJ{{;!8tGH1)=f)(tmD7{abkfO_IZOZt23L&cMDV2D`43IA7Kvr$>T(u*{L zS5JUpp&gn7L2t*;ce|atY>D3Q#z9TYK`dewuaE3Bzd;443RAz~N&Kt+Bnmxyi1*Z~ zr!evP?V`_6TD+8Vd$s>!p*}VY(JB`~>n7Iy><}Z#y@!U95LdGa zc!ht!gDQsyO`ls}Iz2K)MN*u~A$`!19FL<}{g(nGeS|r-GY}lfI#Eu|`giyw-;NTJFH3S?OPk zIntL570b(JJ60u9n^3LR_^rS_8|sNec6w3hVR&B8hF3&Tr6y|!C0uDUMD&Zg(iHCJ z4&WBo6(loDT9ZkK@O*@Q8Y>2@J+a&+jI9*>C=lrOXYE*;yqJYDINoF{Z_$u{Revam zegBK%LK7X1fIhI6q;=IbR1PjHnpcMnScoxp1G#Ju}T*^aJs*1dMD8XL8eq!C8C&09R$TZ@2-j%Sv*{4rBk!rmr)BXM% zwAXyWd$VOd9JBG25;52_>G@CPmi7R>SfH98xZFKZRNSj!(w=j}JGhmK6QH-G2|!{LI^l7~XEymw7V38wgv_yu*lP z`&a7$5B=-2_+-(Xi4QA}-wvfM^aj00P_xuAX>=pJ-MG|IuC)KUl*`+w0u5dO}iq5mqRqv+!Ol zxQEL|>c=9o$7TP*?TmBry5T|;vBd9vU_zUsp2U*rg>&-fi1dlGb*7?V46RMxWN zShB(ih9cT>zmruMSq^gPe3|m)1c9cbvJ!4fWDB$IL>O))Eq~L|{9XXXH`V#4_Ghx=vyzQOe zdzqP;BC^4E+Wh0UrzFDAbBtZ-F<1NQ;<^d)>&1cG?NwaKi;BL87noqWOTiPgPpHoQ zck6S3&+XYQvhG73fArai?Yf%WH)9Ly1ad*z*hppnC`xkB8i7xXQ%O)&2m@*W%G<2P zf7)vN!Xo4jutwO=Ek}~8;cV@2kDqm7R&caz`JZv~X~q9e*bDEcfAAx=*casP2+T7= z@~N7F8%$5?ryTz|EUbW_C^ko*mZVPos;GvXmI4K;DAZ$+Z+`wJC=v-wBMB0+-6F@0 zgZflc{KCT3Ek9MLt!*AphPb-c{(=17#M9@klnT7ME!^J_O{Y74TmXuj744D?gzmk1 z-5OF7sEpyGo1M!1FMo|Yjg9556eG}XkVZqoQi%;H=6`r(QxxInA-rAdt&siFfwl%g`lF4& zGzx$80wmgNrziK2bg^#!Ad;f;c4cyOvksQW#iVa2exv< z{!#xV;7P;&>HoP{^SR4J)tl5?Di^#QXAt;rSwNEKKh+RCyiR44if5?Y*{*AEUF%oX zEX>0`T}hfS0Dj&c05C_gS7#*H&r@Neq~mhq5MBCkmRNl9IGh{^NeAHo{O=yhXt)AH zJqUEwo3jr_spG$(&R8c%b zyEF;ohJ!;ogCyQ20A zik)`emaqbg&YgR?pX7H-jdG}MM7Spi}w8wqwT&%a+O&$bN`YzcSD(DSCumRTb`=GTnigdyKO9`DEH zsR{sCZ*__Y0r6(4dLn#OrnQ*;$z#>+Gx3zFL~<11W=rMIx$1S%EzNM~D~X?Tj2x!=`6@}`*c9X!?G_9BYGqdH~9fki4l$hhXOrn0`up2@1 zgFQRtU+cDzyVRpz+D;)>hnm-4&O(hG7ceVCkB=_3ppYwU3X$vlE&tIui^?efsLVRO ztF+2@irGwh4`1r%#Jx{dWii~DSFm%`XJ>+sy1W{qrC7pH#sn(y7AHCcmZa_-5f(}@E>@veY_v;$r}>u%v29f*GLY(a9z2qIpS*99m-KApZf70R<+d_K=dxV+Jd50sI z!9#QDf$VNATa3;7XmcVaQQ42q(ng-1e|D`hR_CwXu-`8HKz5@x>SwMcwAY1BC!F=S z^XrWJoIvlzrO3!=zut<`pZPhE4VpimBU_#sr-f>@l zRvMh1Uu&t*cP2E&>OFJd2e4$OqUWWtuJeTdBP09ZNLP?^X?WMdSfmT#4l=qV?9jW~ z_R5UZ%z1~w0aiQS;d^CqtH}QhrTMWkGmr4%R18yfGcL1gAPeV-Pd*AXTL6j z7xbS0C;x%+SBgWWml2C|h}QMt;wM*$96U8lZ$d=-JWl1m^^{LH%dsoZe+NiZut1%K zOdw?3f#MY%#G4kXbs&RD)@>mx1@Uwl~VUI6ILO!sikV_0N2~11C-bqBt4P! z_=-@_C!EpLgtSh-Anp~9`xfjQ4fI*D;RuTO;(GPbE5X=u|6{UhukCzIZ?<70YVCK)-qiSzglywDf#s_=gw!_N*bjVvRm#&pj zw~(K_A(>g1fdfGci=P??}6e7K=~PW6NOSgapc z-#{bB+-J4cLY0r>Y-NH0GR7ElDO&#gd3tQr;^n*Eo$)SbQ%=(jdO8GfqVB|BTj@+tv=>Rc`ZkL$#{v6#QgZV zX=tqhbk`(8z-(iE5N8%4+8TB=Qas{cLN9WD6ic+;;w+B1MOO@oJQD6CK?LoM{DNIXA&`N~VzHI|%{b zCD{)yY5HxqIBR7Fhi9_cV=f@p>NGfA=CBybMBRTDnc@WPG#k^uE!tlxFyPSA+M|!QZxQ~5aE`+1ho_y@z1aZPm2!KqHCs%~kP`jcY`SRJv zNnEbVKB@?panZPz0dXw?-qog8IrPSp(TjF>)~fSrGf07^{#Cz!(vv|h>qXoP4h^Oa zuQ4RVH^YtQQbx~Mkb|CHE!Ia%G0S5x%gXMxy|XMA*jv)ojgyVtth8a5GO2w@o^^Z# z4WXF&Fluq8ec(feuXSML86Y@0vN$R8-6W5bB*FCJ)Zh$nts1ePuDKA=PrP%n%5ie@ zBE9_QGuG-pW33h-J5x}c+rGu_snF4*HxHRp6=0>zDn@B7Ezv6z{h1+JC)8--n6I-6 z@4XdIrTw1UyY4$(JkDwI9SmxD5FPX{J#l(3kDM&|^HkWt-L)S-RX&cw2Z64Q`I`o- z8gNq2{0T2!TeuD4qT%|FT<8MOn9YYFbW<7dF{tvdcVB=)bnFfwcISSnagHtIU1B9u z*lrGmhZV$2&d;Hx05oe~(fv)_v0Ft+c7==ymM|jN@05wifAXR8&HdmRW$pRoXl#3R z0xtW)Z)kAVfv%fv2>{pd6 z1V+h|l~v_Xafl*dq|S@Pz*lw$%y$Xa<6)lD@i|V#<9d~kP-e&6JoxpcPT-QzBDDw% z)a@%BAJQkkJ){pDgPeIf&-Jboy|laQzXf!CGsgD*BuYD=gMe|@QNITO>Td0$$55@P z%V(tAx$x2d-05M=T922I}t1zKKe|C_!g z-IiG|4W*6e!tN28M-N)XiE_*ET$A`lmAmw^1^rj!34NKlB0S=EjIl9g1P@10;U=gZd-H7Y;BmJj zqcOOs!06ccvO~QgTRcJ!rzW{8`>z$UzVe-D6(Y%VgDm6^J#AN8U>p35Bzi1-2j3S% zxSB$TOU3SJ3D$0{J67Q)M(snM!Ypd>bh9azC_)+vdH0f(jo{9SpoWaZqXxwjnu2Z; zV+rx<9w}W0T6NOr}Tue%Pe_)3eZE(rIIVN z2)SwTn=t%WfN$D`-^Ac7nE!F)iE}4;PYybm-#V12-obq;T=Wj|?a*qwj6jZx9bs;~ zGC|qj{vfr^L6ToS2)=hG(eL(7Vl>Z-=k!#B*zo{l&jvV1y#D1_X7IKh8mR)u`!LHg2pAgTMRBZaeT=p(@r#5Kb}WvZ08lPA`|_kkipW{be`+lD<1w`kh+JXT-nVqVL_**~ zpvfKIf&abK3rQ3gyRPqw6|H#cRnRo`Ie~uuxQ#Do)96SSzbxb4{*+}e8{JmF_B@p! z2xrJCN8W^I0F-a)g{AbC1|tMFTPBAY6lq-~>U2pBEr7iuk1QNE2I-|`Ju{b1AKNhm z_pQ#n&-Z^Kp{_j!!2OF9gA@#Oz$G<8bm6j z((f9+2v~{Pf@&Whlydo@D~ENWZgW4=UVT^Ch$f_4nD0q$vmK5*pPhle>VrVp)N6P!8TH#UrGE z%C+Hz$V+W1gfp0sVvLMz_ZmJp?}zDv-<>eYPZ#pphSg!G`iv3q&I?hdy;*RA7`&n;=bv85vxXdWzikpsj9#QpJC{HE2&o39P1~`{;vRKNuY5F+O9iFp_&>TP)U<4qRYxb!F3!%P zJmk2Mx5$sH>wQZE0+Qj=jbGQvAxXl`HktC(PN?P4fdaBUllc)!=DhoU)%@P}*6ltw zQ5CV3K9ME)i$|y`>7C5A$%vaJ9^?8)1CE*0jb+4vcbNEiRvj)@)=x}aI6v6aKoegH z^#u}As6z&KcX>*8^ye<4nXeGusa%`u3#?&Y6WIhgl~HLh=sGP#?}kt@RlpT?Zf;H= zfJ5NnXJtCK7ppY5h~0*12;)Hb&|MpXTZObeT4E8%x&0hvhW|X)M~KJgC)KoO#?jq8X>w1#%-ZsFw?{9GNx%T z|7uU@=2^tGx1vBNd*OYWMVj4;F6GP)qzdq&o@LGc-RoAllC(^4dh$rl|Ln+~)#ZfM zH5pWVl`&feKe7{6<-k!s%R$4i61Z@;dX^45o+uUh3Q_-lfNFrwX&45ejPXzde^|vc z@Rzn{b{1xhig||1RZy$CWKuu)@mqAqKc|au!$K_mhZ_Cu({FU7Y5U*wj^|1*Lb4-f zM7wx0&~uH@jyn*!U(G>NHp(}4X~-GsW)~eeX8EMRlkVfc3)+L$>*->m?%QpZZl&vO zJeESixyD^Qrq=(lFl$VE=FKJ_w2u}RfBR?iB(r*vE|2#dR=+3di}nntu(fI~fB{&4 z`qJq%42mV;l#FN1tN&XpI~@AYi48`9NMT=`$kl_V&dPGXW>Sif6H!C&{FAj&%DX)k z!}9wz_%p#Y&C^R7(2D+kTxKy1W*D{sy12L{rT=07Uv9%P_cO<7ey%g9`x;_e=BP2)|XVe!sC_$|3OTvW; zfm=~`^I_=h#6tLCn)qw5vP$7?Y6UZuN%sT^Av&b&*OuNeK$aIv5`fQWF)W}?GmfoN zjx)OM(TD7N^Cbf7*@Ei4Sr7i6?zf*er6(A2c0zSt!O$-k(@I`EM7pG_d5(%H|3SJ% zLH;zWg6qF^FhI9p?I%e$=jBJ6vAYoF@zyFqPbdx5c=z_yW(4AA#bmLrCrtBlS0^0F$R}(MLWtA z{_csWPZ+2%Lsk&LsqBP-qJzEG&#pJXkF8G54I3-Z-)qDmusudbL(6M&TUVl2TdjJW zK2oDCi_h%kB%9zwok=vd-V9SiZnFwvp;{kI6B$H#^&|D9&>2a%matENGS2QrU8@SomTB>q{*;xk;mW_!(Hrif5+4!Sp`Cv80m3r zt@Wr4A~=N0DhEmZ2hz4C>Tmq^B;_HV#n?SP`_nG0#k7!6j(mbt7DLboBJ1Sma%38h zbY|EiJA6t57R2YSOq6BM@pIPd+YF{kBsf=diO3dOy_>YNi1Rb^g*>8Fl!gHOuZ2da zmrXq9?W=?Pi!VQ7i>Fg;v$}jHdBsSjE1&&x3$1akpBArI{a>d*BZvxoFd!+(EdE5( zGZ`nW8}!u@)=WF|K3?3_-8j~pFbPcH{;M|`Z_3yk6J1wTx?6_}^I|Fj7uXo?Ocs*2 zaSV}rr6*pH9A52rdf{3lxAM^AWrUYlHnx+w(s=Vf`h}6tu7@&QI-N7o-VTMuPlRJI zF)ceAjfUzm}OnP45>HHc9=?Q26 zx0{W6doi>+J3f`AoGBAlTR>XL6}XCrJifVTg<@~0O>?~2##LUdugIXYhPb62^m)vOl5BPv1ky=Qc) zR__W*eZKDp?n-*$mc8kNnzK6uZI9@tj=zne{O0ftyOVZ&Av$*I`7U&DNI!PU2*H2O z2b3u)W@;py8SW+kAyQAPy0&2B$a;T+?mY$Dz@e`vp3VDheau#lKMCu*7Z~kOPW@2M z;O&vyn^xWFmQ4%7vF+kVeM3;X~ZwHEdro>0tuT zJAy~>{?_@wN(Re%MN}XayuuMz$5-X@i@c~slk8^6ZyGN`0Qs5J#f-d}A8l=5p0)2!;Z$3mGPu$n^rDfSe^$^CI&XSs-7Z0XIM$Uf45^wXu?rDzK{(Lsg5@rwI zkej++6z{zHCFxW|4zk`M!xLlhohN23BSq|jA-GnI{vCrvAUmU7W@Mb(2IJ!nuwHZ| zv@K9?;@oH9Ira}*>e?jm4LK)dXIUq|Gt%4jt1E8~Yj(!~5%+M^28T_1ReTa=eI{Jp z@TtywsWioL_YSw|a25~upyVw(Y?6)4*U1m>+@Uq0qW6|A0F-=*gB<~Xp=YA=jjQ+ODAiabbi8`ZuLfv{A>-Tm5o z!||9!RZ?9%UY%Rp8&p375JJ6Gwj#R+OnXs&_RSxfB_lumCNE3_QS6ZTbjm;~>G%V0RSCyr*`dCa2tGBAGm#n<|?#qMR4 zoxtYo{lSqtPc}2C%oOr#+XYd6u#lSxI?q1--gbnAYN=%ALbp))VPki39Qz}ht;bhh zHHz!=uz4l#kx6eZ-5$2q+;hm(V`8)+HXNF-hTVfh)%JdxLW*JYkNJ#b>?k|GNX`wg z?E7W1y-7_-+s_8DujOk!xBiA2g_!Yi$Ofu@4Ewp=HVr{~B@=9VR}F&~r)w(JvSKV^ zE0y&;x|xsDdHYR!|BED5ebz*2c6|@OE53YvUswzmao<(D?ut{jAHB#gys5=S%&g(dB5jy8Rubh-sK9`fvBUWVLg z^056wXVj`$?=69Gq^B|_b~9d|-~4Bi+V1{dX&{|92KwgEJ``Bh+z;Q9xyPMqL~^AA z6<0ZE8p={~QfW|Q0421BDadE$TH-k)vq{_-!FQneh4>*i~uvnILU#s9}GU>LKf z`LIUNTlq%`JuA;IOh89<)n8Hih^Bk$KW|Ef9yTrST6d16HoO{7vQ@BF5_1Fo+4V~e zl5PJkD37?mhU8B_6p;P&#*yK5>UgeQ3pSlI;Qs;CKr6qJL5SM;CLD5273$5)WjK&u z*MZl)Pq7H~_Hi1@utvKuxzS}pLiD<>98J{_#Z6%8kTy0iF)i(IV0~$bGr#)0`9gtHHNLKwI-I;AKJw*>Rwb8}JfaCiI z7@)k^WjrbnF_d}6#o3r*F~HXm;)SRu%61*Hy`;_eGD@)eHU7o~2P@8CFb>g|gLguI!Dz3GUK+fQP#@!( z25+(q-*tIsTaBcN{4 z*$MLbk5TWC_kTB(D|RK6FD3HJW(lCSBnUP!qyxin8d(48GJv+l1$y?d4PvxqS1+@a z3jx@voMc#Zib)@vVP9rwE%Kcp|dk6E&?#^+6uRJ)uyo4eL8ypKmCtLI)W_#`IZie zP7z(MtRK9*Yq{3#uP}B=IMG(KA~{iP$i~8GABHApUuMF-LY~a3Gm!qVkwIJl)tuW^4u$$3Cs^x@YF(sdm zDD#xMHbD{nio^TG&{_M$UU8G-Wo-*YF_97_p?^y~t4Mx+!Kx2w#YA$ACRMj5mUB4% zGB6L_`HgjCyaOQeGWX+E#M)r2A4)EkU3Bm-fzr%Z2n24hFD2*7T39GqHL zzX7%M?Y-4i*te1lZvRG@52p{>D0s(o=y~(%a#Y%^wZ+wzS}Y=gavE)WbuPkO8SjNG z+DdQhyXH{0K1Y=Y@T^_nWb58O75PR=l>q4Z#gMwT)Lu5ghiSitG_l~zh{7AyIwqfuNVA5> zhTO4thPtrSc?^xkuGFfpR>an?H!r`r)^5vt@0}6X*idh;2_{O3k_05uDmN4hAIc@@ zmHFtmyOF7)ScefU$vv%C?MDeR{~JQ;0o(!e3s0-Q`qp-r$_Y zxd`t&B5oV#rk8D#ukvy|_*Zqn>t-**YHqcQSEXg8LXfXe;wGDcxo|lGHFRT9pMZ(6 zaV*9fY>al|cwK2zKXYKXUI3)uo6_~Cc)!l_bkTWfna8?d2z>$6C-gw%iM20R%*oC% z3oJ=CsK&b(k(fA*Ne2;%(d7*0Cuo&(O>20baT2$grM-8Nzx6+ca=oAY0s7$Atw`aZ zmjUIPueB%6i6Gz?vLPl=TDb6ZU9IbYPA3iaUG}*3$;|!Mp0n|4Z;#rtV10{+M8~`o zf0Y;~bWQ0tQL-uQ)EQMiWO=qjxfoKFDNYTwx6J1mO=&lp(z|jj(?S|`2B$*d4RsNb zM;>bxBcU}@o#1N|G9X@_C_(vJaow-!d_BvVzz64{sblIgr78y0#fYXFVeF8)nB(dS z#IK^3-&&Jk`*}^r%!E+pLb-zHfow+h-52G_)>8{ynO%k$fu-hYqBU%tcf z{X;HJ$K=bHy4h?z-%vj9t@ZbIdSHQ(=d19Y@I={c5^JR!`Y&K-Rsn4K;ky~XybM1kn}FxRdey1jHkgj z5p|hR7a3JCpeYA5)c_!!PuO}@HL&dP$=7^19^I4g;>T%x$d*ai`=D@U(WdS1={ zHuAWNK)={{ch-1ARirF0rd%8!a`x~xqn!eE5lV_`0n|O(7P&?xFPC#V4PqKZ8p@^W z={-mWhkXLM50P-p(^7DH^p0;6Xa3mxrPR|(a z#T?v8*SZ5uL|zQ3%appv$n($-QeBGP+TI@NJ20Z*aPNLE>N#Ft|EQHUHLLISYq;=z z?@Y@UWLkAqd68FK-IoW%8+;W}&NF5wQ%)Zo@@RKX6fYPbDk3R$F~c`GLZE`QHk5FL zh~TSt#<~Xcu0h&b4UtGJ-o;eQjM?!N{0@}zO?&lDRf2K zF>jsM+LF&Q&K~Y!qkWd=cX<58yWIWd2i*JhI~?D?!R&lYRYt2UK{wy}&a3Zz?RulF z0h4%=K}9mmNd^nzbcu~h!1el-+A>HltN9<+fO+9^tbW^!Zwy5~WOlO8$-Q?OPa2Zg zP%X#A=`qD(L7kVlI*f@ig0}Ds8exIR3}jAI)hy2fW723h zWFTy`9))h-deQ7)|5>gQunJ9O$QKD0#}kh4-eNfU0N3Q8L#q57-!!ehihw5w5*h+$ zbjv*Wt;e&v5=|pvZMB@%#yE^=Fs4FGiAV`j1Vwc3R`k4~G@_-?_GY8x^I6tEBNU+B zkBeE@(@yUl@@VHBL}sKDp(-Z0D)9e`m>_^@1Go#>P_Xy zF?AR>Qvx}@DQT*Ps?b%l|68F4A)6pddI7sG1F&rS$V?o5p0=3~edE}_zG~ob+xxKv zAaD9S{zknZodt~$8()x(k?Ab~@p!d3A5r8ZZHknpN>GLrOWSpktQJeubENt-qfe`l zGA|GbU;X`+Sr1u7<9!#2?|pA0`gSQt@H7XaD}xay_%hPse8~CHE=Pk3Ydx+OCO1YJ zCkIsdjC@w$>Oe~xMJ+|DF^GAge9kv_(tDl!CJJ6tRiN{e2sGv5Xi8JAgeE&!;qHg6J9?TAs~FwjM*-`1eMQw>}9h^#$PXRHD8>lB5zQ}RPVZ&RPj+$cfZ53{ zj=#LA_dmJA(HHxAa`Mg=Etiqn$GblQWXRIW}IR z+H9~c`L9rHPlL&Z~9cA}!`4&W~>JXrLG!P#05n9v+d7kMYey7pEop zh2m<#h#`ulRh5q_9C>*s4NbP9%UR0lgI(@_{2ovh5xea0a>z?0P;7UYMKuWLD{lxp%n-#P%~IPH<(U#l?X0hr1jN zZ(~hOksF57T~#?@aaK?*9jF9Qr{U>H+uIXfTwlvs-2F#*Z$sNzM930)kP;*ZIS0;A zPEb8ZSp;!att@9A?+uId82p$r-_eUlH#mK;&*OUsoIjk9pO0{5g7LDE zmAb6J{ko1pxgztia!Ncjg=Ky=0yq{9!yE;4G=k&oo$M^O*e>`HbNU6&NymJ1)qHG}UJAl&rUt~Q2hF=X}_ zB9r2(sTT7+CI`16KOL~e~bf&kg;i{SPm&pyWc6z^lacX-Yb`5aXX zOR8lT6WLT?tVYx=X%TbK#i_I_*u$m>QK&#SNBDF2n0 zu=#xLeYOGdL2S$_-X*v?p-8z@LYJI~F5sd*9A5P@Vd1ReEmfJ2&j*b6_ZUp( zL~(&gh4;Q~80^Xn0!Vrt0Aw9z3bn&!>4|cOJrM+}O*tfAOmu#{&+K@Ii<2>ni-clf z@wLIU8IXR&QLcCn8*YSnXv+wUaUr5ds~q2Ngl6+O^~STPBs((Rf;@?IjJm-~#|Lf%-=l2GtnXWLo7zmh*|uPA1HcN6bz} z6w8>Zy*JS(!Cs58Xb1_+y8X8YVgqSbGuoZ8bK?;^Hy<$Be@Hq$AxaiBO|z*Af9XQj zdM_QgHdi=%dMW!6Zpu(EGZsEkZN`-IU1q0yjCKzhOfHC$9FZE|2u&@x+P1XS^7^AM zD?~1MAJe#u#wDmWz$tM<rOFN2CHd3nQ&f7z67u)?uRt6S*MP*#jZ{(l~!<%=!-V z#@^+HY8i3yc!WAbF&paHqkV>x3)0aH8|R3r0wJ~s)d=ren$l|&o%PPpxIoC^oI#A@ zY)+D&QRMdnQAyokBnOrlQ(_}U)ZSFTIwPLkkHh|7EfeNmRJ~9Z z2^VJ*2GiRl!!VZ6g#EyU`KukE>$0=v6$6mo$>M#l99RRJ94Z*`s97+WpHePArzs7- zS>oM!2%@wMVyk^op6mm8nwuam=x=;o*GBky{>=-$z6sB{SOig1=V0$`&4gT&-jAm} zx92{~Hya$k%^46~?;bC3_FlDt$Tyr(U#}OWZy`l&lM4pZN9^88C>H~oGN!H)Tx}_f z0Zn6Rs)**2pkVieH|ois13I2JE*qKzUGa};dmh^9q&CElUDE_d!UQ+Y<8iv~Y11nf zSDyxT)&Hh}d%kKjEmdvFiO7@bjL6R?6cPPXLB|zpGS*jHPF$&fNCZ?#t+Az++x$vuOgI-C!`C^;l z6D4{+lwd7qDPBS&cXm1@8J0vzgV?rg-h*#B=2xX*uL6J=zk23@k~FM?x=bh*8O1zf zd7e_t6UscsxlISZUw+jG*_QzbKxBnMR?Bqvg1wuM*t>O~@%}@y(FrzL68nZYZM9FL z_I+BhNiPm*92kc;if-?GmRIHg4MT76~O^ zZ3aret-V(TrxCSFXV7jhEQiVPl7hYHVB)#Wf~!ZA3CW zsXqAdTwOxc|L-nn;%Y;&Nbt^5EK}weV+NC5vdNNoP!J_`SUU>pqY%WnZU96B0IBPk z#)sajVY5WiQ?ebyXi+g7pJUAlNP>+FBBAMDeT7mI#TCYe{kQ`lea5$^1%$LWo+vmc zlzEJ*p{ir%%OTmQBpy~oNfYLySv9V#0m$phfb;=~f^z|U1OO85!=hAmP8=VzJXgy3 zjJmv!Ym!zs<7v)-el2kDGGYMo9G~S?WkT%Rm_n`;dS?Z$XEQ`Z-ZZF3qZc+ zLw%W%hZlbDm(mN;clitA!71Z?5myJd#A}G?l*Is7S()*$s@|zXkJFl zW<%mpL!7!+m`z(}rRza?O(j@;kh`K3^QiZDAL{a(BBIJu>O932Q4qIsn+~Yq>b{%q zYgZ1W0$7iYYvQyZ8RR5cPLxyu>`7Pi-O~nH)v|we5Yoq3O(XbatW_h-mnqTth$wSJ zNk`4Qj#jVv=U)-vlQzTFIlRu$RED~YDVH(z(o*Gyrjk__$6f(I`rxhxN4Hefo(qUKw#ue1$n6d(s;l<+G zFq?bI{O^~)t(vJDXdD!!VUZ7sX0b-uh$wA{Viy|zZA&#Fn_d6yhB2fdSeU0Hj1 zWMtjm{%S+vFPQas6@ceElL^tD!u=cK+=dEUebX_>Tbu#uBER~iGwm-$J+E@IbzMdD zwNLL=2IOn^f~-M^NKP_1VSEsx>x~P#7|V+(_QM zjV;ZmF^V;AB}kVH8U&A5kF;&^t}ZC@CF!sr$tvR5wQNOe=b>SfiR*F{(_8`}PNA+1 zrN)>#LJA)o-^gQ(uGoG=!(Z!b_Po~3vx@qlli{71a-z<=7~sR5}&tu6BGCeblGV`>Uq<U;4 zW5u@Ae~PaPfDmXUS0rTK;F=(m)>H;xfi~+%ZolW_a(Q8M34B!TSX&^Al? zQ`nkB<631v5NZ`lZ>ZZ=>T#}!9WvS(vU@O~%rl0g1ZyLr#9&h;ifg_L)9Vzbcrgm*->Mj#X_ic^u|rs}r<}$n|;xU&oBRTw>fHA^Wbf3M@no zl(8jd%)#w3`D{R4B)H0i2!AVXx;_w}+|!=vLpc7& zQ6tVrG*wDDAJgQCHf0QE4?P)B)NC}R_n-FDBJ7uW;IDFgJ%L6sG7v?MB(2DXCE2iK zFs>2f@ZPs|vK6jbQa5wPyEDc+OGcB5LFUPq!HMeFyXZN4_9>Cf{&Q*o*90*|EzO$d zH84}IKaYM3wVZvmXF@}IM^h|qZ|$=_r@wT_yPiW_cM*9};-q0XS~A`}V|sARc>jdK zct(^~h=gW*(XJG2lPWosNIhA`(x3n4sSdE<95ha78t`Ii3CGr-UtZIOc*)BM_5PiH z3{UiV*sB0-`|oay%XXYQ-H$=sus12?=B;CHzyFY1@7?3z&I6_gkIBa8*eIui{OJHD zhp>M~@vbHr%yG>rd3lV+C(Mf-;&=*@gmGk(5tS8TBuUKPdCYPiQod$L81)N~qcNE7w2WhwFs^NRQKB{WqKF z8<`OE4JNU8#N;HyQ>F*^Xo>;lY(!neR8@>esp~`BMM6;v)fIcgWyT+Q#$ne*g}ZVT z(?&(&NJtV-HmDek3I>yc!K6ft3yqv;XbNwZG|imJ-khEN1-pACXFCmf4)qe8hoU_c zA|L_cOZWJ+Xii_>q)(kEujP3ADtnG>WOL*x` zI%c_eh&MNw&-Y1_L#&KKUHYXlN-o_q&zLX$XMw*ugZVn2!{zsJeE`yXSaluIG#RR6 z#EgmJA#s+F3@vfmsgFCNxF#DGjCSWt56@)h=7~;D##}5dg-dZxHb?@lqW6~P%$qKo zbk*Fwjz@X79~7(sNL)af3so+m)X*DDWQYfbbZCe(LV2tdVCIZ>E|~6Ju)9BFcR%Os zq^776>O2Iky7!2C`*CzdMnSKLula7zxne(%Z($zx#Y8*su>n9J0Iy1DDuZiG2x|Ft z(6M8+(@sZ4*Uju+%~Jrz^8ko$g6H05bQyqnf3>6f!T{vb6@XNT6g|(cS?wcjLe;mK z5Y2so5eelsm7qb+Gqnhy~m(g?~qn#PU>4L$e0Mn{5OAA2U0`Je+IXGqS z@Ra=398av^v@BQ#&x%s^>m>wRJ z43@p85?(qPpu4vaYcv3m($WV#P!q#+$HWxRXF{+%N|eDA)@=Lz#tD0QmE z#URx6Ujgo~B5`m$yDa5RIJ>V}bKXga*thFk1Z;%FsSqckCJ2FwO)A7L80}uLb9l=B z&124Po^W=$Lta`fnvA*%GrHRs`gRpfwSR&A_}d=m7r7s8%Zi0fiYwI?cr+p7?i;~l z@y_DBU1c#{Z+~%@=AygoR{*ZlZ@NN9E9}#~f42c7*Y>bH`C98|EK-$?7W$Z>8hL6Ew9Fb@5cMdtXC*jmyPFTde8UD`J>=Eigy<- zqa9887JyuzXi;rZwV`pdyZpMwwZE}$q>|g8H%ePi-ZmsUY1O>H-bDAkhT{!I(yzI# zidmA4AF+EU!KZjPjHjnecOEm{eZ+KUkMq-*^Tm|HS=5^qz`3dc{i^JM zUW#(V^LrP*Z2)o^^!BrFR|%+f;G^lexskxYD${Yr{{Ec9o5vj9K4S0IBPIvO3??&d zQsNs8r30`!c)SlxO0Kb?Sz9;f`_ljiPlB>nlb@jP7^|1bw5TpfZqTL5z107w%B_3(z3$W`OQX7NG*giz=18iQ|at7iPo zwo&gx)IbTD5c!&!5LFN=Y%*iK{}5v=O`TE~8O!;Yx`=5?1E*tV%LJ$E(h}DL6!H`R zQuVHNMA$POS8{OcoWpk>%E6rnOb?G3?3@q}<``SynwBBNfQ>yOC24a(Hhj!*c$eX5 z#AqBb8dZ#jw`g=Cm;ug3(8%f;a78fXvZEl+$l`E~_rJ@f0eZz}?f2ez!kHK+4O!yZ z8^2&xjyTI@Fgau7GxdI#{9>Qk@j<9HcOH8&VqT;)Z3MfyGzTsd z66mG>ewt9_bs6`5<3E5^!C=}0)}y|msT%TyXL+HR2+}dwC>*^uUNYD@k=@$^&GSU+ z1}z&Kz@!@N`GjSj;v0cBs|Q!J$z26jEpJ}=dbc0j-k4epM$EcwRYTUjsYOh?xo8H~ zR>bKA+3<+r_zT99l<`y;Pb)^t8fT_RIl|W#aYB#8@u|V>r|kvTX&%Z`vPY}=X#`^g z>8^I-gbdR<5b0_g80?w|SDO_pUDIQ;y9$8x9n8jATodD)CT(UNUX=siW!P5zJkH`>c%JU70+6+9JQ@ZRT45ATzWPKe?qV%&!K zUFZX8uy%>H$5{IXkrm>oCe7xIM>%S45haJz^@t{q18WgaW~rXV;PobomR`>2T>e?V z<}(tonP)UEm`-zU-nii1_a5=y4?pGhM_;mc`-surImsZ$*k%O+*A4jLm{qkw-=K-{ zF2eb%S;#Ik-#o9h>bmM6JuTzc2UpfWl!6^9*`y@P7EC5{cBgZ0-Z|#>_wMuF4}Q(< z?|;U@JNFpvKPJx35!-K7Uz?2}8N#3rENI!JVKB`RbB?PYQe5m%TugC|AhseoI^_6l zhs9z*xs1WB10hcnHq240|ZgUIZwIt%uhT~9Klzu@dRU@6O4~A7({{-TUSu# z0fZQVC<_^pc+em$u+bxIG9XTrENd8za&~rVY_wJ>T(HI-@){?!PhCiiBWIcUe$F|^5s5| zP-@fe+f5uC&>jGZ*ew6ra9A5~b&Rj$;PkG*P7AR7*V|LOA#!!dgy384BM;dm%(bqe z{yIjb)P?LvF@MdyAD*@v!3N*534*7-7jSx730BhrkS?I^8@mRTtv=E=19FYbCN)MI zyd=a;8|5t5n|Rc7!uusL-GLMXQRIm_iczC$?q$`lMsuhA%*EFX56LA!W7-)>O_VNV zynoD%>PxC(03N(}Ox!5OB9Euc=C;)vUQg^R0ElQm@(yGccE(O_-a6- zc5gilrC0IVAzrah>sm0<7{$aMn>eCKi4o%7_}X?obUg^q10Y=U@z>{!uZ@FamX00S zG?&T28I!#e4h|o2aCpqkcOP>2?nAlx!58e^zAux5Ba-16Vi!Gl?lvZTlp;Gf0}U@g zlqgYB0dw)q5w1$mCL&4-;?bPp-FFz=zr)Gn1Lh|?)Qd=6bv59SrvSw3>?~g{eMv1O zu_H-c5U!-rx^yf~gC2#6MTWZ&r(s`1mc*H1WStP^uOf(zoZ86Ca8xpQ&~S0G!_thX z7HCs%j@RXV!o0!zM(3FL-seayq_HPS98nbJqpMYm1=u2-S#j0Hz&ze9K^|kQ$HsHX zhI4jyXNawsRyE5dilYT^y|J4%TuyOokQ1^U?mc=pHboim3yaMV%k!+ z7;K_oJWq}}q;z~& z);c2V!dK&nP3UViz4wZGYp&l<5DUb{6GaYd{pt#z@#W~4s0I!NO4URH&`3UfAq~m zAa5@K8STtboe|d)Bmr*(vlMCvMwLiIbh%%X->jHv3?rkArX_=ENiwXksS6a5eU3~2 z)fX#Y7l2%uR_TrdPn<0oA3Ww}nTAY@1`pQxl)#%bWKr25U`5*icZI`-K-B6h#0Dlq z&*9;MJ0Cpay&rteyTAEsZhik(?7j0D!<{2+JOc@*ekWYi_xMyxoKu>z!8J2%bk1Zt zBgq_UJ(V|zJJzj~GnPNd_~-7HsARHz&J|!j+CLJ!vgTN9Rm$7}SAHme|3PY%(Vq)(o?T z(^$#RhE($?kXE$obk#E!mh;MKxb^^~CBR5jNZS)M%RG~5pw=CXmPBz0T2mE{<+);F zNYW7H8%!KgTp|%9?Y=7p(MD7Pvx25^NfJ9w)0&IOlcx#g(xA;c*wZn@nD+U<$@_-W zz*H3@)a_m|9(u-;CBtz}HmI;sjrWea^fc|bdk=8}aTeyHcZ#cPU`{s3**hp0O@mlp zky{osME25nX3SZTwegPI@@(KT+p=h(;|#B8158g|sVW*Fcv6nG8Im$%4TsykDFIp-r`( zIDsT1(5N>K=W5cbBpc<7#!DuXjH(clQZNdcD5(Sx1z~O^8s5(d#IZ6NmyE_agHcX8 z2;!b`(uDVTNu^S*fu;=EkaQTbA#u8X4tgCXL))9u)S>K3+U$3zBzd)OZ)|v`Ci2+W zkz`e1_#5U-h9wYF16DKu;>+4(IH@_lU{inP%gq#A&k< zTT?GzS-At{6M(!)-D6!S##IF4#FNnciq5sNM)wsVpv*oFB|Ne>7ro7EzaiYh;x{lHPtS z*K|MLD6wt@2p!?Lb3Tlx!7>_p4sXxcyM3S0?qlLC%tuvEHiF$-u)OeiSC9_Qae744 ze93Sr3}+J=UqqC7&_;^1jcA*7PeJ2_$_tHx5n(*4IDGenz1t6%?4L52%t=QT>K&>f zQ(adc-;{W_fcOmOA5+yCNGaK1M4cOqLSmJ~C{Zi!Tf4B{N+)=MDD~{@7aYEG#{TU` z>>Qpl-kTA{1ww=OFX!2HOra(Uw6^&L$TVb_uf{dtf41wm0C=1-&0h$4|88z`fRXJ0YZWarFZXEb0;os22Vpp%2~Av4ed5c4Ldmihps6Mhm9qaj0)c%s;2Y#o5Ho+0L# z!T5;b;E2KCA%oFlhT~Jx(Gr_>R1AFu6#o^{pCP|0rou*!IBOV8OZI$26cuEHlHI*C z4sIW@Je!iA52?$DrZ(#`0TbrEkvC}mx6ZP2LhTJ|m2~Ks?9JG_dCK06dyFR!iIX$L zED_V-Dy1%=T!cF35Y-5Ko5%tad7?x~(vs1*pgEXhWyWOhm|}T@su)w|DRpUSDidn1 zRYE^X2SDV_10dbJ_HA={-O|d7g=}21dpP69dk@*abHwD}jBK#P+6wPNCNxgg*=bcp z3}j=+&Mn8pof9P%Ycj+{G_@n2opW*Wh>MdE%kzY)u(&$x$1Ct5*BgLbo{O#(@zV}~ zs9=Z~3>`a%a{|5gUDDABHqKG?40qu00}$i!J||9(@%ja>G33Ps`Ety1nNTkU--Ik% zWR$1}K%AG=^D-i2qmsRw=iK<<3-)f^XS{b#Iw(-@i4sUM#WfA;3%olgSsoD&65_04 zv@_-K_K>Eq7!Pq2%6M#h?m8ccbLvL$ChT>i-Gbd4GY)S(War=^qsbXjyg;b&FImFe zx7*@|fMIvGeIwS-moyEu70dJ?yY;%1&qHgG$Jmn5&Wzogk0}>lV(^T2&&U@E&I>m7 zSla^1_AGCF$gVj9Vhu^A3`U;OXvSc0M4a5km=hpx0mwE3axHf24}b4xpgTA}qG_Ni zW11>ND#R@aK`Sy*RWkLB>ad+gnM$oSwP$>^LYDS)Pps7|NQIgD&3@aH< zW@M9dvhicG(Id@94@m}R7_$HzUc<8vFVKlVcEhG1B~g4Pquu))ycZFt1$%eykBuu=+ct!I+vTsTfXbqIfBT@tnO|4_MCjDCQH2`GC5NX==M_;_Lv3ykP(& zh+YcL3u+-s9D{MecxNud=?Q6eg0+ukjO82S|yH&xz~i#tT#(<9)dG8!+B;c%5UThd_jL z7gW`kRONuGifPKwTq!8lw17a?@9TU}O&5VUs~JrfOb;J3Jv@@p?lDoaM71F+m8Md> zt3eldf6TZ{m>iT$Zya-YKA>2nxJnR}(9>bUp4|Ze?}f&-dtMCbuwppPWx9LDaB@tV zJ;p>cgsRPuy}USR*Enz5QdBW$(**zO+kXBn5Rf=+1Hkh70En2-S?iMm^bAO_kz>4j z!p*ZWRT<+Ito4X!OHib3aIzH<77%0F0F08ROOo^q8$Cee2w3pO39-D*8IX5>_)B1j zY8vQo8;ffK$dFDfukWw4ox5Ebi;0vtZODc>*<{XOd`6ruF}6V@G@*a(3H;Kc0e$|9 z&N;H!I47H&BF15poZ-%6#(NLhdwjsj(IFS7`^?XFsg?tpDh|;g>xhzy!DP;8_l(_x zWA<(wvw!O`yN9Pt4o?_NW~74)BwlMEh?v!VT=kj6ggV+dTO~74=UL7c)Wsw44PH-a z$`Mr_Qxy?)Woeo~8QAS!Z`6VJ6#+;Wo#_LRICaEXMLJj#B@2w5A#x6K5%g7jh;Rll z`?QvE1xidbV=y_wSjS*8qb>sYbiT_nDeH0{y~>?`qX7ug)+HxOlr~t~&{QR}Sv1>KyRXN?81wgv-_uVtFK4kW?k~muu#S4s?friF@-v%?{G}OYcx`$g3;=OPC z7b;W>qG(1sJYz6@NIIPmr9-?=sjHZ}ur0muI&=D_0+0~XX&q?aY6-M^MU;ejl#X(; z;gUGLz}nWq>>Lu^WPgj&z*e-%mYN!CE?SRyK~q1ZDu!V{Zo#l?_v1Aa(whZ9R;8G$ z%7qX>w2>!HE3)B?Ytt!r*1ff!}no&=s}l=IS!7bp5U4xO%n%-TL7w=xH$)oF^7 z^?kmU6G=kw37=!k88&vLgE`Z~AyuA+wbedPX)jtIvkQ!?g!$T$6vT0bu}h3SL*%3d zAk7wlTo*6o;Qdd57&Hp|s)hqyTTf5qYQLg$45ei%u(2bGYHU(sZG|y4i2ue>VtJb2 z!dHd$8_`%H)Tu+1da+Tiae6M&gqODbo`VdWtvXarxobkaK z`?rtTzjZ8ow;wa!y&#(`v2hgy23J{^XAeS%I(I3^-d$SHXs5u96|?}3QJ3HvD}i6V zJMenk*0NsAZx;Y*H^-KEUL-_9qQn!Wb!du|67LI|vY;-@Rk_uZbK%l^sDd^avm_Zn zoR%`&IY(WFYIyFt`uomH(Ki)&Tmm5L!#}7)D{-nsvBTJgYFQFz1y#8uzo@h+YgB!E zDEnuux39ZS`?u&p3RG*51xXe$oTfx+EUr!h0I6H?Q^GURHlro-20aCB=eZAY1k-{L z8+lArBc?{A0xYf5jl)3~I?@OFJ71zYLm2ly@ z>OhP>@j1J`m(JO@)?=dv8&w!nAd<7D5!Y97xOJajyoYj$>RDjRQvDW=7F`1l8@Gaq zul0!Q_N^RaJyDWNHaMkeX?WH5sG{3op!S<;+nyysR?jp9!fV9jKzB84dqA#>9KLb*Cj48! zA_ufc17?Yhg0_Ots$j0>y!KAaw`2q8WkC7>#Ml5ZjHyU2YNEJCtbgqfUp=_S;he*! z6;WD{3=CuuHfgi9ZXHTp;qW&JfUv1BylSR53N}!Uh9>j&t6Xwm^l3pFZTIoe%M+yq z=`bc41R~UUV2P{HN45z-_{zi~*VU2MerC8OS1?AwIE3JwT;8Lvjy`vT+Yu`ifM8<- ziJ;yFLEe>!-CF`cR;9guH4jDVcE1fDvSYOiPIH6e16U@o4TiF=^&YwcAoRD>9sq$r zh9M!iX{-+bqV3~bQ6UllHtJEWh}sga@P66`tX7W8Q-V+Hb7eI@#Di&&4HmywXQpjq zGq%ls5ERJ!fZ%l>xTeo#{@UI<_+?5FK!eR8lHl+3Vt@S&a|3|ridtq}UM)TZ!lhMq z(>l!0H_P5)9T0nQDbgIem^T2(#!1=V*xOW?G3^64t1_4Fz`TA)v#%`Ctp9DmMh0US zm}rKvXBabRuLxu8DqU+#gRvFXWQB3$AtI!X_e^py6OdePvji&DJ&U z?(R_B-Q6ixq%H35?p6ryQlLbGdHe5^lC-d z-AyNH{Dr}M8SVGA1j z_>%a<--gI(mC6rs$emMdQKuuVSLKlgA#^g!u;w!ZLZ9GkMBrPDqV(D7b2-$>5vfoZ<|C>^TNE!-}%{?vtK+v*kvO2NU zz$g1Qap))RFlCiNgQN;auNUQwzq#*2*{GLkiIl(O4>CgETsT|U0uEIZd^{FP5&~A{BpNLgN)6O8SgJ4g0AZ zF+K20!A9JJ$d!7VfoYBVrBU6pJF6-`#JAJBu86Vf8HBNXC)+Xz$wbuE=crCiH*O3S zPK~1um+e;t+4Id;wa{rZ3)}V79g+{uhD>vobfMRU23osqmMNzM>?ArnhArKVh&~H^ zsCkjDS*G-G->kZeTt>1v{Ph-aNAi0hsVR2w1V6Fo!D+2(nJ%y^tf)(T@AxI$$d&_V z(|e!tQLmGzje;LnN*KxiYb{)7l~$$mPF)9H*Lc+=-QB7YaBY@PGs1{VVIK#or_%QK zOcl=aS3ARokjyQgu0h;m40jqoPS1=4g zVUOlm5b^!)<&=0T5`(vw&7PyTOHVhVAn*S_jQ?Eep8PVmW{|Ga$<|=oZgsLsOvs5G zy#evS59)m6Y8KKB9xH(na*h~G+4@GhcJ<#M;OK}d2^n_tyb?s%AO)=#e#_41me}u# zDEs$NgP>F$VW`< zyQHa^@(2&WDX10h9Sg!No)hm?A+?3$CkLK($UjdI z^3M$Tdm{QDXuLGK)KY-Hbv^1GS_k7xD&$7iRhVJthG4!Ey#4?a6JIoj1>CJNwXpsy z7lW$1s;_Zvsp01AOgFpENdOqVTdu%SuNG-6sf6rQtm_4@>w>*1mS(sWC_&+|Lj`#D zukLi@(s)J7x`)-smJagMZAke?_YbDNk-3|4CpZ*AC?7CQ{czu^f&mb!(UH6`iSmlD z%2)rFaQe;0oArmkFJnow$BTbJR$k3bjsMR6{jr`s3C8MxkRMpD;1g2f<_rGot3*LQ z*z?gy6baG27OHmp#0D|O_Yk}6dXxI2ae*)t!JP>l@oD$DBhkmc8Ue9%C!`wulBz=I zsTvLRuDMU!Vq^4Q*bA6{vaeoqZp6hYUpT*fC$bMuscwYkMH)6~^EG}(`=H2oJ1FS` zu75e)AT?&cHS)(7m|<#_c(IsUeU ztY?^i_CkB>7g`rSKR?W%YsAY-^Ldd5=B>wb;kHeo#|X423Q&00YxCtuKB9FGA9XoM zNh=#k2}cnJu)#5>}ytyTIbfQp$kKnW8wX7nM9vq*b_`$Lno(x8dNWGCWj6?g<*jp zuDJLxGkjQO*MGb~VDiT`Fe>*ddT0g)Rrk_s#~WHb?Rsfv#L~t;cM^Ci$bQJ#=8C8Q z)tl^YK}oz41wEAE|JQ`d~T^RBY6L9cB1K{PcvynN-cN(-1v zSOUG~tKRm*R6kq_ClamKU;Vqk z<3&b%kJrmL2yuNekOFES=I@ZklIewhZr=#-GB5F>_lWlP7U>$*Cg#%56|cIQqY{>? zlVzy`PO=zNGQ)HNkB8{2cL&cQjE;${19KPX`E&o8$Pj^)9ICEYIsIo=-%QEj0Ij49 z=Ei%wX)wA#Tc_TFCqdI%aGQx*K9t3sujjFTIt)Au1~rtSRlroh1du70ov8i3ToXd!NZo9n!g1bp15q|JXNUPc05X%34v zK*>@DLI*!jZR-V7ygTut$DezP%YvT7RqtUQk1$M^;1o6&PU?!!^V$f;10b$Bht%o$3N(f4k1UHiTYw2Hnnu#}F2NSDcCEGqXNxi62 z1cX5xOrioJUpK(0>+hU`${aToP50y*9C_#S$5&#H6~PdREsu>TOWNBv&^PdTurvlJ zn7`#{G5WzYu<)c#O-Dbk2r~%%K%r`v&D7BAVJ_W~-;;6oQ@2gatvyr{d%eFK=KC?I zdkV~HAq0A&emw&VS;)pY+>VG5hM4I7%Jy@k47$G9-jzTFzs-OmyY7PJg`s9Gvw$F0 zVt<&Bh6fY=c zWzm6(=>3x^iPe!d_ebX-l?6tfE2)~N<9*RsNCQ;y6_zKxzUwffN1RSFyd(5Tk^0O& z{5VAwG$5M4o@x_5ibc8iq`&XdD4c1TSCIVEc2M^7zGxS_dpd^ca%B&-q<9oZF!nhY zdG}G^CsuB;h>MGA3D~vGq$)Azyv7sZk4vi(mKcc=Qr0EZ%UJZL)f;c5k2&D5pr^UZ zKx98DEmo73@JaP*AKWf>HV-zjyV2wfd;l_<+Xt6x`tgswuj-Me6hkY1XI4cJw#jOo zvO`x8LNSkC)VNbE5`Ds$yM-GT616HGH$4Z8B-OeCH&Xt?Sbks4JInJ(ew6VQ1%imp zN{Zhn-x_0xrB=;JcXBcoT5S_V7wM9uy$TM#uWo*q zV|xlr|GZ)x?roDEHH(0haC=M@xH4(iMbPF*qLVmD(Npt|dVQ7Ow?h29S6?;g`4yLvlSL=s4pKd4_c z_dre0y8igyNq~u2@5cz%ennC<5lbY zZ$MQAWdABRUerWcXqaF)aX$sd3VKF7%#=VyG~h>xvJhVNz%hD{uQdxlDy+oH{V|kZ zcyQoyi$%aTwrC^ps5H*$j+eAcqVTL8SF~{fLJ8vSvb%5i=49j*ODzj(ZhVmA#yR)-(+=CCO?DD+AmYtR z5M!4sJF>H_I%-P4xC|l^_TADv*#c>nwK0nG>Kz`)*BzV;2{SMl{X`bQErRG$EEps@#~IHNU~J=`;Ud+r-cs+z;tBEdpMjk&a-9tu{)wITBNk((Aoe60Lqf9}WIy;k&EW zvs<*%7k^{f8_N%`J=}h|oB_2;cX<3aZgI5d=zC69&4FW9hW`thO`%o1P^*V?j;(`W zJiF$Zg9pEkXHw^>C;pqHcoWXhNKXRmuTqz0QWnA1=DIN4%?0JA5~MA7KW;C+ za0;O%s2Seg;w=lafW8INC@%{0$D;aN${qID*|of&J`Us;=D+cdM?2u<9?W2nu1K%h zy;d&T9@sSBTz-#z&_a+Me~#I?6n0%SpY@CXJ}~xRe++vf%WtB>{_L zm<+8HMGc#7v7J}w^VVD)n(8k#{mH@PF18*D0(kVkdH>DUGoJk?wfQHXxzETk=;5h> zgNPKq2j0Ge;Gneb{lpwf2z#2io*Z*AD>joz#Gc9C_wuQOpI%JNA!kKc@MRaxZa7x_ z#xTGk>Y}|?o!6c`M`y5T<3l-20%Q~C>P8^0z3pU+FB?IX1zOo42?o3#gnI0~1S75h zHx#6RT^r(4|6abSvBu0$w%)w*vr%`Sx^A*6@Il~mEaTUpKtXel{E1PBW90VP4??WM zVhif>w}GkY0D^w%gAbf5=#}#PQnONr*xxB4x*!H`@=X(f4)T}2bmByHn5T#nOHpyK z5+KfcS0jP1jajB`gR^=&+-iXmmwp?j6h*L=l$&Y<%5XAl)<5N2BSrJ~*^fFw>DVjP z5C0pN^$Nn6@|gI|5}0B7*eiK_j)mrXU|?JoaO0+kCEgXCX4Si2OOX*Mh@BwotIN z9Q3@&Pka6Q9F-&O>Jj($CSUx+ZVy4gVNTYa?ZwjI_O(;JK(T?eFcM6;8CG=Iv^~F3 zDw;XEL^fVYb6gkt z9aVJQf{foxHg4b5F5Vwe9u~lc5UnJZjm_t{j7|OT*6X*i9fcS1b7MaQD&hcN<(luV zGB1t6a>D>wuIKlQZiz<)$VGG7I65>2cQ@CPuKobUj>>ZSe_f36=w787t{77jxU#|W zZz!BRM2;seIea#ofgsU9kW8KC;}1u9$XNf0CLA4avgY|j;^L)wZw}pWt%KntUSwLp zW0(F#z=PZY4hICqkOm+Qm9!rd61H4iQ(;(G)5q!tG@(JCIL){+u799o=1-*EHM~%1 zYIi#o=W8#XK({p6WyZc$>Ol)YKVX@kwt#3Roj=t1h)3=@()N#mLGI7Wsy9~EBusfep+Day=OtjZM7u_JR!m!N;PWy%ZMa0&RkbmvNF0?XA99Dg7mRQ`W**KPSq3&tT z=kRx(!H?5k6TXc|1Pkn9N#RC6{m{r@4_GWE&664J2h=BWpr`Z1OqYitwvmBBDEVMM zw+rX)FCG`pOF&!;%8f;-8xJXic6^v+D~RUq*;ky*)GHGD5A1YIQ_JHk}d(UG#2~>u~_jJ z!A^$MNll8qq`8y@ez3Rx-I$Uf1tD2J8J*Qr<*!=QCs#;%fDi;kI_a`do(SWjNv%xO zM@8ds-={=ewc~z##{Q<#v)fI`emAORU(SEp#7T@f;dKYgaYZ zjeY>5W~z3&H&cdr2G5kq&X?^vvP+u~Uq_E6>e+>=uFB}aFHfyQ*>_v!kEy{312FGB z67rki8GhVr$8%UvSzOe`xj+w}xq*AE+m-nKHElWMaU57~MX87RXQw9$N8K3)>dJAt zx1z^fk~R&mhi0BA0gISArATzpq?Rki3Oc~V$NwnGpBVc>&t2u<12wJNgPXj?{A5WG z)1nvb^1mzEIp1(HU><)R%=f$mCU}1}?tU|l0F4bo6vWw$?#YQv;MQd)q8pjRzPRk> zMDlL-*u}FPY!MQrnw_m=BS0ET5DX;O0_31zV5c8k?wmFMN=T1UZru{-{LsY1_x!w- z4Kt%rZe_UvyVKFbhh2>UCF|G|z`ygVPehrnU$JZ>DP%mIhCxQeRNEw}Z{mPF&mo3p z%SH!5OSZdih}U1_T+D{%uzb7ju+awB@{*RCFbxVGv^#%Q>KYz>GVDF2J7v+#-hPAj zyn~L7rQ{TOgT9GP)MwqKH9p_2Kx4@pTre&= zMDKMl+KUbnBxRtD*hRXL~D>KKyl#{W|MX+wtH(i)F zBwZ#unXBeN&k%$tVulc*Puy=7WpC%?9IrcX$70&Ps@Vw?+Wo9VoWFzetY(3+^%tYV z1C(w3nC9KSQ_(XwQ^_qO*&VT_P1y^Kv7CHuDPWgw)wiJB-4`Fs#S%~Um&4@@P(qZ_ z`+Ie833`YBB=iady4tRp`ANd#ZLT<(K90*Nt^LQ(Nz;J*Z7+zer__{2nS z{$dX9f8A-mecgG<%>(ug3^>LF#5vQ@P}L?Z^Xen_z$%aiXdn|~u`cQ>RVB&Mr|jw1 zhjS5Ynki}ZFjPe%1T-thvDaJGuF%$v0@jgAKLR;^Mq=4EaDC>r z6kImtB}uhpvL(Tm!y1D2k=2Akh>u!DE=SISzzapMfb!R*rx6U#JnSJZHQ<<;*YL^_ zg|#(Ptk5SNpI~$8-v#cyhtOCcVZr2YG-0A)tTDs0VkwWbJ2oL)l+;?05)LY3w@lQs z7qq!K)AP+`*C?;0His3LSjT?+*~#kx#gQ3XVLON7nP-JYjC{qE~%%xuTx z#TR`g3%Vb=oRg65dXa(f?4S;o#WTzjppJc0W&pXY98I9>_ zxlzOv_%TM0MFgZrR?7q2{|7%$h=n+E+*}QTMV=49qG`RQO%gYuN5=~kDHJY@=$j&T zh^^s;p>6RgD_#Snh81=#1QCiS9+@*CZOc+`;=SUo4Y9I9ip0FU{oDBE2pQ==v(3iY zM-h>_R90Rw#s)e`Xk3)F>C=2i&A!*MqFLgTJ?Rv&pVS!gyeJzM!GD0)K*39<9%HZw zkDyzlRaUONW5HTPqzZ*r>Ff3%;FC5S`ZN$yIL;W2}V-LulgP*49wRV-%3A442&lo`+YxYS(RUN@@CZL zyBh*%TQ4!_jI9WkiG3CLegLx01DWX3v7P|h;8Btzgt8S6FQ>gI%MTB^dwqUkXW?l< zQ=*0qtm4@t0*I;7sN37G%{$p-+4SNxgFm!?Y2W+R`37N3YHH|$-$8Qs=MLeR|1Aeh z#7iovyx0^>ZXdcoUUkU?zrLL0B_3^`bQB;kx&$S-yPL%EW2>2$=4^>JL(9;tz){8D zPjZo(5L?f()5;YU|3l z+m}LePNHnZ^&TMf~oNt9?vzd#4^7XlEUh zA-Lm&lajWdm)|OIQekW7Gj7hLg`=RsoDA{C&`iXSZKN%aq3Xkh9KW!Zm7z18h4qt*YS2_QJegU;OXXWu`9_hkA@T2J7m5K}e`ku1ls|Ql z2jR$*J%|Rq+-Uz~06zjU(0ad=#r)CzCqr1HUS3`7wCWy1NHn4hLqEN&*$OA`iY8Y82#oUd&)AM-u^1Vb5YW4+l4eZOoqSXpT zg%XubqRLc&0emo9eV|yana!|$Bnco^#++}qGy+y!#NRgV$>n<}c7)F&kB#ooTO*B??l(ssPuek4Okx$$w8`hTx zV3M~H%HG|nFMg{&Y~@eK575v%1h<<|PE>W_iUheqww$wAZES5_NrZXXQseXHan5BP zJ?7F-J(w`({Q1mGMZ+OTP=Sp{3a18HrZng@z7=I25N%ddgt~6~6|att z>wU`6O5sTN#60qz8ZhfADhS*@d|tKGZq#wY*W>&R=f42L5`as-;JvAA>y$d+I&-_t z2QBrjadPP7`V1~niz-)pDN$*3=<$Z@S2LcDv^FC0O*LFad)q9cZI@rS36?ygw+7qQ z@s;?1Z@69f1K}sn0bh)vn=Mk=`9I7B8EnnuP_^zBU_l>I#ZD^9zk5m12*xA`@<*+-!FDX^n6 zac)geK=#Kp?V-_x(p-CS^Wd)yTCx)$trk{|4`mbuyEp0yvx|8@UeAaZ*Q7$}*BOU^ zA0=&_J%nFS*`Vy@aDjlJKpW6|;b{u4fRI{e2A+>YSb!0TFN%+VXHma3>3ZoE!(ZrDa;Yj9o7mSb(h6@Nk z?OL-E=QgUF9J(oV#aN*4MfSW48E{ko@k8qqaqIw;y;km5%EzYW>-G!BJZPr)E~OQs zj9*)5vJ<%wn&Xq=0el+zmm(kZ%kH^`#w`>C?6vm~Irv8#3*>2$6-9|}^}`QAT{;PR zAM`>q8yn2@VyGSMWMnxJuyMNqGe+9)s8Cp~JJy{8#J@!>;O_`JTuVPiRDSx<^!Tie z4x!mQ`c88MLxcB%qxNy$uORzo@&X>axqLk=v4*GGaB65HaXS%A{7eX@pa>$UbL0>E z?E?%2G@?pC17Tko1_LPV?*Vi)-0N1tn!oXc^dmNks%*q}6>uhdj^Fm2Zx z;Hh6A^bUr{!|=DU69fOPzK44z%>j{ua-58PjJANNl(?4G@GNE<5{PiUSx2m{NQfv4 ziIl|6Dm13!%CN_P^8KmM9|WpNxq0^ASJ*`KvpD7)fWo2WLkdnhH>!D`3C*gm^tYd7 zJtDV{?DO;xlL`UoJC+|AB#K`;!jI4)m53(1(cf&!Yv&UG;z(yJ-7=~GBDTq`Lvz7r zxN`W@b%)TQ<{d2GPpA<*<;Pt2J6yhjse5Laq^aX%k7GeH9xS zYZr(I10vI*jnE0@Om4o%NnYunXnds|G&LL!%0h5}*MzM_O&+g)db6$i^Bf1*WKOZ` zru&IZEo;YD%+HJEOL8R^6|GZDXq~i5V;S)&Z2m9Hkn+oeHJn*d7Ez(T60M7_tL{}@ zHxFzE8kDDT0#&8-@S?#>NAyRrt+uv=ToV$mC zhiB5TQYJer%H3l$J&e*5v_ecy;D?YTD5|6I~byx3MpGPRzNA1T9~;;ia+X< z-slo$PZas6MLj-41N!U}wsY(J;^Y%s^>eYT1-f+wi9K*4Dr7cmrSj@#Zl(q2Gb4M^ z3O1qJV@HWD!uS5fn{vzl_Lq{xnlmYETB&o@h@z?>*e;X|#2-z4-e-Kq`{}ySY7?>? zGSQuoWK+3ZIY?xE*i_hdF{u9z?FFqi211AtK3JdkLIaQ@u z*smn)vTPcUM#6h#^J#k@Z6B_M%EgB-pkjjHOpUO8JE?|!TH+;9(P0L>4UP%8B(;a0 zINJtSdM=8;@ZVgGaBStjN?ZkBa%`Q~^u6+9)13w5}(6eE&0`)nm*E7xHaH5Au)aUuvbFASN{GcX%WvZ|nn@!RL zol48;tMg)NXpb8hno3G33P^T!9{G6+A$8L(ZJl64mCkfKGv9PQ0n;kED$1y0cZ^lZp6zgx+bzGeg192|SFCIE}%@Y?j z{gZ0XsP;NWpa+pZj3OgTDNrL5d$QlhEM|0zob0sMnXG$4=1=mFws{eZX+njyP5RC# zQgehGJ04F#7OEUYuECPOL_KltTFY~nIs7afg87um6xTY75(8?XL*y|0p{PY@!)ITS z!G=n~%~?FA{Qy-b@6T;w89H(9f02zyT6;eqr`lE1w8|^(L~h%Rm{=WAo2kT(%#c%0Qk~Eq$()@dF z9IHBizh3n#qc>&~gfOa+7kQ%Td{dcq(Kzw+BdvU)u(yPzZ%)=p^GV8*+-&N`SjKEBv(id`sW{Qk+57D_^>Dv#c|&KWYu*1?_?c7Bk(Qu& zO(`OL02uuA3-yL?J1$Mr9Wl_bX1bx4YpWnU$N0_LLQ`Z*!@M*{Zkk$E0irrtaY(~I ziB3(K*@_ss<=O?h&uUU@HbMD^x)AO|55r4sY^^;Aw;|blhT~Gy{t01jO@Dpd4o*Dn z!X?o)1d6@ZkTkR3TwQTYgQvi-Z+c+3w>u7)js^r~@Ivmh9@2MRp2a3*;?<&-cV#Hq z#hNk?4mtoy9EvWrR`FX5M0;*yu6t;XJ0TMmbM_o)h956#r%^(3=oRR}>FvSE!C=;f@RFI!}#CR;#LTua4HdmY)Yp6nM>Px}e?lUfe+(|LA<4Clpr z%`^?~@3D*bM3WrFj-mrbGl0rV7=!yM*sW$ARgwOwNCKf4dp#cxj(-k~`*rY*8+DDa!#VHta zQFxDA%a;hKNVOg6vgu-}czcz4w8=GeD4Hp4F9&VfZFd`W#DR#}szI8@Z-ZN8q{aGg zHG0rVk&ThjIDQ-1NZE9~3)qtp?^pwcMx787^!ImL)-*`@*Hzzogfs5w9dbHvwnKcx z{sSRh6z)Qkegp5rhy`PHE9k&k_h%Vx9P=$trz7Yjx|a0YGK9|rdU-jyy11Y^$_xL& zuBMPAuUXEIyV9Rq{Fd{R#7IQNpd^c-*Y7eqe4MBCXul5>0eTU+TIxY1`kwzs8ck=owB!bPLfG3DwhW9Vx@zuK^GHc8wOGH4#)rBauy zr7oX#$NrIfK~zS$^s6J543-@)qy+CO*64w)h*qp5m7SN=pO38|LEDs%J;akz+AYgx zX4Ne;DpY{|_UuFcgW;QIDXE7mTK+qI3r^>Q|M2;b%cmT>6GkZ!0jY~181Q?3A^6C+ z=akybT_7aY;SZC6FI#t1MmG)%p}vw59YbM{a=7hFaTx47D-@201RO{!&^tuDSC6an zqpNQW3vK|hM1er@6f}kCQ#%Ybt)2OwvJWJawc$bxEL3*A?^_N(H}3wjh>l%iNLQH7 z{uZ29cpTgrMa#r2B_y6)`}4PE&_X?=QaoA#Q4(gMxw=uiQb9-NuUzwv2$pgtFg*3; zaO$0t)BWunjO-M^5i%9Y_PG2XVx-8H%`Fdw8vH(YadhL^OBT6IEmDb^hhfG>I_3)6C7{qdmnhUwBubAu-4~r!c53bWIo7X8xa}y<_N&LJLs-KI9Rp5I1 zP9;7s^??fwAqhR4_Jbzl_hXFUXey=jnf}^l|H<=r+Ix&Hla2?KND&EY;sB+zJQ)1R zh52tozAlYaW?`^pY`Za2lI(!`2#2;leQ(Vis++*VbuAs7Y{1M<5=Z>GjH(uXyCYx( z0cbecvZQ!LY-bNQ?n%f@Pw^;gaV{|lk- zAK4aB0FkVrwpgEOv}oK&%tA>LY)LVRWlL1=$=e0Y*qwaJ_fvR3UQwjX^AM3Dn5%FD z0EI~SvF_BH%(~I_ku$|+-r$I%%}iB@R0QW!gvTSYrW;2HC7I`$3&n!Ln!~rs`Ue=I zST#4CFCk7BTgRu`3ewt#RwT+X$OgSy2>fhpUdr1&7Iw09hH zafRWph)GR*w1Q47dM9n^xQfo~FL(QEPsQ&dewW6_PlC@d5N=_C#0zbydeT>aDJ5}I z0|ls^5VBjiJ$7BzMbW{So@^Wz9Tr(4hFy0as@VuufMBKLQip!FpW=7*@A>OnG@Vt1 z7#>^&%vKl=vw;K?zZERUY3H+mo+Y_2F~&8i~lCNev$r!zdHQeEL5eKYfTzJb`?*q5Xb4 zEi?(J5V`P#F@lgoNVi^ZoHW!EVdAtg1Z6_M?h8hW%3P^!qWbsd-aHTnOa3@A7C?T+ zX2mIiTwZm&hJ%KTy^B$65Czm|^bBenbi=N!EsmBNM9(0u6*Ci5)c;7nzmr=|vXyJw zql_x)0LuV{1)}>j0B9T6a8`^WJYD}s^oa2E!Z$9OF&3amIuGIN;R?lhvi$zjhGuSa z3h#OxoeG%w*uOaeV@%0KX6Zu+rO5x0=p*;+Rgxe{h|*Pjk1ys9U^WHP3SQ?w?(;xV z^uwPnT%rF+i2sXOA#=-ve65a)Z8igETA8saW(u^8m+Gfrr8IPa7CmuZ3OmGd4BB%6 zk*dJL3|(?{P?Pdo9m-d%0nFMF4#hg-WQ_Ay8lsOff&7)NFQEH4#mqORzb?;M5ccz>KrqY)<8HxFhYMj)AZ#0y7|aN# zRVWv2CDP(2qB59LeQ2ya4D8i$M26|}!D#1$mMu@kB->4uVlc) zHo|5U73c6se-Ys_`s~gpTPe4B-K#w_)?juIW~vjT4x&uZ7urhivT z-`6fP(N+aA^4*hfi#i_-`AhZi>ZK>1!{W4lxcLqT*{JNFXwcAQZ|xH6;9w6S_K%43 zUlCa+H??*anVkpcRa9S6{OI*_M*D@R*%XMLnWsjCOB$s*d=#F9T&A+80Or)V%`V;8 zZ2q3~pDvNjLnLd`&g+7n+!d~I3K?DE)hh$-OslF_ z!qQbebo8~8-TYaC145+PN%1n3eME>>=#r|Ra0ZZ%X?7aA8HAW)9+0bvcXCV_SFZUq z_WC3gVg?ktH zsz;>UDkn5QZ>{IHY0W2cPN>CgpyU0}&mPsp7xMI!GBnc2RGD8`9yVnyh88ji+B)|C%+mV-90QG4O5|KSt^sfgAx1?bKIR~L1%%yN`i-bWXJA_Sak-S zVjp2FqpL3Sw}z>Yq%3y&M4Paxi!fM#n`ZDGyz)}du9U(%aq$uhC|~{i)!}>cR~^p> zRZIkf?rnJ2k^LmNr$DJ4GJ_o}B$H(^*q?1eVum`c)~B6WIp3XVI5=b%#@G93dudtf zxoLKv_G@>si95f4XTKi4R(A5Jp4@5=9!>Wn;}j#hhpqE&#pX>2p)+Y@d$UXO->Pv0 zK0RZlW1w`q zw3pxdumbLPct&4jT`_3zaLg>>kZYgaYyO(q(8w~ygb9$%#T4|;GNx@uJSQ{eeWa0E z78zWL_lfulZrFYxQzm5b?bvA~+054XtI!^5ZG5owCwDKni>DGf+OSi+OgIAuF#NKz z%N-ZMTOoSwdd14o4{Qwuvx|oU*V$_H) z*&DWh$H7FeHI6xp$7_+6HsS^<9 zhfYDOPwZTCSIa4LD&-Q-n~2l<;BW2FoYi(q7vD)6kQk7}Mr=8H!ry55?9 z^;(kQv;9o=!_5OsnjrD4p0-VTJcr=!dpxV|@7i?cnzs|vDN=l4oa6xCIhGTOHnx(o z77x)dcJkC7s1fB`1iqR$uU2*(H}t(2ki6acpGv%cJ+xZ~y=S_B-F1evps;-t!-rZv z78qjEQcm44B4zkrfpSoPI1?hj$@}DHO2)>~oSa(?h+tk-4T}KYeKU%fyMg53~ z6?OK@Mc>k@CO(R!NgtVefHyQYVbVw=ziBIc5X0k}tciA&)2UW0E2t2wWvdm0&e?s7 zz=B9{4c-abyYk}c$Os)>7W8NpUZAYD6|V@cdMW|G&n%*5KPNS@9j=OV@T%dGIZ~7{ z4K@A%37P~fi9#*CoG?7&dkbvPpxl(4qH2567p)CQ9LjlAHS zxVKhu_^RozQyB?=#H8C_P1l5P_%%hVd;5~zw7RF&^F03dN>J6W4Tji@!avQmRxwYn zhif?sveL-)yXz`K{PV&1gG{p2dTmFKhk3b%pm#{Oay1`_jgjYE%5-@HFrnhCFQe*dAZ%fYx#T+pVQJn{ZYbr>K% zs69%qp0gi$w;$P56Mh(jvqz1e zAk$>Lde#^C)6kqy-Smz|pjvu4ef#a|Ej)PT!1S+6b-#mDoVR1(6Y^BvJAPuTQMOPVR7L#x8qyaXra=n$kt>&?3GW>-3%LDc5t)juh zcAkm9nGRoM8xYK*%=LLsx}RQOK2R#MOK@T`?KqlS3R-H3yT(3YrtNDVth?v7_qWnd zhuMc9IUNR*|BZN|Hd$`r^j>=;>5X2?X-W}IfXQTb;TfL@vCTUV>#Kxq??1&G;>m3% zDvtnS0uS}R!Zj0PGf|+;WfWF(b;X>}^+|#@ld)bz8|$2Z-=2vbk8vE%8LwRrTM%<(CxA6>K*v;Gd%&K%HP-_ALfpmhQ=ZzLf#XhK<`XE ziKtsHD?~xEf@O^s{261M&vOIWg{Lm;GXl8$nIBlyA>#a3pv%|xuASE>YgUerHf>?z z^f=g=IC%{lWgEF;{z4+^{i(UM--l8e1IGfI_Aa+*b2mzIMGMaIwY;o(&xB?c8Vm(^ zgNJFUUS43(p!e)9F7BXG4lL+c6a$q&YSC|L%ae!g20KLdE(1(G6q;rl@+kQ#*`3-V zg`k}dpfy_Sv(AMfdKO_EuIe_KbFZbqv=O$+eep<9eUgyLyL+}=# zq)lDJkO4}eP|;l2g_HlRs9j*HRKG!Y{A%28XOfRLFU4xF(lB2lK@$5@D{9NQlQkjS!6MY^EoC@mdxCTDr&G-!mvrnV zWy0^HDyGZ309;V)Zp0Qj^?Zbznr0Pad3K>4V+_T`#DJ4@pzrwgh|FXsIP3uQ9$9bw z(Aptd9POk(ZnsAMtvUWz2Yt5O`kxR!#9vTp)NU=y)6L#JKTNhee_f`jiCStIV~q;y zz0xF7p|9Z_h^a+}B;QAc4?^`CK@k(A{>Hm5;<&j@4N?ZFD~{}zGL2cQTJs1P6KPvV zY+X8`H!Q!j`Sg0>*N>ZcMvA>3h$`M)bwz~xlOX$Y)FkejPE;p1x1iP+y*}*E8T>3- z!81W@xRbG8>-t>{rYEcb)wZ>$>rGMn!Ej`jZ(M8<)o|@1sp#B~mx#rN)7L+x)GcpS zfF(gixdvg{OTS~bAM0zv#5K(#;#2cy|NS;iUKcLVg^uI(gk&sEI}W&%|%f zNq=84PWIy#E?ajSg%(<+jgp0;DcIF{tI#G#ercKSU_H$RD$`-9hKfiLg>iY`q>S801mb zIWc>g;ZlGpp;3VyJoQHvQ`j4Og8I zVt`7eSF~FF{83r_Vl zdo_y7nds<&)D71(%Qcumf*H(jxeJL|)ippG*#$p|%eqgI?5mksl7>%%WKP4Og91)i?2sP(~1U`mJ*lXZ814nH{QbHm5Rl4OSeLEW!HI*l}NYknCRX%2F`ZHRASNVb^RF z^B27|K8d5R)Z$h~PmW9c=VYgQ=dZCY>YaR$wAB7fbTBu*Daxm!HtctYJV3IS+rO{+X5HPAxCMa zu6e*o#S(3O3YFoGQY_{V-=*q}+V&cpm=N|wtJu`%>r1f)9iMLqkG{#`&*Hjm-uAZ4 z?mGBm?W12G(|J-~4cjh=e*+$V61Do+C}KZ6P-LG_TFU%EvG^hSi97b2M`9NRnQ~aP zr{mnBtMMW24W&Z*@l0d0!PQHit)#Dm_&WPFR1fF44!%iHJq9qvX#6j&SbGQc&1muno zOO_)GlyXdrmRRQh4uMncY&J0WX;6NtWxUA92`arigz`f$4Ob*G`&z^QfGz>xd7Ua& zCT90Gl~s_v|KI5d-Y)8|Kv~txps-W_n9eJRU5H3%n$7wW(wp_&^qY4g8uJX#A}}Ij zr#&k30mx=!T?aYaHQlUcn;#$b<-m=mWPYyJQ$9KxVMXE|;#$GRyGI_dZ5@8;^(adU zvCLEL4Q!(;cb&-N=J1V@`_-4cHB@&R>F(MvJkdmd?|ef~>R^za6Yxv#4*o#6iT{~I zsZfQf!hAc7a(Nmv(wE4%zc#86Ph3w_Y0uVEefWz74 zC#YM2S*yboX`TTO{?vVsmye|UAIhQSI3oJ5K8perh6d$Rdx@3q)k|ptbKwQ)B83dl z(LuHV)L5n~eSm#iQ-=|ByHcXetc%zQ&`>}{{WRav2+j+ zYFyB7x&aoW@AMafw#1{wiUT00SOml*L+t*hu{L5dB<|P8$ z@f*y+>fBG~U$bV-1GrjWX=xdz)$2?@=Y z6k);wlDA}wP7=DpWHU8yO%8jX)aX51xHh}sB8%R?gj%5q91IAcZ4YNpT6-+~z%JNx z+|8BhPR(#Qfu20j<2?9jt^Ai7Dn9+Rgdb0GWlb;A5q#i>CUp^;Ok)7_42w2hR1kM? zRSp|euem!4(>f4l<3mP_Z!f~d3|QMD@Ih9yMqVof=z zly>KDS`Gglx&w|>TuM=^Uh_4Me2h1wbAC$9k4S?ceivWmQLlu@&%)BqhDOX?l{~#| zZ5O|fk1!VX8+<>>FZ$|fruL1NaFtBa zPX8&%{VTV;9`cFQmg^??2_z^sPxU6st-oNSFAV!3?Mn0pgK2)r6V<_~@|aa+N#ay% zFJzubhfbYeVj8dYS(1bA*T>N;J%t}wW^1@WVf<#d@A4jwQAynxb5|mR_U=)R=ytYP zVKJGCS+x*XLur_5r3p$n)To+MmMB;3wuPix^il}YuwwH=z?WC;-9MvsHk)8q>0QM{ zB(T7@5cL-?|9saVd8xRl?#19w%J*J$O{`uDSS`HK6%`VMW$|8hbmmFYp@BkLnp&(m zr{Sk|F;#-kyBa(P+Sl;VJe6c_;Z4MZjfGX+4>y5SeK)y%f43|Ldl4N-u@{P^SNPLQ z`B1+isuxtvoni6@=xulsAn2|}$a)e^N9W`bEoWw_=NAUynEc-{kx$khbyIZbA{Qm2 z5;uYuNWyIv^`Uy>-s3)Wo-d?z7UkvF$ByW^c~z_wLY_*uf6sPtgYuW0R4ja4!8^$x z7(f(Y>9M)6cTP*K@f;yKvoGkEXcZAgAW-1H);uU89_{?aQ}g7=2EQrUa>k6m;*}VE z1%Y6i+gEcD7DduG)4Djrc-d!*H{*bq@Zf+KCcvnBd}l*tQe!A{H?6P9Pr=uy?uB~Fb_A#$Y%o+p_dlZ1-gD{*pYw8cn1-TZ|4!xD z-Kz!W1;+B8e9Wzr)7G|UZW)!xwDCU>TTsuR%BZ*M^7P+6f)rZymKP|9}p>JIx3aVh3*uPDw>~ZBr z$Lx@|O^AD#QIA>iWl^p6vY#*-)IrLcz4K1{59kH0*<~mPdlsu$l|U;L4JKaPCHh{G z7@~zSQ93B-Rhy~7JEx(CZ=z(qIGWq&nBX~mWyy*3kKfUE{*Iip(Q6M6xnADfp1meq z3mz0LUuL5(|Hr5|y$AQtaJ92K7uV^39*;P;=G1xW>&AT!Aoc0na~QOR{>c4z{)4gr zXd2-@^*0FO*1t5>ND-tc&?|pVp&@M({Lk%rJ-HWZf+OSl$y)p%6?C! zD~{BAE8G`YzwU2Zt7?+Gl1L2oYU`IT%6d+BVCI49l%&&x+WVYGe-74qzHtP88XBlh_TtbaLm8iA{V)y=u21-iW3Tr9?Y@bWMJ zUpd{;BS8a5vCGx-9YGE{l!ELxPB1pN6+0i-n`dKi&55imS{jj4RQ$8SezJG=pxF`g z`|_5;7_H$et*j9)x&tND#u7jddJWptTz)fZOia!;eN@vQq&TUd%R2?~Z{{cjX& zji9Btmo41gP`UG~DT5bGXeYer8Xn<^oAx2w<57p7QnVahYbaVZ@bfCqm_Kv&xpoav zSc^yJ3A*OW$AxAEX~8d}hEMJP4TDZbX{?)mAFb%b!uo?$CmFbhnCzHsWDvDkqE+QH za(D0#>J)}a@6p8en-d7hvGK)JshneA$nq4TfZuWk0Xx``5R>oLmI5A2WN=#kTo5W0It5%h7~St&?WiXyPbA4Et$e_`G@ zL4mKn*GpZP^+wk|NlT`J7I~7Q?|r_;?aACSX2WO~J8;5~pn8_8WGb%cueL0(bC9(* zVQ)M?p=h)C&(C?pl-`I?BpvL)%_^X6&qJw+;$FTEQ>4HC7Lls@W)zcKkQO(G<02c- zTmGjj++aroLl!U`6xSV&u-dR}jM|C9#zKCznmpU%9!qa>Q;YF+ zY$Z5nw@T$ul!+X6Qw`<#s4Tx9I@W)iy!`{YvXYBCiTnJ!hrou4gLW2 zuT<~g&PfzkqR2~fH#GNFTCbz4#tMZzqktcJUh3qZ7U4F|hI=snW%|2g@vw<3ZT@6?G%)BtdNv->`VVsLOFUQA)o}4;E_W0)9SK18Ffx_0Je!} z=zL#lDFNG|Mgr>&TTeiDy8jfcHe}s%4OxMZcZpBx(;<@$JJNfB5uN*2BC}B7<4g#& zV~1Ai@9&5u)U8Bh7@(6KN1y4<1-ny)7H4~NI zy_7TqQTlvf$Y%2@xP-3Nk1l5z0_#6p-ss**@@zdV5Z-*ok#OO@_|}lfpMvr4&&S2R z`SjEu3U-^G6q+vA>^xIE8R}C(x9Zn?|A=x_YgV!X%1L>DH(@VUk!8%qx-KW(`M}hw zWx&fHdOM97wntL_&1&!$aTr~p(8?B_(m5@+YUp4W<1NkKDb+dS4b0iqKXk&DJbJG? zMqBIAvUX?eIX4TaDAInGX1{+sB|q(~E4_d0WatMG!$?)mR*|=qh2doQSu$qR&$DFT zO5IIM_LwwyPh02~`J)&765lbS5@+?OSIKCZ_Fa|%_lyIp{%COLLvPS0$Dn~}FLR~7 z7KQ5sz4jp|kAt`h0vpKlKq4Y&<2IZ#7{Kjw>&D_ zO(~)El1P;E8!jE?P^*3oBJHti`cagEZHtmQG+3T#~umYvX?KRDlCtr!IYE&ezZTHnsJeb9I z>cM19WraLV6~-AOPe+jtG;-tBhBYOWZ`6cF5ZY*RbsbQ{=#*?|Eq&7-iu9(brk}a9OO1z>7P@cxWp!<%Pi!)+4~9#osUe|k{8WJO4S#H zv$h7)!bhXq1cDa=^~WXLP2wVfqE6(ML{c0=CeoGau4|Cqlb4$qsyD~#-4*;^PI%y} zIQ!zJp2<5~H7>*u*A2#cB_L)3sT2nrHoxrhG3)}Pv6CMjl@Y>AhWX3avlBap z`R~fQDBQ_iRbL;P7p^ZtFRosydIX~Mv`dz)j^adRikBMrr5ao4HZ2`)9_&$S@5b3K z>*L}1!Q?~+utC@eIST0x!i&}1WP3xxh+{P4#Z|KpEk*iOVbyL0M(1KscPlb4-c3Izh!OtR|*F8w?cdoc~XAvpS zy&M6%W?c-TN{IPapf9FcxEnl-n-Y@?IhLrv@Gq3yquq9M?pS>Lrr(0VI`Vy&$NS^& z4?KoufiXGL|Bj+PTJEsH*n31N8Mp-7>f3MHX>+gV3c;Oz&8NrHSzM>c865YpY#DY~ zMgIP@WMO&0X>}a!aU98@RC}`p!bVB3JnL}-DNe-~-R@r7a?uNt2JGO`ur^Osw6_g6 zE}BudJ)-7H@O($rlKAJh+eiZf3@fmEza7M6Yk|vi9+6C&{iGH;j_bL|fETy?QJAsg zJMm;ftMTt@ozY51)urX4S)#lWs#n<&pk?tKZram$apJ@O$ZJ96r&QI*I!X-Z#Ws3n0#FBRYbCi{5S3d`=rGFxXZBCf z`~DoC62CPWU~rs;d;ncXGJ<8>M;Z|4uFfOIPps|b?6px%de=AU&?_<(N))#4WYhnw z+;x|iil7&9(>S!;<*IM4DlT$*p3%$<8AUCNjt*WQ8|n@xw0NIS-%wO66o%FgSN~85 zdMRH9K4gs!`YO26dxgZcB(js(snYAM$v<(2b}!!<|RMI#_a1 zZEBU3$L*rUtp3xnL2hk-3F(<5|Mi{tUMwDwXK~Xwg+=A>)p75^yb&ClD!T395PaiY z!45vN|-N z8RvFI1-+y^KLgaFmXYD=jo+{rOO%Yhr_WklIE&k&2L9gC4_PAHvSR6pV{w5W3u$Em zHk%v858m!|=!GdtRe&EC1dZX=Va6&TwKh`*IN9XrYJ}6O4Iz~lPgUoAlF9m4ar1}w zTlU*A+fn*|%Jo-4&& z0Qv4>?_YX0zG^mVJGo}|`uAnkyoza1s_)uC_TpRt??wkBSj|ktBk6MRPUgCI(NG>+ z9V~2JFN8AWLecNa`|8hj=WyqC1Xb*2N4jyY%>k)!Fx{1>=@H{5{j2Kx@|trXk?O?Y z;ONVUscG6E?1&RNM7>>aW*ospxUWNA!a{`W4C zQ>p3?8#uUm^Ahxz+;ccbmRT zn^b#D&rt0C3Dt4DT4P|pH&(g`%8ROLxa_5H6aM-pg-q}mIKn=wZr*-K9cIb zck+3%1(bPPJZn_++oYOwXF!vlUGI3HU-p`$RCPlSe&!tb z3+L>5D=PNFR;1htNj8S0+*sNjmh`(K&sF6q=jPO=_e|&a6d0s)*s*y(%q$9{pRasy zQnj2A?94@|0ZIb7ls3UX$VA1i4&c;vH7`$_I@hM9c@Lttjhx9BrUh0-IaQF`MymlN z?lp9GmB%|oL*Md@F~!cuOt&%bD1!gQaxOj0y`5beeA!f9Xnv3|KZk0QTX+D_^X;2R z2FMFIRYKpr#VPOZ1Xi6NFB4CfN9p=O`?u*p_BfS4ba{|Y6oZ-^pLfB;bcjYHP9zAE z^bhdtp@qDeM_M%n1KMLEt~~CohUWL)mM9-YtqQtUMK9iQ7Ps#5LamQ+xw#;@+A~&Xq98NO{k%ar1x};CdJ*oRDYY+AK@>#-o+12NPVf&EOj}j`Iy_D-0z+Bu z;xDd2xw|48JN6*6vIEv#*#=TuF+>)rvRzRA+BE#H`4W+t&#f%nOez$V^`WBLyk9ozK&Hz3fF_ADdU2FShI z&;MPpLo#Q(f`NZa|t$wRtz z-pV}7JWYKaqeJ_)y&{GMY&JK`zA|6Qgw~23=wEM#zqRslk1MrFJP#eFW=NFNKCbHF5W}2HuY9dV7Bc z7kRHBClgjz5Ac9Ba2?S92T^irPEY@*QO4ao^%?DFKA&2)S-w)IyC*IcfB*t(FTBdS z&77>W1Pru_ZQ=eGpi$MA0(HdZz6xKTo}&!baYsG7`j4nQzOC^TpO%pGzC4cqW1&{s zRD#D$v-tMmCrZBLkqJRft?rWt@T&LzpLj9UvMRaBKLmX!5O&X6zl~2*nB{1yS6}NA zz9dhM--XjZV76RidKb-72#Xz8PZYBj?cDVWg>HMvcKCv5KY?1y-U#nQ-?Vk*2hrx# zUtH&~rZF$J!7%Rc-U95%duWl699AD38NScz{ls6&85zOKOkb0NJpCHGp0RZ%mRTQ_ z_9YYXn+#mlgUDhlpC*sk)KYG46+559Tz%7&7Ev@o!rW%*N6K_l5oq~f|9#C0pX>Mk zFx++e{7YMMV$(;=(f-mvf5Sq08S}dRDlLi@z_g@Mo4^7xD5%|VD;uD%aFgNp_G~%T zbnYtsgK#y;3mLHsQk&hE;f3(3D2cgR%IF3ilRo?OHZ@}~P(#|nKu3%kdBHt@b~-tTdDZcT_yLd4-M@Y%pA#X zjWYPvOKo*nv9s`ShQ3eaZ$TD!DkX(t;HPZR#Hfc&=TB4lVfv2?aRQkawV1}AN|SGD zqO?Bn$?9jqR`)2I0`pZ%e^~~kX{xI9Bq#2Y7XNDalw z^Cp@T_G7 za8*$d8F2F@j|bIV5I?|TN$R*0j7U2F=3xqq_j^2=U-Z5o5#9sgZCZIJ8C!^eDm^df*(Dc*`*FDcd&WNtXwtk z6N$$ELRN?(;F#{lw^N>*;AKxg^lPFcj~RpW&B~kf6{)*+CoRsUTW$}<*f)oN&}x<} zcLkRPEad8&yF;A*1AnIvytsQS7#7l2zwFt-Kx`sWxp|FjcTw-+FziG3Y%dtV(t zN*ctx1y@^EutwiixCIY}8vze}KNYyqL#1L~=}FA%zemYk-`L|az~6f9f8+kL)EQZ{ zyC(_fBU|~G9Kgk|ZCNWZQTjY97eOiQ-yLMn%e!Nqd$pEXty7Ka#Mfl<`nbI9^BRHb zF!0vgw%YPQXPZ_}D@5z$KVu|ttL(7CCu@?1TZ5x{WL)!G8o;ERR( zn+_+~*4I8y`63Z5`O`}T zWs?n+=(L6)#^>>o0~HB={|94by;d^+c4hb0r~`3;TGx;Q*=BgVpToww*!a1pKR=X# zNn^q=jkems?LB#(OLkAHq3g10&SWot%o-_QaGWbTRVM%6=9g~K{mle+h?3b?Ct6&c zgk*-jHy<(5<)km;FMH&7E0-)}^S-$(@U4+yngDWx`ywVkTfd=+LBjQZ<3~@opmpRd z1q0A8|9D+d=`Lx| zL!wG8IydhD*vG&CLRFpvx6*dEx}wvCt6?u2*Xl_(Q6Lk2)S9o2EaF*wuw7Q`0# z#j}mRUDf~a_qVT^F*H>5lF|=PTTHjxs-%4ju4Vi`JVA98-pasI1DM7%TgIFb*=GOd z{PWnUW~m=W2)|%;Pp>m`Hb0OyH<#Yu!C$yHViOx^Y3U5Ahj*#uj6%_kw@qAmo}I}w zIwh_a+5u^dflH9SaW#4@8Wch&wr8eoz=@tl?N>kpTtQ$h6 z=8~B5OT%2xl?Q$yl=U!&h4!_zHQ!2@N?}D}o$;!R(O=;8Tssuq?}JWU{h*xVGh!#5 z`bx)5gbmcv7i~rtzy7P&r5a^3h@9p;+bUQcH1fYS!=Ve5t3jOHg<)!R`1w2}|N8V*sKr~3C>R9X5OEqnb@x@xXfO%2nnj0mHpqL}1I^8$D*J3%f#_j&q}y5`NSz9r znyc7)x@SW3)h!@W9{!geNdttH;#DQg60ui?(HISMel({CQqdxcK0181|M@|Fo`3LxyNLS$ncyHB=qaf3FSf~xwX1!U}hax&(A?n@)z&z`gu zFaPzA(T?-q8QFb?;?T;2=b>#5x8O<-*QA(!fO7u({b0~lyVUXOpPBVM#}it1b4ks( z{OU(r3)F0-X~Am=o2-Ck7dMx+vC5L&v7;;M&Y;(;KbpNlz4L))lcKj}hB;3^YsCo+ zE;jHVm*%#pz8^iFP1PCl|G{yGfBJD^_@3IT+=AHL&>DS$9(kM@3F2!I7SU+IMQ6o$H>&UMh>Kq-7si)k~{!_-J%hM0r z3z{gVUfa==m2Wu(f!!D9uOHN--44>AW!s-y7Ya^FdQn!5=YifCnraL9v)!NuE|K?5 zWiayGQv*Wez`Oqt50JzH&Ktd6CCW3>@OIFacYxqhMVh8sOT%~9M+Ui1^0eg@vMjMO zEE!Fe@1=6=jqx|puZMQxR_NW{Pdc-i=JT#ynpvYA;A#b3KAk&F9j6&O6|%e>Ha1S} z*nd$=x)vKR;sNjfK^Lih%U*fmD9Bz)R61>~oKP!;q`#`G4TQ0PX9t$YarXc;|HHRrday`AC*TU`x?$5) z=3I02dHeD=ZPp`Mcg?s2DEHBg2aZjW(nIMIVhSta5)T-mYycUnYiP9mQ-PL}T z{K+BYj;ivV)|%*zyszKSJ#wpZ_gv?_1CL5G^M^c4YD!}NW>Hg4(M&o+=QJ~HlHXNt z0UT~d^j{WG`>Y2fUb@hD)!;eBIBLxZ64lp9A7xg+wD`l;{6*8?mLIu~siyhZ=(fI1 z=}%^r!W9LTjUHLH?I?MN`X;YrM6NMv-~8LYt(kebAc7P8j=ZgEp* zU&)EsAFGsbjV%c_Qqk_1zPEIgwllrc0IBln0ewh?_34jy3b52@oeg_py!d*1>Ct2~ERIO<#xIjOvebdjvh| zcjQaek4@X&!PXdVXa80-Gu0M$W zoPD9;xZj_+4(_Qn@1hThw4=tVM)XRki!|Os={m^JJIWMHHqdXa@wKJ*SkZ(!@!bHL zUrXo~j`Y^?FUc7DzHrW;oY6bVT@CC>wD6C`y5urVyBrgg4?Z6(7Wl?;44-5$FRtBB zjI0#nm?^oRt7pVMK0vAQKN)Dl=&pv}70=ly8dFf=^sdTu=`|30Ee*XqfLAs}=%QH>Wr)w@WSIyAqNe~1Gb z;daBy7Er?^cSbe(#!*Je$z_;0?O5`S>Vliw4O+v`IM=-!F#9h z-Q!=~A~P;=MZD_+{dUbC{pfJ{M<~dC#<5CC;Q&9M9q#JJ*Ey_Qz+P0LbRGfl(oO6* zr!A1Kf;f_mSXZNea$so1dRJjb3ttZ~XSaau?!u~$#&efA7<$5UjF$YZzgQB~yJu$Z zal8+0VFyp%MwLSLgXKkf-GGFH>Q{ArIN+>v9ejBat7+xoao8Q>(ft_q^9h#!_2(8u zb`nRS5Upkx?jpd<0_8qMKdy3DwWjW6=uGg%`CV(qnM`B+1EZ8|v0D%7`6=lgv)irx z&t{!PRf;OmNqFJ0#q>jW zPp6}Iez)c<gkrS;Hs%Jq|XF^QC2=WUDo1fT!5KvkvOrR2l~=rAG94(M^-#Z-9L* z-Pfqzef^m-$9iIRSK#`+YKW`jO*RZnkab1tdykNtm+KJ^xTJTxrLfo3N;UM$4rID8PhTf+=gfdlBE zkHlJMXQ01emf7=^G6!jS)4w3eW9@6%cfGKe13Ww+Jpcy7%-_4IK1mRa}|oWHhomZ`_x)j^1C;8*~a=F7V6`@iBJ= zwh4Mu)a5W-lCtT#U8#&!xdG+>u$Z%wF49)zRfNcT8fP=K60#7ablbb~b$M#+cNHKA z2)|U#d41~{9^Fo_05BJeTvUT7bwjTN{Vu%e?kzn+BC02NqCgvB0zN?GtXa>!8 zjP?deL5e!V7Qbmz#8SGem(=xC8k-#PZ6BK`!{xWgE(7|AQIkj4Ne})oFxOQGl}bVs z`B`4G^-I%39ZVLb@ni0FqC{uc9DC0aDhIy=JCa@e*Ucc<@Kos8&i9(zcxzo4Ps|Q; z%$jc#gWDCiswl^@h&Mv|WdDQMFD@>bR*#%9#oW=Cmzu>_k_G{4t@0%nqp!TbqLnmS z@c2a*g$tcLn{IRxi`r7PY=jb-#~H_1!Nz)X_KtV6Mj&}f2Wc%y&f2q%Op3ayt(?TI z*7iczkk@eKVxX==Hs_37;37}|Dr-OP>J9@cUjMH)+aqE|K~Bl9$M%?}KgAZ&;04@s z#pd(_*`Kt*Sa*PXl72``J`y!TW)tfSmk`E$G!aV`qSsh1?E3WjRUUx&r0K?*9W=)v z{;m|>J`iJ2i&|>jzzFr$26v6LZNEP1PUj<4Q7|z45EMM1F=0cSW_1v*+Jz%Ljsf{y zD{GvRBRAwVrVUvb`PbA%KRIQf-j>Rq@W#s?9NA00h3mxEi?T=^kQDG*o++Yo883pA zhE4wt#pm$Qw0?6f)j=rHc3Z7X`RFC5*%e<^_g>w`pLxpc68;U72-Zb-8T* zdy00*CP*Q2t38XUf@}Jhml>3teYG|X+C&-4rKh@4+>3;a_4S&pF(`$3(pvUhKm7C@ z^~vnS%sh}6EMNntB}2I6V{gcD=3_KF%xX=b*-dn)0B#p^l*R&EF)`Wc9yxDce6EPU z5)G2&_n{-Y(;F-D9<2LcwK%D%Tr1m=*4OTbiW8SXwxcghq^gxAhh4JWpX(AIQl6_GYwwrOh}5EU$_XOvkvMpp~{ZZ;}h z0n&Z|koXq#>~E9i8i{0)iL9y8$K=OPz6lPM7YTvfsNogCtTocMWJa_0=JO|&FzK2* zkKEkpwu`uR7sI=P=z`;$3xC$;?Q}HMT^~~o)cQtC=JrCixL?-Y^U?G=C0`)+Bt+5m z<~-w-TGqRs>KhBYX-y0K5RiF77Pq_KC}s`E$6ZEwGTIMZkp6%;Jnp>#opr+4*^uCF zoUD~$xbWwjSUqTU|&`q$A zv0qz{mqqr%>)brIyK zR%&S?t67NJ>~fI{U{Z#DE1S~{{q+cWXe*mbNUqqmh9GxcwZhVF89cNE@id)v4Ym4S za_WYfN{A-*1Y-ygv4K1=u1MiMEAb%YEyVOz>4`n}Gr;QFws_|3?ibuAf}4*Grya$F zQky@1%OSO>-RDvp#CP`q;b7w-rSoc!JZCfwiR4RlwDmbm(zvD$4j!;YX60LqALs7i zBo9;~6GO-~wx~X34x<%pjMT75(4kISm7V-RADsb>*JYe2!X~BU&o5N;$&^t#did`90(5w95Q;CH3sFTL?bBP(Aln;8d z8B+UcI-Y89UB{wjncw6_Mp~w-AcgOo37+IynQp=ACT*52=Na=yMvoJq-30bxW9Ie! z4+|RK$n~|ypUYX$5;W5rRjfmA$?=j6w0G@USS}8dM%q!`rCq}M6-1@9ht0k7I*qdn zdf6ubqnh3kPHooCRoAv8@2Q;S4Wj2Fdy&a4fsFq+dQ8q$P5HSAx-OE9aNp)W+jw;D zd+kcp%|bBO9YJS}Hi8A_4=EUMy+3))18)=iDA&*`HokUk$)2$0Lg#()97U7wuk#-S z?4)sxD!1mhhG(+p+-Y8QnMk(o_!~B!q5U}vd;9Z82Eng#%B8dxtAJ7JPRvBCQqbB4 z@WwD{k3Vrt{pcHvM`HQ1lU6Mj!&%~XzCl&@UDvZ*u5gE5Xd&UpjysjFWeMek@0nupoae3?gtzES#Hm@KRpMD!0{`dYa z4;jLI+(#|Fqq5umsZhSYHt(C!e8#SnIo}??);w5+l|6xF#hP4CH$?liCk1k~u5u`E z*G{f0{wS0V^%1fg<$br6B&7u+Q-aWTkY#l-V`?=MB!>W#aiXD8-I@c2z7MGJZ&N1q z!E-|ww{oU%*HBaNv*3yhVsxFGPIn~)6Y_>Kg)AEKk@Ws1*Ub#B{PkzgP8lu?NPFBk z>|~rv?6V}9zGl3PE$uer*EWx*-bY4Yd4F6HMtJYXSK|a44!UzKAQhv8rNE;zJ8Pkl*7&`Qi8<< z6L{D}85g5g#;8|03;nc&#twtkwHVpKE}$irZx^*V%fvjhuA+LSHE%+Pd|#=s+l|G+ zA^`Wn!BbJjm&9^+ebxkBx5Uh)>FkTTtmx`LtFSN_I6WPagF46g`kF5fx*WXlOEPdCBQEZq3g@6D)!yK#Wfxv{(&n{7R*|CXmP zt_g_s>}OC3*I*CKHL;Cvo?^@j$!@e9_DK=m(g*vKC4uh&Piy=4^X@4pm(#vM-~ap4!)3- z=}PxxLLHr(D)?OoBzMH?0sYJt|IU6f@=_7M5qIen)?G_R71ivsmHn%8fv>BK=;Etu z7kimJ+X9>o5B%{T2anCqClbZP|8eld+Q59Lrd``Wqv~9q+8!Kxv8 zzDU+7oIJQ6#m!?e3DV;sU*hW3H+$Gr@zdY+^OoT7ZO9aHsW1HR{XMNrR@Xfr9?F;1 zCthq#3ZWB?>o$7=kH$x$7A+ubiF+sa`-JKIDxK;V-leiy{4lpaxw{63lo?;}+ zf2mLED72Dcy5y}`uD+gu3O08^{_3m}pUEl+dD(m=25i#OJWFe z^)L~Uau%Gk|EUWl{0%A|{taVHCp>GOY4la@)?$NKv**`W$-hcOH2!vh0il{%Z6q^U zr|R-_{;nSeQz2{{+eU}zD~npCFCiFuKF?9e@JgJjr{<&HHo~RPLw;*U0tP`tEf!M2poTabK@erc7!Edhtm|l^#lKVwtyt3e>K#)>mslc>7Xc3_6hx^GCK52&D7rv$fb5K zVGO6F@LG>k!LB#O5f{z?y?OOqYndFykq1mdf2+F#$JIj^E?4L-T(4pOS>P^GtP7kP zu|dG^0xo|}sv(jccl@G~E8dLSxuNbi{|;R*`MK*URzfYRmNcRtds|G-H%bMncT*(4lpXo@cdT}tsjFF0DY!?oAegprWyN~1Bp-F$ zF+tBy#}If=4&?a9%K4Zx){%vHNBA?4RP=cn^vH55rbqM^m^iOk<0 ze<-OJ==X)LFJ0Ei%U$IE4#?&LI7UpMs?GgRC%C{j9lnCx*n=^LF0(fR2Oi6Mn5@bP zH1)GQe<=IYOF2D}rP_C$YI(OrQv=hJR)PBVnn9u5W3=*vyEv$GbxoqbKV)TPzSqJZV{-UJxCnJpTuiSN*p36E<5U^)<1EOBKNw+iuf{m}YE_tYyPT2P@t)7~()p7o1z>F@ru?MJym;GgJF_ADoF zP#~=7s7<$-<3(xE|I{xr4>9J_t8j?!~S^&-P13hKTOhBNCywhF@T z)z${-UJ{J!Hw^}4EnE0Pi;3Z6Pu^!wJ@Qpvh|aRV?PWH&X3aT!9kcm55K9B&%xBGS zs@g3Gc&yLs9@Rz9WrwiW++v3Z5@Fes=`7WyC(28wk^8}NuD9-nsZfj{rFBxbQ*e86-Mxl% zbi724K5UDR{?XFY+$8dGw;J{nQg-@=X6hmHzZ{73{)QVmD7XSs3{WuZBViI}QzzNR z$O5|hrs4ApTDfNOXxDn+Cz`vPWP=n;2^>xaAz^YcoPN;SMM>DV{_ ztimbJd1?37JbZos@DqdetTVxrYJX%d{y+Bll-|69z-{*%*4OikpKr6gy{hVKAL|6Z z7lz#x?^m2+-ebQ^i@$TFLL~Ra)(MGIe_CuR{G0jv;i9MCn{MU;mz#)Nwmj(g+qTbk`TZLI z`TG{X-=|vGb+bym1$e{P`_$~peBBfOf5bm$vibjP|Dm)0H{UJw2BvWJN9{)!oK>B( zeq+_t|NlR~FXBHiS^x9>)snOLfA*QVeM-6l>;QKOd}gc3oU!Z4-EA?s|N6DfU)V@J zC^(pS?%|%rItz4!Twi=xcWm>)%MV_*$-0+iTjWIZUH_mMC^B)A&*8&u)f<7QVEwQW zeSIq9u(#upbz$3ot~CBWRiUW(=h?#Tk5hJU)znKjJtcJNl1BH!H|ut9^WU^`@tbLk zEWnNL_cB*9e0prO^@AD?ybURHi|;rC4EliOGw_Q#$qSo-|FfFEoWp4a2+x7Ih zK>PEn{0EhvJvZLN)^$u6Y5ugu8p?1{`K(38EyT43wU?90`G%)zVzwe zoNf14%R8MZsHr|I{_Wa(e~nL9V(r(67dqcuBOku+Z&mEB!t0Yh0+$jfyaO)U{onLZ zB2IpLZSC>m`tsb69~Jj4+iF$XUmo2kKTQm{=jRVkr~P*8m(n{bx@>=|t^ds7`Y&RN zvvkIw9M<`yRx@&h0SMs z6*r5mIhNBJIdyqZ z^g_bpV@lVhZhU&SZOL2PNiR!xzwMsBI$`Spw&bmA|EC;DY^z&z1_#K@9NZ(??o$ie5?Dvqj{Nnzgdof-sjTyw?x)lueaT45-nl_Cla z6-JlFAq>+!=nWh7&)|;i;TAuzi~*yEdj5g=14fVf2b7<1gaQs>w6KG5VKfe1IE2x3 z!MHFQhb|n#RM7=91V-bq3x_b8E*KX^z?04q-H1FfNpy7(es>e+Cc6<&3Z1yxq$H1fH&bF6*2UngF0> B5&8fC literal 0 HcmV?d00001 diff --git a/lms/nladmin-ui/src/assets/images/open4.jpg b/lms/nladmin-ui/src/assets/images/open4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b52e05e156fbc03e37684b7eb8d76c274acd493 GIT binary patch literal 26032 zcmdqJ2{@E(`#(OClolyewy6*qQXwTw+R4T(|6ZVDli zeTizaj@{UYnYrhGje4G^=Xsys?|t9z|92d}SBFI zY}VD%(L!)=a3EIxv3d|1h_!3haIfK7%gxQbZrxg*4g4E7tY5!j$Cj6&DeaR^BVS|A3;RB2wyz+Tnw$`xF!pvIpTbv*0A1^Js1 zt2j70SFPsc;#$2LoDBfy5v%#Qw(L4^e9czF^W3{#_z&KQN?a>`;?+9=qh_jv!Uflx z>v#mWZQmgzxkpNRuZ*J7A?3qIR5X6m)Y3kwqibwpYKAdCYhiQI_R?iLdj~gn4^J;| zAKzQI?*s+k4GFy;{UGMyqsLETlaf~X_Ma{6 z=KpAAe=O|Jb#)^)aB_gnV#1OgxnDa@p0V&0hLvfpmQw}v>iY?8 z&>vqlQ}kE}wdX7ZDFRlkljeZkNweL~blP8TlTP4XYGEN7?MYMpP=weYmz+wvj{Nn0 zpFb};7>fA6@{pn5SHhV`RlTpcttTa_+Hx;Z}ga^=@>!jv*ali&KzEh&1#QgbwOh%uZLmXmXF zWvrE3_zgV;H?S|$GFW^%n-sdQ;@!$+AK=+QcSFrC^MhnC=8Mr&mAa*sIm~(%f^RO< z)YzDXxTjBHUV{cL&p@U4j7Z7AQEc$Tkmqmr_^e1-{*Ntcvq?xLzP3ch8T8pOMj%Qa zd2yOljaR`fO(-)N&eP8gPeuKIecS&3qk#WsR-z=aYIMjwXq}Xg$b{(@Wpvgt4k^SI zgYBaFzTClzyPh9k2)olTaEq{fNex|H^ve8k)17aWKu&I1eLcD2M|lDJ?afXopmdIg z*A3#On*7WjS_1uTxe&Ufn{R7$+Q4nn-Y`O1TGI}{%ekC9C8TRcpMa-Rh7Mbq20mqlw#&5~fBYrG|^|mDp2DkSy3n5DIdcZ;yS4k&@eplO{6e^AQ z`|%<+jd7ER9=pXt$P}0=87!^FLY>=S(|q1O?Y7FTjJ>{MCMrA@$6FqjH(UwykPo@T zZ+Pn7-$(hMd`|w-Y%LX}$or;N{%SN+fVVacwm?z^VjP-Nx%Y~0zoI(Ua6*!W;2Bo8 z$WHbo92w$ASD;G+n5dUivAp>LGv3dB%WQl?@VH%}!K<&eOOqdSpu=ZMT{)O@$Bq!;{#yG%inC#ldr&j z6!M+~(nS3IkcrP^A$Eq5m%pFXBE~5gmJK*{0A2AYanL4JZs+h` z$MKFDiV^KGnAV4Xx5NMbd}jCQCx1URYXYcip?DW{{CFHu$Qr0PATf zJ~1=C`dU+G-+3TcjuEiw$Nr|F#pr|oer`$Ej~W0CjiUe!Wv(eM9#myJeGF;79g6Yr znDN2WE7hm=vJf734K)QSe8I!caQyu+Rl)(KWFb1aVbiM_qvRQG_D=CKGOwVgZAQNsTf_1vLT70C<+^#^B(0!*3vhm z?K82NkSY-jl_u_7Too#vz&^C^{m@j@552{FMLyvIvi^66DDegh(f?@{E+)=ozbL{1 z8OKnV9=JhkQ~!7ynA%uc2YtQ3Z>V`K{vQp%RLv4Tw)jIotzK9ZFm6miD=wgimtnsA z_yTlGUZY-HS2}6M=;gZp-)icYb^S_Ty={)sMJ_Clpj*rXCwQs6(=WsXn*2MgwI(3X zP3JWj+H|t+1aFqNPoxUD_}08SLAu^E%g`6d0=sUm_ZPJgul+%vV#?`IsXb~E|MBKe zasDpWfBLzp^DPT8J?IUMya2v#G&6>(%|MI*)RMI3L zTH^fnLlr$U99W1MuAjQ-&(=k^J`!7Qc1fXhNh%?(-VMsNjpQh$ID zJ$ZI#(m#O3-@fB~Lq#*Zt${oY8JQW`mTdXb*Zm=J?&8WpE82ZZ-q0-q~ zTmI2qB)?=KY6a-yWUy!v_v_u?v0Gh9}>OrheV~v1HD!hu?k2P@!uW-mknMK z3`_MKU1kf6e5EJ#H8*UrI(@I=&VXCKiI>vwvKU@0>eAMrxTTmH==?Yezaunatxs-i zea^wEM(ZfY)2+R&vMt>lGm&TUX6nzgTv|d8e{vjjIBgsq{e|x9o_t#7fCZ2lO5xbw zgv2)>x7fq%*U=>hkiIF#ENTz^qiX$4-MF2;Lo{j$5Jlw@#@MO=nEL>7MYQlOYkmLt z^YFCz)Iq|c9q@HlQYrr=4gqZoKy5`Anb({LF)xA&06ZO?TK-P1E2xA7)zc24Xb0z1 z%Yip~9a%$hU2&TK$;|#R2KJ1Peb~uy-y30A<2&w;N*G_4{&m+EpBuc+3;4O02e#jB z4pva1dh7H#NLP`1%U0Xx1U&DBS_VXU8M$HvoCP^yu0deNV@x;iOG-e8FfR{(+itLu zbM9bK|KbAwhw$Uf3G_>S3NGOtwAOcpxq(PL$V^XUU2*7=Y9+Hz`SMx_+L2n-=4uL5L#C9pXEb_LIShg(8rxHoF1r&o&j#)j#pl7 z(#Z=alaECubiYvHFd)Xf?@Psc4F`PUM;sta`cy^h>xb93E3p1lR z_tmsf-m?&^u)%;42`o6;%obg(0ABOIV41Nk9gg)63T`N$q#z)C{+!8MS}shX3?=Qk4(rQVD)}3T%4l z$k=1*F%}}kx{>Jx-z@fBl3h{FLFk8S;(z<6Ay7ww@b7J0WV$FNpIx3>k!MI2mHZx` z(GUi&F5?A+e}xgP827Q8{}~XedL=koZywN&YUk5CDk3eaL)4%y1jXtTpX|QnwR5R) zQF~F-h+2MQ!DL&f4t)VxqQOGQ)(|_2eW?l}&dQU$1;(SV!waJPEW)ri0C~I{u>GHu z;g|3Jhu~90)n?qBM30f+I@I%Q$9L$Nbp*JCz+8>d!%04d#I(Qt7vk$){G0dysXXvg ze9qVYQ@h5P_BwGk+P3X`w5aj;489a94S0bMcHh&!Pj#d%>~P~ps62pso_K;MJ<){A z6o9h8z@@|AG{<|3=5}aVPayNt^R|6y))bh{`m)@Xl>lTE^uN(OwnqNP+E<(<+}jwc z#5^dceX6y?@2uM^#(?N1-qlUQB3S}oScnS3G>OSk1Fx2%H3Lh4s#%CRZX|6pq5l*{ zd!wconwrLNW+9Hbun;%a!HU7Xyb%@m-2>yJ(`e1-iVyorbBiBl45ui1Vb=krJjFuH zgF$y$%ek$5{*ClhZp{aZpLI_9G@R(YfMlW`=5E1tCD&#s_ zW^xeher~!u^eYQ-TN%rZJpbdYVVk=iQ__^^#7LOP4?O4UU>lSv;I-{SVnpH**J_>D zY!IcG`!#FoJ31;&)LHgCU&7t7>Q^!hi+;V^=!{iMSJ29kM?n}u*vdi#5ZOXn>siJ^ zs7t|g+;lcRqZ2lBWg+Z(NpS%~+x$D&=XMHDE%!NQgSoIR_2-T4YM8g>yNg?{X7#py zxPP)PeRf;)Qb(7+q+NTMi{CTavp_MEiw`<#f}1S^cT*z^dU3hXmCwwl6Guylah9H6 zE+>Mgm`Mg0bK7B*^7UJDFypewc+w zP=>V)rk|sd?0pRYFB$i7wmZ7KEjo;L-dEvs*?UMI9cT0jnI zff}SJOL+#Q>`W9h0qTDI{68-CuTkTF2yo>$nS}iF=-_#^U5$LcPEET|_cGOK(`?CUelb5A6kg z*evx$M0)q?8vehJLI*ca(n0z&I4OKiH4k^h9i2Rla;-RC-xmsEyW&u zE~9IzvW9Cre;(#|owC3O8u_>Kjx49-*P5P@`VB>|syBK(2+q1}_P{~2+ES=FOGZiH zr14NCo-SPgq(T`pQ`nT_y=1Yc557g4;1)XUZRijcc<&bYFCbB7|+ zvtzPvZHM#+S&f^%nCIsVF&kcoOQaOZv@;baoca@ibYN@*iX_dPehQcO!I#SIQtD6lY6>(DV^>d0g~)DPh)xp@ zJ2$8tA`p1K&DDMbMLN3&7LbZyA%@qI7nji0c$!JPGB6QwhzxSoLY@N6Rn67~3>gDq z7NUudG&KW7AgLLuY*JZc%I#xx_{ZMT*kwRE@rawQ*H96fAde z%%S|sUDA6LHJN$_ntHL!6=Eu}fzCrMWNhq1l>uL6O=^8Q(V44w<5Z~s1GI`g;H&6J%{=#gxm*9=IM$ddF zuef0UGK<5ZuU#Kle_oh7V6MCWOn66-r~n9I)&>G!cnsv_$~)Ooxs3)YmEZ@F9bu(M z?I;L!2yUu`RQ9K5k!c$9?I(Wzl=_XB)}!{m{Yj+64%xHbOh;7yWupfpBa$}0rX%f`=aWFh7q778{I}yjL|_>> z_{E_R;z)NAfi_pDV=3CE{1GkN&U1oeHQ)RF>b;S_JyeR?esF(X)EDEiU>c@RS_x3% zF6qZ=?GGHCu02_LkX{izj}V%a3BLpA2uJvfvHS-I;}gO=gW;x}_Zx}9rG?E3vP<2C zFh9|i$j3~A`a3I0^BoYAYwyOZ=l!=wU1$^cI>&#S5zqZaU=BgbuUV$SPw)6we$Uwy zu}@1o9-0%##@8E6$`4{iPgRc2OA1>p`}$~ijGRbQ%2S(n&U#WITWdbY5v+8nRK9Zf zR+WWMH^DWc2rldf(PoGevPTy@#iO}m*Wf7An zLxu7o@30kB`?(jt^3tE@5HX*P-NxO|+xhv{#Z9>7!A!7_5*nNBH(>?|l^{?KAmn&eOW#@?R7;*h>mt8+GQo4ZTmgAFbNDYR8mZmM1f* zPueShe4v6dn@-BlBQLMDU?IqZzy(Y@cgqPpt@L{!cGVZZOu>o{fJv&h&ZN3NxEdfi zUA)}V-#ezw^<_(8@!bg>fk*}1VPi8zjf)&pxKNH9< z4EB|$7+^3vj0vfVeGBWA3dc8fB_nmY3Gwahh&9@+Ogt5aH@GI8EQ5kAG&g(ur=A1|am^Fti%)tW)+f7Mh`F%?*&x{^(KkhPLp!CCmP{Ux6G zBkVTXcE(4wrL!Hq4rGaU439VOI*PoXOrJPiakb{7#px0#5gYb(A8e@??(}u5&9yo4 zM5M)NaJ9V94g5qR?Jc1fXTprsfm3wc)d|5AUt$r6fMx z?RI;0KWcO9b^dV1Xnbs3Oc&nPX%fb}H1*(XKx9WQVCk<;@WI6YiS@iWuTU2zQZyYkeU}Z%5zpyOw_o_K_OYTQEmcLIX`(Wy@d2#A(|E?Z{uN7prJ=`T9lQ z=0e|2lCb&Ong@g!<90)*ypoXf`Lh>)lN2}oVAF*;`eB^-(WB<>Q+wAysbG_iM{Z}W zQX5LH#B4I@Kb+~5=qRgK{?zqsh^(iFBB4vAaOAlauz00GI!{ha-;=2TM_wbrXAjG5 zr)a10rlPqV8zw z4O$6&r$G;92%&p9r@ff#eF;pO(%fCzP>ZLwnx>$hG!RKI2qMpLfy4oF0M%BPCWXT^QD;Y8 zB85ggjsk~;X+>^l1HN1NArKImEi%cYs2Wrk+xppFFL^0+x^AhILJMo6ZxR8Os1qQc zx_ucWUjD4KE+%(}QvCIa8`Za7zQRI`7;Q3#>JPw5&B2K>t%e~DAypN3l#lTHn-Y-( z{rsycr~83tL3R`g(ChJ2JfK9ZOY(ufAwQMp@}5vUm%O$2fOkfp%#oAAD=j2HYalic z{xL%|+ISl`bIKiB#IX<>4ojztv&8$fL-XVgiXJ`PcKcAyO+M9>D{k>A#wYF<&9@88 z7F;ivq!BHqJ7UssqZcgC4x)DZoIH5w)wo*baJcE_b~g3c9Mgx(Ghq06yTQecfXSu$ zIeFtJKvXPNE()@PxxfJSo^*8E`n~W|GB49B8mvZO?wD!KaokbHwzqBPfz{Xhpy&8- zzj5OXmpbLvW3g$M4#Jd#5=@ifs{pP&^Yh3!;m)=|k5=zzzF~R3ymb#lWp1y~F22}P z(>i4VnsS@hyc57&-$Z~@2G*gOp3VcP z_BseZqbkBeFnfkP+dzu?`1ElQJaZrI$1MpsqrW0Q{sGt^r}sNxZ%h0~#MbTzcQct+ z)7rSNA^S2#WcQ}*0F>^v7#-;vH<^4J-F-&ByR%EOv{Ni>uXP@TGBsF;M5M!Ph^^0{ zkFD#>kuM*8qm8lO4AQO38Y(Yo&kb`YyqKRiSCzHXXqfcZvWa}SC-CH6%oLGcaX%(- znT04t<;!E??cDVV^q`5W3 zEH0zn7n<3n_G#X36s+cd6kK{40Hje_d8x)i2n&J7Z34{fEb!v|DK(;>#NW2+tcj7h zS36x8ms595yAG8FcL7)*76%0wC>A(+E~r)rw>$~m%Z{cJqpMAyIeyS2_&sV$Q&kj6 zioZji2rwotM07G?ho+`%4{HO<{CuH^Zyncgi&=}>dvY?%Y0l5D-lrJ3v@RO55C@?c zGagf!4#N_KkNsLfVn&0QVc&z)WW_u~oSDD0kx|Q;HQPex54Fs#4@nNlJvbg7`O&+< zXJ`97UNpwd02=-u8zM6M;%_ZtfzWbj<@5+8H34l}vpg5RBH@|^Fdr(QQAQ&a{@eG znPvpBKakiTKnZHAcKdYv`T36p^^^OdH%bO8&l`HlbhB#z-YhQ}W>OZZ86I;n?glc; z1JEp@(#rt)RdkOt74)f8%DK|@3iCr9m3+>m@0-9g*W@Q_2)>X)bq^g5H^YwTXm!5o zM^Ybq6W|~Ib+GZ;r=t0HN^#Z&p@D*9-}ss%GtwK+ zQP&Bo9v4@zE%q?9(&q$*d5`O7?P^PRcO&G(75Cb?urTUENWj@hu7D?r_M3-QHb%xc zfAq|Gd8~ixoGY}o!GD6PcTA-qGVtr}OXO4dPd1UN)k|lfVQnh$Io))(#QUVsz4!U! zhSQ(NoDUheuqs_5y36Ql-S?QUQA41KEg!A2Og^nKQ>9w79M3&M_*58LkU>6_mhlC< zH41gVX#8kkj8XZ~9cSBLd|uvT9lWsJyCxkJT57%64ryh&02Q5=RvEBO=uc4m=~hMu z(KSnAn;>{%_NW7B2uPqM01)7en{SqHKu;tU zP5|6$0A`>RV22tY-672wE6OjAlb1O$9XB)h4%j7yUcBQS{5OollCit!zX4W942H%) z6?>V-$j0)S@=emfdMTzqaLCP_N4}RUo<)z9K)b9({ewW}8-1c4`kEjzcg8#(A==>Q z9PCaW&)U?{hL1b5P5q^h(qK7XYjtv;o~`Z2Yw$b^v5An4`uz6osxqsjh@?@4w|yH7 z6x$_R&C~(SxU%#r&yevVbu!gHEvf9wbj8bS&$ZS^>*VFz=oDPEN_vg%m24&rO9IP- z%pSp8oP^<=%!Z zJ3uI<^p^yhPM-7fI!lP$o{HOIH(8gN-m|3!v2I(mj_IvYc^l)UvzhOacSQC#NRL?T z2+`Bze>;n2r{D0*fcK0B|3=&?e_+e^-J!8b`60(4--lM7V8^1^XvCo@kk@ z$Vmh7<%*kIkfyo<=WD3E23aoK-}`;`E&Z*lde8@-AtbnJ=UfOk)D&q!O8Bjjaon#?cC2B%F<`DWQBoo>pl-kkE&@!ubHZ@&CjkF*yuQ z>U433Gvl~S;ApdYBZu0+RdaYfo<3T7^YAx&v%~jFUR9)z>IXPdrz+DbV4hbw_c*SZ zG`QfGhQAQ%(|Yxl{CF_B6idxjp~?GG6!U}-$uF?lX(O#)Yp+G^vcYasov~_^tV%mr z_nr*;gVefg`6C^)5*RJ8 z6CQuqK)Le~c=w!oWia}d{25><)#~9#JEZPWK=#tlEPuX!-ol$*B zeoS+!t<8YQv$!sh58AR4GGs1xGJAD&NdeF|e#HNIN{Q^20+jN|AC$7VRQo5Tg#Kid zmc2nK#iw+9Yd?uUflWsP&!9Tcy_b4y;N!D|_fT~y?j2!fHMBfQZYkb161!AP>&|ni z+wW^dmpyb=W9x~n>G`il7Lc2ri1};f1gqT@4j-$^=JK?;cc7&dT}cD^2>fZVFBN6) zu9;vm9$k>aZv05i^_NtYGZk{w3I+w`;rNp=@BBek7QbG8c>;7C#7;Thq&)#Kn;>q! zhlQ|Js=>pnBN;^Iq*&TBKn|uqGB>j~RK^hv#?J?%e*m1GC+K-D7=wNRqP&KNPvj?0 zCxacXjGA(RUf>ckWDb+s<(rJhCOT?{T)&2C@*A`5g7hEQ#iwgrNQ*HBDuLN>dcu2b z6(4vCa>N`%6guE~*=*~2RZY#caZ;7eYlAypew$SN)G)LkJ=4H_csYK4&h`2lHPm&Q z%X5y6pHg=&r8vv2n-hg_gV-B*-Dlzt5*y{ZE~&oC98b)17XeEeKfJmx_B4n3gXgdP zbuu8^VGL$xZ^e1^H&vd{`)9(U_dOHUNzYDuNXtC~w@izE40Vk{?u9myvK_ZX`aO#u zSWGJ4SEg-r)gWV8OE5H9cfa+jQ0bSaum4Ideu0Qr|7bhq|7+Ws`fDl`N?!pC^j-W9 zypSoI7#9>Ix?Ssv2vCV0RvSHQdvcf0#dA>!Ajsmtx@3>ZXMP>jlgoof?}3m-`&&`Y zVQs9JpE&7YP0hyj@*y$#YPwEF^VygBUni*UoO|JJh%??^z5d}*3uQLX5jRm68Q~TX z(^Fs)wW!@v@*3(z8-MJR@2_d{0B-T!Yz1chw9F1+y*Du?4qLUQ#;@f1pIAG+2lhD)+?F9w+JPYyC zafx@$L8-;g*-Q%urRq#a5pn+@lcSjU`H7m7IX|y8(m3yUwI}JOgiW>SvCOmwt{>EG zR7y1(xdk@X^Mz|AEE|^?hP$T{olxRK*hFBXoFB`NLLXF|mqC3cb}6a+5p9fxkQgET zU~8cd?L}|KTJwJ|zBOszK8Jp{QQn}8Dslg-xkcm7(tFMiC2hjxU8RqG#S2n9?iPnv zj8dFGi>t1JI+W8|%GOBQ51u?HJm4z8=NI2TS$VQG=0sLRar&^JBqA_ILd7G6w;bgi z#XNy<{8V+$7VF>gFb;3IKDKhB!NdKXMY!KutDmG;p1nnoLrAqPqT}q1#Pafot7T9z zVu}M4sg-W(7n{3hp%9^mOA~nms{3rCm!x4R##c6c%b^R`5K6tppAtOuv7@s`&WenK z{OC1QeFJL7XwcfgQM}U6O8aQHq!8c(=Jb2N8}P7q%D&{AZv*Td+f@b5+q?8W^^q(H z`SNh^-qytk&vR6gd340M&r;CQQTMiqfGa+y|Lyi+AA$X|sb(R}J7>h!5AB4N7-Q|~ zq8bvu>q|0B?;CxH@4pc{LVA5gf$$onPW*ZD(m{g|g8RI+w<>9LmQwa(M7c;YbhoqZ>^~UFp~T%zE_jq zEbZ{G7XHH(Nd9mPXAr*@V*aIRb0xY2QKoSD`i@;qs`e?PUaFSw4$m4an%qn!Z5S%A z2sMe7cqoO5Xgm1&SrB(3cT4%s?956K)-nuxpBg%*IULEyZrRavG9CT7QP=JXiePPs z+YePtO&2g2=FoSLj0ZVxFIo>AD2t}@LlH-#>l)LBiI4yCC6Zdg0Gu5yh^FzNtHXj( z>QAGYmNreDw;ic(16}~iF!F@!{RNjbG8-4a#wN~rw8$}z6^|xkLkFK>n zvZj>x853oEYFaQOMe32g>u=B(mqOlDn@9aNC#D~M9Bz31p)WR0`Gs1g;-%7C@YV)D z*cU855JZ!6P=yZ>YBYzY$Sef5%wWQS`wsI~=!_cl$EAKC{}V|1{YpFZR42F+KjFX$ zzkBZ^MtU!Tx%Xp`-%rsDl%|#@xS7i!c4=m29Yg211ZoqfwFL%{)ObhoY&S1`5%9g_ zm5Hp3zA_QVGrZ#>xTvwEWcB$!uLQX8&sSoi#@aCV2x5*PQ)bD{q=SdGi`w*|?~W^G zhCRMiutlrLy7{8Va(ksh@)7Cm6q64wihYBqvtnO0{ok<=>q*t**=ZXV;yUObI#RCW z-EIDaYcRzJmUzPv+^RHeHB)qU7%etmf71VmebPD&?3dHI+use^STSlwuW|R|)Z4@8 z^fIGm%bu|(`>v)Q@ws><*Tl19=IfV~&AWUg4jUTpxnH7~#w}GBGWS)*$!OZCcYCAk zz_nX#ovj3(tX-`P8K<3AyHD3hWr`h98t6V0Ef{@q_bJ7!kFOzbkSy{L!i9LK33a`@ zH2u;x%)dT5b~^sDfFpbu;J|*I9@h7pyjMD7^Fc4gH}N z_h?gCaWQvswJLYW@eJ3!zS78^>g7D&z&o<2o!ho?UO@QNxGiDsQ)T>0>YvhYxp*nm z@9lT<_4P9m=<9dEna6e1E?ebt%E^$*e5Al%(M>xxd!DENz>GL;na`?8QN-S<<8|J0ooB?kJpqQnHC z#Gly9X5ewjN`I=-|6b|-lMC58=Sc+6dV6t2jsR|fAZ;B<0!mrCYok=x^d0+64=km> zrpxR>E{~~1vhbI>Y=gVW+m3t|e?@!OcQ_Bdx?$Bv!3EmgtTyD+blJ*b5UW3$F_3uH zK7l*i<}q=cIB!|BFWcOSyo;XPw5cM!(<#5`ZT2H+AhES~N3C6n#A2E-wKgQY_|y#fNArKM_wPIQ>rcN9 zgAfCTapy{c&LYF%O+-NI7t1}$#r{R}qbPp`-Itb=ZWsCnwRD_q>g`h9FM4VlWv6XO zOIHlOfx8%+-`Hp?n0nsy>=RRy+^yHSjU1awk0$PmaUS}Z@a?3!4f7qd*`!o1A>fG_ zJi+_SCuA)>nO^g)m{3tFTO-^+FZ6FruRHk7b71`Lv$k!DZ+5kLtW_-8Q$$GUHSqxD-6v$6emYjI zp>owkm%CvXPwvan7LY$QS6^4H;4?^|AQ+dgkAet41id@ewptkXO`E_X&ka9Y-m zJ3+v{`Jxs8!~K(ny+N>ZubNK2oXT!@%SRPAScrX-5bz4QBTJY# zBe|n@Pnt^13G`Snq^4sgo++QPzuVNX{r;iZri=S))f|H#F^$1XppFyB^+1hMlcCOV z%Yo;(D`;D;CyW&ODZLda^|(cw}z{lAo6@r_)y{|S^Usp|+@C2`+D1EPAli8Q@v}xIU$f)w%d5P@L6o?uG-~`wk zJ`~-%9{9mpi2M$l{9>#)FkDp&;$8Qtp&%!G z>`?f=vQ3=u<}A=?Mw;1~{QGaaJ0ajmJ8l6e*M@1%Q~*?E+-1!*^axl0ZCC**_u&@e zZ5V`GstX3(W3P63zLwZjH>!W3)LA&s6(ycgiQ2H)@mp5*`O-I$ecZhKVMXTdyGy6~ z)NY@#w)m!%h_y=o?(w!(Y5U9KI2C{DrKLbOvn*TP7hfnZ{SRb12xhoAUJ;YpVfJl} zLk(k>1r0qtfS&5>Or%Nh(llioU3q7f5??qTvQX7g8ZWmfal)>nP_yg@^F)=7s0S-q zjqzvdKHK7(=X05{%Xg8n#7n2Kn+fFE%>=-8L0n#-^NbYsD>X zBvm|WyGCfB#W2$zvk+3>8`0_;I)fR&HS~|2_3Cz-e6mxo-hP)<;`w*WLi0UHLA&LM zik^3#&&}vBj$1JmF!Q47J;u5ByNC7<_iqEk4)6E9V%T^<@p+8hu=mMb)PSK0IHfFmtjAZIy&?DWKU@Z!fakN!ta6V+sAVP^*7&YCEw2|KI*30lDfUZ zB+DMDLc3M5IiRp6y=Qy&o0}HO1CgH@FCqwc=IW1_84A~ZAMnX4?l*e>LE3YrR@*Bt`sg>lm>quS{@leXL?Ty2oxo*G}{TRRN z@tsQ!C|{bA+M7iVgA z!Ho(zkw~uCOB<~$%oT^1s57CFG!F=%5@?4&)u3OyIsbBI#rh~yf3=Ow%gzxZCIt`9{LOReH|cm49v zc=Q0a690&x+qnLE>RFwFT;-af!tkS^Iu6;597P2WKMj6=;#n8GLE)K+M^+!Sw8MjU zd4$Pzu`}92Mo9#tF}%NBRM+t7S5TZmZFT(?m-=z=Z$`VP?a6=7bX z9@Z?4G>yF^Zx_hT-T*9MPV5bk6ZclOHjKXfmNJzE8l|Otc^OP#01+_%XH~bv*Za2x z9ESl?@)&U4esiCpm8%LuF7EG*vafTB+T_*iowoZdExAR;IaSS{r|ypq^fy~<0ut!YE|h4V ztJ}W$_y8X^bpw}-(NJVsa7e=|f#eTzybnper)mB04L}sxuU8PLY5pK`JNAHuczYX! zILq=?*!@kVr~&8-E;U!5Ab05DCC-eu6XpbJp+88L9mg}k?0c;jw4Z!z ze|_KNzs;YX{EFt&)4xi%o4{L`#6p-5j$HpOLr9%n;cOS#{Qn zsZmYIH$5o%*JjL5=~-AI`*D+mg<$AY3Gy~_%O<=VGHBjMd%-^|Ob0m2bl1QU7UCit zJcj+;N8HfmU2@{7F3I>6Y&XC;6jGywbJ6PWqIKZr4d4-Cp6UV6*%KcD0;$c=@Os>C zZ$f1!ysbSuFHZA->aiG?#f#Wa<<;e-R1zc9SDESk4#d}TYbCA`wtzP@3*nMFdzctP znx>~w==UL|Y{3%tCniV+l}N$$R`L$hZhPRI#?%i+%PA+o>$GbN+}iJ(sXYRjW0@`% zqKK*QM&1gwnM0jgAm^s`aVrn@t9b!S^A3*ojT-g}KOb6_dg z@0}F9*YW`T0lxIQT->rj{gM4Zr9|4Nf!z<$?#pJxo6vwMND#QQ5DJ!V^&50mDVp4g zHld%5P4|z=bq`ZwFnZfZHL(rx+n9uaZ*>%yQ2^@wm&s6LOe1p%v>Z6oJ%Skv!L$4U zB_Nj--vnx5Q{%4_Ng+UA(G9G`rMj<^_vRMZ&_ zH)oVn&`Geo*P3$OAD#A?iyB?HEiO>YE#iU=+Quui**}{S9a(L#O>rp8=7axbMK|x) zZenZoL&=5>z6{*x8R#|YU3OBusFwNU?7|KCsdbZX9c6uDI}H{!-E3!EGYrcqmz=nG zOfJODsV4VvGa^9Z(rVjMzUzFOH)w0rdI%EV>lxiezSBT0YNF;oW9TVrfU{>SG%J@1 zgFK=sfw6u`XaUIFEHI`&a3c`#P1;hL5*_khNV;)7i?6*}&h#XOW% z?nRH{w@jlM;XrHVTbFt2rYy=q1t=;O$fg)5_F3yO$}4pBqm21N_>F^SH`s_i`jkjC5A z)8$3fNFE(W#v3)Qw^~sm75hdw-$vgNj z0tNeVZ0P5H6oifOE={myc*Ob2sVl3SDBQF=dUYeI(+_gH7vUYf&q9a%4T;Psq3ZV9 z!t)^_psR0WKJ%MIN2_k+Zy`5IqMn``%ey=!G@Irb)vbNuQ;n>Fk;Ap^!u9cfauKtq z8Xt;%5-zJv?b}wfs2}hu394NWY=meB;%z?M)_OPtbU!LBREL3Dvm6>OO9p1G={LM| zq$Kwp$qv0FoQGegIx{zwMwYoP0G1e4pbhQ@@Ygg}J902N=O3LpJLdXt9Xi{Wrx__5 zRGs1eVhFtersLl;JqGLYBNuq_psmn%Syz5u2OcIqEmwm+9KQv>n+AmkXOr4U%A?I| z-wj}z&}-GjSqO*Y$RLj=AId{q?2i)WhtanQQ@m{fD9W#Veu`8bM~F zYZXHsDD4EkQf}w|2(Dh?-E9eGhYD7^qrW;Y01;t}^|!P*igKUMB{;`9JBb+N4O}%v z^v`4~_d-?Dr8X&HdY}0`GEJE??z5P*$H_~}LUXe1JK}NEDEP!1+&l4xB$7gSO%*{oOAjBBOGCiVGb^0w@18d3? zWuB4T^WNy`TjQ8FN2WrOxA}TmIYomSTJ|=)#bQ`JO6|k}(XXY((nnTlZs2%vpaHHVw*1qZyRUZHY1;iF8L{bRX?@=&;>P(o!87}z z+`+hD{hDx0;DPFR;h5aI`UfxiO&6U{)z&T5(Ow_`4lq5VWX&#al9% zvAg4zcp`i$f9lGW`PC*RH}}SzJ{F~ca5Uw$4?bhyer}X5Vw2uJ{`q^k1>^$Bs1|~d zk`&|T^>fDPsqSV#)z~cV*q8x*A%6%+!~}NhhQ9#}Q*T5zTX^R`)wsC!Ssh~im&^A8 zUSWq*Vs?o1$0j?b*uUAL_~uQ{2}(rmb>yeS4v#T8!G`DYh9$_|dk66e0_33Nc?ais zjB5B*@v(eN?j5|+bW)P{Yp1vcL6FN_&g?utw0*YIj<}XoMmR%?ov~VXF`#R_{ASss z6CFF-=en-$KK~3+A8)d_ridz#ER*Y)(ev~?<@6oYoJG9H^lHAoTh$6z3l|47A2A%i z5*2$kYB=}EB|dfjI?I1ZCXFGkvYkR#>4ceCTH>-E4o5PsVz(YOk* z2v~OySa;qBRpq4BSL{2=z#loVpun}zM~{8GBVf)3)g1sYtmD~z1x@;Xz(-~to+Aph zOeMFd8Wrq2u)(-EhjTLfB+<5@D0EaHcCSEG&~fgaq2u*J5z6aF@n}_}7`wJN5n{rb z)ubLT`h&|8TRe~xLTQ6(iYjj9?kg#;4~o~L?+#$k-jf& zHkO5OHU<&uVMFUKY0H2S0_?psQtshp6i*ZUn}d)heq7jG?@>H9@=L_8V*#=Q)&l&?&K?}lF+DRXjNcUP zA>k=lH?~z^_ksAJ*AI>Qh##HBc814Vg%7~OP_63}Kq4kj8PWtmi&G8L&3O>(L~ZLg zF9Iz+^<0!`@Yg?{@{W%zA=x3&+bY1*9xR>$%32`BRMs>~M)_Po&udi`w9^40;NG<0t z8)pus9dT1L$WJ>h5_TMzkOw4_nCWn+TR$rPH#4^?duBf@;4m|@em$lzZlRj+WId%u&HMSVo~n6R6-?){q11AOR54)aIr?%p4{ z&+BV`{fjbxNsj)JC|z#WL^$(`coPfm&Koe+I(%&N&|_l1TRC8Izkb|y?!K4oTi?Lv zFAPtyGln~5&*H2{3SMEmzI^47&LV!Dm3Y_ zgfH*yvnkEWB??DRjeo3>h;ECvUTySYb<)X;-UFgLELUUHzOxWZ2qM$NflQ35)~Vs! zgD-n~;$X#l_4h2qL>UG-v!xgit04SDgC%?ugIlDw^PrF~P2o%K0jGm!U+K8m#sSj!nI;VyOAsi%+<% zifJd}(09xWHf5$;{`RUeK-ErtH2EA)G~L+@P)E=?%uqTJntJy|p3y~BNx{iJKmvMV z3z)03NmISabT{@zF+VPX%rhAuamI;^uu1tiXHzu~6oF22c<}mzVvtUXkA$kAr$nn= zs!Z#{h?os((nqWJA_m;w>p8o**zfZ5NeO9OUH#t8(9m#4VM(&i2?ewJ@+^eYDCh`e zlghuY-GIGzn|T#vZ8?bN7KX9_0Ynk$G&{Jb9U7K&0}Z~hiJJ24tB@=6;lKY0yjgQv zN3Fs9O`G$TR@EUm~Yd585<)*uTw21=Oyh?KvP#lXbq7owf`L2A(-C< zGapL&_z_O~f2z6icqq3%UfxevFHwq1!YF!2gvw4xj4=w?X0n89Ni&jtr)i@aTh?L> zZ#2j-lVz?o?pvxU*>~d-LS`;m#$|??dmrB0n@{(4QT_A&b z>N5q=X$TnU&_59VFZ;F zy^a@03Bkbrjp8COU-JDAp92i3jJ|{dI=$-feDjZ03ims5`a1ygo&v*sk;JuD;k-?jPr@F5HKw!%rW)i3c~z zWJlVt?OfoA4P(VeR|h z0b7*%^yzjd)vouPyOK0rK!O+LH{O3)#{7Yp#emwJ6w5XZ>nGMzX1CQDz$!j0ZnasBGt=J zg9+uyAxQiLPo8+?YaTZifHKUm$Ct=?q}PW+()^+-E+2?l(8=pTU`>?Em1^cRLhPr` zYd4ypBUJIh3rbnIs;#Y1Cs}fY=}unJU32dB=hd0cD4UDdfcCY&-jKDvjL5pyV*ew!y$`j{$U81JqSbV}>`0k*QM=wI-HXJMKCG8`wr| z?=?nW`?+=UCr@5Gdxcv%v!l&7(BNf0p+xI8Ak6k(4C@6sq?Sy0Nf=1mC&%L>=)MRg zbrFN(&uM0G4EUmrnn9CUj(K>e?sm7ugT}|_e$E1=k13Qr&XBkTxQx-fV|~Ycgde{a zdgKjt>+T_Ic_ey2l$2+@XCVrFI{ZnJB;)DP_f&r)@i>R0qq-gF`Cbi%3b-++pc4d| zeT|Ow#>ovfce0fC89X)+t45Ot2wJ^!8>(e(OEwMleG*xOS{HTCEU7-|ibDr^ ztN-fLR{6>*D7MSMnV9FB(9>l-AzRiDvdrT>*Gkx%)16EisQj#kG6) z^6TKZ8478PK$| zKmwPIj1rA0i%i(d6*jQm{FL@mAL%jgBL}oeVAd zT!gU!#|&`g5_QHEPb>p(XV46JW&^U+QqaPH}eTj@bGTv}Stk5`k zIl{!P6%tl9@mydO)4~iT=fO=agMI++zHUg=_5)e)Pw5wMkUz&wUM;t7kcTgr>b@)I zk7hR!nAVzyj0Fc{2w?8)4rg0rQp#ryL-HB`1O)QqR#n&g9G5Vb;-8gH7lG z&%vgOyrjC4X5&mWsC-X*K1tnC(1Z84Es8d*?Do1LxlR@@P+OgIF^59vr!IxwbZNaX zR?}N!QmD3E`-pV_Af8!c;T`V7rzR+jffH=mkz}*UW8kc|rK8%a!?eCmKOY}4efE!B zB?>imcq(wZlra87pUTLb%J_pR4QJT=@pL(2rlm=^={TP~tFY`^ajV1PbIypIr>Gs6 z1PJ3l`d7ML+UcZMvlR60CX-_r26AYky-oH-lAW+^Y0X<8I-~sl0G+Iq`SLAC8SeW8fif~rMnxXyBogMpMHPr*>m>r zzT7)A_nBv&nH#C3AoU7~00{~T>Xr0+aTO>in1J6OAUxz3l;M6#$QPo+do5=uC}hmv zA84qw3_Qq>WG3%b#f#Lx`e-@_Edc7B+FyuNvAEjIW zx_>2!K51DzX-=oWmTpViv!VF_G*F?<2XZX=rD>)!qVCwzTDGOuPw$1P&GlBcn&K0c zgvuKclz@(*OP3pOz8(HAPn$eDM-ARg0^%lP0x7Eq(;g2;S$?Y*S%c24qc?YYQ!n>u zPrDb3i;JspKdWu~dES9!jAHg?TwBT$tAU-~;&2M2a9+wKZ_dIvstihlR` zD0aT_9hW!@_OPxOq8DxN(Huve*B!=&pV9I|Hnu1!wIiBG>%z=8vZbGI_Ca^8ItaMcQykF_(${`cnQ0I2o zg3yjvqczLfi^n6=DVD!V`!nCd)tgIC5N?)<#NvYs>`8rps$mjr`w2z>RXwi~V9jWQ zFmM&wY$7lKY`%a(=*rpKl!o%NI_)4PRqmk~r1;(KXknOn)o+tDS$Ir|F2x#1hbUXl zei|qVH31YRfPPO2wM7ODI<-Vd=LfCl1T z;^>${T>WEsurqY$4EaCVoH7$OPeIGTmOFZ`O2RY?Ww&$k*T%2c#@~%% z17Ji7HrWqdJEUwKc2S~~*3L6xVjyoMb*r8*cdb>j>KYOcs&1tTf9BOQ1SJkf>60VE<~=%;$RgLRRRmA3Wmdn6taI&`A(| zY@Rp`;FyEz26DT&UltKAN@Rkqf$qTeC%d&E2XyGUgDV>2oFb}Ht>oM~Nm_}R zPw23oS??57A8^ZI=a7UQq0lgw5B-l4lxAg&ex6Ygzbmj#oGJS0gYQqyuvRGto_r}B zfgKn7z>pLPz>bi~brqJn#t0BW4I%@^zZr(X1*IShU zJ8TWiGy9zP?BJI~l`qGmU+R$0YAbE?vAcOSJV%HPw|MfPS+-Hty*qE%yC+7eIInuQ8~KisS&%iqu&~%%-{vjcs&>7QE*W2>t}-n z=Jvo?T~V@r`XnRjXJrP zC`zlYuKuksNJ-hnNmNcmg|EwnARTnEbWG5leu8ViPz_+l;|2(;1_n`75B zQFPNTQ)EV)kG^&|09d_6T2qS8wyp_qM~#Pn%vl2qHFR zb;)@&yKX-&ouvYMLHXv}Z2mpVFv4zUr`o~l@{bn6 zx!cU8u2F1Lj*2t^cBH00uL0}hU#B%Ll9)NV-LO$I=y!5G7G`NAW{%EfcSf^!Of<4B zu8-Rc=kdz+a!Njzlx>syXdn2__LZ@k3*t58G4~ir&_YuZ>5?AS0Lm<>2n?}5Mf4$r zSJD%`-9|0=6cS*Sh4A*_)&bk^`{pT4j-Cln&@fSE6oh15FJppTv>T}mKBKOcZNo^k z>!n~sGJphOB@_ofIbgquN^Oi2f4M?JDn47DhxI4T!Q$n?XJco#ea+$N(U#^BGy`7w zv+I*;0(+A@DGXun-9qR|jMIVFX^z|_@3n)K#UV!3F}r5~LJncjDYRu8JRsT8MP2VK2knPj1}H!on)mT$d{L#oRj;da<6l9f)eUASkl1v{XC6uKt# z;m2$IL<*WQ89)wX)nvfV+>d7XGR10+J;A6LiR6Q9O^pQ^a;b9P@6HQW>{}l{$!eBD zk1i|_Y`V9KjVsGHhHx~hUuc(J%-{NAK+_N*s&!M%(oBDnbzODSrQnQzUj1;lN281q zF1>Vv;BDS~_`O+XNk;^o#N>Re&s#B6Y(8KdiL_AMKt*kOdL0LxWw6=zGM3QSxS)}k zzM6jkcDYBo#3F_l4tr-d;XNEBha-ZJJzy%46Ipn(u)*nZBmsr=+umeE@E?xM%&;JU z3VM^wK2UAUwso{A=68{#!Q^;pf{ohb-D>?9sps7xL2Y#^sr_Ft#;*(8bytGTZA38ZEXutsj5fScsUwVW?_()V(djsuFMl+w7!W?-Cf3sP%WY>0FKp(M zD6d0Rw%btYD?g~w^KvqR&wz^sF})%gqiT!4>{&73M7T}On~;S` zEKEC8Z$nou$I)wG!VBYy>z%rd^14dYzTJ6M#mpoh&)|SNi`>;g{{)uN5y2RIC(RQ*Dn<2q~?beINbvv}dNy`J&2gnVPp2;b4x_Ju)_ zb8&)5zkVMKreqEH6DYtF_7CaHjfS=vZOIISW7^IKGq!9*+kJkw;X*xolVH!CO!wU@ zFZbHL4{g`2$KDb|!jN@CxY`MB(r2!`>kz1lswoPb%2yz{&@3_fXBKqwkK4O7y(GpYogSxv#J5NB027jf+EBy1P8;>pjv-*IXFZOv$}d*&{k zy6P>0J=f;8)5xs8@12&u&pNH$a+8QV@A_PoN#Yg`Z*S&flYkdtCj7|)TlD!`R#97tX)wzWt=z6t=yvau??5h z%TcG#F(9@Txd9B-pvSDNZUYvX|1HPYoZ1d;Do9rrl`Mn1W3=^hqUM+9NV(2Cp4Mtn z($U*%KF#uZE00qMhoK>&8{zSqc`bV6)j~oJsAlLICb|nUW8!b}I8j}uMV7=jjtN2E zhBf6QV?s@#i6B3J-fl(=B5RI^vG?;w;u8baiYGNWCQdS{YiOJ$V0cyccuASn6X`{9 z^4IjnKXrq%O&dvasdQYD@>7z3jU<$MWoc(rN2j{0s_ah564#Y>#{mDjhElk4cJumZ z5rwVGf!nnHipg{Mg#YOm0ka-=nDyuP#{&=Oo7Df`WABi67PI;kvOKsXts*vLp38=7 zCndc_kdP-!KS;>ID7Dmrw=8jXFO&e2{331$0cZ#Qw#HxjT_h0IIt$|vjRw5{^)FgJ z#N1?c7z)RHDlgyf{WkhV-(#H{lE?bAf0QyA4!n-zi#mY?`u`?7e}ezPtmBTI)oeEn zYHbXIO`}E>uPOGd%H*_4==Kw;(CO62>3R3PWF0&{$1tX0Pu(Jy^!lKBhAD!Qdf&32}!C&rRM}<046>=I}gQw5oi9e(&ZDN`3UWQ|^$gc~j#AIvq zBib7HpPl8rNBOs1IlWm1M#i%VS?04TRYg{U*py-O%Lm_q>h0DepXn~SVv{f`(^K$7*?@6ZCu$?;e%um7fa=6i0YX7azH- z+{?24v&;A}0y=ZqD-&BkV!ZvG_@q+xEBie7%}cN#l}33^37xJ31GDp)iH73KQ1K>@ zjOTunq$iNvu)Iebc`Cf=i2^E=lI(e^;sm$tk86z#)39T9U(tC@@vm|j@~7mmR+V3X zBYA~cYD<-S-5mYIb2$ek&_D_f>4fulIXs$JPWPkS|G4~s4XA7V;b2@>M~6e~rZ z#3GQTnb1Q`ZjLnmhZEfUL+0#%s6_M4)Ff@NsC%~0`4q0c*B*@atlA`!Du_W#wolVI zX38~l!HDFXQQ>bkk0(~ZmjhrDQw1Q=&M1he#%L9+w8p9-DT@IVaTBS(V+=}!IbnVm zAgG{cYP~mo0sEasz7nPE{fM z+GK=s7dLF)l>M{9Qx+QesI5Wc{a;4gnfw7or*s=hz3#J+DlBt zGiO)hDOf#lavC$bFYoW!3445~A>7|m<6O3uEdQ@-4F zLqj+|B#Ty2?o%OBQsv@WYEUrf;}^(8%W6<_vC$3EEm6#$FU4>u*uv9|~eRYW!X$j0(tR+K_6P(xC+5>*?h?r!>AV7FtV zh$_I`d#?ro^Gr1g%Gb{n1#CM9?k(@jR&2bqIk#Qm{QAO zEgi>Ue%;S6^1uCw%+Y_W&H52Q%kyddp4Wie{~1eB=!pXaQl911w&Bf0l?luiF3O$c zyU$kqo1RJdcw1eeUNzS2=8)5g*6yan@M6BIPh)d9o+vQ$dql|6+}e+Ps}Q%^@xcI0 zY7@r>s)LWL>c`i)B_7pkpc6cMSdWXe?4a=N2ff#J)0Kt-kW$k zGdnv!H#bMChXYe34BV7cMbz0K3J=pB!J z&F~@lvqegmOH;{*jLP4RUPwJ(M8p0$;+>S?6lVJ3NkJbez4>f+w{MnOD!&s~>m^%S-*Zv+BF=A9 zl}5=bUf+uO|JujouSs-_!pIzlUyC7&yV_8j0 z2j}miEoPqwQrRtbn=o7(16|{WwAm6cM03)TP2;~K{^f2VQc4|1*K684%(WdKSbg)i z%_upF0<4$YKYm(dlAytlvo|At*Wyy&WnsXR{*pACMdD<9P9-}{6 zjX(hf_lI4QFgD-(@>JM{wc7^Q2~&sMKi0xxo2)vxyT z$wPd1s?XZ1l&p%B*+gMo-d`PKt@4Q;j&(r6DsC3ea4p5Y~VlU?BGX3uu z9zSVhZA?^U+%B)KdEiY}3TWT`qLR$)M50u>6Fb@RR(gZ1`G*^$5rdLGi@S6iC#o7g|IkvVo?a)B z)*@vS9BZ}5brC0Lg@u7>Snh<|W$N_&h$M8IuUL68fa$AV(lD0qj@KPQo&$O#DIuJ1 zY#H)()f4SsG)p0vpdf|1XDQ9nP}Kh%Con#mTgjSIEZbw&_k2do@;S$nk)K~!$U7mP z&q13;F%Fmuso^-zRw0ek|N7S#9>0L{s>?Ib8Q~~WEEtJVcqb7f%HoPf9K;6Z6)xR- zwolDl>_Sd%Kj{_A96rDLeg@w%AF@T{u({oXRi_?O6iH{SWV+x_BcAj3qzJk|T(OdX zFZOP9tV4CUkb9>@w_|HZ!Rf41D>?Z-QKzA5g&j|`*6lmuT+FZgI>&$jQD4jJ_DvMCVGfVJ<3;;w{)K98dbtE``eE`27pjXl*BKV1L_g$h>y z0i^>XlpGkqnE3IE_OEf#>VQ9Sc02ZIho=|MIL6~7b=W+lU8gUOcyl0$K7-%$bpaL# z^vMigE4c$DC1?N#(|_|gW(^JTH@bPl(8W%Np}>bFT9f*=d$DK@G{Jn{TT%EOQ+M#@UwvNm<;*wj@waLwDo>1D)qmTvD< z9i?HQA4n?5wSnN>CUw?gzg#7+58Knp1*12BW+t!l*Pr}O3^-}42SbcaZmxQ&vz#_I z+Y?)|U>;}l_n;4q`^|l?|NbG7r%V2gHublN$xG+XrMCcC5^E=Gb#_i8o2X2?SIjQA zk7)dL_mh?UtiR-PSsJM0pPqlqybz@Cr0iQ!Pmn409MboyNF6aJI$2mj9?gEy85QzP zi%VtAT%!82{I_@r5kq(IHoor^Fm75*Ik{eKP{_F|kDl!?L0tIQ`2HAt`80E9n{Zr{ zJS*fE^s<4Vn8dHMM6tT?l^~WScf(O5@Lz~s0!%S?+;3Ku!`t1Nb$@!UpYy=O%4#LM z)E3epJzCz+oe2Hin9o{>ZwYs8TNbYGoQ@YWyfB6uDjrIXZ_Yts%k*dZN`Azb8T_tj z*#^z5sUjyCX6A?{sSn8Q0y7T=`~OKJr|+F{sZYOD>bG=Pne-{i6tuR>u%-_e9i-(g z`X1h-atCy-k3flO0_Q;9Q6D7dMdGddE}+8ZqautaPue==vYK>^S?M)=_`wAJVL}8zZ(i+@Ja>W+fj(u=8kQ zAgTT@P4^=fsvzwU)y$(5VA;^y%+J?Yyv#t#?wy2T@28{9IPU+dTc1-HyLh;Fqt_p@ zPwsBK;?0rG3=NUhcnZH)IqvI*k2c?5R*m|fM`nPJQf!+xge4SpoKge_SrK9k{jVJv`_DWJgzbRvn{+oAh*X9oZf;3G; z7l+apCfQ#5cp9_VJLaoYi%sy@hM#|4(D4Mw(B?(ah`#oxfO`8EYNg`OJUR~h!>hKdUA=d{$6{7iiBe6&_hdyz@jcG!ucJ(U)XmErN zN!)j~gOkHqw%`?#5+E@MDO4j(TO@!06g=@`=c_U-QrLGYQ^05NAEo? z>q!*`z0+2en&vAi(MlO&p*)zp4zuCg?oD6PPvffGx=-KeWo0MMA+QwEy}eD>d zoL54pelJkZMg8taTIJJP5_<;kmZtW8P90TK#0)_x106t=j1d+YQhP}Ss{?uqZ9?9Q zLY_yXZqgbXS7vvA$)~!Zb*t2X^YRS6;vDR#WCl$;TZ`YMvY$4VDmsVRxYTw1z^Fc|me=^4!8gC!QF1(ujXs)65ZzebL|_r}?Ah7iT6>9vAe#&bWvvh@n9F`BIG$&}G(3Lar9AeJ%U1 z1l=AC6hzi(BHLR2h!!6F__2~@<>eSKOn}zY30bh`{T?_~0jvf}5|5eDwCS%#Dd$}A zZoa9$Ac1oHk5SyVpB;s?Sxpuuc8Rl$PoBMdf8Z$99$N$_O%g+a~ZUA|kOFqtY+KBe|C;UD+(l&zw7>Y`g`miaahO_8_;l3Jxz z9Au`D2B14shXdBndR!iCZEeT)gx}4|Nj7NFBh577`1@Yuwe_5`e_{7K9q?38d-rXc zk@uNvhR;FClI4Q@?Q!?zvLb*kUc4>xzcaM{F+~B)z|6d<+vCDpFu9i#5F7g{>htiI zY(k%l!+DcSF9E~k*RV;QyOPZjLS+9*Kp|4dn^+Q`)&~)Z4V-K(l^X1_EifU%GqsTW z9v*HJK6NKfrgikLBvy&!USfyMbs2fLH@CkL`P8?&$lq4^Qyvh(duFkd#5=kUtF%En zm`YWi$AENF?>!i5#jG41#YopsXH;TJ8SqE)ov-8J|4-%j3JJ0NnOOxw=^1Iws)|gP zw~uX4hXmRD(`Fwox#+hd>{9Q$OBoDZdpWoV@cOL|fX9Bz#MCT2zTUAS{g@Dm{ZGy! zS5AJLnU^!Gs@Bi|3>>z|(po>?8r-!;-XR*{F@`i?#?-}BnP*ZWzJB^=DU5s#n=m@Q zo*8w4sr`YPFW!&slZsBspM4JC`<4?TC zD#ibb>^{N}j>=hqr=jysL8x&6EO^Cck?hoa@+>G|Q>6(+%?m?sN60|1hx85RA-OJ8 z3O`o#hp_pcOEr{))Oeh2D`7G5bcfDMmTR&riv{h;17 zM(DnQSC^8~7F>k~eVSVYHZu9aVL;FK`XC&lg$FDm6ct46zv7bAs~sYE3F<*5*M3Wm z;)kf!W)H_$MZZHfZH;ccacxyBxO%!sP-^FM6pXR9aUAP0zoazuzto&-WK0Nai8!zZ za)NT5!pl+065%w;p>IkU*6`*8>+{1h8}JWHd4DQs@Q)8X|D~QE6wVDx++nE%9saiW z{hQY&Z^Yx3zjmW*K?}0H{#y_}D1axSb1H0_E!c?8(U|nS(rPS5*$85PR-@Q3k^_9S z3bp++Q8i^b%iVbV_o6e?42=OKc#cq^U73NF^1wj6$s3tsj!9(bf*9Rj@!XK^$xQcD z2cii|Z%Tbku$mKgh*Zj)>89idrGSngm?L5dy?iiX#-3x3?dVAMfajAlslXtlCRppW zA7`{@E8|MnW+o3sqazzSMKbPNtFt;rKsQ!x85LgP4Nw_V{AmnKR)UKZx`tP&-5O z;oFSpk;4dU+9{g8FWn|3X`@`jqLGhDupO}fts2h0)9Ne;`Re&ICSC#HPwhj($oicU zDLvp=`#Oq@e*mU4AX*bfJ+R}`m$;F`-n;cTx}NKJkGVTDjZ35n%ePDd?>ekQ(-df; zP(PuFN~*nGOY;!^1}z6H(iGv?Lx$t+lM3&8*Qpc)h4yCQPv^`b)F5#}FX+?=D?lFJ zo)C;Hn!_MlJ5yG1E}MNnb&KDmMv(8+Jf1_e0Y!rHFA=vQl5@QMG1VNS zk!+SB=zEW>QK@gnmCl-}uy^H!CDAd%81JrBhH{Fw0d?FRyL84LNiE0?sk)?sfJ`(% zf@T?mz(OW0WS)EsIl#2sWAkMYzi#59bHFiIpV~#|lT2zaqFM+UYe0}g5lls+-3QCw zX-QSjBsNFtiaZ*m+A8jyF{UxqWPX|q=OHh#UOa^d`5F6BLFclKeG8@w=WIXg-i7oR z%v5(v(CYzVe1V?o-r|7t*c{}J7U#ZLs1yshNjQh$SyZ;eHlc{WM~(QGXB?|})_1tW zdp~}Xn(As%tz)}In0ya@c^6C~#f)=f2~OSO zu>?%?^VE{eOeYo`Egtmtsgm*x`#(lnjGhh2NPZU()ljuX!Gp09kitmJ{^293?tn)8 zY4=a&T?)Ku-P=sxxWZXi}y9ms9_!e=)P~MVj5{UmrXIO>z=G>YvTg$Ddy2ft}2>Dc}(5)Z#e zDM5vo`&k}4@S1hC4m)1n7Oq#Ja1p&x>h&KH=ri`rKc>2KSvPwLIxX#pMogiqN9)`7Vy58&3p@;5S!? zz!elZjCDh#lIW>F5_U+R9@6pN6`^RmH`OFw1=CpDkU0kp=IDFf)$e_YY?AN4Tm4+C_%$ z1ElA>Jo1o=qa$FzWY&w1g5*#B@i-9F_^oJ|j4TticNm`bDEe$*67jjkq`$MDIJm;A zU=V545rA~w=es)dga6e1!nM6TQs($Y=pArKCXri!;9ibkmE}0b;USelP3P`ok{@mM z7WZ@kap*YDTIC&9Dfo7;*@09~lxg~3#~A=$8r)M`Sj9xPzjc}@F4nv&qSG@Nb~W*h zLkwHm`cd(Pj&M_6I#nK8bH#(A&STIzXeG>=@Id#(bZwfNBKu)a=#+t)dKTZ$J4W3^ z>8-wJZz(>FVjIB;0nD~Swu}aQYx9AdH-6i1Vs^Ujj*Vjyh?5D!iUL@7fT*9doHE|$ z3SpJlE9_cAz0(?5yie@a;eWVlvjsHpL*RUiD7qEaTOb12Mc7dAEKVY23CE&JhmmNy zqm5Oj(?Lz)s=XJ9tpo;a8e+?lqoT&uJtkbX_tE1$q%$|6)s+9LHfv2DZi*(!>t>te zb0775^B)1{m>$NR@=P?y;Wh;Q=S4;d2`d38Az@J0^SRO4|7oLV(lWB<4^wwQPi(3= z_D>|h2y!?j^uXM-kaOC|TOoGFU7TQGO+D&$XCZOY2ypsk9>u&`Fjo===B#Y<%e&d} z`!z&oAs6X+!-%9~q82$y2c)gnK#&E?Omyg2?J)l4nd?lJ<%?S@ji)x7Fk-^TBtZ^8 zXLqi@8-o%AE{5)z^%|W%6%@oYExeZ|3i@4sgxmzFAk|9Jx<$65Q?ULCYuie zm9YA76a+yMJrRh8CQ+-ZmghN$SA1R0#3TNPDNlQ&{B^xj$bF|Xe5PBB=OZy|MEdM6 zDheiuYq2yDXk7qdw?Hx=+N6qa+X^Nkv) zj@=Vea4NzN7nQgGOWR~JU!Mju?`!TYr2-IIgSQOMK#V1jVer&1Z00i@0}vtC_IQmT zmMTalE6#@Khn1GfudpRyb-1X3aZpy-^})QyL!+v|jQ_8p3ID6&8i5&bx=a14IS6EE z{_SY&>CI~yIPo!nni{ezFWmoO^PK-}C23cJIuKVp}=`s|zG?17xA5N=7a2tY~8s$cVUg7&@eli7Tg*a(|* z>I5X&o0R(PFUa)KZP7uKbkn&U*tVkb!rj34iYLo!pO%Y@YfO8z?RWP8(*8Ppl5?sR zJp7kMH(v3-p=P@H=qAs(x-H?zV?Ae6@9;P-Sl`Pi53xBW&V`PIRd>(H${uV)Be zBvK)ON*$x_Eln&%egqOfI$WE&#Lq7n>9r8FE!*pU7iFeiOM zHJUx?yT$hFUqHwl9osPv%kT}=(w)89MS+Q`6-6O$0M+qhi%sh+vVSSAKHo>)C>m)| zEI~j@PMQ%%=9mblfN#>`)yb4V#g91W5cHH?K@h80BFK2be=DqY7Gi}^1N+&Q-v}wwiWK*GW#?T^TgXGE|zlcnH@Xf z-HJ@Zu8($WY#?4kRWDmaSXndY5cv5~c9cNB)#Ec*kwI0?UPYn)XDtO}W;eV4826v9 zO--8Kx^P5rX3HhU!~JO|gKrpD=zg4@=)`N^tJ9LBGeo#;Rmx`A7BXk`H)oS_H=Ug? zm@dqTx7~Y=8BETL6?|WKkIBCH+)}lRUPU$G80h81N7&@Cp5MpkzdiY7($&x=s5Hagm_1l?JY;C|Mc(9d=J>!G={-6P2qi$ zzL`G(_Pa2EOanA5z8z%S=T%Xl3qr#pmQS`Sk*N+Kb%$hQl4F2IG1ga<3#o#s$8k$B z5U3j^d*_b7NXtgzRK%QyG-#95$BDjn#Y%xxRG4;NC4aStrYq(!tRzZ(#tqClYWUTM#5j>I}gSB z)v=B;b446#fayY z`bvmXZ)CySBC2Z4zi8)>Xo+joVy+=AOgw2{t5SsiQ|;@ftXkQ(E1H_|3HP$}Nbjct z%+o4x^4+cDU`dlihEKeLK*1zq1i6{#t$+>fhwCZ^n7>l>dIW~a*PqU!detogxi*{- zt#(J(^UYI-^-e&T9so=LesP%^Rh-L$v+dP)4)`#CU0K2vnKxZ?X>8c zo650+2P35GD;Hl^4&t6J=kQwXTup<3!Bf`7;;ZC|*Oi3hAgXED%d8Y;qZ;zr)t29a zLZdSSC}Cv_bbG`6;o{S@f86s(ioPx$O1h2Zb2GA1LJw~bEYcs601)B!DV(I0p@od| zNy=Zwp~KWUiwl{UnT7V7!a#s<$6G_cxwdmbJMPAQ@I3Rcpo$7x^HJ`HrHqZ+kEtUe zo6NQuA~n$a4Mq1e^1L7_4Ia}K0Q1yxIiOsEHq<#ziN~p&rkV(w^Ly0M(T6NeoqhdApKW{H?+#%M>8#6Xq9CIm zJinvtKhaH4(`D)D`@1(yuFo4JJC(lrH1elNCr-w4sZC8`3Ou>*7FwG~Jg&l-NBoW_ z!LSww?;_IEl@!LC6nTPUiirU0E!l0=$bW`wf~iA zjJWNOwz!BsUB(NtugyOaE7B`vzVj3dgKm7_MKTdFvK?#ViOZI|k zjC|kNAVpY!B~xJRCv(KFXkc0$9)gDHO)NBxCDbC-D7SQp6Waf?8kj_Vqob?Imi;i7 zIx_0B(GT4+Y+t2qZ%DaDBoo|^GWQs8nx%G$obAO~@{6_P&Y6)~veBlOqUyHJBO zXwiE|7n6wgLb)Ets?kK@Qa{ytRMN-bwNPtCT88zT>%*sMdQJAXPo2EUev&oD86 z-xuk5lkB#4Gtyti8n&1GkeL^No5j<=H8^TmZpPLq&paBa;+6-Ahud#xi9a^GAkK{A zwNoV6TCp`K<=_pv#>mGCN$~=_6RJ5$-cgkL?t|mE+b=kZ)4)2rN|7F?d4#h@Hc`NM zQvucZCa$j7J48@g$w!1j zG(ZH%sPOvxNFm1;$UO|Tl)mS>ssQ9R_E^7YRx0pYahC{7QV3Fbe)p=lJ)0e=JndvL z@%2e~{zV}Bwal{+dsncIsmS%*x?1yd=$Q}aJRuMKZ##a%4Z?%00-$9ix0Z02Z1cF#ecH4PlLfOCAOZTdWuC1NCIqAh@QP6|hfh zn+|`S18~>VdGdPhE3?pOTujmS7ZS2ULL(>9pS_;^Fh)5Yhae-bJRFXV1yj<*){h=(KnY{frmAc#y;m_Ttgq8c~ zh?@b|7_oVm(B%{}+c|}rg>&XS+`9n=%}b_4SP+6k3e(E)Lm1*qOjo^0Mx-XHU`NWuEg9Al);Nll8dp_3&Q`2fwNGVD(y zwoZae6+ikIeGZL#qb)Q%XJR_Se{D##Z90LOcmkSajXJJL`&)5Q<4mEEf7iugWP@yp zDnsU1Ur~LIrf7SnOEq|$w^17GSE+hEAUAwi$2t*0{%b&=l0;nS6mh(^ZL-b%i9k@=MO@|iFtLj=R?AN)Ec7BT{g#sTf0 z5PpgckIBzWd(=NK(fRLRfoJb_OV%|#U)9`EJ?+v|qfX)}mkbxi@8U&>14&3JcfH>W z_oHI`MkMkdu7Ghr%9f^E2`yt-i77PZYcON_@EybY0!z%*vvOG4~yw_v|D+h!DL$P zze({a31n)xtgMVBefYcU0S<&sn4nA+FM4gKu6!BEfPfHgP@Ja8thaf-}A{DK0gb%;UH~vmT$jf{$zU8?a zGWSEYKI1ym8Io130%Z_`E@Fe+B!$fY+Ur+qyfCKgF}*`5_8}7p{6`77@l58HntLuZ zvhF6p1}$>ojFR~cJTnI!mY+kkW7eP$1aDGw^Yij5Y<`-NB2hq*>MUiAp)L;{E@+~= z#%DK7Z3n0dyS8fsyp2__?N(QgR-?J17KWX4gn@B*0yEb8C3*R-1pJe2x*ntNb)aoN zGjg_F?LrZRN9LG7@#hxTl41iAdQHF+41AKiKVVm&N-ptXqjK0Y*!GmcN3j=Oo5G%Q zE|&btaB?As0VkwoRK4$k7{n9L8Zx#ul^DrfY7!_a&3dmRECns|i`yGdKkq(-OrKoun2rAaJlS-yMIvAXpLIva6xsoKcah`9KT#UW#b zQy6KiY+pOrN2Y&@N$h<+Uyym0@%={W9K+|1R4}(k!}5~3L<`{`zdKb&=r-8XWna&+ ziETP~xVV-GE3k)g0|nH}=S&u{@D%HW9^!_)2uc;|;EyYOq9o)N=@}o8 zxM+if3MmXUhT-?$mwc-KmOYhaza5voyFl4t6fcB89FT`JToORlYwM@a!$yI##UZ1C zC1cc_zbWZ5xNn@>d7rjEKwXisc9=7m6OdOiUPX~FiGa}BB%3K%=dcx|7K{UduujU- zrS$ZV3m3N{%P(#`0sC>Q#b|3!Cbk*sR~@YlWc;@GPlA(sSov7NcDS4?#=J=BHhtc! zk8>9XL_&gJF^NZb)IiGJ-+wezl0n>XTuizVJX{pKAYkwFV!no;^ED!zbEM8#mf0tS zZ(t{VJG}nxT{1c+9ThkRkH@lReF2XGRYJJNgrj;lVtHLDEptxV`J3B!-d(*NsYPir z25vMe4)XUOY?bHclSiOOv)N=F%eamOlLn~ZmDj(;a=T#AeZXyq~ftY1dW3qs%V zww`TOUE0({4)27R=_DL>7Zjy)MVGz$I#|Xc>s4F<`d;^EBhQCKeEHEz+KOhU>Ol*A z?%|R)1!WMofr*~H6dbRlk#T689k_kf2YoEsqVD(3LT>yJnpV-KMPK)Kk%xRcV8RnJ zG}wz=krbxS+&^(di&*~(Q%{R-mHJ@<(?iYE4{fr0HjDWA4Fj3l@IOugp zZKgH`lw<32ju;%|aE|CeEJRRuY>?yl9!)*m__I}_${Y)1z(#!2ctrdrjnITl6{Flb z!)<5^iCrM4TP5w?iavk5+EV0^ZEWrg;*@vAmupW(wrW%+2 zUg2YC4fc$sL)XExX>#4$pVGI1(S!UvDW6w8((RVI!+vcLZdH-zh-O|#D-TVcYB8j& zeIir;jnPDx&yEe<@g5BZf7t2ds@(s8zpY6*JW! zqy@!dgh=cT|My+Jn-s3&%EoI^pm>4O%<*f82n3@v*W-6%aU#%*S1a8@37(_{fyR&A zAmf)3#dGtlvDJ?8>#P z@hYr%m(|hYi_$hN+tKBI-a#OOM(Z_Y%bna~h|z%GA#&AA*x^Z?-dlA+Fy;E-T*whD zmk&Ov-gr#%!5I~*ffu^(l-B2+EqK=?$vJN<@6DUIJE!YT4)<(bpu{Q)8t!^p(A+CJ z{`uuKq*Uw_0EDr2<3VPi63rrK(iFgA4T}Y{2UV`#2kTj65W@!_p}1Sz&Ugb7R^H+T z`+sLQJn3qlkfo^={3P#EDbP=yWB2ssratC9kj3&)OQJ{-MKLai*Ip49Zn+vrf@< z0;X;zO-`qFT8`>%FW!JwWc@a5Wid^&J4B;^R7=Tb`;Im!kiqDZ5>(e8BUu82mK?@x zsb3GuGrybS_u`q?AVRLMCK_|4uV+vWI{j7*JC1Y~?VCM#_E3;P9s zpiDUZ7t!LmA#23{IJ&BUsJbmYbclq6bVwso(j5XycS%V~gLDtwCDPs9-AH$Lhja`u zbj>~geVgYqd+)W@S4)4jC1vHjQk15CAOj6gyN~ID_MbzVcoY%aUvbxCCa1(g9Q6x4 z9mt$jJ;4ESh})$QzKY@9(3%+Me7Vf-S9`fqB4@qN74gZ7Pvg})a54FPI_0^yWM)8+~}Mu1)i^OCyIjJxk+%mo&-cTY+-#yo;O2fzDaIe2Dk#2&G_+XjsI|qh4 z{Ms`R#RoB3oWtD-umK(sLsDO@-`MZOTm-j46crTiKv5;QiccEf#i1<{sE78|`j%%Z zu1_2_58B^@2TBX+6m*Bizp-4Auxy3rcIRDg;2QVwh1_MXc$(D_Whf{j`%%mNns(7; ztKeFVm>J}bqSgg1k2{{U}y)YQi8CNWEVP>6utLUN8^KE3^%>r~vB+!dV zLkJbPE^)>wIR(==f&Iv2>PY1TzKZipgdMYx#G{<^5-ak>>r>JDDg-6Q00~u#3=VJS zUt(p$+%6g_fs7KkS{iX;PJ{+=L24owqL{jlnM;H&iw{ln|`&0c9fn=Tt6g|?+|UR5}dCvUwo4ET@!{E{-P@@reX(Hy0#%2avmK> zO6OThveGR|9w3b54i3i$ECSw+pt2^fo3;(*k7adYz7KO%&vmd(l7LQ$?-HnfA0Q)? z_JI$#O2NfE?UmdK#f|ZENKT^JuMpmFw|B z#dkZeyS7bJU~p|+l_rt}h%pM_BbhKNiQLQ`CkbE9NY-OQ@uLJMrz?B-P;`LeQtH&E z*X6P%5Eu>u%I<~4fIaWOF#1fb*Q2c0BfF048QDm4)!^Q3!RA&$```Vqn1<*}SdMUj zv8R-&v~*|l<<#6|rD5aKErjZ=f9Vm4Re1N8zhk2FT-J!=E}3<&*Q)70m!>S~zQIe{ zbOb`_M=BpBG3XL3l+eFNW72@2*pyPFM9y<#e60#*84p@!g>U{ zE?F6NxfL-umk(VrU7oB0zIx+g&M!Pfo1t?$y8XIX>SjzA|#9 z%>%k%QoJt5M3&SBvGPCEVy;sMdr1bJR}?SOuxUuTh%b2s;H0pUE3!ymSz8lSLz&Wv zQ29?ORkdi$NqpG^yWM<+bY29pKBt^#$8-w$Zw+%ql`;K-xZhqsCTOw>4fo%WXPiN1 zTuI8=q&!2Zf{HbCa6*#{jlZVBbJ)GkrZ)@JOnVADd&O3~2dZ@p*J7ofv4w?&BO9Up z&Z%}Ik6m4T>&n`-&{6<-4+)CzZ>r=j52Db!2rT@}ywz)ks)CN2lEg z_QS-)1KuY|Y7jgA7)P}?8}csa$7S^Q3;cxqJmk z?b2;*IG*0X`{ia)Tf_weLOP&Bx69t)lNDd20OZVANBqz*{ictn>j{;w)N8w)?7WP! zGdG{iEcYDPD#OboNjJ7(+gdiydNDqj$S~yZ9GKFvu5Ts^C9aBYd;QE@hx##Nh^wI0uxT?CoHq$Ich8@bK_hgUt zqs=Q+CJa*mA)Sh~^|=H#p7r4ST+nr$^ctU#fM4F=1WhL-O(@ekXI0jy(_{bcF$wl= zySPukY+?6VHYrzNx*m(a^OQ6D?3BsjDF98x8a__t-s`V@*Gk-~zuWXyn_Dg_YW22;g_Xr|s>^=xpD&T(Pku2E&o zqQD{=%Y1rSX*hOIyYRjnH=v!}3RvA6I~^xhM;Q};`#61Tf4lm8+x``ek1Ucsa?lv~ zF#KeV(sdiY7Zk5YT{Z2$BA3SiIhXy!^a*Pb4fTsXw1GYfJO*agz@|U*L&{E{$6KdO zXJsevyzw;Hrhs*HJvFgrk?oAik1R7r--O`t_&klY3>~~4N{44X<*05JF5NEz5PqgJ zl@8r4q83BD#60bSq87YN!Fztib2V8|JP=Z_Zn@eujlzt8A1)!}i>|l9E*&9;n?M)L zNn|biFTW;V`^u0GaC6G7lH+g( z!p|vkheD!nYY`@=?zFcnOZ+@Ga3}*s^%fbUhfckspNI&bh#1(#-{zC0==2g9sB$7D z)=ZuGlVBW{2|E|XPh?2lH`JtoYFZph&D5}-_?c1Gx}rp<@*`(znSs!x_o~QV^sFxH ztgdu2QLkk$&vq+vJB`>5%6M{x3dnH?`X_bE*7`hl{273v&pp%e<R+%LB(%vrq9k>LtnQ=oCrL~*V|Jt z;h?<3iD*5ex6nIR`B<7Z*X_rwrY&nkyU0L7N~TK)AT&b32Lmm-?*l7r&sSA_-k{Ds z@tr}y;7_QZ?P%_WRhREkK@zX`Bj@JxJ`X?%Lg6?*6Kr1hMp@FYy0g2CB5I{DjD@~d z{~NPk_%RP2U6^(c{6(U9O{rrxKtr$W-i>1&w#atO{aM~-irJwo(wg1GqI#@mFWyi< z-Yip|jAM#{v`^|E=>^@MaiS#^w~!l&wtp1A=^=8GEjd%b1c&+o;rEAcm7nh1XGEv_ zCf1=hcgmqslc_H&0ZQ0I_Fyzj@ox-vajWSmHEOnDt>@d)NM?25GmQCZdG^B${^+<2 z_@F2J@Msh~u&u^fUlNl9DvnkB5<|HE)^l#oXJ6|(nXXO6nsmwNJ7LqJ!BE%e|11>> zul7}8gQ6%v`dZO!itpwL?V=ZF#l!P~2rLLtSrBm2SH#sqYdl7iU*nq>AEJbO8rB&w23v;?yoDR;-V>CT@a;GHS<+>7ylD!CNE zzlOzGHeMT9<$Y%LU)Qkr@R4=w#Kv1Gw`x7QEvy@$YaNg0N)EcN5~{o!UQ!lP1wT7V zL;mV#b+s&6^gV$cF?lk?>v_ArgA!TLy7}u6t3qXrofY&xw%@jGG@WToqo?<~ABowi zSk@p7^cX*70?oTBO3VORMQQl5^}v|ub)9z%%=;~;df_i_{($PbZvBVUE!l87ZU7et zEZR=UxYR2;L$yH~Uaki48?KmLldr3Gu$A28kHePS5>`T0NX36r1-w0xww{sy6%Iel z3P6k_Qw9ssQSxjq7ZQD#!av}9WGZNrJKe7x2;U7ZEG&>8>UtN`&9x($?#>ku>Fd0| z$YdV9-+A9P)X=oCe^gh5X1g$lM5?IYQGMNCrpd}q_;V!6b%rZWLb*On8tBtI)&t4S z)o{~l?v`Xv^MHom8_zKBGL+T#VN?(nmteyz4efB)h>|D$!k; zMxI|4zfX$phVnCr+6$FDR|%{GUtbN7El4WdP! zy^cELfCkT84_|Rj@XOmix$)PNCn41q$A5YdUaJ-)sG^Jzb%ORRaX;3-3;K(YFlq0c zbaKmUhn4l?BL#buU-}sWnrH%nuS21P5}DU*L4RPl;24{5Lu=|oXp^38pK$MA+{i0c z4BZ2vu*SQ)K1){b+Y_Psaoy6n>X{{891#^DgV zXRUvF;nXu=SX|T!5WqejR5V7=)VBO3Gi&~^mX_9)Wvlo%TZxtoT&MEe#RJ2^#?#}X@5>^r$L?jpu08I{54wOM zF}rsQ6OxS$1P7!6Vp;#a@E5F~K7ATb+F0f7#>&P2M|QB)PT#OHAF*O-57!CY@(U5z zBn%2WnY-LAsTQ7stnMj#U-cLWI-12Y5p#~NnsFGl?j4!o6kJy>s>;XqA$RX|k8u>=`&+YMrh=BMnTT{==igR~mC7hF^mNbU>!UtNVWxAePOue&r|e_nS#=d_2@ZRIRVjzt7ug=M!yQ- z!WBje?J=D&@z}Hi{t`Qnp?VDZae^@!i7&)R8@&%U$D{rhbL&@HWV}a^;$rt7!FJB# z9b(87>YeRybb9hmUZ-;!LEr;7*Q@E66N#BJ%p&$a5g`sz#xTSy-=k_L&|_ESfnbalFpLPDNlf*zf_itYNd>>9!)7My-0qR@I5q z1IWHNRj>1^22U%RFilr0iCdq+(<5nJ(7kuGLFU1cAUkpa9sqXcGPnUg#D{H)*KOHY zj=+fAWJL{;rGh)Uz%L|5bAiRE{M4LX)1uB+BULZ)z88wu18KUv%N@D4ii#QEx9h6( z^`DHhcr6Ikc*6D~$>G!yYGN2IOG{{1$o2hH1)?)@`Z(GBs7R~Tb23OzA-&s;GN(Zt zjHf~N6a}fY6cx%$_;gWBwE29q{|@WpO=18Lr#TA&RS6HN3zh+~2YQ7Gp&OIb8kd-X zZ2`|)=HBg#xiq`Z2bZ77a23v~o)c%(AP!Va{Pv2I)Me&RwD4M+rA>&AtaS!1k zHi(oC@Bsx<7<@ym-#`P*Vd5EQE$Yk+Nm!I-CC)VIu3rv@TJ>5_PGU`CQJkuLL?bTs z2`rCg0I!$~CwuU1cfL4b%PxI~eQb*_K0gHS%&V0pAF< z7}Z(*Y*nUu-4;Sxcr>xqkyS4)$xEo6$W9)kt*@V%1P0zJLFm}$EZ@fz^BKnGSi&o@ zHec7a1%fK)gKZ%7>UpK=WyOFYb;WDpVstQu6&j}K1@8+@lQUOMY$K~hCE=-btQDX% z(Ef2f@#(5ugq3JTKV}%`k0Zj*%K2vOfEKoCbgC%8ZX&wfF^vpy_3-8}z8{3$Q^3aG zSNUAid#vl@dO8d-XbCk=NDE)ZQNVa$`Q3f%ti3gimzaU@Y@W4*m4?L8I98E_W<`YD2E%`=TltWc z6xMQZ;`%1nG1=#RyR>=YNSg)al~14yLxD=NIFQ9!Sb6g2-=71*VfkdEG!WC{)>5?_7#m=Tiv#I`-w)m8*BR`ICL7h0cz&&-~`mZnk7I=LCHAb)O1ismAc5%xsE%%iJx&!=~t@ z27YfJy^hzA+iL0HdbujW0~JL8b}P@Z3VDQ%1IO`87K#_~_u*8yZ#J|X!p)adlzZZu}eFp~lF$pCA)&_=QK%SHm@t&1D>}<6Dn`%BC8V$F(_xGWntsUd< zyY3}z*NLMPnRq=h0iZ~iiCs-TwWcV=l56ipElqxH4i*t1e&pSme@l{kTZUT-1YsVF z!n0TKa*`MkOHP}8i)aKKgQWJsw z3P;le$}CfDjziaY*%^X>Oe`7!o8NMQwt97(Xp@**efG!fgu$u-sXEEmL>L}F6Zah~ z2MSVEr!Dj%iz+URI6&#L`#x33Kd$%Dm=$IJaXqZsp~v;|?!R{1|QB zByDj2WBu}h<&`#o>d5p@RG*RZlvCt@nag4*tRX6$K&0RqlB?Sbm<^0)M zIQyjUy%#Uyc{}D_j9?P-^w9fEO<1p}eJ^!XD4pMHvkBBFUl_Y2_<+U4>$(4pprcFZ zX1iZWQTbfkB!fBVOqt!Zib?(Kon;PRT&~PsLMX~d&dS{@;SlSLx(eE$x?*M|TfD;CTUoYuL+I-r$yMJ8l zn)q1N8IDC>F`i>b(G3LU02tu=`(wy63m{ixfCs?h^#Md~$N7i1+KlxoU*3n|yx;Z> zJ&SD12;ktc(S%BtN`^bE4|Pc)qI zl=wSdrP#(_g8n35oOHdOctO*;CROPLbUPm3DQ4>ZX!VZLO2i=F(oIWhTz0H%+=L_* zbV2T0vbt9f;4#_TyB0U^o?dP4=pbQ#{g6$|on(M7&~5;4#hq4Dzh=ytmiuSN)%VU7 zRtr5Bc|&FB>~gsJ-Z+2u=ps+#F%S0A^{5Furk`Ye+w2WRjz7cc{qYOaMMmTdLyO#g zU>9R{?&wp#3M-sFaXQ_{G(T_pcGfWdGj^T0r#S~|Zf-@j%9{-~M76OQ&q1=@;WFN; zOy?<1zs4j>PHZ(whPqu{$q0+JqQX2pDU@~>H!k@IbqBX0YxywXsw0%AyLd=AhU1& zVA4x%uAR-s0O4ml6xY3xgi~sYHuRMKQ;M8NKL*ja|CsVm$gqU5OMhz#yiROB2>g?k z6@1u{W!7sSYqRZh`<3QMufUdJ>o{stSo77Qouk?P@5~flW|eBYt#zNun96cVqmKb8 zg+1&J^7ORe-g$6uY>qV#x26c%Xgp!${J?9?R~TUY4Tb-2+&r$FP(dghnH6&;Gosqp zzy2jf?Q6Thr1zvBXcHC$g!O3xeV#$P!|s4@V`rz&;i`r@K2S7CF(2jtHy-Z9L)Iez zI_s5f@%cVt)Ga%0Uv9SEOz4q#Qb2nBSpy>31y+;3RJT3-LJ&X}%hZ zzvgH2KF|XmQQ*>8>yb=;Ut5<21sA)ZiArKlzgr2rgG&OV-DQcMzBezG6WrQ!t%mDk z0_2^{#LUrxmVa1NHO};Q%zMF zV#HQ0&(F~3OOaP&k*j`IpG)7hmDZ>U=GCTw5)QA~4-<#iJQY(UdvR|^Njg%Ezw1eo z;{{a8ELXJTj?C2B3n!e#`HTrv!< zmGn%7@$T2_N|u#MRAaNfHAEwgmHURFYqQlm;4c_JSFM1siNV*ttb1GoUiT{+8Ad>R z3$TJdeMzmij?$~q!X-8C!CGoA6oYBxig8`@m9Kxu3yxD$UGdn5l79cG zO;|x~>nwGpJ!XlP8qo7L$kpwt9YxsLiA$Rt9d7-C;KRT8=e@4yB-rr(=L|*Q$$;Ix z4rs#0AwQf-kqs*VU&7T`tm$&4eud2XD%^|??lg3>OelD(V+HLSa`}aiQX(x02?^k9 zh5}!QI3oc+d7N@`HY{0WMYbF3cL^U!)FB2kkQJ%jH0tIU|9Zu-@g%_tT^PtN2#%n7 zOS6#MkTb-Y^)O9=WVP%C^<<3O8>^uq=(_vlcB`#cz*t{!hR+9t?Uzh$6%RAzTC8dS zsR`7e8WgAIxdk5z`>gj`K0}|YUq+NZ(TW{NDJd8>BHbhpoAlgu-U(&uo()re0J`xz zB(rk?^6ypvO%KqIKwjtJ&nPkIjR9=DYZ%M-mi}0Q9$z)soqfIk;E9E*J%nhhvMVf3 zf0~NZ6n8<9^nmqcQREIP0yTK0@bv*^`6JH$Pf`@Tovi~gu=|*@s@Gdcb!)3kF~Y;# zuh!_n#10WvHKL9Wc@nC9%ZQdtYU#24a2ghW?y#*m47j;S1Z~7qIEcr^G4y|WK&4hq zvb4Nrg_=H`=K2U>l>KPY4Ej1U5)|z_67%yJ!5G)6Kfo9C_;3s~mEw zOP3Gs_v!|S8<3O*#ErQ;_CV6teABS{Yvx#T#FGj;DPJ0BWSS_3vXpH$0np+(S=QIxc_x2UCb|4s0JXbTu z#8%=bZT6%vc7ByeLG8{H7A5&?;BOHz89iv+`Fc|YGty2JiTi{%ZR6?CDEoOp@cH4P zeJo-+duHY&JIgYdOu)sOMbtc=@g=wS`1rU^JMl$dz!T!q_AT5U7L)Ec$AA8Zd@6PA zpJ;FxfB#2Dq!nhT`ynL{dOVicV?PT#nG=DNe6Oj`%vP=*6hW~gs+?gTHvC#-dEOUv zV!?iiL6|Dic6cJXnhpumMxNU?{(UtO7dY70GbXU(JyV8yqOS+HJ$I;kY_OZK5l%tw z6mL9)kk^H0e*r*)@mMd5$*Zv1P8(zrLW<@hVqlH(m?>-}sP!(?e(r7I5{<&~122hu zJoxAfh}?aJHo6fHhyX4vy|37Otbknt(^$IJ_g!=XreXKR(XS-H4k^0w3Du>6^gK&@=A6T0!cT6j3E1$T*Uxodaz2O;T6pv%ZTXI zV$~G%_alYt@l=|03ED~(wAebvU^2TSFhaB4FMzntaHf`# zDsG%q0otK$W{@`BY7|}-!X^0ttdYseW!NX_uO{MY~RwbV`i*DdCP2 z#Gc2+hNqJ(<`kO&0#hI;AaijGoeFST0NvA>oo|{QP`%PU_K8YMQ(ZCG2gc%=g|P{C z?)~r7gj*79jv@h;GST#YWx9q)T|Mf!RiUwAVNN~jPL7H%5xOLrt*g$%OHQ<1>wJkm7cFtAJ~D+>a7{zjNVmQLejt6g+C_3_tMhc$L(O z<0ioGPPuWaiW5p)FQKNM>!CcN5L|Skup2pLnE9>nIEdl|$k@m_CwiPC1*rP*|CGrv z3QEM%Mrn+8eo8>kEc#n&cK5*#(`KO*wgIS8S5BEp@K97dwCcy;c!@oRL<#ua_u{VZ#=LLMZZLQiSMV zJ6HcvEbgb3CDWA`y4JBn-y&ZSaqLN!7V2Yh)cY;=6~pWErOJNFJ#2V7tDSAHl?}t$8JY$0 z%%XegJ!O8drR^d6j?pjTHwj{>&1TDN_t%e|DR0d~yq=E>w|)ip7^>9fXh8J`DzBk0 z&Ae8=Q*dh@SnNA_gSco8(jfny#)!fVT;1$Q%=d4FKQo@6$J*i9a7cc9UYT6y_k-?j zx%r~l>qpafNNFr`0k9|riY!N{;CbUv@8=6)@c3p1jdM}9x@%}RME02x&FH>*!q+I0 z#+N2nt(3OBy#E+ahC4$+5=8DC$u371@BYO2b+kuTR`&VU4tBfW)Oqu1BAxFuWPaJ~ zm8n1&8%3$UK_89J+ z@^}IM33wq@cMz|Nv*T^vD)xZkukte2_9yq=hamAKfYfK`wknTaTB?_vBEFF4iM3kC_2yA~7YzYflvuur5lsYXj&AX-Mnh z4V}iVaRuzkogE{WCz-#ON%ETZuZLVKm+B5fL}c+|^LCQ^iOpz()gth^KftjdO6B3a z`1rD%j@0IFLZBHuoBz@P-p@XR|Ox*2fvsddCCtZk%|nIC+na`Zq7W-$f zevUU@V_KvF8}HwsnJ_-!4C)jcrP3QGpM(HFIJC{cR~B(gxu}#0$X@{frX2fPK*f|+ zV4Gy{+;8wq-F5M%>*5ZG_I1xRmSd`K@8}o@TpkjxaP#e6(w-6<@u%3-tsQ8r&A)Z5 z>SquaB~15{zkMrmVooxC-Uqn(%~vuRGNS&uLq^BMH6Cr>ks=)_c}<)u$^n)J@@j3# zMyM%E$8CVu71Wp11M{)W4IQ2+?rZel3G+LYHIV_%vxC%)M8w)cpNt;SpV#&U+qZ;w zRlaGyk5JzzvE-RDX=eOcgbwfNKn?|YDJ7SUus$j2b0POgMgbk|W3Mn*n=Fs!iLSe% z*QTX66o2=U&Wk0M$eU2w;7)xJS~Lw?EqA2KYQIUhy8#m{baW<1SZejNNxTqe-E2F{LWvtf5l~c7 zuf#^s>316cq?U_K&axDpIEw&l!);F3;=VitkN?-2FOG!J>h#7cmegI`M4P!z<;D@Y9 zfXr-=5~Z%Mi`6I$B-_sl$g`xgWhJabRY-t z)gzCQ@-elue_i;ej@BGwUnx=S0AZyLF#Q5kUTNte=W1gX=$fA|ovF`#(%N`TkVLp0 zOM8nw?65WJul%~j3gN2s>JMwAg^u*RJRjU9l(qI3cxLk3>2(1dWzT(ed3SZxH>1-L zz9!h@jvxWep6njU(VKM$e<^%o4%b-G;f z@I8A6`EPXTys5CeoR0CqJ0NwB=beV!9o$Su*I!8B4zcBMYTGlnh~^A3bVNzvj?6KY zXj+w{7^T3I*QREx;ImXw{Z=hAwN)otlo;1(K)WHhhhtiBGriCf-Ti8ctlpl7GkPaK zzxLtuxebI<&jFTdcx!2erQZLGYY&ZQr@oYrylL2s2a_8V_)j6Bky2@kq^aQoU;9ES z2{7R{%DsT2^?s=RWZ=o!Pzd8B73Gh-Y`PM^glMb6+ziuy2$ z;ch$ZJYu`Jy}@H*H&;n}-GA3+P_bfnksr;;ZvOjZn%A=B1kB^y`02ckZp6VG8==QaYJ2YZvO2G&fZOY6z^cI z%)CJTL1`(^798t$>6eYiPK+ufCB{xvUTuN=JZeSqtk?x(>EhdA)ji?JEN2cwaGSHR z`*Wr#pwtut)M$g3d4mi=*fX?a;l&E2BP0Xv*$3;?Q?ha)btD1ATQp7XbOI`^7sO2^ z2FHocIV=hrQ~6Zle?C$^OEvAPvZZ+XWB4;V?~a^8XoRd>A;W@{C4|~=AAZU$1f85j zWwojJHZ&jmR-R3{7zNjFbMbZiT-?~9%WcyM_1lN@PI$I8&*hJS;Qf~q#2QU(@9Z0H ziXB9#?fIrr&21jHFf;j^Jjep$?%yW9Q%9cz?#%;Yz9m8uiIz=~pBqJJVLyAp`)1ko zDxPaVR)*Fke|Ee4j@=LVHy8hn{0UX%r)7{=DKp6;T6r zPrOuw9f`c;{GSrNGGxnU9&Le66GRKoWGPCwJAZl0q>;=<6=57nQLxu;7H;rm7PXP) zE>gyEci{|^*I%8NncDQoFwMmwJax{!H$HXIoJw(F`zhO|md<_gi{wbVJf>mAhwwjp zi#75T?j+r6-Ke;B#>Y4rZr$SjDi_PlL$_ z4OX@9FV#*mT22b9mxVSW?tf}-7BVWAHwK?Jgw}n~-Lu~F8kUJ|KEDVmq|UYJ#wF4_ z%?fG`4!pIFiEs9TFPBFKXtsAD<|abwncJtaHG1@ziqNXfrGEy`ugL~&B{0@BGN|Xx z4EkqHBPTq#`(li-vpdg#W1y-SJd9}ioLLz>5d-O)`3&fQPP%USG%ggj+NO(ZEXQ-c z)aSCCf%u#A3`nF}66UE}T30uE9c|+WyS~15*ooZXD{r9WTC{pI%$tc95r_TF5AKEp zz{|BspP2|XnwqTW$F2!|6+B;-_FSDNn}ci35|ue{6i{A%v2&hX)M5+@yCVRXYWHlk z%?Y|zkNwSU1_Jdodbn8CI;65m;df|0^(ZJVx<1_Hd zcJ7i`@f9XRktu9~YW)bkaaVC2GTKlA5vVc=3Isc#a1F;OqJdKa3g``tOK;QQPV0W4jP4XML3W;(=Vk?T zbVI+y`*9KK<)g`SS}^|+?&xs|#tie|UheSo1dULf}ULl*48Kv!Si=jwRAOk_1N;BtfFfyn3= z5X)xmJO^E>(D=j9AYj?$Y;?7jkNJV6LAQ-M^C%YO+bj)6Aa-_TNoja%SlR1k^|(h-sov?8ets{}`r~_rveai{#lyR& zbRGQ?-|eoK6W{Ge*Ul%Amt~PBbKkvVdSNkU**{UxfUq63A z&L|E`l#So`d<{|7iaa$d)wTm{9heZy@YOUtZOq0r|4X%F2Jy(^akD)64ERU2IvNsu zH-wt6pP?FF#3%ze6$qqE#~I1hvD;433q(Tde#8YtuWlsbXtS$MJRdc#irgF>gSI^= z@L%7Op)eH+_dp5y&wkV}t>>q`l;~jV zYj=7mdlr4k6y6T0zX)dxHLVJKIE0_mp`HSt*@UK*n2CYH;r5Pc>-|@3jFq%9;!MLY z-O{kha8~6EYX{zH+&}3uSZ=pt3ZDuIK#tco&J2o$7PFMYVIrQsX1*C{oOP~fn)ka6Cj#eJX^duK8Imq=#e=Lf0RfX}r;zp3+4tv+y4FCbSa*Wqup%wHpE3UZ!w^J?V>R&vj(L--?F>laO`0s;fWG1ALe- zR0Ou_dr~*C(rxK@@=Kcv)2+MQg**Uvi$u(k>hGKMw_NoD{>*Q3=cv8l<`H>X{N1)s zy!K$wNo_s7?dz)#@i!+XJ&scWB=ruYHWn++`zKsOhLAM@4 zzz7=#kCdiOKt>ylpRs?>dsW0HkAxh^%_=1g(-S3vLWBP@P2H%e= znbivfUIDw@6N5ZhV-+L{j_2e+MnN2EBT8Qg*f7evx$(pez2vBj1E;>`#Hnz^`v0^F z$X^OR;~Lm?cp|+LEIRO}WIS2ykVlhum;T<{41I4`9409fR@dO8#~hZ&>-5gny1T`( zd3V__W$=95}dd6PKYp(L&P2~T5ug0 zB8#~gf*eul1MX{g&)?v?I3&?;oi{kyc{k!29ROkf_v_khhM?WcWI?j(`>nk6Hjj)d zpPLo~`-vC7*wz>Qu8`&1PAho6t7#TPf4y~^9!Ne!L&HCD4FKvU`2O?E{|&1;l;kjQ-b&Ur)BqE!lK=hX*L(z#3f{ zq@3e^wRm~D7uw0y#KK@&;{X)8oW_X}QMytl^hn*8*93diA8|93CEe;Kd&#sV4nF?v zDs04E10!8oO2c?XwEF#iyioGhq2p#|IZX8r`AEt+q+bt|72>c7y9)^>M$kXLl?r() zMX-I4Aa11mM`g<-u&m;e+r}?*|N6^t`W4MAj$N8Q{S{JJlvWtVENVTJfr2<_^+2A% zxE|h%8vYz{B*=qzPxK86JQJG2`CKC-)`(_4PBWt#dHco}DYV&PCf3eJ;(&R(nnoYC z920}0>d##oc3ST~a^kjtMAe8t>=K2tgQ!#Nsr9!WxSk5kC)e-yoKw>A#lLJkF^$&7 ze@vm4tcj2-$ArNxkdjhJs1N-}XYXnna{diHY%j-c=hQ zt>(XNlcO9e^qD*(bqy4U52~T5L9ah^BCZ$p4q95;xmxtidcAcz&o+3q zzvC^)n;L?0lKjmdtY;=IS#8_Ko`X^F=?FOz&h)D9c8>e2SH!DGO5|1?^Af&;V}x- z`uG%u0(ze6Ry`$2oP>HUe6V&K&X^MpI+cAb>d_`K2pL?UMOJYR4^|*buO%c?A(Uja zeFMS|Ze}1_Mq4EeCggy`aolr96vtg(ju}07jJKa&J(}Fz`6TT!PC7PL9_V%m(}l;Z zM#mBHhTtB-F&D9ty9(RUR$K{VfVq%^JG z-r65*`ea=1#}efSz<29cg|G+zHSC_ZT739Vx-8(3h~w^>pNipB0XC|T>?giT2h>Bq z0J+|N9x5ZkYEmEjyXwX-rDQlSW*eSVy{YruaAYh&g?72irPzn9r(YO@zBJxU+ZLuv zGfFNZ|H@(qpPGVz#R*V;{&$&|ZjlX%fWl-2f>ZDfJ9G`YWsU;o&sM7JkW9+B5Fk*k z`Q!GT9k4>&ctjTArq?ai8VTRhOt6-K2e5hDFL?dM#Tk(@3Dp9v`;>yRV=<{dg|RcJ zpY-#6^$v0}HtLd3TqW3I`Z3+mQkXuSNHQws-8HIX(puRM%}%EaL!sn^*PA^g*#0zu z3`z!;4rFdC>ulG&i^MS0mENL`iAUBX_=*w-DhcTMvcu^{MgzZYi(Jh(rFp8QVF6LX zG-`W#9h`t?`NKH#j*-oONGu=3W4g>oF3QG%&VZA5g5vQSbc(>{WYxyKQZfXJ;>gru zs%Hfv?x!!{_MLjH%&tlbaA3w>9!J*yx$!1`a_-z;ngVQXHFnqSx3 z+|HsT3M-o_%zkL!Zp`JdqR%@`^&#Hea;zlRn^&e)azddTV|}+xl>lT)+n+sjT&0GN z87Gt8@$voW5gm937_|(9G{mN|*6dWjKPy;pO`&sv1^kbusSw=MldzWxT{IDMp2p_0 z=<$irjT`^kQjgOddbSedMEEp?Y>ZO5yi#UZThY)W&zJr<^~wUWL<8PPFg}*k$y&cX zVEp#5W0myKt4YQ~YH%|C$wnbPzZ5Q843UjduOk)N_b(=h{N|FX?}WM1%%CB9c?I35 zxOcm{0lW%$3I)lV$p0F>58%v$nnKRuwGwH+{XR`Mv$7JPq9mbFicYnAG2Mbt{KIRY z_I|H5%Ny;gl3S6PE=d)8GZwC6}1K3Kc>$c3c zSRh1u+z88SUHNh5Qm||uDqY2!0bBeC9<80b0iqcl?jGWRc=Q~nw@O%v;v6>wWr%H{ z?04u&L#YV^ke_NtQ*qCEaZ*(k6>+B8-*Nd;1R2OTSY+}ste*`Y zWqpq*K4tO3E$oyFz2nc_2(U#?V$X>i640p9-&<>O^r|+C%y>J&y`WNI5*?shRnYiKWdFn~ND75yjzNv)5cP>6qhADA;&31fKlW(GIIvr8OAQ9v;xa9cN#7c7Mnk7O1BdIa*qf%}+3bUM49yBkqpA$s%&uNg9CpgPZG>z#%~0_S%pPb;YK#MsEI?Jx!> zD@?RlF=F^VeEDAa@odif-S3m+dvw?VtV{(Jw1DCud#cz!bT z-!VYKQmFXN2EzX2*e)zWRUh+e;I6;)f{=r|{MM!!H|@ zgcm-bF&ZeF7nu|xxUr^V`wt{IH#QWcBK?~E=C?q6KpH>u}(WnP<(G@ZY~xrr|{)Li!qTOGLmgDl#fQgEM&W0AV^_pK@?) zY2^)SWN{sf6O^mJ`xB^qT|SjmwAZlt;-zO1b{@rM`dQ}kXOtSwH@(l6XZNCan_T>6 zwmgK6f#*_T)>fa*i3~xXB-O-ttLM6X_%r;`Zxn!5kzpLu`SolNo2*e`LkuoE)EGF@ zF@je^z5itcVzSlUcAs8kpyEffQN>TqbyZY3o~<;vRD2%DuBV*AVPUn$RO?e9>dQnb z<-&)@>^^|7pnR}PdWt!3Ba4qN8C{Xkm7`xygTm+#NN3+N8EDxP_qqULHsn zV#9`yxkA>?`q%qXWfk4tgZ4j`&iSv>_v_*(+s5Q(PBn3Avfb2V+qUh=#$?;J-DEd4 z*|zoEpYQAW1Nz}~;ojHYYrR)z{w*5zQDe_0m;XIRU$CS#fFnWu@+q(vbb!*75ijY_ z5`DG!*@CY4;cR37bg8>{<&QINePV93ymASf(hzxL`ImNa_y}}Fa_MPXMf3x>1ZH!m zk$b+6l1WpfQb;UwG>b#(6MPR3mQEO)pL?+ zrx}jct^SMT&itA_m%LB~Z(P=>t+008y8Lv(v+&&Pa3Y4tik38E@uVMDq#uoYSYK+4 zM~ztYTUrF@U>xyMRRRUcV&#@7fABztAgY9~qeqk^oBr8aaR+}V;C;Z!ibgijh%Jf5 zy{DEag-ka)v$11uZ+@1m!x);|3INYkB%G;ewW}^YM<^rIEe-#HKA@OJ7?AXS3lHtT zgLYY@Fdb+j+Oj^-;vi0PvTuJXKj!_1-_7r zf8&+1N%`Z$5-?~T`p}mexK7V*YqbbyJW>E8yDOOb4 zl@DhPr)c>8xEL-q)8H>fbF#6ulJ=dvCs`i@<<2)swP_yK+&znUTMA5;uU+r+g+Urjq=Z+JRpAW!1`HSb>bjRcgA^XO~&W<-eZHdytGqoB$8W_<1 zLY=t6*?>J54XRGWti(p+xddJKe!TGSM+puxOY)jT$0JD)57%_Utk>Timz!16eEHON zxJ}=KE{3?(pDXiOU%TDo2vL{sg+h7og-&%VD9-_tl1=Ox1S)Mmu*LcW;@LI(nPW30 zSoQaysp*UKwZp1fOe|pos!pl1hvMn){$<(yJwGnYW&`~6li9n^{}dqu@EdI)w7*Jz z3CF_X=Woa$+zp48RCBOV{ zL>fC4xo?RaC;Hdnb#{kTc>*;W>P@iTd9IyES#FrgvfI+(@`NhOmlcK3j)V0NxHeZ?t0~i z$f_Z(!NfFvO5{utMHIB&s!~HWM4bZzQ*IR`S`wcgp4(1_Lh*dMJx|phbs@dbTOmA+ zqpcVRM(!Fd^SF%N8Non!?0Nm&orc*bBEtPCjAKsT+}sJa5coogxx_L=5QijYq5^rL zm+HaARu!p>F63Cg5}1l*Nbgu71RNfk7iz$>2i$^F2Yk1=Xh0_4Up;}0qLea^1cjch zm4M=UP%-+?GihanIg13=YdNdFL$2T5?{GW{mGRLwWG9aDcBlw-B7(wl=XvznYubOm z`?5|*oyQvM9Y6hbb3?i~uF##~>AdfUkHSWb8Jf4PQiSLjh9JQV8b;8(K&#XK3894@ z_Y!Iy$25ss`iy2*DEE4`Q2shefIo3$D`TvoPEHd>6NGwVA`>t$&kMD_KuYTr`=a5U z=Ls$T2EA$f>}s%>^6oNr;=^VDC#~PAnIiwa6h%`-#2$QDeRAWV`3+f$W}8E7mwMNODUw84QqWPjeZr!s553Pem!ILRuTetWj~2 zLbb|%(r$;jA$mR}+j@qkk-cMFY{r&T@|}2fZ~|a>8a)@9R`yRQ+zUr4zb?=w+AuSQ zxx=bIEZIGTFsj*LKZz#pSpVk;+%@V8K!>!lcjB8^==<%xmkYr#I4>`?;jC4{F+vCrhn%TadB? z+Ao%P55C|+a4|Js^wGnM79ApxjlR7EK<%GD^gea39t%^%QoR0+P>)iZWA=M+IOGr# z<-*Zuw91ObWQ1m!9SL0YBc4Y5dCpl|fiJ`_hAUtfvq)d+xDV+6l z3|?wcw7Igv5KT*v+868MuRW}^f@)f9rS$eLNXG3dm#yak78yKgsumEYI5Tqy99U_J zN_~SCME1vmByXE&y|2Qt^ooZNu%ZPD(3tA5bnRJxTrXonFH2OkNB@A#649i~Z&Caj zE0uLNKKE{k%+qWVy!~#8vt^b9`?)5El8{|l{^oqyyRhTo`_(}5L&}DCojNg&3^TqD zN9oR44Z~@%;8J8AYk|y;jXNbF*fCe^tFbt0aeTPsgw_2vJUflVnTgpl0fU1wYAa^c z#}V5oUPt^RSNjE(V583Iyct`{Uw0SYkI&m2Hi8pQT!m${@l=05HXS#Z;7>h4PLo^O zb5D5Z%Erj<@^-I}_J9{GrUUC@^x3;CkF2bc`eD&^O$JtutLJ+NLRbS?p#a69DB>R+ zu(%fgi%i`W?XZ+6)$n1Pjno3nOp zY2{dRl&0hFVGQT1OhZgs#0u`CslTT#{~@XRxH~6k4LUmK8;;~akA9sYv0CZ)!}t30 zzvrP4uOeLI2}JPr6KnKNEQ4}cC9R^v$Dn&R!%*N2mBW(2>dPvyoiHIalMmY*TOoXf z;Ke#KBnS5Oh#2la*;`!olSdRsQ~o0OoCdcv{MZBiebF%i3`!d}VIwp9semgx-E*T< z8I>m2K+?DFS;8*5stf$&*>dCoguJ@11S!7T=4FN(Ari8N^UOuiAJdU~wqiKz5f-z5 zDOlayXb49;RmLjFxBBN0b+S0`SqUYhr#ZvEDb3MaS-Br} z#<1vk1H6!GXG{VH1KrG#V($Lvr{^^*#} z5r5q}E2s|r-$jqA4R=J$QP8BMw- znzBIUb+G#p@5BB(@wW6`+uinro_rx%oy3{@%&5xoPmhue(H{}b)CW^MQ~OCsJecbH zP3)nVA=PLk2Da?B-iAiJQ!7;)ypt@)HQ&~vs68i){%DBioXuRro*^|b##NPh$5I;1 z05_^)i%MSJ5dyjz##Vue@v)n^b5eCi=by3i*Yt&ghY9-&2mpEeW{eFPDD3tZlhK*l z3Vr(lH4NSa&Kk~351$Lz!;PxM926_9B4&St+ci-|MA!+smgXz-F+u%sj}xCQegE;GKf5k0q!0m zHx7{xf<5Qf(lbmXJAQEAPc?OW*+C=E$FRwuREDMvzJe~ZI9PEy!<|+`^bm3lu4E^5 z6)3O%Y^@E|lXDR-fC7r6VES!9r}Y~u`R8R|;INMgE8*MtwcWDKbgv{elb;ydht?8N zN6A}if2S=dXBdMTVO3MJ!2FLB*IxE(g75WTfLQSn-0$MffjBddz@FJN$(g8NjWsgN z|9)kcogZ3uo|DDvMG|}>{;P3&w(tj_04PX4^E@iJY-`D;9AlZ(X&pkUt^gdXy4Lr% zMOCg}BAOJTmQPOwL2ZVh7$?@!`s7^m9x+FQq|J=cs7C9yMYj-4LYzT*j;E@n-u+#7 zIRY9}R|qoKgzPWq9Hnv+0v2aDVG`3q4i$d8&&RKUQ20YMzdv(^yOX%@if{J1vW!B; zqSpyYh;I{`CJORi+GazpFv8djo>^|rvQmFeWNAu~feLg9KX;bYeSAnx=wKahyiT6*@;=_XKay~g<I=YVZYnVPZ8YprA%94 z$yWEWX9e@WYV&RB&EQ{SZf~J$RxT|a+jyRBe{OWCm)^{+{E#UX{w5pTFC{rY&vg=7 ztC+~;4<3AiKT6oFF?#D_A=Uo3cU9g8mO%#Rn{;@dtaN}!l3Q0=rxG@;Bkc%gJ!W-; z8at!(0;%dB=j&+b7LEH%Ji?O>CEpK-@O)gqA`#&=>=i_~;1{h@_N?0G z(000>qvZZIPR59y^RDvc$CW0rLs*6bk+e*-L_h^I{{n|g%-P|m0k$&bK`dDwmCgg+ zi&XABsLu5cugl&EN1%~tor)$~iE1apmDGN?-6RsR%&U~n`xBY~DhQp*o&$&7=TZp1 zVbSYpOn3he&PT^X0LM=`4gHD%&JtSBO<@f<&_!)5be_a%zwRkFL-a`3Y0!WmPQ{dn zSsgkp86N?3kmy@>-}&ylk&`%nMn9T2lGw3|EQeEALyOd@B2)vTu$>%ZEd!iuV!y@@ z;^9h|Z1e!YB9{GB&;P=n4V+Zr?yeGokErSPe*{fg2$F1~TJ4j6kf!R*P{Jmz%KA(( z4+#a@IE=i$1nxw}VOCSGOcaDc;}fu&r(-G~m2F}c(z{Iz;O7ZSQF}_4W6~KG9r-1( zZ0+5w^1NiyX}ON>v1kj3G90=|`QOUZ`>aCrFr4opI3dLd4MeBJWiN=e&Vigrf1Q?$ zhK&~~b^3PB4WC^7<H%#Nms z=LNw?TTUmZy5>$_FcJ@m=;Lg2W8dQbTL0O0=!I@>!zn{L~)1U1@-z$d=0)d;^`zU-+0TL0<4y`ZY|Hu#GN z^lyZz>z+Te`6gC3-tQ^xt;6R0GnINPi)Zx*=ze4ES&Eb|*_-MVxxUeUQIs@5f>!jR zO-+VTe{gH(7++Y0QtP3=ekKLVmQSuV0#pMd774R7l2;cvu)#`y=v7?Ux;kEIrZgE*HG2D z7hC_R*x#PuYipT8OZleVJ;@358za)SV8~(rS-;@DK%0y=T>wsANKFxA6J%iHXDEJ$xb{xH8`SLTCd)fH`JDp*S^ZJ4x$k@{`)zKrTtN}-ieK=3d$9M( zWd#q=U@<%SH$VLw{^8Lrqv6a;;pzc?O>5VF<&m9&0y)zoojIC=F5W8qI8;`l1Z5D8H&Gq5F$aX7;5ttaJZC z1-aO7oaceaF2)@kvm4|vW{Q?8K)^^xuOqFv& zJtLjJvy*N6F$}I|4l;>Kx=HNzmoO8mYVyce>!^R$@;S3Xqh=zD7gHG$CO*|>_$lq_ zuvW8dldam5)BumTp2}LIxJvZ~*V6iu;m&9OnQ&6+wok6KhGr+s*JP+uG;*@!;yb7kd2J?yKw;f#Xc z4YnwHi>hQmQoIb>`z}q^hKkq0-U*K<=K6T{`>@pgB1#lv?xOm}b2@^>%ktBWghgbiHx zDv-gJKNEW8Ce1(gcw5Z>=2+*lM-vgi!MXb#v2n+Usr_?J=fq+X-M8_Oex#V{Z;(*{ zbxND~49cfdQ8ZjcBf~!r9BVIB&8|1W$)MXc{6^$t?%QzDo1GVnF z?vv%ms4D-{sBApyb30rChXN=V-lXm>lBsw{9b$r#*C-n9u;EtfGG?xkra@&?m204$sfClX zxXJ}ElDu-;^oIkO4;erX$-=~h46u$jH#e$L%-}*=`uvHqve2DJi>!kZ3ER(-4$fSe z@hBnOAfbPW0$eQViRkZ3MEw1oTz(G^2v;sNo9Tz7=lT-^7_tEu*}r(*uqNpnsoM2` zKPsY`w7!h!evH_#AZBf9ZYG%gghGj~>uvPgk_xW ze6@*TiiS2!&J++c^8Yv@5|^Ny zU)M$kZjjr6;oT6Tu{vZtt7K?H(QjkxGWM{YO@2CR1$e4}v&tD>#g76ii7jU;GECH9 zN=($6T$1TMHnIx2_4D!XwtXAzP(RVxIBqG8+>}tv{?a_Ip*+5x#AMX$48HP)bd-O* zHwj3G2D*}O>_0e@F%>A@@Eib_{O(-#yAu*T5&7SK)bgB~qR)_yN_@ddM30W9hq|5P z1}1{CrFr3qp5d%h)l>vMYhENcf|DQ$|*>%r4LgIUmPM3sCch0mBupl;kx80uy8UGl^N|j6j zir{L9SOL~XWK~r~vL^Q7u z;(pz4m@Jmc%}9xCzFkP#JwnidyQt8=JZoxddQAClQg!<^L<&|pov`bmTfwn$13Tz* z2$5gx?g;l6mei(mQntNEsni(IAqXX{+DummF+wE*A9h#drDBww@8VZ$kMAZ8XA{kv zdd7C*`F*StHrl^GS692~=!}!}NecD`3CYx!^;n?mU?mP9&bq#J_lgIr#VSQ2%vw&Q8RZgv4(jc_pxLhALRR7fQ0WkQ_Fyk-!}`_7!?SxPNv_CT zx8o}-Up?-`-1wt;fe8QN(WL(TY}C1)tDEf@Eg|Ly5ONhPQ>|?4TU$qk?IRyn@3>|@ z!&tPIRJ~V6;#jqGo5p^LM~ z_lkd+kS)#LT@-$69STONL%$K(CudTFElrOqv!L2xcDKCEVQ3+feoaL=6P3pO(v_c^4i}mQ&BK#}X|ax_MjTUFYq7f0LfBnjkr!37(FIg7|aoL&A2u_^PBCSj6GovLAg13Mc5)kHimWPf?~<8-C+cu($pCT&^W z_x>D_vYKgVdJN@ef_bc z{4FHdQ4f?qaDvOb#rC${9%xh5^_jdcJALWDIyHHLf-IbPL*`lD- z4$=d3hissXZ{B%Q0ay|T7|t?rbFhps!7kXdI|+#srJ`Su;Q4dD^2m0dd3St#Jo>hn z;~k~ru2VLMc?Lh6)-D}3{+AwazkACU&^E< zJ)r&Db$|D`bR`v=W14>q0&Gvn%2xnIiN=2>o1N~z#OARM~_mn?z9q>A1DBG_&)IfWUTEeo$ju; zi577ZQH^RFtKNTGCIVcb<-x75uXiSVVEWFE6n=g8;ZmLhW?iPyrRgU`mxe(@q=-!{ zgM=L7#!tl9Tm?at>M$N_7k20%jUWd79omlgL>2=h!?JZAI>o6R_RYAbFRpCp#9|Z6 zX)9#Zq65(uT!kS}%DqpF4rezXwm)@!lMDxOdD%-b(uHCbMv%#&!`8UaL5Xk!Aj?s7 zzb?&Eh>U*8l+aB!?(CxF4k{C(N;aYyKb`f11xLK@kC^Vp>*|Pg5S@!(XJvJ>waw}r z_1E+Sw^d^8VBsJ~t#%ibO14g&nAXqD+fKqlTF;9-Lr1Sxw{yj zABXv)tCgX)zZy0)4%+$HxMV-Cv-d19`&~QV@bIh-^#R?K!f*;Bj#v00qK@mcYNl!! zAHxJ4D*45nj^R;Q__nsDGN@nL#616G&;}SDXAD<^%`e<67iD5Z%waUPqWU#L9s<(GHp3%0IR=nH_T4#4~_|&P-Gr8R#|J$rka+Zk{{nr}^&=jsko$G`>6R)`t)cWZOsx z-nj`v^ASgtD(#(>MoXTwBBMHrN=s5+Ou_Kjt=*JmBi&zzHjq8Pj3cx=kU)eOe2io9 zv{UxGBJx4f`y+LcKHa`7k}A`0@BSdYINQ0CJ2@$Nd%{=D{K-8G;P-96Bq|70vz7GUaS6v-<$u~-5c6^!wk|5pKwd>$lqu{ z#id38IAjS|e4xww?vI=c9>NWf-r=9jXFM{z^3B{0*~_Lr&ybp$LO(V8Khk{8vp2O7 z48FLznxN$l#HEqfdB1MXFi*{IGUV}8rIpa$bVL+EK%5&@ZrQnQCdZea?HT81b}55M zW-D9UZ~XjI|6}3QgM>=uD8V`Gha0ub)vpt9vlFkD0sjgu?-*bLLW%i1kq2>AbzTuI zJd;GQ3pk#u23C7E(+CkXj%tHu4c)OaZyDMis}?u3$2U$}x}HXbPdQ^fboDz;X|W4u zmF%VCzSh#e{6ly2dS5+woL#uu;J17Vz({4J>=zN{B@;;vNdj!xz)A#=f|1 z9~JBC=fe24^H^*QIN3>s=faoPg9B!8@2`!4c8yT7vC(9F7@~QEM`QdZCPgYb0@+G2 z(z8uB8Y!3L0tsjt3$vr>D`Eql1k8G{X?lCck<;^ALI4i`rL}{di=fTN{+;gfop}aT zqH(Ju=70PV4J1}~(j$>|;?0+P-tR1OKqM{=HR%U%qVJlTyE7eF1dDV3_TdKtvaEk` zdLVKh#>Tckf9p*HBb7M?Eu$VXM;!6QxeE%kT?>=|9fKe6Wn_qMayxG==Vyx=dGTJ$ zMq~y6mc#>IC9bl&TgP@TpqdC_1o?WrRf(o=o?E%`^_pRnzah)XCXrh&IY=!wJOqwi zLSYp(FAphTFqnVBh*Fi{Iu5*@R~W-TTT>!J zcWd_7+ov{8jRWho2PDz#Zxikno)9-f{{9_VNnMs&Erpm-20poOY+0^G*kxe!WBZ18 z!3K^)^%6Z*iY1MM^zT1`DbPUl=5_F-Z4}zp+?V|>Lv|O}f%CdP7razZb;Bbr)rxdV zEjjyL1n|``6hL?jNfMJ3kTD|dE==itwGpz{HFQaZ_zML ziW(&Dp<0gqc&VX7%>dy3ABYE&zVY;=z+```7|Q+EzmQc-!Sp)8QF^SK;Dlcr0riRB z0w-dn{r8IHbMl7nn0@dEodG#>5aCU2T7Kw3t45KR`yQ+=Z}X67FJ6Sxdzs|(E(a|J zs?|?0y1d!l8PL(ST>!43Kgy33^KY!_E+z5-LnQ*-1mAs0<@A1NaUclgC5q7aD^8ey z^@ql+CtVUCsy-Mxm)HQ#wywiW$yx-4BgNG@^zLfsVnetZv8Q`}ymYky|0F zYOziDX(2pDgLm-#_{7APScqr9QIQ&+>qF3<_t}$&V=0azLdNfs5pzRU9cr@~Q-fwX zUb76J&U=wM6CY@4%YXG|P=w&jLOZ#|O(Dq`xg0DR&RXm@_o~s9sCP_R?@PGW42Bx) zY>Lh>yg%uw-%lm+4}zTT&0xY&CVlSIVH1t&ME)W&;^0UkMOHw|bLSSU!Xg|wx{z)?}O! zJh_5xN4%3^naXq!kW-^j_O{~PdF3|6I%Ut0$iZ;{s8+I{QnR1#rlpf0NEo3T=P2Yc zn`Ok0bDSmC&sTo(kaU=(yJ@}YC1Jy>%3~{f*h5O`MIii<-W*pY=)SflIYUTB3{>wH z;t$IyTQQK8B>SN;Tu^mi9l?z`@#xyjlXD{C7hRLo4<8ecfGVrZRre%XRegYMkJfof zRb6%PdSctvH;Nr%il>ZUDywn_#_x zsL@sXHk#)wO--$=T-(rqO(j%^+`knu$_1ysv!6g^)%ofmVY$!QbwLvjd4U|z=BS9S zHi_F(7O2|;0RU`(c&jb}1%1neUqUz%1fXAyxE8UC^A&^kuif_^T;DWgGybXjq$gI} zI(FW@q#wO!%FHA>Cy2*WS%0x}yfpLMd?SwHp1!|tf$8briUrL3o%{(XA&`CIjDtTMW`HO0I=+iTD z$|FkMxF8#(Z#1L#NwfVvq-00bkC2>@mRU-B_=B+8+|s^~q7b4Va0#5XFLE?5M~8pS zP-y~f3m-^SyQ7uOYOX|s8?r=xo^-of{Y6MOIXi7(DGzSebN0kh`A(zP8uElRrTyFk z%{Gveh-oNoM(hv`#ChM%n{T~*0;w#L6(Uz_)OIzFwy)n+wf?7Pv!I;S+)XFRsVdArCU1RtYm>c;Y|$cp|9w^%{JI@o@!^>Yd%^v7`Xl|eo<#E`CEM_B z)TZ{Zk-1+}wYnz;AY-B_a6_J?r}OyU zQ&e}gU9n5`cTfGIDO~Iw=8cZNT|EJA{g4iBwTiDEI)1;Y0}%JdYI>1ml@xJSTGD*c zxP?xMST|P!l?+nNu~0GtJ}YwV%dnM3A-Af*Q-MU~{Ey}B-_F&!W`-5Na zlxE*5?K{1rxq~pH74U#)Dy*USf*D1L10w`Kc~=ibvAYV@!!u?3awp0xuHhd~)VS0D zNJwkdkdJf}F;#JdYr_)btpPa8fECZ|$Gskpcq88$H8j9F^Zmv*UnRR2iTc}ti4ca( zyOPb((Gi$q@9%#GI>}U$(a}x0Yn=ldOGe@-hcGwp^8&r!hbZWE@ zr{v>AC8YR-fZ&S{pLJ&sjM`3^H)NG1y&5$-Ev#cnFFjdw7>Usk54gMde{iTGFaPqx z5Urxr(1KH?Fjm;{guL|`gO9KWOmYkhf4#H#l50FRmRr7RR5v>*enEeLg#a7_NG|_F zi+X!!`d%@<4{p3gZ9GPGdv`|&2%8092m#^dj*bavUXQ|K7d{W|wZ>uLJ4<5?9iv;h zxQDoREjZ}IdURS@H^)C1^&`m_Ax6aHp_}|l#A3A5nj?gH_54FAG7_z>X^+`Tbf_BmOdNoKLf~EeOl5G?Hn-s(2`wQV`Yh+tp7Veai z7b2{t=2s?Uf=GV+b{JdVPo^iJmA}b5t5 z2A!lRphYkiH59R7fDz%u;j(`rc4=G9 zNYRo#ipeMtnbNX2hVuQr?Py`Jx9`Hl#HLPmCspPuII;*!pHU5L=y8&e@Rw&e&&|K~ z;p@+D&prV)m?zqLh>aj?3=RX!IF4<^ZJ~fh=@9DAb1fnv4Ynk?5iqlEagE#f7w?<0 zecO~)gEXB37&y^tf1oG@PE72=?Rq;wn%%Qqzld^OfBLh{EhsvN>op}Z9fbUcGTaYnJRgeY$gyO^9e2+-UyjTH4tj zj2N&V*Zny0eaoI;%+_O}mz*UbbFDyijUue|1b;GmUbO?2DuwAuOW}NWjq{fk=o6t^ zq!7g{ygj9U&d2d6XQc4i>E810XQm}h5X?eggq7H-ZpZ-Np(anw7 z{bL20}DWgQfWG_GjvsEqr4#BW~D zk}I?B_7KxCA_83$TzKi0aRXjM`QYy5bGCPrSH>|mk^e0CHV zZ1e|cU?`@QE&aGphsWt^^9H=1rO&UL*U$X4|0T?1+{VHTFl)dU)S5xDL}Snz9~-LB z4zH5<5|enq=V2=aiRM+db80`WLFQ-&n8x=cmZq{9@1N4lk2g5_6=3)GYro7BStqtU z(WaixNp_M7+YJ#$FHcQ>zi@j4>Tr?8>8;d5pK)k83rEC&@XfMC&%i>9Gx zttZSw-ANmAr(D(b2&tYr)!~a5ir@XB({bK)nr5r*Wbc_$%|zIvScad^ zD+d1TD13T}&pr?f+T1`N@vl)^cDtG^Hvfh%HJ_xqNcxb~z)i z&oQ8>`3=e7BS9C>_Hr>|)yK)+H6Nqx{W66A)fEVa9d+WeeoMOGdTd9S#$&HNvhVHU z=D1M%0gUUOZVrU~z1e-*I1u$}?z6M+{A}A!JUdB-@B#TCOxI1Oqpv5+)|(_n$V1>C zfni{^Z6RZZsB^vus&_bwkR-;S8~-T^Yta(Cu5#_!kriAtHH5U!*p}bgAQBQ>5v$oS$W(3aKBLoU4PWH=4tR-p{}K6 z1nuJz?L!(W#YuZ5mTFWRuTRAq&+Zb(KImE{F31uLqWSR*KWl)psB(FrOWo!WW;jV6 zw5ELkChk3Bo(HWTA9GXGM5Iq-YoDB*zP1iN$QtWiVX6k9sHgKU>{p+4rUn zVszw;-8lnTfca-u*PY^s{HEyOz*4idAO@|Lp62eiv+nk$rYC)xng0g$7HAp|xA%W} zp8@&Mh_j%w;5K9xQ+VNdo4{1`mOnc^ zy&pfY3QZ)6y)M!9A#!8nUV;?tPDep2LO*9(i+x)l^gCTd)6(u8`98_kk(M+rY?{8> z%S|^IcDhkoPY&@=Ko9Swy1QAUIxSM#kh<0N{ZYj@2YItvg)m)=#&VR0u~OaVK;cT! zwr!%+!Y&|^T)^< z1;qXS5}lD@i^TK*LALhpQv=L60U`#L><=2(T0Ef1fV`T1^{NT0bGm5nH0iG-2sh2y zBu=@ww8TkIy_gI>67IL-#pUTD!CLD%+`e3@`K{~o)Lf;VZnM`K=rh~4;HJ2ahwS{{ z$M$w~NkU+}$RRlPvB=}q1tcesDETL>e>cmz8s8Wxqa2$5x|AQ{#}^uHse=7WGwA6U zgA%K^dNj2_6B#ohdBPxp@S3nzjRG}PR9*y~_@cJ;`QDYwaVL~Zo8N8i+JYaNndJX2)|%N8g&NYQR#yH4R_zu7s_6vZ z^C|E9+F=r5%cw@@wgt|3Dt!Q0*Q;l@G^DaD2ssyuvZF&Al@Oqy#`7ynW%-QmaHN0X zTgP?#2Y2yWkpEwb1z7kSJC!)au%(S`R8$xHIcBd2|E&l3xn~#cRd2Edd%f{71^rCX z&%9P#n+q6TciYN77r_%B#~K-L`fSaS2?2Q(=(7ptNH&Ne72DH*w5<)4h~yAmJ^@a`CvvFjRFO}CAF zdN3}MU84F2+MnTNHN$d}6P9fUuFX+2FMJY@#5{J96$oC6f{OHxj$#Q!=ztU`n|Ot$ zrQ?i#cY>a55DoOsQHqkd+1}L<`K1|^1l(l({__iH^$kDojq$=ofA5%N^Na378NzAN z6|A9U8(k`e zrrJ}i_v99qmaZK^x~!3T&`o7`p6GvLxM%WhHUQBPuP$!hp|ca$okMT5a&4h8*k0Zd z$uWfD6>$xXO;<7m3%9-;Y|a8Jh{|RmyK!hTAP@etmMwq1PMK8TfXc`tk9{@06C+&B zo=<~omv-s;iqf#O*=ZZGO@vA{#zH|Qw`C7scq}>+=vV-kWRU=;4T@id>>*R7hw#Ua z2V>qHI84R2-|*-@Ah$ne^>YG%2M)lZAkRBVb&17)h1K2K(y|=T1$)Uhm7~voe*7xh zV3D!yvCM%v?rw0|fm2dntQXz6P2Jsm7{`CK7>Jb<^o zoPkJy|M~%xcpE5Y5<(?^Zwj)j0;iB-htPJ7|nn*TE=0Ce(}7LlMKN->tYB z4;?EXEF{j69_RmC&NpZmx_d^y5cVOEhGp&ddGSoQTlsCOTnE%#3uTsCPs3KjpZSdk z=9)LEf#e6mP-Cpw+cIH8SRtqwC1um17{hYOFKao0>zk{(UGxADBv@hED<*N1elewI zyQIK+#a!!CmnzxDVC8VrBB3F&WIO=o1|#}B0uHSCZ&N&h|7nC*JhKlt<+0}{Hjpz} z__<5do;1)LV}=O>SN`o@?~RSD)VI@M#C|F|*^UK7y2-{BF^)iyq1yHSI=1I)K{fZD zGgVM_962%RW8Y10{@<)63w4im)(nvve+<9ArstZwJ7z&p>MNxIMhZq5A?P?3jsbju z41WuK0%b9ZMZO|R;YTT3LB*xA`N_sRbKwVGNm)QJYp$wxdppRkn?X;BgS=k`f^0p+ zv)K7kf#Juz6XF{mF@LnDoxSRrE}kpNe^{l(?~9W0(1`{7?Efi;ZmW&eesaj;at0pSVozgmg=1xcDtdG0dyD9hDGI$ze%;UGkBPo=A1_EZEm5bRt1lVY)2B}6K^!GlIk`Qhtk zyVTqpoyFx+N6fF@$Q^uR8NEqBtU3e)@~FNaqN!34__ z3ihis@Q?i@@kqp~WN+N)&dhQmL#^*6`lGnv6!UYUdP-6>m=1g4vWXs!U z`?UFZJ|Sq4Mew`^lv(FUcD8uOeu`@CAoL&9_CoRtkBlzLZYsuV@Ri|AEXJZkyH~`P z)n37^t{*%uPEqTx26}vS=<<-@ie_-?I4Jn<%RitrKC?zf>z;C_|zz~!(^^a@HhL)*a@(q>pvI5t_m&=YhOoZmzn1s6D_-x9HrhxA)XXh(p&ab) ze>Lht@Ofa0vAU+Bs#4OlN=gfhusrZ~X>r!JA?XYLm@Gd^r-yuvc(=ChxKpY(BdM#m z|FYx8!~b3=k|&VBD7`T`#%q_-x0s*Zl@&2Q2t zD~e|=4Ylyq0(Z?*HrW{8@INP<8<4iErm0D3#fc$R>e5Bv_;I4-f($fB>uu4wJ{8Y0 z9pmjRME z0M$eS5!(I*Q)2ZGNe`Gwq5M7UwbA;-7T#g1QxdWMnGHtKcC-;JxPNk#MDLyVm`GH2 zVwKvLW-=B-!w9lR)WHuTi~1FYX2izqiD=l(2JdNUpD%>4LgnIFs@1q$GDu&r_}|HA zzp`S9hP=W$K@0tAs0u8h4Kxg+(eoTA*L~r#u@1~lG~=06@$XE4r9&wrg48A^Q&M!_ z)B=l^Xcq<{jnyXQgo1-igyF-j;_8~mQ_Jxl`!BS%lg479D3a4PendWSY+VZJT|Rc6 zR9|iy(FeoalN9H1|0i5Q6{xh&rD*~XKg*o^2M6jNFRNR-`LU>dkt)V(!N(SNJ31*( zl8jEXMFh9|0nALXMc${KprGKEa$Vp2?rwWqGas$TjJAIFeb03x*y~CXd*Wv23?QZG zbwKuY!1r~YdmUnZCsHt;_+508saKFnOVCEoGaab9Q-kyLm}TNrwoM2N+6ZSD&bb64 zd-pgMk?n0ENQeI||JyzN8`1H~g6>Egy`!8V_2l$-_K39?b>W}vu)e9 zZEH8%uFaU-ZnkY>tIhSy@BduayzE7D?lbrIoDapt>2z%-^$KST|6^Iu@6i;U0*F$` zqr-2U{6>C8YnKW1c|#EU6X@OPgW=1PM~M5xw1f^K-EOy#QiI2fqY+OnX3}Qtg>2%Q z60J-YAaXhwhA!;hEROobaa00Fb`Vf_;zRS>OP9d$M1oj;(lhLGuImx*4I>tHD|F&T zs)*IP!lRK%$f#siRv&yJ<7-~-^{;2I-;$;;$J1bNK!oioeO(rOScO68l~TJ)PB z^5ozWf(47qPZO{lVQz-0_yw7by$x0#FTv_+_|Hzj_Sfgre+7}Iky||PM;m+RS$Hss zs_^m>ogk#3#R}ZkU=YI2K@K~+9=kD)+vZbTCGz}9hfZ!fw-a=W4fwF)cJ1qQ7ejVD z#J)i?3|>Yvl<>w|6)|H_A>3Jcs`&2_+D<0vbF6BT_=~J1F=Y!OPYK)uI-yL#XG|#= zvAHk^gk%hiYsR|wISenUPmqz(tf14KPAtzYg#-+t zg6W^CiZ`^XB?+A=9*Z1Rd=2cZmv#qpUS}R_z|PDlVU8H#A-CNjp9`TRyP>+bC@KQ$ zBU~zZ27QNSKHiOlgxdv@szjblYY%4aPF*n}q;JhNz}v#_I2T{ER-ccxyp_E(?PYY2 zpR2`|aqN2}YzG8YD&|I1@k?0QzSevG^9@GiJJ_=A=Mly9^As&n(Al)##9f!EcL z8@7J`V2N7kC}gfHrejvfkok}bFheZ)Q`z0=^$n_ZbT9uESPyf1edFY@QkUgzUbW)L1MJE@nJ zDjidW>B2Uw4zCVRE*U<`#6dOg%hI>(J)uk-X>%pGo@)tJstW_uWtW`d(Bdm{k!Gl_ zYZ||v#gitrYg4@B)AO-!jLAu4{5A z7w=i1>{wy1%Mi0u=@f$Ba?+};7eYH%<+(W@@9=V=Vrn4-Va&$vdG|)|UIKY=$JLCf zuCn`B;@D1*ZX_~d+<~AQB7JE|Uw{EstWb+*1r=xg*KG#El^!1Neir=7q{(&T zATeKQ& z{s6T8Lihzenjj;PX zpPc7!o5fn<7Z=tDR|Ky5#?L9Mvm^S4Ef`3x;>z>uCzi@|$emN-d52-p(?FM?63D>v zMpGO4-sUmNL(FCx6ZANL-@~@wpr7tv^;^|Hy)Dj?0c(U9K>5T_IoNHWgS~gtfVRO3 zdedCP@C?oOk~wsiM_d0Zk@((c2G-qCQCyYMvK;AXWT(d{cq6#6fg$v-Dd}TMiX;Ft zeD&zcAJg`f5?$DjF((IPyRbAuIR`yU43%Tv|6poIyC+bC1xUx&5cF}O-^KA!b>+}P zMy0~OlHJK}m-nohaEeuE zA;2#J1t>+HEM59z@9FjW-FtVBSzuW=ylz%I9aCD*I5xGJfwxoOu;O#E;Mq?X28K5g z$~)|PNji@^UH;_8?28=u2(`X%%>F1Zwuj;+4ZtLn#*SZ6LvZ_W(*LwL?uM~^@W4Nj z%rcd6*H5liJs`igXVfX^f^X&5yO-XYv;91=s%&nPw3)Pn3?+HF-|OiJ@r+Gp1!h*Odj>&Sdd3Qx}i5x<+fw83?;#g|Yjt_B-hv^qK!} zyR+0^+=O(Yj1whHRXoZQC3s&gY3a=@)lam?brba(%4_K4x=l_&F9f@tOyB*Tu=@J9 z9PY(o-<6JjGh{Nce*57B-LUgf40^CUi_-Ek`q@!Y&`F4KseNjb3N^<2f*OeFh(tYX zqR~(~PT>l5*(n;U(ki3_Xsk7f)Tq)pT^3lP6HLiLocGSsdL|;rQQHom_aQ(ao&Wv}D7pHc zUZw$7H{?$W-*<00P}690@U!!lNO()74LIAF5pehg2PjkRibRNX;XW}uRhlog8gR7Q zYSW+S`F#j%``!8IrsZy(Xs(NA5s(K|-@bp!zOKEgM)0PN(tA^%^skF!O7!H&10qqV zWKyZhD(3M$K7d+U`+zT?9*gup$JF9zQKcKQYrtU@CLHn7klkHcw&y!|SBKYP0HH5&8ve>mOY^y4> z7>j3S=TZ1$aiJ`%J-ul516fW~=?v{UxEpb_c*K~QK`2(EhAoWD_$>59Ee{&NWUZef zW&rSN2nCBKTG(tpg2V~E%M%A%Dsui5L*ot(3s!wWo?31>eBiQu5HTnhkpgkxm|4D! z;JbA-S1XK*w8F+ZZW>{Whj%6h>#+g8;t4KSi>gf~D(#yAQ6u{879tLUL-V&TFl9@= z2=OsVmE!x^D7Ohi^Kkq#zXPK5ZdibK~^+-g$*cGI=9)HvCqlq6SN@F^| zI=Wu1Vv7&+DxwN}H`ptJ9*VpQ{0EVsV{&2Biqm)-Npr1g5kEw~cB!N#S}=HWIkZ(S z@d@TfjIjXF+Xtm1GI40cF%+7G0pMDO#~C{>1wKDk_fyV(7BLU_!K10cOOy?2V!Y60 zF`|~2ka{*yu%`{*n6uvn-XVk|Gj^s7Dz=kXppD6F0aO4mZcD^U6}KHls*_ z*^$z8FS9yf4Te^?lJ+Y8tPby4-u%{rM2x(c*w#7rY`B?7a5C!- z2Kcxh2YkQe`f`5|X}0l;QwIu7xydRNYHADZ@D=`&H%Gw!R%H*a0j}_)qX& z)B?NhS4`_}$%_;2Tq7WrLG`eZHxijw4o5abm?!7E=SHS1TO{5~7IlR{W3{}DmnUM> zjo>vmvb9BOVJ+PSz0nA=rTj^wshJyz`(6BgBK*7v2@1!f0Bu@Ow)NJchXkN$BIrqx z&{((PM^-`SMa52df|Gv{cw4;@s5+?m_0>5K#u&#dSi~9CM%RP6%Hs5Iow0*M!iZYZ z-TXQ}bMHTRt%hT(iPR}sji1fp$sXK|{~b8bkmmW*n}#SOi}290=*GT@a`XYxh`;*? z*avu< zwhiEqf@)}FgJAajGz9Atdnp8k zB(q1$n_MK0bhn4=afs2DE;?wL(@r^a61PU5;l|qO2OZ^9`it)~%69BxFp8aYoKUw` zZ>?Q05*4$aRly0<5T-QrXZvz#gs3 zO%%L_B!QwnL0+V`_TB_<6Y!ezFxernHfFC7aR05D+6kNdT_D7)lFF+rVeX$M(R*+e@U>_v@HY~vtEh1NJJD7wENyDcQBdUBN z-XomOu(oQ#jchwyJzlOLuJb;P+G%?z=smcDHtcrC%9wI{{bNOXwr3$J5i13az;lB( zSj_4%v;e-KUmO5QDpGVIs|iQj1F*p42;5*35w{Q==Q}(_*MG*oeyu^AiteM0&Vvh& zgQa5tBtJ5zZto>mCWiRfNhM6xuDgV%q?<3Vm|0o*(}G86*1idC+>!ePrNB9xK?Z(w z64b^<+sp)%MHgo{;F#4Sdh7=hrXy@l^PnV37BS(3n%aYitJD4DL0%~h)}?Gm zHpnw-@Bg+@dl-pDfDIUdItvqNddklg+NO*A5M`05V<=opZ`>yMyDKF;9!2aOJ)(9G zxEXxMS@hwU^9c61JHGbXj*=|T&ak$9iw&J3c?nS~2-?`#9tAbrgIxX~Liz4sOw_J4 zc`v>tYHD@kE^s!X}cEl)vxF?g9DHVqDECclhfVtL_bY~sts{&YCB zZ&6$KIKBC|Kh5#?APLA#!P{tq!|^9cTz+4s1zv{RfC6kpyjghiEZ+Qos2~L*SPU+j z6TAjG@0f8HG1rePtYMy$qB4tcRPp#Z5Bzcd5pDeBy6^3La*b#w}eKL@D<_u zn&1(iNp8Alf4SlsF;g?z%>8-x$pns+fZx=YQC#O36K2yeJxkXhh-oc`vc5^_gHXA6 z@`=FMovTw*=c)T|VVIDqN;lW=@nOSx5@k}u4V`}LqWy%XyHtd|t(|pS_#haeybC7o zv($u-{R8!b?@%6`1^ra^dzW|1zfL?W0x~F7SxR)Ok@CN{kixf6GN~-t$L4Ebc@_`8 zg1E>gk|zxoU?a%x-XVeiP&gZCz0KZ>pIEY-kH)clQvhJiyy}03+N&=114U^6 z^U95fn18Mc)NEvex~0p4ypK1RfpTit(y0h~FI*9fF>h!t%%glP5{aCN@)BEummnRZ zl%rX#4tfLIXv|P_0%H_)qM7gZ9ygbCarD77c{nMC#MTsaN2ok)&yzKmZ5>|(t>iboyKCk|; z53mP6P>80o*FVYlx-z<5R8~`zEFHll6OqR1uPO3eZ}M1S|1~6axftltGy}dC$*C+I z(=s3`P1-o^+R%NaP&3Pe`Nz^>=Oz1&&S%rgtVl`7D-@}{pTv-7?53yd5rx~8i9zTu zDozEfxg6(i z?eu5N)?+}o`;_J3;^33V(-RU|hv4V9!MXp_b8djcwaR^Ux+z~C8zD02hnaxX=lQqv zbsr=jF-fHaaXjN}(NbeBlV(YR*nDe#13iYD;sp)RGfogg)Rw{0Z~Pgd#m25LY#HhI}FZa2l!QBF&RB}l0l2uyNI{IAA!M(AlXP8gO&cxLF} zuA@5yR&d9wy)f?kmPka6aHT&xVJ|YDsUexIXBl)5xqXOk_`}ax(O88w<+l`XnHgU6 zo0!~+((B*iQ9;#V9o8#g?~-)nIEvHksl?nEG=UR|MmX*h>DDmTg)G_R&>9JUs&faH zPtWYn6$NW|l?1pBVKbrs{G&2=j6saYNbug}nIQ2du?UhD&>zMwlyJ77E43RakP6N4 zGKX$Bm%^n8`?3k>SM^XZ9zwM}LJNdi0{9~naBF`Zlcd%6NLG{k%E*$7;wG^Z(_xB3 z+{mBOpB>@aS7M z%BLAOCk;O2j$=MtU1eX3<;RMc+@uX!b#Y>CwcijByc~;E?=?mZ)X_f z3eE>r)Uyltr1Hq6FoBftKs&;EZY{jEJs3yq(3JhfgF-6uhm@kWlusKZ`uf> z?)MdO8zdstptx66_)=ug7?aa*-`j(+Bsb7t|6k?QUu$*8$;Ygu;^^w?F8N`i=>M(+ z&RmLOg30FNv-Zh6L8|NySr9b+MJ}yTm1I&g&lc6|Ic>@wj0JNdp{}VQ+i^9nytqB3 zrj0++EB@Q0vK&@S`MQ z>^n0h;sZ3^0V841*(=^)kVDrp+ct8hC+=(zqDm;T6(3LTRuqR(6ASwsUIb34lVW8@ zYd=EQP>tW@SW}NI4^NDWz17_b>-T3=<2AUQ0}5OY9yf71QjQyW;wZ+9#9NoEZ z`^>;W%r>~}xH9A^eC(j9sS?{M`%-o>?Q@tF@EwKOiN$e|Jhr$W1W~aq=6c#GgH9VA zQLu##(Rl?*gftjhg}oB{tkON8Y_~23s*swr$3)6TZ@S+S#^`J$ut1fX=$hz`d1Z0& z2ytt0l`C8;g5%L;o5@7*O_X;|Fe~QY10F=Vv>~noxQy;yUHztdQ4bPI1kLRQiqE$T zN%yBB2h7`r!iJ(W*m-)tiBD?fe0Hn6$dm-c^AQ^X>FL q{3zAnV2Ougf)}{@_o` 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

y4A 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≪av)Jc3G&%W>c;wJntn_1o zDv;%0;=O?Y&xZ(GJGr+nM#)oyu>RV1gD4OK$9{`?%&+(t0PkWmO^KfFfR!|TqBnis z*LxgV+{InaF&G4^zvr+vybwZuj&uF`y=Bc&W`gHnd6Q`^hJA=&YWk3;#0?WxpuwJ| zg6Ttn_YQC6#z&+%6`v@6Bpu0$Wn-|oK@L$`W<{Qdp+`V;{`Z)O4z9tm=$HWabFI5&A5Ij3*;b#qFXbXKp;pEdT)U zit)FsBK~i{VAm8qji|xm%blM6x@UR2*Ad00?-L;)lZ>mHD-^NXu9yRHblUkaNSQ_T z5j(*=co~g%Gc@{J{B68BwmNRBMJmGGqsPTK6k^wf+%^bj_&w}4^1_5|U~n?9&P!d6 zmh}yfGvGWR+0=c7w8(hxpQhV~VRmYFCSOH4z6bC!Jb*+hG)r39bz=ADDyznek^5$~ zdG8CHKTaK9FadE`FGEO5WZlP~xh$Po_doRJng4~`o(KHPl}=6mT9J|&mBe!a>UehK_EKmvm= zevZAZn9S%Pj$@YhX|im{)Q(78Sl_h0el$eBZ;{PlYn8xN)WfaUS|;%LpEwIhDuRG! z5Jh5G*9q8QxPJkYWz*svk_!RB%*5*RWntE#hW}yR9H|ve_-|CieX}6B;LpE!UH9_p z%z55TAz*UV@ujsLP=eZHu>eol@Dw`WSK)S@s52LdQBHrB4F5{3srBR6 zrlt2BrMXI~IUi~hJ6DYCKETGcZ0=CB{~GbJ4`hFQeBQLUvDaq(G;oB+mY(HUGla|% zg-%~9zOCQm5hnYSbn<_^ru2{ZI`zyVh6w@UvO>^0t$~iuDiN<+n}1iP1n34PDpG^_ zv=*jl;h1==xyei-1KjPcb=$9XM65sW@O-j-IOKL_C)z2vRcNVt`MV6m`DYquri}^D z0+E93cA-EzqHGxrAO{pWn8+@Vc!7y)=l8Ek3>%IRT7}+X!*uw(peL2aZn|$YkrG}8 zcRcc=O<}9Ab*3eo?bZKj?aITUdiVHL(%3SRHL^r@lR*+DWE=ZZG9p>CCS)5#R6-;B zzT{`C7}L0neJC;w8vB%HvX4n>>`R1uy1#$!ANStB?!V`K&U4;#p7(jr_x)^N+HrU^ zX2A{j+QBgJ5LpRpQwjawPLCXp6m6q6@a! zcRxz^*BEKCFEv{Wkho?gTyN)iitlXoeV)J0>c?ehdJJH}jSXHOwbULF9H+;aC9J<5;rkkN9C{iZZ*+Pmxa*q7 zfC0&z?}spH*SmMOm|DAhF?v6^+a&HWt*-=!6cb<-ES(YITsy@lUY@icMduvkJa;}q zEUi9~x4_7>$XXC6x+ES96iJ2SzGyEUyjq)K*aCie@-QOc^%|&*0qIwK_n%XXv9asy*%zfi;9AElOAY{dHhD#RKNi~? zma%N#D7Pw^O{Cag%2t4hvz!EeVj6s9{T&po6OPcCvdB`z8?v3?aJC2xfcOMBr<2Nm3JCN=u7KZ1Dk zgwR>wtRE&NoptBy_m9nqd1z7jxlGx_tMSRm6?4N<`7_phX4fW8jryBpbG1bH<=!B> z%wQCj{LxhorSIKDiW%WK!I|V)pr9gft^JX{X&2Sjc{#YhUT0{)n_@iYx^Lv{5XE#< zrhy1QO`WkKMfNOpH4DQFe0|71a|5f^S`WOc{tiXWvG;|s50_~I%_P)6Z{1YX)eE1;8P{#kbi5Mhq<*bCXB#S?NNcaN)IPw?2`in(w;_K^S!?(A6 zOptXdl6TZpXw4xBg?7Z2nx@WXWYVW)%a3S8cWC8?34?A9Rc z4gbP^X(>zmgFq#D-F(DLuV&K8ku)y8k4X}>nA&^oY0E#}6U1M}ojh83?A@;YuXS-ZEj4M!!c$XQl7zuZagh;{fe7s# z|MJ1_6S1_s_u0%_GW56}GYd_pcPwwmG^^0%Yy41km>sw{ldIJ2`{_~N-r{`Mm^%aG zADxv0f8M*})q*Fz=J^r9Rc7rGsb{T8KI6*)7puqwOoQ#Q3GIIt6SqvSAiLZm*9niw zvxCn2y#EkFwYRwkBJJ$HF{jcuRv8lS--%`G`3vZD^(a@kS{<2F zcK>0na26;V*Vxv-OL^p{Q5Q0Ur!QRWZ18Np%ug#Zy{iOWza}~_damcg_vm=Y&QK~3 zi3sQ?wR_&W0>nX5xjS=Cz-^py%Q*ep37Lh11PrunCE(4RuEScfRu%;VCT(3vP^~#G zrWq3d93B)eW1o1M;1yR1)yc>5Oui^6m<|}o4>`{oCvOk;W0SvB0e*R#hb)m`cznvp zMY->u^N$dRGrUnN$qg$uCM(mAdz;2vLOv0~oIDES89>X@H+nWHA__3!bi1Ty)|_l~ zP)*b`^c>Tpk3!+6suG)AsILAZa}#+uoSNi39BMu!bTRX(WI0>vlQ5d+=R4Cy8lIPv z0O)Q{;{)K602n;W$vU^sQO^a=O0d}WE*EP@p3?m4Ttcq0LKE})=TJV3-c2Hw5V}7{ z*|jVRHQg|@fzq(+ZbN~4X<1Gbly;m z7JUK8`}tdSz0n!T=APhm9s?um<82n*y%go9uqxV@N%{ii(a(SfK7M`Fa83cmYbLb= zn|F~OJMCTU2`prYF&1#M&}=qHalTHmeJ9 zk41R-0-QWbQ|HXCkX7Ba6*uSlD5z4%S>akF5?`-YdRi6xFuPckbq?(l^wuJjRGh8Yna8DmxG8hR@eS-p z5RmL_S*HZFGV@k@%g%DdDP&#%s#kq9Ic)Fx{iEXKC|^H8D|sgKSxXC!)X3#96^{{$ z?e#gY{$ngT>H4+HMAKKs7bBi=2)e&%&@0IT3#9~s&+=&N8~GL8b)|)F3^}Iz8NSTq z2>}2;lZ3y23Pi=$Jn@(foZVsU7W1xp#$0Om3bqwxq^j_`|swv!xg!kFzfpCw!NiIQlrxZuW&yt;fd$jouy;zUgJv)V7D|_Y3Bnv8WgXNn7UMZ zc5m+QA=RHTv0OQiEi{8D>yBrU9wvGzNH{JDJ}jK&N8ssF)5o!ATh!q~3nHwJwlD?tAks zY>LK0mg1|W#%KACBTMj()O-}_S7aZQ+p4AW3VkNB&m~ryKBLW;S%q&~DOru8BFrYF zg~G$lFx+OoC?N`BHm%}0v?ir=iR!8BvZeVu_>_5!W@32sx;CO}mBg*Ga(E{4eB8?3 zJ{?L;p8E7@)8e9bd`y%lq&J%hUcYW4mGh}Za44d!HnV3ER^{p4Pi&pvn~|8%Ip58YYlBs0+4-8?P5e}7F4I`Y zbBWVWkh#65F|&R7AY;C|ba^xiw(Wt;h(stWA$L*O$(d$&ry>c4k1?<-tVhx$a1Vd;~TaY6D9=9@h~@Akh@w)un2TVekp4jSkJ&U4m8q- z7DO^Uw9rZjGdawyLTuxDz0s8V0R`=Xa+%r+Z$YkKG+WN^N8Kj2NQKC0Ld`NVB1Kfu zjRP1D(+o<~f=}Pxb}40im}*2>-_ozl8uNX~+7&CR+dRk(n%;izngaqIg@8auz@Rt~ z3rH7q6eJEh0)oVWKww=Eh(-KA4*!?S|M$E8#}xkkS)C)DCqS}wGcB9EBf$HBKnO!i KgF5}&@&5$d|B?0p literal 0 HcmV?d00001 diff --git a/lms/nladmin-ui/src/layout/components/Sidebar/Logo.vue b/lms/nladmin-ui/src/layout/components/Sidebar/Logo.vue index cda9341..a6d1404 100644 --- a/lms/nladmin-ui/src/layout/components/Sidebar/Logo.vue +++ b/lms/nladmin-ui/src/layout/components/Sidebar/Logo.vue @@ -14,7 +14,7 @@ + + diff --git a/lms/nladmin-ui/src/views/wms/pdm/solidifyplan/pdmBdSolidifyPlan.js b/lms/nladmin-ui/src/views/wms/pdm/solidifyplan/pdmBdSolidifyPlan.js new file mode 100644 index 0000000..6aefa61 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/pdm/solidifyplan/pdmBdSolidifyPlan.js @@ -0,0 +1,50 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/pdmBdSolidifyPlan', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/pdmBdSolidifyPlan/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/pdmBdSolidifyPlan', + method: 'put', + data + }) +} + +export function details(code) { + return request({ + url: 'api/pdmBdSolidifyPlan/details', + method: 'post', + data: code + }) +} + +export function detailMaterials(code) { + return request({ + url: 'api/pdmBdSolidifyPlan/detailMaterials', + method: 'post', + data: code + }) +} +export function changePlan(data) { + return request({ + url: 'api/pdmBdSolidifyPlan/changePlan', + method: 'post', + data + }) +} + +export default { add, edit, del, details, detailMaterials, changePlan } diff --git a/lms/nladmin-ui/src/views/wms/pdm/solidifyplan/solidifyplan-transfer.vue b/lms/nladmin-ui/src/views/wms/pdm/solidifyplan/solidifyplan-transfer.vue new file mode 100644 index 0000000..46aa50c --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/pdm/solidifyplan/solidifyplan-transfer.vue @@ -0,0 +1,472 @@ + + + + + + + diff --git a/lms/nladmin-ui/src/views/wms/pdm/track/index.vue b/lms/nladmin-ui/src/views/wms/pdm/track/index.vue new file mode 100644 index 0000000..dc43a41 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/pdm/track/index.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/lms/nladmin-ui/src/views/wms/pdm/track/pdmBdProductionProcessTracking.js b/lms/nladmin-ui/src/views/wms/pdm/track/pdmBdProductionProcessTracking.js new file mode 100644 index 0000000..9224888 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/pdm/track/pdmBdProductionProcessTracking.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/pdmBdProductionProcessTracking', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/pdmBdProductionProcessTracking/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/pdmBdProductionProcessTracking', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue b/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue index 988aacc..49a0461 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue @@ -1,5 +1,5 @@