From c8e540d2729dc09a330fbf93fbb5d3df5bfb3199 Mon Sep 17 00:00:00 2001 From: "zhaowei.huang" <228127304@qq.com> Date: Sun, 14 Jun 2026 11:19:15 +0800 Subject: [PATCH] init commit --- .gitignore | 42 +- DEFENSE_QUESTIONS.md | 797 ++ DEFENSE_REFERENCE.md | 1159 +++ DEVELOPMENT_GUIDE.md | 273 + DocumentHub.html | 879 +++ INDEX.md | 58 + LooMission.md | 412 + QUICK_REFERENCE.md | 152 + README.en.md | 36 + README.md | 63 +- StandardScene.Core/CarTypes/BasicFields.cs | 51 + StandardScene.Core/CarTypes/DummyCar.cs | 740 ++ .../CarTypes/IScriptErrorRecoverable.cs | 15 + StandardScene.Core/CarTypes/KivaFields.cs | 80 + .../CarTypes/MultiWheelLifterFields.cs | 35 + .../CarTypes/VehicleMonitor.Designer.cs | 46 + StandardScene.Core/CarTypes/VehicleMonitor.cs | 1710 ++++ .../Chained/AbstractLoopMission.cs | 2166 +++++ .../Chained/ChainedDeliveryMission.cs | 1509 ++++ .../Chained/DeliveryCallbackAttacher.cs | 66 + .../Chained/DeliveryCallbackRegistry.cs | 76 + StandardScene.Core/Chained/DeliveryViewer.cs | 316 + .../Chained/DeliveryViewer.designer.cs | 206 + .../Chained/DeliveryViewer.resx | 123 + StandardScene.Core/Chained/Loop/ILoopRules.cs | 58 + .../Chained/Loop/ITriggerAdapter.cs | 36 + StandardScene.Core/Chained/LoopMission.cs | 163 + .../Chained/LoopViewer.Designer.cs | 570 ++ StandardScene.Core/Chained/LoopViewer.cs | 595 ++ StandardScene.Core/Chained/LoopViewer.resx | 120 + .../Chained/TransportDeliveryCallbacks.cs | 206 + .../Chained/TransportMission.cs | 599 ++ .../Charge/AbstractChargeLogicMission.cs | 1378 ++++ StandardScene.Core/Charge/AlarmConfig.cs | 109 + .../Charge/AlarmConfigDataService.cs | 310 + .../AlarmConfigManagementForm.Designer.cs | 596 ++ .../Charge/AlarmConfigManagementForm.cs | 547 ++ .../Charge/AlarmConfigManagementForm.resx | 120 + StandardScene.Core/Charge/ChargeStation.cs | 429 + .../Charge/ChargeStationDataService.cs | 386 + .../Charge/ChargeStationHelper.cs | 448 ++ .../ChargeStationManagementForm.Designer.cs | 1335 ++++ .../Charge/ChargeStationManagementForm.cs | 1389 ++++ .../Charge/ChargeStationManagementForm.resx | 120 + .../Charge/ChargeStrategyConfig.cs | 309 + .../ChargeStrategyConfigForm.Designer.cs | 572 ++ .../Charge/ChargeStrategyConfigForm.cs | 215 + .../Charge/ChargeStrategyConfigService.cs | 203 + StandardScene.Core/Charge/ChargeUdpService.cs | 62 + .../Charge/CommunicationMessage.cs | 89 + .../Charge/CommunicationMessageService.cs | 587 ++ .../CommunicationMonitorForm.Designer.cs | 376 + .../Charge/CommunicationMonitorForm.cs | 561 ++ .../Charge/CommunicationMonitorForm.resx | 123 + StandardScene.Core/Charge/QUICKSTART.md | 413 + .../Charge/README_ChargeStationManagement.md | 310 + .../Charge/StandardChargeMission.cs | 785 ++ .../AbstractChargeStation.cs | 49 + .../Coders/CommonTrackCoders.cs | 111 + .../CommonTools/AtomicFileUpdateHelper.cs | 69 + .../CommonTools/SnowflakeIdGenerator.cs | 128 + StandardScene.Core/Commons.cs | 717 ++ .../Docs/Charge/2.充电管理说明.doc | Bin 0 -> 1659208 bytes .../Charge/AbstractChargeMission使用手册.pdf | Bin 0 -> 916676 bytes StandardScene.Core/Docs/Charge/NetAssist.exe | Bin 0 -> 572416 bytes StandardScene.Core/Docs/Charge/README.md | 987 +++ .../Docs/Charge/充电桩实时数据功能说明.md | 414 + .../Docs/Charge/充电桩报文自动更新说明.md | 309 + ...口-pcb板更新V8-更新IP&AP设定2023年9月27日..docx | Bin 0 -> 32778 bytes .../充电站管控接口-新增报警码240113.xlsx | Bin 0 -> 25428 bytes .../Docs/Charge/充电策略配置说明.md | 265 + .../Docs/Charge/完整文件清单.md | 527 ++ .../Docs/Charge/报文解析使用示例.md | 320 + StandardScene.Core/Docs/Charge/测试数据.txt | 26 + StandardScene.Core/Docs/CoderSettings汇总.md | 254 + StandardScene.Core/Docs/DEVELOPMENT_GUIDE.pdf | Bin 0 -> 464515 bytes .../Docs/DoorController开发手册.md | 944 +++ .../Docs/DoorMission使用手册.md | 634 ++ .../ExtendDevice/ButtonBox/BasicButtonBox.cs | 263 + .../ButtonBox/ButtonBoxManager.Designer.cs | 608 ++ .../ButtonBox/ButtonBoxManager.cs | 1000 +++ .../ButtonBox/ButtonBoxManager.resx | 120 + .../ExtendDevice/ButtonBox/ButtonBoxModel.cs | 34 + .../ExtendDevice/ButtonBox/ButtonMission.cs | 806 ++ .../ExtendDevice/Door/BasicDoorController.cs | 278 + .../ExtendDevice/Door/DoorManager.Designer.cs | 521 ++ .../ExtendDevice/Door/DoorManager.cs | 961 +++ .../ExtendDevice/Door/DoorManager.resx | 64 + .../ExtendDevice/Door/DoorMission.cs | 1042 +++ .../ExtendDevice/Door/DoorModel.cs | 63 + .../ExtendDevice/Door/DoorMonitor.Designer.cs | 263 + .../ExtendDevice/Door/DoorMonitor.cs | 447 ++ .../ExtendDevice/Door/DoorMonitor.resx | 64 + .../ExtendDevice/Door/DoorTypeAttribute.cs | 25 + StandardScene.Core/Heuristic.cs | 41 + .../InterLock/AbstractInterlockMission.cs | 413 + .../InterLock/TrafficInterlockMission.cs | 167 + .../TrafficInterlockViewer.Designer.cs | 325 + .../InterLock/TrafficInterlockViewer.cs | 370 + .../InterLock/TrafficInterlockViewer.resx | 120 + StandardScene.Core/LadderLogic.cs | 107 + StandardScene.Core/Model/ChargingSetting.cs | 31 + StandardScene.Core/Model/EnvelopeSetting.cs | 15 + StandardScene.Core/Model/LoopTask.cs | 76 + StandardScene.Core/Model/Map.cs | 241 + StandardScene.Core/Model/MapStructure.cs | 226 + StandardScene.Core/Model/MissionState.cs | 48 + StandardScene.Core/Model/PlanRulesSetting.cs | 17 + StandardScene.Core/Model/SimpleConfig.cs | 16 + StandardScene.Core/Model/SimpleMap.cs | 124 + StandardScene.Core/Model/TaskModel.cs | 262 + .../Model/TrafficControlSetting.cs | 15 + StandardScene.Core/Model/VehicleStatus.cs | 16 + StandardScene.Core/Properties/AssemblyInfo.cs | 36 + .../Properties/InternalsVisibleTo.cs | 8 + StandardScene.Core/Ref/leegKeys-sdk.dll | Bin 0 -> 17920 bytes .../Scheduler/HeartBeatMission.cs | 73 + .../Scheduler/NodeIsEnableMission.cs | 144 + .../RegionalTrafficControlMission.cs | 432 + .../Scheduler/SecuritySignalMission.cs | 201 + StandardScene.Core/StandardCADTool.cs | 294 + StandardScene.Core/StandardScene.Core.csproj | 64 + StandardScene.Core/TCP/AsyncTcpClient.cs | 502 ++ .../TCP/TcpDatagramReceivedEventArgs.cs | 22 + .../TCP/TcpServerConnectedEventArgs.cs | 31 + .../TCP/TcpServerDisconnectedEventArgs.cs | 31 + .../TcpServerExceptionOccurredEventArgs.cs | 34 + StandardScene.Core/Utils/JsonParser.cs | 50 + StandardScene.Core/Utils/JsonTool.cs | 37 + StandardScene.Core/Utils/ModbusClass.cs | 120 + StandardScene.Core/Utils/WebAPIHelper.cs | 163 + StandardScene.Core/WebApi.cs | 2878 +++++++ StandardScene.Core/refpath.json | 6973 +++++++++++++++++ .../ButtonBox/AzowieButtonBox.cs | 547 ++ .../ButtonBox/LeegButtonBox.cs | 225 + .../Charge/FLChargeStation.cs | 405 + .../Charge/MuXingChargeStation.cs | 456 ++ .../Charge/PCBChargeStation.cs | 147 + .../Door/ModbusDoorController.cs | 412 + .../StandardScene.Devices.csproj | 54 + .../StandardScene.Devices.scene.json | 12 + StandardScene.Magnetic/CarTypes/Kiva.cs | 692 ++ .../CarTypes/MultiWheelLifterCar.cs | 396 + .../Coders/MagneticTrackCoder.cs | 168 + .../MagneticSceneProfile.cs | 31 + .../StandardScene.Magnetic.csproj | 54 + .../StandardScene.Magnetic.scene.json | 12 + .../StandardScene.Protocol.VDA5050.csproj | 60 + .../StandardScene.Protocol.VDA5050.scene.json | 10 + .../VDACar/MasterMQTTCommunication.cs | 297 + .../VDACar/TextViewer.Designer.cs | 58 + .../VDACar/TextViewer.cs | 28 + .../VDACar/TextViewer.resx | 120 + .../VDACar/VDA5050Car.cs | 1069 +++ .../VDACar/VDA5050Commons.cs | 39 + .../VDACar/VDA5050Helper.cs | 56 + .../VDACar/VDA5050Interface.cs | 177 + .../VDACar/VDA5050Segment.cs | 77 + .../VDACar/VDA5050WebApi.cs | 130 + StandardScene.QrLidar/Cad/SyncQrMap.cs | 49 + StandardScene.QrLidar/CarTypes/ArmCar.cs | 261 + .../CarTypes/DualLiftingCar.cs | 105 + StandardScene.QrLidar/CarTypes/Forklift.cs | 435 + .../CarTypes/MultiVehicleCar.cs | 255 + .../CarTypes/MultiWheelForkLifter.cs | 156 + StandardScene.QrLidar/QrLidarSceneProfile.cs | 37 + .../StandardScene.QrLidar.csproj | 58 + .../StandardScene.QrLidar.scene.json | 13 + StandardScene.sln | 49 + StandardScene代码审查报告-会话8复核增强版.md | 166 + StandardScene代码审查报告.md | 267 + StandardScene会话14交接摘要.md | 241 + StandardScene拆分计划.md | 613 ++ StandardScene架构重构方案.md | 267 + 174 files changed, 60830 insertions(+), 39 deletions(-) create mode 100644 DEFENSE_QUESTIONS.md create mode 100644 DEFENSE_REFERENCE.md create mode 100644 DEVELOPMENT_GUIDE.md create mode 100644 DocumentHub.html create mode 100644 INDEX.md create mode 100644 LooMission.md create mode 100644 QUICK_REFERENCE.md create mode 100644 README.en.md create mode 100644 StandardScene.Core/CarTypes/BasicFields.cs create mode 100644 StandardScene.Core/CarTypes/DummyCar.cs create mode 100644 StandardScene.Core/CarTypes/IScriptErrorRecoverable.cs create mode 100644 StandardScene.Core/CarTypes/KivaFields.cs create mode 100644 StandardScene.Core/CarTypes/MultiWheelLifterFields.cs create mode 100644 StandardScene.Core/CarTypes/VehicleMonitor.Designer.cs create mode 100644 StandardScene.Core/CarTypes/VehicleMonitor.cs create mode 100644 StandardScene.Core/Chained/AbstractLoopMission.cs create mode 100644 StandardScene.Core/Chained/ChainedDeliveryMission.cs create mode 100644 StandardScene.Core/Chained/DeliveryCallbackAttacher.cs create mode 100644 StandardScene.Core/Chained/DeliveryCallbackRegistry.cs create mode 100644 StandardScene.Core/Chained/DeliveryViewer.cs create mode 100644 StandardScene.Core/Chained/DeliveryViewer.designer.cs create mode 100644 StandardScene.Core/Chained/DeliveryViewer.resx create mode 100644 StandardScene.Core/Chained/Loop/ILoopRules.cs create mode 100644 StandardScene.Core/Chained/Loop/ITriggerAdapter.cs create mode 100644 StandardScene.Core/Chained/LoopMission.cs create mode 100644 StandardScene.Core/Chained/LoopViewer.Designer.cs create mode 100644 StandardScene.Core/Chained/LoopViewer.cs create mode 100644 StandardScene.Core/Chained/LoopViewer.resx create mode 100644 StandardScene.Core/Chained/TransportDeliveryCallbacks.cs create mode 100644 StandardScene.Core/Chained/TransportMission.cs create mode 100644 StandardScene.Core/Charge/AbstractChargeLogicMission.cs create mode 100644 StandardScene.Core/Charge/AlarmConfig.cs create mode 100644 StandardScene.Core/Charge/AlarmConfigDataService.cs create mode 100644 StandardScene.Core/Charge/AlarmConfigManagementForm.Designer.cs create mode 100644 StandardScene.Core/Charge/AlarmConfigManagementForm.cs create mode 100644 StandardScene.Core/Charge/AlarmConfigManagementForm.resx create mode 100644 StandardScene.Core/Charge/ChargeStation.cs create mode 100644 StandardScene.Core/Charge/ChargeStationDataService.cs create mode 100644 StandardScene.Core/Charge/ChargeStationHelper.cs create mode 100644 StandardScene.Core/Charge/ChargeStationManagementForm.Designer.cs create mode 100644 StandardScene.Core/Charge/ChargeStationManagementForm.cs create mode 100644 StandardScene.Core/Charge/ChargeStationManagementForm.resx create mode 100644 StandardScene.Core/Charge/ChargeStrategyConfig.cs create mode 100644 StandardScene.Core/Charge/ChargeStrategyConfigForm.Designer.cs create mode 100644 StandardScene.Core/Charge/ChargeStrategyConfigForm.cs create mode 100644 StandardScene.Core/Charge/ChargeStrategyConfigService.cs create mode 100644 StandardScene.Core/Charge/ChargeUdpService.cs create mode 100644 StandardScene.Core/Charge/CommunicationMessage.cs create mode 100644 StandardScene.Core/Charge/CommunicationMessageService.cs create mode 100644 StandardScene.Core/Charge/CommunicationMonitorForm.Designer.cs create mode 100644 StandardScene.Core/Charge/CommunicationMonitorForm.cs create mode 100644 StandardScene.Core/Charge/CommunicationMonitorForm.resx create mode 100644 StandardScene.Core/Charge/QUICKSTART.md create mode 100644 StandardScene.Core/Charge/README_ChargeStationManagement.md create mode 100644 StandardScene.Core/Charge/StandardChargeMission.cs create mode 100644 StandardScene.Core/ChargeStationType/AbstractChargeStation.cs create mode 100644 StandardScene.Core/Coders/CommonTrackCoders.cs create mode 100644 StandardScene.Core/CommonTools/AtomicFileUpdateHelper.cs create mode 100644 StandardScene.Core/CommonTools/SnowflakeIdGenerator.cs create mode 100644 StandardScene.Core/Commons.cs create mode 100644 StandardScene.Core/Docs/Charge/2.充电管理说明.doc create mode 100644 StandardScene.Core/Docs/Charge/AbstractChargeMission使用手册.pdf create mode 100644 StandardScene.Core/Docs/Charge/NetAssist.exe create mode 100644 StandardScene.Core/Docs/Charge/README.md create mode 100644 StandardScene.Core/Docs/Charge/充电桩实时数据功能说明.md create mode 100644 StandardScene.Core/Docs/Charge/充电桩报文自动更新说明.md create mode 100644 StandardScene.Core/Docs/Charge/充电站HMI&管控接口-pcb板更新V8-更新IP&AP设定2023年9月27日..docx create mode 100644 StandardScene.Core/Docs/Charge/充电站管控接口-新增报警码240113.xlsx create mode 100644 StandardScene.Core/Docs/Charge/充电策略配置说明.md create mode 100644 StandardScene.Core/Docs/Charge/完整文件清单.md create mode 100644 StandardScene.Core/Docs/Charge/报文解析使用示例.md create mode 100644 StandardScene.Core/Docs/Charge/测试数据.txt create mode 100644 StandardScene.Core/Docs/CoderSettings汇总.md create mode 100644 StandardScene.Core/Docs/DEVELOPMENT_GUIDE.pdf create mode 100644 StandardScene.Core/Docs/DoorController开发手册.md create mode 100644 StandardScene.Core/Docs/DoorMission使用手册.md create mode 100644 StandardScene.Core/ExtendDevice/ButtonBox/BasicButtonBox.cs create mode 100644 StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxManager.Designer.cs create mode 100644 StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxManager.cs create mode 100644 StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxManager.resx create mode 100644 StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxModel.cs create mode 100644 StandardScene.Core/ExtendDevice/ButtonBox/ButtonMission.cs create mode 100644 StandardScene.Core/ExtendDevice/Door/BasicDoorController.cs create mode 100644 StandardScene.Core/ExtendDevice/Door/DoorManager.Designer.cs create mode 100644 StandardScene.Core/ExtendDevice/Door/DoorManager.cs create mode 100644 StandardScene.Core/ExtendDevice/Door/DoorManager.resx create mode 100644 StandardScene.Core/ExtendDevice/Door/DoorMission.cs create mode 100644 StandardScene.Core/ExtendDevice/Door/DoorModel.cs create mode 100644 StandardScene.Core/ExtendDevice/Door/DoorMonitor.Designer.cs create mode 100644 StandardScene.Core/ExtendDevice/Door/DoorMonitor.cs create mode 100644 StandardScene.Core/ExtendDevice/Door/DoorMonitor.resx create mode 100644 StandardScene.Core/ExtendDevice/Door/DoorTypeAttribute.cs create mode 100644 StandardScene.Core/Heuristic.cs create mode 100644 StandardScene.Core/InterLock/AbstractInterlockMission.cs create mode 100644 StandardScene.Core/InterLock/TrafficInterlockMission.cs create mode 100644 StandardScene.Core/InterLock/TrafficInterlockViewer.Designer.cs create mode 100644 StandardScene.Core/InterLock/TrafficInterlockViewer.cs create mode 100644 StandardScene.Core/InterLock/TrafficInterlockViewer.resx create mode 100644 StandardScene.Core/LadderLogic.cs create mode 100644 StandardScene.Core/Model/ChargingSetting.cs create mode 100644 StandardScene.Core/Model/EnvelopeSetting.cs create mode 100644 StandardScene.Core/Model/LoopTask.cs create mode 100644 StandardScene.Core/Model/Map.cs create mode 100644 StandardScene.Core/Model/MapStructure.cs create mode 100644 StandardScene.Core/Model/MissionState.cs create mode 100644 StandardScene.Core/Model/PlanRulesSetting.cs create mode 100644 StandardScene.Core/Model/SimpleConfig.cs create mode 100644 StandardScene.Core/Model/SimpleMap.cs create mode 100644 StandardScene.Core/Model/TaskModel.cs create mode 100644 StandardScene.Core/Model/TrafficControlSetting.cs create mode 100644 StandardScene.Core/Model/VehicleStatus.cs create mode 100644 StandardScene.Core/Properties/AssemblyInfo.cs create mode 100644 StandardScene.Core/Properties/InternalsVisibleTo.cs create mode 100644 StandardScene.Core/Ref/leegKeys-sdk.dll create mode 100644 StandardScene.Core/Scheduler/HeartBeatMission.cs create mode 100644 StandardScene.Core/Scheduler/NodeIsEnableMission.cs create mode 100644 StandardScene.Core/Scheduler/RegionalTrafficControlMission.cs create mode 100644 StandardScene.Core/Scheduler/SecuritySignalMission.cs create mode 100644 StandardScene.Core/StandardCADTool.cs create mode 100644 StandardScene.Core/StandardScene.Core.csproj create mode 100644 StandardScene.Core/TCP/AsyncTcpClient.cs create mode 100644 StandardScene.Core/TCP/TcpDatagramReceivedEventArgs.cs create mode 100644 StandardScene.Core/TCP/TcpServerConnectedEventArgs.cs create mode 100644 StandardScene.Core/TCP/TcpServerDisconnectedEventArgs.cs create mode 100644 StandardScene.Core/TCP/TcpServerExceptionOccurredEventArgs.cs create mode 100644 StandardScene.Core/Utils/JsonParser.cs create mode 100644 StandardScene.Core/Utils/JsonTool.cs create mode 100644 StandardScene.Core/Utils/ModbusClass.cs create mode 100644 StandardScene.Core/Utils/WebAPIHelper.cs create mode 100644 StandardScene.Core/WebApi.cs create mode 100644 StandardScene.Core/refpath.json create mode 100644 StandardScene.Devices/ButtonBox/AzowieButtonBox.cs create mode 100644 StandardScene.Devices/ButtonBox/LeegButtonBox.cs create mode 100644 StandardScene.Devices/Charge/FLChargeStation.cs create mode 100644 StandardScene.Devices/Charge/MuXingChargeStation.cs create mode 100644 StandardScene.Devices/Charge/PCBChargeStation.cs create mode 100644 StandardScene.Devices/Door/ModbusDoorController.cs create mode 100644 StandardScene.Devices/StandardScene.Devices.csproj create mode 100644 StandardScene.Devices/StandardScene.Devices.scene.json create mode 100644 StandardScene.Magnetic/CarTypes/Kiva.cs create mode 100644 StandardScene.Magnetic/CarTypes/MultiWheelLifterCar.cs create mode 100644 StandardScene.Magnetic/Coders/MagneticTrackCoder.cs create mode 100644 StandardScene.Magnetic/MagneticSceneProfile.cs create mode 100644 StandardScene.Magnetic/StandardScene.Magnetic.csproj create mode 100644 StandardScene.Magnetic/StandardScene.Magnetic.scene.json create mode 100644 StandardScene.Protocol.VDA5050/StandardScene.Protocol.VDA5050.csproj create mode 100644 StandardScene.Protocol.VDA5050/StandardScene.Protocol.VDA5050.scene.json create mode 100644 StandardScene.Protocol.VDA5050/VDACar/MasterMQTTCommunication.cs create mode 100644 StandardScene.Protocol.VDA5050/VDACar/TextViewer.Designer.cs create mode 100644 StandardScene.Protocol.VDA5050/VDACar/TextViewer.cs create mode 100644 StandardScene.Protocol.VDA5050/VDACar/TextViewer.resx create mode 100644 StandardScene.Protocol.VDA5050/VDACar/VDA5050Car.cs create mode 100644 StandardScene.Protocol.VDA5050/VDACar/VDA5050Commons.cs create mode 100644 StandardScene.Protocol.VDA5050/VDACar/VDA5050Helper.cs create mode 100644 StandardScene.Protocol.VDA5050/VDACar/VDA5050Interface.cs create mode 100644 StandardScene.Protocol.VDA5050/VDACar/VDA5050Segment.cs create mode 100644 StandardScene.Protocol.VDA5050/VDACar/VDA5050WebApi.cs create mode 100644 StandardScene.QrLidar/Cad/SyncQrMap.cs create mode 100644 StandardScene.QrLidar/CarTypes/ArmCar.cs create mode 100644 StandardScene.QrLidar/CarTypes/DualLiftingCar.cs create mode 100644 StandardScene.QrLidar/CarTypes/Forklift.cs create mode 100644 StandardScene.QrLidar/CarTypes/MultiVehicleCar.cs create mode 100644 StandardScene.QrLidar/CarTypes/MultiWheelForkLifter.cs create mode 100644 StandardScene.QrLidar/QrLidarSceneProfile.cs create mode 100644 StandardScene.QrLidar/StandardScene.QrLidar.csproj create mode 100644 StandardScene.QrLidar/StandardScene.QrLidar.scene.json create mode 100644 StandardScene.sln create mode 100644 StandardScene代码审查报告-会话8复核增强版.md create mode 100644 StandardScene代码审查报告.md create mode 100644 StandardScene会话14交接摘要.md create mode 100644 StandardScene拆分计划.md create mode 100644 StandardScene架构重构方案.md diff --git a/.gitignore b/.gitignore index ca1c7a3..5892a93 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ -# ---> VisualStudio ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files *.rsuser @@ -91,7 +90,6 @@ StyleCopReport.xml *.tmp_proj *_wpftmp.csproj *.log -*.tlog *.vspscc *.vssscc .builds @@ -295,17 +293,6 @@ node_modules/ # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) *.vbw -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - -# Visual Studio 6 workspace and project file (working project files containing files to include in project) -*.dsw -*.dsp - -# Visual Studio 6 technical files -*.ncb -*.aps - # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts @@ -362,9 +349,6 @@ ASALocalRun/ # Local History for Visual Studio .localhistory/ -# Visual Studio History (VSHistory) files -.vshistory/ - # BeatPulse healthcheck temp database healthchecksdb @@ -377,24 +361,6 @@ MigrationBackup/ # Fody - auto-generated XML schema FodyWeavers.xsd -# VS Code files for those working on multiple tools -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# JetBrains Rider -*.sln.iml - +build/ +/build/SimpleComposer.exe +/build/plugins/StandardScene.dll diff --git a/DEFENSE_QUESTIONS.md b/DEFENSE_QUESTIONS.md new file mode 100644 index 0000000..6af11f1 --- /dev/null +++ b/DEFENSE_QUESTIONS.md @@ -0,0 +1,797 @@ +# StandardScene Ŀۺ + +**Ѷȵȼ**иѶȣ +**Ԥڴʱ**60-90 +**ֱ׼**ܹ 30% + ʵ 40% + 20% + 10% + +--- + +## + +һֿļˣҵ + +### ״ + +ֿж̨ VDA5050 ׼Ŀǰϵͳ⣺ + +1. **Ч**Щ񱻱Ϊ""޷ȷ +2. **ƽ**ȼ͵Զ޷ִ +3. **ɿ** MQTT ӶϿʱϵͳ޷Զָ +4. **ɱ**Ƶõ㣬Ӫɱ + +### ҵָ + +| ָ | Ŀ | ǰ | +|-----|------|-----| +| ͨ | 100% | 92% | +| ƽȴʱ | <30s | 45s | +| | 85% | 72% | +| ϵͳ | 99% | 94% | + +--- + +## ۺĿѡһش⣩ + +### ⡿ܱع滮ϵͳ + +**Ŀ** + +ǰϵͳ³бֲѣ + +** 1**ȡ㱻һ̨ռ +``` +ʱߣ +T0: Aӹλ1ȡλ2ŻC1 +T1: C1 ǰλ1 ȡ +T2: ͬʱC2 ָλ1C2ҲҪȡ +T3: C2 ѵִ﹤λ1ȡ +T4: C1 ִ﹤λ1ֱ赲 +``` + +** 2**Ż㱻ռޱõ +``` +T0: Bλ5λ8C3ȡ +T1: λ8 C4 ռãC3 ȵȴ +T2: C4 ķŻ߼ֹϣһֱռùλ8 +T3: C3 ޷ϵͳ +``` + +** 3**õ㱾ռ +``` +T0: õ9 ǸC1 õ +T1: C5 յǡǹλ9 +T2: C1 ޷õ㣬ʧ +``` + +### Ҫ + +Ҫһ**ܱع滮ϵͳ**ݣ + +#### A. ϵͳܹƣ15 ֣ + +**¹** + +1. **ϵͳܹͼ**佻ϵ + - Ͼ棨Obstacle Avoidance Engine + - ع滮ģ飨Task Rescheduling Module + - ͻConflict Detector + - ·ȨRight-of-Way Manager + +2. **ݽṹ**ڣ + - ʾ״̬תƣState Transitions + - 洢ͻϢConflict Information + - ¼ʷAvoidance History + +3. **˵ģְ**رǣ + - μͻ + - ѡϲԣ + - ξع滮 + +#### B. ʵ֣40 ֣ + +**ʵ´**дܻϣ + +**B.1 ǿijͻ** 15֣ + +```csharp +/// +/// ǿijͻ +/// Ҫ³ +/// 1. ͬʱͬһλԴͻ +/// 2. ·棨ͨͻ +/// 3. õ㲻㣨ռͻ +/// 4. ȼͻ +/// +public class EnhancedConflictDetector +{ + // ʵ֣Դͻķ + public bool DetectResourceConflict(AbstractDelivery d, AbstractCar car, out AbstractCar[] blockingCars) + { + // TODO: ʵԴͻ + // ǷڳͻԼͻijб + blockingCars = null; + return false; + } + + // ʵ֣õ㲻ķ + public bool IsGiveWayAvailable(AbstractCar car, int targetSiteId, out int availableGiveWaySiteId) + { + // TODO: ʵּǷпñõ + // Ƿпõıõ㣬ԼõID + availableGiveWaySiteId = -1; + return false; + } + + // ʵ֣ȡͻȼ + public ConflictLevel GetConflictLevel(ConflictInfo conflict) + { + // TODO: ݳͻϢжس̶ + // سͻȼLowԼȴMediumҪãCriticalҪع滮 + return ConflictLevel.Low; + } + + // ݽṹ + public class ConflictInfo + { + public int DeliveryId { get; set; } + public int AssignedCarId { get; set; } + public int[] BlockingCarIds { get; set; } + public int ConflictSiteId { get; set; } // ͻĹλ + public DateTime DetectTime { get; set; } + public string Description { get; set; } + } + + public enum ConflictLevel + { + None = 0, + Low = 1, + Medium = 2, + Critical = 3, + Deadlock = 4 + } +} +``` + +**B.2 ع滮ģ** 15֣ + +```csharp +/// +/// ع滮ģ +/// ʵֱֶϺͻָ +/// +public class TaskReschedulingModule +{ + private AbstractChainedDeliveryMission _mission; + + public TaskReschedulingModule(AbstractChainedDeliveryMission mission) + { + _mission = mission; + } + + /// + /// ݳͻѡʵıϲ + /// + /// ȼ + /// 1. Ƽ񣨱赲ִ + /// 2. õУ赲ǰõ㣩 + /// 3. лǰɸ赲 + /// 4. ӳ٣ȴͻ + /// 5. ǿֹʱʹã + /// + public async Task ResolveConflict( + EnhancedConflictDetector.ConflictInfo conflict, + EnhancedConflictDetector.ConflictLevel level) + { + // TODO: ʵֳͻ߼ + // Ƿɹ + + switch (level) + { + case EnhancedConflictDetector.ConflictLevel.Low: + // ͼͻȴ + return await WaitForConflictResolution(conflict); + + case EnhancedConflictDetector.ConflictLevel.Medium: + // еȳͻƼ + if (await TryPushAwayTask(conflict)) + return true; + return await GoToGiveWay(conflict); + + case EnhancedConflictDetector.ConflictLevel.Critical: + // سͻع滮 + if (await TrySwitchCar(conflict)) + return true; + if (await TryRescheduleDelivery(conflict)) +return true; + return await GoToGiveWay(conflict); + + case EnhancedConflictDetector.ConflictLevel.Deadlock: + // ǿֹij + return ForceBreakDeadlock(conflict); + + default: + return false; + } + } + + /// + /// Ƽñ赲ִ + /// + /// + /// - 赲 + /// - ȼ̫ + /// - γ + /// + /// أǷɹƼ + /// + private async Task TryPushAwayTask(EnhancedConflictDetector.ConflictInfo conflict) + { + // TODO: ʵƼ߼ + return false; + } + + /// + /// ñ赲ǰõ + /// + /// + /// - õɴ + /// - õδռ + /// + /// أǷɹ + /// + private async Task GoToGiveWay(EnhancedConflictDetector.ConflictInfo conflict) + { + // TODO: ʵֱõ߼ + return false; + } + + /// + /// лͻɸ + /// + /// + /// - δȡ + /// - ó + /// + /// أǷɹ + /// + private async Task TrySwitchCar(EnhancedConflictDetector.ConflictInfo conflict) + { + // TODO: ʵֳл߼ + return false; + } + +/// + /// ¹滮 + /// + /// ˼· + /// - ֽΪ + /// - ִ˳ + /// - ȼ + /// + /// أǷɹ + /// + private async Task TryRescheduleDelivery(EnhancedConflictDetector.ConflictInfo conflict) + { + // TODO: ʵع滮߼ + return false; + } + + /// + /// ȴͻԶ + /// + /// + /// - 赲ȴʱ < ֵ + /// - 赲ƶ + /// + /// أǷɹ + /// + private async Task WaitForConflictResolution(EnhancedConflictDetector.ConflictInfo conflict) + { + // TODO: ʵֵȴ߼ + return false; +} + + /// + /// ǿֹijƻ + /// + /// ԣ + /// - ҵȼ͵ + /// - ȡ + /// - ͷеԴ + /// + /// أǷɹ + /// + private bool ForceBreakDeadlock(EnhancedConflictDetector.ConflictInfo conflict) + { + // TODO: ʵƻ߼ + return false; + } +} +``` + +**B.3 ӻָ** 10֣ + +```csharp +/// +/// MQTT ӻָ +/// ڵǰ MasterMQTTCommunication Ļǿ +/// +public class ResilientMQTTCommunication : MasterMQTTCommunication +{ + private DateTime _lastSuccessfulConnection = DateTime.Now; + private int _connectionFailureCount = 0; + private const int MAX_RETRY_COUNT = 5; +private const int RETRY_INTERVAL_SECONDS = 10; + + /// + /// Զ + /// ״̬ʱԶ + /// + public async Task EnableAutoReconnect() + { + // TODO: ʵԶ߼ + // 1. ״̬仯 + // 2. ʱָ˱ + // 3. ɹ󣬻ָ + // 4. ͬδ͵Ϣ + } + + /// + /// ־ûϢ +/// ӶϿʱδ͵Ϣ浽 + /// ָӺԶط + /// + public void EnableMessagePersistence(string persistDir) + { + // TODO: ʵϢ־û + // 1. Ϣļ + // 2. ӶϿʱϢ + // 3. ָʱȡط + // 4. ɹͺɾļ + } + + /// + /// + /// MQTT broker Ƿ + /// + public async Task StartHealthCheck(int intervalSeconds = 30) + { + // TODO: ʵֽ + // 1. ʱÿ intervalSeconds һ + // 2. δյӦ쳣 + // 3. + } +} +``` + +#### C. 20 ֣ + +**C.1 ** 10 ֣ + +ʵ˵ϵͳӦδ + +** Aȼ** +``` +ʱ ¼ ״̬ +T0 Aȼ=5 Waiting +T1 Bȼ=10 Waiting +T2 A C1 Fetching +T3 B õȴ Waiting +T4 C1 ȡ㣨4ӣ Blocked +T5 B ȴ 300 룬ִ 밲 + +⣺ʱӦʲô +A) ȴC1ɣ +B) C1ֹǰBִУ +C) B +D) + +˵ɣأ +- ƽԣڵȴ +- Чʣٳʱ䣩 +- һԣϵͳ״ֲ̬ܳһ£ +``` + +** B** +``` + [λ1] + + [C1](C2赲) + / \ + [1] [λ2] + + [C2](C3赲) + / \ + [2] [λ3] + +⣺C1C2C3 赲˭Ӧÿ + +α⣺ +- гܵõ㣬±õ +- ڱõ֮ر˷Դ +- γɱ޷ҵЧıõ +``` + +** Cͻϻָ** +``` +ʱߣ +T0 AGVͶ10ڵ㣩 +T1-T4 ǰ3ڵִгɹ +T5 MQTT ӶϿ +T6 ؼ⵽ߣ +T7 ɹAGVִе5ڵ +T8 Ӧͬ״̬ + +⣺ +1. ӦطDzֶ +2. δִеδȷϵĽڵ㣿 +3. ط½ڵظִô죿 +4. ȷһԣ +``` + +**ÿ·** +1. ʶϵͳ漰Ĺؼߵ +2. оٿܵĴ3 +3. ÿȱ +4. Ƽ + +--- + +**C.2 ɿԷ** 10 ֣ + +1. **ܷ** + - ϵͳ 100 ʱѭʱ临ӶǶ٣ + - ŻԼƽӦʱ䣿 + - ƼļǶ٣ + +2. **ɿԷ** + - ϵͳ̶ٸͻ + - μ + - ָĴʲô + +3. **չԷ** + - ӵ 100+ ʱϵͳչ + - MQTT broker ǷΪƿ + - ηֲʽ + +#### D. ԸĽ 10 ֣ + +** 2 ¸Ľ** + +1. **Ľ A** + - + - ˼· + - ˵ʵֲ + - ԤЧ + +2. **Ľ B** + - + - ˼· + - ˵ʵֲ + - ԤЧ + +**ο** +- ѧϰŻ +- ͼŻ·Ȩ +- ԤԱϣǰԤͻ +- ̬·߸ +- ܺŻ +- ĿŻ vs ܺ vs ƽԣ + +--- + +### ѡ 1MQTT ״̬ͬŻ + +**Ŀ** + +ǰ VDA5050Car ״̬ͬʽǣ +1. VDA5050Car ͨ `keepAlive()` ڵ `ProcessCacheAndSendOrderMessage()` +2. ͨ MQTT `stateMessage` +3. `UpdateState()` ղ±ػ + +****ַʽȱݣ +- ״̬ӳٿܴﵽ 100ms+keepAlive +- ٱ仯״̬ܱ +- Ϣ˳޷֤ + +**һĽ״̬ͬ** + +1. **ܹ**10 ֣ + - ʹ¼ģʽѯ + - ״̬汾ŷֹ״̬ + - ʵ״̬־ + +2. **ʵִ**20 ֣ +```csharp +/// +/// ¼״̬ +/// +public class EventDrivenStateManager +{ + private Queue _stateChangeHistory = new(); + private uint _stateVersion = 0; + + public event EventHandler OnStateChanged; + + public struct StateChangeEvent + { + public uint Version { get; set; } + public DateTime Timestamp { get; set; } +public string StateType { get; set; } + public object OldValue { get; set; } + public object NewValue { get; set; } + } + + // TODO: ʵ״̬汾 + // TODO: ʵ״̬֪ͨ + // TODO: ʵ״̬ʷѯ +} +``` + +3. ****10 ֣ + - »δϢ + - α״̬ը + - ʵֳɱǶ٣ + +--- + +### ѡ 2ϵͳ + +**Ŀ** + +ҪΪ VDA5050Car һ**Զϵͳ** + +**ϳ** +- MQTT ӶϿ +- űִгʱ +- Ӧ +- ·滮ʧ +- ״̬ + +**һϵͳ** + +1. **ϼ** 10 ֣ + - ָ꣨KPI + - ʵֹʶ㷨 + - Ƹ澯 + +2. **** 20 ֣ +```csharp +/// +/// ϵͳ +/// +public class VehicleSelfHealingSystem +{ + public enum FaultType + { + MQTTDisconnected, + ScriptTimeout, + VehicleUnresponsive, + PathPlanningFailed, + DeadLock + } + + public class FaultDiagnosis + { + public FaultType Type { get; set; } + public DateTime DetectTime { get; set; } + public string Description { get; set; } + public int Severity { get; set; } // 0-100 + } + + // TODO: ʵֹ + public FaultDiagnosis Diagnose(Car car) + { + // ״̬ʶ + return null; + } + + // TODO: ʵ + public async Task SelfHeal(FaultDiagnosis fault) + { + // ݹͣѡʵĻָ + return false; + } + + // TODO: ʵֹϻָ֤ + public bool VerifyHealing(FaultDiagnosis fault) + { + // ֤Ƿɹ + return false; + } +} +``` + +3. **** 10 ֣ + - MQTT Ϻͻָ + - űʱδ + - ʱϺùϣ + +--- + +### ѡ 3ĿŻ㷨 + +**Ŀ** + +ǰϵͳĵĿ굥һȣʵϣӪĶĿ꣺ + +| Ŀ | ˵ | Ȩ | +|-----|------|------| +| | /ʱ | 40% | +| ƽ | ȴʱ䷽ | 30% | +| ܺ | ʻ | 20% | +| ɿ | ͻ | 10% | + +**һĿŻ㷨** + +1. **㷨** 15 ֣ + - Ŀ꺯 + - ˵Ż̰/Ŵ/Ⱥȣ + - ֤㷨 + +2. **ʵִ** 15 ֣ +```csharp +/// +/// ĿŻ +/// +public class MultiObjectiveScheduler +{ + public struct ScheduleObjectives + { + public double Throughput { get; set; } // + public double Fairness { get; set; } // ƽԣ1- + public double EnergyEfficiency { get; set; } // ܺЧ + public double Reliability { get; set; } // ɿ + } + + // TODO: ʵֶĿֺ + public double CalculateScore(ScheduleObjectives obj, Dictionary weights) + { + // Ȩؼۺ + return 0; + } + + // TODO: ʵǰ + public List FindParetoOptimalSchedule( + List candidates) + { + // ҵǰϵŵȷ + return null; + } +} +``` + +3. **Ȩ** 10 ֣ + - ΪʲôͬʱĿꣿ + - ЩĿ֮ҵƽ⣿ + - ӪӦѡȨأ + +--- + +## ֱ׼ + +### A. ϵͳܹ15 ֣ + +| | ׼ | +|-----|-----| +| 15 | ֺܹȷ֧չ | +| 12 | ܹ󲿷ȷطǷ | +| 9 | ܹ˼·ȷϸڲƣȱijЩҪ | +| 6 | ܹУƴֲڣҪϸȱʧ | +| 0 | ûмܹȫ | + +### B. ʵ֣40 ֣ + +| | ׼ | +|-----|-----| +| 40 | У߼쳣ƣ | +| 32 | ߼ȷ߽δ | +| 24 | ȷ߼ʵ֣ȱŻ | +| 16 | ṹʵֲȱ | +| 8 | ܿɼʵֺܲ | +| 0 | ûдȫ޷ | + +### C. 20 ֣ + +| | ׼ | +|-----|-----| +| 20 | ȫ룬ȫǿ֤ | +| 16 | ȫ棬Ǵ󲿷أ | +| 12 | ȣȫ棬ijЩǷ | +| 8 | ȱ˼һ | +| 4 | dzDz㣬 | +| 0 | ûзȫ | + +### D. ԣ10 ֣ + +| | ׼ | +|-----|-----| +| 10 | ĸĽӱѶȸߣӦüֵ | +| 8 | £һѶȣʵԽϺ | +| 6 | £ʵһ | +| 4 | Уȱ | +| 2 | ƽûд | +| 0 | ûзȫ޴ | + +--- + +## ⽨ + +### ʱ + +``` +ʱ䣺90 + +1. (5 ) +2. A. ܹ (15 ) +3. B. ʵ (40 ) + - B.1 ͻ (12 ) + - B.2 ع滮 (15 ) + - B.3 ӻָ (13 ) +4. C. (20 ) +5. D. ԸĽ (10 ) +``` + +### + +1. ****ֵߣ85 ֣ +2. **ܣϸ**ƣٲʵ +3. **ʾʵ**ؼα bug Ĵ +4. **ͼͱ**ܹͼ״̬ʱߵڱ +5. **֤**˵"Ϊʲô"""Ҫ + +### + +? **** +- ֻд벻 +- ڹעϸڣܹ +- ûпϵͳеIJͬ +- ӱ߽͹ϴ +- ȫհд룬ûд + +? **ȷ** +- ˼ +- ϵͳƺȨ +- ֿDzϡչ +- оٸ +- Ͻд¸Ľ + +--- + +## οԴ + +### ۻ + +- ֲʽϵͳ Kleppmann +- ܼӦá Kleppmann +- ĿŻ +- ״̬ģʽ +- ¼ܹ + +### ؼ + +- MQTT Э +- C# 첽 +- ̰߳ȫͬ +- ͼ㷨·ϣ +- 㷨EDFLLF ȣ + +### Ŀ + +- `VDA5050Car.cs` ʵֲο +- `AbstractChainedDeliveryMission.cs` Ȳο +- `Commons.cs` ߷ο +- `MasterMQTTCommunication.cs` ͨŲο + +--- + +**ף˳** ?? + +ʣο `DEVELOPMENT_GUIDE.md` ָĵ + +--- + +**Ŀ汾**1.0 +**Ѷȵȼ** +**Ԥʱ**90 + diff --git a/DEFENSE_REFERENCE.md b/DEFENSE_REFERENCE.md new file mode 100644 index 0000000..2303f20 --- /dev/null +++ b/DEFENSE_REFERENCE.md @@ -0,0 +1,1159 @@ +# StandardScene ۺ - ο + +**ĵṩǴ˼·ָDZ׼𰸡ڴ˿ܽ˼ʹ¡** + +--- + +## ο + +### A. ϵͳܹƲο + +#### A.1 뽻 + +**ļܹͼ** + +``` + + ͻ㣨Conflict Management + + + ͻ ͻ + (Detector) (Classifier) + Щ Щ + + Щ + + + ѡ + (Strategy Selector) + Щ + +੤ + ִв㣨Strategy Execution + + ةЩ + + Ƽ л ӳ ֹ + +(Push) (GiveWay) (Switch) (Wait) (Abort) + + + Ȳ㣨Task Scheduling + + + ȼ + (TaskQueue) (PriorityMgr) + + + + / ͨŲ㩦 + (VDA5050Car / MasterMQTTCommunication) + + +``` + +#### A.2 ݽṹƲο + +**ؼݽṹ** + +```csharp +// 1. ͻϢ +public class ConflictInfo +{ + public int ConflictId { get; set; } + public int DeliveryId { get; set; } + public int AssignedCarId { get; set; } + public int[] BlockingCarIds { get; set; } + public int ConflictSiteId { get; set; } + public ConflictType Type { get; set; }// Դͻ/·ͻ/ռͻ + public DateTime DetectTime { get; set; } + public int WaitTime { get; set; } + public string Description { get; set; } +} + +// 2. ʷ +public class AvoidanceHistory +{ + public int HistoryId { get; set; } + public int CarId { get; set; } + public int DeliveryId { get; set; } + public AvoidanceStrategy Strategy { get; set; } + public DateTime ExecuteTime { get; set; } + public bool IsSuccessful { get; set; } + public int CostDistance { get; set; } // ʻ + public int CostTime { get; set; } // ʱ룩 +} + +// 3. ״̬ת +public class VehicleStateTransition +{ + public int CarId { get; set; } + public VehicleState FromState { get; set; } + public VehicleState ToState { get; set; } + public string Reason { get; set; } + public DateTime Timestamp { get; set; } +} + +public enum VehicleState +{ + Idle, // + Fetching, // ȡ + Transporting, // + Putting, // Ż + AvoidingObstacle, // + GoingToGiveWay, // ǰõ + StandbyAtGiveWay, // ڱõ + WaitingForTask, // ȴ + Charging, // + Faulty // +} + +// 4. ·Ȩ +public class RightOfWayAllocation +{ + public int AllocationId { get; set; } + public int PrimaryCarId { get; set; } // ·Ȩij + public int[] SecondaryCarIds { get; set; } // ·ij + public int ResourceSiteId { get; set; } // Դ + public DateTime AllocateTime { get; set; } + public int DurationSeconds { get; set; } +} +``` + +--- + +### B. ʵֲο˼· + +#### B.1 ͻοʵ + +**˼·** + +```csharp +public bool DetectResourceConflict(AbstractDelivery d, AbstractCar car, out AbstractCar[] blockingCars) +{ + blockingCars = null; + var conflictSite = d.src; // ͻȡ + + // 1. + var otherCars = SimpleLib.GetAllCars().OfType() + .Where(c => c.id != car.id) + .ToArray(); + + // 2. ǷгҪڳͻλ + var blocking = new List(); + foreach (var otherCar in otherCars) + { + // Ŀ깤λǷͬ + if (otherCar.tags.TryGetValue("dest", out var destStr) && + int.TryParse(destStr, out var destId) && + destId == conflictSite) + { + blocking.Add(otherCar); + } + + // 鵱ǰλǷdzͻλ + if (otherCar.siteID == conflictSite) + { + blocking.Add(otherCar); + } + + // Ƿǰͻλ· + var plan = new SegmentPlan { usingCar = otherCar }; + try + { + // 滮·ͻλҲͻ + if (plan.segments?.Any(seg => seg.id == conflictSite) == true) + { + blocking.Add(otherCar); + } + } + catch { } + } + + if (blocking.Count > 0) + { + blockingCars = blocking.ToArray(); + return true; + } + + return false; +} + +public bool IsGiveWayAvailable(AbstractCar car, int targetSiteId, out int availableGiveWaySiteId) +{ + availableGiveWaySiteId = -1; + + // 1. ҵбõ + var giveWaySites = SimpleLib.GetAllSites() + .Where(s => s.fields.ContainsKey("giveWay") && + s.fields["giveWay"] == "true") + .ToArray(); + + if (giveWaySites.Length == 0) + return false; + + // 2. Щõǿɴδռõ + foreach (var giveWaySite in giveWaySites) + { + // õǷռ + var isOccupied = SimpleLib.GetAllCars().OfType() + .Any(c => c.siteID == giveWaySite.id); + + if (isOccupied) + continue; + + // Ƿɴ +var plan = new SegmentPlan { usingCar = car }; + try + { + var currentSite = car.GetLastSite(); + if (currentSite == -1) + continue; + + plan.FindRoute( + SimpleLib.GetSite(currentSite), + giveWaySite); + + availableGiveWaySiteId = giveWaySite.id; + return true; + } + catch + { + // õ㲻ɴһ + continue; + } + } + + return false; +} + +public ConflictLevel GetConflictLevel(ConflictInfo conflict) +{ + // 1. ݵȴʱ + var waitSeconds = (DateTime.Now - conflict.DetectTime).TotalSeconds; + if (waitSeconds > 300) // ȴ5 +return ConflictLevel.Critical; + + // 2. ݳͻͺس̶ + switch (conflict.Type) + { + case ConflictType.ResourceConflict: + if (conflict.BlockingCarIds.Length > 2) + return ConflictLevel.Critical; +else + return ConflictLevel.Medium; + + case ConflictType.PathConflict: + return ConflictLevel.Medium; + + case ConflictType.SpaceConflict: + // ûпñõ + return ConflictLevel.Critical; + + default: + return ConflictLevel.Low; + } +} +``` + +#### B.2 ع滮ο˼· + +**ѡ߼** + +```csharp +public async Task ResolveConflict( + EnhancedConflictDetector.ConflictInfo conflict, + EnhancedConflictDetector.ConflictLevel level) +{ + switch (level) + { + case ConflictLevel.Low: +// ͼͻֻȴͨԶ + return await WaitForConflictResolution(conflict); + + case ConflictLevel.Medium: + // еȳͻƼ + if (await TryPushAwayTask(conflict)) + { + Diagnosis.Post($"ͻ{conflict.ConflictId}ͨƼ", "conflict", true); + return true; + } + + if (await GoToGiveWay(conflict)) + { + Diagnosis.Post($"ͻ{conflict.ConflictId}ͨõ", "conflict", true); + return true; + } + + // ҲʧܣΪسͻ + return false; + + case ConflictLevel.Critical: + // سͻԳлع滮 + if (await TrySwitchCar(conflict)) + { + Diagnosis.Post($"ͻ{conflict.ConflictId}ͨл", "conflict", true); + return true; + } + + if (await TryRescheduleDelivery(conflict)) + { + Diagnosis.Post($"ͻ{conflict.ConflictId}ͨع滮", "conflict", true); + return true; + } + + if (await GoToGiveWay(conflict)) + { +Diagnosis.Post($"ͻ{conflict.ConflictId}ͨõ", "conflict", true); + return true; + } + + return false; + + case ConflictLevel.Deadlock: + // ǿֹij + if (ForceBreakDeadlock(conflict)) + { + Diagnosis.Post($"⵽ǿֹ", "deadlock", true); + return true; + } + + return false; + } + + return false; +} + +private async Task TryPushAwayTask(ConflictInfo conflict) +{ + var blockingCar = SimpleLib.GetCar(conflict.BlockingCarIds[0]) as Car; + var delivery = _mission.GetDeliveries().FirstOrDefault(d => d.id == conflict.DeliveryId); + + if (blockingCar == null || delivery == null) + return false; + + // 1. Ѱ + var alternativeTasks = _mission.GetDeliveries() + .Where(d => d.usingCar == null && // δ + d.GetStatus() == DeliveryStatus.Waiting && // ȴ + d.priority >= delivery.priority * 0.8) // ȼ + .ToArray(); + + if (alternativeTasks.Length == 0) + return false; + + // 2. Ϳɴ + var bestTask = alternativeTasks[0]; + float bestDistance = float.MaxValue; + + foreach (var task in alternativeTasks) + { + try + { + var plan = new SegmentPlan { usingCar = blockingCar }; + var currentSite = blockingCar.GetLastSite(); + if (currentSite == -1) + continue; + + var distance = plan.FindRoute( + SimpleLib.GetSite(currentSite), + SimpleLib.GetSite(task.src)); + + if (distance < bestDistance) + { + bestDistance = distance; + bestTask = task; + } + } + catch + { + continue; + } + } + + // 3. ֵڣ + if (bestDistance <= 10000) // 10000 Ƽֵ + { + bestTask.usingCar = blockingCar; + return true; + } + + return false; +} + +private async Task GoToGiveWay(ConflictInfo conflict) +{ + var car = SimpleLib.GetCar(conflict.AssignedCarId) as Car; + if (car == null) + return false; + + // 1. Ƿпñõ + if (!_detector.IsGiveWayAvailable(car, conflict.ConflictSiteId, out var giveWaySiteId)) + return false; + + // 2. 滮·õ + try + { + var plan = new SegmentPlan { usingCar = car }; + var currentSite = car.GetLastSite(); + if (currentSite == -1) + return false; + + plan.FindRoute( + SimpleLib.GetSite(currentSite), + SimpleLib.GetSite(giveWaySiteId)); + + // 3. ³ǩ״̬ + car.tags.Add("redirect", conflict.DeliveryId.ToString()); + car.tags.Add("dest", giveWaySiteId.ToString()); + + // 4. 벢ִ + var program = plan.Compile($"GiveWay_{giveWaySiteId}"); + await program.Queue(); + + car.siteID = giveWaySiteId; + return true; + } + catch (Exception ex) + { + Diagnosis.Log($"ǰõʧ: {ex.Message}", "error", true); + return false; + } +} + +private async Task TrySwitchCar(ConflictInfo conflict) +{ + var delivery = _mission.GetDeliveries().FirstOrDefault(d => d.id == conflict.DeliveryId); + if (delivery == null || delivery.skipFetch) // ȡл + return false; + + // 1. ҵó + var availableCars = SimpleLib.GetAllCars().OfType() + .Where(c => Commons.SelectCar(c) >= 0) // + .ToArray(); + + if (availableCars.Length == 0) + return false; + + // 2. ѡij + float bestDistance = float.MaxValue; + Car bestCar = null; + + foreach (var car in availableCars) + { + try + { + var plan = new SegmentPlan { usingCar = car }; +var distance = plan.FindRoute( + SimpleLib.GetSite(car.GetLastSite()), + SimpleLib.GetSite(delivery.src)); + + if (distance < bestDistance) + { + bestDistance = distance; + bestCar = car; + } + } + catch { } + } + + if (bestCar != null) + { + delivery.usingCar = bestCar; + + var oldCar = SimpleLib.GetCar(conflict.AssignedCarId) as Car; + if (oldCar != null) + { + oldCar.tags.Remove("occupied"); + oldCar.tags.Remove("deliver"); + } + + return true; + } + + return false; +} + +private bool ForceBreakDeadlock(ConflictInfo conflict) +{ + // 1. ҵȼ͵ + var deliveries = _mission.GetDeliveries().Where(d => d.IsActive()).ToArray(); + if (deliveries.Length == 0) + return false; + + var lowestPriorityDelivery = deliveries.OrderBy(d => d.priority).First(); + + // 2. ֹ + if (lowestPriorityDelivery.Cancel()) + { + Diagnosis.Log($"ֹ{lowestPriorityDelivery.id}ƻ", "deadlock", true); + + // 3. ͷŸռõԴ + if (lowestPriorityDelivery.usingCar != null) + { + lowestPriorityDelivery.usingCar.tags.Clear(); + lowestPriorityDelivery.usingCar.tags.Add("idle", DateTime.Now.ToString()); + } + + return true; + } + + return false; +} +``` + +#### B.3 ӻָο˼· + +```csharp +public class ResilientMQTTCommunication : MasterMQTTCommunication +{ + private DateTime _lastSuccessfulConnection = DateTime.Now; + private int _connectionFailureCount = 0; + private const int MAX_RETRY_COUNT = 5; + private const int RETRY_INTERVAL_SECONDS = 10; + private Queue<(string Topic, string Payload, DateTime Timestamp)> _pendingMessages = new(); + private CancellationTokenSource _healthCheckCts; + + public async Task EnableAutoReconnect() + { + try + { + // 1. ״̬仯 +_client.ConnectedAsync += async e => + { + _connectionFailureCount = 0; + _lastSuccessfulConnection = DateTime.Now; + Diagnosis.Post("MQTT ѽ", "mqtt", true); + + // 2. ɹ󣬻ָ + SubsribeToConnectionTopic(); + SubscribeToState(); + SubscribeToVisualization(); + + // 3. ʹϢ + await FlushPendingMessages(); + + return; + }; + + _client.DisconnectedAsync += async e => + { + Diagnosis.Post($"MQTT ӶϿ", "mqtt", true); + _connectionFailureCount += 1; + + // 4. ָ˱ + if (_connectionFailureCount <= MAX_RETRY_COUNT) + { + var backoffSeconds = (int)Math.Min( + RETRY_INTERVAL_SECONDS * Math.Pow(2, _connectionFailureCount - 1), + 300// ȴ5 + ); + + Diagnosis.Post( + $" {backoffSeconds} ( {_connectionFailureCount} )...", + "mqtt", + true); + + await Task.Delay(backoffSeconds * 1000); + await RestartClient(); + } + else + { + Diagnosis.Post("ʧܴ࣬ MQTT broker", "mqtt", true); + } + + return; + }; + } + catch (Exception ex) + { + Diagnosis.Log($"Զʧ: {ex.Message}", "error", true); + } + } + + private async Task FlushPendingMessages() + { + while (_pendingMessages.Count > 0) + { +var (topic, payload, timestamp) = _pendingMessages.Dequeue(); + + // ϢǷڣ5ӣ + if ((DateTime.Now - timestamp).TotalSeconds > 300) + { + Diagnosis.Log($"Ϣѹڣɾ: {topic}", "mqtt", true); + continue; + } + + try + { + await PublishTo(payload); + Diagnosis.Log($"ѲϢ {topic}", "mqtt", true); + } + catch (Exception ex) + { + Diagnosis.Log($"Ϣʧ: {ex.Message}", "error", true); + // ¼ + _pendingMessages.Enqueue((topic, payload, timestamp)); + break; + } + } + } + + public void EnableMessagePersistence(string persistDir) + { + if (!Directory.Exists(persistDir)) + Directory.CreateDirectory(persistDir); + + // 1. ӶϿʱϢ + var originalPublishTo = PublishTo; + PublishTo = async (payload) => + { + try + { + await originalPublishTo(payload); + } + catch + { + // 浽ļ + var fileName = Path.Combine( + persistDir, + $"message_{DateTime.Now:yyyyMMdd_HHmmss_fff}.json" + ); + File.WriteAllText(fileName, payload); + + _pendingMessages.Enqueue(("vda5050/order", payload, DateTime.Now)); + } + }; + + // 2. ʱȡϢ + var files = Directory.GetFiles(persistDir, "message_*.json"); + foreach (var file in files) + { + try + { + var payload = File.ReadAllText(file); + _pendingMessages.Enqueue(("vda5050/order", payload, File.GetCreationTime(file))); + } + catch { } + } + } + + public async Task StartHealthCheck(int intervalSeconds = 30) + { + _healthCheckCts = new CancellationTokenSource(); + + var healthCheckTask = new Task(async () => + { + while (!_healthCheckCts.Token.IsCancellationRequested) + { + try + { + if (!_client.IsConnected) + { + Diagnosis.Post("飺ѶϿ", "mqtt", true); + await RestartClient(); + } + else + { + // 5. һϢʱ + var timeSinceLastMessage = DateTime.Now - _lastSuccessfulConnection; +if (timeSinceLastMessage.TotalSeconds > intervalSeconds * 3) + { + Diagnosis.Post( + $"ʱδյϢ ({timeSinceLastMessage.TotalSeconds:0.0}s)", + "mqtt", + true); + + // ǵ + await RestartClient(); + } + } + + await Task.Delay(intervalSeconds * 1000, _healthCheckCts.Token); + } + catch (OperationCanceledException) + { + break; + } + catch (Exception ex) + { + Diagnosis.Log($"쳣: {ex.Message}", "error", true); + } + } + }); + + healthCheckTask.Start(); + } +} +``` + +--- + +### C. ο + +#### C.1 Aȼ - ο + +| | ˵ | ŵ | ȱ | Ƽ | +|-----|------|-----|-----|--------| +| **Aȴ** | C1ɵǰ | 򵥣ıϵͳ״̬ | ΥƽԭBԶ޷ִ | ? Ƽ | +| **BֹC1** | ȡC1ͷԴ | ִй | ͶĹ˷ԴC1 | ?? ʹ | +| **C** | Bó | ֤ | ҪпóЧ | ? ѡ | +| **DƼ** | ̬ȼ + ȴ | ƽҸЧ | ʵָ | ? | + +**Ƽ𰸿** + +``` + +- AִУͶԴ +- Bȴֵȼ +- ϵͳ״̬C1赲 + +ŷ̬ȼ + ȴ + +ʵֲ裺 +1. ȴʱ +2. ȴ 300 ʱԶȼ +3. ǰԤʱ +4. A ʣʱ > B ȴʱ䣬ֹ A +5. ִ AͬʱԷ B + +α룺 +if (B.waitTime > threshold && B.priority_upgraded) +{ + if (A.remaining_time > B.accumulated_wait_time) + { + // ֹ Aִ B + A.Cancel(); + // B + } + else + { + // AΪ B + if (FindAvailableCar(B)) + AssignCar(B); + } +} + +ŵ㣺 +? ֤ƽԣ񲻻ڵȴ +? ϵͳЧʣɸȼ +? С˷ѣֻڱҪʱֹ + +ȱ㣺 +? ֹᵼȡҪŻ +? γӶ + +ۣ +ǹƽԺЧʵƽ⡣á +``` + +#### C.2 B - ο + +**** + +``` + + + ੤ + + õԴ˷ + (Space) (Time/Energy) (Deadlock) + + + ô죿 ô죿 ô죿 +``` + +**ο𰸿** + +``` +1õ + +ԭгӿõ + + +1. ӱõ滮Ż +2. ֲʽãóõͬ +3. õԤԼƣǰõԴ +4. ༶ãʱõ ׼õ㣩 + +ʵ֣ +- õΪ"A""B" +- ݳͻλö̬õ +- õ㼴Ƽ + +ܣ +class DistributedGiveWayStrategy +{ + public Site SelectGiveWay(Car car, int conflictSite) + { + var candidateSites = GetGiveWaySitesByRegion(conflictSite); + + // ѡδռõıõ + return candidateSites + .Where(s => !IsOccupied(s)) + .OrderBy(s => Distance(car, s)) + .FirstOrDefault(); + } +} + +2Դ˷ + +ԭ򣺳ڱõ֮ر + + +1. ·һѡõ㣬ٸı䣩 +2. бãͬʱӲͬã +3. õȴڱõȴ +4. ܺԤ⣨Ԥóɱѡͳɱ + +ʵ֣ +- Ϊÿòɱ+ʱ+ܺģ +- ѡɱ͵ķ +- ظͬһ + +ܣ +class EfficientAvoidanceCalculator +{ + public double CalculateAvoidanceCost(Car car, Site target) + { + var distance = GetDistance(car, target); + var time = distance / car.speed; + var energy = distance * car.powerConsumption; + + return distance * 0.5 + time * 0.3 + energy * 0.2; // Ȩ + } +} + +3 + +ԭC11C2赲2C3赲1 + + +1. ·Ψһԣظͬһõ +2. óʱòʱǿֹѡ +3. ·֤滮ǰ·Ƿγѭ +4. ԴԤԼԤ· + +ʵ֣ +class DeadlockFreeAvoidance +{ + private Set visitedSites = new(); // ѷʵıõ + + public Site SelectGiveWay(Car car, int conflictSite) + { + var candidates = GetGiveWaySites() + .Where(s => !visitedSites.Contains(s.id)) // ظ + .ToArray(); + + if (candidates.Length == 0) + { + // бõ㶼ʹ˵γ + return BreakDeadlock(car, conflictSite); + } + + var selected = SelectBestSite(candidates); + visitedSites.Add(selected.id); + return selected; + } +} + +ۺϽ + +1. ֲʽõ + 2. ɱŻ + 3. + 4. Զֹ + +̣ + ͻ + + ѡõ + 䣨ɢѹ + ɱŻԴ + գԤ⣩ + + ͱָ + óʱֹڵȴ + + رù + ɹ + ʱ Ƽ + ǿֹ +``` + +--- + +### D. ԸĽο + +#### Ľ 1ѧϰŻ + +``` +⣺㷨ڼ򵥵ľŻǣ +- ʷִгɹ +- ܲ +- λķæ̶ +- ʱеĹ + +˼· +1. ʹǿѧϰQ-Learning +- ״̬λáС״̬ + - ѡij+ij + - ٶȡͻܺЧ + +2. ռ¼ÿִʷ + - ָɳ + - ִʱ + - Ƿͻ + - ճɹ/ʧ + +3. ģѵѵģӦ仯 + - ÿСʱѵһ + - һݽ + +ԤЧ +? 5-10% +? ƽȴʱ 15% +? ͻʽ 20% + +ʵָӶȣ +``` + +#### Ľ 2ԤԱ + +``` +⣺ϵͳǷӦʽⷢŴ + +˼· +1. ·ͻԤ + - ڹ滮·ʱԤδ30ڵгλ + - DZڳͻǰ· + +2. ȼԤ + - ݹλæ̶ȣԤЩܶ + - ǰЩȼ + +3. õԤ + - Ԥ30жٳҪ + - ǰͷűõԴ + +ܣ +class PredictiveAvoidanceSystem +{ + public bool PredictConflict(SegmentPlan plan, int lookAheadSeconds = 30) + { + // 1. ȡ滮· + var path = plan.segments; + + // 2. Ԥ⳵δλ + var futurePositions = new Dictionary(); + foreach (var car in GetAllCars()) + { + var predictedSite = PredictCarPosition(car, lookAheadSeconds); + futurePositions[car.id] = predictedSite; + } + + // 3. 滮·ǷԤλóͻ + foreach (var segment in path) + { + if (futurePositions.Values.Any(s => s.id == segment.id)) + { + return true; // DZڳͻ + } + } + + return false; + } + + private Site PredictCarPosition(Car car, int seconds) + { + // ڳٶȺĿ꣬Ԥλ + var currentSpeed = car.speed; + var distanceTraveled = currentSpeed * seconds; + + // Ԥ⣺ŵǰ·߼ǰ + var pendingLocks = car.status.pendingLocks; + if (pendingLocks.Length == 0) + return SimpleLib.GetSite(car.siteID); + + // ĸλ + // ... + return pendingLocks.Last(); + } +} + +ԤЧ +? ͻǰ30 +? ϳɹʴ 95% 99% +? ϵͳӦ + +ʵָӶȣ +``` + +#### Ľ 3ĿŻ + +``` +⣺ϵͳֻŻ룬ܺġƽԵ + +˼·ʹţPareto Optimality + +class MultiObjectiveOptimizer +{ + public List FindParetoFrontier( + List tasks, + Dictionary weights) + { + var paretoFront = new List(); + + // 1. öпܵķ䷽ + var allAssignments = GenerateAllAssignments(tasks); + + // 2. ÿĶĿ + foreach (var assignment in allAssignments) + { + var evaluation = Evaluate(assignment); + + // 3. Ƿз֧ + var isDominated = paretoFront.Any(existing => + existing.throughput >= evaluation.throughput && + existing.fairness >= evaluation.fairness && + existing.energyEfficiency >= evaluation.energyEfficiency && + existing.reliability >= evaluation.reliability + ); + + if (!isDominated) +{ + paretoFront.Add(assignment); + } + } + + // 4. Ȩѡշ + return paretoFront + .OrderByDescending(a => CalculateWeightedScore(a, weights)) + .ToList(); + } +} + +ԤЧ +? ֶ֧ӪĿ +? ߾ߵ͸ԺͿɿ +? ϵͳ + +ʵָӶȣ +``` + +--- + +## Ľ + +### ? 1̰߳ȫ + +**ʾ** +```csharp +// 󣺾̬ +if (ConflictExists(d.src)) // +{ + AssignDelivery(d); // ڴڼܸ߳̿ı״̬ +} +``` + +**ȷ** +```csharp +lock (syncLock) +{ + if (ConflictExists(d.src)) + { + AssignDelivery(d); + } +} +``` + +### ? 2ûпǻع + +**ʾ** +```csharp +// 󣺷滮ʧܣع +delivery.usingCar = car; +try +{ + plan.FindRoute(...); +} +catch { } // 쳣ûδͷ +``` + +**ȷ** +```csharp +try +{ + plan.FindRoute(...); + delivery.usingCar = car; // ɹŷ +} +catch +{ + // 滮ʧܣ䳵 + delivery.usingCar = null; +} +``` + +### ? 3ѭ + +**ʾ** +```csharp +// 󣺿γѭ +while (ConflictExists(d.src)) +{ + TryAvoid(d); // Ͽʧܣһֱѭ +} +``` + +**ȷ** +```csharp +// Դ޺ͳʱ +int retries = 0; +var timeout = DateTime.Now.AddSeconds(300); + +while (ConflictExists(d.src) && retries < MAX_RETRIES && DateTime.Now < timeout) +{ + if (!TryAvoid(d)) + break; // ʧܣ˳ + retries++; +} + +if (ConflictExists(d.src)) +{ + // гԶʧܣֹ + BreakDeadlock(d); +} +``` + +--- + +## 嵥 + +ύǰ飺 + +- [ ] **ܹ** + - [ ] йؼ + - [ ] 佻 + - [ ] ֧չ + - [ ] + +- [ ] **ʵ** + - [ ] ķʵ֣ǽα룩 + - [ ] 쳣 + - [ ] ˲ȫ + - [ ] ʵ־ + - [ ] + +- [ ] **** + - [ ] о˶ + - [ ] ˷ȱ + - [ ] ȷƼ + - [ ] ʵԼ + +- [ ] **** + - [ ] 2Ľ + - [ ] Ľ + - [ ] ˵ԤЧ + - [ ] ʵֳɱ + +--- + +**ףɹ** ?? + diff --git a/DEVELOPMENT_GUIDE.md b/DEVELOPMENT_GUIDE.md new file mode 100644 index 0000000..33b7177 --- /dev/null +++ b/DEVELOPMENT_GUIDE.md @@ -0,0 +1,273 @@ +# StandardScene 开发指南 + +## 1. 项目定位 + +`StandardScene` 是一个由 `SimpleComposer.exe` 宿主加载的场景插件库,输出为 `StandardScene.dll`,不是独立 EXE。仓库主要面向 AGV/AMR 场内调度与联动控制,覆盖: + +- 搬运任务与环线任务 +- 区域流控与交通互锁 +- 充电策略与充电桩管理 +- 门禁联动与安全信号 +- HTTP / MQTT / Modbus 等外围接口 + +## 2. 技术与运行方式 + +| 项目项 | 说明 | +| --- | --- | +| 语言 | `C#` | +| 框架 | `.NET Framework 4.8` | +| 工程类型 | `Library` | +| 宿主 | `SimpleComposer.exe` | +| 关键入口 | `MissionType`、`CarType`、`WebApi.cs` | + +### 本机依赖 + +工程文件里可见以下固定依赖路径: + +- `D:\MDCS\Dependencies\Commons\CommonUsage.dll` +- `D:\MDCS\Dependencies\deps\LessokajiWeaverUtilities.dll` +- `D:\MDCS\Dependencies\Commons\MDCSToolBox.dll` +- `D:\MDCS\Dependencies\Simple\RefSimpleCore.dll` +- `D:\MDCS\Executables\Simple\SimpleComposer.exe` + +### 构建与运行 + +1. 打开 `StandardScene.sln` +2. 编译 `Debug|Any CPU` 或 `Release|Any CPU` +3. 编译后,构建事件会把 `StandardScene.dll` 复制到 `build\plugins` +4. 运行 `build\SimpleComposer.exe` + +## 3. 目录结构 + +| 路径 | 作用 | +| --- | --- | +| `CarTypes\` | 各车型与协议适配 | +| `Chained\` | 搬运任务、链式调度、环线任务 | +| `Charge\` | 充电策略、充电桩管理 | +| `ChargeStationType\` | 具体充电桩类型 | +| `InterLock\` | 区域互锁、交通控制 | +| `Scheduler\` | 心跳、安全、区域流控等后台 Mission | +| `ExtendDevice\Door\` | 门禁设备接入与联动 | +| `Model\` | 任务、配置、地图等数据模型 | +| `TCP\` / `Utils\` | TCP、JSON、Web API、Modbus 工具 | +| `Commons.cs` | 通用字段、标签、选车、路径辅助 | +| `WebApi.cs` | 对外 HTTP 接口 | + +## 4. 运行时架构 + +运行链路通常是: + +1. 宿主启动并扫描 `build\plugins` +2. 加载 `StandardScene.dll` +3. 通过特性反射识别 `MissionType` 与 `CarType` +4. 启动具体 Mission +5. Mission 调用 `SimpleLib`、`TrafficControl`、`SegmentPlan` 等核心能力 +6. 车辆状态、交通状态、充电状态在运行时持续联动 + +## 5. 核心模块理解 + +### `Scheduler` + +这是最适合入门的目录。 + +- `HeartBeatMission.cs`:最小线程式 Mission +- `RegionalTrafficControlMission.cs`:事件订阅型 Mission +- `SecuritySignalMission.cs`:安全信号类任务 + +### `Chained` + +主业务调度的核心区域。 + +- `AbstractChainedDeliveryMission.cs`:搬运任务总控 +- `TransportMission.cs`:常规运输 Mission +- `AbstractLoopMission.cs`:环线任务骨架 +- `LoopMission.cs`:环线业务实例 + +### `Charge` + +负责能量与充电协同。 + +- `AbstractChargeLogicMission.cs` +- `StandardChargeMission.cs` +- `ChargeStationDataService.cs` +- `ChargeStationManagementExample.cs` + +### `CarTypes` + +负责车型与协议适配。 + +- `VDA5050Car.cs` +- `Forklift.cs` +- `Kiva.cs` +- `MultiVehicleCar.cs` +- `MasterMQTTCommunication.cs` + +### `WebApi.cs` + +对外暴露 HTTP 能力,常见路由包括: + +- `/car/createTask` +- `/car/getAllCars` +- `/car/goSite` +- `/map/getMap` +- `/task/getTask` +- `/mission_reflection/get_mission_list` + +## 6. 配置文件 + +| 文件 | 作用 | +| --- | --- | +| `Config\traffic.json` | 交通互锁 / 区域配置 | +| `Config\ChargeStations.json` | 充电桩定义 | +| `Config\ChargeStrategyConfig.json` | 充电策略 | +| `Config\AlarmConfigs.json` | 报警配置 | +| `DoorConfig.json` | 门禁配置 | +| `tasklist.json` | 环线任务配置 | +| `simple.json` | 宿主基础配置 | + +除了 JSON 文件,本仓库还大量使用 `fields` 与 `tags` 作为轻量配置入口,尤其是站点与车辆行为控制。 + +## 7. 快速开始案例 + +### 案例 A:新增一个最小 Mission + +最推荐的新手入门案例,直接参考 `Scheduler\HeartBeatMission.cs`。 + +```csharp +using System.Threading; +using Newtonsoft.Json; +using SimpleComposer.RCS; +using SimpleCore; + +namespace StandardScene.Scheduler +{ + [MissionType(Name = "Hello Mission", editor = typeof(HelloMission))] + [I18N.DocumentTranslation(Name = "Hello Mission", locale = "en")] + public class HelloMission : Mission + { + [JsonIgnore] private bool _started; + [JsonIgnore] private Thread _thread; + + public static Mission Create() + { + return new HelloMission(); + } + + public override void Execute() + { + if (_started) return; + _started = true; + status.status = "已启动"; + + _thread = new Thread(() => + { + int count = 0; + while (_started) + { + Thread.Sleep(1000); + count++; + status.status = $"tick:{count}"; + } + }); + _thread.Start(); + } + + public void Stop() + { + _started = false; + status.status = "已停止"; + } + } +} +``` + +#### 关键提醒 + +当前工程是旧式 `.csproj`,新增 `.cs` 文件后必须确认文件已加入工程;否则文件存在但不会参与编译。必要时手工补: + +```xml + +``` + +#### 验证方式 + +1. 编译解决方案 +2. 打开 `build\SimpleComposer.exe` +3. 启动 `Hello Mission` +4. 观察 `status.status` 是否变成 `tick:1`、`tick:2` + +### 案例 B:配置区域流控 + +该案例对应 `Scheduler\RegionalTrafficControlMission.cs`。 + +给区域内站点添加字段: + +```text +Region1 = 1 +``` + +含义是: + +- 站点属于 `Region1` +- `Region1` 最多允许 1 台车进入 + +#### 实验步骤 + +1. 给同一区域内多个站点加上 `Region1=1` +2. 启动“区域流量监控” Mission +3. 让两台车先后进入该区域 +4. 观察第二台车是否被阻止 +5. 查看 Mission 状态中的区域统计与拦截次数 + +## 8. 开发工作流建议 + +1. 先判断功能属于 `Scheduler`、`Chained`、`Charge`、`CarTypes` 还是 `WebApi.cs` +2. 找最接近的现有类作为模板 +3. 明确配置入口是 JSON、`fields` 还是 `tags` +4. 补齐日志、状态与停止逻辑 +5. 确认文件已加入工程 +6. 编译后在宿主里验证是否能被识别 + +## 9. 调试建议 + +优先观察这些点: + +- `status.status` +- `Diagnosis.Post` / `Diagnosis.Log` +- `car.status.pendingLocks` +- `car.status.holdingLocks` +- 站点 / 车辆的 `fields` 与 `tags` +- `WebApi.cs` 中的实际路由 + +推荐调试方式: + +- 以 `build\SimpleComposer.exe` 作为外部程序启动调试 +- 或先运行宿主,再附加进程 + +## 10. 常见坑 + +### 新增 Mission 看不到 + +优先检查: + +- 是否加了 `MissionType` +- 是否有静态 `Create()` +- 是否复制到了 `build\plugins` +- 是否已经加入 `.csproj` + +### 区域流控不生效 + +优先检查: + +- 字段名是否以 `Region` 开头 +- 字段值是否能解析为整数 +- Mission 是否已启动 + +### 任务不执行 + +优先检查: + +- 车辆是否在线 +- 路径是否可达 +- 是否被互锁、流控或门控拦截 +- 是否已有标签将车辆标记为忙碌或充电中 \ No newline at end of file diff --git a/DocumentHub.html b/DocumentHub.html new file mode 100644 index 0000000..137ffce --- /dev/null +++ b/DocumentHub.html @@ -0,0 +1,879 @@ + + + + + + + StandardScene 文档中心 + + + +
+
+
+
+
SS
+
+

StandardScene Documentation Hub

+

本地可直接打开 · UTF-8 · 中文 / English / emoji ✅

+
+
+ +
+
+ +
+
工业紫文档门户 · Offline Ready · No Deploy Needed
+

StandardScene 开发指南与快速开始

+

+ 本页面已经把开发指南、模块地图、构建方式、快速开始案例和常见排错整合到一个 HTML 文件中。 + 你可以直接双击 `DocumentHub.html` 打开,无需部署、无需联网、无需额外资源。 +

+ +
+
+
.NET 4.8
+
工程目标框架
+
+
+
Plugin DLL
+
输出为 `StandardScene.dll`
+
+
+
Mission + CarType
+
两类核心扩展入口
+
+
+
中文 / EN / 😎
+
字体与编码已兼容
+
+
+ + +
+ +
+ + +
+
+

01. 项目总览

+

+ `StandardScene` 是 AGV/AMR 场景插件库,不是独立 EXE。它依赖宿主 `SimpleComposer.exe` 运行,能力覆盖搬运调度、环线任务、 + 交通互锁、区域流量控制、充电协同、门控联动,以及 HTTP / MQTT / Modbus 等外围接口。 +

+
+
+ 项目定位 + 作为宿主插件被加载,核心职责是“场景逻辑”而不是“独立应用”。 +
+
+ 最小理解单元 + `Mission` 负责场景流程,`CarType` 负责车型与协议。 +
+
+ 最先阅读文件 + `Scheduler/HeartBeatMission.cs`、`Scheduler/RegionalTrafficControlMission.cs` +
+
+
+ 输出类型:Library + 宿主:SimpleComposer.exe + 外部接口:Nancy / HTTP + 典型协议:MQTT / Modbus +
+
+ +
+

02. 运行架构

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
层级角色典型文件
宿主层启动程序、装载插件、展示配置与 Missionbuild/SimpleComposer.exe
场景逻辑层任务调度、区域流控、充电、门禁等Scheduler/Chained/Charge/
车辆协议层各车型接入与状态同步CarTypes/
基础能力层路径规划、锁点、全局对象访问SimpleCoreSimpleLib
+ +

宿主装载流程

+
    +
  1. 编译得到 StandardScene.dll
  2. +
  3. 构建事件将 DLL 复制到 build/plugins
  4. +
  5. 宿主启动后扫描插件目录
  6. +
  7. 通过特性反射识别 MissionTypeCarType
  8. +
  9. 用户或 API 启动对应场景逻辑
  10. +
+
+ +
+

03. 模块地图

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
目录职责建议起步文件
Scheduler/心跳、安全信号、区域流控等轻量 MissionHeartBeatMission.cs
Chained/搬运与环线任务主流程TransportMission.cs
Charge/充电站管理、策略控制、状态维护StandardChargeMission.cs
InterLock/区域互锁、交通控制TrafficInterlockMission.cs
CarTypes/车型与协议实现VDA5050Car.cs
ExtendDevice/Door/门禁联动DoorMission.cs
WebApi.cs外部系统接入入口/car/*/map/*/mission_reflection/*
+
+ +
+

04. 构建与运行

+

本机依赖路径

+
D:\MDCS\Dependencies\Commons\CommonUsage.dll
+D:\MDCS\Dependencies\deps\LessokajiWeaverUtilities.dll
+D:\MDCS\Dependencies\Commons\MDCSToolBox.dll
+D:\MDCS\Dependencies\Simple\RefSimpleCore.dll
+D:\MDCS\Executables\Simple\SimpleComposer.exe
+ +

构建步骤

+
    +
  1. 打开 StandardScene.sln
  2. +
  3. 编译 Debug|Any CPURelease|Any CPU
  4. +
  5. 确认构建事件已将插件复制到 build/plugins
  6. +
  7. 运行 build/SimpleComposer.exe
  8. +
+ +
+ 当前项目不是 SDK 风格工程。新增 `.cs` 文件后,必须确认它已经被加入 `.csproj`;否则文件存在但不会参与编译。 +
+
+ +
+

05. 快速开始案例

+ +

案例 A:新增 HelloMission

+

+ 这是推荐的新手第一练。它直接沿用 `Scheduler/HeartBeatMission.cs` 的结构,只保留最小生命周期:`Create()`、`Execute()`、`Stop()`。 +

+
using System.Threading;
+using Newtonsoft.Json;
+using SimpleComposer.RCS;
+using SimpleCore;
+
+namespace StandardScene.Scheduler
+{
+    [MissionType(Name = "Hello Mission", editor = typeof(HelloMission))]
+    [I18N.DocumentTranslation(Name = "Hello Mission", locale = "en")]
+    public class HelloMission : Mission
+    {
+        [JsonIgnore] private bool _started;
+        [JsonIgnore] private Thread _thread;
+
+        public static Mission Create()
+        {
+            return new HelloMission();
+        }
+
+        public override void Execute()
+        {
+            if (_started) return;
+            _started = true;
+            status.status = "已启动";
+
+            _thread = new Thread(() =>
+            {
+                int count = 0;
+                while (_started)
+                {
+                    Thread.Sleep(1000);
+                    count++;
+                    status.status = $"tick:{count}";
+                }
+            });
+            _thread.Start();
+        }
+
+        public void Stop()
+        {
+            _started = false;
+            status.status = "已停止";
+        }
+    }
+}
+
    +
  1. 新建 Scheduler/HelloMission.cs
  2. +
  3. 确认它已被加入工程
  4. +
  5. 编译并打开 build/SimpleComposer.exe
  6. +
  7. 启动后观察 status.status 是否按秒递增
  8. +
+ +

案例 B:区域流控实验

+

+ 该案例对应 Scheduler/RegionalTrafficControlMission.cs。给同一区域的站点加字段 Region1=1,即可限制该区域最多同时只有 1 台车。 +

+
Region1 = 1
+
    +
  1. 给目标区域内多个站点都加上相同的 Region1 字段
  2. +
  3. 启动“区域流量监控” Mission
  4. +
  5. 让两台车依次申请进入该区域
  6. +
  7. 观察第二台车是否被阻止,日志和状态里会记录拦截次数
  8. +
+
+ +
+

06. 配置文件

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
文件用途
Config/traffic.json交通互锁与区域控制
Config/ChargeStations.json充电桩定义
Config/ChargeStrategyConfig.json充电策略
Config/AlarmConfigs.json充电报警配置
DoorConfig.json门禁设备配置
tasklist.json环线任务列表
simple.json宿主基础配置
+

+ 除了 JSON 文件,很多逻辑还大量依赖站点、车辆和轨道的 fieldstags。例如区域流控依赖以 + Region 开头的字段,许多调度逻辑依赖 groupgiveWaystandby 等字段。 +

+
+ +
+

07. API 入口

+

WebApi.cs 是外部系统最重要的进入点,仓库中已可看到这些典型路由:

+
+
+ /car/createTask + 创建任务 +
+
+ /car/getAllCars + 查询车辆列表 +
+
+ /car/goSite + 指派车辆去站点 +
+
+ /map/getMap + 获取地图 +
+
+ /task/getTask + 查询任务 +
+
+ /mission_reflection/* + 反射调用 Mission 方法 +
+
+
+ +
+

08. 开发工作流

+
    +
  1. 先定位功能属于哪个目录
  2. +
  3. 找最接近的现有类作为模板
  4. +
  5. 明确它依赖 JSON 配置还是 `fields` / `tags`
  6. +
  7. 补齐日志、状态和停止逻辑
  8. +
  9. 确认新文件已加入工程
  10. +
  11. 编译后在宿主中验证是否被识别
  12. +
+
+ 新增 Mission:先看 HeartBeatMission + 新增区域逻辑:先看 RegionalTrafficControlMission + 新增接口:先看 WebApi.cs + 新增配置:先写默认值与生效时机 +
+
+ +
+

09. 常见排错

+ + + + + + + + + + + + + + + + + + + + + + + + + +
现象优先检查
新增 Mission 在宿主里看不到特性是否正确、`Create()` 是否存在、文件是否已加入 `.csproj`、插件是否复制到 `build/plugins`
区域流控不生效站点字段名是否以 `Region` 开头、字段值是否为整数、Mission 是否已启动
车不动或任务不走车辆在线状态、路径是否可达、是否被锁点 / 互锁 / 门控拦截
API 调不通路由是否正确、宿主端口是否打开、请求是否真的命中 `WebApi.cs`
+ +
+ 编码说明:本页使用 `UTF-8` 和兼容中文 / English / emoji 的字体栈,本地双击打开不依赖任何外部资源,因此不会因为部署或 CDN 缺失导致乱码。 +
+
+
+
+ +
+ StandardScene 文档门户 · 工业紫风格 · 可离线直接打开 · UTF-8 Safe +
+
+ + \ No newline at end of file diff --git a/INDEX.md b/INDEX.md new file mode 100644 index 0000000..ab1b464 --- /dev/null +++ b/INDEX.md @@ -0,0 +1,58 @@ +# StandardScene 文档导航 + +## 1. 文档入口 + +| 文档 | 适合谁 | 用途 | +| --- | --- | --- | +| `DocumentHub.html` | 所有人 | 单文件浏览入口,双击直接打开 | +| `README.md` | 第一次接触仓库的人 | 快速了解项目定位与运行方式 | +| `DEVELOPMENT_GUIDE.md` | 要开始开发的人 | 系统化理解架构、模块、配置、案例 | +| `QUICK_REFERENCE.md` | 正在写代码的人 | 快速查入口、路径、配置、排错点 | + +## 2. 推荐阅读路线 + +### 路线 A:第一次接触仓库 + +1. 打开 `DocumentHub.html` +2. 阅读 `README.md` +3. 阅读 `DEVELOPMENT_GUIDE.md` +4. 打开 `Scheduler\HeartBeatMission.cs` +5. 动手做 HelloMission 案例 + +### 路线 B:已经会跑工程,准备开发 + +1. 阅读 `QUICK_REFERENCE.md` +2. 根据目标定位目录 +3. 找最接近的参考类 +4. 写代码 +5. 回到 `DEVELOPMENT_GUIDE.md` 查配置与调试建议 + +### 路线 C:准备改真实业务逻辑 + +1. 先确认变更属于哪个模块 +2. 如果是调度,看 `Chained\` +3. 如果是联动控制,看 `Scheduler\` 或 `InterLock\` +4. 如果是设备或协议,看 `CarTypes\`、`Charge\`、`ExtendDevice\Door\` +5. 如果是外部系统接入,看 `WebApi.cs` + +## 3. 按目标查文件 + +| 目标 | 直接打开这些文件 | +| --- | --- | +| 了解插件怎么被宿主识别 | `Scheduler\HeartBeatMission.cs` | +| 做区域流量限制 | `Scheduler\RegionalTrafficControlMission.cs` | +| 做搬运调度 | `Chained\AbstractChainedDeliveryMission.cs`、`Chained\TransportMission.cs` | +| 做充电策略 | `Charge\AbstractChargeLogicMission.cs`、`Charge\StandardChargeMission.cs` | +| 查 API | `WebApi.cs` | +| 查通用工具 | `Commons.cs` | + +## 4. 本地打开 HTML 文档 + +直接双击 `DocumentHub.html` 即可,无需任何部署。页面已内嵌样式与脚本,并显式声明 `UTF-8` 编码。 + +## 5. 建议的第一个练习 + +1. 按 `DEVELOPMENT_GUIDE.md` 的案例 A 新建 `HelloMission` +2. 编译后打开 `build\SimpleComposer.exe` +3. 启动 Mission,确认状态每秒递增 +4. 再按案例 B 给站点添加 `Region1=1`,体验区域流控 \ No newline at end of file diff --git a/LooMission.md b/LooMission.md new file mode 100644 index 0000000..143181e --- /dev/null +++ b/LooMission.md @@ -0,0 +1,412 @@ +# AbstractLoopMission 抽象环线任务基类 + +## 概述 + +`AbstractLoopMission` 是环线任务的抽象基类,提供了完整的循环任务调度框架。它支持多种启动类型、任务类别、流量控制和优先级调度,是所有具体环线任务实现的基础。 + +## 核心特性 + +| 特性 | 说明 | + +|------|------| +| 多启动类型 | AutoLoop(自动循环)、Api、Plc、ButtonBox、Charge | +| 多任务类别 | Loop(普通循环)、BranchPoint(分流点)、JoinPoint(汇合点) | +| 流量控制 | 限制目标站点的最大车辆数 | +| 优先级调度 | 高优先级任务优先处理 | +| 配置热更新 | tasklist.json 文件变更自动刷新 | +| 路径缓存 | 避免重复计算路径,提升性能 | +| 条件触发 | 子类可重写事件回调,自定义触发条件 | + +## 类图 + +![alt text](image.png) + +## 快速开始 + +### 1. 配置任务列表 + +在 任务进程方法显示界面中配置任务或者在`tasklist.json` 中配置任务 +[ { "Id": 1, "Name": "主线循环", "CurrentStationId": 100, "TargetStationId": 200, "StartType": "AutoLoop", +"Kind": "Loop", "Priority": 10, "TrafficControl": 2, "IsViaPoint": true }, +{ "Id": 2, "Name": "分流点A", "CurrentStationId": 150, "TargetStationId": 201, "StartType": "AutoLoop", "Kind": "BranchPoint", "Priority": 8, "TrafficControl": 1 }, +{ "Id": 3, "Name": "汇合点B", "CurrentStationId": 180, "TargetStationId": 300, "StartType": "Plc", "Kind": "JoinPoint", "Priority": 5, "TrafficControl": 1 } ] + +### 2. 创建子类 + +public class MyLoopMission : AbstractLoopMission { protected override ExternalTriggerResult OnApiTrigger(int currentSiteId, LoopTask task, Car car) { // 业务逻辑判断 if (ShouldProcessTask(task, car)) { // 方式1:使用子类指定的目标站点 return ExternalTriggerResult.UseTarget(200); + // 方式2:使用配置文件中的目标站点 + // return ExternalTriggerResult.UseConfigTarget(); + } + // 业务失败,不分配任务 + return ExternalTriggerResult.Fail(); +} + +protected override ExternalTriggerResult OnPlcTrigger(int currentSiteId, LoopTask task, Car car) +{ + // PLC 信号触发逻辑 + if (CheckPlcSignal(currentSiteId)) + { + return ExternalTriggerResult.UseConfigTarget(); + } + return ExternalTriggerResult.Fail(); +} +} + +## 任务类别说明 + +### Loop(普通循环) + +车辆从当前站点移动到目标站点的简单任务。 +站点A ──────────────► 站点B + +### BranchPoint(分流点) + +一个站点可以分流到多个目标站点,按优先级和流量控制选择目标。 + ┌──► 目标站点1 (优先级高) +分流点 ────┼──► 目标站点2 └──► 目标站点3 (优先级低) + +### JoinPoint(汇合点) + +多个站点汇合到同一个目标站点,按优先级决定放行顺序。 +来源站点1 ──┐ 来源站点2 ──┼──► 汇合点 来源站点3 ──┘ + +## 流量控制 + +通过 `TrafficControl` 属性限制目标站点的最大车辆数: +// 检查流量控制 if (!CheckTrafficControl(targetSiteId, task.TrafficControl)) { // 目标站点流量已满,等待 continue; } + +- `TrafficControl = 0`:不限制 +- `TrafficControl = 1`:目标站点最多 1 辆车 +- `TrafficControl = N`:目标站点最多 N 辆车 + +统计范围包括: + +1. 已在目标站点的车辆(`holdingLocks` 包含该站点) +2. 正在前往目标站点的车辆(`pendingLocks` 最后一个为该站点) + +### 3. 启动任务 + +var mission = new MyLoopMission(); +// 启动所有线程(策略同步 + 业务逻辑) mission.StartAll(); +// 或者分别启动 // mission.StartLoop(); // 启动策略同步线程 // mission.StartLogicLoop(); // 启动业务逻辑线程 +// 停止任务 // mission.StopAll(); +// 释放资源 // mission.Dispose(); + +## 启动类型说明 + +| 类型 | 枚举值 | 说明 | 子类接口 | + +|------|--------|------|----------| +| AutoLoop | `TaskStartType.AutoLoop` | 自动循环,车辆到站自动触发 | 无需重写 | +| Api | `TaskStartType.Api` | API 外部调用触发 | `OnApiTrigger()` | +| Plc | `TaskStartType.Plc` | PLC 信号触发 | `OnPlcTrigger()` | +| ButtonBox | `TaskStartType.ButtonBox` | 按钮盒触发 | `OnButtonTrigger()` | +| Charge | `TaskStartType.Charge` | 充电条件触发 | `OnChargeTrigger()` | + +## 子类可重写事件回调 + +### 概述 + +`AbstractLoopMission` 提供了四个可重写的事件回调方法,子类可以通过重写这些方法实现自定义的触发条件逻辑。当车辆到达配置的当前站点时,系统会根据任务的 `StartType` 调用对应的回调方法。 + +### 回调方法签名 + +| 方法 | 触发条件 | 默认行为 | +|------|----------|----------| +| `OnApiTrigger(int currentSiteId, LoopTask task, Car car)` | StartType = Api | 返回 `Fail()` | +| `OnPlcTrigger(int currentSiteId, LoopTask task, Car car)` | StartType = Plc | 返回 `Fail()` | +| `OnButtonTrigger(int currentSiteId, LoopTask task, Car car)` | StartType = ButtonBox | 返回 `Fail()` | +| `OnChargeTrigger(int currentSiteId, LoopTask task, Car car)` | StartType = Charge | 返回 `Fail()` | + +### 回调参数说明 + +| 参数 | 类型 | 说明 | +|------|------|------| +| `currentSiteId` | `int` | 车辆当前所在站点ID | +| `task` | `LoopTask` | 匹配到的任务配置 | +| `car` | `Car` | 到达站点的车辆对象 | + +### 返回值说明 + +回调方法必须返回 `ExternalTriggerResult` 对象: + +| 返回方式 | 说明 | 使用场景 | +|----------|------|----------| +| `ExternalTriggerResult.UseTarget(siteId)` | 成功,使用子类指定的目标站点 | 需要动态计算目标站点时 | +| `ExternalTriggerResult.UseConfigTarget()` | 成功,使用配置文件中的目标站点 | 条件满足,使用预设目标时 | +| `ExternalTriggerResult.Fail()` | 失败,不分配任务 | 条件不满足,等待下次检查时 | + +### 使用示例 + +#### 示例1:API 触发 - 检查外部系统状态 + +public class ApiLoopMission : AbstractLoopMission { protected override ExternalTriggerResult OnApiTrigger(int currentSiteId, LoopTask task, Car car) { // 检查外部 API 是否允许发车 var apiResult = ExternalApiService.CheckCanDispatch(currentSiteId, car.id); + if (apiResult.Success) + { + // API 返回指定目标 + if (apiResult.TargetSiteId.HasValue) + { + return ExternalTriggerResult.UseTarget(apiResult.TargetSiteId.Value); + } + // 使用配置目标 + return ExternalTriggerResult.UseConfigTarget(); + } + // 条件不满足,等待 + return ExternalTriggerResult.Fail(); +} +} + +#### 示例2:PLC 触发 - 检查 PLC 信号状态 + +public class PlcLoopMission : AbstractLoopMission { protected override ExternalTriggerResult OnPlcTrigger(int currentSiteId, LoopTask task, Car car) { // 读取 PLC 信号 bool plcSignal = PlcManager.ReadBool($"Station{currentSiteId}.AllowDispatch"); + if (plcSignal) + { + // 根据 PLC 数据决定目标 + int plcTarget = PlcManager.ReadInt($"Station{currentSiteId}.TargetStation"); + if (plcTarget > 0) + { + return ExternalTriggerResult.UseTarget(plcTarget); + } + return ExternalTriggerResult.UseConfigTarget(); + } + return ExternalTriggerResult.Fail(); +} +} + +#### 示例3:按钮盒触发 - 检查按钮状态 + +public class ButtonBoxLoopMission : AbstractLoopMission { protected override ExternalTriggerResult OnButtonTrigger(int currentSiteId, LoopTask task, Car car) { // 检查按钮盒是否按下 var buttonBox = ButtonBoxManager.GetByStation(currentSiteId); + if (buttonBox != null && buttonBox.IsPressed) + { + // 重置按钮状态 + buttonBox.Reset(); + // 根据按钮类型选择目标 + switch (buttonBox.PressedButton) + { + case ButtonType.Green: + return ExternalTriggerResult.UseTarget(task.TargetStationId); + case ButtonType.Yellow: + return ExternalTriggerResult.UseTarget(GetAlternativeTarget(currentSiteId)); + default: + return ExternalTriggerResult.UseConfigTarget(); + } + } + + return ExternalTriggerResult.Fail(); +} +} + +#### 示例4:充电触发 - 检查电量条件 + +public class ChargeLoopMission : AbstractLoopMission { private const int LOW_BATTERY_THRESHOLD = 20; +protected override ExternalTriggerResult OnChargeTrigger(int currentSiteId, LoopTask task, Car car) +{ + // 获取车辆电量 + int batteryLevel = car.GetBatteryLevel(); + // 检查是否需要充电 + if (batteryLevel <= LOW_BATTERY_THRESHOLD) + { + // 查找最近的空闲充电站 + int chargeStation = FindNearestAvailableChargeStation(currentSiteId); + if (chargeStation > 0) + { + Diagnosis.Post($"车辆 {car.name} 电量 {batteryLevel}%,前往充电站 {chargeStation}", "Charge", true); + return ExternalTriggerResult.UseTarget(chargeStation); + } + } + // 电量充足或无可用充电站,不触发充电任务 + return ExternalTriggerResult.Fail(); +} + +private int FindNearestAvailableChargeStation(int currentSiteId) +{ + // 实现查找最近充电站逻辑 + return ChargeStationManager.FindNearest(currentSiteId); +} +} + +#### 示例5:组合条件触发 + +public class ComplexLoopMission : AbstractLoopMission { protected override ExternalTriggerResult OnApiTrigger(int currentSiteId, LoopTask task, Car car) { // 组合多个条件判断 + // 条件1:检查车辆是否携带货物 + bool hasLoad = car.tags.ContainsKey("hasLoad") && car.tags["hasLoad"] == "true"; + // 条件2:检查目标站点是否可用 + var targetSite = SimpleLib.GetSite(task.TargetStationId); + bool targetAvailable = targetSite != null && !targetSite.IsDisabled(); + // 条件3:检查时间窗口 + bool inTimeWindow = DateTime.Now.Hour >= 8 && DateTime.Now.Hour <= 20; + // 条件4:检查优先级车辆 + bool isPriorityCar = car.tags.ContainsKey("priority"); + + // 组合判断 + if (hasLoad && targetAvailable && (inTimeWindow || isPriorityCar)) + { + return ExternalTriggerResult.UseConfigTarget(); + } + + // 记录不满足条件的原因 + if (!hasLoad) Diagnosis.Post($"车辆 {car.name} 未携带货物", "ApiTrigger", true); + if (!targetAvailable) Diagnosis.Post($"目标站点 {task.TargetStationId} 不可用", "ApiTrigger", true); + if (!inTimeWindow && !isPriorityCar) Diagnosis.Post($"当前不在工作时间窗口", "ApiTrigger", true); + + return ExternalTriggerResult.Fail(); +} +} + +### 回调执行流程 + +车辆到达站点 │ ▼ 匹配任务配置 (CurrentStationId) │ +▼ 检查车辆可用性 (Commons.SelectCar) │ +▼ 根据 StartType 调用对应回调 │ ├ +─ AutoLoop ──► 自动处理,无需回调 +├─ Api ────────► OnApiTrigger() +├─ Plc ────────► OnPlcTrigger() +├─ ButtonBox ──► OnButtonTrigger() └─ Charge ─────► OnChargeTrigger() +│ ▼ 检查返回结果 │ ├─ Fail() ──────────► 跳过,等待下次检查 +│ └─ Success ─────────► 确定目标站点 │ +├─ CustomTargetSiteId 有值 ──► 使用子类指定目标 └─ CustomTargetSiteId 为空 ──► 使用配置文件目标 +│ ▼ 流量控制检查 │ ├─ 通过 ──► AssignCarToTarget() └─ 不通过 ──► 等待 + +### 汇合点回调执行流程 + +按目标站点分组 + │ + ▼ +遍历每个汇合点组 + │ + ▼ +组内任务按优先级降序排列 + │ + ▼ +遍历排序后的任务 + │ + ├─► 流量控制检查 ──► 不通过 ──► 跳过 + │ + ├─► 查找车辆 ──► 未找到 ──► 跳过 + │ + ├─► 检查车辆可用 ──► 不可用 ──► 跳过 + │ + ├─► 调用子类接口 ──► 返回失败 ──► 跳过 + │ + ├─► 确定最终目标(子类指定 > 配置) + │ + ├─► 子类指定不同目标时再次检查流量 + │ + └─► 分配目标站点 + +### 注意事项 + +## 外部触发结果 + +`ExternalTriggerResult` 用于子类返回触发处理结果: + +| 方法 | 说明 | +|------|------| +| `UseTarget(siteId)` | 使用子类指定的目标站点 | +| `UseConfigTarget()` | 使用配置文件中的目标站点 | +| `Fail()` | 业务失败,不分配任务 | + +protected override ExternalTriggerResult OnApiTrigger(int currentSiteId, LoopTask task, Car car) { +// 场景1:动态计算目标 int dynamicTarget = CalculateTarget(car); return ExternalTriggerResult.UseTarget(dynamicTarget); +// 场景2:使用配置目标 +return ExternalTriggerResult.UseConfigTarget(); + +// 场景3:条件不满足 +return ExternalTriggerResult.Fail(); +} + +1. **默认返回 Fail**:所有回调方法默认返回 `Fail()`,子类必须重写才能启用对应的触发功能。 + +2. **线程安全**:回调方法在业务逻辑线程中执行,访问共享资源时需注意线程安全。 + +3. **执行频率**:业务逻辑线程每 500ms 执行一次,回调方法应避免长时间阻塞。 + +4. **异常处理**:回调方法中的异常会被捕获并记录,不会影响其他任务的处理。 + +5. **流量控制**:即使回调返回成功,仍会进行流量控制检查,可能因流量已满而等待。 + +## 路径查找与任务匹配 + +### 路径查找 + +基于轨道连接的广度优先搜索,支持轨道方向: +// 获取两站点之间的路径 var path = GetSitesBetween(100, 200); // 返回: [100, 150, 180, 200] +// 检查路径上是否有车辆 bool hasCar = HasCarOnPath(100, 200, excludeCar); +// 获取路径长度 int length = GetPathLength(100, 200); + + +### 任务策略匹配 + +根据车辆当前位置匹配最优任务: +// 查找车辆的最优任务 var match = FindBestTaskForCar(car); +if (match != null) { Console.WriteLine($"任务ID: {match.TaskId}"); +Console.WriteLine($"目标站点: {match.TargetSiteId}"); +Console.WriteLine($"下一站点: {match.NextSiteId}"); +Console.WriteLine($"剩余距离: {match.DistanceToTarget}"); +Console.WriteLine($"进度: {match.ProgressPercent:F1}%"); } + +匹配优先级: + +1. 起点匹配优先 +2. 任务优先级高的优先 +3. 距离目标近的优先 + +> **注意**:如果站点是路径的终点,则不匹配该任务。 + +### TaskListChanged 事件 + +任务列表变更时触发: +mission.TaskListChanged += (sender, e) => +{ switch (e.ChangeType) { +case TaskChangeType.Added: Console.WriteLine($"添加任务: 索引={e.Index}"); break; +case TaskChangeType.Updated: Console.WriteLine($"更新任务: 索引={e.Index}"); break; +case TaskChangeType.Removed: Console.WriteLine($"移除任务: 索引={e.Index}"); break; +case TaskChangeType.Replaced: Console.WriteLine("任务列表已替换"); break; } }; + +## 线程模型 + +| 线程 | 名称 | 间隔 | 职责 | +|------|------|------|------| +| 策略同步线程 | `AbstractLoopMission_Strategy` | 1000ms | 同步配置文件,更新任务列表 | +| 业务逻辑线程 | `AbstractLoopMission_Logic` | 500ms | 处理任务调度,分配车辆目标 | + +// 分别控制线程 mission.StartLoop(); // 启动策略同步 mission.StartLogicLoop(); // 启动业务逻辑 +mission.StopLoop(); // 停止策略同步 mission.StopLogicLoop(); // 停止业务逻辑 + +## 常量配置 + +| 常量 | 值 | 说明 | + +|------|------|------| + +| `STRATEGY_SYNC_INTERVAL_MS` | 1000 | 策略同步间隔(毫秒) | +| `LOGIC_LOOP_INTERVAL_MS` | 500 | 业务逻辑间隔(毫秒) | +| `FILE_CHANGE_DEBOUNCE_MS` | 50 | 文件变更防抖延迟(毫秒) | +| `ERROR_RECOVERY_DELAY_MS` | 3000 | 异常恢复等待时间(毫秒) | +| `SCRIPT_ERROR_TRIGGER_DELAY_MS` | 3000 | 脚本异常检测延迟(毫秒) | + +## 辅助方法 + +### 车辆查找 + +// 查找到达指定站点的车辆 Car car = FindCarArrivedAtSite(siteId); +// 获取在站或前往站点的车辆 var cars = GetCarsAtOrHeadingToSite(siteId); +// 统计车辆数量 int count = CountCarsAtOrHeadingToSite(siteId); +// 检查车辆是否空闲 bool idle = IsCarIdle(car); + +### 车辆分配 + +// 分配目标站点 AssignCarToTarget(car, targetSiteId); +// 导航到目标站点 await GoSite(car, targetSite, action: "/", reverse: false); + +## 异常处理 + +### 脚本异常恢复 + +当车辆脚本状态为 `Error` 或 `Bad` 时,自动执行恢复流程: + +1. 标记站点不可用 +2. 禁止车辆调度 +3. 重置车辆状态 +4. 清理车辆标签 +5. 执行车辆重置 diff --git a/QUICK_REFERENCE.md b/QUICK_REFERENCE.md new file mode 100644 index 0000000..724c87a --- /dev/null +++ b/QUICK_REFERENCE.md @@ -0,0 +1,152 @@ +# StandardScene 快速参考 + +## 1. 一眼看懂这个仓库 + +| 项目项 | 说明 | +| --- | --- | +| 工程类型 | `StandardScene.dll` 插件库 | +| 运行方式 | 由 `build\SimpleComposer.exe` 加载 | +| 目标框架 | `.NET Framework 4.8` | +| 核心入口 | `MissionType`、`CarType`、`WebApi.cs` | +| 新手起步文件 | `Scheduler\HeartBeatMission.cs` | +| 进阶起步文件 | `Scheduler\RegionalTrafficControlMission.cs` | + +## 2. 关键目录速记 + +| 路径 | 你通常在这里做什么 | +| --- | --- | +| `CarTypes\` | 新车型、协议接入、状态同步 | +| `Chained\` | 搬运任务、环线任务、调度逻辑 | +| `Charge\` | 充电策略、充电桩管理 | +| `InterLock\` | 互锁与交通控制 | +| `Scheduler\` | 心跳、安全、区域流控等后台 Mission | +| `ExtendDevice\Door\` | 门控联动 | +| `Model\` | 配置与数据模型 | +| `WebApi.cs` | HTTP API | +| `Commons.cs` | 标签、字段、选车、路径辅助 | + +## 3. 构建运行速记 + +1. 打开 `StandardScene.sln` +2. 确保本机依赖路径存在 +3. 编译解决方案 +4. 打开 `build\SimpleComposer.exe` +5. 确认插件已从 `build\plugins` 加载 + +### 注意 + +当前工程是旧式 `.csproj`。新增 `.cs` 文件后,如果没有通过 VS 正确加入工程,可能需要手工补: + +```xml + +``` + +## 4. 新增功能时先看谁 + +| 目标 | 优先参考 | +| --- | --- | +| 新增最小 Mission | `Scheduler\HeartBeatMission.cs` | +| 做区域限流 | `Scheduler\RegionalTrafficControlMission.cs` | +| 做运输调度 | `Chained\TransportMission.cs` | +| 做环线 | `Chained\AbstractLoopMission.cs` | +| 做充电 | `Charge\StandardChargeMission.cs` | +| 做充电桩管理 | `Charge\ChargeStationManagementExample.cs` | +| 做 Web 接口 | `WebApi.cs` | + +## 5. 高频代码片段 + +### 获取车辆与站点 + +```csharp +var car = SimpleLib.GetCar(carId); +var allCars = SimpleLib.GetAllCars(); +var site = SimpleLib.GetSite(siteId); +var allSites = SimpleLib.GetAllSites(); +var currentSiteId = car.GetLastSite(); +``` + +### 更新标签与字段 + +```csharp +Commons.AddOrUpdateTag(car.tags, "occupied", "yes"); +Commons.AddOrUpdateCarField(car, "group", "A"); +Commons.AddOrUpdateSiteField(site, "giveWay", "true"); +``` + +### 规划并执行路径 + +```csharp +var plan = new SegmentPlan { usingCar = car }; +plan.fields["action"] = "move"; +plan.fields["allow_destination_on_route"] = "true"; +plan.FindRoute(SimpleLib.GetSite(srcId), SimpleLib.GetSite(dstId)); +await plan.Compile("move").Queue(); +``` + +### 输出日志 + +```csharp +Diagnosis.Post("任务已启动", "demo", true); +Diagnosis.Log("详细调试信息", "demo", true); +car.AppendDebug("车辆状态变化"); +``` + +## 6. 常见配置文件 + +| 文件 | 用途 | +| --- | --- | +| `Config\traffic.json` | 交通 / 互锁配置 | +| `Config\ChargeStations.json` | 充电桩数据 | +| `Config\ChargeStrategyConfig.json` | 充电策略 | +| `Config\AlarmConfigs.json` | 充电报警 | +| `DoorConfig.json` | 门控配置 | +| `tasklist.json` | 环线任务列表 | +| `simple.json` | 宿主基础配置 | + +## 7. 常见 API 路由 + +| 路由 | 作用 | +| --- | --- | +| `/car/createTask` | 创建任务 | +| `/car/getAllCars` | 获取车辆列表 | +| `/car/goSite` | 让车辆前往站点 | +| `/map/getMap` | 获取地图 | +| `/task/getTask` | 查询任务 | +| `/mission_reflection/get_mission_list` | 获取 Mission 列表 | +| `/mission_reflection/execute/{id}/{method}` | 反射执行 Mission 方法 | + +## 8. 调试优先级 + +出现问题时,建议按这个顺序排查: + +1. 插件是否被宿主加载 +2. Mission / CarType 是否被识别 +3. 配置文件和 `fields` 是否正确 +4. 车辆是否在线、是否被标签占用 +5. 路径规划是否成功 +6. 是否被交通控制或区域流控拦截 +7. 外部接口是否真的打到了 `WebApi.cs` + +## 9. 常见故障速查 + +| 现象 | 优先检查 | +| --- | --- | +| 新增 Mission 看不到 | 特性、`Create()`、`.csproj` 引用、插件复制 | +| 任务一直不执行 | 车辆在线状态、路径、标签占用、前置条件 | +| 区域限流无效 | 站点字段是否以 `Region` 开头,值是否为整数 | +| API 调不通 | 路由路径、宿主端口、Nancy 是否已启动 | +| 车辆不动 | 路径失败、程序未下发、协议未连通 | + +## 10. 推荐上手案例 + +### HelloMission + +- 目标:理解最小插件生命周期 +- 参考:`Scheduler\HeartBeatMission.cs` +- 验证:启动后 `status.status` 每秒递增 + +### 区域流控 + +- 目标:理解字段驱动 + 事件订阅 +- 参考:`Scheduler\RegionalTrafficControlMission.cs` +- 验证:给站点添加 `Region1=1` 后,第二台车进入同区域会被阻止 \ No newline at end of file diff --git a/README.en.md b/README.en.md new file mode 100644 index 0000000..8d624df --- /dev/null +++ b/README.en.md @@ -0,0 +1,36 @@ +# StandardScene + +#### Description +{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**} + +#### Software Architecture +Software architecture description + +#### Installation + +1. xxxx +2. xxxx +3. xxxx + +#### Instructions + +1. xxxx +2. xxxx +3. xxxx + +#### Contribution + +1. Fork the repository +2. Create Feat_xxx branch +3. Commit your code +4. Create Pull Request + + +#### Gitee Feature + +1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md +2. Gitee blog [blog.gitee.com](https://blog.gitee.com) +3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) +4. The most valuable open source project [GVP](https://gitee.com/gvp) +5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) +6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md index 3b7a112..a0d83a2 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,63 @@ -# StandardSence +# StandardScene +`StandardScene` 是一个基于 `.NET Framework 4.8` 的场景插件库,运行时由 `SimpleComposer.exe` 作为宿主加载。项目面向 AGV/AMR 场内调度与联动控制,覆盖搬运任务、环线任务、区域交通管制、充电管理、门禁联动,以及 HTTP / MQTT / Modbus 等对外通信能力。 + +## 文档入口 + +- `DocumentHub.html`:单文件文档门户,双击即可在浏览器中打开 +- `DEVELOPMENT_GUIDE.md`:面向整个仓库的开发指南 +- `QUICK_REFERENCE.md`:高频开发速查表 +- `INDEX.md`:阅读顺序与导航说明 + +## 项目定位 + +- 工程类型:类库插件,不是独立 EXE +- 宿主程序:`SimpleComposer.exe` +- 目标框架:`.NET Framework 4.8` +- 主要语言:`C#` +- 典型场景:仓储搬运、区域流控、充电协同、门控联动、车辆协议接入 + +## 顶层模块 + +| 目录 | 作用 | +| --- | --- | +| `CarTypes` | 各车型与协议适配,如叉车、Kiva、VDA5050、多车联动 | +| `Chained` | 链式搬运与环线任务主流程 | +| `Charge` | 充电策略、充电桩管理、状态监控 | +| `ChargeStationType` | 充电桩类型实现 | +| `InterLock` | 区域互锁与交通控制 | +| `Scheduler` | 场景级辅助任务,如心跳、区域流控、安全信号 | +| `ExtendDevice/Door` | 门控设备接入与联动 | +| `Model` | 任务、配置、地图等数据模型 | +| `TCP` / `Utils` | TCP、JSON、WebAPI、Modbus 等基础工具 | + +## 构建与运行 + +1. 使用 Visual Studio 打开 `StandardScene.sln` +2. 确认本机依赖路径存在: + - `D:\MDCS\Dependencies\Commons\CommonUsage.dll` + - `D:\MDCS\Dependencies\deps\LessokajiWeaverUtilities.dll` + - `D:\MDCS\Dependencies\Simple\RefSimpleCore.dll` + - `D:\MDCS\Executables\Simple\SimpleComposer.exe` +3. 编译 `Debug|Any CPU` 或 `Release|Any CPU` +4. 编译后 `PostBuildEvent` 会将 `StandardScene.dll` 复制到 `build\plugins\` +5. 运行 `build\SimpleComposer.exe`,由宿主加载插件 + +## 开发阅读顺序 + +1. 先看 `DocumentHub.html`,快速建立全局认知 +2. 再看 `DEVELOPMENT_GUIDE.md`,熟悉架构、流程与配置 +3. 开发时配合 `QUICK_REFERENCE.md` 快速查常用入口 +4. 新增功能前,先对照 `Scheduler\HeartBeatMission.cs` 或 `Scheduler\RegionalTrafficControlMission.cs` + +## 推荐起步文件 + +- `Scheduler\HeartBeatMission.cs`:最小 Mission 结构参考 +- `Scheduler\RegionalTrafficControlMission.cs`:事件订阅型 Mission 参考 +- `Chained\TransportMission.cs`:搬运任务主流程 +- `Charge\StandardChargeMission.cs`:充电任务骨架 +- `WebApi.cs`:HTTP 接口入口 + +## 本地打开 HTML 文档 + +直接双击 `DocumentHub.html` 即可,无需部署。页面已使用 `UTF-8` 编码,并对中文、English 和 emoji 做了兼容字体设置。 diff --git a/StandardScene.Core/CarTypes/BasicFields.cs b/StandardScene.Core/CarTypes/BasicFields.cs new file mode 100644 index 0000000..a194afb --- /dev/null +++ b/StandardScene.Core/CarTypes/BasicFields.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StandardScene.CarTypes +{ + internal class BasicCarFields + { + public float MagSlowSpeed = 0; + public float MagFullSpeed = 0; + } + + internal class BasicSiteFields + { + public bool Shelf = false; + public float CarLength = -1; + public float CarWidth = -1; + public float CarCenterX = 0; + public float CarCenterY = 0; + public int tag = -1; + public int TagValue = -1;//磁导航,二维码值,或者rfid 值 + } + + internal class BasicTrackFields + { + public int IOArea = -1; + public int LidarArea = -2; + public float BiasAlarmThresh = -1; + public float DthAlarmThresh = -1; + public float Speed = 0.2f; + public bool Reverse = false; + public int ReverseDst = -1; + public bool SwitchBarrier = false; + public bool CalibrateWheelEncoder = false; + public float CarDirectionBias = 0; + public bool EnableCarAbsoluteDirection = false; + public float CarAbsoluteDirection = 0; + public float SlowDistance = -1; + public float StopDistance = -1; + } + + internal class BasicPlanFields + { + public string action = "/"; + + public float CarLength = -1; + public float CarWidth = -1; + } +} diff --git a/StandardScene.Core/CarTypes/DummyCar.cs b/StandardScene.Core/CarTypes/DummyCar.cs new file mode 100644 index 0000000..a46c964 --- /dev/null +++ b/StandardScene.Core/CarTypes/DummyCar.cs @@ -0,0 +1,740 @@ +using AMRScene1; +using SimpleLite; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore; +using SimpleCore.BasicProps; +using SimpleCore.Compiler; +using SimpleCore.Extras; +using SimpleCore.Library; +using SimpleCore.PropType; +using SimpleCore.Traffic; +using StandardScene.CarTypes; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Numerics; +using System.Runtime.InteropServices.ComTypes; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace AMRScene1 +{ + class DummyCarTrackField + { + public float Speed = -1; + public bool Reverse = false; + public int ReverseDst = -1; + } + class DummyCarSiteField + { + public bool Shelf = false; + + } + class DummyCarPlanField + { + public string action = "/"; + + } + + [TemplateTrackCoderSettings( + priority = 0, + templateString = "agv.Go(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id},${track.id}," + + "${track.Speed},${track.Reverse || track.ReverseDst == dst.id},${track.typeInfo});", + trackFields = typeof(DummyCarTrackField), + siteFields = typeof(DummyCarSiteField))] + + + [TemplateTrackCoderSettings( + priority = 5, + useVerb = "plan.action=='put'&& dst.Shelf ", + templateString = "agv.Put(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id},${track.id}," + + "${track.Speed},${track.Reverse || track.ReverseDst == dst.id},${track.typeInfo});", + blockVerb = "true", + trackFields = typeof(DummyCarTrackField), + siteFields = typeof(DummyCarSiteField), + planFields = typeof(DummyCarPlanField))] + [TemplateTrackCoderSettings( + priority = 5, + useVerb = "plan.action=='fetch'&& dst.Shelf ", + templateString = "agv.Fetch(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id},${track.id}," + + "${track.Speed},${track.Reverse || track.ReverseDst == dst.id},${track.typeInfo});", + blockVerb = "true", + trackFields = typeof(DummyCarTrackField), + siteFields = typeof(DummyCarSiteField), + planFields = typeof(DummyCarPlanField))] + + [CarType(Name = "模拟车-包络")] + [EnvelopConfig(centerX = 0, centerY = 0, lengthX = 1000, lengthY = 700)] + public class DummyCar:Car + { + [FieldMember] public string conf = "realistic"; + public class RotateSiteEnvelope : SiteEnvelopeDefinition + { + public override bool Use() => true; + + public override void Prompt() + { + if (curSeg == 0|| plan.codeArr==null) + { + return; + } + var code = plan.codeArr[curSeg - 1]; + if (code.Contains("Fetch")) + { + reshape(1550, 1150, 0, 0); + } + else if (code.Contains("Put")) + { + reshape(1000,700, 0, 0); + } + } + + public override bool Block() => false; + + public override int priority => -1; + } + public virtual AGV getAGV(int id) => new AGV(id); + public class DummyCarStatus : CarStatus + { + public string simStat = "/"; + public double simulatedDistance = 0; + } + public override CarStatus status { get; set; } = new DummyCarStatus(); + + public static async Task Create() // boilerplate + { + return new() + { + lstatus = "正常", + name = $"模拟车", + haveCoordination = true + }; + } + + + public override void rightClickAction(float mouseX, float mouseY) + { + x = mouseX; + y = mouseY; + } + + + public class AGV: AGVInterface + { + public DummyCar car; + + public AGV(int id) + { + car = (DummyCar) SimpleLib.GetCar(id); + } + public void Sleep(int millis) + { + Thread.Sleep(millis); + } + + protected class Segment + { + public int trackID, srcID, dstID; + public double srcX, srcY, dstX, dstY; + } + + + protected List routeCache = []; // use circular list. + + protected virtual Task following(double dstX, double dstY, double speed, bool reverse, params float[] typeInfo) + { + var promise = new TaskCompletionSource(); + int i = 0; + IEnumerable iterActions() + { + if (typeInfo.Length == 0 || (int)typeInfo[0] == 0) // line path + { + // car always run to completion. + while ((Math.Abs(car.x - dstX) > 10 || Math.Abs(car.y - dstY) > 10))// && car.running) + { + if (car.fields.TryGetValue("speed", out var sv)) + speed = float.Parse(sv); + var dx = dstX - car.x; + var dy = dstY - car.y; + var d = Math.Sqrt(dx * dx + dy * dy); + var ed = (DateTime.Now - car.lastRefresh).TotalSeconds * speed; + if (ed > d) + { + car.th = (float)(Math.Atan2(dstY - car.y, dstX - car.x) / Math.PI * 180 + (reverse ? 180 : 0)); + car.x = (float)dstX; + car.y = (float)dstY; + break; + } + + dx = (float)(dx / d * ed); + dy = (float)(dy / d * ed); + car.th = (float)(Math.Atan2(dstY - car.y, dstX - car.x) / Math.PI * 180 + (reverse ? 180 : 0)); + car.x += (float)dx; + car.y += (float)dy; + ((DummyCarStatus)car.status).simStat = $"following-iter-{i++}"; + //Console.WriteLine($"move one frame:{car.x},{car.y},{car.speed}"); + yield return true; + } + } + else if ((int)typeInfo[0] == 1) // circularArc path + { + var center = new Vector2(typeInfo[1], typeInfo[2]); + var radius = typeInfo[3]; + var angleStart = typeInfo[4]; + var angleEnd = typeInfo[5]; + + var dstAngle = (float)(Math.Atan2(dstY - center.Y, dstX - center.X) / Math.PI * 180); + var dir = 1; // counter-clockwise + if (Math.Abs(LessMath.thDiff(angleStart, dstAngle)) < + Math.Abs(LessMath.thDiff(angleEnd, dstAngle))) dir = -1; + + while (true)//(car.running) + { + var pTh = (float)(Math.Atan2(car.y - center.Y, car.x - center.X) / Math.PI * 180); + var ed = (DateTime.Now - car.lastRefresh).TotalSeconds * speed; + + var dRadius = Math.Abs(Vector2.Distance(center, new Vector2(car.x, car.y)) - radius); + if (dRadius > 10) + { + // first go to arc + var targetX = (float)(center.X + radius * Math.Cos(pTh / 180 * Math.PI)); + var targetY = (float)(center.Y + radius * Math.Sin(pTh / 180 * Math.PI)); + car.th = (float)(Math.Atan2(targetY - car.y, targetX - car.x) / Math.PI * 180 + (reverse ? 180 : 0)); + + if (ed > dRadius) + { + car.x = targetX; + car.y = targetY; + } + + car.x += (float)((targetX - car.x) / dRadius * ed); + car.y += (float)((targetY - car.y) / dRadius * ed); + } + else + { + // then go along arc + if (Math.Abs(LessMath.thDiff(dstAngle, pTh)) < 0.01) break; + var eth = (float)(ed / radius / Math.PI * 180); + var dth = LessMath.thDiff(dstAngle, pTh); + if (Math.Abs(eth) > Math.Abs(dth)) + { + car.th = dstAngle + 90 * dir + (reverse ? 180 : 0); + car.x = (float)(center.X + radius * Math.Cos(dstAngle / 180 * Math.PI)); + car.y = (float)(center.Y + radius * Math.Sin(dstAngle / 180 * Math.PI)); + break; + } + + var newTh = pTh + eth * dir; + car.th = newTh + 90 * dir + (reverse ? 180 : 0); + car.x = (float)(center.X + radius * Math.Cos(newTh / 180 * Math.PI)); + car.y = (float)(center.Y + radius * Math.Sin(newTh / 180 * Math.PI)); + } + + ((DummyCarStatus)car.status).simStat = $"following-iter-{i++}"; + yield return true; + } + } + + ((DummyCarStatus)car.status).simStat = $"following-done"; + car.moveAction = null; + // Console.WriteLine($"** following to {dstX},{dstY} done"); + promise.SetResult(1); + // Task.Run(()=>promise.SetResult(1)); + } + + car.moveAction = iterActions().GetEnumerator(); + return promise.Task; + } + + /// + /// 模拟车有TryLock的agv函数,进入函数需先调用AddRoute() + /// + /// + /// + /// + public void AddRoute(int srcid, int dstid, int trackid) + { + var route_id = routeCache.Count; + lock (routeCache) + routeCache.Add(new Segment() { trackID = trackid, srcID = srcid, dstID = dstid }); + if (car.route.Length == 0) + car.route = [srcid]; + car.route = car.route.Append(dstid).ToArray(); + } + + private static ConcurrentDictionary _taskmap = new(); + + public Task mvmtTsk + { + get + { + if (_taskmap.TryGetValue(car, out var tsk)) return tsk; + return _taskmap[car] = Task.CompletedTask; + } + set + { + _taskmap[car] = value; + } + } + + // trackType: 0 line, 1 circularArc + public void Go(double srcX, double srcY, int srcid, double dstX, double dstY, int dstid, int trackid, + int speed = -1, bool reverse = false, params float[] trackTypeInfo) + { + // car.AppendDebug($"Go() track typeInfo:{string.Join(",", trackTypeInfo)}"); + + AddRoute(srcid, dstid, trackid); + // ReSharper disable once PossiblyMistakenUseOfParamsMethod + var promise = new TaskCompletionSource(); + Queue(async () => + { + while (!TryLock(dstid)) + await Task.Delay(100); + // Console.WriteLine($"** ready to go to {dstid}({dstX},{dstY})"); + mvmtTsk = mvmtTsk.ContinueWith(async _ => + { + //Console.WriteLine($"** begin to go to {dstid}({dstX},{dstY})"); + await following(dstX, dstY, speed > 0 ? speed : car.speed, reverse, trackTypeInfo); + ((DummyCarStatus)car.status).simulatedDistance += LessMath.dist(srcX, srcY, dstX, dstY); + promise.SetResult(1); + // Task.Run(() => promise.SetResult(1)); // following finished. + }).Unwrap(); + //Console.WriteLine($"** issued to go to {dstid}({dstX},{dstY})"); + }, async () => + { + await promise.Task; + //Console.WriteLine($"** done go to {dstid}({dstX},{dstY})"); + Leave(srcid); + }); + } + public void Fetch(double srcX, double srcY, int srcid, double dstX, double dstY, int dstid, int trackid, + int speed = -1, bool reverse = false, params float[] trackTypeInfo) + { + // car.AppendDebug($"Go() track typeInfo:{string.Join(",", trackTypeInfo)}"); + + AddRoute(srcid, dstid, trackid); + // ReSharper disable once PossiblyMistakenUseOfParamsMethod + var promise = new TaskCompletionSource(); + Queue(async () => + { + while (!TryLock(dstid)) + await Task.Delay(100); + // Console.WriteLine($"** ready to go to {dstid}({dstX},{dstY})"); + mvmtTsk = mvmtTsk.ContinueWith(async _ => + { + //Console.WriteLine($"** begin to go to {dstid}({dstX},{dstY})"); + await following(dstX, dstY, speed > 0 ? speed : car.speed, reverse, trackTypeInfo); + ((DummyCarStatus)car.status).simulatedDistance += LessMath.dist(srcX, srcY, dstX, dstY); + promise.SetResult(1); + // Task.Run(() => promise.SetResult(1)); // following finished. + }).Unwrap(); + //Console.WriteLine($"** issued to go to {dstid}({dstX},{dstY})"); + }, async () => + { + await promise.Task; + //Console.WriteLine($"** done go to {dstid}({dstX},{dstY})"); + Leave(srcid); + }); + } + public void Put(double srcX, double srcY, int srcid, double dstX, double dstY, int dstid, int trackid, + int speed = -1, bool reverse = false, params float[] trackTypeInfo) + { + // car.AppendDebug($"Go() track typeInfo:{string.Join(",", trackTypeInfo)}"); + + AddRoute(srcid, dstid, trackid); + // ReSharper disable once PossiblyMistakenUseOfParamsMethod + var promise = new TaskCompletionSource(); + Queue(async () => + { + while (!TryLock(dstid)) + await Task.Delay(100); + // Console.WriteLine($"** ready to go to {dstid}({dstX},{dstY})"); + mvmtTsk = mvmtTsk.ContinueWith(async _ => + { + //Console.WriteLine($"** begin to go to {dstid}({dstX},{dstY})"); + await following(dstX, dstY, speed > 0 ? speed : car.speed, reverse, trackTypeInfo); + ((DummyCarStatus)car.status).simulatedDistance += LessMath.dist(srcX, srcY, dstX, dstY); + promise.SetResult(1); + // Task.Run(() => promise.SetResult(1)); // following finished. + }).Unwrap(); + //Console.WriteLine($"** issued to go to {dstid}({dstX},{dstY})"); + }, async () => + { + await promise.Task; + //Console.WriteLine($"** done go to {dstid}({dstX},{dstY})"); + Leave(srcid); + }); + } + + + public void Nop(int srcid, int dstid, int trackid) + { + var route_id = routeCache.Count; + lock (routeCache) + routeCache.Add(new Segment() { trackID = trackid, srcID = srcid, dstID = dstid }); + if (car.route.Length == 0) + car.route = [srcid]; + car.route = car.route.Append(dstid).ToArray(); + + Queue(async () => + { + while (!TryLock(dstid)) + await Task.Delay(5); + }, async () => + { + Leave(srcid); + }); + } + + public override bool TryLock(int siteId) + { + if (car.status.holdingLocks.Last() == siteId) return true; + if (!car.status.usage.Get().scheduling) + throw new Exception("abandoned"); + if (!car.status.usage.Get().scheduling) + throw new Exception("Stopped"); + lock (routeCache) + return TrafficControl.TryLock(car, siteId); + } + + public override void Leave(int siteID) + { + TrafficControl.Leave(car, siteID); + } + } + + private bool running = false; + + + public override async Task actualSendScript(string script) + { + if (running) + throw new Exception($"dummy car {id} already running script"); + running = true; + + try + { + route = new int[0]; + AppendDebug($"dummy car {id} use jint for simulation"); + currentAgv = getAGV(id); + var tcs = new TaskCompletionSource(); + new Thread(() => { + try + { + SelfEvaluating(currentAgv, script); + tcs.SetResult(1); + } + catch (Exception ex) + { + tcs.SetException(ex); + }} + ) { Name = $"eva_{name}({id}):{status.programs.now.name}" }.Start(); + + await tcs.Task; + await currentAgv.WaitAsync(); + + Console.WriteLine($"{name}({id}) self evaluating script completed"); + } + catch (Exception ex) + { + AppendDebug($"simulation error:{ExceptionFormatter.FormatEx(ex)}"); + Console.WriteLine($"* {id} evaluating script failed, ex:{ExceptionFormatter.FormatEx(ex)}"); + running = false; + throw; + } + + running = false; + } + + + + + [MethodMember(Name = "设定路线", Description = "从当前位置出发,不停地走路线")] + public async void Path() + { + + Site starting = null; + float dist = float.MaxValue; + foreach (var site in SimpleLib.GetAllSites()) + { + var d = LessMath.dist(site.x, site.y, x, y); + if (d < dist) + { + dist = (float)d; + starting = site; + } + } + + var p = new Pen(Color.Red, 3); + var lineCap = + new AdjustableArrowCap(6, 6, true); + p.CustomEndCap = lineCap; + p.StartCap = LineCap.RoundAnchor; + + var segments = new List(); + + var painter = SimpleMonitor.getPainter("flat-goto"); + painter.clear(); + + Dictionary triggers = new(); + CarProgram program = null; + try + { + while (true) + { + var pt = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + var dstSite = (UISite)SimpleLib.GetSite(pt.site); + + var plan = new SegmentPlan() { usingCar = this }; + plan.fields["allow_destination_on_route"] = "true"; + if (segments.Count > 0) + plan.fields["useMustCanGo"] = "false"; + plan.FindRoute((UISite)starting, dstSite,false); + + segments = segments.Concat(plan.segments.Skip(segments.Count > 0 ? 1 : 0)).ToList(); + triggers[dstSite.id]= () => { Console.WriteLine($"VDASegment end {dstSite.id} reached"); }; + Console.WriteLine($"goto site {pt.site}"); + starting = dstSite; + + painter.clear(); + for (int i = 0; i + 2 < segments.Count; i += 2) + { + var st = (UISite)segments[i]; + var ed = (UISite)segments[i + 2]; + painter.drawLine(p, st.x, st.y, ed.x, ed.y); + } + + if (program == null) program = plan.Compile("walk", false); + else + program.Append(plan, (go) => + { + Task.Run(() => + { + MessageBox.Show("go?"); + go(); + }); + }); + } + } + catch (TaskCanceledException ex) + { + Console.WriteLine("end"); + } + + Console.WriteLine($"issue command"); + _ = Task.Factory.StartNew(() => + { + Thread.Sleep(3000); + painter.clear(); + }); + program.Forecast(); + // plan.segments = segments; + // if (plan.segments.Count == 0) + // { + // MessageBox.Show("未生成路径!"); + // return; + // } + // + // var program = plan.Compile("walk"); + foreach (var kvp in triggers) + { + program.TriggerOnSite(kvp.Key, kvp.Value); + // program.AwaitOnSite(kvp.Key, go => + // { + // kvp.Value(); + // + // Task.Run(() => + // { + // MessageBox.Show("go?"); + // go(); + // }); + // }); + } + Console.WriteLine(program.script); + G.pushStatus($"向AGV:{name}({id})下发行走任务"); + var tsk = program.Queue(); + _ = Task.Factory.StartNew(() => + { + G.pushStatus($"AGV:{name}({id})开始执行任务"); + tsk.Wait(); + G.pushStatus($"AGV:{name}({id})执行任务完毕"); + }); + siteID = segments.Last().id; + } + + [MethodMember(Name = "去某地",Description="从当前位置找一条路径去某站点")] + public void Goto() + { + async void goto_fun(){ + if (GetLastSite() == -1) + { + G.pushStatus("Car not initialized to any site!"); + return; + } + try + { + var pt = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + Console.WriteLine($"goto site {pt.site}"); + + Site site1 = SimpleLib.GetSite(GetLastSite()); + + var plan = new SegmentPlan() { usingCar = this }; + plan.FindRoute(site1, SimpleLib.GetSite(pt.site), findLoop:false); + // var code = $"{plan.Code()};agv.Wait();"; + // Console.WriteLine(code); + await plan.Compile($"goto_{pt.site}").Queue(); + Console.WriteLine("Done"); + } + catch (Exception ex) + { + Console.WriteLine(ExceptionFormatter.FormatEx(ex)); + } + } + Task.Run(goto_fun); + } + [MethodMember(Name = "增加小车enums", Description = "双击添加标签")] + public void AddEnums() + { + + if (InputBox.ShowDialog("请输入小车enums\" enums:value") != SimpleLite.DialogResult.OK) return; + string tag = InputBox.ResultValue; + if (tag.Contains(":")) + { + MessageBox.Show("需要切换英文输入法输入:"); + return; + } + if (!string.IsNullOrEmpty(tag) && tag.Contains(":")) + { + string[] tagValue = tag.Split(':'); + this.status.enums[tagValue[0]] = tagValue[1]; + + } + + } + + [MethodMember(Name = "劫持", Description = "指定一个起点和终点,当小车到达起点后劫持小车至终点")] + public void Hijack() + { + async void hijiack_fun() + { + G.pushStatus("Select starting point"); + var pt1 = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + G.pushStatus("Select ending point"); + var pt2 = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + if (GetLastSite() == -1) + { + G.pushStatus("Car not initialized to any site!"); + return; + } + try + { + var plan = new SegmentPlan() { usingCar = this }; + plan.FindRoute(SimpleLib.GetSite(pt1.site), SimpleLib.GetSite(pt2.site), findLoop: false); + await plan.Compile($"hijack", forecast:false).TryHijack().Queue(); + Console.WriteLine("Done"); + } + catch (Exception ex) + { + Console.WriteLine(ExceptionFormatter.FormatEx(ex)); + } + } + Task.Run(hijiack_fun); + } + + [MethodMember(Name = "设置位姿", Description = "拖拽以设置位姿")] + public void SetPosition() + { + SimpleMonitor.registerDownevent((sender, args) => + { + x = SimpleMonitor.mouseX; + y = SimpleMonitor.mouseY; + },null, (sender, args) => + { + th = (float)(Math.Atan2(SimpleMonitor.mouseY - y, SimpleMonitor.mouseX - x) / Math.PI * 180); + }, (sender, args) => SimpleMonitor.clearDownevent()); + } + + + + + [MethodMember(Name = "走到指定位置并设置Escape", Description = "点一个位置,再点一个位置")] + public void GoEscaped() + { + async void goto_fun() + { + if (GetLastSite() == -1) + { + G.pushStatus("Car not initialized to any site!"); + return; + } + try + { + var pt = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + var ptesc = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + Console.WriteLine($"goto site {pt.site}, ptesc={ptesc.site}"); + + var planRoute = new SegmentPlan() { usingCar = this }; + planRoute.fields["forbid_cross"] = "false"; + planRoute.FindRoute(SimpleLib.GetSite(GetLastSite()), SimpleLib.GetSite(pt.site), findLoop: false); + + var planEsc = new SegmentPlan() { usingCar = this }; + planEsc.fields["forbid_cross"] = "false"; + planEsc.FindRoute(SimpleLib.GetSite(pt.site), SimpleLib.GetSite(ptesc.site), findLoop: false); + + await planRoute.Compile($"goto_{pt.site}", false).Forecast(planEsc).Queue(); + } + catch (Exception ex) + { + Console.WriteLine(ExceptionFormatter.FormatEx(ex)); + } + } + Task.Run(goto_fun); + } + + [MethodMember(Name = "设置角度", Description = "指定模拟车的朝向角度")] + public void SetAngle() + { + if (InputBox.ShowDialog("输入角度", "模拟车设置角度", "0", InputBox.Buttons.OkCancel) == SimpleLite.DialogResult.Cancel) return; + if (!float.TryParse(InputBox.ResultValue, out var angle)) return; + th = angle; + } + + protected override void draw(Graphics eGraphics) + { + eGraphics.FillRectangle(Brushes.Gray, -320, -240 , 640 , 480 ); + eGraphics.DrawRectangle(Pens.White, -320, -240 , 640 , 480 ); + eGraphics.DrawLine(Pens.White, 0, -240, 320, 0); + eGraphics.DrawLine(Pens.White, 0, 240 , 320 , 0); + } + + public DateTime lastRefresh =DateTime.MinValue; + + + protected IEnumerator moveAction; + private AGV currentAgv; + + + public override void keepAlive() + { + if (lastRefresh == DateTime.MinValue) + { + lastRefresh = DateTime.Now; + return; + } + + if (moveAction != null) + moveAction.MoveNext(); + + haveCoordination = true; + lastRefresh = DateTime.Now; + } + } +} diff --git a/StandardScene.Core/CarTypes/IScriptErrorRecoverable.cs b/StandardScene.Core/CarTypes/IScriptErrorRecoverable.cs new file mode 100644 index 0000000..313ae16 --- /dev/null +++ b/StandardScene.Core/CarTypes/IScriptErrorRecoverable.cs @@ -0,0 +1,15 @@ +namespace StandardScene.CarTypes +{ + /// + /// 脚本异常自恢复能力(opt-in)。 + /// 背景:AbstractLoopMission 原以 car is Kiva 硬编码筛选参与「脚本 Error/Bad 状态 + /// 自动下线 + 就地重置」的车型;车型按平台拆分为插件后,Core 不能反向依赖插件内的具体车型, + /// 改为由车型实现本接口声明该能力(当前仅 Kiva 实现,行为与拆分前一致)。 + /// + public interface IScriptErrorRecoverable + { + /// 脚本异常下线后的就地重置(原 Kiva.newReset)。 + /// 重置目标站点 id;0 表示按车辆当前位置自动找最近站点。 + void RecoverReset(int resetSiteId = 0); + } +} diff --git a/StandardScene.Core/CarTypes/KivaFields.cs b/StandardScene.Core/CarTypes/KivaFields.cs new file mode 100644 index 0000000..f547ef2 --- /dev/null +++ b/StandardScene.Core/CarTypes/KivaFields.cs @@ -0,0 +1,80 @@ +namespace StandardScene.CarTypes +{ + // Kiva 系字段袋。原内联于 Kiva.cs;车型按平台拆分(Kiva→Magnetic,ArmCar→QrLidar)后, + // ArmCarXxxFields 仍继承这些类,故下沉基座供两侧插件共用(internal + InternalsVisibleTo)。 + + class KivaCarFields : BasicCarFields + { + + } + + class KivaSiteFields : BasicSiteFields + { + public int AngleTarget = 0; + public bool Turn = false; + + public float FetchSpeed = 0; + public int FetchLidarArea = -2; + public int FetchIOArea = -1; + public bool FetchReverse = false; + public float FetchBlindMoveDist = 0; + public float FetchLiftDownTarget = -1; + public float FetchLiftUpTarget = -1; + public bool FetchUseQr = false; + public int FetchQrMode = -1; + public bool FetchIsUpQr = false; + public bool FetchUseDetector = false; + public int FetchDetector = 0; + public float FetchDetectWidth = -1; + public float FetchDetectDepth = -1; + public bool FetchLeaveSrcEarly = false; + public float FetchShieldObstacleDist = -1; + + public float PutSpeed = 0; + public int PutLidarArea = -1; + public int PutIOArea = -1; + public bool PutReverse = false; + public bool PutSyncRotate = false; + public float PutBlindMoveDist = 0; + public float PutLiftDownTarget = -1; + public float PutLiftUpTarget = -1; + public bool PutUseQr = false; + public int PutQrMode = -1; + public bool PutIsUpQr = false; + public bool PutUseDetector = false; + public int PutDetector = 0; + public float PutDetectWidth = -1; + public float PutDetectDepth = -1; + public bool PutLeaveSrcEarly = false; + public float PutShieldObstacleDist = -1; + + public float LeaveShelfSpeed = 0; + public int LeaveShelfLidarArea = -1; + public int LeaveShelfIOArea = -1; + public bool LeaveShelfReverse = false; + public bool LeaveShelfSyncRotate = false; + public float LeaveShelfBlindMoveDist = 0; + public float LeaveShelfLiftDownTarget = -1; + public float LeaveShelfRecoveryObstacleDist = -1; + } + + class KivaTrackFields : BasicTrackFields + { + public int ManeuverDir = 0; + public int ForwardDst = 0; + public int ForwardObChooseDst = -2; + public float BlindMoveDist = 0; + public bool UseDetector = false; + public int DetectorMode = -1; + public float DetectWidth = -1; + public float DetectDepth = -1; + public bool LeaveSrcEarly = false; + public float ShieldObstacleDist = -1; + } + + class KivaPlanFields : BasicPlanFields + { + public bool reverse = false; + public int level = 0; + } +} diff --git a/StandardScene.Core/CarTypes/MultiWheelLifterFields.cs b/StandardScene.Core/CarTypes/MultiWheelLifterFields.cs new file mode 100644 index 0000000..ad2964a --- /dev/null +++ b/StandardScene.Core/CarTypes/MultiWheelLifterFields.cs @@ -0,0 +1,35 @@ +namespace StandardScene.CarTypes +{ + // MultiWheelLifter 系字段袋。原内联于 MultiWheelLifterCar.cs;车型按平台拆分 + // (MultiWheelLifterCar→Magnetic,MultiVehicleCar→QrLidar)后两侧共用,故下沉基座。 + + class MultiWheelLifterCarFields : BasicCarFields + { + + } + + class MultiWheelLifterSiteFields : BasicSiteFields + { + public bool ChangeAvoidanceParam = false; + public bool ClampClose = false; + public bool NeedRotate = false; + } + + class MultiWheelLifterTrackFields : BasicTrackFields + { + public int SleepTime = 0; + public float TrayTarget = 0; + public int MagnetChoose = 0; + public bool MultiVehicleSync = false; + } + + class MultiWheelLifterPlanFields : BasicPlanFields + { + public float AngleTarget = 0; + public float TireNum = 0; + public bool FrontLidarDetect = false; + public bool FirstTire = false; + public bool Reverse = false; + + } +} diff --git a/StandardScene.Core/CarTypes/VehicleMonitor.Designer.cs b/StandardScene.Core/CarTypes/VehicleMonitor.Designer.cs new file mode 100644 index 0000000..4b2dccf --- /dev/null +++ b/StandardScene.Core/CarTypes/VehicleMonitor.Designer.cs @@ -0,0 +1,46 @@ +namespace StandardScene +{ + partial class VehicleMonitor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // VehicleMonitor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1800, 900); + this.Name = "VehicleMonitor"; + this.Text = "车辆状态监控系统"; + this.ResumeLayout(false); + } + + #endregion + } +} + diff --git a/StandardScene.Core/CarTypes/VehicleMonitor.cs b/StandardScene.Core/CarTypes/VehicleMonitor.cs new file mode 100644 index 0000000..1239b41 --- /dev/null +++ b/StandardScene.Core/CarTypes/VehicleMonitor.cs @@ -0,0 +1,1710 @@ +using SimpleLite; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using SimpleCore.Library; +using StandardScene.Model; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Reflection; +using System.Windows.Forms; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox; + +namespace StandardScene +{ + public partial class VehicleMonitor : Form + { + private static VehicleMonitor instance; + private static readonly object lockObject = new object(); + + private Timer updateTimer; + private DataGridView vehicleGrid; + private Label titleLabel; + private Panel statusPanel; + private Panel alarmPanel; + private Panel actionPanel; + private Label totalLabel; + private Label onlineLabel; + private Label offlineLabel; + private Label runningLabel; + private Label chargingLabel; + private Label faultLabel; + private Label timeLabel; + private Label alarmLabel; + + private Button onlineButton; + private Button offlineButton; + private Button returnButton; + private Button simulateAlarmButton; + private Button cancelSimAlarmButton; + private Button toggleSecondaryButton; + + private Timer alarmScrollTimer; + private string lastAlarmText; + private string pendingAlarmText; + private Color pendingAlarmColor = Color.FromArgb(255, 60, 60); + private bool pendingAlarmScrolling; + private readonly List simulatedAlarmNames = new List(); + private int simulatedAlarmIndex = 1; + private const string SimulatedAlarmInfo = "脱轨异常"; + + private bool showSecondaryColumns; + + private readonly Dictionary rowHeightCache = new Dictionary(); + private readonly HashSet selectedCarIds = new HashSet(); + private readonly List statusCards = new List(); + private string lastSortColumnName; + private SortOrder lastSortOrder = SortOrder.None; + private int lastFirstDisplayedRowIndex = -1; + + private CheckBox selectAllCheckBox; + private bool suppressSelectSync; + + private const int TitleBarHeight = 70; + private const int AlarmPanelHeight = 42; + private const int AlarmPanelMarginTop = 9; + private const int StatusPanelHeight = 90; + private const int ActionPanelHeight = 60; + private const int VerticalSpacing = 16; + private const string QuickOperationHeaderText = "车体快捷操作"; + + private const int CombinedPanelPadding = 12; + private const int CombinedPanelSpacing = 10; + + private Panel statusActionPanel; + + private readonly Color pageBackColor = Color.FromArgb(236, 239, 243); + private readonly Color panelBackColor = Color.FromArgb(248, 249, 251); + private readonly Color panelBorderColor = Color.FromArgb(185, 192, 199); + private readonly Color titleTextColor = Color.FromArgb(35, 35, 40); + private readonly Color subTextColor = Color.FromArgb(110, 120, 130); + private readonly Color gridTextColor = Color.FromArgb(50, 55, 60); + private readonly Color gridHeaderBackColor = Color.FromArgb(238, 241, 245); + private readonly Color gridHeaderTextColor = Color.FromArgb(70, 80, 90); + private readonly Color gridAltRowColor = Color.FromArgb(246, 248, 251); + private readonly Color gridSelectionBackColor = Color.FromArgb(224, 236, 248); + private readonly Color gridSelectionTextColor = Color.FromArgb(30, 40, 50); + private readonly Color buttonBackColor = Color.FromArgb(246, 248, 251); + private readonly Color buttonBorderColor = Color.FromArgb(190, 198, 206); + private readonly Color buttonHoverColor = Color.FromArgb(238, 242, 247); + private readonly Color buttonDownColor = Color.FromArgb(228, 234, 240); + private readonly Color buttonTextColor = Color.FromArgb(40, 60, 80); + private readonly Color subtleLineColor = Color.FromArgb(230, 235, 240); + private readonly Color combinedBorderColor = Color.Black; + private readonly Color statusCardBackColor = Color.FromArgb(236, 239, 243); + private readonly Color statusCardBorderColor = Color.Black; + private const float OuterBorderWidth = 2f; + + private sealed class NoFocusPanel : Panel + { + public NoFocusPanel() + { + SetStyle(ControlStyles.Selectable, false); + SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true); + TabStop = false; + UpdateStyles(); + } + } + + public VehicleMonitor() + { + InitializeComponent(); + InitializeCustomComponents(); + } + + /// + /// 显示或激活车辆监控窗口 + /// + public static void ShowMonitor() + { + lock (lockObject) + { + if (instance == null || instance.IsDisposed) + { + instance = new VehicleMonitor(); + } + + if (!instance.Visible) + { + instance.Show(); + } + + instance.WindowState = FormWindowState.Normal; + instance.BringToFront(); + instance.Activate(); + } + } + + private void InitializeCustomComponents() + { + // 设置窗体属性 + this.Text = "车辆状态监控系统"; + this.WindowState = FormWindowState.Maximized; + this.BackColor = pageBackColor; + this.ForeColor = titleTextColor; + this.FormBorderStyle = FormBorderStyle.Sizable; + this.DoubleBuffered = true; + SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true); + UpdateStyles(); + + // 创建标题栏 + CreateTitleBar(); + + // 创建报警滚动条 + CreateAlarmTickerPanel(); + + // 创建状态统计面板 + CreateStatusPanel(); + + // 创建中间操作面板 + CreateActionPanel(); + + // 创建车辆数据表格 + CreateVehicleGrid(); + + // 创建更新定时器 + updateTimer = new Timer + { + Interval = 1000, // 1秒更新一次 + Enabled = true + }; + updateTimer.Tick += UpdateTimer_Tick; + + // 初始更新 + UpdateVehicleData(); + } + + private void CreateTitleBar() + { + // 标题背景面板 + Panel titlePanel = new Panel + { + Location = new System.Drawing.Point(0, 0), + Size = new System.Drawing.Size(this.ClientSize.Width, TitleBarHeight), + BackColor = panelBackColor, + Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right + }; + AttachBottomBorder(titlePanel); + + // 标题标签 + titleLabel = new Label + { + Text = "车辆状态监控系统", + Font = new Font("微软雅黑", 24F, FontStyle.Bold), + ForeColor = titleTextColor, + Location = new System.Drawing.Point(28, 16), + Size = new System.Drawing.Size(600, 45), + AutoSize = false + }; + titlePanel.Controls.Add(titleLabel); + + // 时间标签 + timeLabel = new Label + { + Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + Font = new Font("微软雅黑", 11F), + ForeColor = subTextColor, + Location = new System.Drawing.Point(this.ClientSize.Width - 250, 25), + Size = new System.Drawing.Size(220, 25), + TextAlign = ContentAlignment.MiddleRight, + Anchor = AnchorStyles.Top | AnchorStyles.Right + }; + titlePanel.Controls.Add(timeLabel); + + this.Controls.Add(titlePanel); + } + + private void CreateAlarmTickerPanel() + { + alarmPanel = new NoFocusPanel + { + Location = new System.Drawing.Point(20, GetAlarmPanelTop()), + Size = new System.Drawing.Size(this.ClientSize.Width - 40, AlarmPanelHeight), + BackColor = panelBackColor, + BorderStyle = BorderStyle.None, + Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right + }; + alarmPanel.Paint += DrawPanelBorder; + + alarmLabel = new Label + { + AutoSize = true, + ForeColor = Color.FromArgb(235, 80, 80), + Font = new Font("微软雅黑", 14F, FontStyle.Bold), + Location = new System.Drawing.Point(alarmPanel.Width, 6) + }; + + alarmPanel.Controls.Add(alarmLabel); + this.Controls.Add(alarmPanel); + + alarmScrollTimer = new Timer + { + Interval = 13, + Enabled = true + }; + alarmScrollTimer.Tick += AlarmScrollTimer_Tick; + } + + private void CreateStatusPanel() + { + statusPanel = new NoFocusPanel + { + Location = new System.Drawing.Point(20, GetStatusPanelTop()), + Size = new System.Drawing.Size(GetStatusPanelWidth(6), StatusPanelHeight), + BackColor = panelBackColor, + BorderStyle = BorderStyle.None, + Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right + }; + statusPanel.Paint += DrawPanelBorder; + + int xPos = 0; + int yPos = 0; + int cardWidth = 140; + int cardHeight = 60; + + // 总车辆数 + totalLabel = CreateStatusCard("总车辆", xPos, yPos, cardWidth, cardHeight, titleTextColor, panelBackColor); + + // 在线车辆 + onlineLabel = CreateStatusCard("在线", xPos, yPos, cardWidth, cardHeight, Color.FromArgb(136, 205, 246), panelBackColor); + + // 离线车辆 + offlineLabel = CreateStatusCard("离线", xPos, yPos, cardWidth, cardHeight, Color.FromArgb(150, 150, 150), panelBackColor); + + // 运行中 + runningLabel = CreateStatusCard("运行中", xPos, yPos, cardWidth, cardHeight, Color.FromArgb(0, 180, 90), panelBackColor); + + // 充电中 + chargingLabel = CreateStatusCard("充电中", xPos, yPos, cardWidth, cardHeight, Color.FromArgb(255, 220, 0), panelBackColor); + + // 故障 + faultLabel = CreateStatusCard("故障", xPos, yPos, cardWidth, cardHeight, Color.FromArgb(255, 80, 80), panelBackColor); + + this.Controls.Add(statusPanel); + UpdateStatusPanelLayout(); + } + + private Label CreateStatusCard(string text, int x, int y, int width, int height, Color textColor, Color bgColor) + { + Panel card = new Panel + { + Location = new System.Drawing.Point(x, y), + Size = new System.Drawing.Size(width, height), + BackColor = statusCardBackColor, + BorderStyle = BorderStyle.None + }; + card.Paint += DrawStatusCardBorder; + + // 状态指示灯(圆形) + Color indicatorColor = textColor; // 保存颜色引用 + Panel indicator = new Panel + { + Location = new System.Drawing.Point(12, 20), + Size = new System.Drawing.Size(14, 14), + BackColor = Color.Transparent + }; + // 使指示灯呈圆形 + indicator.Paint += (s, evt) => + { + using (SolidBrush brush = new SolidBrush(indicatorColor)) + { + evt.Graphics.SmoothingMode = SmoothingMode.AntiAlias; + evt.Graphics.FillEllipse(brush, 0, 0, indicator.Width, indicator.Height); + } + }; + card.Controls.Add(indicator); + + // 文本标签 + var label = new Label + { + Text = $"{text}\n0", + Font = new Font("微软雅黑", 11F, FontStyle.Bold), + ForeColor = textColor, + Dock = DockStyle.Fill, + Padding = new Padding(35, 8, 10, 8), + TextAlign = ContentAlignment.MiddleLeft + }; + card.Controls.Add(label); + + // 将Panel添加到statusPanel,但返回Label以便更新 + statusPanel.Controls.Add(card); + statusCards.Add(card); + return label; + } + + private void CreateActionPanel() + { + statusActionPanel = new NoFocusPanel + { + Location = new System.Drawing.Point(20, statusPanel.Bottom + VerticalSpacing), + Size = new System.Drawing.Size(this.ClientSize.Width - 40, this.ClientSize.Height - (statusPanel.Bottom + VerticalSpacing + 20)), + BackColor = panelBackColor, + BorderStyle = BorderStyle.None, + Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right + }; + statusActionPanel.Paint += DrawCombinedBorder; + this.Controls.Add(statusActionPanel); + + actionPanel = new NoFocusPanel + { + Location = new System.Drawing.Point(CombinedPanelPadding, CombinedPanelPadding), + Size = new System.Drawing.Size(statusActionPanel.Width - CombinedPanelPadding * 2, ActionPanelHeight), + BackColor = panelBackColor, + BorderStyle = BorderStyle.None, + Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right + }; + + var flow = new FlowLayoutPanel + { + Dock = DockStyle.Fill, + FlowDirection = FlowDirection.LeftToRight, + WrapContents = false, + Padding = new Padding(15, 10, 15, 10) + }; + + onlineButton = CreateActionButton("小车上线-批量"); + offlineButton = CreateActionButton("小车下线-批量"); + returnButton = CreateActionButton("故障返厂-批量"); + simulateAlarmButton = CreateActionButton("模拟报警"); + cancelSimAlarmButton = CreateActionButton("取消模拟报警"); + toggleSecondaryButton = CreateActionButton("显示次要列"); + + onlineButton.Click += (s, e) => ExecuteForSelectedCars(BringCarOnline, "小车上线"); + offlineButton.Click += (s, e) => ExecuteForSelectedCars(BringCarOffline, "小车下线"); + returnButton.Click += (s, e) => ExecuteForSelectedCars(ReturnCarToFactory, "故障返厂"); + simulateAlarmButton.Click += (s, e) => AddSimulatedAlarm(); + cancelSimAlarmButton.Click += (s, e) => ClearSimulatedAlarms(); + toggleSecondaryButton.Click += (s, e) => ToggleSecondaryColumns(); + + flow.Controls.Add(onlineButton); + flow.Controls.Add(offlineButton); + flow.Controls.Add(returnButton); + flow.Controls.Add(simulateAlarmButton); + flow.Controls.Add(cancelSimAlarmButton); + flow.Controls.Add(toggleSecondaryButton); + + actionPanel.Controls.Add(flow); + statusActionPanel.Controls.Add(actionPanel); + } + + private Button CreateActionButton(string text) + { + var button = new Button + { + Text = text, + Width = 130, + Height = 38, + Margin = new Padding(8, 0, 8, 0), + FlatStyle = FlatStyle.Flat, + BackColor = buttonBackColor, + ForeColor = buttonTextColor, + Font = new Font("微软雅黑", 10F, FontStyle.Bold) + }; + + button.FlatAppearance.BorderColor = buttonBorderColor; + button.FlatAppearance.BorderSize = 1; + button.FlatAppearance.MouseOverBackColor = buttonHoverColor; + button.FlatAppearance.MouseDownBackColor = buttonDownColor; + return button; + } + + private void CreateVehicleGrid() + { + vehicleGrid = new DataGridView + { + Location = new System.Drawing.Point(CombinedPanelPadding, actionPanel.Bottom + CombinedPanelSpacing), + Size = new System.Drawing.Size(statusActionPanel.Width - CombinedPanelPadding * 2, statusActionPanel.Height - (actionPanel.Bottom + CombinedPanelSpacing + CombinedPanelPadding)), + Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right, + AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells, + AllowUserToAddRows = false, + AllowUserToDeleteRows = false, + AllowUserToResizeRows = true, + ReadOnly = false, + SelectionMode = DataGridViewSelectionMode.FullRowSelect, + MultiSelect = false, + BackgroundColor = panelBackColor, + GridColor = panelBorderColor, + BorderStyle = BorderStyle.FixedSingle, + Font = new Font("微软雅黑", 10F), + EnableHeadersVisualStyles = false, + RowHeadersVisible = false, + ColumnHeadersHeight = 42, + ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing, // 禁止调整高度 + DefaultCellStyle = new DataGridViewCellStyle + { + BackColor = panelBackColor, + ForeColor = gridTextColor, + SelectionBackColor = gridSelectionBackColor, + SelectionForeColor = gridSelectionTextColor, + Padding = new Padding(5, 2, 5, 2) + }, + ColumnHeadersDefaultCellStyle = new DataGridViewCellStyle + { + BackColor = gridHeaderBackColor, + ForeColor = gridHeaderTextColor, + Font = new Font("微软雅黑", 11F, FontStyle.Bold), + Alignment = DataGridViewContentAlignment.MiddleCenter, + Padding = new Padding(5, 8, 5, 8), // 增加上下内边距 + WrapMode = DataGridViewTriState.False // 禁止文字换行 + }, + AlternatingRowsDefaultCellStyle = new DataGridViewCellStyle + { + BackColor = gridAltRowColor + } + }; + + SetGridDoubleBuffered(vehicleGrid); + vehicleGrid.RowTemplate.Height = (int)(vehicleGrid.RowTemplate.Height * 1.5); + + // 添加列 + var selectColumn = new DataGridViewCheckBoxColumn + { + Name = "Select", + HeaderText = "", + Width = 40, + ReadOnly = false, + SortMode = DataGridViewColumnSortMode.NotSortable + }; + vehicleGrid.Columns.Add(selectColumn); + + var remoteColumn = new DataGridViewButtonColumn + { + Name = "Remote", + HeaderText = "远程", + Width = 60, + Text = "远程", + UseColumnTextForButtonValue = true, + FlatStyle = FlatStyle.Flat, + SortMode = DataGridViewColumnSortMode.NotSortable + }; + vehicleGrid.Columns.Add(remoteColumn); + + var onlineColumn = new DataGridViewButtonColumn + { + Name = "Online", + HeaderText = "上线", + Width = 60, + Text = "上线", + UseColumnTextForButtonValue = true, + FlatStyle = FlatStyle.Flat, + SortMode = DataGridViewColumnSortMode.NotSortable + }; + vehicleGrid.Columns.Add(onlineColumn); + + var offlineColumn = new DataGridViewButtonColumn + { + Name = "Offline", + HeaderText = "下线", + Width = 60, + Text = "下线", + UseColumnTextForButtonValue = true, + FlatStyle = FlatStyle.Flat, + SortMode = DataGridViewColumnSortMode.NotSortable + }; + vehicleGrid.Columns.Add(offlineColumn); + + var returnColumn = new DataGridViewButtonColumn + { + Name = "Return", + HeaderText = "返厂", + Width = 60, + Text = "返厂", + UseColumnTextForButtonValue = true, + FlatStyle = FlatStyle.Flat, + SortMode = DataGridViewColumnSortMode.NotSortable + }; + vehicleGrid.Columns.Add(returnColumn); + + vehicleGrid.Columns.Add("CarId", "车辆ID"); + vehicleGrid.Columns.Add("CarName", "车辆名称"); + vehicleGrid.Columns.Add("CarType", "车辆类型"); + vehicleGrid.Columns.Add("Status", "运行状态"); + vehicleGrid.Columns.Add("IsOnline", "在线"); + vehicleGrid.Columns.Add("X", "X坐标"); + vehicleGrid.Columns.Add("Y", "Y坐标"); + vehicleGrid.Columns.Add("Theta", "角度(°)"); + vehicleGrid.Columns.Add("Battery", "电量"); + vehicleGrid.Columns.Add("BatteryBar", "电量进度"); + vehicleGrid.Columns.Add("Voltage", "电压(V)"); + vehicleGrid.Columns.Add("Current", "电流(A)"); + vehicleGrid.Columns.Add("Speed", "速度(m/s)"); + vehicleGrid.Columns.Add("SiteId", "站点ID"); + vehicleGrid.Columns.Add("TaskStatus", "任务状态"); + vehicleGrid.Columns.Add("CPUUsage", "CPU"); + vehicleGrid.Columns.Add("CPUBar", "CPU进度"); + vehicleGrid.Columns.Add("Memory", "内存"); + vehicleGrid.Columns.Add("Address", "IP地址"); + + // 设置数值列的对齐方式 + vehicleGrid.Columns["Select"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + vehicleGrid.Columns["Remote"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + vehicleGrid.Columns["Online"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + vehicleGrid.Columns["Offline"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + vehicleGrid.Columns["Return"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + ApplyGridButtonStyle(vehicleGrid.Columns["Remote"]); + ApplyGridButtonStyle(vehicleGrid.Columns["Online"]); + ApplyGridButtonStyle(vehicleGrid.Columns["Offline"]); + ApplyGridButtonStyle(vehicleGrid.Columns["Return"]); + vehicleGrid.Columns["X"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + vehicleGrid.Columns["Y"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + vehicleGrid.Columns["Theta"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + vehicleGrid.Columns["Battery"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + vehicleGrid.Columns["Voltage"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + vehicleGrid.Columns["Current"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + vehicleGrid.Columns["Speed"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + vehicleGrid.Columns["CPUUsage"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + vehicleGrid.Columns["Memory"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + + // 设置进度条列为只读 + vehicleGrid.Columns["BatteryBar"].ReadOnly = true; + vehicleGrid.Columns["CPUBar"].ReadOnly = true; + + foreach (DataGridViewColumn column in vehicleGrid.Columns) + { + if (column.Name == "Select" || column.Name == "Remote" || column.Name == "Online" || column.Name == "Offline" || column.Name == "Return") + { + column.ReadOnly = column.Name != "Select"; + continue; + } + + column.ReadOnly = true; + } + + foreach (DataGridViewColumn column in vehicleGrid.Columns) + { + if (column.SortMode == DataGridViewColumnSortMode.NotSortable) continue; + column.SortMode = DataGridViewColumnSortMode.Automatic; + } + + ApplySecondaryColumnVisibility(); + + // 注册CellFormatting事件来绘制进度条 + vehicleGrid.CellFormatting += VehicleGrid_CellFormatting; + vehicleGrid.CellPainting += VehicleGrid_CellPainting; + vehicleGrid.CellContentClick += VehicleGrid_CellContentClick; + vehicleGrid.CurrentCellDirtyStateChanged += VehicleGrid_CurrentCellDirtyStateChanged; + vehicleGrid.ColumnWidthChanged += VehicleGrid_ColumnWidthChanged; + vehicleGrid.Scroll += VehicleGrid_Scroll; + vehicleGrid.SizeChanged += VehicleGrid_SizeChanged; + + InitializeSelectAllCheckBox(); + + statusActionPanel.Controls.Add(vehicleGrid); + UpdateActionGridPanelLayout(); + } + + private void AttachBottomBorder(Panel panel) + { + if (panel == null) return; + panel.Paint += (s, e) => + { + using (var pen = new Pen(subtleLineColor)) + { + e.Graphics.DrawLine(pen, 0, panel.Height - 1, panel.Width, panel.Height - 1); + } + }; + } + + private void DrawPanelBorder(object sender, PaintEventArgs e) + { + if (!(sender is Panel panel)) return; + using (var pen = new Pen(panelBorderColor, OuterBorderWidth)) + { + var rect = panel.ClientRectangle; + rect.Width -= 1; + rect.Height -= 1; + e.Graphics.DrawRectangle(pen, rect); + } + } + + private void DrawCombinedBorder(object sender, PaintEventArgs e) + { + if (!(sender is Panel panel)) return; + using (var pen = new Pen(combinedBorderColor, OuterBorderWidth)) + { + var rect = panel.ClientRectangle; + rect.Width -= 1; + rect.Height -= 1; + e.Graphics.DrawRectangle(pen, rect); + } + } + + private void DrawStatusCardBorder(object sender, PaintEventArgs e) + { + if (!(sender is Panel panel)) return; + using (var pen = new Pen(statusCardBorderColor)) + { + var rect = panel.ClientRectangle; + rect.Width -= 1; + rect.Height -= 1; + e.Graphics.DrawRectangle(pen, rect); + } + } + + private void SetGridDoubleBuffered(DataGridView grid) + { + typeof(DataGridView).GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic) + ?.SetValue(grid, true, null); + } + + private void ApplyGridButtonStyle(DataGridViewColumn column) + { + if (column == null) return; + + column.DefaultCellStyle.BackColor = buttonBackColor; + column.DefaultCellStyle.ForeColor = buttonTextColor; + column.DefaultCellStyle.SelectionBackColor = buttonHoverColor; + column.DefaultCellStyle.SelectionForeColor = buttonTextColor; + } + + private void VehicleGrid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) + { + if (vehicleGrid.Columns[e.ColumnIndex].Name == "BatteryBar" || + vehicleGrid.Columns[e.ColumnIndex].Name == "CPUBar") + { + e.Value = ""; // 清空文本,我们将绘制进度条 + } + } + + private void VehicleGrid_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) + { + if (e.RowIndex == -1) + { + var columnName = vehicleGrid.Columns[e.ColumnIndex].Name; + if (columnName == "Remote" || columnName == "Online" || columnName == "Offline" || columnName == "Return") + { + if (columnName == "Remote") + { + var firstRect = vehicleGrid.GetCellDisplayRectangle(vehicleGrid.Columns["Remote"].Index, -1, true); + var lastRect = vehicleGrid.GetCellDisplayRectangle(vehicleGrid.Columns["Return"].Index, -1, true); + if (firstRect.Width > 0 && lastRect.Width > 0) + { + var mergedRect = new Rectangle(firstRect.Left, firstRect.Top, lastRect.Right - firstRect.Left, firstRect.Height); + using (var backBrush = new SolidBrush(vehicleGrid.ColumnHeadersDefaultCellStyle.BackColor)) + using (var textBrush = new SolidBrush(vehicleGrid.ColumnHeadersDefaultCellStyle.ForeColor)) + using (var borderPen = new Pen(panelBorderColor)) + using (var format = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }) + { + e.Graphics.FillRectangle(backBrush, mergedRect); + var font = vehicleGrid.ColumnHeadersDefaultCellStyle.Font ?? vehicleGrid.Font; + e.Graphics.DrawString(QuickOperationHeaderText, font, textBrush, mergedRect, format); + e.Graphics.DrawRectangle(borderPen, mergedRect.X, mergedRect.Y, mergedRect.Width - 1, mergedRect.Height - 1); + } + } + } + + e.Handled = true; + return; + } + } + + if (e.RowIndex < 0) return; + + // 绘制电量进度条 + if (e.ColumnIndex == vehicleGrid.Columns["BatteryBar"].Index) + { + e.Paint(e.CellBounds, DataGridViewPaintParts.All & ~DataGridViewPaintParts.ContentForeground); + + double battery = 0; + if (e.RowIndex < vehicleGrid.Rows.Count) + { + var batteryCell = vehicleGrid.Rows[e.RowIndex].Cells["Battery"]; + if (batteryCell != null && batteryCell.Value != null) + { + string batteryStr = batteryCell.Value.ToString().Replace("%", ""); + double.TryParse(batteryStr, out battery); + } + } + + // 根据电量设置颜色 + Color barColor; + if (battery < 20) + barColor = Color.FromArgb(255, 80, 80); + else if (battery < 30) + barColor = Color.FromArgb(255, 200, 0); + else if (battery < 50) + barColor = Color.FromArgb(255, 220, 100); + else + barColor = Color.FromArgb(0, 220, 100); + + int barWidth = (int)((e.CellBounds.Width - 10) * battery / 100.0); + Rectangle barRect = new Rectangle(e.CellBounds.X + 5, e.CellBounds.Y + 4, barWidth, e.CellBounds.Height - 8); + + using (SolidBrush brush = new SolidBrush(barColor)) + { + e.Graphics.FillRectangle(brush, barRect); + } + + // 绘制边框 + using (Pen pen = new Pen(panelBorderColor, 1)) + { + e.Graphics.DrawRectangle(pen, e.CellBounds.X + 5, e.CellBounds.Y + 4, e.CellBounds.Width - 10, e.CellBounds.Height - 8); + } + + e.Handled = true; + } + + // 绘制CPU进度条 + if (e.ColumnIndex == vehicleGrid.Columns["CPUBar"].Index) + { + e.Paint(e.CellBounds, DataGridViewPaintParts.All & ~DataGridViewPaintParts.ContentForeground); + + double cpuUsage = 0; + if (e.RowIndex < vehicleGrid.Rows.Count) + { + var cpuCell = vehicleGrid.Rows[e.RowIndex].Cells["CPUUsage"]; + if (cpuCell != null && cpuCell.Value != null) + { + string cpuStr = cpuCell.Value.ToString(); + if (cpuStr != "N/A") + { + cpuStr = cpuStr.Replace("%", ""); + double.TryParse(cpuStr, out cpuUsage); + } + } + } + + // 根据CPU使用率设置颜色 + Color barColor; + if (cpuUsage > 80) + barColor = Color.FromArgb(255, 80, 80); + else if (cpuUsage > 60) + barColor = Color.FromArgb(255, 200, 0); + else if (cpuUsage > 40) + barColor = Color.FromArgb(255, 220, 100); + else + barColor = Color.FromArgb(0, 220, 100); + + int barWidth = (int)((e.CellBounds.Width - 10) * cpuUsage / 100.0); + Rectangle barRect = new Rectangle(e.CellBounds.X + 5, e.CellBounds.Y + 4, barWidth, e.CellBounds.Height - 8); + + using (SolidBrush brush = new SolidBrush(barColor)) + { + e.Graphics.FillRectangle(brush, barRect); + } + + // 绘制边框 + using (Pen pen = new Pen(panelBorderColor, 1)) + { + e.Graphics.DrawRectangle(pen, e.CellBounds.X + 5, e.CellBounds.Y + 4, e.CellBounds.Width - 10, e.CellBounds.Height - 8); + } + + e.Handled = true; + } + } + + private void UpdateTimer_Tick(object sender, EventArgs e) + { + UpdateVehicleData(); + // 更新时间显示 + if (timeLabel != null) + { + timeLabel.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + } + Invalidate(true); + } + + private void UpdateVehicleData() + { + try + { + CaptureGridViewState(); + + var cars = SimpleLib.GetAllCars().OfType().ToList(); + if (string.IsNullOrEmpty(lastSortColumnName)) + { + cars = cars.OrderBy(c => c.id).ToList(); + } + + // 更新统计信息 + UpdateStatistics(cars); + UpdateAlarmTicker(cars); + + // 更新表格数据 + vehicleGrid.SuspendLayout(); + vehicleGrid.Rows.Clear(); + foreach (var car in cars) + { + var carInfo = CarBaseInfo.FromCar(car); + var isOnline = carInfo.IsOnline; + var state = carInfo.CurrState; + + // 获取CPU使用率(如果存在) + string cpuUsage = "N/A"; + double cpuValue = 0; + if (car.status.enums.ContainsKey("CPUUsage")) + { + cpuUsage = car.status.enums["CPUUsage"]; + double.TryParse(cpuUsage, out cpuValue); + } + else if (car.status.enums.ContainsKey("CpuUsage")) + { + cpuUsage = car.status.enums["CpuUsage"]; + double.TryParse(cpuUsage, out cpuValue); + } + else if (car.status.enums.ContainsKey("CPU")) + { + cpuUsage = car.status.enums["CPU"]; + double.TryParse(cpuUsage, out cpuValue); + } + + // 获取内存使用率(如果存在) + string memoryUsage = "N/A"; + if (car.status.enums.ContainsKey("MemoryUsage")) + { + memoryUsage = car.status.enums["MemoryUsage"] + "%"; + } + else if (car.status.enums.ContainsKey("Memory")) + { + memoryUsage = car.status.enums["Memory"] + "%"; + } + else if (car.status.enums.ContainsKey("RAM")) + { + memoryUsage = car.status.enums["RAM"] + "%"; + } + + // 获取任务状态 + string taskStatus = GetTaskStatus(car); + + // 获取电量 + double battery = carInfo.Battery; + if (car.status.enums.ContainsKey("Soc")) + { + double.TryParse(car.status.enums["Soc"], out battery); + } + else if (car.status.enums.ContainsKey("soc")) + { + double.TryParse(car.status.enums["soc"], out battery); + } + + // 格式化状态显示 + string statusDisplay = GetStatusDisplay(state); + string onlineDisplay = isOnline ? "●" : "○"; + string batteryDisplay = battery.ToString("F1") + "%"; + string carId = car.id.ToString(); + + int rowIndex = vehicleGrid.Rows.Add( + selectedCarIds.Contains(carId), + "远程", + "上线", + "下线", + "返厂", + car.id.ToString(), + car.name, + carInfo.CarType, + statusDisplay, + onlineDisplay, + car.x.ToString("F2"), + car.y.ToString("F2"), + (car.th * 180 / Math.PI).ToString("F1"), // 转换为度数 + batteryDisplay, + "", // BatteryBar - 由CellPainting绘制 + carInfo.Voltage.ToString("F2"), + carInfo.ElectricCurrent.ToString("F2"), + car.speed.ToString("F2"), + car.GetLastSite().ToString(), + taskStatus, + cpuUsage == "N/A" ? cpuUsage : cpuValue.ToString("F1") + "%", + "", // CPUBar - 由CellPainting绘制 + memoryUsage, + carInfo.Address + ); + + // 根据状态设置行颜色 + var row = vehicleGrid.Rows[rowIndex]; + if (rowHeightCache.TryGetValue(carId, out var rowHeight)) + { + row.Height = rowHeight; + } + SetRowColor(row, state, isOnline, battery, cpuValue); + } + + ApplyGridViewState(); + vehicleGrid.ResumeLayout(); + } + catch (Exception ex) + { + Diagnosis.Log($"更新车辆数据异常: {ex.Message}", "VehicleMonitor", true); + } + } + + private string GetStatusDisplay(string state) + { + switch (state) + { + case "Running": + return "运行中"; + case "Charging": + return "充电中"; + case "Faulting": + return "故障"; + case "Idle": + return "空闲"; + case "Offline": + return "离线"; + default: + return state; + } + } + + private void UpdateStatistics(List cars) + { + int total = cars.Count; + int online = cars.Count(c => CarBaseInfo.FromCar(c).IsOnline); + int offline = total - online; + int running = cars.Count(c => + { + var info = CarBaseInfo.FromCar(c); + return info.IsOnline && info.CurrState == "Running"; + }); + int charging = cars.Count(c => + { + var info = CarBaseInfo.FromCar(c); + return info.IsOnline && info.CurrState == "Charging"; + }); + int fault = cars.Count(c => + { + var info = CarBaseInfo.FromCar(c); + return info.IsOnline && info.CurrState == "Faulting"; + }); + + totalLabel.Text = $"总车辆\n{total}"; + onlineLabel.Text = $"在线\n{online}"; + offlineLabel.Text = $"离线\n{offline}"; + runningLabel.Text = $"运行中\n{running}"; + chargingLabel.Text = $"充电中\n{charging}"; + faultLabel.Text = $"故障\n{fault}"; + } + + private string GetTaskStatus(Car car) + { + if (car.tags.Contains("occupied")) + { + if (car.tags.Contains("charging")) + return "充电中"; + if (car.tags.Contains("deliver")) + return "执行任务"; + if (car.tags.Contains("redirect")) + return "避让中"; + return "占用中"; + } + if (car.tags.Contains("idle")) + return "空闲"; + if (car.tags.Contains("blocking")) + return "阻塞中"; + if (car.status.pendingLocks.Length > 0) + return "路径规划中"; + return "待机"; + } + + private void SetRowColor(DataGridViewRow row, string state, bool isOnline, double battery, double cpuUsage) + { + if (!isOnline) + { + row.DefaultCellStyle.BackColor = Color.FromArgb(244, 246, 248); + row.DefaultCellStyle.ForeColor = Color.FromArgb(150, 160, 170); + } + else + { + switch (state) + { + case "Running": + row.DefaultCellStyle.BackColor = Color.FromArgb(231, 248, 236); + row.DefaultCellStyle.ForeColor = Color.FromArgb(0, 180, 90); + break; + case "Charging": + row.DefaultCellStyle.BackColor = Color.FromArgb(255, 250, 230); + row.DefaultCellStyle.ForeColor = Color.FromArgb(255, 220, 0); + break; + case "Faulting": + row.DefaultCellStyle.BackColor = Color.FromArgb(255, 236, 236); + row.DefaultCellStyle.ForeColor = Color.FromArgb(255, 80, 80); + break; + default: + row.DefaultCellStyle.BackColor = panelBackColor; + row.DefaultCellStyle.ForeColor = gridTextColor; + break; + } + + // 在线状态指示器颜色 + if (row.Cells["IsOnline"] != null) + { + row.Cells["IsOnline"].Style.ForeColor = Color.FromArgb(0, 255, 100); + row.Cells["IsOnline"].Style.Font = new Font("微软雅黑", 12F, FontStyle.Bold); + } + + if (row.Cells["Battery"] != null) + { + row.Cells["Battery"].Style.BackColor = row.DefaultCellStyle.BackColor; + row.Cells["Battery"].Style.ForeColor = row.DefaultCellStyle.ForeColor; + } + + if (row.Cells["CPUUsage"] != null) + { + row.Cells["CPUUsage"].Style.BackColor = row.DefaultCellStyle.BackColor; + row.Cells["CPUUsage"].Style.ForeColor = row.DefaultCellStyle.ForeColor; + } + + // 电量低警告 + if (battery < 20) + { + row.Cells["Battery"].Style.BackColor = Color.FromArgb(255, 235, 235); + row.Cells["Battery"].Style.ForeColor = Color.FromArgb(220, 60, 60); + } + else if (battery < 30) + { + row.Cells["Battery"].Style.BackColor = Color.FromArgb(255, 247, 225); + row.Cells["Battery"].Style.ForeColor = Color.FromArgb(200, 140, 0); + } + + // CPU使用率高警告 + if (cpuUsage > 80) + { + row.Cells["CPUUsage"].Style.BackColor = Color.FromArgb(255, 235, 235); + row.Cells["CPUUsage"].Style.ForeColor = Color.FromArgb(220, 60, 60); + } + else if (cpuUsage > 60) + { + row.Cells["CPUUsage"].Style.BackColor = Color.FromArgb(255, 247, 225); + row.Cells["CPUUsage"].Style.ForeColor = Color.FromArgb(200, 140, 0); + } + } + } + + protected override void OnFormClosing(FormClosingEventArgs e) + { + if (e.CloseReason == CloseReason.UserClosing) + { + e.Cancel = true; + this.Hide(); + } + else + { + // 如果不是用户关闭,则释放资源 + instance = null; + } + base.OnFormClosing(e); + } + + protected override void OnResize(EventArgs e) + { + base.OnResize(e); + + if (alarmPanel != null) + { + alarmPanel.Left = 20; + alarmPanel.Top = GetAlarmPanelTop(); + alarmPanel.Width = this.ClientSize.Width - 40; + PositionAlarmLabel(); + } + + // 更新状态面板宽度 + UpdateStatusPanelLayout(); + + if (vehicleGrid != null) + { + UpdateActionGridPanelLayout(); + } + + // 更新时间标签位置 + if (timeLabel != null && this.Controls.Count > 0) + { + var titlePanel = this.Controls[0] as Panel; + if (titlePanel != null) + { + timeLabel.Left = this.ClientSize.Width - 250; + } + } + } + + private int GetStatusPanelWidth(int cardCount) + { + int fullWidth = this.ClientSize.Width - 40; + int preferred = (int)(fullWidth * 2.0 / 3.0); + int minCardWidth = 100; + int padding = 12; + int spacing = 8; + int minWidth = cardCount * minCardWidth + spacing * (cardCount - 1) + padding * 2; + + int target = Math.Max(preferred, minWidth); + return Math.Min(fullWidth, target); + } + + private void UpdateStatusPanelLayout() + { + if (statusPanel == null) return; + + int targetWidth = alarmPanel != null ? alarmPanel.Width : (this.ClientSize.Width - 40); + statusPanel.Width = targetWidth; + statusPanel.Left = 20; + statusPanel.Top = GetStatusPanelTop(); + LayoutStatusCards(); + } + + private void UpdateActionGridPanelLayout() + { + if (statusActionPanel == null || actionPanel == null || vehicleGrid == null) return; + + statusActionPanel.Left = 20; + statusActionPanel.Top = statusPanel.Bottom + VerticalSpacing; + statusActionPanel.Width = this.ClientSize.Width - 40; + statusActionPanel.Height = this.ClientSize.Height - (statusActionPanel.Top + 20); + + actionPanel.Left = CombinedPanelPadding; + actionPanel.Top = CombinedPanelPadding; + actionPanel.Width = statusActionPanel.Width - CombinedPanelPadding * 2; + + vehicleGrid.Left = CombinedPanelPadding; + vehicleGrid.Top = actionPanel.Bottom + CombinedPanelSpacing; + vehicleGrid.Width = statusActionPanel.Width - CombinedPanelPadding * 2; + vehicleGrid.Height = statusActionPanel.Height - (vehicleGrid.Top + CombinedPanelPadding); + } + + private int GetAlarmPanelTop() + { + return TitleBarHeight + AlarmPanelMarginTop; + } + + private int GetStatusPanelTop() + { + return GetAlarmPanelTop() + AlarmPanelHeight + VerticalSpacing; + } + + private void LayoutStatusCards() + { + if (statusPanel == null || statusCards.Count == 0) return; + + int cardCount = statusCards.Count; + int padding = 12; + int spacing = 8; + int availableWidth = statusPanel.Width - padding * 2 - spacing * (cardCount - 1); + int cardWidth = Math.Max(100, availableWidth / cardCount); + int cardHeight = 60; + int x = padding; + int y = (statusPanel.Height - cardHeight) / 2; + + foreach (var card in statusCards) + { + card.Location = new System.Drawing.Point(x, y); + card.Size = new System.Drawing.Size(cardWidth, cardHeight); + + var indicator = card.Controls.OfType().FirstOrDefault(); + if (indicator != null) + { + indicator.Top = (cardHeight - indicator.Height) / 2; + } + + x += cardWidth + spacing; + } + } + + private void VehicleGrid_CurrentCellDirtyStateChanged(object sender, EventArgs e) + { + if (vehicleGrid.IsCurrentCellDirty) + { + vehicleGrid.CommitEdit(DataGridViewDataErrorContexts.Commit); + } + } + + private void VehicleGrid_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0) return; + + var columnName = vehicleGrid.Columns[e.ColumnIndex].Name; + if (columnName == "Select") + { + UpdateSelectedCarIdFromRow(e.RowIndex); + UpdateHeaderCheckBoxState(); + } + else if (columnName == "Remote") + { + var ip = vehicleGrid.Rows[e.RowIndex].Cells["Address"]?.Value?.ToString(); + if (!string.IsNullOrWhiteSpace(ip)) + { + LaunchRemoteDesktop(ip); + } + } + else if (columnName == "Online") + { + ExecuteForSingleRow(e.RowIndex, BringCarOnline, "小车上线"); + } + else if (columnName == "Offline") + { + ExecuteForSingleRow(e.RowIndex, BringCarOffline, "小车下线"); + } + else if (columnName == "Return") + { + ExecuteForSingleRow(e.RowIndex, ReturnCarToFactory, "故障返厂"); + } + } + + private void UpdateSelectedCarIdFromRow(int rowIndex) + { + var row = vehicleGrid.Rows[rowIndex]; + var id = row.Cells["CarId"]?.Value?.ToString(); + if (string.IsNullOrWhiteSpace(id)) return; + + var selected = row.Cells["Select"]?.Value is bool flag && flag; + if (selected) + { + selectedCarIds.Add(id); + } + else + { + selectedCarIds.Remove(id); + } + } + + private void CaptureGridViewState() + { + if (vehicleGrid == null) return; + + lastSortColumnName = vehicleGrid.SortedColumn?.Name; + lastSortOrder = vehicleGrid.SortOrder; + + try + { + lastFirstDisplayedRowIndex = vehicleGrid.FirstDisplayedScrollingRowIndex; + } + catch + { + lastFirstDisplayedRowIndex = -1; + } + + rowHeightCache.Clear(); + selectedCarIds.Clear(); + + foreach (DataGridViewRow row in vehicleGrid.Rows) + { + if (row.IsNewRow) continue; + var id = row.Cells["CarId"]?.Value?.ToString(); + if (string.IsNullOrWhiteSpace(id)) continue; + + rowHeightCache[id] = row.Height; + + var selected = row.Cells["Select"]?.Value is bool flag && flag; + if (selected) + { + selectedCarIds.Add(id); + } + } + } + + private void ApplyGridViewState() + { + if (vehicleGrid == null) return; + + if (!string.IsNullOrEmpty(lastSortColumnName) && vehicleGrid.Columns.Contains(lastSortColumnName) && + lastSortOrder != SortOrder.None) + { + var direction = lastSortOrder == SortOrder.Descending + ? ListSortDirection.Descending + : ListSortDirection.Ascending; + vehicleGrid.Sort(vehicleGrid.Columns[lastSortColumnName], direction); + } + + if (lastFirstDisplayedRowIndex >= 0 && lastFirstDisplayedRowIndex < vehicleGrid.Rows.Count) + { + vehicleGrid.FirstDisplayedScrollingRowIndex = lastFirstDisplayedRowIndex; + } + + UpdateHeaderCheckBoxState(); + PositionSelectAllCheckBox(); + } + + private void InitializeSelectAllCheckBox() + { + selectAllCheckBox = new CheckBox + { + Size = new System.Drawing.Size(14, 14), + BackColor = Color.Transparent + }; + + selectAllCheckBox.CheckedChanged += SelectAllCheckBox_CheckedChanged; + vehicleGrid.Controls.Add(selectAllCheckBox); + PositionSelectAllCheckBox(); + } + + private void PositionSelectAllCheckBox() + { + if (selectAllCheckBox == null || vehicleGrid == null) return; + if (!vehicleGrid.Columns.Contains("Select")) return; + + var rect = vehicleGrid.GetCellDisplayRectangle(vehicleGrid.Columns["Select"].Index, -1, true); + if (rect.Width <= 0 || rect.Height <= 0) return; + + int x = rect.X + (rect.Width - selectAllCheckBox.Width) / 2; + int y = rect.Y + (rect.Height - selectAllCheckBox.Height) / 2; + selectAllCheckBox.Location = new System.Drawing.Point(x, y); + } + + private void SelectAllCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (suppressSelectSync) return; + + suppressSelectSync = true; + bool isChecked = selectAllCheckBox.Checked; + + foreach (DataGridViewRow row in vehicleGrid.Rows) + { + if (row.IsNewRow) continue; + row.Cells["Select"].Value = isChecked; + + var id = row.Cells["CarId"]?.Value?.ToString(); + if (string.IsNullOrWhiteSpace(id)) continue; + + if (isChecked) + { + selectedCarIds.Add(id); + } + else + { + selectedCarIds.Remove(id); + } + } + + suppressSelectSync = false; + } + + private void UpdateHeaderCheckBoxState() + { + if (selectAllCheckBox == null || vehicleGrid == null) return; + if (suppressSelectSync) return; + + int total = 0; + int selected = 0; + foreach (DataGridViewRow row in vehicleGrid.Rows) + { + if (row.IsNewRow) continue; + total++; + var isSelected = row.Cells["Select"]?.Value is bool flag && flag; + if (isSelected) selected++; + } + + suppressSelectSync = true; + selectAllCheckBox.Checked = total > 0 && selected == total; + suppressSelectSync = false; + } + + private void VehicleGrid_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e) + { + if (e.Column.Name == "Select") + { + PositionSelectAllCheckBox(); + } + } + + private void VehicleGrid_Scroll(object sender, ScrollEventArgs e) + { + if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll) + { + PositionSelectAllCheckBox(); + } + } + + private void VehicleGrid_SizeChanged(object sender, EventArgs e) + { + PositionSelectAllCheckBox(); + } + + private void AlarmScrollTimer_Tick(object sender, EventArgs e) + { + if (alarmLabel == null || alarmPanel == null) return; + if (string.IsNullOrWhiteSpace(alarmLabel.Text)) return; + + alarmLabel.Left -= 3; + if (alarmLabel.Right < 0) + { + if (!string.IsNullOrEmpty(pendingAlarmText)) + { + ApplyAlarmText(pendingAlarmText, pendingAlarmColor, pendingAlarmScrolling); + pendingAlarmText = null; + } + alarmLabel.Left = alarmPanel.Width; + } + } + + private void UpdateAlarmTicker(List cars) + { + var messages = new List(); + if (cars != null) + { + foreach (var car in cars) + { + var alarmInfo = GetCarAlarmInfo(car); + if (!string.IsNullOrWhiteSpace(alarmInfo)) + { + messages.Add($"{car.name}: {alarmInfo}"); + } + } + } + + foreach (var name in simulatedAlarmNames) + { + messages.Add($"{name}: {SimulatedAlarmInfo}"); + } + + if (messages.Count == 0) + { + SetAlarmText("暂无报警信息", subTextColor, scrolling: false); + return; + } + + SetAlarmText(string.Join(" | ", messages), Color.FromArgb(255, 60, 60), scrolling: true); + } + + private string GetCarAlarmInfo(Car car) + { + if (car?.status?.enums == null) return string.Empty; + + string alarmInfo; + if (car.status.enums.TryGetValue("AlarmInfo", out alarmInfo) && !string.IsNullOrWhiteSpace(alarmInfo)) + return alarmInfo; + if (car.status.enums.TryGetValue("alarmInfo", out alarmInfo) && !string.IsNullOrWhiteSpace(alarmInfo)) + return alarmInfo; + if (car.status.enums.TryGetValue("Alarm", out alarmInfo) && !string.IsNullOrWhiteSpace(alarmInfo)) + return alarmInfo; + if (car.status.enums.TryGetValue("AlarmMsg", out alarmInfo) && !string.IsNullOrWhiteSpace(alarmInfo)) + return alarmInfo; + if (car.status.enums.TryGetValue("AlarmMessage", out alarmInfo) && !string.IsNullOrWhiteSpace(alarmInfo)) + return alarmInfo; + if (car.status.enums.TryGetValue("AlarmText", out alarmInfo) && !string.IsNullOrWhiteSpace(alarmInfo)) + return alarmInfo; + + return string.Empty; + } + + private void SetAlarmText(string text, Color color, bool scrolling) + { + if (alarmLabel == null || alarmPanel == null) return; + if (lastAlarmText == text && alarmScrollTimer.Enabled == scrolling) + { + return; + } + + if (alarmScrollTimer.Enabled && scrolling) + { + pendingAlarmText = text; + pendingAlarmColor = color; + pendingAlarmScrolling = scrolling; + return; + } + + ApplyAlarmText(text, color, scrolling); + } + + private void ApplyAlarmText(string text, Color color, bool scrolling) + { + alarmLabel.ForeColor = color; + alarmLabel.Text = text; + lastAlarmText = text; + alarmScrollTimer.Enabled = scrolling; + PositionAlarmLabel(); + } + + private void ToggleSecondaryColumns() + { + showSecondaryColumns = !showSecondaryColumns; + ApplySecondaryColumnVisibility(); + } + + private void ApplySecondaryColumnVisibility() + { + if (vehicleGrid == null) return; + SetColumnVisible("CarId", showSecondaryColumns); + SetColumnVisible("X", showSecondaryColumns); + SetColumnVisible("Y", showSecondaryColumns); + SetColumnVisible("Theta", showSecondaryColumns); + SetColumnVisible("Voltage", showSecondaryColumns); + SetColumnVisible("Current", showSecondaryColumns); + SetColumnVisible("CPUUsage", showSecondaryColumns); + SetColumnVisible("CPUBar", showSecondaryColumns); + //SetColumnVisible("Speed", showSecondaryColumns); + SetColumnVisible("Memory", showSecondaryColumns); + //SetColumnVisible("Address", showSecondaryColumns); + + if (toggleSecondaryButton != null) + { + toggleSecondaryButton.Text = showSecondaryColumns ? "隐藏更多属性" : "显示更多属性"; + } + } + + private void SetColumnVisible(string name, bool visible) + { + if (!vehicleGrid.Columns.Contains(name)) return; + vehicleGrid.Columns[name].Visible = visible; + } + + private void PositionAlarmLabel() + { + if (alarmLabel == null || alarmPanel == null) return; + + if (!alarmScrollTimer.Enabled) + { + alarmLabel.Left = (alarmPanel.Width - alarmLabel.Width) / 2; + } + else + { + alarmLabel.Left = alarmPanel.Width; + } + alarmLabel.Top = (alarmPanel.Height - alarmLabel.Height) / 2; + } + + private void AddSimulatedAlarm() + { + var name = $"NS{simulatedAlarmIndex:000}"; + simulatedAlarmNames.Add(name); + simulatedAlarmIndex++; + } + + private void ClearSimulatedAlarms() + { + simulatedAlarmNames.Clear(); + simulatedAlarmIndex = 1; + } + + private void ExecuteForSelectedCars(Action action, string actionName) + { + var cars = GetSelectedCars(); + if (cars.Count == 0) + { + MessageBox.Show("请先勾选车辆。"); + return; + } + + foreach (var car in cars) + { + try + { + action(car); + } + catch (Exception ex) + { + Diagnosis.Log($"{actionName}失败: {ex.Message}", "VehicleMonitor", true); + } + } + } + + private void ExecuteForSingleRow(int rowIndex, Action action, string actionName) + { + var car = GetCarFromRow(rowIndex); + if (car == null) + { + MessageBox.Show("未找到对应车辆。"); + return; + } + + try + { + action(car); + } + catch (Exception ex) + { + Diagnosis.Log($"{actionName}失败: {ex.Message}", "VehicleMonitor", true); + } + } + + private Car GetCarFromRow(int rowIndex) + { + var row = vehicleGrid.Rows[rowIndex]; + var idStr = row.Cells["CarId"]?.Value?.ToString(); + if (string.IsNullOrWhiteSpace(idStr)) return null; + + if (!int.TryParse(idStr, out var id)) return null; + + return SimpleLib.GetAllCars().OfType().FirstOrDefault(c => c.id == id); + } + + private List GetSelectedCars() + { + RefreshSelectedCarIdsFromGrid(); + var selected = new HashSet(selectedCarIds); + return SimpleLib.GetAllCars().OfType() + .Where(c => selected.Contains(c.id.ToString())) + .ToList(); + } + + private void RefreshSelectedCarIdsFromGrid() + { + if (vehicleGrid == null) return; + + selectedCarIds.Clear(); + foreach (DataGridViewRow row in vehicleGrid.Rows) + { + if (row.IsNewRow) continue; + var id = row.Cells["CarId"]?.Value?.ToString(); + if (string.IsNullOrWhiteSpace(id)) continue; + + var selected = row.Cells["Select"]?.Value is bool flag && flag; + if (selected) + { + selectedCarIds.Add(id); + } + } + } + + private void BringCarOnline(Car car) + { + if (TryInvokeCarMethod(car, "newReset", new object[] { 0 })) return; + if (TryInvokeCarMethod(car, "newReset", Array.Empty())) return; + } + + private void BringCarOffline(Car car) + { + TryInvokeCarMethod(car, "ForceStop", Array.Empty()); + } + + private void ReturnCarToFactory(Car car) + { + TryInvokeCarMethod(car, "Blown", Array.Empty()); + } + + private bool TryInvokeCarMethod(Car car, string methodName, object[] args) + { + try + { + var method = car.GetType().GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (method == null) return false; + + var parameters = method.GetParameters(); + if (args.Length == parameters.Length) + { + method.Invoke(car, args); + return true; + } + + if (args.Length == 0 && parameters.Length > 0 && parameters.All(p => p.IsOptional)) + { + var optionalArgs = parameters.Select(p => Type.Missing).ToArray(); + method.Invoke(car, optionalArgs); + return true; + } + } + catch (Exception ex) + { + Diagnosis.Log($"调用{methodName}失败: {ex.Message}", "VehicleMonitor", true); + } + + return false; + } + + private void LaunchRemoteDesktop(string ip) + { + Process.Start( + new ProcessStartInfo + { + FileName = "mstsc", + Arguments = $"/v:{ip}", + UseShellExecute = false, + CreateNoWindow = true + } + ); + } + } +} + diff --git a/StandardScene.Core/Chained/AbstractLoopMission.cs b/StandardScene.Core/Chained/AbstractLoopMission.cs new file mode 100644 index 0000000..619f7e9 --- /dev/null +++ b/StandardScene.Core/Chained/AbstractLoopMission.cs @@ -0,0 +1,2166 @@ +using LoopViewerApp; +using Newtonsoft.Json; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.Library; +using SimpleCore.PropType; +using StandardScene.CarTypes; +using StandardScene.Chained.Loop; +using StandardScene.Model; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace StandardScene.Chained +{ + /// + /// 抽象环线任务基类 + /// 核心功能: + /// + /// 支持多种启动类型:AutoLoop(自动循环)、Api、Plc、ButtonBox(外部触发) + /// 支持多种任务类别:Loop(普通循环)、BranchPoint(分流点)、JoinPoint(汇合点) + /// 支持流量控制:限制目标站点的最大车辆数 + /// 支持优先级调度:高优先级任务优先处理 + /// 支持配置热更新:tasklist.json 文件变更自动刷新 + /// 外部触发接口:子类可重写 OnApiTrigger/OnPlcTrigger/OnButtonTrigger 实现业务逻辑 + /// + /// + /// + /// 子类实现示例: + /// + /// public class MyLoopMission : AbstractLoopMission + /// { + /// protected override ExternalTriggerResult OnApiTrigger(int currentSiteId, LoopTask task, Car car) + /// { + /// // 返回 UseTarget(目标站点) - 使用子类指定的目标 + /// // 返回 UseConfigTarget() - 使用配置文件目标 + /// // 返回 Fail() - 不分配任务 + /// return ExternalTriggerResult.UseConfigTarget(); + /// } + /// } + /// + /// + public abstract class AbstractLoopMission : Mission, IDisposable + { + #region 常量定义 + + /// 策略同步线程轮询间隔(毫秒) + private const int STRATEGY_SYNC_INTERVAL_MS = 1000; + + /// 业务逻辑线程轮询间隔(毫秒) + private const int LOGIC_LOOP_INTERVAL_MS = 300; + + /// 文件变更防抖延迟(毫秒) + private const int FILE_CHANGE_DEBOUNCE_MS = 50; + + /// 异常恢复等待时间(毫秒) + private const int ERROR_RECOVERY_DELAY_MS = 3000; + + /// 脚本异常检测触发延迟(毫秒) + private const int SCRIPT_ERROR_TRIGGER_DELAY_MS = 3000; + + #endregion + + #region 外部触发结果类 + + /// + /// 外部触发处理结果类 + /// 用于子类重写外部触发接口时返回处理结果,决定目标站点的分配方式 + /// + /// + /// 使用示例: + /// + /// // 方式1:使用子类指定的目标站点 + /// return ExternalTriggerResult.UseTarget(200); + /// + /// // 方式2:使用配置文件中的目标站点(相当于返回 true) + /// return ExternalTriggerResult.UseConfigTarget(); + /// + /// // 方式3:业务失败,不分配任务 + /// return ExternalTriggerResult.Fail(); + /// + /// + public class ExternalTriggerResult + { + /// + /// 是否处理成功 + /// true = 成功,将根据 CustomTargetSiteId 分配目标站点 + /// false = 失败或跳过,不分配任务 + /// + public bool Success { get; set; } + + /// + /// 子类指定的目标站点ID + /// 有值时使用此目标站点 + /// null 时使用配置文件中的 TargetStationId + /// + public int? CustomTargetSiteId { get; set; } + + /// + /// 创建成功结果,使用子类指定的目标站点 + /// + /// 目标站点ID + /// 包含指定目标的成功结果 + public static ExternalTriggerResult UseTarget(int targetSiteId) + { + return new ExternalTriggerResult + { + Success = true, + CustomTargetSiteId = targetSiteId + }; + } + + /// + /// 创建成功结果,使用配置文件中的目标站点 + /// 等同于业务处理成功返回 true 的效果 + /// + /// 使用配置目标的成功结果 + public static ExternalTriggerResult UseConfigTarget() + { + return new ExternalTriggerResult + { + Success = true, + CustomTargetSiteId = null + }; + } + + /// + /// 创建失败结果,不分配任务 + /// 等同于业务处理失败返回 false 的效果 + /// + /// 失败结果 + public static ExternalTriggerResult Fail() + { + return new ExternalTriggerResult { Success = false }; + } + } + + #endregion + + #region 状态与字段 + + /// + /// 环线任务状态类 + /// + public class AbstractLoopMissionStatus : MissionStatus + { + /// 当前任务数量 + public int TaskCount { get; set; } + + /// 最后一次错误信息 + public string LastError { get; set; } = "/"; + } + + /// 任务状态对象 + /* [JsonIgnore] + public override MissionStatus status { get; set; } = new LoopMissionStatus();*/ + + /// 策略同步线程 + [JsonIgnore] + private Thread _strategyThread; + + /// 策略同步线程运行标志 + [JsonIgnore] + private volatile bool _strategyRunning; + + /// 业务逻辑线程 + [JsonIgnore] + private Thread _logicThread; + + /// 业务逻辑线程运行标志 + [JsonIgnore] + private volatile bool _logicRunning; + + /// 任务集合同步锁 + [JsonIgnore] + private readonly object _tasksLock = new object(); + + /// 任务列表(线程安全访问需使用 _tasksLock) + [JsonIgnore] + protected readonly List Tasks = new List(); + + /// 触发器适配器列表 + [JsonIgnore] + private readonly List _adapters = new List(); + + /// 任务策略实例 + private ITaskStrategy _taskStrategy; + + /// + /// 任务策略属性 + /// 支持热更新,设置时自动订阅/取消订阅变更事件 + /// + public ITaskStrategy TaskStrategy + { + get => _taskStrategy; + set + { + // 取消旧策略的事件订阅 + if (_taskStrategy is JsonFileTaskStrategy oldStrategy) + { + oldStrategy.Changed -= OnTaskStrategyChanged; + oldStrategy.DisposeWatcher(); + } + + // 设置新策略(null 时使用默认策略) + _taskStrategy = value ?? new JsonFileTaskStrategy(); + + // 订阅新策略的变更事件 + if (_taskStrategy is JsonFileTaskStrategy newStrategy) + { + newStrategy.Changed += OnTaskStrategyChanged; + newStrategy.EnsureWatcher(); + } + } + } + + /// 任务列表变更事件 + public event EventHandler TaskListChanged; + + #endregion + + #region 构造函数 + + /// + /// 初始化抽象环线任务基类 + /// 自动使用默认的 JSON 文件策略并加载初始任务配置 + /// + protected AbstractLoopMission() + { + TaskStrategy = new JsonFileTaskStrategy(); + ApplyTaskStrategy(); + } + + #endregion + + #region 任务管理方法 + + /// + /// 获取当前任务列表的只读副本(线程安全) + /// + /// 任务列表快照 + public IReadOnlyList GetTasks() + { + lock (_tasksLock) + { + return Tasks.ToArray(); + } + } + + /// + /// 添加任务到列表末尾 + /// + /// 要添加的任务 + /// 新任务的索引 + /// task 为 null 时抛出 + public int EnqueueTask(LoopTask task) + { + if (task == null) + throw new ArgumentNullException(nameof(task)); + + lock (_tasksLock) + { + Tasks.Add(task); + int index = Tasks.Count - 1; + + // 触发任务添加事件 + TaskListChanged?.Invoke(this, new TaskListChangedEventArgs(TaskChangeType.Added, index, task)); + + // 更新状态中的任务计数 + ((AbstractLoopMissionStatus)status).TaskCount = Tasks.Count; + + return index; + } + } + + /// + /// 更新指定索引的任务 + /// + /// 任务索引 + /// 新的任务数据 + /// 是否更新成功 + public bool UpdateTask(int index, LoopTask task) + { + lock (_tasksLock) + { + if (index < 0 || index >= Tasks.Count) + return false; + + Tasks[index] = task; + + // 触发任务更新事件 + TaskListChanged?.Invoke(this, new TaskListChangedEventArgs(TaskChangeType.Updated, index, task)); + + return true; + } + } + + /// + /// 移除指定索引的任务 + /// + /// 任务索引 + /// 是否移除成功 + public bool RemoveTask(int index) + { + lock (_tasksLock) + { + if (index < 0 || index >= Tasks.Count) + return false; + + LoopTask task = Tasks[index]; + Tasks.RemoveAt(index); + + // 触发任务移除事件 + TaskListChanged?.Invoke(this, new TaskListChangedEventArgs(TaskChangeType.Removed, index, task)); + + // 更新状态中的任务计数 + ((AbstractLoopMissionStatus)status).TaskCount = Tasks.Count; + + return true; + } + } + + #endregion + + #region 车辆查找辅助方法 + + /// + /// 查找恰好停在指定站点的车辆 + /// 条件:车辆的 holdingLocks 只包含该站点(表示车辆已到达并停稳) + /// + /// 站点ID + /// 找到的车辆,未找到返回 null + protected Car FindCarArrivedAtSite(int siteId) + { + try + { + return SimpleLib.GetAllCars() + .OfType() + .FirstOrDefault(car => + car?.status?.holdingLocks != null && + car.status.holdingLocks.Length == 1 && + car.status.holdingLocks[0] == siteId); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[AbstractLoopMission] FindCarArrivedAtSite({siteId}) error: {ex.Message}"); + return null; + } + } + + /// + /// 获取当前在站或正在前往指定站点的所有车辆 + /// 用于流量控制统计 + /// + /// 站点ID + /// 车辆集合 + protected IEnumerable GetCarsAtOrHeadingToSite(int siteId) + { + try + { + return SimpleLib.GetAllCars() + .OfType() + .Where(car => + { + if (car?.status == null) + return false; + + // 检查是否在站:holdingLocks 包含该站点 + if (car.status.holdingLocks?.Contains(siteId) == true) + return true; + + // 检查是否前往:pendingLocks 最后一个锁定点为该站点 + if (car.status.pendingLocks.LastOrDefault()==siteId) + { + return true; + } + // 检查是否前往:goalSite 标签指向该站点 + /* if (car.tags?.TryGetValue("goalSite", out var destStr) == true && + int.TryParse(destStr, out int destId) && + destId == siteId) + return true;*/ + + return false; + }) + .ToList(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[AbstractLoopMission] GetCarsAtOrHeadingToSite({siteId}) error: {ex.Message}"); + return Array.Empty(); + } + } + + /// + /// 统计当前在站或正在前往指定站点的车辆数量 + /// + /// 站点ID + /// 车辆数量 + protected int CountCarsAtOrHeadingToSite(int siteId) + { + return GetCarsAtOrHeadingToSite(siteId).Count(); + } + + /// + /// 检查车辆是否空闲(未被占用、未有目标、未执行任务) + /// + /// 车辆 + /// 是否空闲 + protected bool IsCarIdle(Car car) + { + if (car?.tags == null) + return false; + + try + { + // 检查是否存在表示忙碌状态的标签 + if (car.tags.ContainsKey("occupied")) return false; + if (car.tags.ContainsKey("dest")) return false; + if (car.tags.ContainsKey("deliver")) return false; + + return true; + } + catch + { + return false; + } + } + + #endregion + + #region 流量控制检查 + + /// + /// 检查目标站点是否满足流量控制条件 + /// 统计当前在站或正在前往该站点的车辆数量,与最大允许数比较 + /// + /// 目标站点ID + /// 最大允许车辆数(0或负数表示不限制) + /// true=可以发车,false=已达上限需等待 + protected bool CheckTrafficControl(int targetSiteId, int maxAllowed) + { + // 不限制流量的情况 + if (maxAllowed <= 0) + return true; + + int currentCount = CountCarsAtOrHeadingToSite(targetSiteId); + return currentCount < maxAllowed; + } + + #endregion + + #region 外部触发接口(子类重写) + + /// + /// API 触发处理接口 + /// 当任务的 StartType 为 Api 时,车辆到达当前站点后会调用此方法 + /// 子类重写此方法实现 API 触发的业务逻辑 + /// + /// 当前站点ID + /// 匹配的任务配置 + /// 到达的车辆 + /// + /// 处理结果: + /// + /// - 使用子类指定的目标站点 + /// - 使用配置文件中的目标站点 + /// - 业务失败,不分配任务 + /// + /// + protected virtual ExternalTriggerResult OnApiTrigger(int currentSiteId, LoopTask task, Car car) + { + // 默认返回失败,子类需重写以启用 API 触发功能 + return ExternalTriggerResult.Fail(); + } + + /// + /// PLC 信号触发处理接口 + /// 当任务的 StartType 为 Plc 时,车辆到达当前站点后会调用此方法 + /// 子类重写此方法实现 PLC 触发的业务逻辑 + /// + /// 当前站点ID + /// 匹配的任务配置 + /// 到达的车辆 + /// 处理结果 + protected virtual ExternalTriggerResult OnPlcTrigger(int currentSiteId, LoopTask task, Car car) + { + // 默认返回失败,子类需重写以启用 PLC 触发功能 + return ExternalTriggerResult.Fail(); + } + + /// + /// 充电条件信号触发处理接口 + /// 当任务的 StartType 为 Plc 时,车辆到达当前站点后会调用此方法 + /// 子类重写此方法实现 PLC 触发的业务逻辑 + /// + /// 当前站点ID + /// 匹配的任务配置 + /// 到达的车辆 + /// 处理结果 + protected virtual ExternalTriggerResult OnChargeTrigger(int currentSiteId, LoopTask task, Car car) + { + // 默认返回失败,子类需重写已启用去充电触发功能 + return ExternalTriggerResult.Fail(); + } + + /// + /// 按钮盒触发处理接口 + /// 当任务的 StartType 为 ButtonBox 时,车辆到达当前站点后会调用此方法 + /// 子类重写此方法实现按钮盒触发的业务逻辑 + /// + /// 当前站点ID + /// 匹配的任务配置 + /// 到达的车辆 + /// 处理结果 + protected virtual ExternalTriggerResult OnButtonTrigger(int currentSiteId, LoopTask task, Car car) + { + // 默认返回失败,子类需重写以启用按钮盒触发功能 + return ExternalTriggerResult.Fail(); + } + + /// + /// 根据启动类型调用对应的子类触发接口 + /// + /// 启动类型 + /// 当前站点ID + /// 匹配的任务配置 + /// 到达的车辆 + /// 子类返回的处理结果 + private ExternalTriggerResult InvokeExternalTrigger(TaskStartType startType, int currentSiteId, LoopTask task, Car car) + { + return startType switch + { + TaskStartType.Api => OnApiTrigger(currentSiteId, task, car), + TaskStartType.Plc => OnPlcTrigger(currentSiteId, task, car), + TaskStartType.ButtonBox => OnButtonTrigger(currentSiteId, task, car), + TaskStartType.Charge => OnChargeTrigger(currentSiteId, task, car), + _ => ExternalTriggerResult.Fail() + }; + } + + + + #endregion + + #region 任务策略管理 + + /// + /// 从任务策略刷新并应用任务列表 + /// 读取配置文件内容并替换当前任务列表 + /// + public void ApplyTaskStrategy() + { + try + { + // 刷新策略数据 + TaskStrategy?.Refresh(); + var sourceTasks = TaskStrategy?.GetTasks(); + + if (sourceTasks == null) + return; + + lock (_tasksLock) + { + // 清空并重新加载任务 + Tasks.Clear(); + foreach (var task in sourceTasks) + { + Tasks.Add(task); + } + + // 触发任务替换事件 + TaskListChanged?.Invoke(this, new TaskListChangedEventArgs(TaskChangeType.Replaced, -1, null)); + + // 更新状态中的任务计数 + ((AbstractLoopMissionStatus)status).TaskCount = Tasks.Count; + } + + System.Diagnostics.Debug.WriteLine($"[AbstractLoopMission] ApplyTaskStrategy: 加载了 {Tasks.Count} 个任务"); + } + catch (Exception ex) + { + // 记录错误信息 + ((AbstractLoopMissionStatus)status).LastError = ex.Message; + System.Diagnostics.Debug.WriteLine($"[AbstractLoopMission] ApplyTaskStrategy error: {ex}"); + } + } + + /// + /// 任务策略配置文件变更处理 + /// + private void OnTaskStrategyChanged(object sender, EventArgs e) + { + try + { + ApplyTaskStrategy(); + System.Diagnostics.Debug.WriteLine("[AbstractLoopMission] OnTaskStrategyChanged: 配置文件已更新"); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[AbstractLoopMission] OnTaskStrategyChanged error: {ex}"); + } + } + + #endregion + + #region 核心业务逻辑 + + /// + /// 业务逻辑主循环 + /// 在 _logicThread 线程中执行,每 500ms 处理一次任务调度 + /// + protected virtual void ExecuteLogicLoop() + { + while (_logicRunning) + { + try + { + ProcessAutoLoopTasks(); + Thread.Sleep(LOGIC_LOOP_INTERVAL_MS); + } + catch (ThreadAbortException) + { + break; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[AbstractLoopMission] ExecuteLogicLoop error: {ex}"); + } + } + } + + /// + /// 处理所有任务(主调度入口) + /// 按顺序处理:自动循环任务 → 外部触发任务 → 分流点任务 → 汇合点任务 → 循环启动动作 + /// + protected virtual void ProcessAutoLoopTasks() + { + // 获取任务快照(避免长时间持锁) + List snapshot; + lock (_tasksLock) + { + snapshot = Tasks.ToList(); + } + + // 1. 处理自动循环任务(StartType=AutoLoop, Kind=Loop) + ProcessAutoLoopTypeTasks(snapshot); + + // 2. 处理外部触发任务(StartType=Api/Plc/ButtonBox/charge) + ProcessExternalTriggerTasks(snapshot); + + // 3. 处理自动分流点任务(StartType=AutoLoop, Kind=BranchPoint) + ProcessBranchPointTasks(snapshot); + + // 4. 处理自动汇合点任务(StartType=AutoLoop, Kind=JoinPoint) + ProcessJoinPointTasks(snapshot); + + // 5. 执行循环启动动作(处理站点默认目标、执行导航、异常恢复等) + LoopStartAction(); + } + + /// + /// 处理自动循环类型任务 + /// 筛选 StartType=AutoLoop 且 Kind=Loop 的任务,按优先级处理 + /// + /// 任务快照 + private void ProcessAutoLoopTypeTasks(List snapshot) + { + // 筛选自动循环任务并按优先级排序 + var autoTasks = snapshot + .Where(t => t.StartType == TaskStartType.AutoLoop && t.Kind == TaskKind.Loop) + .OrderByDescending(t => t.Priority) + .ToList(); + + foreach (var task in autoTasks) + { + try + { + // 查找到达当前站点的车辆 + var car = FindCarArrivedAtSite(task.CurrentStationId); + if (car == null) + continue; + + // 检查车辆是否可用(SelectCar 返回 1 表示可用) + if (Commons.SelectCar(car) != 1) + continue; + + // 流量控制检查 + if (!CheckTrafficControl(task.TargetStationId, task.TrafficControl)) + { + + Diagnosis.Post($"[AbstractLoopMission] AutoLoop: 目标站点 {task.TargetStationId} 流量已满,车辆 {car.name} 等待", "Loop-AutoLoop", true); + continue; + } + + // 分配目标站点 + AssignCarToTarget(car, task.TargetStationId); + Diagnosis.Post($"[AbstractLoopMission] AutoLoop: 车辆 {car.name} 从站点 {task.CurrentStationId} 自动分配到目标站点 {task.TargetStationId}", "Loop-AutoLoop", true); + + } + catch (Exception ex) + { + Diagnosis.Post($"[AbstractLoopMission] ProcessAutoLoopTypeTasks error: {ex}", "Loop-AutoLoop", true); + + } + } + } + + /// + /// 处理外部触发类型任务(API/PLC/ButtonBox) + /// 依次处理各类型的外部触发任务 + /// + /// 任务快照 + private void ProcessExternalTriggerTasks(List snapshot) + { + // 依次处理 API、PLC、ButtonBox 类型任务 + ProcessExternalTasksByType(snapshot, TaskStartType.Api); + ProcessExternalTasksByType(snapshot, TaskStartType.Plc); + ProcessExternalTasksByType(snapshot, TaskStartType.ButtonBox); + ProcessExternalTasksByType(snapshot, TaskStartType.Charge); + } + + /// + /// 按启动类型处理外部触发任务 + /// 处理普通循环任务、分流点任务、汇合点任务 + /// + /// 任务快照 + /// 启动类型 + private void ProcessExternalTasksByType(List snapshot, TaskStartType startType) + { + // 筛选指定启动类型的普通循环任务 + var externalTasks = snapshot + .Where(t => t.StartType == startType && t.Kind == TaskKind.Loop) + .OrderByDescending(t => t.Priority) + .ToList(); + + foreach (var task in externalTasks) + { + try + { + // 查找到达当前站点的车辆 + var car = FindCarArrivedAtSite(task.CurrentStationId); + if (car == null) + continue; + + // 检查车辆是否可用 + if (Commons.SelectCar(car) != 1) + continue; + + // 调用子类接口获取处理结果 + ExternalTriggerResult result = InvokeExternalTrigger(startType, task.CurrentStationId, task, car); + + // 子类返回失败则跳过 + if (result?.Success != true) + continue; + + // 确定目标站点:子类指定 > 配置文件 + int targetSiteId = result.CustomTargetSiteId ?? task.TargetStationId; + + // 流量控制检查 + if (!CheckTrafficControl(targetSiteId, task.TrafficControl)) + { + Diagnosis.Post($"[AbstractLoopMission] {startType}: 目标站点 {targetSiteId} 流量已满,车辆 {car.name} 等待", $"Loop-{startType}", true); + + continue; + } + + // 分配目标站点 + AssignCarToTarget(car, targetSiteId); + Diagnosis.Post($"[AbstractLoopMission] {startType}: 车辆 {car.name} 从站点 {task.CurrentStationId} 分配到目标站点 {targetSiteId}", $"Loop-{startType}", true); + + } + catch (Exception ex) + { + Diagnosis.Post($"[AbstractLoopMission] ProcessExternalTasksByType({startType}) error: {ex}", $"Loop-{startType}", true); + + } + } + + // 处理分流点类型的外部触发任务 + ProcessExternalBranchTasks(snapshot, startType); + + // 处理汇合点类型的外部触发任务 + ProcessExternalJoinTasks(snapshot, startType); + } + + /// + /// 处理外部触发的分流点任务 + /// 按当前站点分组,优先级排序,调用子类接口后分配目标 + /// + /// 任务快照 + /// 启动类型 + private void ProcessExternalBranchTasks(List snapshot, TaskStartType startType) + { + // 按当前站点分组 + var branchGroups = snapshot + .Where(t => t.Kind == TaskKind.BranchPoint && t.StartType == startType) + .GroupBy(t => t.CurrentStationId) + .ToList(); + + foreach (var group in branchGroups) + { + int currentSiteId = group.Key; + + // 查找到达当前站点的车辆 + var car = FindCarArrivedAtSite(currentSiteId); + if (car == null || Commons.SelectCar(car) != 1) + continue; + + // 按优先级排序 + var sortedTasks = group.OrderByDescending(t => t.Priority).ToList(); + + foreach (var task in sortedTasks) + { + // 调用子类接口 + ExternalTriggerResult result = InvokeExternalTrigger(startType, currentSiteId, task, car); + + if (result?.Success != true) + continue; + + // 确定目标:子类指定 > 按优先级选择流量允许的目标 + int targetSiteId = result.CustomTargetSiteId ?? SelectBranchTarget(task, snapshot); + + if (CheckTrafficControl(targetSiteId, task.TrafficControl)) + { + AssignCarToTarget(car, targetSiteId); + Diagnosis.Post($"[AbstractLoopMission] {startType} BranchPoint: 车辆 {car.name} 从分流点 {currentSiteId} 分配到目标 {targetSiteId}", $"BranchPoint-{startType}", true); + + break; // 分流点只分配一个目标 + } + } + } + } + + + + + /// + /// 处理外部触发的汇合点任务 + /// 按目标站点分组(汇合点),每组中的策略按优先级排列,排列后每个策略根据流量判断,最后采用接口返回结果 + /// + /// 任务快照 + /// 启动类型 + private void ProcessExternalJoinTasks(List snapshot, TaskStartType startType) + { + // 按目标站点分组(汇合点) + var joinGroups = snapshot + .Where(t => t.Kind == TaskKind.JoinPoint && t.StartType == startType) + .GroupBy(t => t.TargetStationId) + .ToList(); + + foreach (var group in joinGroups) + { + int targetSiteId = group.Key; + + // 按优先级降序排列组内任务 + var sortedTasks = group.OrderByDescending(t => t.Priority).ToList(); + + // 遍历排序后的任务,根据流量和接口返回结果处理 + foreach (var task in sortedTasks) + { + try + { + + // 查找到达当前站点的车辆 + var car = FindCarArrivedAtSite(task.CurrentStationId); + if (car == null) + continue; + + // 检查车辆是否可用 + if (Commons.SelectCar(car) != 1) + continue; + + + // 流量控制检查(优先判断,避免无效的接口调用) + if (!CheckTrafficControl(targetSiteId, task.TrafficControl)) + { + Diagnosis.Post($"[AbstractLoopMission] {startType} JoinPoint: 目标站点 {targetSiteId} 流量已满,跳过任务 {task.Id}", $"JoinPoint-{startType}", true); + continue; + } + + + // 调用子类接口获取处理结果 + ExternalTriggerResult result = InvokeExternalTrigger(startType, task.CurrentStationId, task, car); + + // 子类返回失败则跳过当前任务 + if (result?.Success != true) + continue; + + // 确定最终目标:子类指定 > 配置文件 + int finalTarget = result.CustomTargetSiteId ?? targetSiteId; + + // 如果子类指定了不同的目标,需要再次检查流量 + if (finalTarget != targetSiteId && !CheckTrafficControl(finalTarget, task.TrafficControl)) + { + Diagnosis.Post($"[AbstractLoopMission] {startType} JoinPoint: 子类指定目标站点 {finalTarget} 流量已满,车辆 {car.name} 等待", $"JoinPoint-{startType}", true); + continue; + } + + // 分配目标站点 + AssignCarToTarget(car, finalTarget); + Diagnosis.Post($"[AbstractLoopMission] {startType} JoinPoint: 车辆 {car.name} 从站点 {task.CurrentStationId} 汇入目标 {finalTarget}(优先级 {task.Priority})", $"JoinPoint-{startType}", true); + } + catch (Exception ex) + { + Diagnosis.Post($"[AbstractLoopMission] ProcessExternalJoinTasks({startType}) task {task.Id} error: {ex.Message}", $"JoinPoint-{startType}", true); + } + } + } + } + /// + /// 循环启动动作 + /// 处理站点配置的默认目标、执行路径规划导航、检测并处理脚本异常 + /// 注意:此方法不拆分,保持原有逻辑完整性 + /// + private void LoopStartAction() + { + try + { + foreach (var car in SimpleLib.GetAllCars()) + { + // 如果车辆可用且没有目标,尝试从站点配置读取默认目标 + if (Commons.SelectCar(car) == 1 && !car.tags.Contains("goalSite")) + { + var carSite = SimpleLib.GetSite(car.GetLastSite()); + if (carSite != null && carSite.fields.TryGetValue("goSite", out var dst)) + { + Commons.AddOrUpdateTag(car.tags, "goalSite", dst); + } + if (carSite != null && !car.tags.Contains("goalSite")) + { + var taskLine = FindBestTaskForCar((Car)car); + if (taskLine!=null && !taskLine.IsAtStartPoint && !taskLine.IsAtEndPoint) + { + Commons.AddOrUpdateTag(car.tags, "goalSite", taskLine.TargetSiteId.ToString()); + } + } + } + + // 如果车辆可用且有目标,执行导航 + if (Commons.SelectCar(car) == 1 && car.tags.Contains("goalSite")) + { + var goalSite = SimpleLib.GetAllSites() + .FirstOrDefault(s => car.tags.IsEqual("goalSite", s.id.ToString())); + var holdingSite=car.status.holdingLocks.FirstOrDefault(); + if (goalSite != null && holdingSite!=goalSite.id ) + { + _=GoSite(car, goalSite); + + } + else if (goalSite != null && holdingSite == goalSite.id) + { + // 已到达目标,清理 goalSite 标签 + car.tags.Remove("goalSite"); + car.tags.Remove("loopAssigned"); + } + + } + + // 以下处理声明了脚本异常自恢复能力的车辆(IScriptErrorRecoverable,当前为 Kiva) + if (!(car is IScriptErrorRecoverable recoverable) || !(car is Car mcar)) + continue; + + // 检测脚本异常状态:车辆被占用但脚本状态为 Error 或 Bad + LadderLogic.TriggerOnce( + mcar.tags.Contains("occupied") && + (mcar.status.programs.printStatus().Contains("Error") || mcar.status.programs.printStatus().Contains("Bad")), + SCRIPT_ERROR_TRIGGER_DELAY_MS, + () => + { + // 获取车辆最后持有的站点锁 + var lastHoldingLocks = car.status.holdingLocks.First(); + var site = SimpleLib.GetSite(lastHoldingLocks); + + // 标记站点不可用 + site.MakeAllCarsUnavailable(); + + // 禁止车辆调度 + mcar.NoSchedule(true); + Diagnosis.Post($"errStatus ", "NoSchedule", true); + + // 重置车辆站点ID + mcar.siteID = -1; + + // 更新车辆使用状态 + mcar.status.usage.AddUsage("base", new CarUsage.CarUsageInfo() + { + scheduling = false, + refreshing = false + }); + + // 设置车辆状态为返厂检修 + mcar.lstatus = "返厂检修"; + + // 清理车辆标签 + Commons.DeleteTag(mcar.tags, "occupied"); + // Commons.DeleteTag(mcar.tags, "goalSite"); + + // 执行车辆重置 + ((Car)car).Intercept((_) => + { + recoverable.RecoverReset(lastHoldingLocks); + }); + }, + mcar.id + ); + } + } + catch (Exception e) + { + Diagnosis.Post($"loop mission error {ExceptionFormatter.FormatEx(e)}"); + } + } + + + /// + /// 导航车辆到目标站点 + /// 创建路径规划并执行移动任务 + /// + /// 车辆 + /// 目标站点 + /// 动作参数,默认为 "/" + /// 是否倒车,默认为 false + public async Task GoSite(AbstractCar car, Site targetSite, string action = "/", bool reverse = false) + { + + try + { + // 创建路径规划 + var plan = new SegmentPlan() { usingCar = car }; + plan.fields["reverse"] = reverse.ToString(); + plan.fields["action"] = action; + plan.fields["allow_destination_on_route"] = "true"; + + // 查找从当前位置到目标站点的路径 + plan.FindRoute(SimpleLib.GetSite(car.GetLastSite()), targetSite); + + // 编译并执行移动脚本 + var program = plan.Compile("move"); + + // 标记车辆为占用状态 + car.tags.Add("occupied", $"go{targetSite.id}"); + + Console.WriteLine($">>Script:{program.script}"); + + // 等待任务完成 + var tsk = program.Queue(); + await tsk; + + // 任务完成后清理标签 + car.tags.Remove("occupied"); + car.tags.Remove("goalSite"); + car.tags.Remove("loopAssigned"); + } + catch (Exception ex) + { + // 记录异常并等待后重试 + Diagnosis.Post( + $"{car.name}循环任务报错{ExceptionFormatter.FormatEx(ex)}--去往循环点id:{targetSite.id},name:{targetSite.name}", + $"重新执行循环任务", + true + ); + Thread.Sleep(ERROR_RECOVERY_DELAY_MS); + } + } + + /// + /// 处理自动分流点任务 + /// 筛选 StartType=AutoLoop 且 Kind=BranchPoint 的任务 + /// 按当前站点分组,优先级排序,选择流量允许的目标 + /// + /// 任务列表 + protected virtual void ProcessBranchPointTasks(List allTasks) + { + // 按当前站点分组 + var branchGroups = allTasks + .Where(t => t.Kind == TaskKind.BranchPoint && t.StartType == TaskStartType.AutoLoop) + .GroupBy(t => t.CurrentStationId) + .ToList(); + + foreach (var group in branchGroups) + { + int currentSiteId = group.Key; + + // 查找到达当前站点的车辆 + var car = FindCarArrivedAtSite(currentSiteId); + if (car == null || Commons.SelectCar(car) != 1) + continue; + + // 按优先级排序,选择流量允许的目标 + var sortedTasks = group.OrderByDescending(t => t.Priority).ToList(); + + foreach (var task in sortedTasks) + { + if (CheckTrafficControl(task.TargetStationId, task.TrafficControl)) + { + AssignCarToTarget(car, task.TargetStationId); + Diagnosis.Post($"[AbstractLoopMission] BranchPoint: 车辆 {car.name}-{car.id} 从分流点 {currentSiteId} 分配到目标 {task.TargetStationId}(优先级 {task.Priority})", $"BranchPoint-AutoLoop", true); + + break; // 分流点只分配一个目标 + } + } + } + } + + /// + /// 处理自动汇合点任务 + /// 筛选 StartType=AutoLoop 且 Kind=JoinPoint 的任务 + /// 按目标站点分组,优先级排序,选择有车在站的最高优先级任务 + /// + /// 任务列表 + protected virtual void ProcessJoinPointTasks(List allTasks) + { + // 按目标站点分组(汇合点) + var joinGroups = allTasks + .Where(t => t.Kind == TaskKind.JoinPoint && t.StartType == TaskStartType.AutoLoop) + .GroupBy(t => t.TargetStationId) + .ToList(); + + foreach (var group in joinGroups) + { + int targetSiteId = group.Key; + + // 检查汇合点流量控制 + var firstTask = group.First(); + if (!CheckTrafficControl(targetSiteId, firstTask.TrafficControl)) + continue; + + // 按优先级排序,选择有车在站的最高优先级任务 + var sortedTasks = group.OrderByDescending(t => t.Priority).ToList(); + + foreach (var task in sortedTasks) + { + var car = FindCarArrivedAtSite(task.CurrentStationId); + + if (car != null && Commons.SelectCar(car) == 1) + { + AssignCarToTarget(car, targetSiteId); + Diagnosis.Post($"[AbstractLoopMission] JoinPoint: 车辆 {car.name} 从站点 {task.CurrentStationId} 汇入目标 {targetSiteId}(优先级 {task.Priority})", $"JoinPoint-AutoLoop", true); + + //break; // 汇合点一次只放行一辆车 + } + } + } + } + + /// + /// 分流点目标选择 + /// 按优先级选择流量允许的目标站点 + /// + /// 当前分流任务 + /// 所有任务列表 + /// 选中的目标站点ID + protected virtual int SelectBranchTarget(LoopTask branchTask, List allTasks) + { + // 查找同一当前站点的所有分流目标 + var branches = allTasks + .Where(t => t.Kind == TaskKind.BranchPoint && t.CurrentStationId == branchTask.CurrentStationId) + .OrderByDescending(t => t.Priority) + .ToList(); + + // 按优先级选择流量允许的目标 + foreach (var branch in branches) + { + if (CheckTrafficControl(branch.TargetStationId, branch.TrafficControl)) + { + return branch.TargetStationId; + } + } + + // 默认返回原任务目标 + return branchTask.TargetStationId; + } + + /// + /// 汇合点通行判断 + /// 检查当前任务是否有最高优先级通行权(是否有更高优先级的车在等待) + /// + /// 当前汇合任务 + /// 所有任务列表 + /// true=可以通行,false=需要等待更高优先级的车 + protected virtual bool CanJoinPass(LoopTask joinTask, List allTasks) + { + // 查找同一目标站点的所有汇合来源 + var joinSources = allTasks + .Where(t => t.Kind == TaskKind.JoinPoint && t.TargetStationId == joinTask.TargetStationId) + .OrderByDescending(t => t.Priority) + .ToList(); + + // 检查是否有更高优先级的任务且其站点有空闲车等待 + foreach (var source in joinSources) + { + if (source.Priority > joinTask.Priority) + { + var higherPriorityCar = FindCarArrivedAtSite(source.CurrentStationId); + if (higherPriorityCar != null && IsCarIdle(higherPriorityCar)) + { + return false; // 有更高优先级的车等待,当前车需要让行 + } + } + } + + return true; + } + + /// + /// 为车辆分配目标站点 + /// 设置车辆的 goalSite 标签和 loopAssigned 时间戳 + /// + /// 车辆 + /// 目标站点ID + protected virtual void AssignCarToTarget(Car car, int targetSiteId) + { + if (car == null) + return; + + try + { + string targetIdStr = targetSiteId.ToString(); + + // 设置或更新目标站点标签 + if (car.tags.ContainsKey("goalSite")) + car.tags["goalSite"] = targetIdStr; + else + car.tags.Add("goalSite", targetIdStr); + + // 记录分配时间(用于调试和监控) + if (!car.tags.ContainsKey("loopAssigned")) + car.tags.Add("loopAssigned", DateTime.Now.ToString("HH:mm:ss")); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[AbstractLoopMission] AssignCarToTarget error: {ex}"); + } + } + + #endregion + + #region 线程生命周期 + + /// + /// 启动策略同步线程 + /// 每秒同步一次配置文件,自动更新任务列表 + /// + public virtual void StartLoop() + { + if (_strategyRunning) + return; + + _strategyRunning = true; + _strategyThread = new Thread(() => + { + while (_strategyRunning) + { + try + { + ApplyTaskStrategy(); + Thread.Sleep(STRATEGY_SYNC_INTERVAL_MS); + } + catch (ThreadAbortException) + { + break; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[AbstractLoopMission] Strategy loop error: {ex}"); + } + } + }) + { + Name = "AbstractLoopMission_Strategy", + IsBackground = true + }; + _strategyThread.Start(); + + status.status = "策略同步已启动"; + System.Diagnostics.Debug.WriteLine("[AbstractLoopMission] StartLoop: 策略同步线程已启动"); + } + + /// + /// 启动业务逻辑线程 + /// 每 500ms 处理一次任务调度 + /// + public virtual void StartLogicLoop() + { + if (_logicRunning) + return; + + _logicRunning = true; + _logicThread = new Thread(ExecuteLogicLoop) + { + Name = "AbstractLoopMission_Logic", + IsBackground = true + }; + _logicThread.Start(); + + status.status = "业务逻辑已启动"; + System.Diagnostics.Debug.WriteLine("[AbstractLoopMission] StartLogicLoop: 业务逻辑线程已启动"); + } + + /// + /// 停止策略同步线程 + /// + public virtual void StopLoop() + { + try + { + _strategyRunning = false; + _strategyThread?.Join(2000); + _strategyThread = null; + System.Diagnostics.Debug.WriteLine("[AbstractLoopMission] StopLoop: 策略同步线程已停止"); + } + catch { } + } + + /// + /// 停止业务逻辑线程 + /// + public virtual void StopLogicLoop() + { + try + { + _logicRunning = false; + _logicThread?.Join(2000); + _logicThread = null; + System.Diagnostics.Debug.WriteLine("[AbstractLoopMission] StopLogicLoop: 业务逻辑线程已停止"); + } + catch { } + } + + /// + /// 启动所有线程(策略同步 + 业务逻辑) + /// + public virtual void StartAll() + { + // ApplyTaskStrategy(); + MarkTaskStartSitesAsTerminal(); + StartLoop(); + StartLogicLoop(); + status.status = "已启动"; + } + + /// + /// 将任务策略中的起始站点标记为 terminal=true + /// + private void MarkTaskStartSitesAsTerminal() + { + List startSiteIds; + lock (_tasksLock) + { + startSiteIds = Tasks + .Select(t => t.CurrentStationId) + .Where(id => id > 0) + .Distinct() + .ToList(); + } + + foreach (var siteId in startSiteIds) + { + var site = SimpleLib.GetSite(siteId); + if (site == null) + continue; + + Commons.AddOrUpdateSiteField(site, "terminal", "true"); + } + } + + /// + /// 停止所有线程 + /// + public virtual void StopAll() + { + StopLoop(); + StopLogicLoop(); + status.status = "已停止"; + } + + /// + /// 释放资源 + /// 清理触发器适配器、停止所有线程、取消策略订阅 + /// + public void Dispose() + { + // 清理触发器适配器 + foreach (var adapter in _adapters.ToArray()) + { + try + { + adapter?.Dispose(); + } + catch { } + } + _adapters.Clear(); + + // 停止所有线程 + StopAll(); + + // 取消策略订阅 + if (_taskStrategy is JsonFileTaskStrategy jsonStrategy) + { + jsonStrategy.Changed -= OnTaskStrategyChanged; + jsonStrategy.DisposeWatcher(); + } + + System.Diagnostics.Debug.WriteLine("[AbstractLoopMission] Dispose: 资源已释放"); + } + + #endregion + + #region 辅助类型 + + /// + /// 任务列表变更事件参数 + /// + public class TaskListChangedEventArgs : EventArgs + { + /// 变更类型 + public TaskChangeType ChangeType { get; } + + /// 变更的任务索引(Replaced 时为 -1) + public int Index { get; } + + /// 变更的任务(Replaced 时为 null) + public LoopTask Task { get; } + + /// + /// 创建任务列表变更事件参数 + /// + /// 变更类型 + /// 任务索引 + /// 任务对象 + public TaskListChangedEventArgs(TaskChangeType changeType, int index, LoopTask task) + { + ChangeType = changeType; + Index = index; + Task = task; + } + } + + /// + /// 任务变更类型枚举 + /// + public enum TaskChangeType + { + /// 添加任务 + Added, + /// 更新任务 + Updated, + /// 移除任务 + Removed, + /// 替换全部任务 + Replaced + } + + /// + /// 循环点配置类 + /// 用于定义循环点的规则和属性 + /// + public class LoopPoint + { + /// 唯一标识 + public string Id { get; set; } = Guid.NewGuid().ToString("N"); + + /// 名称 + public string Name { get; set; } = string.Empty; + + /// 自定义标签集合 + public Dictionary Tags { get; } = new Dictionary(); + + /// 进入规则 + public IEnterRule EnterRule { get; set; } + + /// 退出规则 + public IExitRule ExitRule { get; set; } + + /// 汇合规则 + public IJoinRule JoinRule { get; set; } + + /// 分流规则 + public IBranchRule BranchRule { get; set; } + } + + /// + /// JSON 文件任务策略类 + /// 从 tasklist.json 读取任务配置,支持文件变更自动刷新 + /// + public class JsonFileTaskStrategy : ITaskStrategy, IDisposable + { + /// JSON 文件路径 + public string JsonPath { get; set; } + + /// 任务缓存列表 + private List _cache = new List(); + + /// 文件系统监听器 + private FileSystemWatcher _watcher; + + /// 配置变更事件 + public event EventHandler Changed; + + /// + /// 创建 JSON 文件任务策略 + /// + /// JSON 文件路径(null 时使用默认路径 tasklist.json) + public JsonFileTaskStrategy(string jsonPath = null) + { + JsonPath = string.IsNullOrWhiteSpace(jsonPath) + ? Path.Combine(Application.StartupPath, "tasklist.json") + : jsonPath; + + EnsureWatcher(); + Refresh(); + } + + /// + /// 获取任务列表 + /// + /// 任务列表副本 + public IEnumerable GetTasks() + { + return _cache.ToArray(); + } + + /// + /// 刷新任务列表(从文件重新读取) + /// + public void Refresh() + { + try + { + if (!File.Exists(JsonPath)) + { + _cache = new List(); + return; + } + + string json = File.ReadAllText(JsonPath); + _cache = JsonConvert.DeserializeObject>(json) ?? new List(); + } + catch + { + _cache = new List(); + } + } + + /// + /// 确保文件监听器已启动 + /// + public void EnsureWatcher() + { + try + { + if (_watcher != null) + return; + + string directory = Path.GetDirectoryName(JsonPath); + string fileName = Path.GetFileName(JsonPath); + + if (string.IsNullOrEmpty(directory)) + return; + + _watcher = new FileSystemWatcher(directory, fileName) + { + NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size | NotifyFilters.FileName + }; + + _watcher.Changed += (s, e) => OnFileChanged(); + _watcher.Renamed += (s, e) => OnFileChanged(); + _watcher.EnableRaisingEvents = true; + } + catch { } + } + + private void OnFileChanged() + { + try + { + Thread.Sleep(50); + Refresh(); + Changed?.Invoke(this, EventArgs.Empty); + } + catch { } + } + + public void DisposeWatcher() + { + try + { + if (_watcher != null) + { + _watcher.EnableRaisingEvents = false; + _watcher.Dispose(); + _watcher = null; + } + } + catch { } + } + + public void Dispose() + { + DisposeWatcher(); + } + } + + #endregion + + #region 路径查找辅助方法 + + /// + /// 查找从起点到终点之间的所有站点(基于轨道连接的广度优先搜索) + /// + /// 起点站点ID + /// 终点站点ID + /// 从起点到终点的站点ID列表(包含起点和终点),未找到路径返回空列表 + /// + /// + /// // 查找站点100到站点200之间的所有站点 + /// var sites = GetSitesBetween(100, 200); + /// // 返回: [100, 150, 180, 200] + /// + /// + protected List GetSitesBetween(int startSiteId, int endSiteId) + { + if (startSiteId == endSiteId) + return new List { startSiteId }; + + try + { + // 构建站点邻接表 + var adjacency = BuildSiteAdjacency(); + + // 广度优先搜索 + var visited = new HashSet(); + var queue = new Queue>(); + queue.Enqueue(new List { startSiteId }); + visited.Add(startSiteId); + + while (queue.Count > 0) + { + var currentPath = queue.Dequeue(); + int currentSite = currentPath[currentPath.Count - 1]; + + // 找到终点,返回路径 + if (currentSite == endSiteId) + return currentPath; + + // 获取相邻站点 + if (!adjacency.TryGetValue(currentSite, out var neighbors)) + continue; + + foreach (var neighbor in neighbors) + { + if (visited.Contains(neighbor)) + continue; + + visited.Add(neighbor); + var newPath = new List(currentPath) { neighbor }; + queue.Enqueue(newPath); + } + } + + // 未找到路径 + return new List(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"[AbstractLoopMission] GetSitesBetween({startSiteId}, {endSiteId}) error: {ex.Message}"); + return new List(); + } + } + + /// + /// 查找从起点到终点之间的所有站点对象 + /// + /// 起点站点ID + /// 终点站点ID + /// 从起点到终点的站点对象列表 + protected List GetSiteObjectsBetween(int startSiteId, int endSiteId) + { + var siteIds = GetSitesBetween(startSiteId, endSiteId); + var result = new List(); + + foreach (var siteId in siteIds) + { + var site = SimpleLib.GetSite(siteId); + if (site != null) + result.Add(site); + } + + return result; + } + + /// + /// 构建站点邻接表(基于轨道连接,考虑轨道方向) + /// + /// 邻接表:站点ID -> 可达的相邻站点ID列表 + private Dictionary> BuildSiteAdjacency() + { + var adjacency = new Dictionary>(); + + foreach (var track in SimpleLib.GetAllTracks()) + { + int siteA = track.siteA; + int siteB = track.siteB; + + // 根据轨道方向添加邻接关系 + // direction: 0=双向, 1=A->B, 2=B->A + switch (track.direction) + { + case 0: // 双向 + AddAdjacency(adjacency, siteA, siteB); + AddAdjacency(adjacency, siteB, siteA); + break; + case 1: // A -> B + AddAdjacency(adjacency, siteA, siteB); + break; + case 2: // B -> A + AddAdjacency(adjacency, siteB, siteA); + break; + default: + AddAdjacency(adjacency, siteA, siteB); + AddAdjacency(adjacency, siteB, siteA); + break; + } + } + + return adjacency; + } + + /// + /// 向邻接表添加边 + /// + private void AddAdjacency(Dictionary> adjacency, int from, int to) + { + if (!adjacency.ContainsKey(from)) + adjacency[from] = new HashSet(); + + adjacency[from].Add(to); + } + + /// + /// 检查路径上是否有其他车辆(不包含起点和终点) + /// + /// 起点站点ID + /// 终点站点ID + /// 排除的车辆(通常是当前车辆) + /// true=路径上有车辆,false=路径畅通 + protected bool HasCarOnPath(int startSiteId, int endSiteId, Car excludeCar = null) + { + var pathSites = GetSitesBetween(startSiteId, endSiteId); + + // 排除起点和终点 + var middleSites = pathSites + .Skip(1) + .Take(pathSites.Count - 2) + .ToList(); + + if (middleSites.Count == 0) + return false; + + foreach (var car in SimpleLib.GetAllCars().OfType()) + { + if (excludeCar != null && car == excludeCar) + continue; + + if (car?.status?.holdingLocks == null) + continue; + + // 检查车辆是否在路径中间站点 + foreach (var siteId in middleSites) + { + if (car.status.holdingLocks.Contains(siteId)) + return true; + } + } + + return false; + } + + /// + /// 获取路径上的所有车辆 + /// + /// 起点站点ID + /// 终点站点ID + /// 是否包含起点和终点的车辆 + /// 路径上的车辆列表 + protected List GetCarsOnPath(int startSiteId, int endSiteId, bool includeEndpoints = false) + { + var pathSites = GetSitesBetween(startSiteId, endSiteId); + + if (!includeEndpoints && pathSites.Count > 2) + { + pathSites = pathSites + .Skip(1) + .Take(pathSites.Count - 2) + .ToList(); + } + + var carsOnPath = new List(); + + foreach (var car in SimpleLib.GetAllCars().OfType()) + { + if (car?.status?.holdingLocks == null) + continue; + + foreach (var siteId in pathSites) + { + if (car.status.holdingLocks.Contains(siteId)) + { + carsOnPath.Add(car); + break; + } + } + } + + return carsOnPath; + } + + /// + /// 计算两站点之间的路径长度(经过的站点数) + /// + /// 起点站点ID + /// 终点站点ID + /// 路径长度(站点数),未找到路径返回 -1 + protected int GetPathLength(int startSiteId, int endSiteId) + { + var path = GetSitesBetween(startSiteId, endSiteId); + return path.Count > 0 ? path.Count : -1; + } + + #endregion + + #region 任务策略匹配 + + /// + /// 路径缓存(避免重复计算) + /// + [JsonIgnore] + private readonly Dictionary<(int, int), List> _pathCache = new Dictionary<(int, int), List>(); + + /// + /// 路径缓存锁 + /// + [JsonIgnore] + private readonly object _pathCacheLock = new object(); + + /// + /// 根据车辆当前站点匹配最优任务策略 + /// 匹配逻辑: + /// + /// 遍历所有任务策略,获取每个策略从当前点到目标点的完整路径 + /// 检查车辆当前站点是否在该路径上 + /// 返回包含当前站点且优先级最高的策略 + /// + /// + /// 车辆 + /// 最优匹配结果,无匹配返回 null + protected TaskPathMatchResult FindBestTaskForCar(Car car) + { + if (car?.status?.holdingLocks == null || car.status.holdingLocks.Length == 0) + return null; + + int currentSiteId = car.status.holdingLocks[0]; + return FindBestTaskForSite(currentSiteId); + } + + /// + /// 根据站点ID匹配最优任务策略 + /// 遍历所有任务,找出包含该站点的路径,返回优先级最高的任务 + /// + /// 当前站点ID + /// 最优匹配结果,无匹配返回 null + protected TaskPathMatchResult FindBestTaskForSite(int siteId) + { + List snapshot; + lock (_tasksLock) + { + snapshot = Tasks.Where(T=>T.IsViaPoint).ToList(); + } + + var matchResults = new List(); + + foreach (var task in snapshot) + { + // 获取任务的完整路径(从当前点到目标点) + var fullPath = GetSitesBetweenCached(task.CurrentStationId, task.TargetStationId); + + if (fullPath.Count == 0) + continue; + + // 检查站点是否在路径上 + int indexInPath = fullPath.IndexOf(siteId); + if (indexInPath < 0) + continue; + + + // 创建匹配结果 + var result = new TaskPathMatchResult + { + Task = task, + CurrentSiteId = siteId, + FullPath = fullPath, + IndexInPath = indexInPath, + RemainingPath = fullPath.Skip(indexInPath).ToList(), + DistanceToTarget = fullPath.Count - indexInPath - 1, + IsAtStartPoint = (indexInPath == 0), + IsAtEndPoint = (indexInPath == fullPath.Count - 1), + IsOnMiddlePath = (indexInPath > 0 && indexInPath < fullPath.Count - 1) + }; + + matchResults.Add(result); + } + + if (matchResults.Count == 0) + return null; + + // 按匹配优先级排序: + // 1. 起点匹配优先 + // 2. 任务优先级高的优先 + // 3. 距离目标近的优先 + var bestMatch = matchResults.Where(r=>!r.IsAtEndPoint && !r.IsAtStartPoint ) + .OrderByDescending(r => r.IsAtStartPoint ? 1 : 0) // 起点匹配优先 + .ThenByDescending(r => r.Task.Priority) // 任务优先级高的优先 + .ThenBy(r => r.DistanceToTarget) // 距离目标近的优先 + .FirstOrDefault(); + Diagnosis.Post($"[AbstractLoopMission] 小车获取到的任务策略 {bestMatch.ToString()} )", $"路径中间点初始化", true); + return bestMatch; + } + + /// + /// 根据站点ID查找所有匹配的任务策略 + /// 返回所有包含该站点的任务,按优先级排序 + /// + /// 站点ID + /// 匹配结果列表(按优先级降序) + protected List FindAllTasksForSite(int siteId) + { + List snapshot; + lock (_tasksLock) + { + snapshot = Tasks.ToList(); + } + + var matchResults = new List(); + + foreach (var task in snapshot) + { + // 获取任务的完整路径 + var fullPath = GetSitesBetweenCached(task.CurrentStationId, task.TargetStationId); + + if (fullPath.Count == 0) + continue; + + // 检查站点是否在路径上 + int indexInPath = fullPath.IndexOf(siteId); + if (indexInPath < 0) + continue; + + var result = new TaskPathMatchResult + { + Task = task, + CurrentSiteId = siteId, + FullPath = fullPath, + IndexInPath = indexInPath, + RemainingPath = fullPath.Skip(indexInPath).ToList(), + DistanceToTarget = fullPath.Count - indexInPath - 1, + IsAtStartPoint = (indexInPath == 0), + IsAtEndPoint = (indexInPath == fullPath.Count - 1), + IsOnMiddlePath = (indexInPath > 0 && indexInPath < fullPath.Count - 1) + }; + + matchResults.Add(result); + } + + // 按优先级排序 + return matchResults + .OrderByDescending(r => r.IsAtStartPoint ? 1 : 0) + .ThenByDescending(r => r.Task.Priority) + .ThenBy(r => r.DistanceToTarget) + .ToList(); + } + + /// + /// 获取车辆应该前往的下一个目标站点 + /// 根据最优匹配策略返回目标站点ID + /// + /// 车辆 + /// 目标站点ID,无匹配返回 -1 + protected int GetRecommendedTargetForCar(Car car) + { + var match = FindBestTaskForCar(car); + return match?.Task?.TargetStationId ?? -1; + } + + /// + /// 获取车辆的下一个中间站点 + /// 返回当前位置的下一个路径节点 + /// + /// 车辆 + /// 下一站点ID,无匹配返回 -1 + protected int GetNextSiteForCar(Car car) + { + var match = FindBestTaskForCar(car); + if (match?.RemainingPath == null || match.RemainingPath.Count < 2) + return -1; + + return match.RemainingPath[1]; + } + + /// + /// 获取缓存的路径(避免重复计算) + /// + private List GetSitesBetweenCached(int startSiteId, int endSiteId) + { + var key = (startSiteId, endSiteId); + + lock (_pathCacheLock) + { + if (_pathCache.TryGetValue(key, out var cached)) + return new List(cached); + + var path = GetSitesBetween(startSiteId, endSiteId); + _pathCache[key] = path; + return new List(path); + } + } + + /// + /// 清除路径缓存 + /// 当任务策略变更或地图变更时调用 + /// + protected void ClearPathCache() + { + lock (_pathCacheLock) + { + _pathCache.Clear(); + } + } + + /// + /// 根据任务ID查找任务 + /// + /// 任务ID + /// 任务对象,未找到返回 null + protected LoopTask FindTaskById(int taskId) + { + lock (_tasksLock) + { + return Tasks.FirstOrDefault(t => t.Id == taskId); + } + } + + /// + /// 判断车辆是否在指定任务的路径上 + /// + /// 车辆 + /// 任务 + /// 是否在路径上 + protected bool IsCarOnTaskPath(Car car, LoopTask task) + { + if (car?.status?.holdingLocks == null || car.status.holdingLocks.Length == 0) + return false; + + int currentSiteId = car.status.holdingLocks[0]; + var path = GetSitesBetweenCached(task.CurrentStationId, task.TargetStationId); + + return path.Contains(currentSiteId); + } + + #endregion + + #region 任务匹配结果类型 + + /// + /// 任务路径匹配结果 + /// + public class TaskPathMatchResult + { + /// 匹配的任务 + public LoopTask Task { get; set; } + + /// 车辆当前站点ID + public int CurrentSiteId { get; set; } + + /// 完整路径(从任务起点到终点) + public List FullPath { get; set; } = new List(); + + /// 当前站点在路径中的索引 + public int IndexInPath { get; set; } + + /// 剩余路径(从当前站点到终点) + public List RemainingPath { get; set; } = new List(); + + /// 到目标的距离(剩余站点数) + public int DistanceToTarget { get; set; } + + /// 是否在任务起点 + public bool IsAtStartPoint { get; set; } + + /// 是否在任务终点 + public bool IsAtEndPoint { get; set; } + + /// 是否在路径中间 + public bool IsOnMiddlePath { get; set; } + + /// 任务ID + public int TaskId => Task?.Id ?? 0; + + /// 任务优先级 + public int TaskPriority => Task?.Priority ?? 0; + + /// 目标站点ID + public int TargetSiteId => Task?.TargetStationId ?? -1; + + /// 下一个站点ID(当前站点的下一跳) + public int NextSiteId => RemainingPath.Count > 1 ? RemainingPath[1] : -1; + + /// 路径进度百分比 + public double ProgressPercent => FullPath.Count > 1 + ? (double)IndexInPath / (FullPath.Count - 1) * 100 + : 0; + + /// + /// 获取匹配信息描述 + /// + public override string ToString() + { + string position = IsAtStartPoint ? "起点" : (IsAtEndPoint ? "终点" : "中间"); + return $"任务[ID={TaskId}, {Task?.CurrentStationId}->{Task?.TargetStationId}] " + + $"优先级={TaskPriority}, 当前={CurrentSiteId}({position}), " + + $"进度={ProgressPercent:F1}%, 剩余={DistanceToTarget}站, " + + $"下一站={NextSiteId}"; + } + } + + #endregion + + private LoopViewer lv; + + + [MethodMember(Name = "任务管理", Description = "任务管理")] + public void Print() + { + lv = new LoopViewer(); + lv.Show(); + } + + [MethodMember(Name = "启动环线", Description = "启动环线")] + public void Start() + { + StartAll(); + } + + [MethodMember(Name = "停止环线", Description = "停止环线")] + public void Stop() + { + StopAll(); + } + + } +} diff --git a/StandardScene.Core/Chained/ChainedDeliveryMission.cs b/StandardScene.Core/Chained/ChainedDeliveryMission.cs new file mode 100644 index 0000000..3ee03a6 --- /dev/null +++ b/StandardScene.Core/Chained/ChainedDeliveryMission.cs @@ -0,0 +1,1509 @@ +using IoTClient.Common.Helpers; +using Newtonsoft.Json; +using SimpleLite; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.Library; +using SimpleCore.PropType; +using SimpleCore.Traffic; +using StandardScene.CarTypes; +using StandardScene.CommonTools; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Numerics; +using System.Threading; +using System.Threading.Tasks; + +namespace StandardScene.Chained +{ + /// + /// 抽象链式搬运任务类 + /// 实现AGV搬运任务的核心调度逻辑,支持任务链式执行、智能调度、路径规划、冲突避让等功能 + /// 可以做取满放空操作 + /// + public abstract class ChainedDeliveryMission:Mission + { + #region Parameters / Status + /// + /// 链式搬运任务参数配置类 + /// + private class ChainedDeliveryParams + { + /// + /// 是否启用打断正在去避让点的小车功能 + /// + public bool EnableBlockStandby { get; } = true; + + /// + /// 是否启用紧密任务链模式 + /// true: 链式搬运任务可以同时启动(前序任务开始时后续任务即可开始),提高效率但可能造成死锁 + /// false: 前序任务必须完成后,后续任务才能开始,更安全但效率较低 + /// + public bool TightDeliveryChain { get; } = true; + } + + /// + /// 搬运任务状态统计类 + /// 记录任务执行过程中的各种统计信息 + /// + public class DeliveryMissionStatus : MissionStatus + { + /// 排队等待执行的任务数量 + public int Enqueued; + /// 已完成的任务数量 + public int Performed; + /// 每小时作业数(Jobs Per Hour),用于衡量系统吞吐量 + public double Jph; + /// 淤积任务信息字符串,格式:任务ID:淤积次数 + public string StuckInfo = "/"; + /// 当前淤积的任务数量(无法执行的任务) + public int StuckNum; + + /// + /// 创建后,等待时间超过该阈值的任务,必须被优先安排执行。单位为秒。 + /// + public double MustArrangeThreshold = 300; + } + + /// + /// 继承自基类的任务状态属性,用于记录搬运任务的执行状态并在界面显示。 + /// + public override MissionStatus status { get; set; } = new DeliveryMissionStatus(); + + /// + /// 允许任务打断正在去避让点的小车,使其承接该任务。 + /// + public bool EnableBlockStandby; + #endregion + + #region Delivery model + + /// + /// 搬运任务状态枚举 + /// + public enum DeliveryStatus + { + /// 等待执行 + Waiting = 0, + /// 取货中 + Fetching = 1, + /// 放货中 + Putting = 2, + /// 已完成 + Finished = 3, + /// 已取消 + Canceled = 4, + /// 已终止(执行过程中被中断) + Terminated = 5, + /// 错误 + Error = 6, + /// 挂起 + Suspended = 7, + } + + /// + /// 重构版 Delivery:字段与原 AbstractDelivery 保持接近,便于迁移; + /// 状态读写统一走 syncStatus 锁,避免竞态。 + /// + public abstract class Delivery + { + /// 雪花算法 ID 生成器(所有 Delivery 共享一份) + private static readonly SnowflakeIdGenerator IdGenerator = + new SnowflakeIdGenerator(workerId: 1, datacenterId: 1); + + /// 任务唯一标识ID(雪花算法,Base62编码) + public string Id { get; set; } = IdGenerator.NextIdBase62(); + /// 外部系统传入的任务ID + public string TaskId = string.Empty; + + /// 物料长度(毫米),用于包络约束 + public float MaterialLength = -1; + /// 物料宽度(毫米),用于包络约束 + public float MaterialWidth = -1; + + /// + /// 任务启动条件函数,返回true时任务才能开始执行 + /// 可用于实现复杂的前置条件判断 + /// + public Func StartCondition = null; + + // ========== 任务回调函数 ========== + /// 任务失败时的回调函数 + [JsonIgnore] public Action Failed; + /// 放货完成时的回调函数 + [JsonIgnore] public Action DonePut; + /// 取货完成时的回调函数 + [JsonIgnore] public Action DoneFetch; + /// 整个任务完成时的回调函数 + [JsonIgnore] public Action DoneMission; + /// 任务开始执行时的回调函数 + [JsonIgnore] public Action OnStart; + /// 任务终止时的回调函数 + [JsonIgnore] public Func> OnTerminated; + + // ========== 任务回调配置(可持久化) ========== + /// 是否在任务开始时上报回调 + public bool ReportOnStarted; + /// 是否在取货完成时上报回调 + public bool ReportOnFetched; + /// 是否在放货完成时上报回调 + public bool ReportOnPut; + /// 是否在任务最终完成时上报回调 + public bool ReportOnFinished; + /// 是否在任务失败时上报回调 + public bool ReportOnFailed; + /// 是否在任务被终止/暂停时上报回调 + public bool ReportOnTerminated; + + /// OnStart 事件绑定的回调 key 列表 + public List OnStartCallbackKeys { get; set; } = new(); + /// DoneFetch 事件绑定的回调 key 列表 + public List DoneFetchCallbackKeys { get; set; } = new(); + /// DonePut 事件绑定的回调 key 列表 + public List DonePutCallbackKeys { get; set; } = new(); + /// DoneMission 事件绑定的回调 key 列表 + public List DoneMissionCallbackKeys { get; set; } = new(); + /// Failed 事件绑定的回调 key 列表 + public List FailedCallbackKeys { get; set; } = new(); + /// OnTerminated 事件绑定的回调 key 列表 + public List OnTerminatedCallbackKeys { get; set; } = new(); + + // ========== 任务路径信息 ========== + /// 取货点站点ID + public int Src; + /// 放货点站点ID + public int Dst; + /// 是否跳过取货步骤(如果小车已在取货点或已载货,可设置为true) + public bool SkipFetch; + /// 是否跳过放货步骤(如果只需要移动到目标点但不放货) + public bool SkipPut; + /// 放货点是否允许查找回路路径 + public bool DstFindLoop; + /// 取货点是否允许查找回路路径 + public bool SrcFindLoop; + + /// 取货路径规划参数字典(传递给路径规划器) + [JsonIgnore] public Dictionary FetchPlanInfo = new() { { "action", "fetch" } }; + /// 放货路径规划参数字典(传递给路径规划器) + [JsonIgnore] public Dictionary PutPlanInfo = new() { { "action", "put" } }; + + /// 前序任务,当前任务需要等待前序任务执行完毕才能开始(任务链依赖关系) + [JsonIgnore] public Delivery Former; + /// 执行当前任务的小车对象 + [JsonIgnore] public Car UsingCar; + /// 小车分组筛选条件(用于筛选特定组的小车) + [JsonIgnore] public string Group = string.Empty; + /// 小车筛选键列表(用于多条件筛选) + public List SelectorKeys = new(); + /// 允许执行任务的小车类型(如"Forklift"、"Kiva"等) + [JsonIgnore] public string CarType = string.Empty; + /// + /// 任务优先级,数值越大,优先级越高 + /// 任务调度时按优先级降序执行,同优先级按创建时间排序 + /// + public int Priority = 0; + + // ========== 时间记录 ========== + /// 任务创建时间 + public DateTime CreateTime = DateTime.Now; + /// 任务开始执行时间 + public DateTime StartTime; + /// 任务完成时间 + public DateTime FinishTime; + + /// 任务状态同步锁对象,用于多线程环境下保证状态修改的线程安全 + [JsonIgnore] public readonly object SyncStatus = new object(); + + // ========== 任务内部状态标志 ========== + /// 任务是否正在执行中 + internal bool Active; + /// 任务是否处于放货阶段(true=放货中,false=取货中) + internal bool Putting; + /// 任务是否已完成 + internal bool Finished; + /// 任务是否出错 + internal bool Error; + /// 任务是否已取消 + internal bool Canceled; + /// 任务是否已终止(执行过程中被中断) + internal bool Terminated; + /// 任务被挂起 + internal bool Suspended; + + /// 追加的逃逸动作(任务完成后需要执行的额外动作,如去避让点) + [JsonIgnore] public Action AppendedEscape; + + /// 任务淤积次数(连续执行失败的次数,用于监控任务阻塞情况) + public int StuckTime; + /// 任务淤积原因说明(记录为什么无法执行) + public string StuckReason = "/"; + + /// + /// 获取任务当前状态 + /// 状态优先级:Finished > Canceled > Terminated > Error > Fetching/Putting > Waiting + /// + /// 任务当前状态枚举值 + public DeliveryStatus GetStatus() + { + lock (SyncStatus) + { + if (Finished) return DeliveryStatus.Finished; + if (Canceled) return DeliveryStatus.Canceled; + if (Terminated) return DeliveryStatus.Terminated; + if (Suspended) return DeliveryStatus.Suspended; + if (Error) return DeliveryStatus.Error; + if (Active) return Putting ? DeliveryStatus.Putting : DeliveryStatus.Fetching; + return DeliveryStatus.Waiting; + } + } + + public bool IsActive() { lock (SyncStatus) return Active; } + public bool IsFinished() { lock (SyncStatus) return Finished; } + public bool IsError() { lock (SyncStatus) return Error; } + public bool IsCanceled() { lock (SyncStatus) return Canceled; } + public bool IsTerminated() { lock (SyncStatus) return Terminated; } + + /// + /// 取消任务,当前实现仅占位返回 true,具体取消逻辑可由子类重写 + /// + public bool Cancel() + { + return true; + } + } + + /// + /// 用于持久化的任务状态快照 + /// 只包含可序列化、与业务恢复相关的关键信息 + /// + protected class DeliveryStateSnapshot + { + /// 任务唯一标识ID + public string Id { get; set; } + /// 外部系统传入的任务ID + public string TaskId { get; set; } + /// 取货点站点ID + public int Src { get; set; } + /// 放货点站点ID + public int Dst { get; set; } + /// 是否跳过取货步骤 + public bool SkipFetch { get; set; } + /// 是否跳过放货步骤 + public bool SkipPut { get; set; } + /// 当前是否处于放货阶段(true=放货中) + public bool Putting { get; set; } + /// 任务状态字符串(Waiting/Fetching/Putting/Finished等) + public string Status { get; set; } + /// 任务创建时间 + public DateTime CreateTime { get; set; } + /// 任务开始执行时间 + public DateTime StartTime { get; set; } + /// 任务完成时间 + public DateTime FinishTime { get; set; } + /// 执行任务的小车ID(-1表示未分配) + public int UsingCarId { get; set; } + /// 允许执行任务的小车类型 + public string CarType { get; set; } + /// 是否在任务开始时上报回调 + public bool ReportOnStarted { get; set; } + /// 是否在取货完成时上报回调 + public bool ReportOnFetched { get; set; } + /// 是否在放货完成时上报回调 + public bool ReportOnPut { get; set; } + /// 是否在任务最终完成时上报回调 + public bool ReportOnFinished { get; set; } + /// 是否在任务失败时上报回调 + public bool ReportOnFailed { get; set; } + /// 是否在任务被终止/暂停时上报回调 + public bool ReportOnTerminated { get; set; } + /// OnStart 事件绑定的回调 key 列表 + public List OnStartCallbackKeys { get; set; } = new(); + /// DoneFetch 事件绑定的回调 key 列表 + public List DoneFetchCallbackKeys { get; set; } = new(); + /// DonePut 事件绑定的回调 key 列表 + public List DonePutCallbackKeys { get; set; } = new(); + /// DoneMission 事件绑定的回调 key 列表 + public List DoneMissionCallbackKeys { get; set; } = new(); + /// Failed 事件绑定的回调 key 列表 + public List FailedCallbackKeys { get; set; } = new(); + /// OnTerminated 事件绑定的回调 key 列表 + public List OnTerminatedCallbackKeys { get; set; } = new(); + } + + #endregion + + #region Extensibility hooks + + /// + /// 小车离开充电站时的扩展动作钩子,子类可重写以执行自定义逻辑(如通知、统计等) + /// + public virtual void LeaveChargeAction(Car car, Site site) { } + /// + /// 动态调整任务优先级的钩子,在调度循环中每次迭代前调用,子类可重写实现自定义优先级策略 + /// + public virtual void ChangePriority() { } + /// + /// 定义避让点类型字符串,用于路径规划时识别可避让的站点,子类可重写以区分不同避让类型 + /// + public virtual string DefineGiveWayType(AbstractCar car) => "giveWay"; + + #endregion + + #region Queue / persistence (thread-safe) + + /// 队列与持久化操作的同步锁,保证多线程访问 _allDeliveries 时的线程安全 + [JsonIgnore] private readonly object _sync = new(); + /// 所有搬运任务的集合(含等待中与执行中的任务) + [JsonIgnore] private readonly HashSet _allDeliveries = new(); + + /// + /// 将任务加入队列并持久化到文件,线程安全 + /// + /// 待入队的搬运任务 + public void Enqueue(Delivery d) + { + lock (_sync) _allDeliveries.Add(d); + PersistSingleDelivery(d); + } + + /// + /// 获取当前任务列表,支持按状态过滤(已完成/已终止/错误/已取消),线程安全 + /// + /// 是否包含已完成的任务 + /// 是否包含已终止的任务 + /// 是否包含错误状态的任务 + /// 是否包含已取消的任务 + /// 去重后按状态排序的任务列表 + public List GetDeliveries(bool includeFinished = false, bool includeAborted = false,bool includeError = false,bool includeCanceled=false) + { + List ds; + lock (_sync) ds = _allDeliveries.ToList(); + + if (!includeFinished) + ds = ds.Where(p => p.GetStatus() != DeliveryStatus.Finished).ToList(); + if (!includeAborted) + ds = ds.Where(p => p.GetStatus() != DeliveryStatus.Terminated).ToList(); + if (!includeError) + ds = ds.Where(p => p.GetStatus() != DeliveryStatus.Error).ToList(); + if (!includeCanceled) + ds = ds.Where(p => p.GetStatus() != DeliveryStatus.Canceled).ToList(); + + return System.Linq.Enumerable.DistinctBy(ds, e => e.Id).OrderBy(e => e.GetStatus()).ToList(); + } + + /// + /// 获取持久化文件路径,默认存储在 BaseDirectory/Deliveries/ 下,子类可重写自定义路径 + /// + protected virtual string GetDeliveryPersistFilePath() + { + var baseDir = AppDomain.CurrentDomain.BaseDirectory; + var persistDir = Path.Combine(baseDir, "Deliveries"); + Directory.CreateDirectory(persistDir); + + var fileName = $"{GetType().Name}_Deliveries.json"; + return Path.Combine(persistDir, fileName); + } + + /// + /// 从单个 Delivery 生成持久化快照(仅当状态为未结束时返回非 null)。 + /// 在回调中用于单任务持久化,不修改其他任务记录。 + /// + private static DeliveryStateSnapshot SnapshotFromDelivery(Delivery d) + { + lock (d.SyncStatus) + { + var curStatus = d.GetStatus(); + if (curStatus is DeliveryStatus.Finished or DeliveryStatus.Canceled or DeliveryStatus.Error or DeliveryStatus.Terminated) + return null; + return new DeliveryStateSnapshot + { + Id = d.Id, + TaskId = d.TaskId, + Src = d.Src, + Dst = d.Dst, + SkipFetch = d.SkipFetch, + SkipPut = d.SkipPut, + Putting = d.Putting, + Status = curStatus.ToString(), + CreateTime = d.CreateTime, + StartTime = d.StartTime, + FinishTime = d.FinishTime, + UsingCarId = d.UsingCar?.id ?? -1, + CarType = d.CarType ?? string.Empty, + ReportOnStarted = d.ReportOnStarted, + ReportOnFetched = d.ReportOnFetched, + ReportOnPut = d.ReportOnPut, + ReportOnFinished = d.ReportOnFinished, + ReportOnFailed = d.ReportOnFailed, + ReportOnTerminated = d.ReportOnTerminated, + OnStartCallbackKeys = d.OnStartCallbackKeys?.ToList() ?? new List(), + DoneFetchCallbackKeys = d.DoneFetchCallbackKeys?.ToList() ?? new List(), + DonePutCallbackKeys = d.DonePutCallbackKeys?.ToList() ?? new List(), + DoneMissionCallbackKeys = d.DoneMissionCallbackKeys?.ToList() ?? new List(), + FailedCallbackKeys = d.FailedCallbackKeys?.ToList() ?? new List(), + OnTerminatedCallbackKeys = d.OnTerminatedCallbackKeys?.ToList() ?? new List() + }; + } + } + + /// + /// 仅持久化当前任务,不更改其他任务记录;高并发下由 CommonTools 原子更新保证数据安全。 + /// + private void PersistSingleDelivery(Delivery d) + { + try + { + var snap = SnapshotFromDelivery(d); + if (snap == null) + { + RemoveSingleDeliveryFromPersist(d.Id); + return; + } + var path = GetDeliveryPersistFilePath(); + AtomicFileUpdateHelper.ExecuteAtomicUpdate(path, current => + { + var list = string.IsNullOrEmpty(current) + ? new List() + : JsonConvert.DeserializeObject>(current) ?? new List(); + var idx = list.FindIndex(x => x.Id == d.Id); + if (idx >= 0) + list[idx] = snap; + else + list.Add(snap); + return JsonConvert.SerializeObject(list, Formatting.Indented); + }); + } + catch (Exception ex) + { + Diagnosis.Log($"PersistSingleDelivery error: {ExceptionFormatter.FormatEx(ex)}", "ChainedDeliveryPersist", true); + } + } + + /// + /// 对外公开的单任务持久化方法,供界面或外部逻辑在修改 Delivery 状态后调用。 + /// + /// 需要持久化的搬运任务 + public void PersistDelivery(Delivery d) + { + if (d == null) return; + PersistSingleDelivery(d); + } + + /// + /// 从持久化文件中移除指定任务记录,不修改其他任务记录。 + /// + private void RemoveSingleDeliveryFromPersist(string deliveryId) + { + try + { + var path = GetDeliveryPersistFilePath(); + AtomicFileUpdateHelper.ExecuteAtomicUpdate(path, current => + { + if (string.IsNullOrEmpty(current)) return null; + var list = JsonConvert.DeserializeObject>(current) ?? new List(); + list.RemoveAll(x => x.Id == deliveryId); + return JsonConvert.SerializeObject(list, Formatting.Indented); + }); + } + catch (Exception ex) + { + Diagnosis.Log($"RemoveSingleDeliveryFromPersist error: {ExceptionFormatter.FormatEx(ex)}", "ChainedDeliveryPersist", true); + } + } + + /// + /// 工厂方法:当内存中尚不存在某个快照对应的 Delivery 时, + /// 允许子类根据快照信息创建一个新的 Delivery 实例并加入到 _allDeliveries。 + /// 默认返回 null,表示基类不主动创建,具体业务由子类决定。 + /// + /// 持久化快照 + /// 新建的 Delivery;返回 null 则跳过该快照 + protected virtual Delivery CreateDeliveryFromSnapshot(DeliveryStateSnapshot snap) + { + // 基类不知道具体业务类型,交由子类重写。 + return null; + } + + /// + /// 检查小车是否已载货,子类可重写以适配不同车型的载货判断逻辑 + /// + /// 待检查的小车 + /// true 表示已载货 + protected virtual bool CheckCarLoaded(AbstractCar car) + { + return false; + } + + /// + /// 从持久化文件恢复未完成的任务到内存队列,在进程启动时调用 + /// + private void RecoverDeliveriesFromPersistedFile() + { + try + { + var path = GetDeliveryPersistFilePath(); + if (!File.Exists(path)) return; + + var json = File.ReadAllText(path); + if (string.IsNullOrWhiteSpace(json)) return; + + var snapshots = JsonConvert.DeserializeObject>(json) ?? new List(); + if (!snapshots.Any()) return; + + List ds; + lock (_sync) ds = _allDeliveries.ToList(); + + foreach (var snap in snapshots) + { + // 1. 先尝试在现有内存任务中匹配(优先 TaskId,其次内部 Id) + var d = ds.FirstOrDefault(x => + (!string.IsNullOrEmpty(snap.TaskId) && x.TaskId == snap.TaskId) || x.Id == snap.Id); + + // 2. 如果内存中没有对应任务,尝试通过工厂方法创建一个新的 Delivery + if (d == null) + { + var created = CreateDeliveryFromSnapshot(snap); + if (created != null) + { + lock (_sync) + { + _allDeliveries.Add(created); + ds.Add(created); // 以便后续快照仍然可以在本次循环中匹配到 + } + d = created; + } + else + { + // 子类未提供创建逻辑,则跳过该快照 + continue; + } + } + + lock (d.SyncStatus) + { + d.Src = snap.Src; + d.Dst = snap.Dst; + d.SkipFetch = snap.SkipFetch; + d.SkipPut = snap.SkipPut; + d.Putting = snap.Putting; + d.CreateTime = snap.CreateTime; + d.StartTime = snap.StartTime; + d.FinishTime = snap.FinishTime; + d.ReportOnStarted = snap.ReportOnStarted; + d.ReportOnFetched = snap.ReportOnFetched; + d.ReportOnPut = snap.ReportOnPut; + d.ReportOnFinished = snap.ReportOnFinished; + d.ReportOnFailed = snap.ReportOnFailed; + d.ReportOnTerminated = snap.ReportOnTerminated; + d.OnStartCallbackKeys = snap.OnStartCallbackKeys ?? new List(); + d.DoneFetchCallbackKeys = snap.DoneFetchCallbackKeys ?? new List(); + d.DonePutCallbackKeys = snap.DonePutCallbackKeys ?? new List(); + d.DoneMissionCallbackKeys = snap.DoneMissionCallbackKeys ?? new List(); + d.FailedCallbackKeys = snap.FailedCallbackKeys ?? new List(); + d.OnTerminatedCallbackKeys = snap.OnTerminatedCallbackKeys ?? new List(); + + d.Active = false; + d.Finished = false; + d.Error = false; + d.Canceled = false; + d.Terminated = false; + + if (Enum.TryParse(snap.Status, out var s)) + { + switch (s) + { + case DeliveryStatus.Fetching: + d.Putting = false; + break; + case DeliveryStatus.Putting: + d.Putting = true; + d.SkipFetch = true; + break; + } + } + + if (snap.UsingCarId >= 0) + d.UsingCar = SimpleLib.GetCar(snap.UsingCarId) as Car; + } + } + } + catch (Exception ex) + { + Diagnosis.Log($"RecoverDeliveriesFromPersistedFile error: {ExceptionFormatter.FormatEx(ex)}", "ChainedDeliveryPersist", true); + } + } + + #endregion + + #region Lifecycle (background loop with cancellation) + + /// 用于取消后台调度循环的取消令牌源 + [JsonIgnore] private CancellationTokenSource _cts; + /// 后台调度循环任务 + [JsonIgnore] private Task _loopTask; + /// 进程是否已启动 + [JsonIgnore] private volatile bool _started; + /// 用于在界面绘制调度状态的画刷 + [JsonIgnore] private readonly SimpleMonitor.Painter _painter = SimpleMonitor.getPainter("cdmPainter_refactored"); + + /// + /// 启动搬运任务调度进程:恢复持久化任务、启动后台循环 + /// + [MethodMember(Name = "启动进程", Description = "开始处理搬运队列")] + public override void Execute() + { + if (_started) return; + _started = true; + status.status = "启动中"; + + RecoverDeliveriesFromPersistedFile(); + + _cts = new CancellationTokenSource(); + _loopTask = Task.Run(() => LoopAsync(_cts.Token), _cts.Token); + status.status = "已启动"; + } + + /// + /// 关闭调度进程,取消后台循环 + /// + [MethodMember(Name = "关闭进程", Description = "关闭任务维护进程")] + public void Stop() + { + status.status = "关闭中"; + _started = false; + try + { + _cts?.Cancel(); + } + catch { /* ignore */ } + status.status = "已关闭"; + } + + /// + /// 后台调度循环:周期性地检查等待中的任务,尝试为其分配小车并执行 + /// 每次迭代:读取配置、调整优先级、对等待任务排序、逐个尝试执行并更新淤积统计 + /// + /// 取消令牌,用于响应 Stop 关闭请求 + private async Task LoopAsync(CancellationToken token) + { + var stat = (DeliveryMissionStatus)status; + var iteration = 0; + + while (!token.IsCancellationRequested) + { + var checkingTime = new Dictionary(); + try + { + // 读取任务参数 + var missionField = StringDictConvert.Convert(fields) ?? new ChainedDeliveryParams(); + var mustArrangeThreshold = ReadMustArrangeThreshold(); + stat.MustArrangeThreshold = mustArrangeThreshold; + EnableBlockStandby = missionField.EnableBlockStandby; + var arrangeThresholdTime = TimeSpan.FromSeconds(mustArrangeThreshold); + + ChangePriority(); + + // 获取所有等待中的任务,按优先级和超时时间排序(超时必须优先安排) + Delivery[] currentChecking; + lock (_sync) + { + var pendingDs = _allDeliveries.Where(p => p.GetStatus() == DeliveryStatus.Waiting).ToList(); + currentChecking = pendingDs.ToArray(); + currentChecking = currentChecking.OrderByDescending(p => + p.Priority + ((DateTime.Now - p.CreateTime) > arrangeThresholdTime ? 1 : 0)).ToArray(); + } + + stat.Enqueued = currentChecking.Length; + + var stuckStr = ""; + var stuckedNum = 0; + + foreach (var d in currentChecking) + { + + checkingTime[d.Id] = "处理中"; + UpdateDisplay(iteration, checkingTime); + var startAt = DateTime.Now; + + if (!TryExecuteSingle(d, missionField, out var reason)) + { + d.StuckTime += 1; + d.StuckReason = reason ?? d.StuckReason; + stuckedNum += 1; + stuckStr += $"{d.Id}:{d.StuckTime} "; + } + + checkingTime[d.Id] = $"{(DateTime.Now - startAt).TotalSeconds:0.0}s"; + UpdateDisplay(iteration, checkingTime); + } + + stat.StuckNum = stuckedNum; + stat.StuckInfo = stuckStr; + + status.status = $"已启动-循环{iteration++}"; + } + catch (Exception ex) + { + Diagnosis.Log($"CDM(refactored) error: {ExceptionFormatter.FormatEx(ex)}", "error", true); + } + + UpdateDisplay(iteration, checkingTime); + try { await Task.Delay(1000, token); } catch { /* cancelled */ } // 每 1 秒循环一次 + } + } + + /// + /// 从配置中读取“必须安排”阈值(秒),超过该等待时间的任务将被优先调度 + /// + private double ReadMustArrangeThreshold() + { + if (!fields.TryGetValue("mustArrangeThreshold", out var str) || !double.TryParse(str, out var v)) + return 300; + return v; + } + + /// + /// 更新界面上的调度状态显示:循环次数及各任务处理耗时 + /// + private void UpdateDisplay(int iteration, Dictionary checkingTime) + { + try + { + _painter.clear(); + _painter.drawTextFixed( + $"CDM循环数:{iteration}\n{string.Join("\n", checkingTime.Select(kvp => $"{kvp.Key}\t{kvp.Value}"))}", + new SolidBrush(Color.Black), + VirtualPainter.DrawPosition.RightBottom, + Color.AliceBlue); + } + catch + { + // UI绘制失败不影响调度 + } + } + + #endregion + + #region Core execution pipeline (refactored) + + /// + /// 尝试执行单个搬运任务:校验前置条件、选车规划取货、规划放货、编译下发、启动异步执行 + /// + /// 待执行的搬运任务 + /// 任务参数配置 + /// 若失败,返回淤积原因 + /// true 表示任务已成功启动执行 + private bool TryExecuteSingle(Delivery d, ChainedDeliveryParams missionField, out string stuckReason) + { + stuckReason = null; + missionField ??= new ChainedDeliveryParams(); + + // 已在执行中 + if (d.IsActive()) return true; + + // 依赖关系 + if (d.Former != null && !d.Former.IsActive()) + { + stuckReason = $"depends on {d.Former.Id} not started"; + return false; + } + + if (d.Former != null && !d.Former.IsFinished() && !missionField.TightDeliveryChain) + { + stuckReason = $"depends on {d.Former.Id} not finished"; + return false; + } + + if (d.StartCondition != null && !d.StartCondition()) + { + stuckReason = $"{d.Id} does not meet startCondition"; + return false; + } + + // 延续任务:已有 fetchPlan/fetchCode,延续任务取消 + //if (d.FetchPlan != null) + // return TryHandleContinuationFetch(d, out stuckReason); + + // 非延续:选车并规划取货 + SegmentPlan fetchPlan = null; + Car usingCar; + if (!d.SkipFetch) + { + if (!TrySelectCarAndPlanFetch(d, out usingCar, out fetchPlan, out stuckReason)) + return false; + } + else + { + usingCar = d.UsingCar; + //fetchPlan = d.FetchPlan; + } + + if (usingCar == null) + { + stuckReason = d.SkipFetch + ? $"{d.Id} skip fetch, but no using car assigned for put" + : $"ucar null, {d.Src}->{d.Dst}"; + return false; + } + + // 规划放货 + if (!TryPlanPut(d, usingCar, fetchPlan != null, out var putPlan, out var escPlan, out stuckReason)) + return false; + + // 编译与下发(含标签占用) + if (!TryCompileAndDispatch(d, usingCar, fetchPlan, putPlan, escPlan, out var allCode, out stuckReason)) + return false; + + // 启动 Runner 异步运行并回收状态 + _ = RunDeliveryAsync(d, usingCar, fetchPlan, escPlan, allCode); + + return true; + } + + #region 延续任务,功能屏蔽 + //private bool TryHandleContinuationFetch(Delivery d, out string stuckReason) + //{ + // stuckReason = null; + // var usingCar = (Car)d.FetchPlan.UsingCar; + + // // redirect_fetched: 0 未开始;1 取货中;3 redirect;333 取货完成等待放货;666 去避让 + // if (d.RedirectFetched == 0) + // { + // lock (Commons.PlanSession) + // { + // if (usingCar.tags.Contains("occupied")) + // { + // stuckReason = $"preassigned using car {usingCar.id} is still occupied"; + // return false; + // } + + // d.RedirectFetched = 1; + // usingCar.tags.Add("occupied", $"DeliverFetch{d.Id}"); + // usingCar.tags.Remove("blocking"); + // usingCar.tags.Remove("idle"); + // usingCar.tags.Remove("charging"); + // } + + // try + // { + // Commons.DeleteTag(tags, "FailCDMToStandby"); + // Commons.DeleteTag(tags, "FailCDMToStandbyTime"); + // var task = d.FetchCode.Queue(); + + // async Task go() + // { + // try + // { + // await task; + // d.doneFetch?.Invoke(d); + // lock (d.SyncStatus) d.Putting = true; + // } + // catch (Exception ex) + // { + // Diagnosis.Log($"Send Prefetch Script to {usingCar.id} exception:{ExceptionFormatter.FormatEx(ex)}", "error", true); + // lock (d.SyncStatus) { d.Error = true; d.Active = false; } + // lock (Commons.PlanSession) + // { + // usingCar.tags.Remove("redirect"); + // usingCar.tags.Remove("occupied"); + // usingCar.tags.Remove("dest"); + // usingCar.tags.Add("idle", DateTime.Now.ToString()); + // } + // d.failed?.Invoke(d); + // return; + // } + + // usingCar.siteID = d.Src; + // lock (Commons.PlanSession) + // { + // usingCar.tags.Remove("occupied"); + // usingCar.tags.Remove("redirect"); + // usingCar.tags.Add("pendingput", d.Id.ToString()); + // } + // d.RedirectFetched = 333; + // } + + // _ = go(); + // } + // catch (Exception ex) + // { + // Diagnosis.Log($"pre-fetching of {d.Id} by {usingCar.id} failed: {ExceptionFormatter.FormatEx(ex)}", "error", true); + // lock (d.SyncStatus) { d.Error = true; d.Active = false; } + // lock (Commons.PlanSession) + // { + // usingCar.tags.Remove("occupied"); + // usingCar.tags.Remove("redirect"); + // usingCar.tags.Remove("dest"); + // usingCar.tags.Add("idle", DateTime.Now.ToString()); + // } + // d.failed?.Invoke(d); + // stuckReason = "prefetch failed"; + // return false; + // } + + // stuckReason = "prefetching"; + // return false; + // } + + // if (d.RedirectFetched == 1 || d.RedirectFetched == 3) + // { + // stuckReason = "redirect fetching or redirect giveWay"; + // return false; + // } + + // // 333/666:等待放货阶段,由主流程继续处理(fetchPlan != null 分支会进入 TryPlanPut) + // stuckReason = "waiting for put after prefetch"; + // return false; + //} + #endregion + + /// + /// 从可用小车中选车并规划取货路径:筛选可用车、计算到取货点的路径权重、选择最优车与取货段 + /// + /// 待执行的搬运任务 + /// 输出:选中的小车 + /// 输出:取货路径规划 + /// 输出:若失败,淤积原因 + /// true 表示成功选车并完成取货路径规划 + private bool TrySelectCarAndPlanFetch(Delivery d, out Car usingCar, out SegmentPlan fetchPlan, out string stuckReason) + { + usingCar = null; + fetchPlan = null; + stuckReason = null; + + // 统计可用车:排除不可调度、类型不匹配、被 hold 到其他站点的车 + var okCars = new List(); + if (d.UsingCar == null) + { + foreach (var car in SimpleLib.GetAllCars().OfType()) + { + if (Commons.SelectCar(car, EnableBlockStandby) < 0) continue; + if (d.UsingCar != null && d.UsingCar != car) continue; + if (!MeetSelectorKey(car, d.CarType)) continue; + if (car.tags.Contains("taskIdsString") && car.tags.TryGetValue("taskIdsString", out var ids) && !ids.Contains(d.TaskId)) continue; + if (car.tags.TryGetValue("holdCar", out var holdSite) && holdSite != d.Src.ToString()) continue; + okCars.Add(car); + } + } + else + { + usingCar = d.UsingCar; + if (Commons.SelectCar(usingCar, EnableBlockStandby) < 0) + { + stuckReason = $"preassigned using car {usingCar.id} is not available"; + return false; + } + fetchPlan = new SegmentPlan { usingCar = usingCar }; + if(!d.SkipPut) fetchPlan.fields["allow_destination_on_route"] = "true"; + fetchPlan.fields["CarLength"] = d.MaterialLength.ToString(CultureInfo.InvariantCulture); + fetchPlan.fields["CarWidth"] = d.MaterialWidth.ToString(CultureInfo.InvariantCulture); + fetchPlan.fields["action"] = "fetch"; + foreach (var kv in d.FetchPlanInfo) fetchPlan.fields[kv.Key] = kv.Value; + fetchPlan.findLoop = d.SrcFindLoop; + var carSiteId = usingCar.GetLastSite(); + fetchPlan.FindRoute(SimpleLib.GetSite(carSiteId), SimpleLib.GetSite(d.Src)); + return true; + } + + if (okCars.Count == 0 && d.UsingCar == null) + { + stuckReason = $"no available car, {d.Src}->{d.Dst}"; + return false; + } + + + // 遍历可用车,计算每辆车到取货点的路径权重,选择路径最短的车 + var currentWeight = float.MaxValue; + foreach (var car in okCars) + { + var mPlan = new SegmentPlan { usingCar = car }; + if (!d.SkipPut) mPlan.fields["allow_destination_on_route"] = "true"; + mPlan.fields["CarLength"] = d.MaterialLength.ToString(CultureInfo.InvariantCulture); + mPlan.fields["CarWidth"] = d.MaterialWidth.ToString(CultureInfo.InvariantCulture); + mPlan.fields["action"] = "fetch"; + foreach (var kv in d.FetchPlanInfo) mPlan.fields[kv.Key] = kv.Value; + + try + { + var fs = car.GetLastSite(); + if (fs == -1) continue; + mPlan.findLoop = d.SrcFindLoop; + var w = mPlan.FindRoute(SimpleLib.GetSite(fs), SimpleLib.GetSite(d.Src)); + if (w < currentWeight) + { + currentWeight = w; + usingCar = car; + fetchPlan = mPlan; + } + } + catch (BasicHeuristics.PlanningConflictException sde) + { + Diagnosis.Post($"D{d.Id} {car.name}({car.id}) conflict: {ExceptionFormatter.FormatEx(sde)}"); + } + catch (Exception e) + { + Diagnosis.Post($"D{d.Id} {car.name}({car.id}) exception: {ExceptionFormatter.FormatEx(e)}"); + } + } + + if (usingCar == null) + { + stuckReason = $"no car route to fetch src {d.Src}"; + return false; + } + + return true; + } + + /// + /// 规划放货路径:从取货点/当前载货点到放货点的路径,支持 DestinationOnRouteException 重试 + /// + /// 搬运任务 + /// 执行任务的小车 + /// 是否已完成取货(true 表示取货段已规划或已执行) + /// 输出:放货路径规划 + /// 输出:逃逸路径(当前实现中为 null) + /// 输出:若失败,淤积原因 + /// true 表示成功规划放货路径 + private bool TryPlanPut(Delivery d, Car usingCar, bool prefetch, out SegmentPlan putPlan, out SegmentPlan escPlan, out string stuckReason) + { + putPlan = null; + escPlan = null; + stuckReason = null; + + putPlan = new SegmentPlan { usingCar = usingCar }; + putPlan.fields["action"] = "put"; + foreach (var kv in d.PutPlanInfo) putPlan.fields[kv.Key] = kv.Value; + putPlan.fields["useMustCanGo"] = prefetch ? "true" : "false"; + putPlan.findLoop = !prefetch || d.DstFindLoop; + + // 确定放货路径起点:SkipFetch 时从载货站点取,否则从取货点 d.Src + var srcSiteId = d.Src; + if (d.SkipFetch) + { + srcSiteId = usingCar.status.holdingLocks.FirstOrDefault(); + if (srcSiteId == -1) + { + stuckReason = "selected using car is not reset"; + return false; + } + } + + if (d.SkipPut) + return true; + + // 规划放货路径,最多重试 2 次以处理 DestinationOnRouteException + for (var attempt = 0; attempt < 2; attempt++) + { + try + { + putPlan.fields["allow_destination_on_route"] = "true"; + putPlan.FindRoute(SimpleLib.GetSite(srcSiteId), SimpleLib.GetSite(d.Dst)); + return true; + } + catch (BasicHeuristics.DestinationOnRouteException) + { + //allowDestinationOnRoute = true; + } + catch (BasicHeuristics.PlanningConflictException dce) + { + // 这里保持与原逻辑一致:遇到终点冲突先返回 false 让下一轮再试(推挤/避让可在子类扩展) + stuckReason = $"dest {d.Dst} conflict with other cars"; + Diagnosis.Post($"D{d.Id} dest {d.Dst} conflict: {ExceptionFormatter.FormatEx(dce)}"); + return false; + } + catch (Exception ex) + { + stuckReason = $"no route {srcSiteId}->{d.Dst}: {ex.Message}"; + return false; + } + } + + stuckReason = $"destination {d.Dst} on route, retry failed"; + return false; + } + + /// + /// 编译取货/放货/逃逸段为小车程序、设置小车标签(occupied/deliver/dest)、下发执行 + /// + /// 搬运任务 + /// 执行任务的小车 + /// 取货路径规划(可为 null) + /// 放货路径规划 + /// 逃逸路径规划(可为 null) + /// 输出:编译后的小车程序 + /// 输出:若失败,淤积原因 + /// true 表示编译并下发成功 + private bool TryCompileAndDispatch( + Delivery d, + Car usingCar, + SegmentPlan fetchPlan, + SegmentPlan putPlan, + SegmentPlan escPlan, + out CarProgram allCode, + out string stuckReason) + { + allCode = null; + stuckReason = null; + + // 车可用性检查:若车已被占用则不能下发 + lock (Commons.PlanSession) + { + if (usingCar.tags.Contains("occupied")) + { + stuckReason = $"{d.Id} selected {usingCar.id} but car not available"; + return false; + } + } + + try + { + void AfterFetch(CarProgram.LetGo doLetGo) + { + d.DoneFetch?.Invoke(d); + lock (d.SyncStatus) d.Putting = true; + PersistSingleDelivery(d); + doLetGo(); + } + + void AfterPut(CarProgram.LetGo doLetGo) + { + d.FinishTime = DateTime.Now; + d.DonePut?.Invoke(d); + PersistSingleDelivery(d); + doLetGo(); + } + + var forecastPredicate = new Func(site => site.fields.ContainsKey(DefineGiveWayType(usingCar))); + + // 根据是否有取货/放货/逃逸段,拼接编译为完整程序并追加避让预测 + if (escPlan == null) + { + if (fetchPlan != null && !d.SkipPut) + { + allCode = fetchPlan.Compile($"D{d.Id}", false) + .Append(putPlan, beforeCall: AfterFetch) + .Forecast(Commons.GenerateEscapePlan(putPlan, forecastPredicate)); + } + else + { + allCode = putPlan.Compile($"D{d.Id}",false) + .Forecast(Commons.GenerateEscapePlan(putPlan, forecastPredicate)); + } + } + else + { + if (fetchPlan != null) + { + allCode = fetchPlan.Compile($"D{d.Id}Esc", false) + .Append(putPlan, beforeCall: AfterFetch) + .Append(escPlan, beforeCall: AfterPut) + .Forecast(Commons.GenerateEscapePlan(putPlan, forecastPredicate)); + } + else + { + allCode = putPlan.Compile($"D{d.Id}Esc", false) + .Append(escPlan, beforeCall: AfterPut) + .Forecast(Commons.GenerateEscapePlan(putPlan, forecastPredicate)); + } + } + + // 更新小车标签:标记为 occupied/deliver,设置 dest 为放货点或逃逸终点 + lock (Commons.PlanSession) + { + usingCar.tags.Remove("pendingput"); + usingCar.tags.Add("occupied", $"CDM_{d.Id}"); + usingCar.tags.Remove("blocking"); + usingCar.tags.Remove("idle"); + usingCar.tags.Remove("charging"); + usingCar.tags.Add("deliver", d.Id); + usingCar.tags.Remove("redirect"); + if (escPlan == null) + usingCar.tags.Add("dest", d.Dst.ToString()); + else + usingCar.tags.Add("dest", escPlan.segments.Last().id.ToString()); + } + + d.UsingCar = usingCar; + stuckReason = $"{usingCar.id} running"; + return true; + } + catch (Exception ex) + { + // 编译失败:回滚标签,并记录 + Diagnosis.Log($"compile/dispatch failed D{d.Id} car {usingCar.id}: {ExceptionFormatter.FormatEx(ex)}", "error", true); + lock (Commons.PlanSession) + { + usingCar.tags.Remove("deliver"); + usingCar.tags.Remove("occupied"); + usingCar.tags.Remove("dest"); + usingCar.tags.Add("idle", DateTime.Now.ToString(CultureInfo.CurrentCulture)); + } + stuckReason = $"compile failed: {ex.Message}"; + return false; + } + } + + /// + /// 异步执行搬运任务:标记任务激活、下发程序、等待完成、更新 JPH、回调、清理标签与持久化 + /// + /// 搬运任务 + /// 执行任务的小车 + /// 取货路径规划(可为 null) + /// 逃逸路径规划(可为 null) + /// 已编译的小车程序 + private async Task RunDeliveryAsync( + Delivery d, + Car usingCar, + SegmentPlan fetchPlan, + SegmentPlan escPlan, + CarProgram allCode) + { + try + { + lock (d.SyncStatus) d.Active = true; + d.StartTime = DateTime.Now; + d.OnStart?.Invoke(d); + PersistSingleDelivery(d); + Commons.DeleteTag(tags, "FailCDMToStandby"); + Commons.DeleteTag(tags, "FailCDMToStandbyTime"); + if (fetchPlan != null) LeaveChargeAction(usingCar, fetchPlan.Source); + + try + { + await allCode.Queue(); + } + catch (Exception ex) + { + // “被 Block() 触发的 not allowed to lock” 属于可预期分支:清理小车标签并返回,不视为错误 + var msg = ex is AggregateException ae ? ae.InnerExceptions.FirstOrDefault()?.Message ?? ex.Message : ex.Message; + Diagnosis.Post($"runner ex: {msg}", "block", true); + if (msg.Contains("not allowed to lock")) + { + lock (d.SyncStatus) d.Active = false; + lock (Commons.PlanSession) + { + usingCar.tags.Remove("deliver"); + usingCar.tags.Remove("occupied"); + usingCar.tags.Remove("redirect"); + usingCar.tags.Remove("dest"); + usingCar.tags.Add("idle", DateTime.Now.ToString(CultureInfo.CurrentCulture)); + } + return; + } + + Diagnosis.Log($"Send Script to {usingCar.id} exception:{ExceptionFormatter.FormatEx(ex)}", "error", true); + lock (d.SyncStatus) + { + d.Active = false; + if(d.Putting) + d.Error = true; + else + { + d.Suspended = true; + } + } + lock (Commons.PlanSession) + { + usingCar.tags.Remove("deliver"); + usingCar.tags.Remove("occupied"); + usingCar.tags.Remove("redirect"); + usingCar.tags.Remove("dest"); + usingCar.tags.Add("idle", DateTime.Now.ToString(CultureInfo.CurrentCulture)); + } + d.Failed?.Invoke(d); + PersistSingleDelivery(d); + return; + } + + //车体完成所有动作后续处理 + UpdateJphOnSuccess(); // 更新每小时作业数统计 + + if (d.AppendedEscape != null) + { + d.FinishTime = DateTime.Now; + d.DonePut?.Invoke(d); + PersistSingleDelivery(d); + } + d.AppendedEscape?.Invoke(); + + lock (d.SyncStatus) d.Finished = true; + + lock (Commons.PlanSession) + { + usingCar.tags.Remove("occupied"); + usingCar.tags.Remove("deliver"); + usingCar.tags.Remove("dest"); + usingCar.tags.Add("idle", DateTime.Now.ToString(CultureInfo.CurrentCulture)); + } + + if (d.AppendedEscape == null) + { + d.FinishTime = DateTime.Now; + d.DonePut?.Invoke(d); + } + d.DoneMission?.Invoke(d); + RemoveSingleDeliveryFromPersist(d.Id); + } + catch (Exception ex) + { + Diagnosis.Post($"Delivery(refactored) {d.Id} {d.Src}->{d.Dst} fault:{ExceptionFormatter.FormatEx(ex)}", "ChainedDelivery"); + // 外层异常(如 OnStart/Persist 抛错)需重置任务状态并清理小车标签,避免僵尸任务与占车 + lock (d.SyncStatus) { d.Active = false; d.Error = true; } + lock (Commons.PlanSession) + { + usingCar.tags.Remove("deliver"); + usingCar.tags.Remove("occupied"); + usingCar.tags.Remove("redirect"); + usingCar.tags.Remove("dest"); + usingCar.tags.Add("idle", DateTime.Now.ToString(CultureInfo.CurrentCulture)); + } + d.Failed?.Invoke(d); + RemoveSingleDeliveryFromPersist(d.Id); + } + } + + private DateTime _stTime = DateTime.Now; + private int _stPerformed; + private double _prevJph; + + /// + /// 任务成功后更新 JPH(每小时作业数)统计,采用滑动窗口指数平滑 + /// + private void UpdateJphOnSuccess() + { + var stat = (DeliveryMissionStatus)status; + stat.Performed += 1; + var passTime = (DateTime.Now - _stTime).TotalHours; + stat.Jph = _prevJph * (1 - passTime) + (stat.Performed - _stPerformed) * passTime; + if (passTime > 1) + { + _stTime = DateTime.Now; + _stPerformed = stat.Performed; + _prevJph = stat.Jph; + } + } + + #endregion + + #region Car selection helpers / blocking (kept as compatible utilities) + + /// + /// 判断小车是否满足任务指定的车型筛选条件(CarType/SelectorKey) + /// + /// 待检查的小车 + /// 任务要求的小车类型(空或 "Car" 表示不限制) + /// true 表示满足筛选条件 + private bool MeetSelectorKey(Car car, string carType) + { + if (car is DummyCar) return true; + if (carType == "Car") return true; + if (car.fields.ContainsKey("CarType") && + ((car.fields["CarType"] == carType) || car.fields["CarType"] == "Car")) + return true; + return false; + } + + /// + /// 命令指定小车进入阻塞状态:拦截当前执行、去避让点、重置调度,保持与旧实现一致的锁顺序以降低死锁风险。 + /// + /// 小车ID + /// 关联任务ID(仅用于日志) + /// true 表示命令下发成功 + public static bool CommandToBlock(int carId, int taskId = -1) + { + var car = (Car)SimpleLib.GetCar(carId); + int siteId; + + lock (TrafficControl.syncTrafficSequence) + { + if (car.status.pendingLocks.Length == 0) + { + Diagnosis.Log($"cannot block {taskId}, destination already locked", "CommandToBlock", true); + return false; + } + if (car.status.holdingLocks == null || car.status.holdingLocks.Length == 0) + { + Diagnosis.Log($"cannot block {taskId}, car {car.id} has no holdingLocks", "CommandToBlock", true); + return false; + } + siteId = car.status.holdingLocks.Last(); + } + + car.Intercept(success => + { + if (!success) return; + lock (Commons.PlanSession) + { + car.NoSchedule(true); + car.tags.Add("occupied", "blocking"); + } + UglyBlock(car); + car.TrafficReset(SimpleLib.GetSite(siteId), true, false); + lock (Commons.PlanSession) + { + car.tags.Clear(); + car.tags.Add("idle", DateTime.Now.ToString(CultureInfo.CurrentCulture)); + } + }); + + return true; + } + + /// + /// 将小车置为“吹散”状态:停止调度、清空站点、清空标签、设为不可调度 + /// + private static void BlownCar(Car car) + { + car.NoSchedule(); + car.siteID = -1; + car.tags.Clear(); + car.status.usage.AddUsage("base", new CarUsage.CarUsageInfo { scheduling = false, refreshing = false }); + } + + /// + /// 执行阻塞逻辑:调用小车 reset、置为阻塞中、吹散、轮询等待恢复(最长约 60 秒) + /// + private static void UglyBlock(Car usingCar) + { + try + { + ((ClumsyCar)usingCar).Get("reset"); + ((ClumsyCar)usingCar).lstatus = "阻塞中"; + BlownCar(usingCar); + const int maxWaitCount = 120; + var cnt = 0; + while (cnt < maxWaitCount) + { + cnt++; + Thread.Sleep(500); + if (usingCar.lstatus.Contains("正常") && cnt > 2) break; + } + + if (!usingCar.lstatus.Contains("正常")) + Diagnosis.Log($"block timeout, ucar:{usingCar.id}, lstatus:{usingCar.lstatus}", "block", true); + } + catch (Exception e) + { + Diagnosis.Log($"block fail, ucar:{usingCar?.id}, status:{usingCar?.status}, " + + $"programs:{usingCar?.status?.programs}, task:{usingCar?.status?.programs?.task}: {ExceptionFormatter.FormatEx(e)}", "block", true); + try { Thread.Sleep(500); } + catch + { + // ignored + } + } + } + + #endregion + } +} diff --git a/StandardScene.Core/Chained/DeliveryCallbackAttacher.cs b/StandardScene.Core/Chained/DeliveryCallbackAttacher.cs new file mode 100644 index 0000000..eb1183c --- /dev/null +++ b/StandardScene.Core/Chained/DeliveryCallbackAttacher.cs @@ -0,0 +1,66 @@ +using System; +using System.Linq; +using SimpleCore.Library; + +namespace StandardScene.Chained +{ + /// + /// 负责根据 Delivery 上记录的回调 key 列表,通过回调注册表统一挂载所有事件回调。 + /// + public static class DeliveryCallbackAttacher + { + public static void AttachAll(ChainedDeliveryMission.Delivery d) + { + if (d == null) return; + + // OnStart + foreach (var key in d.OnStartCallbackKeys.Distinct()) + { + var cb = DeliveryCallbackRegistry.ResolveOnStart(key); + if (cb != null) d.OnStart += cb; + else Diagnosis.Log($"Unknown OnStart callback key: {key}", "DeliveryCallbackAttacher"); + } + + // DoneFetch + foreach (var key in d.DoneFetchCallbackKeys.Distinct()) + { + var cb = DeliveryCallbackRegistry.ResolveDoneFetch(key); + if (cb != null) d.DoneFetch += cb; + else Diagnosis.Log($"Unknown DoneFetch callback key: {key}", "DeliveryCallbackAttacher"); + } + + // DonePut + foreach (var key in d.DonePutCallbackKeys.Distinct()) + { + var cb = DeliveryCallbackRegistry.ResolveDonePut(key); + if (cb != null) d.DonePut += cb; + else Diagnosis.Log($"Unknown DonePut callback key: {key}", "DeliveryCallbackAttacher"); + } + + // DoneMission + foreach (var key in d.DoneMissionCallbackKeys.Distinct()) + { + var cb = DeliveryCallbackRegistry.ResolveDoneMission(key); + if (cb != null) d.DoneMission += cb; + else Diagnosis.Log($"Unknown DoneMission callback key: {key}", "DeliveryCallbackAttacher"); + } + + // Failed + foreach (var key in d.FailedCallbackKeys.Distinct()) + { + var cb = DeliveryCallbackRegistry.ResolveFailed(key); + if (cb != null) d.Failed += cb; + else Diagnosis.Log($"Unknown Failed callback key: {key}", "DeliveryCallbackAttacher"); + } + + // OnTerminated + foreach (var key in d.OnTerminatedCallbackKeys.Distinct()) + { + var cb = DeliveryCallbackRegistry.ResolveOnTerminated(key); + if (cb != null) d.OnTerminated += cb; + else Diagnosis.Log($"Unknown OnTerminated callback key: {key}", "DeliveryCallbackAttacher"); + } + } + } +} + diff --git a/StandardScene.Core/Chained/DeliveryCallbackRegistry.cs b/StandardScene.Core/Chained/DeliveryCallbackRegistry.cs new file mode 100644 index 0000000..150708c --- /dev/null +++ b/StandardScene.Core/Chained/DeliveryCallbackRegistry.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace StandardScene.Chained +{ + /// + /// 可用于区分 Delivery 各生命周期事件的枚举。 + /// + public enum DeliveryEventType + { + OnStart, + DoneFetch, + DonePut, + DoneMission, + Failed, + OnTerminated + } + + /// + /// 全局任务回调注册表:通过 (事件类型, key) 注册/解析各阶段回调,便于持久化和恢复。 + /// + public static class DeliveryCallbackRegistry + { + private static readonly Dictionary<(DeliveryEventType, string), Delegate> _callbacks = new(); + + private static void RegisterInternal(DeliveryEventType type, string key, Delegate callback) + { + if (string.IsNullOrWhiteSpace(key) || callback == null) return; + _callbacks[(type, key)] = callback; + } + + private static T ResolveInternal(DeliveryEventType type, string key) where T : class + { + if (key == null) return null; + return _callbacks.TryGetValue((type, key), out var d) ? d as T : null; + } + + public static void RegisterOnStart(string key, Action callback) => + RegisterInternal(DeliveryEventType.OnStart, key, callback); + + public static void RegisterDoneFetch(string key, Action callback) => + RegisterInternal(DeliveryEventType.DoneFetch, key, callback); + + public static void RegisterDonePut(string key, Action callback) => + RegisterInternal(DeliveryEventType.DonePut, key, callback); + + public static void RegisterDoneMission(string key, Action callback) => + RegisterInternal(DeliveryEventType.DoneMission, key, callback); + + public static void RegisterFailed(string key, Action callback) => + RegisterInternal(DeliveryEventType.Failed, key, callback); + + public static void RegisterOnTerminated(string key, Func> callback) => + RegisterInternal(DeliveryEventType.OnTerminated, key, callback); + + public static Action ResolveOnStart(string key) => + ResolveInternal>(DeliveryEventType.OnStart, key); + + public static Action ResolveDoneFetch(string key) => + ResolveInternal>(DeliveryEventType.DoneFetch, key); + + public static Action ResolveDonePut(string key) => + ResolveInternal>(DeliveryEventType.DonePut, key); + + public static Action ResolveDoneMission(string key) => + ResolveInternal>(DeliveryEventType.DoneMission, key); + + public static Action ResolveFailed(string key) => + ResolveInternal>(DeliveryEventType.Failed, key); + + public static Func> ResolveOnTerminated(string key) => + ResolveInternal>>(DeliveryEventType.OnTerminated, key); + } +} + diff --git a/StandardScene.Core/Chained/DeliveryViewer.cs b/StandardScene.Core/Chained/DeliveryViewer.cs new file mode 100644 index 0000000..baa34dd --- /dev/null +++ b/StandardScene.Core/Chained/DeliveryViewer.cs @@ -0,0 +1,316 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using StandardScene.Model; +using SimpleLite; +using SimpleCore; +using SimpleCore.Library; +using StandardScene.Utils; +using static StandardScene.Chained.ChainedDeliveryMission; + +namespace StandardScene.Chained +{ + public partial class DeliveryViewer : Form + { + private const int OverdueMinutesThreshold = 10000; // 约7天视为超时 + private const int DisplayColumnIndexOverdueFlag = 9; + private static readonly HttpClient SharedHttpClient = new HttpClient(); + /// 选中行的背景色 + private static readonly Color SelectedRowBackColor = Color.FromArgb(220, 230, 250); + /// 缓存选中行索引,避免在 RetrieveVirtualItem 中访问 SelectedIndices 引发递归 + private readonly HashSet _selectedIndicesCache = new HashSet(); + + private ListViewItem _item = null; + + public DeliveryViewer() + { + InitializeComponent(); + } + + private readonly ContextMenuStrip strip = new ContextMenuStrip(); + + private void DeliveryViewer_Load(object sender, EventArgs e) + { + strip.Items.Clear(); + strip.Items.Add("取消任务", null, CancelClick); + strip.Items.Add("重发任务", null, ResendClick); + strip.Items.Add("换车重发任务", null, ChangeCarResendClick); + currentTaskList.ContextMenuStrip = strip; + } + + private List _listDeliveries = new List(); + + /// 将任务标记为已取消(Canceled)。 + private static void MarkDeliveryCanceled(Delivery d) + { + if (d == null) return; + lock (d.SyncStatus) + { + d.Canceled = true; + d.Active = false; + } + } + + /// + /// 将任务状态重置为 Waiting。 + /// 当 clearCarForChange=true 时,仅当状态为 Suspended 或 Waiting 且未处于放货阶段时, + /// 才会清空 UsingCar 并返回 true;否则返回 false。 + /// + private static bool MarkDeliveryWaiting(Delivery d, bool clearCarForChange) + { + if (d == null) return false; + lock (d.SyncStatus) + { + var status = d.GetStatus(); + if (clearCarForChange) + { + if ((status is not DeliveryStatus.Suspended and not DeliveryStatus.Waiting) || d.Putting) + { + return false; + } + + d.UsingCar = null; + } + else + { + d.SkipFetch = d.Putting; + } + + d.Active = false; + d.Finished = false; + d.Error = false; + d.Canceled = false; + d.Terminated = false; + d.Suspended = false; + return true; + } + } + + protected virtual string[] GetDisplayContent(Delivery dd) + { + var srcName =SimpleLib.GetSite(dd.Src).name; + var dstName =SimpleLib.GetSite(dd.Dst).name; + var now = DateTime.Now; + var usingCar = dd.UsingCar == null ? string.Empty : dd.UsingCar.name; + return + [ + $"{dd.Id}", + $"{usingCar}", + $"{dd.Src}-{srcName}", + $"{dd.Dst}-{dstName}", + $"{dd.GetStatus()}", + $"{dd.CreateTime:yyyy-mm-dd HH:mm:ss:fff}", + $"{dd.StartTime:yyyy-mm-dd HH:mm:ss:fff}", + $"{dd.FinishTime:yyyy-mm-dd HH:mm:ss:fff}", + + $"{dd.Priority}", + $"{((now - dd.CreateTime).TotalMinutes > OverdueMinutesThreshold ? 1 : 0)}", + $"{dd.Id}" + ]; + } + + private void TaskFlush() + { + _listDeliveries.Clear(); + try + { + foreach (var cdm in SimpleProject.proj.Missions.OfType()) + foreach (var dd in cdm.GetDeliveries(checkBox1.Checked, checkBox2.Checked,checkBox2.Checked,checkBox2.Checked)) + _listDeliveries.Add(GetDisplayContent(dd)); + + if (_listDeliveries.Count > 0) + { + var len = _listDeliveries[0].Length; + if (len > 0) _listDeliveries = _listDeliveries.OrderByDescending(p => int.Parse(p[len - 2])).ToList(); + } + } + catch (Exception ex) + { + Diagnosis.Post($"TaskFlush 异常: {ExceptionFormatter.FormatEx(ex)}"); + } + + } + + private void timer1_Tick(object sender, EventArgs e) + { + try + { + TaskFlush(); + currentTaskList.VirtualListSize = _listDeliveries.Count; + currentTaskList.Invalidate(); + } + catch (Exception ex) + { + Diagnosis.Post($"timer1_Tick 异常: {ExceptionFormatter.FormatEx(ex)}"); + } + + } + + private void currentTaskList_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) + { + try + { + var n = e.ItemIndex; + e.Item = new ListViewItem(_listDeliveries[n]); + if (_listDeliveries[n].Length > DisplayColumnIndexOverdueFlag && _listDeliveries[n][DisplayColumnIndexOverdueFlag] == "1") + e.Item.ForeColor = Color.Red; + if (_selectedIndicesCache.Contains(n)) + e.Item.BackColor = SelectedRowBackColor; + } + catch (Exception) + { + e.Item = new ListViewItem(["", "", "", "", "", "", "", "", ""]); + } + } + + private void currentTaskList_MouseClick(object sender, MouseEventArgs e) + { + if (e.Button != MouseButtons.Right) return; + _item = currentTaskList.GetItemAt(e.X, e.Y); + } + + private void ResendClick(object sender, EventArgs e) + { + if (_item == null) return; + string taskCode = _item.Text; + try + { + var cdm = SimpleProject.proj.Missions.OfType().FirstOrDefault(); + if (cdm == null) return; + var d = cdm.GetDeliveries(true, true, true, true) + .OfType() + .FirstOrDefault(s => s.Id == taskCode); + if (d == null) + { + MessageBox.Show("列表中不存在目标任务", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + var ms = MessageBox.Show($"是否重发任务--{taskCode}", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); + if (ms != System.Windows.Forms.DialogResult.OK) return; + if (!MarkDeliveryWaiting(d, clearCarForChange: false)) + { + MessageBox.Show("重发任务失败:当前状态不允许重发", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + // 状态已改为 Waiting,持久化 + cdm.PersistDelivery(d); + } + catch (Exception) + { + MessageBox.Show("列表中不存在目标任务", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + + private void CancelClick(object sender, EventArgs e) + { + if (_item == null) return; + string str = _item.Text; + try + { + var cdm = SimpleProject.proj.Missions.OfType().FirstOrDefault(); + if (cdm == null) return; + var d = cdm.GetDeliveries(true, true, true, true) + .OfType() + .FirstOrDefault(s => s.Id == str); + if (d == null) + { + MessageBox.Show("列表中不存在目标任务", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + var ms = MessageBox.Show($"是否结束任务--{str}", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); + if (ms != System.Windows.Forms.DialogResult.OK || d.IsFinished()) return; + + // 1) 状态上将任务标记为已取消 + MarkDeliveryCanceled(d); + + // 2) 若小车当前正在执行该任务,则下发 reset 指令 + bool excutingTask = d.UsingCar != null && d.UsingCar.tags.IsEqual("taskCode", d.TaskId); + if (excutingTask && d.UsingCar != null + && (d.UsingCar.tags?.Contains("occupied") == true || (d.UsingCar.status?.pendingLocks?.Length ?? 0) != 0)) + { + _ = SharedHttpClient.GetStringAsync($"http://{d.UsingCar.address}:8008/reset"); + Diagnosis.Log($"手动结束任务;{d.TaskId}", "task", true); + } + + // 3) 持久化已取消状态 + cdm.PersistDelivery(d); + } + catch (Exception ex) + { + Diagnosis.Post($"结束任务 {str} 异常: {ExceptionFormatter.FormatEx(ex)}"); + } + } + + private void ChangeCarResendClick(object sender, EventArgs e) + { + if (_item == null) return; + string taskCode = _item.Text; + try + { + var cdm = SimpleProject.proj.Missions.OfType().FirstOrDefault(); + if (cdm == null) return; + var d = cdm.GetDeliveries(true, true, true, true) + .OfType() + .FirstOrDefault(s => s.Id == taskCode); + if (d == null) + { + MessageBox.Show("列表中不存在目标任务", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + var ms = MessageBox.Show($"是否换车重发任务--{taskCode}", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); + if (ms != System.Windows.Forms.DialogResult.OK) return; + + if (!MarkDeliveryWaiting(d, clearCarForChange: true)) + { + MessageBox.Show("换车重发失败:仅当任务状态为 Suspended 或 Waiting 且未处于放货阶段时才允许换车重发", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + // 状态已改为 Waiting 且 UsingCar 已清空,持久化 + cdm.PersistDelivery(d); + } + catch (Exception ex) + { + Diagnosis.Post($"换车重发任务 {taskCode} 异常: {ExceptionFormatter.FormatEx(ex)}"); + MessageBox.Show("换车重发任务异常,请查看日志", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + + private void DeliveryViewer_FormClosing(object sender, FormClosingEventArgs e) + { + if (e.CloseReason == CloseReason.UserClosing) + { + e.Cancel = true; + this.Visible = false; + timer1.Stop(); + } + } + + protected override void SetVisibleCore(bool value) + { + if (!IsHandleCreated && value) + CreateHandle(); + bool wasVisible = Visible; + base.SetVisibleCore(value); + if (value && !wasVisible) + timer1.Start(); + } + + private void currentTaskList_SelectedIndexChanged(object sender, EventArgs e) + { + _selectedIndicesCache.Clear(); + foreach (int i in currentTaskList.SelectedIndices) + _selectedIndicesCache.Add(i); + this.BeginInvoke(() => currentTaskList.Invalidate()); + } + } +} diff --git a/StandardScene.Core/Chained/DeliveryViewer.designer.cs b/StandardScene.Core/Chained/DeliveryViewer.designer.cs new file mode 100644 index 0000000..d41121f --- /dev/null +++ b/StandardScene.Core/Chained/DeliveryViewer.designer.cs @@ -0,0 +1,206 @@ + +using System.Windows.Forms; + +namespace StandardScene.Chained +{ + partial class DeliveryViewer + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + if (disposing) + { + strip?.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.currentTaskList = new System.Windows.Forms.ListView(); + this.columnHeader8 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader9 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader6 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader7 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.label2 = new System.Windows.Forms.Label(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.SuspendLayout(); + // + // currentTaskList + // + this.currentTaskList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.currentTaskList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader8, + this.columnHeader1, + this.columnHeader4, + this.columnHeader5, + this.columnHeader9, + this.columnHeader6, + this.columnHeader2, + this.columnHeader7, + this.columnHeader3}); + this.currentTaskList.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.currentTaskList.FullRowSelect = true; + this.currentTaskList.GridLines = true; + this.currentTaskList.HideSelection = false; + this.currentTaskList.Location = new System.Drawing.Point(38, 62); + this.currentTaskList.Name = "currentTaskList"; + this.currentTaskList.Size = new System.Drawing.Size(1146, 429); + this.currentTaskList.TabIndex = 2; + this.currentTaskList.UseCompatibleStateImageBehavior = false; + this.currentTaskList.View = System.Windows.Forms.View.Details; + this.currentTaskList.VirtualMode = true; + this.currentTaskList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.currentTaskList_RetrieveVirtualItem); + this.currentTaskList.SelectedIndexChanged += new System.EventHandler(this.currentTaskList_SelectedIndexChanged); + this.currentTaskList.MouseClick += new System.Windows.Forms.MouseEventHandler(this.currentTaskList_MouseClick); + // + // columnHeader8 + // + this.columnHeader8.Text = "任务号"; + this.columnHeader8.Width = 130; + // + // columnHeader1 + // + this.columnHeader1.Text = "小车"; + this.columnHeader1.Width = 100; + // + // columnHeader4 + // + this.columnHeader4.Text = "取货点"; + this.columnHeader4.Width = 130; + // + // columnHeader5 + // + this.columnHeader5.Text = "放货点"; + this.columnHeader5.Width = 130; + // + // columnHeader9 + // + this.columnHeader9.Text = "任务状态"; + this.columnHeader9.Width = 100; + // + // columnHeader6 + // + this.columnHeader6.Text = "下发时间"; + this.columnHeader6.Width = 130; + // + // columnHeader2 + // + this.columnHeader2.Text = "执行时间"; + this.columnHeader2.Width = 130; + // + // columnHeader7 + // + this.columnHeader7.Text = "结束时间"; + this.columnHeader7.Width = 130; + // + // columnHeader3 + // + this.columnHeader3.Text = "优先级"; + this.columnHeader3.Width = 83; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label2.Location = new System.Drawing.Point(33, 7); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(88, 26); + this.label2.TabIndex = 3; + this.label2.Text = "任务列表"; + // + // timer1 + // + this.timer1.Enabled = true; + this.timer1.Interval = 1000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(127, 15); + this.checkBox1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(108, 16); + this.checkBox1.TabIndex = 4; + this.checkBox1.Text = "显示已完成任务"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.Checked = true; + this.checkBox2.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox2.Location = new System.Drawing.Point(239, 14); + this.checkBox2.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(318, 16); + this.checkBox2.TabIndex = 5; + this.checkBox2.Text = "显示废止的任务(包括Error、Canceled、Terminated)"; + this.checkBox2.UseVisualStyleBackColor = true; + // + // DeliveryViewer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1199, 551); + this.Controls.Add(this.checkBox2); + this.Controls.Add(this.checkBox1); + this.Controls.Add(this.label2); + this.Controls.Add(this.currentTaskList); + this.Name = "DeliveryViewer"; + this.Text = "DeliveryViewer"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DeliveryViewer_FormClosing); + this.Load += new System.EventHandler(this.DeliveryViewer_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ColumnHeader columnHeader4; + private System.Windows.Forms.ColumnHeader columnHeader5; + private System.Windows.Forms.ColumnHeader columnHeader6; + private System.Windows.Forms.ColumnHeader columnHeader7; + private System.Windows.Forms.ColumnHeader columnHeader8; + private System.Windows.Forms.Timer timer1; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.ColumnHeader columnHeader9; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.CheckBox checkBox2; + public System.Windows.Forms.ListView currentTaskList; + private System.Windows.Forms.ColumnHeader columnHeader3; + } +} \ No newline at end of file diff --git a/StandardScene.Core/Chained/DeliveryViewer.resx b/StandardScene.Core/Chained/DeliveryViewer.resx new file mode 100644 index 0000000..1f666f2 --- /dev/null +++ b/StandardScene.Core/Chained/DeliveryViewer.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/StandardScene.Core/Chained/Loop/ILoopRules.cs b/StandardScene.Core/Chained/Loop/ILoopRules.cs new file mode 100644 index 0000000..4759d2e --- /dev/null +++ b/StandardScene.Core/Chained/Loop/ILoopRules.cs @@ -0,0 +1,58 @@ +using StandardScene.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static StandardScene.Chained.AbstractLoopMission; + +namespace StandardScene.Chained.Loop +{ + /// + /// 进入点规则:返回是否允许进入。 + /// + public interface IEnterRule + { + bool CanEnter(LoopPoint point, LoopTask task, object context = null); + } + + /// + /// 离开点规则:返回是否允许离开。 + /// + public interface IExitRule + { + bool CanExit(LoopPoint point, LoopTask task, object context = null); + } + + /// + /// 合流规则:从候选任务中选择一个 + /// + public interface IJoinRule + { + LoopTask SelectJoin(IEnumerable candidates, LoopPoint point); + } + + /// + /// 分流规则:为任务选取下一分支标识 + /// + public interface IBranchRule + { + string SelectBranch(LoopPoint point, LoopTask task, object context = null); + } + + /// + /// 任务策略接口:提供任务数据来源与基础策略决策(由 LoopViewer 或其它组件实现/替换)。 + /// + public interface ITaskStrategy + { + /// + /// 返回当前策略下的任务集合(策略负责数据来源,例如读取 LoopViewer 的 JSON)。 + /// + IEnumerable GetTasks(); + + /// + /// 刷新策略数据(例如重新加载 JSON)。 + /// + void Refresh(); + } +} diff --git a/StandardScene.Core/Chained/Loop/ITriggerAdapter.cs b/StandardScene.Core/Chained/Loop/ITriggerAdapter.cs new file mode 100644 index 0000000..cea8c15 --- /dev/null +++ b/StandardScene.Core/Chained/Loop/ITriggerAdapter.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StandardScene.Chained.Loop +{ + /// + /// 触发器适配器统一接口:外部设备(PLC、按钮盒、API 网关等)实现此接口并触发事件。 + /// + public interface ITriggerAdapter : IDisposable + { + /// + /// 外部触发事件:Source 用于区分来源("PLC","ButtonBox","API"等),Key/Value 为业务自定义负载。 + /// + event EventHandler TriggerRaised; + + /// + /// 可选:启动适配器(开启轮询、建立连接等)。 + /// + void Start(); + + /// + /// 可选:停止适配器。 + /// + void Stop(); + } + + public class TriggerEventArgs : EventArgs + { + public string Source { get; set; } = string.Empty; + public string Key { get; set; } = string.Empty; + public object Value { get; set; } + } +} diff --git a/StandardScene.Core/Chained/LoopMission.cs b/StandardScene.Core/Chained/LoopMission.cs new file mode 100644 index 0000000..3ad8559 --- /dev/null +++ b/StandardScene.Core/Chained/LoopMission.cs @@ -0,0 +1,163 @@ +using IoTClient.Clients.PLC; +using IoTClient.Common.Enums; +using LessokajiWeaverUtilities.Utilities; +using Newtonsoft.Json; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore.Library; +using StandardScene.Chained; +using StandardScene.Model; +using System.Collections.Concurrent; +using System.Threading; +using static StandardScene.Chained.AbstractLoopMission; + +namespace StandardScene +{ + + + public class LoopMissionStatus : AbstractLoopMissionStatus + { + + } + + [MissionType(Name = "环线进程", editor = typeof(LoopMission))] + [I18N.DocumentTranslation(Name = "Loop Mission", locale = "en")] + public class LoopMission : AbstractLoopMission + { + [JsonIgnore] public override MissionStatus status { get; set; } = new LoopMissionStatus(); + [JsonIgnore] public Thread myThread; + [JsonIgnore] public bool started = false; + [JsonIgnore] private readonly ConcurrentDictionary _buttonTriggeredSiteIds = new ConcurrentDictionary(); + public float ChargesocStandard = 30; + + public float NoChargesocStandard = 80; + + + + /// + /// API 触发:检查站点物料状态 + /// + protected override ExternalTriggerResult OnApiTrigger(int currentSiteId, LoopTask task, Car car) + { + /* var site = SimpleLib.GetSite(currentSiteId); + if (site != null && site.fields.TryGetValue("hasMaterial", out var val) && val == "true") + { + // 物料存在,使用配置目标 + return ExternalTriggerResult.UseConfigTarget(); + } + return ExternalTriggerResult.Fail();*/ + if (car.status.enums.TryGetValue("Soc", out var soc)) + { + if (float.Parse(soc) <= ChargesocStandard) + { + //使用配置目标 + return ExternalTriggerResult.UseConfigTarget(); + } + + } + + /* var plcTarget = 17; + if (plcTarget > 0) + { + // PLC 指定了目标站点 + return ExternalTriggerResult.UseTarget(plcTarget); + }*/ + return ExternalTriggerResult.Fail(); + } + + /// + /// PLC 触发:根据 PLC 信号决定目标 + /// + protected override ExternalTriggerResult OnPlcTrigger(int currentSiteId, LoopTask task, Car car) + { + //var plcTarget = ReadPlcTargetSite(currentSiteId); + SiemensClient client = new SiemensClient(SiemensVersion.S7_200Smart, "127.0.0.1", 103); + var M100 = client.ReadBoolean("M100").Value; + if (M100) + { + //使用配置目标 + return ExternalTriggerResult.UseConfigTarget(); + + } + + /* var plcTarget = 17; + if (plcTarget > 0) + { + // PLC 指定了目标站点 + return ExternalTriggerResult.UseTarget(plcTarget); + }*/ + return ExternalTriggerResult.Fail(); + } + protected override ExternalTriggerResult OnChargeTrigger(int currentSiteId, LoopTask task, Car car) + { + + //使用配置目标 + return ExternalTriggerResult.UseConfigTarget(); + if (car.status.enums.TryGetValue("Soc", out var soc)) + { + if (float.Parse(soc) >= NoChargesocStandard) + { + //使用配置目标 + return ExternalTriggerResult.UseConfigTarget(); + } + + } + } + + /// + /// 供 ButtonMission 反射调用:登记一个需要按钮放行的站点。 + /// 如果站点已经存在于字典中则忽略,避免重复放行信号堆积。 + /// + /// 需要放行的站点 ID,通常对应 LoopTask.CurrentStationId + /// 始终返回 true,表示本次按钮触发已被接受 + public bool EnqueueButtonTriggerSite(int siteId) + { + if (siteId <= 0) + { + Diagnosis.Log($"按钮放行登记失败:无效站点 {siteId}", "LoopMission", true); + return false; + } + + var car = FindCarArrivedAtSite(siteId); + if (car == null) + { + Diagnosis.Post($"按钮放行登记忽略:站点 {siteId} 当前没有到站车辆", "LoopMission", false); + return false; + } + + if (_buttonTriggeredSiteIds.TryAdd(siteId, 0)) + { + Diagnosis.Post($"按钮放行登记成功:站点 {siteId},车辆 {car.name}", "LoopMission", false); + } + else + { + Diagnosis.Post($"按钮放行已存在,忽略重复登记:站点 {siteId}", "LoopMission", false); + } + + return true; + } + + /// + /// 按钮盒触发:只有当前站点已被按钮登记过,才允许使用配置目标放行。 + /// 命中后立即消费并删除,保证一次按钮只放行一次。 + /// + protected override ExternalTriggerResult OnButtonTrigger(int currentSiteId, LoopTask task, Car car) + { + if (_buttonTriggeredSiteIds.TryRemove(currentSiteId, out _)) + { + Diagnosis.Post($"按钮放行消费成功:站点 {currentSiteId},车辆 {car?.name}", "LoopMission", false); + return ExternalTriggerResult.UseConfigTarget(); + } + + return ExternalTriggerResult.Fail(); + } + + /* private int ReadPlcTargetSite(int siteId) + { + // 从 PLC 读取目标站点的业务逻辑 + // 返回 0 表示未获取到有效目标 + return 0; + } + */ + } +} diff --git a/StandardScene.Core/Chained/LoopViewer.Designer.cs b/StandardScene.Core/Chained/LoopViewer.Designer.cs new file mode 100644 index 0000000..c9c8888 --- /dev/null +++ b/StandardScene.Core/Chained/LoopViewer.Designer.cs @@ -0,0 +1,570 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace LoopViewerApp +{ + partial class LoopViewer + { + private System.ComponentModel.IContainer components = null; + + private ComboBox cmbTaskKind; + private NumericUpDown numCurrent; + private NumericUpDown numTarget; + private NumericUpDown numTraffic; + private CheckBox chkViaPoint; + private ComboBox cmbStartType; + private NumericUpDown numPriority; + private Button btnEdit; // 保留字段以供代码逻辑/样式使用(在界面上隐藏) + private Button btnDelete; // 保留字段以供代码逻辑/样式使用(在界面上隐藏) + private Button btnSave; + private Button btnCancel; + private ListView lstTasks; + private GroupBox grpEdit; + + // 布局控件 + private SplitContainer splitContainer; + private TableLayoutPanel tlpEdit; + private FlowLayoutPanel flpButtons; + + // 中间竖向按钮(列表与编辑区之间) + private Panel pnlMiddle; + private FlowLayoutPanel flpMiddle; + private Button btnMiddleEdit; + private Button btnMiddleDelete; + + // 列头 + private ColumnHeader colId; + private ColumnHeader colTaskType; + private ColumnHeader colCurrent; + private ColumnHeader colTarget; + private ColumnHeader colTraffic; + private ColumnHeader colPriority; + private ColumnHeader colViaPoint; + private ColumnHeader colStartType; + + // 标签字段(编辑区) + private Label lblKind; + private Label lblCurrent; + private Label lblTarget; + private Label lblTraffic; + private Label lblPriority; + private Label lblVia; + private Label lblStartType; + private Label lblEditingId; // 显示当前编辑的任务ID + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.pnlMiddle = new System.Windows.Forms.Panel(); + this.flpMiddle = new System.Windows.Forms.FlowLayoutPanel(); + this.btnMiddleEdit = new System.Windows.Forms.Button(); + this.btnMiddleDelete = new System.Windows.Forms.Button(); + this.lstTasks = new System.Windows.Forms.ListView(); + this.colId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.colTaskType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.colCurrent = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.colTarget = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.colTraffic = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.colPriority = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.colViaPoint = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.colStartType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.grpEdit = new System.Windows.Forms.GroupBox(); + this.tlpEdit = new System.Windows.Forms.TableLayoutPanel(); + this.lblEditingId = new System.Windows.Forms.Label(); + this.lblKind = new System.Windows.Forms.Label(); + this.cmbTaskKind = new System.Windows.Forms.ComboBox(); + this.lblCurrent = new System.Windows.Forms.Label(); + this.numCurrent = new System.Windows.Forms.NumericUpDown(); + this.lblTarget = new System.Windows.Forms.Label(); + this.numTarget = new System.Windows.Forms.NumericUpDown(); + this.lblTraffic = new System.Windows.Forms.Label(); + this.numTraffic = new System.Windows.Forms.NumericUpDown(); + this.lblPriority = new System.Windows.Forms.Label(); + this.numPriority = new System.Windows.Forms.NumericUpDown(); + this.lblVia = new System.Windows.Forms.Label(); + this.chkViaPoint = new System.Windows.Forms.CheckBox(); + this.lblStartType = new System.Windows.Forms.Label(); + this.cmbStartType = new System.Windows.Forms.ComboBox(); + this.flpButtons = new System.Windows.Forms.FlowLayoutPanel(); + this.btnSave = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.btnEdit = new System.Windows.Forms.Button(); + this.btnDelete = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + this.pnlMiddle.SuspendLayout(); + this.flpMiddle.SuspendLayout(); + this.grpEdit.SuspendLayout(); + this.tlpEdit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numCurrent)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numTarget)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numTraffic)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numPriority)).BeginInit(); + this.flpButtons.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer + // + this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer.Location = new System.Drawing.Point(0, 0); + this.splitContainer.Name = "splitContainer"; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.pnlMiddle); + this.splitContainer.Panel1.Controls.Add(this.lstTasks); + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.grpEdit); + this.splitContainer.Size = new System.Drawing.Size(1200, 600); + this.splitContainer.SplitterDistance = 680; + this.splitContainer.SplitterWidth = 6; + this.splitContainer.TabIndex = 0; + // + // pnlMiddle + // + this.pnlMiddle.Controls.Add(this.flpMiddle); + this.pnlMiddle.Dock = System.Windows.Forms.DockStyle.Right; + this.pnlMiddle.Location = new System.Drawing.Point(614, 0); + this.pnlMiddle.Name = "pnlMiddle"; + this.pnlMiddle.Padding = new System.Windows.Forms.Padding(6); + this.pnlMiddle.Size = new System.Drawing.Size(66, 600); + this.pnlMiddle.TabIndex = 0; + // + // flpMiddle + // + this.flpMiddle.Anchor = System.Windows.Forms.AnchorStyles.None; + this.flpMiddle.Controls.Add(this.btnMiddleEdit); + this.flpMiddle.Controls.Add(this.btnMiddleDelete); + this.flpMiddle.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.flpMiddle.Location = new System.Drawing.Point(0, 220); + this.flpMiddle.Name = "flpMiddle"; + this.flpMiddle.Padding = new System.Windows.Forms.Padding(2); + this.flpMiddle.Size = new System.Drawing.Size(63, 160); + this.flpMiddle.TabIndex = 0; + this.flpMiddle.WrapContents = false; + // + // btnMiddleEdit + // + this.btnMiddleEdit.BackColor = System.Drawing.SystemColors.Control; + this.btnMiddleEdit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnMiddleEdit.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btnMiddleEdit.Location = new System.Drawing.Point(6, 12); + this.btnMiddleEdit.Margin = new System.Windows.Forms.Padding(4, 10, 4, 4); + this.btnMiddleEdit.Name = "btnMiddleEdit"; + this.btnMiddleEdit.Size = new System.Drawing.Size(50, 40); + this.btnMiddleEdit.TabIndex = 0; + this.btnMiddleEdit.Text = "编辑"; + this.btnMiddleEdit.UseVisualStyleBackColor = false; + this.btnMiddleEdit.Click += new System.EventHandler(this.btnEdit_Click); + // + // btnMiddleDelete + // + this.btnMiddleDelete.BackColor = System.Drawing.Color.LightCoral; + this.btnMiddleDelete.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnMiddleDelete.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btnMiddleDelete.Location = new System.Drawing.Point(6, 62); + this.btnMiddleDelete.Margin = new System.Windows.Forms.Padding(4, 6, 4, 4); + this.btnMiddleDelete.Name = "btnMiddleDelete"; + this.btnMiddleDelete.Size = new System.Drawing.Size(50, 40); + this.btnMiddleDelete.TabIndex = 1; + this.btnMiddleDelete.Text = "删除"; + this.btnMiddleDelete.UseVisualStyleBackColor = false; + this.btnMiddleDelete.Click += new System.EventHandler(this.btnDelete_Click); + // + // lstTasks + // + this.lstTasks.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.colId, + this.colTaskType, + this.colCurrent, + this.colTarget, + this.colTraffic, + this.colPriority, + this.colViaPoint, + this.colStartType}); + this.lstTasks.Dock = System.Windows.Forms.DockStyle.Fill; + this.lstTasks.FullRowSelect = true; + this.lstTasks.HideSelection = false; + this.lstTasks.Location = new System.Drawing.Point(0, 0); + this.lstTasks.Name = "lstTasks"; + this.lstTasks.OwnerDraw = true; + this.lstTasks.Size = new System.Drawing.Size(680, 600); + this.lstTasks.TabIndex = 0; + this.lstTasks.UseCompatibleStateImageBehavior = false; + this.lstTasks.View = System.Windows.Forms.View.Details; + this.lstTasks.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.lstTasks_DrawColumnHeader); + this.lstTasks.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.lstTasks_DrawItem); + this.lstTasks.DrawSubItem += new System.Windows.Forms.DrawListViewSubItemEventHandler(this.lstTasks_DrawSubItem); + this.lstTasks.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lstTasks_MouseDoubleClick); + // + // colId + // + this.colId.Text = "ID"; + this.colId.Width = 40; + // + // colTaskType + // + this.colTaskType.Text = "任务类别"; + this.colTaskType.Width = 110; + // + // colCurrent + // + this.colCurrent.Text = "当前站点"; + this.colCurrent.Width = 90; + // + // colTarget + // + this.colTarget.Text = "目标站点"; + this.colTarget.Width = 90; + // + // colTraffic + // + this.colTraffic.Text = "流量控制"; + this.colTraffic.Width = 90; + // + // colPriority + // + this.colPriority.Text = "优先级"; + this.colPriority.Width = 80; + // + // colViaPoint + // + this.colViaPoint.Text = "途径点"; + this.colViaPoint.Width = 70; + // + // colStartType + // + this.colStartType.Text = "启动类型"; + this.colStartType.Width = 100; + // + // grpEdit + // + this.grpEdit.Controls.Add(this.tlpEdit); + this.grpEdit.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpEdit.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Bold); + this.grpEdit.Location = new System.Drawing.Point(0, 0); + this.grpEdit.Name = "grpEdit"; + this.grpEdit.Size = new System.Drawing.Size(514, 600); + this.grpEdit.TabIndex = 1; + this.grpEdit.TabStop = false; + this.grpEdit.Text = "任务信息(选中列表项后可编辑)"; + // + // tlpEdit + // + this.tlpEdit.ColumnCount = 2; + this.tlpEdit.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 120F)); + this.tlpEdit.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpEdit.Controls.Add(this.lblEditingId, 0, 0); + this.tlpEdit.Controls.Add(this.lblKind, 0, 1); + this.tlpEdit.Controls.Add(this.cmbTaskKind, 1, 1); + this.tlpEdit.Controls.Add(this.lblCurrent, 0, 2); + this.tlpEdit.Controls.Add(this.numCurrent, 1, 2); + this.tlpEdit.Controls.Add(this.lblTarget, 0, 3); + this.tlpEdit.Controls.Add(this.numTarget, 1, 3); + this.tlpEdit.Controls.Add(this.lblTraffic, 0, 4); + this.tlpEdit.Controls.Add(this.numTraffic, 1, 4); + this.tlpEdit.Controls.Add(this.lblPriority, 0, 5); + this.tlpEdit.Controls.Add(this.numPriority, 1, 5); + this.tlpEdit.Controls.Add(this.lblVia, 0, 6); + this.tlpEdit.Controls.Add(this.chkViaPoint, 1, 6); + this.tlpEdit.Controls.Add(this.lblStartType, 0, 7); + this.tlpEdit.Controls.Add(this.cmbStartType, 1, 7); + this.tlpEdit.Controls.Add(this.flpButtons, 1, 8); + this.tlpEdit.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpEdit.Location = new System.Drawing.Point(3, 25); + this.tlpEdit.Name = "tlpEdit"; + this.tlpEdit.Padding = new System.Windows.Forms.Padding(8); + this.tlpEdit.RowCount = 9; + this.tlpEdit.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); + this.tlpEdit.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); + this.tlpEdit.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); + this.tlpEdit.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); + this.tlpEdit.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); + this.tlpEdit.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); + this.tlpEdit.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); + this.tlpEdit.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 36F)); + this.tlpEdit.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpEdit.Size = new System.Drawing.Size(508, 572); + this.tlpEdit.TabIndex = 0; + // + // lblEditingId + // + this.lblEditingId.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.lblEditingId.AutoSize = true; + this.tlpEdit.SetColumnSpan(this.lblEditingId, 2); + this.lblEditingId.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Bold); + this.lblEditingId.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(120)))), ((int)(((byte)(215))))); + this.lblEditingId.Location = new System.Drawing.Point(11, 14); + this.lblEditingId.Name = "lblEditingId"; + this.lblEditingId.Size = new System.Drawing.Size(78, 24); + this.lblEditingId.TabIndex = 0; + this.lblEditingId.Text = "新增任务"; + // + // lblKind + // + this.lblKind.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblKind.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblKind.Location = new System.Drawing.Point(11, 44); + this.lblKind.Name = "lblKind"; + this.lblKind.Size = new System.Drawing.Size(114, 36); + this.lblKind.TabIndex = 1; + this.lblKind.Text = "任务类别:"; + this.lblKind.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // cmbTaskKind + // + this.cmbTaskKind.Dock = System.Windows.Forms.DockStyle.Fill; + this.cmbTaskKind.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbTaskKind.Font = new System.Drawing.Font("微软雅黑", 10F); + this.cmbTaskKind.Items.AddRange(new object[] { + "Loop", + "BranchPoint", + "JoinPoint"}); + this.cmbTaskKind.Location = new System.Drawing.Point(131, 47); + this.cmbTaskKind.Name = "cmbTaskKind"; + this.cmbTaskKind.Size = new System.Drawing.Size(366, 31); + this.cmbTaskKind.TabIndex = 2; + // + // lblCurrent + // + this.lblCurrent.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblCurrent.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblCurrent.Location = new System.Drawing.Point(11, 80); + this.lblCurrent.Name = "lblCurrent"; + this.lblCurrent.Size = new System.Drawing.Size(114, 36); + this.lblCurrent.TabIndex = 3; + this.lblCurrent.Text = "当前站点:"; + this.lblCurrent.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // numCurrent + // + this.numCurrent.Dock = System.Windows.Forms.DockStyle.Left; + this.numCurrent.Font = new System.Drawing.Font("微软雅黑", 10F); + this.numCurrent.Location = new System.Drawing.Point(131, 83); + this.numCurrent.Maximum = new decimal(new int[] { + 1000000, + 0, + 0, + 0}); + this.numCurrent.Name = "numCurrent"; + this.numCurrent.Size = new System.Drawing.Size(120, 29); + this.numCurrent.TabIndex = 4; + // + // lblTarget + // + this.lblTarget.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblTarget.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblTarget.Location = new System.Drawing.Point(11, 116); + this.lblTarget.Name = "lblTarget"; + this.lblTarget.Size = new System.Drawing.Size(114, 36); + this.lblTarget.TabIndex = 5; + this.lblTarget.Text = "目标站点:"; + this.lblTarget.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // numTarget + // + this.numTarget.Dock = System.Windows.Forms.DockStyle.Left; + this.numTarget.Font = new System.Drawing.Font("微软雅黑", 10F); + this.numTarget.Location = new System.Drawing.Point(131, 119); + this.numTarget.Maximum = new decimal(new int[] { + 1000000, + 0, + 0, + 0}); + this.numTarget.Name = "numTarget"; + this.numTarget.Size = new System.Drawing.Size(120, 29); + this.numTarget.TabIndex = 6; + // + // lblTraffic + // + this.lblTraffic.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblTraffic.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblTraffic.Location = new System.Drawing.Point(11, 152); + this.lblTraffic.Name = "lblTraffic"; + this.lblTraffic.Size = new System.Drawing.Size(114, 36); + this.lblTraffic.TabIndex = 7; + this.lblTraffic.Text = "流量控制:"; + this.lblTraffic.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // numTraffic + // + this.numTraffic.Dock = System.Windows.Forms.DockStyle.Left; + this.numTraffic.Font = new System.Drawing.Font("微软雅黑", 10F); + this.numTraffic.Location = new System.Drawing.Point(131, 155); + this.numTraffic.Maximum = new decimal(new int[] { + 1000, + 0, + 0, + 0}); + this.numTraffic.Name = "numTraffic"; + this.numTraffic.Size = new System.Drawing.Size(120, 29); + this.numTraffic.TabIndex = 8; + // + // lblPriority + // + this.lblPriority.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblPriority.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblPriority.Location = new System.Drawing.Point(11, 188); + this.lblPriority.Name = "lblPriority"; + this.lblPriority.Size = new System.Drawing.Size(114, 36); + this.lblPriority.TabIndex = 9; + this.lblPriority.Text = "优先级:"; + this.lblPriority.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // numPriority + // + this.numPriority.Dock = System.Windows.Forms.DockStyle.Left; + this.numPriority.Font = new System.Drawing.Font("微软雅黑", 10F); + this.numPriority.Location = new System.Drawing.Point(131, 191); + this.numPriority.Name = "numPriority"; + this.numPriority.Size = new System.Drawing.Size(120, 29); + this.numPriority.TabIndex = 10; + this.numPriority.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // lblVia + // + this.lblVia.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblVia.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblVia.Location = new System.Drawing.Point(11, 224); + this.lblVia.Name = "lblVia"; + this.lblVia.Size = new System.Drawing.Size(114, 36); + this.lblVia.TabIndex = 11; + this.lblVia.Text = "途径点:"; + this.lblVia.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // chkViaPoint + // + this.chkViaPoint.Dock = System.Windows.Forms.DockStyle.Left; + this.chkViaPoint.Font = new System.Drawing.Font("微软雅黑", 10F); + this.chkViaPoint.Location = new System.Drawing.Point(131, 227); + this.chkViaPoint.Name = "chkViaPoint"; + this.chkViaPoint.Size = new System.Drawing.Size(104, 30); + this.chkViaPoint.TabIndex = 12; + this.chkViaPoint.Text = "是"; + // + // lblStartType + // + this.lblStartType.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblStartType.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblStartType.Location = new System.Drawing.Point(11, 260); + this.lblStartType.Name = "lblStartType"; + this.lblStartType.Size = new System.Drawing.Size(114, 36); + this.lblStartType.TabIndex = 13; + this.lblStartType.Text = "启动类型:"; + this.lblStartType.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // cmbStartType + // + this.cmbStartType.Dock = System.Windows.Forms.DockStyle.Fill; + this.cmbStartType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbStartType.Font = new System.Drawing.Font("微软雅黑", 10F); + this.cmbStartType.Items.AddRange(new object[] { + "Api", + "Plc", + "ButtonBox", + "AutoLoop", + "Charge"}); + this.cmbStartType.Location = new System.Drawing.Point(131, 263); + this.cmbStartType.Name = "cmbStartType"; + this.cmbStartType.Size = new System.Drawing.Size(366, 31); + this.cmbStartType.TabIndex = 14; + // + // flpButtons + // + this.flpButtons.AutoSize = true; + this.flpButtons.Controls.Add(this.btnSave); + this.flpButtons.Controls.Add(this.btnCancel); + this.flpButtons.Dock = System.Windows.Forms.DockStyle.Left; + this.flpButtons.Location = new System.Drawing.Point(131, 299); + this.flpButtons.Name = "flpButtons"; + this.flpButtons.Size = new System.Drawing.Size(292, 262); + this.flpButtons.TabIndex = 15; + // + // btnSave + // + this.btnSave.BackColor = System.Drawing.Color.LightBlue; + this.btnSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Bold); + this.btnSave.Location = new System.Drawing.Point(3, 3); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(140, 40); + this.btnSave.TabIndex = 0; + this.btnSave.Text = "保存"; + this.btnSave.UseVisualStyleBackColor = false; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // btnCancel + // + this.btnCancel.BackColor = System.Drawing.SystemColors.Control; + this.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCancel.Font = new System.Drawing.Font("微软雅黑", 11F); + this.btnCancel.Location = new System.Drawing.Point(149, 3); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(140, 40); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "取消"; + this.btnCancel.UseVisualStyleBackColor = false; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // btnEdit + // + this.btnEdit.Location = new System.Drawing.Point(0, 0); + this.btnEdit.Name = "btnEdit"; + this.btnEdit.Size = new System.Drawing.Size(75, 23); + this.btnEdit.TabIndex = 0; + this.btnEdit.Visible = false; + // + // btnDelete + // + this.btnDelete.Location = new System.Drawing.Point(0, 0); + this.btnDelete.Name = "btnDelete"; + this.btnDelete.Size = new System.Drawing.Size(75, 23); + this.btnDelete.TabIndex = 0; + this.btnDelete.Visible = false; + // + // LoopViewer + // + this.ClientSize = new System.Drawing.Size(1200, 600); + this.Controls.Add(this.splitContainer); + this.Font = new System.Drawing.Font("微软雅黑", 9F); + this.MinimumSize = new System.Drawing.Size(1000, 420); + this.Name = "LoopViewer"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "任务列表管理器"; + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + this.pnlMiddle.ResumeLayout(false); + this.flpMiddle.ResumeLayout(false); + this.grpEdit.ResumeLayout(false); + this.tlpEdit.ResumeLayout(false); + this.tlpEdit.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numCurrent)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numTarget)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numTraffic)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numPriority)).EndInit(); + this.flpButtons.ResumeLayout(false); + this.ResumeLayout(false); + + } + } +} \ No newline at end of file diff --git a/StandardScene.Core/Chained/LoopViewer.cs b/StandardScene.Core/Chained/LoopViewer.cs new file mode 100644 index 0000000..7a81bc4 --- /dev/null +++ b/StandardScene.Core/Chained/LoopViewer.cs @@ -0,0 +1,595 @@ +using Newtonsoft.Json; +using StandardScene.Model; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Windows.Forms; + + +namespace LoopViewerApp +{ + public partial class LoopViewer : Form + { + private readonly string jsonPath = + Path.Combine(Application.StartupPath, "tasklist.json"); + + private List tasks = new List(); + + // -1 表示新增模式;>=0 表示正在编辑对应索引 + private int editingIndex = -1; + + public LoopViewer() + { + InitializeComponent(); + + if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) + return; + + // 应用 ChargeStationManagementForm 风格的运行时样式调整 + ApplyChargeStyle(); + + EnsureComboItems(); + + // 启用多选并绑定右键菜单与 Delete 键删除功能 + try + { + if (lstTasks != null) + { + lstTasks.MultiSelect = true; + + // 右键菜单:删除 + var ctx = new ContextMenuStrip(); + ctx.Items.Add("删除", null, (s, e) => OnDeleteSelectedTasks()); + lstTasks.ContextMenuStrip = ctx; + + // 键盘删除键绑定 + lstTasks.KeyDown += lstTasks_KeyDown; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"LoopViewer context menu init error: {ex}"); + } + + try + { + InitOrLoadJson(); + RenderListView(); + UpdateSaveButtonText(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"LoopViewer initialization error: {ex}"); + } + } + + private void lstTasks_KeyDown(object sender, KeyEventArgs e) + { + try + { + if (e.KeyCode == Keys.Delete) + { + OnDeleteSelectedTasks(); + e.Handled = true; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"lstTasks_KeyDown error: {ex}"); + } + } + + /// + /// 删除 ListView 中选中的任务(支持多选) + /// + private void OnDeleteSelectedTasks() + { + try + { + if (lstTasks == null || lstTasks.SelectedIndices.Count == 0) + return; + + // 收集被选中的索引并按降序删除,避免索引移动问题 + var selectedIndices = lstTasks.SelectedIndices.Cast().OrderByDescending(i => i).ToList(); + + // 构造确认提示 + string prompt; + if (selectedIndices.Count == 1) + { + int idx = selectedIndices[0]; + if (idx >= 0 && idx < tasks.Count) + prompt = $"确认删除任务 ID={tasks[idx].Id}?"; + else + prompt = "确认删除选中任务?"; + } + else + { + prompt = $"确认删除所选 {selectedIndices.Count} 个任务?"; + } + + if (MessageBox.Show(prompt, "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) + return; + + // 删除任务 + foreach (var idx in selectedIndices) + { + if (idx >= 0 && idx < tasks.Count) + { + tasks.RemoveAt(idx); + } + } + + // 如果被删除项包含当前正在编辑的项,退出编辑状态 + if (editingIndex >= 0) + { + if (editingIndex >= tasks.Count || selectedIndices.Any(i => i == editingIndex)) + { + editingIndex = -1; + UpdateSaveButtonText(); + ClearPanelInputs(); + } + else + { + // 重新计算编辑索引在删除后的新位置 + int removedBefore = selectedIndices.Count(i => i < editingIndex); + editingIndex -= removedBefore; + } + } + + // 持久化并刷新列表视图 + Save(); + RenderListView(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"OnDeleteSelectedTasks error: {ex}"); + MessageBox.Show("删除失败:" + ex.Message); + } + } + + /// + /// 将 LoopViewer 的运行时样式调整为与 ChargeStationManagementForm 接近的视觉风格: + /// - 全局字体设为微软雅黑 + /// - 表头暖色替换为蓝色沉稳风格(和充电界面一致) + /// - 按钮字号、背景色与充电界面保持一致(保存/删除/取消) + /// - 列表视图设置为整行选择、无边框、交替背景等 + /// 注意:不修改 Designer 文件,仅在运行时统一控件表现,避免破坏设计器生成代码。 + /// + private void ApplyChargeStyle() + { + try + { + // 窗体级设置 + this.StartPosition = FormStartPosition.CenterScreen; + this.MinimumSize = new System.Drawing.Size(1327, 738); + this.Font = new Font("微软雅黑", 9F, FontStyle.Regular); + + // 调整 ListView(如果存在) + if (lstTasks != null) + { + lstTasks.View = View.Details; + lstTasks.FullRowSelect = true; + lstTasks.GridLines = false; + lstTasks.HeaderStyle = ColumnHeaderStyle.Nonclickable; + lstTasks.OwnerDraw = true; // 已有自定义绘制 + lstTasks.BackColor = Color.White; + lstTasks.ForeColor = Color.FromArgb(33, 33, 33); + // 多选由初始化时控制(这里不强制) + } + + // 下拉框统一字体 + if (cmbTaskKind != null) cmbTaskKind.Font = new Font("微软雅黑", 10F, FontStyle.Regular); + if (cmbStartType != null) cmbStartType.Font = new Font("微软雅黑", 10F, FontStyle.Regular); + + // 数值输入框统一字体 + if (numCurrent != null) numCurrent.Font = new Font("微软雅黑", 10F, FontStyle.Regular); + if (numTarget != null) numTarget.Font = new Font("微软雅黑", 10F, FontStyle.Regular); + if (numTraffic != null) numTraffic.Font = new Font("微软雅黑", 10F, FontStyle.Regular); + if (numPriority != null) numPriority.Font = new Font("微软雅黑", 10F, FontStyle.Regular); + + // 标签字体统一 + if (lblEditingId != null) lblEditingId.Font = new Font("微软雅黑", 10F, FontStyle.Bold); + + // 按钮风格:与 ChargeStationManagementForm 保持一致的视觉优先级 + if (btnSave != null) + { + btnSave.BackColor = Color.LightBlue; + btnSave.ForeColor = Color.Black; + btnSave.Font = new Font("微软雅黑", 11F, FontStyle.Bold); + btnSave.FlatStyle = FlatStyle.Flat; + } + if (btnDelete != null) + { + btnDelete.BackColor = Color.LightCoral; + btnDelete.ForeColor = Color.Black; + btnDelete.Font = new Font("微软雅黑", 11F, FontStyle.Bold); + btnDelete.FlatStyle = FlatStyle.Flat; + } + if (btnCancel != null) + { + btnCancel.BackColor = SystemColors.Control; + btnCancel.ForeColor = Color.Black; + btnCancel.Font = new Font("微软雅黑", 11F, FontStyle.Regular); + btnCancel.FlatStyle = FlatStyle.Flat; + } + + // 如果存在额外的操作按钮(例如在面板上),尝试统一风格(容错) + foreach (Control ctrl in this.Controls) + { + if (ctrl is Panel pnl) + { + pnl.Padding = new Padding(12); + } + else if (ctrl is Button btn) + { + // 已设置主要按钮,其他按钮使用中性风格 + if (btn == btnSave || btn == btnDelete || btn == btnCancel) continue; + btn.Font = new Font("微软雅黑", 10F, FontStyle.Regular); + } + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"ApplyChargeStyle error: {ex}"); + } + } + + private void EnsureComboItems() + { + try + { + if (cmbTaskKind != null && cmbTaskKind.Items.Count == 0) + { + cmbTaskKind.Items.AddRange(new object[] { "Loop", "BranchPoint", "JoinPoint" }); + cmbTaskKind.SelectedIndex = 0; + } + + if (cmbStartType != null && cmbStartType.Items.Count == 0) + { + cmbStartType.Items.AddRange(new object[] { "Api", "Plc", "ButtonBox", "AutoLoop" }); + cmbStartType.SelectedIndex = 3; + } + + // 确保下拉框字体一致(防止 Designer 未设置) + if (cmbTaskKind != null) cmbTaskKind.Font = new Font("微软雅黑", 10F, FontStyle.Regular); + if (cmbStartType != null) cmbStartType.Font = new Font("微软雅黑", 10F, FontStyle.Regular); + } + catch { } + } + + #region 初始化/加载 + private void InitOrLoadJson() + { + try + { + if (!File.Exists(jsonPath)) + File.WriteAllText(jsonPath, "[]"); + + var text = File.ReadAllText(jsonPath); + tasks = JsonConvert.DeserializeObject>(text) ?? new List(); + } + catch (Exception ex) + { + tasks = new List(); + System.Diagnostics.Debug.WriteLine($"Load tasks failed: {ex}"); + } + } + #endregion + + #region ID 自增逻辑 + + /// + /// 获取下一个可用的任务ID(当前最大ID + 1) + /// + /// 新的任务ID + private int GetNextTaskId() + { + if (tasks == null || tasks.Count == 0) + return 1; + + int maxId = tasks.Max(t => t.Id); + return maxId + 1; + } + + #endregion + + #region OwnerDraw 绘制(已按要求:表头加粗黑字 + 醒目底色,选中行为另一种颜色) + private void lstTasks_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) + { + try + { + // 与 ChargeStationManagementForm 表头保持一致的深蓝背景与白色加粗字体 + using (var backBrush = new SolidBrush(Color.FromArgb(63, 81, 181))) // 深蓝(与 Charge 界面一致) + using (var textBrush = new SolidBrush(Color.White)) // 白色文字 + using (var font = new Font("微软雅黑", 9, FontStyle.Bold)) + { + e.Graphics.FillRectangle(backBrush, e.Bounds); + var sf = new StringFormat { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Near }; + var rect = e.Bounds; + rect.Inflate(-8, 0); + e.Graphics.DrawString(e.Header.Text, font, textBrush, rect, sf); + + // 分隔线 + using (var pen = new Pen(Color.FromArgb(200, 200, 200))) + { + e.Graphics.DrawLine(pen, e.Bounds.Left, e.Bounds.Bottom - 1, e.Bounds.Right, e.Bounds.Bottom - 1); + } + } + } + catch + { + e.DrawBackground(); + e.DrawText(); + } + } + + private void lstTasks_DrawItem(object sender, DrawListViewItemEventArgs e) + { + // 由 DrawSubItem 绘制全部内容以保证每列对齐 + } + + private void lstTasks_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) + { + try + { + var item = e.Item; + bool selected = item.Selected; + Rectangle bounds = e.Bounds; + + // 选中行颜色:与 ChargeStationManagementForm 保持一致的蓝色强调 + Color selectedBack = Color.FromArgb(0, 120, 215); + Color selectedFore = Color.White; + + // 非选中行交替背景 + Color evenBack = Color.White; + Color oddBack = Color.FromArgb(250, 251, 253); + Color normalFore = Color.FromArgb(33, 33, 33); + + // 填充背景 + if (selected) + { + using (var selBrush = new SolidBrush(selectedBack)) + { + e.Graphics.FillRectangle(selBrush, bounds); + } + } + else + { + using (var back = new SolidBrush(e.ItemIndex % 2 == 0 ? evenBack : oddBack)) + { + e.Graphics.FillRectangle(back, bounds); + } + } + + // 绘制文本(加一点内边距) + string text = e.SubItem.Text ?? string.Empty; + Color fore = selected ? selectedFore : normalFore; + TextFormatFlags flags = TextFormatFlags.Left | TextFormatFlags.VerticalCenter; + Rectangle textRect = bounds; + textRect.Inflate(-6, 0); + + using (var font = new Font("微软雅黑", 9)) + { + TextRenderer.DrawText(e.Graphics, text, font, textRect, fore, flags); + } + } + catch + { + e.DrawBackground(); + e.DrawText(); + } + } + #endregion + + #region 渲染/保存 + private void RenderListView() + { + try + { + if (lstTasks == null) return; + lstTasks.BeginUpdate(); + lstTasks.Items.Clear(); + foreach (var t in tasks) + { + var lvi = new ListViewItem(new[] + { + t.Id.ToString(), // ID 列 + t.Kind.ToString(), + t.CurrentStationId.ToString(), + t.TargetStationId.ToString(), + t.TrafficControl.ToString(), + t.Priority.ToString(), + t.IsViaPoint ? "是" : "否", + t.StartType.ToString() + }); + lstTasks.Items.Add(lvi); + } + lstTasks.EndUpdate(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"RenderListView failed: {ex}"); + } + } + + private void Save() + { + try + { + File.WriteAllText(jsonPath, JsonConvert.SerializeObject(tasks, Formatting.Indented)); + } + catch (Exception ex) + { + MessageBox.Show("保存失败:" + ex.Message); + } + } + #endregion + + #region 按钮事件(在同一界面新增/编辑) + private void UpdateSaveButtonText() + { + if (btnSave != null) + { + // 文案固定为"保存" + btnSave.Text = "保存"; + } + } + + private void btnSave_Click(object sender, EventArgs e) + { + try + { + // 从面板读取值,直接在界面内编辑/新增 + Enum.TryParse(cmbTaskKind?.SelectedItem?.ToString() ?? "Loop", out var kind); + Enum.TryParse(cmbStartType?.SelectedItem?.ToString() ?? "AutoLoop", out var st); + + if (editingIndex >= 0 && editingIndex < tasks.Count) + { + // 更新模式:保留原有ID + var existingTask = tasks[editingIndex]; + existingTask.Kind = kind; + existingTask.CurrentStationId = (int)(numCurrent?.Value ?? 0); + existingTask.TargetStationId = (int)(numTarget?.Value ?? 0); + existingTask.TrafficControl = (int)(numTraffic?.Value ?? 0); + existingTask.Priority = (int)(numPriority?.Value ?? 1); + existingTask.IsViaPoint = chkViaPoint?.Checked ?? false; + existingTask.StartType = st; + } + else + { + // 新增模式:自动分配新ID + var t = new LoopTask + { + Id = GetNextTaskId(), // 自增ID + Kind = kind, + CurrentStationId = (int)(numCurrent?.Value ?? 0), + TargetStationId = (int)(numTarget?.Value ?? 0), + TrafficControl = (int)(numTraffic?.Value ?? 0), + Priority = (int)(numPriority?.Value ?? 1), + IsViaPoint = chkViaPoint?.Checked ?? false, + StartType = st + }; + tasks.Add(t); + } + + Save(); + RenderListView(); + // 恢复新增状态 + editingIndex = -1; + UpdateSaveButtonText(); + ClearPanelInputs(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"btnSave_Click error: {ex}"); + MessageBox.Show("操作失败:" + ex.Message); + } + } + + private void btnCancel_Click(object sender, EventArgs e) + { + // 取消编辑,清空面板并回到"添加"模式 + editingIndex = -1; + UpdateSaveButtonText(); + ClearPanelInputs(); + } + + private void btnEdit_Click(object sender, EventArgs e) + { + try + { + if (lstTasks == null || lstTasks.SelectedIndices.Count == 0) return; + int idx = lstTasks.SelectedIndices[0]; + if (idx < 0 || idx >= tasks.Count) return; + + editingIndex = idx; + LoadTaskToPanel(tasks[idx]); + UpdateSaveButtonText(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"btnEdit_Click error: {ex}"); + } + } + + private void btnDelete_Click(object sender, EventArgs e) + { + // 兼容旧的删除按钮:复用统一删除逻辑 + OnDeleteSelectedTasks(); + } + #endregion + + #region 双击编辑(同面板) + private void lstTasks_MouseDoubleClick(object sender, MouseEventArgs e) + { + try + { + if (lstTasks == null) return; + var item = lstTasks.GetItemAt(e.X, e.Y); + if (item == null) return; + int idx = item.Index; + if (idx < 0 || idx >= tasks.Count) return; + + editingIndex = idx; + LoadTaskToPanel(tasks[idx]); + UpdateSaveButtonText(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"lstTasks_MouseDoubleClick error: {ex}"); + } + } + #endregion + + #region 辅助:面板读写 + private void LoadTaskToPanel(LoopTask t) + { + if (t == null) return; + try + { + // 显示当前编辑的任务ID(只读显示) + if (lblEditingId != null) lblEditingId.Text = $"编辑任务 ID: {t.Id}"; + + if (cmbTaskKind != null) cmbTaskKind.SelectedItem = t.Kind.ToString(); + if (numCurrent != null) numCurrent.Value = Math.Max(numCurrent.Minimum, Math.Min(numCurrent.Maximum, t.CurrentStationId)); + if (numTarget != null) numTarget.Value = Math.Max(numTarget.Minimum, Math.Min(numTarget.Maximum, t.TargetStationId)); + if (numTraffic != null) numTraffic.Value = Math.Max(numTraffic.Minimum, Math.Min(numTraffic.Maximum, t.TrafficControl)); + if (numPriority != null) numPriority.Value = Math.Max(numPriority.Minimum, Math.Min(numPriority.Maximum, t.Priority)); + if (chkViaPoint != null) chkViaPoint.Checked = t.IsViaPoint; + if (cmbStartType != null) cmbStartType.SelectedItem = t.StartType.ToString(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"LoadTaskToPanel error: {ex}"); + } + } + + private void ClearPanelInputs() + { + try + { + // 清除编辑ID显示 + if (lblEditingId != null) lblEditingId.Text = "新增任务"; + + if (cmbTaskKind != null) cmbTaskKind.SelectedIndex = 0; + if (numCurrent != null) numCurrent.Value = 0; + if (numTarget != null) numTarget.Value = 0; + if (numTraffic != null) numTraffic.Value = 0; + if (numPriority != null) numPriority.Value = 1; + if (chkViaPoint != null) chkViaPoint.Checked = false; + if (cmbStartType != null) cmbStartType.SelectedIndex = 3; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"ClearPanelInputs error: {ex}"); + } + } + + #endregion + + + } +} \ No newline at end of file diff --git a/StandardScene.Core/Chained/LoopViewer.resx b/StandardScene.Core/Chained/LoopViewer.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/StandardScene.Core/Chained/LoopViewer.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/StandardScene.Core/Chained/TransportDeliveryCallbacks.cs b/StandardScene.Core/Chained/TransportDeliveryCallbacks.cs new file mode 100644 index 0000000..ff19cb4 --- /dev/null +++ b/StandardScene.Core/Chained/TransportDeliveryCallbacks.cs @@ -0,0 +1,206 @@ +using SimpleCore; +using SimpleCore.Library; +using StandardScene.Utils; +using System; +using System.Linq; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Threading.Tasks; +using StandardScene.Model; + +namespace StandardScene.Chained +{ + /// + /// 统一管理 TransportDelivery 相关的任务回调方法,并通过回调注册表提供可恢复性。 + /// + public static class TransportDeliveryCallbacks + { + public const string KeyOnStarted = "Transport.OnMissionStarted"; + public const string KeyOnFetched = "Transport.OnFetched"; + public const string KeyOnPut = "Transport.OnPut"; + public const string KeyOnFinished = "Transport.OnMissionFinished"; + public const string KeyOnFailed = "Transport.OnMissionFailed"; + public const string KeyOnTerminated = "Transport.OnMissionTerminated"; + + private static bool _initialized; + private static readonly HttpClient _httpClient = new HttpClient(); + private static string _callbackUrl = "http://127.0.0.1:20101/api/v1/MDCS/State"; + + static TransportDeliveryCallbacks() + { + if (_initialized) return; + _initialized = true; + + DeliveryCallbackRegistry.RegisterOnStart (KeyOnStarted, OnMissionStarted); + DeliveryCallbackRegistry.RegisterDoneFetch (KeyOnFetched, OnFetched); + DeliveryCallbackRegistry.RegisterDonePut (KeyOnPut, OnPut); + DeliveryCallbackRegistry.RegisterDoneMission(KeyOnFinished, OnMissionFinished); + DeliveryCallbackRegistry.RegisterFailed (KeyOnFailed, OnMissionFailed); + DeliveryCallbackRegistry.RegisterOnTerminated(KeyOnTerminated, OnMissionTerminated); + } + + /// + /// 显式调用以确保静态构造函数已执行(注册所有默认回调)。 + /// + public static void EnsureInitialized() + { + // 访问本类,确保静态构造已执行 + if (!_initialized) + { + // 触发 static ctor(CLR 保证线程安全) + System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(typeof(TransportDeliveryCallbacks).TypeHandle); + } + } + + /// + /// 配置任务状态回调的完整 URL(例如 http://ip:port/api/v1/MDCS/State)。 + /// 建议在 TransportMission 启动或构造时调用一次。 + /// + public static void ConfigureCallbackUrl(string url) + { + if (!string.IsNullOrWhiteSpace(url)) + { + _callbackUrl = url; + } + } + + private static void DispatchMissionState(TransportDelivery d, MissionState.MissionStateEnum state) + { + var ms = new MissionState + { + MissionId = d.TaskId, + CarCode = d.UsingCar?.id.ToString() ?? "0", + TriggerTime = DateTime.Now, + State = state + }; + MissionStatePost(ms); + } + + private static async void MissionStatePost(MissionState ms) + { + var retryCount = 10; + var retryDelay = TimeSpan.FromSeconds(1); + var content = new StringContent(ms.ToJson()); + content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); + + for (int i = 0; i < retryCount; i++) + { + try + { + var resp = await _httpClient.PostAsync(_callbackUrl, content); + Diagnosis.Post($"{ms.State}回调结果 => {resp.Content.ReadAsStringAsync().Result}"); + var body = resp.Content.ReadAsStringAsync().Result.JsonTo(); + var result = body.Code == 200 ? "成功" : "失败"; + Diagnosis.Post($"车辆编号:{ms.CarCode} 任务id:{ms.MissionId} 状态回调执行{result}"); + break; + } + catch (Exception ex) + { + Diagnosis.Log($"{ms.State}状态回调失败 => ex:{ex}"); + if (i == retryCount - 1) + { + Diagnosis.Log($"StringContent:{content}", "apiError"); + } + await Task.Delay(retryDelay); + } + } + } + + public static async void OnMissionStarted(ChainedDeliveryMission.Delivery delivery) + { + var d = (TransportDelivery)delivery; + Diagnosis.Log($"task(#{d.TaskId}) started"); + + if (!string.IsNullOrWhiteSpace(d.TaskIdsString)) + { + Commons.AddOrUpdateTag(d.UsingCar.tags, "taskIdsString", d.TaskIdsString); + Diagnosis.Log( + $"holdCarTagAddOrUpdate--TaskId:{d.TaskId},task:[{d.ToJson()}].taskIdsString:{d.TaskIdsString}", + "holdCarTag", + true); + } + + Commons.DeleteTag(d.UsingCar.tags, "holdCar"); + if (!string.IsNullOrEmpty(d.HoldCarSite)) + { + Commons.AddOrUpdateTag(d.UsingCar.tags, "holdCar", d.HoldCarSite); + Diagnosis.Log( + $"holdCarTagAddOrUpdate--TaskId:{d.TaskId},task:[{d.ToJson()}].holdCar:{d.HoldCarSite}", + "holdCarTag", + true); + } + + DispatchMissionState(d, MissionState.MissionStateEnum.Started); + } + + public static async void OnFetched(ChainedDeliveryMission.Delivery delivery) + { + var d = (TransportDelivery)delivery; + if (d.Src == d.Dst) return; + + Diagnosis.Log($"task(#{d.TaskId}) fetched"); + DispatchMissionState(d, MissionState.MissionStateEnum.Fetched); + } + + public static async void OnPut(ChainedDeliveryMission.Delivery delivery) + { + var d = (TransportDelivery)delivery; + if (d.Src == d.Dst) return; + + Diagnosis.Log($"task(#{d.TaskId}) put"); + DispatchMissionState(d, MissionState.MissionStateEnum.Put); + } + + public static async void OnMissionFailed(ChainedDeliveryMission.Delivery delivery) + { + var d = (TransportDelivery)delivery; + Diagnosis.Log($"task(#{d.TaskId}) failed"); + DispatchMissionState(d, MissionState.MissionStateEnum.Failed); + } + + public static async void OnMissionFinished(ChainedDeliveryMission.Delivery delivery) + { + var d = (TransportDelivery)delivery; + Diagnosis.Log($"task(#{d.TaskId}) finished"); + + if (!string.IsNullOrWhiteSpace(d.MGTaskCode!) && d.MGTaskCode.Contains("-")) + { + var phase = d.MGTaskCode.Split('-')[1]; + var last = int.Parse(phase) - 1; + if (last > 0 && string.IsNullOrWhiteSpace(d.TaskIdsString)) + { + var holdCar = SimpleLib.GetAllCars() + .FirstOrDefault(e => e.tags.TryGetValue("taskIdsString", out var v) && v.Contains(d.TaskId)); + if (holdCar != null) + { + Commons.DeleteTag(holdCar.tags, "taskIdsString"); + Diagnosis.Log( + $"holdCarTagDelete-2:OnMissionFinished--TaskId:{d.TaskId},task:[{d.ToJson()}].taskIdsString:{d.TaskIdsString}", + "holdCarTag", + true); + } + } + } + + DispatchMissionState(d, MissionState.MissionStateEnum.Finished); + } + + public static async Task OnMissionTerminated(ChainedDeliveryMission.Delivery delivery, string ISRelease) + { + try + { + using var hc = new HttpClient(); + var task = await hc.GetAsync($"http://{delivery.UsingCar.address}:8008/car/startOrPause?ISRelease={ISRelease}"); + var resp = task.Content.ReadAsStringAsync().Result.JsonTo(); + var result = resp.Code == 200 ? "成功" : "失败"; + return 1; + } + catch (Exception ex) + { + Diagnosis.Log($"暂停恢复失败 => ex:{ExceptionFormatter.FormatEx(ex)}"); + return 0; + } + } + } +} + diff --git a/StandardScene.Core/Chained/TransportMission.cs b/StandardScene.Core/Chained/TransportMission.cs new file mode 100644 index 0000000..84f9386 --- /dev/null +++ b/StandardScene.Core/Chained/TransportMission.cs @@ -0,0 +1,599 @@ +using Newtonsoft.Json; +using SimpleLite; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleLite.RCS.Signal; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.Library; +using SimpleCore.PropType; +using StandardScene.Model; +using StandardScene; +using StandardScene.Utils; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Microsoft.Win32.SafeHandles; + +namespace StandardScene.Chained +{ + /// + /// 任务类型枚举 + /// + public enum TaskType + { + 移动 = 1, // 移动任务(当前未使用) + 搬运 = 2, // 搬运任务 + 装车 = 3, // 装车任务 + 卸车 = 4, // 卸车任务 + } + + /// + /// 运输任务类 + /// 继承自AbstractDelivery,实现具体的运输任务功能 + /// + /// public class TransportDelivery : AbstractChainedDeliveryMission.AbstractDelivery + public class TransportDelivery : ChainedDeliveryMission.Delivery + { + /// 任务类型(枚举值) + public TaskType Type; + /// 任务类型(字符串形式) + public string TaskType; + /// 使用的小车名称 + public string UsingCarName = "/"; + /// 物料信息 + public string Material = ""; + /// 占车站点 + public string HoldCarSite = ""; + /// 阶段任务代码(用于标记阶段任务) + public string MGTaskCode = ""; + /// 任务ID字符串(用于标记阶段任务,可包含多个任务ID,用逗号分隔) + public string TaskIdsString = ""; + + /// + /// 构造函数 + /// 注册任务生命周期回调函数 + /// + public TransportDelivery() + { + // 注册任务开始回调 + OnStart += d => { TransportOnStart((TransportDelivery)d); }; + // 注册取货完成回调 + DoneFetch += d => { TransportDoneFetch((TransportDelivery)d); }; + // 注册放货完成回调 + DonePut += d => { TransportDonePut((TransportDelivery)d); }; + // 注册任务完成回调 + DoneMission += d => { TransportDoneMission((TransportDelivery)d); }; + } + + /// + /// 任务开始时的回调处理 + /// + /// 运输任务对象 + private void TransportOnStart(TransportDelivery d) + { + Diagnosis.Post($"{d.TaskId}___{d.Src}->{d.Dst}: step-onStart"); + } + + /// + /// 取货完成时的回调处理 + /// + /// 运输任务对象 + private void TransportDoneFetch(TransportDelivery d) + { + Diagnosis.Post($"{d.TaskId}___{d.Src}->{d.Dst}: step-doneFetch"); + } + + /// + /// 放货完成时的回调处理 + /// + /// 运输任务对象 + private void TransportDonePut(TransportDelivery d) + { + Diagnosis.Post($"{d.TaskId}___{d.Src}->{d.Dst}: step-donePut"); + } + + + /// + /// 任务完成时的回调处理 + /// + /// 运输任务对象 + private void TransportDoneMission(TransportDelivery d) + { + Diagnosis.Post($"{d.TaskId}___{d.Src}->{d.Dst}: step-doneMission"); + } + } + + /// + /// 搬运任务进程类 + /// 继承自AbstractChainedDeliveryMission,实现具体的搬运任务调度 + /// + [MissionType(Name = "搬运任务进程", editor = typeof(TransportMission))] + internal class TransportMission : ChainedDeliveryMission + { + /// 是否启用就近任务策略("1"=启用,"0"=禁用) + private static readonly string NearestTask = "1"; + + /// 任务查看器窗口对象 + private DeliveryViewer dv; + + public TransportMission() + { + // 确保回调静态类已完成注册 + TransportDeliveryCallbacks.EnsureInitialized(); + + // 根据配置的 MissionCallbackURL 设置回调地址(若有) + var p = Param; + if (p != null && !string.IsNullOrWhiteSpace(p.MissionCallbackURL)) + { + if (Commons.IsValidHttpUrl(p.MissionCallbackURL)) + { + _lastCallbackUrl = p.MissionCallbackURL; + TransportDeliveryCallbacks.ConfigureCallbackUrl(_lastCallbackUrl); + } + else + { + Diagnosis.Log($"无效的 MissionCallbackURL 配置: {p.MissionCallbackURL}", "TransportMission"); + } + } + } + + public class TransportMissionParam + { + /// + /// 递送任务状态回调地址。 + /// + public string MissionCallbackURL; + } + + public TransportMissionParam Param => StringDictConvert.Convert(fields); + + private readonly bool _onDisplay = true; + private string _lastCallbackUrl; + + protected override Delivery CreateDeliveryFromSnapshot(DeliveryStateSnapshot snap) + { + var usingCar = SimpleLib.GetCar(snap.UsingCarId); + if (snap.UsingCarId != -1 && usingCar == null) + { + Diagnosis.Post($"CreateDeliveryFromSnapshot[{snap.Id}] failed:usingCar[{snap.UsingCarId}] not found"); + return null; + } + if (usingCar != null && usingCar is not Car) + { + Diagnosis.Post($"CreateDeliveryFromSnapshot[{snap.Id}] skipped:usingCar[{snap.UsingCarId}] is not Car type"); + return null; + } + + var d = new TransportDelivery + { + Id = snap.Id, + TaskId = snap.TaskId ?? string.Empty, + Src = snap.Src, + Dst = snap.Dst, + SkipFetch = snap.SkipFetch, + SkipPut = snap.SkipPut, + Putting = snap.Putting, + CreateTime = snap.CreateTime, + StartTime = snap.StartTime, + FinishTime = snap.FinishTime, + CarType = snap.CarType, + UsingCar = (Car)usingCar + }; + + if (usingCar != null && string.Equals(snap.Status, "putting", StringComparison.OrdinalIgnoreCase) && !CheckCarLoaded(usingCar)) + { + d.Error = true; + } + + // 恢复回调配置与事件绑定 + d.ReportOnStarted = snap.ReportOnStarted; + d.ReportOnFetched = snap.ReportOnFetched; + d.ReportOnPut = snap.ReportOnPut; + d.ReportOnFinished = snap.ReportOnFinished; + d.ReportOnFailed = snap.ReportOnFailed; + d.ReportOnTerminated = snap.ReportOnTerminated; + + d.OnStartCallbackKeys = snap.OnStartCallbackKeys ?? new List(); + d.DoneFetchCallbackKeys = snap.DoneFetchCallbackKeys ?? new List(); + d.DonePutCallbackKeys = snap.DonePutCallbackKeys ?? new List(); + d.DoneMissionCallbackKeys = snap.DoneMissionCallbackKeys ?? new List(); + d.FailedCallbackKeys = snap.FailedCallbackKeys ?? new List(); + d.OnTerminatedCallbackKeys = snap.OnTerminatedCallbackKeys ?? new List(); + + // 统一通过 Attacher 挂载所有回调 + DeliveryCallbackAttacher.AttachAll(d); + + return d; + } + + protected override bool CheckCarLoaded(AbstractCar car) + { + if(car is DummyCar) + return true; + var carLoaded = Commons.GetCarStatus((Car)car, "Loaded"); + if (!string.IsNullOrEmpty(carLoaded) && bool.TryParse(carLoaded, out var result)) + return result; + return false; + } + + /// + /// 执行方法(启动任务调度进程) + /// 启动基类的任务调度循环,并启动状态显示线程 + /// + public override void Execute() + { + base.Execute(); // 调用基类Execute方法,启动任务调度循环 + //HideSimpleConsole(); // 隐藏控制台窗口 + + // 启动状态显示线程,实时显示小车状态和任务执行情况 + new Thread(() => + { + while (true) + { + Thread.Sleep(100); // 每100ms更新一次显示 + var painter = SimpleMonitor.getPainter("TransportMissionPainter"); + painter.clear(); + if (!_onDisplay) continue; // 如果未启用显示,跳过 + + // 检查并更新任务状态回调 URL(如果配置发生变化) + var p = Param; + var currentUrl = p?.MissionCallbackURL; + if (!string.IsNullOrWhiteSpace(currentUrl) && currentUrl != _lastCallbackUrl) + { + // 使用 Commons 中的统一 URL 校验逻辑 + if (Commons.IsValidHttpUrl(currentUrl)) + { + TransportDeliveryCallbacks.ConfigureCallbackUrl(currentUrl); + _lastCallbackUrl = currentUrl; + } + else + { + Diagnosis.Log($"无效的 MissionCallbackURL 配置: {currentUrl}", "TransportMission"); + } + } + + var onMissionCnt = 0; // 正在执行任务的小车数量 + var carStr = $"{string.Join("\n", SimpleLib.GetAllCars().Select(cc => + { + var status = ""; + if (cc.tags.TryGetValue("occupied", out var occupiedStr)) + { + onMissionCnt++; + status = occupiedStr; + if (cc.tags.TryGetValue("idle", out var _)) + { + Diagnosis.Post($"strange idle tag, {cc.name}({cc.id})"); + cc.tags.Remove("idle"); + + } + } + else if (cc.tags.TryGetValue("idle", out var idleStr)) status = DateTime.TryParse(idleStr, out var idleTime) ? $"idle:{idleTime}" : $"idle:{idleStr}"; + return $"{cc.name}({cc.id})\t{status}"; + }))}"; + //var waitingMissions = GetDeliveries() + // .Where(dd => dd.GetStatus() == DeliveryStatus.Waiting).ToList(); + painter.drawTextFixed( + $"小车:\t开动率:{onMissionCnt}/{SimpleLib.GetAllCars().Length}\n{carStr}\n\n", + new SolidBrush(Color.Black), + VirtualPainter.DrawPosition.LeftTop, Color.AliceBlue); + painter = null; + } + }).Start(); + } + + /// + /// 变更任务优先级(重写基类方法) + /// 根据配置决定是否执行就近任务策略 + /// + public override void ChangePriority() + { + try + { + if (NearestTask == "1") // NearestTask 等于1 执行就近原则 + { + // 就近任务执行(当前被注释,未启用) + // NearestTaskExecute(); + } + else + { + // 如果未启用就近原则,移除所有小车的就近选车标记 + foreach (var car in SimpleLib.GetAllCars().OfType()) + { + Commons.DeleteTag(car.tags, "changePriority"); + } + } + + } + catch (Exception ex) + { + Console.WriteLine("同一工序就近执行就近任务执行:" + ex.ToString()); + + } + } + + /// + /// 一键初始化所有小车 + /// 将状态为"正常"或"上线"且未初始化的小车进行重置 + /// + [MethodMember(Name = "一键初始化")] + public void ResetAll() + { + foreach (var car in SimpleLib.GetAllCars().OfType().Where(c => c.lstatus.Contains("正常") || c.lstatus.Contains("上线"))) + { + // 如果小车未初始化(GetLastSite返回-1),执行重置 + if (car.GetLastSite() == -1) + ((Car)car).Reset(); + + } + } + + /// + /// 一键上线所有小车 + /// 将状态为"正常"或"上线"且已初始化的小车标记为在线状态 + /// + [MethodMember(Name = "一键上线")] + public void OnlineAll() + { + foreach (var car in SimpleLib.GetAllCars().OfType().Where(c => c.lstatus.Contains("正常") || c.lstatus.Contains("上线"))) + { + // 如果小车已初始化,标记为在线 + if (car.GetLastSite() != -1) + { + Commons.AddOrUpdateTag(car.tags, "Online", "true"); + } + } + } + + /// + /// 查看任务列表界面 + /// 打开任务查看器窗口,显示所有任务的状态 + /// + [MethodMember(Name = "查看任务", Description = "显示界面")] + public void Print() + { + dv = new DeliveryViewer(); + dv.Show(); + } + + /// + /// 手动创建单取货任务 + /// 通过UI交互选择小车和取货点,创建仅取货任务(跳过取货步骤,小车从当前位置移动到取货点) + /// + [MethodMember(Name = "单取货", Description = "增加并排队搬运任务链")] + public async void ManualEnqueueFetch() + { + try + { + G.pushStatus("选择小车"); + var selected = SimpleMonitor.selected.ToArray(); + if (selected.Length == 0) { MessageBox.Show("请先选择需要控制的小车!"); return; } + var obj = selected[0]; + if (obj is Car car) + { + G.pushStatus("选择取货位"); + // 等待用户在UI中选择取货点 + var pt1 = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + + // 创建运输任务:从小车当前位置到选择的取货点 + var d = new TransportDelivery + { + CarType = "Car", + Src = car.GetLastSite(), // 起始点为小车当前位置 + Dst = pt1.site, // 目标点为选择的取货点 + SkipFetch = true, // 跳过取货步骤(因为小车已经在起始点) + UsingCar = car, // 指定使用的小车 + PutPlanInfo = new() { { "action", "fetch" } }, // 路径动作设置为fetch + }; + + G.pushStatus($"排序了一个{car.name}搬运任务{d.Id}: {car.GetLastSite()} -> {d.Dst}"); + Enqueue(d); + } + else + { + MessageBox.Show("请选择需要控制的小车!"); + } + } + catch + { + G.pushStatus($"结束任务链"); + } + } + + //写一个冒泡排序的算法,按照距离排序 + + [MethodMember(Name = "切换后台显示")] + public void SwitchBackgroundDisplay() + { + ShowSimpleConsole(); + } + /// + /// 手动创建单放货任务 + /// 通过UI交互选择小车和放货点,创建仅放货任务(小车从当前位置移动到放货点并放货) + /// + [MethodMember(Name = "单放货", Description = "增加并排队搬运任务链")] + public async void ManualEnqueuePut() + { + try + { + G.pushStatus("选择小车"); + var selected = SimpleMonitor.selected.ToArray(); + if (selected.Length == 0) { MessageBox.Show("请先选择需要控制的小车!"); return; } + var obj = selected[0]; + if (obj is Car car) + { + G.pushStatus("选择取货位"); + // 等待用户在UI中选择放货点(注释写的是"取货位"但实际是放货点) + var pt1 = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + var srcSite = SimpleLib.GetSite(pt1.site); + + // 创建运输任务:从小车当前位置到选择的放货点 + var d = new TransportDelivery + { + CarType = "Car", + Src = car.GetLastSite(), // 起始点为小车当前位置 + Dst = pt1.site, // 目标点为选择的放货点 + UsingCar = car, // 指定使用的小车 + SkipFetch = true, // 跳过取货步骤 + PutPlanInfo = new() { { "action", "put" } }, // 路径动作设置为put + + }; + G.pushStatus($"排序了一个{car.name}搬运任务{d.Id}: {srcSite.id} -> {d.Dst}"); + Enqueue(d); + } + else + { + MessageBox.Show("请选择需要控制的小车!"); + } + } + catch + { + G.pushStatus($"结束任务链"); + } + } + + /// + /// 手动创建完整的取放货任务 + /// 通过UI交互选择取货点和放货点,创建完整的搬运任务(取货->放货) + /// + [MethodMember(Name = "取放货", Description = "增加并排队搬运任务链")] + public async void ManualEnqueue() + { + try + { + G.pushStatus("选择取货位"); + // 等待用户在UI中选择取货点 + var pt1 = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + var srcSite = SimpleLib.GetSite(pt1.site); + + G.pushStatus("选择放货位"); + // 等待用户在UI中选择放货点 + var pt2 = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + var dstSite = SimpleLib.GetSite(pt2.site); + + // 创建完整的运输任务:从取货点到放货点 + var d = new TransportDelivery + { + CarType = "Car", + Src = srcSite.id, // 取货点 + Dst = dstSite.id, // 放货点 + TaskId = $"ManualTask-{DateTime.Now}" // 生成任务ID + }; + + G.pushStatus($"排序了一个叉车搬运任务{d.Id}: {srcSite.id} -> {dstSite.id}"); + Enqueue(d); + } + catch + { + G.pushStatus($"结束任务链"); + } + } + + /// + /// 手动创建移动任务(去某地) + /// 通过UI交互选择目标站点,创建移动任务(起点和终点相同,只移动不放货) + /// + [MethodMember(Name = "去某地", Description = "去某地")] + public async void ManualEnqueueGo() + { + try + { + G.pushStatus("选择前往的站点"); + // 等待用户在UI中选择目标站点 + var pt1 = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + var srcSite = SimpleLib.GetSite(pt1.site); + + // 创建移动任务:起点和终点相同(只移动到目标点,不执行取放货操作) + var d = new TransportDelivery + { + CarType = "Car", + Src = pt1.site, // 起点(实际不会取货) + Dst = pt1.site, // 终点(实际不会放货) + TaskId = $"ManualTask-{DateTime.Now}", + SrcFindLoop = false, // 起点不查找回路 + DstFindLoop = false // 终点不查找回路 + }; + + G.pushStatus($"排序了一个叉车搬运任务{d.Id}: {srcSite.id} -> {srcSite.id}"); + Enqueue(d); + } + catch + { + G.pushStatus($"结束任务链"); + } + } + + /// + /// 供按钮盒进程反射调用:ButtonMission.ExecuteButtonActionInternal 反射调用本方法后, + /// 由 HandleMethodResult 解析返回值,驱动 OnActionExecuted 成功/失败反馈。 + /// 返回 true 表示已入队;false 表示站点无效。若 Enqueue 抛错,由按钮进程捕获后同样视为失败。 + /// 按钮配置示例:TriggerMission=TransportMission,TriggerMethod=EnqueueTransportByButton,TriggerMethodParams=取货站点ID,放货站点ID + /// + /// 取货站点 ID + /// 放货站点 ID + public bool EnqueueTransportByButton(int srcSiteId, int dstSiteId) + { + if (SimpleLib.GetSite(srcSiteId) == null || SimpleLib.GetSite(dstSiteId) == null) + { + Diagnosis.Log($"按钮排队搬运失败:站点不存在 src={srcSiteId}, dst={dstSiteId}", "TransportMission", true); + return false; + } + + var d = new TransportDelivery + { + CarType = "Car", + Src = srcSiteId, + Dst = dstSiteId, + TaskId = $"Button-{DateTime.Now:yyyyMMddHHmmssfff}" + }; + Enqueue(d); + Diagnosis.Post($"按钮排队搬运 {d.Id}: {srcSiteId} -> {dstSiteId}"); + return true; + } + + // ========== 控制台窗口显示控制 ========== + + /// Windows API:获取控制台窗口句柄 + [DllImport("kernel32.dll")] + static extern IntPtr GetConsoleWindow(); + + /// Windows API:显示/隐藏窗口 + [DllImport("user32.dll")] + static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + + /// 控制台显示状态标志 + private static bool ShowConsole = false; + + /// + /// 切换控制台窗口显示/隐藏 + /// + public static void ShowSimpleConsole() + { + ShowConsole = !ShowConsole; // 切换显示状态 + var handle = GetConsoleWindow(); + int n = ShowConsole ? 0 : 5; // 0=显示,5=隐藏 + Console.WriteLine(n); + ShowWindow(handle, n); + } + + /// + /// 隐藏控制台窗口 + /// + public static void HideSimpleConsole() + { + var handle = GetConsoleWindow(); + ShowWindow(handle, 0); // 0表示隐藏窗口 + } + } + +} diff --git a/StandardScene.Core/Charge/AbstractChargeLogicMission.cs b/StandardScene.Core/Charge/AbstractChargeLogicMission.cs new file mode 100644 index 0000000..e019d82 --- /dev/null +++ b/StandardScene.Core/Charge/AbstractChargeLogicMission.cs @@ -0,0 +1,1378 @@ +using Newtonsoft.Json; +using SimpleLite; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.Library; +using SimpleCore.PropType; +using StandardScene.Chained; +using StandardScene.InterLock; +using StandardScene.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using StandardScene.Model; +using static StandardScene.Chained.ChainedDeliveryMission; + +namespace StandardScene.Charge +{ + #region Enums and Status Classes + + /// + /// 充电决策枚举 + /// + public enum ChargeDecision + { + MustCharge, + AvailableToTask, + NoCharge, + } + + /// + /// 充电任务状态类 + /// + public class AbstractChargeMissionStatus : MissionStatus + { + #region 运行时状态 + + /// 空闲充电桩数量 + public int freeChargeCount; + + /// 当前最低电量车辆的SOC + public float lowerSocCar; + + /// 空闲车辆比例 + public double freeCarPercent; + + #endregion + + #region 电量阈值配置 + + /// 必须充电电量阈值(低于此值必须充电) + public double mustChargeSoc; + + /// 空闲充电电量阈值 + public double idleChargeSoc; + + /// 任务可用电量阈值(高于此值可执行任务) + public double taskAvailableSoc; + + /// 允许打断充电的最低电量 + public double allowInterruptSoc; + + /// 满电阈值 + public double fullChargeSoc; + + #endregion + + #region 时间配置 + + /// 空闲后触发充电的等待秒数 + public double idleChargeSeconds; + + /// 必须充电的最短秒数 + public double mustChargeSeconds; + + /// 空闲后触发回待命的等待秒数 + public double idleSeconds; + + /// 补电保持分钟数(充到100%后继续保持) + public double topUpMinutes = 5; + + #endregion + + #region 策略开关 + + /// 最小允许空闲车去充电的任务数 + public int minAllowFreeCarToChargeTaskCnt; + + /// 允许充电数量 + public int allowChargeCnt; + + /// 是否允许打断充电去执行任务 + public bool allowInterruptTask; + + /// 是否使用最低电量优先充电 + public bool useLowerSocForCharge; + + /// 低电量车辆换充阈值差 + public int lowPowerCarSwapChangeThresholdDelta = 15; + + /// 是否启用充电异常检测 + public bool enableErrorChargeDetection = false; + + /// 是否使用充电站过滤器 + public bool useChargeSiteFilter = false; + + #endregion + } + + /// + /// 单个车辆处理过程中的上下文信息 + /// + public class CarChargeContext + { + /// 当前处理的车辆 + public Car Car { get; set; } + + /// 当前电量百分比 + public double Soc { get; set; } + + /// 当前充电电流 + public double ElectricCurrent { get; set; } + + /// 是否必须充电 + public bool MustCharge { get; set; } + + /// 是否应该去充电 + public bool ShouldGoCharge { get; set; } + + /// 是否应该去待命点 + public bool ShouldGoStandby { get; set; } + + /// 车辆是否在待命点 + public bool CarInStandbySite { get; set; } + + /// 车辆是否在充电站 + public bool CarInChargeSite { get; set; } + + /// 充电后是否可执行任务 + public bool ChargingTaskAvailable { get; set; } + + /// 等待执行的任务数量 + public int WaitingMissions { get; set; } + + /// 空闲开始时间 + public DateTime IdleTime { get; set; } + + /// 目标类型:1充电,2待命 + public int TargetType { get; set; } + + /// 目标路径规划 + public SegmentPlan TargetPlan { get; set; } + } + + #endregion + + /// + /// 抽象充电任务基类 + /// 负责管理车辆的自动充电和待命调度 + /// + public class AbstractChargeLogiceMission : AbstractInterlockMission + { + #region Constants + + /// 主循环间隔(毫秒) + protected const int LOOP_INTERVAL_MS = 500; + + /// 必须充电触发延迟(毫秒) + protected const int MUST_CHARGE_TRIGGER_DELAY_MS = 5000; + + /// 目标类型:充电 + protected const int TARGET_TYPE_CHARGE = 1; + + /// 目标类型:待命 + protected const int TARGET_TYPE_STANDBY = 2; + + /// 最大不可达站点记录数 + protected const int MAX_UNDELIVERABLE_SITES = 5; + + /// 触发任务打断的最小等待任务数 + protected const int MAX_WAIT_WAITMISSION = 1; + + /// 补电相关标签名称 + private static readonly string[] TopUpTags = { "topup", "topupInProgress", "topupStart", "topupEnd", "topupMinutes", "topupRequested" }; + + #endregion + + #region Fields and Properties + + public override MissionStatus status { get; set; } = new AbstractChargeMissionStatus(); + + [JsonIgnore] private protected Thread myThread; + [JsonIgnore] public Func chargeStrategy = null; + [JsonIgnore] public bool started = false; + + [JsonIgnore] private int _interruptingCarId = -1; + [JsonIgnore] private int _bestInterruptionCandidateId = -1; + [JsonIgnore] private readonly object _interruptLock = new object(); + + /// 获取状态对象的类型转换 + protected AbstractChargeMissionStatus AcmStatus => (AbstractChargeMissionStatus)status; + + #endregion + + #region Virtual Methods - 扩展点 + + /// + /// 小车到达充电站或待命点时的动作 + /// + public virtual void ArriveAction(Car car, Site site) { } + + /// + /// 小车离开充电站或待命点时的动作 + /// + public virtual void LeaveAction(Car car, Site site) { } + + /// + /// 根据小车获取对应车所允许停靠的休息点类型 + /// + public virtual string GetStandbyType(AbstractCar car) => "standby"; + + /// + /// 根据小车获取对应车所允许停靠的充电点类型 + /// + public virtual string GetChargeType(AbstractCar car) => "Charge"; + + /// + /// 获取小车对应车型待执行的任务数量 + /// + public virtual int WaitingMissions(AbstractCar car) + { + var waitingDeliveries = SimpleProject.proj.Missions + .OfType() + .First() + .GetDeliveries() + .FindAll(p => p.GetStatus() == DeliveryStatus.Waiting); + return waitingDeliveries.Count; + } + + /// + /// 额外的对充电站的筛选要求(如在线状态) + /// + public virtual bool ChargeSiteFilter(Site site) => true; + + /// + /// 获取不在充电的最低电量车辆的SOC值 + /// + public virtual float LowerCarSoc(AbstractCar car, List allChargeSite) => 0; + + /// + /// 判断车辆是否在线 + /// + public virtual bool IsOnlineCar(Car car) => false; + + /// + /// 是否禁止小车回待命点或充电点 + /// + public virtual bool ForbidBackToStandbyOrCharge(AbstractCar car) => false; + + /// + /// 验证车辆是否可以处理 + /// + protected virtual bool ValidateCarForProcessing(Car car) + { + if (Commons.GetVehicleStatus(car)!= VehicleStatus.Normal) return false; + if (car.GetLastSite() == -1) return false; + if (car.fields.ContainsKey("arm")) return false; + return true; + } + + /// + /// 判断充电桩是否异常 + /// + protected virtual bool IsChargePointError(Car car, int chargeSiteId) + { + return car != null && Commons.CarValue(car, "electricCurrent") < 0; + } + + #endregion + + #region Mission Execution - 主执行逻辑 + + [MethodMember(Name = "启动进程", Description = "开始处理充电维护进程")] + public override void Execute() + { + status.status = "已启动"; + if (started) return; + started = true; + + myThread = new Thread(ChargeLoop) { Name = "AbstractChargeMission" }; + myThread.Start(); + } + + /// + /// 充电主循环 + /// + private void ChargeLoop() + { + while (started) + { + Thread.Sleep(LOOP_INTERVAL_MS); + + try + { + UpdateMissionParameters(); + + // 按电量从低到高处理所有车辆 + var orderedCars = SimpleLib.GetAllCars() + .OfType() + .OrderBy(cc => Commons.CarValue(cc, "Soc")); + + foreach (var car in orderedCars) + { + var allChargeSites = GetChargeSitesForCar(car); + var chargingCarCount = CalculateGlobalStats(allChargeSites); + ProcessSingleCar(car, allChargeSites, chargingCarCount); + } + } + catch (Exception e) + { + Diagnosis.Log($"chargeMission error:{ExceptionFormatter.FormatEx(e)}", "error", true); + } + } + } + + /// + /// 获取车辆可用的充电站点列表 + /// + private List GetChargeSitesForCar(Car car) + { + var chargeType = GetChargeType(car); + var allChargeSites = SimpleLib.GetAllSites() + .Where(p => p.fields.TryGetValue("group", out var group) && chargeType.Contains(group)) + .ToList(); + + if (AcmStatus.useChargeSiteFilter) + { + allChargeSites = allChargeSites.Where(ChargeSiteFilter).ToList(); + } + + return allChargeSites; + } + + #endregion + + #region Top-Up (补电) 功能 + + [MethodMember(Name = "补电功能", Description = "将指定小车发送去补电(到100%并保持若干分钟)")] + public void StartTopUp() + { + try + { + G.pushStatus("选择小车"); + var obj = SimpleMonitor.selected.ToArray()[0]; + if (obj is Car car) + { + if (car == null) + { + Diagnosis.Post($"StartTopUp failed: car not found", "StartTopUpCharge", true); + return; + } + + Commons.AddOrUpdateTag(car.tags, "topup", "requested"); + Commons.AddOrUpdateTag(car.tags, "shouldCharge", "true"); + Diagnosis.Log($"StartTopUp: car {car.name}({car.id}) requested top-up", "StartTopUpCharge", true); + } + } + catch (Exception ex) + { + Diagnosis.Log($"StartTopUp error: {ExceptionFormatter.FormatEx(ex)}", "error", true); + } + } + + /// + /// 测试Block功能(内部调试用) + /// + public void TestBlock() + { + G.pushStatus("选择小车"); + var obj = SimpleMonitor.selected.ToArray()[0]; + if (obj is Car car && car != null) + { + CommandToBlock(car.id); + } + } + + /// + /// 处理补电生命周期 + /// + private void HandleTopUpLifecycle(CarChargeContext context) + { + var car = context.Car; + + // 如果没有补电相关标签,直接返回 + if (!IsInTopUpMode(car)) return; + + // 补电请求但未到充电站,确保shouldCharge存在 + if (car.tags.Contains("topup") && !context.CarInChargeSite) + { + Commons.AddOrUpdateTag(car.tags, "shouldCharge", "true"); + return; + } + + // 已到充电站且处于补电模式 + if (car.tags.Contains("topup") && context.CarInChargeSite) + { + HandleTopUpAtChargeSite(context); + } + } + + /// + /// 处理车辆在充电站时的补电逻辑 + /// + private void HandleTopUpAtChargeSite(CarChargeContext context) + { + var car = context.Car; + + // 电量达到100%且未开始计时,启动补电计时器 + if (context.Soc >= 100 && !car.tags.Contains("topupInProgress")) + { + StartTopUpTimer(car); + } + + // 补电进行中,检查是否完成 + if (car.tags.Contains("topupInProgress")) + { + CheckTopUpCompletion(car, context.Soc); + } + } + + /// + /// 启动补电计时器 + /// + private void StartTopUpTimer(Car car) + { + double minutes = AcmStatus.topUpMinutes; + if (car.tags.TryGetValue("topupMinutes", out var mStr) && + double.TryParse(mStr, out var mVal) && mVal > 0) + { + minutes = mVal; + } + + var start = DateTime.Now; + var end = start.AddMinutes(minutes); + Commons.AddOrUpdateTag(car.tags, "topupStart", start.ToString("o")); + Commons.AddOrUpdateTag(car.tags, "topupEnd", end.ToString("o")); + Commons.AddOrUpdateTag(car.tags, "topupInProgress", "true"); + Diagnosis.Log($"TopUp started for car {car.name}({car.id}), until {end}", "Charge", true); + } + + /// + /// 检查补电是否完成 + /// + private void CheckTopUpCompletion(Car car, double soc) + { + if (!car.tags.TryGetValue("topupEnd", out var endStr) || + !DateTime.TryParse(endStr, out var endTime)) + { + return; + } + + if (DateTime.Now >= endTime && soc >= 100) + { + ClearTopUpTags(car); + Commons.DeleteTag(car.tags, "shouldCharge"); + Commons.AddOrUpdateTag(car.tags, "mustToStandby", "true"); + Diagnosis.Log($"TopUp completed for car {car.name}({car.id})", "Charge", true); + } + } + + /// + /// 清理所有补电相关标签 + /// + private void ClearTopUpTags(Car car) + { + foreach (var tag in TopUpTags) + { + Commons.DeleteTag(car.tags, tag); + } + } + + /// + /// 判断车辆是否处于补电模式 + /// + private bool IsInTopUpMode(Car car) + { + return car.tags.Contains("topup") || car.tags.Contains("topupInProgress"); + } + + #endregion + + #region Parameter Management - 参数管理 + + private void UpdateMissionParameters() + { + try + { + // 从充电策略配置服务读取参数 + var config = ChargeStationHelper.GetChargeStrategyConfig(); + + if (config != null) + { + // SOC 相关参数 + AcmStatus.mustChargeSoc = config.MustChargeSoc; + AcmStatus.idleChargeSoc = config.IdleChargeSoc; + AcmStatus.taskAvailableSoc = config.TaskAvailableSoc; + AcmStatus.fullChargeSoc = config.FullChargeSoc; + AcmStatus.allowInterruptSoc = config.AllowInterruptSoc; + + // 时间相关参数 + AcmStatus.idleChargeSeconds = config.IdleChargeSeconds; + AcmStatus.idleSeconds = config.IdleSeconds; + AcmStatus.mustChargeSeconds = config.MustChargeSeconds; + AcmStatus.topUpMinutes = config.TopUpMinutes; + + // 任务相关参数 + AcmStatus.minAllowFreeCarToChargeTaskCnt = config.MinAllowFreeCarToChargeTaskCnt; + + // 开关参数 + AcmStatus.allowInterruptTask = config.AllowInterruptTask; + AcmStatus.useLowerSocForCharge = config.UseLowerSocForCharge; + AcmStatus.enableErrorChargeDetection = config.EnableErrorChargeDetection; + AcmStatus.useChargeSiteFilter = config.UseChargeSiteFilter; + + //Diagnosis.Log("充电策略参数已从配置文件加载"); + } + else + { + // 配置为空,使用旧的方式(从 fields 读取) + LoadParametersFromFields(); + } + } + catch (Exception ex) + { + Diagnosis.Log($"加载充电策略参数失败,使用fields或默认值: {ex.Message}"); + // 出错时使用旧的方式(从 fields 读取) + LoadParametersFromFields(); + } + } + + /// + /// 从 fields 字典加载参数(兼容旧方式) + /// + private void LoadParametersFromFields() + { + AcmStatus.mustChargeSoc = ParseDouble("mustChargeSoc", 20); + AcmStatus.idleChargeSoc = ParseDouble("idleChargeSoc", 90); + AcmStatus.taskAvailableSoc = ParseDouble("taskAvailableSoc", 60); + AcmStatus.fullChargeSoc = ParseDouble("fullChargeSoc", 90); + AcmStatus.allowInterruptSoc = ParseDouble("allowInterruptSoc", 45); + + AcmStatus.idleChargeSeconds = ParseDouble("idleChargeSeconds", 30); + AcmStatus.idleSeconds = ParseDouble("idleSeconds", 5); + AcmStatus.mustChargeSeconds = ParseDouble("mustChargeSeconds", 60); + AcmStatus.topUpMinutes = ParseDouble("topUpMinutes", 5); + + AcmStatus.minAllowFreeCarToChargeTaskCnt = ParseInt("minAllowFreeCarToChargeTaskNub", 0); + AcmStatus.allowInterruptTask = ParseBool("allowInterruptTask", false); + AcmStatus.useLowerSocForCharge = ParseBool("useLowerSocForCharge", true); + AcmStatus.enableErrorChargeDetection = ParseBool("enableErrorChargeDetection", false); + AcmStatus.useChargeSiteFilter = ParseBool("useChargeSiteFilter", false); + } + + private double ParseDouble(string key, double defaultValue) + { + return fields.TryGetValue(key, out var str) && double.TryParse(str, out var val) ? val : defaultValue; + } + + private int ParseInt(string key, int defaultValue) + { + return fields.TryGetValue(key, out var str) && int.TryParse(str, out var val) ? val : defaultValue; + } + + private bool ParseBool(string key, bool defaultValue) + { + return fields.TryGetValue(key, out var str) && bool.TryParse(str, out var val) ? val : defaultValue; + } + + #endregion + + #region Global Stats - 全局统计 + + private int CalculateGlobalStats(List allChargeSites) + { + var validCars = SimpleLib.GetAllCars().Where(p => p.GetLastSite() != -1).ToList(); + int chargingCarCount = 0; + int freeCarCount = 0; + int onlineCarCount = 0; + + foreach (var car in validCars) + { + if (IsCarOccupyingChargeSite(car, allChargeSites)) + chargingCarCount++; + + if (car.tags.Contains("idle") && car.status.pendingLocks.Length == 0) + freeCarCount++; + + if (IsOnlineCar((Car)car)) + onlineCarCount++; + } + + if (onlineCarCount != 0) + AcmStatus.freeCarPercent = (float)freeCarCount / onlineCarCount; + + return chargingCarCount; + } + + private bool IsCarOccupyingChargeSite(AbstractCar car, List allChargeSites) + { + return allChargeSites.Any(site => + car.status.holdingLocks.Contains(site.id) || + car.status.pendingLocks.Contains(site.id)); + } + + #endregion + + #region Car Processing - 单车处理主流程 + + private void ProcessSingleCar(Car car, List allChargeSites, int chargingCarCount) + { + if (!ValidateCarForProcessing(car)) return; + + var context = BuildCarContext(car, allChargeSites, chargingCarCount); + + // 清理待命标签 + if (context.CarInStandbySite && car.tags.Contains("mustToStandby")) + Commons.DeleteTag(car.tags, "mustToStandby"); + + // 任务打断检查 + HandleTaskInterruption(context); + + // 前置条件检查 + if (IsCarBusy(car) || ForbidBackToStandbyOrCharge(car)) return; + + // 必须充电逻辑 + HandleMustChargeLogic(context); + + // 更新空闲和充电状态 + if (!UpdateIdleAndChargeStatus(context)) return; + + // 处理补电生命周期 + HandleTopUpLifecycle(context); + + // 决定充电或回待命 + DecideChargeOrStandby(context); + + // 规划路径并执行 + PlanAndExecuteMovement(context, allChargeSites); + } + + private CarChargeContext BuildCarContext(Car car, List allChargeSites, int chargingCarCount) + { + var soc = Commons.CarValue(car, "Soc"); + var electricCurrent = Commons.CarValue(car, "ElectricCurrent"); + var carSiteId = car.GetLastSite(); + + var context = new CarChargeContext + { + Car = car, + Soc = soc, + ElectricCurrent = electricCurrent, + MustCharge = soc < AcmStatus.mustChargeSoc, + WaitingMissions = WaitingMissions(car), + CarInStandbySite = SimpleLib.GetAllSites() + .Any(p => p.fields.ContainsKey("standby") && p.id == carSiteId), + CarInChargeSite = car.status.holdingLocks.Length == 1 && + SimpleLib.GetAllSites().Any(p => p.fields.ContainsKey("Charge") && p.id == car.status.holdingLocks.First()) + }; + + // 更新全局状态 + AcmStatus.freeChargeCount = allChargeSites.Count - chargingCarCount; + AcmStatus.lowerSocCar = LowerCarSoc(car, allChargeSites); + + if (car.tags.TryGetValue("idle", out var strIdleTime)) + context.IdleTime = DateTime.Parse(strIdleTime); + + return context; + } + + private bool IsCarBusy(Car car) + { + return car.tags.Contains("occupied") || + car.tags.Contains("blocking") || + car.status.pendingLocks.Length != 0; + } + + #endregion + + #region Charging Logic - 充电逻辑 + + /// + /// 处理任务打断逻辑 + /// + private void HandleTaskInterruption(CarChargeContext context) + { + lock (_interruptLock) + { + // 清理过时的打断持有者 + CleanupStaleInterruptHolder(); + + var occupiedValue = GetOccupiedTagValue(context.Car); + var isMaintenanceTask = IsMaintenanceTask(occupiedValue); + + // 判断是否可以考虑触发打断 + var canConsiderTrigger = CanConsiderInterrupt(context, isMaintenanceTask); + + // 评选最佳候选车 + if (canConsiderTrigger) + { + SelectBestInterruptCandidate(context); + } + + // 只有最佳候选车才触发打断 + bool isBestCandidate = context.Car.id == _bestInterruptionCandidateId; + + LadderLogic.TriggerOnce(canConsiderTrigger && isBestCandidate, 5000, () => + { + ExecuteInterrupt(context, occupiedValue); + }, context.Car.id); + } + } + + /// + /// 清理过时的打断持有者 + /// + private void CleanupStaleInterruptHolder() + { + if (_interruptingCarId == -1) return; + + var holder = SimpleLib.GetAllCars().OfType().FirstOrDefault(c => c.id == _interruptingCarId); + if (holder == null) + { + _interruptingCarId = -1; + return; + } + + var holderOccupied = GetOccupiedTagValue(holder); + if (!IsMaintenanceTask(holderOccupied)) + { + _interruptingCarId = -1; + } + } + + /// + /// 判断是否为维护任务(充电或待命) + /// + private bool IsMaintenanceTask(string occupiedValue) + { + return occupiedValue.Contains("toCharge") || occupiedValue.Contains("toStandby"); + } + + /// + /// 判断是否可以考虑触发打断 + /// + private bool CanConsiderInterrupt(CarChargeContext context, bool isMaintenanceTask) + { + return context.WaitingMissions > 0 && context.Soc > AcmStatus.allowInterruptSoc && + FreeCarNub() == 0 && AcmStatus.allowInterruptTask && + isMaintenanceTask && _interruptingCarId == -1; + } + + /// + /// 评选最佳打断候选车 + /// + private void SelectBestInterruptCandidate(CarChargeContext context) + { + // 获取所有满足打断条件的车辆 + var candidates = SimpleLib.GetAllCars().OfType() + .Where(c => + { + var cOccupied = GetOccupiedTagValue(c); + var cSoc = Commons.CarValue(c, "Soc"); + return IsMaintenanceTask(cOccupied) && cSoc > AcmStatus.allowInterruptSoc; + }).ToList(); + + if (!candidates.Any()) return; + + // 获取第一个等待任务 + var firstMission = SimpleProject.proj.Missions.OfType() + .First() + .GetDeliveries() + .FindAll(p => p.GetStatus() == DeliveryStatus.Waiting) + .OrderBy(p => p.CreateTime) + .FirstOrDefault(); + + Car bestCandidate; + + if (firstMission != null) + { + // 优先选择距离任务起点最近的车,其次选择电量最高的车 + bestCandidate = candidates + .OrderBy(c => CalculateRouteLength(c, ((TransportDelivery)firstMission).Src)) + .ThenByDescending(c => Commons.CarValue(c, "Soc")) + .FirstOrDefault(); + } + else + { + // 仅按电量排序 + bestCandidate = candidates + .OrderByDescending(c => Commons.CarValue(c, "Soc")).FirstOrDefault(); + } + + if (bestCandidate != null) + { + _bestInterruptionCandidateId = bestCandidate.id; + Diagnosis.Post($"更新最佳候选车ID:{bestCandidate.id}", "CommandToBlock", true); + } + } + + /// + /// 计算车辆到目标站点的路径长度 + /// + private float CalculateRouteLength(Car car, int targetSiteId) + { + var mPlan = new SegmentPlan { usingCar = car }; + try + { + var routeLength = mPlan.FindRoute( + SimpleLib.GetSite(car.GetLastSite()), + SimpleLib.GetSite(targetSiteId)); + Diagnosis.Post($"当前尝试打断车{car.id}距离任务起点{mPlan.Destination.id}距离:{routeLength}", "CommandToBlock", true); + return routeLength; + } + catch + { + return float.MaxValue; + } + } + + /// + /// 执行打断操作 + /// + private void ExecuteInterrupt(CarChargeContext context, string occupiedValue) + { + lock (_interruptLock) + { + if (_interruptingCarId == -1) + { + _interruptingCarId = context.Car.id; + Diagnosis.Post($"小车:{context.Car.name},触发打断任务,missions:{context.WaitingMissions}," + + $"isOccupied:{occupiedValue},soc:{context.Soc},freecar:{FreeCarNub()}", + "CommandToBlock", true); + CommandToBlock(context.Car.id); + _bestInterruptionCandidateId = -1; + } + else + { + Diagnosis.Post($"跳过打断:已有车辆({_interruptingCarId})正在被打断,当前尝试车:{context.Car.id}", + "CommandToBlock", true); + } + } + } + + /// + /// 处理必须充电逻辑 + /// + private void HandleMustChargeLogic(CarChargeContext context) + { + LadderLogic.TriggerOnce( + context.MustCharge && !context.Car.tags.Contains("shouldCharge"), + MUST_CHARGE_TRIGGER_DELAY_MS, + () => + { + Diagnosis.Log($"小车:{context.Car.name},必须充电,当前电量:{context.Soc}", "Charge", true); + Commons.AddOrUpdateTag(context.Car.tags, "shouldCharge", "true"); + }, + context.Car.id); + } + + /// + /// 更新空闲和充电状态 + /// + private bool UpdateIdleAndChargeStatus(CarChargeContext context) + { + var car = context.Car; + + lock (Commons.PlanSession) + { + if (car.tags.Contains("occupied") || car.tags.Contains("blocking")) return false; + + if (!car.tags.Contains("idle")) + car.tags.Add("idle", DateTime.Now.ToString()); + + // 如果正在补电,即使电量满了也不应自动去待命 + if (context.Soc > AcmStatus.fullChargeSoc && !IsInTopUpMode(car)) + context.ShouldGoStandby = true; + } + + if (!car.tags.TryGetValue("idle", out var strIdleTime)) return false; + context.IdleTime = DateTime.Parse(strIdleTime); + + // 清理充电标记 + if (car.tags.Contains("charging") && !context.CarInChargeSite) + car.tags.Remove("charging"); + + // 判断是否需要充电 + var carFree = context.Soc <= AcmStatus.taskAvailableSoc && AcmStatus.freeChargeCount > 0; + var idleCharge = (context.Soc < AcmStatus.idleChargeSoc || carFree) && + (DateTime.Now - context.IdleTime).TotalSeconds > AcmStatus.idleChargeSeconds; + + UpdateShouldChargeTag(context, idleCharge); + + return true; + } + + /// + /// 更新shouldCharge标签 + /// + private void UpdateShouldChargeTag(CarChargeContext context, bool idleCharge) + { + var car = context.Car; + + if ((context.MustCharge || (idleCharge && context.WaitingMissions <= AcmStatus.minAllowFreeCarToChargeTaskCnt)) && + !context.ShouldGoStandby) + { + bool lowerSocOk = (AcmStatus.useLowerSocForCharge && context.Soc <= AcmStatus.lowerSocCar) || !AcmStatus.useLowerSocForCharge; + + if (((context.MustCharge || idleCharge) && lowerSocOk) && + AcmStatus.freeChargeCount > 0 && context.Soc < AcmStatus.fullChargeSoc) + { + Commons.AddOrUpdateTag(car.tags, "shouldCharge", "true"); + Diagnosis.Log($"小车:{car.name},需求充电,当前电量:{context.Soc},lowerSocCar:{AcmStatus.lowerSocCar}," + + $"mustCharge:{context.MustCharge},idleCharge:{idleCharge},waitingMissions:{context.WaitingMissions}", "Charge", true); + } + else + { + Commons.DeleteTag(car.tags, "shouldCharge"); + } + } + } + + #endregion + + #region Decision Making - 决策逻辑 + + /// + /// 决定充电或回待命 + /// + private void DecideChargeOrStandby(CarChargeContext context) + { + var car = context.Car; + + lock (Commons.PlanSession) + { + var carSiteId = car.GetLastSite(); + if (carSiteId == -1 || car.tags.Contains("occupied") || car.tags.Contains("blocking")) return; + + // 更新充电状态 + UpdateChargingTag(context); + + // 检查充电异常 + ErrorChargeTriggerToStandby(context); + + // 清除shouldCharge标记 + if ((context.ChargingTaskAvailable || + (context.WaitingMissions > 0 && context.Soc > AcmStatus.taskAvailableSoc && !car.tags.Contains("charging"))) && + car.tags.Contains("shouldCharge")) + { + Commons.DeleteTag(car.tags, "shouldCharge"); + } + + // 检查是否可以离开充电站执行任务 + CheckCanLeaveForTask(context); + + // 决定去充电 + if (car.tags.Contains("shouldCharge") && !CarInChargeSite(car, carSiteId)) + { + context.ShouldGoCharge = true; + Diagnosis.Log($"selected car:{car.name}|{car.id} to charge", "Charge", true); + } + + // 决定去待命 + if (!context.ShouldGoCharge) + { + CheckShouldGoStandby(context, carSiteId); + } + } + } + + /// + /// 更新充电标签 + /// + private void UpdateChargingTag(CarChargeContext context) + { + var car = context.Car; + var isTopUping = IsInTopUpMode(car); + + if (context.CarInChargeSite) + { + if (context.Soc <= AcmStatus.fullChargeSoc || isTopUping) + { + if (!car.tags.Contains("charging")) + car.tags.Add("charging", DateTime.Now.ToString()); + } + else if (!isTopUping) + { + if (car.tags.Contains("charging")) + car.tags.Remove("charging"); + context.ChargingTaskAvailable = true; + } + } + } + + /// + /// 检查是否可以离开充电站执行任务 + /// + private void CheckCanLeaveForTask(CarChargeContext context) + { + var car = context.Car; + + var canInterruptForTask = context.WaitingMissions > MAX_WAIT_WAITMISSION && + context.Soc > AcmStatus.allowInterruptSoc; + + if (context.Soc > AcmStatus.taskAvailableSoc && car.tags.Contains("charging")) + { + var onlyOneCarCharge = SimpleLib.GetAllCars().Count(p => p.GetLastSite() != -1) == 1; + + var canLeaveButStillCharge = + (context.Soc - AcmStatus.lowerSocCar) <= AcmStatus.lowPowerCarSwapChangeThresholdDelta && + (context.WaitingMissions <= AcmStatus.minAllowFreeCarToChargeTaskCnt || + context.Soc <= AcmStatus.lowerSocCar || + onlyOneCarCharge || + (context.WaitingMissions == 0 && context.Soc < AcmStatus.fullChargeSoc)); + + // 补电模式不允许离开 + if (IsInTopUpMode(car)) return; + + // 满足任务打断条件或满足原有离开条件 + if (canInterruptForTask || + (car.tags.TryGetValue("charging", out var cTime) && + DateTime.Parse(cTime).AddSeconds(AcmStatus.mustChargeSeconds) < DateTime.Now && + !canLeaveButStillCharge)) + { + car.tags.Remove("charging"); + context.ChargingTaskAvailable = true; + Commons.AddOrUpdateTag(car.tags, "mustToStandby", "true"); + Commons.DeleteTag(car.tags, "shouldCharge"); + if (canInterruptForTask) + { + Diagnosis.Log($"小车:{car.name},因有任务且电量{context.Soc}高于{AcmStatus.allowInterruptSoc},中断充电去执行任务", "Charge", true); + } + } + } + } + + /// + /// 检查是否应该去待命点 + /// + private void CheckShouldGoStandby(CarChargeContext context, int carSiteId) + { + var car = context.Car; + var standbyType = GetStandbyType(car); + + bool isBlocked = SimpleLib.GetAllCars() + .Any(c => c.status.pendingLocks.Length != 0 && c.id != car.id && + c.status.pendingLocks.Contains(car.GetLastSite())); + + if (SimpleLib.GetSite(carSiteId).fields.ContainsKey(standbyType) && !isBlocked) return; + if ((DateTime.Now - context.IdleTime).TotalSeconds < AcmStatus.idleSeconds) return; + + context.ShouldGoStandby = true; + } + + /// + /// 充电异常触发回待命点 + /// + private void ErrorChargeTriggerToStandby(CarChargeContext context) + { + if (!AcmStatus.enableErrorChargeDetection || !context.CarInChargeSite) return; + + var currentChargeSite = context.Car.status.holdingLocks.First(); + bool isChargeError = IsChargePointError(context.Car, currentChargeSite); + + LadderLogic.TriggerOnce(isChargeError, 10000, () => + { + HandleChargeError(context, currentChargeSite); + }, context.Car.id); + } + + /// + /// 处理充电异常 + /// + private void HandleChargeError(CarChargeContext context, int currentChargeSite) + { + Commons.DeleteTag(context.Car.tags, "shouldCharge"); + + if (context.Car.tags.Contains("charging")) + context.Car.tags.Remove("charging"); + + if (AcmStatus.freeChargeCount == 0) + { + Commons.AddOrUpdateTag(context.Car.tags, "mustToStandby", "true"); + context.ShouldGoStandby = true; + Diagnosis.Log($"小车:{context.Car.name},充电桩{currentChargeSite}异常,无空闲充电桩,返回待命点", "ChargeError", true); + } + else + { + context.ShouldGoCharge = true; + Commons.AddOrUpdateTag(context.Car.tags, "mustToAnotherChargeSite", $"{currentChargeSite}"); + context.ShouldGoStandby = false; + Diagnosis.Log($"小车:{context.Car.name},充电桩{currentChargeSite}异常,切换到其他充电桩", "ChargeError", true); + } + } + + + /// + /// 判断当前站点是否是其他小车pendingLocks的终点,若是则需要避让 + /// + private bool CheckPendingEndpointConflict(int siteId, Car currentCar) + { + if (siteId == -1) return false; + foreach (var other in SimpleLib.GetAllCars()) + { + if (other.id == currentCar.id) continue; + var pending = other.status.pendingLocks.Contains(siteId); + var holding = other.status.holdingLocks.Contains(siteId); + if (holding || + pending) + { + return true; + } + if (other.tags.TryGetValue("conflictTask", out string conflictTask)) + { + + if (conflictTask.Contains(siteId.ToString())) + { + return true; + } + } + } + + return false; + } + + #endregion + + #region Movement Planning - 移动规划 + + /// + /// 规划路径并执行移动 + /// + private void PlanAndExecuteMovement(CarChargeContext context, List allChargeSites) + { + var car = context.Car; + var carCharging = allChargeSites.Contains(SimpleLib.GetSite(car.GetLastSite())); + + // 规划去充电站 + if (ShouldPlanToCharge(context)) + { + context.TargetPlan = PlanToChargeSite(context); + if (context.TargetPlan != null) + { + car.tags.Add("occupied", "toCharge"); + context.TargetType = TARGET_TYPE_CHARGE; + } + } + + // 规划去待命点 + if (context.TargetPlan == null && ShouldPlanToStandby(context, carCharging)) + { + context.TargetPlan = PlanToStandbySite(context); + if (context.TargetPlan != null) + { + car.tags.Add("occupied", "toStandby"); + context.TargetType = TARGET_TYPE_STANDBY; + } + } + + if (context.TargetPlan == null) return; + + ExecuteMovement(context); + } + + private bool ShouldPlanToCharge(CarChargeContext context) + { + var car = context.Car; + return (context.ShouldGoCharge || + (car.tags.ContainsKey("mustToAnotherChargeSite") && car.tags.ContainsKey("shouldCharge"))) && + Commons.SelectCar(car, false, true, true) != -1 && + !car.tags.Contains("mustToStandby"); + } + + private bool ShouldPlanToStandby(CarChargeContext context, bool carCharging) + { + var car = context.Car; + return context.ShouldGoStandby && + (car.tags.Contains("mustToStandby") || !carCharging || (carCharging && context.ChargingTaskAvailable)) && + Commons.SelectCar(car, checkHoldCar: true) != -1; + } + + private SegmentPlan PlanToChargeSite(CarChargeContext context) + { + var car = context.Car; + return Commons.GetNearestPlan(car, site => + { + if (IsSiteOccupied(site)) return false; + + bool mustToAnotherChargeSite = car.tags.TryGetValue("mustToAnotherChargeSite", out var chargingSite) && + int.Parse(chargingSite) == site.id; + + return site.fields.ContainsKey("group") && + site.fields.ContainsKey("Charge") && + GetChargeType(car).Contains(site.fields["group"]) && + ((!mustToAnotherChargeSite && context.CarInChargeSite) || !context.CarInChargeSite); + }); + } + + private SegmentPlan PlanToStandbySite(CarChargeContext context) + { + var car = context.Car; + return Commons.SimpleToNearestPlan(car, site => + { + if (IsSiteOccupied(site)) return false; + if (IsUndeliverableSite(car, site.id)) return false; + + var isConflict= CheckPendingEndpointConflict(car.status.holdingLocks.First(),car) + &&(site.fields.ContainsKey("standby")|| site.fields.ContainsKey("giveWay")); + return ((site.fields.ContainsKey("standby") || isConflict)) && + !site.tags.Contains("unavailable") && + !context.CarInStandbySite; + }); + } + + /// + /// 执行移动 + /// + private void ExecuteMovement(CarChargeContext context) + { + var car = context.Car; + var targetPlan = context.TargetPlan; + CarProgram program; + + try + { + program = targetPlan.Compile( + $"{car.name}({car.id}) maintenance. charging?{context.ShouldGoCharge}--{targetPlan.Destination.id}"); + } + catch (Exception ex) + { + HandleCarFailure(car, ex); + if (!context.ShouldGoCharge) + AddUndeliverableSite(car, targetPlan.Destination.id); + return; + } + + Task.Run(async () => + { + try + { + if (context.TargetType == TARGET_TYPE_STANDBY && car.tags.Contains("shouldCharge")) + LeaveAction(car, targetPlan.Source); + + car.tags.Add("dest", $"{targetPlan.Destination.id}"); + await program.Queue(); + + CleanupAfterMovement(car, targetPlan.Destination.id); + } + catch (Exception e) + { + Diagnosis.Post($"fail to standby/charge exception:{ExceptionFormatter.FormatEx(e)}"); + HandleCarFailure(car); + } + }); + } + + private void CleanupAfterMovement(Car car, int destinationId) + { + Commons.DeleteTag(car.tags, "mustToAnotherChargeSite"); + Commons.DeleteTag(car.tags, "undeliverableSite"); + Commons.DeleteTag(car.tags, "mustToStandby"); + car.siteID = destinationId; + lock (Commons.PlanSession) + car.tags.Remove("occupied"); + } + + #endregion + + #region Helper Methods - 辅助方法 + + /// + /// 获取occupied标签值 + /// + public string GetOccupiedTagValue(Car car) + { + return car.tags.TryGetValue("occupied", out var occupiedValue) ? occupiedValue : ""; + } + + /// + /// 处理车辆失败 + /// + private void HandleCarFailure(Car car, Exception ex = null) + { + Diagnosis.Post($"car{car.id} failed going standby/charge, {ExceptionFormatter.FormatEx(ex)}"); + lock (Commons.PlanSession) + { + Commons.DeleteTag(car.tags, "occupied"); + car.tags.Add("idle", DateTime.Now.ToString()); + } + } + + /// + /// 获取空闲车辆数量 + /// + private int FreeCarNub() + { + return SimpleLib.GetAllCars() + .Count(p => !p.tags.Contains("occupied") && + p.status.holdingLocks.Length == 1 && + p.status.pendingLocks.Length == 0 && + !p.tags.ContainsKey("charging") && + p.tags.Contains("idle")); + } + + /// + /// 判断车辆是否在充电站 + /// + private bool CarInChargeSite(Car car, int carSiteId) + { + var site = SimpleLib.GetSite(carSiteId); + if (!site.fields.ContainsKey("group")) return false; + if (!GetChargeType(car).Contains(site.fields["group"])) return false; + if (!site.fields.ContainsKey("Charge")) return false; + return true; + } + + /// + /// 判断站点是否被占用 + /// + private bool IsSiteOccupied(Site site) + { + return SimpleLib.GetAllCars().Any(o => + o.status.pendingLocks.Contains(site.id) || + o.status.holdingLocks.Contains(site.id)); + } + + /// + /// 判断站点是否不可达 + /// + private bool IsUndeliverableSite(Car car, int siteId) + { + if (!car.tags.TryGetValue("undeliverableSite", out var sites)) return false; + + var siteList = sites.Split(','); + if (siteList.Length > MAX_UNDELIVERABLE_SITES) + Commons.DeleteTag(car.tags, "undeliverableSite"); + + foreach (var s in siteList) + { + if (int.TryParse(s, out var id) && id == siteId) + { + Diagnosis.Log($"{car.name}休息回滚发去待命点,sites[{sites}]失败,undeliverableSite,更换下个站点", + "UndeliverableSite", specialFolder: true); + return true; + } + } + return false; + } + + /// + /// 添加不可达站点记录 + /// + private void AddUndeliverableSite(Car car, int siteId) + { + if (car.tags.TryGetValue("undeliverableSite", out var undeliverableSite)) + Commons.AddOrUpdateTag(car.tags, "undeliverableSite", $"{undeliverableSite},{siteId}"); + else + Commons.AddOrUpdateTag(car.tags, "undeliverableSite", siteId.ToString()); + } + + #endregion + } +} diff --git a/StandardScene.Core/Charge/AlarmConfig.cs b/StandardScene.Core/Charge/AlarmConfig.cs new file mode 100644 index 0000000..1013ee6 --- /dev/null +++ b/StandardScene.Core/Charge/AlarmConfig.cs @@ -0,0 +1,109 @@ +using System; +using System.ComponentModel; + +namespace StandardScene.Charge +{ + /// + /// 报警配置数据模型 + /// + public class AlarmConfig + { + /// + /// 报警编号(自动生成) + /// + [DisplayName("编号")] + public string AlarmId { get; set; } + + /// + /// 报警编码值 + /// + [DisplayName("报警编码")] + public int AlarmCode { get; set; } + + /// + /// 报警内容描述 + /// + [DisplayName("报警内容")] + public string AlarmContent { get; set; } + + /// + /// 报警级别 + /// + [DisplayName("报警级别")] + public AlarmLevel Level { get; set; } + + /// + /// 是否启用 + /// + [DisplayName("启用")] + public bool Enabled { get; set; } + + /// + /// 备注 + /// + [DisplayName("备注")] + public string Remarks { get; set; } + + /// + /// 创建时间 + /// + [DisplayName("创建时间")] + public DateTime CreatedTime { get; set; } + + /// + /// 最后修改时间 + /// + [DisplayName("修改时间")] + public DateTime ModifiedTime { get; set; } + + public AlarmConfig() + { + AlarmId = GenerateAlarmId(); + Level = AlarmLevel.Medium; + Enabled = true; + CreatedTime = DateTime.Now; + ModifiedTime = DateTime.Now; + } + + /// + /// 生成报警编号 + /// + private static string GenerateAlarmId() + { + return $"ALM{DateTime.Now:yyyyMMddHHmmss}{new Random().Next(100, 999)}"; + } + + /// + /// 验证数据有效性 + /// + public bool IsValid(out string errorMessage) + { + if (string.IsNullOrWhiteSpace(AlarmId)) + { + errorMessage = "报警编号不能为空"; + return false; + } + + if (AlarmCode < 0) + { + errorMessage = "报警编码不能为负数"; + return false; + } + + if (string.IsNullOrWhiteSpace(AlarmContent)) + { + errorMessage = "报警内容不能为空"; + return false; + } + + errorMessage = string.Empty; + return true; + } + + public override string ToString() + { + return $"[{AlarmCode}] {AlarmContent}"; + } + } +} + diff --git a/StandardScene.Core/Charge/AlarmConfigDataService.cs b/StandardScene.Core/Charge/AlarmConfigDataService.cs new file mode 100644 index 0000000..0254dbb --- /dev/null +++ b/StandardScene.Core/Charge/AlarmConfigDataService.cs @@ -0,0 +1,310 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Newtonsoft.Json; + +namespace StandardScene.Charge +{ + /// + /// 报警配置数据服务(单例模式) + /// + public class AlarmConfigDataService + { + private static AlarmConfigDataService _instance; + private static readonly object _lock = new object(); + private List _alarmConfigs; + private readonly string _dataFilePath; + + private AlarmConfigDataService() + { + _dataFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config", "AlarmConfigs.json"); + LoadData(); + } + + /// + /// 获取单例实例 + /// + public static AlarmConfigDataService Instance + { + get + { + if (_instance == null) + { + lock (_lock) + { + if (_instance == null) + { + _instance = new AlarmConfigDataService(); + } + } + } + return _instance; + } + } + + /// + /// 从文件加载数据 + /// + private void LoadData() + { + try + { + // 确保数据目录存在 + var directory = Path.GetDirectoryName(_dataFilePath); + if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + + if (File.Exists(_dataFilePath)) + { + var json = File.ReadAllText(_dataFilePath); + if (!string.IsNullOrWhiteSpace(json)) + { + _alarmConfigs = JsonConvert.DeserializeObject>(json); + } + + // 如果反序列化失败或为null,创建新列表 + if (_alarmConfigs == null) + { + _alarmConfigs = new List(); + } + } + else + { + _alarmConfigs = new List(); + InitializeDefaultAlarms(); + SaveData(); + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"加载报警配置数据失败: {ex.Message}"); + _alarmConfigs = new List(); + InitializeDefaultAlarms(); + } + } + + /// + /// 初始化默认报警配置 + /// + private void InitializeDefaultAlarms() + { + //_alarmConfigs.Add(new AlarmConfig + //{ + // AlarmCode = 1001, + // AlarmContent = "电压过高", + // Level = AlarmLevel.High, + // Enabled = true, + // Remarks = "电压超过额定值10%" + //}); + + //_alarmConfigs.Add(new AlarmConfig + //{ + // AlarmCode = 1002, + // AlarmContent = "电压过低", + // Level = AlarmLevel.High, + // Enabled = true, + // Remarks = "电压低于额定值10%" + //}); + + //_alarmConfigs.Add(new AlarmConfig + //{ + // AlarmCode = 1003, + // AlarmContent = "电流过大", + // Level = AlarmLevel.Critical, + // Enabled = true, + // Remarks = "电流超过额定值" + //}); + + //_alarmConfigs.Add(new AlarmConfig + //{ + // AlarmCode = 2001, + // AlarmContent = "温度异常", + // Level = AlarmLevel.High, + // Enabled = true, + // Remarks = "温度超过安全范围" + //}); + + //_alarmConfigs.Add(new AlarmConfig + //{ + // AlarmCode = 3001, + // AlarmContent = "通讯超时", + // Level = AlarmLevel.Medium, + // Enabled = true, + // Remarks = "通讯响应时间超过阈值" + //}); + + //_alarmConfigs.Add(new AlarmConfig + //{ + // AlarmCode = 3002, + // AlarmContent = "连接断开", + // Level = AlarmLevel.Critical, + // Enabled = true, + // Remarks = "网络连接中断" + //}); + } + + /// + /// 保存数据到文件 + /// + private void SaveData() + { + try + { + var directory = Path.GetDirectoryName(_dataFilePath); + if (!Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + + var json = JsonConvert.SerializeObject(_alarmConfigs, Formatting.Indented); + File.WriteAllText(_dataFilePath, json); + } + catch (Exception ex) + { + throw new Exception($"保存数据失败: {ex.Message}"); + } + } + + /// + /// 获取所有报警配置 + /// + public List GetAllAlarmConfigs() + { + lock (_lock) + { + if (_alarmConfigs == null) + { + _alarmConfigs = new List(); + } + return new List(_alarmConfigs); + } + } + + /// + /// 根据编号获取报警配置 + /// + public AlarmConfig GetAlarmConfig(string alarmId) + { + lock (_lock) + { + return _alarmConfigs.FirstOrDefault(a => a.AlarmId == alarmId); + } + } + /// + /// 根据编号获取报警配置 + /// + public AlarmConfig GetAlarmConfigAlarmCode(int alarmCode) + { + lock (_lock) + { + return _alarmConfigs.FirstOrDefault(a => a.AlarmCode == alarmCode); + } + } + /// + /// 根据报警编码获取报警配置 + /// + public AlarmConfig GetAlarmConfigByCode(int alarmCode) + { + lock (_lock) + { + return _alarmConfigs.FirstOrDefault(a => a.AlarmCode == alarmCode); + } + } + + /// + /// 添加报警配置 + /// + public bool AddAlarmConfig(AlarmConfig alarmConfig, out string errorMessage) + { + lock (_lock) + { + if (!alarmConfig.IsValid(out errorMessage)) + { + return false; + } + + // 检查编码是否已存在 + if (_alarmConfigs.Any(a => a.AlarmCode == alarmConfig.AlarmCode)) + { + errorMessage = $"报警编码 {alarmConfig.AlarmCode} 已存在"; + return false; + } + + _alarmConfigs.Add(alarmConfig); + SaveData(); + errorMessage = string.Empty; + return true; + } + } + + /// + /// 更新报警配置 + /// + public bool UpdateAlarmConfig(AlarmConfig alarmConfig, out string errorMessage) + { + lock (_lock) + { + if (!alarmConfig.IsValid(out errorMessage)) + { + return false; + } + + var index = _alarmConfigs.FindIndex(a => a.AlarmId == alarmConfig.AlarmId); + if (index == -1) + { + errorMessage = "报警配置不存在"; + return false; + } + + // 检查编码是否与其他配置冲突 + if (_alarmConfigs.Any(a => a.AlarmId != alarmConfig.AlarmId && a.AlarmCode == alarmConfig.AlarmCode)) + { + errorMessage = $"报警编码 {alarmConfig.AlarmCode} 已被其他配置使用"; + return false; + } + + alarmConfig.ModifiedTime = DateTime.Now; + _alarmConfigs[index] = alarmConfig; + SaveData(); + errorMessage = string.Empty; + return true; + } + } + + /// + /// 删除报警配置 + /// + public bool DeleteAlarmConfig(string alarmId, out string errorMessage) + { + lock (_lock) + { + var alarmConfig = _alarmConfigs.FirstOrDefault(a => a.AlarmId == alarmId); + if (alarmConfig == null) + { + errorMessage = "报警配置不存在"; + return false; + } + + _alarmConfigs.Remove(alarmConfig); + SaveData(); + errorMessage = string.Empty; + return true; + } + } + + /// + /// 重新加载数据 + /// + public void Reload() + { + lock (_lock) + { + LoadData(); + } + } + } +} + diff --git a/StandardScene.Core/Charge/AlarmConfigManagementForm.Designer.cs b/StandardScene.Core/Charge/AlarmConfigManagementForm.Designer.cs new file mode 100644 index 0000000..58539ac --- /dev/null +++ b/StandardScene.Core/Charge/AlarmConfigManagementForm.Designer.cs @@ -0,0 +1,596 @@ +namespace StandardScene.Charge +{ + partial class AlarmConfigManagementForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.pnlList = new System.Windows.Forms.Panel(); + this.dgvAlarmConfigs = new System.Windows.Forms.DataGridView(); + this.pnlListButtons = new System.Windows.Forms.Panel(); + this.lblStatistics = new System.Windows.Forms.Label(); + this.btnClose = new System.Windows.Forms.Button(); + this.btnRefresh = new System.Windows.Forms.Button(); + this.pnlSearch = new System.Windows.Forms.Panel(); + this.cmbLevelFilter = new System.Windows.Forms.ComboBox(); + this.lblLevelFilter = new System.Windows.Forms.Label(); + this.txtSearch = new System.Windows.Forms.TextBox(); + this.lblSearch = new System.Windows.Forms.Label(); + this.pnlEdit = new System.Windows.Forms.Panel(); + this.grpEditInfo = new System.Windows.Forms.GroupBox(); + this.txtRemarks = new System.Windows.Forms.TextBox(); + this.lblRemarks = new System.Windows.Forms.Label(); + this.chkEnabled = new System.Windows.Forms.CheckBox(); + this.cmbLevel = new System.Windows.Forms.ComboBox(); + this.lblLevel = new System.Windows.Forms.Label(); + this.txtAlarmContent = new System.Windows.Forms.TextBox(); + this.lblAlarmContent = new System.Windows.Forms.Label(); + this.numAlarmCode = new System.Windows.Forms.NumericUpDown(); + this.lblAlarmCode = new System.Windows.Forms.Label(); + this.txtAlarmId = new System.Windows.Forms.TextBox(); + this.lblAlarmId = new System.Windows.Forms.Label(); + this.pnlEditButtons = new System.Windows.Forms.Panel(); + this.btnCancel = new System.Windows.Forms.Button(); + this.btnDelete = new System.Windows.Forms.Button(); + this.btnSave = new System.Windows.Forms.Button(); + this.colAlarmId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAlarmCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAlarmContent = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLevel = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colEnabled = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colRemarks = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + this.pnlList.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvAlarmConfigs)).BeginInit(); + this.pnlListButtons.SuspendLayout(); + this.pnlSearch.SuspendLayout(); + this.pnlEdit.SuspendLayout(); + this.grpEditInfo.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numAlarmCode)).BeginInit(); + this.pnlEditButtons.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer + // + this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer.Location = new System.Drawing.Point(0, 0); + this.splitContainer.Margin = new System.Windows.Forms.Padding(4); + this.splitContainer.Name = "splitContainer"; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.pnlList); + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.pnlEdit); + this.splitContainer.Size = new System.Drawing.Size(1400, 750); + this.splitContainer.SplitterDistance = 900; + this.splitContainer.SplitterWidth = 5; + this.splitContainer.TabIndex = 0; + // + // pnlList + // + this.pnlList.Controls.Add(this.dgvAlarmConfigs); + this.pnlList.Controls.Add(this.pnlListButtons); + this.pnlList.Controls.Add(this.pnlSearch); + this.pnlList.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlList.Location = new System.Drawing.Point(0, 0); + this.pnlList.Margin = new System.Windows.Forms.Padding(4); + this.pnlList.Name = "pnlList"; + this.pnlList.Size = new System.Drawing.Size(900, 750); + this.pnlList.TabIndex = 0; + // + // dgvAlarmConfigs + // + this.dgvAlarmConfigs.AllowUserToAddRows = false; + this.dgvAlarmConfigs.AllowUserToDeleteRows = false; + this.dgvAlarmConfigs.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.dgvAlarmConfigs.BackgroundColor = System.Drawing.Color.White; + this.dgvAlarmConfigs.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.dgvAlarmConfigs.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.SingleHorizontal; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(81)))), ((int)(((byte)(181))))); + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle3.ForeColor = System.Drawing.Color.White; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(81)))), ((int)(((byte)(181))))); + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvAlarmConfigs.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle3; + this.dgvAlarmConfigs.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvAlarmConfigs.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colAlarmId, + this.colAlarmCode, + this.colAlarmContent, + this.colLevel, + this.colEnabled, + this.colRemarks}); + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(202)))), ((int)(((byte)(233))))); + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(33)))), ((int)(((byte)(33))))); + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvAlarmConfigs.DefaultCellStyle = dataGridViewCellStyle4; + this.dgvAlarmConfigs.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvAlarmConfigs.EnableHeadersVisualStyles = false; + this.dgvAlarmConfigs.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.dgvAlarmConfigs.Location = new System.Drawing.Point(0, 62); + this.dgvAlarmConfigs.Margin = new System.Windows.Forms.Padding(4); + this.dgvAlarmConfigs.MultiSelect = false; + this.dgvAlarmConfigs.Name = "dgvAlarmConfigs"; + this.dgvAlarmConfigs.ReadOnly = true; + this.dgvAlarmConfigs.RowHeadersVisible = false; + this.dgvAlarmConfigs.RowHeadersWidth = 30; + this.dgvAlarmConfigs.RowTemplate.Height = 35; + this.dgvAlarmConfigs.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dgvAlarmConfigs.Size = new System.Drawing.Size(900, 600); + this.dgvAlarmConfigs.TabIndex = 2; + this.dgvAlarmConfigs.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvAlarmConfigs_CellDoubleClick); + // + // pnlListButtons + // + this.pnlListButtons.Controls.Add(this.lblStatistics); + this.pnlListButtons.Controls.Add(this.btnClose); + this.pnlListButtons.Controls.Add(this.btnRefresh); + this.pnlListButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.pnlListButtons.Location = new System.Drawing.Point(0, 662); + this.pnlListButtons.Margin = new System.Windows.Forms.Padding(4); + this.pnlListButtons.Name = "pnlListButtons"; + this.pnlListButtons.Padding = new System.Windows.Forms.Padding(13, 12, 13, 12); + this.pnlListButtons.Size = new System.Drawing.Size(900, 88); + this.pnlListButtons.TabIndex = 1; + // + // lblStatistics + // + this.lblStatistics.AutoSize = true; + this.lblStatistics.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblStatistics.Location = new System.Drawing.Point(20, 31); + this.lblStatistics.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblStatistics.Name = "lblStatistics"; + this.lblStatistics.Size = new System.Drawing.Size(204, 24); + this.lblStatistics.TabIndex = 2; + this.lblStatistics.Text = "总数: 0 | 启用: 0 | 禁用: 0"; + // + // btnClose + // + this.btnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnClose.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClose.Location = new System.Drawing.Point(753, 19); + this.btnClose.Margin = new System.Windows.Forms.Padding(4); + this.btnClose.Name = "btnClose"; + this.btnClose.Size = new System.Drawing.Size(120, 50); + this.btnClose.TabIndex = 1; + this.btnClose.Text = "关闭"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // btnRefresh + // + this.btnRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnRefresh.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefresh.Location = new System.Drawing.Point(620, 19); + this.btnRefresh.Margin = new System.Windows.Forms.Padding(4); + this.btnRefresh.Name = "btnRefresh"; + this.btnRefresh.Size = new System.Drawing.Size(120, 50); + this.btnRefresh.TabIndex = 0; + this.btnRefresh.Text = "刷新"; + this.btnRefresh.UseVisualStyleBackColor = true; + this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click); + // + // pnlSearch + // + this.pnlSearch.Controls.Add(this.cmbLevelFilter); + this.pnlSearch.Controls.Add(this.lblLevelFilter); + this.pnlSearch.Controls.Add(this.txtSearch); + this.pnlSearch.Controls.Add(this.lblSearch); + this.pnlSearch.Dock = System.Windows.Forms.DockStyle.Top; + this.pnlSearch.Location = new System.Drawing.Point(0, 0); + this.pnlSearch.Margin = new System.Windows.Forms.Padding(4); + this.pnlSearch.Name = "pnlSearch"; + this.pnlSearch.Padding = new System.Windows.Forms.Padding(13, 12, 13, 12); + this.pnlSearch.Size = new System.Drawing.Size(900, 62); + this.pnlSearch.TabIndex = 0; + // + // cmbLevelFilter + // + this.cmbLevelFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbLevelFilter.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbLevelFilter.FormattingEnabled = true; + this.cmbLevelFilter.Location = new System.Drawing.Point(550, 16); + this.cmbLevelFilter.Margin = new System.Windows.Forms.Padding(4); + this.cmbLevelFilter.Name = "cmbLevelFilter"; + this.cmbLevelFilter.Size = new System.Drawing.Size(150, 31); + this.cmbLevelFilter.TabIndex = 3; + this.cmbLevelFilter.SelectedIndexChanged += new System.EventHandler(this.cmbLevelFilter_SelectedIndexChanged); + // + // lblLevelFilter + // + this.lblLevelFilter.AutoSize = true; + this.lblLevelFilter.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblLevelFilter.Location = new System.Drawing.Point(463, 21); + this.lblLevelFilter.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblLevelFilter.Name = "lblLevelFilter"; + this.lblLevelFilter.Size = new System.Drawing.Size(61, 23); + this.lblLevelFilter.TabIndex = 2; + this.lblLevelFilter.Text = "级别:"; + // + // txtSearch + // + this.txtSearch.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtSearch.Location = new System.Drawing.Point(100, 16); + this.txtSearch.Margin = new System.Windows.Forms.Padding(4); + this.txtSearch.Name = "txtSearch"; + this.txtSearch.Size = new System.Drawing.Size(300, 29); + this.txtSearch.TabIndex = 1; + this.txtSearch.TextChanged += new System.EventHandler(this.txtSearch_TextChanged); + // + // lblSearch + // + this.lblSearch.AutoSize = true; + this.lblSearch.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblSearch.Location = new System.Drawing.Point(13, 21); + this.lblSearch.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblSearch.Name = "lblSearch"; + this.lblSearch.Size = new System.Drawing.Size(61, 23); + this.lblSearch.TabIndex = 0; + this.lblSearch.Text = "搜索:"; + // + // pnlEdit + // + this.pnlEdit.Controls.Add(this.grpEditInfo); + this.pnlEdit.Controls.Add(this.pnlEditButtons); + this.pnlEdit.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlEdit.Location = new System.Drawing.Point(0, 0); + this.pnlEdit.Margin = new System.Windows.Forms.Padding(4); + this.pnlEdit.Name = "pnlEdit"; + this.pnlEdit.Size = new System.Drawing.Size(495, 750); + this.pnlEdit.TabIndex = 0; + // + // grpEditInfo + // + this.grpEditInfo.Controls.Add(this.txtRemarks); + this.grpEditInfo.Controls.Add(this.lblRemarks); + this.grpEditInfo.Controls.Add(this.chkEnabled); + this.grpEditInfo.Controls.Add(this.cmbLevel); + this.grpEditInfo.Controls.Add(this.lblLevel); + this.grpEditInfo.Controls.Add(this.txtAlarmContent); + this.grpEditInfo.Controls.Add(this.lblAlarmContent); + this.grpEditInfo.Controls.Add(this.numAlarmCode); + this.grpEditInfo.Controls.Add(this.lblAlarmCode); + this.grpEditInfo.Controls.Add(this.txtAlarmId); + this.grpEditInfo.Controls.Add(this.lblAlarmId); + this.grpEditInfo.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpEditInfo.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.grpEditInfo.Location = new System.Drawing.Point(0, 0); + this.grpEditInfo.Margin = new System.Windows.Forms.Padding(4); + this.grpEditInfo.Name = "grpEditInfo"; + this.grpEditInfo.Padding = new System.Windows.Forms.Padding(20, 19, 20, 19); + this.grpEditInfo.Size = new System.Drawing.Size(495, 625); + this.grpEditInfo.TabIndex = 1; + this.grpEditInfo.TabStop = false; + this.grpEditInfo.Text = "报警配置信息"; + // + // txtRemarks + // + this.txtRemarks.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtRemarks.Location = new System.Drawing.Point(130, 350); + this.txtRemarks.Margin = new System.Windows.Forms.Padding(4); + this.txtRemarks.Multiline = true; + this.txtRemarks.Name = "txtRemarks"; + this.txtRemarks.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtRemarks.Size = new System.Drawing.Size(330, 80); + this.txtRemarks.TabIndex = 10; + // + // lblRemarks + // + this.lblRemarks.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblRemarks.Location = new System.Drawing.Point(27, 350); + this.lblRemarks.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblRemarks.Name = "lblRemarks"; + this.lblRemarks.Size = new System.Drawing.Size(100, 31); + this.lblRemarks.TabIndex = 9; + this.lblRemarks.Text = "备注:"; + this.lblRemarks.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // chkEnabled + // + this.chkEnabled.AutoSize = true; + this.chkEnabled.Checked = true; + this.chkEnabled.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkEnabled.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkEnabled.Location = new System.Drawing.Point(130, 300); + this.chkEnabled.Margin = new System.Windows.Forms.Padding(4); + this.chkEnabled.Name = "chkEnabled"; + this.chkEnabled.Size = new System.Drawing.Size(83, 27); + this.chkEnabled.TabIndex = 8; + this.chkEnabled.Text = "启用中"; + this.chkEnabled.UseVisualStyleBackColor = true; + this.chkEnabled.Visible = false; + // + // cmbLevel + // + this.cmbLevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbLevel.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbLevel.FormattingEnabled = true; + this.cmbLevel.Location = new System.Drawing.Point(130, 244); + this.cmbLevel.Margin = new System.Windows.Forms.Padding(4); + this.cmbLevel.Name = "cmbLevel"; + this.cmbLevel.Size = new System.Drawing.Size(330, 31); + this.cmbLevel.TabIndex = 7; + // + // lblLevel + // + this.lblLevel.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblLevel.Location = new System.Drawing.Point(27, 244); + this.lblLevel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblLevel.Name = "lblLevel"; + this.lblLevel.Size = new System.Drawing.Size(100, 31); + this.lblLevel.TabIndex = 6; + this.lblLevel.Text = "报警级别:"; + this.lblLevel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // txtAlarmContent + // + this.txtAlarmContent.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtAlarmContent.Location = new System.Drawing.Point(130, 181); + this.txtAlarmContent.Margin = new System.Windows.Forms.Padding(4); + this.txtAlarmContent.Multiline = true; + this.txtAlarmContent.Name = "txtAlarmContent"; + this.txtAlarmContent.Size = new System.Drawing.Size(330, 50); + this.txtAlarmContent.TabIndex = 5; + // + // lblAlarmContent + // + this.lblAlarmContent.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblAlarmContent.Location = new System.Drawing.Point(27, 181); + this.lblAlarmContent.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblAlarmContent.Name = "lblAlarmContent"; + this.lblAlarmContent.Size = new System.Drawing.Size(100, 31); + this.lblAlarmContent.TabIndex = 4; + this.lblAlarmContent.Text = "报警内容:"; + this.lblAlarmContent.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // numAlarmCode + // + this.numAlarmCode.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.numAlarmCode.Location = new System.Drawing.Point(130, 119); + this.numAlarmCode.Margin = new System.Windows.Forms.Padding(4); + this.numAlarmCode.Maximum = new decimal(new int[] { + 99999, + 0, + 0, + 0}); + this.numAlarmCode.Name = "numAlarmCode"; + this.numAlarmCode.Size = new System.Drawing.Size(330, 29); + this.numAlarmCode.TabIndex = 3; + // + // lblAlarmCode + // + this.lblAlarmCode.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblAlarmCode.Location = new System.Drawing.Point(27, 119); + this.lblAlarmCode.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblAlarmCode.Name = "lblAlarmCode"; + this.lblAlarmCode.Size = new System.Drawing.Size(100, 31); + this.lblAlarmCode.TabIndex = 2; + this.lblAlarmCode.Text = "报警编码:"; + this.lblAlarmCode.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // txtAlarmId + // + this.txtAlarmId.BackColor = System.Drawing.Color.LightGray; + this.txtAlarmId.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtAlarmId.Location = new System.Drawing.Point(130, 56); + this.txtAlarmId.Margin = new System.Windows.Forms.Padding(4); + this.txtAlarmId.Name = "txtAlarmId"; + this.txtAlarmId.ReadOnly = true; + this.txtAlarmId.Size = new System.Drawing.Size(330, 27); + this.txtAlarmId.TabIndex = 1; + this.txtAlarmId.Visible = false; + // + // lblAlarmId + // + this.lblAlarmId.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblAlarmId.Location = new System.Drawing.Point(27, 56); + this.lblAlarmId.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblAlarmId.Name = "lblAlarmId"; + this.lblAlarmId.Size = new System.Drawing.Size(100, 31); + this.lblAlarmId.TabIndex = 0; + this.lblAlarmId.Text = "编号:"; + this.lblAlarmId.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.lblAlarmId.Visible = false; + // + // pnlEditButtons + // + this.pnlEditButtons.Controls.Add(this.btnCancel); + this.pnlEditButtons.Controls.Add(this.btnDelete); + this.pnlEditButtons.Controls.Add(this.btnSave); + this.pnlEditButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.pnlEditButtons.Location = new System.Drawing.Point(0, 625); + this.pnlEditButtons.Margin = new System.Windows.Forms.Padding(4); + this.pnlEditButtons.Name = "pnlEditButtons"; + this.pnlEditButtons.Padding = new System.Windows.Forms.Padding(13, 12, 13, 12); + this.pnlEditButtons.Size = new System.Drawing.Size(495, 125); + this.pnlEditButtons.TabIndex = 0; + // + // btnCancel + // + this.btnCancel.Font = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCancel.Location = new System.Drawing.Point(333, 25); + this.btnCancel.Margin = new System.Windows.Forms.Padding(4); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(133, 62); + this.btnCancel.TabIndex = 2; + this.btnCancel.Text = "取消"; + this.btnCancel.UseVisualStyleBackColor = true; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // btnDelete + // + this.btnDelete.BackColor = System.Drawing.Color.LightCoral; + this.btnDelete.Font = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDelete.Location = new System.Drawing.Point(180, 25); + this.btnDelete.Margin = new System.Windows.Forms.Padding(4); + this.btnDelete.Name = "btnDelete"; + this.btnDelete.Size = new System.Drawing.Size(133, 62); + this.btnDelete.TabIndex = 1; + this.btnDelete.Text = "删除"; + this.btnDelete.UseVisualStyleBackColor = false; + this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); + // + // btnSave + // + this.btnSave.BackColor = System.Drawing.Color.LightBlue; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSave.Location = new System.Drawing.Point(27, 25); + this.btnSave.Margin = new System.Windows.Forms.Padding(4); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(133, 62); + this.btnSave.TabIndex = 0; + this.btnSave.Text = "新增"; + this.btnSave.UseVisualStyleBackColor = false; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // colAlarmId + // + this.colAlarmId.HeaderText = "编号"; + this.colAlarmId.MinimumWidth = 6; + this.colAlarmId.Name = "colAlarmId"; + this.colAlarmId.ReadOnly = true; + this.colAlarmId.Visible = false; + // + // colAlarmCode + // + this.colAlarmCode.HeaderText = "报警编码"; + this.colAlarmCode.MinimumWidth = 6; + this.colAlarmCode.Name = "colAlarmCode"; + this.colAlarmCode.ReadOnly = true; + // + // colAlarmContent + // + this.colAlarmContent.HeaderText = "报警内容"; + this.colAlarmContent.MinimumWidth = 6; + this.colAlarmContent.Name = "colAlarmContent"; + this.colAlarmContent.ReadOnly = true; + // + // colLevel + // + this.colLevel.HeaderText = "级别"; + this.colLevel.MinimumWidth = 6; + this.colLevel.Name = "colLevel"; + this.colLevel.ReadOnly = true; + // + // colEnabled + // + this.colEnabled.HeaderText = "启用"; + this.colEnabled.MinimumWidth = 6; + this.colEnabled.Name = "colEnabled"; + this.colEnabled.ReadOnly = true; + // + // colRemarks + // + this.colRemarks.HeaderText = "备注"; + this.colRemarks.MinimumWidth = 6; + this.colRemarks.Name = "colRemarks"; + this.colRemarks.ReadOnly = true; + // + // AlarmConfigManagementForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1400, 750); + this.Controls.Add(this.splitContainer); + this.Margin = new System.Windows.Forms.Padding(4); + this.MinimumSize = new System.Drawing.Size(1200, 600); + this.Name = "AlarmConfigManagementForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "报警配置管理"; + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + this.pnlList.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvAlarmConfigs)).EndInit(); + this.pnlListButtons.ResumeLayout(false); + this.pnlListButtons.PerformLayout(); + this.pnlSearch.ResumeLayout(false); + this.pnlSearch.PerformLayout(); + this.pnlEdit.ResumeLayout(false); + this.grpEditInfo.ResumeLayout(false); + this.grpEditInfo.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numAlarmCode)).EndInit(); + this.pnlEditButtons.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer; + private System.Windows.Forms.Panel pnlList; + private System.Windows.Forms.DataGridView dgvAlarmConfigs; + private System.Windows.Forms.Panel pnlListButtons; + private System.Windows.Forms.Label lblStatistics; + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.Button btnRefresh; + private System.Windows.Forms.Panel pnlSearch; + private System.Windows.Forms.ComboBox cmbLevelFilter; + private System.Windows.Forms.Label lblLevelFilter; + private System.Windows.Forms.TextBox txtSearch; + private System.Windows.Forms.Label lblSearch; + private System.Windows.Forms.Panel pnlEdit; + private System.Windows.Forms.GroupBox grpEditInfo; + private System.Windows.Forms.TextBox txtRemarks; + private System.Windows.Forms.Label lblRemarks; + private System.Windows.Forms.CheckBox chkEnabled; + private System.Windows.Forms.ComboBox cmbLevel; + private System.Windows.Forms.Label lblLevel; + private System.Windows.Forms.TextBox txtAlarmContent; + private System.Windows.Forms.Label lblAlarmContent; + private System.Windows.Forms.NumericUpDown numAlarmCode; + private System.Windows.Forms.Label lblAlarmCode; + private System.Windows.Forms.TextBox txtAlarmId; + private System.Windows.Forms.Label lblAlarmId; + private System.Windows.Forms.Panel pnlEditButtons; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnDelete; + private System.Windows.Forms.Button btnSave; + private System.Windows.Forms.DataGridViewTextBoxColumn colAlarmId; + private System.Windows.Forms.DataGridViewTextBoxColumn colAlarmCode; + private System.Windows.Forms.DataGridViewTextBoxColumn colAlarmContent; + private System.Windows.Forms.DataGridViewTextBoxColumn colLevel; + private System.Windows.Forms.DataGridViewTextBoxColumn colEnabled; + private System.Windows.Forms.DataGridViewTextBoxColumn colRemarks; + } +} + diff --git a/StandardScene.Core/Charge/AlarmConfigManagementForm.cs b/StandardScene.Core/Charge/AlarmConfigManagementForm.cs new file mode 100644 index 0000000..9f50a2e --- /dev/null +++ b/StandardScene.Core/Charge/AlarmConfigManagementForm.cs @@ -0,0 +1,547 @@ +using System; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; + +namespace StandardScene.Charge +{ + /// + /// 报警配置管理窗体 + /// + public partial class AlarmConfigManagementForm : Form + { + private readonly AlarmConfigDataService dataService; + private AlarmConfig selectedAlarmConfig; + + public AlarmConfigManagementForm() + { + try + { + InitializeComponent(); + dataService = AlarmConfigDataService.Instance; + + // 订阅Load事件,确保所有控件都已初始化后再加载数据 + this.Load += AlarmConfigManagementForm_Load; + } + catch (Exception ex) + { + MessageBox.Show($"初始化报警配置管理窗体失败: {ex.Message}\n\n详细信息:\n{ex.StackTrace}", + "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 窗体加载事件 + /// + private void AlarmConfigManagementForm_Load(object sender, EventArgs e) + { + InitializeForm(); + } + + /// + /// 初始化窗体 + /// + private void InitializeForm() + { + try + { + // 初始化报警级别下拉框 + if (cmbLevel != null) + { + cmbLevel.Items.Clear(); + cmbLevel.Items.Add("无"); + cmbLevel.Items.Add("低"); + cmbLevel.Items.Add("中"); + cmbLevel.Items.Add("高"); + cmbLevel.Items.Add("严重"); + cmbLevel.SelectedIndex = 2; // 默认选择"中" + } + + // 初始化级别筛选下拉框 + if (cmbLevelFilter != null) + { + cmbLevelFilter.Items.Clear(); + cmbLevelFilter.Items.Add("全部"); + cmbLevelFilter.Items.Add("无"); + cmbLevelFilter.Items.Add("低"); + cmbLevelFilter.Items.Add("中"); + cmbLevelFilter.Items.Add("高"); + cmbLevelFilter.Items.Add("严重"); + cmbLevelFilter.SelectedIndex = 0; + } + + LoadAlarmConfigs(); + ClearEditFields(); + } + catch (Exception ex) + { + MessageBox.Show($"初始化窗体失败: {ex.Message}\n\n{ex.StackTrace}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 加载报警配置列表 + /// + private void LoadAlarmConfigs() + { + try + { + if (dgvAlarmConfigs == null) + { + return; // 控件还未初始化,直接返回 + } + + var alarmConfigs = dataService.GetAllAlarmConfigs(); + + if (alarmConfigs == null) + { + alarmConfigs = new System.Collections.Generic.List(); + } + + // 根据级别筛选 + if (cmbLevelFilter != null && cmbLevelFilter.SelectedIndex > 0) + { + var filterLevel = (AlarmLevel)(cmbLevelFilter.SelectedIndex - 1); + alarmConfigs = alarmConfigs.Where(a => a.Level == filterLevel).ToList(); + } + + // 根据搜索文本筛选 + if (txtSearch != null && !string.IsNullOrWhiteSpace(txtSearch.Text)) + { + var searchText = txtSearch.Text.Trim().ToLower(); + alarmConfigs = alarmConfigs.Where(a => + a.AlarmId.ToLower().Contains(searchText) || + a.AlarmCode.ToString().Contains(searchText) || + a.AlarmContent.ToLower().Contains(searchText) + ).ToList(); + } + + dgvAlarmConfigs.Rows.Clear(); + + foreach (var alarm in alarmConfigs) + { + var index = dgvAlarmConfigs.Rows.Add( + alarm.AlarmId, + alarm.AlarmCode, + alarm.AlarmContent, + GetLevelText(alarm.Level), + alarm.Enabled ? "是" : "否", + alarm.Remarks + ); + + // 根据级别设置行颜色 + var row = dgvAlarmConfigs.Rows[index]; + switch (alarm.Level) + { + case AlarmLevel.Critical: + row.DefaultCellStyle.BackColor = Color.FromArgb(255, 235, 238); // 浅红色 + row.DefaultCellStyle.ForeColor = Color.FromArgb(183, 28, 28); + // 安全地创建粗体字体 + var baseFont = row.DefaultCellStyle.Font ?? dgvAlarmConfigs.DefaultCellStyle.Font ?? new Font("微软雅黑", 9F); + row.DefaultCellStyle.Font = new Font(baseFont, FontStyle.Bold); + break; + case AlarmLevel.High: + row.DefaultCellStyle.BackColor = Color.FromArgb(255, 243, 224); // 浅橙色 + row.DefaultCellStyle.ForeColor = Color.FromArgb(230, 81, 0); + break; + case AlarmLevel.Medium: + row.DefaultCellStyle.BackColor = Color.FromArgb(255, 249, 196); // 浅黄色 + row.DefaultCellStyle.ForeColor = Color.FromArgb(245, 127, 23); + break; + case AlarmLevel.Low: + row.DefaultCellStyle.BackColor = Color.FromArgb(232, 245, 233); // 浅绿色 + row.DefaultCellStyle.ForeColor = Color.FromArgb(46, 125, 50); + break; + } + + // 如果未启用,显示为灰色 + if (!alarm.Enabled) + { + row.DefaultCellStyle.BackColor = Color.FromArgb(238, 238, 238); + row.DefaultCellStyle.ForeColor = Color.FromArgb(158, 158, 158); + } + } + + UpdateStatistics(); + UpdateTitleWithFilter(alarmConfigs.Count); + } + catch (Exception ex) + { + MessageBox.Show($"加载数据失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 更新统计信息 + /// + private void UpdateStatistics() + { + try + { + if (lblStatistics == null) + { + return; + } + + var alarmConfigs = dataService.GetAllAlarmConfigs(); + if (alarmConfigs == null) + { + alarmConfigs = new System.Collections.Generic.List(); + } + + var total = alarmConfigs.Count; + var enabled = alarmConfigs.Count(a => a.Enabled); + var disabled = total - enabled; + var critical = alarmConfigs.Count(a => a.Level == AlarmLevel.Critical); + var high = alarmConfigs.Count(a => a.Level == AlarmLevel.High); + + lblStatistics.Text = $"总数: {total} | 启用: {enabled} | 禁用: {disabled} | 严重: {critical} | 高级: {high}"; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"更新统计信息失败: {ex.Message}"); + } + } + + /// + /// 更新标题显示筛选信息 + /// + private void UpdateTitleWithFilter(int displayCount) + { + try + { + var allConfigs = dataService.GetAllAlarmConfigs(); + var totalCount = allConfigs != null ? allConfigs.Count : 0; + + if (cmbLevelFilter != null && cmbLevelFilter.SelectedIndex > 0) + { + this.Text = $"报警配置管理 - 显示: {displayCount}/{totalCount} ({cmbLevelFilter.Text})"; + } + else + { + this.Text = $"报警配置管理 - 总数: {totalCount}"; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"更新标题失败: {ex.Message}"); + this.Text = "报警配置管理"; + } + } + + /// + /// 获取级别文本 + /// + private string GetLevelText(AlarmLevel level) + { + switch (level) + { + case AlarmLevel.None: return "无"; + case AlarmLevel.Low: return "低"; + case AlarmLevel.Medium: return "中"; + case AlarmLevel.High: return "高"; + case AlarmLevel.Critical: return "严重"; + default: return "未知"; + } + } + + /// + /// 清空编辑字段 + /// + private void ClearEditFields() + { + try + { + selectedAlarmConfig = null; + + if (txtAlarmId != null) + { + txtAlarmId.Text = ""; + txtAlarmId.Enabled = false; // 新增时编号自动生成 + } + + if (numAlarmCode != null) + { + numAlarmCode.Value = 0; + numAlarmCode.Enabled = true; + numAlarmCode.ReadOnly = false; + } + + if (txtAlarmContent != null) + { + txtAlarmContent.Text = ""; + txtAlarmContent.Enabled = true; + txtAlarmContent.ReadOnly = false; + } + + if (cmbLevel != null) + { + cmbLevel.SelectedIndex = 2; // 中 + cmbLevel.Enabled = true; + } + + if (chkEnabled != null) + { + chkEnabled.Checked = true; + chkEnabled.Enabled = true; + } + + if (txtRemarks != null) + { + txtRemarks.Text = ""; + txtRemarks.Enabled = true; + txtRemarks.ReadOnly = false; + } + + if (btnSave != null) + { + btnSave.Text = "新增"; + btnSave.Enabled = true; + } + + if (btnDelete != null) + { + btnDelete.Enabled = false; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"清空编辑字段失败: {ex.Message}"); + } + } + + /// + /// 从字段创建报警配置 + /// + private AlarmConfig CreateAlarmConfigFromFields() + { + var alarmConfig = selectedAlarmConfig ?? new AlarmConfig(); + + alarmConfig.AlarmCode = (int)numAlarmCode.Value; + alarmConfig.AlarmContent = txtAlarmContent.Text.Trim(); + alarmConfig.Level = (AlarmLevel)cmbLevel.SelectedIndex; + alarmConfig.Enabled = chkEnabled.Checked; + alarmConfig.Remarks = txtRemarks.Text.Trim(); + + return alarmConfig; + } + + /// + /// 加载报警配置到编辑区 + /// + private void LoadAlarmConfigToFields(AlarmConfig alarmConfig) + { + try + { + selectedAlarmConfig = alarmConfig; + + // 填充数据 + if (txtAlarmId != null) + { + txtAlarmId.Text = alarmConfig.AlarmId; + txtAlarmId.Enabled = false; // 编号不可修改 + } + + if (numAlarmCode != null) + { + numAlarmCode.Value = alarmConfig.AlarmCode; + numAlarmCode.Enabled = true; + numAlarmCode.ReadOnly = false; + } + + if (txtAlarmContent != null) + { + txtAlarmContent.Text = alarmConfig.AlarmContent; + txtAlarmContent.Enabled = true; + txtAlarmContent.ReadOnly = false; + } + + if (cmbLevel != null) + { + cmbLevel.SelectedIndex = (int)alarmConfig.Level; + cmbLevel.Enabled = true; + } + + if (chkEnabled != null) + { + chkEnabled.Checked = alarmConfig.Enabled; + chkEnabled.Enabled = true; + } + + if (txtRemarks != null) + { + txtRemarks.Text = alarmConfig.Remarks ?? ""; + txtRemarks.Enabled = true; + txtRemarks.ReadOnly = false; + } + + // 设置按钮状态 + if (btnSave != null) + { + btnSave.Text = "保存"; + btnSave.Enabled = true; + } + + if (btnDelete != null) + { + btnDelete.Enabled = true; + } + } + catch (Exception ex) + { + MessageBox.Show($"加载数据到编辑区失败: {ex.Message}\n\n{ex.StackTrace}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + // ==================== 事件处理 ==================== + + private void btnSave_Click(object sender, EventArgs e) + { + try + { + // 验证报警编码 + if (numAlarmCode.Value < 0) + { + MessageBox.Show("报警编码不能为负数", "验证失败", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + numAlarmCode.Focus(); + return; + } + + // 验证报警内容 + if (string.IsNullOrWhiteSpace(txtAlarmContent.Text)) + { + MessageBox.Show("报警内容不能为空", "验证失败", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + txtAlarmContent.Focus(); + return; + } + + var alarmConfig = CreateAlarmConfigFromFields(); + string errorMessage; + + bool success; + if (selectedAlarmConfig == null) + { + // 新增 + success = dataService.AddAlarmConfig(alarmConfig, out errorMessage); + } + else + { + // 更新 + success = dataService.UpdateAlarmConfig(alarmConfig, out errorMessage); + } + + if (success) + { + MessageBox.Show("保存成功!", "提示", + MessageBoxButtons.OK, MessageBoxIcon.Information); + LoadAlarmConfigs(); + ClearEditFields(); + } + else + { + MessageBox.Show($"保存失败: {errorMessage}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + catch (Exception ex) + { + MessageBox.Show($"保存失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnDelete_Click(object sender, EventArgs e) + { + if (selectedAlarmConfig == null) + { + MessageBox.Show("请先选择要删除的报警配置", "提示", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + var result = MessageBox.Show( + $"确定要删除报警配置 [{selectedAlarmConfig.AlarmCode}] {selectedAlarmConfig.AlarmContent} 吗?", + "确认删除", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question); + + if (result == DialogResult.Yes) + { + if (dataService.DeleteAlarmConfig(selectedAlarmConfig.AlarmId, out string errorMessage)) + { + MessageBox.Show("删除成功!", "提示", + MessageBoxButtons.OK, MessageBoxIcon.Information); + LoadAlarmConfigs(); + ClearEditFields(); + } + else + { + MessageBox.Show($"删除失败: {errorMessage}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void btnCancel_Click(object sender, EventArgs e) + { + ClearEditFields(); + } + + private void btnRefresh_Click(object sender, EventArgs e) + { + dataService.Reload(); + LoadAlarmConfigs(); + } + + private void btnClose_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void dgvAlarmConfigs_CellDoubleClick(object sender, DataGridViewCellEventArgs e) + { + try + { + if (e.RowIndex >= 0 && e.RowIndex < dgvAlarmConfigs.Rows.Count) + { + var row = dgvAlarmConfigs.Rows[e.RowIndex]; + if (row.Cells[0].Value != null) + { + var alarmId = row.Cells[1].Value.ToString(); + var alarmConfig = dataService.GetAlarmConfigAlarmCode(int.Parse(alarmId)); + if (alarmConfig != null) + { + LoadAlarmConfigToFields(alarmConfig); + } + else + { + MessageBox.Show($"未找到报警配置: {alarmId}", "提示", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + } + } + catch (Exception ex) + { + MessageBox.Show($"加载报警配置失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void txtSearch_TextChanged(object sender, EventArgs e) + { + LoadAlarmConfigs(); + } + + private void cmbLevelFilter_SelectedIndexChanged(object sender, EventArgs e) + { + LoadAlarmConfigs(); + } + } +} + diff --git a/StandardScene.Core/Charge/AlarmConfigManagementForm.resx b/StandardScene.Core/Charge/AlarmConfigManagementForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/StandardScene.Core/Charge/AlarmConfigManagementForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/StandardScene.Core/Charge/ChargeStation.cs b/StandardScene.Core/Charge/ChargeStation.cs new file mode 100644 index 0000000..8da1643 --- /dev/null +++ b/StandardScene.Core/Charge/ChargeStation.cs @@ -0,0 +1,429 @@ +using System; +using System.ComponentModel; +using Newtonsoft.Json; + +namespace StandardScene.Charge +{ + /// + /// 充电桩数据模型 + /// + public class ChargeStation + { + /// + /// 充电桩编号(唯一标识) + /// + [DisplayName("编号")] + public string StationId { get; set; } = "1"; + + /// + /// 充电桩名称 + /// + [DisplayName("名称")] + public string Name { get; set; } + + /// + /// 充电桩类型 + /// + [DisplayName("类型")] + public ChargeStationType Type { get; set; } + + /// + /// 充电方式 + /// + [DisplayName("充电方式")] + public ChargeMethodType ChargeMethod { get; set; } + + /// + /// IP地址 + /// + [DisplayName("IP地址")] + public string IpAddress { get; set; } + + /// + /// 端口号 + /// + [DisplayName("端口")] + public int Port { get; set; } + + /// + /// 通讯类型 (UDP/TCP) + /// + [DisplayName("通讯类型")] + public string CommunicationType { get; set; } = "TCP"; + + /// + /// 额定电压 (V) + /// + [DisplayName("电压(V)")] + public double SetVoltage { get; set; } + + /// + /// 额定电流 (A) + /// + [DisplayName("电流(A)")] + public double SetElectricCurrent { get; set; } + + /// + /// 实时电压 (V) - 当前充电时的实际电压 + /// + [DisplayName("实时电压(V)")] + [JsonIgnore] + public double RealTimeVoltage { get; set; } + + /// + /// 实时电流 (A) - 当前充电时的实际电流 + /// + [DisplayName("实时电流(A)")] + [JsonIgnore] + public double RealTimeCurrent { get; set; } + + /// + /// 最后发送数据时间 + /// + [DisplayName("发送时间")] + [JsonIgnore] + public DateTime? LastSendTime { get; set; } + + /// + /// 最后接收数据时间 + /// + [DisplayName("接收时间")] + [JsonIgnore] + public DateTime? LastReceiveTime { get; set; } + + /// + /// 是否有报警 + /// + [DisplayName("报警")] + [JsonIgnore] + public bool HasAlarm { get; set; } + + /// + /// 报警信息 + /// + [DisplayName("报警信息")] + [JsonIgnore] + public string AlarmMessage { get; set; } + + /// + /// 报警级别 + /// + [DisplayName("报警级别")] + public AlarmLevel AlarmLevel { get; set; } + + /// + /// 网络通讯状态 + /// + [DisplayName("通讯状态")] + [JsonIgnore] + public CommunicationStatus CommStatus { get; set; } + + /// + /// 最后通讯成功时间 + /// + + [JsonIgnore] + [DisplayName("最后通讯时间")] + public DateTime? LastCommunicationTime { get; set; } + + /// + /// 机构伸缩状态 + /// + [JsonIgnore] + [DisplayName("机构状态")] + public MechanismStatus MechanismStatus { get; set; } + + [DisplayName("屏蔽机构状态交互")] + public bool ShieldSiteMechanismStatus { get; set; } + + + /// + /// 当前充电车辆编号 + /// + [DisplayName("当前车辆")] + [JsonIgnore] + public string CurrentVehicle { get; set; } + + /// + /// 当前电量百分比 (0-100) + /// + [DisplayName("电量")] + [JsonIgnore] + public double BatteryLevel { get; set; } + + /// + /// 发送充电的状态 + /// + [DisplayName("充电指令状态")] + [JsonIgnore] + public ChargeCommandStatus ChargeCommandStatus { get; set; } + + /// + /// 充电桩状态 + /// + [DisplayName("状态")] + [JsonIgnore] + public ChargeStationStatus Status { get; set; } + + /// + /// 是否启用 + /// + [DisplayName("启用")] + public bool Enabled { get; set; } + + [DisplayName("停靠车辆类型")] + public ChargeStationCarType GroupCarType { get; set; } + + /// + /// 关联的站点ID(可选) + /// + [DisplayName("站点ID")] + public int? SiteId { get; set; } + + /// + /// 备注 + /// + [DisplayName("备注")] + public string Remarks { get; set; } + + /// + /// 创建时间 + /// + [DisplayName("创建时间")] + public DateTime CreatedTime { get; set; } + + /// + /// 最后修改时间 + /// + [DisplayName("修改时间")] + public DateTime ModifiedTime { get; set; } + + /// + /// 计算功率 (W) + /// + [JsonIgnore] + [DisplayName("功率(W)")] + public double Power => SetVoltage * SetElectricCurrent; + + public ChargeStation() + { + StationId = GenerateStationId(); + Type = ChargeStationType.FRLDTall; // 默认FRLD高款充电桩 + ChargeMethod = ChargeMethodType.Ground; // 默认地充 + Status = ChargeStationStatus.Idle; + Enabled = true; + CreatedTime = DateTime.Now; + ModifiedTime = DateTime.Now; + Port = 502; // 默认Modbus TCP端口 + CommunicationType = "UDP"; // 默认UDP通讯 + SetVoltage = 29.2; + SetElectricCurrent = 45.0; + } + + /// + /// 生成充电桩编号 + /// + private static string GenerateStationId() + { + return "1"; + //return $"CS{DateTime.Now:yyyyMMddHHmmss}{new Random().Next(1000, 9999)}"; + } + + /// + /// 验证数据有效性 + /// + public bool IsValid(out string errorMessage) + { + if (string.IsNullOrWhiteSpace(StationId)) + { + errorMessage = "充电桩编号不能为空"; + return false; + } + + if (string.IsNullOrWhiteSpace(Name)) + { + errorMessage = "充电桩名称不能为空"; + return false; + } + + if (string.IsNullOrWhiteSpace(IpAddress)) + { + errorMessage = "IP地址不能为空"; + return false; + } + + // 验证IP格式 + if (!System.Net.IPAddress.TryParse(IpAddress, out _)) + { + errorMessage = "IP地址格式不正确"; + return false; + } + + // 验证端口范围 + if (Port < 1 || Port > 65535) + { + errorMessage = "端口号必须在 1-65535 之间"; + return false; + } + + // 验证电压范围 + if (SetVoltage <= 0 || SetVoltage > 64) + { + errorMessage = "电压必须在 0-64V 之间"; + return false; + } + + // 验证电流范围 + if (SetElectricCurrent <= 0 || SetElectricCurrent > 101) + { + errorMessage = "电流必须在 0-101A 之间"; + return false; + } + + errorMessage = string.Empty; + return true; + } + + public override string ToString() + { + return $"[{StationId}] {Name} ({IpAddress}:{Port}) - {Status}"; + } + } + + /// + /// 充电桩类型枚举 + /// + public enum ChargeStationType + { + [Description("FRLD高款充电桩")] + FRLDTall = 0, + + [Description("FRLD矮款充电桩")] + FRLDShort = 1, + + [Description("牧星充电桩")] + MuXing = 2 + + // 后续可在此处添加其他充电桩类型 + } + + public enum ChargeStationCarType + { + [Description("FRLD充电")] + FRLD = 0, + + [Description("牧星充电桩充电")] + MuXing = 1 + + // 后续可在此处添加其他充电桩类型 + } + /// + /// 充电桩状态枚举 + /// + public enum ChargeStationStatus + { + [Description("空闲")] + Idle = 0, + + [Description("充电中")] + Charging = 1, + + [Description("报警中")] + Fault = 2, + + [Description("AGV电池已接入")] + Battery = 3 + } + + /// + /// 报警级别枚举 + /// + public enum AlarmLevel + { + [Description("无")] + None = 0, + + [Description("低")] + Low = 1, + + [Description("中")] + Medium = 2, + + [Description("高")] + High = 3, + + [Description("严重")] + Critical = 4 + } + + /// + /// 机构伸缩状态枚举 + /// + public enum MechanismStatus + { + [Description("伸出")] + Extended = 1, + + [Description("缩回")] + Retracted = 2, + + [Description("运动中")] + Extending = 3, + + } + + /// + /// 网络通讯状态枚举 + /// + public enum CommunicationStatus + { + [Description("未知")] + Unknown = 0, + + [Description("正常")] + Normal = 1, + + [Description("延迟")] + Delayed = 2, + + [Description("超时")] + Timeout = 3, + + [Description("断开")] + Disconnected = 4, + + [Description("错误")] + Error = 5 + } + + /// + /// 充电指令状态枚举 + /// + public enum ChargeCommandStatus + { + [Description("停止")] + Stopped = 0, + + [Description("启动")] + Started = 1 + } + + + /// + /// 充电方式枚举 + /// + public enum ChargeMethodType + { + [Description("地充")] + Ground = 0, + + [Description("尾充")] + Rear = 1, + + [Description("侧充")] + Side = 2 + } +} + + + diff --git a/StandardScene.Core/Charge/ChargeStationDataService.cs b/StandardScene.Core/Charge/ChargeStationDataService.cs new file mode 100644 index 0000000..45e418f --- /dev/null +++ b/StandardScene.Core/Charge/ChargeStationDataService.cs @@ -0,0 +1,386 @@ +using DocumentFormat.OpenXml.Bibliography; +using Newtonsoft.Json; +using SimpleCore; +using SimpleCore.Library; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace StandardScene.Charge +{ + /// + /// 充电桩数据服务 - 负责数据的持久化和管理 + /// + public class ChargeStationDataService + { + private static ChargeStationDataService _instance; + private static readonly object lockObj = new object(); + + private List chargeStations; + private readonly string dataFilePath; + + // 单例模式 + public static ChargeStationDataService Instance + { + get + { + if (_instance == null) + { + lock (lockObj) + { + if (_instance == null) + { + _instance = new ChargeStationDataService(); + } + } + } + return _instance; + } + } + + private ChargeStationDataService() + { + // 数据文件路径:项目根目录/Config/ChargeStations.json + var dataDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config"); + if (!Directory.Exists(dataDir)) + { + Directory.CreateDirectory(dataDir); + } + + dataFilePath = Path.Combine(dataDir, "ChargeStations.json"); + chargeStations = new List(); + + LoadData(); + } + + /// + /// 加载数据 + /// + private void LoadData() + { + try + { + if (File.Exists(dataFilePath)) + { + var json = File.ReadAllText(dataFilePath); + chargeStations = JsonConvert.DeserializeObject>(json) + ?? new List(); + Diagnosis.Log($"加载充电桩数据成功,共 {chargeStations.Count} 条记录", "ChargeStation"); + } + else + { + chargeStations = new List(); + Diagnosis.Log("充电桩数据文件不存在,已创建新列表", "ChargeStation"); + } + } + catch (Exception ex) + { + Diagnosis.Log($"加载充电桩数据失败: {ExceptionFormatter.FormatEx(ex)}", "ChargeStation", true); + chargeStations = new List(); + } + } + + /// + /// 保存数据 + /// + private bool SaveData() + { + try + { + lock (lockObj) + { + var json = JsonConvert.SerializeObject(chargeStations, Formatting.Indented); + File.WriteAllText(dataFilePath, json); + //Diagnosis.Log($"保存充电桩数据成功,共 {chargeStations.Count} 条记录", "ChargeStation"); + return true; + } + } + catch (Exception ex) + { + Diagnosis.Log($"保存充电桩数据失败: {ExceptionFormatter.FormatEx(ex)}", "ChargeStation", true); + return false; + } + } + + /// + /// 获取所有充电桩 + /// + public List GetAllStations() + { + lock (lockObj) + { + return new List(chargeStations); + } + } + + /// + /// 根据编号获取充电桩 + /// + public ChargeStation GetStationById(string stationId) + { + lock (lockObj) + { + return chargeStations.FirstOrDefault(s => s.StationId == stationId); + } + } + + /// + /// 根据IP地址获取充电桩 + /// + public ChargeStation GetStationByIp(string ipAddress, int port) + { + lock (lockObj) + { + return chargeStations.FirstOrDefault(s => s.IpAddress == ipAddress && s.Port == port); + } + } + public ChargeStation GetStationByIp(string ipAddress) + { + lock (lockObj) + { + return chargeStations.FirstOrDefault(s => s.IpAddress == ipAddress); + } + } + + /// + /// 添加充电桩 + /// + public bool AddStation(ChargeStation station, out string errorMessage) + { + if (station == null) + { + errorMessage = "充电桩数据不能为空"; + return false; + } + + // 验证数据 + if (!station.IsValid(out errorMessage)) + { + return false; + } + + lock (lockObj) + { + // 检查编号是否已存在 + if (chargeStations.Any(s => s.StationId == station.StationId)) + { + errorMessage = $"充电桩编号 {station.StationId} 已存在"; + return false; + } + + // 检查IP和端口是否已被使用 + if (chargeStations.Any(s => s.IpAddress == station.IpAddress && s.Port == station.Port)) + { + errorMessage = $"IP地址 {station.IpAddress}:{station.Port} 已被使用"; + return false; + } + if (chargeStations.Any(s => s.SiteId == station.SiteId)) + { + errorMessage = $"SiteID {station.SiteId} 已被使用"; + return false; + } + + station.CreatedTime = DateTime.Now; + station.ModifiedTime = DateTime.Now; + + chargeStations.Add(station); + + if (SaveData()) + { + Diagnosis.Log($"添加充电桩成功: {station}", "ChargeStation", true); + errorMessage = string.Empty; + return true; + } + else + { + chargeStations.Remove(station); + errorMessage = "保存数据失败"; + return false; + } + } + } + + /// + /// 更新充电桩 + /// + public bool UpdateStation(ChargeStation station, out string errorMessage, bool isSave = false) + { + if (station == null) + { + errorMessage = "充电桩数据不能为空"; + return false; + } + + // 验证数据 + if (!station.IsValid(out errorMessage)) + { + return false; + } + + lock (lockObj) + { + var existingStation = chargeStations.FirstOrDefault(s => s.StationId == station.StationId); + if (existingStation == null) + { + errorMessage = $"充电桩编号 {station.StationId} 不存在"; + return false; + } + + // 检查IP和端口是否与其他充电桩冲突 + if (chargeStations.Any(s => s.StationId != station.StationId && + s.IpAddress == station.IpAddress && + s.Port == station.Port)) + { + errorMessage = $"IP地址 {station.IpAddress}:{station.Port} 已被其他充电桩使用"; + return false; + } + if (chargeStations.Any(s => s.StationId != station.StationId && s.SiteId == station.SiteId)) + { + errorMessage = $"SiteID {station.SiteId} 已被使用"; + return false; + } + + // 保留创建时间 + station.CreatedTime = existingStation.CreatedTime; + station.ModifiedTime = DateTime.Now; + + var index = chargeStations.IndexOf(existingStation); + + //进行赋值 + if (isSave) + { + + existingStation.StationId = station.StationId; + existingStation.Name = station.Name; + existingStation.Type = station.Type; + existingStation.ChargeMethod = station.ChargeMethod; + existingStation.IpAddress = station.IpAddress; + existingStation.Port = station.Port; + existingStation.SetVoltage = station.SetVoltage; + existingStation.SetElectricCurrent = station.SetElectricCurrent; + existingStation.Enabled = station.Enabled; + existingStation.ShieldSiteMechanismStatus = station.ShieldSiteMechanismStatus; + existingStation.GroupCarType = station.GroupCarType; + existingStation.SiteId = station.SiteId; + existingStation.Remarks = station.Remarks; + station = existingStation; + station.ModifiedTime = DateTime.Now; + + + + } + + + + chargeStations[index] = station; + + if (SaveData()) + { + //Diagnosis.Log($"更新充电桩成功: {station}", "ChargeStation", true); + errorMessage = string.Empty; + return true; + } + else + { + chargeStations[index] = existingStation; + errorMessage = "保存数据失败"; + return false; + } + } + } + + /// + /// 删除充电桩 + /// + public bool DeleteStation(string stationId, out string errorMessage) + { + lock (lockObj) + { + var station = chargeStations.FirstOrDefault(s => s.StationId == stationId); + if (station == null) + { + errorMessage = $"充电桩编号 {stationId} 不存在"; + return false; + } + + // 检查是否正在充电 + //if (station.Status == ChargeStationStatus.Charging) + //{ + // errorMessage = $"充电桩 {station.Name} 正在充电中,无法删除"; + // return false; + //} + + chargeStations.Remove(station); + + if (SaveData()) + { + Diagnosis.Log($"删除充电桩成功: {station}", "ChargeStation", true); + errorMessage = string.Empty; + return true; + } + else + { + chargeStations.Add(station); + errorMessage = "保存数据失败"; + return false; + } + } + } + + /// + /// 更新充电桩状态 + /// + public bool UpdateStationStatus(string stationId, ChargeStationStatus status) + { + lock (lockObj) + { + var station = chargeStations.FirstOrDefault(s => s.StationId == stationId); + if (station == null) + { + return false; + } + + station.Status = status; + station.ModifiedTime = DateTime.Now; + + return SaveData(); + } + } + + /// + /// 获取空闲的充电桩 + /// + public List GetIdleStations() + { + lock (lockObj) + { + return chargeStations + .Where(s => s.Enabled && s.Status == ChargeStationStatus.Idle) + .ToList(); + } + } + + /// + /// 获取充电中的充电桩数量 + /// + public int GetChargingCount() + { + lock (lockObj) + { + return chargeStations.Count(s => s.Status == ChargeStationStatus.Charging); + } + } + + /// + /// 重新加载数据 + /// + public void Reload() + { + LoadData(); + } + } +} + + + diff --git a/StandardScene.Core/Charge/ChargeStationHelper.cs b/StandardScene.Core/Charge/ChargeStationHelper.cs new file mode 100644 index 0000000..1d91eb4 --- /dev/null +++ b/StandardScene.Core/Charge/ChargeStationHelper.cs @@ -0,0 +1,448 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; +using SimpleCore; +using SimpleCore.Library; + +namespace StandardScene.Charge +{ + /// + /// 充电桩管理辅助类 + /// 提供简化的静态方法用于快速访问充电桩功能 + /// + public static class ChargeStationHelper + { + private static ChargeStationManagementForm _managementForm; + + /// + /// 打开充电桩管理窗口(单例模式) + /// + public static void OpenManagementWindow() + { + if (_managementForm == null || _managementForm.IsDisposed) + { + _managementForm = new ChargeStationManagementForm(); + _managementForm.FormClosed += (s, e) => _managementForm = null; + _managementForm.Show(); + } + else + { + _managementForm.BringToFront(); + _managementForm.Activate(); + } + } + + /// + /// 打开充电桩管理窗口(对话框模式) + /// + public static DialogResult OpenManagementDialog() + { + using (var form = new ChargeStationManagementForm()) + { + return form.ShowDialog(); + } + } + + /// + /// 获取指定站点的充电桩 + /// + /// 站点ID + /// 充电桩对象,如果不存在则返回null + public static ChargeStation GetStationBySiteId(int siteId) + { + var dataService = ChargeStationDataService.Instance; + return dataService.GetAllStations() + .FirstOrDefault(s => s.SiteId == siteId); + } + + /// + /// 获取指定IP的充电桩 + /// + /// IP地址 + /// 充电桩对象,如果不存在则返回null + public static ChargeStation GetStationByIp(string ipAddress) + { + var dataService = ChargeStationDataService.Instance; + return dataService.GetAllStations() + .FirstOrDefault(s => s.IpAddress == ipAddress); + } + + /// + /// 获取所有充电桩配置 + /// + /// 所有充电桩配置列表 + public static List GetAllStationConfigs() + { + var dataService = ChargeStationDataService.Instance; + return dataService.GetAllStations(); + } + + /// + /// 获取当前充电策略配置 + /// + /// 充电策略配置对象 + public static ChargeStrategyConfig GetChargeStrategyConfig() + { + var configService = ChargeStrategyConfigService.Instance; + return configService.LoadConfig(); + } + + /// + /// 保存充电策略配置 + /// + /// 充电策略配置对象 + public static void SaveChargeStrategyConfig(ChargeStrategyConfig config) + { + var configService = ChargeStrategyConfigService.Instance; + configService.SaveConfig(config); + } + + /// + /// 检查指定站点是否有可用的充电桩 + /// + /// 站点ID + /// true表示有可用充电桩,false表示没有 + public static bool IsSiteHasAvailableChargeStation(int siteId) + { + var station = GetStationBySiteId(siteId); + return station != null && + station.Enabled && + station.Status == ChargeStationStatus.Idle; + } + + /// + /// 标记充电桩开始充电 + /// + /// 充电桩编号 + /// 车辆ID + /// 成功返回true,失败返回false + public static bool StartCharging(string stationId, int carId) + { + try + { + var dataService = ChargeStationDataService.Instance; + var station = dataService.GetStationById(stationId); + + if (station == null) + { + Diagnosis.Log($"充电桩 {stationId} 不存在", "ChargeStation", true); + return false; + } + + if (station.Status == ChargeStationStatus.Charging) + { + Diagnosis.Log($"充电桩 {station.Name} 已经在充电中", "ChargeStation", true); + return false; + } + + bool success = dataService.UpdateStationStatus(stationId, ChargeStationStatus.Charging); + + if (success) + { + Diagnosis.Log($"车辆 {carId} 开始在充电桩 {station.Name} 充电", "ChargeStation", true); + } + + return success; + } + catch (Exception ex) + { + Diagnosis.Log($"启动充电失败: {ExceptionFormatter.FormatEx(ex)}", "ChargeStation", true); + return false; + } + } + + /// + /// 标记充电桩停止充电 + /// + /// 充电桩编号 + /// 车辆ID + /// 成功返回true,失败返回false + public static bool StopCharging(string stationId, int carId) + { + try + { + var dataService = ChargeStationDataService.Instance; + var station = dataService.GetStationById(stationId); + + if (station == null) + { + Diagnosis.Log($"充电桩 {stationId} 不存在", "ChargeStation", true); + return false; + } + + bool success = dataService.UpdateStationStatus(stationId, ChargeStationStatus.Idle); + + if (success) + { + Diagnosis.Log($"车辆 {carId} 在充电桩 {station.Name} 充电完成", "ChargeStation", true); + } + + return success; + } + catch (Exception ex) + { + Diagnosis.Log($"停止充电失败: {ExceptionFormatter.FormatEx(ex)}", "ChargeStation", true); + return false; + } + } + + /// + /// 标记充电桩为故障状态 + /// + /// 充电桩编号 + /// 故障原因 + /// 成功返回true,失败返回false + public static bool MarkAsFault(string stationId, string reason = "") + { + try + { + var dataService = ChargeStationDataService.Instance; + bool success = dataService.UpdateStationStatus(stationId, ChargeStationStatus.Fault); + + if (success) + { + var station = dataService.GetStationById(stationId); + var message = string.IsNullOrEmpty(reason) + ? $"充电桩 {station.Name} 标记为故障" + : $"充电桩 {station.Name} 标记为故障: {reason}"; + + Diagnosis.Log(message, "ChargeStation", true); + } + + return success; + } + catch (Exception ex) + { + Diagnosis.Log($"标记故障失败: {ExceptionFormatter.FormatEx(ex)}", "ChargeStation", true); + return false; + } + } + + /// + /// 获取充电桩状态摘要信息 + /// + /// 格式化的状态字符串 + public static string GetStatusSummary() + { + var dataService = ChargeStationDataService.Instance; + var stations = dataService.GetAllStations(); + + var total = stations.Count; + var idle = stations.Count(s => s.Status == ChargeStationStatus.Idle && s.Enabled); + var charging = stations.Count(s => s.Status == ChargeStationStatus.Charging); + var fault = stations.Count(s => s.Status == ChargeStationStatus.Fault); + var offline = stations.Count(s => s.Status == ChargeStationStatus.Battery); + + return $"总数:{total} | 空闲:{idle} | 充电中:{charging} | 故障:{fault} | 离线:{offline}"; + } + + /// + /// 获取最近的空闲充电桩(基于站点ID) + /// + /// 当前站点ID + /// 最近的充电桩,如果没有则返回null + public static ChargeStation FindNearestIdleStation(int currentSiteId) + { + var dataService = ChargeStationDataService.Instance; + var idleStations = dataService.GetIdleStations(); + + if (idleStations.Count == 0) + return null; + + // 优先选择同站点的充电桩 + var sameStation = idleStations.FirstOrDefault(s => s.SiteId == currentSiteId); + if (sameStation != null) + return sameStation; + + // 否则选择第一个可用的 + return idleStations[0]; + } + + /// + /// 快速创建测试充电桩(用于测试) + /// + /// 名称 + /// IP地址 + /// 站点ID + /// 创建成功返回true + public static bool QuickAddStation(string name, string ip, int? siteId = null) + { + var dataService = ChargeStationDataService.Instance; + + var station = new ChargeStation + { + Name = name, + IpAddress = ip, + Port = 502, + SetVoltage = 220.0, + SetElectricCurrent = 32.0, + Status = ChargeStationStatus.Idle, + Enabled = true, + SiteId = siteId, + Remarks = $"快速创建于 {DateTime.Now}" + }; + + bool success = dataService.AddStation(station, out string errorMsg); + + if (success) + { + Diagnosis.Log($"快速创建充电桩: {name}", "ChargeStation", true); + } + else + { + Diagnosis.Log($"快速创建充电桩失败: {errorMsg}", "ChargeStation", true); + } + + return success; + } + + /// + /// 显示充电桩选择对话框 + /// + /// 按状态过滤(null表示显示全部) + /// 选中的充电桩,取消则返回null + public static ChargeStation ShowStationSelectionDialog(ChargeStationStatus? filterByStatus = null) + { + var dataService = ChargeStationDataService.Instance; + var stations = dataService.GetAllStations(); + + if (filterByStatus.HasValue) + { + stations = stations.Where(s => s.Status == filterByStatus.Value).ToList(); + } + + if (stations.Count == 0) + { + MessageBox.Show("没有符合条件的充电桩", "提示", + MessageBoxButtons.OK, MessageBoxIcon.Information); + return null; + } + + // 创建简单的选择对话框 + using (var dialog = new Form()) + { + dialog.Text = "选择充电桩"; + dialog.Size = new System.Drawing.Size(500, 400); + dialog.StartPosition = FormStartPosition.CenterParent; + + var listBox = new ListBox + { + Dock = DockStyle.Fill, + Font = new System.Drawing.Font("微软雅黑", 10F) + }; + + foreach (var station in stations) + { + listBox.Items.Add($"[{station.StationId}] {station.Name} - {station.IpAddress}:{station.Port} - {GetStatusText(station.Status)}"); + } + + var btnOK = new Button + { + Text = "确定", + DialogResult = DialogResult.OK, + Dock = DockStyle.Bottom, + Height = 40 + }; + + dialog.Controls.Add(listBox); + dialog.Controls.Add(btnOK); + dialog.AcceptButton = btnOK; + + if (dialog.ShowDialog() == DialogResult.OK && listBox.SelectedIndex >= 0) + { + return stations[listBox.SelectedIndex]; + } + + return null; + } + } + + /// + /// 获取状态文本 + /// + private static string GetStatusText(ChargeStationStatus status) + { + switch (status) + { + case ChargeStationStatus.Idle: return "空闲"; + case ChargeStationStatus.Charging: return "充电中"; + case ChargeStationStatus.Fault: return "故障"; + case ChargeStationStatus.Battery: return "离线"; + default: return "未知"; + } + } + + /// + /// 批量更新充电桩在线状态(用于定期监控) + /// + /// 超时时间(毫秒) + /// 更新的充电桩数量 + public static int UpdateOnlineStatus(int timeout = 3000) + { + var dataService = ChargeStationDataService.Instance; + var stations = dataService.GetAllStations().Where(s => s.Enabled).ToList(); + int updatedCount = 0; + + foreach (var station in stations) + { + try + { + // 这里应该实际ping充电桩,此处仅演示 + bool isOnline = PingStation(station.IpAddress, station.Port, timeout); + + var expectedStatus = isOnline + ? (station.Status == ChargeStationStatus.Battery ? ChargeStationStatus.Idle : station.Status) + : ChargeStationStatus.Battery; + + if (station.Status != expectedStatus && + (station.Status == ChargeStationStatus.Battery || expectedStatus == ChargeStationStatus.Battery)) + { + if (dataService.UpdateStationStatus(station.StationId, expectedStatus)) + { + updatedCount++; + Diagnosis.Log($"充电桩 {station.Name} 状态更新为: {GetStatusText(expectedStatus)}", + "ChargeStation", true); + } + } + } + catch (Exception ex) + { + Diagnosis.Log($"检查充电桩 {station.Name} 在线状态失败: {ex.Message}", + "ChargeStation"); + } + } + + return updatedCount; + } + + /// + /// Ping 充电桩(检查连通性) + /// + private static bool PingStation(string ip, int port, int timeout) + { + try + { + using (var client = new System.Net.Sockets.TcpClient()) + { + var result = client.BeginConnect(ip, port, null, null); + var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromMilliseconds(timeout)); + + if (success) + { + client.EndConnect(result); + return true; + } + return false; + } + } + catch + { + return false; + } + } + } +} + + + diff --git a/StandardScene.Core/Charge/ChargeStationManagementForm.Designer.cs b/StandardScene.Core/Charge/ChargeStationManagementForm.Designer.cs new file mode 100644 index 0000000..0e77df8 --- /dev/null +++ b/StandardScene.Core/Charge/ChargeStationManagementForm.Designer.cs @@ -0,0 +1,1335 @@ +namespace StandardScene.Charge +{ + partial class ChargeStationManagementForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle19 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle13 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle14 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle16 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle17 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle18 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.pnlList = new System.Windows.Forms.Panel(); + this.dgvStations = new System.Windows.Forms.DataGridView(); + this.pnlListButtons = new System.Windows.Forms.Panel(); + this.lblStatistics = new System.Windows.Forms.Label(); + this.btnStrategyConfig = new System.Windows.Forms.Button(); + this.btnCommMonitor = new System.Windows.Forms.Button(); + this.btnAlarmConfig = new System.Windows.Forms.Button(); + this.btnExport = new System.Windows.Forms.Button(); + this.btnRefresh = new System.Windows.Forms.Button(); + this.pnlSearch = new System.Windows.Forms.Panel(); + this.cmbStatusFilter = new System.Windows.Forms.ComboBox(); + this.lblStatusFilter = new System.Windows.Forms.Label(); + this.txtSearch = new System.Windows.Forms.TextBox(); + this.lblSearch = new System.Windows.Forms.Label(); + this.pnlEdit = new System.Windows.Forms.Panel(); + this.grpRealTimeInfo = new System.Windows.Forms.GroupBox(); + this.lblAlarmValue = new System.Windows.Forms.Label(); + this.lblAlarm = new System.Windows.Forms.Label(); + this.lblMechanismStatusValue = new System.Windows.Forms.Label(); + this.lblMechanismStatus = new System.Windows.Forms.Label(); + this.lblChargeCommandStatusValue = new System.Windows.Forms.Label(); + this.lblChargeCommandStatus = new System.Windows.Forms.Label(); + this.lblCommStatusValue = new System.Windows.Forms.Label(); + this.lblCommStatus = new System.Windows.Forms.Label(); + this.lblRealTimeCurrentValue = new System.Windows.Forms.Label(); + this.lblRealTimeCurrent = new System.Windows.Forms.Label(); + this.lblRealTimeVoltageValue = new System.Windows.Forms.Label(); + this.lblRealTimeVoltage = new System.Windows.Forms.Label(); + this.lblBatteryLevelValue = new System.Windows.Forms.Label(); + this.lblBatteryLevel = new System.Windows.Forms.Label(); + this.lblCurrentVehicleValue = new System.Windows.Forms.Label(); + this.lblCurrentVehicle = new System.Windows.Forms.Label(); + this.grpEditInfo = new System.Windows.Forms.GroupBox(); + this.chargeCarType = new System.Windows.Forms.ComboBox(); + this.label1 = new System.Windows.Forms.Label(); + this.txtRemarks = new System.Windows.Forms.TextBox(); + this.lblRemarks = new System.Windows.Forms.Label(); + this.numSiteId = new System.Windows.Forms.NumericUpDown(); + this.lblSiteId = new System.Windows.Forms.Label(); + this.chkEnabled = new System.Windows.Forms.CheckBox(); + this.chkShieldSiteMechanismStatus = new System.Windows.Forms.CheckBox(); + this.numCurrent = new System.Windows.Forms.NumericUpDown(); + this.lblCurrent = new System.Windows.Forms.Label(); + this.numVoltage = new System.Windows.Forms.NumericUpDown(); + this.lblVoltage = new System.Windows.Forms.Label(); + this.numPort = new System.Windows.Forms.NumericUpDown(); + this.lblPort = new System.Windows.Forms.Label(); + this.txtIpAddress = new System.Windows.Forms.TextBox(); + this.lblIpAddress = new System.Windows.Forms.Label(); + this.cmbChargeMethod = new System.Windows.Forms.ComboBox(); + this.lblChargeMethod = new System.Windows.Forms.Label(); + this.cmbType = new System.Windows.Forms.ComboBox(); + this.lblType = new System.Windows.Forms.Label(); + this.txtName = new System.Windows.Forms.TextBox(); + this.lblName = new System.Windows.Forms.Label(); + this.txtStationId = new System.Windows.Forms.TextBox(); + this.lblStationId = new System.Windows.Forms.Label(); + this.pnlEditButtons = new System.Windows.Forms.Panel(); + this.btnCancel = new System.Windows.Forms.Button(); + this.btnDelete = new System.Windows.Forms.Button(); + this.btnSave = new System.Windows.Forms.Button(); + this.colStationId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colType = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colChargeMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colSiteId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLastSendTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLastReceiveTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCommStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colChargeCommandStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colMechanismStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colCurrentVehicle = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colBatteryLevel = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAlarm = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colRealTimeVoltage = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colRealTimeCurrent = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colEnabled = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + this.pnlList.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvStations)).BeginInit(); + this.pnlListButtons.SuspendLayout(); + this.pnlSearch.SuspendLayout(); + this.pnlEdit.SuspendLayout(); + this.grpRealTimeInfo.SuspendLayout(); + this.grpEditInfo.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numSiteId)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numCurrent)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numVoltage)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numPort)).BeginInit(); + this.pnlEditButtons.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer + // + this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer.Location = new System.Drawing.Point(0, 0); + this.splitContainer.Margin = new System.Windows.Forms.Padding(4); + this.splitContainer.Name = "splitContainer"; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.pnlList); + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.pnlEdit); + this.splitContainer.Size = new System.Drawing.Size(1731, 875); + this.splitContainer.SplitterDistance = 1081; + this.splitContainer.SplitterWidth = 5; + this.splitContainer.TabIndex = 0; + // + // pnlList + // + this.pnlList.Controls.Add(this.dgvStations); + this.pnlList.Controls.Add(this.pnlListButtons); + this.pnlList.Controls.Add(this.pnlSearch); + this.pnlList.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlList.Location = new System.Drawing.Point(0, 0); + this.pnlList.Margin = new System.Windows.Forms.Padding(4); + this.pnlList.Name = "pnlList"; + this.pnlList.Size = new System.Drawing.Size(1081, 875); + this.pnlList.TabIndex = 0; + // + // dgvStations + // + this.dgvStations.AllowUserToAddRows = false; + this.dgvStations.AllowUserToDeleteRows = false; + this.dgvStations.AllowUserToResizeRows = false; + this.dgvStations.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.dgvStations.BackgroundColor = System.Drawing.Color.White; + this.dgvStations.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.dgvStations.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.SingleHorizontal; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(81)))), ((int)(((byte)(181))))); + dataGridViewCellStyle1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle1.ForeColor = System.Drawing.Color.White; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(81)))), ((int)(((byte)(181))))); + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvStations.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.dgvStations.ColumnHeadersHeight = 100; + this.dgvStations.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.dgvStations.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colStationId, + this.colName, + this.colType, + this.colChargeMethod, + this.colSiteId, + this.colLastSendTime, + this.colLastReceiveTime, + this.colCommStatus, + this.colChargeCommandStatus, + this.colMechanismStatus, + this.colCurrentVehicle, + this.colBatteryLevel, + this.colAlarm, + this.colRealTimeVoltage, + this.colRealTimeCurrent, + this.colStatus, + this.colEnabled}); + dataGridViewCellStyle19.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle19.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle19.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle19.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + dataGridViewCellStyle19.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(202)))), ((int)(((byte)(233))))); + dataGridViewCellStyle19.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(33)))), ((int)(((byte)(33))))); + dataGridViewCellStyle19.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvStations.DefaultCellStyle = dataGridViewCellStyle19; + this.dgvStations.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvStations.EnableHeadersVisualStyles = false; + this.dgvStations.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.dgvStations.Location = new System.Drawing.Point(0, 62); + this.dgvStations.Margin = new System.Windows.Forms.Padding(4); + this.dgvStations.MultiSelect = false; + this.dgvStations.Name = "dgvStations"; + this.dgvStations.ReadOnly = true; + this.dgvStations.RowHeadersVisible = false; + this.dgvStations.RowHeadersWidth = 30; + this.dgvStations.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; + this.dgvStations.RowTemplate.Height = 35; + this.dgvStations.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dgvStations.Size = new System.Drawing.Size(1081, 725); + this.dgvStations.TabIndex = 2; + this.dgvStations.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvStations_CellDoubleClick); + // + // pnlListButtons + // + this.pnlListButtons.Controls.Add(this.lblStatistics); + this.pnlListButtons.Controls.Add(this.btnStrategyConfig); + this.pnlListButtons.Controls.Add(this.btnCommMonitor); + this.pnlListButtons.Controls.Add(this.btnAlarmConfig); + this.pnlListButtons.Controls.Add(this.btnExport); + this.pnlListButtons.Controls.Add(this.btnRefresh); + this.pnlListButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.pnlListButtons.Location = new System.Drawing.Point(0, 749); + this.pnlListButtons.Margin = new System.Windows.Forms.Padding(4); + this.pnlListButtons.Name = "pnlListButtons"; + this.pnlListButtons.Padding = new System.Windows.Forms.Padding(13, 12, 13, 12); + this.pnlListButtons.Size = new System.Drawing.Size(1081, 126); + this.pnlListButtons.TabIndex = 1; + // + // lblStatistics + // + this.lblStatistics.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lblStatistics.AutoSize = false; + this.lblStatistics.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblStatistics.Location = new System.Drawing.Point(20, 12); + this.lblStatistics.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblStatistics.Name = "lblStatistics"; + this.lblStatistics.Size = new System.Drawing.Size(1034, 24); + this.lblStatistics.TabIndex = 2; + this.lblStatistics.Text = "总数: 0 | 空闲: 0 | 充电中: 0 | 故障: 0"; + // + // btnStrategyConfig + // + this.btnStrategyConfig.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnStrategyConfig.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(175)))), ((int)(((byte)(80))))); + this.btnStrategyConfig.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnStrategyConfig.ForeColor = System.Drawing.Color.White; + this.btnStrategyConfig.Location = new System.Drawing.Point(411, 52); + this.btnStrategyConfig.Margin = new System.Windows.Forms.Padding(4); + this.btnStrategyConfig.Name = "btnStrategyConfig"; + this.btnStrategyConfig.Size = new System.Drawing.Size(120, 50); + this.btnStrategyConfig.TabIndex = 5; + this.btnStrategyConfig.Text = "策略配置"; + this.btnStrategyConfig.UseVisualStyleBackColor = false; + this.btnStrategyConfig.Click += new System.EventHandler(this.btnStrategyConfig_Click); + // + // btnCommMonitor + // + this.btnCommMonitor.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnCommMonitor.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(150)))), ((int)(((byte)(243))))); + this.btnCommMonitor.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCommMonitor.ForeColor = System.Drawing.Color.White; + this.btnCommMonitor.Location = new System.Drawing.Point(541, 52); + this.btnCommMonitor.Margin = new System.Windows.Forms.Padding(4); + this.btnCommMonitor.Name = "btnCommMonitor"; + this.btnCommMonitor.Size = new System.Drawing.Size(120, 50); + this.btnCommMonitor.TabIndex = 4; + this.btnCommMonitor.Text = "通讯监控"; + this.btnCommMonitor.UseVisualStyleBackColor = false; + this.btnCommMonitor.Click += new System.EventHandler(this.btnCommMonitor_Click); + // + // btnAlarmConfig + // + this.btnAlarmConfig.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnAlarmConfig.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(193)))), ((int)(((byte)(7))))); + this.btnAlarmConfig.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAlarmConfig.ForeColor = System.Drawing.Color.White; + this.btnAlarmConfig.Location = new System.Drawing.Point(671, 52); + this.btnAlarmConfig.Margin = new System.Windows.Forms.Padding(4); + this.btnAlarmConfig.Name = "btnAlarmConfig"; + this.btnAlarmConfig.Size = new System.Drawing.Size(120, 50); + this.btnAlarmConfig.TabIndex = 3; + this.btnAlarmConfig.Text = "报警配置"; + this.btnAlarmConfig.UseVisualStyleBackColor = false; + this.btnAlarmConfig.Click += new System.EventHandler(this.btnAlarmConfig_Click); + // + // btnExport + // + this.btnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnExport.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnExport.Location = new System.Drawing.Point(934, 52); + this.btnExport.Margin = new System.Windows.Forms.Padding(4); + this.btnExport.Name = "btnExport"; + this.btnExport.Size = new System.Drawing.Size(120, 50); + this.btnExport.TabIndex = 1; + this.btnExport.Text = "导出"; + this.btnExport.UseVisualStyleBackColor = true; + this.btnExport.Click += new System.EventHandler(this.btnExport_Click); + // + // btnRefresh + // + this.btnRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnRefresh.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefresh.Location = new System.Drawing.Point(801, 52); + this.btnRefresh.Margin = new System.Windows.Forms.Padding(4); + this.btnRefresh.Name = "btnRefresh"; + this.btnRefresh.Size = new System.Drawing.Size(120, 50); + this.btnRefresh.TabIndex = 0; + this.btnRefresh.Text = "刷新"; + this.btnRefresh.UseVisualStyleBackColor = true; + this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click); + // + // pnlSearch + // + this.pnlSearch.Controls.Add(this.cmbStatusFilter); + this.pnlSearch.Controls.Add(this.lblStatusFilter); + this.pnlSearch.Controls.Add(this.txtSearch); + this.pnlSearch.Controls.Add(this.lblSearch); + this.pnlSearch.Dock = System.Windows.Forms.DockStyle.Top; + this.pnlSearch.Location = new System.Drawing.Point(0, 0); + this.pnlSearch.Margin = new System.Windows.Forms.Padding(4); + this.pnlSearch.Name = "pnlSearch"; + this.pnlSearch.Padding = new System.Windows.Forms.Padding(13, 12, 13, 12); + this.pnlSearch.Size = new System.Drawing.Size(1081, 62); + this.pnlSearch.TabIndex = 0; + // + // cmbStatusFilter + // + this.cmbStatusFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbStatusFilter.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbStatusFilter.FormattingEnabled = true; + this.cmbStatusFilter.Location = new System.Drawing.Point(680, 16); + this.cmbStatusFilter.Margin = new System.Windows.Forms.Padding(4); + this.cmbStatusFilter.Name = "cmbStatusFilter"; + this.cmbStatusFilter.Size = new System.Drawing.Size(199, 31); + this.cmbStatusFilter.TabIndex = 3; + this.cmbStatusFilter.SelectedIndexChanged += new System.EventHandler(this.cmbStatusFilter_SelectedIndexChanged); + // + // lblStatusFilter + // + this.lblStatusFilter.AutoSize = true; + this.lblStatusFilter.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblStatusFilter.Location = new System.Drawing.Point(593, 21); + this.lblStatusFilter.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblStatusFilter.Name = "lblStatusFilter"; + this.lblStatusFilter.Size = new System.Drawing.Size(61, 23); + this.lblStatusFilter.TabIndex = 2; + this.lblStatusFilter.Text = "状态:"; + // + // txtSearch + // + this.txtSearch.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtSearch.Location = new System.Drawing.Point(100, 16); + this.txtSearch.Margin = new System.Windows.Forms.Padding(4); + this.txtSearch.Name = "txtSearch"; + this.txtSearch.Size = new System.Drawing.Size(399, 29); + this.txtSearch.TabIndex = 1; + this.txtSearch.TextChanged += new System.EventHandler(this.txtSearch_TextChanged); + // + // lblSearch + // + this.lblSearch.AutoSize = true; + this.lblSearch.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblSearch.Location = new System.Drawing.Point(13, 21); + this.lblSearch.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblSearch.Name = "lblSearch"; + this.lblSearch.Size = new System.Drawing.Size(61, 23); + this.lblSearch.TabIndex = 0; + this.lblSearch.Text = "搜索:"; + // + // pnlEdit + // + this.pnlEdit.Controls.Add(this.grpRealTimeInfo); + this.pnlEdit.Controls.Add(this.grpEditInfo); + this.pnlEdit.Controls.Add(this.pnlEditButtons); + this.pnlEdit.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlEdit.Location = new System.Drawing.Point(0, 0); + this.pnlEdit.Margin = new System.Windows.Forms.Padding(4); + this.pnlEdit.Name = "pnlEdit"; + this.pnlEdit.Size = new System.Drawing.Size(645, 875); + this.pnlEdit.TabIndex = 0; + // + // grpRealTimeInfo + // + this.grpRealTimeInfo.Controls.Add(this.lblAlarmValue); + this.grpRealTimeInfo.Controls.Add(this.lblAlarm); + this.grpRealTimeInfo.Controls.Add(this.lblMechanismStatusValue); + this.grpRealTimeInfo.Controls.Add(this.lblMechanismStatus); + this.grpRealTimeInfo.Controls.Add(this.lblChargeCommandStatusValue); + this.grpRealTimeInfo.Controls.Add(this.lblChargeCommandStatus); + this.grpRealTimeInfo.Controls.Add(this.lblCommStatusValue); + this.grpRealTimeInfo.Controls.Add(this.lblCommStatus); + this.grpRealTimeInfo.Controls.Add(this.lblRealTimeCurrentValue); + this.grpRealTimeInfo.Controls.Add(this.lblRealTimeCurrent); + this.grpRealTimeInfo.Controls.Add(this.lblRealTimeVoltageValue); + this.grpRealTimeInfo.Controls.Add(this.lblRealTimeVoltage); + this.grpRealTimeInfo.Controls.Add(this.lblBatteryLevelValue); + this.grpRealTimeInfo.Controls.Add(this.lblBatteryLevel); + this.grpRealTimeInfo.Controls.Add(this.lblCurrentVehicleValue); + this.grpRealTimeInfo.Controls.Add(this.lblCurrentVehicle); + this.grpRealTimeInfo.Dock = System.Windows.Forms.DockStyle.Fill; + this.grpRealTimeInfo.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.grpRealTimeInfo.Location = new System.Drawing.Point(0, 500); + this.grpRealTimeInfo.Margin = new System.Windows.Forms.Padding(4); + this.grpRealTimeInfo.Name = "grpRealTimeInfo"; + this.grpRealTimeInfo.Padding = new System.Windows.Forms.Padding(20, 10, 20, 10); + this.grpRealTimeInfo.Size = new System.Drawing.Size(645, 250); + this.grpRealTimeInfo.TabIndex = 2; + this.grpRealTimeInfo.TabStop = false; + this.grpRealTimeInfo.Text = "实时状态(只读)"; + // + // lblAlarmValue + // + this.lblAlarmValue.Font = new System.Drawing.Font("微软雅黑", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblAlarmValue.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(175)))), ((int)(((byte)(80))))); + this.lblAlarmValue.Location = new System.Drawing.Point(451, 96); + this.lblAlarmValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblAlarmValue.Name = "lblAlarmValue"; + this.lblAlarmValue.Size = new System.Drawing.Size(76, 20); + this.lblAlarmValue.TabIndex = 15; + this.lblAlarmValue.Text = "正常"; + this.lblAlarmValue.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lblAlarm + // + this.lblAlarm.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblAlarm.Location = new System.Drawing.Point(343, 97); + this.lblAlarm.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblAlarm.Name = "lblAlarm"; + this.lblAlarm.Size = new System.Drawing.Size(100, 18); + this.lblAlarm.TabIndex = 14; + this.lblAlarm.Text = "报警状态:"; + this.lblAlarm.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // lblMechanismStatusValue + // + this.lblMechanismStatusValue.Font = new System.Drawing.Font("微软雅黑", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblMechanismStatusValue.Location = new System.Drawing.Point(155, 98); + this.lblMechanismStatusValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblMechanismStatusValue.Name = "lblMechanismStatusValue"; + this.lblMechanismStatusValue.Size = new System.Drawing.Size(81, 18); + this.lblMechanismStatusValue.TabIndex = 13; + this.lblMechanismStatusValue.Text = "? 未知"; + this.lblMechanismStatusValue.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lblMechanismStatus + // + this.lblMechanismStatus.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblMechanismStatus.Location = new System.Drawing.Point(50, 95); + this.lblMechanismStatus.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblMechanismStatus.Name = "lblMechanismStatus"; + this.lblMechanismStatus.Size = new System.Drawing.Size(97, 30); + this.lblMechanismStatus.TabIndex = 12; + this.lblMechanismStatus.Text = "机构状态:"; + this.lblMechanismStatus.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // lblChargeCommandStatusValue + // + this.lblChargeCommandStatusValue.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblChargeCommandStatusValue.Location = new System.Drawing.Point(451, 75); + this.lblChargeCommandStatusValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblChargeCommandStatusValue.Name = "lblChargeCommandStatusValue"; + this.lblChargeCommandStatusValue.Size = new System.Drawing.Size(150, 20); + this.lblChargeCommandStatusValue.TabIndex = 11; + this.lblChargeCommandStatusValue.Text = "◯ 停止"; + this.lblChargeCommandStatusValue.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lblChargeCommandStatus + // + this.lblChargeCommandStatus.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblChargeCommandStatus.Location = new System.Drawing.Point(343, 75); + this.lblChargeCommandStatus.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblChargeCommandStatus.Name = "lblChargeCommandStatus"; + this.lblChargeCommandStatus.Size = new System.Drawing.Size(100, 20); + this.lblChargeCommandStatus.TabIndex = 10; + this.lblChargeCommandStatus.Text = "充电指令:"; + this.lblChargeCommandStatus.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // lblCommStatusValue + // + this.lblCommStatusValue.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblCommStatusValue.Location = new System.Drawing.Point(155, 75); + this.lblCommStatusValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblCommStatusValue.Name = "lblCommStatusValue"; + this.lblCommStatusValue.Size = new System.Drawing.Size(200, 20); + this.lblCommStatusValue.TabIndex = 9; + this.lblCommStatusValue.Text = "? 未知"; + this.lblCommStatusValue.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lblCommStatus + // + this.lblCommStatus.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblCommStatus.Location = new System.Drawing.Point(27, 75); + this.lblCommStatus.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblCommStatus.Name = "lblCommStatus"; + this.lblCommStatus.Size = new System.Drawing.Size(120, 20); + this.lblCommStatus.TabIndex = 8; + this.lblCommStatus.Text = "通讯状态:"; + this.lblCommStatus.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // lblRealTimeCurrentValue + // + this.lblRealTimeCurrentValue.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblRealTimeCurrentValue.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(150)))), ((int)(((byte)(243))))); + this.lblRealTimeCurrentValue.Location = new System.Drawing.Point(451, 50); + this.lblRealTimeCurrentValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblRealTimeCurrentValue.Name = "lblRealTimeCurrentValue"; + this.lblRealTimeCurrentValue.Size = new System.Drawing.Size(150, 25); + this.lblRealTimeCurrentValue.TabIndex = 7; + this.lblRealTimeCurrentValue.Text = "0.0 A"; + this.lblRealTimeCurrentValue.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lblRealTimeCurrent + // + this.lblRealTimeCurrent.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblRealTimeCurrent.Location = new System.Drawing.Point(327, 50); + this.lblRealTimeCurrent.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblRealTimeCurrent.Name = "lblRealTimeCurrent"; + this.lblRealTimeCurrent.Size = new System.Drawing.Size(116, 25); + this.lblRealTimeCurrent.TabIndex = 6; + this.lblRealTimeCurrent.Text = "实时电流:"; + this.lblRealTimeCurrent.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // lblRealTimeVoltageValue + // + this.lblRealTimeVoltageValue.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblRealTimeVoltageValue.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(150)))), ((int)(((byte)(243))))); + this.lblRealTimeVoltageValue.Location = new System.Drawing.Point(155, 50); + this.lblRealTimeVoltageValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblRealTimeVoltageValue.Name = "lblRealTimeVoltageValue"; + this.lblRealTimeVoltageValue.Size = new System.Drawing.Size(200, 25); + this.lblRealTimeVoltageValue.TabIndex = 5; + this.lblRealTimeVoltageValue.Text = "0.0 V"; + this.lblRealTimeVoltageValue.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lblRealTimeVoltage + // + this.lblRealTimeVoltage.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblRealTimeVoltage.Location = new System.Drawing.Point(27, 50); + this.lblRealTimeVoltage.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblRealTimeVoltage.Name = "lblRealTimeVoltage"; + this.lblRealTimeVoltage.Size = new System.Drawing.Size(120, 25); + this.lblRealTimeVoltage.TabIndex = 4; + this.lblRealTimeVoltage.Text = "实时电压:"; + this.lblRealTimeVoltage.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // lblBatteryLevelValue + // + this.lblBatteryLevelValue.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblBatteryLevelValue.Location = new System.Drawing.Point(451, 25); + this.lblBatteryLevelValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblBatteryLevelValue.Name = "lblBatteryLevelValue"; + this.lblBatteryLevelValue.Size = new System.Drawing.Size(150, 25); + this.lblBatteryLevelValue.TabIndex = 3; + this.lblBatteryLevelValue.Text = "-"; + this.lblBatteryLevelValue.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lblBatteryLevel + // + this.lblBatteryLevel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblBatteryLevel.Location = new System.Drawing.Point(350, 25); + this.lblBatteryLevel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblBatteryLevel.Name = "lblBatteryLevel"; + this.lblBatteryLevel.Size = new System.Drawing.Size(93, 25); + this.lblBatteryLevel.TabIndex = 2; + this.lblBatteryLevel.Text = "实时电量:"; + this.lblBatteryLevel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // lblCurrentVehicleValue + // + this.lblCurrentVehicleValue.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblCurrentVehicleValue.Location = new System.Drawing.Point(155, 25); + this.lblCurrentVehicleValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblCurrentVehicleValue.Name = "lblCurrentVehicleValue"; + this.lblCurrentVehicleValue.Size = new System.Drawing.Size(200, 25); + this.lblCurrentVehicleValue.TabIndex = 1; + this.lblCurrentVehicleValue.Text = "-"; + this.lblCurrentVehicleValue.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lblCurrentVehicle + // + this.lblCurrentVehicle.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblCurrentVehicle.Location = new System.Drawing.Point(27, 25); + this.lblCurrentVehicle.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblCurrentVehicle.Name = "lblCurrentVehicle"; + this.lblCurrentVehicle.Size = new System.Drawing.Size(120, 25); + this.lblCurrentVehicle.TabIndex = 0; + this.lblCurrentVehicle.Text = "当前车辆:"; + this.lblCurrentVehicle.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // grpEditInfo + // + this.grpEditInfo.Controls.Add(this.chargeCarType); + this.grpEditInfo.Controls.Add(this.label1); + this.grpEditInfo.Controls.Add(this.txtRemarks); + this.grpEditInfo.Controls.Add(this.lblRemarks); + this.grpEditInfo.Controls.Add(this.numSiteId); + this.grpEditInfo.Controls.Add(this.lblSiteId); + this.grpEditInfo.Controls.Add(this.chkEnabled); + this.grpEditInfo.Controls.Add(this.chkShieldSiteMechanismStatus); + this.grpEditInfo.Controls.Add(this.numCurrent); + this.grpEditInfo.Controls.Add(this.lblCurrent); + this.grpEditInfo.Controls.Add(this.numVoltage); + this.grpEditInfo.Controls.Add(this.lblVoltage); + this.grpEditInfo.Controls.Add(this.numPort); + this.grpEditInfo.Controls.Add(this.lblPort); + this.grpEditInfo.Controls.Add(this.txtIpAddress); + this.grpEditInfo.Controls.Add(this.lblIpAddress); + this.grpEditInfo.Controls.Add(this.cmbChargeMethod); + this.grpEditInfo.Controls.Add(this.lblChargeMethod); + this.grpEditInfo.Controls.Add(this.cmbType); + this.grpEditInfo.Controls.Add(this.lblType); + this.grpEditInfo.Controls.Add(this.txtName); + this.grpEditInfo.Controls.Add(this.lblName); + this.grpEditInfo.Controls.Add(this.txtStationId); + this.grpEditInfo.Controls.Add(this.lblStationId); + this.grpEditInfo.Dock = System.Windows.Forms.DockStyle.Top; + this.grpEditInfo.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.grpEditInfo.Location = new System.Drawing.Point(0, 0); + this.grpEditInfo.Margin = new System.Windows.Forms.Padding(4); + this.grpEditInfo.Name = "grpEditInfo"; + this.grpEditInfo.Padding = new System.Windows.Forms.Padding(20, 19, 20, 19); + this.grpEditInfo.Size = new System.Drawing.Size(645, 500); + this.grpEditInfo.TabIndex = 1; + this.grpEditInfo.TabStop = false; + this.grpEditInfo.Text = "基本信息(可编辑)"; + // + // chargeCarType + // + this.chargeCarType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.chargeCarType.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chargeCarType.FormattingEnabled = true; + this.chargeCarType.Items.AddRange(new object[] { + "FRLD", + "MuXing"}); + this.chargeCarType.Location = new System.Drawing.Point(426, 332); + this.chargeCarType.Margin = new System.Windows.Forms.Padding(4); + this.chargeCarType.Name = "chargeCarType"; + this.chargeCarType.Size = new System.Drawing.Size(140, 31); + this.chargeCarType.TabIndex = 25; + // + // label1 + // + this.label1.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label1.Location = new System.Drawing.Point(292, 332); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(137, 31); + this.label1.TabIndex = 24; + this.label1.Text = "停靠车辆类型:"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // txtRemarks + // + this.txtRemarks.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtRemarks.Location = new System.Drawing.Point(167, 408); + this.txtRemarks.Margin = new System.Windows.Forms.Padding(4); + this.txtRemarks.Multiline = true; + this.txtRemarks.Name = "txtRemarks"; + this.txtRemarks.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtRemarks.Size = new System.Drawing.Size(399, 62); + this.txtRemarks.TabIndex = 21; + // + // lblRemarks + // + this.lblRemarks.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblRemarks.Location = new System.Drawing.Point(27, 408); + this.lblRemarks.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblRemarks.Name = "lblRemarks"; + this.lblRemarks.Size = new System.Drawing.Size(133, 31); + this.lblRemarks.TabIndex = 20; + this.lblRemarks.Text = "备注:"; + this.lblRemarks.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // numSiteId + // + this.numSiteId.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.numSiteId.Location = new System.Drawing.Point(167, 370); + this.numSiteId.Margin = new System.Windows.Forms.Padding(4); + this.numSiteId.Maximum = new decimal(new int[] { + 99999, + 0, + 0, + 0}); + this.numSiteId.Name = "numSiteId"; + this.numSiteId.Size = new System.Drawing.Size(400, 29); + this.numSiteId.TabIndex = 19; + // + // lblSiteId + // + this.lblSiteId.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblSiteId.Location = new System.Drawing.Point(27, 370); + this.lblSiteId.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblSiteId.Name = "lblSiteId"; + this.lblSiteId.Size = new System.Drawing.Size(133, 31); + this.lblSiteId.TabIndex = 18; + this.lblSiteId.Text = "站点ID:"; + this.lblSiteId.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // chkEnabled + // + this.chkEnabled.AutoSize = true; + this.chkEnabled.Checked = true; + this.chkEnabled.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkEnabled.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkEnabled.Location = new System.Drawing.Point(167, 334); + this.chkEnabled.Margin = new System.Windows.Forms.Padding(4); + this.chkEnabled.Name = "chkEnabled"; + this.chkEnabled.Size = new System.Drawing.Size(117, 27); + this.chkEnabled.TabIndex = 17; + this.chkEnabled.Text = "启用充电桩"; + this.chkEnabled.UseVisualStyleBackColor = true; + // + // chkShieldSiteMechanismStatus + // + this.chkShieldSiteMechanismStatus.AutoSize = true; + this.chkShieldSiteMechanismStatus.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chkShieldSiteMechanismStatus.Location = new System.Drawing.Point(167, 473); + this.chkShieldSiteMechanismStatus.Margin = new System.Windows.Forms.Padding(4); + this.chkShieldSiteMechanismStatus.Name = "chkShieldSiteMechanismStatus"; + this.chkShieldSiteMechanismStatus.Size = new System.Drawing.Size(168, 27); + this.chkShieldSiteMechanismStatus.TabIndex = 18; + this.chkShieldSiteMechanismStatus.Text = "屏蔽机构状态交互"; + this.chkShieldSiteMechanismStatus.UseVisualStyleBackColor = true; + // + // numCurrent + // + this.numCurrent.DecimalPlaces = 1; + this.numCurrent.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.numCurrent.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numCurrent.Location = new System.Drawing.Point(167, 296); + this.numCurrent.Margin = new System.Windows.Forms.Padding(4); + this.numCurrent.Maximum = new decimal(new int[] { + 110, + 0, + 0, + 0}); + this.numCurrent.Name = "numCurrent"; + this.numCurrent.Size = new System.Drawing.Size(400, 29); + this.numCurrent.TabIndex = 13; + this.numCurrent.Value = new decimal(new int[] { + 10, + 0, + 0, + 0}); + // + // lblCurrent + // + this.lblCurrent.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblCurrent.Location = new System.Drawing.Point(27, 296); + this.lblCurrent.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblCurrent.Name = "lblCurrent"; + this.lblCurrent.Size = new System.Drawing.Size(133, 31); + this.lblCurrent.TabIndex = 12; + this.lblCurrent.Text = "电流(A):"; + this.lblCurrent.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // numVoltage + // + this.numVoltage.DecimalPlaces = 1; + this.numVoltage.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.numVoltage.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numVoltage.Location = new System.Drawing.Point(167, 258); + this.numVoltage.Margin = new System.Windows.Forms.Padding(4); + this.numVoltage.Maximum = new decimal(new int[] { + 68, + 0, + 0, + 0}); + this.numVoltage.Name = "numVoltage"; + this.numVoltage.Size = new System.Drawing.Size(400, 29); + this.numVoltage.TabIndex = 11; + // + // lblVoltage + // + this.lblVoltage.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblVoltage.Location = new System.Drawing.Point(27, 258); + this.lblVoltage.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblVoltage.Name = "lblVoltage"; + this.lblVoltage.Size = new System.Drawing.Size(133, 31); + this.lblVoltage.TabIndex = 10; + this.lblVoltage.Text = "电压(V):"; + this.lblVoltage.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // numPort + // + this.numPort.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.numPort.Location = new System.Drawing.Point(167, 220); + this.numPort.Margin = new System.Windows.Forms.Padding(4); + this.numPort.Maximum = new decimal(new int[] { + 65535, + 0, + 0, + 0}); + this.numPort.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numPort.Name = "numPort"; + this.numPort.Size = new System.Drawing.Size(400, 29); + this.numPort.TabIndex = 9; + this.numPort.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // lblPort + // + this.lblPort.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblPort.Location = new System.Drawing.Point(27, 220); + this.lblPort.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblPort.Name = "lblPort"; + this.lblPort.Size = new System.Drawing.Size(133, 31); + this.lblPort.TabIndex = 8; + this.lblPort.Text = "端口:"; + this.lblPort.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // txtIpAddress + // + this.txtIpAddress.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtIpAddress.Location = new System.Drawing.Point(167, 182); + this.txtIpAddress.Margin = new System.Windows.Forms.Padding(4); + this.txtIpAddress.Name = "txtIpAddress"; + this.txtIpAddress.Size = new System.Drawing.Size(399, 29); + this.txtIpAddress.TabIndex = 7; + // + // lblIpAddress + // + this.lblIpAddress.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblIpAddress.Location = new System.Drawing.Point(27, 182); + this.lblIpAddress.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblIpAddress.Name = "lblIpAddress"; + this.lblIpAddress.Size = new System.Drawing.Size(133, 31); + this.lblIpAddress.TabIndex = 6; + this.lblIpAddress.Text = "IP地址:"; + this.lblIpAddress.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // cmbChargeMethod + // + this.cmbChargeMethod.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbChargeMethod.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbChargeMethod.FormattingEnabled = true; + this.cmbChargeMethod.Items.AddRange(new object[] { + "地充", + "尾充", + "侧充"}); + this.cmbChargeMethod.Location = new System.Drawing.Point(167, 144); + this.cmbChargeMethod.Margin = new System.Windows.Forms.Padding(4); + this.cmbChargeMethod.Name = "cmbChargeMethod"; + this.cmbChargeMethod.Size = new System.Drawing.Size(399, 31); + this.cmbChargeMethod.TabIndex = 23; + this.cmbChargeMethod.SelectedIndexChanged += new System.EventHandler(this.cmbChargeMethod_SelectedIndexChanged); + // + // lblChargeMethod + // + this.lblChargeMethod.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblChargeMethod.Location = new System.Drawing.Point(27, 144); + this.lblChargeMethod.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblChargeMethod.Name = "lblChargeMethod"; + this.lblChargeMethod.Size = new System.Drawing.Size(133, 31); + this.lblChargeMethod.TabIndex = 22; + this.lblChargeMethod.Text = "充电方式:"; + this.lblChargeMethod.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // cmbType + // + this.cmbType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbType.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbType.FormattingEnabled = true; + this.cmbType.Items.AddRange(new object[] { + "FRLD高款充电桩", + "FRLD矮款充电桩", + "牧星充电桩"}); + this.cmbType.Location = new System.Drawing.Point(167, 106); + this.cmbType.Margin = new System.Windows.Forms.Padding(4); + this.cmbType.Name = "cmbType"; + this.cmbType.Size = new System.Drawing.Size(399, 31); + this.cmbType.TabIndex = 5; + // + // lblType + // + this.lblType.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblType.Location = new System.Drawing.Point(27, 106); + this.lblType.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblType.Name = "lblType"; + this.lblType.Size = new System.Drawing.Size(133, 31); + this.lblType.TabIndex = 4; + this.lblType.Text = "类型:"; + this.lblType.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // txtName + // + this.txtName.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtName.Location = new System.Drawing.Point(167, 64); + this.txtName.Margin = new System.Windows.Forms.Padding(4); + this.txtName.Name = "txtName"; + this.txtName.Size = new System.Drawing.Size(192, 29); + this.txtName.TabIndex = 3; + // + // lblName + // + this.lblName.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblName.Location = new System.Drawing.Point(26, 62); + this.lblName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblName.Name = "lblName"; + this.lblName.Size = new System.Drawing.Size(133, 31); + this.lblName.TabIndex = 2; + this.lblName.Text = "充电桩名称:"; + this.lblName.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // txtStationId + // + this.txtStationId.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtStationId.Location = new System.Drawing.Point(167, 29); + this.txtStationId.Margin = new System.Windows.Forms.Padding(4); + this.txtStationId.Name = "txtStationId"; + this.txtStationId.Size = new System.Drawing.Size(192, 27); + this.txtStationId.TabIndex = 1; + // + // lblStationId + // + this.lblStationId.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblStationId.Location = new System.Drawing.Point(49, 31); + this.lblStationId.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblStationId.Name = "lblStationId"; + this.lblStationId.Size = new System.Drawing.Size(127, 25); + this.lblStationId.TabIndex = 0; + this.lblStationId.Text = "充电桩编号:"; + this.lblStationId.TextAlign = System.Drawing.ContentAlignment.BottomLeft; + // + // pnlEditButtons + // + this.pnlEditButtons.Controls.Add(this.btnCancel); + this.pnlEditButtons.Controls.Add(this.btnDelete); + this.pnlEditButtons.Controls.Add(this.btnSave); + this.pnlEditButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.pnlEditButtons.Location = new System.Drawing.Point(0, 750); + this.pnlEditButtons.Margin = new System.Windows.Forms.Padding(4); + this.pnlEditButtons.Name = "pnlEditButtons"; + this.pnlEditButtons.Padding = new System.Windows.Forms.Padding(13, 12, 13, 12); + this.pnlEditButtons.Size = new System.Drawing.Size(645, 125); + this.pnlEditButtons.TabIndex = 0; + // + // btnCancel + // + this.btnCancel.Font = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCancel.Location = new System.Drawing.Point(373, 25); + this.btnCancel.Margin = new System.Windows.Forms.Padding(4); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(133, 62); + this.btnCancel.TabIndex = 2; + this.btnCancel.Text = "取消"; + this.btnCancel.UseVisualStyleBackColor = true; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // btnDelete + // + this.btnDelete.BackColor = System.Drawing.Color.LightCoral; + this.btnDelete.Font = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDelete.Location = new System.Drawing.Point(200, 25); + this.btnDelete.Margin = new System.Windows.Forms.Padding(4); + this.btnDelete.Name = "btnDelete"; + this.btnDelete.Size = new System.Drawing.Size(133, 62); + this.btnDelete.TabIndex = 1; + this.btnDelete.Text = "删除"; + this.btnDelete.UseVisualStyleBackColor = false; + this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); + // + // btnSave + // + this.btnSave.BackColor = System.Drawing.Color.LightBlue; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSave.Location = new System.Drawing.Point(27, 25); + this.btnSave.Margin = new System.Windows.Forms.Padding(4); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(133, 62); + this.btnSave.TabIndex = 0; + this.btnSave.Text = "保存"; + this.btnSave.UseVisualStyleBackColor = false; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // colStationId + // + this.colStationId.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colStationId.DefaultCellStyle = dataGridViewCellStyle2; + this.colStationId.HeaderText = "编号"; + this.colStationId.MinimumWidth = 6; + this.colStationId.Name = "colStationId"; + this.colStationId.ReadOnly = true; + this.colStationId.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colStationId.Width = 30; + // + // colName + // + this.colName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colName.DefaultCellStyle = dataGridViewCellStyle3; + this.colName.HeaderText = "名称"; + this.colName.MinimumWidth = 6; + this.colName.Name = "colName"; + this.colName.ReadOnly = true; + this.colName.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colName.Width = 30; + // + // colType + // + this.colType.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colType.DefaultCellStyle = dataGridViewCellStyle4; + this.colType.FillWeight = 189.1357F; + this.colType.HeaderText = "类型"; + this.colType.MinimumWidth = 6; + this.colType.Name = "colType"; + this.colType.ReadOnly = true; + this.colType.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colType.Width = 110; + // + // colChargeMethod + // + this.colChargeMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colChargeMethod.DefaultCellStyle = dataGridViewCellStyle5; + this.colChargeMethod.FillWeight = 98.90109F; + this.colChargeMethod.HeaderText = "充电方式"; + this.colChargeMethod.MinimumWidth = 6; + this.colChargeMethod.Name = "colChargeMethod"; + this.colChargeMethod.ReadOnly = true; + this.colChargeMethod.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colChargeMethod.Width = 50; + // + // colSiteId + // + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colSiteId.DefaultCellStyle = dataGridViewCellStyle6; + this.colSiteId.FillWeight = 59.72706F; + this.colSiteId.HeaderText = "站点编号"; + this.colSiteId.MinimumWidth = 6; + this.colSiteId.Name = "colSiteId"; + this.colSiteId.ReadOnly = true; + this.colSiteId.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // colLastSendTime + // + dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colLastSendTime.DefaultCellStyle = dataGridViewCellStyle7; + this.colLastSendTime.FillWeight = 59.72706F; + this.colLastSendTime.HeaderText = "发送时间"; + this.colLastSendTime.MinimumWidth = 6; + this.colLastSendTime.Name = "colLastSendTime"; + this.colLastSendTime.ReadOnly = true; + this.colLastSendTime.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // colLastReceiveTime + // + dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colLastReceiveTime.DefaultCellStyle = dataGridViewCellStyle8; + this.colLastReceiveTime.FillWeight = 59.72706F; + this.colLastReceiveTime.HeaderText = "接收时间"; + this.colLastReceiveTime.MinimumWidth = 6; + this.colLastReceiveTime.Name = "colLastReceiveTime"; + this.colLastReceiveTime.ReadOnly = true; + this.colLastReceiveTime.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // colCommStatus + // + dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colCommStatus.DefaultCellStyle = dataGridViewCellStyle9; + this.colCommStatus.FillWeight = 59.72706F; + this.colCommStatus.HeaderText = "通讯"; + this.colCommStatus.MinimumWidth = 6; + this.colCommStatus.Name = "colCommStatus"; + this.colCommStatus.ReadOnly = true; + this.colCommStatus.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // colChargeCommandStatus + // + dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colChargeCommandStatus.DefaultCellStyle = dataGridViewCellStyle10; + this.colChargeCommandStatus.FillWeight = 59.72706F; + this.colChargeCommandStatus.HeaderText = "充电指令"; + this.colChargeCommandStatus.MinimumWidth = 6; + this.colChargeCommandStatus.Name = "colChargeCommandStatus"; + this.colChargeCommandStatus.ReadOnly = true; + this.colChargeCommandStatus.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // colMechanismStatus + // + dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colMechanismStatus.DefaultCellStyle = dataGridViewCellStyle11; + this.colMechanismStatus.FillWeight = 59.72706F; + this.colMechanismStatus.HeaderText = "机构状态"; + this.colMechanismStatus.MinimumWidth = 6; + this.colMechanismStatus.Name = "colMechanismStatus"; + this.colMechanismStatus.ReadOnly = true; + this.colMechanismStatus.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // colCurrentVehicle + // + dataGridViewCellStyle12.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colCurrentVehicle.DefaultCellStyle = dataGridViewCellStyle12; + this.colCurrentVehicle.FillWeight = 59.72706F; + this.colCurrentVehicle.HeaderText = "当前车辆"; + this.colCurrentVehicle.MinimumWidth = 6; + this.colCurrentVehicle.Name = "colCurrentVehicle"; + this.colCurrentVehicle.ReadOnly = true; + this.colCurrentVehicle.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // colBatteryLevel + // + dataGridViewCellStyle13.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle13.Format = "%"; + dataGridViewCellStyle13.NullValue = "0%"; + this.colBatteryLevel.DefaultCellStyle = dataGridViewCellStyle13; + this.colBatteryLevel.FillWeight = 59.72706F; + this.colBatteryLevel.HeaderText = "电量"; + this.colBatteryLevel.MinimumWidth = 6; + this.colBatteryLevel.Name = "colBatteryLevel"; + this.colBatteryLevel.ReadOnly = true; + this.colBatteryLevel.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // colAlarm + // + this.colAlarm.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle14.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colAlarm.DefaultCellStyle = dataGridViewCellStyle14; + this.colAlarm.FillWeight = 120F; + this.colAlarm.HeaderText = "报警 "; + this.colAlarm.MinimumWidth = 6; + this.colAlarm.Name = "colAlarm"; + this.colAlarm.ReadOnly = true; + this.colAlarm.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colAlarm.Width = 110; + // + // colRealTimeVoltage + // + dataGridViewCellStyle15.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle15.Format = "V"; + dataGridViewCellStyle15.NullValue = "V"; + this.colRealTimeVoltage.DefaultCellStyle = dataGridViewCellStyle15; + this.colRealTimeVoltage.FillWeight = 59.72706F; + this.colRealTimeVoltage.HeaderText = "实时电压"; + this.colRealTimeVoltage.MinimumWidth = 6; + this.colRealTimeVoltage.Name = "colRealTimeVoltage"; + this.colRealTimeVoltage.ReadOnly = true; + this.colRealTimeVoltage.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // colRealTimeCurrent + // + dataGridViewCellStyle16.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colRealTimeCurrent.DefaultCellStyle = dataGridViewCellStyle16; + this.colRealTimeCurrent.FillWeight = 59.72706F; + this.colRealTimeCurrent.HeaderText = "实时电流"; + this.colRealTimeCurrent.MinimumWidth = 6; + this.colRealTimeCurrent.Name = "colRealTimeCurrent"; + this.colRealTimeCurrent.ReadOnly = true; + this.colRealTimeCurrent.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // colStatus + // + dataGridViewCellStyle17.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colStatus.DefaultCellStyle = dataGridViewCellStyle17; + this.colStatus.FillWeight = 59.72706F; + this.colStatus.HeaderText = "充电状态"; + this.colStatus.MinimumWidth = 6; + this.colStatus.Name = "colStatus"; + this.colStatus.ReadOnly = true; + this.colStatus.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // colEnabled + // + dataGridViewCellStyle18.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.colEnabled.DefaultCellStyle = dataGridViewCellStyle18; + this.colEnabled.FillWeight = 59.72706F; + this.colEnabled.HeaderText = "启用"; + this.colEnabled.MinimumWidth = 6; + this.colEnabled.Name = "colEnabled"; + this.colEnabled.ReadOnly = true; + this.colEnabled.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // + // ChargeStationManagementForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1731, 875); + this.Controls.Add(this.splitContainer); + this.Margin = new System.Windows.Forms.Padding(4); + this.MinimumSize = new System.Drawing.Size(1327, 738); + this.Name = "ChargeStationManagementForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "充电桩管理系统"; + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + this.pnlList.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvStations)).EndInit(); + this.pnlListButtons.ResumeLayout(false); + this.pnlListButtons.PerformLayout(); + this.pnlSearch.ResumeLayout(false); + this.pnlSearch.PerformLayout(); + this.pnlEdit.ResumeLayout(false); + this.grpRealTimeInfo.ResumeLayout(false); + this.grpEditInfo.ResumeLayout(false); + this.grpEditInfo.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numSiteId)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numCurrent)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numVoltage)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numPort)).EndInit(); + this.pnlEditButtons.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer; + private System.Windows.Forms.Panel pnlList; + private System.Windows.Forms.DataGridView dgvStations; + private System.Windows.Forms.Panel pnlListButtons; + private System.Windows.Forms.Label lblStatistics; + private System.Windows.Forms.Button btnStrategyConfig; + private System.Windows.Forms.Button btnCommMonitor; + private System.Windows.Forms.Button btnAlarmConfig; + private System.Windows.Forms.Button btnExport; + private System.Windows.Forms.Button btnRefresh; + private System.Windows.Forms.Panel pnlSearch; + private System.Windows.Forms.ComboBox cmbStatusFilter; + private System.Windows.Forms.Label lblStatusFilter; + private System.Windows.Forms.TextBox txtSearch; + private System.Windows.Forms.Label lblSearch; + private System.Windows.Forms.Panel pnlEdit; + private System.Windows.Forms.GroupBox grpEditInfo; + private System.Windows.Forms.TextBox txtRemarks; + private System.Windows.Forms.Label lblRemarks; + private System.Windows.Forms.NumericUpDown numSiteId; + private System.Windows.Forms.Label lblSiteId; + private System.Windows.Forms.CheckBox chkEnabled; + private System.Windows.Forms.CheckBox chkShieldSiteMechanismStatus; + private System.Windows.Forms.NumericUpDown numCurrent; + private System.Windows.Forms.Label lblCurrent; + private System.Windows.Forms.NumericUpDown numVoltage; + private System.Windows.Forms.Label lblVoltage; + private System.Windows.Forms.NumericUpDown numPort; + private System.Windows.Forms.Label lblPort; + private System.Windows.Forms.TextBox txtIpAddress; + private System.Windows.Forms.Label lblIpAddress; + private System.Windows.Forms.ComboBox cmbType; + private System.Windows.Forms.Label lblType; + private System.Windows.Forms.ComboBox cmbChargeMethod; + private System.Windows.Forms.Label lblChargeMethod; + private System.Windows.Forms.TextBox txtName; + private System.Windows.Forms.Label lblName; + private System.Windows.Forms.TextBox txtStationId; + private System.Windows.Forms.Label lblStationId; + private System.Windows.Forms.Panel pnlEditButtons; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnDelete; + private System.Windows.Forms.Button btnSave; + private System.Windows.Forms.GroupBox grpRealTimeInfo; + private System.Windows.Forms.Label lblCurrentVehicleValue; + private System.Windows.Forms.Label lblCurrentVehicle; + private System.Windows.Forms.Label lblBatteryLevelValue; + private System.Windows.Forms.Label lblBatteryLevel; + private System.Windows.Forms.Label lblRealTimeVoltageValue; + private System.Windows.Forms.Label lblRealTimeVoltage; + private System.Windows.Forms.Label lblRealTimeCurrentValue; + private System.Windows.Forms.Label lblRealTimeCurrent; + private System.Windows.Forms.Label lblCommStatusValue; + private System.Windows.Forms.Label lblCommStatus; + private System.Windows.Forms.Label lblChargeCommandStatusValue; + private System.Windows.Forms.Label lblChargeCommandStatus; + private System.Windows.Forms.Label lblMechanismStatusValue; + private System.Windows.Forms.Label lblMechanismStatus; + private System.Windows.Forms.Label lblAlarmValue; + private System.Windows.Forms.Label lblAlarm; + private System.Windows.Forms.ComboBox chargeCarType; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.DataGridViewTextBoxColumn colStationId; + private System.Windows.Forms.DataGridViewTextBoxColumn colName; + private System.Windows.Forms.DataGridViewTextBoxColumn colType; + private System.Windows.Forms.DataGridViewTextBoxColumn colChargeMethod; + private System.Windows.Forms.DataGridViewTextBoxColumn colSiteId; + private System.Windows.Forms.DataGridViewTextBoxColumn colLastSendTime; + private System.Windows.Forms.DataGridViewTextBoxColumn colLastReceiveTime; + private System.Windows.Forms.DataGridViewTextBoxColumn colCommStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colChargeCommandStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colMechanismStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colCurrentVehicle; + private System.Windows.Forms.DataGridViewTextBoxColumn colBatteryLevel; + private System.Windows.Forms.DataGridViewTextBoxColumn colAlarm; + private System.Windows.Forms.DataGridViewTextBoxColumn colRealTimeVoltage; + private System.Windows.Forms.DataGridViewTextBoxColumn colRealTimeCurrent; + private System.Windows.Forms.DataGridViewTextBoxColumn colStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colEnabled; + } +} + diff --git a/StandardScene.Core/Charge/ChargeStationManagementForm.cs b/StandardScene.Core/Charge/ChargeStationManagementForm.cs new file mode 100644 index 0000000..bd1b27d --- /dev/null +++ b/StandardScene.Core/Charge/ChargeStationManagementForm.cs @@ -0,0 +1,1389 @@ +using SimpleCore; +using System; +using System.Drawing; +using System.Linq; +using System.Net.NetworkInformation; +using System.Windows.Forms; + +namespace StandardScene.Charge +{ + /// + /// 充电桩管理窗口 + /// + public partial class ChargeStationManagementForm : Form + { + private ChargeStationDataService dataService; + private ChargeStation selectedStation; + private System.Windows.Forms.Timer autoRefreshTimer; + private Ping Ping = new Ping(); + private CommunicationMonitorForm communicationMonitorForm; + + public ChargeStationManagementForm() + { + InitializeComponent(); + dataService = ChargeStationDataService.Instance; + InitializeForm(); + InitializeAutoRefresh(); + } + + /// + /// 初始化自动刷新定时器 + /// + private void InitializeAutoRefresh() + { + autoRefreshTimer = new System.Windows.Forms.Timer(); + autoRefreshTimer.Interval = 3000; // 每3秒刷新一次 + autoRefreshTimer.Tick += AutoRefreshTimer_Tick; + autoRefreshTimer.Start(); + } + + /// + /// 自动刷新事件 + /// + private void AutoRefreshTimer_Tick(object sender, EventArgs e) + { + // 保存当前选中的充电桩ID + string selectedStationId = null; + if (dgvStations.SelectedRows.Count > 0) + { + selectedStationId = dgvStations.SelectedRows[0].Cells[0].Value?.ToString(); + } + + // 刷新列表 + LoadStations(); + + // 恢复选中状态 + if (!string.IsNullOrEmpty(selectedStationId)) + { + foreach (DataGridViewRow row in dgvStations.Rows) + { + if (row.Cells[0].Value?.ToString() == selectedStationId) + { + row.Selected = true; + dgvStations.CurrentCell = row.Cells[0]; + break; + } + } + } + } + + /// + /// 窗体关闭时停止定时器 + /// + protected override void OnFormClosing(FormClosingEventArgs e) + { + if (autoRefreshTimer != null) + { + autoRefreshTimer.Stop(); + autoRefreshTimer.Dispose(); + } + base.OnFormClosing(e); + } + + private void InitializeForm() + { + // 设置窗口属性 + this.Text = "充电桩管理系统"; + this.Size = new Size(1200, 700); + this.StartPosition = FormStartPosition.CenterScreen; + this.MinimumSize = new Size(1000, 600); + + // 设置表头文字垂直排列 + SetupVerticalHeaderText(); + + // 初始化状态筛选下拉框 + InitializeStatusFilter(); + + // 加载数据 + LoadStations(); + + // 设置默认状态为新增模式 + ClearEditFields(); + } + + /// + /// 设置表头文字垂直排列 + /// + private void SetupVerticalHeaderText() + { + if (dgvStations == null) + return; + + // 增加列标题高度以容纳垂直文字 + dgvStations.ColumnHeadersHeight = 100; + + // 订阅列标题绘制事件 + dgvStations.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + dgvStations.CellPainting += DgvStations_CellPainting; + + // 固定行高度 + dgvStations.RowTemplate.Height = 35; + dgvStations.AllowUserToResizeRows = false; + dgvStations.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing; + dgvStations.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; + } + + /// + /// 自定义绘制列标题(垂直文字) + /// + private void DgvStations_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) + { + // 只处理列标题行 + if (e.RowIndex == -1 && e.ColumnIndex >= 0) + { + try + { + // 绘制背景 + e.PaintBackground(e.CellBounds, true); + + // 获取列标题文本 + string headerText = dgvStations.Columns[e.ColumnIndex].HeaderText; + + // 设置文字格式(垂直排列,从上到下) + using (var brush = new SolidBrush(dgvStations.ColumnHeadersDefaultCellStyle.ForeColor)) + using (var format = new StringFormat()) + { + format.Alignment = StringAlignment.Center; + format.LineAlignment = StringAlignment.Near; + format.FormatFlags = StringFormatFlags.DirectionVertical; // 垂直文字 + + // 计算绘制位置(居中) + float x = e.CellBounds.Left + (e.CellBounds.Width - e.Graphics.MeasureString("测", dgvStations.ColumnHeadersDefaultCellStyle.Font).Width) / 2; + float y = e.CellBounds.Top + 5; + + // 绘制垂直文字 + e.Graphics.DrawString( + headerText, + dgvStations.ColumnHeadersDefaultCellStyle.Font, + brush, + new RectangleF(x, y, e.CellBounds.Width, e.CellBounds.Height - 10), + format); + } + + // 绘制边框 + e.Paint(e.CellBounds, DataGridViewPaintParts.Border); + + // 标记为已处理 + e.Handled = true; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"绘制列标题失败: {ex.Message}"); + } + } + } + + /// + /// 初始化状态筛选下拉框 + /// + private void InitializeStatusFilter() + { + if (cmbStatusFilter != null) + { + cmbStatusFilter.Items.Clear(); + cmbStatusFilter.Items.Add("全部状态"); + cmbStatusFilter.Items.Add("空闲"); + cmbStatusFilter.Items.Add("充电中"); + cmbStatusFilter.Items.Add("故障"); + cmbStatusFilter.Items.Add("离线"); + cmbStatusFilter.SelectedIndex = 0; // 默认显示全部 + } + } + + /// + /// 加载充电桩列表 + /// + private void LoadStations() + { + try + { + var stations = dataService.GetAllStations(); + + // 根据状态筛选 + if (cmbStatusFilter != null && cmbStatusFilter.SelectedIndex > 0) + { + var filterStatus = GetStatusFromFilterIndex(cmbStatusFilter.SelectedIndex); + stations = stations.Where(s => s.Status == filterStatus).ToList(); + } + + dgvStations.Rows.Clear(); + + foreach (var station in stations) + { + + try + { + if (Ping.Send(station.IpAddress, 1000).Status == IPStatus.Success) + { + station.CommStatus = CommunicationStatus.Normal; + } + else + { + station.CommStatus = CommunicationStatus.Error; + } + } + catch (Exception) + { + + station.CommStatus = CommunicationStatus.Error; + } + + + var index = dgvStations.Rows.Add( + station.StationId, + station.Name, + GetTypeText(station.Type), + GetChargeMethodText(station.ChargeMethod), + //station.IpAddress, + //station.Port, + station.SiteId?.ToString() ?? "", + FormatTimeToMinuteSecond(station.LastSendTime), + FormatTimeToMinuteSecond(station.LastReceiveTime), + FormatCommStatusDisplay(station.CommStatus), + FormatChargeCommandStatusDisplay(station.ChargeCommandStatus), + FormatMechanismStatusDisplay(station.MechanismStatus), + string.IsNullOrWhiteSpace(station.CurrentVehicle) ? "-" : station.CurrentVehicle, + station.BatteryLevel > 0 ? $"{station.BatteryLevel:F1}%" : "-", + FormatAlarmDisplay(station), + //station.SetVoltage, + //station.SetElectricCurrent, + station.RealTimeVoltage.ToString("F1"), + station.RealTimeCurrent.ToString("F1"), + GetStatusText(station.Status), + station.Enabled ? "是" : "否", + station.Remarks + ); + + // 根据状态设置行颜色(扁平化设计) + var row = dgvStations.Rows[index]; + + // 通讯状态列样式设置(第9列,因为增加了充电方式列) + var commCell = row.Cells[9]; + switch (station.CommStatus) + { + case CommunicationStatus.Normal: + commCell.Style.ForeColor = Color.FromArgb(76, 175, 80); // 绿色 + // commCell.Style.Font = new Font(commCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + break; + case CommunicationStatus.Delayed: + commCell.Style.ForeColor = Color.FromArgb(255, 152, 0); // 橙色 + // commCell.Style.Font = new Font(commCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + break; + case CommunicationStatus.Timeout: + case CommunicationStatus.Disconnected: + case CommunicationStatus.Error: + commCell.Style.ForeColor = Color.FromArgb(244, 67, 54); // 红色 + // commCell.Style.Font = new Font(commCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + break; + case CommunicationStatus.Unknown: + commCell.Style.ForeColor = Color.FromArgb(158, 158, 158); // 灰色 + break; + } + + // 充电指令状态列样式设置(第10列) + var chargeCommandCell = row.Cells[10]; + switch (station.ChargeCommandStatus) + { + case ChargeCommandStatus.Stopped: + chargeCommandCell.Style.ForeColor = Color.FromArgb(158, 158, 158); // 灰色 + break; + case ChargeCommandStatus.Started: + chargeCommandCell.Style.ForeColor = Color.FromArgb(76, 175, 80); // 绿色 + // chargeCommandCell.Style.Font = new Font(chargeCommandCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + break; + } + + // 机构状态列样式设置(第11列) + var mechanismCell = row.Cells[11]; + switch (station.MechanismStatus) + { + + case MechanismStatus.Retracted: + mechanismCell.Style.ForeColor = Color.FromArgb(76, 175, 80); // 绿色 + //mechanismCell.Style.Font = new Font(mechanismCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + break; + case MechanismStatus.Extending: + mechanismCell.Style.ForeColor = Color.FromArgb(33, 150, 243); // 蓝色 + //mechanismCell.Style.Font = new Font(mechanismCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + break; + case MechanismStatus.Extended: + mechanismCell.Style.ForeColor = Color.FromArgb(255, 0, 0); // + //mechanismCell.Style.Font = new Font(mechanismCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + break; + break; + } + + // 电量列样式设置(第13列) + if (station.BatteryLevel > 0) + { + var batteryCell = row.Cells[13]; + if (station.BatteryLevel >= 80) + { + batteryCell.Style.ForeColor = Color.FromArgb(76, 175, 80); // 绿色 - 电量充足 + //batteryCell.Style.Font = new Font(batteryCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + } + else if (station.BatteryLevel >= 50) + { + batteryCell.Style.ForeColor = Color.FromArgb(33, 150, 243); // 蓝色 - 电量中等 + //batteryCell.Style.Font = new Font(batteryCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + } + else if (station.BatteryLevel >= 20) + { + batteryCell.Style.ForeColor = Color.FromArgb(255, 152, 0); // 橙色 - 电量偏低 + //batteryCell.Style.Font = new Font(batteryCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + } + else + { + batteryCell.Style.ForeColor = Color.FromArgb(244, 67, 54); // 红色 - 电量低 + //batteryCell.Style.Font = new Font(batteryCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + } + } + + // 如果有报警,整行显示红色 + if (station.HasAlarm) + { + row.DefaultCellStyle.BackColor = Color.FromArgb(255, 205, 210); // 浅红色背景 #FFCDD2 + row.DefaultCellStyle.ForeColor = Color.FromArgb(198, 40, 40); // 深红色文字 + var baseFont = row.DefaultCellStyle.Font ?? dgvStations.DefaultCellStyle.Font ?? new Font("微软雅黑", 9F); + row.DefaultCellStyle.Font = new Font(baseFont, FontStyle.Bold); + } + else + { + // 根据状态设置颜色 + switch (station.Status) + { + case ChargeStationStatus.Idle: + row.DefaultCellStyle.BackColor = Color.FromArgb(232, 245, 233); // 浅绿色 #E8F5E9 + row.DefaultCellStyle.ForeColor = Color.FromArgb(46, 125, 50); // 深绿色文字 + break; + case ChargeStationStatus.Charging: + row.DefaultCellStyle.BackColor = Color.FromArgb(200, 230, 201); // 亮绿色 #C8E6C9 + row.DefaultCellStyle.ForeColor = Color.FromArgb(27, 94, 32); // 深绿色文字 + break; + case ChargeStationStatus.Fault: + row.DefaultCellStyle.BackColor = Color.FromArgb(255, 205, 210); // 浅红色 #FFCDD2 + row.DefaultCellStyle.ForeColor = Color.FromArgb(198, 40, 40); // 深红色文字 + break; + case ChargeStationStatus.Battery: + row.DefaultCellStyle.BackColor = Color.FromArgb(238, 238, 238); // 浅灰色 #EEEEEE + row.DefaultCellStyle.ForeColor = Color.FromArgb(97, 97, 97); // 深灰色文字 + break; + } + } + } + + // 更新统计信息 + UpdateStatistics(); + + // 更新标题显示筛选状态 + UpdateTitleWithFilter(stations.Count); + } + catch (Exception ex) + { + MessageBox.Show($"加载数据失败: {ex.Message}\n\n堆栈:\n{ex.StackTrace}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 根据筛选器索引获取状态 + /// + private ChargeStationStatus GetStatusFromFilterIndex(int index) + { + switch (index) + { + case 1: return ChargeStationStatus.Idle; // 空闲 + case 2: return ChargeStationStatus.Charging; // 充电中 + case 3: return ChargeStationStatus.Fault; // 故障 + case 4: return ChargeStationStatus.Battery; // 离线 + default: return ChargeStationStatus.Idle; + } + } + + /// + /// 更新标题显示筛选信息 + /// + private void UpdateTitleWithFilter(int displayCount) + { + var totalCount = dataService.GetAllStations().Count; + if (cmbStatusFilter != null && cmbStatusFilter.SelectedIndex > 0) + { + this.Text = $"充电桩管理系统 - 显示: {displayCount}/{totalCount} ({cmbStatusFilter.Text})"; + } + else + { + this.Text = $"充电桩管理系统 - 总数: {totalCount}"; + } + } + + /// + /// 更新统计信息 + /// + private void UpdateStatistics() + { + var stations = dataService.GetAllStations(); + var total = stations.Count; + var idle = stations.Count(s => s.Status == ChargeStationStatus.Idle); + var charging = stations.Count(s => s.Status == ChargeStationStatus.Charging); + var fault = stations.Count(s => s.Status == ChargeStationStatus.Fault); + var offline = stations.Count(s => s.Status == ChargeStationStatus.Battery); + + lblStatistics.Text = $"总数: {total} | 空闲: {idle} | 充电中: {charging} | 故障: {fault} | AGV电池已接入: {offline}"; + } + + /// + /// 获取状态文本 + /// + private string GetStatusText(ChargeStationStatus status) + { + switch (status) + { + case ChargeStationStatus.Idle: return "空闲"; + case ChargeStationStatus.Charging: return "充电中"; + case ChargeStationStatus.Fault: return "故障"; + case ChargeStationStatus.Battery: return "AGV电池已接入"; + default: return "未知"; + } + } + + /// + /// 格式化时间为 mm:ss 格式 + /// + private string FormatTimeToMinuteSecond(DateTime? dateTime) + { + if (dateTime == null) + { + return "--:--"; + } + return dateTime.Value.ToString("mm:ss"); + } + + /// + /// 格式化机构伸缩状态显示 + /// + private string FormatMechanismStatusDisplay(MechanismStatus status) + { + switch (status) + { + case MechanismStatus.Extended: + return "◆ 伸出"; + case MechanismStatus.Retracted: + return "◇ 缩回"; + case MechanismStatus.Extending: + return "▶ 运动中"; + default: + return "? 未知"; + } + } + + /// + /// 格式化充电指令状态显示 + /// + private string FormatChargeCommandStatusDisplay(ChargeCommandStatus status) + { + switch (status) + { + case ChargeCommandStatus.Stopped: + return "◯ 停止"; + case ChargeCommandStatus.Started: + return "▶ 启动"; + default: + return "◯ 停止"; + } + } + + /// + /// 格式化通讯状态显示 + /// + private string FormatCommStatusDisplay(CommunicationStatus status) + { + switch (status) + { + case CommunicationStatus.Normal: + return "✓ 正常"; + case CommunicationStatus.Delayed: + return "⚠ 延迟"; + case CommunicationStatus.Timeout: + return "✗ 超时"; + case CommunicationStatus.Disconnected: + return "✗ 断开"; + case CommunicationStatus.Error: + return "✗ 错误"; + case CommunicationStatus.Unknown: + default: + return "? 未知"; + } + } + + /// + /// 格式化报警信息显示 + /// + private string FormatAlarmDisplay(ChargeStation station) + { + if (!station.HasAlarm) + { + return "正常"; + } + + string levelText = GetAlarmLevelText(station.AlarmLevel); + if (string.IsNullOrWhiteSpace(station.AlarmMessage)) + { + return $"【{levelText}】"; + } + + return $"{station.AlarmMessage}"; + } + + /// + /// 获取报警级别文本 + /// + private string GetAlarmLevelText(AlarmLevel level) + { + switch (level) + { + case AlarmLevel.None: return "无"; + case AlarmLevel.Low: return "低"; + case AlarmLevel.Medium: return "中"; + case AlarmLevel.High: return "高"; + case AlarmLevel.Critical: return "严重"; + default: return "未知"; + } + } + + /// + /// 获取类型文本 + /// + private string GetTypeText(ChargeStationType type) + { + switch (type) + { + case ChargeStationType.FRLDTall: return "FRLD高款充电桩"; + case ChargeStationType.FRLDShort: return "FRLD矮款充电桩"; + case ChargeStationType.MuXing: return "牧星充电桩"; + default: return "未知"; + } + } + + /// + /// 获取充电方式文本 + /// + private string GetChargeMethodText(ChargeMethodType method) + { + switch (method) + { + case ChargeMethodType.Ground: return "地充"; + case ChargeMethodType.Rear: return "尾充"; + case ChargeMethodType.Side: return "侧充"; + default: return "未知"; + } + } + + /// + /// 设置编辑模式 + /// + /// + /// 清空编辑区 + /// + private void ClearEditFields() + { + selectedStation = null; + txtStationId.Text = ""; // 手动输入编号 + txtName.Text = ""; + cmbType.SelectedIndex = 1; + cmbChargeMethod.SelectedIndex = 0; // 默认地充 + chargeCarType.SelectedIndex = 0; + // 触发充电方式改变事件,更新"屏蔽机构状态交互"的可见性 + cmbChargeMethod_SelectedIndexChanged(null, null); + + txtIpAddress.Text = "192.168."; + numPort.Value = 2000; + numVoltage.Value = 48; + numCurrent.Value = 32; + chkEnabled.Checked = true; + chkShieldSiteMechanismStatus.Checked = false; + numSiteId.Value = 0; + txtRemarks.Text = ""; + + // 清空实时状态显示 + ClearRealTimeInfo(); + + // 新增模式:所有字段可编辑 + SetEditMode(true); + btnSave.Text = "保存"; + btnDelete.Enabled = false; + } + + /// + /// 清空实时状态显示区域 + /// + private void ClearRealTimeInfo() + { + lblCurrentVehicleValue.Text = "-"; + lblCurrentVehicleValue.ForeColor = Color.Gray; + + lblBatteryLevelValue.Text = "-"; + lblBatteryLevelValue.ForeColor = Color.Gray; + + lblRealTimeVoltageValue.Text = "0.0 V"; + lblRealTimeVoltageValue.ForeColor = Color.Gray; + + lblRealTimeCurrentValue.Text = "0.0 A"; + lblRealTimeCurrentValue.ForeColor = Color.Gray; + + lblCommStatusValue.Text = "? 未知"; + lblCommStatusValue.ForeColor = Color.Gray; + + lblChargeCommandStatusValue.Text = "◯ 停止"; + lblChargeCommandStatusValue.ForeColor = Color.Gray; + + lblMechanismStatusValue.Text = "? 未知"; + lblMechanismStatusValue.ForeColor = Color.Gray; + + lblAlarmValue.Text = "-"; + lblAlarmValue.ForeColor = Color.Gray; + } + + /// + /// 设置编辑模式 + /// + /// true=可编辑,false=只读 + private void SetEditMode(bool editable, bool isList = false) + { + // 编号在新增时可编辑,编辑时只读 + if (selectedStation == null) + { + // 新增模式:编号可编辑 + txtStationId.ReadOnly = false; + txtStationId.BackColor = Color.White; + } + else + { + // 编辑模式:编号只读 + txtStationId.ReadOnly = true; + txtStationId.BackColor = Color.LightGray; + } + + // 其他字段根据参数设置 + txtName.ReadOnly = !editable; + cmbType.Enabled = isList ? false : editable; + cmbChargeMethod.Enabled = editable; + txtIpAddress.ReadOnly = !editable; + numPort.ReadOnly = !editable; + numVoltage.ReadOnly = !editable; + numCurrent.ReadOnly = !editable; + chkEnabled.Enabled = editable; + chkShieldSiteMechanismStatus.Enabled = editable; + numSiteId.ReadOnly = !editable; + txtRemarks.ReadOnly = !editable; + + // 设置背景颜色 + if (!editable) + { + txtName.BackColor = Color.WhiteSmoke; + txtIpAddress.BackColor = Color.WhiteSmoke; + txtRemarks.BackColor = Color.WhiteSmoke; + } + else + { + txtName.BackColor = Color.White; + txtIpAddress.BackColor = Color.White; + txtRemarks.BackColor = Color.White; + } + + // 控制按钮状态 + btnSave.Enabled = editable; + } + + /// + /// 从编辑区创建充电桩对象 + /// + private ChargeStation CreateStationFromFields() + { + //var station = selectedStation ?? new ChargeStation(); + var station = new ChargeStation(); + station.StationId = txtStationId.Text.Trim(); + station.Name = txtName.Text.Trim(); + station.Type = (ChargeStationType)cmbType.SelectedIndex; + station.ChargeMethod = (ChargeMethodType)cmbChargeMethod.SelectedIndex; + station.IpAddress = txtIpAddress.Text.Trim(); + station.Port = (int)numPort.Value; + station.SetVoltage = (double)numVoltage.Value; + station.SetElectricCurrent = (double)numCurrent.Value; + station.Enabled = chkEnabled.Checked; + station.ShieldSiteMechanismStatus = chkShieldSiteMechanismStatus.Checked; + station.GroupCarType = (ChargeStationCarType)chargeCarType.SelectedIndex; + station.SiteId = numSiteId.Value > 0 ? (int?)numSiteId.Value : null; + station.Remarks = txtRemarks.Text.Trim(); + + return station; + } + + /// + /// 加载充电桩到编辑区 + /// + private void LoadStationToFields(ChargeStation station) + { + selectedStation = station; + + // 加载基本信息(可编辑部分) + txtStationId.Text = station.StationId; + txtName.Text = station.Name; + cmbType.SelectedIndex = (int)station.Type; + cmbChargeMethod.SelectedIndex = (int)station.ChargeMethod; + + // 触发充电方式改变事件,更新"屏蔽机构状态交互"的可见性 + cmbChargeMethod_SelectedIndexChanged(null, null); + + txtIpAddress.Text = station.IpAddress; + numPort.Value = station.Port; + numVoltage.Value = (decimal)station.SetVoltage; + numCurrent.Value = (decimal)station.SetElectricCurrent; + chkEnabled.Checked = station.Enabled; + chkShieldSiteMechanismStatus.Checked = station.ShieldSiteMechanismStatus; + chargeCarType.SelectedIndex = (int)station.GroupCarType; + numSiteId.Value = station.SiteId ?? 0; + txtRemarks.Text = station.Remarks ?? ""; + + // 加载实时状态信息(只读部分) + LoadRealTimeInfo(station); + + // 查看模式:所有字段只读 + SetEditMode(false); + btnSave.Text = "修改"; + btnDelete.Enabled = true; + } + + /// + /// 加载实时状态信息到显示区域 + /// + private void LoadRealTimeInfo(ChargeStation station) + { + // 当前车辆 + lblCurrentVehicleValue.Text = string.IsNullOrWhiteSpace(station.CurrentVehicle) ? "-" : station.CurrentVehicle; + + // 电量 + if (station.BatteryLevel > 0) + { + lblBatteryLevelValue.Text = $"{station.BatteryLevel:F1}%"; + if (station.BatteryLevel >= 80) + { + lblBatteryLevelValue.ForeColor = Color.FromArgb(76, 175, 80); // 绿色 + } + else if (station.BatteryLevel >= 50) + { + lblBatteryLevelValue.ForeColor = Color.FromArgb(33, 150, 243); // 蓝色 + } + else if (station.BatteryLevel >= 20) + { + lblBatteryLevelValue.ForeColor = Color.FromArgb(255, 152, 0); // 橙色 + } + else + { + lblBatteryLevelValue.ForeColor = Color.FromArgb(244, 67, 54); // 红色 + } + } + else + { + lblBatteryLevelValue.Text = "-"; + lblBatteryLevelValue.ForeColor = Color.Gray; + } + + // 实时电压 + lblRealTimeVoltageValue.Text = $"{station.RealTimeVoltage:F1} V"; + lblRealTimeVoltageValue.ForeColor = station.RealTimeVoltage > 0 + ? Color.FromArgb(33, 150, 243) // 蓝色 + : Color.Gray; + + // 实时电流 + lblRealTimeCurrentValue.Text = $"{station.RealTimeCurrent:F1} A"; + lblRealTimeCurrentValue.ForeColor = station.RealTimeCurrent > 0 + ? Color.FromArgb(33, 150, 243) // 蓝色 + : Color.Gray; + + // 通讯状态 + lblCommStatusValue.Text = FormatCommStatusDisplay(station.CommStatus); + switch (station.CommStatus) + { + case CommunicationStatus.Normal: + lblCommStatusValue.ForeColor = Color.FromArgb(76, 175, 80); // 绿色 + break; + case CommunicationStatus.Delayed: + lblCommStatusValue.ForeColor = Color.FromArgb(255, 193, 7); // 黄色 + break; + case CommunicationStatus.Timeout: + case CommunicationStatus.Disconnected: + case CommunicationStatus.Error: + lblCommStatusValue.ForeColor = Color.FromArgb(244, 67, 54); // 红色 + break; + default: + lblCommStatusValue.ForeColor = Color.Gray; + break; + } + + // 充电指令状态 + lblChargeCommandStatusValue.Text = FormatChargeCommandStatusDisplay(station.ChargeCommandStatus); + lblChargeCommandStatusValue.ForeColor = station.ChargeCommandStatus == ChargeCommandStatus.Started + ? Color.FromArgb(76, 175, 80) // 绿色 + : Color.Gray; + + // 机构状态 + lblMechanismStatusValue.Text = FormatMechanismStatusDisplay(station.MechanismStatus); + switch (station.MechanismStatus) + { + + case MechanismStatus.Retracted: + lblMechanismStatusValue.ForeColor = Color.FromArgb(76, 175, 80); // 绿色 + break; + case MechanismStatus.Extending: + lblMechanismStatusValue.ForeColor = Color.FromArgb(33, 150, 243); // 蓝色 + break; + case MechanismStatus.Extended: + lblMechanismStatusValue.ForeColor = Color.FromArgb(255, 0, 0); // 蓝色 + break; + default: + lblMechanismStatusValue.ForeColor = Color.Gray; + break; + } + + // 报警信息 + if (station.HasAlarm) + { + string levelText = ""; + switch (station.AlarmLevel) + { + case AlarmLevel.Critical: + levelText = "严重"; + lblAlarmValue.ForeColor = Color.FromArgb(183, 28, 28); // 深红色 + break; + case AlarmLevel.High: + levelText = "高"; + lblAlarmValue.ForeColor = Color.FromArgb(244, 67, 54); // 红色 + break; + case AlarmLevel.Medium: + levelText = "中"; + lblAlarmValue.ForeColor = Color.FromArgb(255, 152, 0); // 橙色 + break; + case AlarmLevel.Low: + levelText = "低"; + lblAlarmValue.ForeColor = Color.FromArgb(255, 193, 7); // 黄色 + break; + default: + levelText = "未知"; + lblAlarmValue.ForeColor = Color.Gray; + break; + } + lblAlarmValue.Text = $"【{levelText}】{station.AlarmMessage}"; + } + else + { + lblAlarmValue.Text = "正常"; + lblAlarmValue.ForeColor = Color.FromArgb(76, 175, 80); // 绿色 + } + } + + + // ==================== 事件处理 ==================== + + /// + /// 充电方式改变事件 - 控制"屏蔽机构状态交互"选项的显示 + /// + private void cmbChargeMethod_SelectedIndexChanged(object sender, EventArgs e) + { + // 只有侧充(Side=2)时才显示"屏蔽机构状态交互"选项 + bool isSideCharge = cmbChargeMethod.SelectedIndex == (int)ChargeMethodType.Side; + chkShieldSiteMechanismStatus.Visible = isSideCharge; + + // 如果不是侧充,自动取消勾选 + if (!isSideCharge) + { + chkShieldSiteMechanismStatus.Checked = false; + } + } + + private void btnSave_Click(object sender, EventArgs e) + { + try + { + // 如果当前是只读模式(查看模式),点击"修改"按钮切换到编辑模式 + if (btnSave.Text == "修改") + { + SetEditMode(true); + btnSave.Text = "保存"; + return; + } + + // 以下是保存逻辑 + // 充电桩编号验证:1-99之间的数字 + string stationId = txtStationId.Text.Trim(); + if (string.IsNullOrEmpty(stationId)) + { + MessageBox.Show("请输入充电桩编号(1-99)", "验证失败", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + txtStationId.Focus(); + return; + } + + // 验证是否为数字且在1-99范围内 + if (!int.TryParse(stationId, out int stationNumber) || stationNumber < 1 || stationNumber > 99) + { + MessageBox.Show("充电桩编号必须是1-99之间的数字", "验证失败", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + txtStationId.Focus(); + return; + } + + // 检查编号是否重复(新增时) + if (selectedStation == null) + { + var existingStations = dataService.GetAllStations(); + if (existingStations.Any(s => s.StationId == stationId)) + { + MessageBox.Show($"充电桩编号 {stationId} 已存在,请输入其他编号", "验证失败", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + txtStationId.Focus(); + return; + } + } + + + var Site = SimpleLib.GetSite((int)numSiteId.Value); + if (Site == null) //判断站点是否在S里。 + { + MessageBox.Show($"站点ID{numSiteId.Value} 未在调度系统上", "验证失败", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + numSiteId.Focus(); + return; + } + + var station = CreateStationFromFields(); + string errorMessage; + + bool success; + if (selectedStation == null) + { + // 新增 + success = dataService.AddStation(station, out errorMessage); + } + else + { + // 更新 + success = dataService.UpdateStation(station, out errorMessage, true); + } + + if (success) + { + Site.name = station.Name; + //Site.fields["chargeNum"] = station.StationId; + //Site.fields["stationIP"] = station.IpAddress; + //Site.fields["stationPort"] = station.Port.ToString(); + //switch (station.Type) + //{ + // case ChargeStationType.FRLDTall: + // Site.fields["Charge"] = "FLChargeStation"; + // break; + // case ChargeStationType.FRLDShort: + // Site.fields["Charge"] = "PCBChargeStation"; + // Site.fields["CommunicationType"] = "UDP"; + // break; + // case ChargeStationType.MuXing: + // Site.fields["Charge"] = "MuXingChargeStation"; + // break; + // default: + // break; + //} + Site.fields["setVoltage"] = station.SetVoltage.ToString(); + Site.fields["setElectricCurrent"] = station.SetElectricCurrent.ToString(); + if (!station.Enabled) + { + Site.fields["group"] = "禁用"; + } + else + { + Site.fields["group"] = station.GroupCarType.ToString(); + } + + LoadStations(); + ClearEditFields(); + MessageBox.Show("保存成功", "提示", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show($"保存失败: {errorMessage}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + catch (Exception ex) + { + MessageBox.Show($"保存失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnDelete_Click(object sender, EventArgs e) + { + if (dgvStations.SelectedRows.Count == 0) + { + MessageBox.Show("请先选择要删除的充电桩", "提示", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + var stationId = dgvStations.SelectedRows[0].Cells[0].Value.ToString(); + var stationName = dgvStations.SelectedRows[0].Cells[1].Value.ToString(); + + var result = MessageBox.Show( + $"确定要删除充电桩 [{stationId}] {stationName} 吗?", + "确认删除", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question); + + if (result == DialogResult.Yes) + { + if (dataService.DeleteStation(stationId, out string errorMessage)) + { + + var Site = SimpleLib.GetSite((int)numSiteId.Value); + if (Site != null) //判断站点是否在S里。 + { + Site.name = "NoName"; + Site.fields.Remove("setVoltage"); + Site.fields.Remove("setElectricCurrent"); + Site.fields.Remove("Charge"); + Site.fields.Remove("group"); + + + } + MessageBox.Show("删除成功!", "提示", + MessageBoxButtons.OK, MessageBoxIcon.Information); + LoadStations(); + ClearEditFields(); + } + else + { + MessageBox.Show($"删除失败: {errorMessage}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + } + + private void btnCancel_Click(object sender, EventArgs e) + { + // 如果有选中的充电桩,恢复到只读模式 + //if (selectedStation != null) + //{ + // LoadStationToFields(selectedStation); + //} + //else + { + // 否则清空为新增模式 + ClearEditFields(); + } + } + + private void btnRefresh_Click(object sender, EventArgs e) + { + dataService.Reload(); + LoadStations(); + MessageBox.Show("刷新成功!", "提示", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + private void dgvStations_CellDoubleClick(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex >= 0) + { + var stationId = dgvStations.Rows[e.RowIndex].Cells[0].Value.ToString(); + var station = dataService.GetStationById(stationId); + if (station != null) + { + LoadStationToFields(station); + SetEditMode(true, true); + } + } + } + + + + private void txtSearch_TextChanged(object sender, EventArgs e) + { + ApplyFilters(); + } + + private void cmbStatusFilter_SelectedIndexChanged(object sender, EventArgs e) + { + ApplyFilters(); + } + + /// + /// 应用搜索和状态筛选 + /// + private void ApplyFilters() + { + var stations = dataService.GetAllStations(); + + // 应用搜索筛选 + var searchText = txtSearch.Text.Trim().ToLower(); + if (!string.IsNullOrEmpty(searchText)) + { + stations = stations + .Where(s => s.StationId.ToLower().Contains(searchText) || + s.Name.ToLower().Contains(searchText) || + s.IpAddress.Contains(searchText) || + GetTypeText(s.Type).Contains(searchText)) + .ToList(); + } + + // 应用状态筛选 + if (cmbStatusFilter != null && cmbStatusFilter.SelectedIndex > 0) + { + var filterStatus = GetStatusFromFilterIndex(cmbStatusFilter.SelectedIndex); + stations = stations.Where(s => s.Status == filterStatus).ToList(); + } + + // 显示结果 + dgvStations.Rows.Clear(); + foreach (var station in stations) + { + var index = dgvStations.Rows.Add( + station.StationId, + station.Name, + GetTypeText(station.Type), + GetChargeMethodText(station.ChargeMethod), + //station.IpAddress, + //station.Port, + station.SiteId?.ToString() ?? "", + FormatTimeToMinuteSecond(station.LastSendTime), + FormatTimeToMinuteSecond(station.LastReceiveTime), + FormatCommStatusDisplay(station.CommStatus), + FormatChargeCommandStatusDisplay(station.ChargeCommandStatus), + FormatMechanismStatusDisplay(station.MechanismStatus), + string.IsNullOrWhiteSpace(station.CurrentVehicle) ? "-" : station.CurrentVehicle, + station.BatteryLevel > 0 ? $"{station.BatteryLevel:F1}%" : "-", + FormatAlarmDisplay(station), + //station.SetVoltage, + //station.SetElectricCurrent, + station.RealTimeVoltage.ToString("F1"), + station.RealTimeCurrent.ToString("F1"), + GetStatusText(station.Status), + station.Enabled ? "是" : "否", + station.Remarks + ); + + // 根据状态设置行颜色(扁平化设计) + var row = dgvStations.Rows[index]; + + // 通讯状态列样式设置(第9列) + var commCell = row.Cells[9]; + switch (station.CommStatus) + { + case CommunicationStatus.Normal: + commCell.Style.ForeColor = Color.FromArgb(76, 175, 80); // 绿色 + // commCell.Style.Font = new Font(commCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + break; + case CommunicationStatus.Delayed: + commCell.Style.ForeColor = Color.FromArgb(255, 152, 0); // 橙色 + // commCell.Style.Font = new Font(commCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + break; + case CommunicationStatus.Timeout: + case CommunicationStatus.Disconnected: + commCell.Style.ForeColor = Color.FromArgb(244, 67, 54); // 红色 + // commCell.Style.Font = new Font(commCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + break; + case CommunicationStatus.Unknown: + commCell.Style.ForeColor = Color.FromArgb(158, 158, 158); // 灰色 + break; + } + + // 充电指令状态列样式设置(第10列) + var chargeCommandCell = row.Cells[10]; + switch (station.ChargeCommandStatus) + { + case ChargeCommandStatus.Stopped: + chargeCommandCell.Style.ForeColor = Color.FromArgb(158, 158, 158); // 灰色 + break; + case ChargeCommandStatus.Started: + chargeCommandCell.Style.ForeColor = Color.FromArgb(76, 175, 80); // 绿色 + //chargeCommandCell.Style.Font = new Font(chargeCommandCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + break; + } + + // 机构状态列样式设置(第11列) + var mechanismCell = row.Cells[11]; + switch (station.MechanismStatus) + { + + case MechanismStatus.Retracted: + mechanismCell.Style.ForeColor = Color.FromArgb(76, 175, 80); // 绿色 + // mechanismCell.Style.Font = new Font(mechanismCell.Style.Font ?? mechanismCell.Style.Font, FontStyle.Bold); + break; + case MechanismStatus.Extending: + mechanismCell.Style.ForeColor = Color.FromArgb(33, 150, 243); // 蓝色 + // mechanismCell.Style.Font = new Font(mechanismCell.Style.Font ?? row.DefaultCellStyle.Font, FontStyle.Bold); + break; + } + + // 电量列样式设置(第13列) + if (station.BatteryLevel > 0) + { + var batteryCell = row.Cells[13]; + if (station.BatteryLevel >= 80) + { + batteryCell.Style.ForeColor = Color.FromArgb(76, 175, 80); // 绿色 - 电量充足 + //batteryCell.Style.Font = new Font(batteryCell.Style.Font ?? batteryCell.Style.Font, FontStyle.Bold); + } + else if (station.BatteryLevel >= 50) + { + batteryCell.Style.ForeColor = Color.FromArgb(33, 150, 243); // 蓝色 - 电量中等 + //batteryCell.Style.Font = new Font(batteryCell.Style.Font ?? batteryCell.Style.Font, FontStyle.Bold); + } + else if (station.BatteryLevel >= 20) + { + batteryCell.Style.ForeColor = Color.FromArgb(255, 152, 0); // 橙色 - 电量偏低 + //batteryCell.Style.Font = new Font(batteryCell.Style.Font ?? batteryCell.Style.Font, FontStyle.Bold); + } + else + { + batteryCell.Style.ForeColor = Color.FromArgb(244, 67, 54); // 红色 - 电量低 + //batteryCell.Style.Font = new Font(batteryCell.Style.Font ?? batteryCell.Style.Font, FontStyle.Bold); + } + } + + // 如果有报警,整行显示红色 + if (station.HasAlarm) + { + row.DefaultCellStyle.BackColor = Color.FromArgb(255, 205, 210); // 浅红色背景 #FFCDD2 + row.DefaultCellStyle.ForeColor = Color.FromArgb(198, 40, 40); // 深红色文字 + // row.DefaultCellStyle.Font = new Font(row.DefaultCellStyle.Font, FontStyle.Bold); + } + else + { + // 根据状态设置颜色 + switch (station.Status) + { + case ChargeStationStatus.Idle: + row.DefaultCellStyle.BackColor = Color.FromArgb(232, 245, 233); // 浅绿色 #E8F5E9 + // row.DefaultCellStyle.ForeColor = Color.FromArgb(46, 125, 50); // 深绿色文字 + break; + case ChargeStationStatus.Charging: + row.DefaultCellStyle.BackColor = Color.FromArgb(200, 230, 201); // 亮绿色 #C8E6C9 + // row.DefaultCellStyle.ForeColor = Color.FromArgb(27, 94, 32); // 深绿色文字 + break; + case ChargeStationStatus.Fault: + row.DefaultCellStyle.BackColor = Color.FromArgb(255, 205, 210); // 浅红色 #FFCDD2 + // row.DefaultCellStyle.ForeColor = Color.FromArgb(198, 40, 40); // 深红色文字 + break; + case ChargeStationStatus.Battery: + row.DefaultCellStyle.BackColor = Color.FromArgb(238, 238, 238); // 浅灰色 #EEEEEE + // row.DefaultCellStyle.ForeColor = Color.FromArgb(97, 97, 97); // 深灰色文字 + break; + } + } + } + + // 更新标题和统计 + UpdateTitleWithFilter(stations.Count); + } + + private void btnStrategyConfig_Click(object sender, EventArgs e) + { + try + { + // 打开充电策略配置界面 + var strategyConfigForm = new ChargeStrategyConfigForm(); + strategyConfigForm.ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show($"打开策略配置界面失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnCommMonitor_Click(object sender, EventArgs e) + { + try + { + // 通讯监控窗口仅允许单实例 + if (communicationMonitorForm == null || communicationMonitorForm.IsDisposed) + { + communicationMonitorForm = new CommunicationMonitorForm(); + communicationMonitorForm.FormClosed += (s, args) => communicationMonitorForm = null; + communicationMonitorForm.Show(); + } + else + { + if (communicationMonitorForm.WindowState == FormWindowState.Minimized) + { + communicationMonitorForm.WindowState = FormWindowState.Normal; + } + communicationMonitorForm.BringToFront(); + communicationMonitorForm.Activate(); + } + } + catch (Exception ex) + { + MessageBox.Show($"打开通讯监控界面失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnAlarmConfig_Click(object sender, EventArgs e) + { + try + { + // 打开报警配置界面 + var alarmConfigForm = new AlarmConfigManagementForm(); + alarmConfigForm.ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show($"打开报警配置失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnExport_Click(object sender, EventArgs e) + { + try + { + var saveDialog = new SaveFileDialog + { + Filter = "JSON文件|*.json|CSV文件|*.csv", + FileName = $"ChargeStations_{DateTime.Now:yyyyMMddHHmmss}" + }; + + if (saveDialog.ShowDialog() == DialogResult.OK) + { + var stations = dataService.GetAllStations(); + if (saveDialog.FilterIndex == 1) // JSON + { + var json = Newtonsoft.Json.JsonConvert.SerializeObject(stations, Newtonsoft.Json.Formatting.Indented); + System.IO.File.WriteAllText(saveDialog.FileName, json); + } + else // CSV + { + var csv = "编号,名称,类型,IP地址,端口,电压,电流,功率,状态,启用,停靠车的类型,站点ID,备注\n"; + foreach (var s in stations) + { + csv += $"{s.StationId},{s.Name},{GetTypeText(s.Type)},{s.IpAddress},{s.Port},{s.SetVoltage},{s.SetElectricCurrent},{s.Power},{GetStatusText(s.Status)},{(s.Enabled ? "是" : "否")},{s.GroupCarType},{s.SiteId},{s.Remarks}\n"; + } + System.IO.File.WriteAllText(saveDialog.FileName, csv, System.Text.Encoding.UTF8); + } + + MessageBox.Show("导出成功!", "提示", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + catch (Exception ex) + { + MessageBox.Show($"导出失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} + + + diff --git a/StandardScene.Core/Charge/ChargeStationManagementForm.resx b/StandardScene.Core/Charge/ChargeStationManagementForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/StandardScene.Core/Charge/ChargeStationManagementForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/StandardScene.Core/Charge/ChargeStrategyConfig.cs b/StandardScene.Core/Charge/ChargeStrategyConfig.cs new file mode 100644 index 0000000..4730dc2 --- /dev/null +++ b/StandardScene.Core/Charge/ChargeStrategyConfig.cs @@ -0,0 +1,309 @@ +using System; +using System.ComponentModel; + +namespace StandardScene.Charge +{ + /// + /// 充电策略配置 + /// + public class ChargeStrategyConfig + { + #region SOC 参数 + + /// + /// 必充电量 (%) + /// + [Description("必充电量")] + [DisplayName("必充电量(%)")] + public double MustChargeSoc { get; set; } + + /// + /// 空闲充电电量 (%) + /// + [Description("空闲充电电量")] + [DisplayName("空闲充电电量(%)")] + public double IdleChargeSoc { get; set; } + + /// + /// 任务可用电量 (%) + /// + [Description("任务可用电量")] + [DisplayName("任务可用电量(%)")] + public double TaskAvailableSoc { get; set; } + + /// + /// 满电电量 (%) + /// + [Description("满电电量")] + [DisplayName("满电电量(%)")] + public double FullChargeSoc { get; set; } + + /// + /// 允许中断电量 (%) + /// + [Description("允许中断电量")] + [DisplayName("允许中断电量(%)")] + public double AllowInterruptSoc { get; set; } + + #endregion + + #region 时间参数 + + /// + /// 空闲充电时间 (秒) + /// + [Description("空闲充电时间")] + [DisplayName("空闲充电时间(秒)")] + public double IdleChargeSeconds { get; set; } + + /// + /// 空闲时间 (秒) + /// + [Description("空闲时间")] + [DisplayName("空闲时间(秒)")] + public double IdleSeconds { get; set; } + + /// + /// 必充时间 (秒) + /// + [Description("必充时间")] + [DisplayName("必充时间(秒)")] + public double MustChargeSeconds { get; set; } + + /// + /// 补电时间 (分钟) + /// + [Description("补电时间")] + [DisplayName("补电时间(分钟)")] + public double TopUpMinutes { get; set; } + + #endregion + + #region 任务参数 + + /// + /// 允许空闲车充电的最小任务数 + /// + [Description("允许空闲车充电的最小任务数")] + [DisplayName("最小任务数")] + public int MinAllowFreeCarToChargeTaskCnt { get; set; } + + #endregion + + #region 开关参数 + + /// + /// 允许中断充电任务 + /// + [Description("允许中断充电任务")] + [DisplayName("允许中断任务")] + public bool AllowInterruptTask { get; set; } + + /// + /// 优先使用低电量车辆充电 + /// + [Description("优先使用低电量车辆充电")] + [DisplayName("优先低电量充电")] + public bool UseLowerSocForCharge { get; set; } + + /// + /// 启用充电错误检测 + /// + [Description("启用充电错误检测")] + [DisplayName("错误检测")] + public bool EnableErrorChargeDetection { get; set; } + + /// + /// 使用充电站点筛选 + /// + [Description("使用充电站点筛选")] + [DisplayName("站点筛选")] + public bool UseChargeSiteFilter { get; set; } + + #endregion + + #region 构造函数 + + public ChargeStrategyConfig() + { + // 使用默认值初始化 + SetDefaults(); + } + + /// + /// 设置默认值 + /// + private void SetDefaults() + { + // SOC 参数默认值 + MustChargeSoc = 20; + IdleChargeSoc = 90; + TaskAvailableSoc = 60; + FullChargeSoc = 90; + AllowInterruptSoc = 45; + + // 时间参数默认值 + IdleChargeSeconds = 30; + IdleSeconds = 5; + MustChargeSeconds = 60; + TopUpMinutes = 5; + + // 任务参数默认值 + MinAllowFreeCarToChargeTaskCnt = 0; + + // 开关参数默认值 + AllowInterruptTask = false; + UseLowerSocForCharge = true; + EnableErrorChargeDetection = false; + UseChargeSiteFilter = false; + } + + /// + /// 创建默认配置 + /// + public static ChargeStrategyConfig CreateDefault() + { + return new ChargeStrategyConfig(); + } + + #endregion + + #region 验证 + + /// + /// 验证配置是否有效 + /// + public bool Validate(out string errorMessage) + { + // 验证 SOC 范围 + if (MustChargeSoc < 0 || MustChargeSoc > 100) + { + errorMessage = "必充电量必须在 0-100 之间"; + return false; + } + + if (IdleChargeSoc < 0 || IdleChargeSoc > 100) + { + errorMessage = "空闲充电电量必须在 0-100 之间"; + return false; + } + + if (TaskAvailableSoc < 0 || TaskAvailableSoc > 100) + { + errorMessage = "任务可用电量必须在 0-100 之间"; + return false; + } + + if (FullChargeSoc < 0 || FullChargeSoc > 100) + { + errorMessage = "满电电量必须在 0-100 之间"; + return false; + } + + if (AllowInterruptSoc < 0 || AllowInterruptSoc > 100) + { + errorMessage = "允许中断电量必须在 0-100 之间"; + return false; + } + + // 验证 SOC 逻辑关系 + if (MustChargeSoc >= IdleChargeSoc) + { + errorMessage = "必充电量必须小于空闲充电电量"; + return false; + } + + if (TaskAvailableSoc <= MustChargeSoc) + { + errorMessage = "任务可用电量必须大于必充电量"; + return false; + } + + if (FullChargeSoc < IdleChargeSoc) + { + errorMessage = "满电电量必须大于等于空闲充电电量"; + return false; + } + + if (AllowInterruptSoc <= MustChargeSoc) + { + errorMessage = "允许中断电量必须大于必充电量"; + return false; + } + + // 验证时间参数 + if (IdleChargeSeconds < 0) + { + errorMessage = "空闲充电时间不能为负数"; + return false; + } + + if (IdleSeconds < 0) + { + errorMessage = "空闲时间不能为负数"; + return false; + } + + if (MustChargeSeconds < 0) + { + errorMessage = "必充时间不能为负数"; + return false; + } + + if (TopUpMinutes < 0) + { + errorMessage = "补电时间不能为负数"; + return false; + } + + // 验证任务参数 + if (MinAllowFreeCarToChargeTaskCnt < 0) + { + errorMessage = "最小任务数不能为负数"; + return false; + } + + errorMessage = string.Empty; + return true; + } + + #endregion + + #region 辅助方法 + + /// + /// 克隆配置 + /// + public ChargeStrategyConfig Clone() + { + return new ChargeStrategyConfig + { + MustChargeSoc = this.MustChargeSoc, + IdleChargeSoc = this.IdleChargeSoc, + TaskAvailableSoc = this.TaskAvailableSoc, + FullChargeSoc = this.FullChargeSoc, + AllowInterruptSoc = this.AllowInterruptSoc, + IdleChargeSeconds = this.IdleChargeSeconds, + IdleSeconds = this.IdleSeconds, + MustChargeSeconds = this.MustChargeSeconds, + TopUpMinutes = this.TopUpMinutes, + MinAllowFreeCarToChargeTaskCnt = this.MinAllowFreeCarToChargeTaskCnt, + AllowInterruptTask = this.AllowInterruptTask, + UseLowerSocForCharge = this.UseLowerSocForCharge, + EnableErrorChargeDetection = this.EnableErrorChargeDetection, + UseChargeSiteFilter = this.UseChargeSiteFilter + }; + } + + /// + /// 转换为字符串 + /// + public override string ToString() + { + return $"充电策略配置 [必充:{MustChargeSoc}%, 空闲充:{IdleChargeSoc}%, 任务可用:{TaskAvailableSoc}%]"; + } + + #endregion + } +} + diff --git a/StandardScene.Core/Charge/ChargeStrategyConfigForm.Designer.cs b/StandardScene.Core/Charge/ChargeStrategyConfigForm.Designer.cs new file mode 100644 index 0000000..62ad18f --- /dev/null +++ b/StandardScene.Core/Charge/ChargeStrategyConfigForm.Designer.cs @@ -0,0 +1,572 @@ +namespace StandardScene.Charge +{ + partial class ChargeStrategyConfigForm + { + private System.ComponentModel.IContainer components = null; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + private void InitializeComponent() + { + // 创建所有控件实例 + this.pnlMain = new System.Windows.Forms.Panel(); + this.pnlBottom = new System.Windows.Forms.Panel(); + this.grpSocParams = new System.Windows.Forms.GroupBox(); + this.grpTimeParams = new System.Windows.Forms.GroupBox(); + this.grpTaskParams = new System.Windows.Forms.GroupBox(); + this.grpSwitchParams = new System.Windows.Forms.GroupBox(); + + // SOC 参数控件 + this.lblMustChargeSoc = new System.Windows.Forms.Label(); + this.numMustChargeSoc = new System.Windows.Forms.NumericUpDown(); + this.lblIdleChargeSoc = new System.Windows.Forms.Label(); + this.numIdleChargeSoc = new System.Windows.Forms.NumericUpDown(); + this.lblTaskAvailableSoc = new System.Windows.Forms.Label(); + this.numTaskAvailableSoc = new System.Windows.Forms.NumericUpDown(); + this.lblFullChargeSoc = new System.Windows.Forms.Label(); + this.numFullChargeSoc = new System.Windows.Forms.NumericUpDown(); + this.lblAllowInterruptSoc = new System.Windows.Forms.Label(); + this.numAllowInterruptSoc = new System.Windows.Forms.NumericUpDown(); + + // 时间参数控件 + this.lblIdleChargeSeconds = new System.Windows.Forms.Label(); + this.numIdleChargeSeconds = new System.Windows.Forms.NumericUpDown(); + this.lblIdleSeconds = new System.Windows.Forms.Label(); + this.numIdleSeconds = new System.Windows.Forms.NumericUpDown(); + this.lblMustChargeSeconds = new System.Windows.Forms.Label(); + this.numMustChargeSeconds = new System.Windows.Forms.NumericUpDown(); + this.lblTopUpMinutes = new System.Windows.Forms.Label(); + this.numTopUpMinutes = new System.Windows.Forms.NumericUpDown(); + + // 任务参数控件 + this.lblMinAllowFreeCarToChargeTaskCnt = new System.Windows.Forms.Label(); + this.numMinAllowFreeCarToChargeTaskCnt = new System.Windows.Forms.NumericUpDown(); + + // 开关参数控件 + this.chkAllowInterruptTask = new System.Windows.Forms.CheckBox(); + this.chkUseLowerSocForCharge = new System.Windows.Forms.CheckBox(); + this.chkEnableErrorChargeDetection = new System.Windows.Forms.CheckBox(); + this.chkUseChargeSiteFilter = new System.Windows.Forms.CheckBox(); + + // 底部控件 + this.lblStatus = new System.Windows.Forms.Label(); + this.btnSave = new System.Windows.Forms.Button(); + this.btnApply = new System.Windows.Forms.Button(); + this.btnRestoreDefaults = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.pnlMain.SuspendLayout(); + this.grpSwitchParams.SuspendLayout(); + this.grpTaskParams.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numMinAllowFreeCarToChargeTaskCnt)).BeginInit(); + this.grpTimeParams.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numTopUpMinutes)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numMustChargeSeconds)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numIdleSeconds)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numIdleChargeSeconds)).BeginInit(); + this.grpSocParams.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numAllowInterruptSoc)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numFullChargeSoc)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numTaskAvailableSoc)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numIdleChargeSoc)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numMustChargeSoc)).BeginInit(); + this.pnlBottom.SuspendLayout(); + this.SuspendLayout(); + // + // pnlMain + // + this.pnlMain.AutoScroll = true; + this.pnlMain.Controls.Add(this.grpSwitchParams); + this.pnlMain.Controls.Add(this.grpTaskParams); + this.pnlMain.Controls.Add(this.grpTimeParams); + this.pnlMain.Controls.Add(this.grpSocParams); + this.pnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlMain.Location = new System.Drawing.Point(0, 0); + this.pnlMain.Name = "pnlMain"; + this.pnlMain.Padding = new System.Windows.Forms.Padding(10); + this.pnlMain.Size = new System.Drawing.Size(784, 631); + this.pnlMain.TabIndex = 0; + // + // grpSwitchParams + // + this.grpSwitchParams.Controls.Add(this.chkUseChargeSiteFilter); + this.grpSwitchParams.Controls.Add(this.chkEnableErrorChargeDetection); + this.grpSwitchParams.Controls.Add(this.chkUseLowerSocForCharge); + this.grpSwitchParams.Controls.Add(this.chkAllowInterruptTask); + this.grpSwitchParams.Dock = System.Windows.Forms.DockStyle.Top; + this.grpSwitchParams.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold); + this.grpSwitchParams.Location = new System.Drawing.Point(10, 460); + this.grpSwitchParams.Name = "grpSwitchParams"; + this.grpSwitchParams.Padding = new System.Windows.Forms.Padding(10); + this.grpSwitchParams.Size = new System.Drawing.Size(764, 150); + this.grpSwitchParams.TabIndex = 3; + this.grpSwitchParams.TabStop = false; + this.grpSwitchParams.Text = "开关参数"; + // + // chkUseChargeSiteFilter + // + this.chkUseChargeSiteFilter.AutoSize = true; + this.chkUseChargeSiteFilter.Font = new System.Drawing.Font("微软雅黑", 9F); + this.chkUseChargeSiteFilter.Location = new System.Drawing.Point(400, 80); + this.chkUseChargeSiteFilter.Name = "chkUseChargeSiteFilter"; + this.chkUseChargeSiteFilter.Size = new System.Drawing.Size(147, 24); + this.chkUseChargeSiteFilter.TabIndex = 3; + this.chkUseChargeSiteFilter.Text = "使用充电站点筛选"; + this.chkUseChargeSiteFilter.UseVisualStyleBackColor = true; + // + // chkEnableErrorChargeDetection + // + this.chkEnableErrorChargeDetection.AutoSize = true; + this.chkEnableErrorChargeDetection.Font = new System.Drawing.Font("微软雅黑", 9F); + this.chkEnableErrorChargeDetection.Location = new System.Drawing.Point(30, 80); + this.chkEnableErrorChargeDetection.Name = "chkEnableErrorChargeDetection"; + this.chkEnableErrorChargeDetection.Size = new System.Drawing.Size(147, 24); + this.chkEnableErrorChargeDetection.TabIndex = 2; + this.chkEnableErrorChargeDetection.Text = "启用充电错误检测"; + this.chkEnableErrorChargeDetection.UseVisualStyleBackColor = true; + // + // chkUseLowerSocForCharge + // + this.chkUseLowerSocForCharge.AutoSize = true; + this.chkUseLowerSocForCharge.Font = new System.Drawing.Font("微软雅黑", 9F); + this.chkUseLowerSocForCharge.Location = new System.Drawing.Point(400, 40); + this.chkUseLowerSocForCharge.Name = "chkUseLowerSocForCharge"; + this.chkUseLowerSocForCharge.Size = new System.Drawing.Size(195, 24); + this.chkUseLowerSocForCharge.TabIndex = 1; + this.chkUseLowerSocForCharge.Text = "优先使用低电量车辆充电"; + this.chkUseLowerSocForCharge.UseVisualStyleBackColor = true; + // + // chkAllowInterruptTask + // + this.chkAllowInterruptTask.AutoSize = true; + this.chkAllowInterruptTask.Font = new System.Drawing.Font("微软雅黑", 9F); + this.chkAllowInterruptTask.Location = new System.Drawing.Point(30, 40); + this.chkAllowInterruptTask.Name = "chkAllowInterruptTask"; + this.chkAllowInterruptTask.Size = new System.Drawing.Size(147, 24); + this.chkAllowInterruptTask.TabIndex = 0; + this.chkAllowInterruptTask.Text = "允许中断充电任务"; + this.chkAllowInterruptTask.UseVisualStyleBackColor = true; + // + // grpTaskParams + // + this.grpTaskParams.Controls.Add(this.numMinAllowFreeCarToChargeTaskCnt); + this.grpTaskParams.Controls.Add(this.lblMinAllowFreeCarToChargeTaskCnt); + this.grpTaskParams.Dock = System.Windows.Forms.DockStyle.Top; + this.grpTaskParams.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold); + this.grpTaskParams.Location = new System.Drawing.Point(10, 370); + this.grpTaskParams.Name = "grpTaskParams"; + this.grpTaskParams.Padding = new System.Windows.Forms.Padding(10); + this.grpTaskParams.Size = new System.Drawing.Size(764, 90); + this.grpTaskParams.TabIndex = 2; + this.grpTaskParams.TabStop = false; + this.grpTaskParams.Text = "任务参数"; + // + // numMinAllowFreeCarToChargeTaskCnt + // + this.numMinAllowFreeCarToChargeTaskCnt.Font = new System.Drawing.Font("微软雅黑", 9F); + this.numMinAllowFreeCarToChargeTaskCnt.Location = new System.Drawing.Point(250, 40); + this.numMinAllowFreeCarToChargeTaskCnt.Maximum = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.numMinAllowFreeCarToChargeTaskCnt.Name = "numMinAllowFreeCarToChargeTaskCnt"; + this.numMinAllowFreeCarToChargeTaskCnt.Size = new System.Drawing.Size(120, 27); + this.numMinAllowFreeCarToChargeTaskCnt.TabIndex = 1; + // + // lblMinAllowFreeCarToChargeTaskCnt + // + this.lblMinAllowFreeCarToChargeTaskCnt.AutoSize = true; + this.lblMinAllowFreeCarToChargeTaskCnt.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblMinAllowFreeCarToChargeTaskCnt.Location = new System.Drawing.Point(30, 42); + this.lblMinAllowFreeCarToChargeTaskCnt.Name = "lblMinAllowFreeCarToChargeTaskCnt"; + this.lblMinAllowFreeCarToChargeTaskCnt.Size = new System.Drawing.Size(207, 20); + this.lblMinAllowFreeCarToChargeTaskCnt.TabIndex = 0; + this.lblMinAllowFreeCarToChargeTaskCnt.Text = "允许空闲车充电的最小任务数:"; + // + // grpTimeParams + // + this.grpTimeParams.Controls.Add(this.numTopUpMinutes); + this.grpTimeParams.Controls.Add(this.lblTopUpMinutes); + this.grpTimeParams.Controls.Add(this.numMustChargeSeconds); + this.grpTimeParams.Controls.Add(this.lblMustChargeSeconds); + this.grpTimeParams.Controls.Add(this.numIdleSeconds); + this.grpTimeParams.Controls.Add(this.lblIdleSeconds); + this.grpTimeParams.Controls.Add(this.numIdleChargeSeconds); + this.grpTimeParams.Controls.Add(this.lblIdleChargeSeconds); + this.grpTimeParams.Dock = System.Windows.Forms.DockStyle.Top; + this.grpTimeParams.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold); + this.grpTimeParams.Location = new System.Drawing.Point(10, 210); + this.grpTimeParams.Name = "grpTimeParams"; + this.grpTimeParams.Padding = new System.Windows.Forms.Padding(10); + this.grpTimeParams.Size = new System.Drawing.Size(764, 160); + this.grpTimeParams.TabIndex = 1; + this.grpTimeParams.TabStop = false; + this.grpTimeParams.Text = "时间参数"; + // + // numTopUpMinutes + // + this.numTopUpMinutes.DecimalPlaces = 1; + this.numTopUpMinutes.Font = new System.Drawing.Font("微软雅黑", 9F); + this.numTopUpMinutes.Location = new System.Drawing.Point(580, 100); + this.numTopUpMinutes.Maximum = new decimal(new int[] { + 1000, + 0, + 0, + 0}); + this.numTopUpMinutes.Name = "numTopUpMinutes"; + this.numTopUpMinutes.Size = new System.Drawing.Size(120, 27); + this.numTopUpMinutes.TabIndex = 7; + // + // lblTopUpMinutes + // + this.lblTopUpMinutes.AutoSize = true; + this.lblTopUpMinutes.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblTopUpMinutes.Location = new System.Drawing.Point(400, 102); + this.lblTopUpMinutes.Name = "lblTopUpMinutes"; + this.lblTopUpMinutes.Size = new System.Drawing.Size(159, 20); + this.lblTopUpMinutes.TabIndex = 6; + this.lblTopUpMinutes.Text = "补电时间 (分钟,min):"; + // + // numMustChargeSeconds + // + this.numMustChargeSeconds.DecimalPlaces = 1; + this.numMustChargeSeconds.Font = new System.Drawing.Font("微软雅黑", 9F); + this.numMustChargeSeconds.Location = new System.Drawing.Point(250, 100); + this.numMustChargeSeconds.Maximum = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.numMustChargeSeconds.Name = "numMustChargeSeconds"; + this.numMustChargeSeconds.Size = new System.Drawing.Size(120, 27); + this.numMustChargeSeconds.TabIndex = 5; + // + // lblMustChargeSeconds + // + this.lblMustChargeSeconds.AutoSize = true; + this.lblMustChargeSeconds.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblMustChargeSeconds.Location = new System.Drawing.Point(30, 102); + this.lblMustChargeSeconds.Name = "lblMustChargeSeconds"; + this.lblMustChargeSeconds.Size = new System.Drawing.Size(147, 20); + this.lblMustChargeSeconds.TabIndex = 4; + this.lblMustChargeSeconds.Text = "必充时间 (秒,sec):"; + // + // numIdleSeconds + // + this.numIdleSeconds.DecimalPlaces = 1; + this.numIdleSeconds.Font = new System.Drawing.Font("微软雅黑", 9F); + this.numIdleSeconds.Location = new System.Drawing.Point(580, 40); + this.numIdleSeconds.Maximum = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.numIdleSeconds.Name = "numIdleSeconds"; + this.numIdleSeconds.Size = new System.Drawing.Size(120, 27); + this.numIdleSeconds.TabIndex = 3; + // + // lblIdleSeconds + // + this.lblIdleSeconds.AutoSize = true; + this.lblIdleSeconds.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblIdleSeconds.Location = new System.Drawing.Point(400, 42); + this.lblIdleSeconds.Name = "lblIdleSeconds"; + this.lblIdleSeconds.Size = new System.Drawing.Size(147, 20); + this.lblIdleSeconds.TabIndex = 2; + this.lblIdleSeconds.Text = "空闲时间 (秒,sec):"; + // + // numIdleChargeSeconds + // + this.numIdleChargeSeconds.DecimalPlaces = 1; + this.numIdleChargeSeconds.Font = new System.Drawing.Font("微软雅黑", 9F); + this.numIdleChargeSeconds.Location = new System.Drawing.Point(250, 40); + this.numIdleChargeSeconds.Maximum = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.numIdleChargeSeconds.Name = "numIdleChargeSeconds"; + this.numIdleChargeSeconds.Size = new System.Drawing.Size(120, 27); + this.numIdleChargeSeconds.TabIndex = 1; + // + // lblIdleChargeSeconds + // + this.lblIdleChargeSeconds.AutoSize = true; + this.lblIdleChargeSeconds.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblIdleChargeSeconds.Location = new System.Drawing.Point(30, 42); + this.lblIdleChargeSeconds.Name = "lblIdleChargeSeconds"; + this.lblIdleChargeSeconds.Size = new System.Drawing.Size(171, 20); + this.lblIdleChargeSeconds.TabIndex = 0; + this.lblIdleChargeSeconds.Text = "空闲充电时间 (秒,sec):"; + // + // grpSocParams + // + this.grpSocParams.Controls.Add(this.numAllowInterruptSoc); + this.grpSocParams.Controls.Add(this.lblAllowInterruptSoc); + this.grpSocParams.Controls.Add(this.numFullChargeSoc); + this.grpSocParams.Controls.Add(this.lblFullChargeSoc); + this.grpSocParams.Controls.Add(this.numTaskAvailableSoc); + this.grpSocParams.Controls.Add(this.lblTaskAvailableSoc); + this.grpSocParams.Controls.Add(this.numIdleChargeSoc); + this.grpSocParams.Controls.Add(this.lblIdleChargeSoc); + this.grpSocParams.Controls.Add(this.numMustChargeSoc); + this.grpSocParams.Controls.Add(this.lblMustChargeSoc); + this.grpSocParams.Dock = System.Windows.Forms.DockStyle.Top; + this.grpSocParams.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold); + this.grpSocParams.Location = new System.Drawing.Point(10, 10); + this.grpSocParams.Name = "grpSocParams"; + this.grpSocParams.Padding = new System.Windows.Forms.Padding(10); + this.grpSocParams.Size = new System.Drawing.Size(764, 200); + this.grpSocParams.TabIndex = 0; + this.grpSocParams.TabStop = false; + this.grpSocParams.Text = "SOC 参数 (电量百分比)"; + // + // numAllowInterruptSoc + // + this.numAllowInterruptSoc.DecimalPlaces = 1; + this.numAllowInterruptSoc.Font = new System.Drawing.Font("微软雅黑", 9F); + this.numAllowInterruptSoc.Location = new System.Drawing.Point(250, 150); + this.numAllowInterruptSoc.Name = "numAllowInterruptSoc"; + this.numAllowInterruptSoc.Size = new System.Drawing.Size(120, 27); + this.numAllowInterruptSoc.TabIndex = 9; + // + // lblAllowInterruptSoc + // + this.lblAllowInterruptSoc.AutoSize = true; + this.lblAllowInterruptSoc.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblAllowInterruptSoc.Location = new System.Drawing.Point(30, 152); + this.lblAllowInterruptSoc.Name = "lblAllowInterruptSoc"; + this.lblAllowInterruptSoc.Size = new System.Drawing.Size(135, 20); + this.lblAllowInterruptSoc.TabIndex = 8; + this.lblAllowInterruptSoc.Text = "允许中断电量 (%):"; + // + // numFullChargeSoc + // + this.numFullChargeSoc.DecimalPlaces = 1; + this.numFullChargeSoc.Font = new System.Drawing.Font("微软雅黑", 9F); + this.numFullChargeSoc.Location = new System.Drawing.Point(580, 95); + this.numFullChargeSoc.Name = "numFullChargeSoc"; + this.numFullChargeSoc.Size = new System.Drawing.Size(120, 27); + this.numFullChargeSoc.TabIndex = 7; + // + // lblFullChargeSoc + // + this.lblFullChargeSoc.AutoSize = true; + this.lblFullChargeSoc.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblFullChargeSoc.Location = new System.Drawing.Point(400, 97); + this.lblFullChargeSoc.Name = "lblFullChargeSoc"; + this.lblFullChargeSoc.Size = new System.Drawing.Size(99, 20); + this.lblFullChargeSoc.TabIndex = 6; + this.lblFullChargeSoc.Text = "满电电量 (%):"; + // + // numTaskAvailableSoc + // + this.numTaskAvailableSoc.DecimalPlaces = 1; + this.numTaskAvailableSoc.Font = new System.Drawing.Font("微软雅黑", 9F); + this.numTaskAvailableSoc.Location = new System.Drawing.Point(250, 95); + this.numTaskAvailableSoc.Name = "numTaskAvailableSoc"; + this.numTaskAvailableSoc.Size = new System.Drawing.Size(120, 27); + this.numTaskAvailableSoc.TabIndex = 5; + // + // lblTaskAvailableSoc + // + this.lblTaskAvailableSoc.AutoSize = true; + this.lblTaskAvailableSoc.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblTaskAvailableSoc.Location = new System.Drawing.Point(30, 97); + this.lblTaskAvailableSoc.Name = "lblTaskAvailableSoc"; + this.lblTaskAvailableSoc.Size = new System.Drawing.Size(135, 20); + this.lblTaskAvailableSoc.TabIndex = 4; + this.lblTaskAvailableSoc.Text = "任务可用电量 (%):"; + // + // numIdleChargeSoc + // + this.numIdleChargeSoc.DecimalPlaces = 1; + this.numIdleChargeSoc.Font = new System.Drawing.Font("微软雅黑", 9F); + this.numIdleChargeSoc.Location = new System.Drawing.Point(580, 40); + this.numIdleChargeSoc.Name = "numIdleChargeSoc"; + this.numIdleChargeSoc.Size = new System.Drawing.Size(120, 27); + this.numIdleChargeSoc.TabIndex = 3; + // + // lblIdleChargeSoc + // + this.lblIdleChargeSoc.AutoSize = true; + this.lblIdleChargeSoc.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblIdleChargeSoc.Location = new System.Drawing.Point(400, 42); + this.lblIdleChargeSoc.Name = "lblIdleChargeSoc"; + this.lblIdleChargeSoc.Size = new System.Drawing.Size(135, 20); + this.lblIdleChargeSoc.TabIndex = 2; + this.lblIdleChargeSoc.Text = "空闲充电电量 (%):"; + // + // numMustChargeSoc + // + this.numMustChargeSoc.DecimalPlaces = 1; + this.numMustChargeSoc.Font = new System.Drawing.Font("微软雅黑", 9F); + this.numMustChargeSoc.Location = new System.Drawing.Point(250, 40); + this.numMustChargeSoc.Name = "numMustChargeSoc"; + this.numMustChargeSoc.Size = new System.Drawing.Size(120, 27); + this.numMustChargeSoc.TabIndex = 1; + // + // lblMustChargeSoc + // + this.lblMustChargeSoc.AutoSize = true; + this.lblMustChargeSoc.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblMustChargeSoc.Location = new System.Drawing.Point(30, 42); + this.lblMustChargeSoc.Name = "lblMustChargeSoc"; + this.lblMustChargeSoc.Size = new System.Drawing.Size(99, 20); + this.lblMustChargeSoc.TabIndex = 0; + this.lblMustChargeSoc.Text = "必充电量 (%):"; + // + // pnlBottom + // + this.pnlBottom.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(250)))), ((int)(((byte)(250)))), ((int)(((byte)(250))))); + this.pnlBottom.Controls.Add(this.lblStatus); + this.pnlBottom.Controls.Add(this.btnApply); + this.pnlBottom.Controls.Add(this.btnRestoreDefaults); + this.pnlBottom.Controls.Add(this.btnCancel); + this.pnlBottom.Controls.Add(this.btnSave); + this.pnlBottom.Dock = System.Windows.Forms.DockStyle.Bottom; + this.pnlBottom.Location = new System.Drawing.Point(0, 631); + this.pnlBottom.Name = "pnlBottom"; + this.pnlBottom.Size = new System.Drawing.Size(784, 70); + this.pnlBottom.TabIndex = 1; + // + // lblStatus + // + this.lblStatus.AutoSize = true; + this.lblStatus.Font = new System.Drawing.Font("微软雅黑", 9F); + this.lblStatus.Location = new System.Drawing.Point(20, 25); + this.lblStatus.Name = "lblStatus"; + this.lblStatus.Size = new System.Drawing.Size(54, 20); + this.lblStatus.TabIndex = 4; + this.lblStatus.Text = "就绪..."; + // + // btnApply + // + this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnApply.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btnApply.Location = new System.Drawing.Point(564, 18); + this.btnApply.Name = "btnApply"; + this.btnApply.Size = new System.Drawing.Size(100, 35); + this.btnApply.TabIndex = 3; + this.btnApply.Text = "应用"; + this.btnApply.UseVisualStyleBackColor = true; + this.btnApply.Click += new System.EventHandler(this.btnApply_Click); + // + // btnRestoreDefaults + // + this.btnRestoreDefaults.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnRestoreDefaults.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btnRestoreDefaults.Location = new System.Drawing.Point(344, 18); + this.btnRestoreDefaults.Name = "btnRestoreDefaults"; + this.btnRestoreDefaults.Size = new System.Drawing.Size(100, 35); + this.btnRestoreDefaults.TabIndex = 2; + this.btnRestoreDefaults.Text = "恢复默认"; + this.btnRestoreDefaults.UseVisualStyleBackColor = true; + this.btnRestoreDefaults.Click += new System.EventHandler(this.btnRestoreDefaults_Click); + // + // btnCancel + // + this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnCancel.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btnCancel.Location = new System.Drawing.Point(674, 18); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(100, 35); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "取消"; + this.btnCancel.UseVisualStyleBackColor = true; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // btnSave + // + this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 9F); + this.btnSave.Location = new System.Drawing.Point(454, 18); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(100, 35); + this.btnSave.TabIndex = 0; + this.btnSave.Text = "保存"; + this.btnSave.UseVisualStyleBackColor = true; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // ChargeStrategyConfigForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 701); + this.Controls.Add(this.pnlMain); + this.Controls.Add(this.pnlBottom); + this.Name = "ChargeStrategyConfigForm"; + this.Text = "充电策略配置"; + this.pnlMain.ResumeLayout(false); + this.grpSwitchParams.ResumeLayout(false); + this.grpSwitchParams.PerformLayout(); + this.grpTaskParams.ResumeLayout(false); + this.grpTaskParams.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numMinAllowFreeCarToChargeTaskCnt)).EndInit(); + this.grpTimeParams.ResumeLayout(false); + this.grpTimeParams.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numTopUpMinutes)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numMustChargeSeconds)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numIdleSeconds)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numIdleChargeSeconds)).EndInit(); + this.grpSocParams.ResumeLayout(false); + this.grpSocParams.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numAllowInterruptSoc)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numFullChargeSoc)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numTaskAvailableSoc)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numIdleChargeSoc)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numMustChargeSoc)).EndInit(); + this.pnlBottom.ResumeLayout(false); + this.pnlBottom.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel pnlMain; + private System.Windows.Forms.GroupBox grpSocParams; + private System.Windows.Forms.NumericUpDown numMustChargeSoc; + private System.Windows.Forms.Label lblMustChargeSoc; + private System.Windows.Forms.NumericUpDown numIdleChargeSoc; + private System.Windows.Forms.Label lblIdleChargeSoc; + private System.Windows.Forms.NumericUpDown numTaskAvailableSoc; + private System.Windows.Forms.Label lblTaskAvailableSoc; + private System.Windows.Forms.NumericUpDown numFullChargeSoc; + private System.Windows.Forms.Label lblFullChargeSoc; + private System.Windows.Forms.NumericUpDown numAllowInterruptSoc; + private System.Windows.Forms.Label lblAllowInterruptSoc; + private System.Windows.Forms.GroupBox grpTimeParams; + private System.Windows.Forms.NumericUpDown numIdleChargeSeconds; + private System.Windows.Forms.Label lblIdleChargeSeconds; + private System.Windows.Forms.NumericUpDown numIdleSeconds; + private System.Windows.Forms.Label lblIdleSeconds; + private System.Windows.Forms.NumericUpDown numMustChargeSeconds; + private System.Windows.Forms.Label lblMustChargeSeconds; + private System.Windows.Forms.NumericUpDown numTopUpMinutes; + private System.Windows.Forms.Label lblTopUpMinutes; + private System.Windows.Forms.GroupBox grpTaskParams; + private System.Windows.Forms.NumericUpDown numMinAllowFreeCarToChargeTaskCnt; + private System.Windows.Forms.Label lblMinAllowFreeCarToChargeTaskCnt; + private System.Windows.Forms.GroupBox grpSwitchParams; + private System.Windows.Forms.CheckBox chkAllowInterruptTask; + private System.Windows.Forms.CheckBox chkUseLowerSocForCharge; + private System.Windows.Forms.CheckBox chkEnableErrorChargeDetection; + private System.Windows.Forms.CheckBox chkUseChargeSiteFilter; + private System.Windows.Forms.Panel pnlBottom; + private System.Windows.Forms.Button btnSave; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnRestoreDefaults; + private System.Windows.Forms.Button btnApply; + private System.Windows.Forms.Label lblStatus; + } +} diff --git a/StandardScene.Core/Charge/ChargeStrategyConfigForm.cs b/StandardScene.Core/Charge/ChargeStrategyConfigForm.cs new file mode 100644 index 0000000..53f84a7 --- /dev/null +++ b/StandardScene.Core/Charge/ChargeStrategyConfigForm.cs @@ -0,0 +1,215 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace StandardScene.Charge +{ + /// + /// 充电策略配置窗体 + /// + public partial class ChargeStrategyConfigForm : Form + { + private ChargeStrategyConfig config; + private ChargeStrategyConfigService configService; + + public ChargeStrategyConfigForm() + { + InitializeComponent(); + configService = ChargeStrategyConfigService.Instance; + InitializeForm(); + } + + private void InitializeForm() + { + this.Text = "充电策略配置"; + this.Size = new Size(800, 700); + this.StartPosition = FormStartPosition.CenterScreen; + this.MinimumSize = new Size(700, 600); + this.FormBorderStyle = FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + + // 加载配置 + LoadConfig(); + } + + /// + /// 加载配置到界面 + /// + private void LoadConfig(bool isDef = false) + { + try + { + if (!isDef) + { + config = configService.LoadConfig(); + } + + + // SOC 相关参数 + numMustChargeSoc.Value = (decimal)config.MustChargeSoc; + numIdleChargeSoc.Value = (decimal)config.IdleChargeSoc; + numTaskAvailableSoc.Value = (decimal)config.TaskAvailableSoc; + numFullChargeSoc.Value = (decimal)config.FullChargeSoc; + numAllowInterruptSoc.Value = (decimal)config.AllowInterruptSoc; + + // 时间相关参数 + numIdleChargeSeconds.Value = (decimal)config.IdleChargeSeconds; + numIdleSeconds.Value = (decimal)config.IdleSeconds; + numMustChargeSeconds.Value = (decimal)config.MustChargeSeconds; + numTopUpMinutes.Value = (decimal)config.TopUpMinutes; + + // 任务相关参数 + numMinAllowFreeCarToChargeTaskCnt.Value = config.MinAllowFreeCarToChargeTaskCnt; + + // 开关参数 + chkAllowInterruptTask.Checked = config.AllowInterruptTask; + chkUseLowerSocForCharge.Checked = config.UseLowerSocForCharge; + chkEnableErrorChargeDetection.Checked = config.EnableErrorChargeDetection; + chkUseChargeSiteFilter.Checked = config.UseChargeSiteFilter; + + lblStatus.Text = "配置加载成功"; + lblStatus.ForeColor = Color.Green; + } + catch (Exception ex) + { + MessageBox.Show($"加载配置失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + lblStatus.Text = "配置加载失败"; + lblStatus.ForeColor = Color.Red; + } + } + + /// + /// 从界面保存配置 + /// + private void SaveConfig() + { + try + { + // SOC 相关参数 + config.MustChargeSoc = (double)numMustChargeSoc.Value; + config.IdleChargeSoc = (double)numIdleChargeSoc.Value; + config.TaskAvailableSoc = (double)numTaskAvailableSoc.Value; + config.FullChargeSoc = (double)numFullChargeSoc.Value; + config.AllowInterruptSoc = (double)numAllowInterruptSoc.Value; + + // 时间相关参数 + config.IdleChargeSeconds = (double)numIdleChargeSeconds.Value; + config.IdleSeconds = (double)numIdleSeconds.Value; + config.MustChargeSeconds = (double)numMustChargeSeconds.Value; + config.TopUpMinutes = (double)numTopUpMinutes.Value; + + // 任务相关参数 + config.MinAllowFreeCarToChargeTaskCnt = (int)numMinAllowFreeCarToChargeTaskCnt.Value; + + // 开关参数 + config.AllowInterruptTask = chkAllowInterruptTask.Checked; + config.UseLowerSocForCharge = chkUseLowerSocForCharge.Checked; + config.EnableErrorChargeDetection = chkEnableErrorChargeDetection.Checked; + config.UseChargeSiteFilter = chkUseChargeSiteFilter.Checked; + + // 保存到文件 + configService.SaveConfig(config); + + lblStatus.Text = "配置保存成功"; + lblStatus.ForeColor = Color.Green; + + MessageBox.Show("充电策略配置保存成功!", "成功", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show($"保存配置失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + lblStatus.Text = "配置保存失败"; + lblStatus.ForeColor = Color.Red; + } + } + + /// + /// 恢复默认配置 + /// + private void RestoreDefaults() + { + var result = MessageBox.Show( + "确定要恢复默认配置吗?当前配置将被覆盖。", + "确认恢复", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question); + + if (result == DialogResult.Yes) + { + config = ChargeStrategyConfig.CreateDefault(); + LoadConfig(true); + lblStatus.Text = "已恢复默认配置(未保存)"; + lblStatus.ForeColor = Color.Blue; + } + } + + /// + /// 验证配置参数 + /// + private bool ValidateConfig() + { + // 验证 SOC 范围 + if (numMustChargeSoc.Value >= numIdleChargeSoc.Value) + { + MessageBox.Show("必充电量必须小于空闲充电电量", "验证失败", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + return false; + } + + if (numTaskAvailableSoc.Value <= numMustChargeSoc.Value) + { + MessageBox.Show("任务可用电量必须大于必充电量", "验证失败", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + return false; + } + + if (numFullChargeSoc.Value < numIdleChargeSoc.Value) + { + MessageBox.Show("满电电量必须大于等于空闲充电电量", "验证失败", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + return false; + } + + if (numAllowInterruptSoc.Value <= numMustChargeSoc.Value) + { + MessageBox.Show("允许中断电量必须大于必充电量", "验证失败", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + return false; + } + + return true; + } + + // ==================== 事件处理 ==================== + + private void btnSave_Click(object sender, EventArgs e) + { + if (ValidateConfig()) + { + SaveConfig(); + } + } + + private void btnCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void btnRestoreDefaults_Click(object sender, EventArgs e) + { + RestoreDefaults(); + } + + private void btnApply_Click(object sender, EventArgs e) + { + if (ValidateConfig()) + { + SaveConfig(); + } + } + } +} + diff --git a/StandardScene.Core/Charge/ChargeStrategyConfigService.cs b/StandardScene.Core/Charge/ChargeStrategyConfigService.cs new file mode 100644 index 0000000..aa975cc --- /dev/null +++ b/StandardScene.Core/Charge/ChargeStrategyConfigService.cs @@ -0,0 +1,203 @@ +using System; +using System.IO; +using Newtonsoft.Json; + +namespace StandardScene.Charge +{ + /// + /// 充电策略配置服务(单例模式) + /// + public class ChargeStrategyConfigService + { + private static ChargeStrategyConfigService _instance; + private static readonly object _lock = new object(); + private readonly string configFilePath; + private const string ConfigFileName = "ChargeStrategyConfig.json"; + + /// + /// 获取单例实例 + /// + public static ChargeStrategyConfigService Instance + { + get + { + if (_instance == null) + { + lock (_lock) + { + if (_instance == null) + { + _instance = new ChargeStrategyConfigService(); + } + } + } + return _instance; + } + } + + private ChargeStrategyConfigService() + { + // 配置文件保存在应用程序目录下的 Config 文件夹 + string configDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config"); + + // 确保目录存在 + if (!Directory.Exists(configDir)) + { + Directory.CreateDirectory(configDir); + } + + configFilePath = Path.Combine(configDir, ConfigFileName); + } + + /// + /// 加载配置 + /// + public ChargeStrategyConfig LoadConfig() + { + try + { + if (File.Exists(configFilePath)) + { + string json = File.ReadAllText(configFilePath); + var config = JsonConvert.DeserializeObject(json); + + // 验证配置 + if (config.Validate(out string errorMessage)) + { + return config; + } + else + { + // 配置无效,返回默认配置 + System.Diagnostics.Debug.WriteLine($"配置验证失败: {errorMessage},使用默认配置"); + return ChargeStrategyConfig.CreateDefault(); + } + } + else + { + // 文件不存在,创建默认配置并保存 + var defaultConfig = ChargeStrategyConfig.CreateDefault(); + SaveConfig(defaultConfig); + return defaultConfig; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"加载配置失败: {ex.Message}"); + // 加载失败,返回默认配置 + return ChargeStrategyConfig.CreateDefault(); + } + } + + /// + /// 保存配置 + /// + public void SaveConfig(ChargeStrategyConfig config) + { + try + { + // 验证配置 + if (!config.Validate(out string errorMessage)) + { + throw new InvalidOperationException($"配置验证失败: {errorMessage}"); + } + + // 序列化为 JSON + string json = JsonConvert.SerializeObject(config, Formatting.Indented); + + // 保存到文件 + File.WriteAllText(configFilePath, json); + + System.Diagnostics.Debug.WriteLine($"配置保存成功: {configFilePath}"); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"保存配置失败: {ex.Message}"); + throw new Exception($"保存配置失败: {ex.Message}", ex); + } + } + + /// + /// 获取配置文件路径 + /// + public string GetConfigFilePath() + { + return configFilePath; + } + + /// + /// 检查配置文件是否存在 + /// + public bool ConfigFileExists() + { + return File.Exists(configFilePath); + } + + /// + /// 删除配置文件 + /// + public void DeleteConfig() + { + try + { + if (File.Exists(configFilePath)) + { + File.Delete(configFilePath); + System.Diagnostics.Debug.WriteLine($"配置文件已删除: {configFilePath}"); + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"删除配置文件失败: {ex.Message}"); + throw new Exception($"删除配置文件失败: {ex.Message}", ex); + } + } + + /// + /// 导出配置到指定路径 + /// + public void ExportConfig(string exportPath, ChargeStrategyConfig config) + { + try + { + string json = JsonConvert.SerializeObject(config, Formatting.Indented); + File.WriteAllText(exportPath, json); + System.Diagnostics.Debug.WriteLine($"配置导出成功: {exportPath}"); + } + catch (Exception ex) + { + throw new Exception($"导出配置失败: {ex.Message}", ex); + } + } + + /// + /// 从指定路径导入配置 + /// + public ChargeStrategyConfig ImportConfig(string importPath) + { + try + { + if (!File.Exists(importPath)) + { + throw new FileNotFoundException($"配置文件不存在: {importPath}"); + } + + string json = File.ReadAllText(importPath); + var config = JsonConvert.DeserializeObject(json); + + // 验证配置 + if (!config.Validate(out string errorMessage)) + { + throw new InvalidOperationException($"配置验证失败: {errorMessage}"); + } + + return config; + } + catch (Exception ex) + { + throw new Exception($"导入配置失败: {ex.Message}", ex); + } + } + } +} + diff --git a/StandardScene.Core/Charge/ChargeUdpService.cs b/StandardScene.Core/Charge/ChargeUdpService.cs new file mode 100644 index 0000000..1bb271e --- /dev/null +++ b/StandardScene.Core/Charge/ChargeUdpService.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using SimpleLite; +using SimpleCore; +using SimpleCore.Library; +using StandardScene.ChargeStationType; + +namespace StandardScene.Charge +{ + /// + /// 充电桩udp监听 + /// + public class ChargeUdpService + { + public Thread ListenerThread; + + public ChargeUdpService() + { + ListenerThread = new Thread(ListenerProcess); + ListenerThread.Start(); + } + + private static async void ListenerProcess() + { + var messageService = CommunicationMessageService.Instance; + using (UdpClient udpListener = new UdpClient(40001)) + { + Diagnosis.Log($"Listening for UDP messages on port {40001}"); + while (true) + { + try + { + var result = await udpListener.ReceiveAsync(); + var remoteEndPoint = result.RemoteEndPoint; + var message = result.Buffer; + messageService.AddReceiveMessage(remoteEndPoint.Address.ToString(), 40001, BitConverter.ToString(message).Replace("-", " "), "FRLDShort"); + Diagnosis.Log($"ChargeStation ADD:[{BitConverter.ToString(message).Replace("-", " ")}]","UDP返回报文信息",true); + var chargeMission = SimpleProject.proj.Missions.OfType().FirstOrDefault(); + if (chargeMission == null) continue; + var chargeStation = + chargeMission.ChargeStations.FirstOrDefault(c => + c.Value.Ip == remoteEndPoint.Address.ToString()).Value; + if (chargeStation == null) continue; + if (message.Length > 28) + chargeStation.IsSafe = message[28] == 1; + chargeStation.OnUdpMessage(message); + } + catch (Exception e) + { + // 单帧异常(含越界/半包)不得中断 UDP 监听线程 + Diagnosis.Log($"充电UDP接收处理异常: {e.Message}", "UDP", true); + } + } + } + } + } +} diff --git a/StandardScene.Core/Charge/CommunicationMessage.cs b/StandardScene.Core/Charge/CommunicationMessage.cs new file mode 100644 index 0000000..9bbbb1c --- /dev/null +++ b/StandardScene.Core/Charge/CommunicationMessage.cs @@ -0,0 +1,89 @@ +using System; + +namespace StandardScene.Charge +{ + /// + /// 通讯报文数据模型 + /// + public class CommunicationMessage + { + /// + /// 报文ID(自动生成) + /// + public string MessageId { get; set; } + + /// + /// 时间戳 + /// + public DateTime Timestamp { get; set; } + + /// + /// 方向(发送/接收) + /// + public MessageDirection Direction { get; set; } + + /// + /// IP地址 + /// + public string IpAddress { get; set; } + + /// + /// 端口号 + /// + public int Port { get; set; } + + /// + /// 原始报文数据(十六进制字符串) + /// + public string RawData { get; set; } + + /// + /// 报文长度(字节) + /// + public int Length { get; set; } + /// + /// 协议类型 + /// + public string Type { get; set; } + + /// + /// 关联的充电桩ID(可选) + /// + public string StationId { get; set; } + + public CommunicationMessage() + { + MessageId = GenerateMessageId(); + Timestamp = DateTime.Now; + } + + private static string GenerateMessageId() + { + return $"MSG{DateTime.Now:yyyyMMddHHmmssfff}{new Random().Next(100, 999)}"; + } + + public override string ToString() + { + return $"[{Timestamp:HH:mm:ss.fff}] {Direction} {IpAddress}:{Port} - {Length}字节"; + } + } + + //解析后的数据 + + /// + /// 报文方向枚举 + /// + public enum MessageDirection + { + /// + /// 发送 + /// + Send = 0, + + /// + /// 接收 + /// + Receive = 1 + } +} + diff --git a/StandardScene.Core/Charge/CommunicationMessageService.cs b/StandardScene.Core/Charge/CommunicationMessageService.cs new file mode 100644 index 0000000..10cb21b --- /dev/null +++ b/StandardScene.Core/Charge/CommunicationMessageService.cs @@ -0,0 +1,587 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; + +namespace StandardScene.Charge +{ + /// + /// 通讯报文数据服务(单例模式) + /// + public class CommunicationMessageService + { + private static CommunicationMessageService _instance; + private static readonly object _lock = new object(); + private readonly object _dataLock = new object(); + private readonly AlarmConfigDataService dataService; + private readonly LinkedList _messages; + private const int MaxMessages = 100; // 最多保留100条 + + /// + /// 报文添加事件 + /// + public event EventHandler MessageAdded; + + /// + /// 获取单例实例 + /// + public static CommunicationMessageService Instance + { + get + { + if (_instance == null) + { + lock (_lock) + { + if (_instance == null) + { + _instance = new CommunicationMessageService(); + } + } + } + return _instance; + } + } + + private CommunicationMessageService() + { + _messages = new LinkedList(); + dataService = AlarmConfigDataService.Instance; + } + + /// + /// 添加报文 + /// + public void AddMessage(CommunicationMessage message) + { + if (message == null) + return; + + lock (_dataLock) + { + // 添加到链表头部(最新的在前面) + _messages.AddFirst(message); + + // 如果超过最大数量,移除最旧的 + while (_messages.Count > MaxMessages) + { + _messages.RemoveLast(); + } + } + + // 触发事件 + MessageAdded?.Invoke(this, message); + } + + /// + /// 添加发送报文 + /// + public void AddSendMessage(string ipAddress, int port, string rawData, string type, string stationId = null) + { + var message = new CommunicationMessage + { + Direction = MessageDirection.Send, + IpAddress = ipAddress, + Port = port, + RawData = rawData, + Length = rawData.Split(' ')?.Length ?? 0, // 假设是十六进制字符串 + StationId = stationId, + Type = type + }; + AddMessage(message); + + // 发送报文后,解析并更新充电桩数据(发送方向) + ParseSendDataAndUpdateStation(ipAddress, port, rawData, type); + } + + /// + /// 添加接收报文 + /// + public void AddReceiveMessage(string ipAddress, int port, string rawData, string type, string stationId = null) + { + var message = new CommunicationMessage + { + Direction = MessageDirection.Receive, + IpAddress = ipAddress, + Port = port, + RawData = rawData, + Length = rawData.Split(' ')?.Length ?? 0, + StationId = stationId, + Type = type + }; + AddMessage(message); + + // 接收到报文后,解析并更新充电桩数据(接收方向) + ParseReceiveDataAndUpdateStation(ipAddress, port, rawData, type); + } + + /// + /// 解析发送报文并更新充电桩数据 + /// + private void ParseSendDataAndUpdateStation(string ipAddress, int port, string rawData, string type) + { + try + { + var dataService = ChargeStationDataService.Instance; + + // 根据IP地址查找充电桩 + var station = dataService.GetStationByIp(ipAddress, port); + if (station == null) + { + return; // 未找到对应充电桩,不处理 + } + + // 解析发送报文数据 + var parsedData = ParseSendRawData(rawData, type); + if (parsedData == null) + { + return; // 解析失败,不处理 + } + + // 更新充电桩数据(发送方向) + UpdateStationFromSendData(station, parsedData); + + // 更新到数据服务 + dataService.UpdateStation(station, out string errorMessage); + + } + catch + { + // 静默处理异常,不影响报文记录 + } + } + + /// + /// 解析接收报文并更新充电桩数据 + /// + public void ParseReceiveDataAndUpdateStation(string ipAddress, int port, string rawData, string type) + { + try + { + var dataService = ChargeStationDataService.Instance; + + // 根据IP地址查找充电桩 + var station = dataService.GetStationByIp(ipAddress); + if (station == null) + { + return; // 未找到对应充电桩,不处理 + } + + // 解析接收报文数据 + var parsedData = ParseReceiveRawData(rawData, type); + if (parsedData == null) + { + return; // 解析失败,不处理 + } + + // 更新充电桩数据(接收方向) + UpdateStationFromReceiveData(station, parsedData); + + // 合并发送和接收数据,更新到数据服务 + dataService.UpdateStation(station, out string errorMessage); + } + catch + { + // 静默处理异常,不影响报文记录 + } + } + + /// + /// 解析发送报文数据 + /// + public ParsedSendData ParseSendRawData(string rawData, string type) + { + try + { + // 将逗号分隔的字符串转换为字节数组 + var parts = rawData.Split(' '); + if (parts.Length < 10) // 发送报文至少10字节 + { + return null; + } + + var bytes = new byte[parts.Length]; + for (int i = 0; i < parts.Length; i++) + { + if (!byte.TryParse(parts[i], NumberStyles.HexNumber, CultureInfo.InvariantCulture, out bytes[i])) + { + return null; + } + } + + byte chargeCommand = 0; + double setVoltage = 0; + double setCurrent = 0; + short carId = 0; + int carSoc = 0; + double carVoltage = 0; + double carCurrent = 0; + + if (type == "FRLDShort") + { + chargeCommand = bytes[2]; + + setCurrent = BitConverter.ToInt32(new byte[] { bytes[6], bytes[5], bytes[4], bytes[3] }, 0) / 10f; + setVoltage = BitConverter.ToInt32(new byte[] { bytes[10], bytes[9], bytes[8], bytes[7] }, 0) / 10f; + carId = BitConverter.ToInt16(new byte[] { bytes[14], bytes[13] }, 0); + carSoc = bytes[15]; + carVoltage = BitConverter.ToInt32(new byte[] { bytes[19], bytes[18], bytes[17], bytes[16] }, 0); + carCurrent = BitConverter.ToInt32(new byte[] { bytes[23], bytes[22], bytes[21], bytes[20] }, 0); + + } + else if (type == "FRLDTall") + { + chargeCommand = bytes[1]; + + setCurrent = BitConverter.ToSingle(new byte[] { bytes[5], bytes[4], bytes[3], bytes[2] }, 0); + setVoltage = BitConverter.ToSingle(new byte[] { bytes[9], bytes[8], bytes[7], bytes[6] }, 0); + carId = BitConverter.ToInt16(new byte[] { bytes[13], bytes[12] }, 0); + carSoc = BitConverter.ToInt16(new byte[] { bytes[15], bytes[14] }, 0); + carVoltage = BitConverter.ToSingle(new byte[] { bytes[19], bytes[18], bytes[17], bytes[16] }, 0); + carCurrent = BitConverter.ToSingle(new byte[] { bytes[23], bytes[22], bytes[21], bytes[20] }, 0); + } + + // 解析发送报文(根据实际协议) + var parsed = new ParsedSendData + { + + ChargeCommand = chargeCommand, + SetVoltage = setVoltage, + SetCurrent = setCurrent, + CurrentVehicleId = carId, + BatteryLevel = carSoc, + CarVoltage = carVoltage, + CarCurrent = carCurrent, + // 发送时间 + SendTime = DateTime.Now + }; + + return parsed; + } + catch + { + return null; + } + } + + /// + /// 解析接收报文数据 + /// + public ParsedReceiveData ParseReceiveRawData(string rawData, string type) + { + try + { + // 将逗号分隔的字符串转换为字节数组 + var parts = rawData.Split(' '); + if (parts.Length < 30) // 假设报文至少30字节 + { + return null; + } + + var bytes = new byte[parts.Length]; + for (int i = 0; i < parts.Length; i++) + { + if (!byte.TryParse(parts[i], NumberStyles.HexNumber, CultureInfo.InvariantCulture, out bytes[i])) + { + return null; + } + } + + + double realTimeVoltage = 0; + double realTimeCurrent = 0; + byte chargeStationStatus = 0; + byte chargeId = 0; + short batteryAH = 0; + byte mechanismStatus = 0; + byte alarmValue = 0; + + + if (type == "FRLDShort") + { + + realTimeCurrent = BitConverter.ToInt32(new byte[] { bytes[5], bytes[4], bytes[3], bytes[2] }, 0) / 10f; + realTimeVoltage = BitConverter.ToInt32(new byte[] { bytes[9], bytes[8], bytes[7], bytes[6] }, 0) / 10f; + chargeStationStatus = bytes[14]; + chargeId = bytes[15]; + batteryAH = BitConverter.ToInt16(new byte[] { bytes[17], bytes[16] }, 0); + mechanismStatus = bytes[28]; + } + else if (type == "FRLDTall") + { + chargeStationStatus = bytes[14]; + mechanismStatus = bytes[28]; + alarmValue = bytes[15]; + } + + + // 根据实际协议解析接收数据 + var parsed = new ParsedReceiveData + { + RealTimeCurrent = realTimeCurrent, + RealTimeVoltage = realTimeVoltage, + Status = type == "FRLDTall" ? ParseStationStatusFRLDTall(chargeStationStatus) : ParseStationStatus(chargeStationStatus), + ChargeID = chargeId, + BatteryAH = batteryAH, + MechanismStatus = type == "FRLDTall" ? ParseMechanismStatusFRLDTall(mechanismStatus) : ParseMechanismStatus(mechanismStatus), + HasAlarm = chargeStationStatus == 2, + AlarmCode = alarmValue, + // AlarmLevel = ParseAlarmLevel(bytes[20]) + ReceiveTime = DateTime.Now + }; + + return parsed; + } + catch + { + return null; + } + } + + + + /// + /// 从发送报文更新充电桩数据 + /// + private void UpdateStationFromSendData(ChargeStation station, ParsedSendData parsedData) + { + // 更新发送的设定值 + //station.SetVoltage = parsedData.SetVoltage; + //station.SetElectricCurrent = parsedData.SetCurrent; + + // 更新最后发送时间 + station.LastSendTime = parsedData.SendTime; + + // 根据发送的充电指令更新状态 + if (parsedData.ChargeCommand == 1) + { + // 发送了启动充电指令 + station.ChargeCommandStatus = ChargeCommandStatus.Started; + } + else if (parsedData.ChargeCommand == 0) + { + // 发送了停止充电指令 + station.ChargeCommandStatus = ChargeCommandStatus.Stopped; + } + + station.BatteryLevel = parsedData.BatteryLevel; + station.CurrentVehicle = parsedData.CurrentVehicleId.ToString(); + + } + + /// + /// 从接收报文更新充电桩数据 + /// + private void UpdateStationFromReceiveData(ChargeStation station, ParsedReceiveData parsedData) + { + station.LastReceiveTime = parsedData.ReceiveTime; + station.MechanismStatus = parsedData.MechanismStatus; + station.RealTimeVoltage = parsedData.RealTimeVoltage; + station.RealTimeCurrent = parsedData.RealTimeCurrent; + station.Status = parsedData.Status; + station.HasAlarm = parsedData.HasAlarm; + station.AlarmLevel = parsedData.AlarmLevel; + if (parsedData.HasAlarm) + { + var alarmInfo = dataService.GetAlarmConfigAlarmCode(parsedData.AlarmCode); + if (alarmInfo != null) + { + station.AlarmMessage = $"报警级别: {GetAlarmLevelText(alarmInfo.Level)}:{alarmInfo.AlarmContent}"; + } + + } + else + { + station.AlarmMessage = string.Empty; + } + + + + + } + + /// + /// 解析机构状态 + /// + private MechanismStatus ParseMechanismStatus(byte statusByte) + { + switch (statusByte) + { + case 1: return MechanismStatus.Retracted; + case 2: return MechanismStatus.Extended; + default: return MechanismStatus.Extending; + } + } + + /// + /// 解析机构状态 + /// + private MechanismStatus ParseMechanismStatusFRLDTall(byte statusByte) + { + switch (statusByte) + { + case 1: return MechanismStatus.Extended; + case 2: return MechanismStatus.Retracted; + default: return MechanismStatus.Extending; + } + } + + /// + /// 解析报警级别 + /// + private AlarmLevel ParseAlarmLevel(byte alarmByte) + { + if (alarmByte == 0) return AlarmLevel.None; + if (alarmByte <= 2) return AlarmLevel.Low; + if (alarmByte <= 5) return AlarmLevel.Medium; + if (alarmByte <= 8) return AlarmLevel.High; + return AlarmLevel.Critical; + } + + /// + /// 解析充电桩状态 + /// + private ChargeStationStatus ParseStationStatus(byte statusByte) + { + switch (statusByte) + { + case 0: return ChargeStationStatus.Idle; + case 1: return ChargeStationStatus.Charging; + case 2: return ChargeStationStatus.Fault; + case 3: return ChargeStationStatus.Battery; + default: return ChargeStationStatus.Idle; + } + } + + private ChargeStationStatus ParseStationStatusFRLDTall(byte statusByte) + { + switch (statusByte) + { + case 0: return ChargeStationStatus.Idle; + case 2: return ChargeStationStatus.Idle; + case 3: return ChargeStationStatus.Charging; + case 4: return ChargeStationStatus.Fault; + default: return ChargeStationStatus.Idle; + } + } + + /// + /// 获取报警级别文本 + /// + private string GetAlarmLevelText(AlarmLevel level) + { + switch (level) + { + case AlarmLevel.None: return "无"; + case AlarmLevel.Low: return "低"; + case AlarmLevel.Medium: return "中"; + case AlarmLevel.High: return "高"; + case AlarmLevel.Critical: return "严重"; + default: return "未知"; + } + } + + /// + /// 解析后的发送报文数据(内部类) + /// + public class ParsedSendData + { + public byte ChargeCommand { get; set; } + public double SetVoltage { get; set; } + public double SetCurrent { get; set; } + public double BatteryLevel { get; set; } + public int CurrentVehicleId { get; set; } + public double CarVoltage { get; set; } + public double CarCurrent { get; set; } + public DateTime SendTime { get; set; } + } + + /// + /// 解析后的接收报文数据(内部类) + /// + public class ParsedReceiveData + { + public CommunicationStatus CommStatus { get; set; } + public ChargeCommandStatus ChargeCommandStatus { get; set; } + public MechanismStatus MechanismStatus { get; set; } + public double RealTimeVoltage { get; set; } + public double RealTimeCurrent { get; set; } + public int ChargeID { get; set; } + public float BatteryAH { get; set; } + public bool HasAlarm { get; set; } + public AlarmLevel AlarmLevel { get; set; } + public int AlarmCode { get; set; } + public ChargeStationStatus Status { get; set; } + + public DateTime ReceiveTime { get; set; } + } + + + + /// + /// 获取所有报文 + /// + public List GetAllMessages() + { + lock (_dataLock) + { + return _messages.ToList(); + } + } + + /// + /// 根据IP筛选报文 + /// + public List GetMessagesByIp(string ipAddress) + { + if (string.IsNullOrWhiteSpace(ipAddress)) + return GetAllMessages(); + + lock (_dataLock) + { + return _messages.Where(m => m.IpAddress == ipAddress).ToList(); + } + } + + /// + /// 根据充电桩ID筛选报文 + /// + public List GetMessagesByStationId(string stationId) + { + if (string.IsNullOrWhiteSpace(stationId)) + return GetAllMessages(); + + lock (_dataLock) + { + return _messages.Where(m => m.StationId == stationId).ToList(); + } + } + + /// + /// 清空所有报文 + /// + public void Clear() + { + lock (_dataLock) + { + _messages.Clear(); + } + } + + /// + /// 获取所有唯一IP地址列表 + /// + public List GetUniqueIpAddresses() + { + lock (_dataLock) + { + return _messages + .Select(m => m.IpAddress) + .Distinct() + .OrderBy(ip => ip) + .ToList(); + } + } + } +} + diff --git a/StandardScene.Core/Charge/CommunicationMonitorForm.Designer.cs b/StandardScene.Core/Charge/CommunicationMonitorForm.Designer.cs new file mode 100644 index 0000000..f83e9b4 --- /dev/null +++ b/StandardScene.Core/Charge/CommunicationMonitorForm.Designer.cs @@ -0,0 +1,376 @@ +namespace StandardScene.Charge +{ + partial class CommunicationMonitorForm + { + private System.ComponentModel.IContainer components = null; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.pnlLeft = new System.Windows.Forms.Panel(); + this.dgvMessages = new System.Windows.Forms.DataGridView(); + this.colTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colDirection = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colIpAddress = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPort = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colRawData = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colStationId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.type = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.pnlLeftTop = new System.Windows.Forms.Panel(); + this.button1 = new System.Windows.Forms.Button(); + this.btnClear = new System.Windows.Forms.Button(); + this.btnRefresh = new System.Windows.Forms.Button(); + this.lblStatistics = new System.Windows.Forms.Label(); + this.cmbIpFilter = new System.Windows.Forms.ComboBox(); + this.lblIpFilter = new System.Windows.Forms.Label(); + this.pnlRight = new System.Windows.Forms.Panel(); + this.txtParsedData = new System.Windows.Forms.TextBox(); + this.pnlRightTop = new System.Windows.Forms.Panel(); + this.btnClose = new System.Windows.Forms.Button(); + this.lblParsedTitle = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + this.pnlLeft.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvMessages)).BeginInit(); + this.pnlLeftTop.SuspendLayout(); + this.pnlRight.SuspendLayout(); + this.pnlRightTop.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer + // + this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer.Location = new System.Drawing.Point(0, 0); + this.splitContainer.Name = "splitContainer"; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.pnlLeft); + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.pnlRight); + this.splitContainer.Size = new System.Drawing.Size(1400, 800); + this.splitContainer.SplitterDistance = 850; + this.splitContainer.TabIndex = 0; + // + // pnlLeft + // + this.pnlLeft.Controls.Add(this.dgvMessages); + this.pnlLeft.Controls.Add(this.pnlLeftTop); + this.pnlLeft.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlLeft.Location = new System.Drawing.Point(0, 0); + this.pnlLeft.Name = "pnlLeft"; + this.pnlLeft.Size = new System.Drawing.Size(850, 800); + this.pnlLeft.TabIndex = 0; + // + // dgvMessages + // + this.dgvMessages.AllowUserToAddRows = false; + this.dgvMessages.AllowUserToDeleteRows = false; + this.dgvMessages.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.dgvMessages.BackgroundColor = System.Drawing.Color.White; + this.dgvMessages.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(81)))), ((int)(((byte)(181))))); + dataGridViewCellStyle1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle1.ForeColor = System.Drawing.Color.White; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvMessages.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.dgvMessages.ColumnHeadersHeight = 35; + this.dgvMessages.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colTime, + this.colDirection, + this.colIpAddress, + this.colPort, + this.colLength, + this.colRawData, + this.colStationId, + this.type}); + this.dgvMessages.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvMessages.EnableHeadersVisualStyles = false; + this.dgvMessages.GridColor = System.Drawing.Color.LightGray; + this.dgvMessages.Location = new System.Drawing.Point(0, 80); + this.dgvMessages.MultiSelect = false; + this.dgvMessages.Name = "dgvMessages"; + this.dgvMessages.ReadOnly = true; + this.dgvMessages.RowHeadersVisible = false; + this.dgvMessages.RowHeadersWidth = 51; + this.dgvMessages.RowTemplate.Height = 30; + this.dgvMessages.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dgvMessages.Size = new System.Drawing.Size(850, 720); + this.dgvMessages.TabIndex = 1; + this.dgvMessages.SelectionChanged += new System.EventHandler(this.dgvMessages_SelectionChanged); + // + // colTime + // + this.colTime.FillWeight = 80F; + this.colTime.HeaderText = "时间"; + this.colTime.MinimumWidth = 6; + this.colTime.Name = "colTime"; + this.colTime.ReadOnly = true; + // + // colDirection + // + this.colDirection.FillWeight = 50F; + this.colDirection.HeaderText = "方向"; + this.colDirection.MinimumWidth = 6; + this.colDirection.Name = "colDirection"; + this.colDirection.ReadOnly = true; + // + // colIpAddress + // + this.colIpAddress.FillWeight = 80F; + this.colIpAddress.HeaderText = "IP地址"; + this.colIpAddress.MinimumWidth = 6; + this.colIpAddress.Name = "colIpAddress"; + this.colIpAddress.ReadOnly = true; + // + // colPort + // + this.colPort.FillWeight = 50F; + this.colPort.HeaderText = "端口"; + this.colPort.MinimumWidth = 6; + this.colPort.Name = "colPort"; + this.colPort.ReadOnly = true; + // + // colLength + // + this.colLength.FillWeight = 50F; + this.colLength.HeaderText = "长度"; + this.colLength.MinimumWidth = 6; + this.colLength.Name = "colLength"; + this.colLength.ReadOnly = true; + // + // colRawData + // + this.colRawData.FillWeight = 200F; + this.colRawData.HeaderText = "原始数据"; + this.colRawData.MinimumWidth = 6; + this.colRawData.Name = "colRawData"; + this.colRawData.ReadOnly = true; + // + // colStationId + // + this.colStationId.FillWeight = 80F; + this.colStationId.HeaderText = "充电桩"; + this.colStationId.MinimumWidth = 6; + this.colStationId.Name = "colStationId"; + this.colStationId.ReadOnly = true; + // + // type + // + this.type.HeaderText = "协议类型"; + this.type.MinimumWidth = 6; + this.type.Name = "type"; + this.type.ReadOnly = true; + // + // pnlLeftTop + // + this.pnlLeftTop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(250)))), ((int)(((byte)(250)))), ((int)(((byte)(250))))); + this.pnlLeftTop.Controls.Add(this.button1); + this.pnlLeftTop.Controls.Add(this.btnClear); + this.pnlLeftTop.Controls.Add(this.btnRefresh); + this.pnlLeftTop.Controls.Add(this.lblStatistics); + this.pnlLeftTop.Controls.Add(this.cmbIpFilter); + this.pnlLeftTop.Controls.Add(this.lblIpFilter); + this.pnlLeftTop.Dock = System.Windows.Forms.DockStyle.Top; + this.pnlLeftTop.Location = new System.Drawing.Point(0, 0); + this.pnlLeftTop.Name = "pnlLeftTop"; + this.pnlLeftTop.Padding = new System.Windows.Forms.Padding(10); + this.pnlLeftTop.Size = new System.Drawing.Size(850, 80); + this.pnlLeftTop.TabIndex = 0; + // + // button1 + // + this.button1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.button1.Location = new System.Drawing.Point(546, 16); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(80, 32); + this.button1.TabIndex = 5; + this.button1.Text = "暂停"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // btnClear + // + this.btnClear.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClear.Location = new System.Drawing.Point(460, 15); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(80, 32); + this.btnClear.TabIndex = 4; + this.btnClear.Text = "清空"; + this.btnClear.UseVisualStyleBackColor = true; + this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + // + // btnRefresh + // + this.btnRefresh.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRefresh.Location = new System.Drawing.Point(370, 15); + this.btnRefresh.Name = "btnRefresh"; + this.btnRefresh.Size = new System.Drawing.Size(80, 32); + this.btnRefresh.TabIndex = 3; + this.btnRefresh.Text = "刷新"; + this.btnRefresh.UseVisualStyleBackColor = true; + this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click); + // + // lblStatistics + // + this.lblStatistics.AutoSize = true; + this.lblStatistics.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblStatistics.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100))))); + this.lblStatistics.Location = new System.Drawing.Point(13, 52); + this.lblStatistics.Name = "lblStatistics"; + this.lblStatistics.Size = new System.Drawing.Size(115, 20); + this.lblStatistics.TabIndex = 2; + this.lblStatistics.Text = "显示: 0 | 总数: 0"; + // + // cmbIpFilter + // + this.cmbIpFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbIpFilter.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbIpFilter.FormattingEnabled = true; + this.cmbIpFilter.Location = new System.Drawing.Point(100, 17); + this.cmbIpFilter.Name = "cmbIpFilter"; + this.cmbIpFilter.Size = new System.Drawing.Size(250, 28); + this.cmbIpFilter.TabIndex = 1; + this.cmbIpFilter.SelectedIndexChanged += new System.EventHandler(this.cmbIpFilter_SelectedIndexChanged); + // + // lblIpFilter + // + this.lblIpFilter.AutoSize = true; + this.lblIpFilter.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblIpFilter.Location = new System.Drawing.Point(13, 21); + this.lblIpFilter.Name = "lblIpFilter"; + this.lblIpFilter.Size = new System.Drawing.Size(67, 20); + this.lblIpFilter.TabIndex = 0; + this.lblIpFilter.Text = "IP筛选:"; + // + // pnlRight + // + this.pnlRight.Controls.Add(this.txtParsedData); + this.pnlRight.Controls.Add(this.pnlRightTop); + this.pnlRight.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlRight.Location = new System.Drawing.Point(0, 0); + this.pnlRight.Name = "pnlRight"; + this.pnlRight.Size = new System.Drawing.Size(546, 800); + this.pnlRight.TabIndex = 0; + // + // txtParsedData + // + this.txtParsedData.BackColor = System.Drawing.Color.White; + this.txtParsedData.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtParsedData.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtParsedData.Location = new System.Drawing.Point(0, 60); + this.txtParsedData.Multiline = true; + this.txtParsedData.Name = "txtParsedData"; + this.txtParsedData.ReadOnly = true; + this.txtParsedData.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txtParsedData.Size = new System.Drawing.Size(546, 740); + this.txtParsedData.TabIndex = 1; + this.txtParsedData.WordWrap = false; + // + // pnlRightTop + // + this.pnlRightTop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(250)))), ((int)(((byte)(250)))), ((int)(((byte)(250))))); + this.pnlRightTop.Controls.Add(this.btnClose); + this.pnlRightTop.Controls.Add(this.lblParsedTitle); + this.pnlRightTop.Dock = System.Windows.Forms.DockStyle.Top; + this.pnlRightTop.Location = new System.Drawing.Point(0, 0); + this.pnlRightTop.Name = "pnlRightTop"; + this.pnlRightTop.Padding = new System.Windows.Forms.Padding(10); + this.pnlRightTop.Size = new System.Drawing.Size(546, 60); + this.pnlRightTop.TabIndex = 0; + // + // btnClose + // + this.btnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnClose.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClose.Location = new System.Drawing.Point(446, 15); + this.btnClose.Name = "btnClose"; + this.btnClose.Size = new System.Drawing.Size(80, 32); + this.btnClose.TabIndex = 1; + this.btnClose.Text = "关闭"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // lblParsedTitle + // + this.lblParsedTitle.AutoSize = true; + this.lblParsedTitle.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblParsedTitle.Location = new System.Drawing.Point(13, 20); + this.lblParsedTitle.Name = "lblParsedTitle"; + this.lblParsedTitle.Size = new System.Drawing.Size(112, 24); + this.lblParsedTitle.TabIndex = 0; + this.lblParsedTitle.Text = "报文数据解析"; + // + // CommunicationMonitorForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1400, 800); + this.Controls.Add(this.splitContainer); + this.Name = "CommunicationMonitorForm"; + this.Text = "通讯监控"; + this.Load += new System.EventHandler(this.CommunicationMonitorForm_Load); + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + this.pnlLeft.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvMessages)).EndInit(); + this.pnlLeftTop.ResumeLayout(false); + this.pnlLeftTop.PerformLayout(); + this.pnlRight.ResumeLayout(false); + this.pnlRight.PerformLayout(); + this.pnlRightTop.ResumeLayout(false); + this.pnlRightTop.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer; + private System.Windows.Forms.Panel pnlLeft; + private System.Windows.Forms.DataGridView dgvMessages; + private System.Windows.Forms.Panel pnlLeftTop; + private System.Windows.Forms.ComboBox cmbIpFilter; + private System.Windows.Forms.Label lblIpFilter; + private System.Windows.Forms.Panel pnlRight; + private System.Windows.Forms.TextBox txtParsedData; + private System.Windows.Forms.Panel pnlRightTop; + private System.Windows.Forms.Label lblParsedTitle; + private System.Windows.Forms.Label lblStatistics; + private System.Windows.Forms.Button btnRefresh; + private System.Windows.Forms.Button btnClear; + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.DataGridViewTextBoxColumn colTime; + private System.Windows.Forms.DataGridViewTextBoxColumn colDirection; + private System.Windows.Forms.DataGridViewTextBoxColumn colIpAddress; + private System.Windows.Forms.DataGridViewTextBoxColumn colPort; + private System.Windows.Forms.DataGridViewTextBoxColumn colLength; + private System.Windows.Forms.DataGridViewTextBoxColumn colRawData; + private System.Windows.Forms.DataGridViewTextBoxColumn colStationId; + private System.Windows.Forms.DataGridViewTextBoxColumn type; + private System.Windows.Forms.Button button1; + } +} + diff --git a/StandardScene.Core/Charge/CommunicationMonitorForm.cs b/StandardScene.Core/Charge/CommunicationMonitorForm.cs new file mode 100644 index 0000000..bc9db7f --- /dev/null +++ b/StandardScene.Core/Charge/CommunicationMonitorForm.cs @@ -0,0 +1,561 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; + +namespace StandardScene.Charge +{ + /// + /// 通讯监控窗体 + /// + public partial class CommunicationMonitorForm : Form + { + private readonly CommunicationMessageService messageService; + private bool isFormLoaded = false; + private bool isFormMessageStop = false; + private const int MaxDisplayRows = 100; + private const int UiBatchSize = 20; + private const int StatsRefreshMs = 500; + private readonly Queue pendingMessages = new Queue(); + private readonly object pendingMessagesLock = new object(); + private readonly Timer uiFlushTimer; + private readonly Timer statsRefreshTimer; + private bool pendingStatsRefresh = false; + private int lastDisplayCountForStats = 0; + public CommunicationMonitorForm() + { + InitializeComponent(); + messageService = CommunicationMessageService.Instance; + uiFlushTimer = new Timer { Interval = 500 }; + uiFlushTimer.Tick += UiFlushTimer_Tick; + statsRefreshTimer = new Timer { Interval = StatsRefreshMs }; + statsRefreshTimer.Tick += StatsRefreshTimer_Tick; + + // 订阅窗体关闭事件 + this.FormClosing += CommunicationMonitorForm_FormClosing; + } + + private void CommunicationMonitorForm_Load(object sender, EventArgs e) + { + try + { + InitializeForm(); + LoadMessages(); + + // 标记窗体已加载完成 + isFormLoaded = true; + uiFlushTimer.Start(); + statsRefreshTimer.Start(); + + // 在窗体加载完成后再订阅报文添加事件(避免在初始化期间触发) + messageService.MessageAdded += OnMessageAdded; + } + catch (Exception ex) + { + MessageBox.Show($"窗体加载失败: {ex.Message}\r\n{ex.StackTrace}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void InitializeForm() + { + this.Text = "通讯监控"; + this.Size = new Size(1400, 800); + this.StartPosition = FormStartPosition.CenterScreen; + this.MinimumSize = new Size(1200, 600); + + // 初始化IP筛选下拉框 + RefreshIpFilter(); + } + + /// + /// 刷新IP筛选下拉框 + /// + private void RefreshIpFilter() + { + try + { + if (cmbIpFilter == null || messageService == null) + return; + + var selectedIp = cmbIpFilter.SelectedItem?.ToString(); + + cmbIpFilter.Items.Clear(); + cmbIpFilter.Items.Add("全部"); + + var ipAddresses = messageService.GetUniqueIpAddresses(); + if (ipAddresses != null) + { + foreach (var ip in ipAddresses) + { + if (!string.IsNullOrEmpty(ip)) + { + cmbIpFilter.Items.Add(ip); + } + } + } + + // 恢复选中项 + if (!string.IsNullOrEmpty(selectedIp) && cmbIpFilter.Items.Contains(selectedIp)) + { + cmbIpFilter.SelectedItem = selectedIp; + } + else if (cmbIpFilter.Items.Count > 0) + { + cmbIpFilter.SelectedIndex = 0; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"刷新IP筛选失败: {ex.Message}"); + } + } + + /// + /// 加载报文列表 + /// + private void LoadMessages() + { + var layoutSuspended = false; + try + { + if (dgvMessages == null|| isFormMessageStop) + return; + + var selectedIp = cmbIpFilter?.SelectedItem?.ToString(); + var messages = string.IsNullOrEmpty(selectedIp) || selectedIp == "全部" + ? messageService.GetAllMessages() + : messageService.GetMessagesByIp(selectedIp); + + dgvMessages.SuspendLayout(); + layoutSuspended = true; + dgvMessages.Rows.Clear(); + + foreach (var msg in messages) + { + AddMessageRow(msg, false); + } + + UpdateStatistics(messages.Count); + pendingStatsRefresh = false; + } + catch (Exception ex) + { + MessageBox.Show($"加载报文失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + finally + { + if (layoutSuspended && dgvMessages != null) + { + dgvMessages.ResumeLayout(); + } + } + } + + /// + /// 定时批量刷新UI,避免每条报文都抢占UI线程 + /// + private void UiFlushTimer_Tick(object sender, EventArgs e) + { + if (!isFormLoaded || isFormMessageStop) + return; + + List batch = null; + lock (pendingMessagesLock) + { + if (pendingMessages.Count == 0) + return; + + int count = Math.Min(UiBatchSize, pendingMessages.Count); + batch = new List(count); + for (int i = 0; i < count; i++) + { + batch.Add(pendingMessages.Dequeue()); + } + } + + if (batch == null || batch.Count == 0) + return; + + dgvMessages.SuspendLayout(); + try + { + var selectedIp = cmbIpFilter?.SelectedItem?.ToString(); + bool displayChanged = false; + + foreach (var message in batch) + { + EnsureIpInFilter(message.IpAddress); + if (string.IsNullOrEmpty(selectedIp) || selectedIp == "全部" || selectedIp == message.IpAddress) + { + AddMessageRow(message, true); + displayChanged = true; + } + } + + if (displayChanged) + { + RequestStatisticsRefresh(dgvMessages.Rows.Count); + } + } + finally + { + dgvMessages.ResumeLayout(); + } + } + + /// + /// 统计信息低频刷新(500ms) + /// + private void StatsRefreshTimer_Tick(object sender, EventArgs e) + { + if (!isFormLoaded || isFormMessageStop || !pendingStatsRefresh) + return; + + pendingStatsRefresh = false; + UpdateStatistics(lastDisplayCountForStats); + } + + private void RequestStatisticsRefresh(int displayCount) + { + lastDisplayCountForStats = displayCount; + pendingStatsRefresh = true; + } + + private void EnsureIpInFilter(string ipAddress) + { + if (cmbIpFilter == null || string.IsNullOrWhiteSpace(ipAddress)) + return; + + if (!cmbIpFilter.Items.Contains(ipAddress)) + { + cmbIpFilter.Items.Add(ipAddress); + } + } + + /// + /// 向表格新增一条报文行(支持头部插入) + /// + private void AddMessageRow(CommunicationMessage msg, bool insertAtTop = true) + { + if (msg == null || dgvMessages == null) + return; + + DataGridViewRow row; + if (insertAtTop) + { + dgvMessages.Rows.Insert(0, + msg.Timestamp.ToString("HH:mm:ss.fff"), + msg.Direction == MessageDirection.Send ? "发送" : "接收", + msg.IpAddress, + msg.Port, + msg.Length, + msg.RawData, + msg.StationId ?? "-", + msg.Type); + row = dgvMessages.Rows[0]; + } + else + { + var index = dgvMessages.Rows.Add( + msg.Timestamp.ToString("HH:mm:ss.fff"), + msg.Direction == MessageDirection.Send ? "发送" : "接收", + msg.IpAddress, + msg.Port, + msg.Length, + msg.RawData, + msg.StationId ?? "-", + msg.Type); + row = dgvMessages.Rows[index]; + } + + if (msg.Direction == MessageDirection.Send) + { + row.DefaultCellStyle.BackColor = Color.FromArgb(232, 245, 233); + row.DefaultCellStyle.ForeColor = Color.FromArgb(46, 125, 50); + } + else + { + row.DefaultCellStyle.BackColor = Color.FromArgb(227, 242, 253); + row.DefaultCellStyle.ForeColor = Color.FromArgb(13, 71, 161); + } + + while (dgvMessages.Rows.Count > MaxDisplayRows) + { + dgvMessages.Rows.RemoveAt(dgvMessages.Rows.Count - 1); + } + } + + /// + /// 更新统计信息 + /// + private void UpdateStatistics(int displayCount) + { + try + { + if (lblStatistics == null || messageService == null) + return; + + var allMessages = messageService.GetAllMessages(); + if (allMessages == null) + return; + + var sendCount = allMessages.Count(m => m.Direction == MessageDirection.Send); + var receiveCount = allMessages.Count(m => m.Direction == MessageDirection.Receive); + + lblStatistics.Text = $"显示: {displayCount} | 总数: {allMessages.Count} | 发送: {sendCount} | 接收: {receiveCount}"; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"更新统计信息失败: {ex.Message}"); + if (lblStatistics != null) + { + lblStatistics.Text = "统计信息加载失败"; + } + } + } + + /// + /// 新报文添加事件处理(线程安全) + /// + private void OnMessageAdded(object sender, CommunicationMessage message) + { + // 如果窗体还未加载完成,忽略此事件 + if (!isFormLoaded || isFormMessageStop) + return; + + try + { + if (message == null) + { + return; + } + lock (pendingMessagesLock) + { + pendingMessages.Enqueue(message); + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"处理新报文失败: {ex.Message}"); + } + } + + /// + /// 解析报文数据 + /// + private void ParseMessage(CommunicationMessage message) + { + if (message == null || txtParsedData == null) + return; + + try + { + var parsed = new System.Text.StringBuilder(); + parsed.AppendLine("=== 报文解析 ==="); + parsed.AppendLine($"时间: {message.Timestamp:yyyy-MM-dd HH:mm:ss.fff}"); + parsed.AppendLine($"方向: {(message.Direction == MessageDirection.Send ? "发送" : "接收")}"); + parsed.AppendLine($"地址: {message.IpAddress}:{message.Port}"); + parsed.AppendLine($"站点: {message.StationId ?? "未关联"}"); + parsed.AppendLine($"长度: {message.Length} 字节"); + parsed.AppendLine(); + parsed.AppendLine("=== 原始数据 (HEX) ==="); + parsed.AppendLine(message.RawData); + // parsed.AppendLine(FormatHexString(message.RawData)); + parsed.AppendLine(); + parsed.AppendLine("=== 数据解析 ==="); + + // TODO: 根据实际协议进行解析 + parsed.AppendLine(); + if (message.Direction== MessageDirection.Send) + { + var sendDate = messageService.ParseSendRawData(message.RawData, message.Type); + parsed.AppendLine("示例解析:"); + parsed.AppendLine($"充电指令:{sendDate.ChargeCommand}"); + parsed.AppendLine($"发送电压:{sendDate.SetVoltage}"); + parsed.AppendLine($"发送电流:{sendDate.SetCurrent}"); + parsed.AppendLine($"车辆ID:{sendDate.CurrentVehicleId}"); + parsed.AppendLine($"车辆电量:{sendDate.BatteryLevel}"); + parsed.AppendLine($"车辆电压:{sendDate.CarVoltage}"); + parsed.AppendLine($"车辆电流:{sendDate.CarCurrent}"); + + } + else + { + + var recDate = messageService.ParseReceiveRawData(message.RawData, message.Type); + string mechanismStatus = (int)recDate.MechanismStatus == 1 ? "伸出" : (int)recDate.MechanismStatus == 2 ? "缩回" : (int)recDate.MechanismStatus == 3 ? "运动中" : recDate.MechanismStatus.ToString(); + parsed.AppendLine("示例解析:"); + parsed.AppendLine($"机构状态:{mechanismStatus}"); + parsed.AppendLine($"实时电压:{recDate.RealTimeVoltage}"); + parsed.AppendLine($"实时电流:{recDate.RealTimeCurrent}"); + parsed.AppendLine($"充电量: {recDate.BatteryAH}"); + parsed.AppendLine($"是否报警:{recDate.HasAlarm}"); + parsed.AppendLine($"充电状态:{recDate.Status.ToString()}"); + + } + + + + txtParsedData.Text = parsed.ToString(); + } + catch (Exception ex) + { + txtParsedData.Text = $"解析失败: {ex.Message}"; + } + } + + /// + /// 格式化十六进制字符串 + /// + private string FormatHexString(string hexData) + { + if (string.IsNullOrEmpty(hexData)) + return string.Empty; + + var formatted = new System.Text.StringBuilder(); + for (int i = 0; i < hexData.Length; i += 2) + { + if (i > 0 && i % 32 == 0) + formatted.AppendLine(); + else if (i > 0) + formatted.Append(" "); + + if (i + 1 < hexData.Length) + formatted.Append(hexData.Substring(i, 2)); + else + formatted.Append(hexData[i]); + } + return formatted.ToString(); + } + + // ==================== 事件处理 ==================== + + private void cmbIpFilter_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + LoadMessages(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"筛选改变失败: {ex.Message}"); + } + } + + private void dgvMessages_SelectionChanged(object sender, EventArgs e) + { + try + { + if (dgvMessages.SelectedRows.Count > 0) + { + var row = dgvMessages.SelectedRows[0]; + var rawData = row.Cells[5].Value?.ToString(); + var ipAddress = row.Cells[2].Value?.ToString(); + var port = int.Parse(row.Cells[3].Value?.ToString() ?? "0"); + var timeStr = row.Cells[0].Value?.ToString(); + var directionStr = row.Cells[1].Value?.ToString(); + var stationId = row.Cells[6].Value?.ToString(); + var type = row.Cells[7].Value?.ToString(); + + // 构造消息对象用于解析 + var message = new CommunicationMessage + { + RawData = rawData, + IpAddress = ipAddress, + Port = port, + Direction = directionStr == "发送" ? MessageDirection.Send : MessageDirection.Receive, + StationId = stationId == "-" ? null : stationId, + Length = rawData.Split(' ')?.Length ?? 0, + Type=type, + + }; + + if (DateTime.TryParse(timeStr, out DateTime timestamp)) + { + message.Timestamp = timestamp; + } + + ParseMessage(message); + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"选择报文失败: {ex.Message}"); + } + } + + private void btnRefresh_Click(object sender, EventArgs e) + { + try + { + RefreshIpFilter(); + LoadMessages(); + RequestStatisticsRefresh(dgvMessages?.Rows.Count ?? 0); + } + catch (Exception ex) + { + MessageBox.Show($"刷新失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnClear_Click(object sender, EventArgs e) + { + try + { + var result = MessageBox.Show( + "确定要清空所有报文记录吗?", + "确认清空", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question); + + if (result == DialogResult.Yes) + { + messageService.Clear(); + RefreshIpFilter(); + LoadMessages(); + if (txtParsedData != null) + { + txtParsedData.Clear(); + } + dgvMessages.Rows.Clear(); + RequestStatisticsRefresh(0); + } + + } + catch (Exception ex) + { + MessageBox.Show($"清空报文失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnClose_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void CommunicationMonitorForm_FormClosing(object sender, FormClosingEventArgs e) + { + // 取消订阅事件 + messageService.MessageAdded -= OnMessageAdded; + uiFlushTimer.Stop(); + uiFlushTimer.Dispose(); + statsRefreshTimer.Stop(); + statsRefreshTimer.Dispose(); + } + + private void button1_Click(object sender, EventArgs e) + { + isFormMessageStop = !isFormMessageStop; + if (sender is Button pauseButton) + { + pauseButton.Text = isFormMessageStop ? "继续" : "暂停"; + } + } + } +} + diff --git a/StandardScene.Core/Charge/CommunicationMonitorForm.resx b/StandardScene.Core/Charge/CommunicationMonitorForm.resx new file mode 100644 index 0000000..a41e003 --- /dev/null +++ b/StandardScene.Core/Charge/CommunicationMonitorForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + \ No newline at end of file diff --git a/StandardScene.Core/Charge/QUICKSTART.md b/StandardScene.Core/Charge/QUICKSTART.md new file mode 100644 index 0000000..3da8731 --- /dev/null +++ b/StandardScene.Core/Charge/QUICKSTART.md @@ -0,0 +1,413 @@ +# 🚀 充电桩管理系统 - 快速启动指南 + +## 📦 文件清单 + +已创建的文件: +``` +Charge/ +├── ChargeStation.cs # 充电桩数据模型 +├── ChargeStationDataService.cs # 数据服务(单例) +├── ChargeStationManagementForm.cs # 管理窗口主类 +├── ChargeStationManagementForm.Designer.cs # 窗口UI设计 +├── ChargeStationManagementExample.cs # 示例代码 +├── README_ChargeStationManagement.md # 详细使用说明 +└── QUICKSTART.md # 本文件 +``` + +## ⚡ 5分钟快速上手 + +### 步骤1:在主窗口添加菜单(推荐方式) + +如果您的主窗口有菜单栏,添加一个菜单项: + +```csharp +// 在主窗口的 InitializeComponent() 或构造函数中添加 + +// 方法1: 如果有工具栏 +var btnChargeManagement = new ToolStripButton("充电桩管理"); +btnChargeManagement.Click += (s, e) => { + var form = new StandardScene.Charge.ChargeStationManagementForm(); + form.Show(); +}; +toolStrip.Items.Add(btnChargeManagement); + +// 方法2: 如果有菜单栏 +var menuItemCharge = new ToolStripMenuItem("充电桩管理(&C)"); +menuItemCharge.Click += (s, e) => { + var form = new StandardScene.Charge.ChargeStationManagementForm(); + form.Show(); +}; +menuStrip.Items.Add(menuItemCharge); + +// 方法3: 如果有按钮面板 +var btnChargeManagement = new Button +{ + Text = "充电桩管理", + Size = new Size(120, 40), + Location = new Point(10, 10) +}; +btnChargeManagement.Click += (s, e) => { + var form = new StandardScene.Charge.ChargeStationManagementForm(); + form.Show(); +}; +this.Controls.Add(btnChargeManagement); +``` + +### 步骤2:初始化测试数据(首次运行) + +在程序启动时或通过菜单调用: + +```csharp +// 在主窗口的 Load 事件或启动代码中 +StandardScene.Charge.ChargeStationManagementExample.InitializeTestData(); +``` + +### 步骤3:打开管理窗口 + +点击您添加的菜单项或按钮,即可打开充电桩管理窗口。 + +--- + +## 🎯 集成到 AbstractChargeMission + +如果您想将充电桩数据与充电任务关联,在 `AbstractChargeMission.cs` 中添加: + +### 1. 引用命名空间 + +```csharp +using StandardScene.Charge; +``` + +### 2. 在选择充电站点时使用充电桩数据 + +```csharp +// 在 Execute() 方法的充电决策部分 +var dataService = ChargeStationDataService.Instance; + +// 获取空闲的充电桩 +var idleStations = dataService.GetIdleStations(); + +// 根据充电桩的站点ID筛选 +targetPlan = Commons.GetNearestPlan((Car)car, site => + site.fields.ContainsKey("group") && + site.fields.ContainsKey("Charge") && + GetChargeType(car).Contains(site.fields["group"]) && + idleStations.Any(s => s.SiteId == site.id) // 确保站点有空闲充电桩 +); +``` + +### 3. 在开始充电时更新充电桩状态 + +```csharp +// 在车辆到达充电站时 +public override void ArriveAction(Car car, Site site) +{ + var dataService = ChargeStationDataService.Instance; + var station = dataService.GetAllStations() + .FirstOrDefault(s => s.SiteId == site.id && s.Status == ChargeStationStatus.Idle); + + if (station != null) + { + dataService.UpdateStationStatus(station.StationId, ChargeStationStatus.Charging); + car.tags.Add("chargingStationId", station.StationId); + + Diagnosis.Log($"车辆 {car.name} 开始在充电桩 {station.Name} 充电", + "Charge", true); + } +} +``` + +### 4. 在离开充电站时更新充电桩状态 + +```csharp +// 在车辆离开充电站时 +public override void LeaveAction(Car car, Site site) +{ + if (car.tags.TryGetValue("chargingStationId", out var stationId)) + { + var dataService = ChargeStationDataService.Instance; + dataService.UpdateStationStatus(stationId, ChargeStationStatus.Idle); + car.tags.Remove("chargingStationId"); + + Diagnosis.Log($"车辆 {car.name} 充电完成,充电桩 {stationId} 恢复空闲", + "Charge", true); + } +} +``` + +--- + +## 📊 在主界面显示充电桩统计 + +在主窗口添加实时统计显示: + +```csharp +// 添加一个 Timer 定时更新统计信息 +private Timer chargeStationStatusTimer; +private Label lblChargeStationStatus; + +private void InitializeChargeStationMonitor() +{ + // 创建状态标签 + lblChargeStationStatus = new Label + { + Text = "充电桩: 加载中...", + AutoSize = true, + Location = new Point(10, 10), + Font = new Font("微软雅黑", 10F, FontStyle.Bold) + }; + this.Controls.Add(lblChargeStationStatus); + + // 创建定时器(每3秒更新一次) + chargeStationStatusTimer = new Timer + { + Interval = 3000, + Enabled = true + }; + chargeStationStatusTimer.Tick += UpdateChargeStationStatus; + chargeStationStatusTimer.Start(); +} + +private void UpdateChargeStationStatus(object sender, EventArgs e) +{ + try + { + var dataService = StandardScene.Charge.ChargeStationDataService.Instance; + var stations = dataService.GetAllStations(); + + var idle = stations.Count(s => s.Status == StandardScene.Charge.ChargeStationStatus.Idle); + var charging = stations.Count(s => s.Status == StandardScene.Charge.ChargeStationStatus.Charging); + var fault = stations.Count(s => s.Status == StandardScene.Charge.ChargeStationStatus.Fault); + + lblChargeStationStatus.Text = $"充电桩: 总数 {stations.Count} | " + + $"空闲 {idle} | 充电中 {charging} | 故障 {fault}"; + + // 根据状态设置颜色 + if (fault > 0) + lblChargeStationStatus.ForeColor = Color.Red; + else if (idle == 0 && charging > 0) + lblChargeStationStatus.ForeColor = Color.Orange; + else + lblChargeStationStatus.ForeColor = Color.Green; + } + catch (Exception ex) + { + lblChargeStationStatus.Text = $"充电桩: 获取状态失败 - {ex.Message}"; + lblChargeStationStatus.ForeColor = Color.Gray; + } +} +``` + +--- + +## 🔧 配置充电桩与站点的映射 + +### 方式1: 在站点属性中添加充电桩编号 + +修改地图站点的 `fields`: + +```csharp +// 为站点添加充电桩编号 +site.fields.Add("ChargeStationId", "CS20240115123456"); +``` + +### 方式2: 在充电桩管理界面直接设置站点ID + +在充电桩管理窗口中,编辑充电桩时填写"站点ID"字段。 + +### 方式3: 自动关联(代码实现) + +```csharp +// 自动将充电桩与最近的充电站点关联 +public void AutoAssignStationsToSites() +{ + var dataService = ChargeStationDataService.Instance; + var allStations = dataService.GetAllStations(); + var chargeSites = SimpleLib.GetAllSites() + .Where(s => s.fields.ContainsKey("Charge")) + .ToList(); + + foreach (var station in allStations) + { + if (station.SiteId == null || station.SiteId == 0) + { + // 根据名称或其他规则自动匹配站点 + var matchedSite = chargeSites.FirstOrDefault(s => + s.fields.ContainsKey("name") && + s.fields["name"].Contains(station.Name) + ); + + if (matchedSite != null) + { + station.SiteId = matchedSite.id; + dataService.UpdateStation(station, out _); + + Diagnosis.Log($"自动关联充电桩 {station.Name} 到站点 {matchedSite.id}", + "ChargeStation", true); + } + } + } +} +``` + +--- + +## 📱 添加快捷键 + +为管理窗口添加快捷键(在主窗口): + +```csharp +protected override bool ProcessCmdKey(ref Message msg, Keys keyData) +{ + // Ctrl+C 打开充电桩管理 + if (keyData == (Keys.Control | Keys.C)) + { + var form = new StandardScene.Charge.ChargeStationManagementForm(); + form.Show(); + return true; + } + + return base.ProcessCmdKey(ref msg, keyData); +} +``` + +--- + +## 🎨 自定义界面样式 + +如果需要调整窗口样式,修改 `ChargeStationManagementForm.Designer.cs`: + +```csharp +// 修改窗口大小 +this.Size = new Size(1400, 800); + +// 修改按钮颜色 +btnAdd.BackColor = Color.FromArgb(144, 238, 144); // 浅绿色 +btnSave.BackColor = Color.FromArgb(135, 206, 250); // 浅蓝色 +btnDelete.BackColor = Color.FromArgb(255, 182, 193); // 浅红色 + +// 修改字体 +this.Font = new Font("微软雅黑", 9F); +``` + +--- + +## 🐛 常见问题 + +### Q1: 窗口打不开 +**A**: 检查是否正确引用了命名空间: +```csharp +using StandardScene.Charge; +``` + +### Q2: 数据保存失败 +**A**: 确保 `Data` 文件夹有写入权限: +```bash +# Windows +右键 Data 文件夹 -> 属性 -> 安全 -> 确保当前用户有"写入"权限 +``` + +### Q3: 找不到充电桩数据 +**A**: 首次运行时需要初始化数据: +```csharp +ChargeStationManagementExample.InitializeTestData(); +``` + +### Q4: 充电桩状态不更新 +**A**: 手动刷新数据: +```csharp +ChargeStationDataService.Instance.Reload(); +``` + +--- + +## 📚 进阶功能 + +### 实时监控充电桩通信状态 + +```csharp +// 定期 Ping 充电桩 IP +private async Task PingChargeStation(string ip, int port) +{ + try + { + using (var client = new System.Net.Sockets.TcpClient()) + { + var result = client.BeginConnect(ip, port, null, null); + var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(3)); + + if (success) + { + client.EndConnect(result); + return true; + } + return false; + } + } + catch + { + return false; + } +} +``` + +### 充电桩数据可视化 + +```csharp +// 在主界面添加充电桩状态图表 +private void DrawChargeStationChart(Graphics g) +{ + var dataService = ChargeStationDataService.Instance; + var stations = dataService.GetAllStations(); + + int x = 10, y = 10, size = 40; + + foreach (var station in stations) + { + Color color = station.Status switch + { + ChargeStationStatus.Idle => Color.Green, + ChargeStationStatus.Charging => Color.Yellow, + ChargeStationStatus.Fault => Color.Red, + ChargeStationStatus.Offline => Color.Gray, + _ => Color.White + }; + + g.FillRectangle(new SolidBrush(color), x, y, size, size); + g.DrawString(station.Name, this.Font, Brushes.Black, x, y + size + 5); + + x += size + 10; + if (x > this.Width - 100) + { + x = 10; + y += size + 30; + } + } +} +``` + +--- + +## 🎉 完成 + +现在您已经完成了充电桩管理系统的集成! + +**下一步**: +1. ✅ 添加菜单项或按钮 +2. ✅ 初始化测试数据 +3. ✅ 打开管理窗口测试 +4. ✅ 将充电桩数据集成到充电任务 +5. ✅ 添加实时监控和统计 + +**需要帮助?** +- 查看 `README_ChargeStationManagement.md` 获取详细文档 +- 参考 `ChargeStationManagementExample.cs` 查看示例代码 +- 检查日志中的 `ChargeStation` 标签 + +--- + +**版本**: 1.0.0 +**最后更新**: 2024-01-15 + + + diff --git a/StandardScene.Core/Charge/README_ChargeStationManagement.md b/StandardScene.Core/Charge/README_ChargeStationManagement.md new file mode 100644 index 0000000..6600042 --- /dev/null +++ b/StandardScene.Core/Charge/README_ChargeStationManagement.md @@ -0,0 +1,310 @@ +# 充电桩管理系统使用说明 + +## 📋 概述 + +充电桩管理系统是一个基于 WinForms 的可视化管理工具,用于管理 AGV 系统中的充电桩设备。 + +## 🚀 快速开始 + +### 打开管理窗口 + +```csharp +// 在代码中打开充电桩管理窗口 +var form = new StandardScene.Charge.ChargeStationManagementForm(); +form.ShowDialog(); + +// 或者在按钮点击事件中 +private void btnOpenChargeManagement_Click(object sender, EventArgs e) +{ + var form = new StandardScene.Charge.ChargeStationManagementForm(); + form.Show(); +} +``` + +### 添加菜单项(推荐) + +在主窗口的菜单栏中添加: + +```csharp +// 在主窗口的初始化代码中 +var menuItem = new ToolStripMenuItem("充电桩管理"); +menuItem.Click += (s, e) => { + var form = new StandardScene.Charge.ChargeStationManagementForm(); + form.Show(); +}; +// 将 menuItem 添加到主菜单 +``` + +## 📖 功能说明 + +### 1. 充电桩列表(左侧面板) + +#### 功能特性 +- **实时显示**:显示所有充电桩的详细信息 +- **颜色标识**: + - 🟢 **绿色**:充电中 + - 🔴 **红色**:故障 + - ⚫ **灰色**:离线 + - ⚪ **白色**:空闲/其他状态 +- **搜索功能**:支持按编号、名称、IP地址搜索 +- **双击编辑**:双击列表项可快速编辑 + +#### 列表字段 +| 字段 | 说明 | 示例 | +|-----|------|------| +| 编号 | 充电桩唯一标识 | CS20240115123456 | +| 名称 | 充电桩名称 | 1号充电桩 | +| IP地址 | 设备IP | 192.168.1.100 | +| 端口 | 通信端口 | 502 | +| 电压(V) | 额定电压 | 220.0 | +| 电流(A) | 额定电流 | 32.0 | +| 功率(W) | 计算功率 | 7040.0 | +| 状态 | 当前状态 | 空闲/充电中/故障 | +| 启用 | 是否启用 | 是/否 | +| 站点ID | 关联站点 | 1001 | +| 备注 | 备注信息 | 南区1号充电桩 | + +### 2. 充电桩编辑(右侧面板) + +#### 必填字段 +- ✅ **编号**:自动生成(格式:CS+时间戳+随机数) +- ✅ **名称**:充电桩名称,便于识别 +- ✅ **IP地址**:设备IP,必须为有效IP格式 +- ✅ **端口**:通信端口(1-65535) +- ✅ **电压**:额定电压(0-1000V) +- ✅ **电流**:额定电流(0-500A) + +#### 选填字段 +- 📌 **状态**:空闲/充电中/故障/离线/维护中/预约中 +- 📌 **启用**:是否启用该充电桩 +- 📌 **站点ID**:关联的站点编号(与地图站点关联) +- 📌 **备注**:额外说明信息 + +#### 自动计算 +- ⚡ **功率**:自动计算(电压 × 电流) + +### 3. 操作按钮 + +#### 右侧编辑区 +- 🆕 **新增**:清空表单,准备添加新充电桩 +- 💾 **保存**:保存当前充电桩信息(新增或更新) +- 🗑️ **删除**:删除当前选中的充电桩 +- ❌ **取消**:清空表单 + +#### 左侧列表区 +- 🔄 **刷新**:重新加载数据 +- 📤 **导出**:导出充电桩数据为 JSON 或 CSV 文件 + +## 🔒 数据验证规则 + +### IP地址验证 +``` +✅ 有效:192.168.1.100, 10.0.0.1, 172.16.0.1 +❌ 无效:192.168.1, 256.1.1.1, abc.def.ghi.jkl +``` + +### 端口验证 +``` +✅ 有效:502, 8080, 1234 +❌ 无效:0, 70000, -1 +``` + +### 电压验证 +``` +✅ 有效:220V, 380V, 110V +❌ 无效:-10V, 1500V, 0V +``` + +### 电流验证 +``` +✅ 有效:32A, 16A, 63A +❌ 无效:-5A, 600A, 0A +``` + +### 唯一性验证 +- ❌ 编号不能重复 +- ❌ IP地址+端口组合不能重复 + +## 💾 数据存储 + +### 存储位置 +``` +项目根目录/Data/ChargeStations.json +``` + +### 数据格式 +```json +[ + { + "StationId": "CS20240115123456", + "Name": "1号充电桩", + "IpAddress": "192.168.1.100", + "Port": 502, + "Voltage": 220.0, + "Current": 32.0, + "Status": 0, + "Enabled": true, + "SiteId": 1001, + "Remarks": "南区1号充电桩", + "CreatedTime": "2024-01-15T12:34:56", + "ModifiedTime": "2024-01-15T14:20:30" + } +] +``` + +## 📊 代码集成 + +### 获取充电桩数据 + +```csharp +using StandardScene.Charge; + +// 获取数据服务实例 +var dataService = ChargeStationDataService.Instance; + +// 获取所有充电桩 +var allStations = dataService.GetAllStations(); + +// 获取空闲充电桩 +var idleStations = dataService.GetIdleStations(); + +// 根据编号获取充电桩 +var station = dataService.GetStationById("CS20240115123456"); + +// 获取充电中的充电桩数量 +int chargingCount = dataService.GetChargingCount(); +``` + +### 添加/更新充电桩 + +```csharp +// 创建新充电桩 +var newStation = new ChargeStation +{ + Name = "2号充电桩", + IpAddress = "192.168.1.101", + Port = 502, + Voltage = 220.0, + Current = 32.0 +}; + +// 添加 +if (dataService.AddStation(newStation, out string errorMsg)) +{ + Console.WriteLine("添加成功"); +} +else +{ + Console.WriteLine($"添加失败: {errorMsg}"); +} + +// 更新状态 +dataService.UpdateStationStatus("CS20240115123456", ChargeStationStatus.Charging); +``` + +### 删除充电桩 + +```csharp +// 删除充电桩 +if (dataService.DeleteStation("CS20240115123456", out string errorMsg)) +{ + Console.WriteLine("删除成功"); +} +else +{ + Console.WriteLine($"删除失败: {errorMsg}"); +} +``` + +## ⚠️ 注意事项 + +1. **数据持久化**:所有数据自动保存到 JSON 文件,重启后数据不会丢失 +2. **线程安全**:数据服务使用单例模式和锁机制,支持多线程访问 +3. **状态管理**:充电中的充电桩无法删除,需先停止充电 +4. **IP冲突检测**:系统会自动检测IP和端口的冲突 +5. **数据备份**:建议定期备份 `Data/ChargeStations.json` 文件 + +## 🔧 扩展功能建议 + +### 与充电任务集成 + +在 `AbstractChargeMission.cs` 中集成充电桩数据: + +```csharp +// 在充电任务中获取充电桩信息 +private void SelectChargeStation(Car car) +{ + var dataService = ChargeStationDataService.Instance; + var idleStations = dataService.GetIdleStations(); + + if (idleStations.Count > 0) + { + var nearestStation = FindNearestStation(car, idleStations); + + // 更新充电桩状态 + dataService.UpdateStationStatus( + nearestStation.StationId, + ChargeStationStatus.Reserved + ); + + // 分配车辆到充电桩 + AssignCarToStation(car, nearestStation); + } +} + +// 充电完成后 +private void OnChargeComplete(Car car, ChargeStation station) +{ + var dataService = ChargeStationDataService.Instance; + dataService.UpdateStationStatus( + station.StationId, + ChargeStationStatus.Idle + ); +} +``` + +### 监控充电桩状态 + +```csharp +// 定期检查充电桩在线状态 +private void MonitorChargeStations() +{ + var dataService = ChargeStationDataService.Instance; + var stations = dataService.GetAllStations(); + + foreach (var station in stations) + { + if (station.Enabled) + { + bool isOnline = PingStation(station.IpAddress, station.Port); + + var newStatus = isOnline + ? ChargeStationStatus.Idle + : ChargeStationStatus.Offline; + + if (station.Status != newStatus) + { + dataService.UpdateStationStatus(station.StationId, newStatus); + Diagnosis.Log($"充电桩 {station.Name} 状态变更: {newStatus}", + "ChargeStation", true); + } + } + } +} +``` + +## 📞 技术支持 + +如有问题,请检查: +1. `Data` 文件夹是否有写入权限 +2. JSON 文件格式是否正确 +3. 日志中的错误信息(标签:`ChargeStation`) + +--- + +**版本**: 1.0.0 +**最后更新**: 2024-01-15 +**作者**: MDCS System + + + diff --git a/StandardScene.Core/Charge/StandardChargeMission.cs b/StandardScene.Core/Charge/StandardChargeMission.cs new file mode 100644 index 0000000..22d8820 --- /dev/null +++ b/StandardScene.Core/Charge/StandardChargeMission.cs @@ -0,0 +1,785 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using CommonUsage; +using LessokajiWeaverUtilities.Utilities; +using Newtonsoft.Json; +using SimpleLite; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using SimpleCore.Library; +using SimpleCore.PropType; +using StandardScene.Chained; +using StandardScene.ChargeStationType; +using StandardScene.Model; + +namespace StandardScene.Charge +{ + /// + /// 标准充电进程状态 + /// + public class StandardChargeMissionStatus : AbstractChargeMissionStatus + { + /// + /// 是否屏蔽充电桩交互(true=屏蔽,false=允许) + /// + public bool ShieldInterLock = false; + } + + /// + /// 标准充电进程 + /// 负责充电桩的初始化、通讯管理和充电业务逻辑处理 + /// + [MissionType(Name = "充电进程", editor = typeof(StandardChargeMission))] + [I18N.DocumentTranslation(Name = "Charge Mission", locale = "en")] + public class StandardChargeMission : AbstractChargeLogiceMission + { + #region 字段和属性 + + /// + /// 充电站字典 Key=站点ID, Value=充电站对象 + /// + [JsonIgnore] + public Dictionary ChargeStations; + + /// + /// 进程状态 + /// + public override MissionStatus status { get; set; } = new StandardChargeMissionStatus(); + + /// + /// 进程是否已启动 + /// + [JsonIgnore] + public bool myStarted = false; + + /// + /// 时间同步服务是否已启动 + /// + [JsonIgnore] + public bool tsStarted = false; + + /// + /// 充电处理线程 + /// + [JsonIgnore] + private Thread ChargeThread; + + /// + /// 当前正在充电的车辆 Key=车辆ID, Value=充电次数 + /// + [JsonIgnore] + public Dictionary inChargeCar = new(); + + /// + /// 上一次充电的车辆记录 + /// + [JsonIgnore] + public Dictionary lastinChargeCar = new(); + + /// + /// 充电开始时间 Key=车辆ID, Value=开始时间 + /// + [JsonIgnore] + public Dictionary BeginTime = new(); + + /// + /// 充电条件状态 + /// + [JsonIgnore] + public Dictionary Condition = new(); + + /// + /// 上一次充电条件状态 + /// + [JsonIgnore] + public Dictionary lastCondition = new(); + + /// + /// 充电超时时间(小时) + /// + [JsonIgnore] + public double outtimeOfCharge = 0.5; + + /// + /// UDP通讯服务 + /// + [JsonIgnore] + public ChargeUdpService UdpService; + + #endregion + + #region 辅助方法 + + /// + /// 获取最低电量车辆的SOC值 + /// 用于充电策略判断,找到系统中电量最低的空闲车辆 + /// + /// 当前车辆 + /// 所有充电站点列表 + /// 最低电量值 + public override float LowerCarSoc(AbstractCar car, List allChargeSite) + { + try + { + // 查找符合条件的最低电量车辆: + // 1. 车辆在有效站点上(GetLastSite != -1) + // 2. 车辆有坐标信息(haveCoordination) + // 3. 车辆未被占用(!occupied) + // 4. 车辆未在充电(!charging) + // 5. 车辆不在充电站点上 + // 6. 车辆在线 + var lowCar = SimpleLib.GetAllCars() + .OfType() + .ToList() + .FindAll(p => + p.GetLastSite() != -1 && + p.haveCoordination && + !p.tags.Contains("occupied") && + !p.tags.Contains("charging") && + !allChargeSite.Contains(SimpleLib.GetSite(p.GetLastSite())) && + IsOnlineCar((Car)p)) + .OrderBy(p => Commons.CarValue(p, "Soc")) + .FirstOrDefault(); + + // 如果没有找到符合条件的车辆,返回当前车辆的电量 + if (lowCar == null) + return (float)Commons.CarValue((Car)car, "Soc"); + + return (float)Commons.CarValue(lowCar, "Soc"); + } + catch (Exception e) + { + Diagnosis.Post($"获取最低电量车辆失败: {e.Message}", "error"); + return (float)0; + } + } + + /// + /// 获取车辆的充电类型 + /// 根据车辆字段判断是FRLD还是MuXing类型 + /// + /// 车辆对象 + /// 充电类型字符串 + public override string GetChargeType(AbstractCar car) + { + if (car is null) + { + return ""; + } + + // 优先判断FRLD类型 + if (car.fields.ContainsKey("FRLD")) + return "FRLD"; + + // 其次判断MuXing类型 + if (car.fields.ContainsKey("MuXing")) + return "MuXing"; + + // 默认返回MuXing + return "MuXing"; + } + + /// + /// 判断车辆是否在线 + /// 通过车辆是否在有效站点上来判断 + /// + /// 车辆对象 + /// true=在线, false=离线 + public override bool IsOnlineCar(Car car) + { + return car.GetLastSite() != -1; + } + + /// + /// 车辆到达站点时的处理 + /// 记录车辆到达充电站点的日志 + /// + /// 车辆对象 + /// 站点对象 + public override void ArriveAction(Car car, Site site) + { + // 判断是否为充电站点 + if (site.fields.TryGetValue("Charge", out var strStationId)) + { + // 记录到达日志(模拟车辆除外) + if (!car.name.Contains("模拟")) + { + Diagnosis.Post($"{car.name}({car.id})到达充电站点{site.id}"); + } + } + else + { + Diagnosis.Post($"arrived, site{site.id} is not charge site"); + } + } + + /// + /// 车辆离开站点时的处理 + /// 记录车辆离开充电站点的日志 + /// + /// 车辆对象 + /// 站点对象 + public override void LeaveAction(Car car, Site site) + { + // 判断是否为充电站点 + if (site.fields.TryGetValue("Charge", out var strStationId)) + { + // 记录离开日志(模拟车辆除外) + if (!car.name.Contains("模拟")) + { + Diagnosis.Post($"{car.name}({car.id})离开充电站点{site.id}"); + } + } + else + { + Diagnosis.Post($"left, site{site.id} is not charge site"); + } + } + + /// + /// 站点筛选器 + /// 判断站点是否为充电站点 + /// + /// 站点ID + /// true=充电站点, false=非充电站点 + public override bool SiteFilter(int siteId) + { + // 如果未屏蔽充电桩交互,返回false + if (((StandardChargeMissionStatus)status).ShieldInterLock) + { + return false; + } + + // 检查站点字段中是否包含"Charge"关键字 + var site = SimpleLib.GetSite(siteId); + return site.fields.Keys.ToList().Any(p => p.Contains("Charge")); + } + + #endregion + + #region 核心业务方法 + + /// + /// 启动充电进程 + /// 初始化充电站、创建通讯连接、启动充电业务循环 + /// + [MethodMember(Name = "启动进程", Description = "开始处理充电维护进程")] + public override void Execute() + { + + + // 防止重复启动 + if (myStarted) + { + MessageBox.Show("充电进程已启动,不可重复启动"); + return; + } + status.status = "已启动"; + + + myStarted = true; + int iteration = 0; + ChargeStations = new Dictionary(); + + // 创建充电处理线程 + ChargeThread = new Thread(() => + { + ChargeStations = new Dictionary(); + + while (true) + { + try + { + if (status.status.Contains("已停止")) + { + break; + } + var shieldInterLock = ((StandardChargeMissionStatus)status).ShieldInterLock; + + // ==================== 步骤1: 初始化充电站 ==================== + // 从充电桩管理配置中获取所有充电桩配置 + var allStationConfigs = ChargeStationHelper.GetAllStationConfigs(); + + // 遍历所有充电桩配置,创建充电站实例 + foreach (var stationConfig in allStationConfigs) + { + // 1.1 检查充电桩是否启用 + if (!stationConfig.Enabled) + { + Diagnosis.Log($"ChargeStation[{stationConfig.StationId}] is disabled, skip"); + continue; + } + + // 1.2 验证站点ID + if (!stationConfig.SiteId.HasValue || stationConfig.SiteId.Value <= 0) + { + Diagnosis.Log($"ChargeStation[{stationConfig.StationId}] has invalid SiteId, skip"); + continue; + } + + int siteId = stationConfig.SiteId.Value; + + // 1.4 验证IP地址格式 + if (string.IsNullOrWhiteSpace(stationConfig.IpAddress) || + !IPAddress.TryParse(stationConfig.IpAddress, out var ipAddress)) + { + Diagnosis.Log($"ERR:ChargeStation[{stationConfig.StationId}] IP[{stationConfig.IpAddress}] is invalid"); + continue; + } + + // 1.5 验证端口范围 + int port = stationConfig.Port; + if (port <= 0 || port > 65535) + { + Diagnosis.Log($"ERR:ChargeStation[{stationConfig.StationId}] Port[{port}] is invalid"); + continue; + } + + // 1.3 检查站点是否已存在,以及IP/端口是否变更 + if (ChargeStations.ContainsKey(siteId)) + { + var existingStation = ChargeStations[siteId]; + + // 检查IP或端口是否变更 + if (existingStation.Ip != ipAddress.ToString() || + existingStation.Port != port) + { + Diagnosis.Log($"ChargeStation[{stationConfig.StationId}] IP/Port changed from [{existingStation.Ip}:{existingStation.Port}] to [{ipAddress}:{port}], recreating connection..."); + + // 先关闭旧连接 + try + { + existingStation.CloseCommunication(); + } + catch (Exception ex) + { + Diagnosis.Log($"WARN:ChargeStation[{stationConfig.StationId}] failed to close old connection: {ex.Message}"); + } + + // 更新IP和端口 + existingStation.Ip = ipAddress.ToString(); + existingStation.Port = port; + + // 重新创建通讯连接 + try + { + existingStation.CreateCommunication(ipAddress, port); + Diagnosis.Log($"ChargeStation[{stationConfig.StationId}] connection recreated successfully"); + } + catch (Exception ex) + { + Diagnosis.Log($"ERR:ChargeStation[{stationConfig.StationId}] failed to recreate connection: {ex.Message}"); + } + } + + // 站点已存在且IP/端口未变更,跳过 + continue; + } + + // 1.6 根据充电桩类型创建对应的充电站对象 + string chargeTypeString = GetChargeTypeString(stationConfig.Type); + // 跨程序集解析:充电桩具体类型可能位于卫星插件 dll(StandardScene.Devices.Charge), + // 不能再用 Type.GetType(简单名,仅当前程序集)。改用内核同款全域类型发现。 + string chargeTypeFullName = "StandardScene.ChargeStationType." + chargeTypeString; + Type type = SimpleLite.Utils.UiTypeDiscovery.AllTypes() + .FirstOrDefault(t => t.FullName == chargeTypeFullName); + + if (type == null) + { + Diagnosis.Log($"ERR:ChargeStation[{stationConfig.StationId}] Type[{chargeTypeString}] not found"); + continue; + } + + // 1.7 创建充电站实例并配置基本信息 + object chargeStation = Activator.CreateInstance(type); + ((AbstractChargeStation)chargeStation).SiteId = siteId; + ((AbstractChargeStation)chargeStation).Ip = ipAddress.ToString(); + ((AbstractChargeStation)chargeStation).Port = port; + + // 1.8 设置通讯类型(从配置读取,默认TCP) + if (stationConfig.Type == ChargeStationType.FRLDShort) + { + ((AbstractChargeStation)chargeStation).CommunicationType = "UDP"; + } + else + { + ((AbstractChargeStation)chargeStation).CommunicationType = stationConfig.CommunicationType; + } + //((AbstractChargeStation)chargeStation).CommunicationType = + // string.IsNullOrWhiteSpace(stationConfig.CommunicationType) + // ? "UDP" + // : stationConfig.CommunicationType.ToUpper(); + + // 1.9 创建通讯连接 + ((AbstractChargeStation)chargeStation).CreateCommunication(ipAddress, port); + + // 1.10 添加到充电站字典 + ChargeStations.Add(siteId, (AbstractChargeStation)chargeStation); + + Diagnosis.Log($"ChargeStation ADD: StationId[{stationConfig.StationId}] SiteId[{siteId}] IP[{ipAddress}:{port}] Type[{chargeTypeString}] Comm[{((AbstractChargeStation)chargeStation).CommunicationType}]"); + } + + // ==================== 步骤2: 初始化UDP服务 ==================== + // 如果有任意充电桩使用UDP通讯,则创建UDP服务 + if (ChargeStations.Any(c => c.Value.CommunicationType == "UDP")) + { + UdpService ??= new ChargeUdpService(); + } + + status.status = $"已启动-循环{iteration++}"; + + // ==================== 步骤3: 充电业务处理循环 ==================== + foreach (var item in ChargeStations.Keys.ToArray()) //移除配置 + { + var chargeStationSetting = ChargeStationHelper.GetStationBySiteId(item); + if (chargeStationSetting == null) + { + try + { + ChargeStations[item].CloseCommunication(); + } + catch (Exception ex) + { + Diagnosis.Log($"WARN:ChargeStationHelper [{item}] failed to close old connection: {ex.Message}"); + } + ChargeStations.Remove(item); + } + + } + + //S站点存在配置里没有的,需要移除配置 + var sites = SimpleLib.GetAllSites().Where(s => s.fields.ContainsKey("Charge")); + foreach (var item in sites) + { + if (!ChargeStations.Keys.Contains(item.id)) + { + //移除站点的配置 + item.fields.Remove("Charge"); + item.fields.Remove("setVoltage"); + item.fields.Remove("setElectricCurrent"); + item.fields.Remove("group"); + Diagnosis.Post($"Charge {item.name}-{item.id} 未在充电管理配置移除参数"); + item.name = "NoName"; + //并关闭对应的连接 + + } + + + } + + // 遍历所有已添加的充电站,处理充电业务逻辑 + + + foreach (var chargeStationEntry in ChargeStations) + { + var openCharge = 0; + int siteId = chargeStationEntry.Key; + var chargeStation = chargeStationEntry.Value; + var site = SimpleLib.GetSite(siteId); + if (site == null) + { + Console.WriteLine($"从地图中未获取到站点的信息 siteId {siteId}"); + continue; + } + var chargeStationSetting = ChargeStationHelper.GetStationBySiteId(siteId); + if (!chargeStationSetting.Enabled) + { + continue; + } + //绑定group 添加charge + if (site != null) + { + site.name = chargeStationSetting.Name; + site.fields["Charge"] = "True"; + site.fields["setVoltage"] = chargeStationSetting.SetVoltage.ToString("0.0"); + site.fields["setElectricCurrent"] = chargeStationSetting.SetElectricCurrent.ToString("0.0"); + if (chargeStationSetting.Enabled) + { + site.fields["group"] = chargeStationSetting.GroupCarType.ToString(); + } + else + { + site.fields["group"] = "禁停"; + } + + + } + + // 3.1 设置站点访问权限(默认允许进入和离开) + + if (chargeStationSetting.ChargeMethod == ChargeMethodType.Side) + { + SetAllowEnter(siteId, chargeStationSetting.ShieldSiteMechanismStatus || chargeStationSetting.MechanismStatus == MechanismStatus.Retracted); + + SetAllowExit(siteId, chargeStationSetting.ShieldSiteMechanismStatus || chargeStationSetting.MechanismStatus == MechanismStatus.Retracted); + SetAcknowledgeLeave(siteId, true); + + } + else + { + SetAllowEnter(siteId, true); + SetAllowExit(siteId, true); + SetAcknowledgeLeave(siteId, true); + + } + + + + // 3.2 查找当前在充电站点的车辆 + // 条件:车辆在站点上 或 正在获取站点锁 或 持有站点锁 + var car = SimpleLib + .GetAllCars() + .FirstOrDefault(c => + c.GetLastSite() == siteId || + c.status.aquiringLock == siteId || + c.status.holdingLocks.Contains(siteId) + ); + + // 3.3 如果找到车辆,处理充电逻辑 + if (car != null) + { + // 3.3.1 检查车辆状态是否正常 + if (Commons.GetVehicleStatus((Car)car) != VehicleStatus.Normal&&car.fields.ContainsKey("SkipStatus")) + { + continue; + } + + // 3.3.2 判断车辆是否正在充电 + var charging = car.tags.Contains("charging"); + + // 3.3.3 检查充电条件 + // 条件:未被占用 && 未获取其他锁 && 正在充电标记 + if (!car.tags.Contains("occupied") + && car.status.holdingLocks.Length == 1 && car.status.pendingLocks.Length == 0 && + charging) + { + openCharge = 1; // 允许充电 + + //// 3.3.4 安全检查:验证叉齿是否升起 + //var actualLiftPillar = 1; // 默认已升起 + //if (car.status.enums.TryGetValue("actualLiftPillar", out var liftPillar)) + //{ + // actualLiftPillar = Convert.ToInt32(liftPillar); + //} + + //// 如果叉齿未升起,禁止充电 + //if (actualLiftPillar != 1) + //{ + // openCharge = 0; + // Console.WriteLine($"{car.id} 小车不满足充电的安全条件 叉齿未抬升"); + // // TODO: 触发报警,通知人员处理 + //} + } + + } + + // 3.3.5 发送充电指令(如果未屏蔽充电桩交互) + if (!shieldInterLock) + { + Diagnosis.Log($"向充电站[{siteId}]发送充电指令, 车辆[{car?.id}], 指令[{openCharge}]","Charge",true); + chargeStation.SendToChargeStation(openCharge, (Car)car, site); + } + } + } + catch (Exception ex) + { + Diagnosis.Post( + $"StandardChargeMission Error: {ExceptionFormatter.FormatEx(ex)}", + "error" + ); + } + + // 等待500ms后进行下一次循环 + Thread.Sleep(500); + } + }) + { + Name = "StandardChargeMission", + IsBackground = true + }; + + // 启动充电处理线程 + ChargeThread.Start(); + + // ==================== 步骤4: 启动站点禁用状态上传任务 ==================== + // 定期将禁用站点信息上传到迷毂系统 + Task.Factory.StartNew(() => + { + HttpPostData httpPostData = new HttpPostData(); + + while (true) + { + try + { + if (status.status.Contains("已停止")) + { + break; + } + // 4.1 获取所有标记为"unavailable"的站点 + var sites = SimpleLib + .GetAllSites() + .Where(site => site.tags.Contains("unavailable")) + .ToList(); + + // 4.2 收集所有需要禁用的站点ID + HashSet disabledSites = new HashSet(); + + foreach (var site in sites) + { + // 添加当前站点 + disabledSites.Add(site.id); + + // 4.3 检查并添加关联的必须释放站点(mustFree) + if (site.fields.ContainsKey("mustFree") && + site.mustFree != null && + site.mustFree.Length > 0) + { + for (int i = 0; i < site.mustFree.Length; i++) + { + disabledSites.Add(site.mustFree[i]); + } + } + } + + // 4.4 上传禁用站点列表到迷毂系统 + Diagnosis.Log($"向迷毂提供禁用站点,共 {disabledSites.Count} 个", "siteIsEnable", true); + httpPostData.UploadListNode(disabledSites); + + // 等待500ms后进行下一次上传 + Thread.Sleep(500); + } + catch (Exception e) + { + Diagnosis.Post($"上传禁用站点失败: {ExceptionFormatter.FormatEx(e)}", "禁用站点"); + } + } + }, TaskCreationOptions.LongRunning); + + // 调用基类Execute方法 + base.Execute(); + } + + /// + /// 关闭充电进程 + /// 停止所有相关线程 + /// + [MethodMember(Name = "关闭进程", Description = "关闭充电进程")] + public void Stop() + { + try + { + started = false; + myStarted = false; + // 先置停止状态,循环体检测到“已停止”后会自行 break + status.status = "已停止"; + + // 协作式停止:等待工作线程在下一次循环检测标志后退出(不再使用 .NET8 已不支持的 Thread.Abort) + myThread?.Join(2000); + ChargeThread?.Join(2000); + + Diagnosis.Log("充电进程已停止"); + foreach (var item in ChargeStations.Values) + { + item.CloseCommunication(); + Diagnosis.Post($"充电进程已停止,关闭充电通讯连接{item.Ip}-{item.Port}"); + } + + } + catch (Exception ex) + { + + Diagnosis.Post($"充电进程已停止 {ex.ToString()}"); + } + + } + + /// + /// 切换充电桩交互屏蔽状态 + /// true=屏蔽交互,false=允许交互 + /// + [MethodMember(Name = "切换充电桩交互状态", Description = "屏蔽/允许充电桩交互")] + public void ShieldInterLock() + { + var currentStatus = ((StandardChargeMissionStatus)status).ShieldInterLock; + ((StandardChargeMissionStatus)status).ShieldInterLock = !currentStatus; + + string statusText = ((StandardChargeMissionStatus)status).ShieldInterLock ? "已屏蔽" : "已允许"; + Console.WriteLine($"充电桩交互状态: {statusText}"); + Diagnosis.Log($"充电桩交互状态切换为: {statusText}"); + } + + /// + /// 打开充电桩管理界面 + /// 用于配置和监控充电桩 + /// + [MethodMember(Name = "打开充电桩管理界面", Description = "打开充电桩管理界面")] + public void OpenManagementWindow() + { + ChargeStationHelper.OpenManagementWindow(); + } + + #endregion + + #region 辅助工具方法 + + /// + /// 将充电桩类型枚举转换为类型字符串 + /// 用于通过反射创建对应的充电站对象 + /// + /// 充电桩类型枚举 + /// 充电站类名 + private string GetChargeTypeString(ChargeStationType type) + { + switch (type) + { + case ChargeStationType.FRLDTall: + return "FLChargeStation"; + + case ChargeStationType.FRLDShort: + return "PCBChargeStation"; + + case ChargeStationType.MuXing: + return "MuXingChargeStation"; + + default: + // 默认使用FRLD矮款充电桩 + return "PCBChargeStation"; + } + } + + /// + /// 给车辆下发充电任务 + /// 为测试或调试用途,手动给车辆添加shouldCharge标签 + /// + [MethodMember(Name = "小车下发充电任务", Description = "给小车下发充电任务")] + public void addtagshuldcharge() + { + // 查找第一个在有效站点上的车辆 + var car = (Car)SimpleLib.GetAllCars() + .ToList() + .Find(c => c.GetLastSite() != -1); + + if (car != null) + { + // 添加shouldCharge标签 + Commons.AddOrUpdateTag(car.tags, "shouldCharge", "true"); + Diagnosis.Log($"已为车辆 {car.id} 添加充电任务标签"); + } + else + { + Diagnosis.Log("未找到在有效站点上的车辆"); + } + } + + #endregion + + + } +} diff --git a/StandardScene.Core/ChargeStationType/AbstractChargeStation.cs b/StandardScene.Core/ChargeStationType/AbstractChargeStation.cs new file mode 100644 index 0000000..44f51c1 --- /dev/null +++ b/StandardScene.Core/ChargeStationType/AbstractChargeStation.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore.PropType; + +namespace StandardScene.ChargeStationType +{ + public class AbstractChargeStation + { + public bool IsSafe = true; + public int SiteId { get; set; } + + public string Ip { get; set; } + public int Port { get; set; } + public string CommunicationType { get; set; } + + /// + /// 关闭当前通讯连接 + /// + public virtual void CloseCommunication() + { + // 默认实现为空,子类可重写 + } + + /// + /// 创建通讯连接 + /// + public virtual void CreateCommunication(IPAddress ip, int port) + { + + } + + public virtual void SendToChargeStation(int isCharge,Car car,Site site) + {} + + /// + /// UDP 报文回调钩子:默认空实现,具体桩型按需重写。 + /// 用于解耦 ChargeUdpService 对具体充电桩类型的 is 判断,便于驱动外移至卫星 dll。 + /// + public virtual void OnUdpMessage(byte[] message) + { + } + } +} diff --git a/StandardScene.Core/Coders/CommonTrackCoders.cs b/StandardScene.Core/Coders/CommonTrackCoders.cs new file mode 100644 index 0000000..db24fe7 --- /dev/null +++ b/StandardScene.Core/Coders/CommonTrackCoders.cs @@ -0,0 +1,111 @@ +using SimpleCore.Compiler; +using SimpleCore.PropType; +using StandardScene.CarTypes; + +namespace StandardScene.Coders +{ + /// + /// 通用(导航无关)轨道 coder 基类。 + /// + /// 背景:避障/IO/纠偏等 coder 原以 [TemplateTrackCoderSettings] 内联重复在各车型上。 + /// 这里把它们抽离为单一可复用实现,各车型改用 [ProgramTrackCoderSettings] 按各自 priority 引用。 + /// + /// 等价性:内部仍走内核 Template 机制(ProgramCoderHelper.PrepareTrackEngine + Topaz 求值), + /// useVerb / templateString 与原模板逐字一致;这些 coder 仅引用 Basic 字段,故统一用 BasicXxxFields, + /// 与原先传车型 Fields 在“模板所引用字段”上行为一致。priority 由引用方车型特性指定,执行顺序不变。 + /// + public abstract class CommonTemplateTrackCoder : ITrackCoder + { + protected abstract string UseVerb { get; } + protected abstract string TemplateString { get; } + + // 默认仅用 Basic 字段袋;个别 coder(如避障含 ChangeAvoidanceParam 标志位)可覆写站点字段袋。 + protected virtual System.Type SiteFieldsType => typeof(BasicSiteFields); + + public virtual bool toBlock() => false; + + public bool Code(SegmentPlan plan, Track track, Site src, Site dst, int i) + { + var engine = ProgramCoderHelper.PrepareTrackEngine(plan, track, src, dst, i, + carFields: typeof(BasicCarFields), + siteFields: SiteFieldsType, + trackFields: typeof(BasicTrackFields), + planFields: typeof(BasicPlanFields)); + + if (!(engine.ExecuteExpression(UseVerb) is bool ok) || !ok) + return false; + + plan.codeArr[i] += (string)engine.ExecuteExpression("`" + TemplateString + "`"); + return false; + } + } + + // 原 useVerb: track.LidarArea != -2 + public class LidarAreaSwitchCoder : CommonTemplateTrackCoder + { + protected override string UseVerb => "track.LidarArea != -2"; + protected override string TemplateString => + "agv.Queue(()=>{},()=>{ agv.SwitchLidarArea(${track.LidarArea}); });"; + } + + // 原无 useVerb(等价 true,每段执行) + public class AvoidanceDistanceCoder : CommonTemplateTrackCoder + { + protected override string UseVerb => "true"; + protected override string TemplateString => + "agv.Queue(()=>{},()=>{ agv.ChangeAvoidanceDistance(${track.StopDistance},${track.SlowDistance}); });"; + } + + // 原 useVerb: track.IOArea != -1 + public class IoAreaSwitchCoder : CommonTemplateTrackCoder + { + protected override string UseVerb => "track.IOArea != -1"; + protected override string TemplateString => + "agv.Queue(()=>{},()=>{ agv.SwitchIoArea(${track.IOArea}); });"; + } + + // 原 useVerb: track.BiasAlarmThresh >0 || track.DthAlarmThresh > 0 + public class TrackingErrThreshCoder : CommonTemplateTrackCoder + { + protected override string UseVerb => "track.BiasAlarmThresh >0 || track.DthAlarmThresh > 0"; + protected override string TemplateString => + "agv.Queue(()=>{},()=>{ agv.ChangeTrackingErrThresh(${track.BiasAlarmThresh},${track.DthAlarmThresh}); });"; + } + + // 避障区尺寸切换(4 参,含中心点)站点字段袋:在 Basic 基础上补 ChangeAvoidanceParam 标志位。 + // 等价于 MWL/MultiVehicle 原用的 MultiWheelLifterSiteFields 中本 coder 实际引用到的字段。 + internal class AvoidanceParamSiteFields : BasicSiteFields + { + public bool ChangeAvoidanceParam = false; + } + + /// + /// 避障区尺寸切换 coder(4 参,含中心点)。 + /// 合并自 MultiWheelLifterCar 与 MultiVehicleCar 两份**逐字相同**的内联模板(零行为变更): + /// useVerb=dst.ChangeAvoidanceParam==true;模板=ChangeAvoidanceParam(L,W,CenterX,CenterY)。 + /// 注:Kiva / Forklift 的 2 参变体见同文件 AvoidanceParamLWCoder(方案 B:4 参 flag 版 + 2 参 L,W 版)。 + /// + public class AvoidanceParamCoder : CommonTemplateTrackCoder + { + protected override System.Type SiteFieldsType => typeof(AvoidanceParamSiteFields); + protected override string UseVerb => "dst.ChangeAvoidanceParam==true"; + protected override string TemplateString => + "agv.Queue(()=>{},()=>{ agv.ChangeAvoidanceParam(${dst.CarLength},${dst.CarWidth},${dst.CarCenterX},${dst.CarCenterY}); });"; + } + + /// + /// 避障区尺寸切换 coder(2 参,无中心点)。 + /// 合并自 Kiva 与 Forklift 两份**逐字相同**的 2 参内联模板。 + /// 触发条件统一取 Forklift 的「已配置车体长宽」(dst.CarLength!=-1 && dst.CarWidth!=-1): + /// - Forklift:useVerb/模板逐字一致,行为不变; + /// - Kiva:原为无条件触发,统一后当站点未配置长宽(=-1)时不再下发 ChangeAvoidanceParam(-1,-1), + /// 属预期内的安全收敛(方案 B,见 StandardScene拆分计划.md §11.4-2)。 + /// 仅引用 Basic 字段(CarLength/CarWidth 已在 BasicSiteFields),故用默认 BasicSiteFields。 + /// + public class AvoidanceParamLWCoder : CommonTemplateTrackCoder + { + protected override string UseVerb => "dst.CarLength != -1 && dst.CarWidth != -1"; + protected override string TemplateString => + "agv.Queue(()=>{},()=>{ agv.ChangeAvoidanceParam(${dst.CarLength},${dst.CarWidth}); });"; + } +} diff --git a/StandardScene.Core/CommonTools/AtomicFileUpdateHelper.cs b/StandardScene.Core/CommonTools/AtomicFileUpdateHelper.cs new file mode 100644 index 0000000..0649533 --- /dev/null +++ b/StandardScene.Core/CommonTools/AtomicFileUpdateHelper.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Concurrent; +using System.IO; +using SimpleCore.Library; + +namespace StandardScene.CommonTools +{ + /// + /// 按文件路径串行化读写,保证高并发下对同一文件的更新原子、不覆盖其他记录。 + /// 调用方在委托中完成“读当前内容 → 修改 → 返回新内容”,由本类负责加锁与写回。 + /// + public static class AtomicFileUpdateHelper + { + private static readonly ConcurrentDictionary PathLocks = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + + /// + /// 对指定路径执行原子更新:在持锁下读取当前文件内容,调用 update 得到新内容并写回。 + /// 不修改其他记录时,应在 update 中仅变更需要变更的条目后返回完整内容。 + /// + /// 文件完整路径 + /// 接收当前文件文本(若文件不存在则为 null),返回要写回的新文本;返回 null 表示不写入 + public static void ExecuteAtomicUpdate(string filePath, Func update) + { + if (string.IsNullOrEmpty(filePath)) + throw new ArgumentNullException(nameof(filePath)); + if (update == null) + throw new ArgumentNullException(nameof(update)); + + var lockObj = PathLocks.GetOrAdd(filePath, _ => new object()); + lock (lockObj) + { + string current = null; + try + { + if (File.Exists(filePath)) + current = File.ReadAllText(filePath); + } + catch (Exception ex) + { + Diagnosis.Log($"AtomicFileUpdate read error: {filePath}, {ex.Message}", "AtomicFileUpdate", true); + throw; + } + + string newContent = update(current); + if (newContent == null) + return; + + var dir = Path.GetDirectoryName(filePath); + if (!string.IsNullOrEmpty(dir)) + Directory.CreateDirectory(dir); + + try + { + var tempPath = filePath + ".tmp"; + File.WriteAllText(tempPath, newContent); + if (File.Exists(filePath)) + File.Replace(tempPath, filePath, null); + else + File.Move(tempPath, filePath); + } + catch (Exception ex) + { + Diagnosis.Log($"AtomicFileUpdate write error: {filePath}, {ex.Message}", "AtomicFileUpdate", true); + throw; + } + } + } + } +} diff --git a/StandardScene.Core/CommonTools/SnowflakeIdGenerator.cs b/StandardScene.Core/CommonTools/SnowflakeIdGenerator.cs new file mode 100644 index 0000000..8d74adc --- /dev/null +++ b/StandardScene.Core/CommonTools/SnowflakeIdGenerator.cs @@ -0,0 +1,128 @@ +using System; +using System.Threading; + +namespace StandardScene.CommonTools +{ + public sealed class SnowflakeIdGenerator + { + // 默认起始时间戳:2026-01-01T00:00:00.000Z(Unix 毫秒) + // 如果你希望生成的数字更短,可以在构造函数里传入更“近”的 _epochMs(建议全系统统一)。 + private const long DefaultEpochMs = 1767225600000L; + private const int WorkerIdBits = 5; // 机器ID所占的位数 + private const int DatacenterIdBits = 5; // 数据中心ID所占的位数 + private const int MaxWorkerId = -1 ^ (-1 << WorkerIdBits); // 最大机器ID + private const int MaxDatacenterId = -1 ^ (-1 << DatacenterIdBits); // 最大数据中心ID + private const int SequenceBits = 12; // 序列号所占的位数 + private const int WorkerIdShift = SequenceBits; // 机器ID左移的位数 + private const int DatacenterIdShift = SequenceBits + WorkerIdBits; // 数据中心ID左移的位数 + private const int TimestampLeftShift = SequenceBits + WorkerIdBits + DatacenterIdBits; // 时间戳左移的位数 + private const long SequenceMask = -1L ^ (-1L << SequenceBits); // 序列号的最大值 + + private const string Base62Alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + + private readonly object _syncRoot = new object(); + private readonly long _epochMs; + private readonly long _workerId; // 机器ID + private readonly long _datacenterId; // 数据中心ID + private long _sequence; // 序列号 + private long _lastTimestamp = -1L; // 上次生成ID的时间戳 + + public SnowflakeIdGenerator(long workerId, long datacenterId, long? epochMs = null) + { + this._epochMs = epochMs ?? DefaultEpochMs; + if (this._epochMs > TimeGen()) + { + throw new ArgumentException("_epochMs cannot be in the future."); + } + if (workerId is > MaxWorkerId or < 0) + { + throw new ArgumentException($"worker Id can't be greater than {MaxWorkerId} or less than 0"); + } + if (datacenterId is > MaxDatacenterId or < 0) + { + throw new ArgumentException($"{datacenterId} can't be greater than {MaxDatacenterId} or less than 0"); + } + this._workerId = workerId; + this._datacenterId = datacenterId; + } + + public long NextId() + { + lock (_syncRoot) + { + long timestamp = TimeGen(); + if (timestamp < _lastTimestamp) + { + // 容忍系统时钟回拨:等待到追上 _lastTimestamp,避免直接抛异常把业务打崩。 + timestamp = TilNextMillis(_lastTimestamp); + } + if (_lastTimestamp == timestamp) + { + _sequence = (_sequence + 1) & SequenceMask; + if (_sequence == 0) + { + timestamp = TilNextMillis(_lastTimestamp); + } + } + else + { + _sequence = 0; + } + _lastTimestamp = timestamp; + long id = ((timestamp - _epochMs) << TimestampLeftShift) + | (_datacenterId << DatacenterIdShift) + | (_workerId << WorkerIdShift) + | _sequence; + return id; + } + } + + /// + /// 生成更短的字符串形式 ID(Base62 编码),便于显示/存储。 + /// + public string NextIdBase62() + { + ulong value = unchecked((ulong)NextId()); + return ToBase62(value); + } + + private static long TilNextMillis(long lastTimestamp) + { + var spin = new SpinWait(); + long timestamp; + do + { + spin.SpinOnce(); + timestamp = TimeGen(); + } + while (timestamp <= lastTimestamp); + + return timestamp; + } + + private static long TimeGen() + { + return DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); + } + + private static string ToBase62(ulong value) + { + if (value == 0) + { + return "0"; + } + + // 2^64-1 的 base62 最大长度为 11(因为 62^11 > 2^64)。 + char[] buffer = new char[11]; + int pos = buffer.Length; + while (value > 0) + { + ulong rem = value % 62; + value /= 62; + buffer[--pos] = Base62Alphabet[(int)rem]; + } + + return new string(buffer, pos, buffer.Length - pos); + } + } +} diff --git a/StandardScene.Core/Commons.cs b/StandardScene.Core/Commons.cs new file mode 100644 index 0000000..ebb43a4 --- /dev/null +++ b/StandardScene.Core/Commons.cs @@ -0,0 +1,717 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Numerics; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.Library; +using SimpleCore.PropType; +using SimpleCore.Traffic; +using StandardScene.InterLock; +using StandardScene.Model; +using static StandardScene.Chained.ChainedDeliveryMission; + +namespace StandardScene +{ + /// + /// 插件本地化设置 + /// + public class CustomOperationsBeforeLoading + { + public static void Set() + { + ///死锁提醒 + TrafficControl.OnDeadLock = (loopingCar) => + { + try + { + var cars = string.Join(",", loopingCar.Select(p => $"{p.id}")); + var msg = $"小车:{cars}间发生死锁" + + $"请及时人工介入处理!!!!"; + MessageBox.Show(msg); + } + catch { } + }; + } + } + public class NoReflectionApi : Attribute + { + + } + + public class ReflectionApiWithParameter : Attribute + { + public string name; + public string desc; + public string Hint; + } + + public static class Commons + { + public static VehicleStatus GetVehicleStatus(Car car) + { + if(car is DummyCar && car.lstatus.Contains("上线")) + return VehicleStatus.Normal; + if (car.lstatus.Contains("正常但未初始化")||car.lstatus.Contains("Normal but not initialized")) + return VehicleStatus.NeedInit; + if (car.lstatus.Contains("正常") || car.lstatus.Contains("Normal")||car.lstatus.Contains("上线")) + return VehicleStatus.Normal; + if (car.lstatus.Contains("自动驾驶系统失联") || car.lstatus.Contains("Autonomous driving system lost")) + return VehicleStatus.Offline; + return VehicleStatus.Unknown; + } + + /// + /// 获取车辆状态 + /// + /// 车辆 + /// 状态-键 + /// 状态-值 + public static string GetCarStatus(Car car, string key) + { + string value = "0"; + if (car == null) return value; + if (car.status.enums.TryGetValue(key, out var valueStr)) + value = valueStr; + return value; + } + + /// + /// 添加标签 + /// + /// + /// + /// + public static void AddOrUpdateTag(T item, string tag, string value) where T : TagSet + { + if (item.Contains(tag)) + item.Remove(tag); + item.Add(tag, value); + } + + /// + /// 删除标签 + /// + /// + /// + /// + public static void DeleteTag(T item, string tag) where T : TagSet + { + if (item.Contains(tag)) + { + item.Remove(tag); + } + } + + /// + /// 清空标签 + /// + /// + /// + public static void ClearTags(T item) where T : TagSet + { + item.Clear(); + } + + /// + /// 添加或更新字段 + /// + /// + /// + /// + public static void AddOrUpdateCarField(Car car, string field, string value) + { + if (car.fields.ContainsKey(field)) + { + car.fields.Remove(field); + car.fields.Add(field, value); + } + else + car.fields.Add(field, value); + } + + /// + /// 删除字段 + /// + /// + /// + public static void DeleteCarField(Car car, string field) + { + if (car.fields.ContainsKey(field)) + { + car.fields.Remove(field); + } + } + + /// + /// 清空字段 + /// + /// + public static void ClearCarFields(Car car) + { + car.fields.Clear(); + } + + /// + /// 添加或更新site的字段 + /// + /// + /// + /// + public static void AddOrUpdateSiteField(Site site, string field, string value) + { + if (site.fields.ContainsKey(field)) + { + site.fields.Remove(field); + site.fields.Add(field, value); + } + else + site.fields.Add(field, value); + } + + /// + /// 删除site的字段 + /// + /// + /// + public static void DeleteSiteField(Site site, string field) + { + if (site.fields.ContainsKey(field)) + { + site.fields.Remove(field); + } + } + + /// + /// 清空site的字段 + /// + /// + public static void ClearSiteFields(Site site) + { + site.fields.Clear(); + } + + /// + /// 检查给定字符串是否为合法的 HTTP/HTTPS URL(至少包含协议与主机)。 + /// + /// 待校验的 URL 字符串 + /// true 表示 URL 合法 + public static bool IsValidHttpUrl(string url) + { + if (string.IsNullOrWhiteSpace(url)) return false; + if (!Uri.TryCreate(url, UriKind.Absolute, out var uri)) return false; + if (uri.Scheme != Uri.UriSchemeHttp && uri.Scheme != Uri.UriSchemeHttps) return false; + if (string.IsNullOrEmpty(uri.Host)) return false; + return true; + } + + public static double CarValue(Car car, string key) + { + if (car.fields.TryGetValue("electricCurrent", out var strelectricCurrent)) + return double.Parse(strelectricCurrent); + if (key == "Soc" && (car.name.Contains("模拟") || car.name.ToLower().Contains("sim"))) + { + + if (car.fields.TryGetValue("Soc", out var strSoc)) + return double.Parse(strSoc); + + return 100; + } + + var value = "0"; + if (car.status.enums.TryGetValue(key, out var valueStr)) + value = valueStr; + return double.Parse(value); + } + + /// + /// 添加或更新mission的字段 + /// + /// + /// + /// + public static void AddOrUpdateMissionField(Mission mission, string field, string value) + { + if (mission.fields.ContainsKey(field)) + { + mission.fields.Remove(field); + mission.fields.Add(field, value); + } + else + mission.fields.Add(field, value); + } + + /// + /// 删除mission的字段 + /// + /// + /// + /// + public static void DeleteMissionField(Mission mission, string field) + { + if (mission.fields.ContainsKey(field)) + mission.fields.Remove(field); + } + public static List GetOnlineCars() + { + return SimpleLib.GetAllCars().Where(c => c.GetLastSite() != -1 && Commons.GetVehicleStatus((Car)c)== VehicleStatus.Normal).ToList(); + } + public static bool IsSceneSiteByCode(int[] siteCodes) + { + try + { + foreach (var siteCode in siteCodes) + { + var site = SimpleLib.GetAllSites().FirstOrDefault(s => s.id == siteCode); + if (site == null) return false; + } + } + catch (Exception ex) + { + Console.WriteLine($@"IsSceneSite 校验报错=>{ex.Message}"); + return false; + } + return true; + } + + public static readonly object PlanSession = new object(); + + public static int SelectCar(AbstractCar car, bool enableGoingStandbyCar = false, bool needCharge = false, bool checkHoldCar = false) + { + var carHaveCoordination = (Car)car; + var conditions = car.GetLastSite() != -1 && GetVehicleStatus((Car)car)== VehicleStatus.Normal&& + !car.tags.Contains("changePriority") && + !car.tags.Contains("priority") && !car.tags.Contains("occupied") + && !car.tags.Contains("agvOffline") + && car.status.pendingLocks.Length == 0 && !car.tags.Contains("deliver") &&//pendingLocks临时增加解决车接多任务问题 + (!car.tags.Contains("shouldCharge") || needCharge) + && !car.tags.Contains("currentWorkStep") && !car.fields.ContainsKey("StopAccept") && car.tags.Contains("Online"); //巡航任务未完成的车 + if (car.name.Contains("模拟")) + { + conditions = car.GetLastSite() != -1 && + (!car.tags.Contains("holdCar") || !checkHoldCar) && !car.tags.Contains("occupied") + + && car.status.pendingLocks.Length == 0 && !car.tags.Contains("deliver") &&//pendingLocks临时增加解决车接多任务问题 + (!car.tags.Contains("shouldCharge") || needCharge) + && !car.tags.Contains("currentWorkStep") && !car.fields.ContainsKey("StopAccept"); //巡航任务未完成的车 + } + //((carHaveCoordination.haveCoordination || car.name.Contains("模拟")) && (!car.tags.Contains("shouldCharge") || needCharge)); + if (conditions) return 1; + + if (enableGoingStandbyCar && car.tags.TryGetValue("dest", out var dst) && + int.TryParse(dst, out var dstId) && + SimpleLib.GetSite(dstId).fields.ContainsKey(GetGiveWayType((Car)car))) return 1; + return -1; + } + + private static string GetGiveWayType(Car car) + { + if (car.fields.ContainsKey("mover")) return "standbyMover"; + if (car.fields.ContainsKey("loader")) return "standbyLoader"; + return "giveWay"; + } + public static bool SiteHaveTask(Site site) + { + var siteHaveTask = SimpleLib.GetAllCars().ToList().FindAll(o => + { + if (o.status.pendingLocks.Length > 0) + { + if (o.status.pendingLocks.Contains(site.id)) + { + return true; + } + } + if (o.status.holdingLocks.Length > 0) + { + if (o.status.holdingLocks.Contains(site.id)) + { + return true; + } + } + + + return false; + }).Count != 0; + return siteHaveTask; + } + public static SegmentPlan GetNearestPlan(Car car, Func test, int srcId = -1, bool disableConflict = false) + { + var curRouteLength = float.MaxValue; + SegmentPlan targetPlan = null; + foreach (var site in SimpleLib.GetAllSites()) + { + if (!test(site)) continue; + bool occupied = false; + foreach (var cc in SimpleLib.GetAllCars()) + { + if (cc != car) + { + if (cc.tags.Contains("dest") && cc.tags.IsEqual("dest", site.id.ToString()) || + cc.status.holdingLocks.Contains(site.id)) + occupied = true; + } + } + + if (occupied) continue; + + var mPlan = new SegmentPlan { usingCar = car }; + if (disableConflict) + mPlan.fields["forbid_cross"] = "false"; + try + { + var newRouteLength = mPlan.FindRoute( + SimpleLib.GetSite(srcId == -1 ? car.GetLastSite() : srcId), + SimpleLib.GetSite(site.id)); + + if (newRouteLength < curRouteLength) + { + curRouteLength = newRouteLength; + targetPlan = mPlan; + } + } + catch + { + // ignored + } + } + + return targetPlan; + } + + public static void NearestTask(List deliveries, List runningDeliveries = null) + { + try + { + var curW = float.MaxValue; + var priority = int.MinValue; + Delivery priorityNextDelivery = null; + Delivery deliveryTask = null; + + //车不是空闲车,但这个任务结束的时候离另一个将要执行的任务很近。 + //(通常来说是同一个工序的,除非单纯地返空托(或路线规划失败,跳别的任务了未按优先级执行)在仓库) + // 车空闲 + foreach (var car in SimpleLib.GetAllCars().OfType()) //找到那个车 距离待执行任务最近 + { + DeleteTag(car.tags, "changePriority"); + //车的状态是OK的 + if (car.GetLastSite() == -1 || car.tags.Contains("agvOffline") || car.tags.Contains("occupied")) continue; + //车已经被分配过任务了 + if (deliveries.FirstOrDefault(t => t.UsingCar == car) != null) continue; + + int dst = 0; + #region ObsoleteCode + //if (car.tags.ContainsKey("occupied")) //说明是正在执行任务的车 + //{ + + // if (car.tags.ContainsKey("dest") + // && deliverys.Where(d => d.usingCar != null && d.usingCar == car) == null //并且这个车没有需要等待的任务执行的任务 + // //还存在一种情况车被选了但中途有高优先级的任务进来 + // ) + // { + // //这个车正在执行的任务 + // dst = int.Parse(car.tags["dest"]); + // } + // else + // { + // //这个车已经有需要等待的任务了。 + // continue; + // } + + + //} + //else //车空闲 + //{ + // dst = car.GetLastSite(); + //} + //无效 + #endregion + dst = car.GetLastSite(); + if (dst == -1) + { + //输出日志 变更dst; + dst = car.status.holdingLocks.First(); + Diagnosis.Post($"调度小车{car.name}:{car.id}的GetLastSite 为 -1 。变更 holdingLocks.First() 为小车初始点{dst}"); + } + //空闲的车 //如果有多个那个离的最近 + + foreach (var delivery in deliveries.Where(d => d.UsingCar == null)) + { + //车是否能接到该任务。 + if (car.fields.ContainsKey("group") && !string.IsNullOrEmpty(car.fields["group"]) && !car.fields["group"].Contains(delivery.Group)) + continue; + + var mPlan = new SegmentPlan { usingCar = car }; + + try + { + var myW = mPlan.FindRoute( + SimpleLib.GetSite(dst), + SimpleLib.GetSite(delivery.Src)); + + //找到最近的, + if (myW < curW) + { + curW = myW; + //找到优先级最高的。且距离最近 + if (delivery.Priority >= priority) + { + priorityNextDelivery = delivery; + priority = delivery.Priority; + Diagnosis.Post($"{priorityNextDelivery.Id}/{priorityNextDelivery.Group}/{priority}", " delivery.priority"); + } + + //找到距离最近的。 + Delivery nextDelivery = delivery; + + if (nextDelivery != priorityNextDelivery) //并且这两个任务不同 优先级高的比较远 + { + if (runningDeliveries != null) + { + //优先级高的先执行 + Delivery deliveryRunning = null; // runningDeliveries.Where(d => d.group == priorityNextDelivery.group).FirstOrDefault(); + + //有车正在执行优先级高的任务。有的话就不让车过去 + if (deliveryRunning != null) //true + { + Diagnosis.Post($"{deliveryRunning.Id}/{deliveryRunning.UsingCar?.id}/" + + $"{deliveryRunning.Group}/{deliveryRunning.Priority}", "deliveryRunning"); + deliveryTask = nextDelivery; + } + else + { + deliveryTask = priorityNextDelivery; + Diagnosis.Post($"{priorityNextDelivery.Id}/{priorityNextDelivery.UsingCar?.id}/" + + $"{priorityNextDelivery.Group}/{priorityNextDelivery.Priority}", "priorityNextDelivery1"); + + } + } + else + { + deliveryTask = priorityNextDelivery; + Diagnosis.Post($"{priorityNextDelivery.Id}/{priorityNextDelivery.UsingCar?.id}/" + + $"{priorityNextDelivery.Group}/{priorityNextDelivery.Priority}", "priorityNextDelivery2"); + + } + } + else + { + deliveryTask = nextDelivery; + Diagnosis.Post($"{nextDelivery.Id}/{nextDelivery.UsingCar?.id}/" + + $"{nextDelivery.Group}/{nextDelivery.Priority}", "nextDelivery"); + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message + ex.ToString()); + } + } + if (deliveryTask != null) + { + deliveryTask.UsingCar = car; + deliveryTask.Priority = 50; + } + } + } + catch (Exception ex) + { + + Console.WriteLine(ex.Message + ex.ToString()); + } + } + + public static async Task GoSite(AbstractCar car, Site targetSite, int step, string action = "/", bool reverse = false) + { + + try + { + var plan = new SegmentPlan + { + usingCar = car, + fields = + { + ["reverse"] = reverse.ToString(), + ["action"] = action, + ["allow_destination_on_route"] = "true" + } + }; + /* if (stations!=null && stations.Count()>=1) + { + var finishLeftPtlSites = SimpleLib.GetAllSites().Where(site => site.name.Contains("TaskStation")).ToList(); + foreach (var site in finishLeftPtlSites) + { + var stationCode = site.name.Split('-')[1]; + if (stations.Contains(stationCode)) + { + site.fields.Add("askInfons1", "1"); + } + } + }*/ + plan.FindRoute(SimpleLib.GetSite(car.GetLastSite()), targetSite); + //plan.HintNotEnding(); + var program = plan.Compile("move"); + car.tags.Add("occupied", $"go{targetSite.id}"); + Console.WriteLine($">>Script:{program.script}"); + var tsk = program.Queue(); + /* if (stations != null && stations.Count() >= 1) + { + var finishLeftPtlSites = SimpleLib.GetAllSites().Where(site => site.name.Contains("TaskStation")).ToList(); + foreach (var site in finishLeftPtlSites) + { + var stationCode = site.name.Split('-')[1]; + if (stations.Contains(stationCode)) + { + site.fields.Remove("askInfons1"); + } + } + }*/ + await tsk; + car.tags.Remove("occupied"); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message + "重新执行"); + Thread.Sleep(3000); + } + } + + public static SegmentPlan GenerateEscapePlan(SegmentPlan dstPlan, Func escapeSiteCondition = null) + { + var curW = float.MaxValue; + var car = dstPlan.usingCar; + + var escapedSites = SimpleLib.GetAllCars().Where(cc => cc.status.escape.Length > 0) + .Select(cc => cc.status.escape.Last()).ToHashSet(); + + SegmentPlan planEsc = null; + foreach (var site in SimpleLib.GetAllSites()) + { + if (site.id == dstPlan.Destination.id || site.id == dstPlan.Source.id) continue; + if (escapedSites.Contains(site.id)) continue; + if (escapeSiteCondition != null && !escapeSiteCondition(site)) continue; + + bool occupied = false; + foreach (var cc in SimpleLib.GetAllCars()) + { + if (cc != car) + { + if (cc.status.holdingLocks.Contains(site.id) || + (cc.tags.Contains("dest") && cc.tags["dest"] == site.id.ToString())) occupied = true; + } + } + + if (occupied) continue; + + TryGeneratePlan(dstPlan.usingCar, dstPlan.Destination, site, ref curW, ref planEsc); + } + + return planEsc; + } + private static void TryGeneratePlan(AbstractCar car, Site srcSite, Site dstSite, ref float curW, ref SegmentPlan generatedPlan) + { + var mPlan = new SegmentPlan { usingCar = car, findLoop = false, fields = new Dictionary() }; + mPlan.fields["forbid_cross"] = "false"; + try + { + var actuallyFindRoute = false; + + var myw = TryGetWeight(srcSite, dstSite); + if (myw < 0) + { + myw = mPlan.FindRoute(srcSite, dstSite); + AddWeight(srcSite, dstSite, myw); + actuallyFindRoute = true; + } + + if (myw < curW) + { + if (!actuallyFindRoute) mPlan.FindRoute(srcSite, dstSite); + curW = myw; + generatedPlan = mPlan; + } + } + catch + { + // ignored + } + } + public static Dictionary<(Site, Site), float> weightDictionary = new(); + public static float TryGetWeight(Site s1, Site s2) + { + lock (weightDictionary) + { + if (weightDictionary.TryGetValue((s1, s2), out var w)) return w; + if (weightDictionary.TryGetValue((s2, s1), out var ww)) return ww; + } + return -1; + } + + public static void AddWeight(Site s1, Site s2, float w) + { + lock (weightDictionary) weightDictionary[(s1, s2)] = w; + } + + + + public static SegmentPlan SimpleToNearestPlan(AbstractCar car, Func test, int srcID = -1) + { + var curw = float.MaxValue; + SegmentPlan targetPlan = null; + var srcSite = SimpleLib.GetSite(srcID == -1 ? car.GetLastSite() : srcID); + + foreach (var site in SimpleLib.GetAllSites()) + { + if (!test(site)) continue; + if (site.id == srcSite.id) continue; + bool occupied = false; + foreach (var cc in SimpleLib.GetAllCars()) + { + // if (cc != car)//当前 + { + if (cc.status.holdingLocks.Contains(site.id) || + (cc.tags.Contains("dest") && cc.tags["dest"] == site.id.ToString())) occupied = true; + } + } + + if (occupied) continue; + TryGeneratePlan(car, srcSite, site, ref curw, ref targetPlan); + } + + return targetPlan; + } + [DllImport("kernel32.dll")] + static extern IntPtr GetConsoleWindow(); + + [DllImport("user32.dll")] + static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + + + private static bool ShowConsole = false; + + public static void ShowConsoleFun() + { + ShowConsole = !ShowConsole; + var handle = GetConsoleWindow(); + int n = ShowConsole ? 0 : 5; + Console.WriteLine(n); + ShowWindow(handle, n); + + } + public static void HideConsoleFun() + { + var handle = GetConsoleWindow(); + ShowWindow(handle, 0); + } + } +} diff --git a/StandardScene.Core/Docs/Charge/2.充电管理说明.doc b/StandardScene.Core/Docs/Charge/2.充电管理说明.doc new file mode 100644 index 0000000000000000000000000000000000000000..bf4ee7363e503b63840d9d6a7b9a82a935e5bea2 GIT binary patch literal 1659208 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

J8Bx3|^6dHVo%}Qgx(XZc)h6%A6J-t=!Q6h~4L3 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 z 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

J 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®X=G7YXpXKB^^RUKg`(Ppp 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

5Aa8= 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

N(q`)xdu0jqbKj|ZPE*jUlxQQ~V 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 _oa}Tfp17I} z{D4vV;1Uni1B>j3X-4<^rRy7hgb4-k(`kfB)B&2zL(7awf&H>P16^dtW6zV6(;A)@ zY~r_`ZlQ^ADpDJ9#F#&s{(owuLK&MN zlI|j`HKqQpiX!dN+U@pPFmydP%+T0#R0S-Ml-yG(JWC6Ayul~iybuBOyO~dG3SrAg z+_B767oK&P3FgXp+o{O=is)t;22Gp%FuQnqcV#Jo@-_{a%+2$>b#W-ksT_oS1+9KQ zX9#$^vdok;Ep{I9aAwfSC7Be8v9w40@n+xjOrq9LX@r`jf?&kL3iF1V5Dy*|9i{Jan_ z{UPlBs_VON*cy?sXvD^+)@>$?@JN#< z6!CA(g;O(-n(ZdtN9m&`8d9<_V$5}h|JTg-WgcAadP02}&q8*%bfUU(b=u_7?@n79 zHof5h;*R#gS1svnNCMy@F>B(@zB@ONXt{hgb7xm&1-yK8dei9=|AVMpUgPGrr8T@p zudeud@{);FSHT_NXgS@3646EB!td5ep9w^eDw@W7xo1rORy6*Ka{QuKgGW49vxwz_ z3-6ekEb~3yV`JlQvR7Uj#<#b(v?LJ8FwI0j{zp}|9TwSglgVIk<`q?Q+tbt2n$DMy zd+#-a!&NE7>fa-ol`~Agjrm{oJKkKMhGS-S%b*;r1&04UgqKPSsTLD28h*L|+=+h6 z|4Ucb$_*qo;tmDQSpTml%Kg2>g`zBcj}or3SLAe7%AL3Fv9rRm10CsVieQ_D@85X6 z@%oJwW+d4_0B&;I^z-baavD#6H5YCOLhhPpcXGJp#TZ$6k%r(1m;Q8scp&Z!jsd%z(0)`m&2p;zHSS3!4 zB+aJG<_ji-Cy~MDF{09&k0tYQvap*s$L~#5(o>Gu$n^pne)=VI)kw=Z;wD!0lbR2L znT43~j0-W80UdlYLuw-3#rgT*Cj8(p!W?dVt)kLcDvlt`DB=L77!=yi?H{gqJVvR@ zD3Kx_!{+>>;0Sv(yrA8|V)MXdIqR5JpBkTAyLjOttA*|KU z%i;dB<))7;BTB1xX~k*uBJSBBGUJIbqEz*rLgPNYX)9H zUZ>QO7*ZNuiYb_1iCw9|3Sq(+_w0Ck%3{Jdz&_iXc%!^o%GuVSWl^L_sb8GKVsQf4 z?%F2EC649mr$PJ+4fmK4eii)kQ2-igcK3Qg^-}ItA1hEWTo27dl>swlM+F58n=|#`}OyjEMWz-0cvOb?r zqD+H`-D1$Qb_z|~%j*PAe1Q=}%T~Ul_(C|#Nn*$kbZDR_7E4f7v{ty_9qp48!I5QV z{eE`N1-OVDR;U6%HOcls=AZag+j_N1r1FBj*r4i zhX-Z#n~iQcrEf0o^^nC!X#z$Rm4w1oIQ#T@AEnie&fF&y)E`Gh-W6#rW6&(7$QPY& zwqnSGQ)#@%otp6Zm`?CN&C)lUnSrIqlvvc-L}?1gtc!!C5YBG^sakb z)`}&7Y&N{oaVKIV`-*hcXIo-jM%2oF-9ud4QAV7Zjs1gmjH0yvT@B}rE>LhG#)#6w z^48B{O|3XEF^=}S@NO+;w_hAuOClL;?%WeZ8Tx=zw{}Z>9Af8D9-tI_{;CJU>g$pN ztdJ9og{7`|sG$)ct8LmH4dwxov!Ht2DZ`enp&~40D80NYgl&`6B=mG0l2U>gQ(KN9 zm>AuW5o14&Ica01PaBpzdMdY%;q8dXy~%jyo$k+;N`tpC^j%Abelx2upT|j{pX)~0 z^%?GW!0(8KtL7-W2}(G2daFf&wO1__j_02>^^kGK{aULi^H;Zw8E^q6!?`wFxEQVr ztSzYV?kS%}TJWOi95^D`Zm$fs!=-h@P3WZ+VU?|okra~ME*}%wUbWvqYzXV-9kJ3Q z!kwZx!6%?qf;{7DgbKB`(Va-5Q7X5>h{Uz*kgJk>Z@FT=oK<4Nbad`>*?!B|tI?lD z5>Fj-?4SDG=27LGw>ciHR4x(9`*XzSFyd5jex34IA1z@s;>6k1Tr|9GMQV!A-tl34 zkuIW=lnvyRykgjHcuK@DQVsX1wY4Esv)sHqr1+`OQ$9DmT@t)g5v0Y(8ns}FbjQK# z$3Plx+uv{7jwAm+y50f2vSw)%j&0kvjUC$)O{|G++qP}noQXZLt%>bD$<2Gt|LOnk zUC*-{wR&||_v-3iRlBPS8w4ja8cYkg=-X0h3{XpzjU!0}Txa*#q|4{XND(w5&&x(R z7Al3QOm!D*@_n*Wau088js)6DP?&=qX*@0T>g%3Jg&GZmy@HYEca-VN7cdz5iz#2n z9f8t&9kET|pXi>5a5`y5TODCA`S!q`y{Hh07@fjUh%9h&OIx$#q2(;olBV_UamAnD zaRJNuNA?})TeL?6;DhnB+$?s2u}Irt?txte=$L9`O)>a$gXl)|4a2R-j# z%KL6d99A|PzWV^1lu2GAs`(=lnfa#8rBYowhCRW!Qtq1v1FziZ3rz;MjQbTZpRfEH z>9det&yf0aFeMe_N136^dNh=RiG&UXyq$_ErdSrq@n|{9MDm?=fUY0;@tH!B*x#YL zC~OO zYY~|)MzO%U&FCu37|N2D6z$zrG1s=R$C1xdyMDD?sT64Rpmb@Lj0S znu>9qnuce#fMYxSFiDAkQJSI<;YFrVw788gU6;O`<+!cdClNjnfZ=RDWoRQ(Stqq7 z(i%64OsC-=t7qprq?XZdjD0Z}=0aTEv={aOH4yA_4h4c`?*X+a>7Mr!QY|nc-5$)dKqS++_Ck+Iho-n%PT0#4@Qs=%o)iVf^pI7ib7&c5(YKWl#Jx0!r zlrBwpw2q=kimK?0kZiY?Ot%lN%Fj8v8U@1{_H}kAh|m9z#bAJeBghZ5TYpJm`#T^0 z^lj>NgS;%8ot$kJgR5EaqUbgBnnuBa3GMQx@Z?q=ohkOWOT+rV=j6CR}|bjC{-}z=q0z zu3Hc5#BnBbBefoN8Z0aS4i{egjWAna#tnB24KrJ%rl{{!+aF$akhHO*=F zIOr%EL?*!hej3Y6oh=nP5e&S*wMH9v37hl>%S>OC*iumQTw>~{*p}>W{g~rm)ktjc zpGcfv_lTWqrsYGi5}?+5gIKt=n(qs1Jb?$2n9R`^W_omXD+qiEGt)zCfx3>47Y+vY z!GVt|rz_@t#TCT_Z5mVNOp*%UwkW;jkCXeEBy6(3KR*` zrAiWUoCWTfQ@{CgU@WoVvpFqT8!Hj&!+MsSG7{mV>>xc(z#>0q1ay$T6!Ht)GA5pl zV0RS`ug2+{?-tM$CpW~|jEy#JDQTG@@hKE&Bb{XfuMI9t|4tS^Sv81MH=J8>14$u_ z_7PXti`mPqjD@>h&kVI>bb0!TwfgqKz_-id){|q8O9L%jFV-hL?E*74*`=??z(}d)l$bM&iFRNffKkseIOFeT3 zSQy;39c^gz(dDHuo<`DU#;DzcD?|9FjirMoe#wB9tdaBDD0$Z_Pg4enRlKtUDa=l4O z;5P5s9{;SNdn0^C*#;^mgP2) zZZ{;CC5s6ma-uNE{J0I3g00fJU-B@3$xCnh4Ui;=%=58>zDoBo&_)LIp7^fPHF{G7 z>WkyRrOb7jrI(UBq5x{=D4=3C1`31>@EzZ12*9Udz_Yt2ZlBNoL~t0N)r%%wfh@+7 zeo_eM*dN!!$6&Qf98b3QB1$Ivo(1H|*JA6MV<-^U2hPYp7gm zG&6G#08cb0tOd*G23w9vp&xH_Y!@O5X(D#KqT3~R zpX}*F!tLMc)B+(-P?`-Yy zC?{Ur74yi~pNGUy9Aad|2n0Kp_fjrFDTubIReL`G_Rhaqz&Q_CM7(rV#pX5I)2AQ* zZlFb@URVRcRys{k6+e85!q&Y>m%CHhQzX?gz2FSFj>XBAtJ(F4?0!xeOG)^)qB1pB z|CtSaHD&BUm`*I!#uqT0%rdjfS9cddN{YC(*%g~m6jb+M!l6kD2mVCeyV}t&oK6($ zYcy6MOXw=2K+HG1D%84KSLDmp+K7fi#m5l*3v0S|gwGw(U^k`Z( zIZ;&~lCpZKIGAx=Mf<$fWU|0FFKjXR`{&s*M}yLVK7(2UZFNS;-@@KE*J`hxX$($H zQIo`TVREui$Hz#~%$>a6x zl(6QJuBTh1(>OLqXb*-}JopqhNp&Jv!lEnJc`r;08}=CwrIJ60Z*wehs?}Q=YBY0| zFNg*mq{`q9Si4CWhiejQWbMNO_;mPIu174HwAmQ*gDt8uCR`?xecHL%D`2a}6G% zBIXE{hqQ(CJVPM=kFx-ek9SDlGNc-$Gv1nv{gZ#qNm{ALNO;!L7V*a$)<@!+@L#|` zwjn#^+mqR`v>dXKKaBV+S%2rlalg1BwD{|sVve;VeDJtWs+yHpoeVLpP87ExDClly zeSygtOxCv5d|yhXu?6Pwr4rf4Ouy37@21?f|NAg4@B=Bq#)v30AvUWsal^{*I&xAeuU=2=LGOmPrtl zGdoJhP`C?9Fm?wvo}LnK8@({QVwEo2O+gEAKGzC2s8{_=dXoSY91xHM0o>BfPQcFf z!cGcEY4^O-Pur!{Vk*)D+FNu3$ZED54$|>?AGI5Ub&-ORi>XH%(*46q4a6Enn zkH|LAr_?*h5KUtI3{Bj~Y`j!Z_P=&zx5`yAmZ%IpSc^yGJr7s^-i;{y3d2 z?XoGI?K^GXm!e?>Vm;3t;<+#Q0ms@-6m@}&5}q~&S@gNR#1`F!%^+`4#7 zF{@}LjKzD0PZCXT-{OX96 zdm`Q1uFN_#2*fd_MP!8vn>3UwOpP;apJXOs5*jg7qZ`sw=qan2I?gU7^ zxj(Rt+@1sy<^8Uo0*3i}O_M(_mPs9bOr}&clr^@kktC06piRQb{5zrc zOoRLs3@EQnY93;cCNf>$c8>adT`bZ;WF@tc`jJgM$d0GWWnN`>cD+E+2e%`r_ZY^k z)h4T$m(T0D?Q5g#E2vEc;oEd%j5LpeAI6J)$!q+*tKfrDC<@(!z{DT_D7>Fzk7*8*|YJuon<0s9ubDhIDI4_sJf6(A4pT0Wir zI+Ll+2+1qQZ9y1Ww`9Q811_I^B?5Am-2$ycBuv^4lNtRhlh!2bjIaW@Hf17>wfIf1B)dJ+0Avo136RWV8+zE{OW2hNp$Co6Qz&=UYyqM~pSG$_bzN4acC0qiSBjGPeE$AFuZ16bBtl1Bv3 z_3~dEn9^_TVX=jszmm6Tm9d7VF%>D|P zifhBkWE%X(GD1)YqxTkC?Pg&caTZSXc|h$>*mL^jk03<#o$H5@ZtW(x!_*O1GmSNI zEyZ&rtm6_Bi&MVwueD*p&ZKWA6y`0WLQnofWz7MT-?zMT7yakt7V}Ai8}Ajc5i>p= zf8rPgD`{3ZOw!fuxnf46fjKhzHmWy}ON8v5kQ znQJA_J@o#-x4Tj=-5@ClDZ`RDEX&Owo=Szx|NY)N`!!h%rk7J15WhEdISEsAkb$~; zeBY=~6w+z96l1I%bfbY63l5f(V@|dpfJdM%Ht+iM9$s?c4K;~0L4+*bnD{R`PD~zI{>V-waYwTPJ zoUDgdY?|Ddz@Cp_2|!j(A<2nOhwXQ#X;C)7l9=(8{0vEb%REc1OcZQ7fDsebNX~e(VjWjYsN)62?P0_?O z=lr->U(wZNTFBO5HrjlBWyG{(uOuy&x3rEw-Qpz4B7m)dAf`z|%b??q6JoVhs zca=c#x0(_6E-Q}1W{ZL#hr$WWE&1RUmft|WigYe;FDoQ<@W&E#g_(?A;;rat?uzwqr7>Ucnclod~{PsJ@x|xPXq;_ED zte&}Nt++I3?pFAQ)6ljjhs7>$5x+M}Z?2uDP@;FLYcf;oVlqe2=mVF0KPa7R0M5jh zQ*Vw~ECC2-a;+g0n@~9X~T8%#rsYs z#ZD*9-Bm*F?wlUNg4y4H zpG)hcpHaBuYb{tMI3rH!xRho*-h^%2mtJ27IZtR5Tnrx@x#oKX&LDrunj9G@ zqq;03nEW*CtbD#vPr>59BHDIV;Yl3N<2LAAE!)k_^i&%u%tBHhgBLYYrqoNE8N8Fq z3rf9qc38^CPZw_Fd|YOvwqp+_I_k7HD3*ol5#vX}zVI6)6$l3xgzGop4HS`|4G>~weW)!$o}Vo>5S_SGNXnNCu7YurVXpic zl(uSppd(@-?%#mGln0u{Hi(MAY?p@?&P^C*o*DhL^6)A>_(x0qgTmwf#$%q@%F26UM#mW&vr4lm*+A3GG+HLBpOin@)(1rAzFraE{Sw7FEr-_yphWmq+AJ05(!=LA&h72i^s@E?8Fl&b@G zP((A96-QmKJgY!Qf|bQ=C;kYl9N66)8*rTZ^LDH$0%N@(!{kZ+L5riB;`4*Tf|>={ zLd&jpyj`7CTEFc6FKxe{DdGVI!YJp|iwGPi$sc&QWg#(pnw$7X6p<#Pkw8JO4Nnh|9#w@1c|zZ} zS-PIQ#Pd{H2h+#q#z&>ADY7{`N@y{G({J&g-_Yw@>=OErFb(6Z?R6fbkqs8-=03aBqs6O@?+sllD?~xFCQN8XQGO<$yCpf@ z*fYXRD)U6t8!TC#dXbD%-ch%garA`t%F-#C4Yj2Nfvr=K)qCatCwHND?nALw-|=a; zV=^nK{IJXu&Ar0FZEvZo@z=X%P@i@#ozg7E?8jPs zm9CrMOUrN(HEKWz@cWg+8q5CQ(E@f)dK7Z_Sez)Gb?940pa>gNj!o6f6ZsTZ|3PDxIi1qbkg` z2fxN%`~!BZF@~aw!t$OEW{K(oSh@8)tg5C})U19is+@Y%R)S zXRd8pd4GRm*gaJ*~uce@f3nZ?^nCgD@VWU{^NuXh2MiW(>}E z3_ExAY|+Cm)q=2UAVk?e1ce1JMf??&wS1tn>Kp^y=#T?!z~<-=nB2H#^J}9jcPI?z zm{Ml9sWX0{1X66ZR=uW+AM=Goycx`O`8BCT?M#d1J3t>T`p|pFpC6lHZ*W&DXe~Ls zzu|ehddP#Nl0(^GkmOvHosw^hDY7dvQ^FbMvMMjy4O4W;7M$TnOQR+TpMrsk2*Be> zJgy(Zdq8QVl*3%~)Ylg~e{JH4Y6L&*j2#d+C>qX?C$M`7?rrPtqP{vNNN)qXM z>S^g~IN=oF+<#Lb*>}eLxc!5_D1@YvjhB+Qx?z#k`Kr|+6 z_X4f^O86Z;98=z>R?#f&lopoaWg1dUn@cO5LfR0RBHyl$zJACr49Kj~1 z?Er-uPiuDQ$+x5!o6If)2@isexo)g3&}l#d5|OnFoS{K|=WQttwA)D|6(!viBp*O; zK7ID6#`Oe5I$)rzDs{@T7RM*4VpCtURqO2;2cg1vGb%4AYlTE~6VHq=+d;=K_g1A~ zojz`HknzB6xgk+<*I^oN!*Z$$ZB+G3C>^S6Ly+5ZxHHM5{!Q|3AjQ_y+ir{5;!7p) zi73&BS|IU)7*R&rlynr?w|*ly;G|kU2&2C}=Sbh}DB%wuR!D<8ze{d>+mukdcvBXB z;nt-xQMUoh4R4tJ>w}K~pH-k0d>mcm{lu>;eue2l!O%J0o*V^I4)*}h(xFR^+k0lNiHyYQgzjqk3?;ro3Uabr#A7b79mSBVYktH-+2Ac%7 z5o=4g1O`{cZy~cPb%idR3cBBdgfYmxI5)^c*^GevAWtk}7TkSyg=(LMm@vlR**-JJ zvY+e^mKN&PttntQw_K}BQp4sd!tzm$QyA1ltXY`PZ!f~v@9K__B>Bmw;mYIz9pql7Pd%8`CV!{Q26H8;+m5dx>Zv5A5U}) zZ=`J4&ZwQ6@$6$q8t(Vd6}bl_tsN8Lq^m(52qwtwlzf^HH{V3KwtBA;1KwtkjGsak z!pyryyB4f%{!g$c_9I+ME!yd~O0LE;2<_6k^ybG9_waNR4}l`=;QJ2+;ON`tVDu-Opi#Aj^pE-j#sN&kiT4caScri@9VL2~*n!b2ZdT~1i1*An=dP0{k&SQF*C8-QHoHHP& zG~akLzL)~S>?-L>>NkY?4zayLZizk{8Ivob0?@g*06M;>MPLA8p%jr?S?++FOx=0A z;)n+IJ%f}w-EnTpe_6xcZT!IbX)3p6WHCbK()q{Jag>t!WjREjqblFIev?s0rS}g32#mE3I!3>;JD_mma=va%)wyDc@6|M{ zH_)TXd(^v~n6O})>^&gsNw3cC?xM)4pc9C*8b_^e>^6h3HlL}CkeT-D7+26Ps`~2b zfZkqpo5_tzoj4Un`9cBxiTl(}yI_whhZ!mqvMZ zc0!@QX1aLt4#e^k!0R2S zDI8G5oiN&YOfcA^zn`7hY334)!+AY=gG&xdxV_Ko3QdLloD~sdrV${zKRxUW!|I2w z;89s*er|jzYpFy=)cj&O<^Z!5?0VkVYep1J`9ah6HJKDGw68bJ|*n9Qu8x#Dbn|Ef|8=K;q*2%%h}ArI zNpmsBK@}JcaCI;YktxS~%W927rQOe6MPz<4R=Dh+b(+~o@0`r9BJ!^kk3ek$YsI7b z;h#}2Jz1Hs48k8^NjcO|5sfkRIkh-{cna!D15ROjIK{rI`OSzhf!ONKNJ&`nJ<8CN z)fZktU3 z7X{9R+lqIacwvMYw4PHKCsUQJ2*RCM*jE`l73y~-k;O3Oz?5HE-_ntG=mkZm@1KJm z4%eV4T6p3cJk?(GYhe@@PN?sP-2fj*+YJM;S`O$~B)eja_MJXzXK}YAtoOCm*U`Ns zbW|b3+Fni`U>+l7%&uMiqakR3*QpVQqTvI%Hu~6|xBi$F#%HCll5r7)b^e{sj%FWM z_Q|5q0O5XbC9nLMs9&PRG^bW4^uO?-&SfDkB6Zb3r!9D81*8TQT|4~aAqX%2zWjg; z(@CqtiFzf=_j$bucNF3f}3EpR)&;h7(CQ& zG;EtMs(Er(cQF3RxIgvVV!bz)rm<&$ftF{@zaZ)8_FX&L!(d6JoQUXCIJ`e~V7X(Y zV>0+Cjz^uf*=(uTV4_`H?9$}{H3TAw4!}$zuS<`u!1z5WGZeTeos>VB{w}acr9q%? zN@T7xbGyg-JC5u!TfGjR=ldmH=-L6F?6b$JAL{lY7htURC- zw0=Io<_MS~{V8h{dP=6uM4eUkXhhY@9X(;mlkk?mIgMzabxKl%g{p6`88P<+)DO+- zJ@-u1KjX+=es^d}ObK67iTc1GZmJ~oM^xvW>uuK5EL68<9FHP1f8R7j!5@_1Wxa&I zhIMH-WBD-4=i%@I(W3b}{OzB~FHpXdO?2>=Egphyc!dQ-0HOQx2s@&!`X?s&kzg%sFDHWbK!9aiaG_C)RZmBc)8ly%nj%{~U&G{z+ zZ4P>GVEpeT28*VVjq8L12Ol>^JIU-6;+vnQjzvLSfN3M|ry=;@b{S5o8OTbleagto zcuZ-YIG8*BegQ#>%+^TI-vyq(9Yn@va+Pv&f}av*)t)h|b8&*Zwl+`9I6Gtn!#5kQ zp)>Rj&aA7#F64(O=TT)cJ1JMXhq#I^{2okt5zFZlpj8;WI69|nF zXI-Ge?=n7SU&hz>_eMsm+MYT0M>jUaelAD%d4w}aJK-sL z$v|&_%QoYI3t8S2`C`vAE~%`5ryaGCFds`?wqlm-)h^xC1+si(mvnY_BeAa@{`TXbqgWHni`erIVf3e3NL``{Od* zJ`TCptADYU4l1&;ZgA~MSD=IFUyh;G!BfCau&xxNsZ2+rp9~WD&`uMZ9$6mrrlJqw z;#HLsfdo@^V@=oi(A}Q7Y7^y+!E(;oOJ^`^CC_wchO+(I1MBn?HiE&9E2EB6#xDyE zpO8AXnj+2WID!vr-~ySWxB>z1u%EPtPE+^b=;!XMgfm{YqY+Mn=cWN7uNs#k0bx@$;SwMl7E zdp}h=eejELKsep1PStmwuu;jl-q<(GQVgha)A)4C}*`Z0Tj&xkMS^kdL&P<5~3NoDa&C*fM8y%(M;8k*Y$#= z%IRGRaVIb1Uf!P4$PZo|>%@k=7xo!GZ476qZM%g71F!0I$YR`izE?D`R+WHn?tKzJ z6gGa>JYj!`Bj#;PNd(~$Ik3NK<1I=%0ufjrPl@Pkj^WgU7|W;##EuSu#J^wE_q~n$ zUf{4I*2oxXM;#Z4MjWV6eHYJApUaiEmL3BDkazy_!bR<6)}YUaw6MIz;RpjaU>*9M zD@m$2k?*9C=Wtr?u{NLdH2awQHmB9(1aRt-iTW)&)5E?j1neAy~f-b#? zm$mBe%Ynu1z=wMxT;?42;OJ;@6zq?TAOZtPKkXVvGhhEurJizes@x z@tb&HV7fpXw)gPb2Y4^HI%s|{!q{a=YMsq2=(`F2$08;ToLkq=5J82Jv|f}LVjWDL z!4Ukxe_KUMhBU|N;k{Bxjkq%f76ZvZKb3hVR=%-m$esyawJ2sM{U^h>=-_KbvA#iz z9?iK_QD4Q-*P2B3kCWtUf{I~Y_))RW)n|2LF)3NdS252b-W+EOz!9QhERy@>jb=^m zyflf2{a6XoRzc1}oLmy?SZq}zUbQ+Kn^MCQhO!NWvhqePeG_-vGiNQmvwL=_g`cKM z-ySsZ+5?N?JJ3M!Fb}sk3jDhdJ|y!aL&WAccSi@9gwY9d>Yvi!^7({l($w1ln72QC z*g;8xN(Th0=G=oU&j!BpC-eA`+l9xkn!RIUa)FOF`S%uPLbh4RVPoSt4XzUI9iTYJ z>;I};ZjgX!$tG^tfc`5ta_p{X3x~Ix@^mz9mcfxasuDHSC{-&vobv7=_cq(wJk2^X zhuNc%KBXqX+=EK+)6$H%(P)qoAQM;2jgxLDO`v&QtdcA)%~LaZg1~dzzY#NcSJjlK z2P}la9+R}xf?129&n=6=FF$ef!2RxH@8YwT)Jj&6;OiYP*64kgR6Bkh;)r0h|{(G2fLjym7L*a~30ofc3RwrUQhq&7lC8TzTu1>tAe1R7dmU0Ump3Alla#$~t%0Hxk4boPfO6n@0tNCqP zD8V5J&F;=Yst_L?H#kNcdNrI9M=KRIoO4eO$XUv`(;;4)f)rROp@9fHHKn+zE8<56 zqw4}q>=77wQ%0poI681r6v}exNunDa+Xvh*eWefYji#UA;t7TJ*x%S}Oh;PpAoFw5H&s_rfGV;ZMhMs3e zme+NBp_Ryn?v2t=vjb2U!kO|orw}icCHNb;uY>9=hb^lK&3hqD^WGWv`)yNFH-M;5 zzN*vE5~#(ir0NU;TZ6uK7^k2X?V^%-8v0ulYzsej6ox)zL2FKJmuTF%C0^V9(E~t= zI3^sfdnsVbt8rCPS2tsre@zwMw$y(<=;IafYrAWno^Gj-9%V?$x@<59sPPc&&@3tj zy3DV(o&5CO`hYngy7MrTLgY*dyt!et0DfM-xW|DQ*2Y1FpW@IZwXbh=@x`CtUn2bU ziT}g9ceYCkCZ$ca7mYD#mUCasjz8%2W4;z7ldudZn#%cOQm&gZp$Y}?((&y5~&Gu(qpr#Z)`WmcE0zie zi3xGWGsW(W!)!^dKWEOeqhnRP?pupN1uQkyFDq{1mG}*n>Ub$N;pR@Xo>xMLrzd`f z5zK3D!&?U-L8(BgCL617trm7ld9(%BZvANq$9kWpN7ITX*|4RhH{*up!t$Ixdg#$0 z_kK3lLX1)*PO17_91uXno`y>lP{ zO5As9VjCN8;n%kE)+|K_0be5WC_S+%NG&<%1Xp*8VxdwLVx9eQP`C3KP>L(c1#*#@ zy3+MSTU%w%R0R>X;R7M_=EsL zL}&t7nCgCDxB%~2F0txzWP-*L%WoEaQB`;%yeh{dT@v*bK@S7oNtCh!lmK77vs8|D zyl(Kz@(&j*7xq`7u)c*qTbEQ!P>!g3b|BxC>aMhNGrq@9u3x;hbCUmQ!-nb zN6pkZ$jwSlk9gs4DqZOrM}l2aR3t360~Gv1jk2UGS7D<}tbn@E@H*NNE7mSM5gBqf zG*Xd|RZ{#szv8f0EH9?Nv?f5byW7 z{Rf_=HoK=o>87UL^0Tj@H*a|TNTz9~=V9VYr~ z2ZF)c70kl}o1av~1b(|Wf9CCt+I+cq6r;I*v#^EB^cgzPNZN9a&XR4T5%#cuZzYV} zeO`(!s>Sm?_l~gmc09N>)zxc+W2j+u*|R$E5^2YU`auHAi$7#ofPk@)v4_=At&B0_ zC;-{3$4*enj>(TKB%-UL16<=`a`9Ad>SgfznG5J=qNkKQM;=5RR+u|)byKlv zLL_dVyv)y79D_ThHjUaGd)tn5H73JDCQM^S&*sj=^=bpz8rFX*$P-ilxEUZBWRX|K ziCKPN?Jqu_`q~56*rPN&qB1qY8qeI?){k5|%@_{$N{`9&mDhjkHcT0TP@0J(3nY@> z(-mLAwAEZaO3%FBZtd_0p$MJ`v)sfGDU~V+#yv*!4nc%MrC$148fnJcD?D>kNl5Zv7 z->DjSG!Vf}HC0+e@k$x+`Kf@b&61>cpqIrK0iGpV?;T&Vo-)o;@Eh>UCzZ-K*7I#I z*Tg`=JD3bOo)5=B9sWJgBH|TKR$h@xhHXcuSrD1>F@ZIqj%dtsT3_aH zJA>Xe&(#%VjV)I$3ElwtV>2QNQQRBE=+W&#{+F%9;V$@F@Mmw#+-?-EMLT@i(+N;Zuw{hi^ z{4z@7O~Hw+_l-;cll@Dzvbl04r25asinb1g0$w(bQlq5u2y82w%@qb)lo56jk>LKO z3SSK+(ZtHRk}yj0ltYt`QmsHn;2_-3z-i-dDV6cgaO?_hroXK&W`1Sq|FvLT;V z8cwlOROUURDH%4OI6JF3oCV^tt9n$1bCGM`sdDkk>pt@i(5^K=og$L28d@p{bL_8% zv@ej5kg~B3ySs39iNS9rszIo#1O(fpXk?Nw(zWZv7MYcNGo~%Bkt7lrV#jbxMQ&j( zh_(_YHnjskJX*PgE#wx1Ga-kkhT=Ul>^_GEggv4$9{f#2mOD2QI)6#>p#3Q3XkOfu z+biMY0R7#;r)QMhb zd(1K(B-y~0jAUyIqfR!Vq?Ld7PT{KR!Ike3UGEKNujqkKx$v0E@(EMZ*(+uC)PsWIbY+%_ML?2+o|_ zA>AJseY2a^7}7>TTj(StY7nFRUicKX;H^5Ec9N2odY3Zz?dRl$dESitgT4D^%bHA7 z(yXasQQu92-oeMVZtE1bIzN{PB)Fxym@tvx zXBO`Ck`~=0bJqp6G3=qw5_(zm1kXW{vGdvU zU^ncoXR|nJ1IP+*@sP51nqGCy;;((KKIOATJ1#V=5tv4@@zk{U$R(G3|8yNEcGj*R!=!7s$mFc| zd>aTq8cWr=adT~hgdzQ(wPH(-*o9YjpKX7qYB)U+!*A-|({Mrml*puESB)2%;0Z@? zhdEdP`*0g#@?1F^3cL={7Pd$sG$Jc4l%W_`>yqIV6%oTmZjp2J9WP%Zz$F0a0oscJ zg$Wq#KRLgbvSw}=*0Zm0)YgY&Ax=Jg)QK^lJ7NyviHo&F2v~5HqpEOI6C1ANoys`J zlVfq&4Sl2HrYM8pn=pvw#uMeDJw zWI6t+ARdF5_7-;9^$%e`GiF@|i_+40t0QJfN%&8k)z#HPTu<-s?raWuuLnyllgUk+}G6EikhU?r-*4*y7FpiIB8N^@f8b^lhc{d>EYvdB$ zWByyUyPRVo9iIQUlw9>J5@lE9fR1H6xi$((@uTT->neM-Z> z#{?Cdl=7qw$ynrp4xhkgjj>eRA-%e!`Z+!2wdP);c|Es9E+UXyata5J&e>Y`?jAm) z+{1m{-+=Gte6U3l`llw6AuoiG9UhF^d7_gl5NZpaHIQJ6%jU%8v z{trNOF22aNd-2~GrpKHY^4ct@4y~#?f}rzg7p^1_cFqU66lqZTFK4`q~T*nwH-iT_!5fk)ghrvw|d4C%1PF_wIF8G^plZ$h=a z^=WwHB3Z+=x^&g^Y zXF{0gI%%UT>iR2Bhq8_zluby!AlU}Al1S-dM2m@Cw$eCr2OKb7OnH_XK!af-1!)zO z%&t|YYCp;C@7ulH54w#ko~g9PI#HUGl4Ik0>z2G_BPg*uwFJsJznRJ++}PVs5j*wH zRcH1sdZ}zeoLQS+a*;{Wn^%)VYaLfO91Ir_f{<6o5U zKZ+4xw#WUykPgVPiKjO}*N!QaKKXwCYgmkexm=cJOSNt_bl_zYd=*lhWp+yPnY;F0{f=8dwka%Bu-=W(H<-cH z^s4+BlGM`?4K418nPRcXs6(jm>iT_y?}EyVreY_q2fWSJ zqphn)3xi@t_irxq?FqAMyY^78VK|2kKi$6U>B!Sdx&2fw8z5A~AGm4&&r z)As)xwfgfy0?e%=URsHcPlxCYOlj$1xGkT;AkHMUJ)Pu<0OOTShF zSQ;r%44x<-tr&Vlf90SyfMLj}{RB{BPKfpyy(Rcvq4bR9IR!<87XBg2`S;r>vZ7FF zhm+gA5Ip8G2Yg+>azDLvY2g;K)p7t{0J48T|LX$t`r4Y?W!nGOjsG8j2T)j0{{?$2 zWG>MAiuDV>0%ic<5TH~5`jvD6d>I`DEPtf{fI{4pe<1CifFyw7SIyl3%zxFd@)ha< z(ht8L1Aq(fe~nARR|*PHvUUCy8yoynNa0_hp~1hZ`VJ;ihy!`)=EJy|UQdlv-iIAje(pj;bRV#txZNb-$_ z4Uc4;YI&s!#%;&oR#?E%K0#c_P1Oj(yJ3;4!~Yk_eQBz;KW=cky1IVZ3XMx)%A2#x z3kYyyQu}fp_`j*_UnCbga_eSM*i<6S%G4X}9E=);Drzwu94=$A@cLq0^tTfG|Il@p zQFSC+^qlEv*X@YZL=*7h?cQYX&A+2E>Bk)Fx zzOEOf8m3J3ALnvh{UB#oG*7iM%(~5>{2ynM#nAoCS;#AcaU~RcCxkj==RBB*64|cg;fU+*P*0qa$z2d(ad9y`m3&+*z_=Dx zZ-KLLb8}ND2VzL|+5RvXo_w6DMCb+BxFG9j9i`da_1)Fi*o7-fCC9-w1GH-H$mc}% zHiIuC+JPA@1Dc=FIr(779SrcX!gqF5UMsk<%C-?ucF#xGl6R&pp_3;b9N0-KgrsK4 z9+)MD$KQP_OeYojXrM!2jNMB+abkBX=K92YX9A|o4E3VZECdp}@Hbt(JFe_rDM$Zy z0NdLtLPKecW%&x@7;(spv2UBf(du3He3f~ZwH8K*8Gb1rOl#raM}YtI>$3i5cgLRI zoh9Ff1#@8hxA@2~S;A3tX$3NddM}&%=EEbMOhiYa;JvAy3#jZrO~|)wa+VBGS>lUi zouU_#1vGQ699HrzTovq2%Wag7o7wqA6+=OYUb}=QmVM~oWmdw#tzFN;=b8PY&ot=x zWa#ijP6vT{q7=GOz0<>%f%QuB)=O(HHG@2i9lwftK3XEpm1@etl>W1K2h3y`4@T|N zoox|ouHj(#)I{;@3sh4|kUWcePn9pRf z;zN_xLi{WhX6}JWG;ebgw>dMnIukR_v|uhFv)u!XzILYUe|XnT9@^IJ`;Pxvn|Vf; z9OL+vj^`FHWhS{7n^32jv&FKeo2xnjuIxLh$t31~i97_^qCJl&j8Jqhf2!lVa-AJ~ zebj=s&xx%q=F-OwKBI8Qt8|m2eSXW?tWCix?DBy3`k?}k?}|`eD)XWHRN*W#=>5QQ~^a$Z}inLTEajERS^oiX z($ZYZ*9+-0OqgUFPX^MN-d^hSCrxyz6R_u0GsHd}ZQXzQM^N&g4`czlpWp4ITX6mq z9eZtS| z(^*QNkg@4d1_qoCgnCu5^NhcCT-G9{{#GF? zLv*O@nQqA}6T1=D%gS)utkRRkma*yeXwUt3J<9&E)KVC*0LAE|``2}o9et9{R6f~H z)1HMd*(CEV&eu(t$YS+jcc|ET8@c5(xX%R+P!71TTOfmp((PPX+s|OggbcIwbZkGv zyJpX3usD^W$3X-qiF}MN#^7S~8ZGhY9VL5qEsex7oc)Zd4!hJ#Z_8O}Um1)Z0dxLXs^X}l0 z>)4}EG0TLPCg`GD4s=?Y)z@B9r3h5Ar{qn%FP}%p(uh5HMyPaAnn+C$9YPqU~TgKM@E!+CsafQ&@yi?N=rkn@)_1GDNQ{NK4 z&kH?2&jqJa>xXesR~mMn`hV|!^uB~K_`{GXZ+lveG50}`OLLup$#YYqm77$M?oP9Q zB&jOGJs9Z`?DgaotITKvnVFgQqWxVZ#teefF>l3HsHgI^mj#apCz&+=@@MDnWVhuPdZ_7b zm=VXIa5`wr<1bw#kG3uQXuX>1gRGK-CgmpvZ4AP}&FMoJ^dd)pIa+N3(WP^NH z8@pmDhtOECnTs^o&P}u(R%RjAok~oy!4;54Lu%;3txJb7mvYBwn2^g%L+}OevuGMF zm=4#IZX0!7Je-!81GV%0;gX<3yyWTtBV^NrUQYH|%j9grj+zQis%1;5NfZ7(TsvaZ zPsOK<$mK+I9(rDAcbd|x>7U;wGk-tBylxxm-sA2665%@Nhzw{u`DV$*ZVV%wY zJva8#R&W$#9^CRr8Dy23|y{bsB3Hb>~TGre9b2idmn+}=1sOANnbJGvx4 z-lz)SQ{tB`Z26BRRA|-5J-mr&n2D1z!uz%dXUB>6$_sl}YsC-hAm(4aAU~am) z?uKF08a2PUlWNjgd;2^1;1|m0X9I>X52fWGx!WTKi#dMC#NYpajpuKfZQJab!@XxX zQ4sRpn(QHO+Wmb)FgysDPp+Yah4BXmZGTd*sdhUH25Hmpv5X_fH0&j@K&Fn|Pu(<@ z(84v7&&?g(GLIG|RS`EcK4)kBZnu2SI=ZEkIAgfZ^B~OAkKDag!Pj4kyAo=W+fDXn z{ifiCpuX$x=*awZ*G4|JbgZ!ZEyb&<^H!nRHrLFRsf)QiDcocuTUJmV7b8Wo>M9)j zktUX{Frz4^=8QAnTJ~S^^HaC+Xi2-6F>JE^r?uy6Em-pyUkd+>NmBlHE3RDW`ufn& zQ0*03F<%oIh6+&vPGPZl)^f2QR`y@#r#R8pzVPDzmT^$a(m~*mw5AEb&%yQFe1*D< z2^q1u5oo_Fsca$Y@h{){*WeaUer4U=T{vloJ8esC-nrjYyV%V%^Ao^v>;t| zEB@CBqx;uhR>c!VC;ZE;`Df)qmQeR&!Z%;vLL{DlYsOy++H(FlAm?Q<%)g%^x}N0? z1wFg`t1kAwH)FA)v+*1MfQ4%n#- zl>8q*(bxZtxmL?UR`mA&Gm89K5uz0O;{c)4*1G@k6WMd#h!=)%xo1lMum5!O8}su| z$S09VLZ=`Pp8z%i3t$>(1#E$4;1TEqu7Cp|2VevE0YiWuPyogOHGm0F1!w?oU;{t_ z+<~sfCiusxC9P?44@x~0PFx+ zzzGllM1U&57cd6&foK2&_z4sPF90e40%!-s0ZzaKKnE%S9AFvn11f=Q02Uwu?twBO z4G00=1Hpg{zy;g_4*($$08j$lfEf@4XaNR*BhUp504jhHzz)Cz@<0cG3*-Vzz&tPl zXaMzqG_VVh0igf_un1HGwE#4r47>r=oG(Bo@BzpJegk^IB%lkN0nET#APJBJ#sD7R zE8q|81KEHV@Cv{O1_4cA4-f)+fE1t{*aqT&0$>d&1a^QeU=AP$Mgb4tJMa#02NHl` z;0YiF0s&V58-N2~07W1kPy!NxWB?Mt0(^iWfC1nDUIKqqv|a;NfG3azumJ0TCGZ2d z0n`BpAP9H{Y5*G`75D@c0hqunAPfisP=Gmb3?Kq`05Z@E%m7FL8ZZTv0u;azfCrEO z=|CMI3giRSfEZ8$!~ktT6Yvcn2CM-&pc@DSJ_Emi7GMG317d+jz!~@moB|WTCSUU_b`o0&al^ zfDi}(C;@K342S}>00Y1g=mG`+6~G8!2jBsDpaZ}Ka)Bja9vA^MfOJvw-SzLD|+I6`gjo>UiutOYOl_0wp|lSX5BZZ z?pYt{FyBetLj{ig`+)o=ucQD}4aZ~Xm_A1Sd)V;iD_L)zcmS&+jNU(^0;R1l<1!xk z9LO9f7qPm-tShGo?^#fBP*Z zb(w6KUMPez7z+Gx3-!53CN&qw3++YI{w3rloiRMrwOaMXGNJlh2!|6NwZ2A3t>Swm z=iLmQDg@C{3pudu1h=}YPcLj$zrb@9Qv3{g#;hLANR&>YCioLCP5fTZjp+qNU~me; zTy1|UKJy`qcDyD|p2^(kJW5%}bXOJ3yA9F3C5La^thVcWHy8v_%C<7 zPr}5X`Em4Y;TxwcoqZ@x{J)2Uln4bjhoQcH5&DZ_(>N>T!aZVM_-+Iw*Onzw@OZui zQdWvEY;jjN6|y5LOgs$z@l?pTKCWm`!H%PZx4qPJIEbO>JZX4n-Zgd#+z=;oaU9Sl zYYFxA_4&9Sp7U2fhM*!E%iIl%=l^(HQd?t=*IuEQ>$o^G7 zFUOsXtFiiiLYkw1Rjp+vXjIje?EM5yn(``Lpu{b*fU<~Ez^&I3EXTGdO(QSrto=Yh zEf);~DZ8#faeL>TI&TzyvgofTYbM30QM0D%%k382{%T`>=|+*RtF-8kT#ZihORH~k z-|z7->zuy%D%+VCji~kR=d?EX@P7etBVQ)>AwI{~ayLX&UYUBXpsrU6R9AyIcjM*o z@eV|oe9{9tetzu4ab)Q7brbh_KP+WMU}Gn$vK%0(a&td2tyHe%yy)+57C9a9e1|K= zA+jEf6^I)6F{%juT9d=N31X@B>f1Oc*>@H1t@D@G zsPP?wh10gmKcz00cP!REV1;TrT9cwppKm4ns(#GWM<;VjOmZEI&v@lb2Ei6zBt4Ek zhzeyWzC>g^B2!r5!}%O2uKl4{h^M-iz4V;9=muJh!&$cA`&w272F&oKG)h$0`Or@J zCplBSkhEQhGr+wxX#SfCO#wBn>&m>LdyeR`vecHq{ z&@HJM#V;#PYqgwNnS>5=m@fI~k6B^Mt8tf=^udV`VLyRaYW)#+Xa5m*XIBLN z=U)3OHjd`c`q;BQj=!B5~LTs?5vNz&HzOsbY_h`8GQw0lkvPM07@n~R0eUOkCS`UhdXx+`5O(~UaBVG;$ zPgn9S`r|PPXpP)n#a8nJs2IVJ2F`+f-XUp&MX8YK#Kmung$kGW&)K32CQspzT%I>S z&|NlOSvaEOBz!~cN~BkH5wMZdDUwpJedK(np)(?Pjw{cKeX$@W z5d*IxFDok#H6M|+!X|oQV`^~SH5yFqV>wm3JJ*WPN$qWt zN5469wE4kilY&1^GKNU~c!(y@A>GkRt0y$qR)SJ_r^Cx0nbNHT^>th|ZoKuv{oOmS zWo!*^xuot{W{SJ|a#hwN~{|2{Y>0NXry3V zNw(U?;0WbUXvHPmLRdLdM8tj3CwpaE&Jt3JMcF}irYIGYaSyx@Fop=Kid0*mPZlkPv6Aei>{;)gI(Bg)Q^*oV`RNB}0Ql z+N7F+uHO_RfwbLoScir3c}4q-JLp+tg}iQ6;QPaMEvzcnJ5_R{h;m z8vaalp#7*x8>fW)jPpDdXM8}^vOttdKM%vK_W*5 zqHo1W!;SW~g5Iadx28we7TKk#W{zD_E$P0crYJc4F*0e1!O_KYRD=2M-DSJ}y}!b} z@bOcnX20vL499RNk!%VIn2S7!+T;urlB^YbeJdRawIVM~6b@@C!ktDoEAtCr^BuWQ zGvUT#A{A->CW3H14XvFV`gkuezZPuB{Foro7F$1!{b&1ODgf<=iB7llAMNLk7|gB7 zvL^}+S9MI}6Gl5TF48G^S|59BJQhTZNX5+$%@t^B1uapBrPL1^L!r&@Ugu$OH-=vE!s`3Y z==KgWYPqjwOeglKgCY#}776_n<4;WrQ+tjpVhZMRd8cem&1M~hWEg=OWv_L0^NY2F z1Z#){&d?j_P15SET(SWEI3dO}N5Vz+ED7^cWa-Q5;vJ_nRily7bqAvT(qG8PM)A|v z5W4PAVKH3j7xj{d-l1>fL^vjgKgshMXg-eM>iuJ%|goq~LQLoI%91F4xgzW}u$jNag;cZ5CcZpnJ9%fy0y4De; zQD7O2)uC_fEb1pDa}6HmMka^TV~FlO;G?+4{+=0WuN{>>dtVW1cW#?_g2|%S(#nLr zHF01%?8@4@aBO5E!*X~f+toAl_>8xdIpvukm|UdkrD|wk>16co8;82QjQ=#XLV8LV z>veXHgSL&Nw`JbbIKkF|n5U2NgMrj=(@cu*iFh2$86^EI`Y@}b|T;Sq`#g1=k1uA^@fmvFZJ}#2KnCr=d|ba z&Az8*Qmef#_O<9k+jFN?4f8o%_u#M{XUT4`#w3WBIiaI_(=dGGUcf@{$6-0vdhC(NeH zriuUNHEhUT0PBGwoeN)uD2@$@71MTKAri|GzXKY@XK#ZhQ5eK)=k4D#4Cje#>UO8c zf8Ny;po7~uNK*U9T<lJjOxe-1jLsn-Aw=R2Qp__1@(35wAG>+=|5z5G2C7OW_3d z+hT6Tmxz@KbF<#=SYN}{1TbNZ_I}*gmJv%Ad2f2s6E6?ho9umQEl<2_(6-!vFi&@# zczrlS#>8mQPZ}1pu)e|UNlnBDyU8E+1K&2A8Y^$> z%PqLP*QrQF#GJ-q>eAd|L6FnOF)&;nFp%rfriK1rI5JD8GxatS3E?18yFv?c2Xkc! zJQp|=*5SSRee8#h`niN8del3Fyxg_0#ZL}Dvsu(7kt=Lf4McP?$hyB}hs@;yyXhc` zQ}|!O5zE7^*$2=+PDL_m%JhX%_v@oCgAG^?;nD4Zpl-S-DjgM4f8^HX3+Aj%e2 z?&R*j{=kI1x(d}y>{zz#jkqNlJ*4MPO5?akwVz^a2oxphvXk=3!me9=@ovlL>wysB zL($d=%Y|2b2{|sh_S++6R3{R@i}JS(8}-LSis3mViB08tzUTU2QKHLM&lT&Q&!6p7 z$Kw(=ARG6A$0R5C%d}3_>qf)hpk?|V;W0Jy2VDHo`$x`^vEoT zkH;T^t~{mFC(RU_gf>1xpZ+FqW*cCca;%J2YbT}u&HDyZS`LY2r&|;~VBv-=eq67I zvn4l-|H{Ztg2C84AYdQTS*sY#vx2BH_=D!Nu~3AElyZ@-l(HXMOf18VzGi04fTozX z=3j$uyqU4fl6jzkCd>Zan1TT1=r!Xm9d+i!7`;{$)d!0*3ajbO;dk9>*`C?ip&VPm z_trLhe@`><>6;#>YxWrPIL>%ClSH)+jWp zH=#-fYm%ii)w!=M~C#i%76MyFEkD0o6svj|s4ABid76y(GUvDbsyeZoHf$~bT;#pjO7&9wF zP-B2Xj|%Auc{WYa;%s8>k<;}{rT_;VOevLE)!kJ3Cd*6R{XB0PolvSzEK>v?rqL}% zv|1h!Cn1C~teThpztH;3&DS(p*lzrO?0Y)S*;KpPnt8s~`|ak|7k;VxjGVZLr0s8-DQ%^e_(pAdzc%ZdrC3(`r_@|uHi<@l->vTK}n?;$m8xi zdnWYNZyN$AU)T6d10{L_QPRpr_m7dR`ChYx)0r-6QKcQZu0lziD4H0X=;ruI=IjR7 ztr}*X=jQPxWw9q-mUSzQX+Ab-XxHQ;z+jkVT((s; z89mhp$phV`kMLcq7lYhJO`{`O^PuE;%TF^&jgB<+gsylA5?w#bHjDFJY%Ma3wPn?GfRNyj4vN zR5zXGZGKn$j@nZ6Cz1+r6;RkMoffA}w&o<;qO4N0mEzBXJZh41D={z3)Upodp`k|> zpRJ4bey#cMPXx5>peKwA<6m5!{rsglr|=@xx-8_lrIy0MAG|lkgul@)U)sci()$g$ z+^vrU&4hS`R^8jnT~v-XJV7}f=K~LNB))-2hYz{Z$ zxq;Rfl;Xmyn*J2S3wT1@8ha1o2k*%~w&_d_>NHr)Ib`d#rjmVW&9ERufORxR!-6|_ zO1k>-%;&!@xI~Xkj2U0>t_4XlG~i;^z!9>FL&Ifumd&aByP%v$cD}Q^n}fEZdH=kG zHI$O{>Nlc%J!W=*k9f4X*n|`V!QEcn#tDv z643KA_WBwg{Kv7%HG)!zID@~`lAlvei-gn%aO0@w&de>p5`-{}VY@)!>;3*czvqda zL*-94Ir>{KA$0EM>ptb}CO#3nm*hfk3&IGt_D3rv(XvgK^2SD$5kXSfSV+zmVV7l< z5*cV3XR%#Px8;q{O7wh^w@#9i%1iuutUBnTEN5Wh*Rez5QF~|hh##es~B=U$6H^EV*LsNRQetstNv9S%sS^e&XlSTksT=|9n5$`wl zR#dL#?N`-W{WPlN4f3i2QL|mk@R)f9LyH5|8oW?lrtM%d6XN8@j;&}4NwKHch|T)a|BBSN)V6lIgoEs(K(0{p3ZBd z)ZgT6|H`S-sc4CAma#ATJt3%@M=>@76F;W(u_NMuz#sc|FdL7NPUdWS z-0Lf6io|Dxc^Zyo8}H`AAC_bk^65!q2yQEBvj+#Jm$k@ESl0Aiw9OQSF6Q~WKCK<{Sw>k5vgEVFaUv+T#N^Tqf&)1WqmQa^8z~1W%l}@8{`-oCkl{b> zUM?EFq!0fr@c%as)Oq^jfTtPF|8WZ0lCzg3^z72-UyA?wag?UyNGY(^7ol1YwI~%L zcsM35!y5^t+L!e&Brc5zjqfiQ6hgpGlbehkWG?M;aLPpnE1!tVBOye_uCQT(jQ$@ug|oT<^JtC Yt z^wE(&YAR9DWgmLXj}|EEk6-B#@++%wf04sygEEkSd{aR@*R4jx67 zI4;H2Y5V=x<07TuFITBVh?jjtF+bX%s1u;~Hsfl~5rtrUB+b3f6Bt&+-LRDA*3>wH z3E!ePni0k3y~08Z>TWn(l$__)H1Zf)G>C}buW_DdY=#&+GgLRJ91w~Q5!Ue`ub$< zC+E)<*D*yVn6s{V0WV4Fz2O#a>N6SZpSJqEXf|oW&Sp032mPux(vq3`75}%O>ti&} zPMf*8CrKqtxpLSK>TvIJbjBpp;rXw6J|*4` zl43e!`GxBSysJ3{9W_@|odq`1vMAzg?B=z@4vPKgx$RP&u`tJ-?;_OjLg2fBR)wqs zT0$d~5qthLA|eS9nwH!bmR2~ylrJ%E1C7;D{|L3~ijI~}MRS_bvpY{R^U|adO8d*x zC@~jrF&i~qn1*)g+le)49ZO%p>d;5GwFVu_U2l2mS{o;FAK}-3#0(aWEc)uC@l&fn z!dU9$&@PB}J6}pH-xw-Po9iW33nse;OjB8C7Kz30D^G_I#s7rxV_(4gP#zw{`j4fS za|4YeYYGw*y{RS^+IyhostEDhzMH?8vSF9|@Zkeu;EwEOl9 z2OQ4bHRdPL2GtJ2+|XaBjL6w;P!01`%0Aw<{c6;F3yasZ$Nc>=I4viftD~6EXoHW< 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≻hJ;%E^xF!{d8_SAvD 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

tEZ$;+S`dyD~2LG9$J+WzVY9OtL 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

mSkt1J2Hc@b8bfq%N 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

1!d}u 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 z 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 literal 0 HcmV?d00001 diff --git a/StandardScene.Core/Docs/Charge/AbstractChargeMission使用手册.pdf b/StandardScene.Core/Docs/Charge/AbstractChargeMission使用手册.pdf new file mode 100644 index 0000000000000000000000000000000000000000..18b05e540164890c94a32263295a2cbf8aa76343 GIT binary patch literal 916676 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೅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­V~3bkS?21qB60pO1-~7iwjfM!w$L7LKhdJG^?z_jWf+85Em?$wDE1FwN9&S-Y^~KZvN|r+;KYo8sBR~_?Th)FpK=ddDf)_->uP|6RN;?5LM=<96 z7c_5efBXi6oS0TB)`V9il_o}MU`Cx`obVK4_?cFQ%n&OtmOq#}s621_L-lMbhRC(m zml@<~gSH+xZwx222AWh?ls{?m=OD63#ECo?26K1%Og{-!M#NNwua~MqCRroNs5V^s zI-n=Ogsy%v-PGU2#XfG-2pj6Oa;;~aJSfC?q3_ozMo{nkYoS3?a1n$mLQ&CTws^*+ zck-fM5lLqujKZrDx+~o}Zq2C(m-&L8^FB7nZQ+QUrgEV9fmb=ooY&}`*LOVAxLn}) z)Vq}l%{Iv36*O(K`d_x<=Rb@cAu6kehdik^ZTOVeONRG@G4dMG!N_QYf2yN%l-46p zXjPzMa1D&gix~Qwl#J0%*%Nr6b(?h_K*>JE!tWT>`6cK!fR^_QjNp z%#mel!%MazP>DSi#QkW(I${~78p3t0oCOL+N~0->vDFv${8U(pl>yc{@Y@aS-OpM?1}z4_waUqJ3JzAi)$%auCq~ ze}}uf#kvtCmouH(C0_fft%`>8sU8<(<@~F4QSBR-l&)}SDBqOP{ku6}ORx0-3QTo|97-7stuF zD<%mS6^I;47>KBh(+@#tBG}r6c_Ic4rHqpDMbHMuk=os04;t6?NLtOym(Z2epQ*@t zS3hhRaORp*qsrJk8sK*O;Z2Rw!&ale%hcn+*cp=cJys`CEYR!vY%Ad`%-TlHz(@UN zH?Rg)1-NK=VYXK3q>F7W5ol@x>CscZ^b)I<4}LU8E-~1z%PgOJRqjwO3tl(wKHwU1 z^JaAGgNtx-u9iFZt$q@32Q=8l;@ZsSwM(Oxtysr{OCviIi?ohA_iFFjOw{J4F6>%) z(oYi9DriS*FX#rFci3+Tt)yy25n`S4aM@Q~jQac8a)gr!73+~TWVX%d+6Nbw?~WY% z*Ji9b@g5e}6t-?%<}={n=e|$AiUtRlS=x$iD3^=b93+P|uFv1J|h60#;77 zHg!c9Is8{VJQKc$V|sR>qOl>C^WZ|0rc+Vi5;G-DB@Au;VwQ%|#f@TIpZRfH#AgA7 zAmjq8Ge+xSkslq%^Z}XMrWQ0$gJFO^A+HnoEdkE}{i`E23@DNl3eC$r(ZT}#r*9>4 zE$y7R#2kc)aEb+Pl^mPIwNRRd6T1ieCPBlWeg(H@9$AvdevFOZ%L7CUpa0Hif`-A5 z-{H15BD|+Pv528wg4}_tANnvAok5hI3pANS;D`M&y;4=M0F(4yWCSYF90$7*B!Ice z*goCx7p<9RI%MzbspA3TQ>!nE_ayZ&_RP_HfEA9=1gr!dW9`pzV$Xo{^%;Z@;BZW_ zc$MT&BiRyh3Bz#!2BkwJ89#}003(G%;cKn&b%RTlY_I}8KR?`|d^Z=SY?Whe-C}zq zaP&~Wxru+a&vOdOtW*$ty;#!Gu8!`x7q223a;R$5iqD5ZDp4IxAz$=z>Leh^p126- z8HY@1U?4LAL`hLZnyL*JUAni+YJzhNwAgRo_>mIt$MiJ|isfOTihM3Rx6=Ly9tyRn z9KPu=d8aDJ)IfSGs8tWYyZPu%twAE30CBT;US=p7Wm@bwEg3#j5PwRhLPZRK%#1YM zG=lCV8fa4go{0|FFuk@n6*4j~(<(0i z+dqwR-Z{^x@&u<0-$kxa#5|UgS66?WQqY{>Tg+Un(9MUbQ083QviYf>k+jeoZkYoa zakWA4uRzk`x`1kS*G`^9U}6pJX#8#{zoa*+LNI7aFIJ4H$6f=4gK;U%Oa;L>q!>Cq zrU9d&F)qS$EwwnR_@oBFWI1_RX`e}UaERw68an4rpIxYfc4?gFV8pcy*M$xy2#V`H1Bs0CIF z$B}2_R|GX@wZx@fAq&YmSDgORm5bBCWjWuV7dqQ#^f<&372@rm@6w8&?LyABt2dqO z{sg>4)ds4nE=QV+sH+`_E$f?TVOw71vYb(c_r5=v&IzPkY%6%c0xIg;&G=veVIDum zd`Ukr6}0Yl5X>{AxHzD!Q5Xn!B`PK)kBE5qgZ%+jR|)1AFvU$>a;;gmsf(|CoUUE^ znrCZF^eD{VwN*b03Lq`4kB@s4K%0{DvYOJF7z;FURy|lyV9T580#L*t7FL&4TW4kr zGba&q@ChgCaBm{v1p`E)(Lav^T=Mb%rXnp)6Qf{-OKheBV`)QWK`2aa%e%jM@b2+1 zITm@64!BI9bVX~uR7M$^pXwl~W}2%i{2`X2L;JgUS@&*+FvMIqb{I@CnstJ0s;Zqt zm;UM|)-A+rxUQ0Utm<&ckCa}K(YPN=*6BTrb1;Py;X9qs(&MqJ$I$>lc)GF_bU$g3 zQnR%I>_bJs!aNrgm}M1Wv-%5eWwVQU?e*qUFHU(XWOvyvu2-d$&-GAw;ps5MglY?4 zxM`XgGN#3}Y#vcRw%R#$o<@d#ChH&)b9xh>Otp6y8N^h*{OR*P&(wWG;c8@-Om+d& z80zZJ1Dx!pJQ7eblexb#`gFm9;~lV8f{xp;b-Nlk+^7ae(r$}D1kKcCLt$WpJZ~E? zEHe045WiZF@|lrlkZLD@%?#2&)-G)vzb-gv9|&l zyiUk@35K^K_?JvzIJmjO6LPzc`A%QBU2g-r2DJicW4?Djq&auNK5Q=9he3keU)B3e zFR(^IQPkFHVv&)qK_xCqCm8rCn1@xVMFX7oVN^;S~RXKyty_|}d)NK*P9T$Vh z$q@c9X6=P$As42x(^3lVag_mNmn%ZO4;8Y0HvGkTA8LgEG}`r$nEPRs%wj#-T6II9 zwDcSUu>3wl`)PCv^QD2VIP)9snZ7d)9TexCLMu)c((-+289x%;X1kj_ycgcCp>V~7 z+YR03T2D#!Y5M3oCn)vf16tnGZ8nA=Gn&rg3*kQDGq!~Rq680cvBht3#uSCWWqA~^ zzFJ6J;&rgaGN$znWJXJX9L|S_%;buTyt||DazROO>ARbq{Tw@5##hMJ{4u^ zmSbXhv`ND2!k8JUdv{iAL&wZU09eI0dzIv580Fs08gcg3crQH>n%|d5xZ&dA1-w2N z67&~DJM9|J1w$tb9_bQ$Bih9ICQL336gnQDPZHAU-8MK!FHx3WMLY2*nYWF*~ zyNTb9J^FATEP5JH*jS)`JNHVz*QCS~{RG&o2OWED$kP-~H29E0DbmtS?Nuu0+^KZ8 z$t%2@8Gz>~>3{!=reqvpz99G5bC7IJGQK)R+rKQ~K@qs;)H6T4nK#x4|E3F_sW9)m z6+wb0{2fZp)Kh7!OJK;5JG1Q%tZkn?rO%;^G@tN?Od_%iJ4Qt=jD*2f1xaD*5x{o0 zhyhZI3l)JPyagL-PYWLy`G;pcpMb(01<;D0nia=0l}g0-Uh{07=Fu|fQtvtAzWnGH zGi|)7M-0Pcu5wYGPS=*SFJ?pb=^|5Gq>j*5)o#Nxp?hVU@6UjrCZmezl`f-hGI7vc zoEt?3bktHsGUpvDis|QZ2jTaaFoGjeB8CLd8UG2B4#x$dG54RP#OPtMp3np&aZpt$ zCd|66%ptOp%6L?CTEW1%qmA?oqhs#=Yl!0&XUTbdXv~&OpV!Ef1eFxA2@BBuOp}A( znqN&JWqRyOb>E|B5i&8;QLtsbesVO6zZ#)vVjkhK-i3w|8C8nT={+*Le!=qE^ti^- zi*HVLrVM~H8%d)QjHwOPDo(I2T$0C;fqLyNOc*#W2m6AP=Legg0(oHmbCHI(5lxCB zS20)G>oTxj4%Mon#fjZD1DKCk7jd+0&SM&%PP4Q3Lx<62id@-^|D8n%H2Xn7sXuYk zd|>`5zOIQccprcJGi=V!?kXR)CX;hAkGEmD-j{#f$^G!AI&s}AZTPtHt;%s@PK(R? zONU-7X6qLr<35_!vzM+H|2i1?6|tnIm?x`_cNA`}ip`aS~3I1rNKBBzp?$;Q+DW4lsbTbU&R+IL9#ipf5M?^>!mzq`GcTTtleAR1V$XUM=O4iiEq-tq=ePRNH>NESWN zSz$?s`*YNq>6C-^V%v!YV|lU;yz>W&C}{8H^K)m=U0Hs~YbHcp148U1FlKj2POK^HSXo=+ zEry@b4XBS$0ZjL*Fl+@b&|HI(!w5M$w%!?b))((zo7Ak*m2r!@z_iFI%Szptcybyx z<;O6KWyltm(65K!{RBER+_|HfhYR5Luwjue#UpOK(2cYkA&5W}DwaMnxyEUq7?#Z37-5H-koS z*lF)>pl!Mt3C#O4!t9B`&WJA#xn}qFWqK0s0IGFMPV>;7GwfG^W_fyx( z+4K@qCt+p#WD=@FWcE&IQGP2(K6UdtLGOCU5*OR6vM`^`<7DOPwrVob+Ourg^%KZW zN)XCtVLK-8X|wW`2gQT_M^U9mh>Nsh2O!74IFk8$MF* zg!QB9G91S*Zsfx_5LgGWB45%Fc(Uo>&PlMEN6P9^v|EJmiIb_-kQclFLW27pfE4v> z)a;*kAr6#hdk)K4&m}6~-o%miChA)F|XJ+uZ$d|ZA z;N}?tS%lpfxGrG?VS1ZQ=6ms7_MF>>CM(x0el5PK8q?-Zn;Q?bFSI)1r(J#?hBt|R zC-Z&5-v_PLHl#{ezYoyfSK1w2s723$KV~RG(FL|$x`uenKKWPu>Pfz!6i1@f*K&1Wg2Gu#S7>@` zyR-BqVY(N8wuyFk+Qh%dhvdex))9EQ--+RUcYM(oh1t1O(}-Na@?0MVfs&t7h{*Ts znvmGvQGx}9U`iQsy(!J%<}u&0rT%rZ_rfAF&=08By`R8&4FZI3o_%0QWy6mEs`Z*l zwiMSd8+g6shpU@THgDHYaYb9nSU#id8-5oMeeGzf72`60qu3 za<5+b>2;)LzopZ0UwpwwpIq~11y4!?Cnwn^e0TQKRu03g=ZkIbuV6TQ_LE#qhN8A~ z>Do}-2B{N#ouA?_Z+8pW4N5N&Awd&P)|U^xuk<&T!YkI1=BH_N;ZHaVB*4(b0nOD>*E~s5TI3yEiT^$6WtA*wdT~G;|0NabTf)A_f-)83J`(G&!XOMs6$}Yw7@VCD4W^h54u+^Oo z?0SQnEEPOuY})u-UNSip$mqo(xxQWlR2A;mG9?^qg5pNOv@W;ExryNU)j|g zOZF2Kh)P*mcsHDu8A`o^>_aga8l@8Yd09C_5z&)W&xVUMnBmrr(*r99+&)qCQ%oQyxf9vp1KJ(?Z zYVJ4t)`;r55-QxkIwO!SLeg`_V!rQB=eWltyhWbB+3oPo-Fc=}d8ThHTWy@97oWt5 z-{F6w=}*eN-l0|3aQr$M-{Dpko;kxig3+Gj&lk5DJZ0w?`n_T5VCb{NDGGOzf&_d; zm;%(ul{FJ6bgXPhB@emLnwNfAb@9_eVLgY3Khn~T2R9N_dJQi2|K!+-DuW9hF^D4Hb=(`yDy~@S(&s&L zx#(~|dH<=H%!P96NoEAUskJWHeZd^!?)kV;W(~?C66)l!lw|q0V#6Yw4|$ueU1XE> zemr?*qm~tT>}-*dgcQ``h05L?Z@6%9t8&2mh7-3OSL=vzER@OrjxUuXH} zA8X0&Y!LZ< z|FN{GskUi4F^~H)2JxbBf__0%XgAOM?e$lyy9N1wr?&f_`iQYIaI*XtAF+*S9QOLI zC8hg^9|r0)s&U}xP?#&sZIhgkw;-DX5kYu_n@>;(!>a5n8&p!~`~cL!-aqB&8I^{0 z&o_HHOqjF2Q8rF@2~=GkmWfXjN46o|2q2ZIX;}bS0wIPd#=@km^V$Oi8)Dio2Fw9ez+80#x_#mC{^FmV>RYkD@e~ZePy#cUU&PPfz{1+PZ1^ zZQwxW7f0zf9P7c>eRSRRTM8JC2)qXDM9Z9+Q2UFAzC!~2joJkUj$o}sE)r-usSx?x z=yGtZaVc1cDtc(%OQvD~J0DCGla=&q-Xf$GH3>_#f#Jb2r;SN8Udce^Ph>_(Msi7h z7OT}+eJ@saY19UzrBV41HZw(OY$58XL78r0@G~uqUrq!@;g@$yU|NIc5d@k+Y_S2i z)~bLAV1_|gDXzm$?PR1R6H`lA5qT^YU~3*wG-&%DaF$Kf-R=(<4)&lxhJG-REgZ9| zw_a1ayz?@}`r+aG)n8xr6NKm?c4t34KF?s*&kX5YUC_CE-W{P$^an7_f8YvG!;a_K z{|%=Joc5wF9OUl8hvO*t!6A^o#eh`*W4=q`S5?9=b>pgHA^<`*1eo>=+6dqyfU|oA zWt%J{#q}LI;mtG#<LgU8yrR(cnlXL3lfF zVPa)D7_L^ykLZ)myQjH$_D;QoGAN?kQZGT6t|vENHeW&HVYakQExk-SswdpvU^I;| zR?rMCDJbj#8oZ0f+02EmaZE))b#4Xb72A^Dg~&|$t7?Idjd!U?9H#MtKCb}J! z3x&f*InHj>^IMNc-5luwu`FmGo$QoVt=x!G3! z=yY$5!CQlX^A7~Zd1XH{m&*E6@NTZe*wS;K1SqaK-!l`JAJ5090UlgrqJ$q|`j*PRa3%Jk{pJ4R zTCU2k5pr5{?~5hp)6wl?zPNy(m^l}hF{t#U#FzDJUW^bgS{0=WFx2ds#AGZ~@N=4V zwC<=m(r70JMyi^|n(hFx=@8OR(dCE5mLR<@K}-!-YHm!jvm4n3kEK*ix}KiXv;aX& zA+6iTFKrJSO7n_N@`|Rr(wU$xQfFaAu;c9Gu+Ogt`D@TXzIfbu)PDkrdGOPWaD0tS z*6>YmLPH`*?cz@QN_OZ9rbfAx%Td3Xf94g5a$yI?8c~_Uw3CkV)Y66}{Wc;{+)VQi zQw-O5qLGPbk=`g7_;S+g!iU){c{78> zU~n`ms$(8Yt{`i$Z+q2jr(3)_LUB!@>e|1||6_1|dZ(2TY3;Rolw<4{Ds>qR`UeYA z&CXRq)Lc5xJ)YBrVfzx3kjT%!Ln?nB!?b_`%VG-bl1_qFab%;Z9!c|+&YOG2wPXsy zTkXBsHD@=gvjE=VN~iv}*;Ttn*5(kD$5T~at^Ae+jMO9CX3xI26b;okD2)i&V^xRA zwM9G0l8e~43mqKdcjEdJ@rxbtJ+27+b9cQ@`+7)U2C z5iUy?VD=x~PZ~*`zde%2CXpwG)Bz0v%cI+NxLOHTs9FiqTDXC#(E&;!=NYqUnPK?H zP&P->?^aNGNxcHngEA*W2!_WnU@@*p0os^>i=2W z;A%$FETBoftfQ&-gsq|)gvA1OtoByprbyZakw{SA_2hTOR*`rU8RRqOn=B*WB?*hT zvE_7OZ>y-S_T^O{IwQ+Z>&KkWq?MV`e+^QHil$2!Nh5r^7Fk+C&2l!ZE76>d*>HTB z+}0JQ9Il$m23xHdL^WnkZlWRI$@MVLTQ96*& z7OkB-7sr*VLVrtXl+0RhG%>=NE2MYa6RA65Z_ zlcFICy$>N)DbMsPB%dAcT=OvI^U*YFmSnF`^vWs!1Yv}}KvJvdlq>`SmhzJ4lU839 zYuK~VI1xEY2llM0eo!^1-$;{9(vetHWdaqjn2QAb@)Yd(_&&m}@WZNy`zVK4Xjh3xqlg1)y`r>8S!(39dSwv#C4c~QS~UVY`N*Bw ziv4Z6hv1TE=VpmL!_%;>ob<04?oKW(t^B&7spfkxlPo3d-pY9c4cn5Btyy(5FlkQ# z+7}UI@V(ev1+K5C71=GOfX$qFBR@^tmaLKZ6R)eS7XNgUS`!buQ0&5&cw`kBGfmu7ie%Z^eX z-8acZx!hgDo!+xZ4&gXKK2?(8S5eAt$=kgTdkNv|fh65FG(p;+u2X7P)p}{al#ZfXPWZ&z$>9zzjM=Noox&xc4vRnS2e) z*xk%$ePhFEG%Rd+{Q!h!&y130UZ9rS%*PuX_*FES| zne1F|o#i941n|s@M(^1U*HyH(_sWL?yO$&F+~zmXnk37xlK1wH4uXO`{Fi}%Lqi(< zTxa=qJVp%7Fw{hjd5qrIps)~ZF^zzZlplTA@AigwVw}VGb-JZdu;J&!cuOVzyYnDt z3>LyHp#=_8EHb=ofqs7l)eKkkFse)1a#h((jU0aJz)e;8hv6+|`TPmxh6!PnG*r@F zX3i%w;la$~RSs}uf*G3h1+%-{g{G(w7QNS;`3b>es^3Uns{aR$jQY7bDg)}hlzx+j zP1E0JyUoC=asLez;BA#zoQ>JHJ7%J7UBb?hYY{zCoezSJE?CZo;s=~Uxe~|M3sN(E6zfQ<|I@yV z7TFk-l{~*n#t!l~93j79pLX7{8ywpe!1pl+w|9n@c%VTknMHN~U;=$pai$%DOFk565_S%99=aFNcHz z(E(3KufI+yb)xR5(3OcY2ll?p^OT3ux7wvVZGZF;&M8=Tw0e{jS&xX ziadQ~-EsC?c*``2-*Qms%HL4G>!iQvQF79w6r6Cs`TG5eG|LIA4FhOcqL-{yv2t|{>R)lAlJvxTHb5HWgcKzuT}yPg+29XAJ*1tX>dG&XhbHti^36P_@G+H+X!607j$m8ESinsE z^0XVtzx{zdV>cT>Vc@`Pp!ocH87ML7DblyE?X>onp{;MhRx)+}cB9{F4x3?6$yHx7 zZ!MU?Bz_CC81n~cq}6zVv?O{>WrKics~SGp)6%96Pg76>jySs7@Z{9$~8{7)8kVJv(;@7`_Oq+v&sIpdp>9eSKP2> zm$l0UGT!0`L$hP4qe^ANSf1DGpC@irkvsbdEBC*yM!ld|TRcyBOy$^`gkp?o9L?d^ zE{?BOg7hEi)$MFfpy5R5FQZ`y{A0#UzT#L${SGGA@Y?3`bp_e)V6;jQ97Ug?4iTKy z0d53_>C#5Kp?}NKU+V=ifD)XvxC|BC^s-^G@rgKGv^NHaxoFXF!E*0KZ42K2FS|2{ ziJ~*4xDgF*?3?~@W8d`ehnZ?8!+B%}<2eD(dh}ZEbA0OM0eEmw zuLs&56f9G2qW9UyrZ9spfAwfbK80D@;9X+`P>COfqA%1EnD0yi#*JVS0oWLBsZS9+vnarw-B>75YixKekfhg< z@9?7t{9N>_oOxRnQAY9(g6WuUDS0RVJ;(_fq3)K1zB4JvhEJC0(4Js{C28NVG)$XVl}Fr}kF3N^xVlVkJG2gIEX?Jv6^toL&vyl;MG?=LSv?d~TsG-Jx7iS$VV zqOo_xL^ox3Fw~2CTunCW4=9+w5Rya-7SM{}7MU%8;UeowB}FYLJup{$SD9Lv(I_t4 zq^QUXxo!eNRMz2(`loM_34WBLabvcvKxR~~H_oijB{^<{orv7vTRkn5QzJ++U)1g9 zj@hCS_GoHGAjxaiwD!5&m9eeqqOfm`CR`k@78HJtg|wK+(6hF$n0cW~5OhAk*UnFx zdAVT8#(4gLR@O=m-mkIki(Su6Q2k{Kzv+HyeJJw1`1FWucYZHEJ)Yl-&o-~8>cbC| z7jr*6I#4F+>Q8T^=&gA~!E&WxDEZKuUt$^yVyZNH+-FG=Ev!kPMkNxFtpq=Vk=<{O ze+!b7`Knv*NQu4cp-^uQN(Vn!lupVVF>++OTqHrP+Tk0;ZyDq71(hE$9^$FALvv_B zHk#(VYmin!3G9L`E+r8s9enpxVP*}of5 z#&}JcjxHmOYZ6-e`0eF)TpVS%473220X0o#^EY;#^Vt*j{hv4w-NseZVn}}T{;6+3 zztZ!_I%A%Bg6m->ydsEAlXG1`Ljz%GAx0^f1IE8|rF9^kHTdxGxsLPmTVX4&zHqcp zmQUKSuwzAH-NHr zIQPUZ_+j?A#x!#m7540_(|f7mHaU3;OmXes`E@00D*hXRAsg%e(9WNegZ01I`FsBd zRLbGN(@TU0HWld#L!XGSp6-sO4AlFN#A%Q`iN41dfjTZp6i;D@tBSE{iw6rUrn0B{ ztVG9K9%t4+PQ3$PHAmJZ{*7ZZ=u6enhcP`m-%j-m8_J@@jU>9Ph(pszd$lWv&XvU5 zhm^0@_cea)ueaN!h;9vxgPLQH&wPYWW6SYFRj)pV?-;!QZo9v3kIv$r$EH$z-y6C= z-@oWa^b+V#EQ~r||K@$&?PgjI2sc{bOe8UcG7gE-_)Je5gyuP8mI)!D%uExR&l(gW z2ndJRyI^hvAPB5;gI`P&h0gC(?IYE+D8_ehO48=%XFY!RPO2HI#;u_sS+CY{9InNA zghRP7Qx32NsJum0yIG? zp@&72GHwa}x>Sp=ZI2s3bEyg+veMMiVs%ePTp0{P(6rWVvT(Kr`T#Y(d(_bm!4xEU z>)RVGDw93*ovl?o&7f3MOrsVQ5i9XA69_d@V%$w`lo60*IvKE>&5ZSsL zUjH)Q%q1yCSJG8sSJdHtU$d~e;oROyn9e41xl=CPxR;nLfGoGS&yHebp?a|>fn}kS3=XG3 z)VN)E;RrczS?uBDOzJxk3e*;t$qzz}VP{iSQ*5~|UpPM(sIaWK6mnTQU6m9TuF$El zY*_v`fB7HUj6+Fs{cp+uo%Edn3+hoP!>6;Ab=Y%$3nWGh7arA!jqQ!tevJ+Pq23~t zrcSyD{6f|On9<;1Qr-IZ*ePg*UPUuL_*0Hy7)*XHm69{GA*0OHU%*S@3$JTCCT8$% zX&;1f0$Me&lgE40WKP*b+#9~9%=Z=cj&6J!ewN(sE>zd@+p$aWFr)H*8~=;3Z;Y-i zc=k;uw(W@~#>D2twlgs&wrz7_+qN+$Hco8YzUTkm`*hb`Z`}{oyLb0SpFXv#tAAb9 z#U@nU;Ho}n1hkbbqrpvBQ2xrJ6nt~*UcL9HpcvmFJJpja*a)GJwV`lMnGZlm$TbkmKBMhAw39QCVH*%$FQ8yIHsFpnkJ+OuK#^N8QTZ=LmYkiZIY>~a8 zk!?zIV|K(|d~=Ox>aV@e=GF7_!DMOt)J|DuAF@T(EiuS>%5F&#&rV8nvzXNuP8tw$z`ucjEgfkFRO22ZIl1 zl%tudFkqkEy_9=-rI`SL_L{}i5@LqaFbwSOMzxrEtpOwVhBpgZl8mA#95{pVq`=az z#`+CCN2zpb_o#9I%%7i{jdlx~Dm{nM^4<(FhfdXbDHhhSF^9UbZJqx0iUhOUT4_<& zTfC4J317bLD>iEf8oHa_lf@X(lKO!|XaD;`C zMktkGB?0QWY7RZ{4CelCHAb1QlZ#R>g#?3AGPu?8vsDv|-UJ}4A-`_>aneMC_CZ5C zZsT9VqA-%VZ~w-O{jXuCY2dA-dKSbF{biCmI>gw)IalmWKcJkW@dPY+U|}XT2PuR# zA2eFDQ6qMn@z}$u7hNA71{m{@04hy_uH`JuZ#j z=3<9~F>B2lxk?-V!qPSV9=LYs+^wb|8uga_qq#X6h_9IiCsd;YFWK5hLy8r#vmb@mBsP1pK~f|k|Xr6aTNkkq*KkUAqP)`eLU-Nq-%H7Rjs#2L%DS)G7Q0L zem~b<-)f{10ws6N_@pRPyp#&=UB+SwM#a=3Umm=E6`KM1Ctpju2ZQlJGcvvu~79WB`d zT#=yGP4-gQ@rvv^kNIG6GO!kSgrB<`pn}5L69aL)jw+TJSjvnoj9v3Ksl9-NSw70E zCR=I_E90fxgeVo?V+qtKVOAEn!wR&+$knU43JFej3>5N}n3@nye`r|SmAAkQ1twda zN!y1-{Hpua^H))2(mm;VzSrO;%<(bI`7zA<7RC)U3FdwiDhi8~jW7sfz5j zq^51J_rcDFr>jvHGqQq(T4ErY=xOW;I6Q!We6y&4D*;;F!kCNnj9;Z)uRbUHWfvNc zE@hI%(M&g(2DO{++57-TC>$(nk=F6Lpyy#2SFwzMKBOdnPHL#G@<0BZ;0!BGV4ILl zietBV^51Y=`!fA;-r?PowxLFG$%-ZXIg81+i2% z5Nt1o?$ZECIu~%$eH6G&NYteM{VnY}f2hEVMOGsnotK4Y>OV(hb#) zJ9rnVB|2#zouGOj9Yv^Wbt~3&i-TKVB_V5;iWKg%++V!!6|S&S73g@5@-9EQ)CQTu zFCJCmGik{-6HvcV1{2*3fXqZg_))@fpf}K%vb-g_n2$j3%;Vh^XTAu>p%VD6FSZ-% zE?iKhNVS`ChIM20|6?i%5L1nUm`W7HRD*BbsCM#1-oYs5*O!RBq0`ew~YXZ&m4MJMWO z1htgq00YtrXy3xsitgEGh-WBUnBLhom~ET|qW3^E;~gtIwjY6q9f1alZr2DvWM5%k ze*;vvYXUh0!}q80VUC-kb*1cqAE?(Dl5{GZEuH};u6QV_{;iT(0qWk>e<|wNe_&H+ zfrKA}G&s_BVhW75M1GN(Vt@t&o|wf24F{sRwTLnkkBW$7drutGBdeY8H4UW9Uf!dX2 zs~sE-1Y}~6rBajNV+}X!TRy+KZy5dlii$-nm>P;iWJQ9p6>V0bg501|1=WIuF9zn4 zvwajf*~C%Bvl?weJ+p<^4NjBj4bEk!=x>KRB={iL-~rfdB6t}tTSeR^a?Dgi-TbgX(VJGJ9?_kC%C{PRY(J?#u`r9MqcK*A5LG99HHz+QmS70HtYD}Lw z-#1m*JmGBwvxRr&Yfc-3a><`m{C$CoG!?%1XI~{{p1`rCQpJZhmJy4&Bb39O1~@pV zulGZ3$E$VdFMPIYH;J!TZPpV?jI5sCo>W3nRj!M1=u#hn0n6Mtdtj*qh{&@ZEo&(y zNJthEh57p|NkHWib@c_7B>goyGfh`<@`6^9ZMxEc`sGN^4M%5Ds3~qjH4zvCZAPLA z6}6P1tb^rzBf=Rz4H$d+K1 zyR1dXMWxJSL{3>9GNgF~0riHkX0yLtlLQNbL2D6_l zrHB8{ea6VW%Ev@5`6$hLH8$+M%iy^aOB%Qj7w8Eytps9rS_6)AAon|p!9BkZmM(d+ zN_z3*H5v2c)p&u;+TRd~z1_o#y}3iqh8Gcu?ExG#g~=S+s`F4YN&*R}gSzw9B~|MQ zHt=@L?;>r--%L_jNMJSJ=WcsNaX5ri-L78e~tgEr6qZiub!;^*7flx zZ41o3R6t+xr*GJ+0}H%+;})2mt3+RvNfX4T4GH+BO`JdH8pQT+>5xQUCej~AgzZV_ z>@cV-6DP>7RYGt(4hF-<1S8R2vHl|D?c_-;K`b3h&Z+c(ff0LBT3wYMA-aHcw~=qJ z9-ZNER-@q+$nluc6+j_~W9O(qVKw)P5>#zJ-Eu&d!(>6*F#FH{s82@tM!UpOmj5D0 z8P!>EowRI3ttn*dkrwI~hH2gj#%O8+#Fh*lkYpPwqB7O?ER%PetoSaVwds(h5NZ{g zcRBkikpLPX8B)&8>Xm!@Prsreo>w7a^-7JCkfcH+wg}`^!Oe~^T9Tn){QRGx2E6@` zC1|L*E=RgHa|8V<{%>9BRpeL1QamB#>X!*|YAS!oabx0K8Ol?F%l+O;#$z$w&)!{#9a3^=PsA36*p-dyp@j8` zjHM@U0_ra~L-5c9$5k0F-ZC&*7;|Cwp}T3zLUi$YgZ_rUvql8FrUBc>KO!5BhiUJP zDY2H}tE*%oRp|&6nsGSKM&^aWf0YxU5Cn?+?Ux&(Tc+Dx961;6mT_gr>nuUKp-nsQ zqDAU_NzQ~2VIK-8%-BcGfWue&g(3s|P=P8_K)Vx6nC}FB{Bh=rj-WT;ti7=g1@Eq09GV`c54xB;hSxyQIR%@EQ`>F^=aM(yUWbu z|GjFb<&jeyt4+5Aw_H8PDEbfV)6@Un>*V%m8(mUwvX7`d7jlxNC$yobfnI1jwr1pvENyNO%_s z&X@pTXh5h4V&@c-(E1UM2*HoFiqxASBeU)Aej$q{}i}*S|@DQHWQbal7elUnI*bQ`g@$ zOP5st@d}MHwB-s-7*s{^trZY5!v;425P$1Wiuy%%&f`g*EVGABOiYOWhd2>+fa)(? z6v_pv8HqN9v%+hMM_(P{B+i1rk3jxQU&TQhAmllP^Q6OBTW8o6ugA(Z4X?RGEkKL3 zt=;Vp+C~OU5<>8lKzqDBkP0X7c;RkyeZyQLxY0V>AG6-s`?VZ|e zeZJQxv2N3yVStS;ZX$rzbK(m%A6xCS9}^Jmrup$(L=9F{LXFUPqTJ|Lp%o%@wN+E7 zr4Rl!$1~FA?%55}=9oMNK^M{vIEcXPM7b8Gox(eyJ<6ztL_Y|dx_xs@Q-+Z3Zl)Go zewHtan79)p3Ji$=x2riQ6hOmG@krmf*BIGbnY73h-+^hZ#-zP-**EUk&=T(L1q#CS z4M+T5yP#Hn@P95c;P-jKoW)&LZP1fp4gX0YTl;lL{;ZBR^yzT5o{vc?_>h1-48Yr= zF=1ImIzSr1>a?)#_Qj%yVJ)MBcAB*&vqVonZuu~DUi*QV<7pnSnk+bCOAABZ zMZ;n&yohA{YmuyQJl`fX-wG?V(u#k$Q2?!t=tW3pu(D;0+XBWuioq&&n5T*5xe5ZKRAt) zo}*T_A2HLO)&{mFb&6ecoWI5K!8tf7g=bzsJKTJ8UQ*sgCqZHe;HKqd*8UiuG~R!3xO)@Q&v2}h$~#>U{Hc>{f8;;Zd^Z~5u~b)M z@hRk1r`_}&!wIti(_)#$j;pJ`{#32#v{6DmP@=|WQYUd9{`0IskVs$|c5dfn^C)YY z#IJckrjeWIBwLoq<*J%VXexRk!<9-7b{V>G>`MT4d6KWUh6Fa)*`k0fye7yEd2tOO zTYpyE3hBLi*ia=|a6=P&+eL$`vb}+|KmlXkb%f|6wTx^NmqrKORbIE?$_52><{*dv z!Cp{M&*6CCThk`zfyrq{vVf!|l%#NV{+**hqG!&jhzzcLw+_{<0$uFo)=sG-m_nTs zhBXeATjpPDSbatQnr*^Q@oibM@shMy83WGlYsHZP%R|oP9_I|opy_d-<zmta^X^F#auGihq~;orj@#twT0({I7&-8yN|%L8P#s zC>%_QJpq@a7`#o=C>|>dX~Ta-X&nUaMm|YykkWAwrlJ}7u_0mrORNFij+U9%3k$EG zO2lronLG;(tcHWn^l|RZ`F^RRBCGmxx|oK0LRnSx1iZT@&A=5j>dd~80IpSC4%Z<7 zN3*tr?S|zrmIlHuArc^=N%XOeo8zsd0U%Iy8{en^;HEvV-{)xpIB+~np_NnZ{!`Pj z3hsq-vWkqiZp6|X9$aFFBE7JN7vim<@u#~=SMl~8%*rETq5ft$nuV@Qa0q!3&P~ao zF+oEihtVn-QSe*7O%3Kp40Pl``lbQ7>kv8la*LB#WMm9a9D|xOEV~J~+$?rP%riKv z%wIMNVM>x-B=JDVrnI{PrwBkSVwgwpzliV6jC&K9gP#lk3)C zlK7Ji*RFXt38Ndx-8@$IK=2E}qh!&X%&%-k$DiP;~3Y~wbmE5B+ho=`n+~53pe^Mq| zAwc2qusx-HF_l{5&@-%DzoLY`(y{l7YT54f5q&dovP;Z5XxJ9+3MBNYmeE{d9K;vc zLm>*FZ6y}iUtz-W7l@RCTF6fEH-g|9%Xt4!dENz`z3`gG_RF&D2T~KyYX_Je-a97JoC&%^+`l zqKP{%rbTGKOHTjLcNx6Nr`?yd8q+7ctAh_K(N++BmW$VN^4D#pXU=WkRi-n6whWud zBO?3B=N2}xyF*|CeF6Iyjg8kNRR~D>(_+-L4Lx*?RX5*~s!eRaYeYyRv(P;d?Gk<@I287(g!(8$qn>C+qa0{ zxcN%blGVLjP9jQ!tyQQ$=$b;{8|U}$F?zYZ9q%xD`^|4(L$)ws^f$402%HO^`5lCAmlJAlh)-;QdOiftV>0 z;>I)%9F2*0Q7xVR%?GZ0L9taCadL1j(`RSzd_0rEykCE*!DZ6Chvq0r>YV`+ z^cz!%sUS3(%Nz(oqmgApu}Y`FTEtI>x#^z&;30{D37a7_p@+L2t%IegNGtNbs@nQ5 zSa*q9=RL>)C42K|uhnE=s|Dc~jU2}~5MK}Gm@?}cO(%(@pNO3b*?(+|hB7xJ{*cpM zntK{gA6S@MeoI_vj(zB<$kKlEG?*hzy##m~D6^}-xc=a`4NUP1ECN{F)}!Y9oziV& zDdA^1uo9mG#`A#~DlP+}@rowuypR^2`wla`TVHK(HXnbVE2HBuT&2?9q~d`MGx?X^gQnOHhsw4X2(FhZc%Z4hwAJHIf~c-fO=-RzmmGY`Kizy5pTEwg32f>Rr81 zTVKJ{=Z+57ZYJ*r5S9`gW{)|HERy^#zvHZbx`*r$4c2X)J2I37Z!WZUGg%2Z1sj0ebn>A$vB&*^~?mNaygj5S=1x zX-2RPI+5T&_SRl9CG|DN-d$yTmA4p!G9{|hVYOwHj_n;GD9yVeT#Jk2Xd3^@9%Dgl zELDFo2_Eq3MbpwtA?v!NW<**rD@rf0VcDn$1KYBhs&^M%*L0cgU|%b!IGm9e?1{fQ z0TbxQS^)YpKDEEi1*1%jkN4?jOHR0>o^|3Pf?&ZmB}by1QK!Olj>C#>92A^zVRvHg zhL2r)QgbSpjt3IdQVJLLHiQa^>OM@8Zup^ttP^`;Lv?n-9ps+}p1jf>FY|%UAx&g@ z`9zT;yLCFVZQPIAY}mkj3;O;B;SFpdx&#x<6T zvSymXt6~Z)W(JqW8pJ*^M_=(}^T`O*JwH8&zlv&%5-9A8#eh zr4+Cn)(NK*FL}1cMy!Y!2^8q2u6;@B==6N{&RUMrIJ0u_Z#z}<6wpp-B>D6t-`}Az z704InJ#WkR{UF!hy%vT^qHpd!GkldNI1L2~RF(_8&*uBUFA|2|es8&Pa!jtZTEC^B zcetW%tdrPvuclnJ5sbQSv+o}l`MRMQyh(yFa;$ld{BtVm;X19 z08?{bxpeL3L32~?`_)!o`8ACHSFhW4L^W|L-EqTAmdJteXNfmgG+*ZXHnU?sv6-xg zU^E{=`?@{~>;tp$SlHmd5Z5f0gTdeXdCg5*r^?^%5193ru^E~^Yo8a@T_*H(Zy^BF zJD~KA&Y1Cqg;NnctE$_gF`TAC#?yaiAwtG;W@jN=#*^Z^^=k2q0lKVLTT5(F%*Mr` zvW*!CTwZ+z4UMU;73^-BuRF_p&a)~Fe@Exy=FPMe@l)C{q+-%YeJ;gbX^N+_CF6?k z+c7M=j%T-RGUldHsrOQR=iGnVmcz$OZf9RN+c>kud1k_I-bz5y!D)h z8W$19Qc#;Zt)vVl><_x*58GvOrLa-UxBtPQ4oDlXAr)D3g+j}KbIs+3>(bRnXM@=? zmv`*$rijm5ZGo~3X!?Wjy$R-LX;-e)rep>JaDoQOaTqGf*#N!I-DfhmiwHxz6_w`V;n5#0fbL z>?yd#O$6OK5Yv>F_YIWn%dSt}$K9=J^_XXQ!ah z$&;<`w`aX*CvPR~d)JY_3UK#J5XiKeSV5swvsQk!iF7I1=b7ciM!xO6ecy=aefRDc zF}oULUvh3DhFo zEstryaA~`?;PRFh7%2qIapJbRlY4FJXqbh(!Kes?`VP(Nz4)8nt%Cxi&sneheMxSHV4}*Lbr&nQW$AaIa(7 zlxBMMxn17&cDdgvH^SXCMo|5A@6FV`IC~L5rj9;>d97I;ru(8RH>Z|970$VbW|9Fm zrxbq&Ac6h1PBijzgfRD~VD~Vru_8QV&3icYaYX9GR5T8%lu}P0Put4_4B!~@=H;(j z5PeZGwZSzyQ9M|wUS z1XAvQjB31t>F=j1u^b%J|ANZpvyz2Zq4r~W7~Z3hkoEcd^4(zqKB4rF(WRtk1@ocr z{Y$}lI#!lKqZl_tef@kjPNR0~#{A^xgGfyGiMZ=2CYy(v$Y9WtL5i$E_sM8T5?3Ce z00*70sfRCAbze@fB1;u6L&#E@$Kt~jN()BSqgt2>Q#(b)%IIxzp?KMVX`aPw?L?q) z`ox0o)foUda^9esc6Lnl4jo*WMa(Rh;UpEL^9kK$n~q+w96{TtrH6Z$L=l`DjJv;n zN+AAxfLocdhMZ~p`H3&n@!ihw@D^l;)ARnYOT?!r?^V{bZd9kCQ#V#tJqHh_>KxJqk2|C?Z~_kHr(vS_FG{RPO_)7gSvi`RMlx#IYc zV$IPDwV}Yy#C!cu9^3>haIv1st6OUiD0u8e?&B4HZnv7cI5O3hV0XT*c}}wh-F|~z z!x@I)+^yVW4CYOIp;2@37iA`*2V~~6_@e@4aR?(OvkD?Fto zZ8{3Hk9HR|ZVKGn%EfjUv)MRKOl&12cK=cG*8k_-8$w))5Wc&*n{$`=dV(ENO8Kyr z&+{c1zi~4n?y66w)8pg{({WY*Gt}MM)o#>zMWtseYr`}y23;N0=$-SY#nCAVr%$sA z1JTpC_{uMdEB7#%5Kb=nGr+^^2oM7;!!i!uK(9 z3P0kbke*Xvw9(~L!AG*^PpxqhW0FA5B8zz{#e6B}d#z7(UO?*sol^YSP2Ew*&TpS?f;P5 zg@4N!WO=`jkB`RLNx!asO1}DC&mS0Y+mgx(M!#>igKYL#hSo}vFct-O-!A5%`S?V% z+gr>-z3!U&&lqzg96rs2R?yfeo4skZD0svx{W5gnC&CdW1RhyvmqC7l9;{*XR?^$P_u zxq?DHh5MqTeIr|d>$qNPDFpK+qTojgE62eX&&J6mN~BNBR2gokU2pEE%QvBra9r6@ z0sOt@Iql4;jCf4a(95GOg|9nEd{^#N!P8fuiz4dviv(ZUQvdxy&_qS&(eayBT(&8ZK+_-GqNJyme0p19DMJL z5)roO)5FtzZWDr3uFA|*uSKoWTPZaW`n%iHgP%fLEwyQvO!lpzXz90K^wqKvqE46E zPN03xn_8MLF{7`Zw9!8^C!ra6S4f&_T+d5nHohT!^0OwaNdBTROP z5z@&5hg2fhs#9~z8 zkJI{%q%|$jW?YWTxH07Nf6KNv6~?}Rg`CcMzET=F*HgP3hbe5yAD^X>+>2`=yr=2s zFLT@gyEFhvp0U7(GQ^C1cNBhFyXxjFj5u0DSgylWnBr#e(c-ExMn{(dYm*c%Q*1caUGX#uf z5~JEiMv48zUdP4hhDt&IJ}O=yejPzaH_J>VI3ix)DUww2{x|V=z4s}I@cMVJ$F1C& z8_e>$7R|=0{U&z_NRSA)Mv=rbY-m^5&^T0S2RMusZ3^cMYhv{Kh4DAxBiSy=74K&! zgc2-N6e)m+m_AKEK}Sr?2o4x=k`2(24NAOVQaGVZMRB4DKJwlcZ20zXkkK2%e2zBt zeB-+3Uybx%OTMg=L@U2(r=HD56e)+IOQahDzT6GPoWK=2G+4XaxR55zw>+omXXU1CJx5FzOSl<#^eiJ-uT%^&yXr4de zu6k^&VH5RLw+(yK>OHMHBQ2-glh47w3kcb-$0;4Kw&!`j9G>nSoX3 zHE!~HP27-|)h5?(>f}4~PkUfIsv_4yPYEKR3?N#;69j*?-&*CjembzE2)d6#hlW{_ zAg<+Pi}E1+H0#bp_wyB`{K5XQ={L6#r!q(TaERutTn63=DGdY3DpG(Ko?tN|CXlp6<`&JOdBeMuxo<(oE*rYn#=4A_<=)2 zhLd0;86i0<+Mo$~2(5KWz98JR~fvAHmv*i$tQZ|PGO9Cnq*=nDdL=!65ZwiwF zD&s=q!34{4yG{}gV_iHo+TAh5FRmK{5z<4SQS0D55lM#y4lyXk=bnrFG}IKBFrp*q zf=G@Mw5@nd+?ehKXgFbIdC>$Qsgxu<*?2(&VIsV6TFctDkTM{B;pT=MUrx@{9qA@} zbls%eY>fFmo^Dc+Y`JEMO=U1YPFDv;KV6%%r2P|RcgK}AyuP*UdpP~Ia=I*ve+(k$ z>~BaI75$S9WfB7Hie^bd?Aby$L-MGlPN$7TQE;$Ub63M>aa)?CHkT zB#1QGoEO{L10VNjvDkDXx`r%5NtyjEsA`z?Jb#^r;ge&ADwIh|osA@$D9j;ptRMQa zR7n1Ld_lqImnOvx+jJ4I$IW}qXbdml1FvRM4gl&sq6v6?-PSSK*?)jL@>GDuKO#g~ zuGRR4Wld8_3P+|rN#H6xgXic7_%tQ7VyP7|}v&e`QeOYU8$_Oq2p)mt3+58o`73 zDuB$7ac1Uh_*$n%Kr~x-R{KnsGR)U;@nUs{XY=`RiCHpSXOdLvkAd9&I(k_D4m2;K z(a+1xPAtOY&9q5C?Q+ zlPmE+NM*^f1V@t)&b08(fV5?`{Ldv?GgKUbnMc6E;6#ky8VXTgLW3_O8^9dh!) zF~dLhreAB;^x&(4xu3E$QP7rW&?@FLv{(LfScOo)SdJwcoyYNIYOc#VHNUi+)AzyN z_oWn+)*51qjU(q%BAHrBPBrI{V$+~=HNis>(S1=}i*30ZQ>9z~vY8_n9Re_Hwnw;p zl_JU)ltq5B?oF{eS|P%?`dNZEqGousAzy0|i31+fV+b|=lJyxO#o1MdT48*v@U<0| z3=v#NZztEoYJRE8@kPqAy>zH#^IV$&6zA6bD;nkp7tJA z_c`(LP<(rfk)YV+Tz|it<=nRM`IlD=qCmxwETxKzC@jxBv|hyT>4PUoTvnk_9k{{v z=(HVa#o-STg-(R*8V&buBeTGv94^o5t`-N>GrIvsYb$)tx$j*VcucuyD(le=4jh+pHNv($ z=>wRN#U3w33`m%66z!3i6x3;J7!=*QZi}(l+3_f)r~Q-!yQEBi{B_&9*QiJ^WD!Dr zbaW(_7xy_|={t-oUh4^Prk2w$aQ;xA=I6%pX-Gi1-CRMYJ@BSq8Zxsfg(K&w-^%2F z;`87le8Q*T4_ZSf0-^9T@SdoD8}2s2S0TsV!;J~K=bUnzIiXC>e9*yOzD?VmwFh18 z*li-8rU^sN+q;5Q6OtmBLr^ZP3tkFLKJ`dQa0YL5lPIT%OXxyd1Dwxy)%;V8KIvF3 zhepzB{aU6Navc9e`K?2CJ86c0SMbp-Yp&;J6ziwTG*7D}0xi}Ssr^_Lt_~P9!^zlx zgIbTy=FHY3rVmx9EZ9Y;7v{Dv$Y|z7U;!lcznqAtmoZwt6x|&xx~kU@TD)}`aECLK z^K|b9YTciv)v{lv89eJ_^O(Je)wczAv7uL@n-6GUt7HaJ_&}S_?`Eg{I;Q)!K*hln z^Y4q{th(}JllT#yhU6WWo%Bs1DyUeeP=|wrAGdIt|C@p{x_JeY1aywsgwpzBp|mL@(|~+<{SJM#R^Mx$>@GLgw(;lFW@V}dMkexUB{|f*-jwI~2O(N2 zy-8s0i|DTU;BCYiaT}vLR!ctEN?8`u&KDI?XizQuSITR4DY++CjX`R08$(?#Ov87s z&e2$>zt%MXcT}_fnR9N(fy5sMmHPLeCaX~%C`<&at;v`8kVu6j{o71~F*@so9RhKv z7j?Z}TjXMNdZ}Pmp_H!^?3RGB@lZ+XywOOS$`LyJx}3^nN9k${A{lo_{FKZEDtXSZ z`hCRg-?^-m47^XGB1b|YiC3d52G$g3tECh74Th_xvMiIOC?1L=PHzf?!NZJkuunQZ zWLMc4ogyv=PC;IHyW88k*vZlZmQwYqY!!mPbfW$MJAkKqmO2hiu9A=YvEPW8Yer}3 zzUiHs`iFo^5Xf}WJ+;U|aH<7tii z%k8&iZKM&BB{yIemq@3cUgr{TEzl`BCg`x(IAvTau=@)(*cHB%4*@ZF_h|MOc@z~7 z2C><*PPOkrH$`)m7<=Qg^Qg07?S7+_AH@jFXT768*Bkq7+2&t|(Lrl^ln80b)218j zs{aak<-vRN{U*qDFI648u(fis9NP!Aw97^Ek!_A60bCDvp%ee-tlo~_gDmj6?g`+DW;&bWUyTu18papq&KsXCmN{s4yxzH1H{YWix3TZNB$>5&NleN@1?rJqC$1`in- z7xo+lrd6y7{8OvpsrA5)R+C=lzimJ+>sg{@r!t)Tk1x^(w&M_uZoqyzPrZkFlz&#Bl zaj(VKQuehUaum+?Zt3EOyv1+&ch{0RB<8d`42@l69)GL;iIk{Ru4^B?iKeF^K6Enb?C5Q%|*e=zMM-VuIiGvO;sbs!5}S?9h|_8 zFhj(vPvHNs=4hpd8D*>>(7eExC+A2U9}xdF73o@Yfv08Q}6Zlwctrwxen(N z7t)xs!YmZ&XD{-hx?!!jp!Y&2B^z_imdiq?p1GSEREtD6w|*u}7uvt$A+MHyc#hUd z{+hF*K_mBL=ZkvxnVb`@NcfG&8Q6d=2MXZV}X=iAKZ79-}H#UdP0hq{~WK9_Z~K@KI^H|X+X9rg!PL-gt5aKiX&ncCrj9rAUHgQd4J@odFKPr^XTpMc3{Ou2Rj zE6fAgFx2mrx)Ol-Z@~(s1-w7JwKF{|inoTz+6$t+cqy7A_y8N`CH96Jc?C2^sMyywRte1cjl_ zo5KDFdeJOi-g}HeY|lD!vl(2R@2%@~d4)JZcBz*)sU2Egt#+DSdWJCSTk=DZpVYRR zY&C*op~LK0D=ve95$F9J^xD&@^n!*DE?QN`^#s`V2ielCuCuj*n7;o)q1N~0gzp}a zH|vgdv>JY+so&kYYh9w|76YermOKC6&|R6fFM+xg3@?ijnyn{#Zj-Q$j5)9|h{@YiB*KfmVE zL0a+1nJ(kT&NTJMn;H+TV28E2uZY7HWMhC!oS-}mt!9Sz3%0U z)8lhPS6ih;d`(}2v~zz@tcJtM^}K>iXYT~zrA|7aDc-&BxF3YEr3>f(1QPylJzd#2 zS-AciNVxWgq8-WS3Iq~@Rbsj1Q;@ayqa z%K7W%{x0c+6n4$$a}UxdE?*R@6Mo~!uC!MMPF)&|rub9h>7}=HblQje&4?RnK&y$& z_2I6!vv>UZm?ALs7ma03QP*2=fmq0?7g8E45{D(#Uu{ zV}2D}c3qwxHKFIZcq@hP*Vq$~hqjxZ9WASY=!2kA9}U!`eDszmqVt}I+-{Z?{?TbF z`Qm?R_1|XQZdj}eofYOrjEjE9kA>w>#hmsGH4qbOl0^LCisAWWhCC|1w1lp{QbZ_D zQLZVaL83}s8XzrTNvIHqg}q6WH-=rA=hK|eN1L-aP*V^kv7xsO=IG}+F2`<;=@q*l zK`BDMcs?12ySP8#_C?c%_$bD*C`NALuoka#Xr2Hz|G=y;v_N5iuWVjQ#)ulocj7u) z-txRQ z>FwVo#02Bsw!jPoZ|zVMi;_j@PR?KFJ?{U*mSH`%bU;9}k6y zkHVY$G#*d)Qk(qVRtW8qwc})I^-20jz~jH5q%1^Vt_Va;#h{Zup>0j* z#UHE+JcKGVFl>u8FkEUhyp$Iz2TS#9kqyf9vwgW4Hgt9L_nS7VkR4GPm;Pm$e292V zW&DsaSJu=D*J?zwG{;I0qpTdWy!TYYmvEb_bXds+V7kkD-PM*F81R(-{dDFKEOqhA zp&OrnxrLLmL{4}Q% z`S*#_x&doj4EE-6m6PlHAvQizP~b}O{2(Yn#J?Qdyh!R6rK;$jsCh!AJHo$%2E<&x zONIxXg+$AcCaC(q9N!m#sELh7{fBdr4L-AZ5jn#TA?j~|84u#%(BQ-twHT97;^~D& zd_3ea;Zew|ct*rQU-zN0Klkn!;C?Vx&bW>BvBAyL7B#sH_hMxzaOBpuQI8!gZN=i!ELpq)~zMo?L3^pclDfGKF6WDLVnboTU) zMon3`t1w--8{;u)EtfG}KVO^NESuU;EUywISLB9nqh<63q|8)#kk5`K<&{hrgGkllcf~BiiI5xm zBWWEpZ0llg#$ScB<>5q2XZ1m7ZM!1P_Pml%g;NM2*yiU}sd}yr`ZB}#5d+(f4cLv= zyLi9bDS;66nS>B#H4q1b6Xp-BjyInBr#BD9Rk|=QUAnX#c=P8I;#XXjQplnka?#>q zM?49-be4Qa!Q(o`3nC9Z3~sPoNMiz;_9(Xx7c{7bfrw^R6UHQw>`VT}KSu-va{Rt$ zHy-7dd70!`#P7UgxZ^fmceI3g4K5t+#Firwr&G^y)xfwZ6^RdR1Am6w%uyG-m`Bv&jTq1rA$Ahtj6Sp3kAs3nSLkE~~qku)O#<&ud<2bU@ zSD1{Z@hdk_OUR40-0qi|prWJGTae{DE8EW!N>v!M>{9M`npV^aWoNtC5a_xs?j1JT z7GJ6eM-87(M!BqTn|@}ts)%?Gvyg>~&@a%twd~$}`j9yasO_dH0>aJFN&M?pNwZG&IB39QHgfw1*4;>`N{oJ$a$q$hPi zKvCIWYRY)bKv%+Z2xNC{dQz*hv9*bbLlfhP5@}A8W_?#RVV{rn_UteptE1w(V}8!7s6(+*@cj@GDc1r=YXtNjykYPb+3xRHm)8! zf4QlNr7O&`7)|0Z0zqyqJDR|nCU_%{l}5*EK8WZR!v@GqoejBbo3g3u6VRogTu zqmM}uGJbmAI25GdvyRw}nR3!rMQF=sFl(eSFgqobe+o1UE zX;v$$#^--t4K7;BRS?UR|)|*jLah^bfQC4f`V+5wx9$f~eml5ef^DTNjz-*tLd|7+Z7LY-8gM(0< z>R^4rj<3=F8m&4L01exlVvEvipWNN9r?B-gqTE=Vy_-gvzf5;}QQ@Z>94fo@YV|3eAquI#b~D?gONUxK{wBv?2FO<*!2XPMMmmA64~gY~?WMO03;5felW%D|rXTs^PtaNPQ7c z{LpQu@yUK6Pa6i)5U+AK&@C8K8?a@Mdvbv^n%)8$+x3lw*wP&Q_V-UOSwBtcIT^kY zHQoJuA`D)MDfO#4I!05P`Rx5(!6|i{zXDvbBU#7rE#aIbgD-(YSRM)9h2Wb^r$nJXKM!q*M#@b$7KM{*F1$hbJEh)>uCW*5mCz&pG={U(jO4 z@U>HxoLQdCs>vcvdww#(r zhsjeX*CeIqewSa?NxxKPOPArtsNLByDqMZ_l6ORRHi>7f@s|M}++CLu4(swnXDP^gm1NN6&~i~jx(U4n+Oa{!&#nmJE5eg zOjug!wlQg1jKX6NHoRzyfkrQV$Ov^m`Do_RA#=U(vRLHbxl+7BUAC`NFV~#q_&TiL ztB8`)V}p;v!;!F$1SII8&t)FkJ3e(+6Ks57H zo0^bPAP=uo`?;*r@bLGZ21dLVXCavZZKYg$=06?=;lq-_@V%L^j-jgUE#$EC+3^P9c9c8>!qZs8Gub4q%Z zg&0@JUc`;g17NgEJgp#Sy1>|_z}J4tc-%-fqI0$|v{7_AKP=}6G^N!ecu}i7@HCz# z!A~9FD+zF{xfYo3<>Xev@d-rIAFnZS6+x$HaGjD;3~au^j!WL;fl$R_eruOxZpGYU zXL)TIHGEa3aEjB^Lokj!d~%p?9ROck{?IyKU92tbmDLztvh&MdTo|27me(~8qZeIb z3>u(3?7Z&H^?BEPHvMq#awjZSDu4Qb13HWlDecHb4OkJfyy)@b4&O_D@-wjr)qJu3!qI z5~YT9&1!JM784qxQ3~`=koYz{ZU>~Ce2MtTjx5`_oP}2P7J2Z!GSGOg9BI3EGlGQU zi)WqqXyQr@z%+JX>zGle;anD=M>GoB)a~9D&X&yClv26hxb&O0@Atc4SXPTujIdwWIo#?{1_)n@W`h0ARLd)vdzK73nOgEY1wD{0HIfhlx+Kk-r$^1gw{5Y zf-|Mevv>sl;q+LMaAy~myOnJ+@~J$dI^J@jVS|!}`)m;s(~S}q4rZrC9)}ql2CtZk z_(DE!16PfxYsj~ihZ&*{o3TfcOr}Y|lFn3c+xE9>btD7n8OfPm@bRSiK7+Mddj}4A zr+x$bkkOe5G99YA=-m@0TZa~-ZQR+GznaAfxvNMN9sKm9XzW$GdAb+5<8&q#o4Ab) z0)Bb-T%3|??8K~$zlSZyIAtP^8^YP*T_>l+Xrnfl2H!UVj7((L|KYgeVEBKHZsTPA z-%JNxThjJu-|Ii}vydW4Wbp}pdqAE%JO4$uL9UT{a!i4Z{l|1z(yi!VxjLuw+~|a7 z17+_djYl1S3olrjSWEkAJr$+*RX8xT6AP~UxVwDFMFFBBCbmVtEoChGAv*kCc`5T7 zqwoE^f4KLh{pR~TF+#%x>^iJ|CZ6v7A?LD#2EApVwup-Sc(&!IJsH~d;r)E2==^x| zrC@?F`{mLv5xJlL?W{15qjl6akwldM?<)%a_er zkGB}!?vzm8+iGbGSg}1&O1Ym~OX-&p2AY9HRgL*nc{$HxJ3FIT@$2t8G;7E zEIzL2Zv^DG`}o8qF^Y1*n1ryMR{4f0G5Qh|D*j(EzrzAYAT<8k6&ahTuqY;Xlkc~i zjGREve(Y&59|k&K-Dol6kZ@^@bJ8C16Z&2tfwpc#RlrE#9x5KmLr_Vs1_6!N18stZ0gwiyy_-fl~v;=9DGj{NKC zAJwFv$*anjQ=1pByAl;HxuU&nJX@Qa!UhTuYJopuni-&u&i=Rxy3G9b_(*a+k5P}P zQxA_na$Ykk_!lM|N+3egR0K)wbNr^~7n_IX80I+r4h=?DbUtErY7ue-+Xn1a@^WKV}Csc!=KpIeYG_%L`WXU^`0}--HQgnXu=CMW&$CWL{G=e zN&@5Q#poN7w;<=XmN*YJ2b=dOmn8Q<04rQc$Bl*~HKjx{{H;Ob2(^s8luo$SEa`bZ=69a*-Y*!KXzeEG{(0hKp~?U_dnI5la9n~0kj9!hs?vViK&g4E zfI0w`_SC79%vN_fk%r-{LC{A$vgT8&=kF}q`FqYz6Z8CEbAb6L=} z(!q!uSQCa${c|5vs1?P)2}hYLvsrsONQ2dcLY$Gx-Kp1&z(x9BH-KBp^5sV0f>|BZ z`eY5E^IZtvjSNIqW*PW4n}|@lk66`vn^&aD(@w`daasH5ir0gRTM}}?QHnIuO`MAu zrUdR3q{AE{xYh_HgF2J5TnEmC)CN#I3b36xgBD-DQe(z>W;2BfAbk(Y$&@P`u~D8Z3T z>rEU68ZY}m(p>PsqHDh5S>bG-f@nYWYggnzj8`Sh%<$TAh7zT@y4S z`wktQy<%yGTSyGYB6Nt!o@Wmmg*)@p;>>Y`IGW*plC#9<=ntX&wCV&Za~yB9KgS?g zVtP1?9;hf&WEGtd@T7*D+OFIxpTM(F%Gat8CXYf6sUrcfvQi*|%ydl*QqxD!M3p{i zD|IHzq$oIaml~!_!WyP&&g~~ zt!~l?EOVIFfswXoxK_@8v0nJFfTpD0nqHw8KzdX7mVR2E7s;m#hzZGWO`8<~T(^)C zoxYhI@{7A^5ul|kbtH*Vgrq`js3n(d1tF`@2c^O&-FOXvnej5Z)UOe z_QDabj>+?#vWl2^Y6>4=vJ*N)NtKG8-;l=&zJh@tapz|HZ9x-{)_-=`;X;&QzI1>l#3WjfoeDZA!qYj88zLs(W|-3=*lDRp+-Z&!doZ< zcA*tZ5VW9q)nw?G=w_<#Ut|Lx*QQCRZcGkiijuoR5yhRKCU+pUXG$QA`t4z2FftYZ zMXnO{8`A`Z9gH(UX+D8j%@Bf>VLq`GJ2G-&ZMMOsYe5vEo655p=noeP(86H6|qB@NU#tvStwHE>0d=R+9L>4Bca%)@QrG!QK^YH8_Qvg0`2Ikw}{Zm7ZsMAZ#sF!u5X?TAzAX9odzYN8-$2icrSt`8+^WYEP z>Hs!zwGCrKdqt#(UZHW?7UZf;>W_mgA;p3g3E{B%(`C-&s{p&qe37c!My}MeNS5_2 z>i=vC8^0t&FJ)UnhCv#=j3SM!Qwe2Ch^_+4q#Wcxi$*|RZv|}`tWk;TzlPtw1mo`1 zpkfRSmG&et++1qGOVRgso@-o-AUQ>;6E~^`fgh97nlvL*ZsEN1CNOYLtf1Z8$&Pyi zz|xwIot17>kbd$ZhAKlmuVoPGHQmr1Pawy#Sao0N%H9EoI$h!&QjmyJCC`GwF30k& z62($*dSu7b=ci-GJfFqm5?z2&FNzS%O-){HVN86eifuyZURlfpYW&|K7>_)B-gWZxz&Q}w zGsPJpUUG+(WSG$bmMBP&e4Yq{-H`coa!9??cfdO74vu|GCzQYyjBUT_E4-9N=o^lo{G&lvnrklBR>2OY9 zV&v&*6qjKE7VjxO1^7x!!v)Jv44^(wb6g3JJ6h%98e;rm`LHkht_7ysF$REHHL2VG z2Be_`uvNtZOj)dR+(+}hLXU07W-U84;csBmw935dYz)TUsJS-gOX)k1$SAod#$PT` zc<1h_KQ7}OwS&GcK>3sT>wG&!#&)vJQs#`XM~6iY+whpHMPN%xKKoDmPu2!V;Wy|O z6%dK57`f-Ax(qC4JVg-vaf%^14LShskt_&eFj`x?l^0hS4Ux$=YIlt4vTc2glLQrWTl11Z z4QT9jLJ>#PbpM3729oriu$Om3N{Up=b?T*vEO5<7-R)`VWvJ{qYZ2Q5btd64 z349=%1d~wxd)>D6lki_|5_y;q!HYLn$!87*%hFStWe%M<(bXyB3D07IRoy#Wb$ zc6(<)uL5B@CFMt7Kxf-@GwiYm3-Z(KI2xbwFj2|3Ofo&qB$Pf@rly@26@@1zwE-r& z@yi2R1OA=Yu!9MRQjcUKcX3ZQSaWql!HJhvSRZK5AtImbC-qTPYA6}1o--%AGeV{o z)?xdDa=?kSAkHYDBMQQNW9TOpQSX>zmV=iEMJb`}9{r-tZKMrPPC?N#Jx=a?s_&T4 za|i2SeJA$4D=P^{wM0a@^Kbm~XvJQ1+u-MA>R5N41<3IggI=0>Cofa zVN*6pQk3xBs)1)3s9&~SAdhvFqHhH|L;rB`wC8tTHv%IjW4$fvxzvG< z(7^1KlewMlCyMPRa82YzO4qn57Vopi`+?%e^y&O-Dks#x8C->lc# z@&NMqS?OHIPp?%^@*Lv_Cimn8nxTZn$y_OgS|3Dp-dm?el67n5_V{3v?1XKT5z!Kp zi^9`s`l5^sP|4too_Atr+qWy}T#7|k-M1(g-ChU&XA%uBk;quH+t4U<-(GmkHvuS2 z4c%+FFdqB6-KEKlH5+&aMxy=685f*E&o~-^k?bU4>W2sQ`>Q5zH=W$oo#+v^kqLJA zrG8R;&wYtEh$t}YF|-;2N&XPi&tJJs@2Ji%xc>wn4eN_A6&Z3@@mCN};zrT1!C=hu z!35ng+;@B)1`em&y2~B>*_Ac-2P~5BKUIKTTA;WZ)z$rSl2=pEt<0;UM2l}K z6K_ECHP({w=2B?j#ntsxVi-OR$aqgDN15~bMDeuGrXa>xv6~?)27$aXyb7~pH+S=V zKAJwG15MK&OmfT?MzFYFA#y*T*vWYSZp=3v@uT`#_I|NW@|f>E>mzQ>>n$bh>D7ib z%hDk5;otsslU6vwi+9)&3>UEE>6&P%@eipF%qis6Oh;(c^KBrqHoK@0(9kHn{^#K zE01iH%lBdHpt=ePKZ?a<4dl$-balS4ZCE(e&}Y*9$Lq7eiKT^ zzv;m$viu>7%R@7H@%m}2uYO3pUM-%9=S=e7IP+)EYU)0FA|5LcRiQ*7G;U1zC8-m9%{QYXf8TZ{xxfAAbsKGz(Xc`oWJXlvs5 z9PF-DHKR~JT|JsHDOycp}u^$c)KWervYNxDVmfw zdE+$bdEIErT0s^DfOjzBlD0)!-Z!jzbT4bXHmW^!I=v;G&oZ1f1N`^dj7}dQdU6Gx zhTvlyye2V1t91D~KYct{gR`BTD|fm1zU!Y7@F-)dda$9IOI)Lac3?IP)D%+cv>UHI zLMe-@?;7kUr)+kKn7GQ+bUdv6TrvvwzbM$F80!jn6=w=r@+fAj)O5Dp zrhJ*_gm$H1U|UxVf?k*q9l26#JnytBwmZD}}`rJ3G*e%D_rNr!1NE$-ezN7-Ll#2Jy@;Pu?}SlX@E@&Zs1J} z#9lsczIhtvG?PegY+a0LR`P==arIl)o255xvjbnr+>wMbGCj4HBAj&lhb-|a(uh3v z=k}F}EI0PxWhTE&*iF5CuO^FtV|1K-|7?WSS%E=EJ7fLl_7#Q959Gz^rWM>ynH|X{(B(cx<|d|xaSKyB z+uryL+#*{(eO0c{qr7_LAIGc+Y2o@$6g;IAvo5BXPv3OsUxx|9ExfDC!c{<}JF?`F>b47S!AI zHv$0L=&9-1bKU0I&%{5^nc19~%JH$OgGCRGhg&}sesxYGaSXm)^q;9p(301 zv^!7Z5p&HvRPq1Au?$+cHni}*lufqsB!D3qpWh@Xs$q5AUtSSy=yacW>-&Lq zhd;dXqP+Y5dTO2ke$NlNJmb7LHK}M%G~DtMYfRpmhO=DdCA*v|y||7j&#*q9irtfm zv@#_(eM&vv@i<6Ckf;gRe1tLNBar+z=5!=V_k5`LNj=mLsGWf+9*i?J`F=_#;u|mv zvwVeTg8E{8N}_Nh%S?Npx{{fA)^q(Zys|`CY)n{8O#s7TxW7wAH0!os{Tf!A*y_UPUZV1p{^fb054bMb2uO#!mJ zY}=LS{k?7Iid@cUc3^YA6Xdg?ML+B8foHmBt(*1U!*%xd(#-UFguTs+Zu=7m{HED| z_v?w%G@H2h=@RtVNzP#>Fw55W8yB>#sj!*$WM?S6u*`sKl6lOzZG6`$3;brPL07;V zvbzEapgZ%R`e;S#Yk3zi+nyC%4En4*x8bPfD*jF_A!j4JmG%z?1MO-fS1rNXcPiPh zuk@hyBxh$>nPb$ZT&jL|Po*y!i|dCeRtug)vMtYY1=-#j{TP;)d2Tq9bYmgNzAd7S zG?gMDzFcqvGM%cVLSTw*R0?eTT>ttSV1YgMoZFj2SK+#O`fz&vRn?CgvK`ebBlqv6 z@tXIzmbNa*`kHH@H?>u=_W@Axq^)}TpgG$@dpTw~3sJm{kaDD{L?dGMaXI;C)RKPh zzY&6)<^k8xvLsmRHZS~QvC69JUCs^0tbTUAoa$CEP}FW!-F!6iCD`NL(o4JAfu3fDMARt2C##QNH(&0MVU{YD|Q!fgi*k30)_@h^p*5Y+=qKDjc zB`JlzSL@4po~w!|2yuGgC)IqpB8e%I6-fn8NXzGQ^SJiA{^S0xHd4F!_Eq(w!`Be+ zqdx=4M}`fdQHaH7|NCn-H>m7?wQ)hk^WsiJcxy4j=_Y54tVaO0UTW~P*> zRGhJvON*zb%5_r!T4VsJA$f_}}g2PVOZ}z>hC` z#u)2Yd5L28a&m>tMU(;Le8z(R37%2K+0p{Af+OTsU;+~;Jd^V%umUG!=mGhj-NKOs zllG*_*|uX5VkhP%KB@N&WVdx-8sTLp7Uw^_0|Sq(CHXkByjUR->#nd&Aj!Hi*QSa5 zJY^HoYBkH!bgRB=7aVLSiUwxF&?#aDEq!C zpQ8)Agx;WW-^nPi7%jEy^mqhxlbe1#=E8XEt;7L8tXnN(2!bs}68x&EH3mHs28XS( ze56-O5hLE3Jf7blyIFZHA`u%&3kO8MOIp~ZU-{VzW_!Q9+~3abMlpKLIzJwsBk3qb z=o$4~SWRBfQYUkjqBO`(k`SKwQ**zb?>-ib(&ufWbJ)AZeB zRlg;{@svG03h-5KAVh~>^FA`0>&U*|?u*Cvevnz8r+V()BE2Sl$rJ>sD|t?825QQ% z8vmqNxX4Jc6RRe*+S|x$2k(xN2Q3os##I}nSN0q63m)adHz)#!P!-2ek_Tsz>Uh7P z5v|EQZ|uX@VjJVA=SRRK06Kw=$!35tSVG^uJO$+klW@wg`K2@Df3=gTkx$9~$7uYu z=mrZV32}&t4petLO@As~B-07S#X44ZAV=3lEE<3$9mAVKm2s?>#k`8Rjqjqil!KS@ z`o(ILNJq*7p%*|TAPp6lU0791Km=F;%~kLf8DEpdK2M@3ALaxqF#YrmrUWaPiQ6~( zhZWj4$+06%v6Z7(DibG%8B8Te8v>8Sq}14#9rxzWQthJW>!qxxZOsvXEMeu=_ShcG z!3*`{OT?&+48Br65zj|gBX4rvD4&_m6*-Jd1vu#KX|}S!4w2@Q2?Ih|$Ood5XoMPY zgo5bRWx%+w+Kz+hQ+?}_Dh$vC4nf7hRwuZKNh>Wxy9 z`z}M32@o0UFnxqqIv^4nIG>h&tA7fDIQca2t#mf;a78as^G+&I#C z@nt>2LKE@#_KP6hIL?rMq+ck?u;POEjFd-cC{hsAZ_#eaqh;|Fj_9?dv>4KaUv-i6 zx5VXA0@4Z&7*^Qs$<1O`W8h`<}g~BO?}q4cHT*z zSdUb=4a|gDscmRBvH`bYr&5Uh!q_PKViRaY>u^K^sa514*|1v<1A%UBCdqfjM`(PK z1;HWNd7{u%uaCoAIQq(!{ zXLeiMI8exn3Ut7~&T)TLiETj(h&xC=tR@rI6Pp7Lq!emI@~07z8xrP8yQ=?M|Ki|` z3DxwmC+@wtWjJN!SaSgJ0Kfj3+SD%uL!+N#X+-!CG`9>Pd+-Q>c!&B?`@HyK)Y89G z_V+)G14I8E4y=|L?x$wM><@U@xW_aG7dxLXJOFGWURR-kZd_}9u@%^x8WuS9( z;PuqbZ#hC}Y1uJX$ck~lp0S1%CWd`=$z~jtCBF1zHY|EKsuEV7WJJxcx2QF;72{&C zfBA`9vjOoGyxYPoNNk}M6{?T`#T;o1Vux=80`1B7|MDYohwO`Q1KpEgA@_jli?1+< z1LC2k1dbv=bXj@gpaol%$4ZEs>(l%v1G$@zkArmvhsnkkA3=x=k}458M?`@_a0Zvh zrc9JvXQfDujB{g*F5nS3KCP85rKrJB2ME3~L2?YN4NtMzDsz z1NMn#EPUJ$ZSzs#BTvrhiioTHJ3*7RWE&mDe}@@x%d#cXV%+s%@s6-@vy`9@Ng~XzwU^9cox@_yx zD`!deRtjvg2N`1ftOIaRsIAZ;hB$VXtC^F@Qv3885j@wl2r$0H@L+Z?w0`lE#{`e6 z&WqSN(S`{SCx^$8Tt=K;lpw|fTu_Mqkegr~u&iBdS9jwoN^sLde4ETOnpawH+~k3j zbMt}Bp0J3H*=USkgI#^7y?N4(?wDZuK_4w1(|bFComfv;u14*(uIX{4GPc(i!~^U zokNC)(ZQ{fA{#FG6grcV*fehmrT>y!;8|Zt!p#EM7*`;4=^PC<_epH4s8SV=O$eo% zyYQUmN`KfSRZUkuPp-Ba6M4&E++VdQ65hLbGEV6?I z_Sk6Ai)Ch6KNtN11&cyz74EawVu>j%u)h#JRErp)^)<>$#Dlk&FC-#!GxmQD7a7u! zkBP0>w!^y32<+3aY*&()GW%lzL;{nqf3z{NuOeMrq*6q506PG}sbPH+fQVz=H|Z}PYw$qtlGHTq4f%^*BcEWO~<>m+z!bC%GA zL#rLvrP)Df--*R*&aKfw=&rgZeo#{vJM_5#Ufx+OJpj=09Zs)+*0Wz39uxyVBL?mz z#*XQtIm{z6W&5esZ_ExKpN5M8RtrP4G!rD&Ktpy`f?p)B-9?2Q-ejdGCC)_0h|4ZV z{ue4BeZfuJI=b4)*?%?CZEdZ?VSgK2QMkA^G;Wj+DLh)_7l`${M5}?t>D8?t$`|lhoQDyyFP^F1$G*a5i`A;g(Q~JeCU=XU|4IuvA+0%CXJz`S`)K(WZ4-81C|8%-;5B{hF zjYGJ=DK(;?@Hz6nXarjPnl)iT$_3d#=I_adesxQXi^?kPi>4MnZ8F>)2ENfl#UpNO z`#1D^LDdu5lPcaW*V7TGc@hfkQt4`Q)zQ`u-Q9@mTO(b;zq3->`yIPw*WGuy*;4fE zE3iQunz52NXu45Sxq`ue+_cdtF$DV?dok+Ymk>KwHHTsdtvtO@!#fWPq4rmR>bWrq zU52zWQ{l#o=T&e?uaUS*X7LP0HHBS9#p64;`7-PlYI_YLW^Cne?`eGK-kGVvdli8@ zAB~l!(&i`hcfVP+DOHUV^lkrB*@LA-vqG@_J&x0mViky3%v0Ml{|Gy6!SMy zO>FSxwY49j)qg8lxz%*sc8SA{T%BL-AdS(<#et{m7Vg0Dot#VjFElVwZrP5SfQoDE zHmSghxa>;)vZosVOzJY|^>*Gs>a^~)&Mv`_H~YZ#e}!9#Wzzdj-fsJOKM%Pva)hTh zh7Q;-Dybl3bEP2d)gIXSCVt`#tBr#%!6_YP@y~+RG`vsi$aSQmO9t)%#*WPVKA1=h<^A+5?mZT7ciquymQXI7Vf2Z4i4fB5*JSq78K1VHQreQ@W#ryI&E^Id?JB! zT)v z7D>BE6)ViVsj(zoTFf;euDc{rk+AcRYc8}m0_z#co?C=J!r|hX&;V`^!CwxeUgxl6 ze?um^Y=dGr0VwuKRlgsmAau8VLbJc&d3>M!741Z)Rtfm+#s-c%&gA5i3ObiUL~X1) z|1q+HD#C)t_0r>T8O5h$`=7i8=DGHjkXg7LI^`$0D#ju?5M$}0NZf6`F$Z_5=yKFf zE{I0_Z}vaOn#9_aP%FnUWRID2Nh}bvMAt@;ipvB8jU64P$F-_ncoltmA}^iC_))3g zwxACEwp+oRP1r$i5XBC^0lW*`mPUeak)DaUOCxRK*Z~eXZ*@o*L3uT~Nq2wp6ke*j zeC1b@{?O!Ja>>~3bJ_O%Uf0_*yI%fr#1sJ4XH#A!VL_Rv27 zztINuCcu)Jlv5837&wyAnqr5d%mQc^b*hFUd;+GKjY9qcRS*{IO=@9NGa6Rx-F0OG z$W}6_a=0D$?CBlJPu{5U<25%fA6!LJQ)Ir_2MNn|#v=k&k#;3MM8mwk=a9SH@*J z{6S556@NWM7Vi8^a1Igt70ij3R{HmWth^BT%i}t?#?4c?;NvVJW0JYxRuBzvPxAU9 z!N;F4%l(J%ZZxk--13gpaP=sDLIL4EJpLY)-ki5d5HzGZ=GB_f;JEiwLXIDKDHiOJ zL=aC*{1Ctt&JrL$;ECCC4rRlvG9Ge`E9Sl1tFEFlU-yEFzGXka(E{-Y5yLb(|1DQm z1!L1#wMPBUb)ZK0zKkptm8mk|<}Vj7-EDFSbW!d~Ybk|Z>G0#Br_DfSg`c8&Q%vQw zuS$gE5VRpXt4pEhq10LCBj4^mQ?k!n%E8D=>icrQvl*Z{0KxpC&Z})3hq%5;K2SMy z+r-2AYhQT!9u#j;m7bZt*RXQM)f?v(iQSpxNEmg|#(#}&?M{X1o4uQ_&(jI& z$}$htm(Jw(EIAgD%;bPz-)lnaqSrOV!Tn3}jVaiNx`{4z-r}5^hH_v09^<1S7@!l) zqD4cg8BeUxb28qVmI_s5o9C)QK9L!~B7&7zkD_Xuw`m4_jI0;=9#oKw>))4Mnm0Yi z*)yO!pNqh2Z`a$}oGaEcI5mz9j}KddiLIW(Z@zbq($z8t(T5~IM>ihE7sB_zMHzwXRB=GL)?$!7?ob1Kl!j=LLtK`nI?iWChOLJ4-T)~qoP zuv`G&wXxb|f8g5*V@PPNOBw#q0J*YAfkQLDlUw>3Va)FWzE%FqI$M-Qaq}E(+Rx$<2y_?&fo1NRAnoS&_(VE>{ z4!3kqxJZMBCHs|;*})LlZ8+#h33;3A_nWia*tLLwxRdOe&=pshlpDD}eC{+Vy^?n!$w#;W;296{U zSK>D>C)6!gSrjGA_S;bI99#stKE?7?+n-F6`_8AGX&JTVz3#kyWLvvEj{m60xf=8q zozOq=Vb?Z#{=mA;6v%Nq_J(L|K9}d$1}9{$-6zbW5&#A*HOzbD|8xvHp#!NR&%6ItTi=Sp+aH5*LU%6^5ruKMfB zuaTWD*WGGb!?K0sgahX0WJxb!C+Z%q1}I}E+hY`Fl}fb{_4!nauor2wy!r~+-EeI1 zvv$XG6M-%AdHN@UuRRo3XJQtEZxLiLFq8hRr!}7UPvk-mK@8lzCc?t=E3xaw@*pQ! z@G{CT3zZddJ+K`&2V2=QYkn))Gvcn&^sVFG>@MXyRSD!@=4E#M5E&)m>C`2gM;EIO z-Z4U4C!r;ZhS$EW8=F6_VyJJmyo(RRKTd5xt%}OIe}~v~;fF_GAimx`GtHy4Z~0P5 zQN687Zl8NMFRgb^77)L^TyHdWb{CTj7SE~iaj_1X^o(jF);U5!9o`yj-p(&?p+uXp zeNH~sf{-si@pm?QLLJ86t?b2$4jL#|3hY*2Lvu{;(JIPOgT?9GRIKh3XmCz&hMumi z8k(i5t=Y^Y_}JD#l7|Ah=BD6f54u?cA6u@8RB>PS(?Tvjjh}a(ye&>?x;_6H_@1&% z?si9a?RC9*?0SxjysE*(hpytZ;Z)g}T}yE!f!u=p>m*tB4vyX(y_*8X>AmE{>HWiF zvdZ~3joXNWbvk9}0x<3!HFP0)%yFBFF@J8gpR%c{?TlT2yqei!d+-0!JAPlkOqiYI zOy0d@mfrRKqC4m7c2WH1@O>VGm}?whxc=IbW!l}pz|*-SXt{sR$5XlTKjisuJGrQH z`1|FcWBc;^$XZcc{bz;y zYjvD{_WZd1NY3fIkI(4&eJgZp_=~*s(FGmbY%gok15kJEp;3EpKV#1OLqs}m+QFhe zD1G$s<(K`JZLbjveyPe^Jv#DguVL$|5o><3nX~c_)OU5!qj3DQ>!8hcw zD7s8GT>m&fhuEW%z7M7wfqh!?zdvBvy-lC?EyqhQ9(Ml*3D*kaZGCe!wesdD!FNAC zAY_T%>>jcVJl9e>)$_aH8+X!(>D;iosJ?7c;K%gtz5EoIZ+AukgeFA!?nwmi;+J!P zmOowu`U35L17rAswftZIWjX#IlcZSKIR00X6yACaN$ah)?))q;pwSJ50p#N1;>|q~ z`~z6_f^dyh@8sLx?;>z{yDHvIVlg9r6;s0Mwk&YiKzlmq;kMTw!Ry68zg8CN@7B$~ zpBmg0K!Z_?BN6%^X5F`eh#AZ??U+S%IsWq=FaLH+b-&m??BDK5v3}v@hU71@v#cN} zcv@n)k^=_2&^-Elzi;pBY(IW(6U#rj|NNaDrRM=;r+~0~La%YZzd3G}`HJqt;iI_Y z$=bp|1st+Q8I7)3D6catHV#^3Sh$KEqI(Fm7Zh0?0ySv;L3IMMv{Xhm)^9dgRlfp= zUcp3p4?R(sShG5u4MJKB7+ACKW5{K6u}IpA@n&VtkmhHlDF=L1C*^HzoqC&P_MEL* zzusLMp)!wD`&OqZ>1e9KRbr|taMb_S*Xl7+!M>ihXiuOrj8b3*BtTIG)#1#6-|ukI zshS~A`Ga?hmFbN*?hive2bhy2$I)et5jip0zHfE~esAjK&I?4HN2l z9vB&tP$2kf^}WHT&E3zE*_HHxJMIY1A~fiCkTuDn?Q*5gOKsiMkbV-qJbTZq7TfUK43$174cGI zu3`ib<0Az733AM|)RY^62!SnklxSN#Mg=+wTY*3#-Dgn|Fc9{s{e=@*0&OHL!j?2m zQ}!ZmOdS~6wIGjjCgEyE##xBA=3bbd28N2UFH{AUU;udPv*btxm@Gi&uTDZMLBQF7 z4*(zo^+cQcgC-L$H1kY31Ra`Q_zH+4hB?Tl030?7z1A}duc;gN;goKCt9W+@zcX-gVd{AqQIJSPC54F}FUFJ0HsBSC{H z=)&oki=CKi1p7xs)&FUJ;#uLs#fa{_D~YC&Az4wJMy4~fJ;dmwZGytrAop>z#ola(3|~&t_GG@qJLLL z2@ZZ%hgK|7WCtOwlQQ`5C}Wd*^eV!DDmjvE7GmL;<75-=yHHPi1I;zfE<=R=vQ>fu zc-Cpj4TP304^;IUNSgy_+W`yUNWvm?%eUvNCKf_@K?(IzQz@GSkp<(6r3O`-eSm-e zF;g&*4Ucwwh>Z<$r9{n?V*-%Td5`8b2EY(^M{aQq=JadP_BcF6o~h~bC)CQ(8Z|nG zH!EK;_vZh!ynk8*b@EI;J8NLZ2ip`_St*M+8(<^DYZO?2r#Sk~U|XO|^(lKq1}F%0 z=!x%W0e1VB$fZrd>iK`B0%wz3&_yg7plclR+-M6`)|bNzrD38u`Vt?8DUu#UWBCq8 z|EnOA{HIk8?p0HSQHDR_Rf$Fc71DeUuQ2@4&=@<#^L$ZJ#R;G*!1^T{#bdm>H7WMD zMB6f!;~fb95^W@{le@1C`J#tVV7MpM@hGNM)0=`ojz2K7qF?VobTb1vUTvW2J@EpV zAp@v2Ktcu8T9QvO)9W_FOGvm{ZvIBUt$mh=8lR&qA8Ik0g+Be+DT+n7U{b|Fxor`R zVGNRu;c6mDgH#JlTOFgDl^`Q~w$qMFkR|;KgBW;Gh`%ldNG59y3v2S0F%a`#4&g6q zip^BoBgjaBisZ#iGFRqnv}T&Is1v3V#M6RNe2IIZBC>?O?8Y>*U(I|(K`qTmc!6Z> z)R0oe%6vky2u}C=++fm5RtVJ_r$xm^5{{(2S4t)RS_HO-n$MdAHTeK5#x0zhquIY= ztam+ntXl7>))a@JU*!f*5S#yg67+7mgo_o{;7*gU_oYcd$`r>Va;$>+-MN5ZQO$H` z4uddCP8ksNPBv0q$^V1??dLTvn2`CKLL$hVNMa!nE2h)j!gwzsdS0E?@Lao^V5d+L z(N`HnrLiKRxAbY)IwGfRbzNF=Y>wd*!ORmT4eqqaXB$qFUXc|B+H*Gn046>wfa8c@ zD+jrN0?IHfXt*k`5}}@5iqz#eMzWo#pYN6sO3S_Bcz1>Ps~|v{obv*x3__MSb$(q~TO|rrZP1snQKuU0N@jZw(HgBMLsNeg$w;AFhDUs&bn+N<@u64D8*GO-uMe@p$H{0u`Tcx^p6H|t*_|BAlO@&1@ z1}p{0Yc#^9bkf`~eVR@2c(_D-l^HSK897cWp5;39u^XQw5e|<35Jxj8mve!yz^_e( zKjWk7>)E^tfTP9-B_7+-AQE0tirbTY*z@_9Q_MwKq&-u9lGLA+$6`BK?;squI`qp5 zXN}p58MyH520{8dF=0NTurlD3T+>yYcKo??t9Na$k6Vr_4mr(dJR88fNMhYO=BTiL8Fw@WOTm?V z>56;81Tef_InK4{Gj&>D6AvW{Y9v;egWMFK`)H3js=)Fp$&n#BsC}TczkG5}I8=af z&fsMuCFhM?P5Krheie@9G{uVn=E^ptfTI`!#nw=p|H`tN(Ry}U=)7-NuA)Sa!Q)t< z*KXeGRe3-e$>sQ1(GOU9LHUkjdi34 zm2GyT_xDjEFCiWf)7fAsO_b4Z(-=6x;0sG#p9mtGlfcNfaC@FU!e-F9kFfKuB%Anj zFkEr)c%C-pN>m7JQad9|x+TCuJ4x*a`@NU^QRxo`dKpmj?c zqb}%1GP`Rq{6_j$comF}ADgOKiO^xs9kABt`eqUDm~!{v%N@F){mnYpcz5_vlg zqS$!=j-uy}(me@v?s!--0C ziZFGVJQ>Bl%5S-)Sc!dNRaj1^SoI2*ojE^L@SMm3>6%uXH@8kqTm*yE+7}SPYjQ;N zfGLf5vB@$?;N+yrkv$GcYIm0RvWgm&sPe~(*KR?;Cq|Cb$Ned`r8|0JqJk8Ds~1+c zDlpECBam0WipXHiblXhkZkje9K>MH<0o(9;Z`EHt>KpCG_B0{puH+F{Q|YRiF_ZC) zQ;uP%E;FtG_HDetbn>_^E)!%LKsI+jJu8#W*C7i2=dQknpo{M;WmjV#R+DJy^DaeH z|H};8$4<zUQ;r!8swNRj%l^VS zTV-d3CIWL@Orv&tN1R6Q2JQ-s!&iij$I_vC4?lzjOG@vV0J*NM3nx?8b->JH1bHVw zGHZE!i!^2&2LVI@)+XE?UW?sqLI6?ssGzc|um*($`gm2KY3gDEDNHI*OGCQz{n)(Y z(XTuyc=tR3iIhwAk9pybZD6=Ll0x{ih=v@l=)EGYvd_#6(QVEhBg_UBz2|hGJ+@4r z_I5bJAWs6*SelzDyV-O9ZMCA@eOp4!55c6qyIaV=3C4sUQEqyRsp4m`$LZJE)>v5S&`WK`YKixQ-f9W zs1hc^6o{)bb1Azs!0J7+K?(BVO6zHEsd1?*sUgosbcJ_z3S2f-Kefp=?)rY=iA}e` zEOQdy>3~#AX@O7)y9BOxTroet?i3VctR9Ja^zybmp%lJA2pdmw$%e*`YR3U*9NH#K zadX9~(Y0%r-t?~pFVfN8^B+3g?&hRk6T@eIe^!sX!xJ6aJoEe|f(HYcr^4H(cME9@ zHaOzAonj5oEXI?s{`)$}Gkq7hH%#{-J=NBxwJSaFv*OCTg}RidcKimQkFVT%B0k16 zza`pjC1R+4S%UL3m@_|}9-NSSNFHXz=0P^F`Wsd@JGZiA&r|AtljyVajh?h$;^7sd z7`MxmEO}>Dx?aO$Lds)}xV*{5Gc9rx#M3!QZV|!#qO5gf&;hGECG6|1`=2k~9zK=V z$TFwbQ272?O)|o%H979^O8I2P@7S=cZsGOb&q5Ws>-&du0HnX0Ukyzi<%_8X#_rPG zMVY;{Tndm9K62DM$!6|&p)36vpF4H!_vg;{urx?ph`-y-gy^yBq=gsVf+m^Q z6df1d`kQ~eCZOP-ibdoOil0mG2sHjuG!DJ)vrle(O-O@B4Id&3Kg1uNX}sh}xG|TE z={iM;9UUjC$_m7S%I(Ap7{_-p zs?i8ga>3&c()-bkXp{Y?>>=B0LMrF1Q%j*aesv}?@G9Yt|BElSrL@ENVXkGjk?IoI z$F*H-@g@DwL}ji4x$Ate|GUB7;)}eo)N7vaG&hzgzEn}tSL)?0k?=MRSxtFrPE?vC=#fPHJOL=4z7?Me8Fg~s{0 zE;)V)Frl<0zSE%d<5?zYF2!j&se+@LZmb8+RRU?x4Dzqlvn0}3tbN;)a8in&F28`? zPU%|(M8DoXUX8sl_iWN0gD!0K#O_+)!^an8#7%w2ThEl~H8LhprSnN3eNY=fQ=+ z+6>ZM6#&n1_=E=CdYJQ|vq9>*u|q6Z-~|`(Z!SqZV4n{>$9DSoG~{J`=fOt4O?FAV zgbyx9K`u!j$!pkJI(XCS!@dc?)14=^Ufz7}I{~VwyPM-6^f7d^JAQZgMeYe#HD9oR z8n@&Dxov^Qy+t^(vRS9y{SihOoTbtsuza`iKa7s*0)@$A7ZqSxJnKTOgb>+?b9ah@ zo)I)vUl3(AQ7wpO`UwXnINdRb^xht8rC888XPsHu$9)GER{{I)^ukuP)B<-u60+p6 zhR{QurTFX(>FHJO8YL<*A zrc+?^1@wXF`o6Apf*eCy*urDbgD!vmHbCy9P1jOYBiOQ%riY5DD%(fL{0l`u%_jEF zIVP>}7wVZAi(VvMz)#@IS9u)zB>TZjCQhJ(%hI+aUilolDNcmj`VZsp?0-*jXSEAE zlt?n#?-)Nci>B^hp+ycTps=ZMD%sa z`JnkrzBOC;e!sc!{O0<4H=#ri$r1R$vt^f6KTp$w)%)$+<1fpb>*Bcczom%Z?p~kq zFd4O&Acsp~KVo>)C1BJk7clykbAW=vq~TPaUTsUA_~UD(VW9hKJs#+|5`}{5h@?80 zPqHpp26$%$x`XaT*NZp*l3;-QVLE&@MpVg3N7T7!iI-_yNhB_^Yp23g(@@vXEIMiclypEsoKzRV?%SQ%pjDX4 zR;D~=T8yf*{2JAmM01h6z?zJ3T$Q|9#LUB+<#ehSm8&ZCg~&6M&)&sEyo-ZY6ossF zw+cwifJ!IV^1u0guvf)-tG(eC!ocPr$lcBi&djWEY{3zZ=z_55W&Je3B!Q3RHYpeh z@K~J81r$cns1Z2=Ii?hhtsrLMyRl)7Raj|< zXH5c>W;}MPQpUNJ7JF2^Es}B zkYyCzx31^0ulh`s+U=!SD&)E=;rNp*run{#@MvqHh%b!S@}>yvM0?SgeINB=T>l=$ zc|YwJWwk7C-bG_}?k@msfC7AXA+r)!`DSr5#yoF|B_KqItr}FGau^J`N-QnR1S$~? zb&SHlU}ycb&#bUP36=SES6NmM?1oeg=+*Zz!=~s76-Azj?VAYMCtM6pU3^rmy1N7> zdX^?rIp7fim$hHIT8G4_E-z0Y*G2K|4Lc89jBtD=5Jf-=wX-7-V;rp9>b+~0f&;4(_vMOxea;RX%M71yuKN-u8W(9dI4b;1hs2C1BM$iuWX8Oj391U z%%U=)iW{P0NCAW!^1{MC6Kq-(4j74mMYBwhdL5g4O(JM3ewULRw{K@z;%VQne{N4) z?s0OhDcY}?37wfLZivKHHKpMcpa3%aqo%%@U#VL8WDn<7R=F8)_$wj~8cPjxUpWj} z*c1gT&jP9?a#%(s-M>xF{OQ>Mb-?Jc#|zyYq#k2Vk2x6bSsHG--N*n9iwJqo*bxRz zB;Ntq3L|Q24j~aab={~1>nh%<&0yT#)|t59iBd!}tqCF7maUj8>JF@yjml-zZ`p4a zZ1SV0kl5sLTLRrh{5=~Kn2P4KJ%l2yKWumz2+eYm%pW5wD3OAW%<0!YN_99tIxS5? zcEsK^Sf8Ut;}f)mdrlnzwz8MfyLHg4LJ7o0?<|JUMJ_bQZX@k=8`Go&vFX0X5#72j zk^5?}K@kwPjvIxVo<*xcQdfm$!fIDUj5K_r^6Z~WrO5f@9p|eGbZ2>!oLzwS$HY@7 zTyz%50WfFQIHR3GO5-L*22%Q(x~JnqO`_>Pq7i;ju*@Pn5J5v_nYQ#zR7l~F7;ru< zd8iRs%fhH0V%LLZKf{4jSS&SH!FMColso+q4<0PT;tPng-2DLvEDbogZU;XKLcFbz z2tkyCzbui?JB?+psLp z>Ge1aYq2b2r<)asOotrfg(*7-^D}Dpxjx%^9feR&Kt_P&8(8te1_?%hr#4{mAlXJ{ z9Pp5E()YNC4(onCp)w9V=#^#|{Y==j^DI?LJ7Jqhs~{NxEzw#K4Vxd@w}&=!38MBd z#`OSYj1dJta*3w%C^PmNP{{Fzncf$f^q`wauhUNT?YGlmgmF87QLV?-;0WDnGg7}C zR%cizcfZ48?vIn=HbG}sO}xx0V}jG+>)(D#`g3g6+?FPooJe5YN4#aAx_*Exd(tULR*e2euEW2#oWq zgamJxef+E>r8-fv@|V+hOmAwvYs89f%|k1>5O7GhI=3Y$G^= ztFpyxd6H&;R*nHH!9?NAD}AMSpS_MPjNie#+8yqSc<4^sw)*EVd)F?f9URha0XtOyU1F8LU@w(yoWt(MI?1Z zq6ocxNX+yv=0DmZ6oGNb5nSC1kw_@4Wl_{IsH`cs`f_Ikh!I@kS%ggQv@=*^>yaXS z!~QMADat7bH3gZ=G>OQ-z&FGwpeCwH!-YYTiY20gc4Qhr>K?&^krc2$c|Yb%4)_vj zGwGB`j2wZ)b9sX49O%#+2>9|k2r1Q9%PTRk_emdhi9$^%>aI~lqq8~!kVUDq#?#|- z)sBr!u~Lc#iHzx+k<5(pw+{!2P_dt~QG(>FEW=e&dF)Vmhwfi}&L7FXlP^@t>s7j! zz5bMz{K*kXV|E?i8Q#H`*;6xD4ynv}LuSmDM`u%^pFfZ87;RqvmN3C~#vt;JeyHneFf@76UU;2KdKO8}CJa=QqEPVz`dMIVcI1@gk8xEirB z2I@1{Qe7B1LoJeM`$`x=xH6O5>aYXA{FzPNecpcTT%j{bVMjt2AlE{wPux}GVlhH< z53ZRolCnIba$ch$AaS3jNW^GJB?i<&8{He-E};(`-~RzU!t_HJ6&RbY_~?sy^ij+ z{D4;dy6DDK2!9M)oPzP3jhlsHnXT(wQrQN1BkWMNV*D`Ay+iH%>ap&rU}0^3N1-$5 zCMG|on>D@v&vX-vBE zzZk?iRLxMx)A!IXW>t22BRVRrD?>cg)xss3hc$mOoHajbhVTr{Cj-=u(m?~P37s`9 zLy{WexZ}%GZj2FVr%KX6$D-0fBcjp=WZKZ2i82~`@Fs~95(n^JiIpx6?Qtc*MH&nb?L6BGMlZ5C#UR|-umP*uUnsUzbc|X{GQD)PJzkp!Wn@c zo!2x;sI@)@uHWX*f-FxPwVpdl%`#w57U`obx@0PCwFvY!EPwxRynYhClHz z6X%S4dV$H1D`AmSc@xl_Ut9EYETpJ$J*{)3=sePz<1%&Y9It5Cgdk>JRi)?*vK)bI zD}f%y=~>#~_GtAJGE|RA z*%mOri?2>`qWv~Ii$=vdv6e44weOTlorThq-D=^MjD75+*kYE@J~?aGN1mZJN0TL{ zoma_NA5}&=$FoJ_>gKh&e&f>e*t~GfS2m5b{>ocK-E}@$>5wvlFAWmaRwPr&dQGBn z3>zECi!+LSgNJ1_s|4N6vtwIpFpKWshKE|E&_ak6*$qzgyFkOq_LI%Vr%XVj2+BVA zTJ6pXikY?{oG=>E)xJJK>AiFGS-j+X z^te|z43oksf>MBMfI8D#JzVjeG9|B=_+S&w_%CnGlMqPbS7I8Hd9b0Gcp^v7aF{CR zC{b0hY{Ej4{d*+z1oN;mlo$l1qYZ9*P!1ZzuW1Oylibz`Kc6Fbn1isvdrHB00?OKR3JY0BC>MSfgrTeFsNlzKB|jO6ux|x zM?#uKxL4Sg3RLkm$jv0%vfIJxdN4<(mpnx&D_qsy%eIB$Bq?)_%KIV=GEMz8C$fBE z$Ryrc=z?YVhet7wRp8axm~+%yPvW#1 z&w|McsAG~-p~KSh93jK$L*Q-!t7Nw~E`)34&cU=){##5Sjc5hlE*vIN z1`W(%?c>gIGkv_Z_Q^MW9QY%-5E8JbYB8`>G{C#2HnmP%`^>R7HL>Z{yw?I+w>@tQ zxqXiiNr#P}z$U-7otyQ3>@Pp!ksfgm0={@OZtK{%T!}yRIL< zuEI6bqIjQI))D+rmyVw5+mn%SluKl2N;htdr-fqsATlbc9h=O?U(L84dn!XZyO1SP z;48C?p>8%N^EE|5N!f}EOs|z+MF-W{hJ;DY(V)*50;O%ad_0sowOZ{Z5$VLJD}-#g zUNV1^$kiii%eL0BWA{Tc5`7nJAr7Q1pEeskNBZ3cL7MsyW`rHjvRh>!qcNCs7*Fos z_U=Z|mF!dF=I$#MysLeppE0u^xemSS9rxC**YYJKx{RCB9~vBMVk-Y^Td#-P)U}le zQI#(c9u7ylbayJz>vnmq^LceG8>(;24phZ)t*LtUu2#E&sC>*uSy6^J`)Ap!aJdA( zX_AH%Jc#AI!SPQjE=cHi%|V@rH<=}g;ae0OZWfz@|7#Va1n5Og+9PO_xSFY7b!bBG zKWmn!ZsE~(OF*M>9DB1ak_TNtuLQv=_AmNZA!x@q%-u#|C#C2t6sn74P!&-xtyN8z zAZXy;``yB)L;illH7>&Sbtdp3y}AFa`y8g>ExY>1M^$wFREB>8*?iWx5dn@8CW$G# zX#~-HnZ+5@&FuCk`Kl+uFdO$JqI3d#lH4T#H0uCD<}@pWPoFTof+!@80bJ}#*|^!$ zppO%3{rXMYm&TRL@j7rnEEJmcfX&S;P zi}W{~NDJRmH*-G82SPZloT(8x5zNMOYECvJG5t;)ZVYyv<<6@sF#SB(D;?^^(}v&` zp&jAl&MuEIJtS|&^(<2RqfO6X!z-XI9Lg!6ErC&7(H7Gg2iWuoma+?wwI8p*jd5mF zv3mgz_3npOx!P$6cUOIoRiE8=5hg5V#OkBf0vcDx-J|t6}v ze`vvT7qN+83TikPGS}!5G5WU`PwzSC>D9R2M31MbAPeezDF3$Ftr0Zn=JW2urnj_P zr90`pDirP-la4Na^x9r%$r3C!B!k}#LZ>i{={#VDoExuRM*Li$`dd1{_F8~C`Pfu$jS|Dat)B0?6yF7v(@2y94;OEBT*_|lzXoOZ1I-sp z(8b*oBgwHEjj=bHE#VTu8RJ)5i6tc{-29%>aflhi7HLM6z8)VF+h3SXIPn@6`Zi2l zHy=$QG0lc8w? znb`hSPyFT@Fb`#?vw-cD6uZ@mAJC+ny_Z!783Z#1NL%}$!B6CTfXowhZ^kxQt+hsE z_|>66T4GE7l7G!I2ZZKY+1_|lYfQ>}BUTnq+?n5RGD}KY5Y#Pm!s(Bo9)0yVDg_Iw z%wJLBFm>fUSiGp#42V3$xrCm%nN$mmo zLe>I`nO0&*nT|tqFnP61PBBv3iCP<>gcG!3oDTg*PO?L{e~&I!*9vPV6!G0w+j@hi zG34icBwqzK%D{HtdJAd|ifgzsd_EqR4|?(DrMbN@ogQ5_iJlWPAg`r}Hf_W??KYnq zUJKOP4rgRf4Q0BfxT;G4bSRIN9I_NMv~oOA?7*!D{?&Yi^uPEXE%uAR_JoQ)>#>SbZwCrn4eSi@v*MgLpc}9G9!##g z8c-+a;4bibbr=#j!M0pUHH^KJNT~0G@~%9Wa#@e3Qm;H$Imynj&~E${;!9^k7^5H8J>Kn~DAMQA4XK7&shWB8V1?H?3|0u4LHjX9=m)XaVk zJI0%rF*|YJ^%PtDuvgX&gN4aIBP)MfCIF;n#()G1NbbKVPVh|&8?7vee>I&$$fTfT zHya;VfH`^qAF$hGbr#p~dd;r}kXL14*}a;n^vd}$F&_w}#DU?qjS*Etn zd~G#C+gmXVijHxR*@!^xUow*F&*p$`qXEAdTKqH=9+rfm8|Gcmk5mnw20uKf64J^W zdi-u<;iZJ1j&;9=nEXo_Njo-1&k|DmldsdQrvnhDu@=%A7qI{RFWYG&$i5km&nReY zMC+@aT|2^D#%?B=_Gc?Xa_z^Z;bsBHdY+kvK7B;gR1Lg0WN$r&i$!8eENqN2+sp3W zKcZlu{94{jEPqqNmN7Y!duwS9TojqFza%c( zzO}__B7&80)Iv5i>}Yjq?3_-7-a5?@#4%uA3b1V&JDOUb`r6UbS`=ivc9cDZ=>!KE z>hpAtt#jSNJ#mI2{`r>`~vp4aj31CZC*ODY|aF zP`R;F2`n2Fn-ub*mz1XXk0?-SRb&rV&%v89HyZxr&}&a?Laq=eUvWbJ3|?@FT|+O~ zJa%rZy4*ON%^cwIM_o0O`0*}3Q;Na8$?*4zUn(U7gJs{pjB;{%z}G>Jz(v6m@y7sQ z#jT3HsU%8$>*Kj>L-Jn_zm=<%iMWFG%QMy4c!bY2b&GwRGEsCE?}Gg;k2#YObA_m~ znAe9bTGeGMh$J8_=c#)2=FiTr-+4mDb+JHD$pgG;2Fk$6vu^YGA+huQk4JF}fB!Lm zg$PO#F_tW<`hFBA512}vJUzmS*#-eQER4)hB6qi-en)}mBK<%7lb^CdcaDw2>f3*~ zE1&8fy{*dR4-e20+cMZ~##Zf!)+Udgv4e$OezJ4NSBYi#jRY4DydG9)ocuLtev4v- z<+PFRcNDyyVVay;!>!eNkP-DqfbWjMuSgD%PYczsDwidVqk0NAMwgP619u6NQKJF1j3o4ydc|K?xdF9(mRbS#|3M?w6Q{)N$&24&2|p_!^L2O^$4B zX*)+47QN-2QeU;V_Zi^E9;~sSw>UppD5D08h3$(TVEEX^`{VS8F0~hBR8MO|EufwzJxdl z0XN)AZ}y(5lkfvb&ja*@;+4)|2*%b5t%i$=E&^ygDA7@{|5KCvmsZ$0MGAlNKtD<@BfJ^<^2DoO1W6LIR0B^HEsLDjs(9O{elzl{#!rb zK=8|Y-`pfTB0&Q;XAIb1{@GvOy@io<4KiDJtsP4QGmeN5p{n#sCR?xNnsn3`F#oh4 z3)2Lt-7>q?xEb~T;{WqyqNu0!gYf&`5dGh;9by1F#z7?P1Sd~~ zFk@{P)_eqOTV3wkPiQLIQ8qIyiY{CWauFjzgu;LnZGEsoYVE537zZgk4X$gyY;(&n zr;)=jJ+oMfkxV_ZN;L9K*iMeKl!8Y_Op7bj`Y^+*UN zPKR1aaaE2%lG+*>Dw$|?r1*xBMprA1*hw|2Qv=nkpKZ#iVr*^LH}~hm?aF}uFH05z z0B#pc?^Ws8568&(%_I8MsKhaQG;MJt50*2>L#=HiJ;A9!5Yt6aC9RI0WVSdLT#S*@ zC~Ya6xh%z|erD7KTBuH8c^c?gp;;O5vOHLo4Y_TNstUugK9q@-;>ZJ1@74!2SH63d zUvhNOmrk57peX4{ohEm*~REy{)-C$|o|#E@D8 zOBzCwLP&^784HEIE*{kr&SeV9P8@0-hjEE|l@gWFjA^PGqb&K1lRcrt9|zHmjH21C zb@T(EzI`s1<}2gSyzpGCry3c>6Hg*{G$TnP^*vPZ(?Q_E7>pj}iAyw2 z{;Iw~_6yN{;qK-yKEZGP&o^?q(z3eG_nDw_LmZFJ5ciG4wEuvkM2k?P5=Al z_S3q1?DsbXByq0(xAj}p^17vMVB1>^WoW)!#5$zaKuJDf&uQ6K<1?bZi{CwuSZ()o z$7+?aU%_({1&A@Fdx3mA2y5) z5-+o<`U0ndrG6{XuMF<|=1nit*4{Z?Z9jT45K%%>9pe%*S6gJ-60dfN#3>Y%YKGvm zTpVAICZ?~=QCh=HFY>=`K&XZ<@(G2~TBJ!nG_p}e?G-Ch=RQhDQQjjnM7{N<9%FZ+ z5}+4)TJy%oT`EzH&kUkQ3K6Mju6F}{*YatJsX+yMCmJlSE=a{hJv+VV3!RPC-_vXd z84v@>rg*HVV#Y0G5wIrBgF7@3LD~W{diLSMAc{6pT|%_VQ%6GJxW|HPDu(5 z`&Cx3K)>J=D2>27xh2D28B1;jw}LQ&VqHsIXDy|X^D6~LX;*B#g1;V=bhzit+o^yh zE^uOrjbyN`s64@|yo+GO}A^YfW4)+n*R!F+m|})k0rKMxn2rX3!BOt;=7LbhkMs^s3i%*&HcQ%d^)^ z)0ef3_q3AL;YS1k(E@C*7WkueToG)LUOQdvj9$fL93%&_J#Q5rkFi=0s|FxbiHkzr z8qh>fkE<^OQ8r$OS8gveEsre1Rdy_&Q6B5o)f(9KZ^Ac9YhvB6VjCw0x9lflvAiPF zy(a7(`t*g_!m*OTO2#x+9ef(2+ePZ?ZZDjB$HIC*N2V!1Lw7-$&GU}rf9-#$=B_m=lwGvx{P=SolqNf2C@o>Ava6c zU#}Nl#aRo6sHhMo?!$c?Lo}1}_zQ8KP9qxdhFcB1DYsmJqe3-qesX7(9voz;iV6fA z9IWEzn*oJgr`^ZFqHv2Y7g8k>V98(t1iGXhT%`jd8`c>}om#d`;uhGB?I0odgLOV~ zv|zGDCi!LJ0ebSL0}U>TbmP;GKuxOfVVMwlzo)}~BJ~@y2pV1{eu4acMO<88;b2Vg zKQbYK<*evkisf~4ZqNn}u%q}!ZjLE15{>aTyyA$9u@|RrL+yK+%Qh-GKhl(#@sLP5 zRvr=VoT(5st8GS>Owo-%BH{3jj&9^zKm_JC^YE}7#BCB}yP8KwvZNZxV<9kNXmI0f z?3A0a7r2|VXdRkVYWC`7L>HhdE8F@7>%JEKNLYlyYc8eGs27*$5D^Vf1s)+*?O;_jI${G*X9^_*|f!v#Mjq`<89N5Yo`c9MChL%>{a(!((o62W;= zVpbA$%*u!tWJI;X?X7G`F;@iLZT1n>Ak&{@=92IxP^W~vaHfV@l35xlL6f76>>Kyiiz=rw|5-$|f!r1nRbFNl=Xgx6Mnw~-w=yqEcM6Jg0 zKoqohFNjPSTJ+;#!3N*C_(6+aRHaC84-(0zn{Z?cCDA>=bP}o4$E!+d18X~I_t`q^ zgn5*jn3DH;!>(4_JC65F?!oc12?*MFQ&mxqQZPhX0YnvdwFNoa3dv@J*r9^q+U>Q| z(pjcO4qb3)z*s`Hxv0QMChZO*kj{XROGQLv;L)^HtR}-isfY-OMTq)csgmoTiMZ+-c>vUu=ZIG)NhM(bV!PD$=tvZs*RE|6;ZF-QFYcsHa-z&qh{ zT-rdeYfGa6aKM5AkO5FY6K;NhxWQyObEknIA&A}Mw(NK*N6^GF=MG*Qo|=IZOwKBz zEZaH}7sFlQIb9GsBZFXDFjNR66gbjFGEG?^*>FRDW?~i*JDn={efDxv0-JUJA38&( zQ@sqWnR?NlPrr=jNsWpMv_}gkr&OzUHvx}HFYD9Sj$JSl|$taNDskrsP;EEm>{#@9@Sh(^y zp-Zep3D69GexS7<5yhTS1wIfX{a8vnkb1@~#A(p>Amc<76ljSgE?w7N?1CQR954Rx zC|T8-!MboW;)aBVBwhbDsUh#eP9$I9$tg&6<$=v?NOJedsW-KTdz_I8F71X$irQjD zAb@&TAGtb1_v`1*)jognnFQB>t6eum0&i35-6qGM&6fCgO6#NSU?N<%g z?k@|k?FR~jYpYId3sy=p2!m{6yM@s`QYg-4=R_G1gXfD`GJeG77frOQsR1|p-BDMg zLh4LJwy4@g0e2WaN7?``hdEjzWf1AyG`WJeS%1bHDt_Xt`>28iM)@{|=x1gvr(+#~q=xmQW$h|3ZQNe_S+LFNU4 z8yMo3p>)n(;uMm%7#Xny>@WZ~0RS_UhQtZpNt#(??LS73vO@H3vw+JMW6mkUbxq5q zPz+FX{6$|*>>$9z1R=JY4P7U+h{R>CITp1`gN0Axzz~p_a`Dg~kD*Clbpl(EszcmX zDhu*JL4Q51R;tVB5`}}|#l=JHlFCEZ)L9j60GGP~dnb*B;i$Sw#3JaTA@(d2h!QGK za+GTjXJE~cPOuBM4CBR`o7+Eyo&G)609xw)I`sy&zzHqrd&eyZ3Y<8JYoK7=>my(y z{s=4YYaIr$eJeXe7n4ZSPu(({BS&iVS+AMR$Se$bKcHRJpqZ_$4O%}O5rq%!BgA&= zT~E3(lP)wjzwh8SQ<{K$h^}F5-;RuofWfJZ5U|>y5GCoOgoBQ%8bufpJsb?K-@mte zVTh!^*H+623O)_}{n#RR@7tHjk1^WRw$%wWc=;wJ2LrWKg~uLmXu0Kt0E`S|aNGq( zasP!#t{~-EYd*fsXewy zww*yKN#ttx4!sfvy`%=lv{V>+h_DD#LL?jISd0(7l=GEwGTDS2F0**u_FJS1P}d>! zLhw}l9;XzYZ>1ylYc35dAawVSK?vxI6gqhd0H&al1Ehi_l0uaf=upinAY|EuELmLw zAA+q$IWfSx-bl2SOUjM9r~?!QSAoutZl`bzr1a#VOQzSCsK)8$4Eloycu{fnu-vaS_trCDnrcr*Kj9Rl2WQ$Bh zEl9Nz?QsI#@Hqq7Opj!P|J|O{MKKx#HahqSG z|0%+6Nq_&XDh>!cBBZlKx;i3E_BA z2=bGX77Q*MSY>Zk(F*GGzZk~>!>whsMiR+QWnaZI3n}fHE6@tj5}kF$<%!z?LQc!} ztfG7snONXs05j1UKSm}a+Arjc;{eawc;`Zt1Ad|!hZ!uQqD9&O;g5<2Mqj!21cP_8 z+n>P06QW769f_AR^_D}Ra!}Y<^wwVP=pmURfHi@Fg4h-(nl~#Fz_Rw$M>&fdqwV6gWnaydn`R76hu``u-Ibq2@1ruQd*5VWeM}vN~fm@l?(O^Y(gQUXwn`55X7UHa$kbnRWl3AGH5ZMzxix3RRs7t^&Oe1SfE;+|)lyH+;`a$YqaEz!D&^ATVqt$gc zj8MWkNkjDx9Se+R+9robVGFt^jZ?S9d9dNtkancJU_)d{&+ulJZ>qs{aPldhC?wjq z1b&e!(9Ow4!&XSv-=_`#*d*O?s<*Ns`DR@H7kh6VRY%kHiK0Ohf?JRTcZc8vcXti$ z?oMzg1b2tv?k<7g?r?B-mxD~_d7pWo_nS2{YwlY2{&nZ9)u+0vtE;Pa?fu)kc9$%C z&<164KB)@hFbS7JG4+8}h41@x#8CBLpURYiCr$!xH#9)z&ouZTCW%e7t z1l!6gfbYw;rX${w9mQwJ@*RB0d-wPhxdqQ}J^uN$QK8>{E{3ZQ+pQt`L4rRzsX{Yg zd=dUd7YmJbQU7E-oml3AB!0~^Ys{kU+_sbUW?kDg;auv?L(lJ|2N8N!dCCB!)wP%coPvv6tpl|vVw7T>lJyUDnrvbXF$HL8_HCWvrq%)X9 zx$-)&(%M_J;zK1q4p>EcfBWXl?;QTU3+NacUd*u(DsT&7I=ROwF~wtV6d&h>GV|&k zyswYIXWGpHh@M8e%Xjdu5P`0Zx6=?k`lz^<%fOevY|Ok1bdAu6m3 z`;M7LIdfi*JTu?ZY8QwwG*O16qX)8Z z?xCHaW~hAUBe8sD&iJNTH5wLegKXcW5^R^u2|a6G1b-EMyQ_M`)L3u|*Cf;?%R_ES z4e6-JC;w)gcF0WYRbY!|3U^$bdf955rL3c7&+qJre81SlTJ-*{P2?^8_YEifTPGXO ztpvxId0O8B+-3MQzIhj~hv8Bg)rY1A!&dLoai?b&ll5h(%~xcXV`7wF9~Lh#(tJ^` zHt?s#LdE88o|kJ>@@bwyA-J`L_im59m`vzpwy1O7Y5mf>R|C7(ex+Nud;)xHEk{Wq ztkPA~`BtiLb$RmyFpYglUowg??%(IS9Ca+GoYn6ReKEdw`0XT~rh&p@u#|H4ODWKT z)gve%ILLQy>Ux>vipmr$CIO-^u-`b|Y3EW*q;W%!)O7S1&%W7JyF$9mEG+(7dpFTM z0Cvc*%RV$M{zWJISl`~mIR>j@alrJFp3?b}%xOR0(Zl^aoP35SnK2`cVX+y!kAX9AKJ4QBcR^x_6Fk z`viwu?XVz`<*6u=_b~!9rW;{421iATxq(-k%m;^FGymRl70!1d)oV~IMKRab>e9_! z?KZl`DbZUd5${3ys73g##}Ja1a3jo9$oRla?9V^#qHHfL7mIqC}Icj+b}EPh_gQH)kJr^1eIBs>#9f&NJS~ z?cGc19r)^++A9`t$LYlzf&w~b4yoO>VGXIJuu5Fy5wGzkxa@Ts1Aln2-#Z^K2;;x{ zFt##OzH4{HKluR!*E;_Jgx@y4A?Db0(>k`1*Q_xfT-9K={dU%Sfr z1Iak9>+fpUg>|mpjjK||^x9oJ{m%vtS-e6&$D<$u8Pl)&nT`@Nc!hAH@4IcigV#p- z(mv+@%#eibydBKAU4}pSN$f^l=yR7e^ewGy3YtD4tr6nr4#q8g^3}?vJP7~caLM=DG z+T4xVu+(LEWFH)zw`~uy!qlumG-96-*gB-KsF$nK*t(iaTZ|hFfPOak9)6hie%-9) z!%BcAN4t6lviRiMNO^p%K;hu(Ekny0+sZ+61Ob~N9VYwH?c9m2&&b)gJ6wa&F*x|&dKw()CTHz}Ik+9kfcm$@`?p7Mpr8!aMt+;KJbTN>xgNy;&$B4#t#k!xO3>w08HjPxd{k>}Siq!}Et?VR=G!3fgIg!csHYHR3llN4NXNF8APJ{MK_~cpp zF6LIM`00K(k<)C73b}DW`zN0v=$gE4aEW7p+uY3!mI-cBB{%mf%b12In1QF&sfT=w zf!oImjB3k3Nov!g8+=T)KYL$YAonHt>n*!=OU&5P-$A&=$i$|jF5 zWuM8oTvW;XIC-Pv2{;!#70~kMvx)?v@Q-CBzUOswf6$@$@(y(T17N;_j2~oGP!Eb7OfS#M-Be8oK zh0HYvf58~d*_7sBS>mAddH!S)Rf_?u9!{$N&`GkDXUhDlt9kbj>4^!U;*&sYU3z0l zog3}ZdX$T~`>T7$*x;Mid8F`8-wek`|INE6E(+UIRR+qJno7qhpa!WF91mvx?+)CL zN+aYL7~=FAyv^fU@BJKXdt6eWu{nE2*&A4vj_>G!nV`sBeoQe!b|ug^Pc zFQ*rsx-VB`x_m~DG{L%SGwQxs4oIgK)$7b^uFd?{ov)X2F$7P~jY+=uMfdk7zMb*s z=fw%vzuS4B=%0xg)G9v$iCBOCl?085?`DdyV^2(a>-zh$@G_L)rcj<9<=8m=+_RV9 z*&cdR#+eT8o~bwAL_?Q7p8yyC(Um2qHqpL|x8L%O&``(`^lAl)U8~P^*x2~4SGM)H zEib>%K%zLQf8QzrzC}cZTv@X2>6I5gHEGgZ*w=%8E1cpykyd4uNg>S)_g*C&xujo` zbJ}pmsX>w3SM|Xq_WJeiy%**!M`}c9Xruo@j^!N>39WzMu~J~OaIG4U&}(n_`Mz^f z%B9-MqnThpLGcs_IEqk*3zN2jVlz&^^Zz!8PODMw9R4ft{chY@<$6<5f_liIacoch zXj`+e6--O=am9#J=ktS1+xEMfU3KaW|sC;j@sVO;z` zJnXZv&T-+-zyFJngC&3M#vlg2X1z%!aXLt;In6qMw-rd9P=5ATCI{I`(?My=eWlOD z5u7$dieUPG1z!@Md&C!fR+;@*9BhDM%;@ZsNATMGX10;$(2&KhIISpAf9Fv>Afqu< zf$g~xU-04Dp^0&oqr3#I=1K?4^TV3X)?W|!Z?OaEqrF3JJ-1GpsH9d-qZ)xa*mrUe zGH6d1mUv7>aLQH(17!kk@*Ws>+KE!nVcVe3U`wDYLF;ZXy`Tv8Wcj|H?3^S4+>%Pf z$LI49gUt`$>PuW%09xHj>TG|?E6plBdZ-;HdubeCc)i*gW{{Ibn$_b=`hK(6?&a`M z{(6zZlyu|*vOK9^Z{D1BgwPrfdL?`30|#Ub+hdA7wPkyiR~ci=z@~Ri5_r0PU%#&H zKI71=$)iZ|t$Y3rV;~m#YL9n^=Hbr8krbVp6@35-YI>^NXZAZh$E@seHVCVF%$5kS zQ@y6WN4wW)dw?+Xdu%GTPMWm_wYJqsE*J4m@UfKcGS$-3XWYWhpUu1 z+V$5TgW2`FkiC4>rQlLe3|j<=IgYQk8nL%{uH;XQcnU8D$owvJ66f4F<)jCC75xzi z=8_SZRVxsF8^fcwS+Sw-T74aa@9cO&dF15xxew^j;l0kcghI+s6%dhu$Sp}{?uaZ? ztT3vP{AlkOM%5SgOBsQ76_#_Npg3T+blkkfBPwNP*0Wp(O-ABv_* zO};C;EmNMVi$SuW3%$ezHxEj7;<;m)^Qsc*%3!D4*jCVwMBCmHT#!-+1gfrTMn00E}Kz&ZkcCEI?#goVbb_$ z&Gbyy_+v(9q03ID?KNvX&74afbaBSMxdog@c-q1f4YSP1)fI=AYCbGWgoZsn;pjka z@-8ng-cPK&~*`C`36A4kNfsy577q+jV3MA~TlBP&USVE{iyaANjE>47KO*?!- z8dTcc0K0X})sj<~Ekk1-{`C){#@J;Q%NPz$2W)?f{ITaDzUY)n++9B0l1VZ99{H%- z@HFIEvzDgPdxu7;KM|M_Km-oH8O8Sw_vQo)U(=reZ=3QI+7FWX+3O|FedYpqyAR-P zB7nD90p6CZ5eDHRn=Wf}cssT^T=8I#}eDbNT`UBy(Qx%CNU`D8C|H`q zU*Qla*oeP26&d?*gyvYF5mghzRiL4)?LW`q2CW%+mT7;DzzzRM=>u$)GzrhPSP-eO z2-zQYj8D={8uv9cZ>f7(MRASPTy32BlT-#6Go0wacofARRjA3F#MLV{p00&P{hXi# zosI+%pG?yF$7aR8X3C&3?t6P_=~;EWpOW;lOe&8Kh9v-3+5%iT3UH+%)}q@}dKyA> z0UWw`87sO&nI3+I0V4k3v<>@qnsF)10I=fVsP&JsYrP>PeqQ{c*9-Zz0a8a(at*kM z5m@BK=Fr!UZ=y(sFN7w8TM4JyFPbS5EvK!e&k>%bdcN^0x0Gcy3EZVt5As)k9br^a z&5QM{_c6_M4R!N8T0FDBG4uBkJA{RjkA|7`phgPIKQ5Mgm4}8!?tk``gk;W*@l4E_ zPSjI>J>sA$KC>h?`sYOIdk?v;9541bIOHBSOx_#eDC(bts^yB=5kqv(&~O(tBKQ## zqZOcebGLN0B7QH=YO%Y|R0X)r0}@nGA9xW8SQYP_jAP<$OcthRKZQ0bh>hQG7D*;u zdUT+vK}I3f&gEn$vBFpQY~LX;9xQn$Hgj5a|2 zQQ^I#hJZjs%*0RqY-JP6Pd&u(y0hEr+K8|pMR-`Uv*jNO-vlmx(k^2`?7#};q`QHF zjZJgs89!wCRawQ?fS2P6hB89Ip{Q|;go%rMMJ-?r_(PT0e6gH((bG(mjp-589AHnK zyx7bN&6;hiNj*6h6iOMA_cVNXwbx!E9JL+np9DD-Q>W+Nlw3-w=Ktte5#Qlix&MG- z_2ej_@0B9LuFJn?0%dg24TDZI8c1+753|o4j9}8B&5Nr+7KTES!0Ui;t$}&zUcl1P z2$Q^XL%6kNyo1wbp6F5lyAi{l&>k{1QNMJyJiIkXbLgqhjK zET*A5+7|+v4a|af{By8AmU-l0ao9D>kJ8vx%UcpxXy*K+cF2&oWNm5wUS3b6mLRW1 z?GP)U#xjPt!RQ)~_mNLibRfh+EIb4+r={&e4r|uUVZ}1g;*y-FCr6YLkL?R~G@D>` z{99uklE6{l=t+A}vfe41;AJCz9&|&w0rZMm^~RD`)OY`N*#ihdN&-R4JSPlWS4p^Y zfdk5~XYtVj5`=1V2Zr)3>@;HjkdV0V18dy!9F!A=QMl$scS6SEM ziE9L$QdO~nw2Y-r1QTIb(lvg7oRaL{!XyhYDp76;UCgFsU9taDv+C=l9q|w?S zc8f8GO+$t7ai(YD8GNHmR~6c?aVl5ATJ7D(WD=8_AA*@29I9`?5==}^W4B13?Me|< zX0!9E?u$a<$o#d1$3Tk9zDd4`w-!AX+?CpbfUO#bK&$#Qs@srE9@!XrSrv*i&I`u8 zSN(NfVp-q)aW$dq{(5tK=)2tBMIGNmTkeCC|M*bx70Q~3T9S-UWW~?}ooJFC{gfsOXfMNN~=ZxElc|KIBns z-d@u5+jDg#ehwjdl$hD^ZxUerhL`G+Bjj~W(1ssB6dl;>rW0PA{36upu^MJ2Nn%`P zj`~2x9K$S_^jV`UMK3IF0M9y}RCsQ`B3~ni)k8EO-qy7=8@smUV{pUAma@=sJf$R! zRGbd^Iq#p_+&LK`77SZVQ9|^PkykZ!{iE&%T%Qurq|dAR0lUFLMjSwva{yTc0A!K9 zmk{Kx1(4-3yyL7Jd>Y7J1f4T_AZ+Hy^IlW0$V8ti^#XrjtNQl?vhQ&ZAfae3nR+(jl3pm0v=_^H!y5D z3nG8TO_&E&K(nq*VK)3Ob8d2!e4OqO#3C%9r3grRN#pcGS5mvBl8@)a6`|^Sb7`BU z(vj9oqC=xTE5=QUht-^y&#FzS-?4{_l8!O|WJcm*G(DNcL9LcXTI*jDQ1O=tKTNDs zT6J%_;3QnQ-}}*X&m3XZ<|8`>^Lr`)fm}5efqSkpY{D2BebkB*{npATfs8NmH1S+5 zyY+%f#*2IwthVat4Yx&mA(S*^%wv+-X7u7XyxpOupR>BEVRi(Ewe;8_eX7OHiwEPz zklxUMEvvKc_#mU5__V>xe98iU2cx zOACe%q`uFi+=?4x&f|dawJoWD&1VdK8nrt9tA7ZaNl#>grJ#dGPas3uC=8dDxR@h*RY@q7&zW=p>VwPL*uV$ zE8_5*#6}H_H>a$tdoX_MlVtfg@W?jVEUo`3<-|lVQ>Ki$FNA4A_Z1PDm4|oB{AkDX z-pH0{n8KZBH||-<@x~D>!H1ix%qG;N#wPSxnGMp$i#gD3GtQ5L58-@_LI@s?55Z|G z4g$Ee+lv$6;KS{qwb+E_M+qNq6dQ$1*^4)3y;81isd0a!*~dCAH5@rIJ!^Tpt6-%N z?_;5*Y(aRT`pAJ27*RdayJeuppOCeq;CSDAqHqOl1Ek=X4bI#BSdm(Y#pNI~J;Ko6 z3tSd%YfrO^hLskYOXEx%#r01y6^o4u#XH5sB+6XoEDgFzZ^c}wPh*%z z0n>~Mi{rlvQV?3C=4zvV{}T(C6)`P^2q^cQ?1P-fUI=%o#!t(C-&QN(7m`X2d(mDfkxhzq^Yh`}#dF5XZ#T>sSA`!`MmiBA z7*Y4=Zl03l-lR#@%@a-SbrJWgPb`6T@y~9rF4B>i-bV5)> zsIzlcXtF;NQD;LmI^Ta^HYXrFZ+M4t-tmsefw#OD8boEu7cT%wNcktI7E;Ub6}c_; z@p%azpRy9icUNH`2xCsH{L+FwYYgdFlotwLMaGM+x2101Q2T}_jaG!eEAXnC9MYfI zqtv-;WrqsulU;*-7~QkDS5OJs)m3sUSJRAy;!Rb7Y;=hTW$7mH<Qfit;6yZb&WQYvm{P+(u z!b>?uyQ!`?h_bY%c$?0;qWmcABZir|4owcLhQ>T1jdxj@<>;s5&=?DvczQ2oEo6Nu zCuRJGkyMi%+lZ*d_QJss{IgB_C<=Pq$oZPK{?5HVX-Zmxx%XrqWt`Gs=|EURVpe%!B+lJ7(35Ys%txsRD|=}W3Dc6w0I6! z3AG;lya)^%tv!OcD@yURkz)xO^I1dn&^OAA-eVF}L@orwbp-4x^Qwvmpt%E9XSSS1 z1pId{{2L>|@XOERsT}gVHf6+L1uxYTAcEfiSn^ESLvklYpA{WI95pfwF0K|fEjWN# z)4lGVe5jTz4S^LuYSs+g&wlr5M^n42FMFoV4|R45FO;5{Zh8qy8d>%TlbDw>-x|X1 zQqY>AtM6mI0>W|NWMiKznpa(2Jc`OGsgT9EQqsIGb*_bPq6F2r+SUA*Pc2g$q>{5a z9LQCZicE>`%$Q31UdAUC#|XDFSuaC6EW3AXBF?%Re!2R2B2l(^dP-+(W(&7=z@Jy$ zNADl zMv_FDAtlPCLjp}}PL5Mp0O1);`zyb|&d!2to+VGdYpQwO-3=n_>9*7MY<`X6a(r_ODnAKJ>m@m_qZzYY#YvL;0_61ekONnWZZ!oCOnbpzJpZ~(UBZVQc?&XLKvIjYF#Re}*^)~DYPFG(8; z=g!zXD(|Y#Nt%`{`CLCLMSx@nQr5YShsDOZN(Q7%EX(<(^KJ=ZOMBAb$ER3X$!gJHsaygN! zUtxx0q{kYfb7+-y5cOtireaFUfq;qy<8ujMk}OgWvFTI|zb`aajWk)ZTx?tUHhfSJ zZoBemKlt2GF8}RRD+g+|Q81`Bh7gg3zYq3C9>+SLnioUVbtbutH4=Ws!~R>Qhdotr zqpr4~ih=ndcFzj&eA5KbrNslfv<^U*Hd%xnMdi#UK&_jh2r*y3BnF}aWDj=4=1g^@C>nh>$O|=!d~5C#E%uf z$DHT_hx~WACd_R^ZmexcTb)seGo8`u48%);Ml4i6tqAz8c48DKn%@KcUsj)5?Abdf z9pdfY=4?&UK5MBp7{&go>-%A9Wd3smR?{MvZXqYw4Wol;IFZFTJ>aO$e`^Ne5T=UIt7|5bR0 zN@Ke`iWSWa^a|3=`AxZRV2^>}4&4V0_bWKnXyO%h_bV~gXhx8_dz|3&{m&o6-xAQx z!gQ`ER6$R%3AIg$8kZxqC^{BZWeLuO4|Fv14*E=iWMfvWQZ+^HK_QL#8qK81Mrb2r zL)DViwGL%s$7LUo(70*DwEsE*vdJ^v2^Fv)W7_S)`?awHgVD=PbEZ&xS#fmxEZ=w* z(&EiOdjf8@8UKWDD^_)st^U7cnd-|iHgJ(Oy4;%g4K&Zou#2>xMIS6JXA(>nz(aV6tS>($|RX>GZpHd?7N@ z^F?G>Lhy!7sf_d&NLtITB}9B;#`xD$y?@ zrn&7HIiym#`PZxtqyaRCm;!KG8Jr z_c{uFHtge@iM;;oUK76>duQyr?!CZhyXEa>zBdLwf7cOpXUySEHr@L^gWuOPM@G^l zkK+9jmN{QOsUhs%_BV28jjpHjxW6pkxb-&HiV_XzOx}uIqOU8+G^xll@th!-?7DZ! zX;!}kVaBkys*UaR@$gN94xra`N4kHFf^>Lkb;l*zTQvhWo7v6!=zMNZOWbpMWPli0 zGV!yD{gS}yY-{E445(`QuQPIK@zLSg?3nEMq!vXd8lt7kb*^DQ+@#uATHSx%k`hjR zUTtZ!m&clIVwRKid`@jcc&{3dKsNUip|!vpJ=cl~eZ)#B44h@;!r~aoK;pVjisIW^ zJ_Y!h4j>7W30yW-k_r638oDe5INGj=Se=Z#gKT8twi<5cI92Qe;kzQlAKM#e@V}`I z7>IfqgPg>&s6}!@#)bP$khgW2p#-m1BCL$)|KJo4xYQcUr~#K+Q@cvM$Ob#Ut4KLS zv%RZ&mm^j<8JsmOlxLRW+fpdQ)|lx9GSN@5TN_UMy{sf#K^<;9gYe%tpiE;0Vd#Mc zoknKfBT-u7vSEyqG3M2zREt!Ga+W|?;C~&M9NegDe_t!S5w9YJgIsZi8qu9l#nJ@0 zM`#J>+&0j<-Do2$y*znJTLiz#tOg>L4#Hs3%=8gc`If$ff$z>c0y8!F zXmg-fHSD=ngqExEmSkrq`tRxs4>7GPgBv{A>Ih16P9**nsJ~5ETvq%@GlV6iQPhC5 zl!*a6fwN@AR99?Zwic1|td4v#U|_~j6KE6u-!FU>|BBCK|$XMuAf0;4Iw&(O5#uz)Sz!1&aB1 zX`_ElxX=gJ%vxDHE~yP=0ja^d$U(1@HpnJ+ZSBbohKxVfp9dWI-;lU6IAX5;ajci_ zi;}eerfyLs3awRO_W%C5jtPNXCZoN)-w)nUQ)E8)wDA3s^T#?OM4%e*JN8kg^dBR! zYy0}w#7d74BiOvr1_Fd@d?U5iRitQo^G?^#I(f4QDHj#P9qpsMT@*7dc}7^rC0)h_Z^mbL?!y|gLvQ3F zBgAjtc3vu3ulOBJ3hqZquZ>=KCJQ}B@#or2wy!)Ym3uoW-4c_26EKL{&rS*aG)tZ4 zaU-y8_->+qlSk9eBZ@c#W{QiC>!r&~yj{fw^XM9n!6O2*`??O>BZyq?(|1DTBZbeH z-{LH{ZYBbJP$k>iD00jphR>S@7opm> zZGRbu(JCMBsmx?sS0K?v%+*;ONV86&h8*juRpnmS$k!$RWEWqX#8lk~u3|^zwc+Y+ z#CEjXx)a;i$M575jF_0ywa{GYXNZx%vUoa#FZXY_RYcce14+r0#*0>R+%(oFrLwC4 zI}p_IF0V*gFQmCN5!ndXax)S#qs(UZ3E>rKC2_nP%EeRLmB4M(tL6CElgixPN6q%F zamLm^UdFg5C5k%sH9)#!daV8j_b#@g!S^(<-RD4hYm2l`6fwzf)LSCZbKeSQV^@A? z^>=fo6`Wy@u`OH>luR-df%es3F+3l7X%%vHC=MdZ4%+!3?6;z!-H-juK=mj$ z*sW6uoCOGA4&nT{>I3@~+^jf-aHT&^!VITTvTY-w%DnqSKZ22}SoqHIp4cuD6pX7_ahgFXbm><6*i6G4o z>DO|b{XOy94XF|>clHJgM8-hX7lky`C;ssoO}7B%kw>qm6k|^G4OTfjNZ4B4kI5au zc87OHv?)62oIb9hIY@I0y>|OMdxJa+h#7^$=2tHsHYuvO$5sVxx&5)r)hnALI!zfF zx=PtNs`rDROMAv&&R-Y!-uceWg5%ky zc-=_}3N}Qr$N7cdnf{{Ll*QheEYk+JGMo&1#}gS;bUQacpYK)g&$+aqpT}kSEHUW9 zAUDc)l#0I!6fKu;%PmnL7a+thu(Cjhrnyy<(z}Uqcm;=@Ly}r#yMGjzfR{a5;osn8 zde;FPsf!f&R`ZpD>Mb97rrl9RV~bPwlaL?9pMX4VdXoM62o9)MI&K#n4!>N zqhaYt^Av@iTsu*H>AOga6dXJjS~PR%{y?QP=gTQ`=iI7k{Lo%Jxs(CCq)nzMaQP9w znz2Td(p8x>1nt}8ulm+0RR-;;@3q+{CWm&J^+$tsIM?AMtn75E7jCRce`H)wppucx zMEh-s4#`UKBr0!}%B9-FYO;PQqqKN4x+&_jRc#cch#0c4P%y%6@FwCz?ze7F1Jrce zrl1~AgAam2-G+l40y2SVl7zr_PSQTZ-v_yJGK|DuYkn+$Uxf4@R7K6U=Yrgm{A4vm z^4fcJ^ZvMmvo{bkigzlz*eFc{O=KSE_l-wjNbLy|~m{3*@4M5!BYVsX7U zp+EXd>a33&&FO1r89UcR%I;RH`pHIF)NIG?;UhK=c%j%l?|HG|Z3*o%5B8IHN0RY4 z+GGqhC(xH_FQ`1dxhXAu>n;Dw_>O{?;_)$TP49TvvtqpH!p1_~@^}4_POQ%3<*(V> z#r7bE)0-pgBtCEFcIwk;qLoLz7BHxL4Y1*ea#vf$-sHGFy__|H5fnN*%AdG;->gJJO8#{$!^F*q?vEG=VGHhmi_U37^ zeePY%!#-OK+1-!3EWMY9omU7MX7cs_>4-+w{}|Dz>~3dF%%Co3U}0?Ngvg-eY~b`) zjD)qmsWBphnz@ma88I_62PYzfxUspZnG^A6Hb!2O(Q)J6juL8{k1i22pb>Cu0X<22m@0Cu3n_Lt7)@ z9n!`&roc;BSvgslnEuNE%H!2nN0pn5`-^e@Y8LL=TJBnwBU!{K=m1UD2uRXPg8G8> zq#%)F#d6F(+j>dEa>4qUdd+&QpQ|lUr>0s+s<0TH*1n|4j{Ez7p)UV%s^hr(8hRoBHs_u<7dIrt|6hK7(_ah?w}6qOl!lQ^ z?HQJPt9W4Fp1{&zWHfG{7m{7*E5KM+p+U7KzoH2*vMum3~#shg7) zpcVYIVdu@hu<#0uKhLhmQ~W>A=>Ow#{@?8XH;wpziSxfCj!HpYL#BGW#pug3k#X(f zf@O{?-~D>8-qX`!baeCr(t~Y^H2E#sz3sn6PNkr&<>2PzwTx z?q^ieJu}B){?Sx^*RdYVVYO$QGdO6wpl{yi-68Y3j>{7zOZu~0>}9@Ww+>vji^nZ{ zx_BHW{b{ys1fFzG;r~LGk725qv4ci7EgNGcETTImE6KQ>ug^pVl{9M|-f*HBuJ$&u z*wL-m6FL105#fffFEJg=cl|jk_06qJ&X>mlaE72LEB4mQu%cjiSb+o^KzY!2a zMzX|dD&w)UQ?7s|6#Xxd10ZJBbB+q2KuKmpSy{FD<(`$$EpmT+K1M|sm z>0KkG>Dd1MLiK5Z>)yc4b z(Ez|B?>q3?t3FWq!MUpa22Z$kbZH9Ny3veU#>U?prgJ9?v3O>9_-XWQ>r-vPXbxkX zmQ&oeo%59(`Smw_=^99v72KwC{&RDm+4PSRPu$0kZWhW_D>aokfLWZ)rh`KIw$jr7 zwCGy7*Jg2Bk+TnYm%AE!HY$ei(e3&{Z>an#m&!5vgSjlX8>4XP*w`3dTBB>b5H*KT zsl|N7;>6m#Os)Pijr$Q5s9cp+3-?9M@rW)WU@h6~-)LIOXTjxVbhy1Z$bZ0~Z71e? zW~r80uGOH1f}5sgdV#I^_J>)*pb^%pi!G>tA=AScAlXZYQ>v~r&16aEe-Nb3Wi)u( zGZtvoG&&1TpBDPo72Ij7I!h~*F8@hsQbQETgy>iO9yX>!Ns zr^gkpaY82h`3hcL#SLMr{Y5@J`m-t?rnH=|M%kIh8t(WG8_2veR zWB3##8_~)i)Ba&E>~X$YCJn5TkVtQz-ok~5L*3~O67)m*ak~0@q;ij)IW4R`*?+aN z%?rlsR74v11%4Lb0@pE(xE_wwj`46~8c(n>Hy76-HXR+$Y+L1u*QT)6Y1P~udQ_Cm zGcU?Yr*<9Mzw{yS=7g&k@T>cvh~rWJ7_GM`GJe*R;mbtHq@hL8-667fRuA1)YFdnq z*GB!#k*@3*kb6j$Mv~ScW|B_pX>-zL^kAA$2%c24ZLW&1aB0Qf{qC4XGS7Gq>WB(GKr8ndaY3`uwGCh*Ko(w-kfTX%T~>+peH{>$}1oS$1_KE=#>5*P<$?o;y zXz1YEOQfj+u8ev1q#`qa!UfPQ*^|m+E8y1(vojhD|EIeLpZ;Z4IQ!V)2 zD&=TGXJ&n3`QblH0kW{P?7U62C4UX}y_lg%OO5W+RV%S#_gpSt8!dMM#Po4LFNVhX z5-m@qCRN9+y8vigV{NHA>L4=}jelg^)_SqcTm7bKJ3y*btvsy#r$ID(<4E$$?27;1 zn8w20^QMDjr0U=yDvf46pb-G3we7fYsic3j@9p;N1W$DHKUH7HgsK*y|J&dyQ9~rE zP33ZTncm1Gs%-&arFkBCHY&q?{6~m?Sz~RL!HVx%%@lttfP33DNTz?_ERe%s;ob%X z-~D!5co(0y(8c3o+GQCMj8=|^_s%7uH8plx@=O(Am_LQOX;-Dyo1L4}9V!wooeuj) zHfSnsJlX+i+a@|!gfEMLl(_Hl@0CeZwzbv&h69va_)clC z>g=w!oter>#@b7g;XpL@Lz$T~*FW~BE()ZWtLvnpb-FN zjW&y!%MoWkB6d4oUwmD_7m%3cAm3MhhGsLHm{$1R4>nKvmX4i0#rWKgf6$39Z7}_* zaln`F4|(~0K-h(RSEbm@DRHZ7SA`_C6-^cK&f%)iS^uV?N-h8c0K$6rhDx=Nu|dGdJ1(B8!PurT>Yt(*+R)fysL12=i1NuO_1y+8TUThYS8- zVO)yCQ2wIjyw(0JE&#lVcTvLsU`q)`mXC+iZc?S}%j(N!u^KyD!eg=uP^LSl1!I;< zbMuF@Bqota)m1*QQnA?$$P-*Bo4IQJm8*02hxIau@~kcdpP%aT_iX-!8pfIxqfE?X z$vK-YWMLI`xa!|h2$8Eo1t{U^q=7O6ky3B)yGX9H%@vWePFsyrv1g3(%(bfGfvan! zIzZ(0UbZOySTO8;BN?^lc3TwfyrzomY2FV7bmlSIZ_Dw#?_7QCju$R;GnDG^?*CC{ zga9x7xH}&kVbFU%C?adeprVkh^YA#iYNq*HE>>b5sWc1Pe^5Q#fJrn@z^g9@Nl%WA z2qpkJ0OY%|km~vb06jgRtz*S18mv7@(nb^A*e5O4(f{3d@`%5~1_M^tA8MXR^oW)I z3y_{2!*E;=a)hFqvs9@ycT^G-b7yC-IwnCc8X!nxu~I+^)}AwnoWO5NJFHgJgymwi zXF(4qzEl^nH2)?4aPYZ6Z}QT?VCRA>I9omjcmtqY7(U$X5jy}{S(-c!Yz`=yzf7U( z+T|Yiq5bF#dV_VmQZyMX2;v9zU{Maq4L{cUf8c-t6YEaK1Doa#ZKypnjafSF_lx9>ARym8r4mB@ctKGT4MD)jyK(X>`Ah zLHbYI71&OzWlHaES7!QrJdyaBqmqZcb|Y}nv1nL#m;eZ*UW%t7h6%kGqh)P zv7&u9%^f8tp35ic0=MaclP;?j)tf3+DyfZ zzw7mmyX9n^=tcd~`>+(SNz}Amtd|VJ&*an>&2FX#GHJ`)a#e`_F|W(NHz8Y3LTYFUiiBV&gx2)pG*OkEk zgF&H69GYZWQ&lWS>>cM8hK5QGb59OBr+&3!(q1RCdV2&D4%g~2e}g|?bAw3Zs@A>u zWHbRcVEd?fJ&WYd#*&Px>9`BU;ye5cbm39dF)eKPTI{+B%x#xa?-J7F(#@m@^jA}C7 z;)h|J8Fj3T1re1pGKvC%!T=)Gf+z~8m=L;x3W5-%ccKm|AWa37Dk4%sfY3rOYADh~ z2)%=pP(ts4XD4^!ne+VD^W}Y?_rtr^@xz>Tk}KD}``*93cY>nT={JtnKwfQRz6GG2 z6$J+saMG1{C3@nR_|GzI!*jICb2K>?)l~$^Se75%e)+;PS?*P5ixSLNzQR%VoEP`7eSFeI}A}M zQvP#AhLDis(+Ek6Qld$D^fK8tR@Hs#M`-q)j8?eA;|RbuHU63GD_WkTIa1Pr?W6wfYmYcnp2KUU=zJeXHQnwL4^Liu>=I zburbJ<)Q7uX;2~zMY$8(jkNe3gX1Xy^T)kGlv_8LB_Y7jK z%Sp?T!hpRK-7SLkYOFFqIdiLE>fyPCX!_?1_!XL7$jV3>^<^94hO6rq-3={hTEC@?K@;Z!b z`A$t`X?sRGDp%E;fa;KP_%D;1Y=YcNaqRA&IP(^{`gVJVz;^YXug_A^-L-%b2+EC2h8s!e=?7( z#5W(Mp!>#X}Xkjl#Mct#U_FiXtYPQ;XkL-ci$cbFNQ{`?1&|yKUX{ z(ejMHuXDXQ#Ncv&UeAa9gI4^-VRELuy=9s%1@Hf5ab6F@RPfo^^Um6x5i9kLl^NkX z`A3$oizRkAm%Fblc>Zlw{i5Uct1_c0vTy2Fda=REW(W7AF*8)@${&m0f2c4@K!}aL z1I3@rD02hN(4~ONz@UXdEvxOwve2CJ{cm=4GTT)Ho89qgdVc$*J!-_8xtz(t|Ha%HhS%rcnR=4DuDDvA2Q}V44{6%{WJqF0owF`B z>m@0WYh{Rw5H%=+z+Q-Q%~q5nC^(amg9BnO4U^B`e~)NSD^F})P<&Q>x23D z0EM^Q;V)N21|i}Z#Ouyf*+b+KcN;J-weN=Dsq19_Zx8Ix^hP@e=^Uv6K3Q6Bqtr=sH%&KscBciXEFn=;#4Czs&m~%0)z@{&0?qrL!s{= zv~a(==EaDSr5VJ>wEtpcs|p@6FsM9p%1fJ**Ie`kTCUqgruD+KVZ!TIp&HOMY6sQj zMh^z3LT{?mrorGniUba1nw$i!FlY;q@|PIOl9O{R&L>%oRe!QV$v6zA7`VPv{VyZ< zRaSS0QpQC76%VJ+bKQJKjye+$qf%s0U`>{Kj!^KO#F`d=dgW+mCkjQ_^om&Cco&pB z@*iV*d;ZC*%Ga3wyqSL`r}v#1YCi!=;3_`%!!!jn%Jc=8_-&G&#JsSs{rK!@NSL3j z=8TF*EwKYT_xua5etK^wtT83csLM=D8d8lsXP|%)FB*N6>N!3iW}Dx7KumThO7d>q zL}8`wLkJ^A`O8fMr|t*nSYp=IY{c_3$2V)I>Pmt|#d}QYONY;C;KBTxnmhpdZS|!v z5|CI+sd&70eNsloO#jm-+?s{yPJ91NLxZ^Pcx$2KlmTalOI6?TSNEFNK67uws~)%Q z-54q@E&YSyGq9bIWRQRFd~eNaPVcR*&vIAxDPb0=aUF{P7_5`bg1HHdIyGlP&x_~6|0e-Jc^&9d${WJ^S)960r06|{!US!?H1oO}h4r0tva z$?%%N!Uie{TcibsL*a>KSXZvCW0&O^Ak*dhR^JU>P?s{*F5<1=XBy)$!Mub#F&8L( ztz`KA-FZNyxB!iWy)>;#N2u#>%_z&@SeYd?Os1}ehwTM9+x!k06XM1K}r!Y=~r z8L527s8Q=`8y1=+40y`d069rtRkfUx-|fNTTl<4e#W$8AB!fA%w&vOnO+ZJD4)`Z7 zTI>I~Y%iUgke5dR2iv;9DS9rGDyN9evn`@`uhla<SJx+))O%eh8B$i(X3PM`pDgSosLP-a<+@_3UAJ;^MEwrKQ)Lc~&EE`{wybi! zHhS}IbTXzBLQ$`b4;KO2%|&KkBP4t%NRwQ$Wb5Xg|FWU82N?mDftkJ42LL&ALH!h6 z+;LnGo%!{S1a$FfmP9ClCK8S0o5#;v$DjJwXG;$eq6}Bu0?rPM?b=gZJX_DGo|nQS z)c}q|%uw~5bxQT2Kn>tIGur)BryY0rUp%~tr2w!UZ7z(E4mVm+2dr?^HodNUq;bzF z-9ng%0K%NPH_-a(RUOLjpk#mg+h&Gf=V|L^X$rT3|D`SB48ieL+`S<^TA6{S#9x-s zP=x^1$=B58@}5Xcvxlcc3m&~!III)MgK!Qu8*$qu-c2TqH#0Aj4Z$kys(v_LiR>)-~GS0|1Fjhm~IZbEvzc}EpCnGQY5s4sS4rMz;ejFU^@$CN&ar{pN{}TZ$LjBKM z{wIR}&#eFp`$lrYR4P7IY&T(TIdwfRJ#?kmxceMq$Bu(TxF<-J@A%8No6?IHeTx@o z8#GP2l~`|?%nsKRf4wQ|vD(jHUSx~Bdb4`4CfsCmf?(yX%&)>fB@k~e7& z+Otp0EBwlQ_1!03UEQ^5@pTCYZ(+(OuWcsXCz0dJWFIaOBU4uID^UYJ( zf~kvRa=$STD;HZ}vFqW*OW`e+Nv_?C@aI0e`H*XVabBG&HyKK_S{?6RvxH9dm@7i5 z@@cJ)SG{=?rwRJG67vQ~auP@&b-9Q*d|2ie%Nu^*LPD;`{ce>%p52m2t?P0gifmax zF2Mbs-a6Jz@9ZY0pw{DxiWKK-IB@HqyWGpn4F;F^yYIYGmu_YLXLGoFTICtEs9>z* zPM>3k4?lT+^0~n8pE!Q`MUCs)-VuT4-^q^;t8WPElKcMKS>+GDcCWiiJ@2)y*ZP|* zJsye}6-(8wZRmBgvW>QVxuVcaV~XM>kF3od>a96PZ6kMk>iTws-M{81KXbDB=%y}ZOaY&ql_N|r*UOiko&SMUF@s7`EN`A_)FDhOm@0 z@}fjV&clA691NETT6E5L6Z1uZetFo9P~jmc!v8d;?q|M;dy#RsDx`RQrC2=77**&p z*C@`7ys@1UcO~@jG4%Q*=X#p^%6wxgbM=)2S8YF2Bg5^GN$o0hrD|_so>smX{`dVG zG5hd(*g~nfD~JXJwlyZ}WK6!NG$v|k6)Q3ia-^34>vI9?iveEOlVNQta+!>1F;L27 zj*99bQ=`{Lq8(^mk;}oXH`E!5eC&sIU!J{84@0i0kdVAreXPWIF29>DHn$D2GXW6_ zL67wAJ!PylL#y}z>w({k+*j6?qSu!~x$(<$qwyZckvHxTJ?P8yPsVfN>(k;cI->S^@ko7==lWWr5kdrq4z{bnSzA9@EkyLK3yT-ozQp*bymYfH>)ua|?a0B3 zUC%iA*P1=)%~dDR>S2FhRyf4G6&E4lG}%)nj9#C|t~-FkHsVTi@8f#Cg~y6Ub}FwHo~(;>PWG6vK@0Ln}frrI$391O5ywjzbHDiNcZp2H$Ub7 zpecD{vw=2M$cGY_8d76)wUD_(&4KIq+qLb}C1Tzzh59!11`Ua_0?pNLi-wm+Js0`# z{43`42k}3xhS%0qG^h7zbY3~NyeNu-tRiq6``y-5OcX7;e6ysOZeHK_qcIgBA2%kA zZF+eSE9y=rQ`a3u7Fgt4dkxm;+BB#yfFszC;O}0k+k&X2C%q=RF!LRQOf*4W=nv*K zxT=$;wSD2K#WFA7he=y0-JKr0MKbTqv!!YyF-Ff*Q<2>GaH7}pruvd!-D@@|$xn9U5HpwIc;J=~l4@UsKA znEq6?2Gns#5;`VarLr;RO|_ZoPx!gyXVPC9^rt6=wnK!r((^R zYy}luK%OPhCgh7=9hBkxQj5uwb)A1O8BI6)Gz-i(e7y2!@y}E5RYa^->~mXq@J*(5 zYpXo?b&F4n_e-rP*@P9Ail!U;$Rbb3NoVOzrnML9Fm$6mW$HT|@Iz4z>=U(c0$VI~ zGnv|KVZS{4R%GpBf4TY=2PWae{~=r_ok}9}Z|B12ozRRtL*G{1xj5-8(#iY=0Ed94 zsKN3G%_lVAuMaNvx)Eoblaz}_ayVm$2rxG^6zJZCsPsja-AKIS>L6#Sv3)wuhjN79 zA;=klKkIwv>~?x_asQz7Qv zsUG$&wVL~W#ogxtlA|~_PSla9{~Mvj$ollsEpS7 z!{X@B7YAg|k`M|iP|+TF*#orm3m8gL>ug1D?3Q?cH>Ebh8GCBDwGhH`=-oN$oMWid zUpJG@|5k8YyhJTz-=3nAaqoO0{P@Bz*J=)^7ty8NiFpI`UHwlwsXs!EF0+Gqbo#xT zr>+x8yM@t|aJQM7-bUB;ug@3CHs+&-YA4vVT#I(ko{GvB-slUx*6xp8E5BYWSh=01 zXFt*>`v@V0$8@}HZXslQrwJ<7rN0{DO@WMj8zIlZU1|=499c8&%-a!1+X+Vsbz`4w zF1}p2U|Jxz`YYQ|^4->!%2w38Kq7`&y`{gtHB1)scEnqCF30h0W8M)+Q(Sj5dF#5i zUlhH0o?oqSL1Me7=>wpIwx&xZBF|Z}pf8JqKk5cQU0LA2TDXv2I5Yp|7KvKFG}mZ? zn89@Y@?7{tG08j)Gv4kfFxMqAJFi!7Maj6b{_{xH(;Y@3g$wnUz9#C%ot@u@ho-h| zrWFzq1Mf>)b*w6nm=ldrp0qA{;=(>0>8amV2fU%d<_~OgSKyHTMA0>3(v94;D23c> zOoqBTH+^KEs480Qv+e<-!B)27@!+(A>_G*)x z$-x*%nDtn*sl7GcLLBW?YV`l>&DI|lw3a9unfmh4uU!zAnpcY6vY+&^ooJ#Rw-xFM ziJap7LVTB>TD-VV3%@t?=4w2j77FjJMch;8Y2U8#jUgmnw- z2uqWp7O?fisiZHXpBzD4c1~Szm24qwDxB~@GBr+#8?P2jRhd@HO_!3vI+O`hv$UUW z%%}9Mv7Kb&lZI@2QL(J^R|t^bomZap;4L-0sO6;#cAsk&?I0^~lytY{+hTuw zjd4x>8j`q1zDTBqQrk_<()4y5IxWv~W!(ET+o3LD)Y{$?=voX{U{UIJ5dPUGUFxj3 z^3Hm^og}WCtft+b^U#)BC>y6qD=oE>a!MQe4KXKKi}f|S=c)<)(%;9m@~GfyAp9rG zv;H7_i8~kAt_r$)Ej3l&osI&@xxDg>>ESV z3M8f3%89m_>3SYlW{Q9?noN7L0vX`IzfXUB0dC%yM5m*-dc6 z4Mi)r*;4ObsF5j;O6Y>Pqi7I^xhuwUy^0&K7B%L5AjTNg=kJ3@r>GZ(M%OR>&;}+7 z7s}WUJlPp%j9Qr*gwS~V$Je?Wv?CvEkcFSwyAUFYEfxWq0tRR&s!T65;4?fdX|qus(>#5eYk z{R^LTnl~O}AMu)4oPwVM+v6hKGfu8@Pq#x+3-`Y97r&5C8Lp4o^E=bw_P*aEr18a< z^8JX27A+2E?^dJ@D?dDv$62ZnkcpIcPG5Tk&a{?~ku?bpHyr*3j$h^<$qvqe78;Rf zDDSL>`S9(&p?ZBUP#Ug9?g7@Mus5tg7AVI!k!FRz^x>ExEMSvGZqVYsk@G2=`Q3ir zvP~mek$$tVDaP3TN-NnnB);p)u90tIZ3M;DZ*;`UOT=vktKT{ibu+DXfS1Ji@x0CX zl$?j`0F&~qHN*5EJyAV}L1{o+);QQze>p1`mE45|LjC?_usiEVlISJ8L3;{Iqu2IB zfNcJ7w*Au6oF5?)+Xg*fx`=ycSu`AJAsoH><|UgC-r8uT?hn1TU_HsztIk)nXh#Gy zEuiv}df1oAR_#^C-cMfEL}3MN*ULuNN&!nfh_mVurxn;DwKXVkni`33Q}LzflYM9w z4N10XdhV-JFW5J1r(|AtCHoj9*jI(dcA6Kk0)d-RMj7v8viU>=IkEg@y>8a<-ZAv6 zqt#d07AH^>F3*2?J2~ZqlWP=ghaglr$Aa>*wyPIZw;9NI5QR*%rZO?=U6Zd3d!d zOFKA1*2IHKyi;iU-fMPZq+y61to8<>>;ADikT;+7Qu1Tn6@`#P_44zgUq@3!q)gHs zd6||wPy{kQET-k6Z37xThW+Q1B}@r*}d} ztMdbbu5uGqd_$j*&8e?tL6#X|QsaL(^Y0Tun}^sSHNR}Uif?Vu4eMZIm0pXs3oQQJ z8q@C%C*rgXP{v;eTH%x2fZh0=&v!YQjI=iF`$<2p>KOXfUJ;)PfNlMq=C!jbi3>>9 zD87V8gEOV%C4CvVoN*)INU?s7bzK|bGMvH+2cl6W)+C5YWk=idW*R1)Cbm6X~bP?WVUw#Eoqw9jj)k^xjox} zOC+5Pi0z=X*+D8==5>@*l`S%#5|9Je{}QlQMB)=H#2jeC?s0DDx-nMNnqiM*^$NQ> z1@04Qe)Ts|E~2YshI>i>ZjU$W#@s6fD`fGc1iMsLrN&aXSHTH-SD;JMp5`%Had5FI ze8T9o<7H|gQ!OQ&X5B@unHazDFt{wOA-?YK-yQKPGa(#$=zc}JGN0s!)PY2RZ5O&)Nc6mpPhM48NKXJ)F#l;=;bSuOGw0EGzHOmHcXISP zJ@72~SK5uW$U*i1m^O#W*)60I@dAkTMSoxs>pVo}HrlcePc%`~P}rB!G1V_bEz6@| zeU);YroOWDBM?w9dn5W5@qnZ*@$e`wKsAkV)5F-sZZ7du1cxctKj+31eYkS_T8RDj z=28I#9-3&~vI}O{7lEVUAr=4d6>P!0Qautgo~S117!Cl5AiGV5)MWl|4eb| zjy?M#tuu}j+@ff~ZtdiXhpPUE2&jzv1LeK7-Dv&n2kPuof_-EvATg}~ulLrAlR>&t z=Q^n=-3kS6OQtLxDL0LN{~<-*y4FPM=1bIxy_}%eIrYtl%YrR?(Wb1?QLvf5!iS0F z=dP~|hJTjAKg&Z^c5CYrKd}P7^^rXLQT`KXng^tk4-bdGk*2J&Y<}dirCVi3<8v48 zasA9CGTm1Cq`NVp>oj~FmGB*b{{q5>$z8l_XQ{-%u9zoK+cX`U7PNKrR)qy}s63b+ zB(QCEcvoS$8u9VE{bY#@1uy+#wdZwS#&;@Zluhf4rVP_rK723j1yqL;RgdV;pf>_w zl3+N_0*{lQUFHt#6@?;3;piNu;sT(yWb~0XLQ`@*LQ2ny%K{%jK5TIurZfP$2FhuA zoqE$jSr!VchR|9cY$k=rf=sWH9BFGwr~?-~-l=sPI0NKl3-zK?9QaS6)PtMA67T$k z!nG_ldPM-mJuZm>JlQM}6&2nuV2-1$b>_!fjpA$)^n!DT0$7%?l#Hz_Ej6ASObY_R z&%;+cjDQqREM;!A_);O#rPw{(ZgD9Mv%~c~@v%te%4lJ*2xXfiUY$)xkW1FWw_8LP zli?M(!(qjxIZBvlg_`eDm3goz!E(Z5ho_9C>?)o&n*7N<)|M3yz%7VBZ!^1~X4>|( z;pM{Vi|{0#RjBU+<<>d~!cX&1xht%`6a2XZ_opg#z{|C7Ma$-naX$8km2h{z%FmOz zS^VUV%oSlT)?s$sNPc&1tYgVOZY!Hp{5rngSjwpkI1ene4N5l9paNYo1|%l@n$sS?na@cd z$qEAP3={=U{%sww)Stzxj-({6r72PEl)=H8c2)xtC-V33oZ~0*S00f|x7xEKxxT98 zQ$kL(vu&(OI%j?I7LmH1Cy5TMZX(Ei4aM^;U3VWY)dfJxR*cx^yL<7?U1|#ZraMDU z)LWs7R`;}Lk6&fcdhY40rwk_9khXA-N-T-C>?%-bA*@Y4Yhy{|Ep`~U009q>8C1Hf zWY}u13f^Il-^yiid;!&)1- zL@F>wR&BZ|59TU3r_XazT648n0?F9El^d_UQUsWJQVaSvSr6V`BP9W{jFcVU07AxxPE~`z=7L(0j84dL1F05*1GYPo z6Y2DE*GG&J&9m_8IqDX5{$9dfyZ`%>4 zhW1|-UhL-|h%(;Y+RndrHVtD>TXvxmm9Jv} zkyT(xH#!y*wfe_`a*~8JiCgvM(yMmVP5(m!R z<}Si6d^n3c9g{E5r$9)6!9Y>p^|EX%z2$^2dfabJXv47VsgJ%ObOFY4MIeB;#sJ9F zIXb?M$rCLFVN$aclwL{HjGd9K)1NT*BvO7 zsGt6Uhc@`Vtawh|GXS8N@rXyrFxim0s0M->)Fryr@RA@U5y}sE&eRZD(X~P#R@E~Z zvti@irF05lH^pg@AKug&R=^VDk-T>!4O7@cbc8z`F!Po1;H9yxq;4vLVV11MTEOPy zir!&1g!aCQ!&`|PicOEk&G*-E@+(HM=%{p?JUg3+ql1-lbFr(7m7tE8NaKxr-vAEdErzj*Iqh0JTu z0Tk^PMUS`J1KO>S^4%xq>xhQ|8r$$=7KdYj$@Z-A5FkH%pV)H;yb{HEzVSEvX`;?ugdkDLS;4CtJ0?vV8bbE%JRW3^mb z?*gy_K_#iggLAua)6jmSBw5cjHx`lqTwOAANW)~^OvY881UP2g9OARuXa4=&xYssr zmQ(bYUX4t^Y|yzspX@bdWk1zNW*OPy^@fi%Te$I|V5y5mI+EP`^0V(G=t;S0ARbY1 z72aQ>q)xnWYiaL$%MBDR-j*~K{XL50LQQl)f|T;dw~Fo)6zy&AXpjz6Fsc)x!huG#y-iDcfCY{F^<LxAZ;8p)-JeW+!%^$Ipm>}K)-dM+kX6E6D0 zUH&1!>@2fhR++dF2ApIWBTwu=f9um7ZBcTLVsnPLb23x0BfVC0H`o;4n&>zp)6L-M zHeK3>D^TgE$6h7&;AZu(?T}b*90p+Mj!}{#4A8*fRH(6A>Sxd=^c)~zG1wB&s|hE~ zHp_$nLXk8D(ebPAS31!`(9Lp@WidV`36Kg5_?^cnKrw(dfz|&!)MDxMQ`()R4@XQH~NO_1(%A0r=ZqF8=!lezswi$O+==<&?9-37UV*+DX!!uWwJ1mM!!SgkI`^z;MeAJiuF98l{%Nm97!+3=9 zM@;%11~l8hWSs>F3<4!YTIGHFCC{`mMtA^jna5nNgnBIJ_x*qYCfb&~Rlq74iA#TE zum*cUoHs3+%^hYFfK}(R7g77i(7b16FR^6qr>Uqz2W0le2Q?F`>K_NB1YZnTK8B3> zSlU&ANre=&^zrvH0E98PApfm59z!RG@hQ4N2E!%GOw(a* z!ptiSS~*m1lYO!r*RqWhFch=panduWBrA5&0`{|jrGC0Gxh>yg!FoWjAxtXFZG|9- z=GX|or(@`nsL7(m>+X-Q_KuyqM3|#9KgIzXeW46V70QbL8Sm*7Rx-zC+X6FSZWe<` zWguQt$v|&<0oobnH?eM$Ju(nC2XYo58EG+7HG|B(FDUrtZiBv{3e{K&Uh0ff&o!`D z=ibg85pd%@}OVA5#{6dhb}?wGkt}VA=UUUXV9x{o$vVb1h5m^!}Zf(5~?Cfx3wK`Z3X zvf9i&;?fTm)5i(}p4MVeNego+3c%H*WY_*>k2JkG>KOr+MbThE0HBv|Brz%f3h|eU z-RGaZ_{M~$xCcb|606Mu*#||=Gjh+8gK|miGtAClfJ(Fa6*3EhrRipFqX!;o)h0ol zk|L;N2C=a*5VO=Akyw7|79gs6V^mCSZKM%HW?Tm(jYUO z2k61KxtbxyuWZ$pXRn%x3C3qxh8u4T3}=qbs0&{Yvb30c4`3RnB1U9-*WD!>DUwxZ z5IoK+VSN-LZR#8kE4Bp6Wm~rE01kt3#9d#wXl1#0J_PZQy>a91#V(7SSm85{@I zT)V&kXFx~SLJf=Fv22s_6g94M}3lv)_clE1pcM28Ns?^RF$e^p3g z(a1K4Z{3A$3p)@69>aj{S9+g~Zt|sos-cd;z4%6|`*w?TU^Wj~xWGjdEt;bMWkHQy z<`)i96?ii1e)kd#)+T7k7_djxoj%v47W`OqV{-QG&!NC^;6oURIpEjmtVYM;hI~ib z&V6`^IDCpx@o}&=iAIsaP0+~4ZJ@E{FLy#Z+Z~mrFTqFwj#*)7FSt0ARFKjqr6h{i zRal!bgU`E3nTwV)*;rCH+G%_3-}60z!a}(PbmDaUHy->Al#%yCR& z%1X+P(KTTP3YFfT(kGN8FCSFp%U~tF3`LNJ&4q=ORFDRHwinpHb3%5p#Y7XN9!7}< z-%{2XY5I``ijjVBho$=4vY89lz?Ks-nG>;J0-xkLfY4>S4*`B)xZkx&82{ZYbcuyt zv0bq7M&;Wh-*cl8D_yz|FwMNt?2ss$IS}K<9co4Oa_=|v_hWI>8WF5Qd0I(ScdZrJZv6}^?b(o){>!GXHk18}n7KW~g z{US(s7>L3a$yfI-?V|cwO9XI1zb-^ck1gJDozh(Bg)*BuELk=qa}q zJ}@Sm4~UBi2p*DiNHQD`2@06=;TF%o0Ft=!C7+UT9hq_AzWDPi(c{m=#Q(CdIBu*@ zh0)8#Reg&w$kg-WV|60~tG)LK^^wi%&yly{#u|zY7Qj{jmLjSM4A6);eSN(WLJ1jr zJm0!B9WY1F)+~#5b*6*is_mu+DmU4iEMPisIFznxGUzn=0K+n%(_!ojB1-|Ih%@#K z%oW5rVU-()48u0!e)*OH;|S7n&yxToao{=}muE-fsaZR@@Wyus>$H-5BZN;tH$ab1T zFNHx}AVEw&XL43++?bp+ko*?FW?%pe&MqUO{A3G|?xSCus^a5(=15GG(a3vwf2!KI z)M{>Okq3zb$|3iga?ZnKj*--NThterr0J=Los>ijzv2L6tS5|yaoH(%#uh~2uBiL_ z#?h~Y>R82odP#$3@gJh-hIoiPliW4oPuHHV{nu=-!mQUAb&mK8t{651VQV-P@qDF^ z_s49rEmDO6ly!hO1kOuY9B}zMA=Ugk;tUGmfo8EQ-@CsJuXZ(3LI^0TFsli3_??b| zoy_|Ut0+cwfGaj@T_yK)PH7!oS^wwPk~)jFzuE{NH61;87&2N*rbvoI^kUAtHsZ#t znL=q-T`MqjG)Ux;?AXiLd{!><2W$JZWf9{lwuLhXKc*JfqSkSyh44a**X0V|Lf6OH2;pb~4VRUk1aw6h80>znT z^|CP0i8>8!5snHg*ulkqV0varw^^$M^i#a~)fpH*9*Y93 z=sUz1uQTNNkN!pC0Rm=&^2O5*V@|NlcwxH$Rx`g#;J^PomssP(sqFgeX&mjhEnDOj71Gxw9UX|y%R~d!09gIK_%-Z zwA%Hsy!oQ_b*U~#|3d|7<^d;E0?+N*^~|S7zOHElSN!?w7Y_OC(LkL|-uE#1vHiZA zdsViXKU7w^d2{c^FDGNYr`Dnd-E7AvBL4~Yjw~5n!W1`7^kz6Z{F3b0qzg%|c=vAU ztw&)q@D*kQN6&`Lwl<>4;PX}M^*q(nxvY)Mjz><$SxSNsb2f0`5*BC{<^H?B65NW% zG!d`n;IQ`=Li4QnCmKL%O;cC*bEr5{Dq@r2BqB$3!qv9s-CH-o9I)jL2Yx)I)~%k`9Cz1zkAZvnKawp)TX>RwDzPz zoMX+%^C#8XfH!?_8PAP&37T^Qi4loO)14JD4PG`P-H$eIbZksPrc)f_O;n2B#yxoG z&*K>^S{Hr&YF^qQ+!J2v<&}&@7Wp`a^fK;+-!je`3O&!fPXEVvds1)E`&>#*_`-kg z`l_kqUAr}Bh`S6V{;ifSMB2@VwIAKbmUhJFr(euvOp-Y`hX3d)NIY~vR(+uPNteg2 z0i>bJVXc4Tr|UbmqOC0s zzPiv%RO`&uWUA2Bd1-ns@a(x~wR2OZ!~N4I-+ z;h8MHdad9pdrbcrY3qvB;^${^Y-ix0JZOD$^bLkyU>U#^dfm)etM7(h6BUov-?#8g z4ew$ZgtBU;lrss)wiIEK-2lzA&Hn@;4NHy^`GdRhCyEmoW;yvlGwQY1GrwI+7BZQ^Rzywbq6o%#`Fa?#XUAk*fo`t#I`(V5`z%jd~D`Ty8={qQ7k|F zGU!i*#Ek3B|9%v$CmqLhb2F?OztXmCTwe*FK9#)=QPldWkT3oOSCCT;!+}er_(J7( zY~wxhMo+={#>bzRNlbk)*P0f~@&&sX*QtyZx*a2^;&Fnf1uM#C+cn*`J@v6SYP#$u za;!V{ndZ6k|JdLsC+jt%6}8z9Jbm_Sw%u+K(1;bE!tNT_?&Mz|Yu)x!spoHab_s=H zEH7PWx(iX>4I}&pHat%jCBJZHeQ#Qxk}}To*qc%|$DmqyBPXBy&K*2rnMIV6Ep^eM zKRxO}wnaYp-od7E#P=R59248Jg-?xTBj3cvTmH=Rrz~g5HHz(n_+>|4P_czI&!a_7 zXIW=@cpN778kC!Nwv96lc9MUArm%JA-miqBb&pjr-kccH7 zlwqwC@X7eM5FF-m?Ick*`~u@ZM{Qv~=SEw6=@X#>mooMl$Jb$bMkk4C%Oj>t37(`) zbZ#!)z_yDh^JcN$FXlDU%s0~pYa=&5+Hn4h4cTu=A7DXh+&UgL0oQ;QCI1aw_Bv#<`ThKVNkhILESe&f6wld}#O8}aRijJlzg=b(| zC=nTE9LCYDxcjqQ zY@KzGQQ*ZLkvcj{hHRgf?^>hl06FrEh%tQ0O1~H!(2q|VpQMIobHz7S@~EF-?HnN; zIUab^fRjN+A!Xa64GawabEXn<(a0I57_XJjx!JI+kNb?%q$7w}r$ZNcPs?LXy|lx8 z?D<<-7bTIUOkDYCyWxKza?O_ig&gb7vhaGGOUVhUmy()ei=}4+thXM2gCUb&LPq3R zZO+1PRB-tR1Q7eayI6=NqqM<_AT8iNfT+ZbKRDOium#lsafk;~u|wurJAPjG(f`mc zmMxYfXN7zh6o!7R`=1B>2Hvp87B5rx*gp1ybtP&Y6f$CULs7@mdp$oeqDcm zT@;<$8l;xB_`ap=hx&jks53(ju>oAJOn}(V+y(I zZgjEe8@-x{JWOgcJ3Qg`L@2tSJxL7X=1pa!TMl0Gl5K9}dcZX+DT}t3kS2Z_<9Q8! zZuMmNCHIfW!K&O0mSwyvB^$S@UO z>t1j7WyHCX8t)-=hUu4=tV~>I15-4=G9yuW0?(`Oj53*S)Q5wgZ3Ys7QRpCN#35wg?&w z*ch(@&*${n5yS?1uo{uoyQ&F;wYuy?)S;zO3oC!hF{y(Z0hCduLOSXz_q4KZDzP;< z9llWK=^^q4#+9Bo0ZpnSEbqLl8@sY(tn{ z2of(bH8K7%ege+T-oIjZCX#8E$`!P7NPM!a$0=Ke)*6j`S25$ok2LJ_TwT1*)bXt+ z{W?Pznn_{#`b^7($XRZGT#g2FLd-E@Sl;mG&5XRxQTHm?8Exl|cizIxnDEM(_Z<;# z{L!=vdEy_{4O+fWpG7W=Pc|`ST*!}D0|ZHvT({o5fM$}hH{~$%GR@H7<6(N_FKj0@ z6ATsCr!ChB1c~`3zT%daAtf;5SA>9;QvnxCFJ`}TiyMwo8C*7A-WC=fhPai6?bz`B z-VUERBn{xU8RWfY__uxXQO)P~nQ}FA^j~vOJ4w<_yM?$E!(WceEVz)?x9qx_48I+R zIG@;5d(bOz$WLD0Y$n^nt3t7M3nPNxrB2;2LyQq89qjodfY0E(N}k}+7tz{A-AG|=CaAj8+n=PHX%@${bcSpl6jFPt#8_z|Gw^V=T$bwN|KHlz^-UhQZrG6GY-Th+w&2y1T7)$0Sz zw(kI2`ZGcW$1n3+0!VBm6|Lkcb}Xl16o2+`(>la7&RQn^^xMWqi^)c<*C}t zWC6ze@zbY#K&;}gF*_m+QFBOS?78jH>3ZQLN$pZg0*hH?UKwoH%mSBsvakpqp`PzP zE$TB{W-no-Z=;*w-y%Je6(iVgG!hi$TcV8E?#|QaP5D-FAKP^k5tDpZROd7Hn~m^= zKi3tN--XaG7^NG|_W2N6gjF{I;noDDbU#9!QyC_RJxk7cwk57cNef4K-sv=s@tfaUaX{=VIg-jWR`9)fq#}m@KcDZpej5PiId96l z%i=~wNdC7wohY}kWe}}I&qV4}xLU!-mw#@{0paPP^`5hP3=5p%n040hyBiK4pj^Iu zS&!`=EoD$smHabQSA{5wx2<;kQ!Yi#2C1#&FFt&D+3efNAf=_vJNB;^ykHs-wVg=U zh5~C`xC!x|l3(SWCUdZp)4zc_H$W0T}41=koR={O!GY`fqaJ&EAQ=&pX(_^rk9>(A1}+yX3aYFnaB?1;8Q8)UXGdrDiQ?Y}(Fb2SFiS3Y@?t=F zK=jk6{s08ju2dn4{UhCe#tPag&f^-)nhOj+R^)_x6NzRPq%`pPT={E74+J{mc4R+L z+fzemieul$+x$xC?(N%1QS;3oQgV1xd=diE?Ou;-g+zj3->yUH}` z`3Il#BEc={!abP)7x-=qfNZt>z~9$T5`~M5-XrR)A{gbL2WpD$BK-#F9Pz;d{qhP; z$b0n^-=Wj9YlW(aVl#v6El6Osa@iA1&<9t_>p44sx7>idI%JnP-Stjd{YFNl4kAWhf2Un5LG{oVOrnSGI z2yd5W+w~>@pQ;yrCzx>UKRE!96rm_V^nQ&rWRIcf1$LB;is^GE2mT52+PG=^abaP^ zH%m^eX1d@(jqa{bS@FGRqN~7Z509+M0OvRk_os?y7m~V4{E~ID82TX!8nE zk4SN;XID|YLm}>2BA$?%oGhJHR(73F!j~*}dRE}RA}wq# z?9J74#&_Re=4Y1P>QXi8=R_ff7q2)Z+%Ff;Unq23h=E7tgoW$f(2~eo`sYHOA+^Z-?fS;sg`0oy+QVNqYO)IORhP&%NLUI ze{5qr14qL&JPZ$bu49Y%<<0sMU&$VpgP$ly-MpDsRDvG1%RAzWz8o#4E>s-Z-k@+e z^ZV%B{rsH~iuN%nDW$ophJ`j)tZ%(etnu~7nwvXJ9PiOVZwnx`9bZMh3B|#C;qKiZ z-(ngdNw$+NC4YOQpRaq;`P@}!XRrQehcj(#UFh*zLgH_%vO>!|9osf!`KCv=KSkTy z@A&-wW9x!p+LN(yNr%P>R<&8vV zDAK2=cD`)lm%2k;S%^9%F;x@(mG=1Qf$kpqvcHCUz)L6tLEFvsCKi+E8P?;J^ zd$+n8zLT$}^PEVbp=bXxK{8%EPcQ!=J;X58arGC=;DS@AeMc7O$Bf*HKa7h!+)CO( z5F0XFm^fr6ESlgr048DJcqa5IT1ACyqFP6^Ps13WOP`IKnmFV%ZvJS_VEd-?=4wwL zx`ljvWz-$G%W*>9x{Rx34CSnX89sKO4*J!e(M{}jAGkC0)+&}*^OkGqHRqvoB5$%J z9=-y$pwq*$;cG_r_H&cH=e&cXY45^iXbA?`X9A;(H;5;61CJSIm)=T9tpAFZoqB%n zzIQ_3%8}AX*T4I>x{s*xE}bjN_d>%TT{2OvLDNrZNoSpL#p5kDJq>upCHZhwo^#yU zq3&B!ZtmUbfA-(MU3u_^{ux5VmGk%=qYh#IW9=F1fM1PZc;U`nXsBe0j+ouK=&q2K znOVJT=(SO$Gk-p4;z!(;OS%~Zzi0Y9s;-q?f+BlloWFd*T}=OSt)Y_U)Fc~!=(C0)z$K$=ix_U!k?|BI)V9Bcd|!)=YmO=rG6+0;?jOkFLJso6GT@e0M_xjqXsbqv-&;KSv9%iCqya9R;X z9-FInfNzjiS&XP?&u{&GoThe7t^y8BYotnBt*yao{=~#bLBzK^&c(*ReZC&W8ps&_ zZ{Jg6zhr*7c*F3us$qx2?Z@Tu7G1s1PoQ$_@a<9FV~vN#?;+Hp#TVqTopBx7N3s7! zzl|+%E0ORT7ts|pPp*?o)FD1AM>OXukyTZNodBi114HZO$J9|vV;oE!&>_!fHMV>XC8Df@jypR%FiY;59BT@U)bn>4`v%~Nc7OKQuU{-9 z4aS4~C~IGEctYH*U|Bn=YIOdF)oUhZ`QH;0=b-F}h;6SHz52x^sRm)@a$dkNg!J*Hg0bX+H!sI}em%83im-YU1ll#VJm0mNQ^- zuS~AW54>wN!HBZk-V2HQ*i5{o@-vBYA>92ih3x4;-WxWd(b3FjquVX0C@)?Smm2Nekz=y6I1-kHYP}leNcjT@s>@o;>ta^RaMA; z^2uQrD(pa6R^U0lj#8ntr{6KdpPMH}>bmZfuqMmU_mzZwd<1$Et&B$;js(0TI`lLje_%=Zu8aJcSOP~U8j43s< z5Xu}(&&arP%Rz{8?mWOh;`?M3L}lv)-2B#`7JLOA=C7npAF^m5sAgvFR#51YeeWq$ z4#A^4ym0WeUlkl*w8KMlk+r2s(H^a8{esIRw~G%nx=x6TDwCoo;D7@(N8A{dn3htG z3!i-W8Yx)vTY1=q^;D9}=%n{6<|dIYlOGuYu}zsZpWGd(O6=EO<7oya9G&HfS5=D( z9-HOxZhgt90cRuQ97er7-oxJA${r)Oq9)@)U}r`=}wJj)JZL#Kv5?mkGF<}D9dcgCDX zF&=;Ya+SK3)!lqkC9WnH=dYI)e{<4SU*oF;AI4e=LnKZJU~(7#oUy2GSe&Clm0FeH zrEcH4tamG~r)cHPzx0Odx1V~`#m8L>wh+XsWz5iq&K44baa;ax-}aU=jQponRY8pP zdF^}wrCU?0wzVwMU9XqYE1@7Lj^aDw^B7?A@fkSBkoZ3~XV6e~j&qc#NB%fGsdEz5 zU+ScSN`R0gwRt4ObuArZVT?!#WIo^D-fpGO2+nsZN|LDean2}F#)R|KVtVmqZpW~x zQ{wI~3t;Za!1hVKj|WHv@T%$>9W{KVf4{bLsCOdk-t(9xj}Hqu%}XJSj_Wd^I=X~1 zG)o`2`deA|dr0vG$2wQ?zyDf`OP<`XK$*0hoTj@^IzU$8L5EO3iDDGzMKCi+D0lXn zd<;=J-3owe1%q1C*WM%4FOf5SBFbj!nyPGpPd$o#GU~J8h+TIZ<{mGI;6{zqECwjk zV#AD_3tgriHaf*aJZJk{Sp##}Yip0*Oc4#XtTw9)JTFf6#W2Fd7|MDdu;KOH+ zCEXjHIS~8EG2y@W5Lti{aUu@KaHts9(F|BLeu+_TUO)cs8Z{RD?tc`r!joH*73Zns zxc#*eAGEjDCvEo&;b%8X+%<%3jQRb-Q&|Y>n`;hU+YNf9KE_*C@b-2?oeBv7}ee(P-DX9I5T-!U42d2 z^%`&B&Zv^PG9@yMe#>t-0M}8C+WP6FYnB|N-a0p$Jg1^mYfv0M0bHqLw)(Wr)9E$oe7RuN)26yUkK|~u6O-r9@Z1Yi`fY4ANE>tFZ1kzK(T_aJDhQr)Tkqd? z+4kn&D>{kNGL$o&g^<+gKoR2ndu74rNPvcfm4iv8u-9K?FZk<4x00zs7ibR)t=@P=(ujx`%(T%XM7~ySab2P^$m^kx`)KHi~<(6?r@`7|lKzd_lW~Kv<+&QasYCwoX zv?=IWT6VVi8g7XwWWYOkr!h7qzc5{PIh1`b^~TP!*A>7UU*onyt3K3zjU4n8UHoI4 zS`nw2%GyDs39QH22RrF z4+D0-7_nq=&byv>#VO2kB;H7+#g;IP+LVxZ6~-jT8cX zbfg#W4gNoQnu_Wzcpp|zIsFDp&%arsFOhK_8D&o*=n!o^51|$c<*2F&8c(L|&UFe_ z@>kJXe=GI0`%h~t-`vofTdtS2on;`#XQWyY3l8>v(sG?hitix566Aw!TO8W6KQQxe zzcxQ0E^NPdZtj#WmobdY0DgdvkMAGg)7#!DsC+>b*x^Em(LGDQZH<{$Lwq>Sr&e0} zoDqJCTWq(cfBdM}%hKF$4ct4gUOw04<L-rrBjDy2Q?Gl z=h9-0+d3Jwp9Fe|ii`W5M>ce_RGW~I;QXhbdja7XSs2@`YvD>Vv}5DrEK zNPwKlg4(DHm)F#fjBa)ez>HfP_+7#sT+;(!^FpgC-)XvDD@vrUu5~NW?T<|E@?PIs zb;XN+1IOKg$m18vyIS;ycX${SL^YkIA-P#Qr@e;%QdW13H&03m+dVif)c#l+foG-3 z2tLGz0k^-^!{qKIJXJB4T-S>e8u&@~PBh?uDF1$NS9RX&6ud5!`JG zQnM)o3T@t5Kv0l#jFR7LIZh20^e!1UifwET2xu<)hTX@Fyf?@`mWb_Ic`I*A=CTEj2>uvGlnvX-fD?b->l>6+XzfUZ^*^z+$c($;!2?^;>yFJz`qJ=R^ zWSpd4nHH_nHvH?y!?vmjDMW}gQR`5|Vfzz~_*@cT|Iy8S{)SmAFnSrbvl4ah z?rUQ%$xs}}LZK1n@L+v6RNmiYIpXsRh*JF>gpS)wNLyoDCkG^?5I*H!A(2JcBRZrJ zvC7b$MNLb~+H%8b_9Q81O1|H=+U|lCU_Zthk5DKRXID;yUwFt~WHiwq0Uwvf$yoI( z6P`nI#{_o5M8BD_E#i@SDc=5!T$q?!ddy)$M|?U_c+sP5g82eNhehZX8(zZUg5&7&9e?2>CA|+^6RXp>^ER zF8e;N$XITGt${zeI$Pq#$4|>AQTH7%tLRA|H#w2XG^98I7hGPsG>e{PP0^eBT~$b%f2dCKe~zL zCGw*2-1l$*GZUouWpz(PfhJeuIEFP^l8OAOa5f95iwyIu1og_vJiON%b!86p#CL(- zFoT0_QH*LnmKs!XVy@R30>VV)C;8n=kb-~1n$uHc zML!K{t|%S@zz>p1cFzwDnMPk zeb~Hw^FNJ6G$hGZ{l&dRHZP>e^-5{PkfS<>mn3g&o>FJ&w#KU8V3YQaO<8gdDr0dZ zH@caq^s!CU9WYBs5E1kkK=YWimK23;>Vk5zjeFG0&}?-9aJ-!WeR3JQJx<;C)h3lb zc$P)&=p@u)XYx94VdJrKkQ@pZtQuX{VVu z<>3c)yG7SwOGpvn!ooj{HhyQqz&1|8Ji)-wY3{pv&ZNv_AICvEF#_a;!uG2#!%wAk zFn+c=h7Ews3ducaW}bU{NJ=9)I9^Nmh2GA1*4kkGg-d*fZ~62w80=Xc)lpZiwZC7+ zQxZMTUmw0>=eMN$*|a(;ceaIRkvMYx#aMb~dNx0Q{TH8?NE6eAh1S&_K!cYy+PLrt zc9NKZM7m2zp zw|Om9K||{^v`8DY!7)Cv6>Ut;7h{!uX*{k-Z zML%(y&rg$ffRa^ayhX}Ucmgo-GLwaMt20S}4&{gG=#-IF3>hc^Xri;-EY``x32M;! z`L}yzCfD}G*-?5vUXgA4nWcyb+RUr9trkdR96jC#FK8=IFPSCki`*;vxNK!qXKNyP z^)XPs<*}F?-UGhAZRG&k_o4XS^=xA8mF#(jxQnQ9$3is@hoq7U;uQ($u>OSbpH|OJ z&bIOuIOp6Jj(UGXj9A-K$5Ey~lwfb3* z5N^kJdomGI%)br32Al4|@l+8i8CGnrpxg38yyc^)iL|F%ovkyKD+;h-VWJQ=rWGVD zEM4NGeUUBrq5sA%hUL~9rJ{v6U|XYuSYrRzq7_?W(v@xRW{7rNu4iYSWg+=}my#>7 zux3f1OHkjS!iG5<(rYZ4$?(a$QL?ROZcge+njSoIJbU})Q}az}+omMT>yNPSa4-Rguz?qAJg`Yn^ z>_7H6^n+_1cpsx`&ArB5%_$OIo3|X&0kJG___nqX2{m1Ah?56EW7({7U$b^0GL#s> zZKu?^w^JOeOndsGporv7icKGag1fK%qK0p627c1)vDf z9-`HjMv#^>X|Pl0wa02+$jK_tPIZhsMhhi#(qp>WEg^1S5XP~aIA9>#oSfiRzGHqS zL0yyzYhgh+v>q7ldHgMJ=u8w4>vDaLzxN0iG=5RUw&4(!Bx*qtCkmc zN6uHc!NK3~Uf7~-+bQ96)ffnu1g)aXC|&VK4HnS{n(-l9>)X~butX1N@VKELo&8c6 zDBesJwGGFYMfm(VADy}>q<1}!SkJb{ToF#jDhpZm(3MwkMOP3H)rypI^DxdH!_hdD zA7zE|V{A55pEG*Z;~AeaB{l#;15^Xyp_NfRi)sGcOE*fnvcNc%3$r~BIbS%AEnUYA z`uwKTR^fX37h;XpM7oo%A$lqbifq*?V@UnG!?aJLa`4R)_A^eijnA!j{wKWclb9mw zeu={t!s9`&&Ld6o+K@NMd5faQ8+yCD!@^w!!6X!h^khB;yQsp^gjF0e4CQMLHUZU? zF4NT328#6X^+4>QU?y>%jZdNd7fSS)i;M%O?q(}={#kO1p82rx5((K(d+h~;+Rza) z0_xHeOh?H6Q1E#Oi^D1JO0|F#-NIkWUY9&L)-(bn;M6a>gmC3l@JG0I;m&_GL2jVX z4Ld_Kv?G+`c>Z9jaDWnl&ji^y>u%5>GZO`e>hN1?V zBT>RbgMe@IiGKTAwWMvTtk2&o$UghlU+H0PfkVU+<;9B^7}%`=B(InKEI1O4Tlr+$ zwCziCG4D~_Qm%p5i$zu4qW@B7`b-BCIJ-n`QS zcxbaxpZo-|@L8r>d%wWckSll{RxVgJnl!9Ezh z2^W$}ZL{tztahZBVlWxGlF$KQ4C&L)GVe2o*|4P1!h@-13Jzo3^z~Sf7iR3^mOZJU z&TEJ}2?{hV=Ij5(@PWEaYW@ zYrQw|*wTzWxosTe_ex5&43dI9Q;*`SM*D^Tf>UYJ(~2@h)BlF!WE1nB%5?%C6r%&n z@hd%%Q(w-bIJ*|!mwJFunc)6jFCPzw0_X&Kj>dl;K-Vvhb6seBT+*o&LEDM(< zVp}!R42vM9JL@hjQ7>Z`jb9c4`_3$bGJ2xa(9XvFi5KdSa?2e3s zO#O+z3+(gF|J+>fSSCA55wZ(+*@iZIRQ1?bW_a|MDD|}Az z3Q44}Z_LPt$5PxO=QxiahxnM@xRM*nQE^X&4aXL0&nJ%F5HzSEp03Ta8L&2AGf=x9 z^b*M@Akfp-w+Yq%@pISpMEnhmE5cCLvF7-O=+-1tU=U5w+b;6_(NYMxFAM5>uUm~Xi>=)m02&%uJ%wwNCyR;i~O8CYnr%z3QmqzaIiPSbSUo}Tpd?+>pyg*MBRoOlP^9I0YOO|^j9P6JlsUSex8 z!ux`-htwvY(=OpXe|M-_R-4wj*V8Py?*S^6G?{~Y4tzN=!MiHt4nWTeZS}w*1f^0E z3vMJYjA|KPXQ2BnRHKIkb8)#Nt&w@J)H&x{$hS(rgm6V&>n%VZp*{|}AaZHTMeB$V z7+o9FAIK_`JK8R@ri6)#1u@ttixG%o9z@Q;R?q^1wrTueZ+s9vIfc6KzTKbDpYNrR z)g`(m5WeJ(I(8I7YqG9CcG;rz=^WRmuAj)fvtmW3#~Me8dV~6{G{P>lD5MP3 z1H%8{Nt7@hN*E)25!VNt#2GfgbOF^@)m5jzDA=RK8p(mg8Q>Rbot*`fV`B_(^C3q3DU>yDEDgwKD_-w|MlvxK2Sy3SA zZBsl&4R`F?R=v^mBytY9;wJ&UodmLOix68=f^YehH#ax`c?%a~B?x?nUjd3muGn`5 zPD){>C1=CMfBYt~i)ny!dg0e$TNc~Ay|Yi9C?|DInkwz&8Q3_@SY`GseZL%;X`Za3 zC|B?%z`v95&_X3aT`92hmU1M2XOu*D39iZR$SbFW?L$rJ@jeHP9YeEKdyyf=f0#7dQ z=WBfvo5J>(pnD|!bi)_TaZ;Fym&1Vc#eIA~x9y3Y-+>*3$bR47-04^;*y>xWSp&1= z<91dPe;4zc<2)mvc^{T;0eNwozn82-6b)))D8) zAhvCO+jf8=N#j&lNZ>8>-(NP^j)XMO&xa}8$~lMPWVUsRW{Qs|c4hKZyCzJ7gyyVb z23&o}6!6^#Z|({XBV!NYn)E@-L=ccdOg5Be76b6twtg3q0zlJj28vmk1Xvl)vtMD0 z&OI6RLZzp`8to3L6p5$>!XDrl{IWJjTCeGAIF?9Uy|y+{=OtKjBIrLMz=aV;i^jlk zQew~4tEgTxav`%UH7Q=6a;E6GoYHw+Fxvi>;CXt@f+yit=Sk-jUqJAf9uck4;knc^=$E$T73%?LaSl;P$V(TDR1H}zB7 zWSaE2iZoguBW3s5O+otVCVX0YVc`*yuOBOGZopA&UsA!^J@qdLlgvL17$1t8IoL~k zss61Nm;vSW;c^&E>bUR$!WWzv6Zjs0M^p4NKrjLD9xvZ&Wvn!ULgQ_Aa0W+b>9xu4 z-#=&SzDTat0u+qkt;r_%kjAXlasIr}6%wv#{rNmeAFcsDk^fgcs~L7VcJS zGTnNjh|a zlg_`XkQFAm;trby@bDSR%g7|pCspGccV#!TeR0=fBUCr1A_xSJ48U#d&J1f1bV<_<%t3~P1i39wxn-HN(9LAnIMk9?_NA4t9gYE}1^~=4{Od-GSnI&J? z5da|#fF-|Is_{~Yk)>l*I`H_NjLx~`_c>?CKt6cO!1UdKKiRhqN(wM;nqUd?xB=OJzj&iXOv_E%|@z z+}_S_-TFU!%<^5vCsvwyYESghW+NFUa&r3MQ;aPY0GS6d8;7=jMn|`q{`!OQldolz z&fm0%n4(c|K%jFkldF7kp-aS0(O~yj0&h|K$e$o&$sON*stP8iSC&N)5fR}xr2zl3 z3~uP7uCWraApYJABfw80Bl$HgtfoNB5DK&GGbI%Y)IpUI|MM3P|MFGPd+Julv?3Q~ zs~uNc3~!-QLU;`-Fo=clLQeatSQQs5tJ);Po@)3RJ+L{-u?(Pz)-8OhH0{=MOv|8U zujHegQ7~g4dMfw30AGO9o>S<#LlW#XN`$-eiLVs}w)FSFQegHVovRD7(iz-W(T$g> z#GPoXb9uL@pM?0?&4h|#+JT#Zsf-^iPn2d642W?TN`_~w6J&=~J3!_{BSgB884TvcJFmWqL z%HK3?-`!iB*G{6za({Z*^S^$*mm9d$eHF2g!T*Y1X?b-|Ig*jJ@i$>`pB$b3c+GY3 zk?>7Tq4;+oA!DM%8V{8PVBNbUULBsNB79dPCr)GtBcmONnZqtFn|#dTZaBlWD(GAK zXDOcBdZ;2VU`ka`>74l_CqQ_hCy)RwX{nw>?!9%t;pDldhVY%mkWTYuH|_p!A_y{& zA?n1JYFl#@5MA=xjgH`@)~*RwiTpnFrhc>w$f}XCL4KPjpc>IK>96t&FE@bVSV}1V zL>np5v|5W%?g|6yK5ucf$~|I`qehb0v?u{rn)E5yr5W;W9o<7ZWP0PfU&l%8!n?hj zIx$~%89Z0R0`)hzu@g4G_b{JUFOIo_gOu2?3sW!v%_3rn!}~1%Vneh%$pmSb`1UOk zq%^IpRs&%sJr6`iBJEnsQc^}4+s-KD31PJoFEl@%%FpE`fIgYwj6lPbCC@EbbR3~0~D-dpH+q_(I{fLI=oQa$*MX1H@l40cpA=s&W!t^#xq$bPiQ zB(~;y*a=E(JtIIpo;c@N+6;hv;Pm z>lZ2)7TMqSwL2OPiwp=>mRqgqKK>kyE-TC{wkl{6rHSRJq2|Jf@|0{b1}W2hX9UnpjT1~ zwFBy2Ymrr;LvbsKkyVml)k+jM0Gz*Z-6Lk{z~^at3^3VfJInCNNmuhtAzOJoAwT?{ zS$OvBhh+4|=huon>kFm*cmd)GR6*g9Te?%fJ0OkEDibk9-e&*je87Jxo#P;sst5CK z<174jIs50Y2oBm$hW+^n53`%nnO-8hGSAfLg+N81Zezkpco-DO*Q@V#iGz1z6Ak+F z3lZ$m7h0$OzC2Jio9sDzdG00Y>7$+`OB1cJ?F2Ap&8YnQ$Rs6&%7Uu|@^#YOK&ZB< zsRI*b>%-y<+uuaN|3?z9M_Z(k>*HPVn!>xF7gpi+RnW4vLED0pXs!-9opHsfNye7| z%ynfR!$yqc1MWw3r3y^b8qID)O0kDD%V+I4f-nYX)xIe-Fq5WRCoIuee!G{*%*=z0 zr;G0LXZI9!MdAO)^)CW`$<4LBgxbRk8cZ`XKjHI51gw z@hTH(1Ui2C+h03avWUjy<4KS^WRBLVr0N{3E^_$9uSM_25jOWnLw|V#@?+f09O%Du z-TeE+2z+24)V?7qHfPElV^^;uQgudwufeghU196>y7O6w2?av=BT&-E8A7Ikei!oL zomI~#@SZ~!HW3q6L(Rl|oiNANdvoPTlSmxS$nZ9!f^bMS=t(&_3>-t?S`!GvI4$2@ z%SHSB{D}0XrnS|~_DGzcHkYr4B(5UTk>9_W*dg%EuYw)~oH3G!PjvgtiXS8hltwQ* z^CsqG%mC4bt1~;}sKEm9ez)1sdp0uQVeiQqD%APH9Y%Q<+CKuTmHrw;p74Z@@&t_C2*T zo>%9|CLh|CqRS~RT0FK*8nc({V)cWpj@`k}N;r`j@U!CXX^ULT$;{SEABaD@Q_B62 zaA(J41VfdnIe-5??Dp_qKj6KI|AXA*O|e~tG=gZb>!O?ty1Sw<1=OiSmts!4@n&k_QhJD_C;q)zM$mBBOJeQ0z2{5(||Exwc$ec`|vFQ`5>$Pt@gY? zMJSETHeOJbc=Mz5N%>q|SYVICQlPz)nG@VWSX_m28$@U%K|qjzI@_MDjx0#foB$Z6 zvLCoWgs;#2sMybKLD}wna7ipEuB5&711rbtTb;n!a--gvIiJM9wF*kFr#HodC1>F8I$+HrGK*L2MXCHRd*dvHt9&sGh{YYdxU)_|H806Xk zoMY6~R6u4JBK?YotYyXRQGDMI^^oy9m_>d_OWvBfxNj!$l zNx%p-GC6@J&!_YfYuFe$RuqkWT`iab#1Hu1-;r320X@)z?Jr0*Xse-f3glw#xx!Mr zx8a^Sz=bZTgGTfbkI16ssg-4=h3`>;3>l04`+I-koCDw*B%bi>7ElPLoV6h*=n)Q8 zdA1lxSVCg&J)yj*V48PI$Y?g*5WiswDd% zja~|FtgrP^XyfJclxTBd!Hr^9wKd&l)$uvGzz?M6=BvF^5KzViAyww2O$Iu+%Ns<% zt{_-nUaN!92f9F(dCte2**IHHI2kVBd@X7oDKG|teE-7({QFKTwMJV`PYr<4hn{-l zlv5Qzt?zz0L?*-7>%OSj3P;)8mZhNR&0L7^w9FB2&q|w(Oq~1qDOvLE6{NX21;ILK z{NOGwm#M0&E9%zG-O@*_D&@RYW5xR=gX)p6T}<{Ga9=?98MlN3VGCiNS>)*^1W#*{ zv2=HZC|$U2tV#9z5B=Q?=Na|$K`4f#LnMx&M_T8Ua)WwK9LLsIC4$An%?TV2@ZpxA z&PXE2sTXqEdLFFJ&?+9LVL_`G^&qzB(XFA&zK$jPv>8+-=)^8*4+|T_!7b~md{utDzR_@-+8(x%i3Z03fh4KU1{m9LFYt5 z`-uGv$6o_kZCvt+cum!({K;aTT12T8S?dP%KU@kktv?AshQ05Vfsm`wqZ@fD>JnDyP7{C`1-iaRWHBfa`~!M8$HL(S24vO&taoqA|ZFL zi^S&fT}kd(`kA3tink&@!|^o{ZMI{y?1H$Tw{wjgni^tqgffq_6tAtb)Rg4ui-gNELq*>nx-X=(Lg2Ci z!2|h98`+V4VoJ~OkhCAB1woIKJ)-Mov?f%0mAtyCQ$%R1Kt>cK9MH@|5UJZzue}ds ztpTB0P$s^rDh2v$;jw_(cAqyf?+)>k^F@;JhUGwATorMePG6n){`2SGe@J#HYb;ju z%$ZY8vpv<0&iIAKD5k6~D9OIRxUAsI!<)rGzCI%43Id2Cxhg=|D=M$l_5dx+bb&zt zggis%^d45RKR;8&hSH*|0b8-2yhxF%ipfkLrx(+4(}XHr=1Sj9hU3r#L^VhUPmuVC z2kD?<+=;~E^Kh`5V)2Tuq1x8|+sy7OOv&m|98Y7~dQIJ2IHs0o7Ng=MO2qNKZHcU- zXDE7K9=+WB?A{5=7c57=@ZULg>SP!j%bR;AuCsjl@`iv3oQg?J6 zGw->Sn>nrPiroA$M-so*#Viz&QT%vowEp1lTVB&0Ev992-v9;~eBNRkxMTEcqtW5~ zH|8=`QOT`M*Y!r%b8U>ly$T(F`Yr!fQAal|pvycrG99eH7LHV_;VEYEOp|Vvgx% zN8|{lOXT*T@+REHY`Jvu zY}At9uEcJ~T*}jJU_*t_I?c3mkmnciammM!@BiL@kL$pKR`T++D^)7=qhI{9+)DDV zy@YuJ7pa{Q)U8g*lAC?>*pGo@aB<~l#G)z&# zMtabM^@pgf-(ch{7-+cy#WzM5IY=uVU8%MK>suWoq9d|=VG_& zX1KN8O}iytF~j5}Y`>9ilY`l#I0@yfi!eD-cu3jPRFW$UgMac17i0TXq`xJx`l4C) zm9bfNkI;LKOd^g+9q}Tg{qYJ76SOlVhtULK=+8Ovx56QH2X`f~Cr+~U@R6DNX_VHC z+Xk&ZkIaq~jAayd zu<+Q(M1Z@uJx%Wjc$pt<>Ji#MIx|V{)-n<5#kT#0N@qPPr?#(3RftXRo*94SE$hjuQp3B9Yt=Zp@xZ#_Q3SHkbM-nsVEkxEd(w73IIGXbWzs z^@!P_(QswLHcA*w>ICESN-}f`mIDrj<8oAf9Ut`Cm@Y2x58X)@O>{GMEy}I0hV!-c z>!tbFAdh{^vgeXhM2qm|gRuc$Tr`!#pZ2ubD@rk12|BTTTl57>DMfNYPkHM``Ha?! z+jblqzes9*6gC<-te^d`a>MJmanxW}Sy^FUEZQ>9hQwJHt44Birn2lAo~yUkk6NCU ze4>%O!ED*fURNgFxGh^ZZ?|+B-6P)V)KsjZr_7>pWHoz;^!5&zs9dC}o+{Zmf9fpH4(MZ$_)j+K5A%phMb0y6nxzBd z3fg2J??EyZ_UMsj^p(^iY&L`#i8}x3_<9F}OP&=TvYS+L8T&ome=Xnkvf9Bw80vEo zqn}mDXuGyK83PL#aZT5?Aso%SI%W@#-8Assp(?f^v-ER)lHW~xbou6=7Nhf>w%Z1q z?U_x>lidkjKN{l2HmG>(ieNm{jI9?`9-5gXyD6N&PV-nh03%R4&&!x-&HWE`Xjm*e-= z^~EyW`e_nZl3vl~>A>1Ij8jFU6$bIn4X+6tM8si!6#BK_o{L`%;>#g>>eG?ode^;c zUA;W@8d7p@Vgb{d;DUQ zYgvk?zGv+6E!QtUWif5wWQ-xZ(D(NID^@nzojqiYa@w}jR_)-T?#kM^T#er;x)nrw z;f?Yvi*~M6yo7ZlG2F6j-NL)ZRU9Fy>+oaA`vTunW0a`p{CDWdC|4%1{j)rPKyiuc zL71KQ7Lu0VivEKi^z-~X6uAPaK~r?m)26sAI7IJ;HKx+kQbnBq2!Oltr8V{BD4|-P z`-z7kF&nQWq+MqELXoTzcE5)g%^lA7b=j{Igwu|{Q(-%Ub#rtdU))N9N0lI3O7V%q z%6ZokDlK46^n>50$c5#6G)&s)%vdw1kxW+T*Wnp+$!2X!ke0jRah>Py@sl+Lw}RAk zBvZ{qJXY_`$BH;T2+KBI(Hpe8c&{V?S_Utqp>PR-$a^H=7*8wF$!5 z;RDY+uuUyUD6cJ_B*glMLa z@tNe=7(W%o3rkLEW~{Gx3+xB?JK3Ve+TrQh^KAm=O;qrEH4gpK{vH0jrF47g)h7c| z4q79}g7)R6bdh7)IS5lq?$8>w=B(Q?!wJodBV6PMIAJo@7~7F9aBK=X?t8{97lSXx z=`~Rw=SCh{FFCXSRX?Hk?@GUm(D5}n7t%uk$qg&ro`wG%xNYIKaseJo&#hdT{AKT~ zp~q}GN+4gG1g&pxhqNQ|HJ4^5GoQhqJqdw{iZ2>rreWcz1-ZriRYSLxV?0RSWyXKM za-CG_Ii~A!IM!A@*AXj#=}HxcHcD*6YXd%q{MF0Gd}aOWYHDt|&Ko0r4ncl%2L|)x za;d+Vq1Vi`!sb{CCXqisTp&@RPs4*O@!dD(s~NdA{SON4&GObgrmJ>0Lacpd?b7qg ziC22Oa(fnkwJ+C-q?gv}d1>c5uYTt8SUkD$^C@NCMaFZm?#mZ0>@UUDZWu`4A-_W5 zgu#*9fxl{|@{}TvxFo-SDoh1&?qWXwayl=)$fiGK_s4YFvTR{|ghbQcXU0lb4J|9* zE*&cBfRQVEkNm=m_xNtA!BR#dm@B+Gc4tgmom=1K$9lu=<_ganmTABVT@XJav;VwA zL7P6EQjZeINo4D?g%CoTp*Uh~cr<83ta(#y<;B6gp~%AFH7 zWkQf;&yEg6k;lay%l-?q0Vfsq55cYe^`&THIEH?nc1`~Dq-_sDVA}QI0hXF)+gXRt zV8#j;gZIMrH&Q3I_t9KX&-4BXf8N|=^7`w1`xdDOiN1JYF~i=PJ#$#wTnIc(JmQ4m zI(^=1AOi@Fciz;HEfF-AcAYKDAWX!OUgKMVkH|wOAJU#7zPfX0@F+L3zi7pO@Aq!M znR3E3ke7X}?$dLa_EYHO5JWz0!gHZSZlkake}FNXa48O=auOSXDi7qxsJh{Ajz^s$A)*_^BR~|vtB{+ z>heQ7DZa0o;u}`+`zL(3!ZaSsg1<0z z4>iOj>bz^tGL2s^B~(sCnf9GNLH@C?>X^NY5j+^EUJk`+5vsfO9ByXayz-Eri|NPZ`X`1%UnuSLpBBOAL zR$b~0wC%Jib(t+C@8zch=eO63;K0^$xbL587G3Wdq>C>%Q#-a}6O*;PySRs2&;I}? zNUs9JkYLitU1(D`A8|hYh%?4>qg0vf{f>P&X&XRE9vJAdZ^O5@v!U&Jw89Z^J9*1L zHddJK?S3#Igmqx|Og?)80~gB1^?e%i)*bS2po)J+Ma7Gp?s58OmD>b^a@_f>tP8j# z)vOuTjg?+-f8W-i0l6Sp%=Xi+e->l*NDflR9wx8ZubClYRd%t_{98 zT(_^S-g72MNfjmzd!$6;BaEvE2QxQWJb@2>Vu_M;f8a+qA|1hUPQc9bPjkrb2OrFq-n;}q zXtCt@?~y`XnR$z6CPaM-)qe>3(vsbLOgLie`i_}A9t%EO$ zN07tau-{6RB78Yk`&Kpi_}9?iG^sBeeT#!H@4jIPzxS%4d*urFJ!G(Bz`h@9x#789 zYq<^zsfRg8EFeyh1`E6o-0L*dHt@a-CZ5IsuJcx7zj;%FS=#vyh1LRhiKVD9yND0 zzlvfu+hSm|cK^4oFC>zl!z{!$XATvwQ1b5>_d==*kA0>gZokSp5M`pcwn{`OK=3k| zE?bi&f6+Y&21x-h(^i7#{ubQoU#xY=%>SMHE;+zAT6}IgZ*bQa+#x4H@X5_RZ!=8Q zcBP?obN=BSs&fsZFoXq?#e)a(pV4x>JcIH5NZ3Ce2gdlUd#37m%f!EGdqNUH-mP!K zug+pd1DW@a;DIqAr-|xHe~MUJ7~s2sg^=`Y)9klz8-#s)Rq(!Vcy@x>lYbId2T6p* z+*k6D(6vS=MZkZwQS|J)_-9YlQtCG&y(vWo(??iUD(zy(E3p|}8)^cslH$DhxxJ8d z0B1Qr92KeOW~rKI(Q;$@@xcSDFiH{D`4|EY!lwh2yhx>Uxqf@weL(nzd24{ewF2_s zr<$=8#W*J|&1?$~@5%kef9F77twOsQ(vRecS9aHgK}>%VIhn^644tOBv-ezhO&o2t z64ex#nX~-vC(sjec;1b%hnJW;E}Av(V>SndGb!m)z+XX~n<~zI;P!(X))r>j7LWAz z9?tKtO-Jt1O>6>9XCr` zzFp{xBK1gu@8JVi#Y`HH@*t@v_72Ncy6;6DL)Jxmf91L*`RH+py<=r=LP7F5Qv6tuFn z4|m^ga})*_Q#fO2rrndsZ&yy9gKC*Y&4tXd6p{oqCX9RcU2EcTE!a46%6-jXCPqbG zM_Xd}M@Pwu;LiGF)_#nblAm|21%L)H zU@WQuD#^3^c6aP$-oUXEm7i)%Zo6x?&F8IWmR&d&m!j|KbbbHTPqEmRGP=co3u1Ch zCO@rLw!!v$I(FFUhL5yfYa@~Sq4v`^%2}j}WHO`;9%WC;TLFaJjnxMVY}&sxFJMKS zreevDVvfpxqGgbs{vfdydb#YE9=D&Tz~9qReVU!FS28!#zmZr0DrbI7IhjH__CAEQ z`n5AAHC}~mtVuk_t|2?p#lKp1mF}Cos#yTToF2>&>`PPW`SHI4Y-6D^b++7EoEe$| zJp~Jxe;=!P>4GtZ#rkBXxmo-6uVIc+^}xSByIL|=_2HY%lGRu#dH>$!MR0E~R=ro3 zk~r7z>GA_6*6sV-1FyRO{+fkjajmKN9r=x1(c|yKg$5ZOWuzmm^R0X1{(a@2apZy9 zC-WR@Q-yq|vkNCPWud`o(Ec%&shG?vqwmHRO7!xQkGy?bYceE}>5t6wT^AbveMJ&H zv5hYIk>6?NT6HuCA*t7nJ}R*P!CTsWa(^4&e!LZ=?>;@X(M$K2q%Y} zceIk>T>WL{ZOi|@kH6Axa{`lis7QUqW~&Wy#Gk*hnx!INHMi!1mjrEK790GJ?sWAW zBCGgxH`J)!oMcCOttu5E<*y$8b}7%gd%r|F@Mh@gpJpNHB6T6~QdbSW`>Ve?wqmVY zwqF$s`rkky8r*jHPn@c>nh_aMdPZJaJ5KTrBW0! z4keV4QjwKC;wnXjcP8>^ADa zQ{*$lXOp{zbM&n{LafEj8t1+5K;QxIrJVeKVans{{YjiXJKd95R{S`6?a;&5=Ti^r zIS$S{c{Baz0sei0Bht4rv9TK&XJ=~CU<+4DUeE24?A>eD)JEnX1ty|bB^h|29t2!fn}gBe2OK@o*9|!;42QKZqSOUiq+wpGY>)&EFI;9 zpD%anLC#p6jAC%e$lX&TwXPqf&U~ibm|{rP9__x0*N6K03gEA4n*`4E3F=suJhh%* zcReg4hgYsFrEB~{JTWzn?9uKllto5n)CBv{j``1J{Fy)K>ioQ+E6+KO6bLF$u4`rE zVN2oq8n4wy%cNO_lI-)<`Gbn08S8$~rm`nY$j00*M^gt47T%#-ZDZP0yqI^}{Bo;* z9_VWt4}gn4Lhx>TcbYFneV3k0+shN3+R;u^on7;%w}+gnaIn~Qu(~M?=XIFbN^k_- zrG&Eh9Mk>bjH@K?b1lI~XzIJ)Xa%H2)p~M=&E*Kx3i;+J@L_YeL^Db8C!0H#$6E(Z z1n)+l3s`Jd3UyP~{VNIQaCO5=EU#XMvvc`jql;(j#3aA_!t_et+$|&$6l9Y(cG47H`f_rM&s+^S=Jojay+aml z1vX7ift5WZFuW4=Zbe0pop~SGmr^(RV`bp2BjTS2r|enI0Y$AK4tV=S&+=Ih6MCRKksQ=gj=0O*^glb*Gr-oRS!o=j z8>h30$IE>=S1_igJ@Ep*`CujZ8x1U72fY2wb+d6U6;{b;u((;jmyAzE#aoF-de;gP}tg3*5@~*WsY3XT99+!B{bfU|64ZMuyf?PAy*lfft9*<7Y04`Ffkq)kw`PaoNG-v${3- zZ12+&IqB8s9ojeG4dwHgmdg}JVYZ^0Mxa+0b;kPYZ5}-1zGL3xJ>3p?hdGIjI8srO zl9;nmymz{*8!@MZ+bHsM@O&&0JcwO5jIR_h7GXpTSh^_tbt3<%lX-a7Bc zXCBi`M}M7w<8Zu+%a+#4Hih7FCP4FXkfa^O|NTb~&M@G7Y7Mau!JUW>^{L8u#_gyx zG5i|KW?A)YUA**C3h%R@8xk)iKG0XuIf)oj72HZFl0U3buDaU`%ZUtXo;R=ibZ_sx zw>=Z_ZjB7<+wg;S9CavJ?{cpf_m_;idsemw22Krpgl!`KZDLxn>)uc1^$7-|WUe0f z@5_ONupRuaw(Wmr4vA3fL{y|bPBujzWu&h%X!iPWXKIfA{>eqGF&uIDt2TrJmy?Q> zEW)^`;6Q!+VU>imp0{<|9)!&o3>%NG&sUbN*#bYGF8z;eBQCtj$)lLvVDT3t&}GMd zbNa~qnp+U~e%||Py8l-QC-L)%+?J2{=(RN#lUXC*wPn_e3(q-^?9Dv$`YfmM<{1h~ z)mJ?zXJMj`6itKv&DB}J+~$9O9x$zr)rK3|04AR(L9=h2xCx(aW$3>xFXw+z;vo*M z@yR_BWsiMJFvt&H%uD5zelqV%8#^#1`e5v>?h6J@!6aL&BpFii{yrIr`I(p&Qc~<) zdfKoy*B3w0X*$g(!(;n^U))r6&dOX#E;8`3UZ%6g!9@YPCEH>{pSbt>G(YD|)FT@% zQfIJnpkGk;&Pj|#0^9xmbkDCP&!p$ay*YMFm!qCJE3O#(G(;5?e>p%D-Wj!58jh| zs%57W{2P`qS)g`H^T(N&jq~NTZxj7SmWEfPTzcg{n6F5T zk(YOFp2<7~K*k01<71l9rhJ(8DU> zL+m_MyhdsJymjTS&Nuh^r3`1hq6RabIE=3SBCpD;ahV(DKvVd}qT?xPF%{_AkT9WI zg+dp;P^l?DpKAr*XHEB|gU|S*mr~wAQqrr}*SqohSSE^NJO7_rq!QsV3Rc$#$n>Oq zr?Clo*1lWTU@%%FWHujn1=lM<$1&gzvSj3b=P>!H)uUQ<#+Xd}Mb12KGo$DbO~|F3 zd%p|Y-VCCuXM?@BM)t+|&~P9dOhKcbc#^j8x%UKKZd~4y*A>CbV(8h1qVQ+&H^V3J zHethurtGq_-#a@yK=gI7I$LbMakxSE9*oEBUE>W}ZvmBMXTPPY2{65wjl&O#l&f)0 ziL;=2+8EsdFQ;crCX~|J8Nu_1KVp;aXWXq1y^u9EzR)W6E zAg{|`jWmjL+P2=@1%m3hfrma{I_Eq~ARBrv%W+a*cECfQp(mE65w(uIMcly=IjO^K z{Qq{n*z8R3YH7xZGDE#bhNGVnp;)PfS7ZAcpe#mdC6%7VHE+z4`yD3+vS+)qMIHyB zM%AE7E5jmHTt}f8g4M<Ju@F^z!Hoq@ z_Svi&L-yOgn>|1DX1X*Ho$L4%5x-%z`W%j{%O&2l!~-+TA{|C(%UZ6T#0hnD_| z*3a|YZ(2V=FM9{=VR|1&n(~Fox5?GCI{ymhs-7!jRmNdX^OQQ9UB`0|ehyIz8gDD? zO409u9a>luZ9;$3RyKCo>?}|}p?05HC=0M*s95xB#hbr$W0r98ub*wJdv~3xx^+PM zmbG|H)3ZP`F4u+OP0K%GQ5~h7_1puW?yWhyauxB)wt{F4s%dKb5Q=M@ z?$NYUD6#7+XgeRrrRO>exo+-3VZNC3>q6&C1X=zdvFo)Ffx6h0*>T2flj7rDsqcAf z)2!tq6vl5`Q|wa}LVM&5ga z!+f&Z=#zA{S|md&`SQ2Tyn0h;?owj3WDL)~Rn42yb4(EC)m!IEzaq=1W`RCI6TDQp zG5+F5^pPQ;I3ISg{IxLm&c*1dMd{C!1X~Naez?}G7`K#%8X4L(CjbTI8*fzn*ppl6 z4llLkqesWLe?SlH(96;-SZx&GxzY+>GHG^gfmg_Rbj;&3Uta0SHow(d6&C-B4r94ocjP)k$aVI(|%aav3a^G|UfA z)1vp)XW>Qnf@d+cw`4+%f+}nVC*yfWYoMx#UjN>R$p)Tp9ObD2z&R@Rry!wu2V zrtB&kS2|5@_R@I$t0Y+7?j$RtpHG42{d2QSs8(QbS1!)(Uz559%z8V{l$*!27e zL25Ak7{BSIg=)+mVh%-ob2Cgkn|MhFbo8y%F3s$z$_%^V@BEWZG@bO>(mly;X&T9& zAyy=nt=kH|sY|8!SqkmkvDDLZKRXWi&G^Zijd)wFW7B{smGe)Yx>^+@WHT)Vyu<7utA^oPce@Btg1V~X1Zbd zO&iiex=+5HOSpYc_g(pJ<}zKE!=BkRJC;)XSXj}a%`3^Gy(7YGSr4UTtgj&uHgW9S zP0vb~_d?AzCWxB0LEWfJC&Rkr=Zqs3;D07=wkvL7;E*XQI6N`ym6V0I<5Xwu_Y@Kr z(k~6iWz~j}ktznNEooXt(dUv)n)709`Wty2#aKbhqS~@diub*nCJy@P{;RL0%=&-> zPG3lg)>gz~a``?sfpNS(%cUN(Mvj0_;woCDW0R&HFp2D6dwxFHO%BQ{@@3DD6f?cs9NY^<9cQM;%Z5&}f?L5c zNF!;Qak{n%T{VfuwOcx}AXh{>spaf%iqu~4&&9U8iFURly{cx-R9gOc~rkR7WUrm!4vVd`17B7!`uawH~YKeT| zML^FUqoT#Si}m1O0u1@N?f8awJjP{Bb>#%4F(zdg9rxGnh3S~he5K8*Y&E=Q&_Rp@f zZ@ZwFxU*08NY5!ZHgJJE9&g~8#VXg+^2+J3T^?u=g7c42jv7U zBN$v|a#XWjWnX{Pr&rjE~j*&5%mpY91(R4HIapX4yFzv7y-$d7^kZw1fBD+`{qP zwp*#u@KB9t^^*>b^s9{-Terqh|E{2|dne)e11M-Y-*Bl1+^uub^_QQ(hwM84ejp`# z=6b>Yk$%Q(f3MmS%*@r&jy{{)4uA51I8Sb`7VxCeGN`oQ1u z-(E6{Bw_$FfV>FK%mi<-b%yMZ?cmRtMrP5;bp?NQu}!f56=eK9H08pRLpFm%xza;~ z&nR6`*=Fv3o)>-cqu80B&buf=i7w-(?uP5T@VtC z7nVMg7&c>!naPR7!3YWw65l$mCX*7}{Mko<5!^)IhQ4B-O}2J|{;}FEyz0Z!y0#6K zHg|TViCw2ZLF+%LQQ%OjD-ZP)aMSc;nG3(gL#U)C(yY5nht0pCKyK$USha_49*iuj~o1*rxYZZ$;hmkhYz<`EI}QR9Cn^Dg*#lC5N^n zmp|X1tUiB6%y9QRsA!rTUurKnRy@(HZ|#yv&&uzzGQi&pm7P~x3}&|6;k()2==7H; z@o+ZwJe-4Rdhfdd{r$*=N%A5|ua(1WO4^M8f)d9-C0&Pq|I_9^s3zy7(cp$$^?+aM z;J|7}L{fs+Ug$A>dnhqzuQ89PuH+3`4=;Qx=4|43{#4&-+bK7yR}+5~5hl34xbR_V zIg*Y0LE)F5+T*p107}%Gli#aHsiInxaFif3Dlj|l!#|VaGM#dZYN)Ae*N)@GP$wpA zYw1*xzAOEM=8T#t6=7^WZOf9GUz2X3DJsx*^OS7#GB7vr zTV4hTbLqpShm=7{j1?R!V9J(uW@tMRL|~`Sl5V|ze^9M3gv$@)#+t)NW`_QNW4Y4R^VwV%NVH=1*D zu3EJh1q@#%A%(5rDwNhy=Tj|E9RGVk7QSI!zP&8b5RJCgZ2|6978Q{+s@JAFYD7nGei(Dx355lCNVot_A7)ULS%%p0u&$QpfeTtX+UTMVa zvF@taF`(M`=FCg34kqchE6*HP+8R(lCSR>ilHXR~zhkdx=17%qL<36;m2>-a@Vav` zCRL9AD#)ef?Nr0ZmHD=h&eVvn}vPun2_Sma4B~A1a{~c=I`Gc+n z@4IsR29bRhM7~xIrfL}}f*Dv8*Dri7=>)Vf_|G$Kx4~!nOcTSY*|TbE;Q6<}e>jEB zr`O9!8AgnIm{xvv7TVYpwA-mM;9_3%@dw+^tQ*pXZD2ohsE&w--}!kkj_Zr7%{jLS zNLX0?mc$b|k5v&;dnATh-e38jGAk!LSi)d7ATVInWH;4*^z)f@-uzPbRTYy6i^2=z zMj?qmJvXfvkzvjUZ!9Cs8MYgRm_@#az#SW^2<&uVCd{icBS&9@R=WtZvBYdpzvT!y zPmlGM&&?(RU;$_POG4XYf}%D&wV94AWh6M2B12xS!UJe-Sq3NFHtF=Ye0 zAkrLUv^MFPk@8^Ev>jkBk%usV?j$5^Y23bHgdK-Dp3_L+(8zY4$thzilkUDDM-F4C zNM68cq>Mo?yQQe%GH&A{4!?&znUPjkymqonhBnUoSaDB{7pg+kodOZhHzFOvepk}} z{fb;bWNt(+w{ExoCzok6hVYGtOqwg{idyX!zyAhIM~@y-43s_c>&scI-hlQGo&lCI zBF7<{SSYi4q^D-@-1OB$!D;0rM}fG~09fd?J6Qo89m;BtF)8ejApO@DU8~;Y!+FsP z+&1hPw(xCE`h{jIMY0NuVgny3=-~(>kkql2y+2!^o*Din_t}(g-x@0{FjRe}y~tBT z3Hq}A1FeU#3v=7PFz&GX5*%ApWGGxwb??odPf#hfq+(edk#?56pkNdNo*4uj+NlxE zHL>Ypj_U#bd}dF$tyIL2u9Ld~$*K>>z2kT6bPddQ_FefT}K zgU)F6DAam;>8Qb4#i~F4I`V4sQNc|w1dCM9%Bj6lQGfi_aM^7h?YBm!_C3~DJ)!XO z=;m`bL=^9>&#rScHqGuI@2(rzS#90e@vPf9yCmBn)H1l+q_My3<*)>&%z7u~X6}aR z2>#{%ZkpSbVztH9W4tAYlCE)VJs&gMj;wh7NBqTswi``O;}MO_Z8Lw5govd#Ee$)= z3+e}cs2~;OHvCo2z^$RHh(C>cAo$d?19sVIr?hK3j;GGG4fJCCEbWQ@JBo-+H2jmbgRxk^ZPC zr0J5)u8Z6v@BX#r_$$_gT2LaWWoVHQJF3gk0Kn|t&=oDT^cDYduCQudr!87BPxnb| z4L%aFlfpng4(mzp&&o~wB*!V`Z;$&BKs3gaL+#r`ZS^y>Mmx*5j~aS@y!+R;@x@~m zG}nN^@oFyW!qFBF0Rqi(*W|%eAJ2Wy@Yk21mFxE1L#5g``r7YOS-)*& zrex9Bp>qj4wE*gC@s-UUp0Gd^u-oRA{$aRGCc9W9eX(UF%EO6z%d&{jQ-f=zC8uU6 z5Qa5ZXGnL_AcMF6QCP#Z(=K5uaP8hpJ&^c4EYAZCJvmaY9Ld@M{Vm7u{{SiKo@de# zViPLuWZzZDMO`Xz-#J^OpK5waibwD~LnFrf9{r+4+jCD1ePEq2r9-`35(etDbE7rJ zVW%^Bu??<h z$<94{DIVg|JAyx8h+!AXa5A@b6=H%#i8}kn%DI@I3wc0kPTzT zXGwZxvSv3WN7?LD5QX8|y4mIO`l^Bdu5ox)#@V+AXwFXL%N#G|2e5r|z+9g-ka|p^ z-}ZhO%^(x-R`~5W`|*y{>Rw9q3heEP&Jyv)D=OK?+I+m^IIjd@P8?HpO|z6t`_Y1B zhF-$&p6t7#IyaJkWT^eli3h70Q;Ma!rEE9~h3XuGrj_Hh+NwV6L%lTdmwD0V z?yZSC1S!;JQJ2Z$C4ATZl<=*HIcr&)bR}w>fCiP&sgce#Uo?VF{d)7#TOl*BXlo-a zw%hV5ylwWB(^Y$v5(nQO6JyUa36MfQ(x6fvtXI5QZ=MgV{+eZOlkc0|mjBG_ib*Ub z1N_dK=I5{x3QKWQxY$*(cICRH`}Bmb0~_pN-Db4R?^lPdJ&e@6z{?8q)%CxLMx6 zHuxtL6QXULVkoY(&rqD%|;VU*~Nq&6R@S4Crj!K&81aNO3(m6YYulM(|ti?Si1 zs_<)ZDQvf}Y1l9MgSKR(nihWaluL&I;-N|=!Oliv{Yj5Ftifx2Ru(0+CCiER%=5T4 z7Yj@n?g>Jt6K5v$xVXJ9WB70b$4;NMv{DYAC?@-+sWC7n9{uVHF6-F z9J@Q92(16NC`BjD>SQLb^GT7w^j7bsi0yY~ZLr{&G#leDCKi_=rElv0Q6|HX47Tyq zXk5WBdBFD3m5MiKx)Lx5TTBkt*aVP;bH*>ID&NryEN)-InI-dsX1e}{aaU$e^poAK znYIb%GHlJo`njl*>FtlT-8zD{oqmeYjUjRvLw)J}{5NtI!11pAh_CS5)Rmp4F)~dv zO>2q80R;^Ar6+n{wy206(p(~^+Rsk8 zR^?#%l>e`tl!%HCY3u!37B_Pfb>pmP~W=7C=ju`eOqAh z%B-zZp*e>a^<&hDRK`w9z~-~@lOosqNMz$sGPV|HWl9a*LAnNEnh8H*>~k3N$kk6)4%s3D zNKDRpp-pE*;1cD-@MT3QQdNZegKV%z)cr%6TH`oevR&yJCZisHUc{y@=l8gF!_8u+ zsPQ94U`?J4R< zk@N5W#k_7{UR7xF2`;q!b=0e}(P91UH~BE;$~MDmmWAFemFRd@VL*bN!s$5OOgBzr zKpbL2{kQ4x>6CgaWthsreWSW>?n_TJzchII?g9N#U$TQ=swL~BtV$2{XEdk2L5a&U zVt?-mgP>E}${}j0aM;vDiPmm#4mM@C8_j*@<1KMeJ*KNdy5}QjhcVe;Rni6y^%lt( z_%Jt(+-2LJ{R#5NepDfo_j^IRg}dqc)jbq*LFTq6gkP--Mb~YklF0c>CH=p^$U#}p4b7C$!O`jkdkIFFoT`#44!Vu z&n?sHO}*MGVJTfo%xzx9RCth;$N6d@$2O25E1woatEW>tIt3 zY3oA6Jxe!OeMN5x0qetC)rPLvLsmk9#&B9Q^YbxUz0SYu$A6K)u=C_#+=AYQbep*W znz1$?UaFtcL7-4U6-Ezbrhmmv6nu{V;{P|00qp979_nS*CiA&W_;4n|sRQEC1zgH` z27LG2_J)HE5YdehL5i(#cplzvks3VJ@K-OzW~Fi_uR?CVfJ^P$W605T903Un0U4J{ zp0fL>qWk2;n#k?Th!FA{tkr>KyQ@V<4Fwm%TJLl(Sqd3;x;!>Duh;KJLhbbwIWD1{ zO5iNrmqzoMzTd>!$q#!l8K<$D?W7pX(HxLf7YXG1IzEQuH7+Q?oU}?9ZHbSCOFii? zdeg4Hl(76|h~0=*M;mRmB&7i!$1+zgPb5`~Zd%GJY0b%x0<-@*(0`(z zIG7jy#qCq$slq>KeVO?kvJCSSu35BOW>Z?It{6JOOZ zX(u;MRrsObw$t##pGb>SIu2LkwHs{8-e6@1$S8hFe{fSnY)t>{4mr!5Q6kE=*_=h3 zD?*d|Ajf0jhwld%^kIMx#8q-GB=*iuX}dL;{LbV=7`@$>SjH1-^`YjW-kXq{2PZPe zS7&e!fTRJ^5vo-(B3BIipt;LkQ;jQvflP!an-$_XR5++#2_Xe0W7TGn+8xWs)k_(d zdS)-m70bSyC(o<$OVF}L=+y^BYp$Wom6mH+jV3@CYk<&Qx)}#%lbeC<0EbUXtyL&- zv8E#At>lZ=&gDSsVWMqK={@@D-uJDC`?G?ZX|A5!jPe)9yv9&`GqOj zo((|e=5pzOqf{e`m=(_+|JUb5s#E%L&45z!;#gRU^bYlyn?IhBj*9NZt{mfyFuwy{B`H`#I|w zm%B238-J2HO=dKkm5g-mCGIs?4ChGxxa!c+QUi2o07g%-V0e2BdLT%8Jqh{1M*$~r ze7~OZxhppdIOa5^MXG9NOn9Mlf?|pc^B3r@``8UJi=En*CHtA7iiu;3PJ67{03iI# zvJ|;;X9$AVXeG+VRn@dNG13frv6{9G$L#A5SB1@vL>APW!LuKJNyfG zY^9myq^rg_DNtdmfJ$JK;c2SH?G~91^4U!$?@f;x4YdavT~~U*Lyb~vDnv-miw-(q z{u4oOokS!+{&h4USZ5#O33OB$b9V0&Y85akBt~MRh8Nn?D(|-Vpx&JHEqRyV<=eR~_p47pzo;-z^vIDAWBG zpPsJx5&SzAqe3C3ankBKPp!` zB#gkE_WK3qqW7q{9nT!R)4XQdL%@Cy0=zO%OUc^nFY_R@OCj!X<}dUlGC!}odUTb= z{;O5E6k^I+mr%S_=XYS-PhOR-3l^y=FLBlp3GA-1lugop@SP_37Ygaq>F;=#xD4T6 zB?LLDKZ8ryqB!tc-$6>T$>9!GKWqVMaI$4f(%-xsWYTcLG@!3lQ0y2PPf|{p? z!={&nb@@17yVjNYXR?)%XXU4R%qaV?h$t8&`>`XU%U~#-^Da7zctanO&fQM; z@u{K-UT$(qiD^9>xWpw?&#pb0Y%7=Btwl?hlsSW2I>E$CZ@6@wMk_;Z*6x@n_&J`< zn0d0>07LEkq+m_m{gUuE6tG&4LmCF(HY*d9RRkYD)&hMDpPNU{=LdX|%!Qnl=Z8dy$^Q1!Eub$UWNI8*NQS7t?-jJJGMtggfW<5nYPpgPjU!*0vO?` z{|yXz^Ir*Q$g++z?>c(Yu&4*TREPdd@lnH#5eWN*TQl8-n>!=He<>OzIZpb7e8AIo zc(*Yf?)|5xjSc91FoC$M{wR_yq;4)8(zkzHa9@c&c9{Jh-$tZr-Q3LsU&_lO8x`A! z;0yAiym+YQt-2)Q9~(>qZ{ybS8N#yHOl#os!*v9)i65K%3in<60hk)z42$*> z>59@mqf**mv1MZKWOa7dGv-EAL-W<#nE*A}+(tZC3=|pEZ{HxAJ3@+63_RMvOdA?;!k(iuz%<)ztsrtW1Yv?ki&y;|=aCx^IKdgxn!UTeI#%rE4SjS|zR1P|c;M1ys;PHP_8 z*k{OSTgV%yTQ20lbzI&tA*Vu@Jr z9wP-f!b1d3Uh8EysY_g(lu}+ep8uN~ai~Xy(HR+5Mo!|&p>}^Yw|qsjXQWplC(YRZnw|Us-zR;cb4YOeT+AL0%*fH64F~X=U@IdEBc;#fP2tC;K6pxb(%6Y~Y(`#PymJ z5+QnH9qHsS=w}jOnL6ZW_Ip%JEK=)JJ8p71H+J3buoij&WGEFzOt7d2(f<#A>FJS9 zKh}?PuGx0#2Rest$}6hi4=k(_z7ILDw1Y13gZ4T5-%X>sp0d@7v8$lO-$38={qZ<*bFAYa&|oN89`wIsPbI zZ&9!*H}UsM@p=|PpmHV_R8aF4w^Q3Ja~3RxMXPh5^fR_uev_L0Anb{~D0|o2*y{hh zD)k5`$Yof4J-n1%`PHJOt3Vy&@C99Xb*#>0XeD2(0gMP=Jqi8mA?pkJvr0tf|{XGbhe< zWpe!oBupPPW=>xeJf{G{W?b{yQBZSAOvZ8IGl)y(+M2|km(KsufVf__5w@dsxbndYj)7bWrg(OAD3S~*v4dS za%9pgC5&~~75-`6z5cnj#-)bzV_uc0Mo5Xr;r6!X8pu31`6`I1S%4@eiRd_NvZr+h zru5Kg28s7Nbj5%f*wI7NUt)7jM~jO6RQtEy>T8Hw&O=4(bSHs*G5+W#_a>Dq<+^uo z@sWJQgdOp#?ZaM1#qc{% z+`HBo5D+jk@R3t!-72~#rwsiDDW3WD^Sw6&GshYb@|KyMK;DAB4QDk0ZN{#9H>qjz z83)bL@=$*dsmK1VL4qF!_>e8HqUO5)%z&yMwFgZF);@DjlVMQE9kQa{#f^^|{+dkAuS8=6Nk%fw7 z#^)NEx#yE>O{h|{6Rn6{N67&jhdMtu)hHy5ym+k#e-COg2a+cd*U<0u=KNYD#4K16 zYamANLwWw18y{CMR6}!>N=&$_9dwX@uRId< zrt!H;)Lu^*2*8s#KENygB(050pu}fkp0GqMZatUGB%NS93~&0X83IyjYIMiST>bry z@B0(nzVC(v5`?CV#U~nth9*flFd?k5sPDU?C^Gy@A8C|iu1#&!xW~`T&;6FVwY0}( zH_sI~C$Phyp>ff7#=DpPRUi;k4E$e<4uYhO>+7%0ucdhe4O)Xd;{ttkZgAjULlt(N5$~=b0%iwe4d^ zm_+*bQ8GAo!j81!NlR?dV5vhCb-7h+<_k|GNN^1)Dq& zEnt$sgtF_rc#O1Dq?J>4syfAGZpCASva}Nx&R!vKVa*Ua8mupJVH+LdplzRTPcBeB z_kN&QO-Vxh2kmv%ev~S+y=l@ZFjgI#l>~sWvv(7^Gt{rUk{ZaIK34){_Luxli!Iar zDBft>xttI!p`jc)9EN7FUjAFD-{p2!Rgi|ywVrr0!2UJ&aqDk>tZ9rwzm97hB)H`V!x}*K# z2ee{HtA`oTRB`d_5B^vGt7y1l-@bi2Ggb#ULrAL%zXhH-AlQC3m`ojFoXAX3{rjto zZcJY>IfP?i`b=|Mt>#-xu17{b^O;?P5Gr?iwBLC=9ZWy6m&!g!=Bz#}+o0dj^$Ptv z#mtmX4PP1FOu4E9!32kw{YGna;CutvQD#;TkCz0-0nT387?bit-wVPfatel!_LVLxB0bsc$0J*4H7x$dm*w7>PLWvIQa8$3+WltlGVc@NZn&A zUy7y%%6>%efDeE?7Ci~b9b!^1N_uJpUN>s*GhN0@MVo#<8X+jw$i*vZM@%xmzWVLy!YaL&Jf)APdHsPSBk4 z6d4rUBf4I&JX>I$fLafM(nC|f%Qxq?KY4v!29380hvlWcDJua67dV+QVT}3X}efVI>SkAIV)Ru)#sSP9^1FS}(3ez%gCxowY~y zQf8*>ACt}0Vzx7sdx+wiX_%Be@Nw%i=$G~cHP|%G00k>bt#x$?-fL_cuf4%$WUZwP z{Q&j_&uaK>97DPjB+4}NuE#~bTuTQ6(n;&sHJ}`QBIGOjz(>Tl<_^e^>XNPmVt(g3QgBuqN9)Pl2&H7s7^!#_Qqw@}Ey`;*3vr zWiG3?&Ueq%uT1IBA!Fny)PO2+-#(e^zLa&OjBj{YbSiob=xCrT9$>!*FtjR0!b70( zU?NCUx7V&wwrHPYAM?-2k)$FdWbwYV5U#C*+p zH>tFDPz?D1IbLYbz&NL$K3m;I5iX@8d8zi(ZrC*Km(+@h%{rH`(DMs0dOWmnOMS+H z)_}}_X=Z!7sBx}!cs^7y>)>(|-y^zq=Fnx!) zKV~V0g^xDe{ISWl055I?^N)cBfRsai=0)2L|3U~G2!`-~xCLtBYNk z?Z2`dj>C5~G|9I&|0)a123lY0GefkHWG`HcjDS4B?&wT6Gak}|5W`wYWs*v#o_lRVH9*NAM&EcW0Nk*!Dc;$ri_MTV`7NX5JAm#2oL(QkCH_y*=z=dnk%V3$+azwS-T%DOoAV|$&kJB%{2$$z zS$ann!Ah>`D6QXz^wQkma!g^x6JwGH!# zij0_!=0HH_rIBLl$*s~!Zb-mg&b7Izpz$-`laT!u46;G2?iv!4LB98Cgg5`!N=}h2 zho75Tn{+FMxy%}MWir0GLlU@)5~$a>oun?6KTu-xW^4luXE6Bl=d=>hHgn|rDNCoK z!dTq@9J=VJ@ybO5(6Qhw?%!E@JF6-Bba(0P8rmHXuS%mponR7h1=r&@S2ps#tG6fy z5W}8=VNn2}H5ix*Dl{a0PT~t2&9WqBe5aoGro<}-?WCo18tK0BrzW#j&{v8R;5sSPzJ5+pRGJSl@ z9U1;z6rFTkCPyK7%13hO#6X`4Kwf)sAd{t#{dNHKAAH+sdJIOT5)PuNH>$%pu`^vG zLrcfvWIuBPoA`F?A01ed009aU63CigMtO)2KzT#H_Vx9tAp3y@`9P(?!^K5e3J0v) z?(S~UuVjJ&m5Dnm`FJwqA-Wf025yd8^uf-c?E%mxc1;VW&vmQNFLFZ$V>kRLSJOyu z`&tPTLp)ClBr?-d^vwZ+mYS_0Tn#gKaJ@l$@A|u%OS#KI1H?+8cm}`~To(tq+~HAg zuYaEJt<}|fJZ?Jr_04vueLgIAAgt3u&tmku`727Dur4*NuG*Ln}S6T#Le|MIY zmY7e_Nx#>3(kt1~N;}>ZqB%)2}2ZF*MO=><*?>sFG-O}gmS)G5On}$B2ts{ z;6R7w!J@G%JSUGCze{hcGYeGzdS9O3n}_O^hQ}aL-{3}VZufEA_GD(SjX{f69oVRg zcO3MS{(XeO&rdt1tECREzF%r$14>4**eM6?vJJZ^yf>AGr6`Jlj~OmkUH`Ek`TbXh z)jreu1I%3*x(+M^(#r`fHH&^xFHA@OXC{ z-`A&uSq3RxkFVuY^-;gW0Ud*vuyLDw_^%Lpvwe?z4~EuQcYbf0Vkr3dIE!f^52ZK| zFcY2>f}hR}J~3bRgzH=P*6xQ|bH53ZV+VWyXwB-^g;7>Tpfh$YfZ@(BuwmwYr35%# zX0TXm1*x~Kz!jtyrd_K0BjBNIhAN133@j7Uc2O&8idBsY&^WVr?Dl?e%XfLHilUjs)pv#j>P|VtYloB%zC~QT7%|&oz|T;O z*9xg_8DegRktHh3CH>m~xfKYsbF~--qN{|3qrA%)F2!!Xd9^KTWIWB<=MQUYq9|+> zSv&Oa;qxO7F{Np{m@AP8G5@?am(Mdr7SYB3PG@K$_O@z_np~uLm^i!tqN9|&)%cPy&e1VWVsaYxl#Shae2ZEu;xb$Fu)gQWx@O+O! zTxUTrXOqbsO3@sz%{&QerU6Z|+2xEkk)bG}63cp+12wn#DX-GiBDaW{#RHWoe5}*M z;i5}~eC)~)!%NN%CUY)#Vy~2F2oz&r&3UoLv;kDFAb4lBlBetp?&ud>X35v`bmN$Cg3Zsag3P%1aKwp0hd8y}W!$HAfx6o3I@eqewfmML;uTB3&S8Z1*8eUviE8Alw8_2*;cVA*ElNbzoa z8&}s9nYQsCfzEJnP(*}G%Wj+O*xmzW+6m`_*=jy$x`C+N1nZQX`M_F4;Tic2+!+Pu z9S8GR`>BX4ia5|i`CgUaK!FTh^~6ot7xSMdg;trniKpnaI^Jx2keHu9SjC~IQSlVcx+n7MCt8$ zO^q}qnf)ckF^_khefxr;#1^9kJ%zi?Gej@k_JFunh9xyqI?(bTa$>W%U5lt_RcynJ zN-vG8c^u)FE6|j&El=%y9n1_FZ+g6?r+(wO$Ukvi0hCla#?eOG4uk=b5h?7 z_D37>+g+2ku_rG$CRo2Fu;&a-7QOq6E{+^popMmy-V9!UA`2|JM*Ha*My=X+%u0 zEVu#ffEuU|e&(5wJ%PPR(|4VlDKky3xl~80of>Y};NL`Vv` zV7|o~tje2pu8me|hW&ey)KR|M8RF+=sM<*QrO=(0eZzzK3lj6Zcu5VMoBkb9fq4x^ z)|?MT%K*pYLPIg!<$z8Nk&A6I@x$d&M!Up01cpg*ms$FQ|BtJ$46CZ^+TAvYN(iEo z(gF%fcZrmgNJvVD(nyy`hbRb0w?QM_ptPh2(%sVCoUt}M-*?WruJ?zJ?{e)q#~gW& zdyd84PiL1G(f7tbu&wGA;7tw-)HmLV_2d9;F270T8&+Y$7@5 z6GnOiu{FZrdSA^XmJXnKF)&WlRzVl?kp>h3y=Tb)&nxmj=)G?8gjof17mzbDKCsFM zR$vWq60|ypU^jHS4S@Upxb2)3g9O`Qgo(`mxk$FkTZgt;>6`o zOrc$Yb%PNNe$_n^mv?n4Ql zK{~Vmr6s(*h7_uo>m)_f*XCi6px_t`(NbUWR)i83NDe1k!9ijQfCO_Xp@`X@{rBme{;h=XF&F{a~Wx=Iy+s`>wd3KX~8)D#XB zZK5gpP`cL#bOUJt8Yn3I7{vf3Kvuc{hX2k0(|PC~2g5bol{RD!0=hKEvxjp)E(n24 z$Giv;-z%Ko+-ag;h6uGBCX3*fJ0N{K^y??P0Y6kmct@#oz)1TEK-EWZ9{68J@G{5I z=WPqO?yxj#!2H9I7$+Dv2t{*E*;ATO;Fj8gaOFB&b@TmgU?61z>y=v%sqAqFfS`%S zT)tW$kXX422{cF{-4jgQUqmb(S%{<=+@~6SodMnZ6IYY~P!{YHR3;AD=Nl_OrQ>gi z?xY&Rjn^8fzW=a$K`&0Y5(gAQKn;*)s=tVXXnH(+YU%rTu<&OsdMG?1KyFq{lz>Ez z7D;m#@J7pkj0SNPCKDoRmL&hKbN<*4`A4Zz5lX#!sNeqvip*C$l;D=+$v4sCgZ8AY~IP`Y`Z5Ht7{YZ|@a5 z;)wAht%8+M&%ifrU=07g&0&TH8UZ*4E+VifpnODblKF=iU8pvgxq^Bg=TI8sE*>Ll~ej&cB`KClml`5Px0VbypZ-1q>36aIfyD9S(1=z^ew@!u?s6?QvF zE6`x=3Rwl%#mmeBr4^4nAS?bCH7+C(pr&R)v9L7%p^I~b%CGbS;ifrBLzu8^AVI>! z?>nkz^V36F zAp0)}bZr5mcF;^3R7FfGIpj##)CU0&WCHwM!}9`E4;{kj1Atfw*Q$Wh7Ysf-VZ%=e zHCY27C~-L^eDZ+odMvCyad(HH4;gBQZmeC!GrS7oEw@4+U& z+JL~;%%Kx{Rg>U9IM6+58(Q#}mdT-wjC4IqZHyrn%H4v!Qsp9GA5$O#_8|vNrvn8% zz$LIyL=nRxV5{^C8R+=#Ywh;1Rh!_&`|G>}T^#j4gBccHf(;@O|gy~ZN z&y?COBBjeSTadf4DNsFY7$(7+p^H>GRz%{^_lKVcS)kxGzxOA|j&GKW!xR{F(;}gx zHC{l#^;e_b!&4NrS{B~q^#Y)CXhvge($YTp^d5cyC0DEo(E13>OsUzggA0Nyr}e=> zG_3xP%6Gjc1UM^KmWg78dko0E@F4(iYhH?i)D!I&82Tz9zOxgWVOk_Pns;_|1iF9=y4&w~zCAjybk1_Wgw9Kn4zWC2|Oa}br= zXBG6Q1`sl#nJtY_95~R#r2{+cL#qL}T9m67tf9sc_ziD4I$&1_7af*{nrs4a0-yjS z0>FCiAhLf2Znnm07G#VNe$l^u`7bzVu>AS2$w+P4!Kf~o!bOA;;Cbe%(Wdwq|7ZLl5*&M_<2yGzgiL1)&zDglrbq z0g5^g!fwa{Y0w5vjIz(CePMB>T-`_KV4V$NuH0kpKydu2cz5y&H1 z4DmbeR){=OyszBCE3ZZn-IHgK;cn0pK4BEOuOXhf9GPrcUf**HJB|Kz0hlNH)pv<< z73ojF4AVm;4En-g;Q|oi1*SasnujdnpsSf2R_h2SN=$$!t9k-W2|6Gfv_-(9VUz!w z<~cg6gzo!Gswg@|IB)6%^O4G$GE=Cs&_Z=xI=K)8x6BblAwd{^>7zG7Wi>B`3?J=5 zcFbvGEQBF>{!cK{|q?1UnEP(ZP!T0{~@Q z5E#I;kOMkE4q6dzaN!9t=E*S7ElkKVyFC7mL9FIMbc@bX zjM(zg|D=-SBgnGUKr=id#$f^r+Lu$mJn75=?hb@S6!{sDMu;84YRs-ji2ld{%9+4t zx_$wk1keFovIi;!>b*Doo_+_67#h7$0&RD+H0F^05oBJZyg}J{ZQQ`01GpL`{uoRo z#J5VI3P#(ZpSuf_!}L~g;+phKdNPpA^*y+v1A(n2{;xp?m1Oq!Wg|BFQyga5LM0rl zqI+s?c>iSgW{L51;MA?Y892sV&)fUy(%Um+^*&rJeiJL_Uc74K?d9!z(RP#bZRd0M zOmSX}H;ng6jIE@*B%;`{Sy~G!*rjQ@Uh+gv{{2Vps4xt9GAlKbX&G^Fw}F z2*0^Ym6m%D<()fkR`%Bbe4n}x5eam+svtlAJ*|>Sf$EYYOf z28W05+o5mgqK@WgJCi5<6t%Sz2RFfkx>JznpGCO`89;*MITFjm!}H%8kH2=CtktHa zriz}t@h*<)8C3PfeCrvRALbnu6%|&52uTSwDqFc4WDdVQF)?BF7x}Bp9v$$7Irh&0 zP2su*lis}fz6`l@3ZvLoAT`@Sri?XRPv6{pT_T0>VD*KJK;4OyjEv~Uisn9iz%2=Y z|AymaJ-TuIXGG;jDhzmX3oX+_{*KsF35Ck}@a-A>kL+$;UER|~B*>jRcMi5CF7A7> zE#W)Jwyxf%qw`()wF!;b$rC{dTDHaUNyVv9)6)LZK!!lj5ehSa7zB>j1!xcaGrQ*g zdr;^h3kxhWEseh9AF>`%5oDPwaKnEq(lGAMK@y*U0Mn^d{ox}d*Vbz1fsSz^0!bf4 z1nye}*)BmV{|Y;eKAwtz>kt_n_P6Tj^;)fonVHN|2%J_mHgX6ki=AfWO5vTpZ?ca$Gq`4WIsTcN0X`GrI6g>*(QF(K38@@4tVP z&1b*jzH)B8fqyGE8?MkHJT8EKyq6!` zSG((0p65uz@wEBTUjk?k=L5j<$@yprBdf2TLk56-5jZsdVLpXSv7xm?DqR$6 zIO*xP#_Q>bGN6U;=7q?!It&{yB1nNa$L!XTJ5?vbMv>>b?MArmu0>QmiBrkU%4*hl z2=CZ=fanT}7giJh!A<12!R6XQ>Vv`~n3}c*6Jo>AJ4B)E zQ%XuAL88II5oi%%;Gjh$?!4?YLV3`36xr@Pji}v!?@#gYI12`spZ^RkG;#~HQjl-N zE<5|IMDK%Jrao0SokwC~p|nbii;E`$ICCKp`8sTgxywH_&yf*<_7P5_iielYF8W-?Bfdq4(r z;NUo5KE>&yWavj_pGZsNy0#v}G(4PWRuxC;F9h2QAu_j-4IOu?Uwi z$y34RbRL3|G$>cD5vI(Iq@%8r)IdK)eD%{-MU;_X@2%#0?1?9{gthH_7dw6BZN02wO|_Jte4QP~#Khz@ zf*iE`t=wWeb@PsA1fTz3D^_)N<<};Hlax7qu>dky?GW*VU@50g-hKT4dVN_;4Dk;G zVZ?!=?bZFa%X;((Rd9OcT3GhMG)L73kf0m|+U21jsC%H^M@CBYDjJ!Yg`WsTE(;(( zh||Cm`v`U@cmIE%t$rUK{P*}MhqJzc-~V9hdCr9 z1cT=a2?@!m(Kd&~#mU5}AopuPPX*`xcbjJ=goV#)$0w$zOPy>}@UF11FvxmrOdC;t z0ki`>dF=}w9UY9atI%RO%@*GGRUPkFxy?ywQOIU6-UvXH>m=r(4+n!+US8gl&j+q| zooYzqG%$cDgVW>S#wUXHLTIfv|6d87Pgz;9_%ZzxF1MbVJNeuF?Pc(zXs-gN8IMjx zPTu|uaT(fJuqffv6Z+CWFaY_$&W=5@^kcLeJz0A7GkOAT%5gxAPbI?tR7vS^oJv@D zIAW7K)c=>D3!xA2!`4$XJK|JROFcc$gV(R9&;a38YoRR-tx)I7p$hfRxvR~5^HibA zXO9o7j>Y0sw3+!)_Gi&P-yKx@1?3J*CYS7uQc+hw%`@H)3mkR{9M+H>oN>_Eg!~+F zWjh?OkQl~r#bnDj75DDnSHP#Xdksxt0Z*kIAzlDvJ+JzAcPpNH&AXYInI9SywRV0G zLQqG0_$tV1+`Inu7q&+KSuj-JeapkmT)@!>qD2HmEW}Iwq!Z}07U^ObCmC*7`Z4G1tPN8Wy$P)C!KTv-zn~U0gvC=nlYhIMTUVpd#oY`8d>V+y?V@a|L=(z0M zV&c+b&%+XVW6?Gv;foO*=s8EYQjh6GD6mt5eR}w{zJY;MvKf1Od*}@Yjd&^D_+{cY zveM}>@4G^!oLBVCgLVFE{zQZ3(i|yk^u4D;Y@+gxht7+0pKorSQG8$DT_GmAl+G#t zCAw4LqjFS`Ef3oRenrcq`}9`v>9=R^QSi zRvm3-3#|Id;@H9zhzZC~(Notj*1x#zeVOzNYtjn=KZGIZim%FN&m0kzuNeaz98X`lAXatYn|*r6oLMH-GALu|ZMk z4^a@-Q^oJNje&e3Y!MPFAkz%T*mglJ1^4PsY(wNSFe(APv z@0gV@b<>Sp%5VQv1tdNOc3duhll1k?5iYJJ!Gz9{qe2;No|eZmM7=j5r4K2OUImEt zbUnr31R4cKU0{xR7$P#gX6#HF+U1u?U3_!PTpS0NE}4anz;VYaXZv_j+1poX-@$}G z2gKd$FvyF2Sv;$4Fw^^x#s5jYsAbqIItGUDqe|@={gBzr<@%Mi@4?<&?x-m<^SM@**~dxd;c^L$Pg-}!4vNUHf!rD)_@7%VtY>mv z#X_etC{%=_lT(vGKQiM52^(i*#uB?ns~1ViU-n=OZPgkw-M=3?2-iP6mg#jui@NZw5iypk<}r%O&qZ^p7=YY zzl*JZDeKK%-aUBw+g%6VpWlVwPGoHl<8NG%!|zTposi7{iG6MSv(uX~o)py*NFi;* zeau2WD}i#jlb>Wgu=bt%sHcLSj>hrtQA+Jk_(gb4)a-_@1xFqR=@Wr^f!@oB1mca0 z+E28a6cpBGi}KdKms0vLuy)QJh`4C|Eo?e$WakF=jf_pj*e8`iSGU9jWf-r zux%6L5J@k-{?uT#w|5|`r#5%sTW)TVRx{&tU=YR6&@W4Kjq&H>MxPMiTOX*j?hHA_ z{EF&b{Ijs|lg5;2=AjBk=D`JFhND4tMykZp??PXqr+CRs*`v)Kw>ywPBE{b`#Fq0~ zig6~4mnVI)O)Zpn;;6+yN_P82PtC-FgbuE1)3rnb_k;^&$i7bF_<^Q{1v8W^+e;d- zJ@+8t+(gBHsV^5~3h3!RCmtR2M}=9?n#&Fww%ivF`J0jX+}c_ur!1h1V(aS2ZOX{; z;H0k~K9t2sSx!yIkY|kOsXlqaS=*Q1-a_|~_hHCFt=X4e1xAYeHA0L`8nVUV%a4)=kF?1Z;wyH z+-MPe6(k!;WTA4x7eylNEAr+mnXpk4Nz!BKvMG1 z21R6IDRQ;u7qUV|SmDxOq_f#e-eewSC98U~BCP&k-wqSg)~ML$KZ^e~u1xy*8RKGm zT0hTPXu&Ibn|b4j6sBcM^~-gd*ACBP6Kd(-3#Ws#o!VMLys6ht+ePe5gQb6cUxMky zyHZTAe^deYajS1}%cERURz~lVr_yC85Ucx&DmU-_=xHFVT)A+%!i3MCKSNq*?mR(+ z_zj{D4@J@od+tAeX?BuiU=G2`=9hXaOcR+NE@=$((&tOaB-70=Ftk#TO1X_->__Z^ zNw2S8Ok_JRXjG7|mzCM+?M1btF-6)xnn*D7;wOly)gbBlnOIm;3FH0y%YN+!#NrK? z)4h%^o=XgS2!H*;{$S^U_PI&u-=3t*?pMDQ6aXk9DI*h(*j2*ETdKLy-FGF#!o9F_ zadB0amq3`|0#tU@2JF$81LRu!{eMqF{)=;W@7{%CI4vy= z3Hj{z^}UrAyk1#-{{=aQ@HQoDzN&`CuNFF;!Pmx?nZ?>ltZnE0kH;99A{9d3F`MCS zI?oRdQsQ3NF*ed?z5h(<4@An{&sLC!bQX`=s;R5raA5{p2E(UrkZmZp5G24C5lG5; z?+G4Cx}W_gCFMR1xJ^3$sCbU@PG>HbWIFnX-4B@M2vYp~pR~5nnY>&acb4;H^cUwqrqY>>CPeU)%hkz0TOcT7SIE3Kh^xNx9OOE6|xm?L@FX!$Oa6ZPHI92#yu z$T!^L*FVi_?6Y;wiCt4>H68#LEvkO+)^@=QRV)5A!Y5KO*F*2$i)=4amym8s4#32c z@C|NF6BzjZo#GX1Ox<^GNWCNmlr)v>CM~>ZxHSgDE2}#6@CxNVcJJ96S>%^5gzfY) zit#VmGk!_C{rK_H<=BtieH$OmX0|E<7hdbxKdH^4!bU7rc6)SHmub02k5lW_&mw9X zYSJv8u7j;f7m0V8>@!&68(D|%q$nzkV!7!T8^`<$d$M*N-qJ2t@q;D0!z4e7SKhqP zNI1zxbMDmE)qyhrOcg;qdOJXGB)VU@t-OF-i_BqOoB303a#HOf)o@>QtV^KFl9D0g zr*QSd3K@?5gEo8#9UiwUnVb{!=E`mFd^n3@2exHo=RB7N&AybDUF^g3UH^Rf_vDlk z^HWk#iI*>X+S30{=v)io)ot=Cd3&x%bfZGdyP?p`Pk$j3oU(fBFji(yPewLJfjRcT z&vmNWI^r1oN_X7WmB!u_(}3Vsop!=zC(b%O!>}i^Rg_s{?XIPeSQW9_F_YSd7PfLt z;o^Q)VN6%%cJ$)sj+5@79x~NcBa|K+RaZwlXI2 zBV1fg?)^#neZE*=KTm*CHe-5v8f^fj)z>mTqhiY2jraqw?hY=6R~a|;Wo7epF)j@s z(&dAie!TH_Z9`rkJM)oEbgRLyP7jkGan35@!ZY3f-X#bbClZLtLtcqFK|f=vWfi9> zz%*Ogi#6a7Lhf`o|M#51_3`iGac??CITNoFWo15hv*Y%awT8(4;~;HHACpE&f0EK5 zkD4dlb0%xZ`!1Dsyl>D7Uha3DZ``}|5_&&5`LxVU2)XAae{@LV(M;%Qnt63hm^k&u zF_2V{(umpebid9N&=CvqRo?25NP={@=z;x*|+PZphX8hEuA#p z#tNCt0r-530ZM2Tos`1vg1WgXjT321E^|`|1iSjW+W>Au`suLk#EgY347-1YVJ4-qq9C+Q;j^*OBf$_O3X$dcQK%9GQG5Zfq^HLx_kA5hYyA0RJ?qA zkn*T{`7TSoPWzR@*HQ}|3BM90o@)E(hXk%bx!JW%_;72mr(aalySz)n0nIic3pMI;iVPCUbE#+MWZS9@&s&J zNNII-dB?^E@cP`6{bZP0vL{P))@Sq~n}+mRO3Gx8l8cR+X>e1#6w=)v4rd7oBerV| zSMpMQt)-c6L3XDj?N*Yhs6OMF}0jbD3_zX#?@q-6r?*keL6h3M7 zjc~kT{uEe$;cd;I5f114gs7qLU<||iM-);I+Ivq35oufm-!WZB94dU z>+dBT>85IHH(mxssAqD9<3xz^t8^niaol?CokRzl-^smgi%|v{ zxAu`y(E!#Oz37NK-o>{~-GRPP5XYqPL-EgJXkp8f+SRJ0%wBvsM@BK8vYc^UY#3Ap z3WF2O0&)c1N0YOQtEDWhtGUnL5mDryU9p4fc~lFLwG9m?JpgyNUrkMrpTLJJ(Xjdx z$S678qGXE7t_BAVmuYz_4S%jK_V=MZ7YkvFlgvQ!_lI4Fb2HKqiy#85FojO;qtnf3 zYmdXT1ccog8O2R;;SsI7Vlv;&r5?_UMJ5vPm~f3)d9CAV7rC(pk?!9lkDvQ^{{{F| z|Ld<66u5s_^5KhaZU^NAQ-JbTnR~9}T6-(qb+XROlOzrnN0%*EdHy9@Uuv7ta~-Z$ z84A9?peI@}pzFsc`4SxiWOsaf{{Hnb56U&P86?Ox-|4w|{JOqdA?lMwqn;{N$;+)? zZEmjxqvh3_Cz)_EY5WZik*}R@SjYW{=J;0RRcSwyDG}lnU;1T&c#HsD-&YOznA__) zmy|wWqylJ35Cvr2i`p}K&;vX1@uS%k6cqo9gN`P&Ac6C+dv85PV;nLt@4a;?DT==^ zGryzR>3|_C$?sYwXM+-sOuD|k-ejae>vkf6VS2o?8EanOIIp1huz0xbQ+uP-%fIob zmG3dFYxr`m^RFp)m>ts{-f@n*#ThY}mi3CfoXgN?s+^j3+W%8-XzUR9hyHq{wNdW} zv%$`V5^aAy4yJ9cRDkv*+yCf%8e>dSu_)C>MC3G(-r3#a!pFl-;Wn+2*=m=O)4%vh zsBEZBGsX;x0q0je8Ao?^MO2>W23`r?wHFo@hC<~0-26PnLj1x=mDWj}bkGjXK2d0_ z=;Wed4Gu6N-mY7n0&DHu_T^uk5XA79#ndFa~9eGP+CHq^D?X)#_Wa19#r6Js2{71SDRh0CSgu(1txE$P^dP(a|85rg-yl&*OW+3xX z!up&#G=HUDMiYF35iR5UHuM%$JfL;2fwA3ytVub^^8y-!%R%PeEXNSRz8Z7%=A^s zz zWUovU(j!I_00dSb#RGp1{d08JnBya{YG!tJ@Ri__*31~UDhQ|SiWyveZBh^IPK!m>NqV?V>kTf}zMMv_$UDyBQu*x=c?t*<|njEyUL zLfOfI@NdYe+|FuvDN(JfmHu$$ue-`kbc<9sg*LUW;J}i3#wHdVw3%U%?x$!c{7vVy z+4X*%=l67i*d|KYKU0y+87<#wxur37rNe8wjqILTfu4*6H^nShzAD*_Uc>`43JQj2 zoRGncm%}JLPwB9O1Lu=ERxW>O$!x8bo}XV6>DUb_*c*vvUknLX73`f&F6tO924%v< z@*>Xs5l%uDz1i{hdibHUe_2NEOQ{j9Mz^r(E9#E|x5tPXdwvfJRbDEK zEwwl@Q4#k@uw#AwOf|GndQkG+f`ZCMnZ#@TbGph%6|13K$0gHc`eW7(IWARd1EmX(DN3a<0!hs+1Qz}}VVq3%HHwd6F&A$(WeXLzfpJy8w$I<$xkTsc-QQ;E#uQcZHo?aCt&Xvo=EmONEW7 zF_ja;$m$eXF+~_GFNG{55;$qx!wpUI!;-^Mbr4_cX#Sb%3t3+;W#b^}&4rCegNzX& zF$&inPYAbud%U)5e!NYe*7PfryvqMOmMss<7lwsjoo$OwU%uF69mO3=`bFbB9Rrct ze=RHw&uM+Cp>YqIjR`hx*uY%@qD8@+n{h!u4Q-$sI~&`*d-s|k^*g{W5qPkBN#JrO z@d-p`t0ZA$LF|y7&0O_+(S#8rld8rnbWcMah$z&G0i=lp!s&H&Q+%s^fi9ZM6?bg} z7QWF8k=~5sCAfm;t;AXu3l+^vS&nbXzZ*x|Y+p$c6BjQ|czE##k!n^Vs2!?ZQBe_h zTB)F*fOr4He)^XU=N$^vc?`E#W=Lb%dkv;H%Pq-1IjYGP_zU&IYS}iu%pcq%6+V_^ zUx6Y-ijSjN=^ws^EUP2{?;I?MVaoHQLlQhpy1aOcqEGX0p+wo|FrUP*?mbT0vcTN- zW`9Sa&>?wz#pm+vy?z61ncxGs)R^zR&fiXGFt)$#VyI<2 zJ@k`+JkH+ImGOX-`d9iy{QPaYBS0fzhhP~=GCbcs*7Tn{+4%~HEfxVDjg=Go*D zq*Z+8N+LmG^}f2HyDk)7>ugs%-2vb$%5-FzLmf?sk(by3SSIG*g3u^xd;) z4q=8%(XCq}V!tXUd6fm~ITc;rxqZDY%wUcLqC{Yn{1`NO^(xTC8ia{s-+C2RhQW-H ziE&|mrWCNdCV$7a$MFgI7>QvRSs~Y|0?Wjmrr>xtw3TMy-R7ZF$V)D;I3xi_Srt~77X9jbbdq4$!AmKwM zs*I6|qx!&P<++hQyBc&boDX8wBNiQu3Mwo4U(3#zVEzEN`u37P1kg4HYmL$l2S9?- zpRYmH-Xrz5mJiO4%u^}fXZ_-qU|y!04ge$eP?k3jfOU%BXJH9tF52r1cAaz$;AJLk1Fskc2 ztQ>ag>K-X7u+1IF6E2&2_;BkefHC)pwX! zS~|!&v$NcPW{A&uG*Xr5I0-;9? zI!+osrVDLK=a+%ZrOm%G?N?p^VJ;F!6(UFz|FB$r$9!9C(@bGK3+aBx=vN=R%$Sb( zWP&o%TTm4ZUTc~hgcwy;c9G7XqCDFjGt;w;m0|I23qK<+DEZlyG-$nt4AO%V962Fk zTS1F$#qLCG+(KM`8dq-WuBD#fZ@d}WMn)eyqlZWf4S&C0em6uk2>mdPzESO4-*X1O zLCXQqxAUE0(@=m81!^vZxM3$MK5x2JPii0T8QKFt-@@D4h|Ww%Pn?`*<8~GRZopnv zl}{w7SV%B?tfl@;gi|enp3cBc($#H*x#^>OTdx4oN;al42^D50s6OPaj|O@6ty11e zvfO-v#F_e;FS0z)y+>)LDy2(UrI(f>EutLUDCBF0qsus|xR-a@Uwa5M#F_!nb2qSR zM(cqml6p*wznM{(nI zD||nx6meezAv^tlnsOaq_1+1(eRQOvT`*)us8Q`V_4S7YH4T$oY90{pid@Df` zR$uJLWNkPC{jSk-Zfmq|!Xau7YnB>skeurOQ>s$vYOHnmTL-@N`DJ0FSy9twG`JCMJ6~r+t~Tls8f0oI?rMNOh6U|NU|0@156#8)Tgo~^ zHt2-%R2tGa7uY02fQI!#rwn76&V~_eYI1ii+BykoQcsNe5*^TGpCk(&nh{M+`v3+o zn>}?Zm6%m>#{Q@!>gR`rJO&Ee?6H)Yf*Q^Fswc5G#3uQ2C(W=sD1VRBkR3 z@A1HGb|?#GH+~CTBP{j5+RjE{eR_N&^`yYV2{gJlM9PYI&d<@NMl*@OY|xb?q;no)*N??ZHQo)8n* z1NaDKA@v6B1W<_h%>N3a! zWGz?C7GNHOyy)!in9$3Pc=4SO$!Qtp-Tso@=yBR69SV$NEcJ)BH8ddizOy5n?a71U z4AP9I!>GW3OTXV)@neIX+BT@n&f@teNd~;^doWJa8qs7&(cj|YqG$hbU!sG(&=Jps zi1e1Vb@LE^=tFNMeQLv-9Cx&Qe3QOH3xLFW3BbdL(f432N!YJ&ImzUO)x&FEtPRI< z(`qtTyJZ374MbaaMW>?sbRwFSie*(KJQ1rw^S zfCA0Z`ZhWE*F)EWtqh730A|>7g^=8q&LO^4&DHXVAjJXH-FMI*-K({HaH(!{xMC5y z3gv^B73HqD*%Ux&pGO_UiSCiyZyk<_=rbvElpaa}Q1Q-u7H3ydEZf(qXh6WEN^C)# z!huE~@G74RAD%GHiKlX5ldjbTmXoMT%g))Fjr{xdKgd)Jv_%-10&W!-6&h67Ct7P+ z4Il1f+aI;$UJiqX^!#Kx0|Nz78onr-@j!1jW0Nd7=T9xg_tSd2&x;V5LhYunbq4U` z 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 z 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

8n*wt{){!kLH%EfZMe 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 jDpS&c^$A1_7 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"l*(*J85yv`50HGgFnCe)5t2wO>Z|LkpaR%SZd5 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á+HP9;ki9E+BVJ%Sia~XFnPsGEyc&7yNlv185%m>i0wS8_a($> zD`Q&6nc0YEA!O1;U=!Y-uQB4Q@u3i<8Xd4&$IR+C-GZjYhfhqbYACSgq@RVs!!N%S{T55QUbZlEi{~K6dOO1BN zuNFDTjAl7A4g=LERuyS}f?hVB$P^^9Mk{r>K&wZ^*27pS6DFN-6~wqW9X1uu6mZ_Q zA3)P2ERP03qo@8#{_62PpFPpxa}lB$8xB$5Ku>*;s4LlOU7h*wqB`Miz0Gs=Do$8j z1W_DfMRM>Gq#^Sey~P|S-keHluU;b0QeE2hUu4`V0D-7Sz)Boq|Mf3{!QD7kO)$Ko zHT78I3N@295AlMw-o9$u^LVBTk%M-_q)6VNEm`!@z$k3js{OjoAv2Gv4$1)07oZTP zzD&?i*P`ltlDw5(-3F0cJ_%7)ycr$7hN^KV7UAOlHo@hQ(RxK3g^ga_Z$x7xnaE5? zkUKvTma7^yd_ouEU8zDeq+pVpl!_9t`&VF69Bn{JWqFNYAVrAh^>=>~S=m>&^_|lI zN!Ng9ga~9$+csZ$YVT&Stofh9kaZ`k;mXY*pDWbaaL{a#yoHoC6ClZ?xQed9-y@KUM1}6Q{ z5rsKQQ4o}@5`x2KGa9E-)Fvj<;~Gt*@5Ys{)Lw>sLOx>CBlH7@;6ey$0GWnFHaZmg zN$*xKhMF)EqSh5z{T{ts}G?I20 zg1tT*Bl^OiplCfqIaxuqzTB$45x9shC*~tGkDXhy#vl#w;T-u;M%cGrJSx#tr+(osgMP0lvJu@F10-plNA_6cMOx zi+>9))-PpzqKBx78zQq%;}!4iMc*AVL-|CHkBT+HR|o;MD5^GFYU)wG^hUg}U97h3 zZ>$%U)s>XAwUv~@Wv*In7NV;(Sh#b^wM^9OVv6DLgp^A4fBIr*wK;tD5+t=w@HlTz z4`R6QM-9+vwcj6tWO+tDUy2S382u?9c~EncfxspdQRtcfj6PN%jZfDfx#1|CIy`zlhJk+fg9i2K?gh&E zRvLrnPM5XUaZ3YE=}M^)AcR(lK8t5v@a%}Vg>t09_riTQPY`|LrPQiIRwboSi>ZzD(BQ5}}W#NcAL6bIXB}0|ejXkSKYF;aW5oOS%yv93|fOCQ!DQ-Z< zBVJMA0Vyu0C6!x1JBQt&>>!SJB#iE=O_ZnfQ|+z&?KM)TQzOD!-gv9ws7^)0ri#0@ zwEXyibJ}sffdx-yku7KQepx5zQOCr%fVptP^Jg7f`8XJhOxgp|7YHAq%hwIgQ8%bg zKR;%h||H1K$n9<480C61D$OLdYjt&q#a*T`f*N zdgl+H3*Zt#Pfg{*Z{Q==4JOZ_Wyt z(iC?C^W=!30;uiq-~lZ9D73vY?M6{3rcE0SIx3{<$#kbsART~RsZPlXQVSRZ$VQID z5aTH>W7INZVWgyLL=J1o@{dd@DYZHD#xrMn7B0|r-oJu;x*ho6z`VN6W|BQDn#GT* z78M>r+$Wpa`PoZ4?N8?|@F`T}pDKE|ZEZBpaP!n*EiQ+c6fQ(PzhIwc? zmm}sGF6+6p4;OT9qLjZb%`7+LZ5MmKs-cgYwVgen#%%XAS-nJPtmMyCux!2d9;3c6 zmPB7^xV9F)yR1w(2mu8cvG)APeib?aVkg-e$M6oS1w^6>5QY z=TOSo1EP~cNZ3j?%!2c6-c9^xu>Y%SYi0#!56?8i6LRZtAy{Tk3qKoQ{kXM+%=DAT z6ICmJ#4^tM-)V69l=PF`5S<9&>dM-bmNLiV?SjqAd!!zn_uS3l;w=N^<9O?(ae5W8 z+H@$dn&sn|pB(m$%ICX$~+@#+D7SGIXX70hHvBy#FIbjbU+wfbdJwY zS&-=nDJoZ!ks$ET!_Vs<_jdOJ07xD3nFCe77w4&d54)-Nr}56G3!h%Z0P@^A4w4U;k1aHBnMwGeeDCa7~j{Pb*LbWrtW})x~ zSjX)(HF8X99>b}c)Z$Clh(f_R8Fyn^B0Z1nueZi=S39*)Pb}Cth@hdz=+PqG@nk_xF;c0(b_Kdguv z6@B(Z0`M7e^hL8Di|BZPK`RKMO38%`TX|XIj20`P>Ezg z%7oh=jl+MVA%2B|NTD*0vV#YD3CN-K-L~SI$RNxSyWpwyTfW1w=y0E79Bxhkg*0 z2OL;yz!3mkP?+ium|o?aed;g?(v}6FmmP8W2UpC1pcPxG;lhvvOM>Ii*I>NKljHt^ zBP?;RTq?19!e6_vFi1#c*yrLul(cs7LPJA-1A0*6a7;|(#0)aF2>U-2x^4;v*OQl1 zDuVy0A8b`S*@;F7qJ^l*s&7px@wDG=<;R^Z$Ht#xK1y(7IzKD*H3CZW;6`Z7%hNznMt`Sv`(-#5F@Hh^wG;a^sdoa^7`GU} zN4N@M6Fom%lz3ILRY9aw@X`rY? z?kq>1UovpwKA}0LKqtRBQ$3o_k#l;$KZPUeSGlo;e+@Lm`lo$nO2ka!XsVy3=?3uAi%5m9wC&S3pWf=WP|*^%Y4+AX#}20VVZ`^o6|5zW z;~_iLFB6OkPV;pSgxWGrxY;X~ZgeZ~2v367=v=eVi@vn*;%zs4OmmBvZ;EhY1+x_j z7bMdCaQ(bi6ulI=-j0Mc-?$~Jz9Rrw8Yc9@f$k%8XxkK!!!fPyEv5;?!yybX5R46{ z(bq}-9q2qJ4V|q7T~ix1K%^GX_Rd~I<_r~#4S8>}ue&-*kv}|{@M;onFpq`KIi>6+ z8y}7qe1WuxS8kFb{1GHqs#{oll)`{}qX$HbIPiij=zK4A{Cc$k#h8+j3xuD$?avO&$?-l z5VdJfkVxbdk@gew&q?8A)On(Q>-sLbIX)L0t8{Ohnm~$IeT3H@eWoF=a=W{I z7zZEU+3sp>cXRc_sO;YBQYi*UooJ4-$&kI-LX6~XR zN4iIeK+9AupxP{|S2>E+r#k_tgSRDuyT7b^e231|3c;=-ae6R>`1y3*M~~o}S}dH_ z=a}=j#lL^8bLOybd?8t=%$JKwXWe~fY`GmqUV-vCq&@idf%uyeuwx1sNBB`C!z4l? zPPlSA3tqzpd2in2M;5mD8(JRYz!4284ftbLPNV23e2Qg%B5qG|mu*Rt~|E z1FnmZ=l3lBd7nY~0&$QQpe4lLUZNsd-f%sr{#eISx$JJaqHQ64r~`$NUNXeju)8F8 zx>xDp@ND#8b^E!Nda-MF)o`1tJ9C=(i4&tO{_9SVp0WXyycKWUtG zwnJf+JFWTk*ZGvcKlo>KUPYS(i_=+I%O$;#7VGJ6!&zExh%3^SmF})Dc4DqWFmV=U z1~^;a_nfwvOx}H{gWtD~+3DJNl4KSB7t$G>m%o(O%(c(!9xynbTWi!k<&WI9HUHv) zSd8cR#rP7hx9#;+%Qo4zjPm89z0(RFM5w0#&Xip`am8>t^{kyPBfCKS*e^@UCjD!A z2ec;ivsZA1duQUJ={+(sP#DqR(GxT-vE}K;wY}M3K*Z1EP)f?PO@TAs=Hsm3a~W#W zLXw^3b#uD?QRO`GZ(ryM1=-A#;Q3MoG#f{)GFgh05t>;v(WAe8O*c<}Q5H*`LbFIaz4kOh>N#c)3@+ zbtj1|Y&t0ltQRCN;%r1UY)@(tla}@)??9KJCzh`%yDLf^1>Rrf-4d<=LBzSU7QIP9 zWa3lOuAHqhm&4CoQ>KlZrQ;*>*9Q5;_VvfH9NqcUDJ3H$*wiWbHAZxJlk{|CYPAF)Md zrvDGI(uyDZ54IS5;|+zMAQ)(s3<60|Bu5OV^)DU#&of_KIR7yF?K3Kq8Re7j9Baf0 z{tSq)*0S?0m#a&Hb?<|9?QkFCRwkHtkaw*Vr8U^qO<)P$MjEKF7RxWTSZT#tM}5Hc z>g%oAsquDgSxj}Qc6$ud+V||~LXpl5oxZ{4GXSyd(08ASeX1(g+4x|=2?S4nC5K(> zeS5K|!0dyVa{;4CAgNG520XE8Zd-NbXCwd-_fT10PHCb$#p@%Xwj$%x1XnPSX(B)# zM>Hf9ekz1QRE9z!5lWelM3E?js_+@;C>4ivpH=72m4uR(-`)|uP*X07te~4pEe5C* z_fK&yNRM9ti4pH?JN8iypWscOQDo5^Wsfe-urM~1m<$m!he9?k4r(Y7T`{kqos}=X zC1smspFzaS0j_eSsc+6o5SyBd#UlHd#^S>p;7+ba;=i>J+y7&s|BEp)vM{s!W&EE( zMy6j@E|&k#W|zOt8e&m5x>sQ#V-b;Umt`%rBrT;aEiV-n6&KkVDd`!<8Lt_!Ehdh3 z6J{*PEC@TOLPQK|^-OQDkGfTioY&s!K5r4-nke|r;aqT}ZLJ;?%Y&VDoPG>T=uhXI zm9FW^a|3q~j7Fq*+ohg*4yOC?*Zl~(ZYnGU01OCUU^aJq*Gn>9`w>Ba(+GfC$M5PR z4;yxLB!F)-fN$s%9Vee&FC1<--wc4;JB^zz*A+6Gw0&y9~{fZUVj zj%%N(8~?`+U%YPuJ`eZn&XZ638J`^$05NZ%-IA=1WF3c_vgB_?0CE7|-Rq+cT5_Gs z4+nrxI)K~9u9wdJ@1>dmDBt{d(3fqOz3qdMCpzF*8z9|lrC&KBK3<2)#i0DFD%zP&UB_H|Ufpz>LW zR^P)Ux@+G-Px))#Ybt&stJ{y+E;Jubt`sXOAgsI;PO!Sa!FefZa(dKq-q1#`pn2X8 z8dCCmbPQ`=-_Luhy#WC|0Rd2Yvos(z1#W=wgjzx7l0;5!NaS?U0Yrd^$lry~BQmz# zjP0yhnPbE%%ACIl)>~z|u0wPp$YCIO+TVG1R{%yfzV0+uT9$g$wSp#a+W}8?eF1<> z?`jb6G5`1jV#(#^0sfU*Qt?pLs6b+I9h2{?STzy=%fJ2MBg+_Xlm6f$)|U|d z5YY6-)%5+?MYZMJ1a=VwaKi9szz9ON1*Gk#+LKWY{@8`c4BXhGWrM5X@1sC0exC|0rg$Ml29c~LaJ@93#^ZB^3=Xo+s0HF&bq6;FT zm)n4Eh5cbLwS;Y6_PM6cevJF78ubE7qNQ^EY;K~?egc5m)o-I%_! z;6TySaiZYOB6Z{vlyX0HtKe-?m$oCXIb}n~^1u|d^x3TYmp4miO7=+kAwi99XH@wC zd2Pv)dt)-jMEOB5Amu(_N%GClJeH0`<$+tD!%dL9IGzMj zZ_bnQ1E%b6zHo823^7+*7SyY^x$KP0N79*7T6L#5uT_q%O_OS@k}6>XdG5;0V|a&> zBw=g$p2DnTc*&A8y**~e-Nt5e8mNfcQMibbF+ERp&A|vjo?yB?v~R*=@rJR2m^_!h zvh%)?)AO(Zn!D9CH1|R!4$Lo>m>e_6n8w}5vbhgW$5Br-zSYMF}z4pH&Gx zKKEe>vRR+Q6j%S=7H`W~HD6Lzyzbt&FG^~B9^ZS~zkk#Y(a!XL_Oa1-lxcHc)T7mY`zbX)YqM-*;cq*?l*@V;Ilu@9C%&uvPw?Y-W*PD zcz)V6@Oo@-g5Y&tSA*!ZU!SW6TDBb!Y3m~v&{OEXudE)M%Qmcgu8>_adkl`EdAl5* ztF>HkJ1=~;r*^(pUc4{6SGHd=UZ86xd+J}3o>a75m*BhJFKW!XpZ8Y2mo0KUuUK`+ zdaj*nK5XDMUwQ-JJ#U}jxn7~+zpn#+uKIf1OK7Y;**P&b_loWF5XkcJ7by-50R&yB}u* zY+S#9Ydo$jw7<$#wtvDuw7qY*U3Q#KaOpa}nj>1YTaP~5j*2pD+V6rJOwiD)d#)eL z5=LThx$R$P`+z@QuCi{Xu#vF&QjE-8T0i`m*#J^V++12U@NoEO^jso_gQ^Oaa+kQe z<=9;H^{i#v6UtPa!caj%AR%Al>p`)uRH|;US&K3nK(z+w} zalKy(B7S8K)jCyUq4ftrM+5+;2+Kj0Bs;^yX(}&2%hk37xq!!D+FmmNPwU|G1ao+p zpsDxGS4Dh)fztxhHtpYxjpX8W7kBk6LQRA7OOgkjMAKBFsGCwqxkSrS2L_?3%haIs z3)Hs0uAbi*!@AewOG^7YVj^0g3KaP$uLE|$4_>0QWc!CghdYC!i*~7aZzV?p* z`5J467tEK^b3o(+vxUNCtG+^@9b7Enf3QZJDtIPGK<^(s#1Mo|3^p->oZt^!F&2E~ z+kfVh>azV{tne&ocBBV9#DrbdOWLV@w!t7?WgzXKWK@>vqL$DVl%5iKDt@v7=|XsG z@l#6ZbO*ZRght>CrqDJRw|fnd=$5Wk?-7--YJ0s;_SaD5<~x3Nw6?Ngdx3!;(;g5l z*#_Xp&^6kcT{ChhXob7QCm#E2C{MSflcDERrOXEn4RHqmBZ`7R?*%!wx~|zNUuRk1 zRt2Y|1l=n*6-{9vat01R?(#(>KL4I}PRXZI*DM=KdTtRr`*iA4xY$%^5|;2|=wZZv z+Ol{2>zcwqp(UaTdF6|nf{2!wjG~=tHMV#8o|aYH;3X0|J!{(>)X8#m+~4-c?qmGz zRuiEyeFTlR*hWj!8uUbC%C>DNsNrk^XA%u60+N{xVNxrYXz90q;4wPZcvX0u9SDOo z@XE^1ASoG|Zf~FVj-4g3aL`m)ihJ4I5gFI1(8}slM-P%`we&3*I$UfB)1Xuid-k@H z6>gnFN&aY=FhotyQjRlaOwd&0GuanVe zg*WbLXzD)(1qfP=>Zb5*sqwaEToKnDK!kphtA(gCaNS){F8biN(N5Jy4`FVX_{W=x0j0^CgLCv z3AZioihzGB1Oz#p_3KAa&Cpd<+HL-tiK?cj%*o{`Tr`*;I!m3r(U!to=3>51*Nj0` z9ZLQ5RUj`GPW|&PNWk{Oeo!;cmTTF1rj7|(z9L0Mh89J=HkFpTSmSZ=xA;D&HkMY% zC?dk@T-53CyUN+tJ`eOPDap1d2u(xNjHlI!-SqA#S#BHuYj2{;qhjwqNVyiJi%zv0 zVTTjHvat-An}!=54K3w&@KF?#sKDV3*wVhU_aM=NS7E1=({vkFt5WqXj`xr3i2(aj z<@8vWVW9yLrNZx5Ys-WLg+hE36bxAf0AE3?QMA_%rR>|ZIjKC|M>RIeBl+BvHPfLT zlz`E&)y;A=J3~hGc$Pign?rvj(6Ax?#mi!AKtR+9EfR>JyV8MDpF)NXa&&Z=?Jq&& z*h1dv;cfrhwXAowQOk=NF>QKJS-GV0OK|(8K=4g@my)Ee|Es~Kp|^yr1!nVUFyu|8 zD9WwwkijJ@R^P;Y70@guJHccQaLqG;&En@mRH6C$S##Quxnyt4C*%<{^{FEIbu{#X zm595De9nE*nnrw_ILS~M?Ff`C)}|i&$1QwTJ%>6JA2ZF9Q_T+X&!oT`xf_Fu9AB0r zs4Uq*CV48KRwhc$gKL3yrw#q5x=_O#RGXy)5ba=h)p_(gSa2kl0yi;(0G^m#*+gA9hn;`r?-$7f(_ksSg z35+?kdqO?K((&;(+oR8Unya(NRRL(y1*SM4qCwoL{cbNM;&d6BTQh40<23t=r6oA@ z79SlYE#9AVQ>ppC65(@gNlyu$pRFn_ZUvifUP?-x$68eTE-#FA3mG(MIT3~OYM;|J zgjaAJv)9$YtzU=0R_u1ULrF6=l|uPf_fhK10!j62`xDBNl+sP6X61^K%I00&>;49F z6+^AWJX}o(e}%3cHN>sONeYG}dRC0B+Jq%VB+0+D+r5+|X}v6+P_>n`I@+ZJRa6W( zgm$LSrnjuFJ)NBDNRo~Vtjb7|j|-}p;t!|Em72xArVlo}#;dt7t9hx@PY0gJL_|~K z6gZlCi{6Hk|G`C~QAm$GQcuvR!$l^YO@tyU5VR96pw4mkSLu1-B7U~Oc?-sSE45(=$+_GsFuN}S&2&~agr@Fp`BafM)LhzM)HUa9P67eb z5R|M8R1uV{VG}*J!Hzy`q&JH+o>h^L*4frxkEHb?ppmg9`?B!m$h$RDJag*O8>QuV z2ka}V?`g~w`^!KM%zu~E%1F}0(}%` zA^11@ulMl~e3ZG1+0H7=*OAs|$Lpd4xS*T%Z>m>JS?gf8JMo zFTWdDxDKe7uF$(A+V<1@h!o0A3YYP(F?4jUXRX~TI_KB36o~H^lYl`lEyp@goygeE z*Ua4mI+{W-9Y@#B2-Yx^xs$3B+xkD2OX%<0{)5rO4*#q zLG=0B=kuoJP5B8pLGMdL$H?)}lWYC?h{<32eV`NM_F#ri;8SaF_y%d`U3>Q7_ymlE zZn&nKS)QjEQitx>L99sk_wm{TjO%G$bmybvH74vEy#4hj=6oMI2=Ehz?JaXZrN;xt zxaa1z4joCbDUbJNpVQ!VOJ(ou1e>UZr{uM#Bb45K#lhEx`v=2g;vqu)m?TKnaqhqR zTX`4rt9lBapMAluA8-ubg&`kJsZE!^Sp4WSRNYR0N%1fCi$cqEF7qR3wJB5a&i`|# z|2%>YvLb6g-4~AZ`7OBtW$LKu2hV}rC_2IH*%U^fLF0VyINb+_(s8BGJ+b=Li$Fg6 zC(v%j4zzRE`I-UCUFGc^zTsuIxA?)rk9^&UXtu^=mK!a-&iOt`$j;TTkakz=x|hM1 zV6V-FUZ3^e?*lp>oKugvU1%-GxuGVz+mVh}z@e1?Snj{f_rEXN9Bj-V+y|_`|8q|l zbUIX=x&Nw=O>!N17iMu_>IA*r<7aTd;C&o4a#!%5mL7t2y!7n!+ahSackei7(8zW$ z_7=Bqn7&=9WbnO2KCg^5Uxrz#$z}k(?>vV3|1+vR4dNW@Ui1Es#7H)#Ct%-_9@fmR z&wv2z)*l4d)8G*6*OD7J*6-^GP}Z%NuHECq2YL0P+;W9VG zw72PpPVo(caH!G)>!AlG1(Cs`k7ZI?TGp$#*oey(2!i3=ss1&If%QGmspB&Wo$ADQ6R_sk%W3f_xQ`3*hUr>3hL@F92Dqe z68y6d9aFHkeqcaUfb5STGE)^L%{I3^C}d>`KMye%I}TmW?}}=MbFz_tI@>OpCJpFU z|LdvHxK*qDvz92Nr2yuz9^VYamCp={Wmjj+_7@kY%gVAg zT7VJAtGzM5!LmVs+#vE6nW4zTEHy?Od;wkkTSQQpyuC8^t*f*#YZ|Hehy<1fQq}V$ z$%d)AFP6`3wq3X-LLc(SV!PqfOl3sHay(uxE9LAA>r~{2%+wGo1t}lkDf62~jQTIB z5#&^QfPO$^{UN^OV$P8xmD{LmwVMi!8)zL^mr9J6%?;#r+_X3GlY(VIv6jRK8a2y2 z`HZaT(QN5fKy{JrRD5U(3e86lpFdR67A!$m+*?t$@v%n1g;_z4gFo7t9?bUwa@O*#{__2 zTA>r*<15P#1|==s=(h0!E17VV7^i+y;#7S%eE!7JQ4L%2-1>CtdQ^LJsbch8@2zBP zGnYx^0dr$Su7<+yY<7|6iux!&??AdAS3O<8=S}`E@zqD zhVn&P7KRTw-gl;NsDIBz`T|>#k5NY8X_IzlYfSr^*|%8#X7z zE*1EsK#()@H(#`v1@&GP$;0iQAVpoIU}`n1!o4mU(R%qqKbJxZ{^L( zGG3wkk5Jd!PF&$WNCDSSsVvPnbmDENkYY)K7;+(wgqZMQL%psy1_{jmiK`BCDn+-` z^s%9z;3{^~bOicZ7E}teH2%eCTf_nR6IU4Ns;+$gLOk`4{&Z`>&fpOdWDv9#X(uqm zXoU~7?7&H1Fg0`Uo9X%)1&WAnAyM_ndjGnGgGXDwp8A@f*(R9)Gs^N&<)7K7>~M}F zCp-sIXwsAl^|I_)5*Z&zG8jU;%napvlYeR4x$6=7(8Te^OGl4)TD`fjr_Ly=-1^=dFXL=Kfe=HgD z!r1H=gf24YyLI6`2@E)}9LoNCn${zBcaF81#wa`GSa3@;>_QD@@84J<6CRB4_9u)k z5%+ijn1*>;|56YOFE3a3_vASt&yRg3S&}F+f9YOuegpEQ@#o95)4l=RFd+6X7q@xc@1Q_+(g%P< zRlBbFg=(3{Fc(nCIHV$6#xTi2I66m|A}iEd!d_TI?l+IIy-cw|_}?nk5JwIUiB-qp zzHd2oG{XZyw+AECtkIz{KICx5f)+K%)x~1!NP*Qw)D4!%Z{nv?YV>z#mFAKybY$3` zRwZE5AE-nQ6_}V-0@kN#%3zkonssn6r4Q-y$!C>+X;%}+ilcnp0SN?8_y5vJ>Ys5z6J9+YC~=MVCkhWwl!6XOiq$s4 zt7#%&m%M|5nS!&2vFx>17E0F#D`n6iBN{Q9-%($|xFAt60>#-d%*;8jW)6Hi1! zY-=cy3rWbB1slCI6)M$ed8@&QRvl3A4Ei%VKnjVbNXBsNgre?HGwm@XC~=?H+;&)NH(2~2zcMwJH@m)%#FuOpXpm#;?`MELnQFhg8) zwG#%iAm`&Hs`Q{-XyVYX0+;A%Fm<_{s{+mOm}87M!#)fEjGQwWFijc%=7l#;n?Ku? z*)T`+nOEPkp$hI#@2zoUu50#RI6V!wFnEHB6WWr_!fpCNH7d;4Mm6gaV-!K+P=QU< zhX3Hs&qr3wE3G6bR1#1!_K1}PN4?MuJI9}mJwj~w(~;lz2>#Jfo_sc9rnGm|S%Vci zP@kxbJ6;!yA<cEymafucR@OPxD*qMnc>`jF8-Oz8T;=eL}GI`D8B-Zj*{Bf?BFcd}6TsMll<*8%i(HQ!fe&}Kfv$Pp5s#WAAIH_dE?_sLNzk7i&KQ3h;R`Du@KTYq|8Lyu{{cp)fkv94b4BL3!W|ZMVZB^DD4mp0{7+0OnARIx0FiAq{#_0W779M`* zpFI!DzBU%Wg!8rmQbu;WPnb?^z`PG9gm`{Ml+3!GV>>@$b5;a zPKM)k=4Wg@;?eN9icN{I?a4dqJ6!-7X=STnG@_*GP;^3IKy7GzRHemUy?Mn!${ z2&p|(c{F16-$;iPh&_@B24FP@oMaIQ#Y#xg*fotE$%J$6?yv#i^2rlvf_k&7)%H)W zNdG&XPJujhcg|-?!!C$MZa*t>lQ;<$mbueX!y$<*XDJCk<<78_j`e5czgr{+j3lYI zjVsU~{;t}^VG`+ya%|!AU!`KGU3YE?Hc0!c#3qoPq+&>I1LJSjSQ%v=t#83YWd`7` zeS%Y^$#FJ&_`Bk(xMNCG8CkRL1Q4XnQLr&rn`=yS4Mxe;PFQjs&PUuc=#+YO+9kMe zl(XZj=?jL)z(SOd(<==y*+@c>45ETfl?a0d+2Plr`1e5!T#1D2VQ0YmGD^lS1PQM| zTNUgzErtu7($B4xQJ`@JjN1P?HD%Bp54U|shApQvF8eyU3z3RFgp@-6m_~~*!y=qk z=!CO(Aet>3lLl18FH?a69%Bo_4*zmnFKsuW>6l%#3K%HbBw;^MeF|DdQ6JB&5bEH} zXBs@DI{$74_+D$B06a+TZHBgHJ%I96r?CFa5p>vCRNA1k`LYbH?6tq$t7MLrA>9)D3g z)VFQY<82#qYjP6|Iu9lQnWYWjB>Ak>8O_aQrif|}r63!-#_vM%%h94xa&rfe)?1~G8pRbljf+c# ztaiK{t>#eq!ve=zkDK9L&Xy@pIJ+g3(W7xfad0>6(T9>T@VAaPiQ3qwuA%S#yD^i; zn>ZE76PVc~Gb3cdiI+MjWTkyvyw%MIWX7)6MZY-aw>|NZlxyt=6oZG^AIn+s(n$ks?UYz28|@Aw z{4OsocOi@KDJZub(VK+y*Vs(R$VI_oH#q~TKrz+IKW$@e4cB*_1UWSJ!5jlpWNiaw zMk&2)MzINHYq=dYu2-2b|d;I5XDV+{}$vO8?eIH0Y)v zllK2vU8+&~4`d4X$gAvw(y3$?951n?UVeaypUDsMCMqO{e^PZwJzN84hO; zW*2H?IBdw&pZcSzeAVTtn0Yyf;_tRCMZp&Jc=LX$y|H793+73dCAWj{a;E|(H2K5tcrTpC=Z(z5C z$(zGh82UhFQ2BEtbsuUr9&h|p6dPCl!c0ohZvi8J#1?p%&1Sy%?0}Mo=T@vBOn|@z zzaknE%v@=;ms3wOm-kC329=vu3p6c}7e+}I z#qUTP1BY>O>xsDiRvQidc|zy72OJ$vSHG1@YKe5h?BsLy_=>nAK(itt85s>{k%`h(^HZ~lsm|);L*gXl@v!Y!J9|~)NhKpc38^#HwK!%f z0sPCTMtTcBJO^c^lyGa-Ll2J5PZzf+ zo*dEOsOjlCdl7m?NQdD=+qo_cXRDA6uefoI6yvqipxAK~>S4t%{|i(=tH0yvf@YoBvs}9usr{z0b*81;xOjU9@;!mNZ}U14i_MAEe8g z^IMw36yfJs5-^O%-lHetsB5KZW>7AtIHCxk=(f!%+?7@CjK4^pwq0ghoMr7{xBGz= zgp6U7l=kWN%eKXl*9VRrJb0UT*kL!SrY!d9?v$+2ovI+_N4D*;1Dcjk7HRLbq)U)i?RG4@@IpjGUKE&G`jYW(!GG zE+PF<-TgJ>Cy4I6nk1|!@W$UdsLKi+SM8fLhp?N-yyi)|dt|tgAkKKz!-hpUmFaOD z^6%iA@I>1STMDE>ZLq%|*Z2{hu^i4_rQnQR9R-Po^%{e_n*ul+wn33rUW1ZsL~~B; zHoW^Sh1s_KAWM^;q<{(Lg{2}@jbV9jWEc#oGJ8)?LZ7K`C#E>dD&_kC4wVjFG0kk!(1f*c z=DN3RlcOv)=Q?)x6%C|*M_1eQSD^KYiQgX4Me(9)-RO_Gn&4N}ve{cgJw>*SiAOos zr&42x=}J|5ooeAA!4Zu4SwpP%qhPRN$g_1cJT|UN(|h|TuYW&5s;b%vhY-S8-tz*J za|+b>30|y z8MjeWJYaA$21$%+#0oXu5cTpq&Ys<;JA$DLxkDLAR>XKV{u+D>{s_$2stucZ7zEfW z7BL69PBGmY42k4N+dmZBNwLSs-{M`0{C3JGb$0~$IMB0rMU~SC84bY{kv=u`QQiHS z6w_Fg-tYnPpTc@plvG+ZeZlh2&CNv=3s=7iUxh!3e2yq1SCreRyI`H?ESxn^`?-1oeCytkpTM#&7b%c^~g%o5uVYBN+9k+xk!$6f!Y z42<*-P(wt?;(Jt^^o)#XqNLE0s`94Jo1d&bHB+Lpb8uz`VvdPy)z5$%dqE0Kt&+)z#d2BHEXx($EnPA) z>hHkqXknQOZQ1P!v~dl+Q%Od?{iy?rrVb5{KdM^4gi`6>NBS89Bl9{*yZ4NjpFG+x z@dmY#KuMo!&+JSt)pSL$4C?Rnn55xmGvXgBuH)m7gfOQ6VAC1Nji>bb*qGBhKJIvy zuJ<@SS4aA;i1i6q8jn#TS%=u=%2tnR#Pg3J6Z>O1lpA+vC7J!2?%pgBo$k{)LO9lw zy$&JcHdz;uamO9+>s1sX(1J`+=8S=SlximNOiXzSFQxPkrzg@((u6_XroMgM_U*uf z9!rrY<4lcctTrN9S`TYAx35@q^Mc?Sxg2xZHO9nRo9dy{p4!XxsP3^|*q&6@TukFz zhD-hPNWbLdNm@nvgVekYn<_^Uhso5XrJL?V`VG{eNWV!(Kb==3K^>jWlW@Ke#*A=XG2(})&jZI7yjqG}q!&KRn!_w~7y$2QRfXck`I6_(v)hW`-H%3Ni ze>B?Nw5uL+m@`>1g`TSE)%tPY)Pssef*m_<&X44yIKYe{nC{uzY37K_B!%v@M456} z-S&E&W&(jjs@aptRSnMC5lghM!Qa3i0Ran&P>%Y}?@1;L$TSNgKp`K7=|cLM`tBNy zyn6hc+qNGeeJZNHzU_5L`-v!h@BM=Dk)OCUIeE&fCm54y!w@Xv;Ya+O;MhX?XVXlQ z`Cs{!Xk6!3pMo#JpFpr?WA={^4D{sr49{3ku~r-E8T!sPW+>1czFG;}%2Dma$5){Q z3srkJLfIsym=naDP|V?UfU~O1b}Z;WE$S5MKdU3{XWye3vRF`URkji~)9rkstPp*; zOxPjzZ{q9cHItf(;8;JRv&SCmcmV$qo`gJ1!f4a$9~~VUQW~Z4QeU59Foy|3LP=aR zB);a4UH6Y|s2>|b_?i5*btIWawjW191bDzm+j zK{>rd6wb{PmbMguS-RWj-6I<6Ay*-(5o$@aPqmLlTJ$l(;#Pebz6qa&L70o=nWg)K z`TUOQU5#CHb2}=f65TkH+KkH} zD=l)aGE+spHRg#y1t*HsXR=%=?3Be5k|9;f6a8qvt{Q1km02H3GF>*S_ei=hSJsKa zIF9tsPEKo_H8YeNb~t?~BWPS9#G<6}z4`4n*QZ&$d>vs0(^c4*YyuC~>Oa6Y;E6ac z+XoFe8hPKtU1ei-|Nf)f4{hJIt3ObEPV&>~elKqs#(e+$hWCB54}Q(#)y_rg(|O7x=56v`8% zoK)YdTM{)ir!Pv9?u#R}a!1$J!G_|gJ=dvmjoFTlMVzuR8XSKuU#lIm72>R+j;7vmmu)g*Hd~>aSnd{t z)CAQ;q$ZP1a}V0hjw6>wl0u|9wkeY&#p5YQ5J7~?dxd^H?8{@3V=awcg-3)4e^f%g zNM$n&&>mhk9Zr=SR=*)KMaT=PAc<4e>J1j>Ngt6lg%(wNq+cCS4U$MWzG0-1pO-i* ztXL#hs_rCgkcbk`NmL#$DV|L0vUx=0lFTOjaT5FPzY%AVc`yh2;V>MB)6L%5q-2^N z@9>Nz3)4r38%Il}5K5=e4BvOyQxcc=Z|LL~EI)>%~_alk04~ zHJ_Iy;FBTtjg@BqAcEme9>3!M#A(@m_wd{Q)M=xkEBp8q$O2mI|Es)AzwTg zeZr(I3u(nF=`LX%oA=rbRf}zX&ueUT0IsK()f&FLk%HrPRJA=ECs`&- zOO#So-FC>tJ0@)@Ok=+wyPWQFi3IXFDputhGNKHMpdb*AlisE%y{VoF!A&I7x{Zk- z6UR|f5>c{RDJ&*Q`36(swUq21(oJeRcd7}64l2GU8UQrTiGLcNgnk%-25f_!up9P5 zy_u-Y?b_AXXKtU`Gu3RGGvkw!rcyua%$GCnT<@t_2$xbhiKa#UK^N=m{yS; zT&u-eU9HpE(cdQWGiYE$Hx;))k{Q7j>0V~aDK{~Z(F8-}kbcp`y5riti43`g9nwu>;#2<4sUXpa7$FxmMh|Cji+|UGF`F)(Ro$RcwV$CTO3WZ8O zpU=lx)L)Iqhy(+X^(%l?(Rwt?$`9l>uMHTxBF(4w{S!~NPQ zugx_RabJbP-y&@)Qal@?F3wN=Sb}jvSujOONr(g!PPDRPc+}0=qC%tDlxk8|VZAg| ze8Klw9NkyhKJ=C4rG(sd>?PRvt7lr>w# zi118FmT+h$O-074%z7leZ+3P?<0mzQZHuHeo=P00gi)6px;QUW#}M>`Hj~s@e_9ZV z+a?7y&s1TiC`lsEL{;i>NG7idy;Z`hR_yhQGA};|0#slO_C~sxmQ41^Sz0dl0mt>t z*6W47!WLD&w#9B~CpJWx!E2cuYnj2ZO15dH?Bwc{qgwGoA|Vn%#+YEiQWeR>eq<*YasKS*;?~bc9wXhh`!tEtzFk`z zzSibgPHkO5G7(AgAzbOW@cb=JjuxD?)03j>i}WamrIa$M%Iy7`bA6QMmYMKOZoHOP zndf2Kp(x>DTVfF<4yYeMD&eRoaokVHrsnNcCBx+|MvGELRePLAm?J8Z)1IHziB&Gy z$|WqxJTEbIGU-zuag_P0>?9zbr@jLJ0FQ$YMVN-kW(EWy=}N-`^|5gB8)HZs7@M3N z8<04)lviQ6Hf;G*!^6YFH?BqGJIQ~wO*!G~LDC}KoHxF1;cYT2!Xnjw1SMJ8@OGt8 zF=xD7m8&GnN2?OJ%G=_g!JVqi-oB*D?BTmqdB5z-)G)m5F4H8AAT~(^Y-xzfvhkC$ zN_SdM(aV7OxaL^}i=FLfEKS0X*H-ETR(?xcJG zrR5|lc+RjV3N)W0YRbH^oFVa=t+e-(c}rm}Us6<_(;hN7S+4p->#fjyP9sc~jcPLT z3K*S?I0gaq!62N4xn@vK7BrFsZRd%p6SbOlygECp?d$K?Oj%AQC$x#H0^3{DBGzUW zAx@!M?+JlcB3={9jfuv38bquh#csmQE99=oU0qLAY{$E|CnQef1=T!?TzX8hG>6E) ziX@d|BL5Cklq8i%%5_Jmtxh8yO-6pMMi9yT!%U$_D@-y?bU5$Rvch8tYpRl$%PJFk zWDBKm%F>W52 z?$LU$--iJ>80jB|>yAwC-MeGQ2rZRH>QhrAP_3p$QrC2)ZpbWQliaS2HC(|hUa|Ns zG9Y8gwYD%|LnUp8pD5K>IR1vER#+)Ho z9G+IJU5dq2VaPEhe%~d6W12*{T%Q6G`7oQ7i2S1B6ge(mfNUzI=k==%$BrMyUtb5X zHO{ow-g7&2WTG9Yr%DP%6faYWto>is-KoIve&gW5<40^u$hq^?DWA9#gM=N7ynhD` zubpibWimbvxmahcHxsr1ikDFgqd3rL6u0;F6@!_XL@{xV{#vhRt(`->$ux`Dc+JXf zY~o<2Jp*+TAv?YqbuYpR5zR!(u2S_`)IUOMPlY9N4tAE zVM;>Mwe&maBQ3Y*jM2SX`5;-;P(`q+wg+4;%1{ z*0iZg(sUy?o+}oIriY#(E_78A#=0Z3(piv_!;#6*Ub!-aEA1@UioY<8w%0i=NSmt6 zj;r?QqHQ7}5>JMMh79i%XD1!P@rdUz$CZj6Sx{y68ibO*%GtJH3&PILcNBNF(kw0y2*Yx;+ z-|O@a43x5|R4EJsrKD`tcQ(g4J4VV{K3VZAxNdpC!P`?f ziE~NgaMYX=s?1)otjg??XiBc`-lZs6#rO~|2qGq&P*=tWDr5XfNgE~{FBJ|fxU$AL zqFf*>AS_3iq|u$a%V$j2b_}Aam{%ozme`))=EP_&QsNxeCqV@d24N2ziRPk1b35&l zmc(*U-&WhUb7!*9+gmCn2Q$@75X>fLueBCnZQ0m*gkkf_sLFcpUfaa?V?|*j#iOG? zRMsc7NRRVyD&QRIxYV*z*iKy+E&P+sZDWe{aFiLEQ^nz=evFCB$Y+{j4Y(wmj*@!_ z(e8btkZ=yVCdo{yD&DQ4MA9ZsUm|5nG$ot8QId8q7Jq?9;ye~*TNYHsI$((ko7WYd zFrunUxPn^A`HPK%to=H?V0J3-b^@RW-`G@u)*nT{M}~U_L3=qI<=a&Ngs}A zQmMrwyR8bYPvQRh-cgibRwc`M%&HZYCS{mMyvY3hZn}&Hbq*1Q<9JbSki5n-UN}TD z5|KI1yCLJr^cCjR9!KSeu1iwHs#%@4Fw!-~8LuhjL>}{!dM|b@0n13&$8pvYh$Prn zJ7e?fasFK&)L|#=ha00@jQO*>#F?`Vap-JaJbpuk>)}N42DqV<(R4+U=KB9ZxGD!= z(^}L`)-H9{$*>czNxQ~I04JtnoG4viqu+fg36sORdz-r>W#hgo<0Z}VdBh3K&QIXV zm^2f)eYovZ=6EV9QUlvIqKG5>4wA44MI0wQjC>Jmb%o;*CyCBX<_U#YE!`~zk%vbg zP2?=9>4Kzb8I_Z(Az|6KS!teNLRnfRqN<5Zp;$EyK`}CYoU3_ z3Z4KPa?lH7Fasyxx@ZN&=IyLO#CY3wnskeFlFqN?lo z>!wv078~Q6*O52Y!W1n_e}=vXxn9hi#k%X;tc$idhiXiJS!6}LxnzJbAq9MA>wA@cC zs>+M9`-fGOcNnMT1A|LtOM6Eojn3FYB(kwRda^)Dr#;VL1y>RcM{{P=N;zTheW@hG z8IsYuwe}jNI5IjM*d#kRXs3Nj?Ve1A*=(z2I<~%UEt0QZoD&%bfBbS=%vNZvzP3`C zc2-7KCMKd~?-TzO8K@WSAzmIMV^X!X1G^Nf@5j-wY*>v!Q5TUuj4H&I5i+ctr8;6R zd3v!M~w|ID7TWasL|ab=8`mb+d&+ zN~S#Do9f*hyk6_s&OEU`L$vdmYnwgo)D_~OXgvSCIV1JS;sw>7_HpLbQY9ygqsSMd zXiWw8At#^E@;t{O`T;De_RpD27mp#WhQ(Y`qGj0}GC1#yAu1}*BWa&bA@=pPS5e{=ug!$b2!TYY`ywLE;mbv(ZvGjN@WNM);!H?HL)icJj~C*p1_lGtdP z7u%gVCP{tVf%ZP(uii>N;eC(YZ6RY3y=%+d_PJuG@?4k#k^`U zKj~#84q+bKgLWa03mFL|#JQw~BE6qlKd)A{&oOGls7MZN*@+X2Qe-L1k&YEn5))ZIu_-0?k*$riOED*t9Ifi)$CESWKv`$4g})#z|HX(1VOfx0@iHzr%@Eb!1h%O&z>6kEt=;O124MHx#jT5%F73`J zbz}F&8ROwmA9uL5hLGa;6wq$6uk8%)hT)JQ`3nx0?@#@JYfWtj!JU2Pa;?i{59i~! zU>YFj4Brw$uI!MBK(lW+vt^kbKjZZjS8}?JKKw?MB<&Wq3ej!m+A~qf#ujyRiBFuV z^fURCF>Pzta~2zEBF zJUF;_aOFzaSzTRP3cW-pg+kbG_L_5Z*Td`Y0~k2Y?nkN+ z5v-L3(=2a?kcL)v>ys5l)+`6 znuAN7#|+rne9KJZOJE)>gEjELa8G9HsJ}Wj)n8m$>CY}K^u1!S|6uFh*3QmB|KRLN z!f42Kgd-VBgE%CP`V$G9a~4m5OiEe}qZ=KszN7xYdoahsdFIk6Zo1plGE^q!_&1_g zp_?gO?GgX+!NI}bFxylHod%kY%Zb)5RN%k% z#fu5!(rPr?_4>Q*P?EL`76Y8WA27)*4AnjpPGEU!MtfsiQ+^9XpaL#}%iv8@Q-3J# z?bc_`*Z20~H=jLy8oLPHif=tfv_G21Pc+C!9dbimJxc5d8RKzI%w&c`mTbmChSQi+ zcffNA!#DW{p~Tp+Y=W(4%-6w=Cm}Uiu*y?+R|XX=)7Zk$;wlvjZM0p?HH1tA?Pz4h zrBJgk6i^9;@&XILnMR+mOu||fyV|1ac}8D zzlEkz952Z(=&r9X-Fa~9!Q;nEWO=!^R6FB*JoJb)go9N$L&*YYU;WrA{f;{bS=dIiZW|yTvX)kDb zKAm0KE>(*PM=yj_GIKucyG{tz2BK53a%Q-fDaQOO@JHaAnJz>hJTzzKJnJnk-kGti zwY58i8mUcB-?@43`n`t_@2uo}ju)UsLzZ3oSXrhIAoPx)# z@!mgmFFzO2FF>eEOJorzDTM9|)bRW7p+%Tbb6^&-pYMD3_V<6Jj;3IYiis#e*J);V zc1neETZLpLr0v5+T)y&h%&4*}+L2){47d{u--NcE(AfXx^z;ucEiH#u;Z8ugIb+FT zzMgZ|aqw=dt@1azadQu@^r{M86ur^2gK!ru)-FAmmceZPvl0*Wa{LE2HGJ@^GL zgi6>_R6Iy*tIBmqfpo>m&@h9Sz1gQ42zinGoiUT&EwRvAmf#! z?|nw#;HmEjY9Z|0rrg7P8PQ5vkXfFoVaSn^m;-!}2T#Du;EU$m{!k&U2L)9ph3hL< zRsbkGDnBrl@LR7vefsIbr%y9~Pxso6Fhmo)ka0)-XmKBZD<%_s!{|(eLfSh%>eq&p zlQCQNG)2XHx<-i#7`qlyV#u!IrGPrb!{J;)^TO|?0wH8mS8AJ9iOV?kg!yfHY8fsT zqR^5`3ASumc5w>Lgn=O=-myc^YNeElO&OG(D6NLD;MW(?Vljj~#JTfIVv8p~C?&Qz z*PbmAr5-Yc`=aof%?t)Y@G5nXV#-dL#k57862oqeU?(-*aWq@?aiN0Q^xRgfv3sC! zP?o{f=@PLp3(}g4- z$NF&~#jm^Z=b&|gdz@3>waT#QGwSU5chI99~dEGM$&+tgP25cQBr&CkPf3c&SNF#qjkFlYOT< zR5Y0!uD*-mx)SW~xbZWHFZ<~u=*>zC+R&rLUd+hyHeBtHi%PIh%~Z@FHCgb}R~3YD zX(2@ZM^<+eD|dczn0qJR`2+Ar;GbnkjwYA`TL$}7Sju`oWL=iW`4;O@;S@y*NPID^(fJpm~uvj^$Uc zDDh*J$|~cEYwC)LB33uBL0gU$D2HkY1uz3H zft%pYVAfX93c*HhclUbZ-2QyGdw8*w_FW4q3!Lls&jCx>?ovy*Cb2qt_;*brHH6@f zKlw*dFt4w1B zs+>lMBkHQIj;?pz_&1ec59VEZh&~uIN`1?}P_53?YV}>0XiCFD%D8?u7)T^M+Y(&g z#8TQ0DJzAv($T=cbO(rfC543WVIEMRvux?N0nN0mjkd-`a0$E!ZVx)^%LUMA<=rF+ z_wNt(uI+v)|Ft~&(tX&-hxhk(clYjx`G(WIv2At1Qg)Zo;3x`;EKby!-F&THic?)Y@&{J-Be;;BIr* zqNIF%vwS-5e|iF2c4~E!xZmq1*_ftvl(>`L7&AfA6WHN#reajp#+B8{jlPrpr5#IC zs_buk!%N;P!;0F-A*n;H-n?Oy8htP4dzMIKRLA9r2}^Cg{r20RbKfF{^!c_6--+X5 znwD!cSJNdX3##HJHyn#~=#pkui11_NacwtJS3(PM+gDMDqns`W=$#}fCCMBWlB{qd zsU0qiG!*`LwC7h$4`s<#ssb&m(gvW?C^n0^oLh0<2f#WJtzlDmlvkX={OOMCo|m3H zc{1e(Ph424FHV%cynz>>yU0AwrENjmqKz20j}&)DYq) zq(n8OQC!C>kCr_PVJc^Su9nB)rmv6`zEer^$g%_}=7pt8(KM=hap@C&qDZL1b3S#c zZ6m&lEf0pFkEcpGmsv`M6_9mQzn!gTqv>xLc<0TU?$>8$(ORu$L|%|xWz|w?8*RV; znm#TgM=hy|bzriS=kG2uzQr5lyJ3zU=;+DRc^_@34)kDaAMH$UntJ0^opFkx|1$MH z_v%mlq8oqRV_yqAVHij&93!4znNuWJUdiLiDrTRp)uu1FL`hQYmk5)%(Rjm+@u&-8 zRy+qDsDn1RYLFAvX2SucT#{_ApIbXO7;FmHo!^{4lh8Ky4>-!RvSdG<9DZgxFhd@F z>o431-)K?_ZHwe?z9fU!m{a5{jDA*ymtb6h3D1{sY0m7594_gs!8RP{gvw0+$xF?^ zCelxvFUtV^oQ=rG%&7FU9+CX1vKNYYX8-NT>0FztSPMIdHcOH$2|v%ZjfM0wRaz5| zZvhP2U>@88TZ3{Aw&%dsV6d_8&VCcXHrSt?-3M)po?o7!leg{D$=1*4NSn}TK03vd zqbcEVRrHRuSO2`gw7zutatk#y$Iw0GE{E1N>FwK_ie%oNc4 z0MTMykU8$!%C4bK$bUods$AlIFmn`^bYm8FHHMx%RvZ+q|Xuz=g~ zL@Ri?c$ItmE|oa64TK-&aOwzTL3ojAzpBD7DZ!ouPPX83s4R2CooJv6p65Vp5%GJ{ z-k=r~@y2=uw`RD9i?Hn5lq!E6)=EqTCA(iSk?gJPnLzGL=kcsrbW@xx2tOs7V98wx zAQ0dAf5D%CZ-LZkqx01FZN`oz!$yuS&o7tkSNySyzs3N+M1ZaAR+nPrupG(qM?F2aNbZgS3%(593GW1dILeZ#e0|c7i z`LhhI?Sp00p+Qk&anUpobfhPn$S2pz=zu<+cRJa;^Hd6F7I#|)moB1hS6a`^D7WrJ zG6<_`mO9WT)K+3G`SL;{=$;H-POYNnTm1VgiKO?urVNqig*Ro;$R!pf;ZV8b_cOgB zZn^?y&24DC-E)FKTv)2j0Fl+eCh=P8jwve>x9m}3am4aH0qX6KU-t-RGVxk}A_+|! zjmGU9y`-bpl`gx!kTTa;_MO837GOE?VQazm#M+$c=_6zN&hJo6ltnLq3Dbo z&!uS+B0}|wu#jxM{KXv6%tCA{Uttj{B!`%F_Jm6;ZS0yz#(ntH?B)nT8{7qNf=_@i zn4ZsfwLW?9(bij!-URl|Qmb`v^}^1Dn>W1!?=)m?^$1^hq*ZOeg-4a?NGa1fAt?O* zid2(!HD)ucwls>P(ImIGHd09?N9H8Q|1UoRVanioLSZ)r zQcVn5&T1_%&I&ST7`w=WdD~vr{zF$5WZY@k(83C1<_1(wUu_VGvF#U14lyPtZs_WP z6r5bp`V+$G7)`?Y)$9VdXL7&FhsoLRP`LV=3B@p68K zV4FCMI}SB!jNT*93n`P)wwB1)RQP~q{mp*^ejB(T52nEq*a7#!2f*v54%&R>S@+S4 zm+sHZ)e4r@arekWYIXSE2s3bsmu~K=tlvA)hMRb6qn8zp1Fg6tm_tla9}-N?0UCW8pM(SD)@z3;lUua;a+enm*jHDb4a z^_EoA#IlIZxkIRBA?P1+KXQbtH(Z}F?V355%ow--6x6{I*anxtZSWd+7ku7KQ{LmB zK<~W%;I-)i9SXN>}Gr5P4H~6Q221?S@jWk@zVXKoy%3BWmOpf)hvUnZnoB2 zolbSPajwy9dR6bwK_^YXY$me06Rn;JW=7W8Jte?>O6SCUBxj#n$#ZY)<1fAR((C$x z;}J7q5B--kT!9IlQ~u?$^ftTN|3PEtV}@E?qa{pI3t3oVOPIZrKUXuBZ^-u3l1cd=7j+_zJi?Xw@nD;r0)pFAYBb_UGJJW|m(lFAoN2 z=|i1%8`&ih<%R3^QUA1%!=&WM1VsHfXPP8u4ckw{0)4$d>9KO87dd=E>1wa{T*lNo z^(%4KtN+WspD)0KO~Hf}q~C{XN3rcu-uJ|OekcAY++zqJ6pReKUUh(oJ%al2``*-t-(Ksh5jby;6lZK9x znBBWmU;cPMS%^k3nU+zpv)TM)9lI-txp$(JgosNQ9QaGVVXwA7s7RGMEKxU>9699hSoj=hjy`uv8ME5%Ux} z2pZyqu-phKIbt&%b)nCKrjV|449hw_5IFtiwU2%gLeC&gE~wyxUG6gIel)fmWn*eH z)2}tRvfeF{-DH$4d%Uz&Y?CgXOu8mo`@C8||vGGZ8`Hy7+~MhYz1T!N7?f&d=lX ze>wbPzk5~AAW)+8jb)gSlJ>V3-Qc^FVCP*W z3PxSFpV8Y=8meFw=3zY-NHbTnWDjcBQM_5A0#lke7~>*Lsgy&U>CY5AW`s=UO!t2d z{{%v07qgrY<~X^S5|<35Yui%#!HeN#%2>y|s&aE%io#Il8BIG#U(&T|X!Ie8|-Zf9&s%w*j#c^Fd&P9)x)X(x|H#`hB zJi0_3`v7g)CI{Svt(?wE=vn#C*6FxyBK z7sOUfNB?X3pzQ`u^TSGzuh#ru#L;m62ppik^C#dxfPVx^+0^JNxCve`_tsQxWn*J! zetUj-xpw<{=lX>UH4<1slGHBm-`c-+t!6l$wZr<}Ua!_WSzexnygQ|WbEHglvJTE1 zOirhRXI@?zn`crMMOB2Y1Zx^~ja})txb$1Iu-T*!AXIma7^IpmOMh!l1xCB;UM6)v zGb5+(&&cVNT6>tCH;2}F8SHAy59wa*T+Il?E!6@?c4RPXuA^DZI{b}xyWL)#o12>h z+4THRvOA}pP0tI3nl9@ga4?%Tp4Qp5fWF6eCc?513A!yMgo!^aC=aO<)c z{kpODXc_^s^J#$n+^;FSwit7=>c%^6eAzSyE@QUS2~c5Y*t!3G@Grn`0Sszj8nnTJ zIWa38=t9Qwjpl30g_c0un!7hWV& zIMmSnin)4HRC!~d_Wl}#7r)r+eK&%tJCJ0v&}*XV;NyYOGX42H@$LVy-|zR&&xsze zLHj#@n9cfIpff@(_69kBrC0B1jb;~?7uMEL%Wm8A^JVn@25FNT>d#T8hqIPZFa5OI z&L?3?&vVV7yCV-6f;J(R6gT5@X1Wj0>76g1(>q@+=LDJJn%s_vTo5oU=RKQ}XjzlS zm zxLUt```p!Y&q0Y#bo-7cV%-xEwNusAX${^JW5V7s-f4X}R%n@CK_imUS|lR_N$Y09 zUTg2M9`$%43$reoO45YyW>CTl8m6#S@EjFl5!!L_!Up$T`P19m+uIj*c6N3iPk*?< zm?Te&p{4z=oBW`m3j`zK=2K;M+;U{Q%FgX`oK_3@e2l!+SbU}5f42}sIbeh8cm6f_ zx1$J}dH2Bh=9LrooLXPDl}eyxCAH<{Bp-$Vw38zl^3$>i6DZ5m6P59BYCNMF*&45o z$#fH`+QQn}nu2=G45~SY3HR&VZ6(xS7cN6YX}gq9Y_t_bIF3|~nnc*re`_$fbm`LI z)6+Ee>C)3h)(E6M#oY~MPYaiPx+;yyh~4;jIYPD7D}iqjqg|Yx*F*fN17eT|Ghh`w zGyZ0^<$|1VHkX(0rBdFz_T=)DZuef0B=>GUc>MStu&lj%d#9JrnGNG(-Q6=rOrytc zn)~Z0NanaYOVRz5v*{6r;?38j{~;w_g?iTn?L1facP~YlA%q}gGxwzx)3l~cT2O$f zLL6gwB!rbqQ5+#{szjv~7M_zZJuSSZFa5tS1H3quBa)MJF)>mdYil<{jVa?&_}lF= zcX}$suS*qs*k%roRkG;gbfbpZX5yi^Qy2*~dJW_m{_%i!=0%|mYPaN0k|GVi@ z=;>DW>5=JX#H86UJ2EE5T=@IS3hJ_kN~5xC?!wE$>u_FS>f;Nkpz|&fuZLTLY=pMU zq_ZAyvh_MscCjIxrR60_t~)nxS{D=I=A8VM$i?$}#=WAJXX_9c%;UdMpv?h(G^ zDPtC6(5m_ipORaDC)Cw@Ts->XEiZr@gd{gw*errOEDfKON8%qw%AW&F8P z|353Gw(iVCR=J5;7%@Z35sq+d##GJCF()SjuV`b)W!_(6PN`52ad{fE`!c{cY>d~8 zNJWne+a;?WDr+lW3Lcz~tMG8~#l=<&?r*KG zLPsgi=iuClQ}C>L+9^y=^9)ITbN-E7b-F{%(c`6?#H2ShIxdeTd#9YCXY&~x&^KW! zohv&0pOj#qz`S^cOH`2-LeR1oYLwGZo-@WfdY4)~M>{Z~pDZfO*r*Vl_^ezlb>RA zF=-pe3r8?QxN^1=qKJj;LHe2y8VSZ7ObHh*$I4{_ld<-(aX%nHgFI+}t43|ETDTA! zLGIP_OXn|KXgbZwB4Krsue>&1lau06=@DG&Xkj1IQF>W0$9rN(6#BXeQf@v>P)g#t z1~;X;lS_P2JGTTE2A?rTlU1b4wpr!NVY(SBnbXqm1PYp^ZvDg038(R_!Z)`HsIw_$ z=-IYZLAo1Sb8U{@ZvP!Yr|wOav2Sb>77@bC^Ps&fgUI2EP%(_fA7mXcAJj5ei>I0I z=;G{5{qEka!L7S@sX(YePg~rKkpM@6=-CQtID{N^c{Bgj)>u$~{MgOb*#Vkxr9KMk zZ|JK*h=RzDiFYV`>Z>+PD3!L{Ra0 z6>zkk$7~)W%hEg`i!un9Pq2`|(9zlO-+u>a5P&7{lBwy-)6@0(`dqG+E0xyMaA9HH zQ)>O;*8Q!WopsA~udiP}8{v9#i$BM4=$*uUp3xk9zhFKW_V0$!y^`5;Uc2_%8^SwZ z7T!in`tO2`-sx z=YqRc?YWy(TS{Yz5X@JrEI1)0uzG@N@LWtLH|X=UJ#+DlmhXg;TK5YoxP0J7Mj80E zX(bjDX)GRW|3mV>#jb5R*cRCSuUYKHPuNl&5#=d)~v}??}hy zRJoT+Ig%ZZzAt24B-kiu*Fz!#g)ntkZs>6Mufe|uzm*~Q%b=6#*&YmP+nt7+J0G}C z7t9}?KR>^=w|D8%yaDJeb-TOsyQh_?PD2PzAuh((?D1tv)<@bPct_X9Ak&FoPVY)VGG|@ z(sGz`c)+pW_7vuh3>>K(N);6n>-tsA7$I()aOIRZvz2Wj2uUfIGtxB{x5Hf86M~fF zbUGs}f36gC9e>6n2E<@`_J5SU4TB2W12@1U@CNvpc`G1)|K`>Gce;J@?6ue4eCM5f zfCk%m~Hm(N<=MlDI>%W67Kt}UikO5VBhOMxh{OYV{mRw6egOS=)@q3t8U%?)w|lg*IKoA_p_eWb*|(ksp$`s=0xZGJ3KvAapW2` z38gH~LOfbLr9#fSP2n(wRdq3C4BAXzfB4mzcLqir!4VU*d9W^lVE~urV3J)?6Nv{L z?uNnS{@R~nWi0L>_TO-CRqw=p*C~HP+w%72kFR`pH)~Hl;i#&<=y)B zeum&T=kL{&z{-xFm|a_K;~>4s@Q)QHi#-Fdz}L5-t#8%CvAUmDBQJ!m?|r?yw)XOSVN6A=EMMTnJEB`vy@Mk@&olu}D* zX_F;CRV?bNG#}v}qPo-?P2Byuka-_d>5F^7>5WePeFr7@8I_L<4dQ+CPmlUJn^4KM zg=TweZB^cUTk}3*(DH1}zM7r>jeG1mRMLluFV|0Wco_K}DGiTt+=JJ%0^whKYyyx8 z#w-+77#&LdpI{W6&ZbO3^tC?iP+XXlqn(LL7W4&I1P^%#+n0*TnQB@&nq`%phl~|Q zo2=hQ-}ELD^wpF&eQeoPe|d`CQ8>DfMqG-15C?^8=7I(_s0J?Mb8=Kn76{IQWXJ-g>?n-AysjDYQ z7*H#Zq}Y`iNDu$=BhKXWeW(DhLwsU62TI|;w`vVhQBjkT?iB9#3iqb8R$mX}4q8np zWGL3e1J4LEXhkM6a`+k9p`!1YpR4&#MEuECBSH=eh6R&qh=w7jNaxCy^-ele8i=OW z<55}1!QkPf^w9as-42HTS+__cN@-UkM^J7Bn=|8k<;b{C! zcbt&`FOLt&fcMiuK(>=1IX7w?4v11=W9}|wtdONh2JfU{@Grwb&Mz}Wzb{DcfB7mp zzCrw$AuiZ2kIoDU0pAoF3bWKwh$yvmFb-=1GaueD~72H-Jnl{hSmOg z^jUK#1!#F5oaoKW`TRiW;A#BN|59eR`53!2IZx$UHhtV(RN@hfZ%y;&hDYDiI)F}M zaWci)Wtn1dVnaMW7)(*&`GkN?M!4KL=a)E;pTrCdM*!M1MFNd^A$vY{4jb5TkETj%TPh=c%5 ziP&4JKd;wNlx2be7GJ+EE66#`=durjV2wQC&usVG#y>V=?RGFQb+;0kSd zMd4U=fX_v+Tt8h%rSU^tZH(c&hV~x!~M( z5MIb$OAm?Kx9X3hp-Z7~)&RJCW1J-^*3Vi6vHAXUPfskYs{W;WYCz)TfuhgA=_uTL zc=um(=?HVo!RRl!IrmCj9{)B*XdegXSY7$=feMEa+3Mozl2_w>RwdsJ ziClY}-Zg#pzuq4|XEd#C_^tjaj?mc2B>4@u`)&VnDG2(sv;2gQ{;vjhM-}`}(G4Xz zl{V)FRuNE9U{}8-$=(yg+#4-ylv;X11m;0i~4 z9lNY1>e062Gk$+t4a=+$pjrNzc%@5J4bs(f)i-46d;Wv?=9=jpM}H2JC1QPpRlUP~ zD89`|sal?h^;MhpG3yH|6tGcTkHOTHO^}6>q5k`8D#!>=1>s0GNKzn6M4mn(!bFt~ z|A(o-w2Nxr)I^QT^&jWXN8VF!%Q9+8$1|LbYKl+&dlQX^XTGPW`KgQRuC-@z?I@6% zhPL)uOk2wrXZmP3{n_vCMJ#wg$jzRWD2!=JSKSXN-Ph8hs9`}D z3yM0vY)BuUD^}MO`4zb6H$lIcVHRuopLXptg`|I8rJh|nwvfe@XYG|)?XWRaX7r@l zk@QllN!N8Az1EOv;)ScPgD&GeBZyBpuAz8hru@yh}x9>oS{8))~h z7HwR<;&vQ|!aPpqWO^r~e<)wpq{+o5M`}hoA@UQd@d#n1Y3iS{zp*}O)1hSv9K$p) z2Z~JA+m))$wCYMh2FF2m6 zL!um`f_YK;{kY+Lc+Ru+_g98*6qavOU*ic%l& z6a&102bM=VFJiMx51N?4@?l-8s@wXb73^rkmh8)LU|8fxn7m2&jyBYApy-uWyG_Z- zEIDaWF2hhf2SSB4D6xs1&zE26wz7G?K7B<7^CUza6_PjMC3&4DOZ6 zt+u7JS?6}8hnyy{inVY#0j&Ry@>YUt^}60pdKWIJ)S7TBt9feeUO^@^<4s3eH;I~C zdEJYmXW;~+KGJoXkVfc99r40KkH~z}?W94^q383VyvjDowiRT^x6^_rBc@TJ#@XNq z9x#W7Gv9^GC8to+-}{v~$DYcP=vgLykF!!QpbskB&jazgeF=6 zR!CfL4hqdakFmG-fB}2%6=j$PHoimC%44>5`eOQ`|9d^h8|QEv|^(K7-yqo7)u zj;LBa|5Y%p@aIPj&U?ifpw|=AwiM&!+w6~~wJjeT^#ZT&8K3t~;f4KLbjHoZ{j}Tj z8QW`X;xR3W|8^*#q^)M>&v}+y4Yyt}TPwyga$_}}WrdgcasrHbV0*M`HD6+mBIxRl zIXM}odJo6ifX>V<>D3;F7T&By;iDK|f%iZ~Jco5Y*l!Gv_C{Nc!Kp~_`4S^{@I%q) zzNY_d$1?nFctg6w$`3N(e<`Kirjy&;XXoK;Zk~Zu&)wzSzJ_U$`S7>5V>m7!(nZXY z_)#ndVzQs~jp+gIsf>IB*5V|=(;uDa7k>cO>$%urT%(miy8H&$vK16-8pq8qpV13i z(;dW5fj`O0t4rV5oH~3>U+qM>CWOzj=WbhIL{lHR#<&sIwaJU|^{BN4ilF#v*Diqq zgd}h`>a9V$n3w{sG6jq=Bs4Lw#`E$dP9H(M@Z2kf0h{J8kZ=k~g-O_FW*w*CJ)ytw zF!U+_$9CvQ%L+oZDfX z?5Cm?pO01m8Rj>^!+fHmb*d-iiN9z%NS^f0IHjd})`&Nb9KR0>Q_cQuwsPV1mi2A? z#YQ$TXz+wIjmf_M#Ri{9u7osm{wMbfd{0BZ+PBj`FkuePI{>z8DHGm7I@HspBTWPR zG1FEKTcw=3ae^KZo!_>J9&6`Aiu{}$?s-2qfEVl=olfpoW;$;aQon_zwSC>Jm5QUi zR#oczr%aQhhjiuJCgWS6XuXCg@Odsh`9*YilryqfAtQWUsbMUG=z1JNFXn(LVA^dL z5P=29QT<&gRGS|3bBA~fdw&6ktOb~3AX~(!ZmSe{hMZ5bQ>d=b zkp*=v(cZ;)GhP2-YOb}Wwh}C*P(my%U(_95c%;hj*66ct(BX;0f!4k1WYjK};_Ug? zdb!pdJhEJhG;{kNfvL{+MXM7Qh)U%VAQ zHI*GqFGDsL44qRk)lMKjjwvJ2Cq{&atowDy6n~+{c=^&`8Cth8sZauxGVqnHGB3|h zF;flD_rbfe*|mS^p(NIxvSOhwdTg~1bAT+74JyhB7MxT$7n>0Ot2fukaf+lCS_ilW z3;ZJ6_>c>%h6NRMK~griJQT0nL3q>SanZTSXQ>c-xe|#9FdAVw(TE-){aoLWE5-gv zB|Rk*MG)la^!PN*l#1D(v2SxtoohU0vIiBF735xt-&HnI$^elpYFE5154$TRu=@bB zCgQBwHor}&cL17WZs^3I>Z!`eJ@0qO;(F{WWjT(z5#5Ame=LCbPG;i1E?su6bBj;) zrh_Z-JJEMwH1JEqujCo&RCBkYCull3$Xl;R{IV#S6^bo#Y}au@+Z6SAm33(;pdUkX zcC&=S>Vfrk14gkT`o4h@PNvw~%=|W7npYSp9XoH%s$;)z(VH`B*xaXW`ZrWP+E}fL zcjW63S`XwRK+q1&3seh(30ISqGd1vY3jZWqcWhC!eDU-^!k!u~VB_fZe%fJr3N?&Y_ew<057Jm_IYYW%o5?L_5nkfknBtBnQlY5dCYb%V{ytc#b9dE+#}6z_f~O@| zHWX<9|;`aJeO~ zYE_T8l4HUY>VBnq%ppWmh`Y{(gi>uJ9~uZLc_H&p+oRKDzm<9N1H44*H77a zB`9qd&4%MpIFvZ92M3&~KnF`c*`CtuHdPRso`w2~4&|za8AUFgto(cF_nn|i)J%WK~ZCHct1gbwqoNO}t4tY0VLC24k(7`*6 z{&{IF4;tXI!qa1+ztvNB)!dCZ?NCF;S0KlD12#C*AeVtre=uu>R@4kLBUukB;GP{k633q#$)1gwB`9gewyi`pbp8}_0xGj6!k3W2D zuD6usNYN|D@m&Vdh{RtUh#}Q1Bv7M0;L9A3p$oPu1T&cEpaY%+r zHGrCNNK@unXR5yNw=V6estA{nN{OIL;hmj|%UbezINVeN5W}|y^a?Q8l2lhuX=D7* zFWw99{dE%P2`=x<9%uPV(gubGHSZWKA-vUXFW626E|WD4f3QQPdQ4TCxU_T8*-24~Ttz@s}?c6QHX(iumV zl9wLX3UboN$qvd~My@|Ea1StD7$44s-?#}NIkC#e7l_&tA2|P4mo6_?Rt!`m0Wou@2 zf7{fZW&AH>ENt$MzFjIO@WHHrjlNCHcB@Bn%_#~F=74u^Sn)?_$YL${InBC z1}bmo%0g09!3uPuMGCZff`58qi*PB3(%lbRMBnXJoVg%q{NaC|a+(-@gUdQ2_T3q) z;vBv}V)3R`JMt{m?;Wd_CSNnJA(FT!Ww<8uFy+r;>)$WDuv#25jhIrfZ+BwGN1-^@ z3QGjOjyg3w40Wg%xopKJEq{N)MZ{k#KQ-#r)cv#M_w1c1BTW0w6nkIg40rn+eEdyg zJ^g#saNYU-NXLpD_frC(P$rcLuS!rw!?tN$@S)$a@Z*uGpWf*X%uTLqM_!x~ea8urezkSeWxh?Vvn3TW9u z=&B&u&Av0f?2WnB{TgiQEX)O^qZovAAfVuqS{0s1%lf{e7#((bL~_<(994@REz_uK z8+q$eBeikm)%fCTfJEO}-MpPFWVT$mnD)2a0lOK~D_b#ZOiVA5Yb{rs;K(Lg+J*vB zt=aDOc0S)5tT@liRHc3PSgcrVfbrQ*b?Wd~vbg$ouUtdYXf+*yf&2dFBkRn&si+O+ z?5gegY}48uZ}k}#&)>bxc>9sG|CJo;ePIZ77K;(FydLvh(NpzlD}VdL`?qg^EG%CQ zz|I)KH_hN?pFkXT!&jupdGo;py^V5WbL>QsNn=wY09XGqX*B6(7NFFEPz9f-Or@pO z32nwH>+fn3r~o&BWy&R=vHN`B!ftIQK#w~giTW_O`UwbE%ux09NW zBO@FKO~=R8V8z!9jJxKa?B718O6qLP{_*&P>C$^&li%6L0xvdGH)?T*J(vsv+>+b& zl61ooF|zsH1-n`j<|PoRC21PtUb{l?hSVGOMb>bGE@H$qr$Gu8#Glq8KLFoza@*bI z4XK>zNULCsXZfTNM;_ASR{X#)E^jf4in#fYG33GW`i)zz*s}p~JHd9ibAzR$Urh~p z0Af1p6JjFvNWrs@Fhi~F)oj6HB^PikK@Bc zw><~%FDU4o2_20754`3!I5cWtLo$WGHlahHy2c;-q0wl(+Ct8h*kfL)5fEBS6(y(@ z|2nQA>-3{-eaI$ne%Ew)zFQM@Tm$(`!5ljrO=PReBMV0$msL2YTGbe_HyhWuUN*Vv z4_jVSj5e=E2jY(mnfoJ?)m|z3H=AWX0LW&bp{VL3X`qnF-sC_>1pR1cLWwW8%}4tVA!|eJLy#aGKV^TX0Kn0h2Ujh%YV4C4#*eNloZQ4 zvuwlvWpbX5JoE-qxt>lgdC!QkwYz5@J>YqKJ%4VtSIFu#mP97bwcC=fe)D$mNNQ*@ zmo>gTII#3TLddkY=Mh_Vb38kbD-3z7&Tl8LvU(e@${L{#cvrlfe-nJKqI1>?>Y$NK zULez=l@wRA6{oi*uwkZSA6UYGPc%m1v5Dzw@#-raNOnz7Yg-RiUd`}Iw6#!A<$$M0 zlP;O5)TC`KlEjmU&pLuTo9l~=r6|#>4^Lq5N8mm)R{NAM=Xw*?O$Ww3MHX3D@{W)? zSCK7&*fTBaJ*Bzy%a41W?>m_E$FIJJq{~T}yzZ6%*?#K@P}UNHduK=|;xrH%ewc6= ztFO0VNS9`laj|xPZMqQOv?HyWn8QY!UrSxd5?|&xZkW~kR*t`;{QbWClXxf2dRZHc z&lEBYdo<96x-DFD!>c`EgIiRx+zMsVK~dts&7s`_M9 zY8~>)4DlK@)gqk1(KRZu7vzhRWAUM_1@?D2Gr7b_bE~bbZQ*!K?+}q_2tHH(4%; zM_QvH>dR|}jKYWvQ~Hs8nx*`*IL)68kUM~>tl3QKkgrmqxwN^`>Cw>-Qo8E;{>n^d zjaB83HHtNZp`D32mNAn~vHQbl_Bceg-n8W5%_w0llY`PLB(Ko4rZQuVNbLGnN1WbF z`D@YHq@gi2lQp@_%3gy)T5V!f%txYJK9r^+WvZ-XbWI_yKPckRbmI}zwFkyzTqV5< z4LkQPiSRAaNn7T-FiT8bhh@aPEUJTCy*P{1(WGyR^E8XJ1ohIloN=(iqBsFXTj{BC zA|WI{eIxU5YsEoE^KHKT?;9SPE3GZn z^ifH}d_#jy6BGSzS9gzZe}}!ougD{qnG~g`=-J8iNutOJJQsfOWf#V~6)r8v_9uhw z2+Ygg%JRj@4D_7);3JixDj|~u&E$fliaU>9%m%g&s=i>$5Jejl$X59tj(c1FYi2zDZ&0t?yxzF~A;=z|9 z^ZB09HbRw>k}~AfYz+YyMbu@tFG@>aHj*m>G{@D(5)BQ3qr;D<9>nN_fK}EWe2y~k z{U#mKZPFgvM%EYlkp~! z8sljHCH{3WI^Yh0Y`G-BFO^Zse#ksLKYY~{q{HXIP zK@7an^dNLCvdTcW|JTW@TcHZ80PJvm_r?p)Y zwk{^b?1%A6F+(lu2v%8^s;v4iKq05Q{jKewBV_l(U4W%*plwWh>J^J&zRhD^`Lu^_ zsA+tHNqbO?q_w%^@Y~1n7)hOZL5d{zTmO!gT5wEulxjFiXzsyU(?o0Yc~K9nb?=Px zwbL!*FraO#2WIHHM;bR_*eKV_$vJU)0{LE1DqUM`<@;=Z_?oM;smt5<@Th4MdhY9< z{7tK1`uQ}e@!QVW)%9?O zj7FKk)%|l~`;b$#R$oBQ(A84l_ynPH_oaPQ7DJM0yQ!_^<+a=QK0dBGEY$Z)mDsiI zf-GglQ&Y7`bGdQdweg`EpsQruB*%n33sP=oo`P&Ei`ji9zIq6$tnA%Xr_(&rL1JQh zr9~}OBpLbYC7ygZH_<0B`g8xvDO09UlNv)U^`dYQx4FTl&|$q5qqy3?`YhT&>z!R4 z7Q9$YHB}u69N}svQdmK#Hexou(a|uHt*M#9se+Zd8ZnV#WU|=ybUFcGm(+b7&&pSp z_6_%>pZCmli^Ar)jYs-m*n!b(cPYSL&=;ZGjh~-aBy@qsa7ewn7F{sU9a_c z5fut-3iQ}jAp}Tcsv@tHH$hLHfLphBZ*1?6dme0 z&P^O+va;TzKXl}2?d+YRA^R6xxOBg#L~YGdE%&u#lyx&bvg*_WDoobkRX$(0^-MCQ z=Zq325~%NjyaXF-d<~tyuO2Me({(4ex@zm{+S{LRt~R+z(>FR^t~xx8YDoA$W>?Ap zRS#lI_lD-vmelIgmZ8o${pQ&k=K@*~kX0?1n^C<q$Cku87PvbfkyH<+}8n z){&YH3bW_{a`xOE1C<7Q`l`0Cv`gRRy$hW$Q&p!>jEu9Bh+PJaJg`g>6(-4fbBSfr zsDi=G1sG%>*?0z zdSl$^Ox2?^M^BqL?0WUw8F`h=r2O(E#7(67E|#dNE%>XdOxS^Lb)rvZ`(G3gHKgs2 zxd$JcTfFFWU+Oivud&+nF{D9T`7<896p>5OShA*;!5(dsrO!*=J3+uW+fy z7M_`i8k9lBC+a{_t4pGmlamPrhm^jiRe{|uErq7^Bk3RbXOTm?+%KU2l5|qsC=IXb znYTF*P@ZDapN7Mx&xmIX5VCP4wA{L>x~^(o&Pp}Sv7 z-5Ml7?l|ZjCM&cRT%erR>0ts8tU$;dX@^;;AT5jk_A8V0C z{by-@WJvZ-`_~35#^LokgXLlF(>2)~7>%}Zm*nUjz(A(v){2pHt*RS6Z_wTurdUs3 z@IP&AoY$`kKzpHx3>YpLKtMZ2rJ2t%N%sLjKo6Q)Z)0!iwA7Wy zBlslbO4Igau!Wb0B*pcd-Z|zz zbTa_~&5%ok{Ybt0;CliHndGn`+%%&MeT?C$(E1X_H}2>@Hp*r*AYxixVB-fw3h+i7 z`odncELr!)0I)pK+}RU`8o>*lVuxkQT!~iE%c8GC_&IjhcS4(k|+MqCEQx>f6D-`!RUx|LmguFbt~~Z$0vX=2 zkLAH6mYa_VI`!oSsmLw{(qWcr(jV?0HE$(d#yg@x`^p5D~^*zW4Q??WMF z+pyjo{qW1KY_;3KdU0~w;Q!fFJ)DTCu%`1bczGShQz&B_BS$9(V}0xYa<&E*P*C(t z^!Rl6|7E$jplC(Rt(=S<@M%S?^qq`_j16s#jG<_yjBQMv%<$8oZtet+xKT5Ws$eD0&2vy{4TUTDmY{oEqk_x<&FTfe&W{&aKe zqN#f=JAFL4xmj=JtEn4f+j2g9M}jvcd%isRlzOh;g)2)to_hVbdv5Z67bU&y8br5e|S8+?7V8Q-tyk>(T-z_x81!Q>Z|hcWv`9~Y-!TKi?`G=zVFk; zlcTdVnXMpknbJW&v|_z9zw7H#h5XFTef{m$X>*md5cXJp^_Llb&OL$Iy=7yynx`xt zb3`Mq8DBJW=BRDjPFD;+lW#DvfYez5q6uhBKS5DzwRR5D+)IG~B`%wJC7+1w-*N5D zsR0=K!totYFfhdp1L2QX2BwH0?AElm493MhfgcsaeLTw>48QE0N+R}XJRxNIk1GW* z^G_%QCqg+o4=@HOWXuu5)Ri4!hEC$rbC^YG$oHt>?x2V)ec`f1DD&T?V?~v5P39vU zmTwp7Ok#56oJQ7ziQwVQQC!x1InvUH*|u`s=0-=H43==rp!~4W%%Dp%Y0i2}+5`e- zVKc#$5GrsWlL_@je0^mwp~>Q{^?7T^@|Wmgac5C^&b_b6YWyhg5*hD}c@0|prsnh` zfb#UnW?W_`M$4HCvEi77sl2s(WN|S8Oky|tS-&g-_5=_V1!7nQFn31T2}%Hew;#-1 zl#9r70RlI80trD5+E669pBK;}92Cw1Xj1TjSXd7FCY?vX-4>sFwiF?WTmagB@Pc?) z9DR1D`3P0)D)-ip7je7Mik4p$(~4Gc6;S|Xm>jceL4(sEyW6m1>51(1Y;OCmlGjcd z(-B4*spm`sgtKHRt=qyfvjsd(ldB4ry7lu7B5db_&|Q(gTiujf0W@I}8&Mb;v;}J7 ztK%<-?`?l7M10*QMIL%|nr{8pFvwsgc zJch$WD?Szfh-?G!5{Tcqc6Kj805=GRFjd6SK#Oz$INq@-h4yqIOg`(M3`QZQk|>6I z7;?gCe}5E2@DzCoK54!HZ*#J^-m%J722;5-0jw%HT^mSbd3k%>pb&U4SX(E-hXhk6 zA`Bi&KUp0S|J3+89Ek^pWV#px4k9*T&BDoEmLQf!Uvx8HBqIuh#WabuuzW1$km^%? zH~_je82>bSe#vQ-9|J?7NqmO-(jWD}#mNM!Qc5}bBC&`fnX^28S`?juiFkyH45I!F zI14bNU?x5qY3KbLTqQlM_+|mkqUc-j{Wb(X=Wsz~?vTa#yM>@ueL0Ymz?Ntpgmahy6hbHp!E*#hQW$F~$xsfAQ-68-eWc;}_5fw)_z`0gTk{EvbjsVq z>4vV;uiy74kMG^u-?KQ5KhBoem7S-%yyt;|^$7ibNo8ckx0T!IqVd6j+(=R9oKSRl zPPy_eZTqEpmLI!g)v+)G{lW9Quc)z7$=zzahQlXBoSDvDWb@oQ5e4V)OSAO*ZQa~b zh5%U$M63|S;CVHt{tm_S>t8jnnTz&hCkZDLvAdk+v{IYcTK?}bFDBu0QwV|G7+&66WByb@UKfm5Ey8*so_5y+<6J~GJ zwiPH4GAX+~6F#&OP8b|AbmCjbL3&SuU+8!3wEXdq!^=25W5m>^vv|OA^aMa}f#SZt zWO4*5LI@rf)W>`lu*aUEp>NPOKwL)&nx;a>KBiI(68D05*_=uv+N?NSUS6A{tAEkQ zfrB2S##W#lNS)};mQF-|5tEaxYNiPrMsr~1tCr%E1i9wGH8>c=Lz!AgTU1?TUpX+$ z#ffTU<7){OuQ*Rft_}dzne_C0RV?=##i_a1(Q%v%ykW_;<|G7q2>NXub3t$%;tRI& zvx~*)Eu6zCJpID)r*pu=2yqKNRl6G9kd)d!lHp2^{MblrD@JM~brgkZ8BjB@NrS}5BV8{-pCXGD;VFHs7f@}sBH93|<$#V11~MBPBWZXI~IeAo!r-ag7` zkBf_6SzKI1$u&D;a1NIfm$KSOTWO^y3NiFZV3aCR<$Iu-K-VM6&6G4#Lw8gdFeSFZ zOGn@wLSX!B_?{MZ*)Q5UjUf#FhvA}Kmq;wH%u?mGPuqL0wJ!G) zUb=Ns`r!Ks1xZr60A%D$a41F;i>aF5*C%^G$%8C?GLLLYFQmYjMtV6Y3J$qrNZG`n zoJohrb|7(Qku-X2*|qPBQFD0fdX>k_VzvLVMN)Zj4wt_3G@dc zNaKp-;9znYZQE5u28qse<0Rp5Uiyf5q^vFkiPrUXkvs9Jw<~p09Zwj)FEqe`>s$8M zws={ukW`X1NO3r2JRa4^I3R4VAKL! zorysqB?AhJx5ji=Sn`Xd2m{|K1`2ep{= znkU4BnK5U=01R(CY8JBK{q%?w7u*`Cb4J*N<01?EgKlp0y10dyszJ4A`M}N&&BKNW z76(ya_lS=2w2tZT6}J-!_xS~X9@E0x<}kIA8ysP9O9+z6C`8qRf=g3gb94ZM4%R`& z2uFn?Q#lbwIn3#P66~Ch_1j+TJ?!VvuW zf4)rI~72Mj};MRtM!H3pI`d5_P>7#G87lWS=Po!5$=}?s}7Rh{d{dXQTf9^=c8cN0t0u3 z!HX4Lk$q$FMt~OS|4Py4-XhLae;z&WxId(p4f>H#dHiwaggVqj1JU%u^uj z1m2a4tM^PMOJPN7P@|m+)Y|%#6(V-8qeVX+ZMbbd_}ZAD&r7_IwRo$#@%vqZ#HKj>Jf1qXq%j;z#32K#r5^MO^@WTJsb|WiDq=DY)Uxr9DXVa{bdEjG znd>UzERSW{&Cm>3ae@4PX9OVMM-?d9kc zBoyZoCl(aPZA(i^#4v(W=Szvh8j&`Fbr%}?f^qk^BE3!^LS~BiJDwIgE8iF=Q;>La z*qB0-=Q`JM>d_vFYYL9qTd)emk`!$?uTE`gBDrc&TxV?s&-pK=4(S4PU!v7OMFFK_ zPi}~uF-dp~WUOSYq@7|Dt3CE{_s#t+^AY${H3S;QJ%mB9O}||~SwAqp|D+e(s<*-I zYT_LC)M&W@@rmjxk0=@R?XNe|X_`MKOMJw2a%>{XgGPN0+!FQd@eH;DWDJFi2fTN1 zHDK5bE>lcm)Mz4~C_r@nSv3bVuEL5x_3l>{z_#ABP6$uDx={2X-i##A5a^BptD0>E z>&5Sq2>h^Sr79?qZB7`^(3m)&v-IFptG1SRAEVh%E7H^)^3PY|Ez2H$Y8Duryd2O(=elD%Z%sM~aSO7=r z9ZNc_NO51W(;lu?KLZN%RWAdT5DG&r@a;+%5Y&ngl@QlNYuW^Xq8;9n9_*DcB{CI1 z_uIb0#BiosO-&K-#L^>C(+jfP)=Bk0rZ2Lq{RaBn?P#Yhf6W)>-#hkRQOa&vRM*{@ z(PF*tE0Q!z(Ev^-LwAnH`R7xk_P2{iu(0TXeMhetQ=o&>oKRhNw8Z#n+x_n$psY}( zjnMSg-w^chx_gFErkV8h?}%%C!}TImikHzq3U+OeLsP|A1gy@Ztm62|@xg?B_Y{n~2L@3;84y@_h1)81^fnp+!HH<&$slMT}uiPx#^DlfpJ085#!4O_zfz%zVYk9hK!S zo^^{=7TWdP^3B&tm!$?3>jvVoii-&^?FPz3xJ^P>p2pcd1BzKWA{vB!k(I(tyQk)6 zkg;U-sKP}h{E-bT&2g<i-&Wcs8r>`=GlP7n2;V1rv%}+%%YNH3+BV>1P|)U zk$qNU=#G<`Q>(ufXWwv`w`v`5xz@KKR34e9oMFW)q}-a)L|gOLle;q^a44Dsaz&@Y z;O+`|$vG~@ei~KLf0_9PAMz&v2sNCXL_FM+1_;nzmjA-jPt8#$Rj;7VC`|q~^`-CH zSuPN9Wy*SjOCjKHo6E|r0H0$^<;^kpna$lRx|8tZ$t7m4o`QE99eUl{BlpHT< zTR`j~WoiK=o0{`~pWy120T$)|U!n7Pm5)%%@TRV~s_{b4@s^bb^!xoG<)^$q+bG|5qfpe(BONcqJu^ zWr=fs`#!9(SmzVFjkVLAuCi$K*fO7bBKb9hIDHz8w1Z_UJvX#{k3z<{xQS1d~`7 z2Oqxm&^$}P84&E6RImSq13oEPIf%r}K3BAg91b10bvOQ7=byE(Ge2=RmNC)vIgBFI znF5JaMy~Pn%L)6VS+9%*fuJ(x@${~EAa+n|cj8>)rWZ5$U?zyL8j|7k1)5kT1cA3W z!Jx@yLuk3*D;N+C9f9H1X?Kp`ip6bfcX6@_#I7Bi!2v=5>T;)Scev3$;-^;toGS5S zs>~8{hh0dl3>0sFRYVMCodsj1Bo!g2b-8nyaG|h@v~q&LgRT*E*=(t_S10pYX#rHKaFsoDl5!T4!TvWzSQaoM8lt;h z5BYJUh=9h;!=q)xw92{1Lfzi}Eb@A-Uiu7j2bVGRS{AW&_4+KxZA8{*`Dg~U%#GEm zd)A8^Q?_;1QN@$RLh-3JQh8OzluP_kg^D&~AR`&gf{*>N(xtR)Vgoj&c;+?Rd7O$e zQ8G=Wh&3V3q-wFpM)`1|MbUaesqLtyIx{mVvDsz{2z#oo|rIT6@ z%fakTDtkj!tjtqeD|<5z%_!cbnwZ-T z7K3*2kJA#5@?rg^(!b7?6sc>OMonSjY4}X8G9DU#&`pr|q)iiTJ6NV?88-FaR|&Ua zWAInV{zqxw09@JE>>EsM+qQ9niET`5CllK`!Nj&X$;6)6#>BR5^JTtU@80`W{olLw z>Yb{+b}v+~U43?~?!CI#uVZNKNb757kb&MO*2`d_;ydEsOOS^X!Y!{`a+~Ck6Mojo zU6!QR^_WVbwttIK3t`0Ten%5sD4c=AJQd$Dc}u|pk@3`uh$^S%twU9_tSQ1sp|I@B zT32pvBMvMI!;JN zPvM!rYoGd$9R@lV2NH`oCY4$k(9W}9WTe7EuxY?T%hE%PYQTEaL!4;9a@L@qn$S#w z(~Eh2OAdrg4s4)@$m;2Ztl3qYv!>-vp)kOa0TE-5=taSVn%M3#Fmo6(a7gXjW(M{f zVnp<6VM4X{!N~N|oU&qu%F!cA6b%kwbB4av2Ha=<;=Fx1DV9*O_29H;f;eaXp{}`cu7XHNYr*0za9>;C z+@^KiW6uM{-NJNTM~rw(m5$U(obhH=vbUVEGM%wT4jHkJCe-E(5hn>M?uDJY1wTz; z3UFtaznWpu?k#xB11{iCB zKF)CHCX)=8lMIVOP5vb5wnFbT8}Ka<8Aq7-fZzjXxZ6bu6`^YBYm4-7`1Ek^^l%(@ zj8O~P=tQ*Mb82y}!z9iX-q&b=*;m5`>(sBmN$y)r`bX3J5&zlk&m0GaEi8M0}8+#l|97bjn+-Z1B;1csttjVEW zBu9GWTV&jTeZf=-7p=HeP>r9z8xO(u0oB{xbrZd(n7vq|oT@$Us|zfJcz8r^R z(XO!aFPlp7BiV1foJ+XGTYEF?Sq-rkHAU1F^t0l;(%_JKd8Pnq4v{6(N=)H%`|kw= zxVk9BCC(7gSjBr%+bA-;&|#XsUh%O944rFd;;&tFH#;}RH%0@I4Clcf!mC$o{W)`l zswEYSS*KP6ce@Ed*fp(UYp1Uzle)j&g!sZOsq_;HDEiNK=}1;9U6Um`7)y~|lhsdM zQy_;_!+_Eqv^2J%y3kE!YpG!0Hgj=R0)KM|Wkz{3*aL&@TbFx#3=+7tHB$R%L^rk4 zAyd$s;0ftj9B9+Yi)rNf(dy>Zlvj=Fq{ak^8l}hP1HJ}KU6YdonhSqZP-qHElEzbz zr;$q!&E}BckPM9w4oL%0$pnn!fvF`EGoP1H)5_I`vQ1vE(6Zy|+_!C(=<8fn~%Pe$bqn(e>qg1j=Z>0~04CoUF$^$Xg!IQp+GcuhV1A4L*TBNtHtFIB+YjE=|fGyiAf;E>+`?+ktIk)#ax^ad*&@_$OsGn z?dl&`j!$^`WL4t#k@su)F9QdM-tzel#C$Ai$)Wm{zkSp+M}Z_F|C)w^f|sGc&^S_27`ciU zzXnGD8xYBSZ5u=qnIp>GvuEc|_PJ$A8lNMIp8qIyo4|+r_9&H#Jgz_rIraL*2&GqH z6Tj~o?J&ma5eB{s@Jai3Se&FudX#pi%%oD zFVI8Z94_=Kp<%EuK#D>8fudIO3I!h$`~iZe{Df3ZmgE=XWVpAn!w0{=VGMox>II*) z8sPNAQn>;L4laR4Mu6zjMIGjdqHo zI6kRU4+Ou`B@)N@1=kE6NU$Kv`=akCb;THg!9FSJkbBUCKPu@&8u_B5u_P09Q^YIu zaQl8S#r_kMi;wo0QWERU%DAnck6P3Qr@|cPX83D2WgB%J0*msh*S;WKKwS5ABno4&xKN?3R8Pu=Ewq-GSxRDqXe{kb(-B~eFvE3h5Lmp z#V;80e8AuR&Lrx=cYiehEqvX4dHtu)?(~V|%J0i-?4tshFLYGNR*n&<)zeRnA4{() z>{9EIJnt}=dD(t}bS$BMf&Hny0t2Wz-2wy3V>?7Uv||TEJ66M0Lf{|R3;A(=ktfyu zM18EoJ{H?h4*cm)LaY8_ItO<$lpRP9lJ64q z2QSsQO_x58Xlj@8s}UI9MCZNI9Z26d54;=%Z1=pb%vT2&w}K|Z$a44Za|woTtL?>8|%i|ub6XfNa!eJ9>f_r`P^0pRYyi!O6?&jYe_57=Atw+d#yvJ$a}})TJa>1JR}W; z?5eTzewXd?0ljz9qta+ge1-v6`8BEVazlm4!ql<43ohX#&3> zf8!k-ot%l;xIaT5{&!dyCkMyBiF8j>+iq4I-FHLZVI5br=D^i#z(3YeJJ-ZA@k`#X z+wN1`>cz#W%7T#hXWyNxWb%_nZtT($>fy*iwgYdc^Fc|}LP;;F^h_s{Avh`7G*=TT z*pxW3(n5+DPz4+*G8{WeR=oK5!aHmXsj917DKkVb1ez_O0I6YkCI*_Mt!gsU9!iC9 zj2|Y2<&coC+(41|MDtgrptH|>b24a%ar1)3sr81)E`=3cUJ5+mh)HoMU7*V1maCHS zQ+mk7Auimq1D@8LCT-nbGL(~p9GXy+*^AuBe||9hz=Q4%AZ*kM8^x7V)1(xvhcrM) zFg@i;E{Bul58%rtVS@J8h@B~iR(GHWLvx(pUWy$pC(-Ga(Rshxk@8gI91SE?K>Ddd z5{ceJOCqSs4b&gA(KyLQ5I@<`dYRZtsqyt^Ihi=(Zpt-B8lROTptDO_GCq39k)3|~ z7RPlL?rL^NwC9-iGZWgg?xv+2^X}rirw8O43D`$y_Z7`y&jgGexlsS zG6nKhMi$ne2{Q?S>DpI~$r+>fnt_2j1*|(-1=Dznkb8mh;~UbX5pvR+<(58J9v#dZ zvv2C9kQt)WmhX)ENd$9V3AgUwm>3TrK(c-5Z*CtAqz`iKt3>qX=Y-bL>zytYVN8S3 zC)-`c*Ri&tUJW+N^9kzVcrfnJVWkdX zvLX*EZFi1l!um%_e!3l}i0Nd`qob{~fS4z?#e1bb#tdl}^k1;pNN{?ye6V#{yWVH6_c5{iGpL+f#Uu*Xp+C<~^kuCJ2`CZwszEaXJ9Vd?+ z@Pm4NEOZBDp1PgieTQ=}_6*pIkr0q1>NY~nppiGA$XgLj{J2UOXfG@TN*)e>-d~(l zv+|OH`?r3i)jCwQ=85*2;YQp~xQR82j^!&|-WT&|#b@lF;Ruv*x#2z#Xz(n%cAM&n$6qPLOP+T`!M3a}`;hO}qya z;Tb4`Ze-dD!Q_sXe2AOi0e!eBd{mZjkZ>95dhLcZQ;+)4qR53y-V0-dNGGqVQ~h;H zgt*j!I8W4G8j@alIY@~f+hnjB^f}O003Cq%wImTgGzD4cy8AwpeJ#q)aoQGLe%=&M zo^z%>GZ8xs!(7O$L%_l1f2>~X zE5JJQL5l z5Yp9O0YkMmCL5Y|@$yQn1HY~qeWd9bM2I#JYc>vlHEC1@6TZ6^2Lwbs|q zSM3vY7k!Rg!e8EUhCE=43FW_&z4(#^=p)GN>O1b~JI#P!#3s7NDoha2nZjaw@yVZ zN1d5DKy$Z)K2QmTd#L=QhU5I7jDr8OhGS>u`Y#O!VB`8X4Y#KC-D!mr^Q}@pAZGY9 zweJP&GvC6i#?Nd{JcZ0gOSe~{I2`rX=-s$f%h!ts9shijFx%eLWA2PaN|zRQAC)X>N%wAcg? zA`g(#wV==ibpE$fqM6thK!?OzMexPMFSdhO7~ltAQ^QCf3?*T?6KlH=MW`VtA`dW; zZkcg1SibZ&k=pZWD9V6DTWb-M9loD66S!BasAOq{Oy2Aj1ai~=&RmCU`GX{D@iz&1uP zlB4&z85!fw>H8t4IZ=Q8M`FWgP~hbKVCN+KKxaaLk#deT%DE#|fsqzcDLW@K{95j= z6!Y`Us58G+^x*hao1zfgWgZIlZ08FGXx)8rc)(E-ikr7Y8ptCrbc8 zstmRuF(=4SPV?}$xy;^2o^tWM0DU#}nX9Q+6=M-BT~GmH%1vr)Mw}mKohAjvC;;AR zp*`RPR00wVz6=4l0|zkEPEl_*A|~P4yKSg~S(Qf)bOr=>^tH$!T11rj?hZaO$SXWEkgexT*Dr(m6fg$1QzZS01>nW@ERy`Y=m zS0H0s^M#_l^UOTB7CcbIiLqO7jMqjjs!wVSOFLAelXd$Ato9}mhGAEv_-j1xt@y8q zb&Jkhahur+zLku1Vgcu&Cu$YtbOar8pYY#b@r?>`GS~C1(%c$I-BZi$@^Jy&q1;Sp zkuPIq>5X3}c`$>i;(wl;daKGSGqPGV4dqUdl3APNtx3e8G-BSoYnJS8_Emk;YCyZH z@~6qz>7?R*Ga<8z8B<7mqG1#0&oY3krCZ$o3Pix`2@zlTdZ&D+Hx^YZGMF)6GY)hG z?x{hz6IlSU8ZPZykt{~pR?mJ35hUQ;FOlF_QGb_fSSa3~y!$@$TFKcvHQF=ON_ig6b$QE+ryvhLL_`M{TcEOvY})$K-%+h)pIjbVc` zskWgA2dqnWtG-V2=RS6411PHCE&Z|zqHmI)7~Ij+-L=C zyZgKxulZ@Eoq>4s>MYbE_)820-aDB!uJ|6(4Bfq4<+RJX zZ(61mXY263xdWp>nEg0!8YkYz7(bG%xCiHmaS)%JMddXt)(vNZMM7;ul^0L zML*;bTsWT&*}E4#_m2l>y}^n%^6!FjC~M zTC&5!N2>Vx>u$$azX>INQ!fQ&JoRRdn>h9ArsTxkBOYF0&kr? zyx2N;(-hWaPco$aU4CWh7|QptC-mPoW;3x$ynlZUsAGJ487y0|a%IV8K#JbyQvdD8 z)}iMZPQ*w>BUvQj^L_Z`3s=KYNyH&Ipt$9@_YY|*DdhLxTkhU3J{+HC&@lUauM4+J z_<+wd!&|4g)TRUWi7*dcWg66UC@D~9)r-<4X46qmO9=EHJnf~AY9)OO1QWpqt*^|~;Z-=I!XY;y;o86Ly zxjSb~rt`kK-m<6G9;unJ z5cON+Z_&B&7;^G>I?>>hL`Ctkz#s5_i2Ja6ictaQvLrwe$b1#_bb+P7)WlZ@4e3(k z2n!4glx&*C`E|vB!hMDMa{BrjNV@FmOxd^vfo+U?W$sZxWG&iVOKj8Ehrh$BHX$D_HhHn)cJy699_4Vv;g z1XjFK1DC{V$XNGAge{o>24cKFCBi%>njC#|!%Rz9ISE`60Czoks)#4Y_l|d$NPj=0Z0aBIKs!o&??bG2>QHFUO3G=kh^a<hEc=)lAnb8Q>(y>YSZwGKIf7QFB@KA& z@eKiNt46HiQQM14(q^Q>{%ixFsdHo8G6@K5LI%wZV~)#E1!|5Uy_lS&eJt~Wlv~_& zoQhCZ*Y&GX``n;F$>@9J#Wflsg5J#g+YwffzPt&R1L92kY`{e+TIvA^qkUwk))dMZ zU5T3Df}Zv<^?pT?%f$1a;si0KMunTFCu`^S)QPSlu)5E#oh`nf zZsi~DDev#i0z5f#2Qx?!T)i9DQxiK!kNFD%df5!yW(xP&)7HzH_lHL&&nN3MZ(AHE z7rMI%{T2>rp)q#*5wBKu*M_)p_LJH6YiIO6j=ocJ$EYX+=wRT&kV4eIJaY~+8}hYf zvaOw5O#C^L?2h^~X%UKcZ6vD|2iVF2<%Yh6ZH$+aQY7BL#C_56)nPWbE;ca0Ue$&l zEVx-4-s291N9o%coarR)MJ#6q_YuZzB#RnOM8hwa#$!d3fKcZIst2sk7#-Dprt}-E ziz`q5-86ZeUT=&1{*f{DGg#4&{*MG!FV)PjH_yaM5DyWnZBgkIjXS1lfAL)!lpRfm z+On+nnG041K7Mir3CLyq*jyOGJ2K405K+DwuyaN1t>zY|PkNMMjFZ?A^L8z*RUbA0 zvFc{{%AR!tG;zYZ9OWQb1qrvNSi>mLrVhiKIYF}!2W!&$fD8TO-9>Ng}e$qBY-cG)~gsgO|r1EUANirugA$2E)vEtYQ-{O6-A@$fn(^dO& zA%X;lBhr?+V`cKnTE!qFOv%{rV3p$VxCTu5ixam$u%o=(gt`PwR5otC#hUO@bowG! z$^D0#p6Q|VdXs_-YMx1Hr1`GyxT<({ddP&R-hJkBMvu*V*uSokylsAKvb1e;ih5c6dZ}CykYI`kP*6 z;ON}}e~?llt}NpJfR>#0m&waG%(a;pEP0~{^{>5SZS z8wek8PO$(_vftqB#}>p5-1wW}@7qnCQ*KC|-%x(@nDYeX3O_X+t;W2+fi!t#mgC>{ zvY1)5D7maHDlSCrxU3bn!7M08pY}xv;$G#K(7ZdRctKm$T67Y9ty1iKG_@QGXDMG7 z@@S+Ck*98i>90i8X|OM|UB&$t+#ztjXk6%Np!O>Bg~%MH!*$IR7lbFXU4w>}i8V`a z7JY=HAYswsXDK#o_!SPmWLHxy%>W?>)@v)iN2bQJ>svqEm<3JHo>@}xW&`RPpMWC{sqV?cHHDn*U_f6 zpVYrb*Iu8S+tV(=%%0TWF5%BY_0di!36f8|$lgr;30%~T>f|O}Q;Ao1xe=mS&W9z| zK3fGTz0`u9A|mRnUC_om&aU)q=KwLo+|EOIIZi{Fvo%jf+tKPIQ!s0nS1Y*Jf)8d| ztkgd>5~p&_MQy1nRxX1IRFO)nO6VizH4fWZQ;fn|Q^cF&XRUKJ*Wd8*jCeIa0Jn6Y zOJizK6yg6=B5d&9KdM7W++aOf73dY6=e$l5Igr;TftW+ci%(@&z*`zAIVuJ2< zV2Gs2&3Jyd`L4}ASIseV?>|n%p#+PqO#EjX>#nX6FQXJML*aboYqMSJ=f7N;NH@9~ zG&d!om^w4iYUf~_m~2&g5Tj+iZ2R7rX=~48fsAK4O2e9jMYYDmH@sQNOJWTa&S{lG z!4m)|-CL4e!USHZgzVBfDTe6#L|+^bIp9YqOtRmff-2^4jtOzda4>*x&g1RTFY;>Lxb;0*p~LK{(B!_fm!dz{Hvg^` z&qmfsw_`)n$v>RflH3&FQLSF~8uK2vp5Wt_v<$MZm6O%VWada#NJjXbKCIb&rBg_u zUz&73y|+78*y1?+_E+$OUwE;@=sy~M-2bnJAM1a*HCVV<{?qVdVP*yVo8gy~^4)HQ z6FsE!McsY_*P!|nRO%1{vX)yYpwbfU=lHVKaHeXrvy=|EV-35;%fbWUa3f>1>59K7 zVR$}a#{qu4S{#OQ$q>vQxHJ>HM`B!c{3vmzm{%-mJZ2GUH(nxn;`FN^oEWGbR6Q@+m6i`nrAM}pdyqeuchT@srZNbev9<48;_6-YXc!BB4^gPWJ+V&v62=fR6l z^+59*dRC%BUcf`LpK6Ou#rgg9QfXDe)-E7_SxwrTez%j_?xSoD&>>}qc11eBzI9!b zsC-i~&V`b2o#GuK)$&t;B`&f^S?4{OD`DBn1u@=lMz$ex`;7Yua&&k8+yYE=>G)1d zZm2Tkl)OPGR~W67Mv_RVdX!XD?m37lQ1*@s#)>9?J0lZ-ds9}Ra!{@+Q{X)$cJ*C0sC zu75a<{*Wi*M#EOla%Pfrlg=_wLQ(hX0_Jylk5C}jd3^Bj(Sj0#2}jps(D{A6+) zO%R)b>M(`z>DhGqA?*k6KtV50?t`1);Pe4$rCNum8N-YB)X1fAGH+Ojvx7ppPL`(1^oQ}djhxbsAZlYvkx}AgDy9=EMgtsz5SVd zMd2k09je2ORWkXlJc%u|1wl>zS`P#hf$i*l>P0}UI(*=t#t32 z;4{_jzQfpVr1Z}zj?c*W2ilE7_vXF3aqjZ=A|D@2p_wr2{a}mUS?zGU>^m@5cNwJL zPYI6@3a6jgEyt-T^+)?TXFX6=*A7`Uj&pYLWpFoLN7i$EIv=NNd~{FN>LwIK2P5g} z`+V?p8j;`40=#);5M355t`!812NTC`yy0zbU6N$>5|;axx}MrWj6c@SyrBXK2X|LD zEWTYdI|+$WtnH^)jy5?k2U<04@(N~r-EJ>!!{BobCBBEquOzmmHY7j^&2EG_DX(!~ zWa3SmJ;`~{_icU#_}IGp2$5*kfIURmUjP% zVYHCZ6R8%tkYO2j7s!#C=_kcF-Q3P5Rb>vmb9XJIQCme@EkBm~AebH9#NOx){@?OiLTho=3Jm5ZsyX+#o8jK!AoBiMqZgjz%6M-=qJ?tvv?k5`9bJXa{T@z|DOU+Tg@ zuECckdptLLtb)Vb2$o1=Fn(Dh*qPLB`hDgY2zn!!(a-Ooi(i4?$_)wd7W*(8`)?JF zs(2Rr3Ge$exvOSC5gmezGdESo_Q3f8y#Pjgn*C*^tV;VR2{0eyKECJS*`EqIUwxi$ zk7oWwpkds!RU8mFvxGRv{&>3o_QyT7FEO=~W&B@LipDcJrw@W*){wLEmCmrLiAMV@ z6ozw@8;k6oVq|gF1lz>DL8ZG@NARCUta4Y(1Ps*)O~yElTCk!Y+*7m@hB+Nn=*2jY zo~OB`%Q}QO>1-;mIt|{9!7gm;y`sKGw7Lo1T((;WlHXt39(I4&Y+Sl>Qj&%}r~~<~ zj#~D$e>3RSWAA3)XxtF2VpKI@?E~BPm7M#$t|`ZI-ltdlQ{9PdtxyNQc&7HD7qb90 z#|#PKH2P4JYyL|;(04yAUPp3Tvg_wf){{o=S-JSpd literal 0 HcmV?d00001 diff --git a/StandardScene.Core/Docs/Charge/NetAssist.exe b/StandardScene.Core/Docs/Charge/NetAssist.exe new file mode 100644 index 0000000000000000000000000000000000000000..163f4cbaf6c6e2596ae5a843d5c710dcc52b0560 GIT binary patch literal 572416 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 &`Eiwdtb!>Yij^ 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 z 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 iq{xyQ&Pg)kshLqJCaHmsBpLSjKqE?qkx= 更新 ChargeCommandStatus 等) + +- 外部调用:`AddSendMessage(ipAddress, port, rawData, type, stationId?)` +- 内部流程: + - `ParseSendRawData(rawData, type)` 解析 + - `UpdateStationFromSendData(station, parsedData)` 更新: + - `LastSendTime = SendTime` + - 根据 `ChargeCommand`(启动/停止)更新 `ChargeCommandStatus` + - 更新 `BatteryLevel` 与 `CurrentVehicle` + - `ChargeStationDataService.UpdateStation(station, out errorMessage)` 落库 + +### 4.3 接收报文路径(AddReceiveMessage -> 更新状态/机构/告警) + +- 外部调用:`AddReceiveMessage(ipAddress, port, rawData, type, stationId?)` +- 内部流程: + - `ParseReceiveRawData(rawData, type)` 解析 + - `UpdateStationFromReceiveData(station, parsedData)` 更新: + - `LastReceiveTime` + - `MechanismStatus`、`RealTimeVoltage`、`RealTimeCurrent` + - `Status`(`Idle/Charging/Fault/Battery`) + - `HasAlarm`、`AlarmLevel`、`AlarmMessage` + - `ChargeStationDataService.UpdateStation(...)` 落库 + +### 4.4 协议类型 `type` + +解析分支中常见类型示例: + +- `FRLDShort` +- `FRLDTall` + +不同类型会使用不同索引位置从报文字节数组中解析字段。 + +--- + +## 5. 通信接入入口 + +### 5.1 UDP 接入:ChargeUdpService + +`Charge/ChargeUdpService.cs`: + +- 创建线程监听 UDP:`UdpClient(40001)` +- 循环接收并转发: + - `CommunicationMessageService.AddReceiveMessage(remoteIp, 40001, hexString, "FRLDShort")` +- 同时会通过 `SimpleProject.proj.Missions` 找到 `StandardChargeMission` 实例,并在 `chargeMission.ChargeStations` 中按 IP 找到对应站点 +- 对特定站点类型(例如 `PCBChargeStation`)进一步更新站点字段(例如 `IsSafe`、`IndexReceive`) + +### 5.2 TCP 接入:以 FLChargeStation 为例(ChargeStationType) + +以 `ChargeStationType/FLChargeStation.cs` 为例: + +- `OnPlaintextReceived(...)` 在收到 TCP 明文后: + - 提取报文字节(示例中 `Take(35)`) + - 更新站点内的一些运行时字段(例如 `IsSafe`) + - 调用 `CommunicationMessageService.AddReceiveMessage(...)`,并把 `type` 传为对应协议类型(例如 `"FRLDTall"`) + +> 说明:具体 TCP 断连/重连机制由底层 TCP 客户端与对应站点实现决定;无论 TCP/UDP,最终都会汇聚到 `CommunicationMessageService` 完成解析与落库。 + +--- + +## 6. 运行时充电业务循环:StandardChargeMission + +`Charge/StandardChargeMission.cs` 负责把“调度系统中的车的状态 + 充电策略 + 站点配置”组合成周期性的充电指令下发。 + +### 6.1 初始化充电桩实例(创建 station 对象) + +关键步骤(来自实现片段): + +1. 遍历系统 `Site` 中带有 `fields["Charge"]` 的站点,构建 station 配置 +2. 根据 `ChargeStationType` 使用反射创建 `AbstractChargeStation` 实例 +3. 给站点对象赋值: + - `SiteId`、`Ip`、`Port` + - `CommunicationType` + - 示例:`FRLDShort` 时设置为 `"UDP"`;否则使用配置中的 `CommunicationType`(默认走 TCP) +4. 调用 `chargeStation.CreateCommunication(ipAddress, port)` 建立通信通道 +5. 把站点对象加入 `ChargeStations` 字典:`Dictionary` + +如果存在任何 UDP 站点,会创建 `UdpService ??= new ChargeUdpService()`。 + +### 6.2 500ms 业务循环(选择车辆 -> 下发指令) + +主循环(实现中包含 `Thread.Sleep(500)`)逻辑大致如下: + +1. 对每个 `chargeStationEntry`(按站点遍历): + - 通过 `SimpleLib.GetAllCars()` 查找: + - 车辆当前所在站点 `c.GetLastSite() == siteId` + - 或车辆正在竞争锁/持有锁(`aquiringLock == siteId` 或 `holdingLocks.Contains(siteId)`) +2. 若找到车辆: + - 判断车辆状态:`Commons.GetVehicleStatus((Car)car) == VehicleStatus.Normal` + - 判断是否正在“充电标记”(`car.tags.Contains("charging")`) + - 结合锁状态与 tag 状态计算 `openCharge`(0/1) +3. 当未屏蔽交互(`shieldInterLock == false`)时下发指令: + - `chargeStation.SendToChargeStation(openCharge, (Car)car)` + +### 6.3 Stop/ShieldInterLock/管理界面入口 + +- `Stop()`:中止 mission 线程,并对每个 station 调用 `CloseCommunication()` +- `ShieldInterLock()`:切换“是否屏蔽充电桩交互” +- `OpenManagementWindow()`:打开 `ChargeStationHelper.OpenManagementWindow()` + +--- + +## 7. WinForms 界面与交互细节 + +### 7.1 充电桩管理:ChargeStationManagementForm + +文件:`Charge/ChargeStationManagementForm.cs` + +#### 核心展示数据来源 + +- 列表数据来源:`ChargeStationDataService.GetAllStations()` +- UI 侧通讯状态: + - 在 `LoadStations()` 中对每个 station 执行 `Ping.Send(station.IpAddress, 1000)` + - Ping 成功则 `station.CommStatus = CommunicationStatus.Normal`,否则 `CommunicationStatus.Error` +- 电气/运行时信息来源: + - `ChargeCommandStatus`、`Status`、`MechanismStatus`、`HasAlarm/AlarmLevel/AlarmMessage`、`RealTimeVoltage/Current` 等都来自 `CommunicationMessageService` 解析并落库后的 `ChargeStation` 字段 + +#### 自动刷新 + +- `autoRefreshTimer.Interval = 3000` +- `AutoRefreshTimer_Tick`: + - 保存当前选中行的 `StationId` + - 调用 `LoadStations()` 重绘 + - 恢复选中行 + +#### 关键编辑与保存逻辑(btnSave) + +- `btnSave.Text == "修改"`:先切换为编辑模式 `SetEditMode(true)` +- 新增/保存时校验: + - `StationId` 不能为空且必须是 1-99 范围整数 + - 新增时禁止重复 `StationId` + - `SiteId` 必须存在于调度系统站点集合(`SimpleLib.GetSite((int)numSiteId.Value)`) +- 保存调用: + - 新增:`dataService.AddStation(...)` + - 更新:`dataService.UpdateStation(..., isSave:true)` +- 同步到调度系统 `Site.fields`: + - `setVoltage`、`setElectricCurrent` + - `group`:根据 `Enabled` 设置为 `"禁用"` 或 `GroupCarType` + +#### 删除逻辑(btnDelete) + +- 调用 `dataService.DeleteStation(stationId, out errorMessage)` +- 同步清理 `Site.fields`: + - 移除 `setVoltage`、`setElectricCurrent`、`Charge`、`group` + +#### 列表交互 + +- `dgvStations_CellDoubleClick`: + - 根据 `StationId` 查找 `ChargeStation` + - 调用 `LoadStationToFields(station)` + - 进入编辑模式 `SetEditMode(true, true)` + +#### 其它窗口入口按钮 + +- `btnStrategyConfig_Click`:打开 `ChargeStrategyConfigForm` +- `btnCommMonitor_Click`:打开 `CommunicationMonitorForm` +- `btnAlarmConfig_Click`:打开 `AlarmConfigManagementForm` +- `btnExport_Click`:导出 JSON 或 CSV(从 `GetAllStations()` 读取) + +### 7.2 策略配置:ChargeStrategyConfigForm + +文件:`Charge/ChargeStrategyConfigForm.cs` + +- 初始化:`config = configService.LoadConfig()` +- 保存:把 UI 控件值写入 `ChargeStrategyConfig` 后调用 `configService.SaveConfig(config)` +- 恢复默认:调用 `ChargeStrategyConfig.CreateDefault()` 并重新加载到界面 + +### 7.3 通信监控:CommunicationMonitorForm + +文件:`Charge/CommunicationMonitorForm.cs` + +- 初始化: + - `messageService = CommunicationMessageService.Instance` + - 窗体加载完成后订阅:`messageService.MessageAdded += OnMessageAdded` +- 新报文到达:`OnMessageAdded(...)` + - 若 `InvokeRequired` 则 `BeginInvoke` 回 UI 线程 + - 根据当前 IP 筛选条件刷新消息列表(调用 `LoadMessages()`) +- 消息列表展示: + - 从 `messageService.GetAllMessages()` 或 `GetMessagesByIp(ip)` 取出数据 + - 根据 `Direction`(发送/接收)设置行颜色 +- 统计信息: + - `lblStatistics.Text = $"显示: {displayCount} | 总数: ... | 发送: ... | 接收: ..."` + +### 7.4 报警配置管理:AlarmConfigManagementForm + +文件:`Charge/AlarmConfigManagementForm.cs` + +- 界面加载: + - 初始化级别下拉框与筛选下拉框 + - 调用 `LoadAlarmConfigs()` +- 列表加载逻辑: + - 从 `AlarmConfigDataService.GetAllAlarmConfigs()` 获取全量 + - 按筛选条件(等级 `cmbLevelFilter`、搜索框 `txtSearch`)过滤 + - 填充 `dgvAlarmConfigs` 并根据 `AlarmLevel` 设置行颜色 +- 保存: + - `selectedAlarmConfig == null` -> 新增 `dataService.AddAlarmConfig` + - 否则 -> 更新 `dataService.UpdateAlarmConfig` +- 删除: + - `dataService.DeleteAlarmConfig(selectedAlarmConfig.AlarmId, out ...)` +- 双击列表: + - `dgvAlarmConfigs_CellDoubleClick` 读取 `AlarmId` 并加载到编辑区 + +--- + +## 7(代码一致性修订):UI 窗体导航与更新流 + +### 7.1 `ChargeStationManagementForm`(充电桩管理) + +入口/导航 + +- 通过 `ChargeStationHelper.OpenManagementWindow()`(单例 `Show()`)或 `ChargeStationHelper.OpenManagementDialog()`(`ShowDialog()`)打开。 +- 窗体内通过按钮打开: + - `btnStrategyConfig_Click` -> `ChargeStrategyConfigForm.ShowDialog()` + - `btnCommMonitor_Click` -> `CommunicationMonitorForm.Show()` + - `btnAlarmConfig_Click` -> `AlarmConfigManagementForm.ShowDialog()` + +更新/刷新 + +- 列表自动刷新:`autoRefreshTimer.Interval = 3000`,`AutoRefreshTimer_Tick` 会保存当前选中 `StationId`、重建 `dgvStations`(`LoadStations()`)、再恢复选中行。 +- 关闭窗体:`OnFormClosing` 停止并释放 `autoRefreshTimer`。 +- `LoadStations()` 的状态刷新点: + - 数据:`ChargeStationDataService.GetAllStations()` + 按 `cmbStatusFilter` 过滤。 + - 通讯状态:逐个对站点执行 `Ping.Send(station.IpAddress, 1000)`,成功/失败分别写入 `station.CommStatus`,再刷新行颜色。 +- 搜索/筛选:`txtSearch_TextChanged` 与 `cmbStatusFilter_SelectedIndexChanged` 都会触发 `ApplyFilters()`,清空并重建 `dgvStations`(包含行颜色规则)。 +- 手动刷新:`btnRefresh_Click` -> `dataService.Reload()` -> `LoadStations()`。 + +编辑与保存 + +- 双击列表:`dgvStations_CellDoubleClick` -> `LoadStationToFields(station)` -> `SetEditMode(false)`(查看模式,`btnSave.Text="修改"`)。 +- `btnSave_Click` 两段式: + - `btnSave.Text=="修改"`:仅切到编辑模式 `SetEditMode(true)`。 + - 否则执行保存:校验 `StationId`(1-99)、新增时校验唯一性、校验 `SiteId` 存在,然后调用 `AddStation` / `UpdateStation(..., isSave:true)`。 + - 保存成功后同步调度系统 `Site.fields`:`setVoltage`、`setElectricCurrent`、`group`(启用写 `GroupCarType`,禁用写 `"禁用"`),再刷新列表并清空编辑区。 +- 删除:`btnDelete_Click` 确认后 `DeleteStation`,并同步清理 `Site.fields`(`setVoltage`、`setElectricCurrent`、`Charge`、`group`)。 + +### 7.2 `ChargeStrategyConfigForm`(充电策略配置) + +入口/导航 + +- 通常由管理窗体打开:`ChargeStationManagementForm` 的 `btnStrategyConfig_Click` 使用 `ShowDialog()`。 + +更新/刷新 + +- 初始化:`configService = ChargeStrategyConfigService.Instance`,构造时 `LoadConfig()` 把文件配置加载到界面控件。 +- 保存/应用:`btnSave_Click` 与 `btnApply_Click` 都会先 `ValidateConfig()` 校验阈值关系,再把控件值写回 `config` 并调用 `configService.SaveConfig(config)`。 +- 恢复默认:`btnRestoreDefaults_Click` 确认后 `config = ChargeStrategyConfig.CreateDefault()`,调用 `LoadConfig(true)` 刷新界面,但不自动保存(状态提示“未保存”)。 +- 取消:`btnCancel_Click` -> `Close()`。 + +### 7.3 `CommunicationMonitorForm`(通信监控) + +入口/导航 + +- 由管理窗体 `btnCommMonitor_Click` 打开:`Show()`(非阻塞)。 + +更新/刷新(事件驱动) + +- 构造中拿到 `messageService = CommunicationMessageService.Instance`;`FormClosing` 退订 `MessageAdded`。 +- `CommunicationMonitorForm_Load`: + - `InitializeForm()` + `LoadMessages()` 后设置 `isFormLoaded=true` + - 再订阅 `messageService.MessageAdded += OnMessageAdded` +- `OnMessageAdded`: + - `InvokeRequired` 时 `BeginInvoke` 回 UI 线程 + - 新 IP 则刷新 `cmbIpFilter`(`RefreshIpFilter()`) + - 若当前筛选匹配(“全部”或等于当前消息 IP)则调用 `LoadMessages()` 重建消息列表 +- 手动操作: + - `cmbIpFilter_SelectedIndexChanged` -> `LoadMessages()` + - `btnRefresh_Click` -> `RefreshIpFilter()` + `LoadMessages()` + - `btnClear_Click`:确认 -> `messageService.Clear()` -> 刷新列表并清空 `txtParsedData` +- 列表选择与解析展示: + - `dgvMessages_SelectionChanged` 根据所选行构造临时 `CommunicationMessage`,再调用 `ParseMessage()`,并将解析结果写入 `txtParsedData`。 + +### 7.4 `AlarmConfigManagementForm`(报警配置管理) + +入口/导航 + +- 由管理窗体 `btnAlarmConfig_Click` 打开:`ShowDialog()`。 + +更新/刷新(加载 + 筛选/搜索) + +- 构造:`dataService = AlarmConfigDataService.Instance`,并订阅 `this.Load += AlarmConfigManagementForm_Load`。 +- `InitializeForm()`: + - 初始化 `cmbLevel` 与 `cmbLevelFilter` + - 调用 `LoadAlarmConfigs()` 加载列表 + - 调用 `ClearEditFields()` 初始化编辑区(默认新增态) +- `LoadAlarmConfigs()`: + - 数据源:`dataService.GetAllAlarmConfigs()` + - 过滤:`cmbLevelFilter`(映射到 `AlarmLevel`)与 `txtSearch`(匹配 `AlarmId/AlarmCode/AlarmContent`) + - 填充 `dgvAlarmConfigs` 并按 `AlarmLevel` + `Enabled` 设置行颜色/样式,同时更新统计与标题 +- 实时刷新:`txtSearch_TextChanged` 与 `cmbLevelFilter_SelectedIndexChanged` 都直接调用 `LoadAlarmConfigs()`;`btnRefresh_Click` 会 `dataService.Reload()` 后重新加载。 + +编辑与保存 + +- 双击列表:`dgvAlarmConfigs_CellDoubleClick` 读取 `AlarmId` -> `dataService.GetAlarmConfig(alarmId)` -> `LoadAlarmConfigToFields()`(编号不可编辑,切为编辑态)。 +- 保存:`btnSave_Click` 校验 `numAlarmCode >= 0`、`txtAlarmContent` 非空;根据是否选中项决定 `AddAlarmConfig` 或 `UpdateAlarmConfig`;成功后刷新列表并清空编辑区。 +- 删除:`btnDelete_Click` 确认后 `DeleteAlarmConfig(selectedAlarmConfig.AlarmId)`,成功后刷新列表并清空编辑区。 +- 取消/关闭:`btnCancel_Click` 清空编辑区,`btnClose_Click` 关闭窗体。 + +--- + +## 8. 关键调用链(建议排查/理解用) + +### 8.1 周期循环下发充电指令 -> 发送报文记录 -> ChargeCommandStatus 更新 + +```mermaid +flowchart TD + A[StandardChargeMission 500ms循环] --> B[chargeStation.SendToChargeStation(openCharge, car)] + B --> C[chargeStation 内部构造发送报文] + C --> D[CommunicationMessageService.AddSendMessage(...)] + D --> E[ParseSendRawData(type)] + E --> F[UpdateStationFromSendData] + F --> G[ChargeStationDataService.UpdateStation] + G --> H[ChargeStation 字段落库] + H --> I[ChargeStationManagementForm(3s刷新) 展示] +``` + +### 8.2 TCP/UDP 接收报文 -> 解析 -> ChargeStation 状态与告警更新 -> UI 展示 + +```mermaid +flowchart TD + A[TCP 收到明文 或 UDP 收到报文] --> B[CommunicationMessageService.AddReceiveMessage(...)] + B --> C[ParseReceiveRawData(type)] + C --> D[UpdateStationFromReceiveData] + D --> E[ChargeStationDataService.UpdateStation] + E --> F[ChargeStation 字段落库] + F --> G[ChargeStationManagementForm(3s刷新) 展示 Status/告警/电压电流] +``` + +### 8.3 通信监控界面订阅报文事件 + +```mermaid +flowchart TD + A[CommunicationMessageService.AddMessage/MessageAdded] --> B[CommunicationMonitorForm.OnMessageAdded] + B --> C[BeginInvoke 切到UI线程] + C --> D[LoadMessages 刷新 dgvMessages] +``` + +--- + +## 9. 常用调试点(建议) + +- 通信解析落库: + - 看 `CommunicationMessageService` 的 `UpdateStationFromSendData/ReceiveData` 更新了哪些字段 +- UI 展示: + - `ChargeStationManagementForm.LoadStations()` 中的 `Ping.Send(...)` 会影响 `CommStatus` 展示 +- 如果“列表里状态不变”: + - 优先确认报文是否真的进入 `CommunicationMessageService.AddSendMessage/AddReceiveMessage` + - 再确认解析是否返回非 null(解析失败会直接 `return null`) + +# StandardScene/Charge:充电桩数据模型与持久化(仅数据层) + +本页聚焦 `StandardScene/Charge/` 中与“数据模型 + DataService 持久化/更新 API”相关的部分,覆盖: + +1. `ChargeStation`:充电桩配置/运行时状态字段含义与 `JsonIgnore` 持久化边界 +2. `ChargeStationDataService`:`Config/ChargeStations.json` 的读取/保存、增删改与状态更新 +3. `AlarmConfig` 与 `AlarmConfigDataService`:`Config/AlarmConfigs.json` 的读取/保存、增删改 + +--- + +## 1. 数据模型:`ChargeStation` + +文件:`Charge/ChargeStation.cs` + +### 1.1 配置/计算字段说明(按 `JsonIgnore` 区分) + +`ChargeStation` 的下列字段用于“充电桩配置”,在 JSON 里会被序列化(即:未标注 `JsonIgnore`): + +- `StationId`:充电桩编号(唯一标识) +- `Name`:充电桩名称 +- `Type`:充电桩类型(`ChargeStationType`) +- `ChargeMethod`:充电方式(`ChargeMethodType`) +- `IpAddress`:IP 地址 +- `Port`:端口号 +- `CommunicationType`:通讯类型(属性初始值为 `"TCP"`,但构造函数会覆盖为 `"UDP"`) +- `SetVoltage`:额定电压(V) +- `SetElectricCurrent`:额定电流(A) +- `Enabled`:是否启用 +- `GroupCarType`:停靠车辆类型(`ChargeStationCarType`) +- `SiteId`:关联站点 ID(可选) +- `ShieldSiteMechanismStatus`:屏蔽机构状态交互 +- `Remarks`:备注 +- `CreatedTime`:创建时间 +- `ModifiedTime`:最后修改时间 +- `Power`:计算属性(`SetVoltage * SetElectricCurrent`),标注了 `[JsonIgnore]`,不会写入 JSON + +### 1.2 运行时状态字段(不会被持久化到 JSON) + +以下字段标注了 `[JsonIgnore]`,因此不会写入 `Config/ChargeStations.json`(重启后这些运行时状态通常会丢失): + +- `RealTimeVoltage`、`RealTimeCurrent`:实时电压/电流 +- `LastSendTime`、`LastReceiveTime`:最后发送/接收时间 +- `HasAlarm`、`AlarmMessage`、`AlarmLevel`:报警标记/报警文本/报警级别 +- `CommStatus`、`LastCommunicationTime`:通讯状态/最后通讯时间(注意:当前代码里通讯状态字段的更新路径不在本节展开) +- `MechanismStatus`:机构伸缩状态 +- `CurrentVehicle`:当前充电车辆编号 +- `BatteryLevel`:当前电量百分比 +- `ChargeCommandStatus`:发送充电指令状态(停止/启动) +- `Status`:充电桩状态(空闲/充电中/报警中/AGV电池已接入) + +### 1.3 校验:`IsValid(out errorMessage)` + +`ChargeStation.IsValid()` 约束: + +- `StationId`、`Name`、`IpAddress` 不能为空 +- `IpAddress` 需为可解析的 IP +- `Port` 必须在 `1-65535` +- `SetVoltage` 必须在 `(0, 64]` +- `SetElectricCurrent` 必须在 `(0, 101]` + +--- + +## 2. 数据服务:`ChargeStationDataService` + +文件:`Charge/ChargeStationDataService.cs` + +### 2.1 单例与持久化文件 + +- 单例:`ChargeStationDataService.Instance` +- 内部数据:`private List chargeStations` +- JSON 文件路径:基于运行目录写入 + - `AppDomain.CurrentDomain.BaseDirectory/Config/ChargeStations.json` +- 构造函数会确保 `Config/` 目录存在,并执行 `LoadData()` + +### 2.2 读取:`LoadData()` + +行为: + +- 若文件存在:读取文本并 `JsonConvert.DeserializeObject>(json)` +- 若文件不存在:初始化为空列表(并不会自动生成默认样例) +- 异常:记录诊断日志并回退到空列表 + +### 2.3 保存:`SaveData()` + +行为: + +- 在锁 `lockObj` 下序列化整个 `chargeStations` 列表 +- 写入文件 `Config/ChargeStations.json`(`Formatting.Indented`) +- 保存失败:返回 `false` 并由调用方回滚内存状态(部分方法会回滚) + +### 2.4 查询 API + +- `List GetAllStations()`:返回列表副本(拷贝) +- `ChargeStation GetStationById(string stationId)`:按 `StationId` 查找 +- `ChargeStation GetStationByIp(string ipAddress, int port)`:按 `IpAddress + Port` 查找 +- `List GetIdleStations()`:过滤 `Enabled && Status == Idle` +- `int GetChargingCount()`:统计 `Status == Charging` +- `void Reload()`:重新执行 `LoadData()` + +### 2.5 新增:`AddStation(ChargeStation station, out string errorMessage)` + +关键点: + +- `station == null` 返回失败 +- 先执行 `station.IsValid(out errorMessage)` +- 唯一性校验: + - `StationId` 不可重复 + - `IpAddress + Port` 组合不可重复 +- 写入字段: + - 设置 `CreatedTime` / `ModifiedTime` 为当前时间 +- 成功后:`SaveData()`;失败则将新增对象从内存移除 + +### 2.6 更新:`UpdateStation(ChargeStation station, out string errorMessage, bool isSave = false)` + +该方法同时被用作“配置更新”与“运行时状态合并后再落盘”的入口之一(不同调用方会用不同的 `isSave` 值)。 + +核心流程: + +- 校验:`station.IsValid(out errorMessage)` +- 找到原对象:`existingStation = chargeStations.FirstOrDefault(s => s.StationId == station.StationId)` +- 冲突校验:`IpAddress + Port` 不能被其它站点占用 +- 时间处理: + - 保留 `existingStation.CreatedTime` + - 更新 `station.ModifiedTime = DateTime.Now` +- 赋值策略取决于 `isSave`: + - `isSave == true`:仅将“配置类字段”拷贝到 `existingStation`(并令 `station = existingStation`) + - `isSave == false`:不进行字段级拷贝,直接用传入的 `station` 替换列表里的对应项 +- 之后无论 `isSave` 为何都会执行 `SaveData()` 并落盘整个列表 +- 保存失败:回滚为 `existingStation` + +持久化边界提醒(结合 `ChargeStation` 的 `JsonIgnore`): + +- 因为 `Status / Alarm / 实时电压电流 等运行时字段` 都是 `JsonIgnore`,即使 `UpdateStation` 被用于合并运行时字段,重启后这些运行时字段仍不会出现在 JSON 中 +- 但 `ModifiedTime`(未 `JsonIgnore`)会被写入,因此会出现“通信上报频繁导致 JSON 文件 `ModifiedTime` 刷新”的现象 + +### 2.7 删除:`DeleteStation(string stationId, out string errorMessage)` + +- 按 `stationId` 找到对象并移除 +- 成功后保存;失败则将对象重新加入内存 +- 代码中原本有“如果正在充电则禁止删除”的检查,但被注释掉了 + +### 2.8 状态更新(运行时):`UpdateStationStatus(string stationId, ChargeStationStatus status)` + +- 修改内存对象的 `Status` 与 `ModifiedTime` +- 然后 `SaveData()` +- 由于 `Status` 标注了 `JsonIgnore`,因此重启后站点 `Status` 通常不会从 JSON 恢复(但 `ModifiedTime` 会更新) + +--- + +## 3. 数据模型:`AlarmConfig` + +文件:`Charge/AlarmConfig.cs` + +### 3.1 字段含义(会被持久化) + +`AlarmConfig` 没有 `JsonIgnore`,因此以下字段都能写入 `Config/AlarmConfigs.json`: + +- `AlarmId`:报警编号(构造函数自动生成,格式类似 `ALMyyyyMMddHHmmssxxx`) +- `AlarmCode`:报警编码值(int) +- `AlarmContent`:报警内容描述(文本) +- `Level`:报警级别(`AlarmLevel`:None/Low/Medium/High/Critical) +- `Enabled`:是否启用 +- `Remarks`:备注 +- `CreatedTime` / `ModifiedTime`:创建与修改时间 + +### 3.2 校验:`IsValid(out errorMessage)` + +- `AlarmId` 不能为空 +- `AlarmCode >= 0` +- `AlarmContent` 不能为空 + +--- + +## 4. 数据服务:`AlarmConfigDataService` + +文件:`Charge/AlarmConfigDataService.cs` + +### 4.1 单例与持久化文件 + +- 单例:`AlarmConfigDataService.Instance` +- 数据文件路径:`AppDomain.CurrentDomain.BaseDirectory/Config/AlarmConfigs.json` +- 构造函数调用 `LoadData()`;若目录不存在则创建 + +### 4.2 读取:`LoadData()` + +行为: + +- 文件存在:读取并反序列化为 `List` + - 若反序列化结果为 `null`,回退为空列表 +- 文件不存在:初始化默认报警配置 `InitializeDefaultAlarms()`,随后 `SaveData()` +- 异常:记录 `Debug.WriteLine`,回退到空列表并初始化默认报警配置 + +默认报警包含(示例): + +- 1001:电压过高 +- 1002:电压过低 +- 1003:电流过大 +- 2001:温度异常 +- 3001:通讯超时 +- 3002:连接断开 + +### 4.3 保存:`SaveData()` + +- 序列化整个 `_alarmConfigs` 并写入 `AlarmConfigs.json` +- 保存失败会抛出异常(不只是返回 `false`) + +### 4.4 查询 API + +- `List GetAllAlarmConfigs()`:返回列表副本 +- `AlarmConfig GetAlarmConfig(string alarmId)`:按 `AlarmId` 查找 +- `AlarmConfig GetAlarmConfigByCode(int alarmCode)`:按 `AlarmCode` 查找 + +### 4.5 新增:`AddAlarmConfig(AlarmConfig alarmConfig, out string errorMessage)` + +- 先执行 `alarmConfig.IsValid(out errorMessage)` +- 校验 `AlarmCode` 唯一性(不允许重复) +- 添加到列表后 `SaveData()` + +### 4.6 更新:`UpdateAlarmConfig(AlarmConfig alarmConfig, out string errorMessage)` + +- 校验:`IsValid` +- 查找目标:按 `AlarmId` 找到索引;不存在则失败 +- 冲突校验:`AlarmCode` 不能被其它报警配置占用 +- 设置 `alarmConfig.ModifiedTime = DateTime.Now` +- 替换列表项并 `SaveData()` + +### 4.7 删除:`DeleteAlarmConfig(string alarmId, out string errorMessage)` + +- 按 `AlarmId` 找到并移除 +- 然后 `SaveData()` + +### 4.8 重新加载:`Reload()` + +- 在锁下重新执行 `LoadData()` + +--- + +## 5. 与“更新路径”的关系(为何运行时变化也会触发落盘) + +虽然本页主要讲 DataService,但为了说明“哪些字段会/不会出现在 JSON 里”,需要点到调用关系: + +- 通讯层(`Charge/CommunicationMessageService.cs`)在解析发送/接收报文后,会: + - 更新 `ChargeStation` 的运行时字段(例如 `HasAlarm`、`Status`、`RealTimeVoltage/Current` 等) + - 然后调用 `ChargeStationDataService.UpdateStation(station, out errorMessage)`(使用默认 `isSave=false`) +- UI 保存站点配置(`Charge/ChargeStationManagementForm.cs`)在“保存/修改配置”时会调用: + - `ChargeStationDataService.UpdateStation(station, out errorMessage, true)` +- 报警配置的 UI 增删改(`Charge/AlarmConfigManagementForm.cs`)直接调用: + - `AddAlarmConfig / UpdateAlarmConfig / DeleteAlarmConfig` + +因此你会观察到: + +- `ChargeStations.json` 中的“运行时字段”不会被写入(因为它们带 `JsonIgnore`) +- 但 `ModifiedTime` 这类未忽略字段会被写入,所以文件仍会频繁变化 + +--- +## 6. 通讯报文解析:`CommunicationMessageService` 如何更新 `ChargeStation` + +本节重点解释 `Charge/CommunicationMessageService.cs` 中“报文解析 -> 更新充电桩运行时字段”的完整链路(并说明当前实现里哪些字段没有被真正落到 `ChargeStation`)。 + +### 6.1 入口与站点匹配规则 + +`CommunicationMessageService` 通过两个入口接收外部报文,并在内部完成“解析 + 更新 + 落盘(通过 DataService)”: + +- 发送报文入口:`AddSendMessage(ipAddress, port, rawData, type, stationId)` +- 接收报文入口:`AddReceiveMessage(ipAddress, port, rawData, type, stationId)` + +两条链路在解析前都会做同样的站点匹配: + +- 先拿到单例:`ChargeStationDataService.Instance` +- 通过 `GetStationByIp(ipAddress, port)` 找到对应 `ChargeStation` +- 找不到站点直接返回(此时只会记录报文,不会更新该站点运行时字段) + +解析成功后才会调用: + +- `ChargeStationDataService.UpdateStation(station, out errorMessage)`(该调用在当前代码里使用默认参数,最终会落盘整个 `ChargeStations.json`;但由于运行时字段多为 `JsonIgnore`,重启后这些运行时值不会恢复) + +异常处理方面: + +- `ParseSendDataAndUpdateStation` / `ParseReceiveDataAndUpdateStation` 都使用 `try/catch` 并“静默吞掉异常”,因此解析失败通常表现为:报文列表有记录,但充电桩字段没有变化。 + +### 6.2 发送报文解析与字段更新(`UpdateStationFromSendData`) + +发送报文完整调用链如下: + +`AddSendMessage` -> `ParseSendDataAndUpdateStation` + -> `ParseSendRawData(rawData, type)` + -> `UpdateStationFromSendData(station, parsedData)` + -> `ChargeStationDataService.UpdateStation(...)` + +#### 6.2.1 `ParseSendRawData` 输入格式与 `type` 支持 + +`ParseSendRawData` 的输入要求: + +- `rawData` 以空格分隔字节 token(例如:`"BB 01 42 ..."`) +- 每个 token 会按十六进制解析:`byte.TryParse(token, NumberStyles.HexNumber, ...)` +- 发送报文最少 token 数:`parts.Length >= 10` + +当前实现里,`type` 仅对以下两种有明确字节位映射: + +- `FRLDShort` +- `FRLDTall` + +其他 `type`(例如 `MuXing`)不会命中映射分支,此时解析出来的数值保持默认值,然后仍可能触发 `UpdateStationFromSendData` 的“默认覆盖”逻辑(见下文“已知限制”)。 + +#### 6.2.2 从发送报文写入哪些 `ChargeStation` 字段 + +`UpdateStationFromSendData` 实际更新的字段如下(直接对应代码赋值): + +- `station.LastSendTime = parsedData.SendTime` +- `station.ChargeCommandStatus` + - `parsedData.ChargeCommand == 1` -> `ChargeCommandStatus.Started` + - `parsedData.ChargeCommand == 0` -> `ChargeCommandStatus.Stopped` +- `station.BatteryLevel = parsedData.BatteryLevel` +- `station.CurrentVehicle = parsedData.CurrentVehicleId.ToString()` + +注意: + +- `UpdateStationFromSendData` 里 `SetVoltage` / `SetElectricCurrent` 的赋值被注释掉了(即:发送报文不会更新 `ChargeStation.SetVoltage` / `ChargeStation.SetElectricCurrent` 的配置目标值)。 + +### 6.3 接收报文解析与字段更新(`UpdateStationFromReceiveData`) + +接收报文完整调用链如下: + +`AddReceiveMessage` -> `ParseReceiveDataAndUpdateStation` + -> `ParseReceiveRawData(rawData, type)` + -> `UpdateStationFromReceiveData(station, parsedData)` + -> `ChargeStationDataService.UpdateStation(...)` + +#### 6.3.1 `ParseReceiveRawData` 输入格式与 `type` 支持 + +`ParseReceiveRawData` 的输入要求: + +- `rawData` 以空格分隔字节 token(`rawData.Split(' ')`) +- 接收报文最少 token 数:`parts.Length >= 30` +- 每个 token 的解析使用的是 `byte.TryParse(parts[i], out bytes[i])`(没有显式 `NumberStyles.HexNumber`) + +因此当 `rawData` token 形如十六进制字节(例如 `0A`、`FF`)时,可能出现解析失败导致 `parsedData == null`(从而不会更新站点字段)的情况。 + +`type` 的字节位映射同样只实现了两种: + +- `FRLDShort` +- `FRLDTall` + +#### 6.3.2 从接收报文写入哪些 `ChargeStation` 字段 + +`UpdateStationFromReceiveData` 实际更新的字段如下: + +- `station.LastReceiveTime = parsedData.ReceiveTime` +- `station.MechanismStatus = parsedData.MechanismStatus` +- `station.RealTimeVoltage = parsedData.RealTimeVoltage` +- `station.RealTimeCurrent = parsedData.RealTimeCurrent` +- `station.Status = parsedData.Status` +- `station.HasAlarm = parsedData.HasAlarm` +- `station.AlarmLevel = parsedData.AlarmLevel` +- `station.AlarmMessage` + - `parsedData.HasAlarm == true` -> `报警级别: {GetAlarmLevelText(parsedData.AlarmLevel)}` + - 否则 -> `string.Empty` + +与报警相关的映射: + +- `ParseReceiveRawData` 里 `HasAlarm = chargeStationStatus == 2` +- `ParseStationStatus` 将 `statusByte == 2` 映射为 `ChargeStationStatus.Fault` + +当前实现里 `AlarmLevel` 的来源有一个明显限制: + +- `ParseReceiveRawData` 中 `AlarmLevel = ParseAlarmLevel(bytes[20])` 被注释掉了 +- 因此 `parsedData.AlarmLevel` 多半保持默认值(`AlarmLevel.None`),但只要 `HasAlarm == true`,`AlarmMessage` 仍会按默认 `AlarmLevel` 生成文本 + +同时,`ParsedReceiveData` 中的以下字段虽然会解析出来,但 `UpdateStationFromReceiveData` 没有把它们写入 `ChargeStation`: + +- `ParsedReceiveData.CommStatus` +- `ParsedReceiveData.ChargeCommandStatus` +- `ParsedReceiveData.ChargeID` +- `ParsedReceiveData.BatteryAH` + +### 6.4 已知限制/行为总结(影响“字段是否更新”) + +1. 解析失败只影响“字段更新”,不影响“报文记录与 UI 列表展示” + - 报文一定会先进入 `_messages`(并触发 `MessageAdded`) + - 但解析函数返回 `null` / 站点找不到 / 异常时,字段更新不会发生 + +2. 站点匹配使用 `IP + Port` + - `GetStationByIp(ipAddress, port)` 找不到对应 `ChargeStation` 时,不会更新该站点运行时字段 + +3. `type` 只对 `FRLDShort` / `FRLDTall` 完成了映射 + - 发送侧对未知 `type` 仍会返回默认 `ParsedSendData`,从而可能覆盖 `ChargeCommandStatus` / `BatteryLevel` / `CurrentVehicle` 为默认值 + - 接收侧未知 `type` 也可能产生默认 `ParsedReceiveData`,但前提是 `rawData.Split(' ')` 后仍满足 `parts.Length >= 30` + +4. 接收侧 token 解析方式可能与输入十六进制格式不一致 + - `ParseReceiveRawData` 未使用 `NumberStyles.HexNumber` + - 如果 `rawData` token 是十六进制字节(如 `0A`),可能导致 `parsedData == null`,进而不更新实时字段 + + + +## 7. 运行时充电业务:StandardChargeMission + +本节聚焦 `Charge/StandardChargeMission.cs` 中的“充电进程启动 + 500ms 充电业务循环”,并跟踪 `SendToChargeStation(...)` 的真实调用路径到具体充电桩实现类。 + +### 7.1 启动入口:`Execute()` + +`StandardChargeMission.Execute()` 负责启动充电进程,核心流程: + +- 设置进程状态:`status.status = "已启动"` +- 防重复启动:通过 `myStarted` 判断,避免重复创建线程 +- 初始化运行时字典:`ChargeStations = new Dictionary()` +- 创建后台线程:`ChargeThread = new Thread(() => { ... })` + - 在线程内部完成“充电站初始化 + 500ms 业务循环” +- 启动辅助任务:定期上传带 `unavailable` 标签的站点到迷毂系统(同样是 `Thread.Sleep(500)` 周期) +- 最后调用 `base.Execute()`,让基类调度/联锁逻辑继续工作 + +### 7.2 初始化:后台线程 Step1(创建/重建 `AbstractChargeStation`) + +在 `ChargeThread` 的 `while (true)` 内部,每一轮都会先执行“步骤1:初始化充电站”: + +- 读取配置:`ChargeStationHelper.GetAllStationConfigs()` + - 底层来自 `ChargeStationDataService.Instance.GetAllStations()` +- 遍历每个充电桩配置项,执行校验与创建: + - `Enabled == false`:跳过 + - 校验 `SiteId > 0`、`IpAddress` 可解析、`Port` 在 `1-65535` + - 若字典里已存在相同 `siteId` 的站点: + - 当 IP/Port 发生变化:`existingStation.CloseCommunication()` 后更新 `Ip/Port` 并重新 `CreateCommunication(...)` + - IP/Port 未变化:直接 `continue`(复用原连接) + - 若不存在: + - 使用 `GetChargeTypeString(stationConfig.Type)` 映射到具体站点类名: + - `FRLDTall` -> `FLChargeStation` + - `FRLDShort` -> `PCBChargeStation` + - `MuXing` -> `MuXingChargeStation` + - 默认回退 -> `PCBChargeStation` + - `Activator.CreateInstance(type)` 创建对象,设置: + - `SiteId / Ip / Port` + - `CommunicationType`:`FRLDShort` 强制 `UDP`,其它使用配置里的 `CommunicationType` + - 调用 `CreateCommunication(ipAddress, port)` 建立通信连接 + - 放入字典:`ChargeStations.Add(siteId, stationInstance)` + +同时,线程内部还会做 UDP 服务初始化: + +- 若存在任意站点 `CommunicationType == "UDP"`: + - `UdpService ??= new ChargeUdpService();` + +### 7.3 500ms 业务循环:后台线程 Step3 + `SendToChargeStation(...)` + +`ChargeThread` 的主循环结构(简化): + +1. 读取互锁开关:`var shieldInterLock = ((StandardChargeMissionStatus)status).ShieldInterLock` +2. 更新/清理配置绑定: + - 若 `ChargeStationHelper.GetStationBySiteId(siteId) == null`:从 `ChargeStations` 移除该站点 + - 对 `SimpleLib.GetAllSites()` 中仍带 `fields["Charge"]` 但不在 `ChargeStations` 配置里的站点: + - 移除 `Charge / setVoltage / setElectricCurrent / group` 等字段 +3. 遍历每个站点,执行“车辆搜索 -> openCharge 计算 -> 下发”: + - 取站点配置:`chargeStationSetting = ChargeStationHelper.GetStationBySiteId(siteId)` + - 若 `!chargeStationSetting.Enabled`:跳过 + - 将站点配置绑定回 `site.fields`: + - `site.fields["Charge"] = "True"` + - `site.fields["setVoltage"] = chargeStationSetting.SetVoltage.ToString("0.0")` + - `site.fields["setElectricCurrent"] = chargeStationSetting.SetElectricCurrent.ToString("0.0")` + - `site.fields["group"]`:启用时写 `GroupCarType`,禁用时写 `"禁用"` + - 设置站点进入/离开权限: + - `ChargeMethodType.Side` 分支:`SetAllowEnter / SetAllowExit` 与 `ShieldSiteMechanismStatus` / `MechanismStatus == Retracted` 联动 + - 非 `Side`:直接 `SetAllowEnter(true) / SetAllowExit(true) / SetAcknowledgeLeave(true)` + - 查找与该站点相关的车辆(在站/获取锁/持有锁): + - `GetLastSite() == siteId` 或 `aquiringLock == siteId` 或 `holdingLocks.Contains(siteId)` + - 计算 `openCharge`: + - 默认 `0` + - 仅当车辆存在且 `Commons.GetVehicleStatus((Car)car) == VehicleStatus.Normal` + - 并且满足充电条件: + - `charging` 标记存在 + - 未被占用:`!car.tags.Contains("occupied")` + - 锁状态匹配:`holdingLocks.Length == 1` 且 `pendingLocks.Length == 0` + - 则 `openCharge = 1` + - 互锁门控后下发指令: + - 若 `!shieldInterLock`: + - `chargeStation.SendToChargeStation(openCharge, (Car)car);` +4. 循环尾部固定节拍:`Thread.Sleep(500)` + +### 7.4 `SendToChargeStation` 调用链(下发路径) + +在 500ms 循环中,下发的调用路径是: + +`StandardChargeMission(ChargeThread 500ms loop)` +-> `AbstractChargeStation` 子类 `SendToChargeStation(int isCharge, Car car)` +-> 子类内部组包 + 记录发送报文:`CommunicationMessageService.Instance.AddSendMessage(...)` +-> 通过 TCP/UDP 通道真正发送报文 + +各站点实现类的“发送端”关键点: + +- `FLChargeStation.SendToChargeStation` + - 依赖 `IsConnected && Client != null`,否则不发送 + - 读取 `Car` 的 `Soc/Voltage/ElectricCurrent`,并可覆盖 `site.fields["setVoltage"]/["setElectricCurrent"]` + - `AddSendMessage(..., "FRLDTall", site?.name)` 后 `Client.Send(msg)` + +- `MuXingChargeStation.SendToChargeStation` + - 计算 `openChargePort = (isCharge == 1 ? 2 : 3)` 并组包(包含时间戳与 CRC) + - `AddSendMessage(..., "MuXing")` 后写入 TCP `stream` + +- `PCBChargeStation.SendToChargeStation`(`FRLDShort`) + - 使用 `UdpClient` 发送 + - `AddSendMessage(..., "FRLDShort", site?.name)` 后 `udpClient.SendAsync(msg, msg.Length, _endPoint)` + +```mermaid +flowchart TD + A[StandardChargeMission.Execute\n启动 ChargeThread] --> B[ChargeThread while(true)] + B --> C[Step1 初始化/重建 ChargeStations] + B --> D[Step3 遍历每个站点] + D --> E[计算 openCharge(0/1)] + E --> F{!ShieldInterLock} + F -->|false| Z[跳过下发] + F -->|true| G[chargeStation.SendToChargeStation(openCharge, car)] + G --> H[站点子类组包] + H --> I[CommunicationMessageService.AddSendMessage] + I --> J[TCP/UDP 发送报文] +``` + diff --git a/StandardScene.Core/Docs/Charge/充电桩实时数据功能说明.md b/StandardScene.Core/Docs/Charge/充电桩实时数据功能说明.md new file mode 100644 index 0000000..0776487 --- /dev/null +++ b/StandardScene.Core/Docs/Charge/充电桩实时数据功能说明.md @@ -0,0 +1,414 @@ +# 🔌 充电桩实时数据功能说明 + +## ✅ 已完成的修改 + +### 1. 数据模型更新(ChargeStation.cs) + +添加了实时电压和电流字段: + +```csharp +///

+/// 实时电压 (V) - 当前充电时的实际电压 +/// +[DisplayName("实时电压(V)")] +public double RealTimeVoltage { get; set; } + +/// +/// 实时电流 (A) - 当前充电时的实际电流 +/// +[DisplayName("实时电流(A)")] +public double RealTimeCurrent { get; set; } +``` + +### 2. 列表显示更新 + +#### ❌ 移除的列: +- **功率(W)** - 功率列已移除 + +#### ✅ 新增的列: +- **实时电压(V)** - 显示充电桩当前实际电压 +- **实时电流(A)** - 显示充电桩当前实际电流 + +#### 列表结构(更新后): +``` +┌────────┬──────┬────────┬──────────┬────┬────────┬────────┬──────────┬──────────┬────┬────┬──────┬────┐ +│ 编号 │ 名称 │ 类型 │ IP地址 │端口│ 电压(V)│ 电流(A)│实时电压(V)│实时电流(A)│状态│启用│站点ID│备注│ +├────────┼──────┼────────┼──────────┼────┼────────┼────────┼──────────┼──────────┼────┼────┼──────┼────┤ +│CS12345 │1号桩 │标准 │192.168..│502 │220.0 │32.0 │215.5 │28.3 │充电│是 │1001 │... │ +│CS12346 │2号桩 │快速 │192.168..│502 │380.0 │63.0 │0.0 │0.0 │空闲│是 │1002 │... │ +└────────┴──────┴────────┴──────────┴────┴────────┴────────┴──────────┴──────────┴────┴────┴──────┴────┘ +``` + +### 3. 界面更新 + +#### ❌ 移除的按钮: +- **新增按钮** - 已从界面移除 + +#### ✅ 保留的按钮(重新排列): +- **保存** - 位置调整到最左侧(20, 20),尺寸 100×50 +- **删除** - 位置调整到中间(150, 20),尺寸 100×50 +- **取消** - 位置调整到右侧(280, 20),尺寸 100×50 + +``` +┌──────────────────────────────────┐ +│ │ +│ [ 保存 ] [ 删除 ] [ 取消 ]│ +│ (蓝色) (红色) (默认) │ +│ │ +└──────────────────────────────────┘ +``` + +### 4. 编辑区保留功能 + +**设置电压和电流功能完全保留**: + +``` +┌─────────────────────────────────┐ +│ 充电桩信息 │ +├─────────────────────────────────┤ +│ │ +│ 名称: [1号充电桩 ] │ +│ 类型: [标准充电桩 ▼] │ +│ IP地址:[192.168.1.100 ] │ +│ 端口: [502 ▲▼] │ +│ │ +│ 电压(V):[220.0 ▲▼] │ ← 额定电压(设置值) +│ 电流(A):[32.0 ▲▼] │ ← 额定电流(设置值) +│ │ +│ 状态: [空闲 ▼] │ +│ ☑ 启用充电桩 │ +│ ... │ +└─────────────────────────────────┘ +``` + +--- + +## 📊 字段说明 + +### 电压和电流的区别 + +| 字段 | 类型 | 说明 | 用途 | +|------|------|------|------| +| **Voltage** | 额定电压 | 充电桩的设计电压(固定值) | 充电桩参数配置 | +| **Current** | 额定电流 | 充电桩的设计电流(固定值) | 充电桩参数配置 | +| **RealTimeVoltage** | 实时电压 | 当前实际工作电压(动态值) | 实时监控显示 | +| **RealTimeCurrent** | 实时电流 | 当前实际工作电流(动态值) | 实时监控显示 | + +### 典型场景示例 + +#### 场景1:充电桩空闲时 +``` +额定电压:220.0V +额定电流:32.0A +实时电压:0.0V ← 未在充电,实时值为0 +实时电流:0.0A ← 未在充电,实时值为0 +状态:空闲 +``` + +#### 场景2:充电桩充电中 +``` +额定电压:220.0V +额定电流:32.0A +实时电压:215.5V ← 实际充电电压 +实时电流:28.3A ← 实际充电电流 +状态:充电中 +实时功率:6098.65W (215.5V × 28.3A) +``` + +#### 场景3:充电桩故障 +``` +额定电压:220.0V +额定电流:32.0A +实时电压:180.2V ← 电压异常偏低 +实时电流:5.1A ← 电流异常偏低 +状态:故障 +告警:电压低于额定值20% +``` + +--- + +## 💻 代码实现 + +### 1. 创建充电桩时初始化 + +```csharp +var station = new ChargeStation +{ + Name = "1号充电桩", + Type = ChargeStationType.Standard, + IpAddress = "192.168.1.100", + Port = 502, + + // 额定参数(固定) + Voltage = 220.0, + Current = 32.0, + + // 实时参数(初始为0) + RealTimeVoltage = 0.0, + RealTimeCurrent = 0.0, + + Status = ChargeStationStatus.Idle +}; +``` + +### 2. 更新实时数据(模拟PLC数据) + +```csharp +/// +/// 更新充电桩实时数据 +/// +public void UpdateRealTimeData(string stationId, double voltage, double current) +{ + var dataService = ChargeStationDataService.Instance; + var station = dataService.GetStationById(stationId); + + if (station != null) + { + station.RealTimeVoltage = voltage; + station.RealTimeCurrent = current; + + dataService.UpdateStation(station, out string errorMsg); + + // 检查异常 + CheckVoltageCurrentAbnormal(station); + } +} + +/// +/// 检查电压电流是否异常 +/// +private void CheckVoltageCurrentAbnormal(ChargeStation station) +{ + // 充电中才检查 + if (station.Status == ChargeStationStatus.Charging) + { + // 电压偏差超过20% + double voltageDiff = Math.Abs(station.RealTimeVoltage - station.Voltage) / station.Voltage; + if (voltageDiff > 0.2) + { + Diagnosis.Log($"充电桩 {station.Name} 电压异常: " + + $"额定{station.Voltage}V, 实时{station.RealTimeVoltage}V", + "ChargeStation", true); + } + + // 电流偏差超过20% + double currentDiff = Math.Abs(station.RealTimeCurrent - station.Current) / station.Current; + if (currentDiff > 0.2) + { + Diagnosis.Log($"充电桩 {station.Name} 电流异常: " + + $"额定{station.Current}A, 实时{station.RealTimeCurrent}A", + "ChargeStation", true); + } + } +} +``` + +### 3. 充电开始时设置实时数据 + +```csharp +/// +/// 开始充电 +/// +public void StartCharging(string stationId, int carId) +{ + var dataService = ChargeStationDataService.Instance; + var station = dataService.GetStationById(stationId); + + if (station != null) + { + // 更新状态 + station.Status = ChargeStationStatus.Charging; + + // 初始化实时数据(初始值约为额定值的90%) + station.RealTimeVoltage = station.Voltage * 0.9; + station.RealTimeCurrent = station.Current * 0.9; + + dataService.UpdateStation(station, out _); + + Diagnosis.Log($"车辆 {carId} 开始充电: " + + $"充电桩 {station.Name}, " + + $"实时电压 {station.RealTimeVoltage:F1}V, " + + $"实时电流 {station.RealTimeCurrent:F1}A", + "ChargeStation", true); + } +} +``` + +### 4. 充电结束时清零实时数据 + +```csharp +/// +/// 停止充电 +/// +public void StopCharging(string stationId, int carId) +{ + var dataService = ChargeStationDataService.Instance; + var station = dataService.GetStationById(stationId); + + if (station != null) + { + // 更新状态 + station.Status = ChargeStationStatus.Idle; + + // 清零实时数据 + station.RealTimeVoltage = 0.0; + station.RealTimeCurrent = 0.0; + + dataService.UpdateStation(station, out _); + + Diagnosis.Log($"车辆 {carId} 充电完成: 充电桩 {station.Name}", + "ChargeStation", true); + } +} +``` + +### 5. 从PLC读取实时数据 + +```csharp +/// +/// 从PLC读取充电桩实时数据 +/// +public void ReadRealTimeDataFromPLC() +{ + var dataService = ChargeStationDataService.Instance; + var stations = dataService.GetAllStations() + .Where(s => s.Status == ChargeStationStatus.Charging) + .ToList(); + + foreach (var station in stations) + { + try + { + // 从PLC读取实时电压和电流 + // 这里需要根据实际PLC通信协议实现 + double voltage = ReadVoltageFromPLC(station.IpAddress, station.Port); + double current = ReadCurrentFromPLC(station.IpAddress, station.Port); + + // 更新实时数据 + station.RealTimeVoltage = voltage; + station.RealTimeCurrent = current; + + dataService.UpdateStation(station, out _); + } + catch (Exception ex) + { + Diagnosis.Log($"读取充电桩 {station.Name} 实时数据失败: {ex.Message}", + "ChargeStation", true); + } + } +} + +// 这些方法需要根据实际PLC协议实现 +private double ReadVoltageFromPLC(string ip, int port) +{ + // TODO: 实现PLC通信读取电压 + return 0.0; +} + +private double ReadCurrentFromPLC(string ip, int port) +{ + // TODO: 实现PLC通信读取电流 + return 0.0; +} +``` + +--- + +## 🔄 数据更新流程 + +### 完整充电流程 + +``` +1. 车辆到达充电站 + └─> 分配空闲充电桩 + └─> 状态: Idle → Reserved + +2. 开始充电 + └─> 状态: Reserved → Charging + └─> 设置实时数据初始值 + ├─> RealTimeVoltage = Voltage * 0.9 + └─> RealTimeCurrent = Current * 0.9 + +3. 充电中(定时更新) + └─> 每3-5秒从PLC读取实时数据 + ├─> 更新 RealTimeVoltage + ├─> 更新 RealTimeCurrent + └─> 检查异常并告警 + +4. 充电完成 + └─> 状态: Charging → Idle + └─> 清零实时数据 + ├─> RealTimeVoltage = 0.0 + └─> RealTimeCurrent = 0.0 +``` + +--- + +## 📋 JSON数据格式 + +保存到文件的数据包含实时字段: + +```json +{ + "StationId": "CS20240115123456", + "Name": "1号充电桩", + "Type": 0, + "IpAddress": "192.168.1.100", + "Port": 502, + "Voltage": 220.0, + "Current": 32.0, + "RealTimeVoltage": 215.5, + "RealTimeCurrent": 28.3, + "Status": 1, + "Enabled": true, + "SiteId": 1001, + "Remarks": "南区1号充电桩", + "CreatedTime": "2024-01-15T12:34:56", + "ModifiedTime": "2024-01-15T14:20:30" +} +``` + +--- + +## ✅ 使用检查清单 + +- [x] 数据模型添加实时电压和电流字段 +- [x] 列表移除功率列 +- [x] 列表添加实时电压和实时电流列 +- [x] 界面移除新增按钮 +- [x] 按钮重新排列 +- [x] 保留设置电压和电流功能 +- [x] 列表正确显示实时数据 +- [x] 无编译错误 + +--- + +## 📝 总结 + +### ✅ 完成的功能 + +1. **数据模型** - 添加实时电压和电流字段 +2. **列表显示** - 移除功率列,添加实时数据列 +3. **界面优化** - 移除新增按钮,重新排列其他按钮 +4. **功能保留** - 设置电压和电流功能完全保留 + +### 💡 后续集成建议 + +1. **与PLC通信集成** + - 实现从PLC读取实时电压和电流 + - 定时更新实时数据(建议3-5秒) + +2. **异常监控** + - 实时监控电压电流偏差 + - 超过阈值时触发告警 + +3. **数据统计** + - 记录充电过程的电压电流曲线 + - 分析充电效率和异常情况 + +4. **可视化展示** + - 实时数据图表显示 + - 历史数据趋势分析 + +**现在您可以在充电桩管理界面中查看实时电压和电流数据了!** 🎉 + diff --git a/StandardScene.Core/Docs/Charge/充电桩报文自动更新说明.md b/StandardScene.Core/Docs/Charge/充电桩报文自动更新说明.md new file mode 100644 index 0000000..8f9c790 --- /dev/null +++ b/StandardScene.Core/Docs/Charge/充电桩报文自动更新说明.md @@ -0,0 +1,309 @@ +# 充电桩报文自动更新功能说明 + +## 功能概述 + +系统现已支持发送和接收充电桩UDP报文,**分别解析后合并更新**充电桩管理列表中的实时数据。 + +## 工作流程 + +``` +发送方向: 应用程序 → 发送报文 → CommunicationMessageService(存储+解析发送数据) → 更新设定值 +接收方向: 充电桩设备 → UDP报文(40001端口) → ChargeUdpService → CommunicationMessageService(存储+解析接收数据) → 更新实时数据 +合并结果: 发送数据 + 接收数据 → 数据服务 → 管理界面自动刷新 +``` + +## 核心组件 + +### 1. CommunicationMessageService(通讯报文服务) + +**文件位置**: `Charge/CommunicationMessageService.cs` + +**主要功能**: +- 存储所有发送和接收的报文(最多保留100条) +- **分开解析发送和接收的报文数据** +- 根据IP地址匹配对应的充电桩并更新数据 +- 提供报文查询和筛选功能 + +**发送报文解析的数据**: +- ✅ 充电指令(启动/停止) +- ✅ 设定电压(V) +- ✅ 设定电流(A) +- ✅ 发送时间 + +**接收报文解析的数据**: +- ✅ 通讯状态(正常/错误) +- ✅ 充电指令状态(启动/停止) +- ✅ 机构状态(伸出/缩回/伸出中/缩回中/故障) +- ✅ 实时电压(V) +- ✅ 实时电流(A) +- ✅ 电量百分比(%) +- ✅ 报警状态和级别 +- ✅ 充电桩状态(空闲/充电中/故障/离线) +- ✅ 当前充电车辆编号 +- ✅ 接收时间 + +### 2. ChargeUdpService(UDP监听服务) + +**文件位置**: `Charge/ChargeUdpService.cs` + +**监听端口**: 40001 + +**工作流程**: +1. 接收UDP报文 +2. 调用 `CommunicationMessageService.AddReceiveMessage()` 记录报文 +3. `CommunicationMessageService` 自动解析接收报文并更新充电桩数据 +4. 保持原有任务处理逻辑的兼容性 + +### 3. 发送报文处理 + +**发送位置**: +- `ChargeStationType/MuXingChargeStation.cs` +- `ChargeStationType/FLChargeStation.cs` +- `ChargeStationType/PCBChargeStation.cs` + +**工作流程**: +1. 发送UDP报文到充电桩 +2. 调用 `CommunicationMessageService.AddSendMessage()` 记录报文 +3. `CommunicationMessageService` 自动解析发送报文并更新充电桩设定值 + +### 4. ChargeStationDataService(数据服务) + +**新增方法**: `GetStationByIp(string ipAddress)` + +**功能**: 根据IP地址快速查找对应的充电桩记录 + +### 5. ChargeStationManagementForm(管理界面) + +**新增功能**: 自动刷新 + +**刷新间隔**: 2秒 + +**特点**: +- 自动更新列表显示 +- 不影响用户的编辑操作 +- 窗体关闭时自动停止刷新 + +## 报文格式说明 + +### 当前支持的报文格式 + +报文采用逗号分隔的字节数组格式,例如: +``` +1,2,3,4,5,...,28,29,30 +``` + +### 发送报文字节位置定义(示例) + +| 字节位置 | 数据内容 | 说明 | +|---------|---------|------| +| 5 | 充电指令 | 0=停止, 1=启动 | +| 6-7 | 设定电压 | 高低字节,单位0.1V | +| 8-9 | 设定电流 | 高低字节,单位0.1A | + +### 接收报文字节位置定义(示例) + +| 字节位置 | 数据内容 | 说明 | +|---------|---------|------| +| 10 | 充电指令状态 | 0=停止, 1=启动 | +| 11 | 机构状态 | 0=未知, 1=伸出, 2=缩回, 3=伸出中, 4=缩回中, 5=故障 | +| 12-13 | 实时电压 | 高低字节,单位0.1V | +| 14-15 | 实时电流 | 高低字节,单位0.1A | +| 16 | 电量百分比 | 0-100 | +| 20 | 报警级别 | 0=无, 1-2=低, 3-5=中, 6-8=高, 9+=严重 | +| 25 | 充电桩状态 | 0=空闲, 1=充电中, 2=故障, 3=离线 | +| 26-29 | 车辆编号 | 4字节整数 | +| 28 | 通讯状态 | 1=正常, 其他=错误 | + +**⚠️ 注意**: 以上字节位置为示例,需要根据实际通讯协议进行调整。 + +## 如何调整报文解析规则 + +打开 `CommunicationMessageService.cs` 文件,分别修改发送和接收报文的解析方法: + +### 调整发送报文解析 + +修改 `ParseSendRawData` 方法中的字节位置: + +```csharp +private ParsedSendData ParseSendRawData(string rawData) +{ + // ... 字节数组转换代码 ... + + var parsed = new ParsedSendData + { + // 根据实际协议修改字节位置 + ChargeCommand = bytes.Length > 5 ? bytes[5] : (byte)0, + SetVoltage = bytes.Length > 7 ? (bytes[6] << 8 | bytes[7]) / 10.0 : 0, + SetCurrent = bytes.Length > 9 ? (bytes[8] << 8 | bytes[9]) / 10.0 : 0, + SendTime = DateTime.Now + }; + + return parsed; +} +``` + +### 调整接收报文解析 + +修改 `ParseReceiveRawData` 方法中的字节位置: + +```csharp +private ParsedReceiveData ParseReceiveRawData(string rawData) +{ + // ... 字节数组转换代码 ... + + var parsed = new ParsedReceiveData + { + // 根据实际协议修改字节位置 + CommStatus = bytes[28] == 1 ? CommunicationStatus.Normal : CommunicationStatus.Error, + ChargeCommandStatus = bytes[10] == 1 ? ChargeCommandStatus.Started : ChargeCommandStatus.Stopped, + // ... 其他字段 ... + ReceiveTime = DateTime.Now + }; + + return parsed; +} +``` + +## 使用示例 + +### 1. 启动UDP监听 + +```csharp +// 在程序启动时创建UDP服务 +var udpService = new ChargeUdpService(); +``` + +### 2. 添加充电桩 + +在充电桩管理界面中添加充电桩,确保IP地址与实际设备一致: + +``` +充电桩编号: 1 +名称: 1号充电桩 +IP地址: 192.168.1.101 ← 必须与设备IP一致 +端口: 502 +``` + +### 3. 自动更新 + +**发送报文时**: +1. 应用程序发送充电指令到充电桩 +2. 系统记录发送报文 +3. 解析发送报文数据(设定电压、电流等) +4. 根据IP地址匹配充电桩 +5. 更新充电桩的设定值 + +**接收报文时**: +1. 系统自动接收UDP报文(端口40001) +2. 记录接收报文 +3. 解析接收报文数据(实时状态、电压、电流等) +4. 根据IP地址匹配充电桩 +5. 更新充电桩的实时数据 + +**界面显示**: +- 管理界面每2秒自动刷新显示 +- 同时显示设定值(来自发送报文)和实时值(来自接收报文) + +## 调试信息 + +系统会在日志中输出以下信息: + +``` +[UDP返回报文信息] ChargeStation ADD:[1,2,3,4,...] +[ChargeStation] 更新充电桩成功: [1] 1号充电桩 (192.168.1.101:502) - Charging +``` + +**查看报文记录**: +- 打开通讯监控界面可以查看所有发送和接收的报文 +- 报文按时间倒序排列(最新的在最前面) +- 最多保留100条报文记录 + +## 常见问题 + +### Q1: 报文接收了但数据没更新? + +**检查项**: +1. 充电桩的IP地址是否在管理列表中 +2. 报文格式是否正确(至少30字节) +3. 查看日志中是否有解析错误信息 + +### Q2: 如何修改刷新间隔? + +在 `ChargeStationManagementForm.cs` 的 `InitializeAutoRefresh` 方法中修改: + +```csharp +autoRefreshTimer.Interval = 2000; // 改为你需要的毫秒数 +``` + +### Q3: 如何关闭自动刷新? + +```csharp +// 在InitializeAutoRefresh方法中注释掉这行 +// autoRefreshTimer.Start(); +``` + +## 扩展功能 + +### 添加新的解析字段 + +**发送报文新字段**: +1. 在 `ParsedSendData` 类中添加新属性 +2. 在 `ParseSendRawData` 方法中解析新字段 +3. 在 `UpdateStationFromSendData` 方法中更新到充电桩对象 + +**接收报文新字段**: +1. 在 `ParsedReceiveData` 类中添加新属性 +2. 在 `ParseReceiveRawData` 方法中解析新字段 +3. 在 `UpdateStationFromReceiveData` 方法中更新到充电桩对象 + +### 支持其他通讯协议 + +在 `CommunicationMessageService.cs` 中可以根据端口号或其他特征判断协议类型: + +```csharp +public void AddReceiveMessage(string ipAddress, int port, string rawData, string stationId = null) +{ + // ... 添加报文记录 ... + + // 根据端口判断协议类型 + if (port == 40001) + { + ParseReceiveDataAndUpdateStation(ipAddress, rawData); // UDP协议 + } + else if (port == 502) + { + ParseModbusReceiveAndUpdate(ipAddress, rawData); // Modbus协议 + } +} + +public void AddSendMessage(string ipAddress, int port, string rawData, string stationId = null) +{ + // ... 添加报文记录 ... + + // 根据端口判断协议类型 + if (port == 40001) + { + ParseSendDataAndUpdateStation(ipAddress, rawData); // UDP协议 + } + else if (port == 502) + { + ParseModbusSendAndUpdate(ipAddress, rawData); // Modbus协议 + } +} +``` + +## 技术特点 + +✅ **实时性**: UDP报文接收后立即解析更新 +✅ **自动化**: 无需手动刷新,数据自动同步 +✅ **分离解析**: 发送和接收报文分开解析,数据更准确 +✅ **合并更新**: 自动合并发送和接收数据到充电桩管理界面 +✅ **可扩展**: 支持自定义报文格式和解析规则 +✅ **兼容性**: 保留原有任务处理逻辑 +✅ **稳定性**: 异常处理完善,不影响系统运行 + +## 版本历史 + +- **v1.1** (2026-01-18): 发送和接收报文分开解析,合并更新到充电桩管理界面 +- **v1.0** (2026-01-18): 初始版本,支持UDP报文自动解析和更新 + diff --git a/StandardScene.Core/Docs/Charge/充电站HMI&管控接口-pcb板更新V8-更新IP&AP设定2023年9月27日..docx b/StandardScene.Core/Docs/Charge/充电站HMI&管控接口-pcb板更新V8-更新IP&AP设定2023年9月27日..docx new file mode 100644 index 0000000000000000000000000000000000000000..9747998174f7fa7ad9af0daf1d7f420ec42ac9ea GIT binary patch literal 32778 zcmeFXgLh?3w>KK>pks7wqhs5)ZQHhOcbs%=+qP{x9a}fgbG|da^PX|+f3>S73LOg+69oao3kn0y%iO_AOI_=~N*1*6zYU=8a^kObI=4!%mup|1A@i!n zai2gAg$~K1d1sjr15Z|C4F@`xE7+`f?*440<}kI~fIOm9&t{)ZBMv@{I%<;wCc3rk z6!7VF7lYb!qoMRcQF!ku@-9w2>+Qf={Rok!?fSYsUSbO^lChU1z@;ooPW0)ZZtu&w zo3K-4e4zDvx4ffORUQ~t-c3q*3?t4`r~K}hS(8(IwY3A>t8ltzOCJ>b27zN^PlV3! zpZe#>I0Jp7MaI!mj-?d7OQB0ULQ`VF`J?udRP%47?4rk#0ijuo`Z zEZ(1#Aw1GKjAD)&OE^pYn&mN?t$jK3+kd~v_tQw^l)ta>b|;GyAC8|`Cp2X4u`kJx z>PztLcX^xx)`X)k7)-{`H#ZaxV~&0YOx{)E7Qd|yR$V#XL3(zj^)By_+BWtPmp6#>8_Fay$6|4hxjd^B_I_x8Dsy

#?&S)9Vl9g1%z3 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 literal 0 HcmV?d00001 diff --git a/StandardScene.Core/Docs/Charge/充电站管控接口-新增报警码240113.xlsx b/StandardScene.Core/Docs/Charge/充电站管控接口-新增报警码240113.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c1451f58566991131c13c2cc5434af1d8101ce5c GIT binary patch literal 25428 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 z

  • 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 必充电量 +- 满电电量 ≥ 空闲充电电量 +- 允许中断电量 > 必充电量 + +### 2. 时间参数 + +| 参数名称 | 默认值 | 说明 | 单位 | +|---------|-------|------|-----| +| 空闲充电时间 | 30 | 车辆空闲多久后开始充电 | 秒 (sec) | +| 空闲时间 | 5 | 判断车辆空闲的时间阈值 | 秒 (sec) | +| 必充时间 | 60 | 必须充电的持续时间 | 秒 (sec) | +| 补电时间 | 5 | 补电操作的持续时间 | 分钟 (min) | + +### 3. 任务参数 + +| 参数名称 | 默认值 | 说明 | +|---------|-------|------| +| 允许空闲车充电的最小任务数 | 0 | 当任务数量大于此值时,允许空闲车辆充电 | + +### 4. 开关参数 + +| 参数名称 | 默认值 | 说明 | +|---------|-------|------| +| 允许中断充电任务 | 否 | 是否允许中断正在进行的充电任务 | +| 优先使用低电量车辆充电 | 是 | 优先选择电量较低的车辆进行充电 | +| 启用充电错误检测 | 否 | 是否启用充电过程中的错误检测 | +| 使用充电站点筛选 | 否 | 是否根据站点筛选充电桩 | + +## 操作说明 + +### 保存配置 + +1. 修改所需参数 +2. 点击 **"保存"** 按钮 +3. 系统会验证参数的有效性 +4. 验证通过后保存到配置文件 + +配置文件位置:`Config/ChargeStrategyConfig.json` + +### 应用配置 + +点击 **"应用"** 按钮可以保存配置但不关闭窗口,方便继续调整参数。 + +### 恢复默认配置 + +1. 点击 **"恢复默认"** 按钮 +2. 确认恢复操作 +3. 所有参数恢复为默认值 +4. **注意**:恢复后需要点击"保存"才会生效 + +### 取消修改 + +点击 **"取消"** 按钮关闭窗口,不保存任何修改。 + +## 配置文件格式 + +配置以 JSON 格式保存,示例: + +```json +{ + "MustChargeSoc": 20.0, + "IdleChargeSoc": 90.0, + "TaskAvailableSoc": 60.0, + "FullChargeSoc": 90.0, + "AllowInterruptSoc": 45.0, + "IdleChargeSeconds": 30.0, + "IdleSeconds": 5.0, + "MustChargeSeconds": 60.0, + "TopUpMinutes": 5.0, + "MinAllowFreeCarToChargeTaskCnt": 0, + "AllowInterruptTask": false, + "UseLowerSocForCharge": true, + "EnableErrorChargeDetection": false, + "UseChargeSiteFilter": false +} +``` + +## 参数验证规则 + +系统会在保存时自动验证配置的有效性: + +### SOC 参数验证 +- ✅ 所有 SOC 值必须在 0-100 之间 +- ✅ 必充电量 < 空闲充电电量 +- ✅ 任务可用电量 > 必充电量 +- ✅ 满电电量 ≥ 空闲充电电量 +- ✅ 允许中断电量 > 必充电量 + +### 时间参数验证 +- ✅ 所有时间值必须 ≥ 0 + +### 任务参数验证 +- ✅ 最小任务数必须 ≥ 0 + +## 使用场景示例 + +### 场景 1:紧急任务模式 +适用于任务紧急,需要快速周转车辆的情况。 + +``` +必充电量: 15% +空闲充电电量: 80% +任务可用电量: 50% +满电电量: 85% +允许中断充电任务: 是 +``` + +### 场景 2:节能模式 +适用于任务不紧急,优先保证电池寿命的情况。 + +``` +必充电量: 25% +空闲充电电量: 95% +任务可用电量: 70% +满电电量: 95% +允许中断充电任务: 否 +``` + +### 场景 3:平衡模式(默认) +平衡任务效率和电池寿命。 + +``` +必充电量: 20% +空闲充电电量: 90% +任务可用电量: 60% +满电电量: 90% +允许中断充电任务: 否 +``` + +## 配置生效时机 + +- **立即生效**:保存配置后立即生效 +- **自动加载**:系统启动时自动加载配置 +- **实时更新**:充电逻辑会实时读取最新配置 + +## 常见问题 + +### Q1: 修改配置后没有生效? + +**检查项**: +1. 确认已点击"保存"按钮 +2. 检查状态栏是否显示"配置保存成功" +3. 查看配置文件是否已更新 + +### Q2: 配置文件丢失怎么办? + +系统会自动创建默认配置文件,无需担心。 + +### Q3: 如何备份配置? + +配置文件位于 `Config/ChargeStrategyConfig.json`,直接复制此文件即可备份。 + +### Q4: 参数验证失败怎么办? + +根据错误提示调整参数,确保满足所有验证规则。 + +### Q5: 可以手动编辑配置文件吗? + +可以,但建议使用配置界面,因为界面会自动验证参数有效性。 + +## 技术细节 + +### 配置服务(单例模式) + +```csharp +var configService = ChargeStrategyConfigService.Instance; +var config = configService.LoadConfig(); +configService.SaveConfig(config); +``` + +### 配置模型 + +```csharp +public class ChargeStrategyConfig +{ + // SOC 参数 + public double MustChargeSoc { get; set; } + public double IdleChargeSoc { get; set; } + // ... 其他参数 + + // 验证方法 + public bool Validate(out string errorMessage); +} +``` + +### 配置文件路径 + +- **Windows**: `应用程序目录\Config\ChargeStrategyConfig.json` +- **自动创建**: 首次运行时自动创建配置目录和默认配置文件 + +## 界面布局 + +``` +┌─────────────────────────────────────────────────────────┐ +│ 充电策略配置 │ +├─────────────────────────────────────────────────────────┤ +│ ┌─ SOC 参数 ─────────────────────────────────────────┐ │ +│ │ 必充电量: [20.0] % 空闲充电电量: [90.0] % │ │ +│ │ 任务可用电量: [60.0] % 满电电量: [90.0] % │ │ +│ │ 允许中断电量: [45.0] % │ │ +│ └───────────────────────────────────────────────────┘ │ +│ │ +│ ┌─ 时间参数 ─────────────────────────────────────────┐ │ +│ │ 空闲充电时间: [30.0] 秒 空闲时间: [5.0] 秒 │ │ +│ │ 必充时间: [60.0] 秒 补电时间: [5.0] 分钟 │ │ +│ └───────────────────────────────────────────────────┘ │ +│ │ +│ ┌─ 任务参数 ─────────────────────────────────────────┐ │ +│ │ 允许空闲车充电的最小任务数: [0] │ │ +│ └───────────────────────────────────────────────────┘ │ +│ │ +│ ┌─ 开关参数 ─────────────────────────────────────────┐ │ +│ │ ☐ 允许中断充电任务 ☑ 优先使用低电量车辆充电 │ │ +│ │ ☐ 启用充电错误检测 ☐ 使用充电站点筛选 │ │ +│ └───────────────────────────────────────────────────┘ │ +├─────────────────────────────────────────────────────────┤ +│ 就绪... [恢复默认] [保存] [应用] [取消] │ +└─────────────────────────────────────────────────────────┘ +``` + +## 注意事项 + +⚠️ **参数调整建议**: +1. 不建议频繁修改配置 +2. 修改前建议备份当前配置 +3. 修改后观察系统运行情况 +4. 根据实际情况逐步调整参数 + +⚠️ **安全提示**: +1. 必充电量不宜设置过低(建议 ≥ 15%) +2. 满电电量不宜设置过高(建议 ≤ 95%) +3. 允许中断任务需谨慎开启 + +## 版本历史 + +- **v1.0** (2026-01-25): 初始版本,支持所有充电策略参数配置 + +--- + +**提示**:配置界面提供了完整的参数验证和默认值恢复功能,建议通过界面进行配置管理。 + diff --git a/StandardScene.Core/Docs/Charge/完整文件清单.md b/StandardScene.Core/Docs/Charge/完整文件清单.md new file mode 100644 index 0000000..0f1204f --- /dev/null +++ b/StandardScene.Core/Docs/Charge/完整文件清单.md @@ -0,0 +1,527 @@ +# 🔌 充电桩管理系统 - 完整文件清单 + +## 📁 已创建的文件 + +### 核心文件(必需) + +| 文件名 | 类型 | 说明 | 行数 | +|--------|------|------|------| +| **ChargeStation.cs** | 数据模型 | 充电桩实体类,包含所有属性和验证逻辑 | ~150 | +| **ChargeStationDataService.cs** | 数据服务 | 单例模式数据管理类,负责增删改查和持久化 | ~300 | +| **ChargeStationManagementForm.cs** | UI主类 | 管理窗口的业务逻辑和事件处理 | ~350 | +| **ChargeStationManagementForm.Designer.cs** | UI设计 | 窗口控件的初始化和布局代码 | ~550 | + +### 辅助文件(可选但推荐) + +| 文件名 | 类型 | 说明 | 行数 | +|--------|------|------|------| +| **ChargeStationHelper.cs** | 工具类 | 提供静态辅助方法,简化调用 | ~350 | +| **ChargeStationManagementExample.cs** | 示例代码 | 10个使用示例,包含完整的调用代码 | ~400 | + +### 文档文件 + +| 文件名 | 类型 | 说明 | +|--------|------|------| +| **README_ChargeStationManagement.md** | 完整文档 | 详细的功能说明、API文档和使用指南 | +| **QUICKSTART.md** | 快速开始 | 5分钟快速上手指南,包含集成步骤 | +| **INTERFACE_LAYOUT.txt** | 界面说明 | ASCII艺术格式的界面布局和操作说明 | +| **完整文件清单.md** | 本文件 | 所有文件的清单和使用说明 | + +--- + +## 🎯 文件功能详解 + +### 1. ChargeStation.cs - 充电桩数据模型 + +**功能**: +- 定义充电桩的所有属性(编号、名称、IP、端口、电压、电流等) +- 提供数据验证方法 `IsValid()` +- 自动计算功率 `Power` +- 自动生成唯一编号 `GenerateStationId()` + +**关键属性**: +```csharp +public string StationId { get; set; } // 唯一编号 +public string Name { get; set; } // 名称 +public string IpAddress { get; set; } // IP地址 +public int Port { get; set; } // 端口 +public double Voltage { get; set; } // 电压(V) +public double Current { get; set; } // 电流(A) +public ChargeStationStatus Status { get; set; } // 状态 +public bool Enabled { get; set; } // 是否启用 +public int? SiteId { get; set; } // 站点ID +public double Power => Voltage * Current; // 功率(W) +``` + +**状态枚举**: +```csharp +public enum ChargeStationStatus { + Idle = 0, // 空闲 + Charging = 1, // 充电中 + Fault = 2, // 故障 + Offline = 3, // 离线 + Maintenance = 4, // 维护中 + Reserved = 5 // 预约中 +} +``` + +--- + +### 2. ChargeStationDataService.cs - 数据服务 + +**功能**: +- 单例模式,全局唯一实例 +- 数据持久化(JSON格式) +- 线程安全(使用锁机制) +- CRUD操作(增删改查) + +**核心方法**: +```csharp +// 单例获取 +ChargeStationDataService.Instance + +// 查询 +List GetAllStations() +ChargeStation GetStationById(string stationId) +List GetIdleStations() +int GetChargingCount() + +// 添加 +bool AddStation(ChargeStation station, out string errorMessage) + +// 更新 +bool UpdateStation(ChargeStation station, out string errorMessage) +bool UpdateStationStatus(string stationId, ChargeStationStatus status) + +// 删除 +bool DeleteStation(string stationId, out string errorMessage) + +// 刷新 +void Reload() +``` + +**数据存储位置**: +``` +项目根目录/Data/ChargeStations.json +``` + +--- + +### 3. ChargeStationManagementForm.cs - 管理窗口 + +**功能**: +- 充电桩列表显示(DataGridView) +- 实时搜索 +- 添加/编辑/删除充电桩 +- 数据导出(JSON/CSV) +- 统计信息显示 +- 状态颜色标识 + +**主要方法**: +```csharp +private void LoadStations() // 加载数据到列表 +private void UpdateStatistics() // 更新统计信息 +private void btnAdd_Click() // 新增按钮 +private void btnSave_Click() // 保存按钮 +private void btnDelete_Click() // 删除按钮 +private void btnRefresh_Click() // 刷新按钮 +private void btnExport_Click() // 导出按钮 +private void dgvStations_CellDoubleClick() // 双击编辑 +private void txtSearch_TextChanged() // 搜索 +``` + +**界面布局**: +- 左侧:充电桩列表 + 搜索 + 统计 +- 右侧:编辑区 + 操作按钮 +- 尺寸:1200×700(可调整,最小1000×600) + +--- + +### 4. ChargeStationManagementForm.Designer.cs - UI设计文件 + +**功能**: +- 自动生成的设计器代码 +- 包含所有控件的初始化 +- 不建议手动修改 + +**主要控件**: +```csharp +SplitContainer splitContainer // 分割容器 +DataGridView dgvStations // 数据表格 +TextBox txtSearch // 搜索框 +TextBox txtName, txtIpAddress // 文本框 +NumericUpDown numPort, numVoltage // 数字输入框 +ComboBox cmbStatus // 下拉框 +CheckBox chkEnabled // 复选框 +Button btnAdd, btnSave, btnDelete // 按钮 +Label lblStatistics, lblPower // 标签 +``` + +--- + +### 5. ChargeStationHelper.cs - 辅助工具类 + +**功能**: +- 提供静态辅助方法 +- 简化常用操作 +- 封装复杂逻辑 + +**常用方法**: +```csharp +// 打开管理窗口 +ChargeStationHelper.OpenManagementWindow() + +// 获取充电桩 +ChargeStation station = ChargeStationHelper.GetStationBySiteId(1001) +ChargeStation station = ChargeStationHelper.GetStationByIp("192.168.1.100") + +// 检查可用性 +bool available = ChargeStationHelper.IsSiteHasAvailableChargeStation(1001) + +// 充电控制 +bool success = ChargeStationHelper.StartCharging("CS123456", carId) +bool success = ChargeStationHelper.StopCharging("CS123456", carId) + +// 故障标记 +bool success = ChargeStationHelper.MarkAsFault("CS123456", "通信超时") + +// 获取状态摘要 +string summary = ChargeStationHelper.GetStatusSummary() +// 输出: "总数:10 | 空闲:6 | 充电中:3 | 故障:1 | 离线:0" + +// 查找最近的空闲充电桩 +ChargeStation station = ChargeStationHelper.FindNearestIdleStation(currentSiteId) + +// 快速创建充电桩 +bool success = ChargeStationHelper.QuickAddStation("1号充电桩", "192.168.1.100", 1001) + +// 显示选择对话框 +ChargeStation selected = ChargeStationHelper.ShowStationSelectionDialog(ChargeStationStatus.Idle) + +// 批量更新在线状态 +int updatedCount = ChargeStationHelper.UpdateOnlineStatus(timeout: 3000) +``` + +--- + +### 6. ChargeStationManagementExample.cs - 示例代码 + +**功能**: +- 提供10个完整的使用示例 +- 每个方法都带有 `[MethodMember]` 属性,可在系统中直接调用 + +**示例列表**: + +| 方法名 | 说明 | +|--------|------| +| `OpenManagementForm()` | 打开充电桩管理窗口 | +| `InitializeTestData()` | 初始化4个测试充电桩 | +| `ShowIdleStations()` | 显示所有空闲充电桩 | +| `ShowChargeStationStatistics()` | 显示统计信息 | +| `AssignChargeStationToCar()` | 为车辆分配充电桩 | +| `StartCharging()` | 开始充电 | +| `StopCharging()` | 结束充电 | +| `CheckChargeStationOnlineStatus()` | 检查在线状态 | +| `ExportChargeStationData()` | 导出数据 | +| `ClearAllChargeStationData()` | 清空所有数据 | + +--- + +## 📖 使用指南 + +### 方式1:快速开始(推荐新手) + +1. **阅读快速开始文档** + ``` + 打开: QUICKSTART.md + ``` + +2. **在主窗口添加菜单项** + ```csharp + var menuItem = new ToolStripMenuItem("充电桩管理"); + menuItem.Click += (s, e) => { + ChargeStationHelper.OpenManagementWindow(); + }; + ``` + +3. **初始化测试数据** + ```csharp + ChargeStationManagementExample.InitializeTestData(); + ``` + +4. **打开管理窗口测试** + - 点击菜单项 + - 查看测试数据 + - 尝试添加/编辑/删除 + +### 方式2:集成到现有代码(推荐高级用户) + +1. **阅读完整文档** + ``` + 打开: README_ChargeStationManagement.md + ``` + +2. **在充电任务中集成** + ```csharp + // 在 AbstractChargeMission.cs 中 + using StandardScene.Charge; + + // 选择充电站点时 + var dataService = ChargeStationDataService.Instance; + var idleStations = dataService.GetIdleStations(); + + // 到达充电站时 + ChargeStationHelper.StartCharging(stationId, carId); + + // 离开充电站时 + ChargeStationHelper.StopCharging(stationId, carId); + ``` + +3. **添加实时监控** + ```csharp + // 在主窗口添加定时器 + private Timer statusTimer = new Timer { Interval = 3000 }; + statusTimer.Tick += (s, e) => { + lblStatus.Text = ChargeStationHelper.GetStatusSummary(); + }; + statusTimer.Start(); + ``` + +### 方式3:参考示例代码(推荐学习) + +1. **查看示例代码** + ``` + 打开: ChargeStationManagementExample.cs + ``` + +2. **运行示例方法** + ```csharp + // 直接调用示例方法 + ChargeStationManagementExample.ShowIdleStations(); + ChargeStationManagementExample.ShowChargeStationStatistics(); + ``` + +3. **根据需求修改** + - 复制示例代码 + - 根据实际需求调整 + - 集成到项目中 + +--- + +## 🔧 配置说明 + +### 数据文件配置 + +**位置**: +``` +项目根目录/Data/ChargeStations.json +``` + +**格式**: +```json +[ + { + "StationId": "CS20240115123456", + "Name": "1号充电桩", + "IpAddress": "192.168.1.100", + "Port": 502, + "Voltage": 220.0, + "Current": 32.0, + "Status": 0, + "Enabled": true, + "SiteId": 1001, + "Remarks": "南区1号充电桩", + "CreatedTime": "2024-01-15T12:34:56", + "ModifiedTime": "2024-01-15T14:20:30" + } +] +``` + +### 权限要求 + +- `Data` 文件夹需要**读写权限** +- 如果保存失败,检查文件夹权限 + +### 性能配置 + +- 数据量 < 100个充电桩:无需优化 +- 数据量 > 100个充电桩:考虑分页显示 +- 搜索性能:实时搜索,无需优化 + +--- + +## 🎨 界面定制 + +### 修改窗口大小 + +在 `ChargeStationManagementForm.Designer.cs` 中: +```csharp +this.Size = new Size(1400, 800); // 修改为你需要的尺寸 +``` + +### 修改按钮颜色 + +```csharp +btnAdd.BackColor = Color.LightGreen; +btnSave.BackColor = Color.LightBlue; +btnDelete.BackColor = Color.LightCoral; +``` + +### 修改字体 + +```csharp +this.Font = new Font("微软雅黑", 10F); +``` + +--- + +## 🐛 故障排除 + +### 问题1:窗口打不开 + +**原因**:命名空间引用错误 + +**解决**: +```csharp +using StandardScene.Charge; +``` + +### 问题2:数据保存失败 + +**原因**:文件夹权限不足 + +**解决**: +1. 右键 `Data` 文件夹 +2. 属性 → 安全 +3. 确保当前用户有"写入"权限 + +### 问题3:找不到数据 + +**原因**:首次运行未初始化 + +**解决**: +```csharp +ChargeStationManagementExample.InitializeTestData(); +``` + +### 问题4:编译错误 + +**原因**:缺少依赖项 + +**解决**: +- 确保安装 `Newtonsoft.Json` NuGet 包 +- 检查项目引用 + +--- + +## 📊 系统要求 + +### 软件要求 +- .NET Framework 4.5 或更高版本 +- Windows Forms +- Newtonsoft.Json(NuGet) + +### 硬件要求 +- 内存:数据量小,几乎无影响 +- 磁盘:每个充电桩约 1KB 数据 +- CPU:UI操作,几乎无影响 + +### 兼容性 +- Windows 7/8/10/11 +- 与现有 AGV 系统完全兼容 +- 不影响现有功能 + +--- + +## 🚀 下一步计划 + +### 已完成功能 ✅ +- [x] 充电桩数据模型 +- [x] 数据持久化(JSON) +- [x] 可视化管理界面 +- [x] 增删改查功能 +- [x] 搜索和过滤 +- [x] 数据导出 +- [x] 辅助工具类 +- [x] 完整文档和示例 + +### 可扩展功能 💡 +- [ ] 充电桩实时监控(通信状态) +- [ ] 充电历史记录 +- [ ] 充电曲线图表 +- [ ] 充电计费管理 +- [ ] 充电桩分组管理 +- [ ] 权限控制(不同用户不同权限) +- [ ] 远程控制(启动/停止充电) +- [ ] 告警推送(故障/离线) +- [ ] 数据分析(充电效率统计) +- [ ] 与现有 PLC 系统集成 + +--- + +## 📞 技术支持 + +### 文档位置 +- **完整文档**: `README_ChargeStationManagement.md` +- **快速开始**: `QUICKSTART.md` +- **界面说明**: `INTERFACE_LAYOUT.txt` +- **本文件**: `完整文件清单.md` + +### 示例代码 +- **工具类**: `ChargeStationHelper.cs` +- **示例代码**: `ChargeStationManagementExample.cs` + +### 日志调试 +```csharp +// 查看充电桩相关日志 +// 日志标签: "ChargeStation" +``` + +--- + +## ✅ 检查清单 + +在部署到生产环境前,请确认: + +- [ ] 所有文件都已添加到项目 +- [ ] `Newtonsoft.Json` NuGet 包已安装 +- [ ] `Data` 文件夹有读写权限 +- [ ] 已在主窗口添加菜单项或按钮 +- [ ] 已初始化测试数据并测试 +- [ ] 管理窗口可以正常打开 +- [ ] 增删改查功能正常 +- [ ] 数据保存和加载正常 +- [ ] 搜索功能正常 +- [ ] 导出功能正常 +- [ ] 已阅读完整文档 +- [ ] 已测试与现有系统的集成 + +--- + +## 📝 版本信息 + +**当前版本**: v1.0.0 +**发布日期**: 2024-01-15 +**开发者**: MDCS System +**许可**: 内部使用 + +--- + +## 🎉 恭喜! + +您已经获得了一个完整的充电桩管理系统! + +**快速开始**: +1. 打开 `QUICKSTART.md` +2. 按照步骤操作 +3. 5分钟内即可开始使用 + +**需要帮助?** +- 查看文档 +- 运行示例代码 +- 检查日志输出 + +祝您使用愉快! 🚀 + + + diff --git a/StandardScene.Core/Docs/Charge/报文解析使用示例.md b/StandardScene.Core/Docs/Charge/报文解析使用示例.md new file mode 100644 index 0000000..d510c2e --- /dev/null +++ b/StandardScene.Core/Docs/Charge/报文解析使用示例.md @@ -0,0 +1,320 @@ +# 充电桩报文分离解析使用示例 + +## 概述 + +系统现在支持**发送报文**和**接收报文**分开解析,然后自动合并更新到充电桩管理界面。 + +## 数据流向图 + +``` +┌─────────────────┐ +│ 应用程序 │ +└────────┬────────┘ + │ 发送充电指令 + ▼ +┌─────────────────────────────────────────────┐ +│ CommunicationMessageService │ +│ ┌─────────────────────────────────────┐ │ +│ │ AddSendMessage() │ │ +│ │ ├─ 记录发送报文 │ │ +│ │ └─ ParseSendDataAndUpdateStation() │ │ +│ │ ├─ 解析设定电压 │ │ +│ │ ├─ 解析设定电流 │ │ +│ │ └─ 更新充电桩设定值 │ │ +│ └─────────────────────────────────────┘ │ +└─────────────────┬───────────────────────────┘ + │ + ▼ + ┌────────────────┐ + │ ChargeStation │ ◄─── 设定值已更新 + │ SetVoltage │ + │ SetCurrent │ + └────────┬───────┘ + │ + │ 同时... + │ +┌─────────────────▼───────────────────────────┐ +│ ChargeUdpService (监听端口40001) │ +│ ├─ 接收充电桩返回的UDP报文 │ +│ └─ 调用 AddReceiveMessage() │ +└─────────────────┬───────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────┐ +│ CommunicationMessageService │ +│ ┌─────────────────────────────────────┐ │ +│ │ AddReceiveMessage() │ │ +│ │ ├─ 记录接收报文 │ │ +│ │ └─ ParseReceiveDataAndUpdateStation()│ │ +│ │ ├─ 解析实时电压 │ │ +│ │ ├─ 解析实时电流 │ │ +│ │ ├─ 解析充电状态 │ │ +│ │ ├─ 解析机构状态 │ │ +│ │ └─ 更新充电桩实时数据 │ │ +│ └─────────────────────────────────────┘ │ +└─────────────────┬───────────────────────────┘ + │ + ▼ + ┌────────────────┐ + │ ChargeStation │ ◄─── 实时值已更新 + │ RealTimeVoltage│ + │ RealTimeCurrent│ + │ Status │ + │ MechanismStatus│ + └────────┬───────┘ + │ + ▼ + ┌─────────────────────────────┐ + │ ChargeStationManagementForm │ + │ (每2秒自动刷新) │ + │ 显示: │ + │ - 设定电压 vs 实时电压 │ + │ - 设定电流 vs 实时电流 │ + │ - 充电状态 │ + │ - 机构状态 │ + └─────────────────────────────┘ +``` + +## 代码示例 + +### 1. 发送充电指令(自动解析发送报文) + +```csharp +// 在充电桩类中发送充电指令 +public void StartCharging(double voltage, double current) +{ + // 构造发送报文 + byte[] sendData = new byte[10]; + sendData[5] = 1; // 充电指令:启动 + sendData[6] = (byte)((int)(voltage * 10) >> 8); // 设定电压高字节 + sendData[7] = (byte)((int)(voltage * 10) & 0xFF); // 设定电压低字节 + sendData[8] = (byte)((int)(current * 10) >> 8); // 设定电流高字节 + sendData[9] = (byte)((int)(current * 10) & 0xFF); // 设定电流低字节 + + // 发送UDP报文 + udpClient.Send(sendData, sendData.Length, endPoint); + + // 记录发送报文(自动解析并更新设定值) + var messageService = CommunicationMessageService.Instance; + messageService.AddSendMessage( + ipAddress: endPoint.Address.ToString(), + port: endPoint.Port, + rawData: string.Join(",", sendData), + stationId: this.StationId + ); + + // ✅ 此时充电桩的 SetVoltage 和 SetCurrent 已自动更新 +} +``` + +### 2. 接收充电桩反馈(自动解析接收报文) + +```csharp +// 在 ChargeUdpService 中接收报文 +private static async void ListenerProcess() +{ + var messageService = CommunicationMessageService.Instance; + using (UdpClient udpListener = new UdpClient(40001)) + { + while (true) + { + var result = await udpListener.ReceiveAsync(); + var remoteEndPoint = result.RemoteEndPoint; + var message = result.Buffer; + + // 记录接收报文(自动解析并更新实时数据) + messageService.AddReceiveMessage( + ipAddress: remoteEndPoint.Address.ToString(), + port: 40001, + rawData: string.Join(",", message) + ); + + // ✅ 此时充电桩的实时数据已自动更新: + // - RealTimeVoltage(实时电压) + // - RealTimeCurrent(实时电流) + // - Status(充电状态) + // - MechanismStatus(机构状态) + // - BatteryLevel(电量百分比) + // - 等等... + } + } +} +``` + +### 3. 在充电桩管理界面查看合并后的数据 + +```csharp +// 在 ChargeStationManagementForm 中显示数据 +private void LoadStations() +{ + var stations = ChargeStationDataService.Instance.GetAllStations(); + + foreach (var station in stations) + { + // 显示设定值(来自发送报文解析) + Console.WriteLine($"设定电压: {station.SetVoltage}V"); + Console.WriteLine($"设定电流: {station.SetElectricCurrent}A"); + + // 显示实时值(来自接收报文解析) + Console.WriteLine($"实时电压: {station.RealTimeVoltage}V"); + Console.WriteLine($"实时电流: {station.RealTimeCurrent}A"); + Console.WriteLine($"充电状态: {GetStatusText(station.Status)}"); + Console.WriteLine($"机构状态: {GetMechanismStatusText(station.MechanismStatus)}"); + Console.WriteLine($"电量: {station.BatteryLevel}%"); + + // 显示通讯时间 + Console.WriteLine($"最后发送: {station.LastSendTime}"); + Console.WriteLine($"最后接收: {station.LastReceiveTime}"); + } +} +``` + +## 解析流程详解 + +### 发送报文解析流程 + +``` +AddSendMessage() + ↓ +ParseSendDataAndUpdateStation() + ↓ +ParseSendRawData() ← 解析发送报文 + ├─ ChargeCommand (字节5) + ├─ SetVoltage (字节6-7) + └─ SetCurrent (字节8-9) + ↓ +UpdateStationFromSendData() ← 更新设定值 + ├─ station.SetVoltage = parsedData.SetVoltage + ├─ station.SetElectricCurrent = parsedData.SetCurrent + ├─ station.LastSendTime = parsedData.SendTime + └─ station.ChargeCommandStatus = ... +``` + +### 接收报文解析流程 + +``` +AddReceiveMessage() + ↓ +ParseReceiveDataAndUpdateStation() + ↓ +ParseReceiveRawData() ← 解析接收报文 + ├─ CommStatus (字节28) + ├─ ChargeCommandStatus (字节10) + ├─ MechanismStatus (字节11) + ├─ RealTimeVoltage (字节12-13) + ├─ RealTimeCurrent (字节14-15) + ├─ BatteryLevel (字节16) + ├─ HasAlarm (字节20) + ├─ Status (字节25) + └─ CurrentVehicleId (字节26-29) + ↓ +UpdateStationFromReceiveData() ← 更新实时值 + ├─ station.RealTimeVoltage = parsedData.RealTimeVoltage + ├─ station.RealTimeCurrent = parsedData.RealTimeCurrent + ├─ station.Status = parsedData.Status + ├─ station.MechanismStatus = parsedData.MechanismStatus + ├─ station.BatteryLevel = parsedData.BatteryLevel + ├─ station.LastReceiveTime = parsedData.ReceiveTime + └─ ... +``` + +## 数据对比示例 + +| 数据项 | 来源 | 更新时机 | 用途 | +|-------|------|---------|------| +| SetVoltage | 发送报文 | 发送充电指令时 | 显示设定的目标电压 | +| RealTimeVoltage | 接收报文 | 接收充电桩反馈时 | 显示当前实际电压 | +| SetElectricCurrent | 发送报文 | 发送充电指令时 | 显示设定的目标电流 | +| RealTimeCurrent | 接收报文 | 接收充电桩反馈时 | 显示当前实际电流 | +| ChargeCommandStatus | 发送+接收 | 发送指令时更新,接收反馈时确认 | 显示充电指令执行状态 | +| Status | 接收报文 | 接收充电桩反馈时 | 显示充电桩当前状态 | +| MechanismStatus | 接收报文 | 接收充电桩反馈时 | 显示机构伸缩状态 | +| BatteryLevel | 接收报文 | 接收充电桩反馈时 | 显示电池电量百分比 | +| LastSendTime | 发送报文 | 发送充电指令时 | 显示最后发送时间 | +| LastReceiveTime | 接收报文 | 接收充电桩反馈时 | 显示最后接收时间 | + +## 优势 + +✅ **数据分离**:发送和接收数据各自独立,不会互相覆盖 +✅ **完整记录**:同时保留设定值和实时值,便于对比分析 +✅ **自动合并**:系统自动将两种数据合并到同一个充电桩对象 +✅ **实时更新**:界面每2秒自动刷新,显示最新数据 +✅ **易于调试**:可以清楚看到发送的指令和接收的反馈 + +## 调试技巧 + +### 1. 查看报文记录 + +```csharp +var messageService = CommunicationMessageService.Instance; + +// 查看所有报文 +var allMessages = messageService.GetAllMessages(); + +// 查看某个IP的报文 +var ipMessages = messageService.GetMessagesByIp("192.168.1.101"); + +// 查看某个充电桩的报文 +var stationMessages = messageService.GetMessagesByStationId("1"); + +foreach (var msg in allMessages) +{ + Console.WriteLine($"[{msg.Direction}] {msg.IpAddress}:{msg.Port}"); + Console.WriteLine($"时间: {msg.Timestamp}"); + Console.WriteLine($"数据: {msg.RawData}"); + Console.WriteLine("---"); +} +``` + +### 2. 对比设定值与实时值 + +```csharp +var station = ChargeStationDataService.Instance.GetStationByIp("192.168.1.101"); + +if (station != null) +{ + // 电压对比 + double voltageDiff = Math.Abs(station.SetVoltage - station.RealTimeVoltage); + Console.WriteLine($"电压偏差: {voltageDiff}V"); + + // 电流对比 + double currentDiff = Math.Abs(station.SetElectricCurrent - station.RealTimeCurrent); + Console.WriteLine($"电流偏差: {currentDiff}A"); + + // 通讯延迟 + if (station.LastSendTime != null && station.LastReceiveTime != null) + { + var delay = station.LastReceiveTime.Value - station.LastSendTime.Value; + Console.WriteLine($"通讯延迟: {delay.TotalMilliseconds}ms"); + } +} +``` + +### 3. 监控解析错误 + +如果数据没有更新,检查以下几点: + +1. **IP地址是否匹配**:确保充电桩的IP地址在管理列表中 +2. **报文长度是否足够**:发送报文至少10字节,接收报文至少30字节 +3. **字节位置是否正确**:根据实际协议调整字节位置 +4. **数据类型是否正确**:检查高低字节顺序、单位换算等 + +## 注意事项 + +⚠️ **字节位置**:示例中的字节位置仅供参考,请根据实际通讯协议调整 +⚠️ **报文格式**:确保发送和接收的报文格式与解析规则一致 +⚠️ **异常处理**:解析失败不会影响报文记录,但数据不会更新 +⚠️ **线程安全**:`CommunicationMessageService` 使用单例模式,内部已做线程同步 + +## 总结 + +通过分离解析发送和接收报文,系统可以: +- 准确记录每次发送的指令参数 +- 准确获取充电桩的实时反馈 +- 自动合并两种数据到充电桩管理界面 +- 便于对比分析和故障诊断 + +这种设计使得充电桩管理更加精确和可靠! + + + diff --git a/StandardScene.Core/Docs/Charge/测试数据.txt b/StandardScene.Core/Docs/Charge/测试数据.txt new file mode 100644 index 0000000..74f537f --- /dev/null +++ b/StandardScene.Core/Docs/Charge/测试数据.txt @@ -0,0 +1,26 @@ + +UDP +[2026/01/16-16:11:55.679] >PCBsendChargeSite: 3075 IP:192.168.100.72: BB F6 01 00 00 03 20 00 00 01 22 00 1E 00 05 4D FF FF FD EE 00 00 01 0E 00 00 00 00 00 00 F6 EE +[2026/01/16-16:11:56.260] >PCBsendChargeSite: 3075 IP:192.168.100.72: BB F7 01 00 00 03 20 00 00 01 22 00 1E 00 05 4D FF FF FD EE 00 00 01 0E 00 00 00 00 00 80 F5 EE +[2026/01/16-16:11:56.835] >PCBsendChargeSite: 3075 IP:192.168.100.72: BB F8 01 00 00 03 20 00 00 01 22 00 1E 00 05 4D FF FF FD EE 00 00 01 0E 00 00 00 00 00 80 EE EE +[2026/01/16-16:11:57.394] >PCBsendChargeSite: 3075 IP:192.168.100.72: BB F9 01 00 00 03 20 00 00 01 22 00 1E 00 05 4D FF FF FD EE 00 00 01 0E 00 00 00 00 00 00 ED EE + +[2026/01/16-16:14:49.300] >PCBsendChargeSite: 3075 IP:192.168.100.72: BB 28 00 00 00 03 20 00 00 01 22 00 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 38 EE +[2026/01/16-16:14:49.843] >PCBsendChargeSite: 3075 IP:192.168.100.72: BB 29 00 00 00 03 20 00 00 01 22 00 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 84 3B EE +[2026/01/16-16:14:50.410] >PCBsendChargeSite: 3075 IP:192.168.100.72: BB 2A 00 00 00 03 20 00 00 01 22 00 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44 3D EE +[2026/01/16-16:14:50.943] >PCBsendChargeSite: 3075 IP:192.168.100.72: BB 2B 00 00 00 03 20 00 00 01 22 00 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C4 3E EE + +[2026/01/19-17:35:58.294] >IsSafe:False ChargeIP: 192.168.100.74: BB 74 00 00 03 28 00 00 01 22 00 00 00 00 01 29 00 0B 00 00 00 00 00 00 00 00 00 00 02 00 00 EE +[2026/01/19-17:35:58.885] >IsSafe:False ChargeIP: 192.168.100.74: BB 75 00 00 03 28 00 00 01 22 00 00 00 00 01 29 00 0B 00 00 00 00 00 00 00 00 00 00 02 00 00 EE +[2026/01/19-17:35:59.465] >IsSafe:False ChargeIP: 192.168.100.74: BB 76 00 00 03 28 00 00 01 22 00 00 00 00 01 29 00 0B 00 00 00 00 00 00 00 00 00 00 02 00 00 EE +[2026/01/19-17:36:00.020] >IsSafe:False ChargeIP: 192.168.100.74: BB 77 00 00 03 28 00 00 01 22 00 00 00 00 01 29 00 0B 00 00 00 00 00 00 00 00 00 00 02 00 00 EE + + +TCP ָ +BB 00 42 48 00 00 42 5C 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EE // +BB 00 42 48 00 00 42 5C 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EE // ֹͣ +TCPָ +BB 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 EE // +BB 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 EE // +BB 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 EE // + diff --git a/StandardScene.Core/Docs/CoderSettings汇总.md b/StandardScene.Core/Docs/CoderSettings汇总.md new file mode 100644 index 0000000..dd8e571 --- /dev/null +++ b/StandardScene.Core/Docs/CoderSettings汇总.md @@ -0,0 +1,254 @@ +# űԻܱ + +> ĵ˹е `TemplateTrackCoderSettings``TemplateSiteCoderSettings` `ProgramTrackCoderSettings` á + +--- + +## ؼ˵ + +| | ˵ | +|------|------| +| **priority** | ȼֵԽű˳Խǰ | +| **useVerb** | жΪ true ʱ templateString | +| **blockVerb** | Ϊ true useVerb ͨڴ priority Ľűټж | +| **templateString** | ɵĽűģ壬֧ `${}` ﷨ | +| **siteFields** | վֶͶ | +| **trackFields** | ·ֶͶ | +| **planFields** | ƻֶͶ | + +--- + +## ִ˵ + +1. **priority ӴС** μÿ CoderSettings +2. **useVerb** Ϊ true **templateString** ű +3. **blockVerb** Ϊ true useVerb ͨ **ֹȼűִ** +4. ProgramTrackCoderSettings ʹԶ `ITrackCoder` ɽű + +--- + +## һTemplateTrackCoderSettings·ű + +### 1. MultiWheelLifterCar.cs - ֶ + +| Priority | useVerb | blockVerb | templateString | ˵ | +|----------|---------|-----------|----------------|------| +| 30 | `track.SleepTime!=0` | false | `agv.Wait();agv.Sleep(${track.SleepTime});agv.Wait();` | · | +| 30 | `track.TrayTarget!=0` | false | `agv.Wait();agv.TrayControl(${track.TrayTarget});agv.Wait();` | ̿ | +| 27 | `track.LidarArea != -2` | - | `agv.Queue(()=>{},()=>{ agv.SwitchLidarArea(${track.LidarArea}); });` | л | +| 20 | () | - | `agv.Queue(()=>{},()=>{ agv.ChangeAvoidanceDistance(${track.StopDistance},${track.SlowDistance}); });` | ıϾ | +| 20 | `track.IOArea != -1` | - | `agv.Queue(()=>{},()=>{ agv.SwitchIoArea(${track.IOArea}); });` | лIO | +| 20 | `dst.ChangeAvoidanceParam==true` | - | `agv.Queue(()=>{},()=>{ agv.ChangeAvoidanceParam(${dst.CarLength},${dst.CarWidth},${dst.CarCenterX},${dst.CarCenterY}); });` | лϳߴ | +| 20 | `track.BiasAlarmThresh >0 \|\| track.DthAlarmThresh > 0` | - | `agv.Queue(()=>{},()=>{ agv.ChangeTrackingErrThresh(${track.BiasAlarmThresh},${track.DthAlarmThresh}); });` | ĸֵ | +| 19 | `dst.tag>0 && src.tag>0` | true | `agv.QrGo(${src.x},${src.y},${src.id},${src.tag},${dst.x},${dst.y},${dst.id},${dst.tag},${track.id},...);` | ά뵼 | + +--- + +### 2. Kiva.cs - Kiva + +| Priority | useVerb | blockVerb | templateString | ˵ | +|----------|---------|-----------|----------------|------| +| 30 | `dst.tag>0 && src.tag>0` | true | `agv.QrGo(...);` | ά뵼 | +| 22 | `src.Shelf && plan.curSeg==1` | true | `agv.LeaveShelf(...);` | 뿪 | +| 20 | `plan.action=='fetch' && dst.Shelf && plan.curSeg==plan.segN-2` | true | `agv.Fetch(...);` | ȡ | +| 20 | `plan.action=='put' && dst.Shelf && plan.curSeg==plan.segN-2` | true | `agv.Put(...);` | Ż | +| 20 | () | - | `agv.Queue(()=>{},()=>{ agv.ChangeAvoidanceDistance(...); });` | ıϾ | +| 20 | () | - | `agv.Queue(()=>{},()=>{ agv.ChangeAvoidanceParam(${dst.CarLength},${dst.CarWidth}); });` | лϳߴ | +| 20 | `track.IOArea != -1` | - | `agv.Queue(()=>{},()=>{ agv.SwitchIoArea(${track.IOArea}); });` | лIO | +| 20 | `track.BiasAlarmThresh >0 \|\| track.DthAlarmThresh > 0` | - | `agv.Queue(()=>{},()=>{ agv.ChangeTrackingErrThresh(...); });` | ĸֵ | +| 17 | `track.LidarArea != -2` | - | `agv.Queue(()=>{},()=>{ agv.SwitchLidarArea(${track.LidarArea}); });` | л | +| 10 | `track.CalibrateWheelEncoder && track.ReverseDst != dst.id` | true | `agv.CalibrateWheelEncoder(...);` | 궨̼ | + +--- + +### 3. Forklift.cs - 泵 + +| Priority | useVerb | blockVerb | templateString | ˵ | +|----------|---------|-----------|----------------|------| +| 22 | `src.Shelf` | true | `agv.LeaveShelf(...);agv.Wait();` | 뿪 | +| 20 | `track.LidarArea != -2` | - | `agv.Queue(()=>{},()=>{ agv.SwitchLidarArea(${track.LidarArea}); });` | л | +| 20 | `track.IOArea != -1` | - | `agv.Queue(()=>{},()=>{ agv.SwitchIoArea(${track.IOArea}); });` | лIO | +| 20 | `dst.CarLength != -1 && dst.CarWidth != -1` | - | `agv.Queue(()=>{},()=>{ agv.ChangeAvoidanceParam(${dst.CarLength},${dst.CarWidth}); });` | лϳߴ | +| 20 | `plan.action=='fetch' && dst.Shelf` | true | `agv.Wait();agv.Fetch(...);agv.Wait();` | ȡ | +| 20 | `plan.action=='put' && dst.Shelf` | true | `agv.Wait();agv.Put(...);agv.Wait();` | Ż | +| 20 | `track.BiasAlarmThresh >0 \|\| track.DthAlarmThresh > 0` | - | `agv.Queue(()=>{},()=>{ agv.ChangeTrackingErrThresh(...); });` | ĸֵ | + +--- + +### 4. MultiWheelForkLifter.cs - ֲ泵 + +| Priority | useVerb | blockVerb | templateString | ˵ | +|----------|---------|-----------|----------------|------| +| 20 | `plan.action=='fetch' && dst.Shelf && plan.curSeg==plan.segN-2` | true | `agv.Wait();agv.Fetch(...);agv.Wait();` | ȡ | +| 20 | `plan.action=='put' && dst.Shelf && plan.curSeg==plan.segN-2` | true | `agv.Wait();agv.Put(...);agv.Wait();` | Ż | + +--- + +## TemplateSiteCoderSettingsվű + +### 1. Kiva.cs + +| Priority | useVerb | blockVerb | templateString | ˵ | +|----------|---------|-----------|----------------|------| +| 25 | `plan.action=='fetch' && plan.segN == 1 && dst.Shelf` | true | `agv.FetchInPlace(...);agv.Wait();` | ԭȡ | + +### 2. Forklift.cs + +| Priority | useVerb | blockVerb | templateString | ˵ | +|----------|---------|-----------|----------------|------| +| 25 | `plan.action=='fetch' && plan.segN==1 && dst.Shelf` | true | `agv.FetchInPlace(...);agv.Wait();` | ԭȡ | + +### 3. ArmCar.cs - е۳ + +| Priority | useVerb | blockVerb | templateString | ˵ | +|----------|---------|-----------|----------------|------| +| 5 | `plan.action=='pickFull' && plan.curSeg==plan.segN-1` | true | `agv.Wait();agv.PickFull("${dst.name}");agv.Wait();` | ȡ | +| 5 | `plan.action=='pickEmpty' && plan.curSeg==plan.segN-1` | true | `agv.Wait();agv.PickEmpty("${dst.name}");agv.Wait();` | ȡ | +| 5 | `plan.action=='putFull' && plan.curSeg==plan.segN-1` | true | `agv.Wait();agv.PutFull("${dst.name}");agv.Wait();` | ̷Ż | +| 5 | `plan.action=='putEmpty' && plan.curSeg==plan.segN-1` | true | `agv.Wait();agv.PutEmpty("${dst.name}");agv.Wait();` | ̷Ż | +| 5 | `plan.action=='MoveArm' && plan.curSeg==plan.segN-1` | true | `agv.Wait();agv.MoveArm(${dst.MoveDirection});agv.Wait();` | ƶе | + +--- + +## ProgramTrackCoderSettings·ű + +| | Priority | Program | ˵ | +|------|----------|---------|------| +| MultiWheelLifterCar | 19 | `MagTrackCoder` | ŵ· | +| Kiva | 19 | `AllCarMagTrackCoder` | ŵ· | +| Kiva | 5 | `KivaCarTrackCoder` | Kivaת | + +--- + +## ġֶͶ + +### BasicCarFields +```csharp +public float MagSlowSpeed = 0; +public float MagFullSpeed = 0; +``` + +### BasicSiteFields +```csharp +public bool Shelf = false; +public float CarLength = -1; +public float CarWidth = -1; +public float CarCenterX = 0; +public float CarCenterY = 0; +public int tag = -1; +public int TagValue = -1;// ŵάֵrfidֵ +``` + +### BasicTrackFields +```csharp +public int IOArea = -1; +public int LidarArea = -2; +public float BiasAlarmThresh = -1; +public float DthAlarmThresh = -1; +public float Speed = 0.2f; +public bool Reverse = false; +public int ReverseDst = -1; +public bool SwitchBarrier = false; +public bool CalibrateWheelEncoder = false; +public float CarDirectionBias = 0; +public bool EnableCarAbsoluteDirection = false; +public float CarAbsoluteDirection = 0; +public float SlowDistance = -1; +public float StopDistance = -1; +``` + +### BasicPlanFields +```csharp +public string action = "/"; +public float CarLength = -1; +public float CarWidth = -1; +``` + +--- + +## 塢չֶ + +### MultiWheelLifterTrackFields (̳ BasicTrackFields) +```csharp +public int SleepTime = 0; +public float TrayTarget = 0; +``` + +### MultiWheelLifterSiteFields (̳ BasicSiteFields) +```csharp +public bool ChangeAvoidanceParam = false; +``` + +### KivaSiteFields (̳ BasicSiteFields) +```csharp +public int AngleTarget = 0; +public bool Turn = false; +public float FetchSpeed = 0; +public int FetchLidarArea = -2; +public int FetchIOArea = -1; +public bool FetchReverse = false; +public float FetchBlindMoveDist = 0; +public float FetchLiftDownTarget = -1; +public float FetchLiftUpTarget = -1; +public bool FetchUseQr = false; +public int FetchQrMode = -1; +public bool FetchIsUpQr = false; +public bool FetchUseDetector = false; +public int FetchDetector = 0; +public float FetchDetectWidth = -1; +public float FetchDetectDepth = -1; +public bool FetchLeaveSrcEarly = false; +public float FetchShieldObstacleDist = -1; +// ... Լ Put LeaveShelf ֶ +``` + +### KivaTrackFields (̳ BasicTrackFields) +```csharp +public int ManeuverDir = 0; +public int ForwardDst = 0; +public int ForwardObChooseDst = -2; +public float BlindMoveDist = 0; +public bool UseDetector = false; +public int DetectorMode = -1; +public float DetectWidth = -1; +public float DetectDepth = -1; +public bool LeaveSrcEarly = false; +public float ShieldObstacleDist = -1; +``` + +### KivaPlanFields (̳ BasicPlanFields) +```csharp +public bool reverse = false; +public int level = 0; +``` + +--- + +## ITrackCoder ӿ + +򻯽űҪʵ `ITrackCoder` ӿڣ + +```csharp +public interface ITrackCoder +{ + /// + /// ɽű + /// + /// ·ƻ + /// ǰ· + /// + /// յ + /// + /// Ƿɹ + bool Code(SegmentPlan plan, Track track, Site src, Site dst, int i); + + /// + /// Ƿֹű + /// + bool toBlock(); +} +``` + +--- + +*ĵʱ: 2024* diff --git a/StandardScene.Core/Docs/DEVELOPMENT_GUIDE.pdf b/StandardScene.Core/Docs/DEVELOPMENT_GUIDE.pdf new file mode 100644 index 0000000000000000000000000000000000000000..576601e0e05b360becf24553dec69c738afeac31 GIT binary patch literal 464515 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

    C0rbb1|`TN?{RSDVvA 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

    2QFfb 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∾X^1)dqPzF9}OSg|K9My`6l<5;R8?h%kbg-WjEx!8$OD%{}aRKOUP{5?}isP z^ukraDeK_xL>Ps^PP<8c*PjmkOZpXm7oPYC)BS-)FH^hf zF-S6>W&X6hI({MFM3UW%VMCFVr72LS7g^>1sqRcvF11uD>%rA>yOd$@%ASNg}b}I0*ui>D> zRJ_xVfc>iQJM#vW(7-9U_P@Jrz3^}Jx8CTRgu%|g(|=+7^*s{a%H#($^(x7U{XMql+m(?9y}>9dyqp|Ad%KH@L>e_3sf{~P*Artg*m zK@u)*(QnHkTGoKD=uY(Tx8)#6{AM}eiw$MWd?P6OZ8;>#zFQ81?`02lQCQT>UzP)A z(I3kJ|BvO6Nc(0vFc#G~RsU1fBlK@QSJKR1mO~cqo70*5A1#N-ng7~y2-TJT%W{yb z{#EqE{A#%*5Z)~Zq5p~HFz^avP~j>Fsb{WhV{5IaW%g@ip=}HaNkzkeNs0Mu$jS;y z!Ea=0t7nZ#!EdT%tH-OSW1*`DNg=9dZeVMONkvb^0Ljh{`PTs)Q}q%C%~2UX`=4FH z+0?@LFNjqagM)u){J^Zs1;^n@T89QWDTovX{)VR~o( z69dD*z{%xC@r(8A!_o7leQS3WOhd%-!G-Pp&4y0fW7F2SMa8le2*u3q#*USXOPj~S z*lhvD^2QR=o_YAZPN>= zT+zc!J}wdma-i)do9oO-K{VV?+pymqLntz9y}LgQ0m3Or?u;REi3zsm34FzaE)T+y zLhKr=LMnXm0q5Ng4U7o9jJdA~;>|}c0%8q4YrFkMlO-Ps+*LXE+xS5(*2k<^k{_7bk1TRG& z$W&VhuHa87d;VUw2TH*e&koHd=K5nqMUX1GY^BVnnK22l;?@wl2PiK)2KZSR=%1tYsyXzUM%(vY2r+fblN zXIEkUO#BObhw8kZLd|wHMad(5dDXs+<>{?Ms7(#AB!LX}WNdQs`TCZU)Jh--5)#FP z0;BZe5D?Rdux`(SO!<8&0Ynhu4gJ=^-_?Mu5|kwiqJA% z*JY0sHzaPl2qOc+(C~yFuY`Ack7M}yWT7gF@MaV93G5z%H1MR4G>zbAm4j)DYVy_^ zgRgbys>^v1kY87_zgsJ{L^jTm5MQc$y=p|wN~rY7P+W6whN%k$mV!pxN`vVs7JT`7$;00WkBV}TexgrQ8>-fnk zUXc(>N_~Ak(@s}y9{Ql#ME(cfq-eJ|a%^~oU~E$kT_j;vx4qu_)RNE@R6CJW)}E9S zUzkI-b1=dowPpqt@owexhdEQfD_s%@_d$|V+K9UDR%#5PC|^-xWxwXO5}ok^-Y&J`k)OaNHXtCAUE+N4Nw`S zL>f|&#yDOwjy8_lTR+H-O^bhGgo%J?TTfq}yJEgu2_N~CR7x*rIyUU{|VN4Hjw+oyCgcBwKM-aacQ+KG;c%BjBaEw}GiJ6csa(~Md z?jF$#LeP`_D02J*IlW<|f-%QfaWIg_-=R!*DUvlXYHWW>e!nIaEpRc0X8fFG2w6Gd zATI-+>FyP7J5-|Q(43K5J4`6;%U2VUc}e5as-W$mG_U@;Pt?q?T$OYC_OwVQsPfd` zLhHEjsFD{oAIExPLVZ~Tysi4WQl*%SJc(_IpiGg_ zX?BW)=hc=X_v#WMUB>805vQ{(B0%}SY%{VWLOU95a4J!T=5=-zVMa->WTgQo}#br)T2y1tAVJVZ2H_sm~9v8erwA8>JQ&&?2Dj@WxS8a`sBdwl_nGxOQ_ z$K=HL|4UBqd58*=iiVPo{{Nk;7#Qj4{!gwtadvWrpIv;t9ATWRD*OIYe2xxPa>Y2Cxuo__aW-a zuCM^+A3T?e80JTJ&~rQhG|>S)cZ(WEVbO44?E!w=0#v#^tROS2%grBtu)G5OaXVIM zk_yEh3GjmzfYD&ZcHoLHhx`?`^A(+Qe8%6%?t0fpX77V08Nii^VWPZ&OI!xDrw>4; zLeJ=>xdDe@D4%m6ntM|*3`X66U&VJrZGAOOh#UY-E@m4NGOpFVK{r~--o2!QDP z03`n1OXxLwal-|Z-vp;lVt(K$$`_#fxk?Qne>I`O&>^}0D7NHVDHUPj-6=tOuv>>E z^aDR71pjDIcdOjPqv&pl0l7s`8kHGhK7c1gVtBc4{U%W7he{PiWB{2>3+r$BTM8d~ z6dA)SW3>v`>RHBHkNV@dfq5NMMJ8J>6*ULd`wuXz8SA8SQ_W?w%->xzpo$)2PyS#*>GC` zHqrWM>JM+pz?@kGq@|5%2m%@LGQ2Cz1q=xth{*-2%k5FdErs z{Kj4<{_B;$=swgu7hb5Zl_Z#q7XAu&L;rHEhwIJ{&RvGElOWFrq_b!~AIa5+*$`Q`KSLJOm1inBLjYd;v+DW1xu?HfsK7`Z?SEXnvQ z3=zdmS_TW)E7S-U7l{_jfHMn1IK@Y5P4>o8WD^b+&9d!i)@j_xwMqg(VnjXpC1uHLhWejyt#-HsWc%nccfxkdVPIy^Hc^7 z8Hr13ls!Fr34SUqYg7bu{KMoNe1Jyy^n>p>jT=$ntU&gP(@_MH6SL{u#8+qEYa%n3 zi=*~9fjy-t5%arDc@k=}zEo?Giuxc^Vwig~H^Sq0(l)|>)50I|TEyf=zw%@KesV}) ze+^f0u()WAx!q+)`AJyohsTb+-9Z5BkY>JC+@&TysjrbF4E78U+K3PHXD#9puO>^d z72{fCPbbW78BA{W?QhY#4%-))P`pT>HkzMCJX18k1xiBN{E$yHVLb{xzrMertCTpf ze=a_92GaiA1HDz;?Yt6HK_mY5uz2bOp^r*}V`?swYgg#bvHc6K_3?6xFif!X8As!* z{cNLdqk9*(KW~3pTqgLobJtbg3zS>UG{e^%>W35#9d zS?LUfqT4-x|035zLgLRiJS-fbj!1+|?Ksg1*!LXr0KdDldo?QS8HbRV*dAQg(3N4lzVXxnY_t`K+9-LC_AwN4-U*9qC$m_#<9A<&r7dqU>%= zA-iHll47H`|MOw0CH#lHb`Nx9IOp+EL5I(J(b&Zr z-|nOM)ANx*RFZOixfhkPvEsOL((w?>&>*-+N2bZKi;YGP z4b6(W%@kLuxfYjK^2U8+!K*qzk*tz`xOke4ZTEUzalhpGZQB|}NfXOfbf z9gSpGY*xIy-mV*r%bb^wP*P`P?o?LTz5fmV=%xWf6<#){1b$X&*%K%>yhva`z9^lF zVWv=&k(hp_2)8uaG6?Pv1G=esDfGo*HuEBnxBv$g@_@2*3B!wMQ3=a#FfrLt$(N{$ z?epNEtZcq~1=Ez$R>_=6yzSd-NGsyr2+D04C(C{-FHIOSD2|e|JB%hOR%8%S2;G)F zSqJ5jj#*G83CLPChM_I6c62H_=C&9=5OZF$5q;wSrgyRj%o!lV|(WFaA$5qM!mOaRu88Y+;zKP+?! z0rEsGjw#Bdgp{3R#GY;G^5_*Sg6pRHk~Iax2#M#2q(^D_7+402^q=Sqkpi?AhVGJ! zt)yoYgXo@FfP)nFdnPUK>3Rg|y6z~6QRMw9G3O|`vI}XCWfv=veK|90Ko_VAxeTkEH7oVxudvrLlMA&VW+m}eVefA4MM~vReD5}pPy-< zn5=`2$;rnC@9)Res#6a>D4jaDR5dQZN2;A}Y9}09g9V2zf8W^~Sa)g?{{0nR{s(cG2Nvm zXiJZ%;lpfBcFabe`)T(Fe6^bv{k#CMlY9f2jBeOd(~adcRI!iUbZX-Hd95+Eom za2dr&{5)${XH;W<0gXWaW#OOZcIK~i4y!+P-A2zST5s-gEKCFvLrl)o*;3Gv7(8|| zr5cW%ZN`aDHZf`yfYo4QmdB?tUA|6b(N2+oqo;#yO4M1k(Fk^8{8S+F@?=64FPH9a zU6jj9tjL7!gJ9|}NzvWkanzuGXr+x!j#p0%t=_lx&*f(7&?so+ksP~?fm%kFOsVTI zTpwX^?xA>53~?}y!BBiX+Cn)kHfwi!>ZOQJXObYOSc@UOyDjH<&WgP@6i3(3bUNu7 zwoq04oW^20LInUy4Y*HwLz&q1(Fc3be6E)gAss*~Xdt9C1uZKPwRKs{G2Hf`V0zas z%C3Z=Hy*k~U=c4s6@>5W08ZLBCiA1fAK;*5bvO zSz?B4@9|ox9H_1C?pxe39Si;Bp&$$qWK)fo1oyOws;!*WmiShrcx+E`4q6Onf&GP_ z*tbKte$yPu&Y2c`2h7z-nwV$%Q%H=o*U3Z)n%kOgYD7-uX8aMq`17VqiQSD~0{hFJ z3Wmx0CZb7wnFfPZ4z)9o4HSDw$4#l&%-XE_n%l;#MD4Jm+Y^IC*)o%>k!^oE=qfs( zA^tKXYA$c;_v+5i>X;+oewLX>m9X`#E1&%#dDwe#^{tl&wq;9`#Fko*r;a!?vz}Q; zDfKfT-L!OZaefG1>PO+m1X+?-_zVy3s3L3oE9U9yDt0aD7Bh9u^FzjjSC;&B^3tbd?rOG?$AX;VCz=@~<~za~x^RwocdAED?bc{+X2f^h~zSFtfmJk}w0il(&;h~c438f4-D z?0AAu86HW@sa{5*qdrGT(qjpU>^X9qsOXfrIMDFSQ{yew?nZ8pFN77;q25g7QR^eL z(`reX<8(N3Zje0&I7!N?VAujv%0NT2G#~9EVSXXK;SlJ zNn6Q4DHJKPDzGfJs)~Xnz-~WbV-N)WAhx`Xz65gphI|)i|HU{O|kfeuH34qA6MfuA8^dOp)C~wah<1NuR$N{XL$~Z`#3Du&^$8~3XHE<0= z_n5O~@tD+ww2|!vdwt~PhsyXWD*JjA0@!T@hSZwgv>dvLo4@I)TUUW9VN;=3xr<ub7k=%k4{!M zWW-81zObGfeD)7ZWzM+|tY>T-b9p2)J<3b&DPTGFPN%^=g?+o2zB;t8RAdCaw5X-F zPr(SniAORvDxC%W@$I3vG?zbv7Swn1;Hz{@O-N&yU{w$>(pval-GH|Rz5>VZklMF| z)i}8s+J71AhGns221?_}yi;bBym-8lpc*1<1mb^A#zwzBMpZ~K>wpe;vRMo+MWWp2j+&d4+Nnv&UxE=7K( zFe2+g(?KXR49GDv0m10bg`|P~L5G`qG`+VYfonJVLQl`vnI{E!kYbm~ipDY$!*AYC z+Mxw6r-QHJNZ(Y}i@8WS5GjV}F@7#kH4k;WzP??5em+9FY`^iPM^VrM67PvyQa!Oc ziC7{U8DLKgcUmfHjL7=f4{6K8l^c+x$HZd!<2?Dmvd?taag9xN1HxhS8|mpodrpFX zD5fCq+q<`>Ku>Dz?Hy>=2CssZ=sm6;dk8+s9BI5Dung7rdmm*eHuQ6HEo)`|@Wh1U z^%k$e@cc@1lEiD;N>(LZCAB6~RM`q9tbVGTzB->DvmwR(G9Y!oPnUX?c4IZ!!M96e zb}ea!^U2@^h#kCUX^A?N*o&ztx1P-)MA)rq7D~nH! zcYC6_>*ZED@9P4A4kj{D&hr^xnb~!3!?$Dy81E8f)w@1ZRTRy)@#ADrD$Bq;`bi(@QGca#sd*vpWtSHX>dO1Qj~=f2Ux ze)bRJ<&C7LtdKnIpKFShhI8PR(NiueH)vq$GYnuC$IZ#P9A2Vd?ieDcn^zCz-csE4-k1$nG1HeCypJ|UutD~ij^|KIw&rX) zTB4g|KKWJ?#mLxZlY>Er_{xBYSX*mnt6*->>XHuj!1ZebW{iK4a}}=_kkxwrF)eqQ z(Y+_xtSi8#YU>{o>e-}&v2Ejb`S_7vJtE^-*HjScal4xUhBDp92BF+l8QrG#v~Q2@ zaV|cMg2Uw!hlbd}tnZ6>`SB^s0L9pl$FATAONY~?Yk)el`C#<(Ku>Q8j9}eg$2vdub?&Pgec1zH$nBgEBz$`T6TmSh>L0Vt9N4Tb3V`o{%D{d*N)Ddzm8kLZI9r=YG2cDxzT-FXtAB>o1yKVFfH_ z)97Yvt#wY%b7Uy)en$J8VESelbYEd!FQ2@DDunjb@9(Y|)=nd*#0b2=oI5)Og}s?H zv3m9J*?a&+WFde(w^~6ZZ%RB5(FMM*V%ZRA3EqP8v9mgNz9wNY_FNw>;E*SxZy_^ThMqsq@amF$9U0H4s>mHnXcD3FrkC+Txf#($!&!@ zXj12lgJKt#Cv^JSsE z`CbTx_Uibq!CbspdLZD1unLt^p7DgHtE6&#b)iw>OUt0`sL16$?miHoCE7?h^q}Z5 zMtwfC{w3?aRuX#=n@o4mZdM)}nqPQ#AvQE>exi&Y`=>6fyT>aneOq?tK0cWQSL^3r$@^y|QCD zh>%dZvf;aF$4S>~QLQ6NJp}EQdk#x3ORq2IE74AF!8kj!4DFW}zSg64R@VoxH4JUm z!)mYzV~-EZ_YRZ6Nf1+HJ?V_tR~2LbA7$ql<4e@7`G4ECaoV4KvGWPyAPM*a{5n&Z~6YJ|iw2EB0D z49t-eB;XMh$Fb+fTDC%(Hc${x=M#Ms@MHCffgj`%ds9he?Ns0?@8!Gw1$Q|o?cRY3X-$#R5 z=3fv8L=;g&%I*m|9#^*71RI?0y}!=gwlGkg{CHs;ljGeTdV4`8BD}9woe7_Qe|=qM ztSD;LJ3b5qqn!Cai&fR3tTJ&yb;e^z0%}zeW%QD^%~?5fSpIP2m_ekw5J|W9B~lY9 zo@hn5XpR)Yq+R*xUHG2_9 zWk&9(cL>@s9I9l6tz6EHaq`!7^Iw^Te^1?Rl78W1pQcMAZ_oKCd7jsqf9}R;NRz*X zJsZ(Iix#7@w`|A9koR@B=bLQi4|3muN1@h)6Y*)!yOO&Ky~ z%==E-xNHpX0WnlN(c?#S-DkL+%vWcqk*kWFgbHeP7q2HE{U#D`#I!B-j;)- zILCuU{BsiIg7haCr&w`c8uIE77^)v~vFYs(iTB301n!3pHH5TX^!NQYaV&m!Yk3&4 zUUnaIi_W<#KJKG=2rWFUH~y*HZr*O6na0$N&i7Myv|aD9m9ZNP#jS6pe-5>&uc&eS zbeH14Li_OnA<0ko6Lf6Qe!n80ykyanvSva8R`(xZl`oLWg2T)E+$k!DD=LMeJ2xEs z_&>EtA|fczQu8n7pBMD__ouM45VKdsy$#o!Eok9q_0oB^hv=Kz98ep)TwagYHtV^| zrsmYgVxR6CS6&vq1xb*2I~T2<(tZ6ZCy!7&;fm5$7hTUpp7)GZjxxb*Rf1}a&JkMZ}IeC7EF`~fdnaK%?qmIr%?|(y?v1r>?LE(u> zkh%}W6a5-UdT--p+S}K<%)KwV3^M(y^lsGBLh86o`YVJxdZ4#tJO==f&qAL-X(H89 zrYGaxtlNgHmCy9sItA>U<4cY?sk2DV&5_0~#|?Pp+bN6U2OlCnj7T`kc|eD3jn)#( zPVq2X#}aDXZIC~8uWVB*oVs^3%}?-x$n(EPtr%$)$S#Vhqw%YcOvF{M@%Ai>9d(Vr zKXNi=N+atD_lvx##ayc*=oqZjl=rqyO?Fsob@Ox|Bee=WNyOk=r4LC3SIfZA zq$-Vt414AtLxCuNcknAMRL}CKh}!e-)+bAmNq7_Iod~&zL610JBjrR87ssCnG(N}6 zrO$JlNeG5`Esf0z4@dAgL*S*Y|1qaTs-TE%Eb<&32NdM)M|nK=nJ ziN3*5suX-djL@wXlR~Frnqv-8;U$?4*6JwaONG!!-{+L|Z9$LjzwCvgYdDAH!LY#{ zBDH$`0_?}sUH^|MV)~C1{a4!p11l@j|D$bziJj@cr7Xq^#sh7!?W6~vx#0(L*OMeW zB16VaL`D=Rn;53v>?tfn2-V9QUr8 z34L3t`mv!)ud=!cU%I$j6&^TaqrvPtMBuW^yxPR9+Q0g-*8lUG6^anx&a5j$Qvpf-Pvm&Y!EN zxuFMv1`#|!5#Ugz+v7Xw|IuYm6!7jCkldSlHAUxb(rX83L_Kx=p#1wcx^a}=izT({Z4rsXE22y-43 zPhD#Ev09Zd7Dr5|Fu@nYB!Yo@23acv5Yxh9=l_y`LKS0Hed3B)8nKrjq;Brrn( zyrBU5%m9g{Ur7V}JRiX>@N$2jEDSas=v4u-Vb`lXRJ0CL%Mi<@Z?Z0966<>>^DVsc zoZsP08u~hz5Wo&AxH1OkT&v3~wN3=d4KyS!izUkkN8s($ztiLM{i3;lb^9EnykE4# znELtc{_!_49>WLn7%5-J10`1kbE-lA1#~Nz9B4+#S?tK9I!~#kufW6?+Yh8iu%aBE zH(3puaYFgcZa|DuC;+wrUA2g{e*7oz{~@5eM%!%~Ni z8U zG$&S6Oq)Z>U8malYvJ$-pSZCdh!IK>^PoX`L z4!ydq4BayHZ5@5!Ta<+p4i8{_=6NH(q0{V(a7fG>kdpUFy}?$IP{s>C1Ey8`1UsSN z)9R69;9Z zuyN4o%4;jDD{B69@~JWUZ*6ckjQ1$1X(_2_FfjAmi@B+hC{HTP3G+$1bY#0_EfU}0 zl41(xRu#o!=ZKh8G%Hsta-ZMdA7m=XyZY(HXss8F=ls=MFPNuk>fQpa$Z6joI@kQU zbAoLY40Dr^M`YBGW=JF-_vti;Qk~bTR^CBsZQ-h$`uaEh8GR!+^G;YT)ifK{ zthS0w%p=cIVYE8L?s`hi?ahom``}?QX;H0E-E98g!Th^gxj^OZhkwGn&`rc*%*TY| zAvSqI1p7n6RwGZyoTBrUbnYzWs-n>H+XCJ!QOgomFfCkorP5_k96QH6t&_(edtcqr z{Y6}LHsb11p_@a!&vm+RcMmQ(xwE6EJGSV&V8v@bOd$N~$-3#4tEF3X%v1$OoAl12 zvx%;;6ZpCGSmpb6Oz{&JA(OswKomLu!$7|7?%Hw4#9eic0hqUZitaf#}ASptg z0Im8erIA2(O!I2qpAVzTHO)~)5e@e)W>iPTFFy;BxgXIDTiGWsR7I#h?+AhOx;pT? zCng3~CR&E>S|R15Gi>Q4U+x!7`$DFxmyLcIU!7DMx4lu2qUfe8UsZW9z9b#}%tYH? zIbxXhrBSZ5l6#xQ1u(8jBWZBahJCI)4_{>b1}0xMm1eru8#;+P zrSE@SPBe0KN-!4E-AI>VnPlJdBApEMHMU*TmYBKuYXxm%^FmHu-h~?uZj=?%!L(R~ zamypmNh-~L_(x*$*O2a~PQ%!o_-YU7rA2bGG49qfqNYEW~FzA~lPaBGuWI^S|jtXxb5xT={@Z zrSv$}V~ZGMCYGGHmYokWug(s5mU^HmhgE9-_yOZgw{xA9|3RS6Or&`A)F?yZY^$FV zrI7(Vq6m`^pR*XvIu`%g0%hzD$5cOTU8}aTimMt<9avq(^p=Sr$uJxvr(7;ke=KF7 z=9h;kF+4R1XH>48gp)U|(KCM{?|58>rBBC9g`l+(J|`5eAwvp^{RQJEL@K{k6wyn872Y+`oYVG0h_}#(#BQA!K4kC=HZV`1K?PAY>CX!v8eT z8ytV8NMbu1ki#PofqNxJY32$7)IjAq<55Dx!5vhipzsAjgqJip7>xl{6sh?)Q_a-c zEwpj`hX8WuEP2^^D$UX9N~p(jI2zE!5nUNYyG1W>ZWc2e#2H7CVWi?;u6#cq41Wm2 z^^C2Rdx@PoHCAU(FEz45ZZBAqk~q-A_Be!#PLqhZ42aqQn(D&gLRw$&9=VK?mYv^L z{)-`>L8`nW4m&I;Xga>LLZ4v}t(p{QK+s-L`GMf!p^{1@I+_=nB&9ORq2}M6yLn!Z z_Z2<6m%TpxH*x^1_Xv_w#sEs}Y6T!f!-ED97;Sbrk`y(iuofKyjkpjwv>eoz{@4Zn zD=vGUbK_=3zkbATmG}dK@x#sD|SY-~&pk_i9n`R(_4y%xp zo#@QS_4%n@Qf9js7XN}fy1lnUyPmfjzKMlxeGDh~xPtV!zOlSMSNFw``lDm_OkWTY zur_o#M*8ep<9qUM=i)x|KD`4cK$0aCv+^{wXC!F~GirWd{0a>E)8O2&D zuo1{bv6F}LQ|j)FM!3d-yrzhNRJwQE7qimEU%{PI%pP>JP?lAfMwLQn~8Z<7K?R5IxndKX=m{|(@^PAL11uZ6ny4!Z^p znF%;SzCx1-_N+gh*O3SSK+DJ@Kms>=+Q?>#|Fgi(Tq>@Ybs|Mb4o9Z96jIE9Ts0%L z;G@eJgr_u_9-iGh9l3TUV!xwy88waeBDfqox3S~)=%0Pu=3Be3*0-(j-dUjZSzj;z zhUj3MilDdt<8NqcEVmp%yD2=)!*^ixHqXK*Mct-O2%|Ot%@ib8t4=sy3Ir)fMu z>-=UE6B1OggFJ~OB!>*W$^=$sfr4SpMurSkSO6{W*{i;8&q8SyAc>T*Xo7Ng8;! zNl*L@A(7v;{iaDq@bc`v&C`Ji)mFm$X`SX!mQGdya7m&RrC%6g+5oOM zvLO!vx$)+l8umsyK1{Vxt4(VK%S|_WOvVtwI?Q!aHY^FrE>aR2l1M?7q!f%qRh2SJ zNv-G%I3e47SzO`uz>u1cfyJp8F~iC$0N#gFxnY~7ukB#)Us#_r*?@&?9}>5OVuv-< zKp%&D{S-{xyKkeRGa{Ow^Uo5QNTAk@XY^+6iNs6 z(x@y)WSkEoF+NPxgf=F3wl1zht$lqY-B%wH&*N=Z@DnHfT4}ZT&~pF^d%IO^5Ag;PiicVrM%~(XFfsYZg5W`{dG$b= zxqeChl{}cqAF6?FEz%mf_G7)EOyfD6s0dWTeK4=Uq9YMOnF1_C(@bPU=9}I4>F47= z7RIzJTC#tvOY5o~pM8HuZDV14`JCAQ^bEa~F6v%-+x6qjB%PGM_xRwI`MF$t*niu6 z914ctw+<$cxq0OTrzs23#YpgiU+CS*zNz&J7j)Pzn*jNVMH5o7|bdSwmA>COi?8YZ0%E`vL=nJ_yw;@Xlp)YWwgH z>)Ol^us{KI-n^gDIN-*$Au+!?d8(cKjd#gS(5U#NCNp0`w1p-h9g@TrG zh~>;@Adp$CkkL4BmdjT=QRpTfv{4Sw&}n{gOh4eR=Y=i)VpUc8$or5bgYyM zS`~r+TeYP42Zqf$;aNb;g+=UCd$YofgrDxNN`hge!=@V&Ut(s^Lyt&HmxTHORI~Lx zcsUdoBR&gaae2M1;e8`c|6{*k&e0vxRAMsA!V>hJ@oI$LZ2IU!-k;~s?Klt?h2p!h z|2a(uuhv`g)vZ;d_qFNBnFs8D;@b>%>JrlJWSpiq_m2q9?uA@}j!zm?5-#qW#}Z_8 z3udaGsUj)H1gq6LqT>mUdoD!9VqPPKFRnb!7RsY$QIVmx|OK$1blO$53HR8mDqgOB-`@R?kM+3|(W6_~BW zHq*Aej!4efulPKnd#rg3E(F~3;VeMbOgF4HzF)x}ptzpFNE+kunVV+DS%S5y{T$jh z?DA032^^yeOB7Ke-t(-6idCKX{-n<;l%8y4cJy>z;=JEd?zar-KV#Atu_wU2LiJdF zhUKP-)5q%Wgz=kn*fYat;W`LIs|+!%*C{$H^{$sY24PU; z=DFY}nWP(Kj2I;_6)>vbAD~<3oC%0ZBa~zDNx0OOv!g ziW+g8KGcR8Qd+`+s3#68xGKX~^Wo%5T+Yw&^jLo5cK^zJ`s=H92&d(u?ei#?@pjgc{HVE2!-106*Tyz+bWP- zkLp37eD(Ybz~h_+v5ZQR!jn|`$S&ey@>hh$gYwUu`#W)#SCkj0uXJ>Ml@U{epAiI6!LwD!k_ihoDbsXxv{@5ajC`N(2>M

    G}An&E?6r3Z2del&Wm(5z0vz3F~DS|PQGk&M%Qfk3kN-)Cp zOk4}Kwm27o@y4>JVdr7@h)`ni38vNqU*)cM$X97G$>49bS_{thf*i0gFozo`6C+jf7jV_8vD!xn|=1w!}e{64|7#XY>3v zPpwH!PN|Dth;H=3R{A~JYLLz8^{|j}eQl$)>hfu0LbOhQO}dWI*!ZDB@4;_7yP-w+ z4~MTk@JSdxSqK)~Xz{7B(evJ-fMgd}u#~E>k?FDhJgApRwTo{NO77qwry*n&E>pEs z1o5xg;ZCTQoSd4PXmBd&+Z~2g_YJ5t5jNFGs6t>_C!vKNQO}y6@g1ETsWEJ-JXdC+ z&;iCoc01tKZyWa>Tm)@?XWXoCl-#+|qA%V_5&T-#Z2`7@*JHQjdF&1*_RHizbHDiZ zE${pMoEzE-V`*qP*Sp0aZFpp>d-sMJ=e?)LMcLkZ{V%C_?A+7!5&MS69%-NHk*eSK zPu+R42%`O3=Dzy((3;cVSUbNr(Fnalw8!x*Drk%(QEIz(%fa!075(B9#VrUwiii^8 zfc*8dI*qEOfGjVbM!EanYyxWh&ZX+2Jo2w5N<&w}W@N;#8x)S7h2k;H&AF!E|AE06QK5mtkcAv` z%$hoL(V}Nf+CqRgwd#blyhd<44$A$mF*<|e_8evd(;BLwfJUAOhCX?~SBc#dWA$3+ zu=p@x|0OhlH$0>Ci>DbQN6#Gh$k!Mq29)&#ZVLjmQyxSJ735Cd=S>Qf;{jZI>OHX$ zCZ&-;MFVyG&a=xbjK@}s1J_ZjnoYZO`83%?ZttuypJZ)wK7P{PECLOM020|OWx@bu zIUS1AloSjNPVD&CQNs%JKf(y2H`;xfdpK=-rYWE7Uxx(i9+EJ}1luo3$I;7K_9y3q z?=ANJ9}g>Kjh|Pd?6`JXPaEsTtFUf25m31VKYt117A#OihS5iE&WPDD30Va$)u__5 z8P-Np6$?%7`GPp-;uGbpJnszKr|an~P?nbN*S?T6pOMb@(z=TjcaFZD$5QYrS1kdT zB(6zcTSUgB+~UCsEFSWp#Dq|34FxEVnLs#h_l-`!%-Sn)bUaUmUELv3u|dIparqg)8zC;0K_(#{`V~l|IT68RG$W9* zdG#_*(I{<5;TI{1iu93*nm2qjQ$bQ~IFbxSY}zLYzKNuWbn3}5;*V24MV2X@5!cO+ z%HwVQ=X>|b^mnb6>#GjnAzZ)RF7fE)m>xb;9ZV94iTEfj4Hd=`k>*)HL?Yy*y5Z!6 z0obWgM;a80)Ul+@jD@#7!Zs-;k?cH_=;V#(a>t`0pXVx~HG9@C18;}x6`00P6>ol$ z{kQ!_0%8Ru>0@Od_<#$SJbD=1ZWr-(TH18AN-$BQ%0-DC0^|ki45huw?97A|-M+#F z6E`hvSuy{gjaGK-=)ON^%l>Uxb4zC2LA8FjwfCxckKbzvI@Lhx>$BOkAGA z!8o%NH`D!igOs{m$8Mnb{x`YvQBZc9vy_@&%&ay8pVU~Z*iA!i9(>gL<>MNS#$SoR z{K@^N1uMDm^+`dz@k`|1^VQ03V!2|nggqwyq81S)X)1+<>8n58fUV|Y`}>44e~0ba z7w7T~55r#XGlas)(Feap$=~FAen+OG6%=-4t!??>f4f!XVIjHcawUJ{ zF}LS62jkrt@o_ugnqlt_Kyp@%OxE*8m66TnMs$?z!GRW)nCgKQ7!NV2+-Av8PfvQ_ zsA7&=ysunco^wC#tS5S7@;S!=ScZt*^5kJbDMV?8LPXFVF8K1o!9NOzPb=oL4WB3r z3pp|b^&Ksgvz>%kOQ=ce=FQXUlGF(o9?VvT)(@G>r$)NJ?Bi(cXgaz*y~Dzr<1Vd# z#5!R6t^?k$kcSFqSB!V_q;Hrdfz*xvQNm>X4+-=CPi2<14`zT3yM9IEtO<`K@o7v! zRDu!Ot3!x+gqShVC`M9{K=^ov%4(W}C*(b9`o!iQsVw|EbidOd(+)n(ZLAG(@8OR9 z0_SC%q0-5^_T#4HWkG?t`%|8_+OM!`XJR?#c>~pz(WU(|-iBviXWZLi-HWw;pJuIh zt)Z}8b_xMrmkX0>+8G)P_G-=C#R_r*n151*S;FbLsP+6*@u5X=2&EZ~!PibN6AQMs zL7+hs`W;%+ zS++9}ofCl<$qG#&|G}C)s4v_J4J*E4l=V|suVUGFt6Wa3i!_E z^k3R&@Oxqd3V;WkFk4S0X86)`9Sa6z`vOwL>Fu-qR(~83Yy<#ZU_dZkPp4zMSG@xx zKnfr*d+3Zo`*knwIt-)&5wO8#z7>6Hzj*Np0-y%Y_s`(=z4bX090ugW0EBwd`C1tL z)qNlUzUTnjbbkBY!Ye@r7y#PM_A$Lh_Vqfm7dpTb9Zz9K7F<9&bcK~*TQNe*BUq%4=+~Ca2^4}K1fU2!O z5cveaEJ*32FRWjv3BN-qM{*ok?X-YnJP)SHpeWRu&(Hn|N@ob!4 z{*PUg+6dV}AXGQte;J6t(C`!?#N~mM3~)*}&M)jMnBA;C;;4ljXTPmxvn}iz3AIpp znctM$*^k*!1^F>^eZAU0A1=S&POs$Uw|gBO_IqRAE1&ba{CB=0Kg}=cH}(JWck=Ym=U2+;2{^gvGChpR%5EkJHZ(uXLz6%P>rz=@MO zz%KnWPS<>_!ruyAbs(pai=9xWgOS6-fm)JC$X`c;;=)VF|C0=cb_5H}f=$v&Lm?eO z81y%PWGsl8F6T^6miwgJ<5uu_&+@oq7z=099A{mTf^#B=q1y!k$7_an^aj+w6fCG| zP3#%izT;i#68U+$DfkMeNqPfrP4M}3P0+o`ZH8CHdrG$i&qaOc<=xI*M*H;13Stxg zGGBYSxyXcR+t#AT(K-yt1!ICfecN1=0Ndn#HxkqQ# ze5^0D{9)VvhW;vLO$ft~YT1AaM1Ywmy-Q31P}#7IsZ+<{Eo(rcVpeNeYYsXR+IhkH zZLaznh55cfrOiZg!y@Fz78XVHy7ko$$k<$5x)*GAZF>K zu?XU1z(fDX0NKl_0DCM1S=x`Aj*!;xQXcXWm-{}wcCdZakE{V`FhtjZk0Jz(6NaQR zfP@W9mks=$gLF2)*MTFV2t&-a?%~D2HY5t!;dud@2xuS#?Kgy<2vn$DLSNf{arWt) zoPkX1)nuFQTJGvO;D#7dq#4D!LkPeMoxO5SfokIXNc%M>r?n&NchgW8t=fd3*Kb zqsaR2x!!VD4Tdg#`%}kLN4J~rW%tZy>wB%1jCN7eIb)aPcg$CUqNxm9GtRcB6>p0- z-`MD+X72o+=~kYn{(a2d=KlFj+)dd>?Pufn{|^2R|LbqQ78dqL`e(2xg4DXp--nfEG zhPdW__%-;rSvQW%*I1oKJpAIz8+6<7m`1#-iRLEq`JvJMT^d>O=9r8|JheN%o39x+ z%(RlOjAmhK+i-FVZrqpMRu1o;%;x^x3s3LnxIltfZ%ghQK8r@Y1%fxkvDo7hnyyJ+ zeq;*J8uIF}8xEzngp+KHl&Bty{ip?fD0I zf`RTeVjE#_@lb&Jyfos%9vOf)?7o2IS@O_#KuJ!a0nuDQH-@{ihyr06b9o`V)C10# z2BLtVLy}ny&~!=0`6cGmfim|l=s zGAuC;|oYB0Wpz@LV;cR?xLDWWUts1y;u zi9{)(z$l#lc7vl5p2c9(O=c{&Ot-=QJ9N#%sdgty8!y5Pv~s7wq=HFMkYoiCRZf)Z za*A-O{HwTH(OEkpRpCasIJcU>r0rrXp-E*()|mP?BqJbGB#U$4YX5QEzZ-|&)$)LQ@)E+=HV=O4`dv1R(B+8f4B(W$9+2NzRI}6uZ!lh za@~&^_(v&N=`{M+Ig6p+VY3=CY`!b-n)-a@GweCZdba~Hy*NoPg@4j&A7_u{gkj(F z)`vJIync8j=}ZS4@)WPT(%7aO?;?ojWWo_`jkE~wVuoq$%qrvHz(R#3>$bakv>7mi zYE8hKl@f&VM(TV&h-+Si1{c32MS0#~RvCJ)TJ z?lqekdnN9=1a&@5fdIACO?)9DJ!5o1qlMB^s;ymJy+rCL5a0ZiFvwQ@*JPVYfYYeE zL4u}flykt*#s*5Ti?Y;9qLc^A=oa>r1v|peShht^1bD0=R%2MxGT{~BJZ%a4o?72C(iaosbyx%kE4pZETSJLc6Wbz;Yz>Q zzL)0H0x1gHzt(fo@#o%JUrU|Sf)d-@))jbc=h2ic3FZhUpaj36SU2t* z8p59Pk?m|aQW%%`+J}}t1m=K@>w`aFK_8f9nz~AxmqRi$Bb~5B5q0NXUw<9otG#WS zIU*aRFMl%T5V-_F<71{?5STZ?!oZ8(bKNzT7xgr+ITn#|!XmN+SNy$Va*0Vsk@*2@ zRZPL(7n?zc>W~_zd^G4wEcX%V_BX_74ur*i&t4L`7YH~ zS6FUDV`Q*rSie%dK+9{LfMS7@eI|j4MEnym0hs=wu}T+;V{JBFOPHB}FRx%kS(|!x zFQxjK?o~%OP~^4J0aD$N>A+*rVBjo$`P;m|D-2n15EC^e@d>6%lG&BHgkq*L0V+VZVf z#mQ+2o|qyS-wLu?DEJsS7Ar&}M5?}Za!$mgV?OaUKb%vp+uL;?K3-0DJKOYT-hV5F zDQA5@9VQ>^x4xy0=i&E!yUX_I^BL-&n+Z5Hz8h!Kf8a$LSUE}Pt17~YLW%rFLUM`@ z;QDJXyxsEl)kJ?ejw))%z{HXwJ6mfozM|w?O&8{(mVeIo`%cdNicQ&v>|`iD+HqI^ zMO@TVbpxaFfR|SER^u@L&pbD+0&ln&bX+&9`D1@Auls2Hd76q`tJ~CO9Ph))kN0dl zzjx_4Z<~&f_by@4owt=whtY4fs?xvNb7bkgr{hS<`nyBl*%xHTnl(QFm~WY~_nWW2fqJ&!QYI&J20M*EZ=Rxb zxDyF4)U|WE6K8sBcFk%lKu`FbEuo`>PC{Fj<2UGZXT&aA zwq7_>rmX3T<;jF?z}|gc;riUFVRLbQY30yDCb!dMk%uE8GFS+JHtm4-^&5A$?*!;3AxEqgV` zsuYaBk2*_c7d@?uw7%novPpN~68Sue{awm?`Aen;zGA*seUCyivnRh)rxyLhufrWA z3CI^ic!W_3!}8I+iX*0w5pqu)t$aT+j|B1cPb*sEvxF{jzS0gm^VWgB{QB~t5?-bABud(B%_Hc_5n;d1x!vC>cMAZg%g;KthVO%P`ms;pLxFKkX% zEWacgY>W+0Xq0~Mg9PeZA<{jd=HklV=IOV(h_63h^M9flUHh17Rxd@Amiar*>q@6? z_~pId-p@FwJTN(Rzfn>(*EGy6*)Fy9HPLU}{!9tmemdX|VE&3%Tc5oTFp)zZ`Xz}e z&xkY(q9Ed{w8Uyw96usv&ck&4#d!X!+V^K;{?c}CF{Hm2ZC9bFh>0!;9lJk`+HemXPz+J4GY#NpT z34>7Ok4qFx=6w_kGf*%IkT8Ksu4m0Wk>yWZjD%rP;6Jg=P}qZ`70+7;a((W16GaN9 zgR+_+mlmC>c!l!%f`y0xF>e_R$GsgTDC&s0RlfXcNEe%wyT8tw!DYb!IMZaQ!Q=?! z)5FS#ofo(BL{9g&v>0Yb?4&<8^~eCwnD%aKtR*^J~I`r z)qBy~CRgw{G4Ao)TYmhd{^f&e;P7G4qy;v`4OSx;n;gn~faHCxyzQ zeBj@q{SxS55MV?h)Hi@a2Jg~|hWBj{(Pq2K*7)umh|50faE{gp!G5QcIxL0(4XU#f zOjw*K92UXqJMx4yB*JcgX=jKK9z0>(nlRP6)j;wqW+>)0NG}_CyE?8D^BO%#EOM876cm zw0E@om4wi!j3@#hMe^aAF*mB%+_dyUQVo0~NZX|V#&a@3T9L1BOP$+MSv!}EV_0fwXiT~fsO z-T=l?Aa?8DhBI&zs33#__d4b?%sLIa(mK&+J3@4#)WJ^W5WsxXmTdg4kNfRcqz9wOwl=wE?5$m9d z&8a2TR=I{ZthDVz_}-#()R>7O0ZG6H>GOd$KD>qE+!rrv&Cgxy{9<;@5PMihzMYo| zmiH(E3^nhFIkc!k05Y`9Yz=*6=K#EPd7qh9X$8LQW8RJ-b z11`CIVh?q>c7wgk`s@f$13n1qxa^KiZBg?pumVMFF(OP9ioym=OaKwpR8Kk(Y#tcy zU0=O~!~)habX#fhnhMuOftXb#<7Sh;*!b9vOZH;QRpO&Y=ZY+(vV3x79fi#*+8qc9 z;h@0a$)xvYFw&r~66z+xh6^)DBY#RICGITnD&#tL@!w;VR2_RRD=uv~!Xs#uR=lQS z9@+Ix7x&Jmu)7VOg+3Lx1J>Pl%;(H*t?BbRa1nWc1X>^mnlq1S6YP>5DDk9*XDlD^ z1oJZq86;6MB+_NdNfZV|pa9IlqMFgNM$A9NzaYtENf8y$St1lski0eO-?o;sPt7L1 zA)BK)y(@j++&k>sk^8wZe6vTBj-@xm`n>7b8HI0@0y=;^1bqIKqHj@pq&Onu3@n zXcZy>e0({!I!00!ZsL3aRXSwh0lINw$DP^=nPT`Hc8O)}QxLF=o8cB(6rgAy3RyId?f0FE?*8^g@6h&1-WBS1 z*di`COh#OoBMv9yyXYPSkOxOkb6-=N6;t>sz4O5oBGA1_#sgF_F9Nuf1B(^`rUgJt z;i;y+E8VX1rN_DJjh57U5k?j@uHlb0i)NdFM}>j9OBfQ@T!Aj>y{)wHuqmWBOnz+yv~XLb$_IPuQytSsJ|!gg2GpM3W4aN@ue=yPqxJkj_s z2ge;%>{V0RX$9KXe$AqUq{sfRPkGeE z^gtY6byS)@+3pfBs^5IX=$LY|=D#7sS@3`1s!Sp!3QI}AagH52mFUpAlN=T&swBb3j0NqP zbN*GwqKKO#9@BEG@;T>*esC5x1XV(6L(=Gk$x z+!^QP4U){rh>wylt74Z~$()cC11_mKBc&m`%Rm$0O_*?FIo|=Juj)qV`U-VDOdY@W z-z`l`g(Ts+YFgAD&RDOX=84SfJU#P7Y2)>1eMdYLP$v>!qy8}=Nc&n-q6K{x6L~fb zd3wT)i5Qc$6JL*gka~{asZ+BbRZqH8|2;swyZiKghxUVT4Ua%VcZOx>@+7drTg)VQ z4L$2_=XbIayE-zmwHv(@ObE-Cp_SjNN0G93BsrM81!HWQAGOFf8&V6K5^}4N?Ec!{ zUt&-DyjvR_vG;u&Bs=#WVB7wBsDiMw=z6~A%{n!g&;8!;R34k+*`F)Yev0<0_S}7# zh3g-iUavE{ANN@R0<`zXCX$m{W3oZ+hfZc9BAAQA2%|8*S$8YpR4?=Mv%`> z)Wt#P9%a|>r~L)ePrt36$R&ip2_1lDmO+7GYh;$H2`QwGlF&jJF8T*O5Obm7Y{2!P zWle~*VR}g5*JlmkZWrKgZIY3|VHv>0z(^z{E+oO6yp;mcW7TpVjN|t-;oOZGLwcRM z;@I-T@f&^%v{RgN+1+WpgqxhIu7mLA>Ijz4lS;_|1OWr*M@UH#XRz@;$5>YW;tAg6 zTmy=y_;9}*@hX+egg|m9$ST$U$!v^ZFPhFoWBes^t=P9xPx8jA8d`2pJ<}SddS+|y zf9*VHo|7+3JWyTyOs(q8w={jW~-stS3;jB+pJh)IOD zybtU3lkn*6`{Onqcel3pXn{HF(+=EyMc?t+Z`Dh)#cT6f#am}`&|yi4q3rV#>vy5i3Y1qwX+IW)F(m(5@B^6>$3lAH*(rkK@qM^Sc&SU8!H2&04J&OtNY81}i9~sU#Q+gy?ffJ((3N!mM z`p-pfEkCR8>?+G_QVpsL?Q)PJG|>L_snlcyzR*zw5nGUh<-(fdXQW#T+c8@8GP1j8 za~cVK+0oj1^5xkC%(V@}oH&a}n+xqWtk-^4ZO<}ZykIqqS5x+z-MY&`<>9zv>ZD!3 z)x#a+TzDB+Ryvo4+2OymADeez+I1cALbpwwe6GA6zsA664>b za`@yIWa#Wlk#FuY!^>Z4tM+9tKscq(pPQKel-7sC%DqTsZOsRCM&jGPlB1)m>bz5t z+~Rk4NP@0u9xGty|5$z7)I|L(pOpJ@3bh)9={IAzljUPuA$omH8TTYiIAv$Mv>sd$ zg&@aN?4>sfLq%j(fk};)y?qPWUEbQMT-@OIrzn^0!7g5z5G0G^yL(6Qi&HHt+3j_~2|UGf@pn&kAvMGbS8h z>g62Mkft!{2qSFx){q*}?@aV(E?S%V0HY38G{{gn@}%eK*pfc8(td}WNpGK<-wmd~ zBTOA?=mASi%8><3wV(NKlxB9sP5*0zchj>e_BqfLEdfMUD${l`g=fs?S*ST&pbWBu&IXy5sT!b?CmP#86r&g)#&;Gl}zt^t;b||(-~B?Lo_{HxnSgZ z(xfG9y544uMmX*Aeh(Od#C1Gr+a7Scl@qa;Nau4^6XGcHz(Br)EQ+c_f5^r_U?5Xl zsx3bwkMGiorJ&iWsQC?Xp8L}V$c%ree7SFns5{V1x{6zOqq~!rQ#R#{1PAq_HQ|n5jke%Rg)7Q&Ol(t)0ptS%H-e#T=T@Wkqt{-m@1z?C*Yp><1+ zW>R!+E#-JtN3$h#qKB$&or=u~as-U_H8G7PCX3}3g?-wFvuiL!L{m7CX-N&9rCb5%k{hL%BjzPkJ&5j;3lM`(sI}F!Le*L zZtMy4yo5o;hXWUyN1UL7ac%O>tQVO;d}U+q`<*`IVYg0RQPEPIlT&wpkCP|G*;2S7 zg`ZPZ+1{}GBKBo_k9VTe%GL1Speyge?Mcs{B+V8QfZzS3qCqa^RMIZq{`;rFCwAV+ zxAb-v2=;I>Q$MA4k%QM|T_OUhEX6m6bY^z{i8iWpik%B%>%QD7++)xpoXehD2by?5 zF$FStmRcn^_>BwrR0o}hRSGBB-*WCnBoQDdk|2N9LE&}rgdKV#sQ_GW(@S`bOP@N7H>QdB(~%j@7)+Y9W2*c<1|la3bj~;R&cpP|Av2 z`q++yFrG0usrN^bHu5e!@!H2fndA$ z9iIBP-e#g%Nd-VtG=wE?D5psPr7^h_3Yc&o<~_aq_g|qOkum z2!f;VJGBV3WBtV2v-JB#k4tt|&r^Ot4@ql`a_#f6^$Fu{00~Kb@XPi}GAJdlbHd0( z`tk5zW1Ap1hodMwxmPpnJ#*fCUSHd2054`z-N&W$&%bD7WhfnZKep4h<~n1y6m-#2 zTylY?m*d+R5ZiM(&}8EN>QLc`rsMR;mAs$I9Ofu_%^i_^MG(9 zdkRr#WtzWa#fEKo``@lw@#x+}f0wQ7;Q5_S>j6JjB{XB>G(b6OtHpLxI7bSSQ8S2K z9ljb2BncFRSEp^*sOP1Su3Q>v++D^P`im? z?Y=mBA5{ZP@TT>M=j`y1SZJv(n$PQB9qs7kQtlI~geLfXCHI}DqyIAbd&ew|O>&>$ z+55_jLotow+U`XzUp0%Fw?bYO`++xK_H^{n5mz%psPt9g$;je1&GL38uHHxSqwF45 zd{$bAqTqn?W!~m1+puze<874bp~9~BMEkqvW4#mR6Jg>(cw5r;iKnOs%yw|bi-Z~H zvQ0rxy}7WkcQcc9!3Z%2qT#}R0#5R;8S-Ioxop!&j%DXir{a1AYnLi@9NGBvP2&pf z8j4$elE3j8+0|EZ8XmX3xg$)wOa8?lNc{&HQ0DWZ&)QVX{GXrFLl~?2?5&V99`sy+ zE}#KT^~beJ*3z09jL|^s?=AZ8-Y>wtg%pHlt#kx8Uq|7_e~D4&(p@vsBywoP9%G7i z+2pIYF_SP8;9HFsp#o_M-xDcta$}c>#-x|AW1G?#v`V4nLDmgI{%z9xk$`G0#7xc! zpThX#*X+@U$ciIav(E%-Sh9IlB<_))}vr;Xnk=Vg#M z%{kfP&N{PAs3x8BtTq)a0IpIKiAN5I={O2hN2HLWZ;9H_rQ^wvTa!?Q#0LVMM&C)j zLmX>DeC0>6%N}V@tH@!utbqC4n>0`kP%*CoURWjr7c|3-bUY63`OnW>LyIM5OGpy> zS!^?!;yB6cJa%<}_&IC5#=Gq%UHBJ%KE6E(%!O0U=vQM{8se$(gPT9SIFvo`k(j9> zqluOF&6Ic*mEz<5KDb)@UJIyse{lHO%3ym=n^!V%T1F>rk}ION#tJB782Za*u;6Z{ zX|<40t(P+Sae@MV{CKg4yQ1I>a(i3)kMQ>mmf1*b=*N8YT{9)Egt1gMUfRTw9Sxt^ zi=R=jLB9Z2Y|4;|{!dhFj9j)yDb?~8p%(5WeME0RG0R z@PWktQrc+dTPXj`hEpoPx@xgl=pv^hpg$B+;RPFf-Ujr zv8M9_VRsLl@+GLbmM@GS3L#z+%GDR*OnGQ8gV^ua!+O|u+y(ip=69;27pV@XcBH0% zeiHXR_Ivn9QA=lW3l{r^eFD*Z*TJ(yjv6W@vkUs?VedpESjP!{kG@^KpU<`N`;5>Y z8m?XkzM=iT@wNRIJ`R335$E~Q?g*mgugzWQag1H5q5hOHr-K_vwuP`@)6fn9GeaD~t zGlz-A+`mc`y^$}8i#EhqC%|E+WEMKY|812&S4Uu-JLBRtfCE49CDH*2?Vaowwjun_ z1)>~h-ZFVics66L{RMq)VGq9Tmw&0@Ua?iRP`>|P!LI!O8`$;#6OYXOe_~q=68>L2 za`S)i$ZmVYHeEavQ|tDKV)}zV+M9vx(=pGt{8lDY!JezZ zBnnfWcm@z1mG%7xly7XY{}Yh>*pvf4#`Fp_39o;*gWN*O((Xgoy+F_^o}!`1+4N`J z9kH25_>ac>uN*nJQmSTX3b1oS8XONu#`#LY(|-`jU(9p*@rv$$;(RFJjHh7u?GlrO zs?2aBN1e-irK7>b!|)3SYhR;oS`te(0n13GF8Y^v0d2uAtEi~>xe|q6hi5W6N`ypz z_+wuEL>_Sp;4u?{RieMLepOXal2*K@ry7nga+o#|XO^SV8RYvCHutINyQt%%^?h|) zTzi`i>d=&$VR)yD>=lUG+>`B*JthSonyiHQ_KbHiKSV*J%V3X--!kbUB&L! zxdM!^w3(VGUo7@{d(sWy5a2$+tHAl*@iyhWTyU4dPh-Fv8z0VXezNooAV(AJK_>Sz zJ#5yam@EBv4JU~U2k?Ii!!GT1*`o!b<_V*azh3>_oZ#&Zu!0xGf=i>V>DqaNdV0^+ z2A%4@JM3f45#sUMJMY$ja>Ctwg&WBd^0xae>U;hOgb~379w(MMv^^8Dc_Ip-1PXxt zA-57CshzKdujneth+anL<$bG;eA9*9cyLm1-w4~%fZ?U3C%v75p!C_)}DKdhtrPY)DctaEjlj65&!9lVg} zfUe55w+cM`O~B{%ldLarpYz19h2TW}j9!Wb!`+O&zPdV167+dx@q>+zzP{`~iQ~4LLatKl;-21;5R4z`q`(t-Ltv$A!W|^u0ZN31fm-21r zbp$e3HT=&)iLb(bXz!t~xSq9?uMfb{gDnO2bvTXbKzL*vXtJ}2b#D;z$3MNn2trTi55ivfFY$B3&io%`Olm@{sjOZo^hQp&%L7V<`ZyAcsuSde6U66--6u4irw)D5O zrJy@=u5-ed5yioP8_w_IixCZybk2Z#_cUl-ZwL6!qZk5Kw6@G}J|GJ=b;4dl)9Sl* zB9SEj6f^yi`42{H--p&OHKAgyAAF2O^xu^li>!TI>PrHTt ztJh=+-8T=VSxn?K@V#4KlM`ClCT{EK`r~&t4gCg8is_FN(`d{pMp+&&(xrM05Av(Q zTa@<87hBDKtv%diXSVz#-9^+yfVnITGCQSE46eNa7!k#mf6Vg5#*klY3xI4xJ@+GY zuDE~Q{o&$l#m`GC26saz@#A^fXm|^4!Ivn256A+-`V|8_W%qD2Fj53VpWidx5H{eyppi~e~$ zu@5;O_`K5sN;=7ovAemsMd@$(*{A6BC7dj5Y|@}@_zvoyg;aKWDkAYY6MC1OKO+6; z7=}}%Mo-7^J&UEQAk$H-JRvK6l1NVMvgcO^DT87bC;uaT@)h27p}I?Y?0oxqk`r#= z{d@S{KIx1I(nCz&q#R>q17(S+l^habM~F9Y>h<_xI0p!Mu%9BkyN4n{-Ok(Gri6W8 z?53d5C#xw|-^JUrBjGh)>+|qChn3YPPuPa3uj2-+y$gE&e7{k9_PoFG+7Y*0dVUQ- zg;cI-b<}zrSr|dPp%BGYS;k`8ov!I=?PLMS5OCpI=*FhhawRuN{ap@Oyy= zqT8a+K_!TS7@b?adKlS4Hz5)tLO0;lIsF;GQHj(i5cO*d>$<1+8`P*gpslAEsQBvt z3kg=MxRChLB&wyBAqvk!Gr;DkHskQA-`yj`Tr+*-D zz=M(D3$QkjafES>@y^KkBC=2`t9$!}vD#NcuY(Tbe^kH_X=?=2#kKm|!ttVP_J zK>O=qM4=~{|LVUUzQ>?K5h8JkCzadjTr_{;& z&2)+swpN!*41-*j>=4C*J)fGeoq|O$0jj_s6A=@%$jZcmmrD_zxn7TdTa=!5seILh z+m3hJ6ZMnzO|fL z(|#12nbUm)c9>l6UnA^p+FwY~n{DYjYQ}Sb?b+9^-@z6mS_)SiT8unl11-RcX z-(kx$uiIFWHTn(j^K78c0T}!+<@vH%L*lvazX&q~E)xCl1YVr=biqKLz}qumD=hc? zBg-E_@#-F5v4vGnz1W3x-7r}nHHwy^{ovLs!4?j1z|JZ^Sj1U&TB0`7NEjC>AR zNqt@=$O7n~)63z2*J-fuO~1tJ#Wa-cQ3RvwX1dam8Z2<{^t81*P)W9Nb&(%_4!nn9 zyn+U50cz00OKD|*&w8O_z|EyJ`0lVFF5u%(CS>GNbE*#8D4E`RubI5;kpOb@p7 zGJNKJx;NZG_S!L=3w+9Sd_AX~#txz-%xyi0Sj;KP-OWK0S$^DIp=}ZJ-b*}xQTIBI zE#0`8Q$P3G%x>9x=uE=czlNJAL-F}Z+GbU0>*H}Fq|rD}raYkOC|FzF?FkMaT0Z7w zSKyQRSd$w*p*S&`!wH=TJJ%{e2A)=a|v$>{4egFAU z?BO^Aem6I#%}5Yy$IZyrOSe2aiO?UQ<9SZb*?Nb^*;2Q?t)e#ey^q^B9G=z8xDTIh zoxXkMUCkT}^GP!0InegBa8PDQ0G&ai&Q=x|o2YSO?!r&4STYN@4JKbVlLsVf=i6Zl0&t{TQd{5XQ}3eLm+%b{?|5a!Drg`=*`dV!u7YruKVOwwUatiH@f}PkRr2!#EXAl)^X_ zS%X#~fA-!K1rL9av?Dz{6;Y2NU0Q|OA(5XET0jANXTU~@~M8=w6sDAy`Dh5#>NS>DgPJTrrXmc94!TB+k&e=;!f zPA6#6MF+r$$$=>llBGjd+OSrN2^Y7Cjg_E!IBxyp8sK@Sot?X; z5Wkm#!CJWH1aUEs8sb7vUpPzn{Uo#;l*a&^BUH$01Mdc$#`_i)xaJNd`#HuCS%zHL?_LuQ|1FN6@u2oWfsP;@=B#@{$0Xetm1$ zBXKhRvie#3T$TqX$+NH|VJ{{;0;fAX0-^ny4sH&884^p|d=|kK5icg`zw3=f zSn&-=#O{V+VURwVv-%*7*jV4N+pUq~t#0K3b3(Xed;zZC^@W(s_1xQr$9=y^+_6l; zugih<68Yi;JbF3YYX9MUw5~@qc!HjbKy=Kkve~W z3j+!)D^VJT4&{%SYAqIzjXlTzwObE+Ecj{(k%{G-*6I{Gdlbz2E>VoCsU34s?GmL_ zdKH-xtHng@Xi^#tqiqBF2@MarE*85aIex#iUEt4FrQ}O?L2v(qenjf9g*4LIP$_ds z1eHXNBrCgThh}|D*8EG)T-bJ+2YCvg+|NCMfXq?s4tjdP%fbg|BRT`?H%=x4N-pe^ zso2y~&dQ-8{~lJia>O6(`kqbKO+C69v#^ADwxY_Rb}#&NMf#1uOgSfYx{K2oqaMz* z={)O2+|5mxOSFTfDI}Ceg&P-dKg7NzNA^hiBo*c&Da65rKMGO)gz;q(!W^oxu0u!i zww_1Nekr3+9@|(9{S-3d{U-e7Ro9hoOCwEhl*dHHFZtUXQ1Ew`&t3!PM17$FE99lXXq#&^22wm$Iab-NT%5AH z(D*1ea3Cg^v7;eMONZ3k(*n04NuB=IhO8=W zz~Xt4upR?ejdJn=bMdM(uRPu&2`^L>Oyr`mCR<+1$1RIK*ppC*t$HA`OO@ThJ3LgY z{3Uyymrn}{@N|V1Q^Z#yyUtmdVeBI#XB~|g|JBKmZw+0$xG>(W=o4!pb|E5q341hv z5o371ZUOY7^4$N_Oqc1(a9SNtwltY*QR$6mwsh@8awTVZcd^K0rqdXZaA@F zj`YX8)KW@{6`qO(sY49y?qiR}HzEIC-EaiC%!PRw1b2@WIcMar^N;1HDr-$mOqjU` z!41JTHc#_^gQBM6ER9BUoF8GuWf`E9FdKi)8CpDX_tc4IwF%TJFe}+SnTT{x8VUEQ zkhGDuzKxxc+ao$I?t&LL#LCAZU@l8IE{D0S*z%iCdENpo?l=4TO5W_sySc`jhh;UN zb+p@$xVV~P1Ymw2pen0@49V(&Vvp|o>XkhPUW00-=tBd%g^Zh-Xmx1gEb<_0R(ic+>D&Q?Xyq-0A#Lo+NyO4 zfLE>vn5y;)YZT2N?@nz`+CSX(@;!UmtavQCH5z2q8+rmDn;uSrXB*bcSpF71EAGqM zkOhmP(zmgZr=pbb{M+%`cyKeOa-MQ+>&Ut=Xl*oGKby<9q8xo_?^=t(b1#UR|8W=b3*K$|fd?@*+gF zdd=B|o;YrdL7`1n?&m+|rGyG>^dp;6uz~QJzo<3HWfWD zXghYZ_SZ+tBRW83y5pR<)K3<8=OuPtE+TD|p7HWDR9p!~uEP!8fNem#S^Z6(-|^-H zd`+I?h7Z)v!R>!ow)+&&M@s z0Q6tWM9#|?XMqSoZ4Y`@;j8L2xQet8=yp@5XCcwH$@dHib=%)h02uO12#W~&Z{MsP zCVDdS`ZF}z-GnArl#)5$L_bGAk1ziDZ?Vv`6xlyqt}HE8rY)_QveUisfyw=|Y(qUx zj0Jf5=sq5lA6`En9G>jlwuG~&y>j>XoY{gTjJ$+#7b0iKXlC%hBHaE*npJyMtd@UL zssnz)h4dM-r6qqtC=-Rd6DLDK4$;B?+`IFh-0+THXaFKNjFhL~%>M!Y zu-N@`puoiQ1*h=P_M`Z+n;r5AXp(>234EpSHnihgG_JUF!Gxuy7%=1D)knDaW)Jar zBas`<1tr_tGFy`_Xv%QS?ji76?# z2x+QH--Vi&MnHH{YQ~eB$ zslI?4*?kzOBFL;7@SKpmq(nM%% z6HP3J{F;k3)c`sl?dOV}qFqPjL|zBSG=A75-nKF0s7Fjx7hO5hYyu`wLqJUb`ISQG z_ENGrcfc*hS^mr<)SHC>j28#zcinV8DBAW(Y2H&BZjG39s=!917oibD^HKOevI^l( zEsrM2>MfNW?+-{dh_>U8S?&0|^VG>NaxQ!JkoJX0*8x%zYEjQoj5EswAT!lv-z>hW z3VT3+M=}X>-VXH{8oBrL$cH(naPFKVW`{zOb5a}1W?kzRU=7){xTb6Qe--SI;Jps^ zt#C1-gwKuH@W#w}ag*Y8)rY`uWpbY|H7A(*8ZA*7j06hEM2N~C8Xd_O#Et%EF zDUK{&GP}BFDYgU4l-x?5t8p1S3{cdvA37Uy!{^QJh(TpocUs~cOW)>8Gr206=N~ zZI~mO1DJmtTC5+g%*(@NWcqEN@zViaY&+eL13bBb;!O!1&+WncP;%z<43)46V;?PiYfZD67M#&UHJkc=a#(We3+= z?REj_JM7?lLx%CHV3;fmss6C(e~kuK)p+3lz;61bw0R`r)lju=yZot9neL? z{Q3?;#_u>KFN6hA2lR!3C?PtLNn`!XJ}hVm7s{qO=S&dS(IH66RUPX)xg*~?s8dbR zBjIq_e>65_Dcj~jw)8+vZE5HeSI%cX5_Op(LYexK!(f$t|I!vFc8*;6C zF2=Rhi)Jdp=d$n+h5O#{CuYRX;amuo-egZ1xQUbUVd8*&0txA}_Q>-THweNDpDHj* zK=j}C7Z19fxu-+ei(BK+LUh_U`B0G?Zk&z{8mCc${!_^~LI@ln5N@Mqdid=g7rFGc zwzCHjzSA>owaro!1MNSQn2N$lm$qg_!&PlJ3akU7qx>hw2V;vFhioj|(7e#Jf_@M- zPu>FdU0@A^p=SiyvI;$E-3>E%Y{>`U2^7?aDsbEOkFk)!By`l|Ma{?Og&liin!Cod zQ!9G*O!o)3D`g%2U;Yu+e-d(f!gTOy=;A`(ob*)f``)ZApC8MOJMtBrYm*5VeV}y6 z30Ja1#E z`(DmCnC|c9WrgRk&>!r{g?L^iMJ;v$0^KaxMQ52FRRr*J3a;KK2;iy5b2zs{gEXyBm(#lnNQob4GJ+nrnjo}0wII0d3 zq;P`DKQ-d_LKfRh=x>aeLrt^fH4}tcs7tVDjqDa3XnMZ>BtX3@WI=2G`d{Dtt~A%a zZJvPh7JI0cH`kPk=Kgu)3%5sre(pok5YqUiV=ha@9pd=)J-N2{rPhBw87F&BE);4$ z1moHmP0hIqz%%Ibt795=&4_j(vjA*+V;4j0ilK7X{|+)nYfur`jBnCOXS-M}2Y0K> zRj!UK`R-QJ5<}WA0)|^a#e297X$%d|9iqi<`lk5VbPsuQ#_C zz;pIs_~CYUu(1X2xcg*qOzux=a<3aK2k&a5E&Z>zg%6W@IUXJZ205I=+5xqCxH8md zeDQioE>kfE7wc}+px5Fnq`Oy-QtnRAZ-w2mjb?r;#$N-L9X>iI@<&Nv0GU(rT1rs zaF0pV$FJVS6}Eag8Dam|MjJ332L5BI7W5pbP=%USb_dWc0mA);1eyiT6RgY?5#fUM zhW#xz+5>4k3YT!am~_^L?+Cvs5vRY?GQU4A#X=xlmF#}h4q!^R6K)mxt=rHZ-9bpT z$@0n{ivDu0s;g-_1!Rc@Bd`!$OCi@1nW- zILi*0HrjvJt+~9q6#q@a`$!x$XpBqNx;DV%f!qJh`Se3bIzOZE>*oFDTJS11{`ief z#ZI^u!o3c`|1gIC<&x8mIKY?P$s6bD=%jiBvH?eKj z#o&+A6+f}*)zuy~7F$%VHznpJbc`-UHKpljpL z!#E1muh@ivaLIN+e&biALOcMXsrUaC@_!|s_V8n^!RMgS(Vk^RwpHX}yAQIsH_SA6 z3<8DmH^eV@4*!UJ=EsX(Wp>Naw();I`wq&_#DcrB!TukidnydmWo}%vZ@q^2UA>!0f33%#lDO+#3sXLu~G)iT2vL<)>P}kwWkC6G&MQTTa-U=T(29Qj9nK zOMd3u34c?YtYpFRxace+xb5`I+|8J$TDew+o?5vEgQ>S-SOhgzx`JM1vdj|uP~(a& z21k;O%`YvhZ(<)OMi>UUeCgD_a7h$n15#S}4t7bWUP-%Ajo>~2o|$AGz?NUWv`h7% zuNTmWwK(y-Rw{c%o-?>zTVD5!JxU#xaIw0nXTh&0HL&e5DF_(VT#NILrcW!{AiE__ zrWP3mI|RQy!Tgt}7tI%SBS4lN^XK<`9?@SPtm)+^*W3&7mg^UK3^&S@ppt{0L^L0Iyq^-=jGjwknyj3;;F{sp zWDy@oyb})YR%^b^(U45UWXXzJ}3uBU>I5}4tG;ZfAN6UA6P=;@2;+Q#Mh}L$3G}dam4L! zN0Z%bTJ=(OEZj7i_d!nOI3C5^{E}dPwZ@lUE$P#%b8Y`nGOa8vBqA|1it--O|DFi&}qi(Iz8(R$o3kN6o%P_s)DD!3!hdzbUxDQj68;oB6 zDC2d~-&UKoTjt4`Vt?^J*+~LQqmEV@#wmXu5lGCJoH!v4&v+$xLg;>nrXj&q2`6=# zW0jQ3#oUV$iLyig5~m-mKm#$=v0U*s`4T)qC0Mnf5I#X8IM*^Vq(@ap@W8jNx$G6( z88ho0eC?xxrh^IJ6+7FixlC?EcJoU?pC^MVJ<1b5iD~*~#YXH$5FFrD@SemEk*_Sw zNpnGp0pUmJk5x?eZQYR4iLU0e`KGFV_d_dX0XzXnx4D2H(?G2Lr7+E6()v;F{2E~-@C$}~L%kQc0>gEYBx{5iD(|#r@iN8?af9iaX zpaJJuf{<5U-Zq#ji+5-7D4_keM=$|TybMR^$*sW8C*p#K>6PC@n)BZN5c(utW+dB2 zC1G+-EuU!M4;x$hkFvV{oh3S@oq_{!RDZ8TLV=-L{*4$|{e zvxJh7c^QtDZ%O$6E#oi`*{tqC5NCF_XmA#g;03Y!6Y-qb3V)7_d}IYu_qSM3a8YMwz%oKgG^aRgbCUAG)_#pF8ElwRnl zo*hMZq!DA(lX>(UoeI+E$9PunPhu*}1{REr=AnXiCrRPO)@FuH&K+`(p4^F@T@#fY zjpR0B3`0Bc?{PpeYGbk5+DG`y@h)bKYy{rI zgjW|xQZwB(7?m4+-v&=1GgY-C6hQkfrmOW6vrD4Lv6+NCWR42Y#2;sFRkkRjo(ZCX zS+Dd@D4lQ!e?=dE9-#os*NE1;rer6Bv#GN+PGzVBnT%*$``Nq`D6C9@qVF}EnvNAD z>_M7I_K~4wUd8)BF&=GQ%-i4l`M!x0Xi{=M5{XLQdYK-dyG&kv^2A17aSTHo2OJJV z5vNg7`;D9b@l}zO9Hl^lBs!`ko}ZbwCcb21klGzBm4@4i>I z;+_$MvNk6s+9^FwbSoAamc9uHvxsFc2E*ftq$sQ@`Zxb^(JS{-_F0{=-)QF2dwLa6 zTa71^3f4_zy6RGT@bWKYy7FDY`8l^xT|bg58W0e5EWA8aPOP@7$B!|^XmK24FV`WF zuz-tezT_!~qAafOv0Oe@3$cRqeb(b}xoUR?WE_dsV#f#<&z~0P>0vlr z%0eK1A_O3yjpT_;AV@|0)K(~8h^I(q&X`@rx&9yK8d$zM52{+ z7GeH-NBB;ptPrt=j#mrD{o$;i!{u!WVI$DcA|bs3NDA4ZukvnhQs zSMpKEEeUzkww!z<+BK-#9}-MBM;qrCGDhA081hW`Of)wu(5zeN0*0E?W4S=Mw#D1F z(mMWUruYlPKCdEFBR_L3ty4ssTog`CWixP>Hv8bz@bf=DgyLUaei*u59I1`(W>^`v z?hN<+1Im*O6aP6+f#ytmZ%fUvd3pc-OL{3?q&c&^@w1yGJ*iq?9@9quxqUwo2;LnL9sj*lBsNCsWB-_#RP`HY3Z%GbgG@ACBcE18yNvst zZe7K@bRXwhBxrF{iY*UIpx2MaOjEjWVp^YRP7k$aQ$`p<__?qBppP%~8|j>c(#kZ*AO%4l{|5D4jS`zqxYjRc@oOvaKxW zscaORZkv_K2agrHsyL9QM%6Ywx>9z{6U)l5zDQn1N_z1iHVR1^v8Vhm%HNB%`^YiwTY~e5$(}xeAt=| z19f>3ow{LcfuO1iHNT_Eg$pvJ>tVcP@<_AXBcUv~x}KSts;8u%$}i??JZ2L{sIV68 zceUv1NIC_D-Q~n~va!i>EZyG8iUboYU4y_TZPn-nso|Ws%<8Oxm>B31YAqTl!?gal zFGcF2n_R|>HZ74Lk=ag6{m8k@7)4JP2eBmKRk~!a1#`;5yL1>_u`_aqJP$eud6bOi zfduK&SY>bL(Y#sgTLT|N!j3N;6d zarY<1*cXjW0+w5hA|t`!+WS&P(zT0A6qMP`s1`bGQoGl`Ni(650E}=Y8mpC2E=`1o zhwt@uO65Q3Gj{olhe|1^)x>-lam+?3&TF}9B79`P&40#uF4yM8H>Gq6tb(*|n%HZ< zx{%a6H;8Lk+5A%Z?QQ8UJw`5E{+)ehLfY?zwx$*&`l-tK={%4iPV;*;eB{jHp?OTO zxPf|A??>*D5q=I+J!U`(|Dx1}m*fnLTJ=426u^P|<3n)XQc86}-hzsf;`3spcV_=E zM{s-hw^Bdrw-KV^&_X${oPakog)oh^t`N0qmgse(YzcLOmO@a~GuKY7C7t-Lng>;N z;y11STSvn%a6f9E7#xKP#tAXT9~$h23bz{f+hc_=RL$?sv8F~gSB+m*3C`w;C!}L{ zoR!|`30%8TsIq|)_AEH6M^3)RupR7hYwk~5)MI`4_08-KeXvs=>kCJ31X4t6c0kTS z4DujxiquP9(L<#}gL{FEZIh&yt&nR66!z2HrGQXfVTQ`)Eq7#{ntzvq*7s^Pg@jrN zGQ!^{<*n~tnEliHS-Ia$zQ=9Kxy4aK)fVNpjPgOhf< z=K2;Fj+TZdF9&<2mmjM$-Qokk=$B1K(V}vuw6!>e7Zz_)k_9Foz*(Xk74h+EAxPEB zwQA+RG)ytOZIskx4E~+aXdVv^?z9UjI*)8P&SjKokx|yTaUrbTFwmlB{NgSt zlVZhwn#e7QS@1bQF=hKXK~45vic*GCSM7j7))3Pz=aZZdH7jOZL&`yk9NE@tMv}GO zPOtsy6VeMw_lHX3)Ey!okLFU%VjCMx&l(oTyf14Ex$1v$XTEOjOE*uOc_=w4bmpfO zquM`T)&F0C_1RF0&=SjC*s*M&?RdMYW5zX$>oXIH;8^i}BtQne@tGN}@v_wU8>wKaJr z7sj-P6)2h~7-!(KO=?=6LRVf(F9f|XGx9z)3p81xn4)@cWfbdSMcDbfHn5&BvUbRQ zfs`YntAw_HXZ`91K{ER|~) z=9jPbEqSEiYdE!dEy`e%8IU($(1Tf}9O`_6Ly;HOrA60rVM9>$clVD+I)#|}+{&2~ z0ZP9|xovZ*7M6=!juC@Jlq!pf?0tW%VhhTrTg3&ET|tlLdCE z6Aa&F^pwG*F=P{4QlzSu@E|DLUvJeY;x-BufDcCwGi#9l2*$YDhWnV<(d1%ZNQD zE2AxWt&@hYY3f`mwl7fhc_8kX)2YJ|7GPa{GS zDO4#Qr1}I(i10e{TQtQdZfEItus-%~zmKe1YfDVDXgyBNsDlMTsDc=5f$nUz6mN|< z^)DxClFmed9!S(dX* zhAl=I-Fby5No&%{a;5)si{zUx?>1#iHhTz@=MYIymxvliD3`J-iIP{lQRoiP_ZX`v4qy$d-x~FmVR-Tt>i{oiA)9GdX+(yyM z^D=W-VFivN_+&L*+d#FfRT|X(N)Hj+ZOCLGz;c(U^{)5zk{jJ3L4+pQ3s*XIx-DIf zdV4S5+TIRu`I=1~o4UF#H#Lenc=^F{H)X7K73=i0>rQ5z9Lp5E6^1#-!Aumh?fEM9 zLLrtk&uN+;PSsMR$S?vKF&Kug6*Q9+MJ^yqG;eTPy+G*I62~EqB?V;wAz7nkkxw8m zr;47G!pR(xQ#MkOs*t`QVK5TUvwPRBT_aZ}6sbAZC6Y#!poKdu$s$R_vzBZGNRqGg zc#{ELK)wy1H8&ev8_64dSYYc!Pa7vOEh@um-bl4X*GQL!R3g4tmWe7q>(&EK9r$ZE zl?||=19re+$69wEq_v>$*LJRU{aMsJ(6CKyfW$4j)t ziHyJ|b(*3DlB5Nl=QX5vQH0P;@{*o08IgbRNj4x~@ADA$PFbYG9yb;F{7>OG@GUpr zZ-Sk07*4_7Y+}QaDM20)2Ky;gk zt)t~YDOEbsr2s_Q9vkW`T4bT~r`%>sjSyeSbFL&xjn+U-F`DC4+|2k! zryGH5&2$u-)3IclwFxDkThFkMHmv%w8;9CAu^8a78I&O zF;-GLUi8pek~9tHSZIY21o9fa%I6Icp5XP=)()MLTX)iog|bdxs}sficlb7JcKlAg zvNEI8KqQh`+uGE+abtC+dRz--q&IEigSRXnleA;$bkViwVAy19sl%i!Gdk_ejj!h` zh}8_|Hl1xbA(4nCXqNLf`)oSeN;C$^DuGw)xs9^OpF$qe$FSQJ^Yyyu@thPbs?s1B zj$%ckU$UyIR7OSKONrK2gR)jt6SUDNle}t?vP3eBVk)Gf00Pym7hix5Co1Bps31~; zQX@nn1l`ft!Sgm@pL4#YGaehK@-iJ|S1Zwx9@95eXpOpM#U04UIsGYH6>}e9*(`}@ zQe>=VKdL6}G-?i#PU!0DjB1cU!QyD1>4kn?r&q=4)ma5CS8HSSuNg|2gw3i88;@jkJvI*LWZDael>IQ|0k}-D!L~@vsi$e%TrdR{W@Gh@7dIH+p;|e+u;HykkaooIW+5wvdFKth$@BhR7s5F6-hxc%=cDQ#KPftB$5b+d(?=) zOY8$~XEy=0`Iq4PZuF(q8C4MwbNxKvJI+lV6Gdkj*1IYc zBYF^0HzE`i(0bm(BR{f32Femtnq&}3G66+MSdU+=X5t?WdIqD4P!X0`(-dX)%})G` zBJ{hxT9rm~JTF&D0h@0Jpj}IR6<#P_iw4*PZCT&CR<_o#*@{RYVi+tXgoJR|V$bb9 zAI)v9Uo+B;UfzqIE;;LE#kDiw!N)LO(`UsJj_=c+96(5IKwhSv*Lb8hA`LY(D2-o9 zk}RTW)}TGSSVPwl1fd87>Cc4PgIpxYvvs1(ZjcyduR^C*YX>)O+_la&NVP>6h63~>ZWQYs@GHIy!h1X3A9 zQmp2$7H$lBiHa^$rgd2{Yh|NJHkuVv{ctVQ)Rb;+ekWn*tRQoy!3&CYJAE9bD=JzP zmF5|Sl1zzoV+Jp~EfNkwum=voakv_8g>Bhrt$kDTwU)e|K7iJrJa%mTkrOA@_Z~Q~ zKD%bin&#%w;K_LJu3$zb?`|YOTr?BYXBCqn>9}i*)3KH)1s4)&+bVQ%mKmUJy6qb` z6j2JljPtx5vn(t7JVbmkLA!9d>7Xtx1N~cg1)sC^BJ5k2D){okyW-DudSx8hN$V zU^$J-O5Vc?@|KpCTS-A6X_gfLK_veR_z^r0?M|-|TTx*c^)*f5CWi6UdnV{LDyB$V zX+RF^IKv&q#@?9e(YJ3B+S)EBc%VM%v^#v<<~5wcB0s+t`M9;n_vcALXQaV;#UnFu zU8glxWRt2cv1SKAM_LWiyE;zS)YBv(>g#Hb3ktI*%4#e{A*(yJ)}nkHV}uiD=kq^fa%pJzc#6oshoh$_$Uo@lQ} z`qD6RWpXsNvrg0HTYsBe<%X(mWgG=&IW zw@6=*HD&RBge(rl977GF>I(B|+3*{J$|UP+4KkSR5JaynnYIkOLxsOunFBnsc zv%Yag>Sab7El!hbq|z9<>h8#%!uhj_%lR73=_Kd;vR@LLoj@?}VKhUePz#~7v$Rw6 zbBsZ+F;ou`s-mxPFS$@5A&d1fUuHcXmgG6fcBE2^n z3K`vKZr&s-w12xPK1Gv+@E+MKvY*m*NQFRPO=wN| zRW4oQ@>4GL(6XZ@?)IpZ4;x5MGE?<}Mue~9qK)r2ha+jvz__`ecl_Nfr9vNVOnchqn0Fv&pc=31i3 zqqDrE--d_^Ss_)C=P8Ee1kZL!XJVcmArEObRggTd(uVBznH2JWo#Vec>9E#pYRyP~ z-d|CX8F3WcYOQtDBj_k~#;41>>c^aVN9pR948Gkp_+C_*Alp6FvdC|(s7$mAx>y~O zjkPI?MkK@g&|c?iTUE~3(Lgff^(Ev@4Haa%jpSQMf}$1PVA^EE?~y5*6BK=~DgVuW zkIGi>^GTHH71&Q(obDLA;#_4<{-^Lu_$H)b1N1;L>shm&OUK*dwYA$-k>k3zcaIO& zxL)A6@wRRoqY!2&_H47I)=44k(&5%FW#-=2nn|Wh8GTPR%PUoUP!{=PvawZ{WX03V zD`Xud5CkF_%d2rANngDh-NcKYhJ?hu&q)KHrphemW_%yf)kHHoN|+=s8zQBsDxs)k zr71Y=c7kIglHM%RmApx?Z3K78WrBx^?yr>ok|s#`&s0NTp9!#Pv4`yEuE%4+Atx@l zCdd)umgI(HCL`{QZHpxm;-Sj!%4pQN%VDyyd<9!56=-aEiPoAqjV2c&`6`cyyb)0#bznis|Ew6XX2F86>t%Pt#%yKRs#dd63I|NOyIVpOC2atZ zG>$XPxD=l_oa(gi#zy^;K$XbHQanq<5$z9?J}(oJxc`lmv^%zwmv^L}stgj+M%&V_C-4v`-lw<)%*`n^26jn_p_(6`QK5T4a$U~Lr{YxfyC z7tl!~Mp>p$*>#Loj7k*naKsuRT}4)<_<$_(Ybh^_$PU)?qC`o8%2ZjJMo}W^_vk^6 z5<|LCp;X9(-l2wcZ^fN$0ZNc5CgHEKc}lcnB=40)h81|JSVlNyW(;a!n-k5X8tb-h ztqex|5k;xAlS#c&Klg&VSF}(?j=ho{WuffyF60Rc)q<=0OAd*CRE4|}!_q_@Qj-xf z5|)uJaS7yQYq)Q0m-HPX@3~ykH*13CQT7NTX;W^Xn%p6ZVvLH2Z)LAev7$`Vbkl*v zx<;L}8dg;kT%9GbO}tmq$vR1ws6asFO%Do{mVzxhXLk=X7nh!|Pt|j?rL$N7^2>eX}rv)b%RNLIcn> z3>zsetjYzN*D;cy%B`)ft${%6&B({quo@@$QPeUx64eEoyhKfyN1`n94^)MCL1rJJ zDcN8Rf_PtZbEdKJBt@q>8+`)bDoWg;3@h;zf%N*$HJLa^`WsrR-H1;ilJ_mpAr1P| z7H>B;@}-eb=Y#?Zj%@KZi{gD2Zsa=cI)NiTUlAd3ozHX|RWL|I*|jCfKU zMH39io9RF>hHQVNvM=f-!~484Q|aZnQ=)NfyHzQ2m&rAfhm2Ni^aMj8oz#8nO@%U@ zxN2qo75F*)Jyb%2bKid9lt=U0)_Meq85BPEC$fSA|yM-cVFF zXdfR`su>!QH0P1L36;CLP=~_6~)zq3@+Wx9k#-%q{$gljni?gtlp(rPer5AXfhUy#V#W`kHSjoJ8Nau4ia2gVk%Zu@M2h0 zNmJz|cD=!fVa;;do0a*W!cX99ZYrc;Gc;t)R+~omOi^gKQ>gAo~^E~tEst_k~E#Hl4;iIEzx*ZW%#?j8plg)R`jsyx*MzjFG%b?yh4itMI!Fr z|H(Evy@^`>-{2SS*qjzf!)oY+9%pP$(~iv>*VK1-y>we9L&rj))>fKiS&j!fDywV!xKpvPRvh(F^Mxy|E&BPO!Wz4>Th60oD6gNU0!A5p9yJI>$@!^Q6v- z%tm+2Kn?PuAa}(TS6t!|P18phku7U!(n+}rMGIGz1jEvkfD{J4YB$ZU!B}=j_+p>*pH^$&~Y<4i4SsJqpHil-M!(j#((=#y8 zbc2m;%$a|t&-^ppEH=#m&C-3&%o$DJ7m=BfSt<8S*{UjKrRv1H?{|Oe_kBO=#g8^O ztFSt#KLr5aCyw3;Nh}!_oV(7lP>y>kB+B`LN~Kk)3_a}oF7leR;Mop!c+s`6<-Y#4 zd`hxr?OK5YoW7l=UZpZ|d z=NQT}SX=w;C6CgVW$<*m5-TU2l^uV&4W^oGi_zPd^(4^?%yVbe`(*&@1&koH4>TRj zfckt_i-Q4JTv_$_=H;37$3BIClrk(t2qDI5NmBQ5+>nquA#?)Jay7~v;BstG8Um4N z4LbtMrqXbhVpV58Z2Ay8-8?_}57s|g|JveK!|IsMd_q7|)aylAJQ}L3oSYhstIm^@ zp%%%ZPA{S+QdJr=Q+*X{;Ck75@(On5z^$-%}PM^MDw z*$9_m%w7j`voNtxBc2R$pCRY%ZScnjF^C6SeXr|D@F< z!?Qm0=rc$6h|iSrUE5T~eq|QUCbEJGiKYW7UbtysWO1SDZ5`L*6QCzRI8e1_^GlMy%?7A&a1QGU=%Tr3j1-PZ@g%1Lgm-F zP^ZvKR(A=)AIo<_W}_? z^nH-J!ABhYp_!Sb*(+Q*d$Uskw|YXNDHEmS6vWtpCmW^&Ih;?Q`F@ zrO=v4G7&wFkgZ2GlzED;0PkZarhkNL`U4-^t%oE{Nb~&}7s^2&{b=rI{>u7C>klkH zpD(rcy;i*rlV%fQ%ku~%C+_nxFZi&nnd5%aGbR=8zw+WGkixoGf!`@b2>?BGd!(hTzUkscW8?buzqJ0=`l6+*z*;gkK3}iPx#>T%(HZr%{%?Pxxt+{OL=x2Y$uYcA0s`W<( zZ)p{+Wm8iu&U9&#bX`Ka7RKG_dcE0go|*g{^DI)6-kpNq9wh;jV8PYy!SgbFQLw_! zb+v7JCu&E5yK(x{8UpX9h^8QGeo}^LYH3MP?vl2Yw(r^g@{)r zB^MS~ze@(c0E(sm1$a+r2>eI6de;+4ZT1fYLr_nK+k4q_eb03QP13!DaRvAH zjg?Hj{+HID<(SR7wPbpJRnX}~bCwmQzR#G5!~-3gaaShIE%)dU*A8p@+^kQV&bzH`Xy2c-WEr^r39%7NxnCuzP(Ge z<9klF>YJ*~!d8%h$IFPck@8(Qb@b zz_`TjbkCX|emn4Cx>5zz)%bu5_N!j}EJq%>;$eg^o2ontfPRbcD9~?v+drRnU8k<< z<)*-Tu4d!}xXoxWacy4oez~+(Vq7`%UP#jL(VZO&S%ufXYWZwKB}L=)gWEzB)TmcEcRPp*<#4w= zJNwMej^I9L(pgr@iF_w;N51plAMpd0ORwcTzuljUqWt5lMShX08RV&2Mw zmeV~8rE{2SlWk)+ISS%!Z`%PGGw|#KFaDQOuva!zg#83Z%qkaudFXvJ!{?C&LX(VrCKc=Y;2$uJ=l3VMA=VrR>mV5=k$o?jEMLI z(7>&SFs+g%qwA{OoYShL3qtohj+sL_?*v}oxVB}kuJ&JeDyG#Z)2@fIK?>7fFIcZxFYhnEb!jf) zWc_yxGJgZ$f z>>!*pfb_&sm~?ldGeXu@C#ON9m@vtS8ktGAb=Y@#@bBN6UNb~6Vj3sYKLWh@+-hLc zuNG@Fxgm8GhyqZa36_i$2_qqAd$tEdZbvG5!k=$w?)3Iifl(kIsq8E_RP%8 z%(r*D8$sJ=%q0zJb27?T{>u9I)*s|=s%h$<{V<)%vIg+|2DPk4t<@?uN^j%?&$wt0 z+T5GAt^(j~m@DLMy&tHbFy{3sNB`PSe0Y8Rkz`O{Opu{=0{xM1PpeK8I;GE)7#H?0 z{gUx&)z`mf{kio=R{e1HFta*0H&wICHe*xGet%(V;p@*HS`Mkg2kEM(J@X(BH2(|~ zSWAZI0jOk*mcffx6ZcTz2H#4ai>k${t)4DT4C?w!2n z&R_p~>z}MITSM!%so>Ow>*ucDzMaiv$4`8uULWWytQiK8w%IYKoZ{xUoS*N~&x z^hwUkuN0gq;DMUFA&?C)qu!Ho;&3xtsezO=sHTj8!n>xy73R7{oHMCX%7x$ALD0FX z4oal8?LP0qau`L}PoJT-t)^rkoCS9&(41~5?$R5Mz=D>PT{D!7ClFguks!OmH<3Je z{qJ(LW;LHOndd*hUu&J~=!2_QZ|~gLId^WRE>q0YQfVfs1zKO4xpcB*pAeB*IqHEQ z@|Pz_6h~v|C@tL`--r)Ve3@UH{dx%THW~ED?bc2SF;VhV~>>2n`DJC!l z)uOx)3T#nDcMo*(+XhzMlY*U3ReexFwI#%6Oie!{!+OMCotb$!ozs-;z0AqWA#;h1 zfcvogVK3lBtEguHxIM(iOdiwG$?JRTl6BX5#hlWk<>9T?m2zehxH8td{PaUFzg)gp zJE*l<+vV-km*9w}f22z=JR_4ME5=xk??IFvYAcLkEjdWdM4ValZ>hft9uau zSs;o6nPvO_1#q6-1u-!mloAhygmLaBHo*uWfN(8o%)rG|tVqEgF2UF|_>l7l#`cKt zTXk^37Jh`K7zQ(@>+aMX>2SI+JNs0C6aH&Lxuhw>r5QOVH7XRMRO=E*Ya9oyZh)%o z**(PO5#=`KM69;mM38~-Z&94F5ZQN8KKJ{ZT=5~XE?QTuo7P?H-v0DK#(h7rBb%|T zv3YxOc)Q)suHU+qUA}fLEAL&b?_9ieNoDGdVC@gs>KowO50zq$zI-;)|A-qjiGzPH zNSVQq?0NAoOTnIL3i={QX)42E!A~FZ7ZMGN9k%8z6+yK{+ETE+x}bfK((C3&D+`5F za)Y+Xy4#R`PvCK)Wq8+5qX1&Wc_k<`C{_)H*j-4q7DPE|TFL)E#$W$u>nnNJ?ZCQZ zJ!5dR7iu-Mcm6zz4-SyG60R&RqKBWj^TadHpw0Ecpn)1E+W9B__HpKZWL&5FloNsO z(2XCRQIm9Y;?xNGnGeLyc85O(5<-OHb|?Z}ReC>?1IL8%0}sS)*b9KtdPccy*Oe}N zvS!Q0gH3wyy;JZakwFNhU@eeRD*UO>1U#U$%9R$LohBv?W}L1m-wAvYhI2Z^#lR7^ z3K5$^%$W)<7i#TB!}V}m1U7vLv8I=BvL^ie{{L;RfPk#ns^@v~H(F2b&%W)o*PeUx zd*A%lx28jIXY1mfn>W*^A6>B?URhg9yN&s$9-m)cPPOB_Gkxb|>T_g+5B|nKW~B~? zt;Fd}viK&aCF3#vgZQ2|wA90&^K7txwwrx1SZ-5JOzOy9^S# z2vQcf!BXf3%QGsv?JtJPj@#})E|y`XO^v$1)!apEDF%zTmW|yDzrUm+!vemirFe6i zE(byZ!vTy0^MSvKC_^@@PUmXckG8!&!`oJ;cKv#%RIPT- z6^osnjg5Z4^WwwLKm6EZomOwXx4nI{bMp;ynA0fp!)$LXLNx~69rxo$wtj@npX_Cw zXr1H}+z1L?}c6xwkY=k=nn0{rXFC%XfTUXc-K(e6s}ZoV)O{ zx|$a^*A+NO^7}CbE;+6$HCb(hsmwpir5)&NB6F z?%3(jJ~%iyxHsxiCXRNULjRw0(ii?cfh!_F^l`)*I>+yt3EAf@$C|Nr&Aeu6HJG-n z!s=mqxH6%D(I?I^%YPEMbHtqNk5Q~+`06-8zJM_gd{*Lw5Gl8A_;7bUDYoi0wTIdLH?c_BoOKvCotIdUti-D+m2^OVnRRTSwB z&nIE@c3E)AyqhLeo2C+|6@>{(jmmQ!4FCmn6VgZd;brQ8X)O-=H?0WSx%1 z4#p1Ej6ca?SQKMIp)B2M3}q93i+P`Nrq@hzr#noe&@ zyWbt0yVMR;G6iO|qXE#*7{ZT!{09q#YL=}hN~S-gFjtXLZJT=!wwcDMPBCzuQq{&P z3zKq;nq5Sb*_d+WxDD5FERatE3^H%obVe$3VJ}Qm?#LzS`&0Zh*K(9acSl!XFj4t^ z9X8#t<#bSDr;M(GB40A3Lv&duZ;Ch55T{F$h`}P9UT}A%V9#N&re1=*Sr^B3*K^6V ziYkdt=4TN`Laxm$ta!*@m`ALbl}5ADQD&D~P3xTL^479|Dq97?x!rbutKI9x=i-TM z;>5J>NF;GWK#Ht(C;aq~eBCE|SL(l63ifTFz^W?RPwFeEVy3{z-eLTj7e5{@Px)x3 z&4Xa62imjlywOhN5Msc#5z7MC$yBscphE1SP(p_b?n#JHrG>Gz2jlsD&B z`7@w4OrvE;J$h;5M+yu(9ml8KEl^}c41>xFT#lAP=J%-y2 z&}!kHWnr48_>tk=;r#qneD!Sp(8^I9&Y$v3Ijxh;sWb`Ip6mc`pZLE-{J`^=V3^j3rb2}j0%S8cYr~eG`K~Yt&lHDO z4i3Ik+3O0xFhC_`6OIW%jKp~1yE53>1;PSr#7RKPerI) zQ_l1(VzWWs?;Ig74R`Or*ho{?bQE={ZFdfa!?g3@WN(~DA4&EdfwE7CiB241+#jbj zhe?jfa^4R_=OHQByG7tHPXpC0~)>!GzgohUI1LWn;w0b!UA>B zBVPP|okZT8N6!OMzM|-}+*g^T)JW>Zp!DhsMP7QMkfL&nQ#&d_8hS1k#EWa+1>I#x zi`uC`%0uXL+lZ;`DCW`}*JD&ajJkB!TCpx0Z>O@XCn}`V=~)=}4hDlpuW|b2p6c3< zsN$ygambB7)XB^H+><2fkrKtx>&@Tz%Ddd)9g4Mn!HaKzu+1^R0128bl%|ku_6&P` zR^5cYOCf^zA^us&6|@Po!DndT=?}R9YIyN^5BODG#0Hyxr97RvIGE|dk3j0$w#(I8 zfg(phh@cZlm-{ds&0UNd+n4jFzhvfLUKsWiC!}}o^n)KhbIzeUR?Zli^xANwc{+w- zq^BO)NUM+1cJuvBavMWlbl0U|pHk6dX7o~COMJZAuSu39FpLN&BrxR6oWwQxQ$Qk2 zD989Ggs+mzlIs}1Y_#;2Ww>esh>--Ml%y381)X;2ei(9L+nmYuEG0I;gr!nMMpYz# z;=j*zvS+O|>zws)K5beNa~B+8U8ql2riEC)b>Tu`y>QCyPxLS+1dk^i{b-mmCb}O2 zrzc=2rw?VKlIf6J8FwJU#5<4BvVj}2U`1^%%xsF=h6ImsMzOu?#lKS?eP6JHv}OoF zeBJvwNJB>;41QLGe)|0^f8(C_I3r$ANR(qR zyt`!`n7>ygu1G*JN38rsUf~f-=lyGQR{j07hf?3o<2vD!B!y zI)&-fbjy}Gy>#xsM~<*y2J)rHn%-}iuj<>>=SoJ@z>bkEc|8L`gH_%LWIpkuO3;aHe=+R&sE`$B(5GxjK7d#=kS?8<;m3UD zy6=R3;1H=o3tN7UO!%TzvTD}Q+BegdosE_0h4#YAirN1{DoPQ%Tpp0Y8O7Am2{Z>M zOkz@fCZ7f7u;bJDdZ&BDd$<_`{Wh*B@ZRBl1G9}vfRlXe9p}pdc!w116QICKIyqNB z%{f#BMqM7i7+we%S9Zm7M5=VjkD+>EYU;NTV12|QA&At;hR+onqBx>LTed~>{L0iE z4ePvh(|X3-oLi3{T(d4NR|=MjL}Xb9Q_IWf;Phnqu)#i>Eu9c*Ke{zX7BD}AH=w3Qb3OlC8E2lI zWL1L1eATguD{acP_EB*r@>%g3uRoa)BeL!q z+c~#wyHZMCrZ+<>&mE+iTH?u=3>4XD1)_*!2J*I~H(dmrB_xPe5rFBP=i|N;w z*L8@q9jTFWyZ8O_7hQ=sv+)g((lB8m3;dyp?LYP&8NOFC_>D%JMVn3zwzsyJ>$YiM z3ijXm>4yx;`}c)ZRCvMd%$JZ85{qf!3N~AhH1vHDW<-YQc^pU-hK?;TV>WYQ(9=ez zQzAdGaIX0FcX=&cS`HkTB%T2wJ=`oZEvrxOi%Bx?w@(b@}g)0`F7T< zc7jWkU$|X(qEBH+H4net4PNosLtzP0fB<$DHyD>4V%W4lAj7wWOzZe%=D+&gzY}T* z^mm#2sK46@3-5FTbU`GVAtEq!La-DV3Z_Kb50KKIYBs-8+1=^q%?XiG$F1(Jl}r}o zj_0|iS98mH$a=~2!yn$)5NBe)T-eGFl39x;{RG++IYqYx`ooA%WLa} zk>b|>ZT&~57u{fYO+`N~1$(k3zJR!kO$}ZPg$$L}$z}_;S0VL0NVS5rDJ5ul@mt+s z)%3Ynp*ii&>;KvM8|zwlJe-8GY) ztl4Edislx3{a&|Qn0s*gKglqSokL*PB>#BeOi)CQ8lmZTfRrv$pTQ^#yk(%lf(OcN zIMa4^8NDlUfqTz*@yCQjuSS}akW1%|b`0f*UcZ}$q+Q#6lT*Lc%1~!pLRyYIyX?hr zWFJ;X|1pmo^<1~-N$cW%y^}Q*$}F|_(8fdkzPdYmaGFyL1`tQ&`Lleq+_#yV3p!pY}_YeNo|bZep`nKLB2I+SXFh8PS$MN%6G_^y86>9 zditstzdDSm@_bbMaD^jb+d(x+NG;n$>=9EwKjOuAbP#CRD#o6J7!CX^?+X0+SYJ{a zPS}2-%`H0t%hl*OGFDi^L5 zQ03roQ@~$Ze`o!PC9Qab$7I!hslTFiW2f)Aw?gbpGpnErO>-nNmu%W%p zLO;T4GeX7RU|!ta*{Z|V*2VLVkd6@Ii%?uejD{3pUPX+@(sQ^i!Xhl*jF@yrtl+Qa z=m3^$t1eqxrkmw8cn>wKUL}eejg@w zYq1k$y^jrsC577UIX^|e#dXp;w^@c$7k2kuhA_jNhlfbpzsoD_m3*H0u+fUR-RdvS z&mU|QiwC|fVkFkr4=(TQT)*Bu=$`OUC(7+n&T>|%-5SF$ALP>HmoV>ZkEWNM6M)N+ z&Ab^DUAh1gx(-qn%CHaA`t4NL2O2Gwm)5~xHq@NaSD5#F7)EM;{p0>^KmD-Nqka~fzec$7bmSKfC%q~?_WKa(*DG|&oVHr~96;&ATRw`TEQ4(?i9HOG_ z^GgwI-MDSxd`p_Kj-K^`^|JLg>y`Z#%-H>NgT2AV#{El67nW96?{|vD``2H&`pV+s z{W~ws+6~KHk?wGKs0iC1 zrV}#v6aL{4Q*!F3S@=aa(4mtCkQN~=Lz+QafHd|537B*u;aBq!qjkh=|3eEI z&dPp3LE3bqCdRdfRVfy|ns@ADk5szHe2}A^7!QCN#wYluT@UzR7fj8fMib;KXABPT z7rl6+u9IKCe*NyPFmS5zrP+-X#cT73T{oPG>xK($vQ49G`^Q!_M+^-13!!7VN!iu9 zIX4_OcY3{MeS5pmESyyv9e&RKNHu-(Qcd{$;mOv-+OaV17}F{*16ZJ7+YG6__yY97 z4!HsL3__^xy*9o6wGEzr#8RiqjVMhIOEc8a$BSl z1hGo62)bq1Y>wE8f1dY*tJbu2)l7E+yDH+6@Vxqb@ABoeo}LKMhtKwPA1&|pI>#$m zOq9qif3ip%iRL~IV8+1Ez<0g)GSFb1-T-^l!1SJgz5+&C3_t&CUi^(7tHs;voN1gDn-8VfE(OA_)U_cy`L0IPb*mxA4u;qv35Z$bxhbOaW3@(2#I2w@x87-HORCg{Et?0o=a zsl;LEgpPC5RJ$(|p&aUZcIxY-KdjQI+|3*$+Xn;0DwSL}t@!#^t-rLsl=rfij4jI+ zov~ZiOfgMo>XpjOe5ccD#WV2(x$KGfIEs#ksp?n(=7E)fhZZqY36O9|^24$4v_c|n z1N})U*#GcRlc0S<3U(h9#TDlNk227X_Clg?(e&J0yHYH+TlKozcF!o(kC^D=Xf{!dpMHR&b+kFUauQ;- zwwCLKd?AiIa}nGr!VFe3ebYQnKBRnJ3ie^@^Vo}Db=``qe;zg*YTD!jcXh72Vn58) zq8YtEAy!AsR*G|_Dlj?Z?A9sUxCy(P;3I99GHZzV!&%Q&37hA<NokAuLn}Feo=~A z#KNcmqY4YD?}0dh-pm&Q0d2ulyeh*z;omfc`c1_4&;<{sX@H`+c^@Vpc8bxZ%tzkt zxEp6Cu|~^kc{F1m?(S}F(Y2Lx=jg)hEVbwfeWOG4{8${}q;`LtCmoYmgJX@m(>;sJ z5pR@XSSBDU!ElC0g0c@vU1<^w9N|s17GY&MT{gI1s^9*k8w_S-_{~PTxvswK;b|WQ z)BiT{? zOr?F};$GNR85H%wR)1@6FKbLsx7*o#dA3}yA7lro2JdJ0z$eA^kKgLqklxV%ESS9_)IhsWu zeeXL838K)(PF&0w@HT`Qa|jw=OJT#t(m{;LA463aQ)oluXYYePC>$0g-F7?l;?fy_z`vuj@*Id9f$8WE~ z)6%_%FZSp*zX2B@O%=?aDm@$uCgTS;?XBaP#yEz(-$=-+=;>J%nOJmXTM8CnKz%|* z*T{GVLvsj-)A(Xmfk|T9MsnvOOk>P!`%`T*!c)<*x!22xy$LiTWJ652u7xhCDge^h zOAHj@S;YMi3u!~w52=zl=Hf5%N<>&Ct7q++thX7LNzv;2aopE#vAED*nDl5zTkgj7 z<|${EcaKSH{72(=djM%bmcI%Xng2K6QzXbS^BQmSqbhpeT^YWMD#G1$h&Y0_P3(rj zLl#(pK*s=lKkvCVrnc*aYbyF48B*nZ8}uY|vFXzDit|lTM5p5Km!V5~uIoC?&Fk>L z&ijD9{Ec6=o;Gpn(v#=t_LD=p@Z^BreX5J6Fr`mfPaUmuKJ~w`Upobqn^-qH0huGm z&%Fl^pLHVpJRTDd4$&#E6*)vVz4$HhZZU+tS!Qz;q&C0~3u|kzyTXk{JcDS zAHpyk%|CZhAwanR(?^U5rW&}|2AI=myZk4vEdwuZ*G+BeEf=Z*QJ%wq(7V4O7PNA>Z08p`mJxi^;(8`dLO*b0SHAyv;t z08^1lhilXE`M4jEO8Py1K@f{r{_B6AD`SRvjk02GTMvyCGS?sOUs&{dciUe5Zpn-7 zNABLeaOK>&hac7#^od+{}Rgt;?XW3vGYsQ>_PH=r^1)pSm_eD&3B z*Qp5rq9h8S7xhx)x{gUH0HVrsxfj<0<8mnfRqks?sN_2e3o&h!JyZy}OIEZa=#|aQ zJkpME$%eZ)u+CYJ8IOZ5?yNOCNuUi|TkA(JK03LC@ObyyWa~Xo3eyP#Nyit_;34x| zxibQ`baP)c{+>f0bV7Ic&JqR%W?z)yn}anpr%Uc8AQWRnn0wHvvI^pL57cQ!0m_NTq#BvV9K(OR&U&zLY2qY1W79* zjWuW%S`>qy;L`PSXH84r^zpcuD?VT>sPsP`#I#~r)QVsKJL|8lKRwzVF=wq=2iBuT z4{rOBq3S=fpn8u?scZM@O5H2hYWE7I(mfnSX?oAPcbKF-zzR5Nd(LUVzcHxEO%mkL z{?cQ+n+V?%f$orS=)5Z?F22Mx1^N|(=PuFKE9S>#sDoU)*uDZoA5i1RK8p?3#HM08 z*H_=7*anc>h4aauGRz$z$xakGg4)ULA`7!psZlJ}%jFqFT#r$Sknnu!dPyZh7$QR5 zhA*6oh9J{2LK;{Wv)tGJPwTI&uUN{eS{-Z2+OaNMcdaL_cbZ%;5%*tx*uVAaRsX`P zyZ-vCeShxNu0Qo^?S;(u-yz;{NCC~7qKJP>)%FVmRPZ*lMI5LH#e)x$LMqPqc;GJ)lrC9@DG;$ zJH;0*W?eJBAhGwY^~&7b`e3`fy}!S(zVJYvJx2XGhk%IGtV=lN9Clli()h{R=tZpM z*c&54Kk9=Vi_rgatPnNY8UE14*nH|vR%?UlIC5@-1?Dlt6)J=thKr~RiwFca5iAlo zRMF#(M>UO^AH<(`rL?Jte}5L#B8FA1u5q!_zP!ZqIi)GDVYvKo1GVoZiDr$MQyr=3 zpyYN6+U^yzQB`dwRA0(fiz?Pt>$b^O*1~q{_6=>@q42!0zp=EjvojOUoH~|K`+UXk zpQ&JU0wftn$;tCN0XaH8m~=?;dBb~vx8ecdFEDj^!xs8Bzph0qiQjcS5R z&BkrS;)0+>6ntS^m`ShM@#Vm(Ba`T4Mv5)w|8%PeFk z8sj4x&&u)iF3B~6b4YaB89j2BoQ6o`7GsvYuYD0{FbyuCqy~Xrm!Z0L&JB7$3KoS9 zhV#^;z*_`e6bb-zPz_{6tJ%HB2Pir>OiKw8oibo!P+ghO@A;^X8b@ z?r2v17de`4+RUm;tiYty4P3>PYD-TfrAM>s6ARCCh}<9_(w^9TK3H4(gP^e0_u|K{ z>EvBmBTBDJ!QO6=JCAgh&prCbFWh{hsqv_^ z5?30Hq9C?CU7SAE<~ZV;jGHuh> z^G74!2|&ggL{o%Qg%NT9bYNPud@Ox9R z0}G&5P+HsHz2Xb9goI1Nf?oIMftYe3vLWlXqhb+F6@_afPK3KzMa@m&VA~0&AZ9zz zTS2Uq31?RL^B#`x6qsuiN5y4owr8WUe({&Bp4GSRnfJVSai)xRx6ZAfyLj=&?v0bF z*l6Rgd1@y=xhOqy7X8sCkLJYIkI5wU%mX{ZS~%o|8MD)4Nk(^RO$IE@k}}5t+Ay3C z8#UM{b5NicGX>0ifdrqG-BV`;l1l2e@JG=~L6A}zOW*00tA!90lct#WxLt`=Mr zl(IF5uNe6$>gw0>6KZBInHK(n!qKAvmE6YS@@P}`Xy5IZt(vuO&_lz{+|=CC66qZa z+Z`%V9c~XCDN&Is%=cxRO?~OvHz7JUmmdZhNE@&&kyjWf?MKA-M1-p_1D|4T)5HWB z=Uh+KVKW7lRMlWuli!E$UoWH9+jltDJi)q zT{=5{^%YnHF{mb99pGm@%B8d75kWEH^N*VpFwQj80RA6}lsXtgURpg@L!!0%R)?)X z+Q?jITKMxW_8*OiIUvBV>hWHA!$vd8-lhEQ&+kXWo?o$Te`Eu`ESHH-9-PBY>Cb{ikdd0WRvyL#oU$Sg7k+B{%_R!s{ zEi22~+dkMlxO8c+E#=Lz4B(rVkUe@_}x#J0bYL%@` z>nXG8;aqFAzPi4CueaD)?Dy|IbpQ7Kr=Gf3u#%*5uX4sv;3Vht#A1L`QlVsRGPa-W zoJzR=hf{|cR(ZxZbP=v6o;`qyz5@IdHg3xtBH)zSQ z;lJNUg~vlO>{QVmRy!Ix{mj!W(bYVmii5kEG}i4XL|wrlq}sxW-{?cH)nnqpc)O(p?6X zM5I`fM(olaNU0Ehw+@@&KFD}O_&bYk@F6MK#V(^1hT6b!HbBN>H|T>1)Kax61;!md)+-f3u_nNrm4vJ^3!A??Bv>RLLnn6y|8J_|$}Pxr5lz{Nl@2 zWL2#L>x%V?nMS@T9_%&RJB{<_<5!-2`svt%@OFIrbaH&G=`cYJ8*{^)d}qct6kFv07z!k+jE1ea?{wfb-7H% z{50Gu6`I0L1f5k7$K_D54-{b;gvCImwsNaQmInie>-xvCkYE6@BRs)|5dM*K!VHTG8^truO=<=SwHOr~Tk z6p&*i zR)>3nOb{UnnYim~-Lnq&qcYN}?JGv;ySc7=iRi@|sJ3F$bx>*p7%^tLe6zXOz{ir* z1_^=tya8Jv0`)2bDe>Y$ndR|Cb3OCvg0D(TehpHtO9}T7rYLYpL@|qBfLtKN3IEWx zrs;Yj?z@#v!pXVhg8?o)7EzbmHs+TV(?s?mZN;wB;X2PgzMA)wV{6X3Y2Ds$@07D( zv6m!^HbRS2)6ai`E>NJrD_jqYT(4Gy|GOY%l?s7Uv;d zFp7t??YZQOd))&0t#Tkplk0h|7li+EFBHx!*FA;edoeT6VE39wL#P%Y9qku4op+;T z>06hqo7R2no6LUkXX}sPTd&EB1oy*qIlOV>wR0Q8jf)pwd*^#!eeXAY(`y#S)2~gR z5w1_J4L-8TF>7L?PjLFaACW3MCqd}PQakCGPd_>4K9%P_V6ZQ~RroJU<|Vel&>**? zuDJe;$4!Wa$YEii=ezNIoR&DBVsyxzIYuAB3`b1Swi`SX%qEd!^Na`F^slkJUWU~O zmJ(jVGAQN_I?3~aUlcw99*3AQ*WW3+LER;uz{qyEOI3t0@&ji3KBNXL#uBAq#N0rf z$F`q(Kgl`5oVwmST@>8YEKe2b747)8SckOd=eff1M)*ImbUtZZv-Yj$4L@LKYW;rI z%bpFrWP<`mI)LRa=g zl66LL^2&WT7|zQu4`Nl(sg+{$VSNCYJi}Y zs4{ZhT7LK$&#%UHH#lzw?&sk~RiScS+sO4ab-g%c!svPt9=Kd*mkjy@6MiFlOq=U~ zp}L@*0LgVor$RxexbCam8-FcFWYn!GYucK#2G(Onf$QF7y4;+nrJ0#pjdqe=QY_Mz z-}d8}UbuE}?ba=--DZ=%@m||g&(yh7Z-m-dyGl_ZxG-&IHSJpEkoK&^8{?xL-7-#BUp~l9>uqd)-~(x z)+76~PPJOTw6eb5u;-U|wyxj3`?h-r`yajpF4@al_xAViZ7tiEoaENvsUWcy`~Ag! zkZvsIKc1dY9y-MPOtdBslilHIEbn34azci-f4r3S5CSyHGrmsmWpw8M4yf6bYO14P zS}E8mo8|Adlrm0ta}ttvgp3$fwJu2Lta52nyR=EwTU8SC-4fWv6&mJ?wUfBgZmBpY66%0i8S*%lG#1b7N58|+aU zxT&jAq|+9x7Hokr-6G3K5G?U0ORxe`n58_%l9x@i2N5C6tNl931V<@#?H@IJZZJgd z#hJAb#hVRC&*RINpO6yTge&i=E6ga*_2$f;;x0qL28fu>d9%i$*DT$)8#T{^7*LsJ z3h9byCXiC)HUw#U!pF(uJ{26>P+ak-MtaHQOv33h&!Ra7&7iVWt{bytty=5WQ`U!! zU2I&sasI}gJMUYYoqgX*x%|H7VDP?hdHH?s{pNRn^M^k4z6B}Yhv(;Cc;5?Wvj$K9 zGr8e>Qr`H46!OV`?M^I|n$VR#Ia)YEPmHV9QS&G_wlm)Sd(56CCe5Cu9ssJ8@0Ko~ z1HkCRP$288gFEGZ{Q!7#8B9B_SrqyZNNC>;uK81OfWnds!OIyeMVaa7c|wR{{$dj< zxNd(!R?O-q$I~`-t^}D`hH6K?%_ve;GZS}W4^#4%VsW=psZ@TbypS{*672vnp}46k zVk1V&cr_X7e?_Y6 zKZV&@omn+&+srFgecNu&_lm`K5=HCn^#_J8M^1mF5jW}sjUD;OlaukF^vvgdCs6AT zft!kBpoiOn-lD34+%UwOEJEcVrncM@eg$QXvWK&*wFdh2*1UDw^udO+J5%by>Z(ct z+g9iIc6J)-lp5vaTr$sq$6$n$57it$)G?qhP0XsC5#DtY-bxfAo$e3QK(jfl16v`K z@RSi};08sORvG~+$IWH1az7P_A?!PeYa`HwVFjiVhKxQh{OcViDZ&mHF#gzdyL^s5 zKebQ+aCJx8vF`>Kr#ck#u-XYw@!z-x-vCQUL7qVIubuR<4RqpLMVKew=DPncWp5rNS)SL2{f_tE@BY2}y}Zw=%&M$A zt19chyZWfUyQjP7>Y3T;*}0G1S=iZS_Tmui8a7r~7-X>$3KU@lG6;;Y1;P?KEC~?o zayayd!~a+g2?@}G04=s79Ap1pW>#fY*X*L+i0+E6?di_%@A@8}1KXTy&z6W%51HZC ztniu5j7pZ^Rq7zcl$|n*X^T1~hTR;&PHHk`G+Fg=p@P|1XT9CnIaD|(%iw6NL@dmL zwC3WtF}GSs(ZsP%=@4xejPwc<_`YW&OFR$g-YnHm3aS_;rDVAJ~?@*ap^o|=V3i_28TXi zjF6GFIkh4ue1ntL32B=KOOjn%OT%&3Fkg?-C6^mXRxBo zs8I)60IT3laCf);I`4I7+OITTEFJAW+J5xPE4M+8klPoZJ9zHJ7jNIc{`B>uBkQ*H zAr$^oO}>E=MIWm;5~z%x8lN5pjkH|aefa#bG~1A;J0R(t@EV5~*$DvPx1kGbXgrUi zgh1U%)j%j7n9|?d#f(?$7e1~F)jnkUQ^+s(YE4LhOY`~TY{;;kyg`31rO65M4OnE zBFuD%xIi|Mfxw|FgQg5FxYgs?Fyesogn$|2(F6){eeK3aosbjsEEEc^1 zvL_P_J_(}umu~z%wD!2iIrUwu42wRa&Vhd$J-wsEg94)l?4=RJq_}-ldq^7DBF@7gO3N<#~EZrM^*= zg3%SrA~a07^ZjW4;*wFfZ!_uKNTg+YJJ2ca-~A<_Y{%G!0}Of}{73LR1JBpg@J=Ev z>?9G;vV;VH3VNo3Ip(*Yvg;Wj84urk@4fGb(EUzgjN{(>#cS8@Jb3WwjYnI?sO(GS z94&;v2FVBiA>*Z|nR7`8tQ$Sf%6yJZ%+I5-c6&ewK)q&DB6-fZ_taE;gt>7nel&W< z2mjPF;+*6cV4k}woJ(M>sF#$PtTAT#Y2MYz$w>{}Ni*B1o^YG&jM|wI#{n1k;Vqd=dM2s*QiVLjB;!f60wMx}?GHT3g6 zt2f^Gv0Ow9^g8z)DXRw|_q@`y8~-CE*bSItZ&Am)92mQo9gi$js}qgJ>uyXfE&S@$ z=Ox*yw|o?Y2{oeo*COfM=zC-I(bSzxNB zzc{zLnlB}_B#Q3l?|yh1clund9M_lq`DyR8RF(_@s&&)h|yTb+8Q%z-5CBE;kzT;%;ttd0B3*URd4Pk(RsSZfr;+%sC;?!r;#3 z+>fNX!wY->4oQ;5?pa0gzWsO~!9TF+?kz7yWN~@H_#R&V|4WNs*3rw$+yr6GQn~ri zi+niIOY}k=Hm8~NaA2BYtLu8@^J`GU)y-rr&&oz*q|CLm9uUz8Jc6(-pbB(gTQm`( zh!V~sm)xyZtJU#(B6L^>ESt~&=|D+bfB>|?F1P?Lg9qTz?xszlH6eG>5VS7d-9J3q z`@+uO-1)hkKi;waxCMXq?yuba`rSXeYkmC?QfsGm_i%6T@NR3zqNIFntqkTC=Z+i3 za}OUrJh@wjJ>!v^Jzg;&)~siE-0~&ML$)(XhsEHrl;yD3cp_{+x(BzjzjVsdMiKp2 ze#J{ZRfZL{nnO~DTD@khfnDFr`JN>b8P#z)V!~4EZ@&5F`|j)6Yx1TG--_d6nwD!c zSJNdX3##HJ*By&Z(K*em5aDN#$FwsS32L$^-zFMzK}Q<=l#U4k+uaUVHbnY|&XiqvKZZQ_nv8Y|{^( zbz!NFOOxS>;kgT(=fu9}r=J({KJ{4wOP_8wC+qcFm^Ig!|M5zMlesa>@}9Od^V7)V zihR#xiT9$76 z#c>}1eRpHyn!Yyr)P6{(a*%GH&H_&S22W3Whv<&b9v0tmzh|2E4`Cru}gwwx9KNj@xxo`)0sSfMh+Ko89R+K;to`vrCut1m(y zb{O4gU4r|~4JFt|VS!)J(X;iv5ci69MFx$r(3$oTee%Y*HFFoUVolPvj_$@56wQ0D z$)NAX^>4GTXASIUOdr2oUYK2)URqsU-~fy*j6I%C4YVWMBc5af4s9UtGmA z(4A!-=hC*IZBa)#vHvdgpj$>2H<#6-#LUrhE{51)|HFf$Hl943FP1ph&fnr*DRC`{ zy`MRJJt5OKIyF3Zh-kCI$b#^Tj8oII>FXN(y8$kw05;91oS2<$b#0LE=DYdIlov%6 zV0P+Uu(oFCu_p}5w11mDZeRZGKi~J!d`>?990{0P8XFI+R??n93+2?29q2*7g6eLK z(XN4P$zZnN8tZKOcP_Oj4;`V&^{EMBA(7T5LtLJiy^7c0jL6)zP7TjrK(t!nbV>$A zp^2r02L=eE{|x?DPy!9G4)(!yu)14nPEO9`qUc~_mDP$aN?J~NraV)2uI$b`CT(2I zK5&q(br+8T2U(-9&xam1@J>wu`yJskjs?R+Iz1uL3{UQZbPVUltc235Jd#0aayvqs z^~tN~a3bU=O!E43w_t%!sqkuAEy_71sv(WyI$n5s-m?&RY5 zXf{{pXxmTIt}eEV?P4@-0WjC?&JA|L;JGtD9nYCp&d2(lT;GFMvKgYB#Njz{*{t5f2CPQ3tNbe zOg{V_8Igq=v@1*|l3naga%OsHa^3HT9&BEL`vp_|z6^8hNJlSL_gs6W@Sa)Z64Ml6 zC145@j!|VD&F0y6LFi6oGr~@1ZI6@s+)82<=P^?OCt61{%t9hq{zMSTOnq@SkeD;e zw!G=xDsHT!%encS@kQ-P;_IVcZ@`EcX1x1gZ@1EzP|>o#ytX#6WT)u_w5*A#>iAq~ z8~`@KPJn)+WA?SvZdqAga(1DIxZZQM&PHG4=$R{5u9Q94x&-%120Hp?*@c;lBuwcQ zm>Ry+CUh%DI{s+ol5g!K_-~g=jY{ROI?d(H)T(wdE7(qR7PG)-Bn$#ZA|0)}4lC$r zQCd)ymv;LMw7!#A6*M!Q`7Lvgt<)zc(Ne93<`x%`U1il$X#;J1cozCtMsa$l7*qOl zIBEk`J0pj1sH10_TRz%I9q7UK1++b8?zD}UG<07wRJ4y!@BNql#?QO)FL>4Hr+%xZTF+h zGg@wslwcQQ``%3%Jj=#DqodEdEDt@Hqc7>uBp-#nA3)9bYm8O166|C$O3fH0h*|yYYPcxU_#5$F@=aw`%i* z*&(0XhMndVWjse}jJ_>{2R`%nLKZ|#Z6nL!h0YRu;t}+qm!hId7@ZgpC1PPg%clId zkYtv_xPFFv(z6b$R$B_Wd$;fz=Er0J|)%&!s1Sbhe8{K1vIE7z~*%L@x4FV63*o;V#Hw@gQ8 zfXA{2BO~@c-NxjR-#&`pv!#%`8h3P^PvAVKiO;nuFb?V!UT0tu<6(TggB5kI)wrf$*u>>#sE@kS? zd=%xssK=a*{mBBF-bJ+7%)*!B%CVU6_;F=nd|fBOHN%XcQmz+jwMu1uJZ{GM{QAn) z^48wodgM(^tYboE)@L3A_@6_OIOcC1i?*B~N=GYY^V44-hHpam85w-~Srxudv=bc( zf5zwDR4Rj~6rBng9V;*+rKj__B2q>t2bWi5;${)?-^K+dgI`i1lg^I_f0}#CGC*`0 z(P{K?6QZrL0x~;n5TZPjCXib8QThEHra%O$U;^~OQzm!2G(KMsO7lrDy|_3(zpjH| zy^sG~2kWOfwWk5LnJU?6IX1Yc$fy{{V4%Hn`d<6?f%*Y{c=K8n3A;)^2lLhW~rM*fmDB{-Hk! zhl{Z6+mtH52Wus!f|9*bF{s<+g##1F?Xf(b%=Q{5Gr~`aCRlP;X1#>}2mBfMEsz?P zBTs$bW=x~u9Il&HDCf{+vfue0SP;uPda&&!zp4c5!aT=+ZBdW|9ldK@ir;QZ`dI*h z`@#PO{uB5$P&Pc%*e;d4C{nJVG_Uff27aS|+xg@D#a)=^-7O{9Pr30&7IbuX%S--= zVT8U#d`Uk3_l$VvO&vXF{{DV#_Mft|lmk8U2`848icv0S6|Ip2(^pW;T8aaJ)$s@J z|6_)o{y{?`88#$doQCf~=_JM!8|7Fe{P`uA{)&L2aa<3ff@7R9<7XTv3}v(i+)} z&7jjd!p91OAF^J3YwIX&4?AI*T*C4;`Yg<`Wf|PP;Ku)42{s3FtZNk4;eI4)WfWGv z9I&nXYn5vU?;WOsvxyzo%&a6x9>P1l-=a5yIev|go_onOp$mznhbE3j`m zRbH`(>T`3*s)F6!Ni=zqL7%Kc_K)rz$NR)s$52a`Pe#G*3_*3u;4jNE)j#%*1$NIX@9+YTEi0i(%W1E-UDKH)gAV|4W}_X;?v(7Y1A>?IHVvIwBo-hqO} zd{8zV(&(qlDc4SAamL4bVqsEqttC}%KE?U%X`Izp{fTxH?1D?+k$LZ4c)HqbMtj$< zUX7-gm!m?Z5{<8|Ig#_>HWvNK%kVzwX1nn;%A!AV88*jyE4?I+vd-85ZIJeRbEFQF^uF+-fh(3Lgr$}kF>+}mn!Z}YC(q?&T#SQd37e;n!}4jICZOR2UR zL^*=qWG-`j7L2*tl2t$I7GZvV+Ou+1kL60X71$3JT!tj|EenrxZ-RSonObXtLyS1G z)l#M9VYghr?-x0*=p9~7kg><`>caP-1vw5wFLo?a7`^HB0Q-6XZWyPGquC2P%WDg@ z-dJyTRu{u=)$cAZ>tta;V?x@xeJ0L}BW}hglgwdjyuX3SAUhkXAvcHL%(y|BSTb46 z%ri$?Fe4ZJ^VG55bK}3E3NZ@DNK6VY?K=8ZV-=uuG>3(bW)TlzG4G;}Q{A-RMjt2d z;-knlH@jn$rcBc7{|k!}H};DPd&}uBEFrqfgd(##TGde+S(4jMfvJx#EUc`qE>ccx z$+WjDq-|`(0+6Z6_UAV~m;e+vE#{3cid*TECu zdGpe2KI7i2+;MMIEZ5zx9E;44y!eC9a;&bid<0NS`VA(7$4ZoR0 z&S`}FkJkBJVcF0jGLGuK}xj>H?_t#b^b+T`B!0%w}rRAEdA#^#`)N5%0)q}GK7k~ zx^8hbMU7|uk%9T4_Nj1A-pIn4ABOXDlY!m-eIW@k}gswl5YtYs6w_!R&D= zdX{_82I|*?|R|2nhy77yzqyVU^laVQb7q;qYzqH_hTl< zj+!vD{Phb(hZ|SIWbWPs&2K}v9+EN;o!O37Jqnxe3@WK7p89W8Lt+9*;S6*0hT~UgbrGKZ%-FF^*NB-3ID(;@% zUYkKDbjk@SE*0pEQIAFzRV;!QUX;NM_f}W0-+OFhT}Nj(79BXp|0Zxj9*luGunq2k z=fEo_6I^@r{NmI1FWwvP)C!i?@#3)?ba$wn*B#|@#6vJXIZhOg+cd+gK1v5dc~M_O z%M{$_1*|=?zxrR?gwS1}hMch&!~`Y_sF@&HW)89}Cs>2VXDx;?p^~IU{^bx`qw$MZ zN;un`A}l(F_hze!@H_I1D(8L_IbZt0j|+0)Qo+h~5AH^;WiuH>$c-)}TF`s0Tl;Fs z<>Z%yv|M6Y@XI%)IvdadL>Q&cgOuHtl&;zHADKG~X!PV@|*xD_TXXft}Zt-jD zSEpMGoEK*1=L_W|nVxnF?#Tl(!j~D@iO1u-A?cw#5FcAHLT|&ScVEzZIIq?yJ{{jo zNrN1F<((|k|LIptEst#JVh6Ulup!hf=%X^Cb>cCo=cv~d-Y0L~y!l$gf)-XLy28PZ zY#udW{{-htcK?eVC#n()sKgDokrNj`kTU^5E#zXyIh!`IGcedKH49(ciYFw$oi@1xsu*SD^r z>BTl`ESAuG9HXVVIb;`$i;E)&yYs5^bKV#-z}lq)%)?SUJ%>a<2H35(<3xY4oARs1 z=fDWkpi0cy9di%FMV6iH;N5^o<>BJJJ9qB9(r}=K6hb^qs2so580h8~hB5yBZ6%y_ zuE={a^=u15F|kid-{rAQtt=C>)N!Fw8jU~GXtZjz+N*^zW)n&XCA7b9KN7m;77aI) z#71~C=<@`BAAA%1CSafqRx+o?7r`6glctlMyjywml}C49oVaqhyXI8jgj=c9C+Z`a z&){mvB0A_)4jYw&bk~#&OG5>{zJ#7JiO4p0YtS6&k&`!_3~vGRx<`MZ5I==HH=|or zH>AG=W8zYzbgVraB~~$y^9dHOL^eu_%1OBx$4Q`2kT@2^Hl2bqd1MmE%FCf`VTFu2 z3ls6$V3Yfid9N&FyT6K=RFui8492;jPvx<8ECd^S)9VSUT-(4q+_Db@hOE-t9!Jgn zC$UYKZE+%|uu!SR;_rT#9}{-AB!jEup41VeGTJg|4M9~1D3IA*@@t?D=D-HH2yTIw z!Nm{9W|cD-T|-UcbD*xwOHHPLOjrM;547Ps;ZZZhrT8g+@5v#{=N(b~za) z4GdJ1p~$j9NRJS}M=trrV;3v&oB>D?7{xwz^*~mz$N!vbMDjaWlrTc5Eg6iNb7- zrgHMyW)WBSo-c46G0ZeqWSbJcA356GdUVHr?XAKXvCJ{zj?+IzFPFTCaTRV!Us01q zldR4+s3zkp@e%M*@ILrH@D;<*s8jTV6MqSPVfQm{zVAL7pTAR{-`z!XFHTKNAiE@@ zyl~wWv~qSJd&+pCyZCsWa%S>6sA1FCC@(z@-5jh*_S`%+wmI`V@yfYx`-fbIpM?o) z!h{v1zXDZLL7@Z-i+CDBw`|IpACmq~#b`3eFz-`ZgD7Mf%~?A|T!uvmC2@@1CgJ5y z@!7;e7E%~bCN&`}bzCvMm0KbG8$X$3PG zRJbH}LuRM|klob*Wwyp01Gu!F@`&A!j<+&;mII z)t0$){~`Df*@V3eCczTe0Y_%Kc4=?3w=e}uB@t2zfY3qE5RFrvP5(Hv9h|Lffld?1 z2CKN}oX8oSZr(rs<<+-82cb6wQ@W>u7Zx*U?c1^CC>v9ou_+X1J$lqZAvwpT`FSO}yO^4=tBPqWzXp*azR9uDI5YQ`IBTEedvgf=fCvuwi}A;N3? zwzR!~E9d=5$K{q&eE;Ir1ecDs52x|+THQzGjklE*?Bz*((PO@)H**n6ds;Zco%cDJ zH#oumobb=H9=E|xy=XGUdw6cOJKdP5PE1c@5d^M_?>u?w$!DL%z=<8sxA4~EZHV(! zz*ZI?Z-ZxOvVqLOX`oedY`HNIt~?f$7=+L{6~j1-^Q-ePAtmi^%(}s+m0(-05`~o6 zWF<2eN@=KqF3iJvE|7-RVaa8vT}Sa&i3&_<;$V!6nUi&2x9+D39&?H^=ok)Q2mcL( z$PQ*XA&9TS{gk+5SGu+>r61f6FH^=sVRdzTdSiNizIN-{)V0068VRf*Notob+`Mr0YRx#Y)h^W!4wh@n zkLduM%K;hb=MBXf&rCHliTJZknsa-7qr8ypS5*8b1U+|QV8 zp`DcL4Va^AZurcM7u>w;MgP*ETa6R@rL8o;e(s+ryEYqh(sko)H@<8}y_YfDo(fQ5 zd+4nGe`Ki6zDm@L+2NHb=owexpAI~|=GBQ}#iKk%igc{Ii^kwVe zkj3RM9!wPU0d(O$Y2r{r_bVn{OHt+3U3Ku6A>9Am^73~fs1|o6St~5JP<8iX0T+_~ zY@Yb`|GcuYva;0?%fJScAN)t~Z!#7|9+W{HjAwN{Y<_QLHwq00^oJx>B*k`J80` z{2Xbxxkk6q4_x?32)$jH(gSMvYJX)t^Wy_(k-qTbhqUpL(nF~lHx|ZX}FSbQ*VE9Q*VE@oD-zUHMtcLIU`_L&U-c` z(Yz*&%N6EKO-)TL%*@Qpm`_yw;P=5F4zQmkuncy=#%{5kxSOgsZ!48R%SvkV^GQAo z0hmZ89`98RNhzbq&r@i}A@qHSfFF#Ny2qK@$rCiQw6vt4UeXY{oWq3sb?&wk>i2}p z5K-DL8ADgD4#1Jo`s|h>va$1TI$wzosW#>0YKFeJnos<6}Pp-S6YtG#h_S z2{tpX#-4&Mgz<#=Ia#ssoCkk9{-a zc@EL(^QNOzQ|&gBGPEfTp=E`|sVM-$#4C8Svt!}dxdW3Cg6nC%RMs9n@z){8Yt`y! zdW$CKyY_1T$B#dcV9M~G4qmhuiAP;8{8c4r7rJe0ONlRK(BrXcb-Y&l;Ydr{cjJPP z~pa{!d1G%at{)@x&9Wg3Rva`#jUa{AMp zjq~X+kLY`zoUGG`*JQinP#B*WjOsJ&M5J3NdG%o z_APX33khN>P8dV#--kcXN2aSH)Yw|uJ=5#U-yEqQ2HEk-+9{nxP3h_ zy4e0x^#r%Om~js?;Ti)8&nRvnTPqcMTt}|t(kc{c#bQ05&vX?GAKf@D*TDsF)$HfF z0M=^3;gu^vx82^~4^jYv$Wtnq>2%frTR^10gY~m1=vmb9a1V@99=&gBbxdqF2S)sQ?3ZXCR@ zgRJuS%OS*JapcRsq}V9hc4TJ_H_!iO=6HIno&EB(nfJw{)gapZY9z+Kx2&KpYp66T zyCyHaEW9bsD@=WCCKYtrCE}HEU69q#cA0c~0VnIPFl84T!kL?&ljNFn`Bp-SuTt6&Yfm^bUocIB%hZSqNdL63j2)&7y+3s3G%lNn<70 zzVJGXSBU!*Ohv&609L1Oh14UKg`L+k`{a^wDRnkw5XDZSIi}o99%R=pId$>cojcZQ zle$GGe=i7eXWwk?QkhEA`|fM7{>DJF!gOj5zzg81-Ok4H?B2tNs@f@aW@pvpc%z}7 z*xgl;Z7VMf)$Qv?M@qPES9L!u=#S$}y61XDk>i5roH{i_1dO!D+Wo?({UH}F>HY6e zA8J!vaQ*b*;o)4_F>K;zjg;0$gjZ(LZ&7Kdjf5FX9HOpNrMPALC%<|IdAk>%=5J z&pnVZB1u*HpHw1AjY%l7SWQ&&jPYFPa3L#<1hnaQEP^$s2tf$j>}JOyD5k`L5RGw0 zr9^qkNQ6SdIjh<>jA->IA#+ht9UlggH!Gxy#jj3EfsJLsn#-|6g(v?dIwZ`8`-0nP z>Y+j^og1;OT;ztf!yIl&9$5j$iEm+Hm^Umy)r##<4{mq{7Z*SsQR!Tp=q`93p1NgL zaw=uYIf{sz|HKndfC1{(O!FL&%e17LyY6_coEIcX5U{Kh82j;%?pX1h95;PWNXGpQ zJ(!cW+EZV4qpv72@h{xyEm%bLvVTp9UczgWxbt?a42`S{DI~w_#(33@-%hA+G=1eu z*mtdkGM=0(l|0GxSaOVE{T1Tz-D6({o~^&Mg74e`Jyf2eVs0j0+` zz{#;s&ycTM?I)lM(;BP3_Ep#kze<3HBQ*c#~=;2LnD=6vwJeY*KLfKOxCr`h3%5AhsxT@7sG&H=J1>}*jPPa zczNIf_?W@!-FVb}n)}r%yfk}%w%vvo*1KKkD8+dPc23p$XAyhHY_DTRNUL@Ba1St# zgHpGzpFfgzB_@wJ$uEY!O3q4l^w04kdkv=2xuU~=sswu%^WqgQQAJt^LCc=0QBFg- zX=-D=L#<^;J20W|nmN5*^Q3)~cogNTW${E%&{Q!$rpC{Y2Kf>!L~aVx-@;~?PfXR! z)K5dju+olY4mP%($Pcdyr#@9>ic{g_n~csT6P(O3M=(OTayAm8h=uIk^kpG55{x^T z5-wbhmCFPsV8A>4Bk;BCy(@qgxMeErdNB<>rM7$fi~AQZZdr?N7khKph-_w~Y7HrJ0B0i;E9myZZ9gn>Qa~-+u@mo>H9~ zdDYX?{D?D~r7 zp1PDbHs)({?O-W%356J9mh(_B|D(BSrrpTg8orm=2e{CKaRK>x$Jo0qR@B#wo~>(z zg@V8|t|g8mEQ=GPw~GDdb=P*8Yq{;RgGpSgxJ+2)dQd*aa{iv>5+C8N@DrjOqgCkL zFVNP}R37Df31)K^%xY2NDcRqHbKog6dn}KQ)$6@ZuAM8DdTBT_)AN+-J-L2weS5oS zx$d>zwe$NCrH(uayO>jA zLzTlts#wt#UMKD|Vof(AD5EH`wAsOLr!xs-+L_h16o*SoPYQoZ__Ky8JB!&Aeu%Jz zJrdYm;fG8)Hsh{(H6X1UvsGMOj}5!Z2H^*P0KNgf28v(|%z~TXX;ZK6-Cw_jCfCPN zeZ7R{de?jF>wcmXLYMu^XD-uI|LYFih=yK7>8SXnL)rr@P45J7MizU=EMw!lH}Ggb z4%f&n{OjVU5c815umx{J4<(G;pn)5_5FWrZ@t`*9hy~@jzAXZNr5+0> z_H-0fa>Rntooh@^DV$7|@jT-gb1GDZkNCZe@fCp_*a8p1%iv=sGsSPjuk1dGpW97r z`_Agz+#O$tIKK1X`t{via)+GmML&j~Je%zwOR$(dIRu57?KkwfY&xfeS~5?OQG=+~ z$f`8XU6!vw_kGifZ!kMz!7Z+S`2AVN3>D6DXsK3B6i3n(a#lvr)3)!h4%1xE$iJ;I zGAfj|br%ta66###0S}$GwTR;)4B9&rMZ?%)rTE1cLYq5e>|%p>vBU{i_{}#D94QDD zEGCwW1jP;$q2ySl2H(Q86TTLO!ZO#C4mefBqRg@#9w_2@m~m>6lrR}$;tyEN|L=eu z?}HNPfcmb^Hv_lYYBh!HHbL{mXZvyX`*A`wQ2lPT(^1-J`f5&OplA2mfA2;=qr`Y# zVg->9-xxqR7%`86neefq4 z1Hm|~Pk}>l#i-bAOf}rxR^U2|VEWS5*7VZB!NrTyM&4jRj&dSAB(vkiH>6VLcvT!K7dDUxI9}&dJ1tuw+2L&d8JsSA`;1gh8?AFGTc> zkDHlQpVj}TS|4yZhOcq;TnWxoue z`@ETd>BOC37@CJsIlWxTDz?hSdW54F|1LKM)&dbC1I#VW&BZP?!%Wx?Ny6_<%8{Ym zwt&i14251WynCJ!BFEzOgIGPuFh^YJ_Fk>4LM6_R7U zRp*4tG5AjnF0<_K*iML=mHxI%Yzm>{2od@y$X$X7=}G_YHR&7r>pP}B^gc{!QTnTn zrn$s>M+w#oTuWfAUv>%R2-&vhQ_MXp!U``5?{{42%Rm}Z19qH<>qy~n^1!Iia2XU# z{0o>J2v<7P&_JZ)5(`5zjTz^@hqdy)mkSFMM+iwGf^^eU$hCx@VI%)j*0acgxeW3B zGi;jP6L^8Cv$zxLK!d9wofsZy=>DF5iO73dCv-u*U_Klz3;IOtg% z$-oILCH=>C78(4D(`vVlV{ZJ#TkVxo(jV>qSKATeQ_@@43=0Sy!eykfuDlj8v7mxA zr64m#E)I=^#9>nDH79yrMCD{B@GNh#bS+ef*$7i-A)=P4H4);63HSZ37ybh+*mwKS zUX$K6Dt=2_fee^*Fm(utnU_<@Uo0pqQX$on+SHe>Lbdrym0Mn?sx6fl(89uw^F2S% z3`r4l8U(h*v63>x9xmh!-Kn-Dd<-1mWzLJg3#ysM;XZg8e9WASXAZ`8TdjkYot=Zt zUhiOfW8)z2`v@Jp@!X3q9^AWlbTn}=@z|=IGvOIHGiqcW-j&|y%iGU}973YAJ-lP| z$cgwR8ChSmFvkc;bR~;R_dkHGiYLrZOaghHATX+ zWQ2*jB2sEAWi_7E#>O{d)D|VK_DZD-)#~3@w&ot?7Iv^?%<=;4j`_+wiBxh&aBee- zyh7j8x<74WUx00Tk?vglzQ%Dlww?0rU>J7vYPmq=2htUnj_nhZdxUd znn)WGd$ka=n~trcT*b1WQqy6(PBE)DG1IQhc*4I2z5#w0JOv(sHw=#BwU?fM`cfEn z*C&b-`}^J5<*DVhHM?t{kK^bLCMCnhMSB>Q#vlU8h#%cCKkwAV?vVCM^SC#f`2_b# zqfYBMKW%3m_;&9f>T#GW76dGn7?+)b8dpp=*;Qm5=?p&3g16VHVE193_q^cA>om{_ z)-QO>_tmBrKJ)ys=vA#yDYh7EO{dU?77>#deHld!w6Kh=`M{RcLVO%kJH&}+IX=oO zS0ZH0>QYh0%;lUpk&epDhj~;GP)G-I*M&mFg1QU~SNWc&mFF;(vpgXs&h_=U{{#4A z@HLPJHE;;-n2d70R%%|qt}gEH?3{G*2f^(g%O(z*Na;uiIh%ht#slzJ2d6b+l#val zR*w6`S!SR8r(WF^k|#M;B7!&Un1zK|<%GP{+JCyZ-6=bNKO{M>nTnH&cG93ai>8Ya zv&P2Jc#c9P*z?@G3ZWYXqGT%?l6{YdC|^g86Ko~Ysn=lWyH;yTY}t_&xa5CqyIhl* zTApDjbXrk3tXAiiR%2XRKAbhv<4U=gE6h-hCW2wE_6_hmpa=HA^WYT|rTCTf(cHas ze{MTnoih-#kur|Qw@eEsn~$9?6B!fKVwQoTd?Y6jm__lC}X)v zNdn^gMLl1vxKfmb$Z;Xclch!r&P>{0)T!HT70D~aU=V4l52wFH!rAIBVRID0N zQ=LN=#m%N5am8|jMNEYej}>Kw{h)3|kut7Gh*?DN7>@^tun;Z(Ez6;na_tNS`Jcg` zgRg@!7zdNtta;z`;Kq0BvvYfUQ?s*vyVLQPTdi$>`%Ib8J+5|o0~?WHm{v{)vH$I} z`n;ofpv8$+0M!f=JdWIyFkZm{V?3DTj&Hl}np}yIUZt-YbjI#=)6w)8asBUCf{kxE zmSwplz=axSmX8j6$%3G4g`u?5+*3#s+s>0;Sy|ayUESW=x;5!Dq3ADU?kXg!nEn`i z9h5*b!?A5-Gq>g4+;X$JyS2Bsvf@pSZ;tQodJ{8aV{6{pIY`0d8mT{t{ID<_M`7_; zkUBnoyNxQI;U)&)vF#Ciu^6gNG^2hU%hF53{ToO zvpl8^9)M4qeq;NM=6l{7#p&nYcw_q6cb$afXG1XD0Y;MB zoX)`+?f-5CWq&#`$Fy;*-Q9LkKeKH&PdR6)F|A;A z-m1e=%f2*;ESM66x+1)3a}_y~C8jHekYxtrD2ys@a|}-Agq?TX*Q7TsBWC)t3~OiH zD_FBdBan@i_+A7(Ph&SuLbL4@OHfjQ4h`^RT{^D!WkjjPT=tU|D+o$M<|voNF7sJ{ zT;m2Vcm(5!m|{&R4`Z%_6kB&>upvoI0QdR>58HltJ4T za!=hKJG|8vWNfSrEUVhCp6*9xwC^)hu9I=2GlFpM_s7y~0N*%Khao5R{ORQ!tTFl2 zhW59ZD7`NITZ)$S9US7Kg2bfmR;fp&ESVPhOw7D?DoIcmyir5N#;2w@4|%=14GT@i zNtC#WEqT?7S=tCLpndta3~)mR9Ji%I^CuR4`MS`}9EzK)y3M^!D$Ka% zAS>w)4}W6UpW>YOxrSt{f z&g^EbX+v16t*R8HmbL10KDRn|PV@Uj0OUmdwrzTd=|EfO6tD5DfYzY1-M=Wv%BffP zRP=tJChOzzEOqHPbL=VZ@laHaGo-%m?Gf_`+r;tl)mSN~Q5Q-Rf{TK$ zY7Q4;B;vW;ybz(NeR6(&e%|Tmm|U?XD-`r@8!uru%Ni6!x0#K?G}UV>@I z(IoG)geqRL6Q+w3$__|rk+#~f*mhp%bULJrjcAso=O7KRm)I$_#Vzfx#@btqw7*!< z{&#dboo&aloPb2IP(}_7&|WO9{G3(rwbi|kq_Skh-t2VdXJ>y*yMikJ-xNOYy_ zmfV(POR_BE4P!6{f+u4z#t^_@R%1ef2?SP>&UnhWWxUV$koG;9uD$tz z>-QhQ_^c1bSps*iUx(+HE-&@_aO2eKsk3KWu=OOu*nV(_r{=EMR`Qs_MKY$G51k!dhIP>y>rh zQwHT4)`RzH)6@)*YrYep7`wu~YMLjxdSJn2EG|%A@SoiP14U63dOo7GU`HelCJ^&+ zw@9N6pk{u<@@?O7Oe9>2xkp_OVH$oUF9KjeLV^skSVomHldcsnR3V`rB-I?ZtAzU= zWu7EhMxM^xprRg(E6}mEftb_DLY5QOu`9mGZRl!$2;E8i52N#jrR?jjaUty}p4+OO zTfaa5F8Au?d18yDRWU#Ba(vvfTre@=Rt%%-b`PD;2id)QXZ09MV93+j?_O`3V|`e? zPvTt=-|*k14Rdswr>KX~i8Ojy(cYmx+(&QSxg7F{XU^rU)ck?p%0?!Tw}?PM-T|5F z$1^CyBOVGMZW4}chQeQQH^2&WTG;VWIkVJf%<&REug}u}hhMBzE~IV~6Ca?|v=Qd) z8|9OCQ$3D6aq#?wQUZa~Z8}q3XMV%U$H%!txN`?nTUcdNS`qm+Q~1J~Dr#Fc4|oj+ zd7xL}R#nFzr&>>cG>U)TDDUx~zIW@&Tyc4M@nYfZg;U$zjg6D7N@a43*Z?E~TgF!l zz}N==>-Jx6o5o4-<&(hJ0$<(&pWXsS0zRF9!iDXVTZv<PL?K6p&g>rBe1iUf#HW z|BdvYJ?VSz@a%67nchE;Cx-{}1>xFC7^CH?v5)$}6~VU7r>jcq%u{dyd~$tbo6 z^C@ARyeL9Q?=gh}n1o?I4D(SmoW%TDsy9iD{)k(4)3~$MJF#&6`e0+{=7i_9O3}qD zGn{vA_rm!zCpT_JSKN~)-7C?}4X0|%ujQ+UT-A4hKKm-{yD^-d+mm%j#*X&G`O4U^ zSufsETz5IbqZUDZH*$l;`gcoVQr)a$*L{%@{zgmsCvY?J>>vltR?RF{KuPn?A`KW< zB>9dk$N>cwGynoJa+7FJCP(7c9VoIO^-o*w8( z2yba59#^kBX!p13L*+_s@t6J{s@JxC=DPGE!KUW}tQnzRu}CPbl>tzFtgsn_Y#Xp#2h=+31U<{ z4I<2`YPwV{`b5cjjLcA21ej)*Fcd(_NR=@%Qz#TF2`QM;Hw7_)%n^tJZ%wCkTC~LE`OS7}z1A%j~)=OYA z*?O14gggI~6Njf>eG6}Y)A+Z>AE&ICl2Oy$7*w%sStyrfCZCr+V@U!fJUE#=f)lbk zwXU){N7}MdLjhdH+KF___6DB-Wnb_{kd1M<1(IcT<3oB-r`V=5W@<0&Bj4(kZA}|(K#JW|+ATdpBN(LD)*>h5wPI@}dDgPPF$Sq79 zXzQKI%-Cy~e%=hF2~;h0;)eFM&P*N_7E6#sQwa?NYDq?f{gZ^-0)26NTLbkWhJuST zTndXb@8d)Wi*nV~D7+tKLFfi1vEBCa?WLv$nx{Gv-%R}-bH+e(`xlC~D@1WH zSDBcuG#c9bn@F3$FP7jt1L^t_8#&fU0w=Em*Y$1ff~;;Fm?O^`ho-q9VG zjHT$q{9)*}n;s;|E}YtN(1F2n`$(UTG+Vr?-IiLQ5nzeu1tT|*6B6>Q3_ii)tW3Ge z*q;@QJVjmNON`21cnWhT-^dF_)jXPLmR+VBD^6T2wzAaQ+Rc`{5M zLEM3)U~A8B4`{X?^=BVlefHtQ`04nlK#oo34`7CChbLR(qDI5cyPnsiF1<@jiwlS3 z5C-Up(fm=6;EorbB=szJk{q&OxeFROs8uPSHsjQq-Tnzzc}UTiQQ-Mz7GzxqCLObx z*tV>gd6#%+g*o|B}p{${#vHU7M6%xN#4YL;$~J@|U#P<12Yv;;%_F2m|O&JbVv{A7&Jc7Bb2X7%_lBQpd|bHclJI zwyM*uW2kM{SK})LuuowKk6op6?6)+65K9MpaRGG#9#^l8cIc zR|X)qa>})MJLHzz$wF;-nTI5BseVy;5foLFi<8g;t_UJ%nVike1tZ z?Gh=C(ahzqjeot@0hlmmji-!@Tdk{$i1+nc?BLaY1ICPEnZ(A z&iG@N#P|1WqP@3pz&LcTj64#LmhwG@Gtu^b&!%LK3Ba`WXtl3&Zq-Fc)c^6XyWyp( z)^(8Ir>RZVDay8yi0hJVM%Z><@}gtRZ5M$Bk(%`fE8tqKQATPSGjfUiSEW*;nSLf! zRAL;JC1ThK>K-n^_tOB{GHG!O5j|ocGIY4h1IH3sY~d^)(@k^$MUUIQEGozhUg$+;oxRoIBZ*;APG@> z6YdJe4pXe5fq88;#vXIKA#-QUDz>x(VQA*^FdG96J)XgWk%^xNa$D;goFeY&7y%r$ ziy&?VjsP*{oIo2A%!}UFD4Jqkk9k-H(snR+!^~s^lZ6H(JxChlYK-6i1}>egVk$$1 zI*YA5u}Gn_`rgHi63#X$3z@M+%4hs$s?jfvoH1iuHg0Ra&}@BrdS`8AWrx{zyb~Xu zbUx0MOHeq3*Y7_1VDHgUy|%w`NAmmV0F--d-u&-?JgcAoG*%}v1O=Uf*{Kl<62f9) zY5g(3?!5{8f?23K69R8yk5U%P)N)3FvKb8($^OYr55MnK;yuuEdI?9(ezVMAJiYna z97{M_A)w@iA(SQwp3ej@x2#OeT-ytXE)6+V@_GKhm^!o2`~y5f#edDn8XLyT#(RzT z86Pk{Y<%2!aclP3oywp%SX-G~+-B|x+~gMo`%af zSGPSTD>AeX`u6~00kS|T3v@tSgt0FPxryaE(7DK3UUHKvGax7nV(c@wSK!_X`0kK6 zR-PzAWK0Bhh{tgPBuLDPDG4Cdj3b&P2~U!whlrh*zftg+MX&{dtVT5nWm7>y_`i*& zAZdiuR2|N3Hz%2sFt5S=3HN^&THi}q#3RD_q>U}CNj8IqkHg97G7Ov1c}iem?qRj6 zwPY);YV|yqR!MjMXv!%Wc3$U=XN>2Km(q9pe(lVAUG<-R_1dc!FZOMa2Xk}%hmRgS zdgYb=`_^Arf7iSE+&6s7>MyOe3D>27ly!EZiPA%M215IV+))%hGw`7nMzP%rwcDf_?2S#9&j2R>R&0JXS^^~DTm(Kj~f(eJ9 zB&|A|=0FF*_?b8Xg{9WdiL?!bMj)#^KzHkKjw*}ZgU>U3Mn$j75J3E2%n$vAwWGx!7&T+kSku*gT&*^& zAZX0b%rq!MYmK$T-}i8BERKtp9vr-mZs^^1+JX9CKiylvJ$(vmh?iDZI-`yw8`u^@ z{-x|iQ)EnT*~rqfr!JMG4r@f5c71wAXL`<-Lh_m)7DdsP{{}j)kEQ%|hikD5iSAcn zR~aL(b3Ml^869IaoyPNuPx4OQF#M%{-_OOILmwV>cZ_>kAG{0pd*AJM*ciV8T(F24 zxmxpL=qF|dW3(;9wU+Y##PmH=3wv5}5(W`cmOzZO9gkc+m&Ge{ken{YFuS3IEtQH+ z%kV8oghEt&z6s-;@EmdnYK!jF?gf0*v#iZL*r(ocC6bPLs`C7^fo+KCh3%9%5> zVD>00pn31e{oNkh-%s+7uA@OXpLzo6mpmAn0_~}mO+Z(GG-q&I(2cNifWVA&kWbg8 zAMiW3u}@W0?1rG8n_K}~xd_?hdQ6F9XIvk2L0mU047gLs!@qA*DKM3vuR*^cq=WCJ znkH`7&$Jxs+MRr2Y1Pwg4a1;RZkw|dnhcu2ov%&!FxxDoSl``=$zP|a-JCIL%o}UQ zNv(;x+?O*`c}If0C*@XtYrlawn%ExLpJVY!7xDo!w@q```#sqeD%|~rNyrt@G!&Cq z0Aoh#Sdl8M*>^)+=_{)j*JezWl)X;b#2Y8^~?Ri!0b#nr|0L*6W6Ypi4lecv+xdy)t+YfV~azx;k1Cp(v$1+Fxfj8 z_5!)L_HMmMJerZk83h~F)->pqVqud&=0ed1CC!ZadKaaJ{CA69)xTZ17W`=;8@V6lKJTqk&%Hly2D|>u%GwT&)v06o0^myD3GT@K2U}=wgevb%;`_!D> zb8RnF=zjw8yrviw)9z_D2Rh3{u*oj>&XuWn_WaMASqD;RsR>i&F@s=q57A@muH(B- zZZU)AAn9vrj&cHk7P&u11>D^H1XRqnFqGm;1t{`VLGoOBE2YW|+G9l{cP5R6ls9)t zuc5i~-Eh0r3NM^F6CU5(42$Q_hZ!lY@JPwG{hC^j7E+mT-2y#$KOGcES!nNBFC=4m z#c;8WGTZ+HNCm19rO3P;XJDMQVq%dS$oqCVnf4*N5}bw7(^Ef-RbkbUHjs#sj^pC> zZnyjSWA{SGb!-3tn|-mFnB~<#*eGD4h&4+tkEQ37&poH{AB2h@FPlB79DF-nQMK9G zDa`@XC{bNM{BgR=wvDTrDSf$luIMyDad~QSYG$Um*;;E&P8Ks!R6JEZUTrq_mD?U4 z{*6t0^sXCCu=h6I{)K%6U}^mJADe0~?ce)#lSLp^6OKxdQRYZnVn!yg!rvAXmlRZZ zwj}+{3D>^>T+qRcoQg0bb1lrsHHV&sQkm&B`7fX&UB=YUmQB}niL&X7kPziOFYT;Q zQAdVd74>2?QPu5a(t(6mkV%!qOr;3UZ>3siBvrJZF|KMZ?=fc@v@a~3U0PjjFU(%K z(#}LtyEHxBZWfED+NX|62*yG-e>gKZ9I(gb@D3o6Qls2)|A_Q&!ho7+WZK{njV57O z3(G3JcK#Ls@|+exljn=C2>%oSv%=rb%qqLbY<0%mWG%|bX){OJ@0wglhln33n+X@p zwTV8Ngmbyu-HaLmCd{b>4nd&^0#5`h*y6>7V=*lEAqhN~at*aM;P0oIz(wP(@j$P% z8pz+ja|c|#cMmKdJGQa77FN|B@y{A#cL^{7psI6?-`&y929qqo5o$^SzQG^b8GWft=3( z7Xu?0Z^4e?oJReP`r#aHn3|?(+8D`t5Ix?5Otab_O)#RzxmP7ozOI~NQ0#;GjBiT~ z%mmc+oR1V_s>3%cK2M-nB8;`0>Pj_t^e zAPPXvm1{yP+RRh?)QJ^_s>Q^zNV#6O5f{>?;oXUh&n-2<1z>14nXiTfm+cU{CZ%@3 z&AN0g2K-Q)scQF`%-i2I{?hn*8mS@cX5JVWZyC3?dU<7uh1vJLZ|D4}o9(Ho{`4Eq z-+T1vc5Ctr0?fPt#HlwXC*L?FtmwrD)lnFSlaO6dUH|bP(%>#09o(_yHLhb_Mli_4xxq+JnsWpR!< zNhz@{TrB4;>LZidRDCguq9{*@?_*jN(q@_&D5Y{jRdy{ehdJ~Gj?&>dX2RnRC&KXw zVm?WyRMFetN^z>LQ8A{BW5#9Uj`5;)^nKyEd;LpY+`d%B*-M^z>e405O!Ef5anPz{ zAJI5;^gY12)p{9deAh3H^~927%ra&uP8uDxJ<`F;?)Lai_q-Qt$8$VF!7~VJ5U~z)cHAKp_EueA&@idSsy?+ibIn3XEUSs2$>Qo1hO9BLDTE9$hRk9%kQCXLMFoN;aK0y74;{i#%}1M? z3j&q1o(=6F&bKUw3SsMMmXo^N>$-m_UN5ZM_RfRT zr+50bwc22?Gc1I6uHU;C?u1WlMURUM%1OOtN$BYb8#~*hoLh?$M#~%k0Yyt_i zyiwvr#CF=$btA{0Bt)(v)de$M(5MrTxMn5MWNRFLq$(WdOJPE4V;A?Ts5jRwz{U)6 z{EpB*K3PRk!u=9qR;$%&S(^&wHn)7z+VZIxFJy#;IQ2la?h1#9>Q;|KRU1^;BWr%Rb3Dxl+kj5s$K2|Kx?UXXpL- zcc3*K>{#l1@c#!k5XEtSevpa|v`2D^Lx6W`m{{MHvD;HtKU8haK$A&rfv~8n#vaH} zJ-rFIHyv?zu5dC_@D-dnKjWhqDiS}pS`ZFI(3~`v%_*Iv-5~;*7G}2Ja|fwR*s1~- zGMwoa`6MJIm*G6~Cb>Vwym_G+n+%{NTh5z>l>(ic>zQVzxL&YIOKDbI&TyMMS;~|% z^n~k_J4}n!(Q^(j+mPDCP6uu7t99{P6EB0XEYB- zc!H|d4*+@m0{31bN;8?5`|K7GH;@0uVDJTD3CgHvpNzPD3cZBwxEE>sV^1R7rfzS* z9kt1QBAg#nF=5^u5$4K@&b4r=*ZF&COu8wa`s7ymYJoO7ox=R&$&&>glEU?giNckq zo+{)F<80yVlk2Ge{CMmM`4970^q9@(;^MxFYH!+`0L5Hhu?R#s@^nL^m&#;%K2=jE zj|m_r94;eUl8m3Uq_d9Q8Yoc)fjCCwjbpzt82n5cEaKVQ9z~~|N7xRhBSZx1x(@A9 z_e87JITmA*4QYryQ?N3DCaIly+J{-GEcV^G93~R9+avuJ-EX%IlAg5B=w6RNN|pPL zQ@(udTKUrQ=4QEW+vQV(fmikp^DGXdOov4B$5nSnN$j3Y)&3=y>`GERA;Lo!l;Kz^D~uih()XXO1PPK!r>OTY$=hdk*GrE-d`K{Svk_ zT^A9Crj$ck%o`Ak`?j(+B8pPK1daRpTDl@&!!5MSQ5@4bO@=Z# z2a>;$uEJ8gw+evhYAtV}B$cfy$WJ4#KuiMvbu(aEIIYL->prZ`z!4raGPMbk;bE2)0}04jm80%lQtpJ7{iA%Mk7!z|}QL`y({j>TxNj3g1Z zg&C<4GiJEW+>=2OBt**(cEG1+Jc_1GO7Z(b5P2*yMg0wP`C=Yc&dr+;KQj@dYSncD zz$cNg$`K?rE}T5`mXm-x8RoUw-ppC&Azfq5cv^Gy2V|{r{>F_)*Us96G}_gvYN_Nl z+$V(UAf`1sWR<4@t%o8qIFP9i&^Y}xr? zrh{TmO2R)Dewt)vrPFqkmgyB}0c2=BbVacUf|Tq5nG?)rz{9LZQI`7+Vfn2Bn#j92 zgsg*vGY?5nP)<$+%g>?#hbAq~E)<~GuYIN*anw!nff>q5WY(C-K?!1A(eU)V+GpOa z8mElcjYnHcM2KtzY#a0UKD<_*oi(iH)KqQe!R^~GoVfV~{$*}P{F*g$^X80ojYm#? zt#j|(a(+lp+UF;Y)4C3zBFCVSe-+W)W4haS?>brm9r< zaH&)(HMDa6EeM>cMYMhlW!?&L4w6F1P>FdtBAgFWY)R`65w#$KjL}bu1%=`n&vt?A zINVx-q|PWRQg_u435u!Ppy{mt8!2n7Ys?z&GtO=`6016xJ#pf>xvM_sF*&|5vs%4M zR#(Z@s-@0#`oE=sGG^}YzlL!z3G4c>k6{|v^mdNk!TK~s;p`chI!E}PwwD%3 zT+Cxmd=oQLAuyyQW^O;!a2$(yl{`p;ZU1yOeJ|M`Gw-MyCF76a0eq(CN`3x?-T)|U% z-Zh1}^T7xy?fuN&@}kHkOsRI>?3`pV;g*A`WUa{TEDc>~zcqRjS`kFExbGX!>ALjf z-DjSuKYiy;eR$Z^uim_L{(OC7b+z8EOjU}-`rP`uTX!F?OUKx%-hoVN>?K5dt9$;? z>KSxpwS4<6z`c8!OevEoRbX-G#{7+xRiw|Q*qAcrjVtpzroOSY_Mmlt$)4!4j0GRUFz(j~o4B_(G()tM67ehZew%K~-)lYM(jI0)k$09c>GOpUX*# z5~3z;3(xw_WR4;a+CAi&g$yK_kU33H%SlhDzcT*T__|RxCX6#id&_J2)zXP$ z$4YrKWBUGl>F~U7EUOw;qpQE7$2-*}XAtEM-x}IX+(r5om<8O?w8C7G-IIEw%L+j?LFc*$|_N4>Z^1YOMF9Ks&rQzf2-bSl+@aaEef&>9D&;1?KiCS6!(MBaNSTc_} z4Z%p;^gMt}8`>OKwia_foYs%;1XOsT_TXtTML*T|8Odfu5css9#oVc^vgs^rZ9}pJ ziK}ex{saxRgp0+2sf2)$Cxp7HZJnGHdHz=;R&y<7?ayt+$0mXXcR(<=ed-jisj>=! z0UsO;#QZKbe|&B^cJ7UaZ6iX=fq3ZVbL2!iB8S$)Lo?D(Y+24aNN_CtMM9lIo}b2y z%$UBL{+=DN;%p%6nXtE3*uZaMD$c$?e5*3Lk_ATX^A_;5E|#i*Gnu{R@GG5>+N-~uTR1w8A4Z(!AFN(8Z zDpQbVoN>`5&~8IlLIi9RDqNcgf<^)Yv%A{h0>xN}e0qLRN%Do2#SDgw1kf@ks6tgY zaxDwnC}IuIimMTUOyrVtm45_$okNsnO%SFFUAAr8wr$(CjV_yA{>rv(+qP|V8PosF zEN0G`Gr5S&T-;dXxriGX`92vmb~XI*x^j>1=~T_3Bp5^8*#o3-G}o42auq{!EZ`$< z+Z>#ikD*tv24LN~Cd?Yt_t`ROZN!QDqU%@ayN&exq+(mUDZA^}IJndGo3*C7zOSSb zp%1ri=xoZK(4Q6%E4}o$KX}xu3$zWNG?Sri*P2pVf6@ z64zXa_Uo%0(c6aTIu;PaBbcj8JC~DRkU5=Q1mmLc3kbIF0#&~u6n0~f zf_u5?806T7v|LyvFZF@gAbMT(*EI-T06mXv#zGm6UJx*w8QZI{=d*;)iiNgkw1Ee- zjNGJyO^vm9Han}QJ&wRyu5r@sk?ir1$42BUhbLn*hPBCyHLc(#IvyCWRcKG*8m5<0^}c*V zsd`{g<1h|p%CD1x9Yf4?l2>`Sfv~#lor)Mnn{EYmGv-pqE6S|h8+!m#+GC1=d5sVm z=egsORPvzSX*%gk{9!gE*$6`wkUcZs-9JFD6bi$Pz3}59wNsuCqZtTzlSX~0x-{^R zX*Wf44W+;;3;D#=t>4bB=i z*|x0=9t;BGF^6~X0ad_E0d>HMJ4~Ie&M>i}+YG;&y{!?{jF51s@oIS9 z)1R;BfMQ84yniwVa$e7)Rm&4rh7iwNy2mq%3K~gq^YvBI^*NQTo2N9Vxt3zyqP7UI zY8dhM7qHQ*NnV0wMwseHxK2?$JBZWdj?>DMS72mB*m(V8TnPy|cl1k%5`nhrGC)q> zVr8F3NC`&EIMKlA`Zh}9CORD%PskGZZz1+Ow#$w3<(sfZ)$&&=lF4TzLBc0!lp^hd zoo;RX>KC_Jnoa{t7Fv+FllgtFTrv>}pA(cNmafoO4_b#!wa-;K@^}VXxd=n61SP}S6+FZhpa(yG2r;{0YE*|ellgA0`uqhfJ}56d-4+kq4Gff zfhM_%w4IxR1tAp}az_m$v$kb>f)lCBg^gJkTx7|}WPqT^W&1H*LUSeWPxa|9v?0e5Jis}XWe=y0gzlFtZ*M9h@l}{(T>>VH&%o-*q(6^figS5Va1oSLFiRHcl#OyLoj(dP z86A1RAMsR^4CM4E7feSXFYUnt)t@(<^2xfD-&yP{u`nZY*`vC8?Q3*70=vBWl&l!5 zs~YN=+0w@@^^%fqI~L@HXPtsf--B&DR%9VExFjp5{NNkmG*k-AGCB$Rv_~Pz&??|W zSL+mr7LF7kj{Uh%ScvDHS^)^O=bDP#lmrexFRTCHr3duCCkD5|gG*>^k!&X85X>wZ z-={8oC?oylC2t517FZqLTn>MjdW=;U`R}a`qwfFQH=Qi9(?oMZqB}HgMxWLg81Q=C z9~h6cV5D()>sWa6@I(jy{l2;~rpnFL1Yph@Jj-;9mVx=W^dO}<{M&c3S)cnIi6bT^ zj2ki~)nDX7TjW|bFKn5P1xCdH>TSC=J$py|PN!)ccseO$yg6Ozb4+3@5Mg2*%b^$zOu&@!*$s_szG(mVdsS6d5*7lmmGLQd67Ls;}B%l zg&~@Z;~9s)B3gd85bn&~1Hh4@+E;HKZ&^KsI;Yd7$QOZ%+ev2>l*St-o)Jg>{f`1@ znq#^etvVpH5YvAElAT8qeauv`$iTsr^dc;`76r9tmF2Kex7L^y21oufT|S+^&Ewdj z9BV+w!|V?suYfJ+DZmItiEcjNU1+0*;gXpwQKnSvGe=0ytL|STa9m6(S$HsQWvk_< zr-n8SVPxe;C>Q|khL}t>Ib}Hl1d|{%s?;#|1Ic06@yBPK_%{$|B87@P@x}2Hh7Y4) z?*-on6sNtQKy0nW(_t7%?Rdp)2`MPlo}6jkX0r@XKON^&u?bl8ceE#<61(p95d=Q!53|Te#J=-eQ}w;C zr|lc9mS#K^ya+ar7`nA8yWfy^Khs}OZ??L9hukw z1Jtz!+LE&4#7vk*^mr8wAd`WcMc0We~C#?ovu; zO#M(zO?d(QAs07PyoLYjvnhJBIG9n-LB@PA5kvH3^wq!;h`>e%1#^-OnfpDhk)~E6 zH51T7;4iyY!c^c}-I7+J5W~T+Ol;BGTE!jH+EHp8eR>Pqt{E@FTIP@)%rPI`;tSj+ z=F}r@c7=<*1fAS#;_@k{<=bnb&8~*(Mp8uH6I>}-cuLz2m2Ymr{ZRk*N^R4zK2|xv z#z2htw5nt1xWJU&?C^c(@#qxfP~2{9?X>Gh*mYtiFfar%%m%Ft1Z%bXWhY#2IzRUd z!&t21WJjAnGoF~3pL~A>zsnpNzysSo%ja$Dv{=UVLm+6){ow762EY+Z$auYP`KV}! z|4BrS0BA#%9d7tMV5YRj5eR(yp*2Q@7TO(e5*afxpv2I@N#(T-Z)KuWzh@K>%O`fI zaPMaY6&2N~xR;dFIFQBB01l*;K4vs3uf+?``l}El=!Kc3UMU}@V89;9-HxtNX}&n9 z*b%W@{uM;dV&!gbWV|FFOT?oKJY>xJ);+gRW9V!8U|8igU00t5+}#FT;R3zPYVLlN zpO;Ur)*3KkR{$FIzXnDHA1+RJmi@m?R!U1?O)gYcMspl`FI{TMtL`Ez9neRh2s>*B z6`p5XM%_|h{GI&$Wo@~t-8}X)3q>yPw#+bM7$uWJL8m4~1hzNrOfC{3qG}6wXuPkw zzd59mu0-+o$B^u2RnW}npSIfIsexPb>LT$7!$3zQBkxM=`DIHaaE*%6q%y;FD-cp-6Mw$@;h8{~}J0a9yC6;W&*3d(qpq zKuSRnxj3f~kC)>>U$~dq6utHeC^S}W%$YRdtr$(`n^C~JFmkZJt#4~ej4{KrENs8V zd5g+W2!RL8J?`GcH|y!@r%o%c>)wTCe+Eb_Fn}A+G1GKQR7y?VxuLOjw2-ZT9)S{F zb=?yC!X$W_a3d4VJDA>Utlg}z=cX~5lYe)C;j`_YCHd7 zjC>(oy%Ax)CdqmNWo9Q~U6adRE(Ujn`PUf8HCfbbp?<>%hWR!HHCKPys2USHA*;ou zxE;F}#OOVjZQsbr`%5}a8p(qFWM6V$V4!*UPlcUfEY@$$!c;3&)YQ_9 zggLFW8S|FX9Lk*9b61W`lg(~kN!Sb@oS1g^baZ%qoJ?DAI4Z@Q_gCKX(ExMY`&+>Vye*E- zWv_RjJ7%Y$cyg2?M*iz=MuVDx(tHCz**h@DP&k6{`NwP_;E%iXkJE~J$E>RNht5cA zOf5E_30E~)lg^XN$cLNluE+7g2uPNHQ+Iv6%fVCz9;h7Ah`YYm)7j0;c45}1iFN;> zHY^F)NFvx;jq%`}piBzR$d|1IO5oRrMO)-Zat9G2r98ZN=Q2Kko#Yqw!ZxFwj^VCT zLLPlRAuAmr3G&i(R5V_r$U0p7ddE0*1@S^Hv1kFxbflcipnBv|PDD!@{a!poh;Cm@ zSJ`^B)A0B3!@sKRe%#OHTakC$Xl{f4tZ)#l5ad zGSp1 zS5->7TXPnnd5ECv6PTQurIV6mhWUz|Y0t4RQ}L2ml&lU$n9sG5=oMK|)(S}|asG+! zPN1i9U+N-Fp3(^0^G7znqdBXTS#a!S`$Td3FM}R89VQ*6$*_Z&jUXE`ms05thXeC+ zUn%Ly{3$rsxWs^ex5X~DfmCB>*gR8eY`=OB8&kciO=?BA@c|uMrPwTudX|hkV=~-G z2#W=LbMK-iZPC(=Qlb4zHup@Mla4k(|5oV8TTTy-JyGIV*?Q@@zdT3`vkmhSH_*RlpLO}F zKzv7&u_YF7y2f5sUcLY6q5a%t@$|qevSrgL6Z~&@$ieof`Pzbjur!<6(sr*Z{O<(q zkL<}r+;08dL9_=E^8w}LcvLsUyQQ^&G z7q{Pt;r$|GA=PGzox4OzCxuL*8I3_a?Z5m6n6nXtnbn9bLpyfm>*(xW75KV&R~nE; zm=b5Go+x(h_Qi+mVr@65K05ZXSVo*HQoGwy&hd2g0NG<~$tOc0t7WLsJL?}W3SOn~ zCJA8_C+Vdr|8hQPx2NVNc7sZu;6CKHK22BM-MyW;=r7NU3?!{N80xy_1^Ub^a4Yl? zRfeW&X~Gm`*30d!p`m(&Jt!gh=clXFy0+)rMi2%df=%V5DY)##A;2Udno3*WQOPt$ zmdf*E!+IFr!2_#wfeIzt4j1h00bxu!1t!oTM8OqiLL8{D^;`Gfr3=?B04d^Gq_Lo? zOr0M;P^|GW2KCd6e>yJ!M)#PsSd5lbY9U2g-%fa1V_SnB->U)LQWs~l`(le;>#tBV z|Mvk6hIFZIW_nuwkE;W)!3qk>RX_gHw8Qkv@h?!XHjdPUc(UDaPX5E|FjtCagp8Q@ zX%LU-0zJdw9Pz>5b}{@CcC#gskWo{SuH?3xLN7tC zanS?6KR6tAd)!TY{QN9#rXo!iPrl+;`$pyN?mzO(cY2vTuGY3zg>QSC^2J6z`?)D;+`rOo>w8J?Idt0>^_zT z-32O21KJ3dcVnBT7Hgq@^d@?)+txTp^0^D>H@sK8eY`WN9EV*=n-byrQ@EzaUZM?8 zk?(QI2z!0YS3CLm{2bifX)2pB^@KUK)mrLk1HpAHKYnq0Ac>9s(s$2Op;Q8+g-eZ; z%=_^a^c!VKUN1Q0>|s%6__yC-6J{ZcLo;HPJ?T*WeBrcpnZhSz)vi5tj6MMa(RpQ3 zp%9J+xEQC5<-;8!a>Kh`r;ic(ly{q&o;#{48qJ~z<>7(}l&xx#`0jXW!R41=_3^d{ z>{cHHj1w(pyV3#C;f75POu+E4o?pIaev00>LSdx)t7{hxtl#;5PRN|zFNppgD63!V z!GbY{8A4$=7V~Ej6A_~-d7(P|tv->BeVx+WKQIu5^eat+o`7H0 zWAXE?8!I^ZqA2DBh$@qGovmcojZ1!YaZf-%x*zKbSwSf<5bU~7mDC!#q_t=#e=Qm5 z&l{wv{x89I_BqqE@C5_0g0u(r?QA7h!k2TxI~(ZLA)zD5-=;K32?Yj@%VGFn{o#mKeX;;1|k)}M;|ru(jY z{AwIrJuk0!qwkD!9UYX#MU9K==M-(K++JfCr{i)Kis#C!^t+(w$8YOz7=lvRu`A(i#W24RTzs>T^GvtLsEX z#c7qo_sEJwX_BfBV1C?U#^Yu&-d?B(wCBK6XTX71k}}4PK%`xt*-djX)T@Jl@1tRa zxZUFYDev*x%)mwe>XCo!nxBIQ-#R~QJXcL4O$Cbi`YaR|11dq_z5F`yOltNuO83>QKzS( z)OtcPOH%SpzCk@qDa|V~2p@Z_y(Y$2yqnA6t+uwO%H)Gnu!oshi{jK4L;NZd8WPgBQSh+(wV80O~v=d`z)+H_K zMm*oS7VkpZuTm0Ig%=+UO(kY%Y@l8t&TzK)i_&>KML-`zQ934Kqk<{)EiUo9AFaYw zI>^19RN)VS*oQtrF#ndAIGdl35-u?o;;_NFeb&Spk- z|BW1st)Zcr*jNY|3I7}N@n3_Q|$eP((xLOi2Gcj>N z^YcUhZwHV+Pfwq( z-$I`OpYM0xZrisbU-1sNr?nnwvkV#>9HonYcV`T8db@kSIKNzZyM4KTeBHj%T1y`{ zACD)`OAS80W;Iq{b`1=EyuQ7Ax^kzMudmO~Ki@7oe$My*&LSAhmfEC#Ils8}bP4qS zydJOm|Kwr?{M>u8CrqUza2j`q)DIPeLzZQsT~yYNECyU>5)%Lx)1g0^tE`qg=SCutH%& zIT!pDl3U8FyM~=apC=ObnX)thzOHwrJW%?_B*9o>Yh-4@nn%=vk)z2ZzLK??j2R(e zIR*nWEpZmSN3<$wDpkq@t#sMJE`U=<6;o0b&D3H`Wp($Y^eMBdvb5zcol_J|g{8_`W=JyYoJv#a|3q?`D@p)g3bqZ6MGj@h`6%k-2y$n#!Bv!|#3#ybLB! z=hYtGsffzq0>kx7i-?LiE+96~Sn25!Ta9^k3Y5x0I6-B!;mTb?UwRjlD;JQ53He}K z5~OODN>zm~t}SSq>bYx|R+*Zau{LDDtOLL&ANm@~p~ou{GR8#ikBrb+|3rj+z1dgH zJ$%5#FaMfH+@F^gE%&D37PZuj{ahCQUKwcEXf<1*Mvj%#+|*jVAj&L&l6%=%0IKJ0``ZHvJYQz>E^?Wotp;B{k<4M*0> z=$Xq9;J*8DHN{cAXR%pM6xGDSe#u6KKnyz?*!if;z37#iibNQqo`0Zb29V50jQe_$ zsm!U3LS*eWd^nwz(PSRKin<@X7$Z#(2_cJ)Df}=Q4SleG67$zkoa~4*p-Ev<3ZRNI zs?OW>ymDcctWo-8sBr7f5_=kV3h=-;`Ep*KW87dFS?BW5TzU{)7Cl!da3Uv!jgBq7 ziw)o_TS>)XonO@sS({Zc5%8F?v}HV@R`wQ-TGd=lZ(Uok`292t*TZ@G@2y5yG2{~N zred;9Sp}0C6N^Py>IRt6Rph0(cTG%I%>)$b7Nj=hr|Om`$P|eD5fkO-A-=7+p1VT) zo5A<@9Nyal{>gr|ECIJ1adqv>+4RLF_KQN|nP7Eo(b-hNrQ0svnR@@n-IRk<=4eQ3 z0FK*V-qp91d#1vKLl-IEC;ZhlxsgabnLZIlZ$QplmHvs6gN9i~_(V5zJ)@kD#b(yE zl1V*!gdE#?6T54lG?|71%KPH|_H=Z9~JfI?tC7+x1~b0zdgl;@IP z`Or)Gkl#6VHo37Yeqw@@hCgf@-iliZnQR`JF2Y6i98efkSeqtqfbfy&*g-WYri5-5 zkzEh#KC;KM6BpRpljk7%^hQp#RW6*6E#eM7GiK%}4lk4nr&XfkI8Vnp6g8ESR2C6s z85N;*^;%bf=7sbv_HL&2G>M3IS*$r48c=y?VC+C0-AzS`A}X{bDo0A?+bVQgU-76Z zdDXI9w;3jyq9KwJE^1L7HiPY|Udde7cJMW&VFp!hQDNDfbdOe_~Vb>@F%@~3$u&a0oPPF-W!D4`)U20ssHlt zuy5BdxUaHN9KCDdg{h*9jzzGWG;&8j7?ss2Ng3w(3o^-XJGi zQI9jS-^smHBJptEvgI~5j4AJtJ(oF}EsQoW8rA5HH9R~9>=*1UQ=@w1cZK*W=!q?% zVV2P|$2W5s*FX*7a zpu8Fk#B>4{C^YpizK_-CbADf`9fy;Tos2j08304+xRoGKI%FP@$w)~FAFqFaLm)21 z9+m;)hFX{J21lR?9b$KZaad~{sy0065X4?))F$@QDaUmHW`ry7dxpwI$qeSZs{+K_ zwH%>t)N{;@Iyj)O?*W?~*xN4d!94m) zpd=u{?DK4;6fg4ub3qM=ITp9(zi?dw>L8>tub1W;%U?a`XBL58_=t(nAmAheh;VqP z5g@>l1DwS{^6v$xXWAW4{D} z*Ht_i&u`(usE3f0M7J9NkAyb{IMxhvK(y;;xV%){k0&ASzgXOt~5X}|gk)D_@+`=h+ zGT?!7rQ7Q;EXp-du zj#^v({O;9yUU{OvrE87+ayxc9zBllXNwc{5AWn;rninwg)QP!+^{HSW(fLXgT;bK#9V%Z+?0_bEW9JO>9G?ODp z7Nr&b6}UTNerqNOI7KGB=5%U{q5_cSvO!-gKS$bTKX6bcOzNxaW>?Zl&LP@MML0B) z{bAX42{3y&r&+MU*ZAnpauBschQHo>IGST))4y z2#eY=r3)htnsX0E{DQ8RZHO7Xd4Y0GPE^>l2{W{rvzxVPXNI#Mi`fVDc-a7~Y-*(* zl@gqoYhtCePxlrMTbYeOl)#M0E6$!6TuC85D9~4L@0VU8jk8$I*iSmEmev*OK& zoeqJ*G-C&ad6aykW4ny*bi1^OeL0_&Pk{odupX6K-PVYhxw6&SuIln#uap;MAoT>r; zhOWtI#{=@$xdHr9+bVMuw1LtG77XG#L;4nxeoI@5ta4Be-8OYj;e)YkT7wthAJElT zfxd*m$g&Y@TT+oRNbC8O$9Z2KZ(^{=y+LYLBT#n2K#e=3$hqu;fTPkmm~qTdFwJ<6 zF?09tt$|0bhuK)pr$NRTVY=@yj=E&c@m;HGdf~JZmkayT>a#c@%lGmBOY&# z?ksx4TAD#G{0?Ize5A_QRmZ?5@^VvHEQODG?e||7GW=Ouh~5@5c_^u z-jLHfyhtJuDX8`g)nuOWuOp;}C|e4iaivU|$+PMw(n|BjH5%!hq|z9*ixh+Nn?=4n z0q-5RZ-UcZz8^e=!zrY{SJ4(Rtmv*?uht@{BcRSk>xv*YDCGAb?K{&|*nPQWEGNOTxOKt)wmI4ln(pC`30ZamlR2>On@$>TYb_Xgyc*V9IF zts$lkZ&jsE8^1J~*<$%5;wgI5@SxVnEEb=uU#y(1T;wcvSMU_aGj5rLIBl*A04@XU zcf9}xzW&E=C6AYHz)ykvaW)cELl zXcCm<=JzTP%mrArtt8k{vj4#($4ClYH=PClvDoysFi-d7zSujwEVa z;6JUiX~rNwDC+m+>Emf6p{)o0{uCgZ(Sw>%&8G8jJc{9>z7c*$;MBHMS-t` zxMCUxfgYgxL{8tZ**lOx+ijUUnocHku1}$Fg{Qt{$pLEFk-wZFSg#=AOi6YldygCo z;{1SRqaJ$!>DS!$jF9|Hg;C6|m{K@yPdIphBI^S_`yRaNyz)+8#muT9SZaZ;{|PIE zOr2;(@uxIbEW|ye`T-MfWa&Na%D4-`Ocn;)(rk{J29L|glTPWfszSChn^(bQ$^GHP z$X5F0)OZg)4U5Uz+!N6%tUL}Yqnn^~Lt#K~Wo^UeyLK{d1y{X-un%Ep zUDO3O783r-u;tt(syI{4>wx@HLb43ju<&D@$I1caq7S}HaY0W38+Vt zMy!54<_UvkY{u-Kf_AbyR{@NM1E%pL1q<5ebRJeym*^&k9Ff|IJDs}^UEBLeyI+kpZ&fG_fNlQs>me{ur32L~y5#nT}=&>tPJ6Su% zt{29LJ)|3`&56y?00t?|ikiHOs@2hKv)b3WC-)WF4!vOuZ>c3a-Pv?qaNRI!0U49l z^Uep=_6|bACLXUcryMWN72WhNMWh^=1;H?zYi!i25fNQYipw|2WKtN#1q;t9WW>am zl+)+)OVDZ}<&zakn~K0{BKx(N*bYbsf#vxA$4hA$m=#uI$Nbe*-{c zJ*z0<4D9d2XuY$}aUu%VD6VznNOq#lruXOGUodor5^B$fVH?c+B&8qhfUTQXGM0eQ zCc}->#Jg@{mfHT9MvLL@L4e51%1gCa_8@E2)fhYbq5#U_TgCYX8s7>^M>+TJ^`4qI zUNq^b#xIWzrubM3yT7o^F4n8-xJ5|#eh56&<_uU@v{jk=i_zct@|)?XJFC#25bRz; zrL|jqF``TJkz*|uDu<8KT9d_w(ekO-TYejhcDo5 z4h?E-T3>WeYVQ@jHFGXbhreD&AP$=M5jxnCOEXQ2NOeL-Z)gVuqZH zr7sCmNr|h)h&YHTGOI;0F7obK;al+nE@97ztc7p%RXOX>6Hzi`R_!)=9%7RWw{vGO ziXQLHC{|3?p7o44d}P|0d*@?Fglv|^Hvt#tH?1T1dUp!IwQd7Bx+4p4xqxbRVyN@$69Nra0Onv}h>bi?0waqmJA zYvSe~ZyTdxal3=#>ZP!wv<_P9Vx79GgCZoH9}KA@6X z$+=x2byen!d-qADqF!<^4dqVR*TF>jKvoj11{Z4*`=XOpnz|Z^8GW?4oiTT2t>)i0 zwRnkT$;e6LNDVf<$jJivdu#bhjicCuJ>MvbwxO!-?|S-ZaHq8cHjxaO?1SotsH2L= zFMM4;q(WyR?ie?#h?kFQ|JXLRVRqf@12wj6y~RxlsNzN&H~7j{Y29@>Bn)@8ei`^> z0$sd$9pC)rgJ*TCCGu6}`byxaaS-aygAS*H(fo7U`ESf#?y1|2h)D8#HsfK>_(5wW zxeG@%d~1iUWny%rKV|JKDoMdZ^z1@QuIz73HY~WYC~z$VbPrmWkV&x(8eT~GXa+@? zM=BPJ=3K1UJgOq)>AY0ggu56|ElS4st}ROVYA&fAwD$$g74r>qo8om}l=H0L2f#4w zh4suolN>-Y($0mkwDdi!D5*9~V#OSzHbdD9nk|$Z0J3NZIbnkIjNrc#=u=ez$vyF0 zeKqziqZuAOQ}6k)e?iT@GI9N;=&q<&N~spFU>R*(WaFF4woprg2-ONERF|01F4Lpr zWJ80bXpw%Ar$&I$BJrn2xX~hIX%f3Ph@JtbQg&0zh|hJ*U2j1wn}nZkyRk)wx|(WBXD(Y?n}Qa50>z-ZC4G->6f;**Ej z=?Jc1>()vjimY?k`Q+5Q`>o$Zwd{Jv@sl zNvfE-YTIKTKam<6mKe;T2qEyzZ?SRP$=&>YB3zjdUK2$Knh$;=5-Z z*{nMW+7aEX3vSsbwF}N^nP>0Fy(#@T;}@OpmMr#36nQa5-i~I&n8-TQ2Nd}j<@ucJ zr=N`;5Gxc=p3cP!osT}5q@Upu3)}jZ zAuh7e3GUi(Z_jT1(-aoEDofKuZeU6$V_OH$0Hv*=svN=1%Vn*Ee@t!%wW49&pte`b zt7e>6FKa>@ZbHM~h~nOW=Hqq6xHzMKJ)@^B?7So028+Ex?z{>bcI_`%s8&2@FT>yk zJ*Ve9r$=4XV_e9Vs~E)1tmM@K{RWEuyPUs-cDg){N(N?*;(OzT z+T}f6Co&U9?9`Yr8-^k~+L#*yI-3TcvpQl8-{xX>7dNjmJI?=Wx+iw%h50@Oc~@mf zL(JC$WmouMlDJ1FVphl(YA8+8SN^~!61KZ8!*{6tyWxV-0{7mItmibcHs|$f$bzJ& zXQ(vE)gn+kQyea}Lb2jR*J(jX=Fx54N~v9GDG1lPAH*7XkleaI4u*~1M&8;=Jvrz| zKT?>2?PV5f1;Vsw`9xo#)ev|)sMrkZq7tN4y0c>Qi&C+oE3_T6)M>h8GVivP$V@s=_s!ZLuoBSRFnKWGEYV1cYHoN zr7O%fvA|c8Vsv9XRsRuVtf>r&q$)91@)(L0xA*feL=?Li_=GXIT`~V3J<^UN_k4uK zVq&*NGotRMb5{bFK;8}0fN{WP@F#jC^zRJV;OsR+auFqlOOXUa)OT#sxl==OD>`-MdP2dAwYii!R>5Dk#E&Yfr+dc z1}zYfR?H5nWX)toWp8iQNgZ?egq2xS9x%=Qz8V9NkJV5MN@%WI$^?oLEEBrcxrX=| zbwj!djO$lb2$GPILIA|nn18aPJn*ewx90iZ= zE(U1^`^O;SNpk80@LSh{AxS5`Ci|)g^w?<{z@p;*yg17?!k04)`oXOiBrGaAIS>qv;q03E%lkN(f*vaxIkwWnfiq|nX< z;jDNMa#xRVyB?ihM<2OY3%wqx0#VSa=5A|UUcH0Cc%+&V1J~dBi()`^%RrELmYlQq zd!3qd%kvXdTq+$E6jUf!Y$Q~Yus4a2GP0zD6xI(38Jnoqg1i>7gz=Gtyl?`_x_ctZ zy850w&$mkXgbSynOG#&eu5Zk7J-WJARVe=T@6C$CA++`l&3$;k9Bc1H_s7;Ghd%@b={4|OzFGj0}`>Kzb|$A|-)1qK`&sSnLn)E`-k z;etk+Ax)BnfRSwaEs`P4bK@#krWMFjNG|jvbq04f?8MU<280W9Y<%?O+lL{YEiXPf zw{>R(3+;oOxZSeADzUb~YB9~nCP|wd*W#m+Bj_}c^9ySJO4#;;o0+B|2T~gm`eZhR z=$4cIdB#$I_ycGg=%Cs6e=UsbFPzIz5X8LFkIaE1Cp24WYhDj9<-&VB-GZ|;c^fud znDF#DlF9-z{l>r`45+Wm9H*geVk%KgOfyO-oy=N?D-=?I_vdMdYY!)k?^Ch)fh;Lp znFkA9eOZh(lbBgPLMXd&tZ!|Z$Kbr80&dZ_F+qME9{jIMM3vRDQexqmaa02@Kc$Q^YXFw{1I4fpAFC zJC_JiQi1Rq++ZlBPuv2e;aOtv`A^yoqOe>s57$GBdC=`wgtN$-Pl%xch#z35 zv;NsU4C6P1vsnF4*n|13T%n*L{)khHgot1M*yfSc?{|xJeNze~P}Bl&G^*cx?*jw9 z;c!x)K5L0Xy@P6X54VnN?+>?g2=3o_?=r4?)ZcVTPHaEuRLBr{0zc^Gj&}}Bh*Y0C zu)@$k;8vJ@z5Rwo4-SrS;12;t5kodi5kD~Jm{UKY`E6kVu|~)&j3EKBvXNSCsR6N< z2{XOo>|qbJiNQvnG@Ob3y~6a&ZyIAF=s(bJV+RHWK&$r*N)fi-WML%XxdV`#Z&Wd& z^a7zuV~3@V-9yAjk1B1zV4tYsCY%D1IAn4Ckp9TSnBxiszY1S5C{sAmS05P^!-)Ms z4jD6Z`#d8#_Qm}{=wtRr_r;k6;-Dx`{$VMkU!DG#&ksp$OV^Qy&+H|ubF5A0sqZjL|dg%2F+B5p^ew`N}sTQ#RP?7-VJv{R`v!dpRt%|j!zt=xZU=AwnPC;rklSH`I>0}3Z_|UJU;_4o88G1R zivNj4^M+qF?C^%qOLDKpJMpr|RdwKVhrv7YvgZ}au;<~6u(I#e1A(2h=Q9^U@hV|C zfc=e>c~ANSd3lfegUE1z@Cj<0@T&2d7!U}Qb3%{@7H~jdSU8kcml_b5b`QH7t8quW z8`~?j6>|D&Z#!b}YX6Bh`?&3i#&Ea27UbrO@eLe%J78mZ^fPpcyeo+EL$M>u;xMeE zIjd8T#_*ut6${sewt1(q6Lk%Fr`{Eez7vIq>|speFx=^x(R#qwHLyGS;ThT+uKpR@ z8y;Yc5`fTIm(d%&jV#bt`Kjj{LHEyu1l)PlOB{@P#`Z>cduI1W`*{Z64*5sgc}Cy% z0oxw)I3hYc;=PI<5ZNB`IAU(T!TUyeyu#!5%YVbiN%Mwzyz#uk-riro;@&=9bJE}c z(tdOI{jKMVBX7*H8>WKXI|Sj2(=!nM&x}a;;(U|cYPj}yr2F!$qPKgaDA;Q zIKR&ujGasPCoKwmAvnM1KLhwb8UWwp3`b82rt&{W6kK0kiTH7_BaZjM&}uKCHQT{8M_>0zYh^_m{ef5~Kkuxbv9K`WS# zK>hOeYAF#qYa#Z>VBHUL>94|Z2nY*{yT5YM=?~=H-=6<&QwHlxE9DwaVplH1~Im0R^tormmbrAKj=I&@c<2L|B8qzp zVSbTvKXa6j$ZOz<^8;Q}h^Z9-nP**sfa(_f9(&<&GRupVDx-w9+ZI@R?7QxpVr|qpR~b3^XzJp(Pnp> zil-Gk{l{}ila{172h_X(Y#4=y(a#~8xoyY*(fPcjwvU0L;{>PMpHNV;Zr& zCzIDeIbkVnUPH1k>{YLI>hTH9&swQ#7K>gt(Nqaz6TAGl>3OzY#LbFHnMolv?4WF% zNi7%NXgsPVmco6IfVm^W<1k2tH%MS#G&2(Zt@Bq$Wxp7vf>#g489P%t3?Q{X?iX$q z6*)0bT2eC9J|@W22OY713NBs}pNWH-KZ%k@w1@gLJCKvIY1laBeRDxgiB-mu%92Gk zCTSlo9FSxeRY+-q|Ag~7^09~-j1O!sOxt!#YfOs4{!~Q_=QxMkT8qtqoY+g6NuZn_ z)elN0FF^I7xxnp($~S>1Bha#8C7_`<#4fIsz94#SNY(gOkCteFh-k)=qL^QsipT76 zsRfJ%tgUQ3Tbv*MmhwG+IBf}Z4ejt$@VK0!l&NqKA$qxr_2QQ|B4K^1y%b~?2cN6( z3W}0Z+-1%fE;zPx9uHuxwRaMmoj1hVUePVhiQA2YMsw9nJxK`7aSKf!k`ZNp$9KEC zti zo}Pa&cFkd886b8C;&xbom+xd*3{&?K>|)%;2dv{IH3Q7r? zbv>|Wq-Z1>a#p>-qYntH&oZk*hfUX?MC=S8qike1@ipAV`TQR8Twd(Uy%K-<2~P&= z@C(~DOv)QR^3q33_4eAEg@%9Y-W}ttH()hO%qNI1hp3_D1?I&nspKb^!+`aVzg+z8 z)S`WCFABseT||942;%;eyf@ooG(t2=G*UELG-5QW9A^4j?Q~u{VnY~9Btk>)8k%|% zPA!e;34v;2g`snT{4o$tVyQ)N`T+S74ZnEM^U@_}XV<|YKIS|0&Pz~PwV?W~!d7@% z^Sp(+C(CB}o51gb0Vy6vAvK|rntCtC4&qq!Fpy@<)eay45U}0()c#nGcWydws2(+! ze+5`LiwAXwHC*Y%?^dB?IbeWaW~{jKET9M3A?tqopTdyYGB<$YaOWrIPp=obvl{*K zHKDPGeu}PkK^K`=C0X|8;n|;Bxx>MJB>C-DOwv_dbMCG17KVLcjd7Uj%{P13&lXc1 z@<9M-f( z(}Qce6we}{0j#=&)g6-G2e<>{vE$n#hDWgT^#9bmn*iJPCr< zxmT@boQxFt&Uq-wDNwHGIvV?8n~A>7Jq|H2DNJ*+b}qA(S*n6$5Vu~?8Nsay-$I*eiF>+GL%Xn$VybUdGrzACQ5zAo?UO^ zilE0OW!<20?I4FQ@Au6GZ7#9KJvlM4=1N_M#ZX#Y*rOj9 za58n7a4@a1suHThzkC=p9<1kH{o0I0Gr)&ObGWNVt{BpS3-yV#3Y}eY!S|Qd>lb?j z3HdkHGMk%nx>Ra4bl(~zy*)~!J7J5}#~7?RwqETi*{x-$wBN*O>|AJx*Mh$zD^o@j zB;ui32G6t4#_0O=u=>Efh-W`uv~zHGObVmjWLV`E3c{9MQz|dSMt!HdiKMAAM9P+` z)UFk$#PXKtezGNPLOHFqMuO+mH}_ZiOho0Hv!R)Cn*;X=Eu-EbM?}VI0{7E%+o;W}wW`SFj8M}U z&=qO|-E`r0yszC|$=iLQSjfk({!wAE{?8Q_I}6YMRagMF|Fi+X+8gf*3*Gl#-#(To zM5~j}hd4C<%N&!QKMq2|jm1jffq7QlB9oP~)Y~%&Rhu(q9zKB3uEQ&yH?ouTT&JWJ z0j?9$35_4B0EnSkqoHo*0Vd1$``|~-;s&|*t4~6&A3^xL$0a&~VkHoOULS1WF9`+n z&h+Sy?x$;v07YpL)jRBgUchezqqKR75agd_Pll_hC;?BLTvlHziO^m|wV_L)ne~O; z0GenBLEXuo(k?{cD>B+`@nNsl2Bn8xHf+8hvPVPxjku6RBAOLW7x_hHOTnxPoB$7D zvfrV<;w6kIkj6t1#UlAoil-_9y>lFrHA_k9Q^Lm>HQiCNq`g3-<%F~OY>D8|Quq&r z&jt_}Qe5<^1r8!6#H-}|?raq{f}It4ygD^pla=j0Z#wh9w@&Rho(iVksq*W|yXMV) z=JJ7?my^o&^6$|=KDO&$vi&C(Qy?c_376`^uUKam?K`J&i}hO8OXJAp%NopPM<2Wz z9$rGrwT+T&%@lHqb3ijI)A4-foh3Z!o>RfNGNRXai3@i#osp|Eqd{{smA8y2zPXAg zq6$C!Imw%T3}x_Mu3K-~e!s2WICALF0xlzdb$ALMC&AHwEG59v} zyg%gJV1Dd!i|lMJFqS;E5cxCBp^}O7r1<4ef530S9z~7cW^|`M#TbP-Wq~(<+pky8 zS#zc}$3GW$yd1ZFOp0;ET4E=x+c3=`QH^<(a6P0*Pzb0X+-iq+o4IUQZ82y37-}vO z7jWlO%W?9w8A>`VYN~;kPFk5~OA0Hg7`!U~##6G87-AqEfx=xR$v(1B_@NFJ4u&$M74%%SpAtnjB(ycCVa{`<G`}HYWm+h)hX3eN$kBmlO zn5yJPGna~Ubmt1;2lLk2?2dC>Vy68nW}-?3My$o79$SQu)s^Ag-UeP=aG{$l*j(HM zAJjbdMFAvp{YsNIZ}{$U3|Z65Hjgwi-|oj8^ntY>R$mogH!yZbmC_nWlI1QX zFq*3J=oSqe)W%FH__D$ZKK2PbGx%X?L6kK35zmtd#A3F&u7+pIJ^DmEZ9?FO??Llz z+-r?YK&_ZTo;E<-X+d}k#dI))&0D9q$zD5d#%3#0?zv3jN4f$eUqErFqxLQ{LsveA z6Q$FV)TEkup>p7eyk+tT3o$WE_Wdo_!dLTjS3X#0S68mL=eysa?$z$Hhy%LhrCjR} z&W`yhr}nnv>ut&xQpG24t1o%gI6>@Zu;g-_fuml6c7^lAr2q`)p+}HL%RwbDv#92L zs<~oFzs5%O>j`+@rOBrN)Uhb1F&TR9o31u}vQZD*Vp@{ZUKDXArQgVyJh_$DSd>Qb zgn5Gyr1C)c$3>a#f3YaDv;J#QX5;2&`Hx-1qPB%C(Fnools+r$ldyOmcwK@BW=4rh zoN+b9n6Ip?ki97(O}X%kvV0KSr2hH!)TWGs6c6nB_}#?R=|tzqHL#&RF2J6;(72!W zCjGO`EKzZ=ux(oW0-tHH#Ch5+l(#_uy_GUPLLiPkIx!&%Lzf2kh>pU%?3JIzWSZ&? zkiIwwMgY}gJOJ`{>OS1hCNpi`Q?>w$0sGE)Sw8&b4rhWp3>uhvIasVV5#*OxMQs=+H&BU5X35yFHbXdS5sv%N9AjJ$i5VDUm&wC) zB+No%QI|MjVJ^u%lu6aZGnu*EILtx{>y+Ytbd+qgiB1$Z=_ywOg{=EUDZ2r^>BA&k zQQfc%Zay}!&VaFMmVrAqvCp;F@@`S1>lM7~J^lnge`K|KqR;Q8IeZy;d6U!iia6i( zx^3l?HMQ#bMb@|45I#|yDP^Fo0Gdcu8wR4<&WqLfvU{d7 zrJditadrd!nqg=TQ1<1s#>K~n=C-%xq@)9 zqT^e~`5RE;XZYar1a`#Y1^6D8xC%V`_2&=9l!~SjvmZRJlO#~ZsuXoTGODuH$UAt= zD@{6u`{CLRVnkN<-&)Lz0FgFlc9haF&%E8b-39(rvvxe06E>a%vQz;tyH0hwgEJ(d zwj)Q=M}HRiyQKVY5a=sDsc#zIyV(m72!5Ov|Go>RH2Lu;+P zeHUm8K;h^sBy}#Ckr{N@6KRj9POM8&B@FDO2#?(ohRr;WINjzQ6U0)5HlVD#BFNow z8&eA@XO$!ffRFe>&T5bA93iKeP1e?Iu*f%HxmIg~{`y8VTOeEd{r>0%#I1K4m=QW= z*Nvuff|Vnz0wOfVv_e&}##G2YCQ9vx?Q*7Y0$Dmq@-LTq-WBaiA#jR}bD)Gr2=z6| zbmooV7W$Y;iW1F5&-vOb@+i3Z)f<&j%1P=5rHYrnvuf*-hl@(|lF#$e>60W9=}xwp zpR8DIBkdu}YJDGk2=%6&*0avb-!n><1(h}`I?q7j!BlW3eatnY5$$h7qOIF5pq;7v z5w>Gaab-Ey=N{KxVxP#_zNuX8`iK(m9?xSy%yenvk6|+Vnf|%A|j-J#SfZrPb zFd->iSqo6+N702NO8ZiUvTv`>L6rM(;l-c@bGF|YAg1Q@CCiLl#{a|j$Wk&{YLONQzVHaR;ij#}?0;h{g)UGYI_PUhRG&qDYNqMb7i79Qv@ z;vAlAi;`AvUpFjob2FRnT5OGzaF4JdcWqb?{r0LlNE7IR-{OOyD+fC&jy9ac?8d2% zcZENplwcf@v2G-c1lx>W*lx+`=0C2eL`!$Cnxd5ejafV@ONf|y7_PbMxRc+!nxrnH zsa`5Pmw$z#5xr@r=8XK;oI4}3B4 zr#2P8zP=)N8=ucV`_#?&6O1#V0$L=71V*TAN&K28~_pYdBG_F!u&F!=V2tq7*Z zh9=JcP&0snf;KVNyQlezfCR4-0n|07C2>9A|4NJX&EGp%@ffs{5QJ{SLhic=WpO|h zrPbEgSoD(cu?SQ~SXGA*JasYs)GlnRV79z+VH)4B9Umq|$ikRGR9dWFzMTV7(JnGnu1BN@}pSJN%{s#e0b zYs?pV;HBGsLfYh*w^pa6eM?QVP1Q0#EZatP2p0W0nOBh16F%aY8cKqK)>o_w8_I*# z{Z7;}YWd^>?{$MK^LVRYgQuiodn5)M>50T(NtI#~LRIoSPrBI^cwON?huig~hR#V> zpmv^l)AG=5_RGi;0S+j5erD1lD0IGtm>1NOOFb6YYRAQDDP>cDE*6A;s^qy4h4_7e zU)fQAI7m$QrIOlOU=Eq)WR7>y!rKNJeQNXpIhBy(78 zYpLTpiEoBLRKZS28cDzS^@-~|X-ae2EMYCvn-&t8E{tYY$MYcLa}p#Ur>wYlkrYYq zjF;wr_NG6Gsdxk^6yqb59FXuW#Pb~sh{8_JvXM&8%Mim5F)iVLJK9s@5XlyPbrDkb z83%DJkLoH{*R4ik2I^Rzr6((Xy;lp@R+ARvn~JwXRoPH3Y7DyjO&41cBwO3ixa_P& z1JH9`h=sHTr!!qw_lC6rfJowyd zsw?7`zXuAdYS|L_^TtWWXToe{g^SRj|X!hAKO z&F?9aw3a@(+^}~c;#_N&>;?cAB62(O5kzj1Qbx*oH{t2L+39e5v^8GglS1sY|It+c zZy5#tUxz>7?}L4RIsDmpxc_CUzdQW7|HD)-N_|mS=fofJJ*cUrlcQIG_4$)NgJeOM zD@8v;FIz-q?cM=J52kK4`klJw>%BG77P+e{HOhVDRkzDcD&zxq(oD z-sQqm2Qhr_2jfpm8RHk|A|}Mx8YI+vjUccMeo~Jc^4fU>UQ25FWysQ|8G^Eri=xEd z`4jA9q%g-l0+FebXi#JrRreqJ5g2i@wSvR+Xjf2Jz@gKAifnxHSMSkH~npu~7vYPbnXkWLJFs8E^8G86T z34t->9|LB9j0`oXH6tK>?g72J&innU)=XVpgha56x^yLB`#Elk>+}eo=w<87=JpBl z=c0YnaH2~BqbD`Ucobyt-cqH^+h#XYZ&zz=C&wQ)v;%D5pDRnZz-&g(X$dUFvEaqU zU{2|++;>L)dQ6Z-9=ogZCN_6Iy>1)ydhv!x!XvwG96i@ ztBq>~>!O|;liKsgBPWc#g_zmk%^R&@jRhDr;WcHoS3fmZx(0I!w#TefSAVK$LyIwT z22X11jZ93hBhst!olb}*ow>QXEAun;N%eiw;e%;?@$-IgTmKDgMV3ml8q0V#Hv=O} zx2lLg5?PMsHw8EQh-@L3-Mj*gWdgJ|KTZ%9rrE@qDh_pux;2II0dCW@Z5#l-@bgZzL^;ZRO7S0#HQAtFy{cl093^Q&joW*<-Fa=7=aY z8LJg}-fSbFa`l#rxb7`f&MXHjqi+=?ws?%f#}hZ@k}f$JB$TU`6EYjx)8|Lvs2cnA z)?8WY#>dMY@a@c^Uy-vkr&xKU@(m+f>cS)37Ht~c`D209h57X}m{F!$*aVAiBa-f! zRHQ=dv;6!abLNzn=&)7mCB_7m!M?D;8aQjm0da*v?MwJ*Vy>?$ta(s-*b&ymQtRv> zCC~S3?d7qfPY1B7a#yPk3#jf)f9h|{Mj~+(Yx>PTO7d-a;;s%CRZ8=IbY64p+s(A#YtEk4lWsJ#!$n zEIO5gPbK;~9IxvvnOb=c_7gG;d6+w+C+>#XF=<<-@|7iTGU;Tne#hi_s!@V_FtnS> zzugxGsJCh1q_(``u$ZeV&*I;mZayzdUYE}Qg|ERW- z3W8dfx>D{CSl^a`c!~r{|Kv636Jm|6Q~tq8#-&?tr)~VgCn`&o9x~p0hZF0H?CYLn zwAI+AXVMn5oo~LG*Ze(%A7iE^zJCifs)SSw?Zkq_7o)G(*gq`nY-mo{^d!Rlm?aw% zs={4@-Q^5YA%!~0oD;Vsd4lD-$Ak?$M9Vx-G4zJ@lNvIhp$I{I1tQM^k!S--g_ zL~P9*ZVoQobZ>pLqNYtFE3X9KpmE6V@%~X|{rib?6$=j&GB!32BxYq>TPHGB4(@l? zlQI&sl#QwFI|~lae?9#p`2SyuO;g##^j}(xgZ&-N)*#a%V_xLWnd+cp6Rgagw*ZP~s z4;yGmPC*LbexvDU?%urdWWMZJyQmIsrM9k%BWyEnjkY(TtpP`w=>*sfrb8EU`(&DZ zcPQxO?>kaqQnH5H;9HHHY6G~2R26sM!+Es{Bgp02QV0IKEX7%}#EG~7c3Q}!PUYV7WshrvWI|4Pd??6!Z@qMD=m zxCl94>BK9BgNft_@oXB+)|+Qj?SG1E{8MV~+`CX | 门状态字典 | +| `DoorControlTargets` | Dictionary | 门目标控制状态字典 | +| `DoorConfigs` | Dictionary | 门配置信息字典 | +| `LastUpdateTime` | DateTime | 最后更新时间 | +| `ErrorMessage` | string | 错误信息 | + +### 3. 核心方法 + +#### 3.1 必须实现的方法(抽象方法) + +```csharp +///

    +/// 读取门状态(开到位信号) +/// +/// 门索引 +/// true=打开,false=关闭 +public abstract bool ReadDoorState(int doorIndex); + +/// +/// 写入门控制信号(开关控制) +/// +/// 门索引 +/// true=打开,false=关闭 +public abstract void WriteDoorControl(int doorIndex, bool open); +``` + +#### 3.2 可重写的方法(虚方法) + +```csharp +/// +/// 连接门控制器 +/// +public virtual void Connect() { } + +/// +/// 断开连接 +/// +public virtual void Disconnect() { } + +/// +/// 更新控制器状态 +/// +public virtual void UpdateState(DoorControllerState newState, string errorMessage = "") { } + +/// +/// 设置门的目标控制状态 +/// +public virtual void SetDoorControlTarget(int doorIndex, bool open) { } +``` + +--- + +## 开发步骤 + +### 步骤1:创建控制器类 + +创建新类并继承 `BasicDoorController`: + +```csharp +using StandardScene.ExtendDevice.Door; + +namespace StandardScene.ExtendDevice.Door +{ + public class MyDoorController : BasicDoorController + { + // 实现抽象方法 + } +} +``` + +### 步骤2:添加 DoorTypeAttribute + +使用 `DoorTypeAttribute` 标记控制器类型: + +```csharp +[DoorType("MyDoorController")] +public class MyDoorController : BasicDoorController +{ + // ... +} +``` + +**注意**:`DoorTypeAttribute` 的 `Name` 参数将显示在配置界面的类型下拉框中,并用于配置文件中的类型标识。 + +### 步骤3:实现抽象方法 + +实现 `ReadDoorState` 和 `WriteDoorControl` 方法: + +```csharp +public override bool ReadDoorState(int doorIndex) +{ + // 读取门状态逻辑 + // 返回 true=打开,false=关闭 +} + +public override void WriteDoorControl(int doorIndex, bool open) +{ + // 写入门控制信号逻辑 +} +``` + +### 步骤4:重写 Connect/Disconnect 方法 + +如果需要初始化连接、启动后台任务等,重写 `Connect` 和 `Disconnect` 方法: + +```csharp +public override void Connect() +{ + base.Connect(); // 调用基类方法更新状态 + + // 初始化连接 + // 启动后台任务 + // 读取初始状态 +} + +public override void Disconnect() +{ + // 停止后台任务 + // 关闭连接 + + base.Disconnect(); // 调用基类方法更新状态 +} +``` + +### 步骤5:实现线程安全的控制逻辑 + +如果需要定时读取状态或根据 `DoorControlTargets` 下发控制指令,实现后台任务: + +```csharp +private CancellationTokenSource _cancellationTokenSource; +private Task _readTask; + +public override void Connect() +{ + base.Connect(); + + // 启动定时读取任务 + _cancellationTokenSource = new CancellationTokenSource(); + _readTask = Task.Run(() => ReadDoorStatesLoop(_cancellationTokenSource.Token)); +} + +private void ReadDoorStatesLoop(CancellationToken cancellationToken) +{ + while (!cancellationToken.IsCancellationRequested) + { + // 读取所有门的状态 + ReadAllDoorStates(); + + // 根据 DoorControlTargets 下发控制指令 + ApplyDoorControlTargets(); + + Thread.Sleep(ReadInterval); + } +} +``` + +--- + +## 实现示例 + +### 示例1:ModbusDoorController(完整实现) + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using StandardScene.Utils; +using SimpleCore.Library; + +namespace StandardScene.ExtendDevice.Door +{ + /// + /// Modbus 门控制器实现 + /// + [DoorType("ModbusDoorController")] + public class ModbusDoorController : BasicDoorController + { + private ModbusRtu _modbusClient; + private readonly object _syncLock = new object(); + private bool _isStarted = false; + private readonly Dictionary _lastSentControl = new Dictionary(); + private CancellationTokenSource _cancellationTokenSource; + private Task _readTask; + + // 可配置参数 + public int ReadInterval { get; set; } = 1000; // 读取间隔(毫秒) + public int ReconnectInterval { get; set; } = 3000; // 重连间隔(毫秒) + public byte SlaveAddress { get; set; } = 1; // Modbus 从站地址 + + /// + /// 线程安全的设置门控制目标 + /// + public override void SetDoorControlTarget(int doorIndex, bool open) + { + lock (_syncLock) + { + base.SetDoorControlTarget(doorIndex, open); + } + } + + /// + /// 连接门控制器 + /// + public override void Connect() + { + lock (_syncLock) + { + if (_isStarted) return; + + try + { + UpdateState(DoorControllerState.Connecting); + + // 初始化门状态 + var doorIndices = DoorConfigs.Keys.OrderBy(k => k).ToList(); + InitializeDoors(doorIndices); + + // 初始化最近一次已下发的控制状态 + _lastSentControl.Clear(); + foreach (var index in doorIndices) + { + _lastSentControl[index] = false; + if (!DoorControlTargets.ContainsKey(index)) + { + DoorControlTargets[index] = false; + } + } + + // 连接 Modbus TCP + try + { + _modbusClient = new ModbusRtu(); + _modbusClient.StartTcpRtu(Ip, Port); + UpdateState(DoorControllerState.Online); + } + catch (Exception ex) + { + UpdateState(DoorControllerState.Connecting); + Diagnosis.Log($"ModbusDoorController[{Index}] 初次连接失败: {ex.Message}", "ModbusDoorController", true); + } + + // 启动定时读取任务 + _cancellationTokenSource = new CancellationTokenSource(); + _readTask = Task.Run(() => ReadDoorStatesLoop(_cancellationTokenSource.Token)); + + _isStarted = true; + } + catch (Exception ex) + { + UpdateState(DoorControllerState.Error, $"初始化失败: {ex.Message}"); + _isStarted = false; + } + } + } + + /// + /// 断开连接 + /// + public override void Disconnect() + { + lock (_syncLock) + { + if (!_isStarted) return; + + try + { + _cancellationTokenSource?.Cancel(); + _readTask?.Wait(1000); + + _modbusClient?.Close(); + _modbusClient = null; + + _isStarted = false; + UpdateState(DoorControllerState.Offline); + } + catch (Exception ex) + { + UpdateState(DoorControllerState.Error, $"断开连接失败: {ex.Message}"); + } + } + } + + /// + /// 定时读取门状态循环 + /// + private void ReadDoorStatesLoop(CancellationToken cancellationToken) + { + while (!cancellationToken.IsCancellationRequested) + { + try + { + if (!_isStarted) break; + + // 检查连接状态 + bool isConnected = _modbusClient?.modbusRtu?.Connected ?? false; + if (_modbusClient == null || !isConnected) + { + UpdateState(DoorControllerState.Connecting); + TryReconnect(); + isConnected = _modbusClient?.modbusRtu?.Connected ?? false; + if (!isConnected) + { + Thread.Sleep(ReadInterval); + continue; + } + } + + // 读取所有门的状态 + ReadAllDoorStates(); + + // 根据目标控制状态下发控制指令 + ApplyDoorControlTargets(); + + UpdateState(DoorControllerState.Online); + } + catch (Exception ex) + { + Diagnosis.Log($"ModbusDoorController[{Index}] 读取状态失败: {ex.Message}", "ModbusDoorController", true); + UpdateState(DoorControllerState.Error, $"读取状态失败: {ex.Message}"); + TryReconnect(); + } + + Thread.Sleep(ReadInterval); + } + } + + /// + /// 读取所有门的状态 + /// + private void ReadAllDoorStates() + { + lock (_syncLock) + { + foreach (var doorConfig in DoorConfigs.Values) + { + try + { + var state = ReadDoorState(doorConfig.Index); + UpdateDoorState(doorConfig.Index, state ? DoorState.Open : DoorState.Closed); + } + catch (Exception ex) + { + Diagnosis.Log($"ModbusDoorController[{Index}] 读取门{doorConfig.Index}状态失败: {ex.Message}", "ModbusDoorController", true); + } + } + } + } + + /// + /// 根据 DoorControlTargets 下发控制指令 + /// + private void ApplyDoorControlTargets() + { + lock (_syncLock) + { + foreach (var doorConfig in DoorConfigs.Values) + { + var doorIndex = doorConfig.Index; + + // 获取目标控制状态 + bool target = false; + DoorControlTargets.TryGetValue(doorIndex, out target); + + // 获取上一次已下发的状态 + bool last; + var hasLast = _lastSentControl.TryGetValue(doorIndex, out last); + + // 如果没有记录或状态发生变化,则下发控制 + if (!hasLast || last != target) + { + try + { + WriteDoorControl(doorIndex, target); + _lastSentControl[doorIndex] = target; + } + catch (Exception ex) + { + Diagnosis.Log($"ModbusDoorController[{Index}] 下发门{doorIndex}控制指令失败: {ex.Message}", "ModbusDoorController", true); + } + } + } + } + } + + /// + /// 读取门状态(开到位信号) + /// + public override bool ReadDoorState(int doorIndex) + { + lock (_syncLock) + { + if (!DoorConfigs.TryGetValue(doorIndex, out var doorConfig)) + { + throw new ArgumentException($"门{doorIndex}不存在"); + } + + if (_modbusClient == null || !_modbusClient.modbusRtu.Connected) + { + throw new InvalidOperationException("Modbus连接未建立"); + } + + // 读取开到位信号(离散输入) + var data = _modbusClient.ReadDiscreteInputs_02(SlaveAddress, doorConfig.OpenStatusAddress, 1); + return data != null && data.Length > 0 && data[0]; + } + } + + /// + /// 写入门控制信号(开关控制) + /// + public override void WriteDoorControl(int doorIndex, bool open) + { + lock (_syncLock) + { + if (!DoorConfigs.TryGetValue(doorIndex, out var doorConfig)) + { + throw new ArgumentException($"门{doorIndex}不存在"); + } + + if (_modbusClient == null || !_modbusClient.modbusRtu.Connected) + { + TryReconnect(); + if (_modbusClient == null || !_modbusClient.modbusRtu.Connected) + { + throw new InvalidOperationException("Modbus连接未建立"); + } + } + + // 写入开关控制信号(线圈) + _modbusClient.WriteMultipleCoils_15(SlaveAddress, doorConfig.ControlAddress, new[] { open }); + } + } + + private void TryReconnect() + { + // 重连逻辑... + } + } +} +``` + +### 示例2:简单门控制器(最小实现) + +如果不需要定时读取或后台任务,可以实现最简单的版本: + +```csharp +using System; +using StandardScene.ExtendDevice.Door; + +namespace StandardScene.ExtendDevice.Door +{ + /// + /// 简单门控制器实现(同步模式) + /// + [DoorType("SimpleDoorController")] + public class SimpleDoorController : BasicDoorController + { + private SimpleDoorClient _client; + + public override void Connect() + { + base.Connect(); + _client = new SimpleDoorClient(Ip, Port); + UpdateState(DoorControllerState.Online); + } + + public override void Disconnect() + { + _client?.Close(); + _client = null; + base.Disconnect(); + } + + public override bool ReadDoorState(int doorIndex) + { + if (!DoorConfigs.TryGetValue(doorIndex, out var doorConfig)) + { + throw new ArgumentException($"门{doorIndex}不存在"); + } + + if (_client == null || !_client.IsConnected) + { + throw new InvalidOperationException("连接未建立"); + } + + // 读取门状态 + return _client.ReadDoorStatus(doorConfig.OpenStatusAddress); + } + + public override void WriteDoorControl(int doorIndex, bool open) + { + if (!DoorConfigs.TryGetValue(doorIndex, out var doorConfig)) + { + throw new ArgumentException($"门{doorIndex}不存在"); + } + + if (_client == null || !_client.IsConnected) + { + throw new InvalidOperationException("连接未建立"); + } + + // 写入控制信号 + _client.WriteDoorControl(doorConfig.ControlAddress, open); + + // 同步更新门状态(可选) + var state = _client.ReadDoorStatus(doorConfig.OpenStatusAddress); + UpdateDoorState(doorIndex, state ? DoorState.Open : DoorState.Closed); + } + + /// + /// 重写 SetDoorControlTarget 以立即执行控制 + /// + public override void SetDoorControlTarget(int doorIndex, bool open) + { + base.SetDoorControlTarget(doorIndex, open); + + // 立即执行控制(同步模式) + try + { + WriteDoorControl(doorIndex, open); + } + catch (Exception ex) + { + Diagnosis.Log($"SimpleDoorController[{Index}] 控制门{doorIndex}失败: {ex.Message}", "SimpleDoorController", true); + } + } + } +} +``` + +--- + +## 特性说明 + +### DoorTypeAttribute + +`DoorTypeAttribute` 用于标记门控制器类型,支持动态实例化。 + +**定义**: +```csharp +[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] +public class DoorTypeAttribute : Attribute +{ + public string Name { get; } + + public DoorTypeAttribute(string name) + { + Name = name ?? throw new ArgumentNullException(nameof(name)); + } +} +``` + +**使用**: +```csharp +[DoorType("MyDoorController")] +public class MyDoorController : BasicDoorController +{ + // ... +} +``` + +**作用**: +1. **类型标识**:`Name` 参数作为类型的唯一标识,用于配置文件中指定类型 +2. **UI显示**:配置界面会自动识别并显示所有带此特性的控制器类型 +3. **动态实例化**:`DoorMission` 根据 `Name` 动态查找并创建实例 + +**注意**: +- `Name` 必须唯一 +- 建议使用类名作为 `Name` +- `Name` 会显示在配置界面的类型下拉框中 + +--- + +## 线程安全 + +### 1. 设计原则 + +门控制器采用**读写分离**的线程安全设计: +- **读取**:`DoorMission` 通过 `controller.DoorStates` 直接访问门状态(受锁保护) +- **写入**:`DoorMission` 通过 `controller.SetDoorControlTarget()` 设置目标状态,实际通信由门控制器内部线程完成 + +### 2. 线程安全要求 + +#### 2.1 SetDoorControlTarget 方法 + +如果多个线程可能同时调用 `SetDoorControlTarget`,必须加锁保护: + +```csharp +private readonly object _syncLock = new object(); + +public override void SetDoorControlTarget(int doorIndex, bool open) +{ + lock (_syncLock) + { + base.SetDoorControlTarget(doorIndex, open); + } +} +``` + +#### 2.2 ReadDoorState 和 WriteDoorControl 方法 + +如果这些方法会被多个线程调用,必须加锁保护: + +```csharp +public override bool ReadDoorState(int doorIndex) +{ + lock (_syncLock) + { + // 读取逻辑 + } +} + +public override void WriteDoorControl(int doorIndex, bool open) +{ + lock (_syncLock) + { + // 写入逻辑 + } +} +``` + +#### 2.3 后台任务访问共享资源 + +如果后台任务会访问 `DoorStates`、`DoorControlTargets` 等共享资源,必须加锁: + +```csharp +private void ReadAllDoorStates() +{ + lock (_syncLock) + { + foreach (var doorConfig in DoorConfigs.Values) + { + var state = ReadDoorState(doorConfig.Index); + UpdateDoorState(doorConfig.Index, state ? DoorState.Open : DoorState.Closed); + } + } +} + +private void ApplyDoorControlTargets() +{ + lock (_syncLock) + { + foreach (var doorConfig in DoorConfigs.Values) + { + // 访问 DoorControlTargets + // 调用 WriteDoorControl + } + } +} +``` + +### 3. 推荐实现模式 + +推荐使用单一锁对象保护所有共享资源: + +```csharp +public class MyDoorController : BasicDoorController +{ + private readonly object _syncLock = new object(); + + // 所有访问共享资源的方法都使用同一个锁 + public override void SetDoorControlTarget(int doorIndex, bool open) + { + lock (_syncLock) { /* ... */ } + } + + public override bool ReadDoorState(int doorIndex) + { + lock (_syncLock) { /* ... */ } + } + + public override void WriteDoorControl(int doorIndex, bool open) + { + lock (_syncLock) { /* ... */ } + } + + private void ReadAllDoorStates() + { + lock (_syncLock) { /* ... */ } + } + + private void ApplyDoorControlTargets() + { + lock (_syncLock) { /* ... */ } + } +} +``` + +--- + +## 最佳实践 + +### 1. 错误处理 + +- **连接错误**:设置状态为 `Connecting` 或 `Error`,并记录错误信息 +- **读取错误**:记录日志,但不抛出异常,返回默认值或保持当前状态 +- **写入错误**:记录日志,尝试重连,但不影响其他门的操作 + +**示例**: +```csharp +public override bool ReadDoorState(int doorIndex) +{ + try + { + // 读取逻辑 + } + catch (Exception ex) + { + Diagnosis.Log($"读取门{doorIndex}状态失败: {ex.Message}", "MyDoorController", true); + return false; // 返回默认值 + } +} +``` + +### 2. 状态管理 + +- **及时更新状态**:在连接、断开、错误时及时调用 `UpdateState()` +- **更新最后更新时间**:在状态变化时更新 `LastUpdateTime` +- **错误信息**:在错误时记录详细的错误信息到 `ErrorMessage` + +**示例**: +```csharp +try +{ + _client.Connect(); + UpdateState(DoorControllerState.Online); +} +catch (Exception ex) +{ + UpdateState(DoorControllerState.Error, $"连接失败: {ex.Message}"); +} +``` + +### 3. 资源释放 + +- **实现 Disconnect**:确保正确关闭连接和释放资源 +- **实现析构函数**:作为最后的安全网,确保资源释放 + +**示例**: +```csharp +public override void Disconnect() +{ + try + { + _cancellationTokenSource?.Cancel(); + _readTask?.Wait(1000); + _client?.Close(); + _client = null; + UpdateState(DoorControllerState.Offline); + } + catch (Exception ex) + { + UpdateState(DoorControllerState.Error, $"断开连接失败: {ex.Message}"); + } +} + +~MyDoorController() +{ + Disconnect(); +} +``` + +### 4. 配置验证 + +在 `Connect()` 中验证配置的完整性: + +```csharp +public override void Connect() +{ + if (string.IsNullOrWhiteSpace(Ip)) + { + UpdateState(DoorControllerState.Error, "IP地址未配置"); + return; + } + + if (Port <= 0 || Port > 65535) + { + UpdateState(DoorControllerState.Error, "端口号无效"); + return; + } + + if (DoorConfigs.Count == 0) + { + UpdateState(DoorControllerState.Error, "未配置门"); + return; + } + + // 连接逻辑... +} +``` + +--- + +## 注意事项 + +### 1. DoorTypeAttribute 命名 + +- `Name` 必须与配置文件中使用的类型名称一致 +- 建议使用类名作为 `Name` +- 避免使用特殊字符 + +### 2. 异常处理 + +- **不要抛出未处理的异常**:所有异常都应该被捕获并记录 +- **不要阻塞线程**:长时间操作应该在后台线程中执行 +- **提供错误信息**:通过 `ErrorMessage` 属性提供详细的错误信息 + +### 3. 性能考虑 + +- **避免频繁的连接/断开**:保持连接持久化 +- **批量读取**:如果可能,批量读取多个门的状态 +- **控制读取频率**:根据实际需求设置合理的读取间隔 + +### 4. 兼容性 + +- **向后兼容**:新版本应该兼容旧版本的配置格式 +- **版本标识**:如果需要,可以在实现中添加版本检查 + +--- + +## 附录 + +### A. DoorModel 说明 + +```csharp +public class DoorModel +{ + /// + /// 门索引 + /// + public int Index { get; set; } + + /// + /// 开关控制信号地址 + /// + public ushort ControlAddress { get; set; } + + /// + /// 开到位信号地址 + /// + public ushort OpenStatusAddress { get; set; } +} +``` + +### B. DoorState 枚举 + +```csharp +public enum DoorState +{ + Closed = 0, // 关闭 + Open = 1, // 打开 + Unknown = 2 // 未知状态 +} +``` + +### C. DoorControllerState 枚举 + +```csharp +public enum DoorControllerState +{ + Offline = 0, // 离线 + Online = 1, // 在线 + Connecting = 2, // 连接中 + Error = 3 // 错误 +} +``` + +### D. 开发检查清单 + +- [ ] 继承 `BasicDoorController` +- [ ] 添加 `DoorTypeAttribute` 特性 +- [ ] 实现 `ReadDoorState` 方法 +- [ ] 实现 `WriteDoorControl` 方法 +- [ ] 重写 `Connect` 方法(如需要) +- [ ] 重写 `Disconnect` 方法(如需要) +- [ ] 实现线程安全(如需要) +- [ ] 添加错误处理 +- [ ] 添加资源释放逻辑 +- [ ] 添加诊断日志 +- [ ] 测试连接/断开 +- [ ] 测试读取状态 +- [ ] 测试控制写入 +- [ ] 测试配置热更新 + +--- + +**文档更新时间**:2025-01-09 diff --git a/StandardScene.Core/Docs/DoorMission使用手册.md b/StandardScene.Core/Docs/DoorMission使用手册.md new file mode 100644 index 0000000..e8e0958 --- /dev/null +++ b/StandardScene.Core/Docs/DoorMission使用手册.md @@ -0,0 +1,634 @@ +# DoorMission 使用手册 + +## 目录 +- [概述](#概述) +- [基本功能](#基本功能) +- [启动与停止](#启动与停止) +- [配置管理](#配置管理) +- [门控逻辑](#门控逻辑) +- [站点配置](#站点配置) +- [UI界面](#ui界面) +- [参数说明](#参数说明) +- [故障排查](#故障排查) +- [附录](#附录) + +--- + +## 概述 + +`DoorMission` 是一个门控进程类,用于管理多个门控制器及其关联的门。它提供了以下核心功能: +- 多门控制器管理(支持不同类型) +- 自动门控逻辑(根据小车位置自动开关门) +- 手动控制功能(支持临时手动控制,优先级高于自动控制) +- 车辆占用管理(跟踪和清空门区域的车辆占用) +- 配置文件动态监控(支持热更新) +- 线程安全的门状态读写 +- 可视化的配置和监控界面 + +### 架构特点 +- **抽象化设计**:门控制器通过抽象基类 `BasicDoorController` 实现,支持扩展不同类型的控制器 +- **线程安全**:门状态读取和控制写入分离,所有通信操作在门控制器内部线程完成 +- **事件驱动**:与交通控制系统集成,响应小车进入/离开站点事件 +- **热更新支持**:配置文件每10秒自动检查更新,无需重启任务 +- **控制仲裁机制**:手动控制优先级高于自动控制,手动控制过期后自动恢复自动模式 + +--- + +## 基本功能 + +### 1. 门控制器管理 + +#### 1.1 门控制器类型 +门控制器通过 `DoorTypeAttribute` 标记类型,系统会自动识别并创建实例。当前支持: +- **ModbusDoorController**:基于 Modbus TCP 的门控制器 + +#### 1.2 门控制器配置 +每个门控制器包含以下配置: +- **Index**:控制器索引(唯一标识) +- **Ip**:IP地址 +- **Port**:端口号(默认502) +- **Type**:控制器类型(通过 `DoorTypeAttribute.Name` 指定) +- **Doors**:门列表 + +#### 1.3 门配置 +每个门包含以下配置: +- **Index**:门索引(在控制器内唯一) +- **ControlAddress**:开关控制信号地址(Modbus 线圈地址) +- **OpenStatusAddress**:开到位信号地址(Modbus 离散输入地址) + +### 2. 自动门控逻辑 + +#### 2.1 门开启条件 +门会在以下情况自动开启: +1. **小车即将进入区域**:当小车到达站点且站点的 `EnterDoor` 字段匹配时,门会在锁定前开启 +2. **小车在区域内**:当小车已进入并锁定站点时,门保持开启状态 + +#### 2.2 门关闭条件 +门会在以下情况自动关闭: +- 小车离开区域后,门自动关闭 + +#### 2.3 门标识符格式 +站点配置中的门标识符格式为:**控制器索引.门索引** + +**示例**: +``` +"EnterDoor": "1.2" // 表示控制器索引1,门索引2 +"LeaveDoor": "2.3" // 表示控制器索引2,门索引3 +``` + +### 3. 配置文件动态监控 + +系统每10秒自动检查 `DoorConfig.json` 文件,并根据配置变化: +- **添加**:新增的门控制器会自动创建并连接 +- **删除**:已移除的门控制器会自动断开并移除 +- **修改**:已修改的门控制器会自动更新(IP、端口、类型或门配置变化) + +--- + +## 启动与停止 + +### 1. 启动任务 + +```csharp +var doorMission = new DoorMission(); +doorMission.Execute(); // 执行"启动进程" +``` + +**启动流程**: +1. 设置数据文件路径(`DoorConfig.json`) +2. 订阅交通控制事件(`BeforeLock`、`AfterLeave`、`OnLockAcquired`) +3. 立即加载一次配置(避免监控界面在首次轮询前无数据) +4. 启动配置监控任务(每10秒检查一次) +5. 启动门控逻辑监控任务(每500毫秒检查一次) + +### 2. 停止任务 + +```csharp +doorMission.Stop(); // 执行"停止进程" +``` + +**停止流程**: +1. 取消事件订阅 +2. 取消所有后台任务 +3. 断开所有门控制器连接 +4. 等待任务完成(最多等待5秒) + +### 3. 公共方法 + +#### 3.1 读取门状态 +```csharp +bool isOpen = doorMission.GetDoorState(controllerIndex, doorIndex); +``` +- **参数**: + - `controllerIndex`:门控制器索引 + - `doorIndex`:门索引 +- **返回值**:`true`=打开,`false`=关闭 + +#### 3.2 设置门控制目标(自动模式) +```csharp +doorMission.SetDoorControlTarget(controllerIndex, doorIndex, open); +``` +- **参数**: + - `controllerIndex`:门控制器索引 + - `doorIndex`:门索引 + - `open`:`true`=打开,`false`=关闭 + +**注意**:此方法仅设置目标控制状态,实际通信由门控制器内部线程完成,确保线程安全。此方法会立即生效,但可能被手动控制覆盖。 + +#### 3.3 设置手动控制目标 +```csharp +bool success = doorMission.SetManualDoorControl(controllerIndex, doorIndex, open, holdSeconds); +``` +- **参数**: + - `controllerIndex`:门控制器索引 + - `doorIndex`:门索引 + - `open`:`true`=打开,`false`=关闭 + - `holdSeconds`:手动保持秒数(可选,默认10秒) +- **返回值**:`true`=成功,`false`=失败(当有车辆占用且尝试关闭时返回false) + +**功能说明**: +- 手动控制优先级高于自动控制 +- 手动控制会在指定时间后自动过期,恢复自动模式 +- **安全保护**:当门区域内有车辆占用时,禁止手动关闭门 +- 手动控制过期后,系统自动恢复自动控制逻辑 + +#### 3.4 清除手动控制 +```csharp +doorMission.ClearManualDoorControl(controllerIndex, doorIndex); +``` +- **参数**: + - `controllerIndex`:门控制器索引 + - `doorIndex`:门索引 + +**功能说明**:立即清除手动控制请求,恢复自动控制模式。 + +#### 3.5 清空车辆占用 +```csharp +doorMission.ClearCarsInArea(controllerIndex, doorIndex); +``` +- **参数**: + - `controllerIndex`:门控制器索引 + - `doorIndex`:门索引 + +**功能说明**:清空指定门的车辆占用记录。清空后,如果门处于打开状态且没有其他小车需要进入,门会自动关闭。 + +#### 3.6 获取门控制状态 +```csharp +var status = doorMission.GetDoorControlStatus(controllerIndex, doorIndex); +``` +- **参数**: + - `controllerIndex`:门控制器索引 + - `doorIndex`:门索引 +- **返回值**:`DoorControlStatus` 对象,包含: + - `Target`:当前目标状态(true=打开,false=关闭) + - `Source`:控制来源(`ControlSource.Auto` 或 `ControlSource.Manual`) + - `ManualRemainingSeconds`:手动控制剩余秒数(仅当Source=Manual时有效) + - `CarsInArea`:车辆占用列表 + +#### 3.7 获取车辆占用情况 +```csharp +var cars = doorMission.GetCarsInArea(controllerIndex, doorIndex); +``` +- **参数**: + - `controllerIndex`:门控制器索引 + - `doorIndex`:门索引 +- **返回值**:车辆ID列表(`IReadOnlyList`) + +--- + +## 配置管理 + +### 1. 配置文件格式 + +配置文件 `DoorConfig.json` 位于程序根目录,格式如下: + +```json +[ + { + "Index": 1, + "Ip": "192.168.1.100", + "Port": 502, + "Type": "ModbusDoorController", + "Doors": [ + { + "Index": 1, + "ControlAddress": 0, + "OpenStatusAddress": 0 + }, + { + "Index": 2, + "ControlAddress": 1, + "OpenStatusAddress": 1 + } + ] + }, + { + "Index": 2, + "Ip": "192.168.1.101", + "Port": 502, + "Type": "ModbusDoorController", + "Doors": [ + { + "Index": 1, + "ControlAddress": 0, + "OpenStatusAddress": 0 + } + ] + } +] +``` + +### 2. 配置界面 + +通过调用 `DoorMission.OpenViewer()` 打开门控制器管理界面,可以: +- 添加、删除、修改门控制器 +- 为每个门控制器添加、删除、修改门配置 +- 保存配置到 `DoorConfig.json` + +**打开配置界面**: +```csharp +DoorMission.OpenViewer(); +``` + +--- + +## 门控逻辑 + +### 1. 事件响应流程 + +#### 1.1 BeforeLock 事件 +当小车即将锁定站点时触发: +1. 检查站点的 `EnterDoor` 字段 +2. 检查小车当前站点的 `PreEnterDoor` 字段是否匹配 +3. 如果匹配,设置 `_needOpen[(controllerIndex, doorIndex)] = true` +4. 返回门的当前状态(如果门已打开则允许锁定) + +#### 1.2 OnLockAcquired 事件 +当小车成功锁定站点时触发: +1. 检查站点的 `EnterDoor` 字段 +2. 检查小车当前站点的 `PreEnterDoor` 字段是否匹配 +3. 如果匹配,将小车ID添加到 `carsInAreas[(controllerIndex, doorIndex)]` +4. 设置 `_needOpen[(controllerIndex, doorIndex)] = false` + +#### 1.3 AfterLeave 事件 +当小车离开站点时触发: +1. 检查站点的 `LeaveDoor` 字段 +2. 检查小车当前站点的 `RearLeaveDoor` 字段是否匹配 +3. 如果匹配,从 `carsInAreas[(controllerIndex, doorIndex)]` 中移除小车ID + +### 2. 门控状态监控与仲裁 + +`MonitorDoorLogicAsync` 任务每500毫秒执行一次,检查每个门的控制逻辑并进行仲裁: + +```csharp +// 自动目标:有车或需要打开 +var needOpen = _needOpen.TryGetValue(key, out var open) && open; +var hasCarsInArea = carsInAreas.TryGetValue(key, out var cars) && cars.Count > 0; +var autoTarget = needOpen || hasCarsInArea; + +// 手动请求仲裁:优先级 Manual > Auto,手动过期后自动恢复 +bool finalTarget = autoTarget; +if (_manualRequests.TryGetValue(key, out var manual)) +{ + if (manual.ExpireAt <= DateTime.Now) + { + _manualRequests.Remove(key); // 手动控制过期,移除 + } + else + { + finalTarget = manual.Target; // 手动控制有效,使用手动目标 + } +} + +// 设置门的目标控制状态 +controller.SetDoorControlTarget(doorIndex, finalTarget); +``` + +**逻辑说明**: +- **自动目标计算**: + - 如果 `_needOpen[key] = true`,门需要打开(小车即将进入) + - 如果 `carsInAreas[key]` 中有小车,门需要保持打开(小车在区域内) + - 其他情况,自动目标为关闭 +- **控制仲裁**: + - 手动控制优先级高于自动控制 + - 如果存在有效的手动控制请求(未过期),使用手动目标 + - 手动控制过期后,自动移除并恢复自动控制 + - 最终目标写入门控制器的 `DoorControlTargets` 字段 + +--- + +## 站点配置 + +### 1. 站点字段说明 + +站点需要配置以下字段以实现门控功能: + +| 字段名 | 类型 | 说明 | 示例 | +|--------|------|------|------| +| `EnterDoor` | string | 进站门标识符(格式:控制器索引.门索引) | `"1.2"` | +| `LeaveDoor` | string | 离站门标识符(格式:控制器索引.门索引) | `"2.3"` | + +### 2. 小车站点字段说明 + +小车当前站点需要配置以下字段: + +| 字段名 | 类型 | 说明 | 示例 | +|--------|------|------|------| +| `PreEnterDoor` | string | 前方进站门标识符(与目标站点的 `EnterDoor` 匹配) | `"1.2"` | +| `RearLeaveDoor` | string | 后方离站门标识符(与目标站点的 `LeaveDoor` 匹配) | `"2.3"` | + +### 3. 配置示例 + +**站点配置**: +```json +{ + "id": 100, + "name": "站点A", + "fields": { + "EnterDoor": "1.2", + "LeaveDoor": "2.3" + } +} +``` + +**小车站点配置**: +```json +{ + "id": 50, + "name": "小车当前位置", + "fields": { + "PreEnterDoor": "1.2", + "RearLeaveDoor": "2.3" + } +} +``` + +**工作流程**: +1. 小车从站点50驶向站点100 +2. 到达站点100时,触发 `BeforeLock` 事件 +3. 系统检查站点100的 `EnterDoor`(`"1.2"`)是否与站点50的 `PreEnterDoor`(`"1.2"`)匹配 +4. 如果匹配,设置控制器1的门2为打开状态 +5. 门打开后,小车锁定站点100 +6. 触发 `OnLockAcquired` 事件,门保持打开状态 +7. 小车离开站点100时,触发 `AfterLeave` 事件 +8. 系统检查站点100的 `LeaveDoor`(`"2.3"`)是否与站点50的 `RearLeaveDoor`(`"2.3"`)匹配 +9. 如果匹配,从区域内小车列表中移除该小车 +10. 如果没有其他小车在区域内,门自动关闭 + +--- + +## UI界面 + +### 1. 配置管理界面 + +**打开方式**: +```csharp +DoorMission.OpenViewer(); +``` + +**功能**: +- 门控制器列表管理(添加、删除、修改) +- 门列表管理(为每个控制器添加、删除、修改门) +- 类型选择(自动识别所有带 `DoorTypeAttribute` 的控制器类型) +- 配置保存到 `DoorConfig.json` + +### 2. 监控界面 + +**打开方式**: +```csharp +DoorMission.OpenMonitor(); +``` + +**功能**: +- 实时显示所有门的状态 +- 显示控制器索引、门索引、当前状态、控制目标、车辆占用 +- 显示控制来源和手动控制剩余时间 +- 显示控制地址和开到位信号地址 +- 手动控制门开关(打开/关闭,带安全保护) +- 清空车辆占用记录 +- 自动刷新(默认1秒刷新间隔) + +**显示信息**: +| 列名 | 说明 | +|------|------| +| 控制器编码 | 门控制器索引 | +| 门编码 | 门索引 | +| 当前状态 | 门的当前状态(开/关,带颜色标识:绿色=打开,红色=关闭) | +| 控制目标 | 门的目标控制状态(开/关,带颜色标识:绿色=开,红色=关) | +| 车辆占用 | 门区域内的小车ID列表(多个ID用逗号分隔,无车辆显示"无") | +| 控制来源 | 当前控制来源(自动/手动) | +| 手动剩余(s) | 手动控制剩余秒数(仅当控制来源=手动时显示,自动时显示"-") | +| 控制地址 | Modbus 线圈地址 | +| 开到位地址 | Modbus 离散输入地址 | + +**手动控制功能**: +- **打开按钮**:设置手动打开控制,默认保持10秒 +- **关闭按钮**:设置手动关闭控制,默认保持10秒 + - **安全保护**:当门区域内有车辆占用时,关闭按钮自动禁用,无法执行关闭操作 + - 必须先清空车辆占用,才能手动关闭门 +- **清空占用按钮**:清空选中门的车辆占用记录 + - 清空后,如果门处于打开状态且没有其他小车需要进入,门会自动关闭 + - 清空占用后,可以执行手动关闭操作 + +**控制优先级说明**: +- 手动控制优先级高于自动控制 +- 手动控制会在指定时间(默认10秒)后自动过期,恢复自动模式 +- 可以通过"清空占用"按钮清空车辆占用,然后手动关闭门 + +--- + +## 参数说明 + +### 1. 监控间隔 + +| 参数 | 默认值 | 说明 | +|------|--------|------| +| 配置监控间隔 | 10秒 | 检查配置文件的间隔 | +| 门控逻辑监控间隔 | 500毫秒 | 检查门控逻辑的间隔(已优化) | +| 监控界面刷新间隔 | 1秒 | 监控界面自动刷新间隔 | +| 手动控制默认保持时间 | 10秒 | 手动控制请求的默认过期时间 | + +### 2. 线程安全说明 + +- **门状态读取**:通过 `controller.DoorStates` 字典访问,所有读写操作受锁保护 +- **门控制写入**:通过 `controller.SetDoorControlTarget()` 设置目标状态,实际通信由门控制器内部线程完成 +- **配置同步**:配置变更时使用锁保护,确保线程安全 +- **控制仲裁**:手动控制请求和自动控制逻辑的仲裁在同一锁内完成,确保线程安全 +- **车辆占用管理**:车辆占用的增删改查操作均受锁保护 + +### 3. 控制仲裁机制 + +系统采用**控制仲裁机制**来协调手动控制和自动控制: + +- **优先级**:手动控制 > 自动控制 +- **手动控制过期**:手动控制请求会在指定时间(默认10秒)后自动过期,过期后恢复自动控制 +- **安全保护**:当门区域内有车辆占用时,禁止手动关闭门,确保安全 +- **仲裁流程**: + 1. 计算自动目标(基于车辆占用和需要打开标志) + 2. 检查是否存在有效的手动控制请求 + 3. 如果手动控制未过期,使用手动目标;否则使用自动目标 + 4. 将最终目标写入门控制器的 `DoorControlTargets` 字段 + +--- + +## 故障排查 + +### 问题1:门控制器无法连接 + +**排查步骤**: +1. 检查配置文件中的 IP 和端口是否正确 +2. 检查网络连接是否正常 +3. 查看诊断日志中的错误信息 +4. 确认门控制器硬件是否在线 + +**诊断命令**: +```csharp +var controllers = doorMission.GetDoorControllers(); +foreach (var controller in controllers) +{ + Console.WriteLine($"控制器{controller.Index}: IP={controller.Ip}, Port={controller.Port}, State={controller.State}, Error={controller.ErrorMessage}"); +} +``` + +### 问题2:门不自动开启 + +**排查步骤**: +1. 确认 `DoorMission` 任务已启动 +2. 检查站点的 `EnterDoor` 字段是否配置正确 +3. 检查小车站点的 `PreEnterDoor` 字段是否与目标站点的 `EnterDoor` 匹配 +4. 查看门控制器的连接状态是否为 `Online` +5. 检查门的状态是否正确读取 + +**诊断命令**: +```csharp +// 检查门状态 +bool isOpen = doorMission.GetDoorState(1, 2); +Console.WriteLine($"控制器1门2的状态: {(isOpen ? "打开" : "关闭")}"); + +// 检查门控制器状态 +var controllers = doorMission.GetDoorControllers(); +var controller = controllers.FirstOrDefault(c => c.Index == 1); +if (controller != null) +{ + Console.WriteLine($"控制器状态: {controller.State}"); + Console.WriteLine($"是否在线: {controller.IsOnline}"); + Console.WriteLine($"错误信息: {controller.ErrorMessage}"); +} +``` + +### 问题3:配置文件更新后不生效 + +**排查步骤**: +1. 确认配置文件格式正确(JSON格式) +2. 检查配置文件是否保存成功 +3. 等待最多10秒,系统会自动检测更新 +4. 查看诊断日志中的配置同步信息 + +### 问题4:监控界面无数据 + +**排查步骤**: +1. 确认 `DoorMission` 任务已启动 +2. 检查是否有配置的门控制器 +3. 查看门控制器是否成功连接 +4. 检查监控界面的刷新间隔设置 + +### 问题5:手动关闭按钮无法点击 + +**原因**: +- 门区域内有车辆占用,系统安全保护机制禁止手动关闭 + +**解决方法**: +1. 先点击"清空占用"按钮,清空车辆占用记录 +2. 清空后,关闭按钮会自动启用 +3. 然后可以执行手动关闭操作 + +### 问题6:手动控制不生效 + +**排查步骤**: +1. 检查手动控制是否已过期(默认10秒) +2. 查看"控制来源"列,确认是否为"手动" +3. 查看"手动剩余(s)"列,确认剩余时间 +4. 如果已过期,手动控制会自动恢复为自动模式 +5. 可以通过监控界面重新设置手动控制 + +--- + +## 附录 + +### A. 门标识符解析 + +门标识符格式:`控制器索引.门索引` + +**解析规则**: +- 必须包含一个点号(`.`) +- 点号前后必须为整数 +- 解析失败时返回 `null` + +**示例**: +- `"1.2"` → `(controllerIndex: 1, doorIndex: 2)` ✅ +- `"10.5"` → `(controllerIndex: 10, doorIndex: 5)` ✅ +- `"1"` → `null` ❌(缺少点号) +- `"1.2.3"` → `null` ❌(多个点号) +- `"a.2"` → `null` ❌(非数字) + +### B. 诊断日志说明 + +系统会在以下情况记录诊断日志: +- 门控制器连接成功/失败 +- 门控制器配置变更 +- 门状态读取失败 +- 门控制写入失败 +- 配置加载失败 + +**日志位置**:系统诊断日志 + +### C. 类结构关系图 + +``` +DoorMission (门控进程) + │ + ├── BasicDoorController (抽象基类) + │ │ + │ └── ModbusDoorController (Modbus 实现) + │ + ├── DoorManager (配置界面) + │ + ├── DoorMonitor (监控界面) + │ + └── DoorModel (配置模型) +``` + +### D. 控制来源枚举 + +```csharp +public enum ControlSource +{ + Auto = 0, // 自动控制 + Manual = 1 // 手动控制 +} +``` + +### E. 门控制状态结构 + +```csharp +public class DoorControlStatus +{ + public bool Target { get; set; } // 当前目标状态(true=打开,false=关闭) + public ControlSource Source { get; set; } // 控制来源(Auto/Manual) + public double? ManualRemainingSeconds { get; set; } // 手动控制剩余秒数(仅当Source=Manual时有效) + public IReadOnlyList CarsInArea { get; set; } // 车辆占用列表 +} +``` + +### F. 版本历史 + +| 版本 | 日期 | 主要更新 | +|------|------|----------| +| 1.0 | 2025-01 | 初始版本,支持 Modbus 门控制器 | +| 1.1 | 2025-01 | 新增门控仲裁机制,支持手动控制与自动控制协调 | +| 1.2 | 2025-01 | 新增车辆占用管理功能,监控界面显示车辆占用情况 | +| 1.3 | 2025-01 | 优化门控逻辑监控间隔至500ms,新增安全保护机制(占用时禁止手动关闭) | + +--- + +**文档更新时间**:2025-01-21 diff --git a/StandardScene.Core/ExtendDevice/ButtonBox/BasicButtonBox.cs b/StandardScene.Core/ExtendDevice/ButtonBox/BasicButtonBox.cs new file mode 100644 index 0000000..39b4531 --- /dev/null +++ b/StandardScene.Core/ExtendDevice/ButtonBox/BasicButtonBox.cs @@ -0,0 +1,263 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SimpleCore.Library; + +namespace StandardScene.ExtendDevice.ButtonBox +{ + /// + /// 按钮状态枚举 + /// + public enum ButtonState + { + /// + /// 未按下 + /// + Released = 0, + + /// + /// 已按下 + /// + Pressed = 1, + + /// + /// 未知状态 + /// + Unknown = 2 + } + + /// + /// 按钮盒状态枚举 + /// + public enum ButtonBoxState + { + /// + /// 离线 + /// + Offline = 0, + + /// + /// 在线 + /// + Online = 1, + + /// + /// 连接中 + /// + Connecting = 2, + + /// + /// 错误 + /// + Error = 3 + } + + /// + /// 基础按钮盒类,包含状态机 + /// + public abstract class BasicButtonBox + { + /// + /// 按钮盒索引 + /// + public int Index { get; set; } + + /// + /// IP地址 + /// + public string Ip { get; set; } = string.Empty; + + /// + /// 端口 + /// + public int Port { get; set; } + + /// + /// 按钮盒状态 + /// + public ButtonBoxState State { get; protected set; } = ButtonBoxState.Offline; + + /// + /// 是否在线 + /// + public bool IsOnline => State == ButtonBoxState.Online; + + /// + /// 按钮状态字典,键为按钮索引 + /// + public Dictionary ButtonStates { get; protected set; } = new Dictionary(); + + /// + /// 按钮配置信息字典,键为按钮索引 + /// + public Dictionary ButtonConfigs { get; protected set; } = new Dictionary(); + + /// + /// 按钮动作执行后清零对应寄存器:默认空实现,具体盒型(如 Azowie)按需重写。 + /// 用于解耦 ButtonMission 对具体盒型的 is 判断,便于驱动外移至卫星 dll。 + /// + public virtual void ClearButtonRegister(int buttonIndex) + { + } + + /// + /// 最后更新时间 + /// + public DateTime LastUpdateTime { get; protected set; } = DateTime.Now; + + /// + /// 错误信息 + /// + public string ErrorMessage { get; protected set; } = string.Empty; + + /// + /// 更新按钮盒状态 + /// + public virtual void UpdateState(ButtonBoxState newState, string errorMessage = "") + { + State = newState; + ErrorMessage = errorMessage; + LastUpdateTime = DateTime.Now; + } + + /// + /// 更新按钮状态 + /// + /// 按钮索引 + /// 按钮状态 + public virtual void UpdateButtonState(int buttonIndex, ButtonState state) + { + bool hadPrev = ButtonStates.TryGetValue(buttonIndex, out var previous); + if (hadPrev && previous == state) + return; + + ButtonStates[buttonIndex] = state; + if (hadPrev) + Diagnosis.Post($"按钮盒{Index}_按钮{buttonIndex}:状态变更为{state}", "ButtonBox", false); + LastUpdateTime = DateTime.Now; + } + + /// + /// 获取按钮状态 + /// + /// 按钮索引 + /// 按钮状态,如果不存在则返回Unknown + public virtual ButtonState GetButtonState(int buttonIndex) + { + return ButtonStates.TryGetValue(buttonIndex, out var state) ? state : ButtonState.Unknown; + } + + /// + /// 初始化按钮状态 + /// + /// 按钮索引列表 + public virtual void InitializeButtons(List buttonIndices) + { + ButtonStates.Clear(); + foreach (var index in buttonIndices) + { + ButtonStates[index] = ButtonState.Released; + } + } + + /// + /// 初始化按钮配置信息 + /// + /// 按钮配置列表 + public virtual void InitializeButtonConfigs(List buttonConfigs) + { + ButtonConfigs.Clear(); + if (buttonConfigs != null) + { + foreach (var config in buttonConfigs) + { + ButtonConfigs[config.Index] = new ButtonModel + { + Index = config.Index, + TriggerMission = config.TriggerMission, + TriggerMethod = config.TriggerMethod, + TriggerMethodParams = config.TriggerMethodParams, + TriggerState = config.TriggerState, + TriggerDelay = config.TriggerDelay + }; + } + } + } + + /// + /// 更新按钮配置信息 + /// + /// 按钮配置列表 + public virtual void UpdateButtonConfigs(List buttonConfigs) + { + if (buttonConfigs == null) + { + ButtonConfigs.Clear(); + return; + } + + // 创建配置字典 + var configDict = buttonConfigs.ToDictionary(b => b.Index); + + // 删除配置中不存在的按钮 + var toRemove = ButtonConfigs.Keys.Where(k => !configDict.ContainsKey(k)).ToList(); + foreach (var key in toRemove) + { + ButtonConfigs.Remove(key); + } + + // 添加或更新按钮配置 + foreach (var config in buttonConfigs) + { + ButtonConfigs[config.Index] = new ButtonModel + { + Index = config.Index, + TriggerMission = config.TriggerMission, + TriggerMethod = config.TriggerMethod, + TriggerMethodParams = config.TriggerMethodParams, + TriggerState = config.TriggerState, + TriggerDelay = config.TriggerDelay + }; + } + } + + /// + /// 获取按钮配置信息 + /// + /// 按钮索引 + /// 按钮配置信息,如果不存在则返回null + public virtual ButtonModel GetButtonConfig(int buttonIndex) + { + return ButtonConfigs.TryGetValue(buttonIndex, out var config) ? config : null; + } + + /// + /// 连接按钮盒 + /// + public virtual void Connect() + { + UpdateState(ButtonBoxState.Connecting); + } + + /// + /// 断开连接 + /// + public virtual void Disconnect() + { + UpdateState(ButtonBoxState.Offline); + } + + /// + /// 当与此按钮盒绑定的业务方法执行完成后触发的回调。 + /// 子类可重写以实现按钮灯反馈、蜂鸣等效果。 + /// + /// 触发本次调用的按钮配置 + /// 业务方法是否执行成功 + public virtual void OnActionExecuted(ButtonModel buttonConfig, bool isSuccess) + { + // 基类默认不做任何事,由具体实现按需要重写 + } + } +} diff --git a/StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxManager.Designer.cs b/StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxManager.Designer.cs new file mode 100644 index 0000000..bf7a199 --- /dev/null +++ b/StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxManager.Designer.cs @@ -0,0 +1,608 @@ +namespace StandardScene.ExtendDevice.ButtonBox +{ + partial class ButtonBoxManager + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.buttonBoxListView = new System.Windows.Forms.ListView(); + this.columnHeaderBoxIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderIp = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderPort = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.groupBoxButtonBox = new System.Windows.Forms.GroupBox(); + this.btnSaveButtonBox = new System.Windows.Forms.Button(); + this.btnDeleteButtonBox = new System.Windows.Forms.Button(); + this.btnAddButtonBox = new System.Windows.Forms.Button(); + this.labelType = new System.Windows.Forms.Label(); + this.comboBoxType = new System.Windows.Forms.ComboBox(); + this.labelBoxIndex = new System.Windows.Forms.Label(); + this.textBoxBoxIndex = new System.Windows.Forms.TextBox(); + this.labelPort = new System.Windows.Forms.Label(); + this.textBoxPort = new System.Windows.Forms.TextBox(); + this.labelIp = new System.Windows.Forms.Label(); + this.textBoxIp = new System.Windows.Forms.TextBox(); + this.buttonListView = new System.Windows.Forms.ListView(); + this.columnHeaderButtonIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderTriggerMission = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderTriggerMethod = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderTriggerMethodParams = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderTriggerState = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderTriggerDelay = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.groupBoxButton = new System.Windows.Forms.GroupBox(); + this.btnSaveButton = new System.Windows.Forms.Button(); + this.btnDeleteButton = new System.Windows.Forms.Button(); + this.btnAddButton = new System.Windows.Forms.Button(); + this.labelTriggerMethodParams = new System.Windows.Forms.Label(); + this.textBoxTriggerMethodParams = new System.Windows.Forms.TextBox(); + this.labelTriggerMethod = new System.Windows.Forms.Label(); + this.textBoxTriggerMethod = new System.Windows.Forms.TextBox(); + this.labelTriggerMission = new System.Windows.Forms.Label(); + this.textBoxTriggerMission = new System.Windows.Forms.TextBox(); + this.labelButtonIndex = new System.Windows.Forms.Label(); + this.textBoxButtonIndex = new System.Windows.Forms.TextBox(); + this.labelTriggerState = new System.Windows.Forms.Label(); + this.comboBoxTriggerState = new System.Windows.Forms.ComboBox(); + this.labelTriggerDelay = new System.Windows.Forms.Label(); + this.textBoxTriggerDelay = new System.Windows.Forms.TextBox(); + this.labelTitle = new System.Windows.Forms.Label(); + this.groupBoxButtonBox.SuspendLayout(); + this.groupBoxButton.SuspendLayout(); + this.SuspendLayout(); + // + // buttonBoxListView + // + this.buttonBoxListView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.buttonBoxListView.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.buttonBoxListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderBoxIndex, + this.columnHeaderIp, + this.columnHeaderPort, + this.columnHeaderType}); + this.buttonBoxListView.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.buttonBoxListView.FullRowSelect = true; + this.buttonBoxListView.GridLines = true; + this.buttonBoxListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.buttonBoxListView.HideSelection = false; + this.buttonBoxListView.Location = new System.Drawing.Point(15, 55); + this.buttonBoxListView.MultiSelect = false; + this.buttonBoxListView.Name = "buttonBoxListView"; + this.buttonBoxListView.OwnerDraw = true; + this.buttonBoxListView.Size = new System.Drawing.Size(450, 290); + this.buttonBoxListView.TabIndex = 0; + this.buttonBoxListView.UseCompatibleStateImageBehavior = false; + this.buttonBoxListView.View = System.Windows.Forms.View.Details; + this.buttonBoxListView.SelectedIndexChanged += new System.EventHandler(this.buttonBoxListView_SelectedIndexChanged); + // + // columnHeaderBoxIndex + // + this.columnHeaderBoxIndex.Text = "编码"; + this.columnHeaderBoxIndex.Width = 70; + // + // columnHeaderIp + // + this.columnHeaderIp.Text = "IP地址"; + this.columnHeaderIp.Width = 130; + // + // columnHeaderPort + // + this.columnHeaderPort.Text = "端口"; + this.columnHeaderPort.Width = 90; + // + // columnHeaderType + // + this.columnHeaderType.Text = "类型"; + this.columnHeaderType.Width = 140; + // + // groupBoxButtonBox + // + this.groupBoxButtonBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.groupBoxButtonBox.Controls.Add(this.btnSaveButtonBox); + this.groupBoxButtonBox.Controls.Add(this.btnDeleteButtonBox); + this.groupBoxButtonBox.Controls.Add(this.btnAddButtonBox); + this.groupBoxButtonBox.Controls.Add(this.labelType); + this.groupBoxButtonBox.Controls.Add(this.comboBoxType); + this.groupBoxButtonBox.Controls.Add(this.labelBoxIndex); + this.groupBoxButtonBox.Controls.Add(this.textBoxBoxIndex); + this.groupBoxButtonBox.Controls.Add(this.labelPort); + this.groupBoxButtonBox.Controls.Add(this.textBoxPort); + this.groupBoxButtonBox.Controls.Add(this.labelIp); + this.groupBoxButtonBox.Controls.Add(this.textBoxIp); + this.groupBoxButtonBox.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBoxButtonBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(68)))), ((int)(((byte)(68)))), ((int)(((byte)(68))))); + this.groupBoxButtonBox.Location = new System.Drawing.Point(15, 360); + this.groupBoxButtonBox.Name = "groupBoxButtonBox"; + this.groupBoxButtonBox.Padding = new System.Windows.Forms.Padding(12, 10, 12, 12); + this.groupBoxButtonBox.Size = new System.Drawing.Size(450, 250); + this.groupBoxButtonBox.TabIndex = 1; + this.groupBoxButtonBox.TabStop = false; + this.groupBoxButtonBox.Text = "按钮盒信息"; + // + // btnSaveButtonBox + // + this.btnSaveButtonBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(122)))), ((int)(((byte)(204))))); + this.btnSaveButtonBox.FlatAppearance.BorderSize = 0; + this.btnSaveButtonBox.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(92)))), ((int)(((byte)(153))))); + this.btnSaveButtonBox.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(102)))), ((int)(((byte)(170))))); + this.btnSaveButtonBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSaveButtonBox.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSaveButtonBox.ForeColor = System.Drawing.Color.White; + this.btnSaveButtonBox.Location = new System.Drawing.Point(330, 200); + this.btnSaveButtonBox.Name = "btnSaveButtonBox"; + this.btnSaveButtonBox.Size = new System.Drawing.Size(100, 38); + this.btnSaveButtonBox.TabIndex = 10; + this.btnSaveButtonBox.Text = "保存"; + this.btnSaveButtonBox.UseVisualStyleBackColor = false; + this.btnSaveButtonBox.Click += new System.EventHandler(this.btnSaveButtonBox_Click); + // + // btnDeleteButtonBox + // + this.btnDeleteButtonBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(53)))), ((int)(((byte)(69))))); + this.btnDeleteButtonBox.FlatAppearance.BorderSize = 0; + this.btnDeleteButtonBox.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(165)))), ((int)(((byte)(40)))), ((int)(((byte)(52))))); + this.btnDeleteButtonBox.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(187)))), ((int)(((byte)(45)))), ((int)(((byte)(59))))); + this.btnDeleteButtonBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDeleteButtonBox.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDeleteButtonBox.ForeColor = System.Drawing.Color.White; + this.btnDeleteButtonBox.Location = new System.Drawing.Point(220, 200); + this.btnDeleteButtonBox.Name = "btnDeleteButtonBox"; + this.btnDeleteButtonBox.Size = new System.Drawing.Size(100, 38); + this.btnDeleteButtonBox.TabIndex = 9; + this.btnDeleteButtonBox.Text = "删除"; + this.btnDeleteButtonBox.UseVisualStyleBackColor = false; + this.btnDeleteButtonBox.Click += new System.EventHandler(this.btnDeleteButtonBox_Click); + // + // btnAddButtonBox + // + this.btnAddButtonBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(167)))), ((int)(((byte)(69))))); + this.btnAddButtonBox.FlatAppearance.BorderSize = 0; + this.btnAddButtonBox.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(125)))), ((int)(((byte)(52))))); + this.btnAddButtonBox.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(136)))), ((int)(((byte)(56))))); + this.btnAddButtonBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnAddButtonBox.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAddButtonBox.ForeColor = System.Drawing.Color.White; + this.btnAddButtonBox.Location = new System.Drawing.Point(110, 200); + this.btnAddButtonBox.Name = "btnAddButtonBox"; + this.btnAddButtonBox.Size = new System.Drawing.Size(100, 38); + this.btnAddButtonBox.TabIndex = 8; + this.btnAddButtonBox.Text = "添加"; + this.btnAddButtonBox.UseVisualStyleBackColor = false; + this.btnAddButtonBox.Click += new System.EventHandler(this.btnAddButtonBox_Click); + // + // labelType + // + this.labelType.AutoSize = true; + this.labelType.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelType.Location = new System.Drawing.Point(28, 168); + this.labelType.Name = "labelType"; + this.labelType.Size = new System.Drawing.Size(65, 24); + this.labelType.TabIndex = 7; + this.labelType.Text = "类型:"; + // + // comboBoxType + // + this.comboBoxType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxType.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.comboBoxType.FormattingEnabled = true; + this.comboBoxType.Location = new System.Drawing.Point(110, 165); + this.comboBoxType.Name = "comboBoxType"; + this.comboBoxType.Size = new System.Drawing.Size(320, 32); + this.comboBoxType.TabIndex = 6; + // + // labelBoxIndex + // + this.labelBoxIndex.AutoSize = true; + this.labelBoxIndex.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelBoxIndex.Location = new System.Drawing.Point(28, 48); + this.labelBoxIndex.Name = "labelBoxIndex"; + this.labelBoxIndex.Size = new System.Drawing.Size(65, 24); + this.labelBoxIndex.TabIndex = 1; + this.labelBoxIndex.Text = "编码:"; + // + // textBoxBoxIndex + // + this.textBoxBoxIndex.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxBoxIndex.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxBoxIndex.Location = new System.Drawing.Point(110, 45); + this.textBoxBoxIndex.Name = "textBoxBoxIndex"; + this.textBoxBoxIndex.Size = new System.Drawing.Size(320, 30); + this.textBoxBoxIndex.TabIndex = 0; + // + // labelIp + // + this.labelIp.AutoSize = true; + this.labelIp.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelIp.Location = new System.Drawing.Point(18, 88); + this.labelIp.Name = "labelIp"; + this.labelIp.Size = new System.Drawing.Size(85, 24); + this.labelIp.TabIndex = 3; + this.labelIp.Text = "IP地址:"; + // + // textBoxIp + // + this.textBoxIp.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxIp.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxIp.Location = new System.Drawing.Point(110, 85); + this.textBoxIp.Name = "textBoxIp"; + this.textBoxIp.Size = new System.Drawing.Size(320, 30); + this.textBoxIp.TabIndex = 2; + this.textBoxIp.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + // + // labelPort + // + this.labelPort.AutoSize = true; + this.labelPort.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelPort.Location = new System.Drawing.Point(28, 128); + this.labelPort.Name = "labelPort"; + this.labelPort.Size = new System.Drawing.Size(65, 24); + this.labelPort.TabIndex = 5; + this.labelPort.Text = "端口:"; + // + // textBoxPort + // + this.textBoxPort.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxPort.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxPort.Location = new System.Drawing.Point(110, 125); + this.textBoxPort.Name = "textBoxPort"; + this.textBoxPort.Size = new System.Drawing.Size(320, 30); + this.textBoxPort.TabIndex = 4; + // + // buttonListView + // + this.buttonListView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.buttonListView.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.buttonListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderButtonIndex, + this.columnHeaderTriggerState, + this.columnHeaderTriggerDelay, + this.columnHeaderTriggerMission, + this.columnHeaderTriggerMethod, + this.columnHeaderTriggerMethodParams}); + this.buttonListView.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.buttonListView.FullRowSelect = true; + this.buttonListView.GridLines = true; + this.buttonListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.buttonListView.HideSelection = false; + this.buttonListView.Location = new System.Drawing.Point(483, 55); + this.buttonListView.MultiSelect = false; + this.buttonListView.Name = "buttonListView"; + this.buttonListView.OwnerDraw = true; + this.buttonListView.Size = new System.Drawing.Size(700, 290); + this.buttonListView.TabIndex = 2; + this.buttonListView.UseCompatibleStateImageBehavior = false; + this.buttonListView.View = System.Windows.Forms.View.Details; + this.buttonListView.SelectedIndexChanged += new System.EventHandler(this.buttonListView_SelectedIndexChanged); + // + // columnHeaderButtonIndex + // + this.columnHeaderButtonIndex.Text = "编码"; + this.columnHeaderButtonIndex.Width = 70; + // + // columnHeaderTriggerState + // + this.columnHeaderTriggerState.Text = "触发状态"; + this.columnHeaderTriggerState.Width = 100; + // + // columnHeaderTriggerDelay + // + this.columnHeaderTriggerDelay.Text = "触发延迟"; + this.columnHeaderTriggerDelay.Width = 90; + // + // columnHeaderTriggerMission + // + this.columnHeaderTriggerMission.Text = "触发任务"; + this.columnHeaderTriggerMission.Width = 140; + // + // columnHeaderTriggerMethod + // + this.columnHeaderTriggerMethod.Text = "触发方法"; + this.columnHeaderTriggerMethod.Width = 140; + // + // columnHeaderTriggerMethodParams + // + this.columnHeaderTriggerMethodParams.Text = "方法参数"; + this.columnHeaderTriggerMethodParams.Width = 160; + // + // groupBoxButton + // + this.groupBoxButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.groupBoxButton.Controls.Add(this.btnSaveButton); + this.groupBoxButton.Controls.Add(this.btnDeleteButton); + this.groupBoxButton.Controls.Add(this.btnAddButton); + this.groupBoxButton.Controls.Add(this.labelTriggerMethodParams); + this.groupBoxButton.Controls.Add(this.textBoxTriggerMethodParams); + this.groupBoxButton.Controls.Add(this.labelTriggerMethod); + this.groupBoxButton.Controls.Add(this.textBoxTriggerMethod); + this.groupBoxButton.Controls.Add(this.labelTriggerMission); + this.groupBoxButton.Controls.Add(this.textBoxTriggerMission); + this.groupBoxButton.Controls.Add(this.labelButtonIndex); + this.groupBoxButton.Controls.Add(this.textBoxButtonIndex); + this.groupBoxButton.Controls.Add(this.labelTriggerState); + this.groupBoxButton.Controls.Add(this.comboBoxTriggerState); + this.groupBoxButton.Controls.Add(this.labelTriggerDelay); + this.groupBoxButton.Controls.Add(this.textBoxTriggerDelay); + this.groupBoxButton.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBoxButton.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(68)))), ((int)(((byte)(68)))), ((int)(((byte)(68))))); + this.groupBoxButton.Location = new System.Drawing.Point(483, 360); + this.groupBoxButton.Name = "groupBoxButton"; + this.groupBoxButton.Padding = new System.Windows.Forms.Padding(12, 10, 12, 12); + this.groupBoxButton.Size = new System.Drawing.Size(700, 250); + this.groupBoxButton.TabIndex = 3; + this.groupBoxButton.TabStop = false; + this.groupBoxButton.Text = "按钮信息"; + // + // btnSaveButton + // + this.btnSaveButton.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(122)))), ((int)(((byte)(204))))); + this.btnSaveButton.FlatAppearance.BorderSize = 0; + this.btnSaveButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(92)))), ((int)(((byte)(153))))); + this.btnSaveButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(102)))), ((int)(((byte)(170))))); + this.btnSaveButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSaveButton.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSaveButton.ForeColor = System.Drawing.Color.White; + this.btnSaveButton.Location = new System.Drawing.Point(580, 180); + this.btnSaveButton.Name = "btnSaveButton"; + this.btnSaveButton.Size = new System.Drawing.Size(100, 38); + this.btnSaveButton.TabIndex = 13; + this.btnSaveButton.Text = "保存"; + this.btnSaveButton.UseVisualStyleBackColor = false; + this.btnSaveButton.Click += new System.EventHandler(this.btnSaveButton_Click); + // + // btnDeleteButton + // + this.btnDeleteButton.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(53)))), ((int)(((byte)(69))))); + this.btnDeleteButton.FlatAppearance.BorderSize = 0; + this.btnDeleteButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(165)))), ((int)(((byte)(40)))), ((int)(((byte)(52))))); + this.btnDeleteButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(187)))), ((int)(((byte)(45)))), ((int)(((byte)(59))))); + this.btnDeleteButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDeleteButton.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDeleteButton.ForeColor = System.Drawing.Color.White; + this.btnDeleteButton.Location = new System.Drawing.Point(470, 180); + this.btnDeleteButton.Name = "btnDeleteButton"; + this.btnDeleteButton.Size = new System.Drawing.Size(100, 38); + this.btnDeleteButton.TabIndex = 12; + this.btnDeleteButton.Text = "删除"; + this.btnDeleteButton.UseVisualStyleBackColor = false; + this.btnDeleteButton.Click += new System.EventHandler(this.btnDeleteButton_Click); + // + // btnAddButton + // + this.btnAddButton.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(167)))), ((int)(((byte)(69))))); + this.btnAddButton.FlatAppearance.BorderSize = 0; + this.btnAddButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(125)))), ((int)(((byte)(52))))); + this.btnAddButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(136)))), ((int)(((byte)(56))))); + this.btnAddButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnAddButton.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAddButton.ForeColor = System.Drawing.Color.White; + this.btnAddButton.Location = new System.Drawing.Point(360, 180); + this.btnAddButton.Name = "btnAddButton"; + this.btnAddButton.Size = new System.Drawing.Size(100, 38); + this.btnAddButton.TabIndex = 11; + this.btnAddButton.Text = "添加"; + this.btnAddButton.UseVisualStyleBackColor = false; + this.btnAddButton.Click += new System.EventHandler(this.btnAddButton_Click); + // + // labelTriggerMethodParams + // + this.labelTriggerMethodParams.AutoSize = true; + this.labelTriggerMethodParams.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelTriggerMethodParams.Location = new System.Drawing.Point(370, 128); + this.labelTriggerMethodParams.Name = "labelTriggerMethodParams"; + this.labelTriggerMethodParams.Size = new System.Drawing.Size(103, 24); + this.labelTriggerMethodParams.TabIndex = 11; + this.labelTriggerMethodParams.Text = "方法参数:"; + // + // textBoxTriggerMethodParams + // + this.textBoxTriggerMethodParams.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxTriggerMethodParams.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxTriggerMethodParams.Location = new System.Drawing.Point(490, 125); + this.textBoxTriggerMethodParams.Name = "textBoxTriggerMethodParams"; + this.textBoxTriggerMethodParams.Size = new System.Drawing.Size(190, 30); + this.textBoxTriggerMethodParams.TabIndex = 10; + // + // labelTriggerState + // + this.labelTriggerState.AutoSize = true; + this.labelTriggerState.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelTriggerState.Location = new System.Drawing.Point(370, 48); + this.labelTriggerState.Name = "labelTriggerState"; + this.labelTriggerState.Size = new System.Drawing.Size(103, 24); + this.labelTriggerState.TabIndex = 3; + this.labelTriggerState.Text = "触发状态:"; + // + // comboBoxTriggerState + // + this.comboBoxTriggerState.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxTriggerState.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.comboBoxTriggerState.FormattingEnabled = true; + this.comboBoxTriggerState.Location = new System.Drawing.Point(490, 45); + this.comboBoxTriggerState.Name = "comboBoxTriggerState"; + this.comboBoxTriggerState.Size = new System.Drawing.Size(190, 32); + this.comboBoxTriggerState.TabIndex = 2; + // + // labelTriggerDelay + // + this.labelTriggerDelay.AutoSize = true; + this.labelTriggerDelay.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelTriggerDelay.Location = new System.Drawing.Point(28, 88); + this.labelTriggerDelay.Name = "labelTriggerDelay"; + this.labelTriggerDelay.Size = new System.Drawing.Size(103, 24); + this.labelTriggerDelay.TabIndex = 5; + this.labelTriggerDelay.Text = "触发延迟:"; + // + // textBoxTriggerDelay + // + this.textBoxTriggerDelay.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxTriggerDelay.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxTriggerDelay.Location = new System.Drawing.Point(150, 85); + this.textBoxTriggerDelay.Name = "textBoxTriggerDelay"; + this.textBoxTriggerDelay.Size = new System.Drawing.Size(200, 30); + this.textBoxTriggerDelay.TabIndex = 4; + // + // labelTriggerMethod + // + this.labelTriggerMethod.AutoSize = true; + this.labelTriggerMethod.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelTriggerMethod.Location = new System.Drawing.Point(28, 128); + this.labelTriggerMethod.Name = "labelTriggerMethod"; + this.labelTriggerMethod.Size = new System.Drawing.Size(103, 24); + this.labelTriggerMethod.TabIndex = 9; + this.labelTriggerMethod.Text = "触发方法:"; + // + // textBoxTriggerMethod + // + this.textBoxTriggerMethod.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxTriggerMethod.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxTriggerMethod.Location = new System.Drawing.Point(150, 125); + this.textBoxTriggerMethod.Name = "textBoxTriggerMethod"; + this.textBoxTriggerMethod.Size = new System.Drawing.Size(200, 30); + this.textBoxTriggerMethod.TabIndex = 8; + // + // labelTriggerMission + // + this.labelTriggerMission.AutoSize = true; + this.labelTriggerMission.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelTriggerMission.Location = new System.Drawing.Point(370, 88); + this.labelTriggerMission.Name = "labelTriggerMission"; + this.labelTriggerMission.Size = new System.Drawing.Size(103, 24); + this.labelTriggerMission.TabIndex = 7; + this.labelTriggerMission.Text = "触发任务:"; + // + // textBoxTriggerMission + // + this.textBoxTriggerMission.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxTriggerMission.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxTriggerMission.Location = new System.Drawing.Point(490, 85); + this.textBoxTriggerMission.Name = "textBoxTriggerMission"; + this.textBoxTriggerMission.Size = new System.Drawing.Size(190, 30); + this.textBoxTriggerMission.TabIndex = 6; + // + // labelButtonIndex + // + this.labelButtonIndex.AutoSize = true; + this.labelButtonIndex.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelButtonIndex.Location = new System.Drawing.Point(28, 48); + this.labelButtonIndex.Name = "labelButtonIndex"; + this.labelButtonIndex.Size = new System.Drawing.Size(65, 24); + this.labelButtonIndex.TabIndex = 1; + this.labelButtonIndex.Text = "编码:"; + // + // textBoxButtonIndex + // + this.textBoxButtonIndex.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxButtonIndex.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxButtonIndex.Location = new System.Drawing.Point(150, 45); + this.textBoxButtonIndex.Name = "textBoxButtonIndex"; + this.textBoxButtonIndex.Size = new System.Drawing.Size(200, 30); + this.textBoxButtonIndex.TabIndex = 0; + // + // labelTitle + // + this.labelTitle.AutoSize = true; + this.labelTitle.Font = new System.Drawing.Font("微软雅黑", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.labelTitle.Location = new System.Drawing.Point(15, 12); + this.labelTitle.Name = "labelTitle"; + this.labelTitle.Size = new System.Drawing.Size(150, 42); + this.labelTitle.TabIndex = 4; + this.labelTitle.Text = "按钮盒管理"; + // + // ButtonBoxManager + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(245)))), ((int)(((byte)(245)))), ((int)(((byte)(247))))); + this.ClientSize = new System.Drawing.Size(1200, 620); + this.Controls.Add(this.labelTitle); + this.Controls.Add(this.groupBoxButton); + this.Controls.Add(this.buttonListView); + this.Controls.Add(this.groupBoxButtonBox); + this.Controls.Add(this.buttonBoxListView); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.MinimumSize = new System.Drawing.Size(1200, 620); + this.Name = "ButtonBoxManager"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "按钮盒管理"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ButtonBoxManager_FormClosing); + this.Load += new System.EventHandler(this.ButtonBoxManager_Load); + this.groupBoxButtonBox.ResumeLayout(false); + this.groupBoxButtonBox.PerformLayout(); + this.groupBoxButton.ResumeLayout(false); + this.groupBoxButton.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView buttonBoxListView; + private System.Windows.Forms.ColumnHeader columnHeaderBoxIndex; + private System.Windows.Forms.ColumnHeader columnHeaderIp; + private System.Windows.Forms.ColumnHeader columnHeaderPort; + private System.Windows.Forms.ColumnHeader columnHeaderType; + private System.Windows.Forms.GroupBox groupBoxButtonBox; + private System.Windows.Forms.TextBox textBoxIp; + private System.Windows.Forms.Label labelIp; + private System.Windows.Forms.Label labelPort; + private System.Windows.Forms.TextBox textBoxPort; + private System.Windows.Forms.Label labelBoxIndex; + private System.Windows.Forms.TextBox textBoxBoxIndex; + private System.Windows.Forms.Label labelType; + private System.Windows.Forms.ComboBox comboBoxType; + private System.Windows.Forms.Button btnAddButtonBox; + private System.Windows.Forms.Button btnDeleteButtonBox; + private System.Windows.Forms.Button btnSaveButtonBox; + private System.Windows.Forms.ListView buttonListView; + private System.Windows.Forms.ColumnHeader columnHeaderButtonIndex; + private System.Windows.Forms.ColumnHeader columnHeaderTriggerMission; + private System.Windows.Forms.ColumnHeader columnHeaderTriggerMethod; + private System.Windows.Forms.ColumnHeader columnHeaderTriggerMethodParams; + private System.Windows.Forms.GroupBox groupBoxButton; + private System.Windows.Forms.Label labelButtonIndex; + private System.Windows.Forms.TextBox textBoxButtonIndex; + private System.Windows.Forms.Label labelTriggerMission; + private System.Windows.Forms.TextBox textBoxTriggerMission; + private System.Windows.Forms.Label labelTriggerMethod; + private System.Windows.Forms.TextBox textBoxTriggerMethod; + private System.Windows.Forms.Label labelTriggerMethodParams; + private System.Windows.Forms.TextBox textBoxTriggerMethodParams; + private System.Windows.Forms.Label labelTriggerState; + private System.Windows.Forms.ComboBox comboBoxTriggerState; + private System.Windows.Forms.Label labelTriggerDelay; + private System.Windows.Forms.TextBox textBoxTriggerDelay; + private System.Windows.Forms.ColumnHeader columnHeaderTriggerState; + private System.Windows.Forms.ColumnHeader columnHeaderTriggerDelay; + private System.Windows.Forms.Button btnAddButton; + private System.Windows.Forms.Button btnDeleteButton; + private System.Windows.Forms.Button btnSaveButton; + private System.Windows.Forms.Label labelTitle; + } +} + diff --git a/StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxManager.cs b/StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxManager.cs new file mode 100644 index 0000000..17f591a --- /dev/null +++ b/StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxManager.cs @@ -0,0 +1,1000 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Windows.Forms; +using StandardScene.Utils; + +namespace StandardScene.ExtendDevice.ButtonBox +{ + public partial class ButtonBoxManager : Form + { + private static ButtonBoxManager _instance = null; + private static readonly object _lock = new object(); + + private const string DataFileName = "ButtonBoxConfig.json"; + private string _dataFilePath; + + private List _buttonBoxes = new List(); + private ButtonBoxModel _currentButtonBox = null; + private ButtonModel _currentButton = null; + + /// + /// 获取单例实例 + /// + public static ButtonBoxManager Instance + { + get + { + if (_instance == null || _instance.IsDisposed) + { + lock (_lock) + { + if (_instance == null || _instance.IsDisposed) + { + _instance = new ButtonBoxManager(); + } + } + } + return _instance; + } + } + + /// + /// 私有构造函数,确保单例模式 + /// + private ButtonBoxManager() + { + InitializeComponent(); + // 设置数据文件路径 + _dataFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DataFileName); + } + + private void ButtonBoxManager_Load(object sender, EventArgs e) + { + // 设置ListView的视觉样式 + SetupListViewStyles(); + + // 设置按钮的鼠标悬停效果 + SetupButtonHoverEffects(); + + // 初始化类型下拉框 + InitializeTypeComboBox(); + + // 初始化触发状态下拉框 + InitializeTriggerStateComboBox(); + + LoadData(); + RefreshButtonBoxList(); + } + + /// + /// 初始化触发状态下拉框 + /// + private void InitializeTriggerStateComboBox() + { + comboBoxTriggerState.Items.Clear(); + + // 添加ButtonState枚举的所有值 + foreach (ButtonState state in Enum.GetValues(typeof(ButtonState))) + { + comboBoxTriggerState.Items.Add(state.ToString()); + } + + // 如果没有选中项,默认选择第一个 + if (comboBoxTriggerState.Items.Count > 0 && comboBoxTriggerState.SelectedIndex == -1) + { + comboBoxTriggerState.SelectedIndex = 0; + } + } + + /// + /// 初始化类型下拉框 + /// + private void InitializeTypeComboBox() + { + comboBoxType.Items.Clear(); + + try + { + // 获取当前命名空间下所有继承自BasicButtonBox的类 + // 跨程序集发现:按钮盒具体类型可能位于卫星插件 dll(StandardScene.Devices.ButtonBox), + // 用内核同款全域类型发现替代仅扫当前程序集的 GetExecutingAssembly。 + var buttonBoxTypes = SimpleLite.Utils.UiTypeDiscovery.AllTypes() + .Where(t => t.IsClass + && !t.IsAbstract + && t.Namespace == typeof(BasicButtonBox).Namespace + && t.IsSubclassOf(typeof(BasicButtonBox))) + .OrderBy(t => t.Name) + .ToList(); + + foreach (var type in buttonBoxTypes) + { + comboBoxType.Items.Add(type.Name); + } + + // 如果没有找到任何类型,添加默认选项 + if (comboBoxType.Items.Count == 0) + { + comboBoxType.Items.Add("BasicButtonBox"); + } + } + catch (Exception ex) + { + MessageBox.Show($"Failed to init type dropdown: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + comboBoxType.Items.Add("BasicButtonBox"); + } + } + + private int _buttonBoxHoverIndex = -1; + private int _buttonHoverIndex = -1; + + /// + /// 设置ListView的视觉样式 + /// + private void SetupListViewStyles() + { + SetupListView(buttonBoxListView, + ButtonBoxListView_DrawItem, + ButtonBoxListView_DrawSubItem, + ButtonBoxListView_DrawColumnHeader, + ButtonBoxListView_MouseMove, + ButtonBoxListView_MouseLeave); + + SetupListView(buttonListView, + ButtonListView_DrawItem, + ButtonListView_DrawSubItem, + ButtonListView_DrawColumnHeader, + ButtonListView_MouseMove, + ButtonListView_MouseLeave); + } + + private void SetupListView(ListView listView, + DrawListViewItemEventHandler itemHandler, + DrawListViewSubItemEventHandler subItemHandler, + DrawListViewColumnHeaderEventHandler headerHandler, + MouseEventHandler mouseMoveHandler, + EventHandler mouseLeaveHandler) + { + listView.OwnerDraw = true; + listView.BackColor = Color.White; + listView.DrawItem += itemHandler; + listView.DrawSubItem += subItemHandler; + listView.DrawColumnHeader += headerHandler; + listView.MouseMove += mouseMoveHandler; + listView.MouseLeave += mouseLeaveHandler; + + // 启用双缓冲,防止重绘时的灰色覆盖 + typeof(Control)?.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic)? + .SetValue(listView, true, null); + } + + private static readonly Color RowEvenColor = Color.FromArgb(250, 250, 252); + private static readonly Color RowOddColor = Color.White; + private static readonly Color RowHighlightColor = Color.FromArgb(230, 240, 255); + private static readonly Color TextRegularColor = Color.FromArgb(68, 68, 68); + private static readonly Color TextHighlightColor = Color.FromArgb(51, 51, 51); + + private void ButtonBoxListView_MouseMove(object sender, MouseEventArgs e) + { + UpdateHoverIndex(buttonBoxListView, e, true); + } + + private void ButtonBoxListView_MouseLeave(object sender, EventArgs e) + { + ResetHoverIndex(buttonBoxListView, true); + } + + private void ButtonListView_MouseMove(object sender, MouseEventArgs e) + { + UpdateHoverIndex(buttonListView, e, false); + } + + private void ButtonListView_MouseLeave(object sender, EventArgs e) + { + ResetHoverIndex(buttonListView, false); + } + + private void UpdateHoverIndex(ListView listView, MouseEventArgs e, bool isButtonBoxList) + { + var hoveredItem = listView.GetItemAt(e.X, e.Y); + int newIndex = hoveredItem?.Index ?? -1; + + if (isButtonBoxList) + { + if (_buttonBoxHoverIndex != newIndex) + { + _buttonBoxHoverIndex = newIndex; + listView.Invalidate(); + } + } + else + { + if (_buttonHoverIndex != newIndex) + { + _buttonHoverIndex = newIndex; + listView.Invalidate(); + } + } + } + + private void ResetHoverIndex(ListView listView, bool isButtonBoxList) + { + if (isButtonBoxList) + { + if (_buttonBoxHoverIndex != -1) + { + _buttonBoxHoverIndex = -1; + listView.Invalidate(); + } + } + else + { + if (_buttonHoverIndex != -1) + { + _buttonHoverIndex = -1; + listView.Invalidate(); + } + } + } + + /// + /// 按钮盒ListView绘制项 + /// + private void ButtonBoxListView_DrawItem(object sender, DrawListViewItemEventArgs e) + { + var isHighlighted = e.Item.Selected + || e.ItemIndex == _buttonBoxHoverIndex + || (e.State & ListViewItemStates.Focused) != 0; + + var backColor = isHighlighted + ? RowHighlightColor + : (e.ItemIndex % 2 == 0 ? RowEvenColor : RowOddColor); + + using (var brush = new SolidBrush(backColor)) + { + e.Graphics.FillRectangle(brush, e.Bounds); + } + + var textColor = isHighlighted ? TextHighlightColor : TextRegularColor; + + TextRenderer.DrawText(e.Graphics, e.Item.Text, e.Item.Font, e.Bounds, + textColor, + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.EndEllipsis); + + e.DrawFocusRectangle(); + } + + /// + /// 按钮盒ListView绘制子项 + /// + private void ButtonBoxListView_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) + { + var isHighlighted = e.Item.Selected + || e.ItemIndex == _buttonBoxHoverIndex + || (e.ItemState & ListViewItemStates.Focused) != 0; + + var backColor = isHighlighted + ? RowHighlightColor + : (e.ItemIndex % 2 == 0 ? RowEvenColor : RowOddColor); + + using (var brush = new SolidBrush(backColor)) + { + e.Graphics.FillRectangle(brush, e.Bounds); + } + + var textColor = isHighlighted ? TextHighlightColor : TextRegularColor; + + TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font, e.Bounds, + textColor, + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.EndEllipsis); + } + + /// + /// 按钮盒ListView绘制列标题 + /// + private void ButtonBoxListView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) + { + // 绘制列标题背景 + e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(245, 247, 250)), e.Bounds); + + // 绘制边框 + e.Graphics.DrawLine(new Pen(Color.FromArgb(220, 220, 220)), + e.Bounds.Left, e.Bounds.Bottom - 1, e.Bounds.Right, e.Bounds.Bottom - 1); + + // 绘制文本 + TextRenderer.DrawText(e.Graphics, e.Header.Text, + new Font("微软雅黑", 10.5F, FontStyle.Bold), + e.Bounds, Color.FromArgb(68, 68, 68), + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.HorizontalCenter); + } + + /// + /// 按钮ListView绘制项 + /// + private void ButtonListView_DrawItem(object sender, DrawListViewItemEventArgs e) + { + var isHighlighted = e.Item.Selected + || e.ItemIndex == _buttonHoverIndex + || (e.State & ListViewItemStates.Focused) != 0; + + var backColor = isHighlighted + ? RowHighlightColor + : (e.ItemIndex % 2 == 0 ? RowEvenColor : RowOddColor); + + using (var brush = new SolidBrush(backColor)) + { + e.Graphics.FillRectangle(brush, e.Bounds); + } + + var textColor = isHighlighted ? TextHighlightColor : TextRegularColor; + + TextRenderer.DrawText(e.Graphics, e.Item.Text, e.Item.Font, e.Bounds, + textColor, + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.EndEllipsis); + + e.DrawFocusRectangle(); + } + + /// + /// 按钮ListView绘制子项 + /// + private void ButtonListView_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) + { + var isHighlighted = e.Item.Selected + || e.ItemIndex == _buttonHoverIndex + || (e.ItemState & ListViewItemStates.Focused) != 0; + + var backColor = isHighlighted + ? RowHighlightColor + : (e.ItemIndex % 2 == 0 ? RowEvenColor : RowOddColor); + + using (var brush = new SolidBrush(backColor)) + { + e.Graphics.FillRectangle(brush, e.Bounds); + } + + var textColor = isHighlighted ? TextHighlightColor : TextRegularColor; + + TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font, e.Bounds, + textColor, + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.EndEllipsis); + } + + /// + /// 按钮ListView绘制列标题 + /// + private void ButtonListView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) + { + // 绘制列标题背景 + e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(245, 247, 250)), e.Bounds); + + // 绘制边框 + e.Graphics.DrawLine(new Pen(Color.FromArgb(220, 220, 220)), + e.Bounds.Left, e.Bounds.Bottom - 1, e.Bounds.Right, e.Bounds.Bottom - 1); + + // 绘制文本 + TextRenderer.DrawText(e.Graphics, e.Header.Text, + new Font("微软雅黑", 10.5F, FontStyle.Bold), + e.Bounds, Color.FromArgb(68, 68, 68), + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.HorizontalCenter); + } + + /// + /// 设置按钮的鼠标悬停效果 + /// + private void SetupButtonHoverEffects() + { + // 按钮的悬停效果现在通过FlatAppearance属性在Designer中设置 + // 这里可以添加其他额外的效果,如工具提示等 + } + + /// + /// 刷新按钮盒列表 + /// + private void RefreshButtonBoxList() + { + buttonBoxListView.Items.Clear(); + foreach (var box in _buttonBoxes) + { + var item = new ListViewItem(box.Index.ToString()); + item.SubItems.Add(box.Ip); + item.SubItems.Add(box.Port.ToString()); + item.SubItems.Add(box.Type); + item.Tag = box; + item.UseItemStyleForSubItems = false; + buttonBoxListView.Items.Add(item); + } + } + + /// + /// 刷新按钮列表 + /// + private void RefreshButtonList() + { + buttonListView.Items.Clear(); + if (_currentButtonBox != null) + { + foreach (var button in _currentButtonBox.Buttons) + { + var item = new ListViewItem(button.Index.ToString()); + item.SubItems.Add(button.TriggerState); + item.SubItems.Add(button.TriggerDelay.ToString()); + item.SubItems.Add(button.TriggerMission); + item.SubItems.Add(button.TriggerMethod); + item.SubItems.Add(button.TriggerMethodParams); + item.Tag = button; + item.UseItemStyleForSubItems = false; + buttonListView.Items.Add(item); + } + } + } + + /// + /// 按钮盒列表选择改变 + /// + private void buttonBoxListView_SelectedIndexChanged(object sender, EventArgs e) + { + if (buttonBoxListView.SelectedItems.Count > 0) + { + _currentButtonBox = buttonBoxListView.SelectedItems[0].Tag as ButtonBoxModel; + if (_currentButtonBox != null) + { + // 填充按钮盒编辑区域 + textBoxIp.Text = _currentButtonBox.Ip; + textBoxPort.Text = _currentButtonBox.Port.ToString(); + textBoxBoxIndex.Text = _currentButtonBox.Index.ToString(); + // 设置类型下拉框 + if (comboBoxType.Items.Contains(_currentButtonBox.Type)) + { + comboBoxType.SelectedItem = _currentButtonBox.Type; + } + else + { + comboBoxType.SelectedIndex = comboBoxType.Items.Count > 0 ? 0 : -1; + } + + // 刷新按钮列表 + RefreshButtonList(); + } + } + else + { + _currentButtonBox = null; + ClearButtonBoxFields(); + buttonListView.Items.Clear(); + } + } + + /// + /// 按钮列表选择改变 + /// + private void buttonListView_SelectedIndexChanged(object sender, EventArgs e) + { + if (buttonListView.SelectedItems.Count > 0) + { + _currentButton = buttonListView.SelectedItems[0].Tag as ButtonModel; + if (_currentButton != null) + { + // 填充按钮编辑区域 + textBoxButtonIndex.Text = _currentButton.Index.ToString(); + textBoxTriggerMission.Text = _currentButton.TriggerMission; + textBoxTriggerMethod.Text = _currentButton.TriggerMethod; + textBoxTriggerMethodParams.Text = _currentButton.TriggerMethodParams; + + // 设置触发状态下拉框 + if (comboBoxTriggerState.Items.Contains(_currentButton.TriggerState)) + { + comboBoxTriggerState.SelectedItem = _currentButton.TriggerState; + } + else + { + comboBoxTriggerState.SelectedIndex = comboBoxTriggerState.Items.Count > 0 ? 0 : -1; + } + + textBoxTriggerDelay.Text = _currentButton.TriggerDelay.ToString(); + } + } + else + { + _currentButton = null; + ClearButtonFields(); + } + } + + /// + /// 添加按钮盒 + /// + private void btnAddButtonBox_Click(object sender, EventArgs e) + { + try + { + // 获取输入框的值 + string ip = textBoxIp.Text.Trim(); + string portText = textBoxPort.Text.Trim(); + string indexText = textBoxBoxIndex.Text.Trim(); + string type = comboBoxType.SelectedItem?.ToString() ?? string.Empty; + + // 确定要使用的值:如果输入框不为空则使用输入值,否则使用默认值 + int newIndex; + if (!string.IsNullOrWhiteSpace(indexText)) + { + if (!int.TryParse(indexText, out newIndex)) + { + MessageBox.Show("Index must be numeric", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + else + { + newIndex = _buttonBoxes.Count > 0 ? _buttonBoxes.Max(b => b.Index) + 1 : 1; + } + + string newIp; + if (!string.IsNullOrWhiteSpace(ip)) + { + // 验证IP地址格式 + if (!IsValidIpAddress(ip)) + { + MessageBox.Show("Invalid IP address, e.g. 192.168.1.100", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + newIp = ip; + } + else + { + newIp = "192.168.1.100"; + } + + int newPort; + if (!string.IsNullOrWhiteSpace(portText)) + { + if (!int.TryParse(portText, out newPort)) + { + MessageBox.Show("Port must be numeric", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + else + { + newPort = 502; + } + + string newType; + if (!string.IsNullOrWhiteSpace(type)) + { + newType = type; + } + else + { + // 如果下拉框有选项,使用第一个选项作为默认值 + newType = comboBoxType.Items.Count > 0 ? comboBoxType.Items[0].ToString() : "BasicButtonBox"; + } + + // 检查编码是否重复 + if (_buttonBoxes.Any(b => b.Index == newIndex)) + { + MessageBox.Show($"Index {newIndex} already exists, use another", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + // 检查IP地址是否重复 + if (_buttonBoxes.Any(b => b.Ip == newIp)) + { + MessageBox.Show($"IP {newIp} already exists, use another", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + var newBox = new ButtonBoxModel + { + Index = newIndex, + Ip = newIp, + Port = newPort, + Type = newType + }; + + _buttonBoxes.Add(newBox); + RefreshButtonBoxList(); + SaveData(); + + // 选中新添加的按钮盒 + foreach (ListViewItem item in buttonBoxListView.Items) + { + if (item.Tag == newBox) + { + item.Selected = true; + item.EnsureVisible(); + break; + } + } + } + catch (Exception ex) + { + MessageBox.Show($"Failed to add button box: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 删除按钮盒 + /// + private void btnDeleteButtonBox_Click(object sender, EventArgs e) + { + if (_currentButtonBox == null) + { + MessageBox.Show("Please select a button box to delete", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + +var result = MessageBox.Show($"Delete button box with index {_currentButtonBox.Index}?", "Confirm delete", + MessageBoxButtons.YesNo, MessageBoxIcon.Question); + + if (result == DialogResult.Yes) + { + _buttonBoxes.Remove(_currentButtonBox); + _currentButtonBox = null; + ClearButtonBoxFields(); + RefreshButtonBoxList(); + buttonListView.Items.Clear(); + SaveData(); + } + } + + /// + /// 保存按钮盒 + /// + private void btnSaveButtonBox_Click(object sender, EventArgs e) + { + if (_currentButtonBox == null) + { + MessageBox.Show("Please select a button box to save", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + try + { + string newIp = textBoxIp.Text.Trim(); + + // 验证IP地址格式 + if (!IsValidIpAddress(newIp)) + { + MessageBox.Show("Invalid IP address, e.g. 192.168.1.100", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + if (!int.TryParse(textBoxPort.Text, out int port)) + { + MessageBox.Show("Port must be numeric", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + _currentButtonBox.Port = port; + + if (!int.TryParse(textBoxBoxIndex.Text, out int index)) + { + MessageBox.Show("Index must be numeric", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + // 检查编码是否重复(排除当前项) + if (_buttonBoxes.Any(b => b.Index == index && b != _currentButtonBox)) + { + MessageBox.Show($"Index {index} already exists, use another", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + // 检查IP地址是否重复(排除当前项) + if (_buttonBoxes.Any(b => b.Ip == newIp && b != _currentButtonBox)) + { + MessageBox.Show($"IP {newIp} already exists, use another", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + _currentButtonBox.Index = index; + _currentButtonBox.Type = comboBoxType.SelectedItem?.ToString() ?? string.Empty; + _currentButtonBox.Ip = newIp; + + RefreshButtonBoxList(); + SaveData(); + MessageBox.Show("Saved", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show($"Save failed: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 添加按钮 + /// + private void btnAddButton_Click(object sender, EventArgs e) + { + if (_currentButtonBox == null) + { + MessageBox.Show("Please select a button box first", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + try + { + // 获取输入框的值 + string indexText = textBoxButtonIndex.Text.Trim(); + string triggerMission = textBoxTriggerMission.Text.Trim(); + string triggerMethod = textBoxTriggerMethod.Text.Trim(); + string triggerMethodParams = textBoxTriggerMethodParams.Text.Trim(); + string triggerState = comboBoxTriggerState.SelectedItem?.ToString() ?? string.Empty; + string triggerDelayText = textBoxTriggerDelay.Text.Trim(); + + // 确定要使用的值:如果输入框不为空则使用输入值,否则使用默认值 + int newIndex; + if (!string.IsNullOrWhiteSpace(indexText)) + { + if (!int.TryParse(indexText, out newIndex)) + { + MessageBox.Show("Button index must be numeric", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + else + { + newIndex = _currentButtonBox.Buttons.Count > 0 + ? _currentButtonBox.Buttons.Max(b => b.Index) + 1 + : 1; + } + + // 检查按钮编码是否重复 + if (_currentButtonBox.Buttons.Any(b => b.Index == newIndex)) + { + MessageBox.Show($"Button index {newIndex} already exists, use another", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + // 解析触发延迟(必须是ushort类型,范围0-65535) + ushort triggerDelay = 0; + if (!string.IsNullOrWhiteSpace(triggerDelayText)) + { + if (!ushort.TryParse(triggerDelayText, out triggerDelay)) + { + MessageBox.Show("Trigger delay must be 0-65535", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + + var newButton = new ButtonModel + { + Index = newIndex, + TriggerMission = triggerMission, + TriggerMethod = triggerMethod, + TriggerMethodParams = triggerMethodParams, + TriggerState = triggerState, + TriggerDelay = triggerDelay + }; + + _currentButtonBox.Buttons.Add(newButton); + RefreshButtonList(); + SaveData(); + + // 选中新添加的按钮 + foreach (ListViewItem item in buttonListView.Items) + { + if (item.Tag == newButton) + { + item.Selected = true; + item.EnsureVisible(); + break; + } + } + } + catch (Exception ex) + { + MessageBox.Show($"Failed to add button: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 删除按钮 + /// + private void btnDeleteButton_Click(object sender, EventArgs e) + { + if (_currentButtonBox == null) + { + MessageBox.Show("Please select a button box first", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + if (_currentButton == null) + { + MessageBox.Show("Please select a button to delete", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + +var result = MessageBox.Show($"Delete button with index {_currentButton.Index}?", "Confirm delete", + MessageBoxButtons.YesNo, MessageBoxIcon.Question); + + if (result == DialogResult.Yes) + { + _currentButtonBox.Buttons.Remove(_currentButton); + _currentButton = null; + ClearButtonFields(); + RefreshButtonList(); + SaveData(); + } + } + + /// + /// 保存按钮 + /// + private void btnSaveButton_Click(object sender, EventArgs e) + { + if (_currentButtonBox == null) + { + MessageBox.Show("Please select a button box first", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + if (_currentButton == null) + { + MessageBox.Show("Please select a button to save", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + try + { + if (!int.TryParse(textBoxButtonIndex.Text, out int index)) + { + MessageBox.Show("Button index must be numeric", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + // 检查按钮编码是否重复(排除当前按钮) + if (_currentButtonBox.Buttons.Any(b => b.Index == index && b != _currentButton)) + { + MessageBox.Show($"Button index {index} already exists, use another", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + // 验证触发延迟(必须是ushort类型,范围0-65535) + if (!ushort.TryParse(textBoxTriggerDelay.Text, out ushort triggerDelay)) + { + MessageBox.Show("Trigger delay must be 0-65535", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + _currentButton.Index = index; + _currentButton.TriggerMission = textBoxTriggerMission.Text; + _currentButton.TriggerMethod = textBoxTriggerMethod.Text; + _currentButton.TriggerMethodParams = textBoxTriggerMethodParams.Text; + _currentButton.TriggerState = comboBoxTriggerState.SelectedItem?.ToString() ?? string.Empty; + _currentButton.TriggerDelay = triggerDelay; + + RefreshButtonList(); + SaveData(); + MessageBox.Show("Saved", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show($"Save failed: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 清空按钮盒字段 + /// + private void ClearButtonBoxFields() + { + textBoxIp.Text = string.Empty; + textBoxPort.Text = string.Empty; + textBoxBoxIndex.Text = string.Empty; + comboBoxType.SelectedIndex = -1; + } + + /// + /// 清空按钮字段 + /// + private void ClearButtonFields() + { + textBoxButtonIndex.Text = string.Empty; + textBoxTriggerMission.Text = string.Empty; + textBoxTriggerMethod.Text = string.Empty; + textBoxTriggerMethodParams.Text = string.Empty; + comboBoxTriggerState.SelectedIndex = comboBoxTriggerState.Items.Count > 0 ? 0 : -1; + textBoxTriggerDelay.Text = string.Empty; + } + + /// + /// 加载数据 + /// + private void LoadData() + { + try + { + if (File.Exists(_dataFilePath)) + { + var jsonContent = File.ReadAllText(_dataFilePath, Encoding.UTF8); + if (!string.IsNullOrWhiteSpace(jsonContent)) + { + _buttonBoxes = jsonContent.JsonTo>(); + if (_buttonBoxes == null) + { + _buttonBoxes = new List(); + } + } + else + { + _buttonBoxes = new List(); + } + } + else + { + _buttonBoxes = new List(); + } + } + catch (Exception ex) + { + MessageBox.Show($"Load data failed: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + _buttonBoxes = new List(); + } + } + + /// + /// 保存数据 + /// + private void SaveData() + { + try + { + var jsonContent = _buttonBoxes.ToJson(); + File.WriteAllText(_dataFilePath, jsonContent, Encoding.UTF8); + } + catch (Exception ex) + { + MessageBox.Show($"Save data failed: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 验证IP地址格式 + /// + /// IP地址字符串 + /// 如果格式正确返回true,否则返回false + private bool IsValidIpAddress(string ipAddress) + { + if (string.IsNullOrWhiteSpace(ipAddress)) + { + return false; + } + + // 使用正则表达式验证IP地址格式(IPv4) + string pattern = @"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"; + if (Regex.IsMatch(ipAddress, pattern)) + { + // 使用System.Net.IPAddress.TryParse进行二次验证 + IPAddress address; + return IPAddress.TryParse(ipAddress, out address) && address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork; + } + + return false; + } + + /// + /// 窗体关闭事件 + /// + private void ButtonBoxManager_FormClosing(object sender, FormClosingEventArgs e) + { + if (e.CloseReason == CloseReason.UserClosing) + { + // 关闭前保存数据 + SaveData(); + e.Cancel = true; + this.Visible = false; + } + } + } +} + diff --git a/StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxManager.resx b/StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxManager.resx new file mode 100644 index 0000000..44e9f97 --- /dev/null +++ b/StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxManager.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxModel.cs b/StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxModel.cs new file mode 100644 index 0000000..c14890c --- /dev/null +++ b/StandardScene.Core/ExtendDevice/ButtonBox/ButtonBoxModel.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StandardScene.ExtendDevice.ButtonBox +{ + /// + /// 按钮盒模型 + /// + public class ButtonBoxModel + { + public string Ip { get; set; } = string.Empty; + public int Port { get; set; } = 0; + public int Index { get; set; } = 0; + public string Type { get; set; } = string.Empty; + public List Buttons { get; set; } = new List(); + } + + /// + /// 按钮模型 + /// + public class ButtonModel + { + public int Index { get; set; } = 0; + public string TriggerMission { get; set; } = string.Empty; + public string TriggerMethod { get; set; } = string.Empty; + public string TriggerMethodParams { get; set; } = string.Empty; + public string TriggerState { get; set; } = string.Empty; + public ushort TriggerDelay { get; set; } = 0; + } +} + diff --git a/StandardScene.Core/ExtendDevice/ButtonBox/ButtonMission.cs b/StandardScene.Core/ExtendDevice/ButtonBox/ButtonMission.cs new file mode 100644 index 0000000..f6e64e7 --- /dev/null +++ b/StandardScene.Core/ExtendDevice/ButtonBox/ButtonMission.cs @@ -0,0 +1,806 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using LessokajiWeaverUtilities.MagicAttributes; +using LessokajiWeaverUtilities.Utilities; +using SimpleLite; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using SimpleCore.Library; +using StandardScene; +using StandardScene.Utils; + +namespace StandardScene.ExtendDevice.ButtonBox +{ + [MissionType(Name = "按钮进程")] + [I18N.DocumentTranslation(Name = "ButtonMission",locale = "en")] + public class ButtonMission:Mission + { + private const string DataFileName = "ButtonBoxConfig.json"; + private string _dataFilePath; + + /// + /// 当前所有按钮盒实例列表 + /// + private List _buttonBoxes = new List(); + + /// + /// 用于管理异步循环的取消令牌源 + /// + private CancellationTokenSource _cancellationTokenSource; + + /// + /// 保存监控配置与状态的后台任务,便于关闭时等待 + /// + private Task _configTask; + + private Task _stateTask; + + /// + /// 同步锁,用于保护按钮盒列表的并发访问 + /// + private readonly object _syncLock = new object(); + + [MethodMember(Name = "启动进程")] + [I18N.DocumentTranslation(Name = "Start Mission", locale = "en")] + public override void Execute() + { + // 设置数据文件路径 + _dataFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DataFileName); + + // 如果已经启动,先停止之前的循环 + StopInternalAsync().GetAwaiter().GetResult(); + + // 创建新的取消令牌源 + _cancellationTokenSource = new CancellationTokenSource(); + + // 启动异步循环 + var token = _cancellationTokenSource.Token; + _configTask = Task.Run(async () => await MonitorButtonBoxConfigAsync(token), token); + _stateTask = Task.Run(async () => await MonitorButtonStatesAsync(token), token); + status.status = "Running"; + } + + /// + /// 异步监控按钮盒配置文件 + /// + private async Task MonitorButtonBoxConfigAsync(CancellationToken cancellationToken) + { + while (!cancellationToken.IsCancellationRequested) + { + try + { + // 读取配置文件 + var configButtonBoxes = LoadButtonBoxConfig(); + + // 同步按钮盒列表 + SyncButtonBoxes(configButtonBoxes); + + // 等待10秒 + await Task.Delay(TimeSpan.FromSeconds(10), cancellationToken); + } + catch (OperationCanceledException) + { + // 正常取消,退出循环 + break; + } + catch (Exception ex) + { + // 记录错误,但继续运行 + Diagnosis.Log($"按钮盒配置监控错误: {ExceptionFormatter.FormatEx(ex)}", "ButtonMission", true); + // 发生错误时等待5秒后重试 + try + { + await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken); + } + catch (OperationCanceledException) + { + break; + } + } + } + } + + /// + /// 停止监控任务 + /// + [MethodMember(Name = "停止进程")] + [I18N.DocumentTranslation(Name = "Stop Mission", locale = "en")] + public void Stop() + { + StopInternalAsync().GetAwaiter().GetResult(); + status.status = "/"; + } + + /// + /// 取消并释放当前的取消令牌源 + /// + private async Task StopInternalAsync() + { + var cts = Interlocked.Exchange(ref _cancellationTokenSource, null); + var configTask = Interlocked.Exchange(ref _configTask, null); + var stateTask = Interlocked.Exchange(ref _stateTask, null); + + if (cts == null && configTask == null && stateTask == null) + { + return; + } + + try + { + cts?.Cancel(); + } + catch (ObjectDisposedException) + { + // 已释放,忽略 + } + + var runningTasks = new[] { configTask, stateTask } + .Where(t => t != null) + .ToArray(); + + if (runningTasks.Length > 0) + { + var aggregateTask = Task.WhenAll(runningTasks); + var timeoutTask = Task.Delay(TimeSpan.FromSeconds(5)); + var completedTask = await Task.WhenAny(aggregateTask, timeoutTask).ConfigureAwait(false); + + if (completedTask == timeoutTask) + { + Diagnosis.Log("停止按钮监控任务超时", "ButtonMission", true); + } + else + { + try + { + await aggregateTask.ConfigureAwait(false); + } + catch (Exception ex) + { + Diagnosis.Log($"停止按钮监控任务时发生异常: {ExceptionFormatter.FormatEx(ex)}", "ButtonMission", true); + } + } + } + + cts?.Dispose(); + + DisconnectAllButtonBoxes(); + } + + /// + /// 断开所有按钮盒连接 + /// + private void DisconnectAllButtonBoxes() + { + List snapshot; + lock (_syncLock) + { + snapshot = _buttonBoxes.ToList(); + } + + foreach (var box in snapshot) + { + try + { + box.Disconnect(); + } + catch (Exception ex) + { + Diagnosis.Log($"停止按钮盒失败: Index={box.Index}, Error={ExceptionFormatter.FormatEx(ex)}", "ButtonMission", true); + } + } + } + + /// + /// 监控按钮状态,用于触发按钮动作 + /// + private async Task MonitorButtonStatesAsync(CancellationToken cancellationToken) + { + while (!cancellationToken.IsCancellationRequested) + { + try + { + List<(BasicButtonBox Box, ButtonModel Config)> snapshot; + lock (_syncLock) + { + snapshot = _buttonBoxes + .SelectMany(box => box.ButtonConfigs.Values.Select(cfg => (Box: box, Config: cfg))) + .ToList(); + } + + foreach (var (box, config) in snapshot) + { + if (box == null || config == null) + { + continue; + } + + if (string.IsNullOrWhiteSpace(config.TriggerMission) || + string.IsNullOrWhiteSpace(config.TriggerMethod)) + { + continue; + } + var desiredState = ButtonState.Pressed; + if (!string.IsNullOrWhiteSpace(config.TriggerState) && + Enum.TryParse(config.TriggerState, out ButtonState parsedState)) + { + desiredState = parsedState; + } + + var currentState = box.GetButtonState(config.Index); + bool isActive = currentState == desiredState&&box.IsOnline; + + int delay = config.TriggerDelay; + if (delay <= 0) + { + delay = 1; + } + + int uniqueId = unchecked((box.Index << 16) ^ config.Index); + + LadderLogic.TriggerOnce(isActive, delay*1000, () => + { + ExecuteButtonAction(config, box); + }, uniqueId); + } + } + catch (OperationCanceledException) + { + break; + } + catch (Exception ex) + { + Diagnosis.Log($"按钮状态监控错误: {ExceptionFormatter.FormatEx(ex)}", "ButtonMission", true); + } + + try + { + await Task.Delay(TimeSpan.FromMilliseconds(500), cancellationToken); + } + catch (OperationCanceledException) + { + break; + } + } + } + + /// + /// 加载按钮盒配置文件 + /// + private List LoadButtonBoxConfig() + { + try + { + if (File.Exists(_dataFilePath)) + { + var jsonContent = File.ReadAllText(_dataFilePath, Encoding.UTF8); + if (!string.IsNullOrWhiteSpace(jsonContent)) + { + var buttonBoxes = jsonContent.JsonTo>(); + return buttonBoxes ?? new List(); + } + } + } + catch (Exception ex) + { + Diagnosis.Log($"加载按钮盒配置文件失败: {ExceptionFormatter.FormatEx(ex)}", "ButtonMission", true); + } + + return new List(); + } + + /// + /// 同步按钮盒列表,根据配置文件进行增删改 + /// + private void SyncButtonBoxes(List configButtonBoxes) + { + var boxesToAdd = new List(); + + lock (_syncLock) + { + // 创建配置中的按钮盒索引字典,用于快速查找 + var configDict = configButtonBoxes.ToDictionary(b => b.Index); + + // 创建当前按钮盒索引字典 + var currentDict = _buttonBoxes.ToDictionary(b => b.Index); + + // 1. 删除:在配置中不存在的按钮盒 + var toRemove = _buttonBoxes.Where(b => !configDict.ContainsKey(b.Index)).ToList(); + foreach (var buttonBox in toRemove) + { + try + { + // 断开连接 + buttonBox.Disconnect(); + _buttonBoxes.Remove(buttonBox); + Diagnosis.Post($"删除按钮盒: Index={buttonBox.Index}, IP={buttonBox.Ip}", "ButtonMission", true); + } + catch (Exception ex) + { + Diagnosis.Log($"删除按钮盒失败: {ExceptionFormatter.FormatEx(ex)}", "ButtonMission", true); + } + } + + // 2. 添加和修改:遍历配置中的按钮盒 + foreach (var configBox in configButtonBoxes) + { + if (currentDict.TryGetValue(configBox.Index, out var existingBox)) + { + // 修改:检查是否需要更新 + if (ShouldUpdateButtonBox(existingBox, configBox)) + { + try + { + UpdateButtonBox(existingBox, configBox); + Diagnosis.Post($"更新按钮盒: Index={configBox.Index}, IP={configBox.Ip}, Type={configBox.Type}", "ButtonMission", true); + } + catch (Exception ex) + { + Diagnosis.Log($"更新按钮盒失败: {ExceptionFormatter.FormatEx(ex)}", "ButtonMission", true); + } + } + } + else + { + boxesToAdd.Add(configBox); + } + } + } + + foreach (var configBox in boxesToAdd) + { + try + { + var newBox = CreateButtonBoxInstance(configBox); + if (newBox != null) + { + lock (_syncLock) + { + _buttonBoxes.Add(newBox); + } + Diagnosis.Post($"添加按钮盒: Index={configBox.Index}, IP={configBox.Ip}, Type={configBox.Type}", "ButtonMission", true); + } + else + { + Diagnosis.Log($"无法创建按钮盒实例: Index={configBox.Index}, Type={configBox.Type}", "ButtonMission", true); + } + } + catch (Exception ex) + { + Diagnosis.Log($"添加按钮盒失败: {ExceptionFormatter.FormatEx(ex)}", "ButtonMission", true); + } + } + } + + /// + /// 判断是否需要更新按钮盒 + /// + private bool ShouldUpdateButtonBox(BasicButtonBox existingBox, ButtonBoxModel configBox) + { + // 检查基本属性是否变更 + if (existingBox.Ip != configBox.Ip + || existingBox.Port != configBox.Port + || existingBox.GetType().Name != configBox.Type) + { + return true; + } + + // 检查按钮信息是否变更 + return HasButtonConfigsChanged(existingBox, configBox); + } + + /// + /// 检查按钮配置信息是否变更 + /// + private bool HasButtonConfigsChanged(BasicButtonBox existingBox, ButtonBoxModel configBox) + { + var configButtons = configBox.Buttons ?? new List(); + var configDict = configButtons.ToDictionary(b => b.Index); + var existingDict = existingBox.ButtonConfigs; + + // 检查按钮数量是否变化 + if (existingDict.Count != configDict.Count) + { + return true; + } + + // 检查每个按钮的配置是否变化 + foreach (var configButton in configButtons) + { + if (!existingDict.TryGetValue(configButton.Index, out var existingButton)) + { + // 新增了按钮 + return true; + } + + // 检查按钮配置是否变化 + if (existingButton.TriggerMission != configButton.TriggerMission + || existingButton.TriggerMethod != configButton.TriggerMethod + || existingButton.TriggerMethodParams != configButton.TriggerMethodParams + || existingButton.TriggerState != configButton.TriggerState + || existingButton.TriggerDelay != configButton.TriggerDelay) + { + return true; + } + } + + // 检查是否有按钮被删除 + foreach (var existingKey in existingDict.Keys) + { + if (!configDict.ContainsKey(existingKey)) + { + return true; + } + } + + return false; + } + + /// + /// 更新按钮盒属性 + /// + private void UpdateButtonBox(BasicButtonBox buttonBox, ButtonBoxModel configBox) + { + // 如果类型改变,需要重新创建实例 + if (buttonBox.GetType().Name != configBox.Type) + { + // 断开旧连接 + buttonBox.Disconnect(); + + // 从列表中移除 + _buttonBoxes.Remove(buttonBox); + + // 创建新实例 + var newBox = CreateButtonBoxInstance(configBox); + if (newBox != null) + { + _buttonBoxes.Add(newBox); + } + } + else + { + // 只更新属性 + bool needReconnect = buttonBox.Ip != configBox.Ip || buttonBox.Port != configBox.Port; + buttonBox.Ip = configBox.Ip; + buttonBox.Port = configBox.Port; + + // 更新按钮配置信息 + buttonBox.UpdateButtonConfigs(configBox.Buttons); + + // 初始化按钮状态(基于配置中的按钮索引) + var buttonIndices = configBox.Buttons?.Select(b => b.Index).ToList() ?? new List(); + buttonBox.InitializeButtons(buttonIndices); + + // 如果IP或端口改变,需要重新连接 + if (needReconnect) + { + buttonBox.Disconnect(); + buttonBox.Connect(); + } + } + } + + /// + /// 通过类型字符串创建按钮盒实例 + /// + private BasicButtonBox CreateButtonBoxInstance(ButtonBoxModel configBox) + { + if (string.IsNullOrWhiteSpace(configBox.Type)) + { + return null; + } + + try + { + // 获取当前命名空间下所有继承自BasicButtonBox的类 + // 跨程序集发现:按钮盒具体类型可能位于卫星插件 dll(StandardScene.Devices.ButtonBox), + // 用内核同款全域类型发现替代仅扫当前程序集的 GetExecutingAssembly。 + var buttonBoxType = SimpleLite.Utils.UiTypeDiscovery.AllTypes() + .FirstOrDefault(t => t.IsClass + && !t.IsAbstract + && t.Namespace == typeof(BasicButtonBox).Namespace + && t.IsSubclassOf(typeof(BasicButtonBox)) + && t.Name == configBox.Type); + + if (buttonBoxType == null) + { + Diagnosis.Log($"未找到按钮盒类型: {configBox.Type}", "ButtonMission", true); + return null; + } + + // 使用反射创建实例 + var instance = (BasicButtonBox)Activator.CreateInstance(buttonBoxType); + + // 设置属性 + instance.Index = configBox.Index; + instance.Ip = configBox.Ip; + instance.Port = configBox.Port; + + // 初始化按钮配置信息 + instance.InitializeButtonConfigs(configBox.Buttons); + + // 初始化按钮状态(基于配置中的按钮索引) + var buttonIndices = configBox.Buttons?.Select(b => b.Index).ToList() ?? new List(); + instance.InitializeButtons(buttonIndices); + + // 自动连接 + instance.Connect(); + + return instance; + } + catch (Exception ex) + { + Diagnosis.Log($"创建按钮盒实例失败: Type={configBox.Type}, Error={ExceptionFormatter.FormatEx(ex)}", "ButtonMission", true); + return null; + } + } + + /// + /// 获取当前所有按钮盒实例(只读) + /// + public IReadOnlyList GetButtonBoxes() + { + lock (_syncLock) + { + return _buttonBoxes.ToList().AsReadOnly(); + } + } + + /// + /// 执行按钮动作(在独立线程中异步执行,避免阻塞按钮监控循环) + /// + private void ExecuteButtonAction(ButtonModel buttonConfig, BasicButtonBox buttonBox) + { + + + Task.Run(() => ExecuteButtonActionInternal(buttonConfig, buttonBox)); + } + + /// + /// 实际执行业务方法的内部逻辑,包含成功/失败反馈。 + /// + private void ExecuteButtonActionInternal(ButtonModel buttonConfig, BasicButtonBox buttonBox) + { + var success = false; + try + { + // 按钮动作执行后清零对应按钮寄存器(具体盒型按需重写,默认空实现) + buttonBox.ClearButtonRegister(buttonConfig.Index); + + if (string.IsNullOrWhiteSpace(buttonConfig.TriggerMission) || + string.IsNullOrWhiteSpace(buttonConfig.TriggerMethod)) + { + // 配置不完整,直接反馈失败 + Diagnosis.Log("按钮配置缺少 TriggerMission 或 TriggerMethod,无法执行动作", "ButtonMission", true); + return; + } + + var mission = SimpleProject.proj?.Missions? + .FirstOrDefault(m => m.GetType().Name == buttonConfig.TriggerMission || m.name == buttonConfig.TriggerMission); + + if (mission == null) + { + Diagnosis.Log($"未找到触发任务: {buttonConfig.TriggerMission}", "ButtonMission", true); + return; + } + + var method = mission.GetType().GetMethod(buttonConfig.TriggerMethod, + BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); + + if (method == null) + { + Diagnosis.Log($"任务 {buttonConfig.TriggerMission} 中未找到方法 {buttonConfig.TriggerMethod}", "ButtonMission", true); + return; + } + + var parameters = ParseMethodParameters(buttonConfig.TriggerMethodParams, method); + + if (method.IsStatic) + { + var result = method.Invoke(null, parameters); + success = HandleMethodResult(result); + } + else + { + var result = method.Invoke(mission, parameters); + success = HandleMethodResult(result); + } + } + catch (Exception ex) + { + Diagnosis.Log($"执行按钮动作失败: {ExceptionFormatter.FormatEx(ex)}", "ButtonMission", true); + } + finally + { + // 业务方法执行完成后,回调按钮盒进行反馈(如灯光、蜂鸣等) + try + { + buttonBox.OnActionExecuted(buttonConfig, success); + } + catch (Exception feedbackEx) + { + Diagnosis.Log($"按钮盒执行反馈失败: {ExceptionFormatter.FormatEx(feedbackEx)}", "ButtonMission", true); + } + } + } + + /// + /// 处理反射调用结果:支持 Task/Task<bool> 等异步返回类型。 + /// 返回 true 表示执行成功。 + /// + private bool HandleMethodResult(object result) + { + try + { + switch (result) + { + case null: + return true; + case Task tb: + return tb.GetAwaiter().GetResult(); + case Task t: + t.GetAwaiter().GetResult(); + return true; + case bool b: + return b; + default: + return true; + } + } + catch (Exception ex) + { + Diagnosis.Log($"按钮动作方法异步执行失败: {ExceptionFormatter.FormatEx(ex)}", "ButtonMission", true); + return false; + } + } + + /// + /// 解析方法参数 + /// + private object[] ParseMethodParameters(string paramsStr, MethodInfo methodInfo) + { + var paramInfos = methodInfo.GetParameters(); + + if (paramInfos.Length == 0) + { + return Array.Empty(); + } + + if (string.IsNullOrWhiteSpace(paramsStr)) + { + return paramInfos.Select(p => p.HasDefaultValue ? p.DefaultValue : GetDefaultValue(p.ParameterType)).ToArray(); + } + + try + { + var paramStrings = paramsStr.Split(','); + var parameters = new List(); + + for (int i = 0; i < paramInfos.Length; i++) + { + var paramInfo = paramInfos[i]; + var paramType = paramInfo.ParameterType; + + if (i < paramStrings.Length) + { + var trimmed = paramStrings[i].Trim(); + parameters.Add(ConvertParameter(trimmed, paramType)); + } + else + { + parameters.Add(paramInfo.HasDefaultValue ? paramInfo.DefaultValue : GetDefaultValue(paramType)); + } + } + + return parameters.ToArray(); + } + catch (Exception ex) + { + Diagnosis.Log($"解析按钮参数失败: {ExceptionFormatter.FormatEx(ex)}", "ButtonMission", true); + return paramInfos.Select(p => p.HasDefaultValue ? p.DefaultValue : GetDefaultValue(p.ParameterType)).ToArray(); + } + } + + /// + /// 转换参数 + /// + private object ConvertParameter(string value, Type targetType) + { + if (targetType == typeof(string)) + { + return value; + } + if (targetType == typeof(int) || targetType == typeof(int?)) + { + return int.TryParse(value, out int result) ? result : (targetType == typeof(int?) ? (int?)null : 0); + } + if (targetType == typeof(double) || targetType == typeof(double?)) + { + return double.TryParse(value, out double result) ? result : (targetType == typeof(double?) ? (double?)null : 0d); + } + if (targetType == typeof(float) || targetType == typeof(float?)) + { + return float.TryParse(value, out float result) ? result : (targetType == typeof(float?) ? (float?)null : 0f); + } + if (targetType == typeof(bool) || targetType == typeof(bool?)) + { + return bool.TryParse(value, out bool result) ? result : (targetType == typeof(bool?) ? (bool?)null : false); + } + if (targetType.IsEnum) + { + try + { + return Enum.Parse(targetType, value, true); + } + catch + { + return Enum.GetValues(targetType).GetValue(0); + } + } + + return value; + } + + /// + /// 获取类型默认值 + /// + private object GetDefaultValue(Type type) + { + if (type.IsValueType) + { + return Activator.CreateInstance(type); + } + + return null; + } + + /// + /// 打开按钮盒管理界面 + /// + [MethodMember(Name = "打开管理界面")] + [I18N.DocumentTranslation(Name = "Open Manager", locale = "en")] + public static void OpenViewer() + { + try + { + var manager = ButtonBoxManager.Instance; + + // 确保窗体没有被销毁 + if (manager.IsDisposed) + { + // 如果窗体被销毁,单例会自动重新创建 + manager = ButtonBoxManager.Instance; + } + + if (manager.Visible) + { + // 如果界面已经可见,将其激活并置于最前 + if (manager.WindowState == FormWindowState.Minimized) + { + manager.WindowState = FormWindowState.Normal; + } + manager.Activate(); + manager.BringToFront(); + } + else + { + // 如果界面不可见,显示它 + manager.Show(); + manager.Activate(); + } + } + catch (Exception ex) + { + MessageBox.Show($"打开按钮盒管理界面失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/StandardScene.Core/ExtendDevice/Door/BasicDoorController.cs b/StandardScene.Core/ExtendDevice/Door/BasicDoorController.cs new file mode 100644 index 0000000..f6ff150 --- /dev/null +++ b/StandardScene.Core/ExtendDevice/Door/BasicDoorController.cs @@ -0,0 +1,278 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using SimpleCore.Library; + +namespace StandardScene.ExtendDevice.Door +{ + /// + /// 门状态枚举 + /// + public enum DoorState + { + /// + /// 关闭 + /// + Closed = 0, + + /// + /// 打开 + /// + Open = 1, + + /// + /// 未知状态 + /// + Unknown = 2 + } + + /// + /// 门控制器状态枚举 + /// + public enum DoorControllerState + { + /// + /// 离线 + /// + Offline = 0, + + /// + /// 在线 + /// + Online = 1, + + /// + /// 连接中 + /// + Connecting = 2, + + /// + /// 错误 + /// + Error = 3 + } + + /// + /// 基础门控制器类 + /// + public abstract class BasicDoorController + { + /// + /// 控制器索引 + /// + public int Index { get; set; } + + /// + /// IP地址 + /// + public string Ip { get; set; } = string.Empty; + + /// + /// 端口 + /// + public int Port { get; set; } = 502; + + /// + /// 控制器状态 + /// + public DoorControllerState State { get; protected set; } = DoorControllerState.Offline; + + /// + /// 是否在线 + /// + public bool IsOnline => State == DoorControllerState.Online; + + /// + /// 门状态字典,键为门索引 + /// + public Dictionary DoorStates { get; protected set; } = new Dictionary(); + + /// + /// 门目标控制字典,键为门索引,值为期望的开关状态(true=打开,false=关闭) + /// 仅作为指令缓存,实际通信由具体门控制器内部线程完成 + /// + public Dictionary DoorControlTargets { get; protected set; } = new Dictionary(); + + /// + /// 门配置信息字典,键为门索引 + /// + public Dictionary DoorConfigs { get; protected set; } = new Dictionary(); + + /// + /// 最后更新时间 + /// + public DateTime LastUpdateTime { get; protected set; } = DateTime.Now; + + /// + /// 错误信息 + /// + public string ErrorMessage { get; protected set; } = string.Empty; + + /// + /// 更新控制器状态 + /// + public virtual void UpdateState(DoorControllerState newState, string errorMessage = "") + { + State = newState; + ErrorMessage = errorMessage; + LastUpdateTime = DateTime.Now; + } + + /// + /// 更新门状态 + /// + /// 门索引 + /// 门状态 + public virtual void UpdateDoorState(int doorIndex, DoorState state) + { + if (!DoorStates.ContainsKey(doorIndex)) + { + Diagnosis.Post($"门控制器{Index}不存在门{doorIndex}"); + } + DoorStates[doorIndex] = state; + LastUpdateTime = DateTime.Now; + } + + /// + /// 获取门状态 + /// + /// 门索引 + /// 门状态,如果不存在则返回Unknown + public virtual DoorState GetDoorState(int doorIndex) + { + return DoorStates.TryGetValue(doorIndex, out var state) ? state : DoorState.Unknown; + } + + /// + /// 初始化门状态 + /// + /// 门索引列表 + public virtual void InitializeDoors(List doorIndices) + { + DoorStates.Clear(); + DoorControlTargets.Clear(); + foreach (var index in doorIndices) + { + DoorStates[index] = DoorState.Closed; + DoorControlTargets[index] = false; + } + } + + /// + /// 初始化门配置信息 + /// + /// 门配置列表 + public virtual void InitializeDoorConfigs(List doorConfigs) + { + DoorConfigs.Clear(); + if (doorConfigs != null) + { + foreach (var config in doorConfigs) + { + DoorConfigs[config.Index] = new DoorModel + { + Index = config.Index, + ControlAddress = config.ControlAddress, + OpenStatusAddress = config.OpenStatusAddress, + NoControl = config.NoControl + }; + } + } + } + + /// + /// 更新门配置信息 + /// + /// 门配置列表 + public virtual void UpdateDoorConfigs(List doorConfigs) + { + if (doorConfigs == null) + { + DoorConfigs.Clear(); + return; + } + + // 创建配置字典 + var configDict = doorConfigs.ToDictionary(d => d.Index); + + // 删除配置中不存在的门 + var toRemove = DoorConfigs.Keys.Where(k => !configDict.ContainsKey(k)).ToList(); + foreach (var key in toRemove) + { + DoorConfigs.Remove(key); + } + + // 添加或更新门配置 + foreach (var config in doorConfigs) + { + DoorConfigs[config.Index] = new DoorModel + { + Index = config.Index, + ControlAddress = config.ControlAddress, + OpenStatusAddress = config.OpenStatusAddress, + NoControl = config.NoControl + }; + } + } + + /// + /// 获取门配置信息 + /// + /// 门索引 + /// 门配置信息,如果不存在则返回null + public virtual DoorModel GetDoorConfig(int doorIndex) + { + return DoorConfigs.TryGetValue(doorIndex, out var config) ? config : null; + } + + /// + /// 设置门的目标控制状态(仅修改内存字段,不直接进行通信) + /// 实际的通信写入由具体门控制器在内部线程中根据该目标状态执行 + /// + /// 门索引 + /// true=打开,false=关闭 + public virtual void SetDoorControlTarget(int doorIndex, bool open) + { + // 统一支持 NoControl:当门被配置为不允许发送任何控制指令时, + // 强制将目标置为 false,并避免为其它控制器留下“需要开门”的目标。 + if (DoorConfigs.TryGetValue(doorIndex, out var cfg) && cfg != null && cfg.NoControl) + { + DoorControlTargets[doorIndex] = false; + LastUpdateTime = DateTime.Now; + return; + } + DoorControlTargets[doorIndex] = open; + LastUpdateTime = DateTime.Now; + } + + /// + /// 连接门控制器 + /// + public virtual void Connect() + { + UpdateState(DoorControllerState.Connecting); + } + + /// + /// 断开连接 + /// + public virtual void Disconnect() + { + UpdateState(DoorControllerState.Offline); + } + + /// + /// 读取门状态(开到位信号) + /// + /// 门索引 + /// 门状态 + public abstract bool ReadDoorState(int doorIndex); + + /// + /// 写入门控制信号(开关控制) + /// + /// 门索引 + /// true=打开,false=关闭 + public abstract void WriteDoorControl(int doorIndex, bool open); + } +} diff --git a/StandardScene.Core/ExtendDevice/Door/DoorManager.Designer.cs b/StandardScene.Core/ExtendDevice/Door/DoorManager.Designer.cs new file mode 100644 index 0000000..94f48c0 --- /dev/null +++ b/StandardScene.Core/ExtendDevice/Door/DoorManager.Designer.cs @@ -0,0 +1,521 @@ +namespace StandardScene.ExtendDevice.Door +{ + partial class DoorManager + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.doorControllerListView = new System.Windows.Forms.ListView(); + this.columnHeaderControllerIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderIp = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderPort = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.groupBoxController = new System.Windows.Forms.GroupBox(); + this.btnSaveController = new System.Windows.Forms.Button(); + this.btnDeleteController = new System.Windows.Forms.Button(); + this.btnAddController = new System.Windows.Forms.Button(); + this.labelType = new System.Windows.Forms.Label(); + this.comboBoxType = new System.Windows.Forms.ComboBox(); + this.labelControllerIndex = new System.Windows.Forms.Label(); + this.textBoxControllerIndex = new System.Windows.Forms.TextBox(); + this.labelPort = new System.Windows.Forms.Label(); + this.textBoxPort = new System.Windows.Forms.TextBox(); + this.labelIp = new System.Windows.Forms.Label(); + this.textBoxIp = new System.Windows.Forms.TextBox(); + this.doorListView = new System.Windows.Forms.ListView(); + this.columnHeaderDoorIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderControlAddress = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderOpenStatusAddress = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.groupBoxDoor = new System.Windows.Forms.GroupBox(); + this.btnSaveDoor = new System.Windows.Forms.Button(); + this.btnDeleteDoor = new System.Windows.Forms.Button(); + this.btnAddDoor = new System.Windows.Forms.Button(); + this.labelOpenStatusAddress = new System.Windows.Forms.Label(); + this.textBoxOpenStatusAddress = new System.Windows.Forms.TextBox(); + this.labelControlAddress = new System.Windows.Forms.Label(); + this.textBoxControlAddress = new System.Windows.Forms.TextBox(); + this.labelDoorIndex = new System.Windows.Forms.Label(); + this.textBoxDoorIndex = new System.Windows.Forms.TextBox(); + this.labelTitle = new System.Windows.Forms.Label(); + this.groupBoxController.SuspendLayout(); + this.groupBoxDoor.SuspendLayout(); + this.SuspendLayout(); + // + // doorControllerListView + // + this.doorControllerListView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.doorControllerListView.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.doorControllerListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderControllerIndex, + this.columnHeaderIp, + this.columnHeaderPort, + this.columnHeaderType}); + this.doorControllerListView.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.doorControllerListView.FullRowSelect = true; + this.doorControllerListView.GridLines = true; + this.doorControllerListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.doorControllerListView.HideSelection = false; + this.doorControllerListView.Location = new System.Drawing.Point(15, 55); + this.doorControllerListView.MultiSelect = false; + this.doorControllerListView.Name = "doorControllerListView"; + this.doorControllerListView.OwnerDraw = true; + this.doorControllerListView.Size = new System.Drawing.Size(450, 290); + this.doorControllerListView.TabIndex = 0; + this.doorControllerListView.UseCompatibleStateImageBehavior = false; + this.doorControllerListView.View = System.Windows.Forms.View.Details; + this.doorControllerListView.SelectedIndexChanged += new System.EventHandler(this.doorControllerListView_SelectedIndexChanged); + // + // columnHeaderControllerIndex + // + this.columnHeaderControllerIndex.Text = "编码"; + this.columnHeaderControllerIndex.Width = 70; + // + // columnHeaderIp + // + this.columnHeaderIp.Text = "IP地址"; + this.columnHeaderIp.Width = 130; + // + // columnHeaderPort + // + this.columnHeaderPort.Text = "端口"; + this.columnHeaderPort.Width = 90; + // + // columnHeaderType + // + this.columnHeaderType.Text = "类型"; + this.columnHeaderType.Width = 140; + // + // groupBoxController + // + this.groupBoxController.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.groupBoxController.Controls.Add(this.btnSaveController); + this.groupBoxController.Controls.Add(this.btnDeleteController); + this.groupBoxController.Controls.Add(this.btnAddController); + this.groupBoxController.Controls.Add(this.labelType); + this.groupBoxController.Controls.Add(this.comboBoxType); + this.groupBoxController.Controls.Add(this.labelControllerIndex); + this.groupBoxController.Controls.Add(this.textBoxControllerIndex); + this.groupBoxController.Controls.Add(this.labelPort); + this.groupBoxController.Controls.Add(this.textBoxPort); + this.groupBoxController.Controls.Add(this.labelIp); + this.groupBoxController.Controls.Add(this.textBoxIp); + this.groupBoxController.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBoxController.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(68)))), ((int)(((byte)(68)))), ((int)(((byte)(68))))); + this.groupBoxController.Location = new System.Drawing.Point(15, 360); + this.groupBoxController.Name = "groupBoxController"; + this.groupBoxController.Padding = new System.Windows.Forms.Padding(12, 10, 12, 12); + this.groupBoxController.Size = new System.Drawing.Size(450, 250); + this.groupBoxController.TabIndex = 1; + this.groupBoxController.TabStop = false; + this.groupBoxController.Text = "门控制器信息"; + // + // btnSaveController + // + this.btnSaveController.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(122)))), ((int)(((byte)(204))))); + this.btnSaveController.FlatAppearance.BorderSize = 0; + this.btnSaveController.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(92)))), ((int)(((byte)(153))))); + this.btnSaveController.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(102)))), ((int)(((byte)(170))))); + this.btnSaveController.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSaveController.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSaveController.ForeColor = System.Drawing.Color.White; + this.btnSaveController.Location = new System.Drawing.Point(330, 200); + this.btnSaveController.Name = "btnSaveController"; + this.btnSaveController.Size = new System.Drawing.Size(100, 38); + this.btnSaveController.TabIndex = 10; + this.btnSaveController.Text = "保存"; + this.btnSaveController.UseVisualStyleBackColor = false; + this.btnSaveController.Click += new System.EventHandler(this.btnSaveController_Click); + // + // btnDeleteController + // + this.btnDeleteController.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(53)))), ((int)(((byte)(69))))); + this.btnDeleteController.FlatAppearance.BorderSize = 0; + this.btnDeleteController.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(165)))), ((int)(((byte)(40)))), ((int)(((byte)(52))))); + this.btnDeleteController.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(187)))), ((int)(((byte)(45)))), ((int)(((byte)(59))))); + this.btnDeleteController.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDeleteController.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDeleteController.ForeColor = System.Drawing.Color.White; + this.btnDeleteController.Location = new System.Drawing.Point(220, 200); + this.btnDeleteController.Name = "btnDeleteController"; + this.btnDeleteController.Size = new System.Drawing.Size(100, 38); + this.btnDeleteController.TabIndex = 9; + this.btnDeleteController.Text = "删除"; + this.btnDeleteController.UseVisualStyleBackColor = false; + this.btnDeleteController.Click += new System.EventHandler(this.btnDeleteController_Click); + // + // btnAddController + // + this.btnAddController.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(167)))), ((int)(((byte)(69))))); + this.btnAddController.FlatAppearance.BorderSize = 0; + this.btnAddController.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(125)))), ((int)(((byte)(52))))); + this.btnAddController.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(136)))), ((int)(((byte)(56))))); + this.btnAddController.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnAddController.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAddController.ForeColor = System.Drawing.Color.White; + this.btnAddController.Location = new System.Drawing.Point(110, 200); + this.btnAddController.Name = "btnAddController"; + this.btnAddController.Size = new System.Drawing.Size(100, 38); + this.btnAddController.TabIndex = 8; + this.btnAddController.Text = "添加"; + this.btnAddController.UseVisualStyleBackColor = false; + this.btnAddController.Click += new System.EventHandler(this.btnAddController_Click); + // + // labelType + // + this.labelType.AutoSize = true; + this.labelType.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelType.Location = new System.Drawing.Point(28, 168); + this.labelType.Name = "labelType"; + this.labelType.Size = new System.Drawing.Size(65, 24); + this.labelType.TabIndex = 7; + this.labelType.Text = "类型:"; + // + // comboBoxType + // + this.comboBoxType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxType.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.comboBoxType.FormattingEnabled = true; + this.comboBoxType.Location = new System.Drawing.Point(110, 165); + this.comboBoxType.Name = "comboBoxType"; + this.comboBoxType.Size = new System.Drawing.Size(320, 32); + this.comboBoxType.TabIndex = 6; + // + // labelControllerIndex + // + this.labelControllerIndex.AutoSize = true; + this.labelControllerIndex.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelControllerIndex.Location = new System.Drawing.Point(28, 48); + this.labelControllerIndex.Name = "labelControllerIndex"; + this.labelControllerIndex.Size = new System.Drawing.Size(65, 24); + this.labelControllerIndex.TabIndex = 1; + this.labelControllerIndex.Text = "编码:"; + // + // textBoxControllerIndex + // + this.textBoxControllerIndex.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxControllerIndex.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxControllerIndex.Location = new System.Drawing.Point(110, 45); + this.textBoxControllerIndex.Name = "textBoxControllerIndex"; + this.textBoxControllerIndex.Size = new System.Drawing.Size(320, 30); + this.textBoxControllerIndex.TabIndex = 0; + // + // labelIp + // + this.labelIp.AutoSize = true; + this.labelIp.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelIp.Location = new System.Drawing.Point(18, 88); + this.labelIp.Name = "labelIp"; + this.labelIp.Size = new System.Drawing.Size(85, 24); + this.labelIp.TabIndex = 3; + this.labelIp.Text = "IP地址:"; + // + // textBoxIp + // + this.textBoxIp.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxIp.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxIp.Location = new System.Drawing.Point(110, 85); + this.textBoxIp.Name = "textBoxIp"; + this.textBoxIp.Size = new System.Drawing.Size(320, 30); + this.textBoxIp.TabIndex = 2; + this.textBoxIp.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + // + // labelPort + // + this.labelPort.AutoSize = true; + this.labelPort.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelPort.Location = new System.Drawing.Point(28, 128); + this.labelPort.Name = "labelPort"; + this.labelPort.Size = new System.Drawing.Size(65, 24); + this.labelPort.TabIndex = 5; + this.labelPort.Text = "端口:"; + // + // textBoxPort + // + this.textBoxPort.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxPort.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxPort.Location = new System.Drawing.Point(110, 125); + this.textBoxPort.Name = "textBoxPort"; + this.textBoxPort.Size = new System.Drawing.Size(320, 30); + this.textBoxPort.TabIndex = 4; + // + // doorListView + // + this.doorListView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.doorListView.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.doorListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderDoorIndex, + this.columnHeaderControlAddress, + this.columnHeaderOpenStatusAddress}); + this.doorListView.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.doorListView.FullRowSelect = true; + this.doorListView.GridLines = true; + this.doorListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.doorListView.HideSelection = false; + this.doorListView.Location = new System.Drawing.Point(483, 55); + this.doorListView.MultiSelect = false; + this.doorListView.Name = "doorListView"; + this.doorListView.OwnerDraw = true; + this.doorListView.Size = new System.Drawing.Size(500, 290); + this.doorListView.TabIndex = 2; + this.doorListView.UseCompatibleStateImageBehavior = false; + this.doorListView.View = System.Windows.Forms.View.Details; + this.doorListView.SelectedIndexChanged += new System.EventHandler(this.doorListView_SelectedIndexChanged); + // + // columnHeaderDoorIndex + // + this.columnHeaderDoorIndex.Text = "编码"; + this.columnHeaderDoorIndex.Width = 100; + // + // columnHeaderControlAddress + // + this.columnHeaderControlAddress.Text = "控制地址"; + this.columnHeaderControlAddress.Width = 180; + // + // columnHeaderOpenStatusAddress + // + this.columnHeaderOpenStatusAddress.Text = "开到位地址"; + this.columnHeaderOpenStatusAddress.Width = 180; + // + // groupBoxDoor + // + this.groupBoxDoor.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.checkBoxNoControl = new System.Windows.Forms.CheckBox(); + this.groupBoxDoor.Controls.Add(this.checkBoxNoControl); + this.groupBoxDoor.Controls.Add(this.btnSaveDoor); + this.groupBoxDoor.Controls.Add(this.btnDeleteDoor); + this.groupBoxDoor.Controls.Add(this.btnAddDoor); + this.groupBoxDoor.Controls.Add(this.labelOpenStatusAddress); + this.groupBoxDoor.Controls.Add(this.textBoxOpenStatusAddress); + this.groupBoxDoor.Controls.Add(this.labelControlAddress); + this.groupBoxDoor.Controls.Add(this.textBoxControlAddress); + this.groupBoxDoor.Controls.Add(this.labelDoorIndex); + this.groupBoxDoor.Controls.Add(this.textBoxDoorIndex); + this.groupBoxDoor.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBoxDoor.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(68)))), ((int)(((byte)(68)))), ((int)(((byte)(68))))); + this.groupBoxDoor.Location = new System.Drawing.Point(483, 360); + this.groupBoxDoor.Name = "groupBoxDoor"; + this.groupBoxDoor.Padding = new System.Windows.Forms.Padding(12, 10, 12, 12); + this.groupBoxDoor.Size = new System.Drawing.Size(500, 250); + this.groupBoxDoor.TabIndex = 3; + this.groupBoxDoor.TabStop = false; + this.groupBoxDoor.Text = "门信息"; + // + // btnSaveDoor + // + this.btnSaveDoor.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(122)))), ((int)(((byte)(204))))); + this.btnSaveDoor.FlatAppearance.BorderSize = 0; + this.btnSaveDoor.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(92)))), ((int)(((byte)(153))))); + this.btnSaveDoor.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(102)))), ((int)(((byte)(170))))); + this.btnSaveDoor.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSaveDoor.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSaveDoor.ForeColor = System.Drawing.Color.White; + this.btnSaveDoor.Location = new System.Drawing.Point(380, 200); + this.btnSaveDoor.Name = "btnSaveDoor"; + this.btnSaveDoor.Size = new System.Drawing.Size(100, 38); + this.btnSaveDoor.TabIndex = 7; + this.btnSaveDoor.Text = "保存"; + this.btnSaveDoor.UseVisualStyleBackColor = false; + this.btnSaveDoor.Click += new System.EventHandler(this.btnSaveDoor_Click); + // + // btnDeleteDoor + // + this.btnDeleteDoor.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(53)))), ((int)(((byte)(69))))); + this.btnDeleteDoor.FlatAppearance.BorderSize = 0; + this.btnDeleteDoor.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(165)))), ((int)(((byte)(40)))), ((int)(((byte)(52))))); + this.btnDeleteDoor.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(187)))), ((int)(((byte)(45)))), ((int)(((byte)(59))))); + this.btnDeleteDoor.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDeleteDoor.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDeleteDoor.ForeColor = System.Drawing.Color.White; + this.btnDeleteDoor.Location = new System.Drawing.Point(270, 200); + this.btnDeleteDoor.Name = "btnDeleteDoor"; + this.btnDeleteDoor.Size = new System.Drawing.Size(100, 38); + this.btnDeleteDoor.TabIndex = 6; + this.btnDeleteDoor.Text = "删除"; + this.btnDeleteDoor.UseVisualStyleBackColor = false; + this.btnDeleteDoor.Click += new System.EventHandler(this.btnDeleteDoor_Click); + // + // btnAddDoor + // + this.btnAddDoor.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(167)))), ((int)(((byte)(69))))); + this.btnAddDoor.FlatAppearance.BorderSize = 0; + this.btnAddDoor.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(125)))), ((int)(((byte)(52))))); + this.btnAddDoor.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(136)))), ((int)(((byte)(56))))); + this.btnAddDoor.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnAddDoor.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAddDoor.ForeColor = System.Drawing.Color.White; + this.btnAddDoor.Location = new System.Drawing.Point(160, 200); + this.btnAddDoor.Name = "btnAddDoor"; + this.btnAddDoor.Size = new System.Drawing.Size(100, 38); + this.btnAddDoor.TabIndex = 5; + this.btnAddDoor.Text = "添加"; + this.btnAddDoor.UseVisualStyleBackColor = false; + this.btnAddDoor.Click += new System.EventHandler(this.btnAddDoor_Click); + // + // labelOpenStatusAddress + // + this.labelOpenStatusAddress.AutoSize = true; + this.labelOpenStatusAddress.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelOpenStatusAddress.Location = new System.Drawing.Point(18, 128); + this.labelOpenStatusAddress.Name = "labelOpenStatusAddress"; + this.labelOpenStatusAddress.Size = new System.Drawing.Size(103, 24); + this.labelOpenStatusAddress.TabIndex = 4; + this.labelOpenStatusAddress.Text = "开到位地址:"; + // + // textBoxOpenStatusAddress + // + this.textBoxOpenStatusAddress.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxOpenStatusAddress.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxOpenStatusAddress.Location = new System.Drawing.Point(150, 125); + this.textBoxOpenStatusAddress.Name = "textBoxOpenStatusAddress"; + this.textBoxOpenStatusAddress.Size = new System.Drawing.Size(330, 30); + this.textBoxOpenStatusAddress.TabIndex = 3; + // + // checkBoxNoControl + // + this.checkBoxNoControl.AutoSize = true; + this.checkBoxNoControl.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.checkBoxNoControl.Location = new System.Drawing.Point(150, 165); + this.checkBoxNoControl.Name = "checkBoxNoControl"; + this.checkBoxNoControl.Size = new System.Drawing.Size(162, 28); + this.checkBoxNoControl.TabIndex = 4; + this.checkBoxNoControl.Text = "禁止门控发送指令"; + this.checkBoxNoControl.UseVisualStyleBackColor = true; + // + // labelControlAddress + // + this.labelControlAddress.AutoSize = true; + this.labelControlAddress.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelControlAddress.Location = new System.Drawing.Point(18, 88); + this.labelControlAddress.Name = "labelControlAddress"; + this.labelControlAddress.Size = new System.Drawing.Size(103, 24); + this.labelControlAddress.TabIndex = 2; + this.labelControlAddress.Text = "控制地址:"; + // + // textBoxControlAddress + // + this.textBoxControlAddress.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxControlAddress.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxControlAddress.Location = new System.Drawing.Point(150, 85); + this.textBoxControlAddress.Name = "textBoxControlAddress"; + this.textBoxControlAddress.Size = new System.Drawing.Size(330, 30); + this.textBoxControlAddress.TabIndex = 1; + // + // labelDoorIndex + // + this.labelDoorIndex.AutoSize = true; + this.labelDoorIndex.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelDoorIndex.Location = new System.Drawing.Point(28, 48); + this.labelDoorIndex.Name = "labelDoorIndex"; + this.labelDoorIndex.Size = new System.Drawing.Size(65, 24); + this.labelDoorIndex.TabIndex = 0; + this.labelDoorIndex.Text = "编码:"; + // + // textBoxDoorIndex + // + this.textBoxDoorIndex.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxDoorIndex.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.textBoxDoorIndex.Location = new System.Drawing.Point(150, 45); + this.textBoxDoorIndex.Name = "textBoxDoorIndex"; + this.textBoxDoorIndex.Size = new System.Drawing.Size(330, 30); + this.textBoxDoorIndex.TabIndex = 0; + // + // labelTitle + // + this.labelTitle.AutoSize = true; + this.labelTitle.Font = new System.Drawing.Font("微软雅黑", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.labelTitle.Location = new System.Drawing.Point(15, 12); + this.labelTitle.Name = "labelTitle"; + this.labelTitle.Size = new System.Drawing.Size(150, 42); + this.labelTitle.TabIndex = 4; + this.labelTitle.Text = "门控制器管理"; + // + // DoorManager + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(245)))), ((int)(((byte)(245)))), ((int)(((byte)(247))))); + this.ClientSize = new System.Drawing.Size(1000, 620); + this.Controls.Add(this.labelTitle); + this.Controls.Add(this.groupBoxDoor); + this.Controls.Add(this.doorListView); + this.Controls.Add(this.groupBoxController); + this.Controls.Add(this.doorControllerListView); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.MinimumSize = new System.Drawing.Size(1000, 620); + this.Name = "DoorManager"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "门控制器管理"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DoorManager_FormClosing); + this.Load += new System.EventHandler(this.DoorManager_Load); + this.groupBoxController.ResumeLayout(false); + this.groupBoxController.PerformLayout(); + this.groupBoxDoor.ResumeLayout(false); + this.groupBoxDoor.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView doorControllerListView; + private System.Windows.Forms.ColumnHeader columnHeaderControllerIndex; + private System.Windows.Forms.ColumnHeader columnHeaderIp; + private System.Windows.Forms.ColumnHeader columnHeaderPort; + private System.Windows.Forms.ColumnHeader columnHeaderType; + private System.Windows.Forms.GroupBox groupBoxController; + private System.Windows.Forms.TextBox textBoxIp; + private System.Windows.Forms.Label labelIp; + private System.Windows.Forms.Label labelPort; + private System.Windows.Forms.TextBox textBoxPort; + private System.Windows.Forms.Label labelControllerIndex; + private System.Windows.Forms.TextBox textBoxControllerIndex; + private System.Windows.Forms.Label labelType; + private System.Windows.Forms.ComboBox comboBoxType; + private System.Windows.Forms.Button btnAddController; + private System.Windows.Forms.Button btnDeleteController; + private System.Windows.Forms.Button btnSaveController; + private System.Windows.Forms.ListView doorListView; + private System.Windows.Forms.ColumnHeader columnHeaderDoorIndex; + private System.Windows.Forms.ColumnHeader columnHeaderControlAddress; + private System.Windows.Forms.ColumnHeader columnHeaderOpenStatusAddress; + private System.Windows.Forms.GroupBox groupBoxDoor; + private System.Windows.Forms.Label labelDoorIndex; + private System.Windows.Forms.TextBox textBoxDoorIndex; + private System.Windows.Forms.Label labelControlAddress; + private System.Windows.Forms.TextBox textBoxControlAddress; + private System.Windows.Forms.Label labelOpenStatusAddress; + private System.Windows.Forms.TextBox textBoxOpenStatusAddress; + private System.Windows.Forms.Button btnAddDoor; + private System.Windows.Forms.Button btnDeleteDoor; + private System.Windows.Forms.Button btnSaveDoor; + private System.Windows.Forms.Label labelTitle; + private System.Windows.Forms.CheckBox checkBoxNoControl; + } +} diff --git a/StandardScene.Core/ExtendDevice/Door/DoorManager.cs b/StandardScene.Core/ExtendDevice/Door/DoorManager.cs new file mode 100644 index 0000000..bc939b8 --- /dev/null +++ b/StandardScene.Core/ExtendDevice/Door/DoorManager.cs @@ -0,0 +1,961 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; +using StandardScene.Utils; + +namespace StandardScene.ExtendDevice.Door +{ + public partial class DoorManager : Form + { + private static DoorManager _instance = null; + private static readonly object _lock = new object(); + + private const string DataFileName = "DoorConfig.json"; + private string _dataFilePath; + + private List _doorControllers = new List(); + private DoorControllerModel _currentController = null; + private DoorModel _currentDoor = null; + + private int _controllerHoverIndex = -1; + private int _doorHoverIndex = -1; + + /// + /// 获取单例实例 + /// + public static DoorManager Instance + { + get + { + if (_instance == null || _instance.IsDisposed) + { + lock (_lock) + { + if (_instance == null || _instance.IsDisposed) + { + _instance = new DoorManager(); + } + } + } + return _instance; + } + } + + /// + /// 私有构造函数,确保单例模式 + /// + private DoorManager() + { + InitializeComponent(); + // 设置数据文件路径 + _dataFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DataFileName); + } + + private void DoorManager_Load(object sender, EventArgs e) + { + // 设置ListView的视觉样式 + SetupListViewStyles(); + + // 初始化类型下拉框 + InitializeTypeComboBox(); + + LoadData(); + RefreshControllerList(); + } + + /// + /// 初始化类型下拉框,显示 DoorTypeAttribute.Name + /// + private void InitializeTypeComboBox() + { + comboBoxType.Items.Clear(); + + try + { + // 获取当前命名空间下所有继承自BasicDoorController且带有DoorTypeAttribute特性的类 + // 在插件/宿主环境下 GetExecutingAssembly 可能不是 StandardScene.dll + // 跨程序集发现:门控制器具体类型可能位于卫星插件 dll(StandardScene.Devices.Door)。 + var controllerTypes = SimpleLite.Utils.UiTypeDiscovery.AllTypes() + .Where(t => t.IsClass + && !t.IsAbstract + && t.Namespace == typeof(BasicDoorController).Namespace + && t.IsSubclassOf(typeof(BasicDoorController)) + && t.IsDefined(typeof(DoorTypeAttribute), false)) + .ToList(); + + var typeNames = new List(); + foreach (var type in controllerTypes) + { + var attr = type.GetCustomAttribute(); + if (attr != null && !string.IsNullOrWhiteSpace(attr.Name)) + { + typeNames.Add(attr.Name); + } + } + + // 按名称排序 + typeNames.Sort(); + + foreach (var typeName in typeNames) + { + comboBoxType.Items.Add(typeName); + } + + // 如果没有找到任何类型,添加默认选项 + if (comboBoxType.Items.Count == 0) + { + comboBoxType.Items.Add("ModbusDoorController"); + } + } + catch (Exception ex) + { + MessageBox.Show($"初始化类型下拉框失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + comboBoxType.Items.Add("ModbusDoorController"); + } + } + + /// + /// 设置ListView的视觉样式 + /// + private void SetupListViewStyles() + { + SetupListView(doorControllerListView, + ControllerListView_DrawItem, + ControllerListView_DrawSubItem, + ControllerListView_DrawColumnHeader, + ControllerListView_MouseMove, + ControllerListView_MouseLeave); + + SetupListView(doorListView, + DoorListView_DrawItem, + DoorListView_DrawSubItem, + DoorListView_DrawColumnHeader, + DoorListView_MouseMove, + DoorListView_MouseLeave); + } + + private void SetupListView(ListView listView, + DrawListViewItemEventHandler itemHandler, + DrawListViewSubItemEventHandler subItemHandler, + DrawListViewColumnHeaderEventHandler headerHandler, + MouseEventHandler mouseMoveHandler, + EventHandler mouseLeaveHandler) + { + listView.OwnerDraw = true; + listView.BackColor = Color.White; + listView.DrawItem += itemHandler; + listView.DrawSubItem += subItemHandler; + listView.DrawColumnHeader += headerHandler; + listView.MouseMove += mouseMoveHandler; + listView.MouseLeave += mouseLeaveHandler; + + // 启用双缓冲 + typeof(Control)?.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic)? + .SetValue(listView, true, null); + } + + private static readonly Color RowEvenColor = Color.FromArgb(250, 250, 252); + private static readonly Color RowOddColor = Color.White; + private static readonly Color RowHighlightColor = Color.FromArgb(230, 240, 255); + private static readonly Color TextRegularColor = Color.FromArgb(68, 68, 68); + private static readonly Color TextHighlightColor = Color.FromArgb(51, 51, 51); + + private void ControllerListView_MouseMove(object sender, MouseEventArgs e) + { + UpdateHoverIndex(doorControllerListView, e, true); + } + + private void ControllerListView_MouseLeave(object sender, EventArgs e) + { + ResetHoverIndex(doorControllerListView, true); + } + + private void DoorListView_MouseMove(object sender, MouseEventArgs e) + { + UpdateHoverIndex(doorListView, e, false); + } + + private void DoorListView_MouseLeave(object sender, EventArgs e) + { + ResetHoverIndex(doorListView, false); + } + + private void UpdateHoverIndex(ListView listView, MouseEventArgs e, bool isControllerList) + { + var hoveredItem = listView.GetItemAt(e.X, e.Y); + int newIndex = hoveredItem?.Index ?? -1; + + if (isControllerList) + { + if (_controllerHoverIndex != newIndex) + { + _controllerHoverIndex = newIndex; + listView.Invalidate(); + } + } + else + { + if (_doorHoverIndex != newIndex) + { + _doorHoverIndex = newIndex; + listView.Invalidate(); + } + } + } + + private void ResetHoverIndex(ListView listView, bool isControllerList) + { + if (isControllerList) + { + if (_controllerHoverIndex != -1) + { + _controllerHoverIndex = -1; + listView.Invalidate(); + } + } + else + { + if (_doorHoverIndex != -1) + { + _doorHoverIndex = -1; + listView.Invalidate(); + } + } + } + + private void ControllerListView_DrawItem(object sender, DrawListViewItemEventArgs e) + { + var isHighlighted = e.Item.Selected + || e.ItemIndex == _controllerHoverIndex + || (e.State & ListViewItemStates.Focused) != 0; + + var backColor = isHighlighted + ? RowHighlightColor + : (e.ItemIndex % 2 == 0 ? RowEvenColor : RowOddColor); + + using (var brush = new SolidBrush(backColor)) + { + e.Graphics.FillRectangle(brush, e.Bounds); + } + + var textColor = isHighlighted ? TextHighlightColor : TextRegularColor; + + TextRenderer.DrawText(e.Graphics, e.Item.Text, e.Item.Font, e.Bounds, + textColor, + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.EndEllipsis); + + e.DrawFocusRectangle(); + } + + private void ControllerListView_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) + { + var isHighlighted = e.Item.Selected + || e.ItemIndex == _controllerHoverIndex + || (e.ItemState & ListViewItemStates.Focused) != 0; + + var backColor = isHighlighted + ? RowHighlightColor + : (e.ItemIndex % 2 == 0 ? RowEvenColor : RowOddColor); + + using (var brush = new SolidBrush(backColor)) + { + e.Graphics.FillRectangle(brush, e.Bounds); + } + + var textColor = isHighlighted ? TextHighlightColor : TextRegularColor; + + TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font, e.Bounds, + textColor, + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.EndEllipsis); + } + + private void ControllerListView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) + { + e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(245, 247, 250)), e.Bounds); + + e.Graphics.DrawLine(new Pen(Color.FromArgb(220, 220, 220)), + e.Bounds.Left, e.Bounds.Bottom - 1, e.Bounds.Right, e.Bounds.Bottom - 1); + + TextRenderer.DrawText(e.Graphics, e.Header.Text, + new Font("微软雅黑", 10.5F, FontStyle.Bold), + e.Bounds, Color.FromArgb(68, 68, 68), + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.HorizontalCenter); + } + + private void DoorListView_DrawItem(object sender, DrawListViewItemEventArgs e) + { + var isHighlighted = e.Item.Selected + || e.ItemIndex == _doorHoverIndex + || (e.State & ListViewItemStates.Focused) != 0; + + var backColor = isHighlighted + ? RowHighlightColor + : (e.ItemIndex % 2 == 0 ? RowEvenColor : RowOddColor); + + using (var brush = new SolidBrush(backColor)) + { + e.Graphics.FillRectangle(brush, e.Bounds); + } + + var textColor = isHighlighted ? TextHighlightColor : TextRegularColor; + + TextRenderer.DrawText(e.Graphics, e.Item.Text, e.Item.Font, e.Bounds, + textColor, + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.EndEllipsis); + + e.DrawFocusRectangle(); + } + + private void DoorListView_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) + { + var isHighlighted = e.Item.Selected + || e.ItemIndex == _doorHoverIndex + || (e.ItemState & ListViewItemStates.Focused) != 0; + + var backColor = isHighlighted + ? RowHighlightColor + : (e.ItemIndex % 2 == 0 ? RowEvenColor : RowOddColor); + + using (var brush = new SolidBrush(backColor)) + { + e.Graphics.FillRectangle(brush, e.Bounds); + } + + var textColor = isHighlighted ? TextHighlightColor : TextRegularColor; + + TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font, e.Bounds, + textColor, + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.EndEllipsis); + } + + private void DoorListView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) + { + e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(245, 247, 250)), e.Bounds); + + e.Graphics.DrawLine(new Pen(Color.FromArgb(220, 220, 220)), + e.Bounds.Left, e.Bounds.Bottom - 1, e.Bounds.Right, e.Bounds.Bottom - 1); + + TextRenderer.DrawText(e.Graphics, e.Header.Text, + new Font("微软雅黑", 10.5F, FontStyle.Bold), + e.Bounds, Color.FromArgb(68, 68, 68), + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.HorizontalCenter); + } + + /// + /// 刷新门控制器列表 + /// + private void RefreshControllerList() + { + doorControllerListView.Items.Clear(); + foreach (var controller in _doorControllers) + { + var item = new ListViewItem(controller.Index.ToString()); + item.SubItems.Add(controller.Ip); + item.SubItems.Add(controller.Port.ToString()); + item.SubItems.Add(controller.Type); + item.Tag = controller; + item.UseItemStyleForSubItems = false; + doorControllerListView.Items.Add(item); + } + } + + /// + /// 刷新门列表 + /// + private void RefreshDoorList() + { + doorListView.Items.Clear(); + if (_currentController != null) + { + foreach (var door in _currentController.Doors) + { + var item = new ListViewItem(door.Index.ToString()); + item.SubItems.Add(door.ControlAddress.ToString()); + item.SubItems.Add(door.OpenStatusAddress.ToString()); + item.Tag = door; + item.UseItemStyleForSubItems = false; + doorListView.Items.Add(item); + } + } + } + + /// + /// 门控制器列表选择改变 + /// + private void doorControllerListView_SelectedIndexChanged(object sender, EventArgs e) + { + if (doorControllerListView.SelectedItems.Count > 0) + { + _currentController = doorControllerListView.SelectedItems[0].Tag as DoorControllerModel; + if (_currentController != null) + { + // 填充门控制器编辑区域 + textBoxIp.Text = _currentController.Ip; + textBoxPort.Text = _currentController.Port.ToString(); + textBoxControllerIndex.Text = _currentController.Index.ToString(); + // 设置类型下拉框 + if (comboBoxType.Items.Contains(_currentController.Type)) + { + comboBoxType.SelectedItem = _currentController.Type; + } + else + { + comboBoxType.SelectedIndex = comboBoxType.Items.Count > 0 ? 0 : -1; + } + + // 刷新门列表 + RefreshDoorList(); + } + } + else + { + _currentController = null; + ClearControllerFields(); + doorListView.Items.Clear(); + } + } + + /// + /// 门列表选择改变 + /// + private void doorListView_SelectedIndexChanged(object sender, EventArgs e) + { + if (doorListView.SelectedItems.Count > 0) + { + _currentDoor = doorListView.SelectedItems[0].Tag as DoorModel; + if (_currentDoor != null) + { + // 填充门编辑区域 + textBoxDoorIndex.Text = _currentDoor.Index.ToString(); + textBoxControlAddress.Text = _currentDoor.ControlAddress.ToString(); + textBoxOpenStatusAddress.Text = _currentDoor.OpenStatusAddress.ToString(); + checkBoxNoControl.Checked = _currentDoor.NoControl; + } + } + else + { + _currentDoor = null; + ClearDoorFields(); + } + } + + /// + /// 添加门控制器 + /// + private void btnAddController_Click(object sender, EventArgs e) + { + try + { + string ip = textBoxIp.Text.Trim(); + string portText = textBoxPort.Text.Trim(); + string indexText = textBoxControllerIndex.Text.Trim(); + string type = comboBoxType.SelectedItem?.ToString() ?? string.Empty; + + int newIndex; + if (!string.IsNullOrWhiteSpace(indexText)) + { + if (!int.TryParse(indexText, out newIndex)) + { + MessageBox.Show("编码必须是数字", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + else + { + newIndex = _doorControllers.Count > 0 ? _doorControllers.Max(c => c.Index) + 1 : 1; + } + + string newIp; + if (!string.IsNullOrWhiteSpace(ip)) + { + if (!IsValidIpAddress(ip)) + { + MessageBox.Show("无效的IP地址,例如:192.168.1.100", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + newIp = ip; + } + else + { + newIp = "192.168.1.100"; + } + + int newPort; + if (!string.IsNullOrWhiteSpace(portText)) + { + if (!int.TryParse(portText, out newPort)) + { + MessageBox.Show("端口必须是数字", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + else + { + newPort = 502; + } + + string newType; + if (!string.IsNullOrWhiteSpace(type)) + { + newType = type; + } + else + { + newType = comboBoxType.Items.Count > 0 ? comboBoxType.Items[0].ToString() : "ModbusDoorController"; + } + + // 检查编码是否重复 + if (_doorControllers.Any(c => c.Index == newIndex)) + { + MessageBox.Show($"编码 {newIndex} 已存在,请使用其他编码", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + // 检查IP地址是否重复 + if (_doorControllers.Any(c => c.Ip == newIp)) + { + MessageBox.Show($"IP地址 {newIp} 已存在,请使用其他IP地址", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + var newController = new DoorControllerModel + { + Index = newIndex, + Ip = newIp, + Port = newPort, + Type = newType + }; + + _doorControllers.Add(newController); + RefreshControllerList(); + SaveData(); + + // 选中新添加的门控制器 + foreach (ListViewItem item in doorControllerListView.Items) + { + if (item.Tag == newController) + { + item.Selected = true; + item.EnsureVisible(); + break; + } + } + } + catch (Exception ex) + { + MessageBox.Show($"添加门控制器失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 删除门控制器 + /// + private void btnDeleteController_Click(object sender, EventArgs e) + { + if (_currentController == null) + { + MessageBox.Show("请选择要删除的门控制器", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + var result = MessageBox.Show($"删除编码为 {_currentController.Index} 的门控制器?", "确认删除", + MessageBoxButtons.YesNo, MessageBoxIcon.Question); + + if (result == DialogResult.Yes) + { + _doorControllers.Remove(_currentController); + _currentController = null; + ClearControllerFields(); + RefreshControllerList(); + doorListView.Items.Clear(); + SaveData(); + } + } + + /// + /// 保存门控制器 + /// + private void btnSaveController_Click(object sender, EventArgs e) + { + if (_currentController == null) + { + MessageBox.Show("请选择要保存的门控制器", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + try + { + string newIp = textBoxIp.Text.Trim(); + + if (!IsValidIpAddress(newIp)) + { + MessageBox.Show("无效的IP地址,例如:192.168.1.100", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + if (!int.TryParse(textBoxPort.Text, out int port)) + { + MessageBox.Show("端口必须是数字", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + _currentController.Port = port; + + if (!int.TryParse(textBoxControllerIndex.Text, out int index)) + { + MessageBox.Show("编码必须是数字", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + // 检查编码是否重复(排除当前项) + if (_doorControllers.Any(c => c.Index == index && c != _currentController)) + { + MessageBox.Show($"编码 {index} 已存在,请使用其他编码", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + // 检查IP地址是否重复(排除当前项) + if (_doorControllers.Any(c => c.Ip == newIp && c != _currentController)) + { + MessageBox.Show($"IP地址 {newIp} 已存在,请使用其他IP地址", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + _currentController.Index = index; + _currentController.Type = comboBoxType.SelectedItem?.ToString() ?? string.Empty; + _currentController.Ip = newIp; + + RefreshControllerList(); + SaveData(); + MessageBox.Show("保存成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show($"保存失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 添加门 + /// + private void btnAddDoor_Click(object sender, EventArgs e) + { + if (_currentController == null) + { + MessageBox.Show("请先选择门控制器", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + try + { + string indexText = textBoxDoorIndex.Text.Trim(); + string controlAddressText = textBoxControlAddress.Text.Trim(); + string openStatusAddressText = textBoxOpenStatusAddress.Text.Trim(); + + int newIndex; + if (!string.IsNullOrWhiteSpace(indexText)) + { + if (!int.TryParse(indexText, out newIndex)) + { + MessageBox.Show("门编码必须是数字", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + else + { + newIndex = _currentController.Doors.Count > 0 + ? _currentController.Doors.Max(d => d.Index) + 1 + : 1; + } + + // 检查门编码是否重复 + if (_currentController.Doors.Any(d => d.Index == newIndex)) + { + MessageBox.Show($"门编码 {newIndex} 已存在,请使用其他编码", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + ushort controlAddress = 0; + if (!string.IsNullOrWhiteSpace(controlAddressText)) + { + if (!ushort.TryParse(controlAddressText, out controlAddress)) + { + MessageBox.Show("控制地址必须是0-65535之间的数字", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + + ushort openStatusAddress = 0; + if (!string.IsNullOrWhiteSpace(openStatusAddressText)) + { + if (!ushort.TryParse(openStatusAddressText, out openStatusAddress)) + { + MessageBox.Show("开到位地址必须是0-65535之间的数字", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + + var newDoor = new DoorModel + { + Index = newIndex, + ControlAddress = controlAddress, + OpenStatusAddress = openStatusAddress, + NoControl = checkBoxNoControl.Checked + }; + + _currentController.Doors.Add(newDoor); + RefreshDoorList(); + SaveData(); + + // 选中新添加的门 + foreach (ListViewItem item in doorListView.Items) + { + if (item.Tag == newDoor) + { + item.Selected = true; + item.EnsureVisible(); + break; + } + } + } + catch (Exception ex) + { + MessageBox.Show($"添加门失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 删除门 + /// + private void btnDeleteDoor_Click(object sender, EventArgs e) + { + if (_currentController == null) + { + MessageBox.Show("请先选择门控制器", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + if (_currentDoor == null) + { + MessageBox.Show("请选择要删除的门", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + var result = MessageBox.Show($"删除编码为 {_currentDoor.Index} 的门?", "确认删除", + MessageBoxButtons.YesNo, MessageBoxIcon.Question); + + if (result == DialogResult.Yes) + { + _currentController.Doors.Remove(_currentDoor); + _currentDoor = null; + ClearDoorFields(); + RefreshDoorList(); + SaveData(); + } + } + + /// + /// 保存门 + /// + private void btnSaveDoor_Click(object sender, EventArgs e) + { + if (_currentController == null) + { + MessageBox.Show("请先选择门控制器", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + if (_currentDoor == null) + { + MessageBox.Show("请选择要保存的门", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + try + { + if (!int.TryParse(textBoxDoorIndex.Text, out int index)) + { + MessageBox.Show("门编码必须是数字", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + // 检查门编码是否重复(排除当前门) + if (_currentController.Doors.Any(d => d.Index == index && d != _currentDoor)) + { + MessageBox.Show($"门编码 {index} 已存在,请使用其他编码", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + if (!ushort.TryParse(textBoxControlAddress.Text, out ushort controlAddress)) + { + MessageBox.Show("控制地址必须是0-65535之间的数字", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + if (!ushort.TryParse(textBoxOpenStatusAddress.Text, out ushort openStatusAddress)) + { + MessageBox.Show("开到位地址必须是0-65535之间的数字", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + _currentDoor.Index = index; + _currentDoor.ControlAddress = controlAddress; + _currentDoor.OpenStatusAddress = openStatusAddress; + _currentDoor.NoControl = checkBoxNoControl.Checked; + + RefreshDoorList(); + SaveData(); + MessageBox.Show("保存成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show($"保存失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 清空门控制器字段 + /// + private void ClearControllerFields() + { + textBoxIp.Text = string.Empty; + textBoxPort.Text = string.Empty; + textBoxControllerIndex.Text = string.Empty; + comboBoxType.SelectedIndex = -1; + } + + /// + /// 清空门字段 + /// + private void ClearDoorFields() + { + textBoxDoorIndex.Text = string.Empty; + textBoxControlAddress.Text = string.Empty; + textBoxOpenStatusAddress.Text = string.Empty; + checkBoxNoControl.Checked = false; + } + + /// + /// 加载数据 + /// + private void LoadData() + { + try + { + if (File.Exists(_dataFilePath)) + { + var jsonContent = File.ReadAllText(_dataFilePath, Encoding.UTF8); + if (!string.IsNullOrWhiteSpace(jsonContent)) + { + _doorControllers = jsonContent.JsonTo>(); + if (_doorControllers == null) + { + _doorControllers = new List(); + } + } + else + { + _doorControllers = new List(); + } + } + else + { + _doorControllers = new List(); + } + } + catch (Exception ex) + { + MessageBox.Show($"加载数据失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + _doorControllers = new List(); + } + } + + /// + /// 保存数据 + /// + private void SaveData() + { + try + { + var jsonContent = _doorControllers.ToJson(); + File.WriteAllText(_dataFilePath, jsonContent, Encoding.UTF8); + } + catch (Exception ex) + { + MessageBox.Show($"保存数据失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 验证IP地址格式 + /// + private bool IsValidIpAddress(string ipAddress) + { + if (string.IsNullOrWhiteSpace(ipAddress)) + { + return false; + } + + string pattern = @"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"; + if (Regex.IsMatch(ipAddress, pattern)) + { + IPAddress address; + return IPAddress.TryParse(ipAddress, out address) && address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork; + } + + return false; + } + + /// + /// 窗体关闭事件 + /// + private void DoorManager_FormClosing(object sender, FormClosingEventArgs e) + { + if (e.CloseReason == CloseReason.UserClosing) + { + // 关闭前保存数据 + SaveData(); + e.Cancel = true; + this.Visible = false; + } + } + + /// + /// 打开管理界面(静态方法) + /// + public static void OpenViewer() + { + try + { + var manager = Instance; + + if (manager.Visible) + { + if (manager.WindowState == FormWindowState.Minimized) + { + manager.WindowState = FormWindowState.Normal; + } + manager.Activate(); + manager.BringToFront(); + } + else + { + manager.Show(); + manager.Activate(); + } + } + catch (Exception ex) + { + MessageBox.Show($"打开门控制器管理界面失败: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/StandardScene.Core/ExtendDevice/Door/DoorManager.resx b/StandardScene.Core/ExtendDevice/Door/DoorManager.resx new file mode 100644 index 0000000..4391a28 --- /dev/null +++ b/StandardScene.Core/ExtendDevice/Door/DoorManager.resx @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + diff --git a/StandardScene.Core/ExtendDevice/Door/DoorMission.cs b/StandardScene.Core/ExtendDevice/Door/DoorMission.cs new file mode 100644 index 0000000..5a315ae --- /dev/null +++ b/StandardScene.Core/ExtendDevice/Door/DoorMission.cs @@ -0,0 +1,1042 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using LessokajiWeaverUtilities.MagicAttributes; +using LessokajiWeaverUtilities.Utilities; +using Newtonsoft.Json; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using SimpleCore.Library; +using SimpleCore.PropType; +using SimpleCore.Traffic; +using StandardScene.Utils; + +namespace StandardScene.ExtendDevice.Door +{ + //todo:2026.1.21 1,门控制器的通信参数配置移动到具体门控制器类中管理,实现对不同通信类型的支持 + [MissionType(Name = "门控进程")] + [I18N.DocumentTranslation(Name = "DoorMission", locale = "en")] + public class DoorMission : Mission + { + private const string DataFileName = "DoorConfig.json"; + private string _dataFilePath; + + /// + /// 当前所有门控制器实例列表 + /// + private List _doorControllers = new List(); + + /// + /// 用于管理异步循环的取消令牌源 + /// + private CancellationTokenSource _cancellationTokenSource; + + /// + /// 保存监控配置与状态的后台任务 + /// + private Task _configTask; + private Task _stateTask; + + /// + /// 同步锁,用于保护门控制器列表的并发访问 + /// + private readonly object _syncLock = new object(); + + /// + /// 门区域内的小车记录:(ControllerIndex, DoorIndex) -> List + /// + [JsonIgnore] private readonly Dictionary<(int ControllerIndex, int DoorIndex), List> carsInAreas = new Dictionary<(int ControllerIndex, int DoorIndex), List>(); + + /// + /// 需要打开的门:(ControllerIndex, DoorIndex) -> bool + /// + [JsonIgnore] private readonly Dictionary<(int ControllerIndex, int DoorIndex), bool> _needOpen = new Dictionary<(int ControllerIndex, int DoorIndex), bool>(); + + /// + /// 手动控制请求:(ControllerIndex, DoorIndex) -> ManualControlRequest + /// + [JsonIgnore] private readonly Dictionary<(int ControllerIndex, int DoorIndex), ManualControlRequest> _manualRequests = new Dictionary<(int ControllerIndex, int DoorIndex), ManualControlRequest>(); + + private const int DefaultManualHoldSeconds = 10; + + public enum ControlSource + { + Auto = 0, + Manual = 1 + } + + private class ManualControlRequest + { + public bool Target { get; set; } + public DateTime ExpireAt { get; set; } + } + + public class DoorControlStatus + { + public bool Target { get; set; } + public ControlSource Source { get; set; } + public double? ManualRemainingSeconds { get; set; } + public IReadOnlyList CarsInArea { get; set; } = Array.Empty(); + } + + /// + /// 监控界面快照项(线程安全快照,避免UI直接枚举可变字典) + /// + public class DoorMonitorSnapshotItem + { + public int ControllerIndex { get; set; } + public int DoorIndex { get; set; } + public DoorState State { get; set; } + public bool Target { get; set; } + public ControlSource Source { get; set; } + public double? ManualRemainingSeconds { get; set; } + public IReadOnlyList CarsInArea { get; set; } = Array.Empty(); + public ushort ControlAddress { get; set; } + public ushort OpenStatusAddress { get; set; } + } + + [MethodMember(Name = "启动进程")] + [I18N.DocumentTranslation(Name = "Start Mission", locale = "en")] + public override void Execute() + { + // 设置数据文件路径 + _dataFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DataFileName); + + // 如果已经启动,先停止之前的循环 + StopInternalAsync().GetAwaiter().GetResult(); + + TrafficControl.BeforeLock += BeforeLockEvent; + TrafficControl.AfterLeave += AfterLeaveEvent; + TrafficControl.OnLockAcquired += OnLockAcquiredEvent; + + // 启动时立即加载一次配置,避免监控界面在第一次轮询前无数据 + try + { + var configControllers = LoadDoorControllerConfig(); + SyncDoorControllers(configControllers); + } + catch (Exception ex) + { + Diagnosis.Log($"启动时加载门控制器配置失败: {ExceptionFormatter.FormatEx(ex)}", "DoorMission", true); + } + + // 创建新的取消令牌源 + _cancellationTokenSource = new CancellationTokenSource(); + + // 启动异步循环 + var token = _cancellationTokenSource.Token; + _configTask = Task.Run(async () => await MonitorDoorConfigAsync(token), token); + _stateTask = Task.Run(async () => await MonitorDoorLogicAsync(token), token); + status.status = "Running"; + } + + /// + /// 停止监控任务 + /// + [MethodMember(Name = "停止进程")] + [I18N.DocumentTranslation(Name = "Stop Mission", locale = "en")] + public void Stop() + { + StopInternalAsync().GetAwaiter().GetResult(); + status.status = "/"; + } + + /// + /// 取消并释放当前的取消令牌源 + /// + private async Task StopInternalAsync() + { + // 取消事件订阅 + TrafficControl.BeforeLock -= BeforeLockEvent; + TrafficControl.AfterLeave -= AfterLeaveEvent; + TrafficControl.OnLockAcquired -= OnLockAcquiredEvent; + + var cts = Interlocked.Exchange(ref _cancellationTokenSource, null); + var configTask = Interlocked.Exchange(ref _configTask, null); + var stateTask = Interlocked.Exchange(ref _stateTask, null); + + if (cts == null && configTask == null && stateTask == null) + { + return; + } + + try + { + cts?.Cancel(); + } + catch (ObjectDisposedException) + { + // 已释放,忽略 + } + + var runningTasks = new[] { configTask, stateTask } + .Where(t => t != null) + .ToArray(); + + if (runningTasks.Length > 0) + { + var aggregateTask = Task.WhenAll(runningTasks); + var timeoutTask = Task.Delay(TimeSpan.FromSeconds(5)); + var completedTask = await Task.WhenAny(aggregateTask, timeoutTask).ConfigureAwait(false); + + if (completedTask == timeoutTask) + { + Diagnosis.Log("停止门控任务超时", "DoorMission", true); + } + else + { + try + { + await aggregateTask.ConfigureAwait(false); + } + catch (Exception ex) + { + Diagnosis.Log($"停止门控任务时发生异常: {ExceptionFormatter.FormatEx(ex)}", "DoorMission", true); + } + } + } + + cts?.Dispose(); + + DisconnectAllDoorControllers(); + } + + /// + /// 断开所有门控制器连接 + /// + private void DisconnectAllDoorControllers() + { + List snapshot; + lock (_syncLock) + { + snapshot = _doorControllers.ToList(); + } + + foreach (var controller in snapshot) + { + try + { + controller.Disconnect(); + } + catch (Exception ex) + { + Diagnosis.Log($"停止门控制器失败: Index={controller.Index}, Error={ExceptionFormatter.FormatEx(ex)}", "DoorMission", true); + } + } + } + + /// + /// 异步监控门控制器配置文件 + /// + private async Task MonitorDoorConfigAsync(CancellationToken cancellationToken) + { + while (!cancellationToken.IsCancellationRequested) + { + try + { + // 读取配置文件 + var configControllers = LoadDoorControllerConfig(); + + // 同步门控制器列表 + SyncDoorControllers(configControllers); + + // 等待10秒 + await Task.Delay(TimeSpan.FromSeconds(10), cancellationToken); + } + catch (OperationCanceledException) + { + // 正常取消,退出循环 + break; + } + catch (Exception ex) + { + Diagnosis.Log($"门控制器配置监控错误: {ExceptionFormatter.FormatEx(ex)}", "DoorMission", true); + // 发生错误时等待5秒后重试 + try + { + await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken); + } + catch (OperationCanceledException) + { + break; + } + } + } + } + + /// + /// 监控门控逻辑 + /// + private async Task MonitorDoorLogicAsync(CancellationToken cancellationToken) + { + while (!cancellationToken.IsCancellationRequested) + { + try + { + lock (_syncLock) + { + foreach (var controller in _doorControllers) + { + foreach (var doorConfig in controller.DoorConfigs.Values) + { + var doorIndex = doorConfig.Index; + var key = (controller.Index, doorIndex); + var needOpen = _needOpen.TryGetValue(key, out var open) && open; + + // 自动目标:有车或需要打开 + var hasCarsInArea = carsInAreas.TryGetValue(key, out var cars) && cars.Count > 0; + var autoTarget = needOpen || hasCarsInArea; + + // 手动请求仲裁:优先级 Manual > Auto,手动过期后自动恢复 + bool finalTarget = autoTarget; + if (_manualRequests.TryGetValue(key, out var manual)) + { + if (manual.ExpireAt <= DateTime.Now) + { + _manualRequests.Remove(key); + } + else + { + finalTarget = manual.Target; + } + } + + // 仅更新门控制器中的目标控制字段,不直接进行通信 + controller.SetDoorControlTarget(doorIndex, finalTarget); + } + } + } + + await Task.Delay(TimeSpan.FromMilliseconds(500), cancellationToken); + } + catch (OperationCanceledException) + { + // 正常取消,退出循环 + break; + } + catch (Exception ex) + { + Diagnosis.Log($"门控逻辑监控错误: {ExceptionFormatter.FormatEx(ex)}", "DoorMission", true); + // 发生错误时等待5秒后重试 + try + { + await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken); + } + catch (OperationCanceledException) + { + break; + } + } + } + } + + /// + /// 加载门控制器配置文件 + /// + private List LoadDoorControllerConfig() + { + try + { + if (File.Exists(_dataFilePath)) + { + var jsonContent = File.ReadAllText(_dataFilePath, Encoding.UTF8); + if (!string.IsNullOrWhiteSpace(jsonContent)) + { + var controllers = jsonContent.JsonTo>(); + return controllers ?? new List(); + } + } + } + catch (Exception ex) + { + Diagnosis.Log($"加载门控制器配置文件失败: {ExceptionFormatter.FormatEx(ex)}", "DoorMission", true); + } + + return new List(); + } + + /// + /// 同步门控制器列表,根据配置文件进行增删改 + /// + private void SyncDoorControllers(List configControllers) + { + var controllersToAdd = new List(); + + lock (_syncLock) + { + // 创建配置中的门控制器索引字典 + var configDict = configControllers.ToDictionary(c => c.Index); + + // 创建当前门控制器索引字典 + var currentDict = _doorControllers.ToDictionary(c => c.Index); + + // 1. 删除:在配置中不存在的门控制器 + var toRemove = _doorControllers.Where(c => !configDict.ContainsKey(c.Index)).ToList(); + foreach (var controller in toRemove) + { + try + { + controller.Disconnect(); + _doorControllers.Remove(controller); + Diagnosis.Post($"删除门控制器: Index={controller.Index}, IP={controller.Ip}", "DoorMission", true); + } + catch (Exception ex) + { + Diagnosis.Log($"删除门控制器失败: {ExceptionFormatter.FormatEx(ex)}", "DoorMission", true); + } + } + + // 2. 添加和修改:遍历配置中的门控制器 + foreach (var configController in configControllers) + { + if (currentDict.TryGetValue(configController.Index, out var existingController)) + { + // 修改:检查是否需要更新 + if (ShouldUpdateDoorController(existingController, configController)) + { + try + { + UpdateDoorController(existingController, configController); + Diagnosis.Post($"更新门控制器: Index={configController.Index}, IP={configController.Ip}, Type={configController.Type}", "DoorMission", true); + } + catch (Exception ex) + { + Diagnosis.Log($"更新门控制器失败: {ExceptionFormatter.FormatEx(ex)}", "DoorMission", true); + } + } + } + else + { + controllersToAdd.Add(configController); + } + } + } + + foreach (var configController in controllersToAdd) + { + try + { + var newController = CreateDoorControllerInstance(configController); + if (newController != null) + { + lock (_syncLock) + { + _doorControllers.Add(newController); + } + Diagnosis.Post($"添加门控制器: Index={configController.Index}, IP={configController.Ip}, Type={configController.Type}", "DoorMission", true); + } + else + { + Diagnosis.Log($"无法创建门控制器实例: Index={configController.Index}, Type={configController.Type}", "DoorMission", true); + } + } + catch (Exception ex) + { + Diagnosis.Log($"添加门控制器失败: {ExceptionFormatter.FormatEx(ex)}", "DoorMission", true); + } + } + } + + /// + /// 获取门控制器类型的 DoorTypeAttribute.Name + /// + private string GetDoorTypeName(Type controllerType) + { + if (controllerType == null) + { + return string.Empty; + } + + var attr = controllerType.GetCustomAttribute(); + return attr?.Name ?? controllerType.Name; + } + + /// + /// 判断是否需要更新门控制器 + /// + private bool ShouldUpdateDoorController(BasicDoorController existingController, DoorControllerModel configController) + { + // 检查基本属性是否变更 + var existingTypeName = GetDoorTypeName(existingController.GetType()); + if (existingController.Ip != configController.Ip + || existingController.Port != configController.Port + || existingTypeName != configController.Type) + { + return true; + } + + // 检查门配置信息是否变更 + return HasDoorConfigsChanged(existingController, configController); + } + + /// + /// 检查门配置信息是否变更 + /// + private bool HasDoorConfigsChanged(BasicDoorController existingController, DoorControllerModel configController) + { + var configDoors = configController.Doors ?? new List(); + var configDict = configDoors.ToDictionary(d => d.Index); + var existingDict = existingController.DoorConfigs; + + // 检查门数量是否变化 + if (existingDict.Count != configDict.Count) + { + return true; + } + + // 检查每个门的配置是否变化 + foreach (var configDoor in configDoors) + { + if (!existingDict.TryGetValue(configDoor.Index, out var existingDoor)) + { + // 新增了门 + return true; + } + + // 检查门配置是否变化 + if (existingDoor.ControlAddress != configDoor.ControlAddress + || existingDoor.OpenStatusAddress != configDoor.OpenStatusAddress) + { + return true; + } + } + + // 检查是否有门被删除 + foreach (var existingKey in existingDict.Keys) + { + if (!configDict.ContainsKey(existingKey)) + { + return true; + } + } + + return false; + } + + /// + /// 更新门控制器属性 + /// + private void UpdateDoorController(BasicDoorController controller, DoorControllerModel configController) + { + // 如果类型改变,需要重新创建实例 + var existingTypeName = GetDoorTypeName(controller.GetType()); + if (existingTypeName != configController.Type) + { + // 断开旧连接 + controller.Disconnect(); + + // 从列表中移除 + _doorControllers.Remove(controller); + + // 创建新实例 + var newController = CreateDoorControllerInstance(configController); + if (newController != null) + { + _doorControllers.Add(newController); + } + } + else + { + // 只更新属性 + bool needReconnect = controller.Ip != configController.Ip || controller.Port != configController.Port; + controller.Ip = configController.Ip; + controller.Port = configController.Port; + + // 更新门配置信息 + controller.UpdateDoorConfigs(configController.Doors); + + // 初始化门状态(基于配置中的门索引) + var doorIndices = configController.Doors?.Select(d => d.Index).ToList() ?? new List(); + controller.InitializeDoors(doorIndices); + + // 如果IP或端口改变,需要重新连接 + if (needReconnect) + { + controller.Disconnect(); + controller.Connect(); + } + } + } + + /// + /// 根据 DoorTypeAttribute.Name 获取类型 + /// + private Type GetControllerTypeByDoorTypeName(string doorTypeName) + { + if (string.IsNullOrWhiteSpace(doorTypeName)) + { + return null; + } + + try + { + // 在插件/宿主环境下 GetExecutingAssembly 可能不是 StandardScene.dll + // 这里固定从门控制器基类所在程序集查找 + // 跨程序集发现:门控制器具体类型可能位于卫星插件 dll(StandardScene.Devices.Door), + // 用内核同款全域类型发现替代仅扫基类所在程序集。 + var allControllerTypes = SimpleLite.Utils.UiTypeDiscovery.AllTypes() + .Where(t => t.IsClass + && !t.IsAbstract + && t.Namespace == typeof(BasicDoorController).Namespace + && t.IsSubclassOf(typeof(BasicDoorController)) + && t.IsDefined(typeof(DoorTypeAttribute), false)); + + foreach (var type in allControllerTypes) + { + var attr = type.GetCustomAttribute(); + if (attr != null && attr.Name == doorTypeName) + { + return type; + } + } + + return null; + } + catch (Exception ex) + { + Diagnosis.Log($"获取门控制器类型失败: DoorTypeName={doorTypeName}, Error={ExceptionFormatter.FormatEx(ex)}", "DoorMission", true); + return null; + } + } + + /// + /// 通过 DoorTypeAttribute.Name 创建门控制器实例 + /// + private BasicDoorController CreateDoorControllerInstance(DoorControllerModel configController) + { + if (string.IsNullOrWhiteSpace(configController.Type)) + { + return null; + } + + try + { + // 通过 DoorTypeAttribute.Name 查找类型 + var controllerType = GetControllerTypeByDoorTypeName(configController.Type); + + if (controllerType == null) + { + Diagnosis.Log($"未找到门控制器类型: {configController.Type}", "DoorMission", true); + return null; + } + + // 使用反射创建实例 + var instance = (BasicDoorController)Activator.CreateInstance(controllerType); + + // 设置属性 + instance.Index = configController.Index; + instance.Ip = configController.Ip; + instance.Port = configController.Port; + + // 初始化门配置信息 + instance.InitializeDoorConfigs(configController.Doors); + + // 初始化门状态(基于配置中的门索引) + var doorIndices = configController.Doors?.Select(d => d.Index).ToList() ?? new List(); + instance.InitializeDoors(doorIndices); + + // 自动连接 + instance.Connect(); + + return instance; + } + catch (Exception ex) + { + Diagnosis.Log($"创建门控制器实例失败: Type={configController.Type}, Error={ExceptionFormatter.FormatEx(ex)}", "DoorMission", true); + return null; + } + } + + /// + /// 获取当前所有门控制器实例(只读) + /// + public IReadOnlyList GetDoorControllers() + { + lock (_syncLock) + { + return _doorControllers.ToList().AsReadOnly(); + } + } + + /// + /// 获取用于监控界面的门状态快照 + /// + public IReadOnlyList GetDoorMonitorSnapshot() + { + lock (_syncLock) + { + var snapshot = new List(); + var now = DateTime.Now; + + foreach (var controller in _doorControllers) + { + var doorConfigs = controller.DoorConfigs?.Values?.ToList() ?? new List(); + foreach (var doorConfig in doorConfigs) + { + var key = (controller.Index, doorConfig.Index); + var cars = carsInAreas.TryGetValue(key, out var list) && list != null + ? list.ToList().AsReadOnly() + : new List().AsReadOnly(); + + var source = ControlSource.Auto; + double? manualRemaining = null; + bool target = false; + + if (_manualRequests.TryGetValue(key, out var manual)) + { + if (manual.ExpireAt > now) + { + source = ControlSource.Manual; + target = manual.Target; + manualRemaining = (manual.ExpireAt - now).TotalSeconds; + } + else + { + _manualRequests.Remove(key); + } + } + + if (source == ControlSource.Auto) + { + var needOpen = _needOpen.TryGetValue(key, out var open) && open; + target = needOpen || cars.Count > 0; + } + + snapshot.Add(new DoorMonitorSnapshotItem + { + ControllerIndex = controller.Index, + DoorIndex = doorConfig.Index, + State = controller.GetDoorState(doorConfig.Index), + Target = target, + Source = source, + ManualRemainingSeconds = manualRemaining, + CarsInArea = cars, + ControlAddress = doorConfig.ControlAddress, + OpenStatusAddress = doorConfig.OpenStatusAddress + }); + } + } + + return snapshot.AsReadOnly(); + } + } + + /// + /// 解析门标识符字符串(格式:控制器索引.门索引) + /// + /// 门标识符字符串,格式:控制器索引.门索引 + /// 如果解析成功返回(控制器索引, 门索引),否则返回null + private (int ControllerIndex, int DoorIndex)? ParseDoorIdentifier(string doorIdentifier) + { + if (string.IsNullOrWhiteSpace(doorIdentifier)) + { + return null; + } + + var parts = doorIdentifier.Split('.'); + if (parts.Length != 2) + { + return null; + } + + if (int.TryParse(parts[0].Trim(), out int controllerIndex) && + int.TryParse(parts[1].Trim(), out int doorIndex)) + { + return (controllerIndex, doorIndex); + } + + return null; + } + + /// + /// 读取门状态 + /// + /// 门控制器索引 + /// 门索引 + /// true=打开,false=关闭 + public bool GetDoorState(int controllerIndex, int doorIndex) + { + lock (_syncLock) + { + var controller = _doorControllers.FirstOrDefault(c => c.Index == controllerIndex); + if (controller != null && controller.DoorConfigs.ContainsKey(doorIndex)) + { + // 只访问控制器中的门状态字段,不直接进行通信 + var state = controller.GetDoorState(doorIndex); + return state == DoorState.Open; + } + } + return false; + } + + /// + /// 写入门控制状态 + /// + /// 门控制器索引 + /// 门索引 + /// true=打开,false=关闭 + public void SetDoorControlTarget(int controllerIndex, int doorIndex, bool open) + { + lock (_syncLock) + { + var controller = _doorControllers.FirstOrDefault(c => c.Index == controllerIndex); + if (controller != null && controller.DoorConfigs.ContainsKey(doorIndex)) + { + // 仅设置门的目标控制状态,由门控制器内部线程负责实际通信 + controller.SetDoorControlTarget(doorIndex, open); + } + } + } + + /// + /// 设置手动控制目标,支持保持时间,车辆占用时禁止手动关闭 + /// + /// 控制器索引 + /// 门索引 + /// 目标开关 + /// 手动保持秒数,默认10秒 + /// 成功返回true;当占用且尝试关闭时返回false + public bool SetManualDoorControl(int controllerIndex, int doorIndex, bool open, int? holdSeconds = null) + { + lock (_syncLock) + { + // 车辆占用时禁止手动关闭 + var key = (controllerIndex, doorIndex); + if (!open && carsInAreas.TryGetValue(key, out var cars) && cars.Count > 0) + { + return false; + } + + var seconds = holdSeconds.GetValueOrDefault(DefaultManualHoldSeconds); + _manualRequests[key] = new ManualControlRequest + { + Target = open, + ExpireAt = DateTime.Now.AddSeconds(seconds) + }; + return true; + } + } + + /// + /// 清除手动控制,恢复自动 + /// + public void ClearManualDoorControl(int controllerIndex, int doorIndex) + { + lock (_syncLock) + { + var key = (controllerIndex, doorIndex); + _manualRequests.Remove(key); + } + } + + /// + /// 清空车辆占用记录 + /// + public void ClearCarsInArea(int controllerIndex, int doorIndex) + { + lock (_syncLock) + { + var key = (controllerIndex, doorIndex); + if (carsInAreas.ContainsKey(key)) + { + carsInAreas[key].Clear(); + } + } + } + + /// + /// 获取门的控制状态(目标、来源、手动剩余时间、占用车辆) + /// + public DoorControlStatus GetDoorControlStatus(int controllerIndex, int doorIndex) + { + lock (_syncLock) + { + var key = (controllerIndex, doorIndex); + + // 车辆占用 + IReadOnlyList cars; + if (carsInAreas.TryGetValue(key, out var list) && list != null) + { + cars = list.ToList().AsReadOnly(); + } + else + { + cars = new List().AsReadOnly(); + } + + // 当前目标来源与剩余 + var source = ControlSource.Auto; + double? remaining = null; + bool target = false; + + if (_manualRequests.TryGetValue(key, out var manual)) + { + if (manual.ExpireAt > DateTime.Now) + { + source = ControlSource.Manual; + target = manual.Target; + remaining = (manual.ExpireAt - DateTime.Now).TotalSeconds; + } + else + { + _manualRequests.Remove(key); + } + } + + if (source == ControlSource.Auto) + { + var needOpen = _needOpen.TryGetValue(key, out var open) && open; + var hasCars = cars.Count > 0; + target = needOpen || hasCars; + } + + return new DoorControlStatus + { + Target = target, + Source = source, + ManualRemainingSeconds = remaining, + CarsInArea = cars + }; + } + } + + /// + /// 获取门的车辆占用情况 + /// + /// 门控制器索引 + /// 门索引 + /// 车辆ID列表,如果没有车辆则返回空列表 + public IReadOnlyList GetCarsInArea(int controllerIndex, int doorIndex) + { + lock (_syncLock) + { + var key = (controllerIndex, doorIndex); + if (carsInAreas.TryGetValue(key, out var cars) && cars != null) + { + return cars.ToList().AsReadOnly(); + } + return new List().AsReadOnly(); + } + } + + private bool BeforeLockEvent(AbstractCar car, int siteId) + { + var site = SimpleLib.GetSite(siteId); + + if (!site.fields.TryGetValue("EnterDoor", out string fieldStr)) return true; + var lastSiteId = car.status.holdingLocks.LastOrDefault(); + var lastSite = SimpleLib.GetSite(lastSiteId); + if (lastSite == null || !lastSite.fields.TryGetValue("PreEnterDoor",out var value)) return true; + if (value != fieldStr) return true; + var doorInfo = ParseDoorIdentifier(fieldStr); + if (!doorInfo.HasValue) return true; + var (controllerIndex, doorIndex) = doorInfo.Value; + lock (_syncLock) + { + _needOpen[(controllerIndex, doorIndex)] = true; + return GetDoorState(controllerIndex, doorIndex); + } + } + + private void AfterLeaveEvent(AbstractCar car, int siteId) + { + var site = SimpleLib.GetSite(siteId); + + if (!site.fields.TryGetValue("LeaveDoor", out string fieldStr)) return; + var carSiteId = car.status.holdingLocks.FirstOrDefault(); + var carSite = SimpleLib.GetSite(carSiteId); + if (carSite == null || !carSite.fields.TryGetValue("RearLeaveDoor",out var value)) return; + if (value != fieldStr) return; + var doorInfo = ParseDoorIdentifier(fieldStr); + if (!doorInfo.HasValue) return; + var (controllerIndex, doorIndex) = doorInfo.Value; + var key = (controllerIndex, doorIndex); + lock (_syncLock) + { + if (carsInAreas.TryGetValue(key, out var list)) + { + list.Remove(car.id); + } + } + } + + private void OnLockAcquiredEvent(AbstractCar car, int siteId) + { + var site = SimpleLib.GetSite(siteId); + if (!site.fields.TryGetValue("EnterDoor", out string fieldStr)) return; + if(car.status.holdingLocks.Length<2) return; + var preSiteId = car.status.holdingLocks[car.status.holdingLocks.Length-2]; + var preSite = SimpleLib.GetSite(preSiteId); + if (preSite == null || !preSite.fields.TryGetValue("PreEnterDoor", out var value)) return ; + if (value != fieldStr) return ; + var doorInfo = ParseDoorIdentifier(fieldStr); + if (!doorInfo.HasValue) return; + var (controllerIndex, doorIndex) = doorInfo.Value; + var key = (controllerIndex, doorIndex); + lock (_syncLock) + { + if (!carsInAreas.TryGetValue(key, out var list)) + { + list = new List(); + carsInAreas[key] = list; + } + if (!list.Contains(car.id)) + { + list.Add(car.id); + } + _needOpen[key] = false; + } + } + + /// + /// 打开门控制器管理界面 + /// + [MethodMember(Name = "打开管理界面")] + [I18N.DocumentTranslation(Name = "Open Manager", locale = "en")] + public static void OpenViewer() + { + DoorManager.OpenViewer(); + } + + /// + /// 打开门控监控界面 + /// + [MethodMember(Name = "打开监控界面")] + [I18N.DocumentTranslation(Name = "Open Monitor", locale = "en")] + public static void OpenMonitor() + { + try + { + var monitor = DoorMonitor.Instance; + + if (monitor.Visible) + { + if (monitor.WindowState == System.Windows.Forms.FormWindowState.Minimized) + { + monitor.WindowState = System.Windows.Forms.FormWindowState.Normal; + } + monitor.Activate(); + monitor.BringToFront(); + } + else + { + monitor.Show(); + monitor.Activate(); + } + + monitor.EnsureRefreshActive(); + } + catch (Exception ex) + { + System.Windows.Forms.MessageBox.Show($"打开门控监控界面失败: {ex.Message}", "错误", + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + } + } + } +} diff --git a/StandardScene.Core/ExtendDevice/Door/DoorModel.cs b/StandardScene.Core/ExtendDevice/Door/DoorModel.cs new file mode 100644 index 0000000..5732eac --- /dev/null +++ b/StandardScene.Core/ExtendDevice/Door/DoorModel.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; + +namespace StandardScene.ExtendDevice.Door +{ + /// + /// 门控制器模型 + /// + public class DoorControllerModel + { + /// + /// 控制器索引 + /// + public int Index { get; set; } = 0; + + /// + /// IP地址 + /// + public string Ip { get; set; } = string.Empty; + + /// + /// 端口 + /// + public int Port { get; set; } = 502; + + /// + /// 控制器类型(类名) + /// + public string Type { get; set; } = string.Empty; + + /// + /// 门列表 + /// + public List Doors { get; set; } = new List(); + } + + /// + /// 门模型 + /// + public class DoorModel + { + /// + /// 门索引 + /// + public int Index { get; set; } = 0; + + /// + /// 开关控制信号地址(Modbus 线圈地址) + /// + public ushort ControlAddress { get; set; } = 0; + + /// + /// 开到位信号地址(Modbus 线圈地址) + /// + public ushort OpenStatusAddress { get; set; } = 0; + + /// + /// 禁止对该门下发任何控制指令(打开或关闭)。 + /// 为 true 时,门控逻辑不会对该门调用 WriteDoorControl。 + /// + public bool NoControl { get; set; } = false; + } +} diff --git a/StandardScene.Core/ExtendDevice/Door/DoorMonitor.Designer.cs b/StandardScene.Core/ExtendDevice/Door/DoorMonitor.Designer.cs new file mode 100644 index 0000000..a705f2e --- /dev/null +++ b/StandardScene.Core/ExtendDevice/Door/DoorMonitor.Designer.cs @@ -0,0 +1,263 @@ +namespace StandardScene.ExtendDevice.Door +{ + partial class DoorMonitor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.doorListView = new System.Windows.Forms.ListView(); + this.columnHeaderControllerIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderDoorIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderState = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderTarget = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderSource = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderManualRemain = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderCarsInArea = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderControlAddress = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderOpenStatusAddress = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.groupBoxControl = new System.Windows.Forms.GroupBox(); + this.btnClose = new System.Windows.Forms.Button(); + this.btnOpen = new System.Windows.Forms.Button(); + this.btnClearCars = new System.Windows.Forms.Button(); + this.labelDoorInfo = new System.Windows.Forms.Label(); + this.labelTitle = new System.Windows.Forms.Label(); + this.timerRefresh = new System.Windows.Forms.Timer(); + this.groupBoxControl.SuspendLayout(); + this.SuspendLayout(); + // + // doorListView + // + this.doorListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.doorListView.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.doorListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderControllerIndex, + this.columnHeaderDoorIndex, + this.columnHeaderState, + this.columnHeaderTarget, + this.columnHeaderSource, + this.columnHeaderManualRemain, + this.columnHeaderCarsInArea, + this.columnHeaderControlAddress, + this.columnHeaderOpenStatusAddress}); + this.doorListView.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.doorListView.FullRowSelect = true; + this.doorListView.GridLines = true; + this.doorListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.doorListView.HideSelection = false; + this.doorListView.Location = new System.Drawing.Point(15, 55); + this.doorListView.MultiSelect = false; + this.doorListView.Name = "doorListView"; + this.doorListView.OwnerDraw = true; + this.doorListView.Size = new System.Drawing.Size(800, 400); + this.doorListView.TabIndex = 0; + this.doorListView.UseCompatibleStateImageBehavior = false; + this.doorListView.View = System.Windows.Forms.View.Details; + this.doorListView.SelectedIndexChanged += new System.EventHandler(this.doorListView_SelectedIndexChanged); + // + // columnHeaderControllerIndex + // + this.columnHeaderControllerIndex.Text = "控制器编码"; + this.columnHeaderControllerIndex.Width = 120; + // + // columnHeaderDoorIndex + // + this.columnHeaderDoorIndex.Text = "门编码"; + this.columnHeaderDoorIndex.Width = 100; + // + // columnHeaderState + // + this.columnHeaderState.Text = "状态"; + this.columnHeaderState.Width = 100; + // + // columnHeaderTarget + // + this.columnHeaderTarget.Text = "控制目标"; + this.columnHeaderTarget.Width = 100; + // + // columnHeaderSource + // + this.columnHeaderSource.Text = "控制来源"; + this.columnHeaderSource.Width = 100; + // + // columnHeaderManualRemain + // + this.columnHeaderManualRemain.Text = "手动剩余(s)"; + this.columnHeaderManualRemain.Width = 110; + // + // columnHeaderCarsInArea + // + this.columnHeaderCarsInArea.Text = "车辆占用"; + this.columnHeaderCarsInArea.Width = 150; + // + // columnHeaderControlAddress + // + this.columnHeaderControlAddress.Text = "控制地址"; + this.columnHeaderControlAddress.Width = 120; + // + // columnHeaderOpenStatusAddress + // + this.columnHeaderOpenStatusAddress.Text = "开到位地址"; + this.columnHeaderOpenStatusAddress.Width = 120; + // + // groupBoxControl + // + this.groupBoxControl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxControl.Controls.Add(this.btnClose); + this.groupBoxControl.Controls.Add(this.btnOpen); + this.groupBoxControl.Controls.Add(this.btnClearCars); + this.groupBoxControl.Controls.Add(this.labelDoorInfo); + this.groupBoxControl.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBoxControl.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(68)))), ((int)(((byte)(68)))), ((int)(((byte)(68))))); + this.groupBoxControl.Location = new System.Drawing.Point(15, 470); + this.groupBoxControl.Name = "groupBoxControl"; + this.groupBoxControl.Padding = new System.Windows.Forms.Padding(12, 10, 12, 12); + this.groupBoxControl.Size = new System.Drawing.Size(800, 120); + this.groupBoxControl.TabIndex = 1; + this.groupBoxControl.TabStop = false; + this.groupBoxControl.Text = "手动控制"; + // + // btnClose + // + this.btnClose.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(53)))), ((int)(((byte)(69))))); + this.btnClose.FlatAppearance.BorderSize = 0; + this.btnClose.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(165)))), ((int)(((byte)(40)))), ((int)(((byte)(52))))); + this.btnClose.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(187)))), ((int)(((byte)(45)))), ((int)(((byte)(59))))); + this.btnClose.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnClose.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClose.ForeColor = System.Drawing.Color.White; + this.btnClose.Location = new System.Drawing.Point(450, 50); + this.btnClose.Name = "btnClose"; + this.btnClose.Size = new System.Drawing.Size(120, 50); + this.btnClose.TabIndex = 2; + this.btnClose.Text = "关闭"; + this.btnClose.UseVisualStyleBackColor = false; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // btnOpen + // + this.btnOpen.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(167)))), ((int)(((byte)(69))))); + this.btnOpen.FlatAppearance.BorderSize = 0; + this.btnOpen.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(125)))), ((int)(((byte)(52))))); + this.btnOpen.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(136)))), ((int)(((byte)(56))))); + this.btnOpen.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnOpen.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnOpen.ForeColor = System.Drawing.Color.White; + this.btnOpen.Location = new System.Drawing.Point(300, 50); + this.btnOpen.Name = "btnOpen"; + this.btnOpen.Size = new System.Drawing.Size(120, 50); + this.btnOpen.TabIndex = 1; + this.btnOpen.Text = "打开"; + this.btnOpen.UseVisualStyleBackColor = false; + this.btnOpen.Click += new System.EventHandler(this.btnOpen_Click); + // + // btnClearCars + // + this.btnClearCars.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(108)))), ((int)(((byte)(117)))), ((int)(((byte)(125))))); + this.btnClearCars.FlatAppearance.BorderSize = 0; + this.btnClearCars.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnClearCars.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClearCars.ForeColor = System.Drawing.Color.White; + this.btnClearCars.Location = new System.Drawing.Point(600, 50); + this.btnClearCars.Name = "btnClearCars"; + this.btnClearCars.Size = new System.Drawing.Size(140, 50); + this.btnClearCars.TabIndex = 3; + this.btnClearCars.Text = "清空占用"; + this.btnClearCars.UseVisualStyleBackColor = false; + this.btnClearCars.Click += new System.EventHandler(this.btnClearCars_Click); + // + // labelDoorInfo + // + this.labelDoorInfo.AutoSize = true; + this.labelDoorInfo.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelDoorInfo.Location = new System.Drawing.Point(20, 35); + this.labelDoorInfo.Name = "labelDoorInfo"; + this.labelDoorInfo.Size = new System.Drawing.Size(200, 24); + this.labelDoorInfo.TabIndex = 0; + this.labelDoorInfo.Text = "请选择要控制的门"; + // + // labelTitle + // + this.labelTitle.AutoSize = true; + this.labelTitle.Font = new System.Drawing.Font("微软雅黑", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labelTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.labelTitle.Location = new System.Drawing.Point(15, 12); + this.labelTitle.Name = "labelTitle"; + this.labelTitle.Size = new System.Drawing.Size(150, 42); + this.labelTitle.TabIndex = 2; + this.labelTitle.Text = "门控监控"; + // + // timerRefresh + // + this.timerRefresh.Interval = 1000; + this.timerRefresh.Tick += new System.EventHandler(this.timerRefresh_Tick); + // + // DoorMonitor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(245)))), ((int)(((byte)(245)))), ((int)(((byte)(247))))); + this.ClientSize = new System.Drawing.Size(830, 600); + this.Controls.Add(this.labelTitle); + this.Controls.Add(this.groupBoxControl); + this.Controls.Add(this.doorListView); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.MinimumSize = new System.Drawing.Size(830, 600); + this.Name = "DoorMonitor"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "门控监控"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DoorMonitor_FormClosing); + this.Load += new System.EventHandler(this.DoorMonitor_Load); + this.groupBoxControl.ResumeLayout(false); + this.groupBoxControl.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView doorListView; + private System.Windows.Forms.ColumnHeader columnHeaderControllerIndex; + private System.Windows.Forms.ColumnHeader columnHeaderDoorIndex; + private System.Windows.Forms.ColumnHeader columnHeaderState; + private System.Windows.Forms.ColumnHeader columnHeaderTarget; + private System.Windows.Forms.ColumnHeader columnHeaderSource; + private System.Windows.Forms.ColumnHeader columnHeaderManualRemain; + private System.Windows.Forms.ColumnHeader columnHeaderCarsInArea; + private System.Windows.Forms.ColumnHeader columnHeaderControlAddress; + private System.Windows.Forms.ColumnHeader columnHeaderOpenStatusAddress; + private System.Windows.Forms.GroupBox groupBoxControl; + private System.Windows.Forms.Label labelDoorInfo; + private System.Windows.Forms.Button btnOpen; + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.Button btnClearCars; + private System.Windows.Forms.Label labelTitle; + private System.Windows.Forms.Timer timerRefresh; + } +} diff --git a/StandardScene.Core/ExtendDevice/Door/DoorMonitor.cs b/StandardScene.Core/ExtendDevice/Door/DoorMonitor.cs new file mode 100644 index 0000000..93f977b --- /dev/null +++ b/StandardScene.Core/ExtendDevice/Door/DoorMonitor.cs @@ -0,0 +1,447 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Reflection; +using System.Windows.Forms; +using SimpleLite; + +namespace StandardScene.ExtendDevice.Door +{ + public partial class DoorMonitor : Form + { + private static DoorMonitor _instance = null; + private static readonly object _lock = new object(); + + private int _doorHoverIndex = -1; + private (int ControllerIndex, int DoorIndex)? _selectedDoor = null; + + private static readonly Color RowEvenColor = Color.FromArgb(250, 250, 252); + private static readonly Color RowOddColor = Color.White; + private static readonly Color RowHighlightColor = Color.FromArgb(230, 240, 255); + private static readonly Color TextRegularColor = Color.FromArgb(68, 68, 68); + private static readonly Color TextHighlightColor = Color.FromArgb(51, 51, 51); + private static readonly Color StateOpenColor = Color.FromArgb(40, 167, 69); + private static readonly Color StateClosedColor = Color.FromArgb(220, 53, 69); + + /// + /// 获取单例实例 + /// + public static DoorMonitor Instance + { + get + { + if (_instance == null || _instance.IsDisposed) + { + lock (_lock) + { + if (_instance == null || _instance.IsDisposed) + { + _instance = new DoorMonitor(); + } + } + } + return _instance; + } + } + + /// + /// 私有构造函数,确保单例模式 + /// + private DoorMonitor() + { + InitializeComponent(); + } + + /// + /// 确保刷新定时器处于激活状态,并立即刷新一次 + /// + public void EnsureRefreshActive() + { + if (IsDisposed) + { + return; + } + + if (!timerRefresh.Enabled) + { + timerRefresh.Start(); + } + + RefreshDoorList(); + } + + private void DoorMonitor_Load(object sender, EventArgs e) + { + SetupListViewStyles(); + // 禁用系统的悬停/热跟踪高亮,避免鼠标移动时短暂出现默认遮罩 + doorListView.HoverSelection = false; + doorListView.HotTracking = false; + EnsureRefreshActive(); + } + + /// + /// 设置ListView的视觉样式 + /// + private void SetupListViewStyles() + { + doorListView.OwnerDraw = true; + doorListView.BackColor = Color.White; + doorListView.DrawItem += DoorListView_DrawItem; + doorListView.DrawSubItem += DoorListView_DrawSubItem; + doorListView.DrawColumnHeader += DoorListView_DrawColumnHeader; + doorListView.MouseMove += DoorListView_MouseMove; + doorListView.MouseLeave += DoorListView_MouseLeave; + + // 启用双缓冲 + typeof(Control)?.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic)? + .SetValue(doorListView, true, null); + } + + private void DoorListView_MouseMove(object sender, MouseEventArgs e) + { + var hoveredItem = doorListView.GetItemAt(e.X, e.Y); + int newIndex = hoveredItem?.Index ?? -1; + + if (_doorHoverIndex != newIndex) + { + _doorHoverIndex = newIndex; + doorListView.Invalidate(); + } + } + + private void DoorListView_MouseLeave(object sender, EventArgs e) + { + if (_doorHoverIndex != -1) + { + _doorHoverIndex = -1; + doorListView.Invalidate(); + } + } + + private void DoorListView_DrawItem(object sender, DrawListViewItemEventArgs e) + { + var isHighlighted = e.Item.Selected + || e.ItemIndex == _doorHoverIndex + || (doorListView.Focused && (e.State & ListViewItemStates.Focused) != 0); + + var backColor = isHighlighted + ? RowHighlightColor + : (e.ItemIndex % 2 == 0 ? RowEvenColor : RowOddColor); + + using (var brush = new SolidBrush(backColor)) + { + e.Graphics.FillRectangle(brush, e.Bounds); + } + + var textColor = isHighlighted ? TextHighlightColor : TextRegularColor; + + TextRenderer.DrawText(e.Graphics, e.Item.Text, e.Item.Font, e.Bounds, + textColor, + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.EndEllipsis); + + e.DrawFocusRectangle(); + } + + private void DoorListView_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) + { + var isHighlighted = e.Item.Selected + || e.ItemIndex == _doorHoverIndex + || (doorListView.Focused && (e.ItemState & ListViewItemStates.Focused) != 0); + + var backColor = isHighlighted + ? RowHighlightColor + : (e.ItemIndex % 2 == 0 ? RowEvenColor : RowOddColor); + + using (var brush = new SolidBrush(backColor)) + { + e.Graphics.FillRectangle(brush, e.Bounds); + } + + Color textColor = TextRegularColor; + + // 如果是状态列,根据状态设置颜色 + if (e.ColumnIndex == 2) // 状态列 + { + var stateText = e.SubItem.Text; + if (stateText == "打开") + { + textColor = StateOpenColor; + } + else if (stateText == "关闭") + { + textColor = StateClosedColor; + } + } + // 如果是目标控制列,按目标状态着色 + else if (e.ColumnIndex == 3) // 控制目标列 + { + var targetText = e.SubItem.Text; + if (targetText == "开") + { + textColor = StateOpenColor; + } + else + { + textColor = StateClosedColor; + } + } + // 其他列使用默认颜色 + else + { + textColor = isHighlighted ? TextHighlightColor : TextRegularColor; + } + + TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font, e.Bounds, + textColor, + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.EndEllipsis); + } + + private void DoorListView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) + { + e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(245, 247, 250)), e.Bounds); + + e.Graphics.DrawLine(new Pen(Color.FromArgb(220, 220, 220)), + e.Bounds.Left, e.Bounds.Bottom - 1, e.Bounds.Right, e.Bounds.Bottom - 1); + + TextRenderer.DrawText(e.Graphics, e.Header.Text, + new Font("微软雅黑", 10.5F, FontStyle.Bold), + e.Bounds, Color.FromArgb(68, 68, 68), + TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.HorizontalCenter); + } + + /// + /// 刷新门列表 + /// + private void RefreshDoorList() + { + doorListView.Items.Clear(); + + // 保存当前选中的门 + (int ControllerIndex, int DoorIndex)? previousSelected = _selectedDoor; + _selectedDoor = null; + labelDoorInfo.Text = "请选择要控制的门"; + + // 获取所有门控制器 + var mission = SimpleProject.proj?.Missions?.OfType().FirstOrDefault(); + if (mission == null) + { + return; + } + + var doorSnapshot = mission.GetDoorMonitorSnapshot(); + if (doorSnapshot.Count == 0) + { + return; + } + + ListViewItem selectedItem = null; + + foreach (var door in doorSnapshot) + { + var stateText = door.State == DoorState.Open ? "打开" : door.State == DoorState.Closed ? "关闭" : "未知"; + var targetText = door.Target ? "开" : "关"; + var sourceText = door.Source == DoorMission.ControlSource.Manual ? "手动" : "自动"; + var remainText = door.Source == DoorMission.ControlSource.Manual && door.ManualRemainingSeconds.HasValue + ? Math.Ceiling(door.ManualRemainingSeconds.Value).ToString() + : "-"; + var carsText = door.CarsInArea.Count > 0 ? string.Join(", ", door.CarsInArea) : "无"; + + var item = new ListViewItem(door.ControllerIndex.ToString()); + item.SubItems.Add(door.DoorIndex.ToString()); + item.SubItems.Add(stateText); + item.SubItems.Add(targetText); + item.SubItems.Add(sourceText); + item.SubItems.Add(remainText); + item.SubItems.Add(carsText); + item.SubItems.Add(door.ControlAddress.ToString()); + item.SubItems.Add(door.OpenStatusAddress.ToString()); + item.Tag = (door.ControllerIndex, door.DoorIndex); + item.UseItemStyleForSubItems = false; + doorListView.Items.Add(item); + + // 如果之前选中的门存在,恢复选中状态 + if (previousSelected.HasValue && + previousSelected.Value.ControllerIndex == door.ControllerIndex && + previousSelected.Value.DoorIndex == door.DoorIndex) + { + selectedItem = item; + } + } + + // 恢复选中状态 + if (selectedItem != null) + { + selectedItem.Selected = true; + selectedItem.EnsureVisible(); + doorListView_SelectedIndexChanged(doorListView, EventArgs.Empty); + } + } + + /// + /// 门列表选择改变 + /// + private void doorListView_SelectedIndexChanged(object sender, EventArgs e) + { + if (doorListView.SelectedItems.Count > 0) + { + var tag = doorListView.SelectedItems[0].Tag; + if (tag != null && tag is ValueTuple) + { + var doorInfo = (ValueTuple)tag; + _selectedDoor = doorInfo; + labelDoorInfo.Text = $"控制器编码: {doorInfo.Item1}, 门编码: {doorInfo.Item2}"; + + // 根据占用状态决定关闭按钮是否可用 + var mission = SimpleProject.proj?.Missions?.OfType().FirstOrDefault(); + var carsInArea = mission?.GetCarsInArea(doorInfo.Item1, doorInfo.Item2) ?? Array.Empty(); + btnClose.Enabled = carsInArea.Count == 0; + } + else + { + _selectedDoor = null; + labelDoorInfo.Text = "请选择要控制的门"; + btnClose.Enabled = true; + } + } + else + { + _selectedDoor = null; + labelDoorInfo.Text = "请选择要控制的门"; + btnClose.Enabled = true; + } + } + + /// + /// 打开门 + /// + private void btnOpen_Click(object sender, EventArgs e) + { + if (!_selectedDoor.HasValue) + { + MessageBox.Show("请先选择要控制的门", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + try + { + var mission = SimpleProject.proj?.Missions?.OfType().FirstOrDefault(); + if (mission == null) + { + MessageBox.Show("未找到门控进程", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + var (controllerIndex, doorIndex) = _selectedDoor.Value; + // 手动控制:默认保持10秒 + mission.SetManualDoorControl(controllerIndex, doorIndex, true); + MessageBox.Show($"控制器 {controllerIndex} 门 {doorIndex} 已设置手动打开(10秒)", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show($"设置门打开目标失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 关闭门 + /// + private void btnClose_Click(object sender, EventArgs e) + { + if (!_selectedDoor.HasValue) + { + MessageBox.Show("请先选择要控制的门", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + try + { + var mission = SimpleProject.proj?.Missions?.OfType().FirstOrDefault(); + if (mission == null) + { + MessageBox.Show("未找到门控进程", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + var (controllerIndex, doorIndex) = _selectedDoor.Value; + // 车辆占用时禁止手动关闭 + var success = mission.SetManualDoorControl(controllerIndex, doorIndex, false); + if (!success) + { + MessageBox.Show("门存在车辆占用,禁止手动关闭。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + MessageBox.Show($"控制器 {controllerIndex} 门 {doorIndex} 已设置手动关闭(10秒)", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + MessageBox.Show($"设置门关闭目标失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 清空车辆占用 + /// + private void btnClearCars_Click(object sender, EventArgs e) + { + if (!_selectedDoor.HasValue) + { + MessageBox.Show("请先选择要清空占用的门", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + try + { + var mission = SimpleProject.proj?.Missions?.OfType().FirstOrDefault(); + if (mission == null) + { + MessageBox.Show("未找到门控进程", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + var (controllerIndex, doorIndex) = _selectedDoor.Value; + mission.ClearCarsInArea(controllerIndex, doorIndex); + MessageBox.Show($"控制器 {controllerIndex} 门 {doorIndex} 已清空占用", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + RefreshDoorList(); + } + catch (Exception ex) + { + MessageBox.Show($"清空占用失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 定时刷新 + /// + private void timerRefresh_Tick(object sender, EventArgs e) + { + RefreshDoorList(); + } + + /// + /// 窗体关闭事件 + /// + private void DoorMonitor_FormClosing(object sender, FormClosingEventArgs e) + { + if (e.CloseReason == CloseReason.UserClosing) + { + timerRefresh.Stop(); + e.Cancel = true; + this.Visible = false; + } + } + + protected override void OnVisibleChanged(EventArgs e) + { + base.OnVisibleChanged(e); + if (Visible) + { + EnsureRefreshActive(); + } + else + { + timerRefresh.Stop(); + } + } + } +} diff --git a/StandardScene.Core/ExtendDevice/Door/DoorMonitor.resx b/StandardScene.Core/ExtendDevice/Door/DoorMonitor.resx new file mode 100644 index 0000000..4391a28 --- /dev/null +++ b/StandardScene.Core/ExtendDevice/Door/DoorMonitor.resx @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + diff --git a/StandardScene.Core/ExtendDevice/Door/DoorTypeAttribute.cs b/StandardScene.Core/ExtendDevice/Door/DoorTypeAttribute.cs new file mode 100644 index 0000000..65fa4a9 --- /dev/null +++ b/StandardScene.Core/ExtendDevice/Door/DoorTypeAttribute.cs @@ -0,0 +1,25 @@ +using System; + +namespace StandardScene.ExtendDevice.Door +{ + /// + /// 门控制器类型特性,用于标记门控制器类型 + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] + public class DoorTypeAttribute : Attribute + { + /// + /// 类型名称 + /// + public string Name { get; } + + /// + /// 构造函数 + /// + /// 类型名称 + public DoorTypeAttribute(string name) + { + Name = name ?? throw new ArgumentNullException(nameof(name)); + } + } +} diff --git a/StandardScene.Core/Heuristic.cs b/StandardScene.Core/Heuristic.cs new file mode 100644 index 0000000..94a4f56 --- /dev/null +++ b/StandardScene.Core/Heuristic.cs @@ -0,0 +1,41 @@ +using SimpleCore.Compiler; +using SimpleCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Numerics; +using SimpleCore.Library; +using SimpleCore.Traffic; + +namespace StandardScene +{ + public class Heuristic:HeuristicsContainer + { + //[HeuristicDef] + //public bool NoPassShelf(SegmentPlan.SearchStat stat) + //{ + // if (stat.sequence.Length > 2 && + // SimpleLib.GetSite(stat.sequence[stat.sequence.Length - 2]).fields.ContainsKey("Shelf")) + // return false; + // return true; + //} + + [HeuristicDef] + public bool ToDestConstraint(SegmentPlan.SearchStat stat) + { + if (plan.Source.fields.TryGetValue("constraint", out var field)) + { + foreach (var constraint in field.Split('|')) + { + var (dstStr, idStr, _) = constraint.Split(':'); + if (plan.Destination.id.ToString() == dstStr && stat.CurrentSite.id.ToString() == idStr) + return false; + } + } + + return true; + } + } +} diff --git a/StandardScene.Core/InterLock/AbstractInterlockMission.cs b/StandardScene.Core/InterLock/AbstractInterlockMission.cs new file mode 100644 index 0000000..15484be --- /dev/null +++ b/StandardScene.Core/InterLock/AbstractInterlockMission.cs @@ -0,0 +1,413 @@ +using SimpleCore.Traffic; +using System; +using System.Collections.Generic; +using System.Linq; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore.Library; +using SimpleCore.PropType; +using SimpleCore; +using System.Threading; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleLite; +using System.Windows.Forms; +using Newtonsoft.Json; + +namespace StandardScene.InterLock +{ + public class MyDictionary where TItem : new() + { + private readonly Dictionary dictionary = new(); + + public TItem this[TKey key] + { + get + { + if (dictionary.TryGetValue(key, out var item)) return item; + var newItem = new TItem(); + dictionary[key] = newItem; + return newItem; + } + set => dictionary[key] = value; + } + + public ICollection Keys + { + get => dictionary.Keys; + } + } + + public class AbstractInterlockMission : Mission + { + public bool GetAskEnter(int siteId) + { + if (!SiteFilter(siteId)) return false; + lock (sync) return askEnter[siteId]; + } + + public void SetAllowEnter(int siteId, bool value) + { + if (!SiteFilter(siteId)) return; + lock (sync) allowEnter[siteId] = value; + } + + public bool GetAskExit(int siteId) + { + if (!SiteFilter(siteId)) return false; + lock (sync) return askExit[siteId]; + } + + public void SetAllowExit(int siteId, bool value) + { + if (!SiteFilter(siteId)) return; + lock (sync) allowExit[siteId] = value; + } + + public bool GetReportLeave(int siteId) + { + if (!SiteFilter(siteId)) return false; + lock (sync) return reportLeave[siteId]; + } + + public void SetAcknowledgeLeave(int siteId, bool value) + { + if (!SiteFilter(siteId)) return; + lock (sync) acknowledgeLeave[siteId] = value; + } + + public int GetInSiteCarId(int siteId) + { + if (!SiteFilter(siteId)) return -1; + lock (sync) return inSiteCarId[siteId]; + } + + // 请求进站(写) + [JsonIgnore] private readonly MyDictionary askEnter = new(); + // 允许进站(读) + [JsonIgnore] private readonly MyDictionary allowEnter = new(); + + // 请求离站(写) + [JsonIgnore] private readonly MyDictionary askExit = new(); + // 允许离站(读) + [JsonIgnore] private readonly MyDictionary allowExit = new(); + + // 报告离开(写) + [JsonIgnore] private readonly MyDictionary reportLeave = new(); + // 确认离开(读) + [JsonIgnore] private readonly MyDictionary acknowledgeLeave = new(); + + // 站点上所在的小车(状态) + [JsonIgnore] private readonly MyDictionary inSiteCarId = new(); + + [JsonIgnore] private object sync = new(); + + public virtual string GetSiteDisplay(int siteId) + { + return $"{siteId}"; + } + + /// + /// 返回为true的站点,是当前互锁机制关注的站点 + /// + /// + /// + public virtual bool SiteFilter(int siteId) + { + return true; + } + + /// + /// 互锁站点进站条件 + /// + /// + /// + /// + private bool EnterCondition(AbstractCar car, int siteId) + { + // todo: 是否考虑提前更多申请进入,加快节拍? + if (car.status.pendingLocks.First() != siteId) return false; + //DateTime startTime = DateTime.Now; + //bool validTime = false; + + lock (sync) + { + // if (askEnter[siteId] == false) + // { + // Diagnosis.Post($"{car.name}({car.id}) 申请进站 {GetSiteDisplay(siteId)}", "intertime", true); + // //startTime = DateTime.Now; + // //validTime = true; + // } + askEnter[siteId] = true; + if (reportLeave[siteId]) + { + Diagnosis.Post($"{car.name}({car.id})未被准许进站{GetSiteDisplay(siteId)},前车离开信号未被确认", "interlock", true); + return false; + } + + if (allowEnter[siteId]) + { + Diagnosis.Post($"{car.name}({car.id})准许进站{GetSiteDisplay(siteId)}", "interlock", true); + // Diagnosis.Post($"{car.name}({car.id}) 准许进站 {GetSiteDisplay(siteId)}", "intertime", true); + lock (sync) askEnter[siteId] = false; + return true; + } + Diagnosis.Post($"{car.name}({car.id})未被准许进站{GetSiteDisplay(siteId)}", "interlock", true); + return false; + } + } + + /// + /// 互锁站点离站条件 + /// + /// + /// + /// + private bool ExitCondition(AbstractCar car, int siteId) + { + lock (sync) + { + askExit[siteId] = true; + + if (allowExit[siteId]) + { + Diagnosis.Post($"{car.name}({car.id})准许离站{GetSiteDisplay(siteId)}", "interlock", true); + askExit[siteId] = false; + return true; + } + Diagnosis.Post($"{car.name}({car.id})未被准许离站{GetSiteDisplay(siteId)}", "interlock", true); + return false; + } + } + + /// + /// 告知对方设备小车离开,直到对方设备确认收到离开信号 + /// + /// + /// + private void LeaveEvent(AbstractCar car, int siteId) + { + new Thread(() => + { + while (true) + { + Thread.Sleep(100); + lock (sync) + { + if (acknowledgeLeave[siteId]) // 已经确认小车离开 + { + Diagnosis.Post($"{GetSiteDisplay(siteId)}确认{car.name}({car.id})离开", "interlock", true); + break; + } + } + Diagnosis.Post($"{car.name}({car.id})告知离开{GetSiteDisplay(siteId)}", "interlock", true); + lock (sync) reportLeave[siteId] = true; + } + + lock (sync) reportLeave[siteId] = false; + }).Start(); + } + + [JsonIgnore] private bool enableSimulation = false; + [JsonIgnore] public bool started = false; + [JsonIgnore] public Thread showT; + + [MethodMember(Name = "启动进程", Description = "处理安全互锁")] + public override void Execute() + { + if (started) return; + // started = true; + status.status = "已启动"; + + + + showT = new Thread(() => + { + while (true) + { + Thread.Sleep(300); + try + { + if (fields.TryGetValue("enableSimulation", out var userEnableSimulation)) + enableSimulation = bool.Parse(userEnableSimulation); + foreach (var site in SimpleLib.GetAllSites().Where(ss => SiteFilter(ss.id))) + { + var carId = -1; + foreach (var car in SimpleLib.GetAllCars()) + { + lock (TrafficControl.syncTrafficSequence) + { + if (car.status.holdingLocks.Length == 1 && car.status.holdingLocks[0] == site.id) + { + carId = car.id; + break; + } + } + } + + lock (sync) inSiteCarId[site.id] = carId; + } + + // if (!onDisplay) continue; + var painter = SimpleMonitor.getPainter("DemoInterlockMission"); + painter.clear(); + if (!onDisplay) continue; + //string str; + //lock (sync) + //{ + // var keys = askEnter.Keys.Concat(askExit.Keys).Concat(reportLeave.Keys).ToHashSet() + // .OrderBy(kk => int.Parse(SimpleLib.GetSite(kk).fields["ASNub"])).ToList(); + // str = $"站点\t\t请求进站\t允许进站\t请求离站\t允许离站\t上报离开\t确认离开\t小车id\n" + + // $"{string.Join("\n", keys.Select(key => + // $"{GetSiteDisplay(key)}\t{askEnter[key]}\t\t{allowEnter[key]}\t\t" + + // $"{askExit[key]}\t\t{allowExit[key]}\t\t" + + // $"{reportLeave[key]}\t\t{acknowledgeLeave[key]}\t\t{inSiteCarId[key]}"))}"; + //} + //painter.drawTextFixed(str, new SolidBrush(Color.Black), VirtualPainter.DrawPosition.RightTop, Color.AliceBlue); + } + catch (Exception ex) + { + Diagnosis.Post(ExceptionFormatter.FormatEx(ex), "interlock", true); + } + } + }) { Name = "InterlockMission" }; + + showT.Start(); + + + } + + [JsonIgnore] private bool onDisplay = true; + + [MethodMember(Name = "切换显示", Description = "是否在右下角显示")] + public void SwitchAlwaysOnDisplay() + { + onDisplay = !onDisplay; + } + + private async void SimButton(string title, MyDictionary toManipulate) + { + //if (!enableSimulation) return; + G.pushStatus("请选择站点"); + var pt = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + var site = SimpleLib.GetSite(pt.site); + if (SiteFilter(site.id)) + { + var vv = await Program.UI.Input("请输入true/false", title, "true"); + if (vv == null || !bool.TryParse(vv, out var allow)) + { + MessageBox.Show("输入错误"); + return; + } + lock (sync) toManipulate[site.id] = allow; + } + } + + [MethodMember(Name = "模拟准许进站")] + public void SimAllowEnter() + { + SimButton("模拟准许进入状态", allowEnter); + } + + [MethodMember(Name = "模拟准许离站")] + public void SimAllowExit() + { + SimButton("模拟准许离站状态", allowExit); + } + + [MethodMember(Name = "模拟确认离开")] + public void SimLeaveNoted() + { + SimButton("模拟确认离开状态", acknowledgeLeave); + } + + [MethodMember(Name = "模拟发送离开")] + public async void SimReportLeave() + { + // if (!enableSimulation) return; + G.pushStatus("请选择站点"); + var pt = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + var site = SimpleLib.GetSite(pt.site); + if (SiteFilter(site.id)) + { + lock (sync) reportLeave[site.id] = true; + } + new Thread(() => + { + var t1 = DateTime.Now; + while (true) + { + Thread.Sleep(100); + lock (sync) + { + var deltaT = (DateTime.Now - t1).TotalSeconds; + if (acknowledgeLeave[site.id]||deltaT>5) // 已经确认小车离开 + { + Diagnosis.Post($"{GetSiteDisplay(site.id)} 停止发送离开", "simlikai", true); + break; + } + } + Diagnosis.Post($"模拟告知离开{GetSiteDisplay(site.id)}", "simlikai", true); + lock (sync) reportLeave[site.id] = true; + } + + lock (sync) reportLeave[site.id] = false; + }).Start(); + // SimButton("模拟确认离开状态", reportLeave); + } + + public AbstractInterlockMission() + { + Diagnosis.Post($"InterlockMechanism loaded", "interlock", true); + TrafficControl.BeforeLock += (car, siteId) => + { + if (SiteFilter(siteId)) // EnterCondition + return EnterCondition(car, siteId); + + var site = SimpleLib.GetSite(siteId); + if (site.fields.ContainsKey("PreAskEnterSite") && int.TryParse(site.fields["PreAskEnterSite"], out int PreAskEnterSiteId)) + { + var presite = SimpleLib.GetSite(PreAskEnterSiteId); + if (presite != null && SiteFilter(PreAskEnterSiteId)) + { + Diagnosis.Post($"{car.name}({car.id})在{siteId}-{GetSiteDisplay(siteId)},提前申请 {PreAskEnterSiteId} 的请求进入", "interlock", true); + askEnter[PreAskEnterSiteId] = true; + } + + } + // ExitCondition + lock (TrafficControl.syncTrafficSequence) + if (!car.status.holdingLocks.Any(ss => SiteFilter(ss))) + return true; + + + var isNeighbor = false; + var lockSiteId = -1; + foreach (var trackId in site.relatedTracks) + { + var track = SimpleLib.GetTrack(trackId); + if (SiteFilter(track.siteA)) + { + isNeighbor = true; + lockSiteId = track.siteA; + break; + } + + if (SiteFilter(track.siteB)) + { + isNeighbor = true; + lockSiteId = track.siteB; + break; + } + } + + return !isNeighbor || ExitCondition(car, lockSiteId); + }; + TrafficControl.AfterLeave += (car, siteId) => + { + if (SiteFilter(siteId)) LeaveEvent(car, siteId); + }; + } + } +} diff --git a/StandardScene.Core/InterLock/TrafficInterlockMission.cs b/StandardScene.Core/InterLock/TrafficInterlockMission.cs new file mode 100644 index 0000000..2ff03be --- /dev/null +++ b/StandardScene.Core/InterLock/TrafficInterlockMission.cs @@ -0,0 +1,167 @@ +using LessokajiWeaverUtilities.Utilities; +using LoopViewerApp; +using Newtonsoft.Json; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using SimpleCore.PropType; +using SimpleCore.Traffic; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Windows.Forms; + +namespace StandardScene.InterLock +{ + [MissionType(Name = "交通管制", editor = typeof(TrafficInterlockMission))] + [I18N.DocumentTranslation(Name = "Traffic Mission", locale = "en")] + public class TrafficInterlockMission : Mission + { + public static List TrafficAreaList { get; set; } = new List(); + + public TrafficInterlockMission() + { + TrafficControl.BeforeLock += (car, siteId) => + { + return EnterArea(car, siteId); + }; + + TrafficControl.AfterLeave += (car, siteId) => + { + LeaveArea(car, siteId); + }; + } + + [MethodMember(Name = "启动进程", Description = "开始交通监控")] + public void StartTrafficControl() + { + if (InitTrafficConfig()) { status.status = "已启动"; } + } + + [MethodMember(Name = "停止进程", Description = "停止交通监控")] + public void StopTrafficControl() + { + status.status = "已停止"; + } + + [MethodMember(Name = "查看管制区")] + public void ShowViewer() + { + var viewer = new TrafficInterlockViewer(); + viewer.Show(); + } + + /// + /// 初始化交管配置文件 + /// + /// + private bool InitTrafficConfig() + { + try + { + string ConfigPath = Path.Combine(Application.StartupPath, "Config/traffic.json"); + + if (File.Exists(ConfigPath)) + { + TrafficAreaList = JsonConvert.DeserializeObject>(File.ReadAllText(ConfigPath)); + + return true; + } + + return false; + } + catch (Exception ex) + { + Console.WriteLine("初始化交管配置文件失败: " + ex.Message); return false; + } + } + + /// + /// 判断小车是否可以进入区域 + /// + /// + /// + /// + public bool EnterArea(AbstractCar car, int siteId) + { + var TrafficAreas = TrafficAreaList.FindAll(area => area.SiteList.Contains(siteId) && area.IsEnable); + + if (TrafficAreas.Count == 0) { return true; } + + if (!TrafficAreas.Exists(t => t.IsOccupy && t.ControllerName != car.id.ToString())) + { + lock (TrafficAreaList) + { + TrafficAreas.ForEach(t => { t.IsOccupy = true; t.ControllerName = car.id.ToString(); }); + } + + Console.WriteLine($"小车 {car.id} 进入了交管区域 {string.Join(",", TrafficAreas.Select(t => t.AreaName))}"); + + return true; + } + + return false; + } + + /// + /// 离开区域 + /// + /// + /// + /// + public bool LeaveArea(AbstractCar car, int siteId) + { + var TrafficAreas = TrafficAreaList.FindAll(area => area.SiteList.Contains(siteId) && area.IsEnable); + + if (TrafficAreas.Count == 0) { return true; } + + foreach (var item in TrafficAreas) + { + var Sites = SimpleLib.GetAllSites().Where(s => item.SiteList.Contains(s.id)).ToList(); + + if (!Sites.Exists(t => t.status.owner == car.id)) + { + lock (TrafficAreaList) + { + item.ControllerName = string.Empty; item.IsOccupy = false; + } + + Console.WriteLine($"小车 {car.id} 离开了交管区域 {item.AreaName}"); + } + } + + return true; + } + } + + public class TrafficArea + { + /// + /// 区域名称 + /// + public string AreaName { get; set; } + + /// + /// 区域站点集合 + /// + public List SiteList { get; set; } + + /// + /// 控制权 + /// + [JsonIgnore] + public string ControllerName { get; set; } + + /// + /// 是否被占用 + /// + [JsonIgnore] + public bool IsOccupy { get; set; } + + /// + /// 是否启用 + /// + public bool IsEnable { get; set; } + } +} diff --git a/StandardScene.Core/InterLock/TrafficInterlockViewer.Designer.cs b/StandardScene.Core/InterLock/TrafficInterlockViewer.Designer.cs new file mode 100644 index 0000000..e4302aa --- /dev/null +++ b/StandardScene.Core/InterLock/TrafficInterlockViewer.Designer.cs @@ -0,0 +1,325 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace LoopViewerApp +{ + partial class TrafficInterlockViewer + { + private System.ComponentModel.IContainer components = null; + + private ListView lstTasks; + private GroupBox grpEdit; + + private ColumnHeader colAreaName; + private ColumnHeader colSites; + private ColumnHeader colControlRight; + private ColumnHeader colIsOccupied; + private ColumnHeader colIsEnabled; + + private Label lblAreaName; + private TextBox txtAreaName; + private Label lblStationIds; + private TextBox txtStationIds; + private Label lblControlRight; + private TextBox txtControlRight; + private Label lblIsOccupied; + private CheckBox chkIsOccupied; + private Label lblIsEnabled; + private CheckBox chkIsEnabled; + private Label lblEditingHint; + private Button btnSave; + private Button btnRefresh; + private Button btnNew; + private Button btnDelete; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.lstTasks = new System.Windows.Forms.ListView(); + this.colAreaName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.colSites = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.colControlRight = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.colIsOccupied = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.colIsEnabled = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.grpEdit = new System.Windows.Forms.GroupBox(); + this.lblEditingHint = new System.Windows.Forms.Label(); + this.lblAreaName = new System.Windows.Forms.Label(); + this.txtAreaName = new System.Windows.Forms.TextBox(); + this.lblStationIds = new System.Windows.Forms.Label(); + this.txtStationIds = new System.Windows.Forms.TextBox(); + this.lblControlRight = new System.Windows.Forms.Label(); + this.txtControlRight = new System.Windows.Forms.TextBox(); + this.lblIsOccupied = new System.Windows.Forms.Label(); + this.chkIsOccupied = new System.Windows.Forms.CheckBox(); + this.lblIsEnabled = new System.Windows.Forms.Label(); + this.chkIsEnabled = new System.Windows.Forms.CheckBox(); + this.btnSave = new System.Windows.Forms.Button(); + this.btnRefresh = new System.Windows.Forms.Button(); + this.btnNew = new System.Windows.Forms.Button(); + this.btnDelete = new System.Windows.Forms.Button(); + this.grpEdit.SuspendLayout(); + this.SuspendLayout(); + // + // lstTasks + // + this.lstTasks.BackColor = System.Drawing.Color.White; + this.lstTasks.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.colAreaName, + this.colSites, + this.colControlRight, + this.colIsOccupied, + this.colIsEnabled}); + this.lstTasks.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(33)))), ((int)(((byte)(33))))); + this.lstTasks.FullRowSelect = true; + this.lstTasks.HideSelection = false; + this.lstTasks.Location = new System.Drawing.Point(12, 12); + this.lstTasks.Name = "lstTasks"; + this.lstTasks.OwnerDraw = true; + this.lstTasks.Size = new System.Drawing.Size(760, 320); + this.lstTasks.TabIndex = 0; + this.lstTasks.UseCompatibleStateImageBehavior = false; + this.lstTasks.View = System.Windows.Forms.View.Details; + this.lstTasks.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.lstTasks_DrawColumnHeader); + this.lstTasks.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.lstTasks_DrawItem); + this.lstTasks.DrawSubItem += new System.Windows.Forms.DrawListViewSubItemEventHandler(this.lstTasks_DrawSubItem); + this.lstTasks.SelectedIndexChanged += new System.EventHandler(this.lstTasks_SelectedIndexChanged); + // + // colAreaName + // + this.colAreaName.Text = "区域名称"; + this.colAreaName.Width = 140; + // + // colSites + // + this.colSites.Text = "区域站点集合"; + this.colSites.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.colSites.Width = 280; + // + // colControlRight + // + this.colControlRight.Text = "控制权"; + this.colControlRight.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.colControlRight.Width = 120; + // + // colIsOccupied + // + this.colIsOccupied.Text = "是否被占用"; + this.colIsOccupied.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.colIsOccupied.Width = 100; + // + // colIsEnabled + // + this.colIsEnabled.Text = "是否启用"; + this.colIsEnabled.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.colIsEnabled.Width = 100; + // + // grpEdit + // + this.grpEdit.Controls.Add(this.lblEditingHint); + this.grpEdit.Controls.Add(this.lblAreaName); + this.grpEdit.Controls.Add(this.txtAreaName); + this.grpEdit.Controls.Add(this.lblStationIds); + this.grpEdit.Controls.Add(this.txtStationIds); + this.grpEdit.Controls.Add(this.lblControlRight); + this.grpEdit.Controls.Add(this.txtControlRight); + this.grpEdit.Controls.Add(this.lblIsOccupied); + this.grpEdit.Controls.Add(this.chkIsOccupied); + this.grpEdit.Controls.Add(this.lblIsEnabled); + this.grpEdit.Controls.Add(this.chkIsEnabled); + this.grpEdit.Controls.Add(this.btnSave); + this.grpEdit.Controls.Add(this.btnRefresh); + this.grpEdit.Controls.Add(this.btnNew); + this.grpEdit.Controls.Add(this.btnDelete); + this.grpEdit.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Bold); + this.grpEdit.Location = new System.Drawing.Point(12, 345); + this.grpEdit.Name = "grpEdit"; + this.grpEdit.Size = new System.Drawing.Size(760, 165); + this.grpEdit.TabIndex = 1; + this.grpEdit.TabStop = false; + this.grpEdit.Text = "数据新增/编辑(点击表格行可在此查看并编辑该行数据)"; + // + // lblEditingHint + // + this.lblEditingHint.AutoSize = true; + this.lblEditingHint.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Bold); + this.lblEditingHint.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(120)))), ((int)(((byte)(215))))); + this.lblEditingHint.Location = new System.Drawing.Point(12, 125); + this.lblEditingHint.Name = "lblEditingHint"; + this.lblEditingHint.Size = new System.Drawing.Size(65, 19); + this.lblEditingHint.TabIndex = 0; + this.lblEditingHint.Text = "新增区域"; + // + // lblAreaName + // + this.lblAreaName.AutoSize = true; + this.lblAreaName.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblAreaName.Location = new System.Drawing.Point(12, 28); + this.lblAreaName.Name = "lblAreaName"; + this.lblAreaName.Size = new System.Drawing.Size(79, 20); + this.lblAreaName.TabIndex = 1; + this.lblAreaName.Text = "区域名称:"; + // + // txtAreaName + // + this.txtAreaName.Font = new System.Drawing.Font("微软雅黑", 10F); + this.txtAreaName.Location = new System.Drawing.Point(100, 24); + this.txtAreaName.Name = "txtAreaName"; + this.txtAreaName.Size = new System.Drawing.Size(200, 25); + this.txtAreaName.TabIndex = 2; + // + // lblStationIds + // + this.lblStationIds.AutoSize = true; + this.lblStationIds.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblStationIds.Location = new System.Drawing.Point(320, 28); + this.lblStationIds.Name = "lblStationIds"; + this.lblStationIds.Size = new System.Drawing.Size(79, 20); + this.lblStationIds.TabIndex = 3; + this.lblStationIds.Text = "站点集合:"; + // + // txtStationIds + // + this.txtStationIds.Font = new System.Drawing.Font("微软雅黑", 10F); + this.txtStationIds.Location = new System.Drawing.Point(418, 24); + this.txtStationIds.Name = "txtStationIds"; + this.txtStationIds.Size = new System.Drawing.Size(320, 25); + this.txtStationIds.TabIndex = 4; + // + // lblControlRight + // + this.lblControlRight.AutoSize = true; + this.lblControlRight.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblControlRight.Location = new System.Drawing.Point(12, 58); + this.lblControlRight.Name = "lblControlRight"; + this.lblControlRight.Size = new System.Drawing.Size(65, 20); + this.lblControlRight.TabIndex = 5; + this.lblControlRight.Text = "控制权:"; + // + // txtControlRight + // + this.txtControlRight.Font = new System.Drawing.Font("微软雅黑", 10F); + this.txtControlRight.Location = new System.Drawing.Point(100, 54); + this.txtControlRight.Name = "txtControlRight"; + this.txtControlRight.Size = new System.Drawing.Size(200, 25); + this.txtControlRight.TabIndex = 6; + // + // lblIsOccupied + // + this.lblIsOccupied.AutoSize = true; + this.lblIsOccupied.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblIsOccupied.Location = new System.Drawing.Point(320, 58); + this.lblIsOccupied.Name = "lblIsOccupied"; + this.lblIsOccupied.Size = new System.Drawing.Size(93, 20); + this.lblIsOccupied.TabIndex = 7; + this.lblIsOccupied.Text = "是否被占用:"; + // + // chkIsOccupied + // + this.chkIsOccupied.AutoSize = true; + this.chkIsOccupied.Font = new System.Drawing.Font("Segoe UI", 9F); + this.chkIsOccupied.Location = new System.Drawing.Point(418, 59); + this.chkIsOccupied.Name = "chkIsOccupied"; + this.chkIsOccupied.Size = new System.Drawing.Size(39, 19); + this.chkIsOccupied.TabIndex = 8; + this.chkIsOccupied.Text = "是"; + // + // lblIsEnabled + // + this.lblIsEnabled.AutoSize = true; + this.lblIsEnabled.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblIsEnabled.Location = new System.Drawing.Point(500, 58); + this.lblIsEnabled.Name = "lblIsEnabled"; + this.lblIsEnabled.Size = new System.Drawing.Size(79, 20); + this.lblIsEnabled.TabIndex = 9; + this.lblIsEnabled.Text = "是否启用:"; + // + // chkIsEnabled + // + this.chkIsEnabled.AutoSize = true; + this.chkIsEnabled.Checked = true; + this.chkIsEnabled.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkIsEnabled.Font = new System.Drawing.Font("Segoe UI", 9F); + this.chkIsEnabled.Location = new System.Drawing.Point(585, 59); + this.chkIsEnabled.Name = "chkIsEnabled"; + this.chkIsEnabled.Size = new System.Drawing.Size(39, 19); + this.chkIsEnabled.TabIndex = 10; + this.chkIsEnabled.Text = "是"; + // + // btnSave + // + this.btnSave.BackColor = System.Drawing.Color.LightBlue; + this.btnSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Bold); + this.btnSave.Location = new System.Drawing.Point(260, 118); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(140, 40); + this.btnSave.TabIndex = 12; + this.btnSave.Text = "保存"; + this.btnSave.UseVisualStyleBackColor = false; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // btnRefresh + // + this.btnRefresh.BackColor = System.Drawing.SystemColors.Control; + this.btnRefresh.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRefresh.Font = new System.Drawing.Font("微软雅黑", 11F); + this.btnRefresh.Location = new System.Drawing.Point(410, 118); + this.btnRefresh.Name = "btnRefresh"; + this.btnRefresh.Size = new System.Drawing.Size(140, 40); + this.btnRefresh.TabIndex = 13; + this.btnRefresh.Text = "刷新"; + this.btnRefresh.UseVisualStyleBackColor = false; + this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click); + // + // btnNew + // + this.btnNew.BackColor = System.Drawing.SystemColors.Control; + this.btnNew.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnNew.Font = new System.Drawing.Font("微软雅黑", 11F); + this.btnNew.Location = new System.Drawing.Point(560, 118); + this.btnNew.Name = "btnNew"; + this.btnNew.Size = new System.Drawing.Size(140, 40); + this.btnNew.TabIndex = 14; + this.btnNew.Text = "新增"; + this.btnNew.UseVisualStyleBackColor = false; + this.btnNew.Click += new System.EventHandler(this.btnNew_Click); + // + // btnDelete + // + this.btnDelete.BackColor = System.Drawing.SystemColors.Control; + this.btnDelete.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDelete.Font = new System.Drawing.Font("微软雅黑", 11F); + this.btnDelete.Location = new System.Drawing.Point(110, 118); + this.btnDelete.Name = "btnDelete"; + this.btnDelete.Size = new System.Drawing.Size(140, 40); + this.btnDelete.TabIndex = 11; + this.btnDelete.Text = "删除"; + this.btnDelete.UseVisualStyleBackColor = false; + this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); + // + // TrafficInterlockViewer + // + this.ClientSize = new System.Drawing.Size(784, 521); + this.Controls.Add(this.lstTasks); + this.Controls.Add(this.grpEdit); + this.Font = new System.Drawing.Font("微软雅黑", 9F); + this.MinimumSize = new System.Drawing.Size(700, 450); + this.Name = "TrafficInterlockViewer"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "交通联锁区域管理"; + this.grpEdit.ResumeLayout(false); + this.grpEdit.PerformLayout(); + this.ResumeLayout(false); + + } + } +} diff --git a/StandardScene.Core/InterLock/TrafficInterlockViewer.cs b/StandardScene.Core/InterLock/TrafficInterlockViewer.cs new file mode 100644 index 0000000..c8fb195 --- /dev/null +++ b/StandardScene.Core/InterLock/TrafficInterlockViewer.cs @@ -0,0 +1,370 @@ +using Newtonsoft.Json; +using StandardScene.InterLock; // 数据类型采用 TrafficInterlockMission 中的 TrafficArea +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Windows.Forms; + +namespace LoopViewerApp +{ + public partial class TrafficInterlockViewer : Form + { + /// -1 表示新增模式;>=0 表示正在编辑对应索引 + private int _editingIndex = -1; + + /// 选中行变化时是否允许加载到编辑区(避免在保存/取消时重复刷新) + private bool _allowLoadFromSelection = true; + + public TrafficInterlockViewer() + { + InitializeComponent(); + + if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) + return; + + try + { + RenderListView(); + ClearPanelInputs(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"TrafficInterlockViewer init error: {ex}"); + } + } + + #region 表格绘制(只读展示) + + private void lstTasks_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) + { + try + { + // 与 LoopViewer 一致:深蓝表头 + 白色加粗字体 + using (var backBrush = new SolidBrush(Color.FromArgb(63, 81, 181))) + using (var textBrush = new SolidBrush(Color.White)) + using (var font = new Font("微软雅黑", 9, FontStyle.Bold)) + { + e.Graphics.FillRectangle(backBrush, e.Bounds); + var sf = new StringFormat { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Near }; + var rect = e.Bounds; + rect.Inflate(-8, 0); + e.Graphics.DrawString(e.Header.Text, font, textBrush, rect, sf); + using (var pen = new Pen(Color.FromArgb(200, 200, 200))) + e.Graphics.DrawLine(pen, e.Bounds.Left, e.Bounds.Bottom - 1, e.Bounds.Right, e.Bounds.Bottom - 1); + } + } + catch + { + e.DrawBackground(); + e.DrawText(); + } + } + + private void lstTasks_DrawItem(object sender, DrawListViewItemEventArgs e) + { + // 由 DrawSubItem 统一绘制 + } + + private void lstTasks_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) + { + try + { + bool selected = e.Item.Selected; + Rectangle bounds = e.Bounds; + // 与 LoopViewer 一致:选中行蓝色强调,交替行背景,深灰文字 + Color selectedBack = Color.FromArgb(0, 120, 215); + Color selectedFore = Color.White; + Color evenBack = Color.White; + Color oddBack = Color.FromArgb(250, 251, 253); + Color normalFore = Color.FromArgb(33, 33, 33); + + if (selected) + { + using (var selBrush = new SolidBrush(selectedBack)) + e.Graphics.FillRectangle(selBrush, bounds); + } + else + { + using (var back = new SolidBrush(e.ItemIndex % 2 == 0 ? evenBack : oddBack)) + e.Graphics.FillRectangle(back, bounds); + } + + string text = e.SubItem?.Text ?? string.Empty; + Color fore = selected ? selectedFore : normalFore; + var textRect = bounds; + textRect.Inflate(-6, 0); + using (var font = new Font("微软雅黑", 9)) + TextRenderer.DrawText(e.Graphics, text, font, textRect, fore, TextFormatFlags.Left | TextFormatFlags.VerticalCenter); + } + catch + { + e.DrawBackground(); + e.DrawText(); + } + } + + #endregion + + #region 列表渲染与保存 + + private void RenderListView() + { + try + { + if (lstTasks == null) return; + _allowLoadFromSelection = false; + lstTasks.BeginUpdate(); + lstTasks.Items.Clear(); + foreach (var a in TrafficInterlockMission.TrafficAreaList) + { + var stationStr = a.SiteList != null && a.SiteList.Count > 0 ? string.Join(", ", a.SiteList) : ""; + + var lvi = new ListViewItem(new[] + { + a.AreaName ?? "", + stationStr, + a.ControllerName ?? "", + a.IsOccupy ? "是" : "否", + a.IsEnable ? "是" : "否" + }); + + lstTasks.Items.Add(lvi); + } + lstTasks.EndUpdate(); + _allowLoadFromSelection = true; + } + catch (Exception ex) + { + _allowLoadFromSelection = true; + System.Diagnostics.Debug.WriteLine($"RenderListView failed: {ex}"); + } + } + + private void SaveToConfig() + { + try + { + string configPath = Path.Combine(Application.StartupPath, "Config", "traffic.json"); + string dir = Path.GetDirectoryName(configPath); + if (!string.IsNullOrEmpty(dir) && !Directory.Exists(dir)) + Directory.CreateDirectory(dir); + File.WriteAllText(configPath, JsonConvert.SerializeObject(TrafficInterlockMission.TrafficAreaList, Formatting.Indented)); + } + catch (Exception ex) + { + MessageBox.Show("保存失败:" + ex.Message); + } + } + + #endregion + + #region 点击表格行 → 编辑区展示该行数据 + + private void lstTasks_SelectedIndexChanged(object sender, EventArgs e) + { + if (!_allowLoadFromSelection || lstTasks == null || lstTasks.SelectedIndices.Count == 0) return; + int idx = lstTasks.SelectedIndices[0]; + if (idx < 0 || idx >= TrafficInterlockMission.TrafficAreaList.Count) return; + _editingIndex = idx; + LoadAreaToPanel(TrafficInterlockMission.TrafficAreaList[idx]); + } + + #endregion + + #region 编辑区:加载 / 清空 + + private void LoadAreaToPanel(TrafficArea a) + { + if (a == null) return; + try + { + if (lblEditingHint != null) + lblEditingHint.Text = $"编辑:{a.AreaName}"; + if (txtAreaName != null) + txtAreaName.Text = a.AreaName ?? ""; + if (txtStationIds != null) + txtStationIds.Text = a.SiteList != null && a.SiteList.Count > 0 + ? string.Join(", ", a.SiteList) + : ""; + if (txtControlRight != null) + txtControlRight.Text = a.ControllerName ?? ""; + if (chkIsOccupied != null) + chkIsOccupied.Checked = a.IsOccupy; + if (chkIsEnabled != null) + chkIsEnabled.Checked = a.IsEnable; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"LoadAreaToPanel error: {ex}"); + } + } + + private void ClearPanelInputs() + { + try + { + _editingIndex = -1; + if (lblEditingHint != null) + lblEditingHint.Text = "新增区域"; + if (txtAreaName != null) + txtAreaName.Text = ""; + if (txtStationIds != null) + txtStationIds.Text = ""; + if (txtControlRight != null) + txtControlRight.Text = ""; + if (chkIsOccupied != null) + chkIsOccupied.Checked = false; + if (chkIsEnabled != null) + chkIsEnabled.Checked = true; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"ClearPanelInputs error: {ex}"); + } + } + + #endregion + + #region 解析站点集合字符串 "1,2,3" -> List + + private static List ParseStationIds(string text) + { + var list = new List(); + if (string.IsNullOrWhiteSpace(text)) return list; + foreach (var part in text.Split(new[] { ',', ';', ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries)) + { + if (int.TryParse(part.Trim(), out int id)) + list.Add(id); + } + return list; + } + + #endregion + + #region 按钮:保存 / 刷新 / 新增 / 删除 + + private void btnSave_Click(object sender, EventArgs e) + { + try + { + string areaName = txtAreaName?.Text?.Trim() ?? ""; + if (string.IsNullOrEmpty(areaName)) + { + MessageBox.Show("请输入区域名称。"); + return; + } + + var stationIds = ParseStationIds(txtStationIds?.Text ?? ""); + string controlRight = txtControlRight?.Text?.Trim() ?? ""; + bool isOccupied = chkIsOccupied?.Checked ?? false; + bool isEnabled = chkIsEnabled?.Checked ?? true; + + if (_editingIndex >= 0 && _editingIndex < TrafficInterlockMission.TrafficAreaList.Count) + { + lock (TrafficInterlockMission.TrafficAreaList) + { + var existing = TrafficInterlockMission.TrafficAreaList[_editingIndex]; + existing.AreaName = areaName; + existing.SiteList = stationIds; + existing.ControllerName = controlRight; + existing.IsOccupy = isOccupied; + existing.IsEnable = isEnabled; + } + } + else + { + lock (TrafficInterlockMission.TrafficAreaList) + { + TrafficInterlockMission.TrafficAreaList.Add(new TrafficArea + { + AreaName = areaName, + SiteList = stationIds, + ControllerName = controlRight, + IsOccupy = isOccupied, + IsEnable = isEnabled + }); + } + } + + SaveToConfig(); + RenderListView(); + ClearPanelInputs(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"btnSave_Click error: {ex}"); + MessageBox.Show("操作失败:" + ex.Message); + } + } + + private void btnRefresh_Click(object sender, EventArgs e) + { + try + { + RenderListView(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"btnRefresh_Click error: {ex}"); + } + } + + private void btnNew_Click(object sender, EventArgs e) + { + if (lstTasks != null) + lstTasks.SelectedIndices.Clear(); + ClearPanelInputs(); + // 进入新增模式:填写下方编辑区后点击“保存”即可新增一条数据 + } + + private void btnDelete_Click(object sender, EventArgs e) + { + try + { + if (lstTasks == null || lstTasks.SelectedIndices.Count == 0) + { + MessageBox.Show("请先在上方列表中选择要删除的区域。"); + return; + } + + var dialogResult = MessageBox.Show( + "确定要删除选中的区域吗?", + "确认删除", + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning); + + if (dialogResult != DialogResult.Yes) + return; + + var indices = lstTasks.SelectedIndices.Cast() + .OrderByDescending(i => i) + .ToList(); + + lock (TrafficInterlockMission.TrafficAreaList) + { + foreach (var idx in indices) + { + if (idx >= 0 && idx < TrafficInterlockMission.TrafficAreaList.Count) + { + TrafficInterlockMission.TrafficAreaList.RemoveAt(idx); + } + } + } + + SaveToConfig(); + RenderListView(); + ClearPanelInputs(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"btnDelete_Click error: {ex}"); + MessageBox.Show("删除失败:" + ex.Message); + } + } + + #endregion + } +} diff --git a/StandardScene.Core/InterLock/TrafficInterlockViewer.resx b/StandardScene.Core/InterLock/TrafficInterlockViewer.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/StandardScene.Core/InterLock/TrafficInterlockViewer.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/StandardScene.Core/LadderLogic.cs b/StandardScene.Core/LadderLogic.cs new file mode 100644 index 0000000..d1b4cb6 --- /dev/null +++ b/StandardScene.Core/LadderLogic.cs @@ -0,0 +1,107 @@ +using SimpleCore.Library; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; + + +namespace StandardScene +{ + public class LadderLogic + { + /// below defines some useful functions... + + private static ConcurrentDictionary pressedDT = new ConcurrentDictionary(); + // if active for millis, trigger once. + public static void TriggerOnce(bool active, int millis, Action trigger,int index=0, + [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) + { + var id = $"{sourceFilePath}:{sourceLineNumber+ index}"; + if (!active) + { + if (pressedDT.TryGetValue(id, out var pair1) && pair1.state != 1) + pressedDT.TryRemove(id, out _); + return; + } + if (pressedDT.TryGetValue(id, out var pair)) + { + if (pair.state != 0) return; + if ((DateTime.Now - pair.dt).TotalMilliseconds > millis) + { + pressedDT[id] = (pair.dt, 1); + Task.Run(() => + { + try + { + trigger(); + } + catch (Exception ex) + { + Diagnosis.Post($"Ex={ExceptionFormatter.FormatEx(ex)}", $"timed_trigger-{id}"); + pressedDT.TryRemove(id, out _); + } + + pressedDT[id] = (pair.dt, 2); + }); + } + } + else + pressedDT[id] = (DateTime.Now, 0); + } + + private static ConcurrentDictionary isochronous = new ConcurrentDictionary(); + public static object lockobj = new object(); + public static void IsochronousFork(Action action, + [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) + { + var id = $"{sourceFilePath}:{sourceLineNumber}"; + lock (lockobj) + { + if (isochronous.TryGetValue(id, out var calling) && calling) return; + isochronous[id] = true; + } + + Task.Run(() => + { + try + { + action(); + } + catch (Exception ex) + { + Diagnosis.Post($"Ex={ExceptionFormatter.FormatEx(ex)}", $"isochrounous_fork-{id}"); + } + isochronous[id] = false; + }); + } + + private static Dictionary keepTrack = new Dictionary(); + /// + /// including first call. + /// + /// + /// + /// action(T1 old) + public static void TriggerIfChanged(Func getter, Action action) + { + var id = getter.Method; + var val = getter.Invoke(); + if (keepTrack.TryGetValue(id, out var t) && t is T1 old) + { + if (val.Equals(old)) return; + action(old); + } + else action(default); + keepTrack[id] = val; + } + + + public static void FlipFlop(ref T1 target, int millis, params T1[] vs) + { + target = vs[(((long)DateTime.Now.TimeOfDay.TotalMilliseconds) / millis) % vs.Length]; + } + + } +} \ No newline at end of file diff --git a/StandardScene.Core/Model/ChargingSetting.cs b/StandardScene.Core/Model/ChargingSetting.cs new file mode 100644 index 0000000..a7a9931 --- /dev/null +++ b/StandardScene.Core/Model/ChargingSetting.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StandardScene.Model +{ + public class ChargingSetting + { + // 充电电量下限,表示设备充电时最低的电量限制 + public int CarMinBattery { get; set; } + + // 充电电量上限,表示设备充电时最高的电量限制 + public int CarMaxBattery { get; set; } + + // 充电安全电量,表示设备充电时的安全电量阈值,低于此值可能会影响设备的正常使用 + public int CarIdleChargeBattery { get; set; } + + // 充电电量时长,表示设备充电所需的时间长度 + public int CarIdleSecond { get; set; } + + // 允许任务打断的充电电量下限,表示在执行某些任务时,设备可以容忍的最低电量限制 + public int TaskAvailableBattery { get; set; } + + // 闲时充电,表示设备在空闲状态下是否进行充电 + public bool IsChargingDuringIdleTime { get; set; } + + + } +} diff --git a/StandardScene.Core/Model/EnvelopeSetting.cs b/StandardScene.Core/Model/EnvelopeSetting.cs new file mode 100644 index 0000000..735c974 --- /dev/null +++ b/StandardScene.Core/Model/EnvelopeSetting.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StandardScene.Model +{ + public class EnvelopeSetting + { + public string Name { get; set; } + public string Description { get; set; } + public string Value { get; set; } + } +} diff --git a/StandardScene.Core/Model/LoopTask.cs b/StandardScene.Core/Model/LoopTask.cs new file mode 100644 index 0000000..0c01994 --- /dev/null +++ b/StandardScene.Core/Model/LoopTask.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StandardScene.Model +{ + /// + /// 任务类别 + /// + public enum TaskKind + { + Loop, + BranchPoint, + JoinPoint + } + + /// + /// 任务启动类型:API/PLC/按钮盒/自动循环 + /// + public enum TaskStartType + { + Api, + Plc, + ButtonBox, + AutoLoop, + Charge + } + + public class LoopTask + { + /// + /// 任务唯一标识ID(自增) + /// + public int Id { get; set; } = 0; + + /// + /// 任务类别(枚举:循环/分流点/汇合点) + /// + public TaskKind Kind { get; set; } = TaskKind.Loop; + + /// + /// 当前点 ID(整数) + /// + public int CurrentStationId { get; set; } = -1; + + /// + /// 目标点 ID(整数) + /// + public int TargetStationId { get; set; } = -1; + + /// + /// 流量控制(整数,可代表信号级别或策略编号) + /// + public int TrafficControl { get; set; } = 0; + + /// + /// 优先级(整数) + /// + public int Priority { get; set; } = 1; + + /// + /// 是否为途径点(布尔) + /// + public bool IsViaPoint { get; set; } = false; + + /// + /// 启动类型(枚举:Api/Plc/ButtonBox/AutoLoop) + /// + public TaskStartType StartType { get; set; } = TaskStartType.AutoLoop; + + + public string[] tags = Array.Empty(); + } +} diff --git a/StandardScene.Core/Model/Map.cs b/StandardScene.Core/Model/Map.cs new file mode 100644 index 0000000..ec9ff92 --- /dev/null +++ b/StandardScene.Core/Model/Map.cs @@ -0,0 +1,241 @@ +using SimpleCore.PropType; +using SimpleCore; +using System.Collections.Generic; +using System.Dynamic; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using System.Numerics; +using System.Drawing; +using System; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Threading.Tasks; +using System.Windows.Forms; +using Newtonsoft.Json; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; + +namespace StandardScene.Model +{ + public class Map + { + public List Sites { get; set; } + public List Tracks { get; set; } + public List CircularArcTracks { get; set; } + public List BezierTracks { get; set; } + + public static Map GetMap() + { + var map = new Map + { + Sites = new List() + }; + Site[] allSites = SimpleLib.GetAllSites(); + foreach (var site in allSites) + { + dynamic theSite = new ExpandoObject(); + theSite.Id = ((Prop)site).id; + theSite.Name = ((Prop)site).name; + theSite.X = site.x; + theSite.Y = site.y; + theSite.Fields = new Dictionary(); + foreach (var kv in site.fields) + { + theSite.Fields.Add(kv.Key, kv.Value); + } + theSite.Type = theSite.Fields.ContainsKey("Standby") ? "standby" : theSite.Fields.ContainsKey("Charge") ? "charge" : theSite.Fields.ContainsKey("Shelf") ? "shelf" : "default"; + map.Sites.Add(theSite); + } + + map.Tracks = new List(); + map.CircularArcTracks = new List(); + map.BezierTracks = new List(); + var allTracks = SimpleLib.GetAllTracks(); + foreach (var track in allTracks) + { + switch (track) + { + case UITrack uiTrack: + { + dynamic theTrack = new ExpandoObject(); + theTrack.Id = uiTrack.id; + theTrack.A = uiTrack.siteA; + theTrack.B = uiTrack.siteB; + theTrack.Fields = new Dictionary(); + foreach (KeyValuePair kv in uiTrack.fields) + { + theTrack.Fields.Add(kv.Key, kv.Value); + } + + theTrack.Direction = uiTrack.direction switch + { + 1 => "a2b", + 2 => "b2a", + _ => "both" + }; + theTrack.Type = 0; + map.Tracks.Add(theTrack); + break; + } + case UICircularArcTrack circularArcTrack: + { + dynamic theTrack = new ExpandoObject(); + theTrack.Id = circularArcTrack.id; + theTrack.A = circularArcTrack.siteA; + theTrack.B = circularArcTrack.siteB; + theTrack.Fields = new Dictionary(); + foreach (var kv in circularArcTrack.fields) + { + theTrack.Fields.Add(kv.Key, kv.Value); + } + + theTrack.Direction = circularArcTrack.direction switch + { + 1 => "a2b", + 2 => "b2a", + _ => "both" + }; + //添加原点坐标、半径、开始角度、结束角度 + theTrack.Type = 1; + theTrack.CenterX = circularArcTrack.Arc.Center.X; + theTrack.CenterY = circularArcTrack.Arc.Center.Y; + theTrack.Radius = circularArcTrack.Arc.Radius; + theTrack.AngleStart = circularArcTrack.Arc.AngleStart; + theTrack.AngleEnd = circularArcTrack.Arc.AngleEnd; + //获取圆弧的控制点 + var controlPoint = ArcHelper.CalculateControlPoint( + circularArcTrack.Arc.PointStart.X, circularArcTrack.Arc.PointStart.Y, + circularArcTrack.Arc.PointEnd.X, circularArcTrack.Arc.PointEnd.Y, + circularArcTrack.Arc.Center.X, circularArcTrack.Arc.Center.Y, + circularArcTrack.Arc.Radius, + circularArcTrack.Arc.AngleStart, circularArcTrack.Arc.AngleEnd); + theTrack.ControlPointsX = controlPoint.X; + theTrack.ControlPointsY = controlPoint.Y; + map.CircularArcTracks.Add(theTrack); + break; + } + case UIBezierTrack bezierTrack: + { + dynamic theTrack = new ExpandoObject(); + theTrack.Id = bezierTrack.id; + theTrack.A = bezierTrack.siteA; + theTrack.B = bezierTrack.siteB; + theTrack.Fields = new Dictionary(); + foreach (var kv in bezierTrack.fields) + { + theTrack.Fields.Add(kv.Key, kv.Value); + } + + theTrack.Direction = bezierTrack.direction switch + { + 1 => "a2b", + 2 => "b2a", + _ => "both" + }; + //根据typeInfo获取控制点个数 + theTrack.Type = 2; + var array = bezierTrack.typeInfo.Split(','); + var num = int.Parse(array[1]);//获取控制点的个数(包括起点和终点) + var list = new List(); + for (var i = 0; i < num; i++) + { + //只记录中间的控制点 + if (i <= 0 || i >= num - 1) continue; + float x = float.Parse(array[2 + i * 2]); + float y = float.Parse(array[3 + i * 2]); + list.Add(new Vector2(x, y)); + } + theTrack.controlPoints = list; + map.BezierTracks.Add(theTrack); + break; + } + default: + break; + } + } + + return map; + } + } + + public class ArcHelper + { + /// + /// 获取圆弧控制点 + /// + /// + public static PointF CalculateControlPoint(float pointStartX, float pointStartY, float pointEndX, float pointEndY, float centerX, float centerY, float radius, float angleStart, float angleEnd) + { + PointF center = new PointF(centerX, centerY); + double startAngle = angleStart * 3.14159 / 180.0; + double endAngel = angleEnd * 3.14159 / 180.0; + if (angleStart > angleEnd)//如果起始角度小于结束角度就加上360度 + { + endAngel += 2 * 3.14159; + } + PointF midPoint = new PointF( + (float)(center.X + radius * Math.Cos((startAngle + endAngel) / 2)), + (float)(center.Y + radius * Math.Sin((startAngle + endAngel) / 2))); + return midPoint; + } + } + + public class LidarMap + { + public string LidarMapsBase64 { get; set; } + public float DistanceX { get; set; } + public float DistanceY { get; set; } + public float Ratio { get; set; } + private static readonly HttpClient hc = new HttpClient(); + public static async Task GetLidarMap() + { + var par = JsonConvert.DeserializeAnonymousType(await hc.GetStringAsync($"http://127.0.0.1:4321/getMapParameters"), + new { up = 0f, down = 0f, left = 0f, right = 0f, pt = 0 }); + var lengthWidthRatio =Math.Abs((par.right - par.left) / (par.up - par.down)); + var height = 1024;var width = 1024; + if (lengthWidthRatio > 1) + { + height = (int)(1024 / lengthWidthRatio); + } + else + { + width = (int)(1024 * lengthWidthRatio); + } + var mapBmp= new Bitmap((await hc.GetStreamAsync($"http://127.0.0.1:4321/getMapPng?width={width}&height={height}"))); + for(int x =0;x 1?Math.Abs(par.left-par.right)/1024: Math.Abs(par.up - par.down)/1024, + }; + } + + static string BitmapToBase64(Bitmap bmp, ImageFormat format) + { + using MemoryStream ms = new MemoryStream(); + bmp.Save(ms, format); // 保存格式可以是Png, Jpeg等 + byte[] imageBytes = ms.ToArray(); + string base64String = Convert.ToBase64String(imageBytes); + return base64String; + } + } +} diff --git a/StandardScene.Core/Model/MapStructure.cs b/StandardScene.Core/Model/MapStructure.cs new file mode 100644 index 0000000..01327ed --- /dev/null +++ b/StandardScene.Core/Model/MapStructure.cs @@ -0,0 +1,226 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StandardScene.Model +{ + + public class MapStructure + { + public FassMap Map { get; set; } + public List Nodes { get; set; } + public List Edges { get; set; } + public List Zones { get; set; } + public List Tags { get; set; } + } + + public class FassMap + { + public int Index { get; set; } + public string Id { get; set; } + public string Kind { get; set; } + public string Type { get; set; } + public Base Base { get; set; } + public Image Image { get; set; } + public List Extends { get; set; } + } + + public class Base + { + public bool Visible { get; set; } + public Size Size { get; set; } + public double GlobalAlpha { get; set; } + public int LineWidth { get; set; } + public List LineDash { get; set; } + public string StrokeStyle { get; set; } + public string FillStyle { get; set; } + public Center Center { get; set; } + } + + public class Size + { + public double W { get; set; } + public double H { get; set; } + } + + public class Center + { + public double X { get; set; } + public double Y { get; set; } + } + + public class Image + { + public bool Visible { get; set; } + public double GlobalAlpha { get; set; } + public string Src { get; set; } + public bool Origin { get; set; } + public bool Manual { get; set; } + public ManualPoint ManualPoint { get; set; } + public ManualSize ManualSize { get; set; } + } + + public class ManualPoint + { + public double X { get; set; } + public double Y { get; set; } + } + + public class ManualSize + { + public double W { get; set; } + public double H { get; set; } + } + + public class FassNode + { + public int Index { get; set; } + public string Id { get; set; } + public string Kind { get; set; } + public string Type { get; set; } + public NodeBase Base { get; set; } + public Code Code { get; set; } + public Name Name { get; set; } + public Image Image { get; set; } + public Lock Lock { get; set; } + public Data Data { get; set; } + public List Extends { get; set; } + } + + public class NodeBase + { + public bool Visible { get; set; } + public Point Point { get; set; } + public Size Size { get; set; } + public double GlobalAlpha { get; set; } + public int LineWidth { get; set; } + public List LineDash { get; set; } + public string StrokeStyle { get; set; } + public string FillStyle { get; set; } + public Center Center { get; set; } + } + + public class Point + { + public double X { get; set; } + public double Y { get; set; } + } + + public class Code + { + public bool Visible { get; set; } + public double GlobalAlpha { get; set; } + public string Font { get; set; } + public string FillStyle { get; set; } + public string Text { get; set; } + } + + public class Name + { + public bool Visible { get; set; } + public double GlobalAlpha { get; set; } + public string Font { get; set; } + public string FillStyle { get; set; } + public string Text { get; set; } + } + + public class Lock + { + public bool Enable { get; set; } + } + + public class Data + { + public string NodeId { get; set; } + public int SequenceId { get; set; } + public string NodeDescription { get; set; } + public bool Released { get; set; } + public NodePosition NodePosition { get; set; } + public List Actions { get; set; } + } + + public class NodePosition + { + public double X { get; set; } + public double Y { get; set; } + public string MapId { get; set; } + } + + public class FassAction + { + public bool Action0 { get; set; } + public string ActionId { get; set; } + public List ActionParameters { get; set; } + public string ActionType { get; set; } + public string BlockingType { get; set; } + public int SortNumber { get; set; } + } + + public class FassActionParameter + { + public bool Parameter0 { get; set; } + public string Key { get; set; } + public string Value { get; set; } + } + + public class Edge + { + public int Index { get; set; } + public string Id { get; set; } + public string Kind { get; set; } + public string Type { get; set; } + public EdgeBase Base { get; set; } + public Code Code { get; set; } + public Name Name { get; set; } + public Lock Lock { get; set; } + public EdgeData Data { get; set; } + public List Extends { get; set; } + } + + public class EdgeBase + { + public bool Visible { get; set; } + public Point Point { get; set; } + public Size Size { get; set; } + public double GlobalAlpha { get; set; } + public int LineWidth { get; set; } + public List LineDash { get; set; } + public string StrokeStyle { get; set; } + public string FillStyle { get; set; } + public Center Center { get; set; } + public bool IsOneway { get; set; } + public double Width { get; set; } + public Node StartNode { get; set; } + public Node EndNode { get; set; } + } + + public class EdgeData + { + public string EdgeId { get; set; } + public int SequenceId { get; set; } + public string EdgeDescription { get; set; } + public bool Released { get; set; } + public string StartNodeId { get; set; } + public string EndNodeId { get; set; } + public double MaxSpeed { get; set; } + public double MaxHeight { get; set; } + public double MinHeight { get; set; } + public double Orientation { get; set; } + public string OrientationType { get; set; } + public string Direction { get; set; } + public bool RotationAllowed { get; set; } + public double MaxRotationSpeed { get; set; } + public double Length { get; set; } + public Trajectory Trajectory { get; set; } + public List Actions { get; set; } + } + + public class Trajectory + { + public double Degree { get; set; } + public List KnotVector { get; set; } + public List ControlPoints { get; set; } + } +} diff --git a/StandardScene.Core/Model/MissionState.cs b/StandardScene.Core/Model/MissionState.cs new file mode 100644 index 0000000..9e83269 --- /dev/null +++ b/StandardScene.Core/Model/MissionState.cs @@ -0,0 +1,48 @@ + +using System; + +namespace StandardScene.Model +{ + public class MissionState + { + public string MissionId { get; set; } + public string CarCode {get; set; } + + public DateTime TriggerTime { get; set; } + + public enum MissionStateEnum + { + /// + /// 创建任务。 + /// + Created = 1, + + /// + /// 子任务启动。 + /// + Started = 2, + + /// + /// 子任务完成。 + /// + Finished = 3, + + /// + /// 子任务失败。 + /// + Failed = 4, + + /// + /// 子任务的取货完成,发生在Started之后。 + /// + Fetched = 5, + + /// + /// 子任务的放货完成,发生在Started之后。 + /// + Put = 6 + } + + public MissionStateEnum State { get; set; } + } +} diff --git a/StandardScene.Core/Model/PlanRulesSetting.cs b/StandardScene.Core/Model/PlanRulesSetting.cs new file mode 100644 index 0000000..147ebf7 --- /dev/null +++ b/StandardScene.Core/Model/PlanRulesSetting.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StandardScene.Model +{ + public class PlanRulesSetting + { + public string Name { get; set; } + public string Description { get; set; } + public string Value { get; set; } + + public string NodeId { get; set; } + } +} diff --git a/StandardScene.Core/Model/SimpleConfig.cs b/StandardScene.Core/Model/SimpleConfig.cs new file mode 100644 index 0000000..c10b49c --- /dev/null +++ b/StandardScene.Core/Model/SimpleConfig.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StandardScene.Model +{ + public class SimpleConfig + { + public string Autoload { get; set; } + public int Port { get; set; } + public string Ip { get; set; } + public bool AllowMultiple { get; set; } + } +} diff --git a/StandardScene.Core/Model/SimpleMap.cs b/StandardScene.Core/Model/SimpleMap.cs new file mode 100644 index 0000000..10dfa97 --- /dev/null +++ b/StandardScene.Core/Model/SimpleMap.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StandardScene.Model +{ + public class Configuration + { + public Conf conf { get; set; } + public Dictionary Missions { get; set; } + public Dictionary Maps { get; set; } + public Dictionary Sites { get; set; } + public Dictionary Tracks { get; set; } + public Dictionary Cars { get; set; } // Assuming Cars is an empty object + public Dictionary PrologScripts { get; set; } // Assuming PrologScripts is an empty object + + public Configuration() + { + // Initialize Conf with default values + conf = new Conf + { + PRICE_RANGE = 10000.0, + fields = new Dictionary(), + Car_UpdateInterval = 300, + Search_AllowDestOnRoute = false, + Search_RouteOnDestClearance = 0, + Search_MaxVisitPerSite = 1, + Search_MaxDupVisit = 1, + Search_MaxKeepResult = 16, + Traffic_MaxHoldingLocks = 3, + Traffic_DeadLockSearchDepth = 0, + DebugTypes = "S", + Auto_Reprogram = false + }; + + Missions = new Dictionary(); + Maps = new Dictionary(); + Sites = new Dictionary(); + Tracks = new Dictionary(); + Cars = new Dictionary(); + PrologScripts = new Dictionary(); + } + } + + public class Conf + { + public double PRICE_RANGE { get; set; } + public Dictionary fields { get; set; } // Assuming fields is an empty object + public int Car_UpdateInterval { get; set; } + public bool Search_AllowDestOnRoute { get; set; } + public int Search_RouteOnDestClearance { get; set; } + public int Search_MaxVisitPerSite { get; set; } + public int Search_MaxDupVisit { get; set; } + public int Search_MaxKeepResult { get; set; } + public int Traffic_MaxHoldingLocks { get; set; } + public int Traffic_DeadLockSearchDepth { get; set; } + public string DebugTypes { get; set; } + public bool Auto_Reprogram { get; set; } + } + + public class SimpleMission + { + public string type { get; set; } + public MissionOptions options { get; set; } + } + + public class MissionOptions + { + public bool autoStart { get; set; } + public int id { get; set; } + public string layerName { get; set; } + public string name { get; set; } + public Dictionary fields { get; set; } // Assuming fields is an empty object + } + + public class SimpleMap + { + public string type { get; set; } + public MapOptions options { get; set; } + } + + public class MapOptions + { + public string filename { get; set; } + public int id { get; set; } + public string layerName { get; set; } + public string name { get; set; } + public Dictionary fields { get; set; } // Assuming fields is an empty object + } + + public class SimpleSite + { + public string color { get; set; } + public string displaySetting { get; set; } + public double x { get; set; } + public double y { get; set; } + public int id { get; set; } + public string layerName { get; set; } + public string name { get; set; } + public Dictionary fields { get; set; } + public List mustFree { get; set; } // Assuming mustFree is an empty array + + + } + + public class Track + { + public string displaySetting { get; set; } + public int siteA { get; set; } + public int siteB { get; set; } + public int direction { get; set; } + public int id { get; set; } + public string layerName { get; set; } + public string name { get; set; } + public Dictionary fields { get; set; } + public int _siteA { get; set; } + public int _siteB { get; set; } + + public string typeInfo { get; set; } + // public Dictionary fields { get; set; } + } +} diff --git a/StandardScene.Core/Model/TaskModel.cs b/StandardScene.Core/Model/TaskModel.cs new file mode 100644 index 0000000..a90eeed --- /dev/null +++ b/StandardScene.Core/Model/TaskModel.cs @@ -0,0 +1,262 @@ +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace StandardScene.Model +{ + public class TaskRequest + { + public string CarCode { get; set; } + public string CarType { get; set; } + public string TaskCode { get; set; } + public string MissionType { get; set; } + public string TaskType { get; set; } + public string Material { get; set; } + public ContainerSize ContainerSize { get; set; } + public List Nodes { get; set; } + public int priority { get; set; } + } + + public class ContainerSize + { + public double Length { get; set; } + public double Width { get; set; } + public double Height { get; set; } + } + + public class Node + { + public int Code { get; set; } + //public List Actions { get; set; } + } + + public class Action + { + public string Code { get; set; } + public string ActionType { get; set; } + public string BlockingType { get; set; } + public List Parameters { get; set; } + } + + public class ActionParameter + { + public string Key { get; set; } + public string Value { get; set; } + } + + public class BaseRespose + { + public bool Success { get; set; } + public int Code { get; set; } = 200; + public string Message { get; set; } + public T Data { get; set; } + } + + public class BaseRespose + { + public bool Success { get; set; } = true; + public int Code { get; set; } = 200; + public string Message { get; set; } + } + public class CarInfo + { + + + public string Code { get; set; } + public string Name { get; set; } + public double Voltage { get; set; } + + public string Address { get; set; } + + public string Speed { get; set; } + + public int siteId { get; set; } + + } + public class CarStateInfo + { + public string Code { get; set; } + public string Name { get; set; } + public string CurrState { get; set; } + public bool IsOnline { get; set; } = false; + public double Battery { get; set; } + public double ElectricCurrent { get; set; } + public double Voltage { get; set; } + public double X { get; set; } + public double Y { get; set; } + public double Theta { get; set; } + public double Speed { get; set; } + public int Load { get; set; } + public string CurrNodeCode { get; set; } + public string StartNodeCode { get; set; } + public string EndNodeCode { get; set; } + public string CurrEdgeCode { get; set; } = ""; + public string StartEdgeCode { get; set; } = ""; + public string EndEdgeCode { get; set; } = ""; + public List HoldingLocks { get; set; } + public List PendingLocks { get; set; } + public List BlockedBy { get; set; } + public string BlockingTime { get; set; } = ""; + public string TrafficMessage { get; set; } = ""; + public int AquiringLock { get; set; } = -1; + public bool StopAccept { get; set; } = false; + + public List Alarms { get; set; } + + public List Tasks { get; set; } + + public List Actions { get; set; } + + } + + public class BlockedByItem + { + public string CarCode { get; set; } + public int Type { get; set; } + } + + public class CarAlarm + { + public string Code { get; set; } + public string Name { get; set; } + } + + public class TaskInfo + { + public string Code { get; set; } + public string State { get; set; } + public List Nodes { get; set; } + } + + public class TaskAction + { + public string Code { get; set; } + public string ActionType { get; set; } + public string BlockingType { get; set; } + public string State { get; set; } + } + + public class ResponseNode + { + public string Code { get; set; } + //public List Actions { get; set; } + } + + public class TaskCancel + { + public string TaskCode { get; set; } + public string MissionType { get; set; } + public string TaskStatus { get; set; } + } + public class TaskRecord + { + public string TaskId { get; set; } + public string Name { get; set; } + public string CarId { get; set; } + public string CarName { get; set; } + public string SrcSiteId { get; set; } + public string DestSiteId { get; set; } + public int Priority { get; set; } = 0; + public string State { get; set; } + public DateTime? StartTime { get; set; } + public DateTime? EndTime { get; set; } + public DateTime Created { get; set; } + + } + + public class CarBaseInfo + { + public string Code { get; set; } + public string Name { get; set; } + public string CarType { get; set; } + public double Length { get; set; } + public double Width { get; set; } + public string CurrNodeCode { get; set; } + public string CurrState { get; set; } + public double Battery { get; set; } + public string Address { get; set; } + public double Speed { get; set; } + public double X { get; set; } + public double Y { get; set; } + public double Theta { get; set; } + public double Voltage { get; set; } + public double ElectricCurrent { get; set; } + public bool IsOnline { get; set; } = false; + public Dictionary Additional { get; set; } + + public CarBaseInfo() + { + Additional = new Dictionary(); + } + + public static CarBaseInfo FromCar(Car car) + { + var info = new CarBaseInfo() + { + Code = car.id.ToString(), + Name = car.name, + Address = car.address.Equals("/") ? "127.0.0.1" : car.address, + CurrNodeCode = car.status.holdingLocks.FirstOrDefault().ToString(), + X = car.x, + Y = car.y, + Theta = car.th, + Speed = car.speed + }; + //info.Length = car.latestShape.lx; + //info.Width = car.latestShape.ly; + info.CarType = car.fields.ContainsKey("CarType") ? car.fields["CarType"] : "Car"; + info.Battery = car.status.enums.ContainsKey("Soc") ? int.Parse(car.status.enums["Soc"]) : 100; + info.Voltage = car.status.enums.ContainsKey("Voltage") ? double.Parse(car.status.enums["Voltage"]) : 0; + info.ElectricCurrent = car.status.enums.ContainsKey("ElectricCurrent") ? double.Parse(car.status.enums["ElectricCurrent"]) : 0; + var isOnline = false; + string carState = SwitchCarState(car, ref isOnline); + info.IsOnline = isOnline; + info.CurrState = carState; + return info; + } + + public static string SwitchCarState(Car car, ref bool isOnline) + { + string state = "Stopping"; + if (car.GetLastSite() == -1) + { + isOnline = false; + return state; + } + if (Commons.GetVehicleStatus(car)!= VehicleStatus.Offline) + { + if (Commons.GetVehicleStatus(car) is VehicleStatus.Normal or VehicleStatus.NeedInit) + state = "Stopping"; //Idle + var lp = car.status.programs.latest; + if (lp != null) + { + if ( + lp.status.state >= SimpleCore.Compiler.CarProgram.StatusEnum.Programming + && lp.status.state <= SimpleCore.Compiler.CarProgram.StatusEnum.Running + ) + { + state = "Running"; //Executing + } + } + //存在报警信息 + if (car.status.enums.ContainsKey("AlarmInfo")) + { + if (!string.IsNullOrEmpty(car.status.enums["AlarmInfo"])) + { + state = "Faulting"; //Malfunction + } + } + if (car.tags.Contains("charging")) + state = "Charging"; + isOnline = true; + } + else + { + isOnline = false; + } + return state; + } + } +} diff --git a/StandardScene.Core/Model/TrafficControlSetting.cs b/StandardScene.Core/Model/TrafficControlSetting.cs new file mode 100644 index 0000000..b9ac8fc --- /dev/null +++ b/StandardScene.Core/Model/TrafficControlSetting.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StandardScene.Model +{ + public class TrafficControlSetting + { + public string Name { get; set; } + public string Description { get; set; } + public string Value { get; set; } + } +} diff --git a/StandardScene.Core/Model/VehicleStatus.cs b/StandardScene.Core/Model/VehicleStatus.cs new file mode 100644 index 0000000..16a557a --- /dev/null +++ b/StandardScene.Core/Model/VehicleStatus.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StandardScene.Model +{ + public enum VehicleStatus + { + Unknown = 0, + Normal = 1, + NeedInit = 2, + Offline = 3, + } +} diff --git a/StandardScene.Core/Properties/AssemblyInfo.cs b/StandardScene.Core/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..8a28f3d --- /dev/null +++ b/StandardScene.Core/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("StandardScene")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("StandardScene")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a Type in this assembly from +// COM, set the ComVisible attribute to true on that Type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("7a745509-1593-4044-ba49-9b6b0a35b505")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/StandardScene.Core/Properties/InternalsVisibleTo.cs b/StandardScene.Core/Properties/InternalsVisibleTo.cs new file mode 100644 index 0000000..09b0f67 --- /dev/null +++ b/StandardScene.Core/Properties/InternalsVisibleTo.cs @@ -0,0 +1,8 @@ +using System.Runtime.CompilerServices; + +// 程序集拆分(路线乙):让各卫星 dll 能访问 Core 的 internal 类型(字段袋/工具等), +// 从而以"纯搬运"方式外移代码,避免大量 internal→public 的侵入式改动。 +[assembly: InternalsVisibleTo("StandardScene.Protocol.VDA5050")] +[assembly: InternalsVisibleTo("StandardScene.Devices")] +[assembly: InternalsVisibleTo("StandardScene.Magnetic")] +[assembly: InternalsVisibleTo("StandardScene.QrLidar")] diff --git a/StandardScene.Core/Ref/leegKeys-sdk.dll b/StandardScene.Core/Ref/leegKeys-sdk.dll new file mode 100644 index 0000000000000000000000000000000000000000..f05fc0bb241f6120536e9c319ebdfce9dbc555a4 GIT binary patch literal 17920 zcmeHu4Rlo3b?&}Db7$txNN7ed5+Kmn&OLXuYyX|35Rr=e;zgpT@#JfZfWI5e zKwMh=ze?#V{_iY%TI%}Fvc9pD9nD(isFfIxCKH*AnTrk^QEMU-O=Y6(-M!IqbHr#U zDbZKDrh7Vwx+H}j``Bh9U)wvhJQ|Q1iLM7nbGYFHct&v#;U+2*xa|1N3|Eclb0EOy zOQE4ZU{(G<`*cZW;d<`(h`JdWLQxLHrPmBm5WL&>6IER*`(1RD$X6uyf!H{^_C zInb4x03Z`>b^Qh*2w`++WSVbfW?tdJVH!8FS#ZW#ZPwDVi*8*N87ADej@JSBJw=&n~ zjX|YW*Ssxn$D#j0<>vppk&wkuQ`_VGJY0h=EFPz-{zZ z$g|-Y#x}gd&4^t80v@r&u&bysl&g(Fr`B8whOWg>yf)ySf+uQ;--2c~7KNn#M!yBe z9Ae|WaKmq*|6Tg)f`&<#J}c-o1^U;5ZYt0k?8fCO9wz2)gv}YubyZpn1EjWGb?Ax^ z5N?!2EQWL{|2^YhZBR>TFvE#H+&B|S`1^gw%p^`t_lGu*hUeK z^{vflzU$|5crJRj*jFuv0M`a( z-xM^}Dda9yOgY!NRrPXBeBu0J>x&ybbe1P0`Z&t)6hbWNvuGd^jFd#m)%oQbRaR8l zD^M@D3>B$$CEPT|%#~m>!Lw70M0twmwHS^j@|7-6@hmoL7!7IDXt0wAP$jyEC%(BC z5w2U~_USGV@{~|>q&I;PeIKswH&??*ZNOFR1^;|S4W@!njv%?PO*;mq0I$R!X)LfsysiQ_Qtn$n!^0}% zyQ|#e^{uMd7Yunm8}d|7wfI76#lCX27L4lY77f%uxf)XI*Lov&K^*n^DhBR?q(TN3 zE9F=%r~w{vaDM@f1Zx+D)JU`D^WKqaDV^nW8$&)+;tTown~z<*cu|Dv-0SdY0_jLv zRj<}WYUi1aa5dV6zPTVpE+`j5HAUT8U*$#s;o@$Jh(44fF(d#DiiNhG|46yNh;&gg zYVtknT0;M`CDDJvqx=YPjB$q-cg^DBuCWfIpF@79iwiU9-1BHsk<%MCUbuMC8D%b) z$KWBe2e7_!jsQ!AW@0_k>cXW7MqIfMU@c_Y`w zQ{dda|90_W&AC4XEDG6M`Qf^;>wjOoh|x{b?ErK$4W6M2&iOL%V`rVM2+_}|>>?@5 zCt60|{wcLP_&F)?z7%xuPfLFimxYc*J<{KF%hxnx_!B)OFF51yiTSt5A93^tlmlN? zG{&)tD#Kq>kn(u_lIcT?;Bp-nbAvmU=a(Ciir?L_JR{^OBv`c$n*218vh@5AU5N8;@JKK5Jeo5XMx zzURAhvFm)f^Hj{MQB1ibHK3obIltVR%;%NatWro#+@QA>#I?BNGf{IhMV#1S-?zi* zCtmv>6_J}WMC<0oFa_OsG{}*-5^3sl#**TU$88Q}BK0Ak796)u<~?#9pEI52)m-Ww zMm5HVT6tB8Vx!?&tQw#;px8)T4#8VUtsWUJ$X(J6A`)NVwrK;!lTPeq+CcROoi^3T zN+h-bit*jDqT1-SB1`d|vSK5pT*_*_oOQ$HEWDW%7v!<0V$?gAQrWDj%0T5+@`AWC zzbX{f#6}wd63*`uXdzZ^gu-su7A->OFAWrSV)?PRidJ{!+q{b6-T8i$>AE@n7%}^= zSlygVd09oX^#o~IeZHO`t!#AaS?cVU5k>12^z<|~g6%;7B6MmP8@lCSq z>^HZG9iAM!1|!T|4}eO`v0vywS*-IR>#ty0w>C(W4SZw?Du``>lD!cCdxqL-ujY$r zVvA*73tokZ{fHjpbQ|zj>?`rh&F8#vtFW<$fVZL8V5rz2V?&|F(F)kr;u{M}m@I0% ze-4Q<7$<7{5l30Ju7yL>y!(`w#-b=bjme~9G_7VFxk8P9`QK3$y9ZZywr-?{qFT0p zKrPrEXwyg{YLVB-Aw?wzKA>bhmqgwuE{WM)RMO8~d4-lCD%v!Y^S00J{x9Ym zie_J-qz$$<&3i>2PyEgUPx)Ovq?j0`dbPhLrkI#ay2x9)W{tyl4ys;XqFG1tM4em_ zkHkNus1*%f3yC6I>k*nJOzYf>TlmTL-++B2SJ!^UmX|@>7&e-|{wqM8Y8P$!tiTHu z2NVK=CI9eD8rH5&d>a$i3q3h3diL!4_Ln-R2-q|2tAJQh-~kGg=v_> zOSeE_F+W^*3@Fs)`ma_rd)2B&#ZxcEm5P?7@)WCD55d8Ca;y_(#ANoEJJ~0Bifvk7 zy0Y}1{6KsX@+%DCX}D7CI;?YpV40HvGJNr*fP+Po0$a!{S+uwC*hVUM$F@R;(Jmjx zUPM>$R#Usr>oZ|k|6Yl|y0N*;U%jC*pe-5(F)*apuJczXn#=vw2OCQTGci!D?*o6S zzq*zA+gyID%h#Y48Pc&)4*I+z={29m3peM>yHT&$H{_2n@V<)O1w)}&9c_@}G8V(7 zPKLy2)TXh3B4;fvV(GG0U77seG`62A&@!Mm3Unzjj5#pBH;rXpg{kVYqJqntH)K@@NTrEM=$iiviBI;8K>6rrX z@p2afVM!F1Z{;EaRm4`|(Ejwk3!caY$??URU)X0jHn>=!nZd9u3Lesnt)%y9=>d7x zK~*qf=xRMxJrYCja&A?q>HosFLMsOx=k}*B$ni{}FD~zxetFR}-ioo7P7m=zjA10A zsSkmQFGubX2pFs-7y~T!C_U_y&xhI;43msY8(Adz@*wTb` zfp;2dz_Ad~iVqWgAJ2E7w4yg>r81*7YkXxX5g$mc*xO6TqR#p8itT$lkre56&{ZDD zwx-Qt(0pMoN;fTu1pGRPf00@!0tV3QaK~^babq_~DclGymEfL_n|)(FzF|Y$ic70_ zGR`K6?%~rZTpIPLQ+|!UF5tM*;-5$NVVY_5No9vuqbil*zX|*SfoBCgDd3}me?mC` z3xfi_BRJnu(jJYPm3K9b?$#OpRzSbT_z|4QXk|2Z0YCh(-LQM)qbFQp%A zdr|o}X(xAuK07Q^8W|mrwXKst}gdAltm(!}b2P`mUzaH-qdaDGXnh89oc2 zb^4h1=V*)NwEi@jWSVUWviBZm8h=P$t;NBkHA^br1`3u4;afmVmYndfh$ zw*wuZJVN$R;O)Q!mEx-bpTMs7vaG_TDio$FX^D{isgNzj+c9g#gq7vA+>yab2V%8C zP)`Nl4pdSNtrXNgA&WuE=7$eO8EP!e&u7OE4} z5g}U(JFM9v%3Vzjf?6eH>*y*$Js@+rYp79B6+*TiIfBdm2yLjO&D1QYXMJx6G}?kX zIA+hGz6nt4gzOc_bZT>{e}b$7)CM8jBy4V@O@ew6v982-it7bsqg)4dq7JTar_k(z zRi;vqRnjivo++dADAz%|#ix%lDnkT6L;d(P!m_75EbE6=rkaG6{jkc^mm#afJl*M7 z5!3;EYfvC-z%t)K2e6Z2>Jf~L4xBvnk&O2J2vc{05|B!?&RYf6BB>hiVSPD6iDB5k z8gN;Vr2|--B|7bE0Q^><8IZJffKO{10b6~W0S{>HvZnc^D!G5=1=;~9Neq7@@XrhQ zF#%5qc!z-Z3%JF*TGl8mGj#ALCB{z&ssZowR?8v!Ff42Io{!<19)@rD89pg@0crw& z9&OR+dLf;!cLP5i*avu@_W)p>Gz94IU-pjx|Gt1{{Nun+2aW(1Yu>1{wbOy)fN>Z9 zF!1dz{`U9C{7Mw=}{+9xt7w~l8j|#E+MDPxdnCA|Za%wDY zMX{f!1AhXYUk2FzQ@(ou=Zp59@q7mO>A?Mfp9-=Mj#pNYb*>|Z2?56hyju7$AYiez zJ2kfaUH|6+&v+gJJRNuxJ-fvBIN)!+4Bzm674SUzLZX{7Hu63G5Bk$+g%NxjBa2so z+bVv^h9eoYQgPn78szMpu0AP2>o#nf*>mC$oS z#x~24ttywXCR69+d33Bmy^B%uj-XzktC8X7Q*gP^q}KvJmgm!uOI2t;mm`#Qsr#jB zsgiCL)Ct<|`DeM3hE{U96V!)%y_mku3nJY{1A^+q&W@>H1}@5r>2^V#ppdizM^`>x z${~yDs!`6nX;>LH&!N(SdXb*+b}QG= zqb~I|?~t;IUMSMsOy4eOrj^a~7!DtZUZk&irtwmp-9%(O(v1pHaH$9}CoJrH2B%=@rraqS8x?il{!?A*d7dmB2D( zFFjX~m0?90#9*`*%R-cm;4h(!15yeIw(iE%5)_;c8KD_CEz#8GKI(x69_ zl1K}%&V1(fj6eIQ3o*oq8Sk zY1A&$ui=S88Z4{yYrI-`=wF3bj|nM9NpU&EI6=I#Pd@kKJ2+fmwWX={yTBz2uoBYqPkjGbE5QysLPQ$ z@n?>VHJClQIq0XLU!o8o-U$G8?4Ws_Y!YyTfUN>{3V5S{0|F)h7vLR_^=}byQoxg9 z{rm=Sjn+s(|8l&uJTGsgR;fbX27I|^BfSLaJ~}CMZj|bjBs~NC5IA>vEbJJcmXAA`m=OGdOi3u;CDS|0T=3jPmi-T>2Z2iDhK?$UM{^v z2l0OMIIYEedrj2!5={tBjiS-Rbk4g7I<12939RIg(<09baJs>HMpEUo&}l+W`373C zMtT?)t^)ii_WF-Qz5@7&v`(6oM)hl@g!G7ii_|KW1a?cmfTl#hpd-OP>4fxvXTRi^ zejtwkzM~$JmPtQW%kVDD@$pN2sP{FgopRuxMCJjM%K(3@V*f1d0|z@1XjTdMro{27 zq9d?-LVC-8r?gO7<2fz;5FTpOB;cFS{F3xT`orK;fY15QNN>_M|8vscOZDE@0q+jJ zDf#fu@e9B$c&GE>UEyB=cVJ-nuy%L=d+%O=V3OLwIZPQqo2Jyy z(MRFia{{(Xj4R3?)8DCWfRblf;E(AgwF&FO6#a^}NkdXbIw^fpdO~_ZdIi6>!|=vi z20X>gm+=Op0b=G+HLy*9i!jb7C3S}90^W4#(wW19m}`XhRRudLg<`06HQKy^zDU>N-b~-b{VMJ^ai7Qix43^spP@hJ zI=c*G^af*cmp!_}NLaaHBa!QGqRx)Y#JFK4hSSDS6YaFkOq-cGVpuuD0&N-N3Hxvp zWfS;)ViWb5ota!qGqtCZxs;hnSd&A|u1>R~<33tw)W{9)?c27VHtjM;Cep_B)ZW?K z*1daoM_XSY#0%dv*=BxAt{VSNC?>yS-~*a98hkYVYVD>>KFm7~J7#^mpt5 zy1l29TH9`zm3GZayQpVRcVBl~ch?}4dpo;#Q}1q+=%(Jj*1o;HgL^u9=!TAg!5y7_ zbR?0UFa`(7HZmjaiClsvY{L@B2vd7ThsnY{ZYNDEof@XzNjqnZH?*1Qv>}>pH*7aD zhLuXv9wRYAMqWK=RimTk3uu(_a1nfyzfV(Er zxl}S?=h}_5F$y0=u+S7s^gkFQtvMWe4o^U|eIivvwHw0|qoW*wSq((GKV_%p@LFx# z7#~hg_N8*gss*-{7{Ls*4$oTYOIYZ|ZJ3V6QL|W(FS88}_8XRs`8iuEFGL?4OpQ)h z=#eXl+YLKurLuE{b8^D0Ngg;U?piam$4DoR3Cy0A=c`0-jZ7qSmkZj=?4*?%9lN3k zgEBKYTV~Hhh6jTfthv;1DxJy|Nw-d-19)ur^VD`mjDwCP?2cn8JBNd5hhfa2L@K~6 zP8z8r2A<<49tZ*^QzD%@ZqT+=#zD-32WfbMftkyh<2w@RgZaeZ%yiU%$$%-vh?_E8 zuN&O%V2PE;j5r77NTx2b-N?CE@5HbzPSJ~ILYFy8Y1~K#G=^}|u0(E3w6@F0i~_Z6 zJ5{9Lnmo)IXE2#ar?)0RAcvz_vvjLHnMt-mI?Pg}kd7nBR|Q7eStbfJ+Yy=_oV_^X zbzvqE!kQ}(b`F!lVY8AmW%F9Ilxy0qw?__B&dep!RLp7^NvGMLLXK(6S!o)}FIIw@ z%@CbtlEo?K(TNo8h8_KgS>rfiu~WV2)Hv-y;LUN7uZWXNF9sM=_b~)fta>7c5U&7f zaCW7@H37zsx}8T@6M0S*`qnt;E(f&R%yo`u)5bW$XpA6}8e#?^M2H2(&n(BuL9;Z* z^EgZ5gjFb24d z=$7#;rIEqrFdUsd#w~Mo<}gGbY{eE~R!4NiTvpmNvt;K0GWc=+O;|c6vPDA?Ll;JQ z^zy@<6iDT_h=@DggyG4(#lstr8!1|A(NSI|EIOD<^8>3tau@o*A-ZP?E;37H&7-cF z-uxuC5Gr>*TL^X9w5TDO159Nx?clye&g$8j*=17>aWf}!0(U)bPbEe(CXz_fc9$Cr zl3l5EI%OM4Gc#i6o0gyNVx2d$@POCg%fwFRG^~Q$SuKzruvLOO@&RWwQJI4nDYxcS z@~};Z(>5VC<2D(lO}F6Y+}AdSMT za?U*C?qy8u4vX}~aNr%|>~uuOWtkzm3mb-RvD9L>;>Oygi?XT95e49Ym2(-UQxbmg z4hVJ;RDrqiM-wQ`3q>!GERq%;PLrUEX;9>67poC=xek)bq;k~R$_a0eVPiSx0{rOA zB#{;|Uy<#(k5G4xDIV>49HTdnI=LoKIm0?nIibu`2$YCj5$$ZX^9~I49;&;|qeu!zv63CbcshoaP&h)ItWn*BNVGj>I+dI(>RSYh+`+vqF`i0Kl9?Us zxMczhbZ!#wH{QcI9|Pjg;S6CMIC;}#(kNb{Fs<>;A&0L_Hn<6VPd*Ip2y~7>7bkW2 z>4L+J;vCH+i#AdeKPx!@i3gKq!>9M)Yo5TH23DQgNKy&&zhuxLYf1BNA2)|y>y_?w zrL8+)F993qEP>^q)#v(T!iSu&p2SylWN~Oj0ZrkP0U3^R6&yyU5-6R-X`lg*u=1n) zA$Xle%QDc;;)DdbOSI_-9mQAHNjgrg_-5CJw{N^!(RSK_?{Yiw{jCdM_IBfMwtDDB z{Dn?0eA$ch)|>DiK0y2Vm?wZ`RMe5fZy?58pYy&`xx*=L5Bb?2_KFnTBF;we3 zkkqIo`4j}%10)n;vXp`BT@ao*A%%uC5aF4V4jCTvd6lq_{{=`6&)o0)50**z;!(Dg z_@AmvVIP+Y%{-`hB^>FZ{KKW*sLW5Ut5hY_67u>=!d!7(W}L@XX`k zGD$|=&qzzjefShz@|2WG(vkuT-j*)$Xy7e{In-E*Qv#N&bcRh5qHhd4(F z?}b8X6@*JXrCzUES{k18c}Vh=`Jl?SqjIUwhX9m%q7<6>5lmHiymEMqTkoqvJg4Q- z@EC`soXRE5tNKcP9)w=;`Mt`L(k0=U8K19_8yKGX1GHg@=oek}N}*feKSo*Z8IG_n!FTmwzgbKyXln0}`15pMj{% zR1tkr`ItoIGZ49%WX&gQRjO8fqbzHsiWc6BdjR*%xP7V?p7|_;PlGZPEmS6JexJ5P zw2QS@;;zCS^=WQfT_iLFZXNEmxHsW$$K8dy4^~)~mNgF^Io!uQ8V7>wxt+nsp@Ofs zvZ{qoC=_#@XTGz zJOyER%n^piiiFHO#lHG{es0ms=X~KYVLL5+_c#^hF!)gFWJy%5a;)HSN_Q$?6duSr zH&fRc6<+cnklereT*}90eRAX`E0Nu8W(u2RENJFYTY?^s2#hR=g1p#aIdEPi$iw4> zD)1wL!YgI;`G=#?=Ei1xVOk^6%8_-+#`PQ4U0vVQ+&EmncBEx({rYQ$o9eGgUNh3% z+%jx5H{m-D4t2fF4Ndrm4_do$`rWX*qp$F$UFW_CT!$Y+t!rq8uch+~LL7Hw(+P2! zF`r9C3zDeNULsMYyFxcyw(!zId|}B;=WKK@kreHExy4lY8(@x16{7F}()k0Mi1zfh z_qP9y{9x13zu58dmGP&R9p3pm2dQJ@0X{Uav57Jc$c7Zo-PClG{ZWdCkk9azn(q-V$j$49N-j!~{&Ml2SS|@g9 zyw~Mxr6|=0X#!jua^5ZT?hLy(aXqF!0HYGTc{Lw2|nh`pUXt(okE%va80lrhP zpKY)=E_UV_Siw$QT>PuOyeuo~pG0dD&JNzy*^2KVQlY+fcyD8G%zk9&_{r_UNg(#T z{3c-IH+eR8(AewaYQ#D-Yoi|;ynmi;V>5Q%P43M;Z^c(kNkj>6GSJPyr*x5LA5>QZ zYQ(vgsB;H}VWUg<#HBd`S$M{t^X?h@?JMx2_(~YXzh?N{44?34)v!`*$LT44HyDRk z7Fw8(CSk|Ves{Zda8Gf~`CeyAyc>aczLemjG|%lUtE^*Fyfo{x3* Kzpwv#5%@o??ASyA literal 0 HcmV?d00001 diff --git a/StandardScene.Core/Scheduler/HeartBeatMission.cs b/StandardScene.Core/Scheduler/HeartBeatMission.cs new file mode 100644 index 0000000..2f600d5 --- /dev/null +++ b/StandardScene.Core/Scheduler/HeartBeatMission.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using LessokajiWeaverUtilities.Utilities; +using Newtonsoft.Json; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using StandardScene.Model; + +namespace StandardScene.Scheduler +{ + [MissionType(Name = "调度心跳进程",editor = typeof(HeartBeatMission))] + [I18N.DocumentTranslation(Name = "Heart Beat Mission", locale = "en")] + public class HeartBeatMission:Mission + { + [JsonIgnore] private bool _started = false; + private Thread _myThread; + private HttpClient _httpClient; + + public static Mission Create() + { + return new HeartBeatMission(); + } + [MethodMember(Name = "启动进程", Description = "开始下发调度心跳")] + public override void Execute() + { + if(_started) return; + status.status = "已启动"; + int count = 0; + _httpClient = new HttpClient(); + _myThread = new Thread(() => + { + _started = true; + while (_started) + { + Thread.Sleep(1000); + count++; + status.status = $"已启动:{count}"; + var carList = SimpleLib.GetAllCars(); + foreach (var car in carList) + { + if (car is not GhostCar gCar || Commons.GetVehicleStatus(gCar)!= VehicleStatus.Normal) continue; + try + { + //((ClumsyCar)car).ImmediateCommand("pilot.SimpleSignal=1"); + var ip = gCar.address; + _httpClient.GetStringAsync($"http://{ip}:8008/setValue?FieldName=SimpleSignal&Value=1"); + } + catch (Exception e) + { + Console.WriteLine($"http error" + e.Message + e.StackTrace); + } + } + } + }); + _myThread.Start(); + } + + [MethodMember(Name = "关闭进程", Description = "停止下发心跳")] + public void Stop() + { + _started = false; + _myThread?.Join(2000); + _myThread = null; + status.status = "已关闭"; + } + } +} diff --git a/StandardScene.Core/Scheduler/NodeIsEnableMission.cs b/StandardScene.Core/Scheduler/NodeIsEnableMission.cs new file mode 100644 index 0000000..5ffe335 --- /dev/null +++ b/StandardScene.Core/Scheduler/NodeIsEnableMission.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using Newtonsoft.Json; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore.Library; +using System.Threading.Tasks; +using System.Diagnostics; +using SimpleCore.Traffic; +using SimpleCore.PropType; +using System.Net.Http; +using System.Reflection; +using LessokajiWeaverUtilities.Utilities; +using SimpleLite.RCS.Signal; + + +namespace StandardScene.Scheduler +{ + [MissionType(Name = "锁点上传迷毂", editor = typeof(NodeIsEnableMission))] + [I18N.DocumentTranslation(Name = "NodeState Upload Mission", locale = "en")] + public class NodeIsEnableMission : Mission + { + public static Mission Create() + { + return new NodeIsEnableMission(); + } + + public int[] stringToInt(string str) + { + return str.Split(' ').Select(s => (int)Convert.ToInt16(s, 10)).ToArray(); + } + + //是否连接成功 + public bool iscon { get; set; } + + + public class NOdeIsEnableMissionStatus : MissionStatus + { + public static List staions = new List(); + + public float readOnceTime = 0; + public float readAllDataTime = 0; + public float writeOnceTime = 0; + public float writeAllDataTime = 0; + + + } + + public override MissionStatus status { get; set; } = new NOdeIsEnableMissionStatus(); + + + [JsonIgnore] public Thread myThread; + + [JsonIgnore] private bool started = false; + + [JsonIgnore] private int iterationComm = 0; + + + [JsonIgnore] private object sync = new(); + [JsonIgnore] public static HttpClient hc = new HttpClient() { Timeout = TimeSpan.FromSeconds(2) }; + + [MethodMember(Name = "启动进程", Description = "开始处理上下料队列")] + public override void Execute() + { + started = true; + Task.Factory.StartNew(() => { + HttpPostData httpPostData = new HttpPostData(); + Dictionary> Allsignal = new Dictionary>(); + //Dictionary stationSignals = new Dictionary(); + while (started) + { + try + { + //获取所有锁点的车 + var sites = SimpleLib + .GetAllSites() + .Where(site => site.tags.Contains("unavailable")) + .ToList(); + HashSet staions = new HashSet(); + foreach (var site in sites) + { + staions.Add(site.id); + if (site.fields.ContainsKey("mustFree")&& site.mustFree !=null && site.mustFree.Length>0) + { + //遍历数组添加禁用点 + for (int i = 0; i < site.mustFree.Length; i++) + { + staions.Add(site.mustFree[i]) ; + + } + + } + } + Diagnosis.Log($"向迷毂提供禁用站点", "siteIsEnable", true); + httpPostData.UploadListNode(staions); + + + Thread.Sleep(500); + } + catch (Exception e) + { + + Diagnosis.Post($"{ExceptionFormatter.FormatEx(e)}", "禁用站点"); + } + + } + + + }); + } + + [MethodMember(Name = "关闭机构进程", Description = "关闭机构进程")] + public void Stop() + { + started = false; + status.status = $"已停止-循环"; + } + + + public static string GetListsAsStrings(object obj) + { + Dictionary result = new Dictionary(); + Type type = obj.GetType(); + FieldInfo[] fieldInfo= type.GetFields(); + foreach (FieldInfo property in fieldInfo) + { + if (property.FieldType== typeof(List)) + { + List list = (List)property.GetValue(obj); + result[property.Name] = String.Join(",", list.Select(b => b ? "1" : "0")); + + } + } + return JsonConvert.SerializeObject(result); + } + + } +} diff --git a/StandardScene.Core/Scheduler/RegionalTrafficControlMission.cs b/StandardScene.Core/Scheduler/RegionalTrafficControlMission.cs new file mode 100644 index 0000000..e6b5277 --- /dev/null +++ b/StandardScene.Core/Scheduler/RegionalTrafficControlMission.cs @@ -0,0 +1,432 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using Newtonsoft.Json; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore.Library; +using System.Threading.Tasks; +using System.Diagnostics; +using SimpleCore.Traffic; +using SimpleCore.PropType; +using LessokajiWeaverUtilities.Utilities; + +namespace StandardScene.Scheduler +{ + [MissionType(Name = "区域流量监控", editor = typeof(RegionalTrafficControlMission))] + [I18N.DocumentTranslation(Name = "Regional Traffic Control Mission", locale = "en")] + public class RegionalTrafficControlMission : Mission + { + public static Mission Create() + { + return new RegionalTrafficControlMission(); + } + + /// + /// 区域流量监控状态 + /// + public class RegionalTrafficControlMissionStatus : MissionStatus + { + /// + /// 区域车辆统计信息:区域编号 -> 当前车辆数量 + /// + public Dictionary RegionVehicleCounts { get; set; } = new Dictionary(); + + /// + /// 区域限制信息:区域编号 -> 最大允许车辆数 + /// + public Dictionary RegionMaxCounts { get; set; } = new Dictionary(); + + /// + /// 被阻止的车辆统计:区域编号 -> 被阻止次数 + /// + public Dictionary BlockedCounts { get; set; } = new Dictionary(); + } + + public override MissionStatus status { get; set; } = new RegionalTrafficControlMissionStatus(); + + [JsonIgnore] private bool started = false; + + [JsonIgnore] private object sync = new object(); + + /// + /// 区域内的车辆记录:区域编号 -> 车辆ID列表 + /// + [JsonIgnore] private readonly Dictionary> carsInRegions = new Dictionary>(); + + /// + /// 启动进程 + /// + [MethodMember(Name = "启动进程", Description = "开始区域流量监控")] + public override void Execute() + { + if (started) + { + Diagnosis.Post("区域流量监控已在运行中", "区域流量监控"); + return; + } + + started = true; + status.status = "运行中"; + + // 订阅交通控制事件 + TrafficControl.BeforeLock += BeforeLockEvent; + TrafficControl.AfterLeave += AfterLeaveEvent; + TrafficControl.OnLockAcquired += OnLockAcquiredEvent; + + // 启动统计更新任务 + Task.Factory.StartNew(() => + { + while (started) + { + try + { + UpdateRegionStatistics(); + Thread.Sleep(500); + } + catch (Exception e) + { + Diagnosis.Post($"{ExceptionFormatter.FormatEx(e)}", "区域流量监控"); + } + } + }); + + Diagnosis.Post("区域流量监控已启动", "区域流量监控", true); + } + + /// + /// 停止进程 + /// + [MethodMember(Name = "停止进程", Description = "停止区域流量监控")] + public void Stop() + { + if (!started) + { + return; + } + + started = false; + + // 取消事件订阅 + TrafficControl.BeforeLock -= BeforeLockEvent; + TrafficControl.AfterLeave -= AfterLeaveEvent; + TrafficControl.OnLockAcquired -= OnLockAcquiredEvent; + + status.status = "已停止"; + Diagnosis.Post("区域流量监控已停止", "区域流量监控", true); + } + + /// + /// 获取站点的区域信息 + /// + /// 站点 + /// 区域标识和限制数量,如果站点不属于任何区域则返回null + private (string regionId, int maxCount)? GetRegionInfo(Site site) + { + if (site == null || site.fields == null) + { + return null; + } + + // 查找所有以Region开头的字段 + var regionField = site.fields.FirstOrDefault(kvp => kvp.Key.StartsWith("Region", StringComparison.OrdinalIgnoreCase)); + + if (regionField.Key == null) + { + return null; // 站点不属于任何区域 + } + + string regionId = regionField.Key; // 例如 "Region1" + + // 字段值就是限制数量 + if (!int.TryParse(regionField.Value, out int maxCount)) + { + return null; // 无法解析限制数量 + } + + return (regionId, maxCount); + } + + /// + /// 检查车辆是否已经在指定区域内 + /// + private bool IsCarAlreadyInRegion(AbstractCar car, string regionId) + { + if (car?.status == null) + { + return false; + } + + // 检查车辆当前占用的站点是否属于该区域 + if (car.status.holdingLocks != null) + { + foreach (var lockedSiteId in car.status.holdingLocks) + { + var lockedSite = SimpleLib.GetSite(lockedSiteId); + var regionInfo = GetRegionInfo(lockedSite); + if (regionInfo.HasValue && regionInfo.Value.regionId == regionId) + { + return true; // 车辆已经在区域内 + } + } + } + + return false; + } + + /// + /// BeforeLock事件处理:检查车辆是否可以进入区域 + /// + private bool BeforeLockEvent(AbstractCar car, int siteId) + { + try + { + var site = SimpleLib.GetSite(siteId); + if (site == null) + { + return true; + } + + // 获取站点的区域信息 + var regionInfo = GetRegionInfo(site); + if (!regionInfo.HasValue) + { + return true; // 站点不属于任何区域,允许通过 + } + + var (regionId, maxCount) = regionInfo.Value; + + // 如果最大数量为0或负数,表示不限制 + if (maxCount <= 0) + { + return true; + } + + // 检查车辆是否已经在区域内 + lock (sync) + { + if (IsCarAlreadyInRegion(car, regionId)) + { + // 车辆已经在区域内,允许通行 + return true; + } + + // 车辆即将进入区域,需要检查是否超过限制 + // 排除当前车辆本身,因为它还没有进入区域 + int currentCount = CountCarsInRegion(regionId, excludeCarId: car.id); + + // 如果当前车辆数量已达到或超过限制,阻止进入 + if (currentCount >= maxCount) + { + var statusObj = (RegionalTrafficControlMissionStatus)status; + if (!statusObj.BlockedCounts.ContainsKey(regionId)) + { + statusObj.BlockedCounts[regionId] = 0; + } + statusObj.BlockedCounts[regionId]++; + + Diagnosis.Log($"车辆 {car.id} 尝试进入区域 {regionId} 被阻止,当前车辆数: {currentCount}/{maxCount}", "区域流量监控", true); + return false; // 阻止进入 + } + + return true; // 允许进入 + } + } + catch (Exception e) + { + Diagnosis.Post($"BeforeLockEvent错误: {ExceptionFormatter.FormatEx(e)}", "区域流量监控"); + return true; // 发生错误时允许通过,避免阻塞系统 + } + } + + /// + /// AfterLeave事件处理:车辆离开区域时更新统计 + /// + private void AfterLeaveEvent(AbstractCar car, int siteId) + { + try + { + var site = SimpleLib.GetSite(siteId); + if (site == null) + { + return; + } + + // 获取站点的区域信息 + var regionInfo = GetRegionInfo(site); + if (!regionInfo.HasValue) + { + return; // 站点不属于任何区域 + } + + string regionId = regionInfo.Value.regionId; + + // 从区域车辆列表中移除该车辆 + lock (sync) + { + if (carsInRegions.TryGetValue(regionId, out var carSet)) + { + carSet.Remove(car.id); + if (carSet.Count == 0) + { + carsInRegions.Remove(regionId); + } + } + } + } + catch (Exception e) + { + Diagnosis.Post($"AfterLeaveEvent错误: {ExceptionFormatter.FormatEx(e)}", "区域流量监控"); + } + } + + /// + /// OnLockAcquired事件处理:车辆成功锁定站点时,将其加入区域统计 + /// + private void OnLockAcquiredEvent(AbstractCar car, int siteId) + { + try + { + var site = SimpleLib.GetSite(siteId); + if (site == null) + { + return; + } + + // 获取站点的区域信息 + var regionInfo = GetRegionInfo(site); + if (!regionInfo.HasValue) + { + return; // 站点不属于任何区域 + } + + string regionId = regionInfo.Value.regionId; + + // 将车辆添加到区域车辆列表中 + lock (sync) + { + if (!carsInRegions.TryGetValue(regionId, out var carSet)) + { + carSet = new HashSet(); + carsInRegions[regionId] = carSet; + } + carSet.Add(car.id); + } + } + catch (Exception e) + { + Diagnosis.Post($"OnLockAcquiredEvent错误: {ExceptionFormatter.FormatEx(e)}", "区域流量监控"); + } + } + + /// + /// 统计指定区域内的车辆数量 + /// + /// 区域标识 + /// 要排除的车辆ID(可选,用于排除即将进入的车辆) + /// 区域内的车辆数量 + private int CountCarsInRegion(string regionId, int excludeCarId = -1) + { + lock (sync) + { + // 首先从已记录的车辆列表中统计 + int count = 0; + if (carsInRegions.TryGetValue(regionId, out var recordedCars)) + { + count = recordedCars.Count(carId => carId != excludeCarId); + } + + // 同时检查所有站点,统计属于该区域且当前有车辆占用的站点 + var regionSites = SimpleLib.GetAllSites() + .Where(s => + { + var regionInfo = GetRegionInfo(s); + return regionInfo.HasValue && regionInfo.Value.regionId == regionId; + }) + .ToList(); + + // 统计这些站点上的车辆(只统计已锁定的,不包括正在前往的) + // 因为正在前往的车辆还没有真正进入区域 + var carsInRegionSites = SimpleLib.GetAllCars() + .OfType() + .Where(car => + { + if (car?.status == null) + return false; + + // 排除指定车辆 + if (car.id == excludeCarId) + return false; + + // 只统计已经在区域内的站点(holdingLocks) + // 不统计pendingLocks,因为那些车辆还没有真正进入区域 + bool inRegionSite = car.status.holdingLocks?.Any(siteId => + { + var site = SimpleLib.GetSite(siteId); + var regionInfo = GetRegionInfo(site); + return regionInfo.HasValue && regionInfo.Value.regionId == regionId; + }) == true; + + return inRegionSite; + }) + .Select(car => car.id) + .ToHashSet(); + + // 返回两者中的较大值,确保统计准确 + return Math.Max(count, carsInRegionSites.Count); + } + } + + /// + /// 更新区域统计信息 + /// + private void UpdateRegionStatistics() + { + try + { + lock (sync) + { + var statusObj = (RegionalTrafficControlMissionStatus)status; + statusObj.RegionVehicleCounts.Clear(); + statusObj.RegionMaxCounts.Clear(); + + // 获取所有有区域字段的站点,按区域分组 + var regionSites = SimpleLib.GetAllSites() + .Select(s => + { + var regionInfo = GetRegionInfo(s); + return regionInfo.HasValue ? (site: s, regionId: regionInfo.Value.regionId, maxCount: regionInfo.Value.maxCount) : (site: (Site)null, regionId: (string)null, maxCount: 0); + }) + .Where(x => x.site != null && !string.IsNullOrEmpty(x.regionId)) + .GroupBy(x => x.regionId) + .ToList(); + + foreach (var group in regionSites) + { + string regionId = group.Key; + var firstItem = group.First(); + + // 获取最大允许数量(从第一个站点的字段值获取) + int maxCount = firstItem.maxCount; + + // 统计当前车辆数量 + int currentCount = CountCarsInRegion(regionId); + + statusObj.RegionMaxCounts[regionId] = maxCount; + statusObj.RegionVehicleCounts[regionId] = currentCount; + } + } + } + catch (Exception e) + { + Diagnosis.Post($"UpdateRegionStatistics错误: {ExceptionFormatter.FormatEx(e)}", "区域流量监控"); + } + } + } +} + diff --git a/StandardScene.Core/Scheduler/SecuritySignalMission.cs b/StandardScene.Core/Scheduler/SecuritySignalMission.cs new file mode 100644 index 0000000..55dd6b8 --- /dev/null +++ b/StandardScene.Core/Scheduler/SecuritySignalMission.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using Newtonsoft.Json; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore.Library; +using System.Threading.Tasks; +using System.Diagnostics; +using IoTClient.Clients.PLC; +using IoTClient.Enums; +using SimpleCore.Traffic; +using SimpleCore.PropType; +using System.Net.Http; +using System.Reflection; +using LessokajiWeaverUtilities.Utilities; + + +namespace StandardScene.Scheduler +{ + [MissionType(Name = "安全信号交互", editor = typeof(SecuritySignalMission))] + [I18N.DocumentTranslation(Name = "Security Signal Mission", locale = "en")] + public class SecuritySignalMission : Mission + { + public static Mission Create() + { + return new SecuritySignalMission(); + } + + public int[] stringToInt(string str) + { + return str.Split(' ').Select(s => (int)Convert.ToInt16(s, 10)).ToArray(); + } + + public class NOdeIsEnableMissionStatus : MissionStatus + { + public static List staions = new List() { "One","Two","Three","Four","Five"}; + public static List signalDB = new List() { "beat", "request", "allowRequest", "entering", "inplace","requestLeave" ,"allowLeave","leaving","safeLeave","AGVAlarm","PlcAlarm"}; + + public List One = Enumerable.Repeat(false, signalDB.Count()).ToList(); + + public Dictionary> signal = new Dictionary>(); + + + public List Two = Enumerable.Repeat(false, signalDB.Count()).ToList(); + + + public List Three = Enumerable.Repeat(false, signalDB.Count()).ToList(); + public List Four = Enumerable.Repeat(false, signalDB.Count()).ToList(); + + + public List Five = Enumerable.Repeat(false, signalDB.Count()).ToList(); + public List Six = Enumerable.Repeat(false, signalDB.Count()).ToList(); + public List Seven = Enumerable.Repeat(false, signalDB.Count()).ToList(); + public List Eight = Enumerable.Repeat(false, signalDB.Count()).ToList(); + public float readOnceTime = 0; + public float readAllDataTime = 0; + public float writeOnceTime = 0; + public float writeAllDataTime = 0; + + + } + + public override MissionStatus status { get; set; } = new NOdeIsEnableMissionStatus(); + + + [JsonIgnore] public Thread myThread; + + [JsonIgnore] private bool started = false; + + [JsonIgnore] private int iterationComm = 0; + + + [JsonIgnore] private object sync = new(); + [JsonIgnore] public static HttpClient hc = new HttpClient() { Timeout = TimeSpan.FromSeconds(2) }; + + [MethodMember(Name = "启动进程", Description = "开始处理上下料队列")] + public override void Execute() + { + started = true; + Task.Factory.StartNew(() => { + HttpPostData httpPostData = new HttpPostData(); + Dictionary> Allsignal = new Dictionary>(); + //Dictionary stationSignals = new Dictionary(); + while (started) + { + try + { + + foreach (var station in NOdeIsEnableMissionStatus.staions) + { + Dictionary stationSignals = new Dictionary(); + foreach (var signalName in NOdeIsEnableMissionStatus.signalDB) + { + // 根据station和signalName获取对应的bool值 + bool signalValue; + switch (station) + { + case "One": + signalValue = ((NOdeIsEnableMissionStatus)status).One[(NOdeIsEnableMissionStatus.signalDB).IndexOf(signalName)]; + break; + case "Two": + signalValue = ((NOdeIsEnableMissionStatus)status).Two[(NOdeIsEnableMissionStatus.signalDB).IndexOf(signalName)]; + break; + case "Three": + signalValue = ((NOdeIsEnableMissionStatus)status).Three[(NOdeIsEnableMissionStatus.signalDB).IndexOf(signalName)]; + break; + case "Four": + signalValue = ((NOdeIsEnableMissionStatus)status).Four[(NOdeIsEnableMissionStatus.signalDB).IndexOf(signalName)]; + break; + case "Five": + signalValue = ((NOdeIsEnableMissionStatus)status).Five[(NOdeIsEnableMissionStatus.signalDB).IndexOf(signalName)]; + break; + case "Six": + signalValue = ((NOdeIsEnableMissionStatus)status).Six[(NOdeIsEnableMissionStatus.signalDB).IndexOf(signalName)]; + break; + case "Seven": + signalValue = ((NOdeIsEnableMissionStatus)status).Seven[(NOdeIsEnableMissionStatus.signalDB).IndexOf(signalName)]; + break; + case "Eight": + signalValue = ((NOdeIsEnableMissionStatus)status).Eight[(NOdeIsEnableMissionStatus.signalDB).IndexOf(signalName)]; + break; + default: + throw new Exception("Invalid station name"); + } + + // 检查字典中是否存在指定的键,如果存在则修改其值,否则添加新的键值对 + if (stationSignals.ContainsKey(signalName)) + { + stationSignals[signalName] = signalValue; + } + else + { + stationSignals.Add(signalName, signalValue); + } + } + if (Allsignal.ContainsKey(station)) + { + Allsignal[station] = stationSignals; + } + else { + Allsignal.Add(station, stationSignals); + } + + } + string result=JsonConvert.SerializeObject(Allsignal); + //string result = GetListsAsStrings((NOdeIsEnableMissionStatus)status); + + + Diagnosis.Log($"向迷毂提供安全信号---{result}", "signalinfo", true); + + + httpPostData.UploadSignal(result); + Thread.Sleep(500); + } + catch (Exception e) + { + + Diagnosis.Post($"{ExceptionFormatter.FormatEx(e)}", "安全信号"); + } + + } + + + }); + } + + [MethodMember(Name = "关闭机构进程", Description = "关闭机构进程")] + public void Stop() + { + started = false; + status.status = $"已停止-循环"; + } + Stopwatch stopwatch3 = new Stopwatch(); + Stopwatch stopwatch2 = new Stopwatch(); + + + public static string GetListsAsStrings(object obj) + { + Dictionary result = new Dictionary(); + Type type = obj.GetType(); + FieldInfo[] fieldInfo= type.GetFields(); + foreach (FieldInfo property in fieldInfo) + { + if (property.FieldType== typeof(List)) + { + List list = (List)property.GetValue(obj); + result[property.Name] = String.Join(",", list.Select(b => b ? "1" : "0")); + + } + } + return JsonConvert.SerializeObject(result); + } + + } +} diff --git a/StandardScene.Core/StandardCADTool.cs b/StandardScene.Core/StandardCADTool.cs new file mode 100644 index 0000000..604b08c --- /dev/null +++ b/StandardScene.Core/StandardCADTool.cs @@ -0,0 +1,294 @@ +using Newtonsoft.Json; +using SimpleLite; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore; +using SimpleCore.Library; +using SimpleCore.PropType; +using StandardScene.Model; +using System; +using System.Collections.Generic; +using System.Diagnostics.Eventing.Reader; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace StandardScene +{ + [CADToolDescriptor(name = "复制目标站点所有字段")] + public class CopySiteFieldsFromTarget : CADTool + { + public override async void Invoke() + { + var sel = SimpleMonitor.selected.OfType().ToList(); + var targetPoint = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + var targetSite = SimpleLib.GetSite(targetPoint.site); + + var ignoreKey = new string[] { "mustFree" }; + if (sel.Count <= 0) return; + foreach (var site in sel) + { + foreach (var field in targetSite.fields) + { + if (ignoreKey.Contains(field.Key)) continue; + site.fields[field.Key] = field.Value; + } + } + } + } + + [CADToolDescriptor(name = "区域流量管控-限制进入区域的车数量")] + public class RegionalTrafficControl : CADTool + { + // 重写调用方法:执行区域流量管控的车辆数量限制配置 + public override async void Invoke() + { + // 获取选中的所有站点UI对象 + var selectedSites = SimpleMonitor.selected.OfType().ToList(); + // 弹出输入框,提示用户按「区域编号,限制数量」格式输入,取消则直接返回 + var inputDialogResult = InputBox.ShowDialog("请输入区域编号和限制数量,格式:1,3"); + if (inputDialogResult != SimpleLite.DialogResult.OK) return; + + // 拆分输入的区域编号和限制数量 + var inputValues = InputBox.ResultValue.Split(','); + // 若无配置信息,直接返回 + if (inputValues.Length <= 1) return; + // 解析区域编号(浮点型保留原类型,兼容后续扩展) + var areaNumber = float.Parse(inputValues[0]); + // 解析区域车辆限制数量(浮点型保留原类型,兼容非整数配置) + var limitVehicleCount = float.Parse(inputValues[1]); + // 遍历所有选中站点,为其添加区域流量管控的字段配置 + foreach (var currentSite in selectedSites) + { + // 配置字段:area+区域编号 作为键,限制数量作为值 + if (!currentSite.fields.ContainsKey($"Region{areaNumber}")) + { + currentSite.fields.Add($"Region{areaNumber}", limitVehicleCount.ToString()); + + } + + } + } + } + + + [CADToolDescriptor(name = "复制目标站点所有字段(不覆盖)")] + public class CopySiteFieldsFromTargetNoOverwrite : CADTool + { + public override async void Invoke() + { + var sel = SimpleMonitor.selected.OfType().ToList(); + var targetPoint = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + var targetSite = SimpleLib.GetSite(targetPoint.site); + var ignore = new string[] { "mustFree" }; + if (sel.Count <= 0) return; + foreach (var site in sel) + { + foreach (var field in targetSite.fields) + { + if (!site.fields.ContainsKey(field.Key)) + { + site.fields[field.Key] = field.Value; + } + } + } + } + } + + [CADToolDescriptor(name = "复制目标站点颜色")] + public class BatchChangeSiteColor : CADTool + { + public override async void Invoke() + { + var sel = SimpleMonitor.selected.OfType().ToList(); + var targetPoint = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true }); + var targetSite = (UISite)SimpleLib.GetSite(targetPoint.site); + if (sel.Count <= 0) return; + foreach (var site in sel) + { + site.color = targetSite.color; + } + } + } + + [CADToolDescriptor(name = "导入FASS地图")] + public class ImportFASSMap : CADTool + { + public override void Invoke() + { + //打开文件选择框 + using (var ofd = new System.Windows.Forms.OpenFileDialog()) + { + ofd.InitialDirectory = "C:\\"; + ofd.Filter = "FASS地图文件(*.json)|*.json"; + if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) + { + string filePath = ofd.FileName; + //解析文件内容 + string jsonString = File.ReadAllText(filePath); + MapStructure mapStructure = JsonConvert.DeserializeObject(jsonString); + Model.Configuration configuration = ConvertMapStructureToConfiguration(mapStructure); + // 输出 JSON 字符串到文本文件 + // 将 MapStructure 对象序列化为 JSON 字符串 + // 设置格式化选项 + string jsonSsring = JsonConvert.SerializeObject(configuration); + + // 获取桌面路径 + string desktopPath = + AppDomain.CurrentDomain + .BaseDirectory; // Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + string outPath = Path.Combine(desktopPath, "output.json"); // 输出文件路径 + + // 输出 JSON 字符串到桌面上的文本文件 + File.WriteAllText(outPath, jsonSsring); + + + Console.WriteLine($"JSON 数据已成功写入到 {outPath}"); + //todo:分析文件内容,并导入站点、路径信息 + } + } + } + + + + public static Model.Configuration ConvertMapStructureToConfiguration(MapStructure mapStructure) + { + Model.Configuration config = new Model.Configuration(); + List index = new List(); + + // 处理 Sites + foreach (var node in mapStructure.Nodes) + { + SimpleSite site = new SimpleSite + { + id = int.Parse(node.Code.Text), // 将 node.Code.Text 赋值给 SimpleSite 的 Id + name = node.Name.Text, // 将 node.Name.Text 赋值给 SimpleSite 的 Name + x = node.Base.Point.X, // 将 node.Base.Point.X 赋值给 SimpleSite 的 X + y = node.Base.Point.Y, // 将 node.Base.Point.Y 赋值给 SimpleSite 的 Y + color = "defaultColor", // 默认颜色示例,您可以根据需要更改 + displaySetting = "defaultDisplay", // 默认显示设置示例,您可以根据需要更改 + fields = new Dictionary(), // Assuming fields is an empty object + mustFree = new List() // Assuming mustFree is an empty array + }; + + config.Sites[node.Code.Text] = site; // 将 SimpleSite 添加到 Sites 字典中 + AddInDescendingOrder(index, int.Parse(node.Code.Text)); + } + + // 处理 Tracks + foreach (var edge in mapStructure.Edges) + { + + int id = index[0] + 1; + AddInDescendingOrder(index, id); + StandardScene.Model.Track track = new StandardScene.Model.Track + { + id = id, // 将 edge.Index 赋值给 Track 的 Id + name = "NoName", // 将 edge.Name.Text 赋值给 Track 的 Name + siteA = int.Parse(mapStructure.Nodes.Find(n => n.Id == edge.Data.StartNodeId).Code + .Text), // 找到 StartNode 的索引 + siteB = int.Parse(mapStructure.Nodes.Find(n => n.Id == edge.Data.EndNodeId).Code + .Text), // 找到 EndNode 的索引 + _siteA = int.Parse(mapStructure.Nodes.Find(n => n.Id == edge.Data.StartNodeId).Code.Text), + _siteB = int.Parse(mapStructure.Nodes.Find(n => n.Id == edge.Data.EndNodeId).Code.Text), + fields = new Dictionary(), + typeInfo = "0", + layerName = "g", + displaySetting = "" + }; + + + config.Tracks[id.ToString()] = track; // 将 Track 添加到 Tracks 字典中 + + } + + return config; + } + + static void AddInDescendingOrder(List list, int number) + { + // 找到插入位置 + int i = 0; + while (i < list.Count && list[i] >= number) + { + i++; + } + + list.Insert(i, number); // 在找到的位置插入 + } + } + + [CADToolDescriptor(name = "批量间距生成站点")] + public class BulkIntervalSiteCreator : CADTool + { + public override async void Invoke() + { + + try + { + G.pushStatus("请选择参考点"); + var target = await Program.UI.getPoint(); + var templateSite = SimpleLib.GetAllSites().OrderBy(p => LessMath.dist(target.x, target.y, p.x, p.y)) + .FirstOrDefault(); + // 检查是否找到模板站点 + if (templateSite == null) + { + G.pushStatus("未找到参考站点"); + return; + } + + // 存储所有生成的站点(用于处理组间连接) + List generatedSites = new List(); + if (InputBox.ShowDialog("请输入需要生成的二维码数量(必须是偶数数量)以及站点间距和延伸角度,,格式为\"6,1000,0\"。") != + SimpleLite.DialogResult.OK) return; + generatedSites.Add((UISite)templateSite); + var values = InputBox.ResultValue.Split(',').Select(ss => float.Parse(ss)).ToArray(); + // 验证数量是否为偶数 + if (values[0] % 2 != 0) + { + G.pushStatus("数量必须是偶数"); + return; + } + + for (int i = 0; i < values[0] / 2; i = i + 2) + { + var curPos = Tuple.Create(templateSite.x, templateSite.y, values[2]); + var targetPos = LessMath.Transform2D(curPos, Tuple.Create(values[1] * (i + 1), 0f, 0f)); + var targetPos2 = LessMath.Transform2D(curPos, Tuple.Create(values[1] * (i + 2), 0f, 0f)); + + var siteA = new UISite() { id = Prop.GenerateID(), x = targetPos.Item1, y = targetPos.Item2 }; + ((UISite)siteA).color = ""; // + var siteB = new UISite() { id = Prop.GenerateID(), x = targetPos2.Item1, y = targetPos2.Item2 }; + SimpleLib.SetSite(siteA); + SimpleLib.SetSite(siteB); + generatedSites.Add(siteA); + generatedSites.Add(siteB); + + } + + for (int i = 0; i < generatedSites.Count - 1; i++) + { + Commons.AddOrUpdateSiteField(generatedSites[i], "tag", "0"); + // 每两个相邻站点都创建路径(包含组内和组间) + SimpleLib.SetTrack(new UITrack( + generatedSites[i].id, + generatedSites[i + 1].id + )); + } + } + catch (Exception e) + { + Console.WriteLine(e); + } + + + } + } + + // SyncQrMap(同步二维码地图到小车)已迁出至 StandardScene.QrLidar\Cad\SyncQrMap.cs(scene.qrlidar 平台)。 +} diff --git a/StandardScene.Core/StandardScene.Core.csproj b/StandardScene.Core/StandardScene.Core.csproj new file mode 100644 index 0000000..e57e7e9 --- /dev/null +++ b/StandardScene.Core/StandardScene.Core.csproj @@ -0,0 +1,64 @@ + + + + net8.0-windows + Library + true + StandardScene + StandardScene + latest + true + AnyCPU;x64 + x64 + true + false + disable + disable + false + + $(NoWarn);NU1701;CS0618;CS0612;MSB3277;CA1416 + + {HintPathFromItem};{TargetFrameworkDirectory};{RawFileName};{GAC} + + + + + + + + E:\Work\Core\Simple-FR\Simple\SimpleLite\bin\Debug\SimpleLite.dll + + + E:\Work\Core\Simple-FR\Simple\SimpleCore\bin\Debug\netstandard2.0\SimpleCore.dll + + + D:\MDCS\Dependencies\Commons\CommonUsage.dll + + + D:\MDCS\Dependencies\Commons\MDCSToolBox.dll + + + E:\Work\Core\Simple-FR\Simple\tools\Topaz.dll + + + E:\Work\Core\Simple-FR\Simple\SimpleLite\bin\Debug\LessokajiWeaverUtilities.dll + + + Ref\leegKeys-sdk.dll + + + + + + + + + + + + + + + + diff --git a/StandardScene.Core/TCP/AsyncTcpClient.cs b/StandardScene.Core/TCP/AsyncTcpClient.cs new file mode 100644 index 0000000..6a8fd0e --- /dev/null +++ b/StandardScene.Core/TCP/AsyncTcpClient.cs @@ -0,0 +1,502 @@ +using SimpleCore.Library; +using System; +using System.Diagnostics; +using System.Globalization; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.ToolTip; + +namespace StandardScene.TCP +{ + /// + /// 异步 TCP 客户端 + /// + public class AsyncTcpClient : IDisposable + { + private sealed class DatagramReadState + { + public TcpClient Client { get; set; } + public byte[] Buffer { get; set; } + } + + public event EventHandler> DatagramReceived; // 接收到数据报文事件 + public event EventHandler> PlaintextReceived; // 接收到数据报文明文事件 + public event EventHandler ServerConnected; // 与服务器的连接已建立事件 + public event EventHandler ServerDisconnected; // 与服务器的连接已断开事件 + public event EventHandler ServerExceptionOccurred; // 与服务器的连接发生异常事件 + + private TcpClient tcpClient; + private bool disposed = false; + private int retries = 0; // 重连计数 + + private readonly object _reconnectGate = new object(); + private bool _closing = false; + private bool _isConnecting = false; + private bool _isReconnecting = false; + private Timer _reconnectTimer; + + public AsyncTcpClient(IPAddress remoteIPAddress, int remotePort) + { + this.Addresses = remoteIPAddress; + this.Port = remotePort; + this.Encoding = Encoding.Default; + this.Retries = 3; + this.RetryInterval = 5; + } + + /// + /// 是否已与服务器建立连接 + /// + public bool Connected + { + get + { + try + { + return this.tcpClient != null && this.tcpClient.Connected; + } + catch + { + return false; + } + } + } + + /// + /// 远端服务器的IP地址列表 + /// + public IPAddress Addresses { get; private set; } + + /// + /// 远端服务器的端口 + /// + public int Port { get; private set; } + + /// + /// 连接重试次数 + /// + public int Retries { get; set; } + + /// + /// 连接重试间隔 + /// + public int RetryInterval { get; set; } + + /// + /// 远端服务器终结点 + /// + public IPEndPoint RemoteIPEndPoint + { + get + { + return new IPEndPoint(this.Addresses, this.Port); + } + } + + /// + /// 通信所使用的编码 + /// + public Encoding Encoding { get; set; } + uint on = 1; + + /// + /// 连接到服务器 + /// + /// + public AsyncTcpClient Connect() + { + lock (_reconnectGate) + { + _closing = false; + } + + if (this.Connected) + { + return this; + } + + this.ConnectInternal(resetRetries: true); + return this; + } + + private void ConnectInternal(bool resetRetries) + { + TcpClient client; + + lock (_reconnectGate) + { + if (_closing || disposed) + { + return; + } + + // Prevent multiple in-flight connection attempts. + if (_isConnecting || _isReconnecting) + { + return; + } + + _isConnecting = true; + if (resetRetries) + { + retries = 0; + } + + client = new TcpClient(); + this.tcpClient = client; + } + + try + { + client.Client.IOControl(IOControlCode.KeepAliveValues, KeepAlive(1, 500, 500), null); + client.BeginConnect(this.Addresses, this.Port, new AsyncCallback(this.HandleTcpServerConnected), client); + } + catch + { + try { client.Close(); } catch { } + + lock (_reconnectGate) + { + _isConnecting = false; + } + + if (!_closing && !disposed) + { + ScheduleReconnect("connect begin failed"); + } + } + } + + private void HandleRemoteDisconnect(TcpClient client, string reason) + { + if (!ReferenceEquals(client, this.tcpClient)) + { + return; + } + + try { client.Close(); } catch { } + + this.RaiseServerDisconnected(this.Addresses, this.Port); + + if (!_closing && !disposed) + { + ScheduleReconnect(reason); + } + } + + private void ScheduleReconnect(string reason) + { + lock (_reconnectGate) + { + if (_closing || disposed) + { + return; + } + + if (this.Connected) + { + return; + } + + if (_isConnecting || _isReconnecting) + { + return; + } + + // Keep reconnecting until the client is closed/disposed. + // Preserve the counter only for logging (avoid int overflow by wrapping). + if (retries == int.MaxValue) + { + retries = 0; + } + retries++; + _isReconnecting = true; + + if (_reconnectTimer != null) + { + try { _reconnectTimer.Dispose(); } catch { } + _reconnectTimer = null; + } + + Diagnosis.Post($"[AsyncTcpClient] schedule reconnect attempt {retries}/{this.Retries} in {this.RetryInterval}s. Reason={reason}"); + + Timer t = null; + t = new Timer(_ => + { + try + { + lock (_reconnectGate) + { + _isReconnecting = false; + _reconnectTimer = null; + } + + this.ConnectInternal(resetRetries: false); + } + catch { } + finally + { + try { t.Dispose(); } catch { } + } + }, null, TimeSpan.FromSeconds((double)this.RetryInterval), Timeout.InfiniteTimeSpan); + + _reconnectTimer = t; + } + } + + private byte[] KeepAlive(int onOff, int keepAliveTime, int keepAliveInterval) + { + byte[] buffer = new byte[12]; + BitConverter.GetBytes(onOff).CopyTo(buffer, 0); + BitConverter.GetBytes(keepAliveTime).CopyTo(buffer, 4); + BitConverter.GetBytes(keepAliveInterval).CopyTo(buffer, 8); + return buffer; + } + + /// + /// 关闭与服务器的连接 + /// + /// 异步TCP客户端 + public AsyncTcpClient Close() + { + TcpClient clientToClose = null; + bool wasConnected = false; + + lock (_reconnectGate) + { + _closing = true; + retries = 0; + _isConnecting = false; + _isReconnecting = false; + + if (_reconnectTimer != null) + { + try { _reconnectTimer.Dispose(); } catch { } + _reconnectTimer = null; + } + + clientToClose = this.tcpClient; + wasConnected = clientToClose != null && clientToClose.Connected; + this.tcpClient = null; + } + + if (clientToClose != null) + { + try { clientToClose.Close(); } catch { } + } + + if (wasConnected) + { + this.RaiseServerDisconnected(this.Addresses, this.Port); + } + return this; + } + + private void HandleTcpServerConnected(IAsyncResult ar) + { + TcpClient client = (TcpClient)ar.AsyncState; + try + { + if (!ReferenceEquals(client, this.tcpClient)) + { + // Stale connect callback for an old TcpClient instance. + try { client.Close(); } catch { } + return; + } + + client.EndConnect(ar); + this.RaiseServerConnected(this.Addresses, this.Port); + + lock (_reconnectGate) + { + this.retries = 0; + _isConnecting = false; + _isReconnecting = false; + + if (_reconnectTimer != null) + { + try { _reconnectTimer.Dispose(); } catch { } + _reconnectTimer = null; + } + } + + byte[] buffer = new byte[client.ReceiveBufferSize]; + var state = new DatagramReadState { Client = client, Buffer = buffer }; + client.GetStream().BeginRead(buffer, 0, buffer.Length, new AsyncCallback(this.HandleDatagramReceived), state); + } + catch (Exception ex) + { + if (!ReferenceEquals(client, this.tcpClient)) + { + return; + } + + lock (_reconnectGate) + { + _isConnecting = false; + } + + if (!_closing && !disposed) + { + Diagnosis.Post($" HandleTcpServerConnected {this.Addresses} {this.Port} 连接断开,尝试重连..."); + ScheduleReconnect("connect failed"); + } + } + } + + private void HandleDatagramReceived(IAsyncResult ar) + { + DatagramReadState state = null; + TcpClient client = null; + byte[] buffer = null; + + try + { + state = (DatagramReadState)ar.AsyncState; + client = state.Client; + buffer = state.Buffer; + + if (!ReferenceEquals(client, this.tcpClient)) + { + // Stale read callback for an old TcpClient instance. + return; + } + + NetworkStream stream = client.GetStream(); + int numberOfReadBytes = 0; + try + { + numberOfReadBytes = stream.EndRead(ar); + } + catch + { + numberOfReadBytes = 0; + } + + if (numberOfReadBytes == 0) + { + HandleRemoteDisconnect(client, "zero-byte read"); + return; + } + + byte[] receivedBytes = new byte[numberOfReadBytes]; + Buffer.BlockCopy(buffer, 0, receivedBytes, 0, numberOfReadBytes); + this.RaiseDatagramReceived(client, receivedBytes); + this.RaisePlaintextReceived(client, receivedBytes); + + // then start reading from the network again + stream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(this.HandleDatagramReceived), state); + } + catch (Exception ex) + { + Trace.WriteLine(ex.Message); + + if (client != null && ReferenceEquals(client, this.tcpClient) && !_closing && !disposed) + { + HandleRemoteDisconnect(client, "read failed"); + } + } + } + + private void RaiseDatagramReceived(TcpClient sender, byte[] datagram) + { + if (this.DatagramReceived != null) + { + this.DatagramReceived(this, new TcpDatagramReceivedEventArgs(sender, datagram)); + } + } + + private void RaisePlaintextReceived(TcpClient sender, byte[] datagram) + { + if (this.PlaintextReceived != null) + { + //this.PlaintextReceived(this, new TcpDatagramReceivedEventArgs(sender, this.Encoding.GetString(datagram, 0, datagram.Length))); + this.PlaintextReceived(this, new TcpDatagramReceivedEventArgs(sender, datagram)); + } + } + + private void RaiseServerConnected(IPAddress ipAddresses, int port) + { + if (this.ServerConnected != null) + { + this.ServerConnected(this, new TcpServerConnectedEventArgs(ipAddresses, port)); + } + } + + private void RaiseServerDisconnected(IPAddress ipAddresses, int port) + { + if (this.ServerDisconnected != null) + { + this.ServerDisconnected(this, new TcpServerDisconnectedEventArgs(ipAddresses, port)); + } + } + + private void RaiseServerExceptionOccurred(IPAddress ipAddresses, int port, Exception innerException) + { + if (this.ServerExceptionOccurred != null) + { + this.ServerExceptionOccurred(this, new TcpServerExceptionOccurredEventArgs(ipAddresses, port, innerException)); + } + } + + /// + /// 发送报文 + /// + /// + public void Send(byte[] datagram) + { + if (datagram == null) + { + throw new ArgumentNullException("datagram"); + } + if (!this.Connected) + { + this.RaiseServerDisconnected(this.Addresses, this.Port); + throw new InvalidProgramException("This client has not connected to server."); + } + this.tcpClient.GetStream().BeginWrite(datagram, 0, datagram.Length, new AsyncCallback(this.HandleDatagramWritten), this.tcpClient); + } + + private void HandleDatagramWritten(IAsyncResult ar) + { + ((TcpClient)ar.AsyncState).GetStream().EndWrite(ar); + } + + public void Send(string datagram) + { + this.Send(this.Encoding.GetBytes(datagram)); + } + + /// + /// 释放非托管资源 + /// + public void Dispose() + { + this.Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (!this.disposed) + { + this.disposed = true; + + if (disposing) + { + try + { + this.Close(); + } + catch// (SocketException ex) + { + } + } + } + } + + } +} \ No newline at end of file diff --git a/StandardScene.Core/TCP/TcpDatagramReceivedEventArgs.cs b/StandardScene.Core/TCP/TcpDatagramReceivedEventArgs.cs new file mode 100644 index 0000000..2e7e608 --- /dev/null +++ b/StandardScene.Core/TCP/TcpDatagramReceivedEventArgs.cs @@ -0,0 +1,22 @@ +using System; +using System.Net.Sockets; + +namespace StandardScene.TCP +{ + /// + /// 接收到数据报文事件 + /// + /// + public class TcpDatagramReceivedEventArgs : EventArgs + { + public TcpDatagramReceivedEventArgs(TcpClient tcpClient, T datagram) + { + this.TcpClient = tcpClient; + this.Datagram = datagram; + } + + public TcpClient TcpClient { get; private set; } + + public T Datagram { get; private set; } + } +} \ No newline at end of file diff --git a/StandardScene.Core/TCP/TcpServerConnectedEventArgs.cs b/StandardScene.Core/TCP/TcpServerConnectedEventArgs.cs new file mode 100644 index 0000000..8d0232d --- /dev/null +++ b/StandardScene.Core/TCP/TcpServerConnectedEventArgs.cs @@ -0,0 +1,31 @@ +using System; +using System.Globalization; +using System.Net; + +namespace StandardScene.TCP +{ + /// + /// 与服务器的连接已建立事件 + /// + public class TcpServerConnectedEventArgs : EventArgs + { + public TcpServerConnectedEventArgs(IPAddress ipAddress, int port) + { + if (ipAddress == null) + { + throw new ArgumentNullException("ipAddress"); + } + this.Address = ipAddress; + this.Port = port; + } + + public IPAddress Address { get; private set; } + + public int Port { get; private set; } + + public override string ToString() + { + return this.Address + ":" + this.Port.ToString(CultureInfo.InvariantCulture); + } + } +} \ No newline at end of file diff --git a/StandardScene.Core/TCP/TcpServerDisconnectedEventArgs.cs b/StandardScene.Core/TCP/TcpServerDisconnectedEventArgs.cs new file mode 100644 index 0000000..3f06c03 --- /dev/null +++ b/StandardScene.Core/TCP/TcpServerDisconnectedEventArgs.cs @@ -0,0 +1,31 @@ +using System; +using System.Globalization; +using System.Net; + +namespace StandardScene.TCP +{ + /// + /// 与服务器的连接已断开事件 + /// + public class TcpServerDisconnectedEventArgs : EventArgs + { + public TcpServerDisconnectedEventArgs(IPAddress ipAddress, int port) + { + if (ipAddress == null) + { + throw new ArgumentNullException("ipAddress"); + } + this.Address = ipAddress; + this.Port = port; + } + + public IPAddress Address { get; private set; } + + public int Port { get; private set; } + + public override string ToString() + { + return this.Address + ":" + this.Port.ToString(CultureInfo.InvariantCulture); + } + } +} \ No newline at end of file diff --git a/StandardScene.Core/TCP/TcpServerExceptionOccurredEventArgs.cs b/StandardScene.Core/TCP/TcpServerExceptionOccurredEventArgs.cs new file mode 100644 index 0000000..471e563 --- /dev/null +++ b/StandardScene.Core/TCP/TcpServerExceptionOccurredEventArgs.cs @@ -0,0 +1,34 @@ +using System; +using System.Globalization; +using System.Net; + +namespace StandardScene.TCP +{ + /// + /// 与服务器的连接发生异常事件 + /// + public class TcpServerExceptionOccurredEventArgs : EventArgs + { + public TcpServerExceptionOccurredEventArgs(IPAddress ipAddresses, int port, Exception innerException) + { + if (ipAddresses == null) + { + throw new ArgumentNullException("ipAddress"); + } + this.Address = ipAddresses; + this.Port = port; + this.Exception = innerException; + } + + public IPAddress Address { get; private set; } + + public int Port { get; private set; } + + public Exception Exception { get; private set; } + + public override string ToString() + { + return this.Address + ":" + this.Port.ToString(CultureInfo.InvariantCulture); + } + } +} \ No newline at end of file diff --git a/StandardScene.Core/Utils/JsonParser.cs b/StandardScene.Core/Utils/JsonParser.cs new file mode 100644 index 0000000..2b152d6 --- /dev/null +++ b/StandardScene.Core/Utils/JsonParser.cs @@ -0,0 +1,50 @@ +using Newtonsoft.Json; +using SimpleCore.Library; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using StandardScene.Chained; + +namespace StandardScene.Utils +{ + public static class JsonParser + { + public static object fileSync = new object(); + + public static void WriteJsonFile(TransportDelivery obj) + { + try + { + lock (fileSync) + File.WriteAllText($"log/tasklist/{obj.TaskId}.json", + JsonConvert.SerializeObject(obj, Formatting.Indented)); + } + catch (Exception e) + { + Diagnosis.Log("write tasklist error" + ExceptionFormatter.FormatEx(e), "error", true); + } + } + + public static string ReadJsonFile(string path) + { + lock (fileSync) + { + return File.ReadAllText(path); + } + } + + // Json->Object + //DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(ChainedDeliveryMission.Delivery)); + public static TransportDelivery Deserialize(string json) + { + TransportDelivery obj = new TransportDelivery(); + + using MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)); + JsonConvert.PopulateObject(json, obj); + return obj; + } + } +} diff --git a/StandardScene.Core/Utils/JsonTool.cs b/StandardScene.Core/Utils/JsonTool.cs new file mode 100644 index 0000000..6a126b6 --- /dev/null +++ b/StandardScene.Core/Utils/JsonTool.cs @@ -0,0 +1,37 @@ +using Newtonsoft.Json.Linq; +using Newtonsoft.Json.Serialization; +using Newtonsoft.Json; + +namespace StandardScene.Utils +{ + public static class JsonTool + { + private static readonly JsonSerializerSettings DefaultJsonSerializerSettings = new JsonSerializerSettings() + { + ContractResolver = new CamelCasePropertyNamesContractResolver(), + ReferenceLoopHandling = ReferenceLoopHandling.Ignore, + DateFormatHandling = DateFormatHandling.MicrosoftDateFormat, + DateFormatString = "yyyy-MM-dd HH:mm:ss" + }; + public static string ToJson(this object obj) + { + return JsonConvert.SerializeObject(obj, DefaultJsonSerializerSettings); + } + public static string ToJson(this object obj, JsonSerializerSettings jsonSerializerSettings) + { + return JsonConvert.SerializeObject(obj, jsonSerializerSettings); + } + public static T JsonTo(this string Json) + { + return JsonConvert.DeserializeObject(Json); + } + public static object JsonToObject(this string Json) + { + return JsonConvert.DeserializeObject(Json); + } + public static JObject JsonToJObject(this string Json) + { + return JObject.Parse(Json); + } + } +} diff --git a/StandardScene.Core/Utils/ModbusClass.cs b/StandardScene.Core/Utils/ModbusClass.cs new file mode 100644 index 0000000..fa72bee --- /dev/null +++ b/StandardScene.Core/Utils/ModbusClass.cs @@ -0,0 +1,120 @@ +using System; +using System.IO.Ports; +using System.Linq; +using System.Net.Sockets; +using System.Threading; +using EasyModbus; + +namespace StandardScene.Utils +{ + + public class ModbusRtu + { + + public bool IsDebug { get; set; } + public byte[] ReceiveAfterSend; + public ModbusClient modbusRtu; + //modbusRtu + public void StartRtu(string com, int baudRate, Parity parity = Parity.None, StopBits stopBits = StopBits.One, int timeOut = 500) + { + modbusRtu = new ModbusClient(com); + modbusRtu.Baudrate = baudRate; + modbusRtu.Parity = parity; + modbusRtu.StopBits = stopBits; + modbusRtu.ConnectionTimeout = timeOut; + modbusRtu.Connect(); + } + //modbusTcp + public void StartTcpRtu(string ip, int port) + { + modbusRtu = new ModbusClient(ip, port); + modbusRtu.Connect(ip, port); + } + + public void Close() + { + modbusRtu.Disconnect(); + } + + #region ReadData + public bool[] ReadCoilBuffer_01(byte slaveAddress, ushort startAddress, ushort numberOfPoints)//01 读取单个线圈 + { + modbusRtu.UnitIdentifier = slaveAddress; + var data = modbusRtu.ReadCoils(startAddress, numberOfPoints); + return data; + } + public bool[] ReadDiscreteInputs_02(byte slaveAddress, ushort startAddress, ushort numberOfPoints)//02 读取输入线圈/离散量线圈 + { + modbusRtu.UnitIdentifier = slaveAddress; + var data = modbusRtu.ReadDiscreteInputs(startAddress, numberOfPoints); + return data; + } + public int[] ReadRegisterBuffer_03(byte slaveAddress, ushort startAddress, ushort numberOfPoints)//03 读取保持寄存器 + { + modbusRtu.UnitIdentifier = slaveAddress; + var data = modbusRtu.ReadHoldingRegisters(startAddress, numberOfPoints); + + return data; + } + public byte[] ReadRegisterBuffer_03_Byte(byte slaveAddress, ushort startAddress, ushort numberOfPoints)//03 读取保持寄存器 + { + modbusRtu.UnitIdentifier = slaveAddress; + var data = modbusRtu.ReadHoldingRegisters(startAddress, numberOfPoints); + byte[] values = new byte[] { }; + foreach (var buff in data) + { + values = values.Concat(BitConverter.GetBytes((Int16)buff).AsEnumerable().Reverse()).ToArray(); + } + return values; + } + + + public byte[] ReadInputBuffer_04(byte slaveAddress, ushort startAddress, ushort numberOfPoints)//04 读取输入寄存器 + { + + modbusRtu.UnitIdentifier = slaveAddress; + var data = modbusRtu.ReadInputRegisters(startAddress, numberOfPoints); + byte[] values = new byte[] { }; + foreach (var buff in data) + { + values = values.Concat(BitConverter.GetBytes((Int16)buff).AsEnumerable().Reverse()).ToArray(); + } + return values; + } + #endregion + + #region Write + public void WriteSingleCoil_05(byte slaveAddress, ushort startAddress, bool Buffer)//05 写单个线圈 + { + ReceiveAfterSend = null; + modbusRtu.UnitIdentifier = slaveAddress; + modbusRtu.WriteSingleCoil(startAddress, Buffer); + ReceiveAfterSend = modbusRtu.receiveData; + } + public void WriteSingleRegister_06(byte slaveAddress, ushort startAddress, int Buffer)//06 写单寄存器 + { + ReceiveAfterSend = null; + modbusRtu.UnitIdentifier = slaveAddress; + modbusRtu.WriteSingleRegister(startAddress, Buffer); + ReceiveAfterSend = modbusRtu.receiveData; + } + public void WriteMultipleCoils_15(byte slaveAddress, ushort startAddress, bool[] Buffer)//15写一组线圈 + { + ReceiveAfterSend = null; + modbusRtu.UnitIdentifier = slaveAddress; + modbusRtu.WriteMultipleCoils(startAddress, Buffer); + ReceiveAfterSend = modbusRtu.receiveData; + } + public void WriteMultipleRegisters_16(byte slaveAddress, ushort startAddress, int[] Buffers)//16 写一组保持寄存器 + { + ReceiveAfterSend = null; + modbusRtu.UnitIdentifier = slaveAddress; + modbusRtu.WriteMultipleRegisters(startAddress, Buffers); + ReceiveAfterSend = modbusRtu.receiveData; + + } + #endregion + + + } +} diff --git a/StandardScene.Core/Utils/WebAPIHelper.cs b/StandardScene.Core/Utils/WebAPIHelper.cs new file mode 100644 index 0000000..a377406 --- /dev/null +++ b/StandardScene.Core/Utils/WebAPIHelper.cs @@ -0,0 +1,163 @@ +using SimpleCore.Library; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Globalization; +using System.Net.Http; +using System.Threading.Tasks; + +namespace StandardScene.Utils +{ + public class WebAPIHelper + { + private static WebAPIHelper instance = null; + + public static WebAPIHelper Instance + { + get + { + return instance ?? (instance = new WebAPIHelper()); + } + } + + private ConcurrentDictionary clientPool = new ConcurrentDictionary(); + + private HttpClient getClient(string urlString) + { + var url = new Uri(urlString); + var key = $"{url.Host}:{url.Port}"; + return clientPool.GetOrAdd(key, _ => createClient()); + } + + private HttpClient createClient() + { + var client = new HttpClient(); + client.Timeout = TimeSpan.FromSeconds(3); + try + { + client.DefaultRequestHeaders.Add("User-Agent", "MDS/1.1"); + client.DefaultRequestHeaders.Add("Accept", "*/*"); + } + catch (Exception e) + { + Diagnosis.Log($"fail to add http client default header:{e}", "task", true); + } + return client; + } + + public async Task GetStringAsync(string url) + { + return await getClient(url).GetStringAsync(url); + } + + // /// + // /// 读取HTTP Get响应包文。 + // /// + // /// 返回结果的类型 + // /// 资源地址 + // /// 可选的HTTP头列表 + // /// 响应结果 + // public async Task GetAsync(string uriString, Dictionary headers = null) + // { + // T retv = default; + // + // HttpClient hc = getClient(uriString); + // var request = new HttpRequestMessage(HttpMethod.Get, uriString); + // if (headers != null) + // { + // foreach (var key in headers.Keys) + // { + // request.Headers.Add(key, headers[key]); + // } + // } + // var resp = await hc.SendAsync(request); + // resp.EnsureSuccessStatusCode(); + // + // var opt = new JsonSerializerOptions + // { + // PropertyNameCaseInsensitive = true + // }; + // opt.Converters.Add(new MyDateTimeConverter()); + // var json = await resp.Content.ReadAsStringAsync(); + // retv = JsonSerializer.Deserialize(json, opt); + // + // return retv; + // } + // + // private static JsonSerializerOptions jsonOptions = new JsonSerializerOptions + // { + // PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + // WriteIndented = true + // }; + + // /// + // /// 读取HTTP POST结果。 + // /// + // /// 响应结果类型 + // /// POST对象类型 + // /// 资源地址 + // /// 请求包文对象 + // /// 可选HTTP头列表 + // /// 是否写入日志,默认为真 + // /// 响应对象 + // public async Task PostAsync(string uriString, T2 data, Dictionary headers = null, bool logging = true) + // { + // //if (logging) + // Diagnosis.Log($"post to {uriString}\n{JsonSerializer.Serialize(data)}", "task", true); + // T1 retv = default; + // + // HttpClient hc = getClient(uriString); + // var request = new HttpRequestMessage(HttpMethod.Post, uriString); + // if (headers != null) + // { + // foreach (var key in headers.Keys) + // { + // request.Headers.Add(key, headers[key]); + // } + // } + // + // HttpContent content = new StringContent(JsonSerializer.Serialize( + // data, + // jsonOptions + // )); + // content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); + // request.Content = content; + // var resp = await hc.SendAsync(request); + // resp.EnsureSuccessStatusCode(); + // if (logging) + // Diagnosis.Post(JsonSerializer.Serialize(resp)); + // + // var opt = new JsonSerializerOptions + // { + // PropertyNameCaseInsensitive = true + // }; + // opt.Converters.Add(new MyDateTimeConverter()); + // var json = await resp.Content.ReadAsStringAsync(); + // Diagnosis.Log($"got post response\n{json}", "task", true); + // + // if (resp.StatusCode != System.Net.HttpStatusCode.OK) + // Diagnosis.Log($"post {uriString} return not ok\nStatusCode={resp.StatusCode.ToString()}\njson", "task", true); + // retv = JsonSerializer.Deserialize(json, opt); + // + // return retv; + // } + } + + // public class MyDateTimeConverter : JsonConverter + // { + // public override bool CanConvert(Type typeToConvert) + // { + // return typeToConvert == typeof(DateTime); + // } + // + // public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + // { + // return DateTime.ParseExact(reader.GetString(), "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); + // } + // + // public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) + // { + // writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss")); + // } + // } +} diff --git a/StandardScene.Core/WebApi.cs b/StandardScene.Core/WebApi.cs new file mode 100644 index 0000000..1ced9ea --- /dev/null +++ b/StandardScene.Core/WebApi.cs @@ -0,0 +1,2878 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Reflection; +using System.Security.Cryptography; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Xml.Linq; +using MDCSToolBox.Clumsy.Movements; +using Nancy; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using SimpleLite; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore; +using SimpleCore.Library; +using SimpleCore.PropType; +using StandardScene.Chained; +using StandardScene.Charge; +using StandardScene.Model; +using StandardScene.Utils; +using static StandardScene.Chained.ChainedDeliveryMission; +using Map = StandardScene.Model.Map; +using Nancy.Session; +using StandardScene.InterLock; + +namespace StandardScene +{ + /// + /// 【过渡期遗留】老平台 Nancy HTTP 接口(40+ 端点)。导航耦合极弱:仅二维码 QrMap(数据仍存 + /// 本类静态字段,由 scene.qrlidar 插件的 SyncQrMap 工具写入)与 getLidarMap。 + /// 拆分计划 §4.7:暂留 Core 维持现场兼容,后续逐步迁往 SimpleLite 的 EmbedIO 接口(MIGU-API), + /// 新功能请勿在此追加端点。 + /// + public class ApiController : NancyModule + { + private static readonly HttpClient SharedHttpClient = new HttpClient(); + private static readonly string ApiToken = Environment.GetEnvironmentVariable("STANDARDSCENE_API_TOKEN"); + private static List _taskRequests = new List(); + public static MyDict QrMap = + new MyDict(); + public static string QrMapJson; + + private string GetMethods(Type baseClassType) + { + var assembly = Assembly.GetExecutingAssembly(); + var derivedTypes = assembly.GetTypes() + .Where(t => t.IsSubclassOf(baseClassType)); + + var classMethodsDictionary = new Dictionary>(); + + foreach (var type in derivedTypes) + { + // old-school MethodMember + var methods = type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) + .Where(m => m.GetCustomAttribute() != null && m.GetCustomAttribute() == null) + .Select(m => + { + var attr = m.GetCustomAttribute(); + var ret = new MethodInfoDetails() { MethodName = m.Name }; + var nameField = attr.Name; + if (nameField != null) ret.ButtonName = nameField; + var descField = attr.Description; + if (descField != null) ret.ButtonDescription = descField; + return ret; + }) + .ToList(); + + // Methods with parameters + var paramMethods = type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) + .Where(m => m.GetCustomAttribute() != null) + .Select(m => + { + var attr = m.GetCustomAttribute(); + var ret = new MethodInfoDetails() { MethodName = m.Name }; + var nameField = attr.name; + if (nameField != null) ret.ButtonName = nameField; + var descField = attr.desc; + if (descField != null) ret.ButtonDescription = descField; + var hintField = attr.Hint; + if (hintField != null) ret.ParamsHint = hintField; + ret.ParamsList = m.GetParameters().Select(mp => new ParamInfo(mp.Name, mp.ParameterType)).ToList(); + return ret; + }) + .ToList(); + + classMethodsDictionary[type.Name] = methods.Concat(paramMethods).ToList(); + } + + return JsonConvert.SerializeObject( + new { Success = true, Code = 200, Data = classMethodsDictionary, Message = "Success" }, + Formatting.Indented); + } + + //获取指定class所有方法的字典 + private Dictionary> GetTypeMethods(Type type) + { + string[] shieldMethodButtonNames = new[] + { "导出小车日志", "前往站点", "重启通信进程", "手动下发指令", "计划重启", "抛出中断", "放行", "显示调试信息", "给逃逸路径的初始化","返厂检修" }; + var classMethodsDictionary = new Dictionary>(); + // old-school MethodMember + var methods = type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) + .Where(m => m.GetCustomAttribute() != null && m.GetCustomAttribute() == null) + .Where(m => !shieldMethodButtonNames.Any(n => m.GetCustomAttribute().Name.Contains(n))) + .Select(m => + { + var attr = m.GetCustomAttribute(); + var ret = new MethodInfoDetails() { MethodName = m.Name }; + var nameField = attr.Name; + if (nameField != null) ret.ButtonName = nameField; + var descField = attr.Description; + if (descField != null) ret.ButtonDescription = descField; + return ret; + }) + .ToList(); + + // Methods with parameters + var paramMethods = type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) + .Where(m => m.GetCustomAttribute() != null) + .Select(m => + { + var attr = m.GetCustomAttribute(); + var ret = new MethodInfoDetails() { MethodName = m.Name }; + var nameField = attr.name; + if (nameField != null) ret.ButtonName = nameField; + var descField = attr.desc; + if (descField != null) ret.ButtonDescription = descField; + var hintField = attr.Hint; + if (hintField != null) ret.ParamsHint = hintField; + ret.ParamsList = m.GetParameters().Select(mp => new ParamInfo(mp.Name, mp.ParameterType)).ToList(); + return ret; + }) + .ToList(); + + classMethodsDictionary[type.Name] = methods.Concat(paramMethods).ToList(); + + return classMethodsDictionary; + } + + /// + /// 反射调用白名单:仅允许显式标注为可暴露的方法被 HTTP 反射调用, + /// 与 GetMethods 的暴露口径一致,避免“按名调用任意 public 方法”的远程执行风险。 + /// + private static bool IsReflectionInvokable(MethodInfo methodInfo) + { + if (methodInfo == null) return false; + if (methodInfo.GetCustomAttribute() != null) return false; + return methodInfo.GetCustomAttribute() != null + || methodInfo.GetCustomAttribute() != null; + } + + private static string ReflectionForbidden(object id, string method) + { + return JsonConvert.SerializeObject(new + { + Success = false, + Code = 403, + Data = "null", + Message = $"method {method} of {id} is not exposed for reflection invocation" + }, Formatting.Indented); + } + + private bool IsAuthorized() + { + if (string.IsNullOrEmpty(ApiToken)) return true; + try + { + var q = ((DynamicDictionary)Request.Query).ToDictionary(); + return q.TryGetValue("token", out var t) && t != null && t.ToString() == ApiToken; + } + catch + { + return false; + } + } + + private static string Unauthorized() + { + return JsonConvert.SerializeObject(new + { + Success = false, + Code = 401, + Data = "null", + Message = "unauthorized: missing or invalid api token" + }, Formatting.Indented); + } + + private dynamic CarReflectionExecute(dynamic parameters) + { + try + { + if (!IsAuthorized()) return Unauthorized(); + var car = SimpleLib.GetCar((int)parameters.id); + if (car == null) + return JsonConvert.SerializeObject( + new { Success = false, Code = 500, Data = "null", Message = $"no car of id {parameters.id}" }, Formatting.Indented); + var queryParams = ((DynamicDictionary)Request.Query).ToDictionary(); + queryParams.Remove("token"); + MethodInfo methodInfo = null; + if (queryParams.Keys.Count == 0) + methodInfo = car.GetType().GetMethod((string)parameters.method, new Type[] { }); + else + methodInfo = car.GetType().GetMethod((string)parameters.method); + if (methodInfo == null) + return JsonConvert.SerializeObject( + new { Success = false, Code = 500, Data = "null", Message = $"car {parameters.id} has no method {parameters.method}" }, Formatting.Indented); + if (!IsReflectionInvokable(methodInfo)) + return ReflectionForbidden(parameters.id, (string)parameters.method); + return ExecuteMethod(methodInfo, car, queryParams); + } + catch (Exception ex) + { + return JsonConvert.SerializeObject( + new { Success = false, Code = 500, Data = "null", Message = ex.Message }, Formatting.Indented); + } + } + + private dynamic MissionReflectionExecute(dynamic parameters) + { + try + { + if (!IsAuthorized()) return Unauthorized(); + var mission = SimpleProject.proj.Missions.FirstOrDefault(mm => mm.id == (int)parameters.id); + if (mission == null) + return JsonConvert.SerializeObject( + new { Success = false, Code = 500, Data = "null", Message = $"no mission of id {parameters.id}" }, Formatting.Indented); + var methodInfo = mission.GetType().GetMethod((string)parameters.method); + if (methodInfo == null) + return JsonConvert.SerializeObject( + new { Success = false, Code = 500, Data = "null", Message = $"mission {parameters.id} has no method {parameters.method}" }, Formatting.Indented); + var queryParams = ((DynamicDictionary)Request.Query).ToDictionary(); + queryParams.Remove("token"); + if (!IsReflectionInvokable(methodInfo)) + return ReflectionForbidden(parameters.id, (string)parameters.method); + return ExecuteMethod(methodInfo, mission, queryParams); + } + catch (Exception ex) + { + return JsonConvert.SerializeObject( + new { Success = false, Code = 500, Data = "null", Message = ex.Message }, Formatting.Indented); + } + } + + private string ExecuteMethod(MethodInfo methodInfo, object instance, Dictionary inputs) + { + var methodParam = methodInfo.GetParameters(); + List paramList = new List(); + if (methodParam.Length == 0) + { + methodInfo.Invoke(instance, null); + } + else + { + if (inputs.Count != methodParam.Length) + { + return JsonConvert.SerializeObject( + new + { + Success = false, + Code = 500, + Data = "null", + Message = $"method need {methodParam.Length} params , but {inputs.Count}" + }, Formatting.Indented); + } + for (int i = 0; i < methodParam.Length; i++) + { + paramList.Add(Convert.ChangeType(inputs[methodParam[i].Name], methodParam[i].ParameterType)); + } + var actualParam = paramList.ToArray(); + methodInfo.Invoke(instance, actualParam); + } + + return JsonConvert.SerializeObject( + new { Success = true, Code = 200, Data = "null", Message = "Success" }, Formatting.Indented); + } + + + public ApiController() + { + After.AddItemToEndOfPipeline(ctx => + { + ctx.Response.WithHeader("Access-Control-Allow-Origin", "*") + .WithHeader("Access-Control-Allow-Methods", "POST,GET") + .WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-Type"); + }); + + // 反射接口共识: + // 所有simple的调度对象(包括车、进程)只有id是全局唯一的。 + // 所有simple的调度对象可能有不同的class,class相同的可能有不同的name(name并非全局唯一)。 + // 所有simple的调度对象都有属性(field)、状态(status)、动作(methodMember)。 + // 属性是可读可写的字典(用户设定属性,并保存属性作为运行配置)。状态是只读的字典。动作是函数成员。 + // 反射接口全部返回json字符串,包括success和result两个字段。 + // success为true或者false,分别表示请求成功或失败。 + // result为返回内容。success为false时,result是报错内容。 + + // 返回className + Get("/car_reflection/get_type/{id}", parameters => + { + try + { + var car = SimpleLib.GetCar((int)parameters.id); + if (car == null) + return JsonConvert.SerializeObject( + new + { + Success = false, + Code = 500, + Data = "null", + Message = $"no car of id {parameters.id}" + }, Formatting.Indented); + return JsonConvert.SerializeObject( + new { Success = true, Code = 200, Data = car.GetType().Name, Message = "Success" }, + Formatting.Indented); + } + catch (Exception ex) + { + return JsonConvert.SerializeObject( + new { success = false, Code = 500, Data = "null", Message = ex.Message }, Formatting.Indented); + } + }); + Get("/car_reflection/get_methods/{id}", parameters => + { + try + { + var car = SimpleLib.GetCar((int)parameters.id); + if (car == null) + return JsonConvert.SerializeObject( + new + { + Success = false, + Code = 500, + Data = "null", + Message = $"no car of id {parameters.id}" + }, Formatting.Indented); + + var classMethodsDictionary = GetTypeMethods(car.GetType()); + if (classMethodsDictionary == null) + { + return JsonConvert.SerializeObject(new + { + Success = false, + Code = 500, + Data = "null", + Message = $"未匹配到id:[{parameters.id}] 的车辆" + }, + Formatting.Indented); + } + return JsonConvert.SerializeObject(new + { + Success = true, + Code = 200, + Data = classMethodsDictionary.Values.FirstOrDefault(), + Message = "Success" + }, + Formatting.Indented); + + } + catch (Exception e) + { + return JsonConvert.SerializeObject(new + { + Success = false, + Code = 500, + Data = "null", + Message = e.Message + }, + Formatting.Indented); + } + }); + + // 返回每种className对应有哪些动作 + Get("/car_reflection/get_type_methods", _ => GetMethods(typeof(GhostCar))); + + // 执行动作(支持任意数量参数);执行类操作同时提供 POST 语义化入口,保留 GET 兼容旧前端 + Get("/car_reflection/execute/{id}/{method}", parameters => CarReflectionExecute(parameters)); + Post("/car_reflection/execute/{id}/{method}", parameters => CarReflectionExecute(parameters)); + + // 返回(id, name, className)的列表 + Get("/mission_reflection/get_mission_list", _ => + JsonConvert.SerializeObject(new + { + Success = true, + Code = 200, + Data = SimpleProject.proj.Missions.Select(mm => + { + var mType = (MissionType)mm.GetType().GetCustomAttribute(typeof(MissionType)); + return new { id = mm.id, name = mm.name, typeName = mType.Name, state = mm.status.status }; + }), + Message = "Success" + }, Formatting.Indented)); + + Get("/mission_reflection/get_type_methods", _ => GetMethods(typeof(Mission))); + + Get("/mission_reflection/execute/{id}/{method}", parameters => MissionReflectionExecute(parameters)); + Post("/mission_reflection/execute/{id}/{method}", parameters => MissionReflectionExecute(parameters)); + + Get("/mission_reflection/get_status/{id}", parameters => + { + try + { + var mission = SimpleProject.proj.Missions.FirstOrDefault(mm => mm.id == (int)parameters.id); + if (mission == null) + return JsonConvert.SerializeObject( + new + { + Success = false, + Code = 500, + Data = "null", + Message = $"no mission of id {parameters.id}" + }, Formatting.Indented); + + return JsonConvert.SerializeObject( + new { success = true, Code = 200, Data = mission.status, Message = "Success" }, + Formatting.Indented); + } + catch (Exception ex) + { + return JsonConvert.SerializeObject( + new { Success = false, Code = 500, Data = "null", result = ex.Message }, Formatting.Indented); + } + }); + + Get("/mission_reflection/get_fields/{id}", parameters => + { + try + { + var mission = SimpleProject.proj.Missions.FirstOrDefault(mm => mm.id == (int)parameters.id); + if (mission == null) + return JsonConvert.SerializeObject( + new + { + Success = false, + Code = 500, + Data = "null", + Message = $"no mission of id {parameters.id}" + }, Formatting.Indented); + + return JsonConvert.SerializeObject( + new + { + Success = true, + Code = 200, + Data = mission.fields.Select(x => { return new { Key = x.Key, Vaule = x.Value }; }) + .ToList(), + Message = "Success" + }, + Formatting.Indented); + } + catch (Exception ex) + { + return JsonConvert.SerializeObject( + new { Success = false, Code = 500, Data = "null", result = ex.Message }, Formatting.Indented); + } + }); + + Get("/mission_reflection/set_field/{id}/{field}/{value}", parameters => + { + try + { + var mission = SimpleProject.proj.Missions.FirstOrDefault(mm => mm.id == (int)parameters.id); + if (mission == null) + return JsonConvert.SerializeObject( + new { success = false, Data = "null", Message = $"no mission of id {parameters.id}" }, + Formatting.Indented); + + var fieldName = (string)parameters.field; + var fieldValue = (string)parameters.value; + mission.fields[fieldName] = fieldValue; + + return JsonConvert.SerializeObject( + new { Success = true, Code = 200, Data = "null", Message = "Success" }, Formatting.Indented); + } + catch (Exception ex) + { + return JsonConvert.SerializeObject( + new { Success = false, Code = 500, Data = "null", Message = ex.Message }, Formatting.Indented); + } + }); + + Get("/mission_reflection/delete_field/{id}/{field}", parameters => + { + try + { + var mission = SimpleProject.proj.Missions.FirstOrDefault(mm => mm.id == (int)parameters.id); + if (mission == null) + return JsonConvert.SerializeObject(new + { + Success = false, + Code = 500, + Data = "null", + Message = $"no mission of id {parameters.id}" + }, Formatting.Indented); + var fieldName = (string)parameters.field; + if (!mission.fields.ContainsKey(fieldName)) + { + return JsonConvert.SerializeObject(new + { + Success = false, + Code = 500, + Data = "null", + Message = $"mission not found field {parameters.field}" + }, Formatting.Indented); + } + mission.fields.Remove(fieldName); + return JsonConvert.SerializeObject(new + { + Success = true, + Code = 200, + Data = "null", + Message = "Success" + }, Formatting.Indented); + } + catch (Exception ex) + { + return JsonConvert.SerializeObject(new + { + Success = false, + Code = 500, + Data = "null", + Message = ex.Message + }, Formatting.Indented); + } + }); + Get("/mission_reflection/get_mission/{id}", parameters => + { + try + { + var classMethodsDictionary = new Dictionary>(); + var mission = SimpleProject.proj.Missions.FirstOrDefault(m => m.id == (int)parameters.id); + if (mission == null) + { + return JsonConvert.SerializeObject( + new + { + Success = false, + Code = 500, + Data = "null", + Message = $"no mission of id {parameters.id}" + }, + Formatting.Indented); + } + + var method = mission.GetType() + .GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) + .Where(m => m.GetCustomAttribute() != null).Select(m => + { + var attr = m.GetCustomAttribute(); + var param = m.GetParameters(); + var ret = new MethodInfoDetails() { MethodName = m.Name }; + var name = attr.Name; + if (name != null) ret.ButtonName = name; + var desc = attr.Description; + if (desc != null) ret.ButtonDescription = desc; + return ret; + }).ToList(); + classMethodsDictionary[mission.name] = method; + return JsonConvert.SerializeObject( + new { Success = true, Code = 200, Data = classMethodsDictionary.Values.FirstOrDefault(), Message = "Success" }); + + } + catch (Exception e) + { + return JsonConvert.SerializeObject(new + { Success = false, Code = 500, Data = "null", Message = e.Message }); + } + }); + + // 需讨论如何实现 + // Get["/save_parameters"] = _ => { }; + + #region 创建任务[Fass发布任务] + Post("/car/createTask", _ => + { + Response response; + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + try + { + var jReq = new System.IO.StreamReader(Request.Body).ReadToEnd(); + var req = jReq.JsonTo(); + switch (req.MissionType) + { + case "Transport": + CreateTransportTask: + ( + responseResult.Success, + responseResult.Code, + responseResult.Message, + var _ + ) = CreateTransportTask(req, true); + break; + default: + goto CreateTransportTask; + } + response = Response.AsText( + responseResult.ToJson(), + "application/json;charset=UTF-8" + ); + return response; + } + catch (Exception ex) + { + Diagnosis.Log( + $"起始站点匹配错误,请检查" + + ExceptionFormatter.FormatEx(ex) + + $"--time:{DateTime.Now.ToString()}", + "error", + true + ); + responseResult.Success = false; + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = ex.Message; + response = Response.AsText( + responseResult.ToJson(), + "application/json;charset=UTF-8" + ); + return response; + } + }); + #endregion + + #region 任务下发[Fass持续下发] + Post("/car/carTask", _ => + { + Response response; + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + try + { + Stopwatch sw = new Stopwatch(); + sw.Start(); + string jReq = new System.IO.StreamReader(Request.Body).ReadToEnd(); + TaskRequest req = jReq.JsonTo(); + switch (req.MissionType) + { + case "Transport": + CheckTransportTask: + ( + responseResult.Success, + responseResult.Code, + responseResult.Message, + responseResult.Data + ) = CreateTransportTask(req, false); + break; + default: + goto CheckTransportTask; + } + response = Response.AsText( + responseResult.ToJson(), + "application/json;charset=UTF-8" + ); + //Diagnosis.Log( + // $"carTask_Done:::consumeTime:{sw.ElapsedMilliseconds}", + // "Interface", + // true + //); + return response; + } + catch (Exception ex) + { + Diagnosis.Log( + $"起始站点匹配错误,请检查" + + ExceptionFormatter.FormatEx(ex) + + $"--time:{DateTime.Now.ToString()}", + "error", + true + ); + responseResult.Success = false; + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = ex.Message; + responseResult.Data = new CarStateInfo(); + response = Response.AsText( + responseResult.ToJson(), + "application/json;charset=UTF-8" + ); + return response; + } + }); + + #endregion + + #region 状态查询 + Post("/car/carState", _ => + { + Response response; + try + { + Stopwatch sw = new Stopwatch(); + sw.Start(); + var jReq = new System.IO.StreamReader(Request.Body).ReadToEnd(); + var req = jReq.JsonTo(); + if (req.CarCode != "0") + { + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + var singleCar = SimpleLib + .GetAllCars() + .OfType() + .FirstOrDefault(e => + e.id.ToString() == req.CarCode && e.GetLastSite() != -1 + ); + if (singleCar != null) + { + responseResult.Data = GetCarStateInfo(req.CarCode); + } + else + { + responseResult.Success = false; + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = $"车辆carCode:{req.CarCode}不存在或未初始化"; + responseResult.Data = new CarStateInfo(); + } + response = Response.AsText( + responseResult.ToJson(), + "application/json;charset=UTF-8" + ); + //Diagnosis.Log( + // $"carState_Done:::consumeTime:{sw.ElapsedMilliseconds}", + // "Interface", + // true + //); + return response; + } + else + { + var responseResult = new BaseRespose> + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + var carStateList = new List(); + var cars = SimpleLib.GetAllCars().OfType().ToList(); + if (cars.Count > 0) + { + foreach (var car in cars) + { + var carStateInfo = GetCarStateInfo(car.name); + carStateList.Add(carStateInfo); + } + responseResult.Data = carStateList; + } + else + { + responseResult.Success = false; + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = "当前系统中无启用调度车辆"; + responseResult.Data = carStateList; + } + response = Response.AsText( + responseResult.ToJson(), + "application/json;charset=UTF-8" + ); + //Diagnosis.Log( + // $"carState_Done:::consumeTime:{sw.ElapsedMilliseconds}", + // "Interface", + // true + //); + return response; + } + } + catch (Exception ex) + { + Console.WriteLine($@"agv/getCar => ex: {ex.Message}"); + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + responseResult.Success = false; + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = ex.Message; + responseResult.Data = new CarStateInfo(); + response = Response.AsText( + responseResult.ToJson(), + "application/json;charset=UTF-8" + ); + return response; + } + }); + #endregion + + #region 初始化小车 + Get("/car/reset/{cartId}", _ => + { + var resp = new BaseRespose(); + try + { + int cartId = _.cartId; + Car car = (Car)SimpleLib.GetCar(cartId); + //如果有任务不允许初始化 + if (!car.tags.Contains("occupied")) + { + car.Reset(); + car.tags.Add("idle", DateTime.Now.ToString()); + } + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 500; + resp.Message = e.Message; + } + var response = Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + return response; + }); + #endregion + + #region 现场维修 + Get("/car/repair/{cartId}", _ => + { + var resp = new BaseRespose(); + try + { + int cartId = _.cartId; + Car car = (Car)SimpleLib.GetCar(cartId); + car.Repair(); + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 500; + resp.Message = e.Message; + } + var response = Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + return response; + }); + #endregion + + #region 返厂维修 + Get("/car/blown/{cartId}", _ => + { + var resp = new BaseRespose(); + try + { + int cartId = _.cartId; + Car car = (Car)SimpleLib.GetCar(cartId); + var cdm = SimpleProject.proj.Missions.OfType().First(); + var deliver = cdm.GetDeliveries() + .Find(p => ((TransportDelivery)p).UsingCar.id == car.id); + if (deliver != null) + { + resp.Success = false; + resp.Code = 500; + resp.Message = "当前小车有任务需等任务结束后返厂"; + } + else + { + car.AppendDebug("ui-blown"); + Diagnosis.Post($"Car {car.name}({car.id}) blown"); + car.NoSchedule(); + car.siteID = -1; + car.tags.Clear(); + car.status.usage.AddUsage( + "base", + new CarUsage.CarUsageInfo { scheduling = false, refreshing = false } + ); + car.lstatus = "返厂检修"; + } + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 500; + resp.Message = e.Message; + } + var response = Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + return response; + }); + #endregion + + #region 站点启用 + Get("/site/enable/{siteId}", _ => + { + var resp = new BaseRespose(); + try + { + int siteId = _.siteId; + Site site = SimpleLib.GetSite(siteId); + if (site.tags.Contains("unavailable")) + site.tags.Remove("unavailable"); + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 500; + resp.Message = e.Message; + } + var response = Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + return response; + }); + #endregion + + #region 站点禁用 + Get("/site/disable/{siteId}", _ => + { + var resp = new BaseRespose(); + try + { + int siteId = _.siteId; + Site site = SimpleLib.GetSite(siteId); + if (!site.tags.Contains("unavailable")) + site.tags.Add("unavailable"); + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 500; + resp.Message = e.Message; + } + var response = Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + return response; + }); + #endregion + + #region 取消任务 + Post("/car/cancelTask", param => + { + Response response; + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + try + { + var jReq = new System.IO.StreamReader(Request.Body).ReadToEnd(); + var req = jReq.JsonTo(); + switch (req.MissionType) + { + case "Transport": + TransportCancel: + var cdm = SimpleProject + .proj.Missions.OfType() + .First(); + var deliver = cdm.GetDeliveries() + .Find(p => ((TransportDelivery)p).TaskId == req.TaskCode); + if (deliver != null) + { + deliver.Canceled = true; + if (!deliver.Cancel()) + { + responseResult.Success = false; + responseResult.Code = 500; + responseResult.Message = "任务取消失败"; + return responseResult; + } + else + { + if (deliver.UsingCar != null) + { + var car = deliver.UsingCar; + new Thread(() => + { + try + { + car.AppendDebug("Clumsy Restarted"); + car.NoSchedule(true); + car.siteID = -1; + Commons.DeleteTag(car.tags, "occupied"); + if (car.address != null && car.address != "") + { + SharedHttpClient.GetAsync( + $"http://{car.address}:8008/reset" + ); + } + car.AppendDebug("restarting clumsy"); + //car.Get("reset"); + + car.AppendDebug( + "wait for any pending task to flush." + ); + + car.status.programs.task.Wait(); + //car.Reset(); + } + catch (Exception) + { + responseResult.Message = "重启C失败"; + } + }).Start(); + } + } + } + else + { + responseResult.Success = false; + responseResult.Code = 500; + responseResult.Message = $"CDM中不存在任务id[{req.TaskCode}]"; + } + break; + default: + goto TransportCancel; + break; + } + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + catch (Exception e) + { + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = $"任务取消失败! ex:{e.Message}"; + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + }); + #endregion + + #region 获取Simple地图 + Get("/map/getMap", _ => + { + var resp = new BaseRespose() + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + + try + { + resp.Data = Map.GetMap(); + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 500; + resp.Message = e.Message; + } + var response = Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + return response; + }); + #endregion + + #region 获取雷达地图 + + Get("/map/getLidarMap", _ => + { + var resp = new BaseRespose() + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + + try + { + resp.Data = LidarMap.GetLidarMap().Result; + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 500; + resp.Message = e.Message; + } + var response = Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + return response; + }); + + #endregion + + #region 获取所有小车信息 + Get("/car/getAllCars", _ => + { + var resp = new BaseRespose>(); + try + { + resp.Data = new List(); + foreach (var car in SimpleLib.GetAllCars()) + { + resp.Data.Add(CarBaseInfo.FromCar((Car)car)); + } + } + catch (Exception e) + { + Console.WriteLine(e.StackTrace); + resp.Code = 500; + resp.Message = e.Message; + } + var response = Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + return response; + }); + #endregion + + #region 去某地 + Get("/car/goSite", param => + { + var carCode = Request.Query["carCode"]; + var id = Request.Query["id"]; + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + try + { + if (carCode != 0 && id != 0) + { + Car car = (Car)SimpleLib.GetCar(carCode); + Site site = SimpleLib.GetSite(id); + Commons.GoSite(car, site, 1); + } + var response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + catch (Exception) + { + return Response.AsText("调用小车去某地失败".ToJson(), "application/json"); + } + }); + #endregion + + #region 获取任务列表 + Get("/task/getTask", _ => + { + Response response; + var resp = new BaseRespose>() + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + + try + { + var missions = SimpleProject + .proj.Missions.OfType() + .ToList(); + List deliveryList = new List(); + if (missions.Count == 0) + return Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + foreach (var cdm in missions) + { + var finishTaskList = cdm.GetDeliveries(true, true) + .Where(e => e.FinishTime > DateTime.Now.AddMinutes(-30)) + .ToList(); //30min内已完成完成任务 + var executingTaskList = cdm.GetDeliveries(); //未完成任务 + foreach (var delivery in finishTaskList) + { + var temp = (TransportDelivery)delivery; + deliveryList.Add( + new TaskRecord + { + TaskId = temp.TaskId, + Name = $"{temp.Src} =>{temp.Dst}", + CarId = temp.UsingCar.id.ToString(), + CarName = temp.UsingCar.name, + State = GetDeliveryStatus(temp), + SrcSiteId = temp.Src.ToString(), + DestSiteId = temp.Dst.ToString(), + Priority = temp.Priority, + StartTime = temp.StartTime, + EndTime = temp.FinishTime, + Created = temp.CreateTime + } + ); + } + + foreach (var delivery in executingTaskList) + { + var temp = (TransportDelivery)delivery; + deliveryList.Add( + new TaskRecord + { + TaskId = temp.TaskId, + Name = $"{temp.Src} =>{temp.Dst}", + CarId = temp.UsingCar.id.ToString(), + CarName = temp.UsingCar.name, + State = GetDeliveryStatus(temp), + SrcSiteId = temp.Src.ToString(), + DestSiteId = temp.Dst.ToString(), + Priority = temp.Priority, + StartTime = temp.StartTime, + EndTime = temp.FinishTime, + Created = temp.CreateTime + } + ); + } + + resp.Data = deliveryList; + } + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 500; + resp.Message = e.Message; + } + response = Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + return response; + }); + #endregion + + #region 强制结束 + Get("/car/ForceStop/{cartId}", _ => + { + #region + /* try + { + int cartId = _.cartId; + var car = (Car)SimpleLib.GetCar(cartId); + + try + { + if (car == null) + { + resp.Success = false; + resp.Code = 500; + resp.Message = "小车在系统中没找到"; + } + else + { + car.AppendDebug("ui-repair"); + car.tags.Clear(); + car.NoSchedule(makeUnavailable: false); + car.siteID = -1; + car.lstatus = "结束任务"; + var cdm = SimpleProject + .proj.Missions.OfType() + .First(); + var deliver = cdm.GetDeliveries() + .Find(p => ((TransportDelivery)p).usingCar.id == car.id); + if (deliver != null) + { + deliver.canceled = true; + if (!deliver.Cancel()) + { + deliver.usingCar.UIIntercept(); + resp.Success = false; + resp.Code = 500; + resp.Message = "任务取消失败"; + } + } + new Thread(() => + { + try + { + //car.status.programs.task.Wait(); + HttpClient client = new HttpClient(); + client.GetAsync($"http://{car.address}:8008/reset"); + } + catch + { + resp.Success = false; + resp.Code = 500; + resp.Message = "重启C失败"; + } + }).Start(); + + resp.Success = true; + resp.Code = 200; + resp.Message = "强制结束任务成功"; + } + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 500; + resp.Message = e.Message; + } + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 500; + resp.Message = e.Message; + }*/ + #endregion + var resp = new BaseRespose() { Message = "任务取消成功" }; + try + { + int cartId = _.cartId; + var car = (Car)SimpleLib.GetCar(cartId); + car.NoSchedule(true); + car.siteID = -1; + + Commons.ClearTags(car.tags); + car.tags.Clear(); + var cdm = SimpleProject.proj.Missions.OfType().First(); + var deliver = cdm.GetDeliveries() + .Find(p => ((TransportDelivery)p).UsingCar.id == car.id); + + int count = 0; + + if (deliver != null) + { + deliver.Canceled = true; + if (!deliver.Cancel()) + { + resp.Success = false; + resp.Code = 400; + resp.Message = "任务取消失败"; + var res = Response.AsText( + resp.ToJson(), + "application/json;charset=UTF-8" + ); + return res; + } + } + + new Thread(() => + { + try + { + SharedHttpClient.GetAsync($"http://{car.address}:8008/reset"); + car.AppendDebug("restarting clumsy"); + //car.Get("reset"); + + car.AppendDebug("wait for any pending task to flush."); + + car.status.programs.task.Wait(); + car.AppendDebug("Clumsy Restarted"); + car.NoSchedule(); + car.siteID = -1; + Commons.DeleteTag(car.tags, "occupied"); + // car.Reset(); + } + catch (Exception) + { + resp.Message = "重启C失败"; + } + }) + { + Name = $"ForceStop:{car.name}({car.id})" + }.Start(); + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 500; + resp.Message = e.Message; + } + var response = Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + return response; + }); + #endregion + + #region 重启电脑 + Get("/car/ReStart/{cartId}", _ => + { + var resp = new BaseRespose(); + int cartId = _.cartId; + var car = (Car)SimpleLib.GetCar(cartId); + var task = Task.Run(() => + { + try + { + resp.Success = false; + resp.Code = 200; + resp.Message = "重启中"; + + // 创建一个Process对象 + Process process = new Process(); + + // 设置启动信息 + process.StartInfo.FileName = "shutdown"; + process.StartInfo.Arguments = "/r /t 0"; // 重启电脑,立即执行 + process.StartInfo.CreateNoWindow = true; // 不显示窗口 + process.StartInfo.UseShellExecute = false; // 不使用操作系统外壳程序启动进程 + + // 启动进程 + process.Start(); + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 400; + resp.Message = e.Message; + } + }); + task.Wait(); + var response = Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + return response; + }); + #endregion + + #region 停接任务 + Get("/car/stopReceiveTask/{cartId}", _ => + { + var resp = new BaseRespose(); + int cartId = _.cartId; + try + { + var car = (Car)SimpleLib.GetCar(cartId); + if (car != null) + { + if (!car.fields.ContainsKey("StopAccept")) + { + Commons.AddOrUpdateCarField(car, "StopAccept", "1"); + } + else + { + Commons.DeleteCarField(car, "StopAccept"); + } + } + else + { + resp.Success = false; + resp.Code = 500; + resp.Message = "找不到对应小车"; + } + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 500; + resp.Message = e.Message; + } + + var response = Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + return response; + }); + #endregion + + #region 获取小车信息 + Get("/car/carInfo/{cartId}", _ => + { + var resp = new BaseRespose(); + int cartId = _.cartId; + try + { + var car = (Car)SimpleLib.GetCar(cartId); + if (car != null) + { + resp.Data = new CarInfo() + { + Name = car.name, + Address = car.address, + Speed = car.status.enums.TryGetValue( + "ActualLeftWheelVelocity", + out var statusEnum + ) + ? statusEnum + : car.speed.ToString(), + Voltage = car.status.enums.TryGetValue("soc", out var soc) + ? float.Parse(soc) + : -1, + Code = car.id.ToString(), + siteId = car.GetLastSite() + }; + } + } + catch (Exception e) + { + resp.Success = false; + resp.Code = 500; + resp.Message = e.Message; + } + + var response = Response.AsText(resp.ToJson(), "application/json;charset=UTF-8"); + return response; + }); + #endregion + + #region 去待命点 + Get("/car/goToStandby", param => + { + var CarCode = Request.Query["carCode"]; + //var id = Request.Query["id"]; + Response response; + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + try + { + var car = (Car)SimpleLib.GetCar(CarCode); + if (car != null) + { + var carGroup = car.fields.TryGetValue("group", out var value) + ? value + : "all"; + var targetPlan = Commons.GetNearestPlan( + (Car)car, + site => + site.fields.ContainsKey("standby") + && carGroup.Equals( + site.fields.TryGetValue("group", out var value) ? value : "all" + ) + && site.fields["standby"] == "true" + ); + if (targetPlan != null) + { + Commons.GoSite(car, targetPlan.Destination, 1); + } + } + else + { + responseResult.Success = false; + responseResult.Code = 500; + responseResult.Message = "没有找到任务小车"; + } + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + catch (Exception) + { + return Response.AsText("调用小车去待命点失败".ToJson(), "application/json"); + } + }); + #endregion + + #region 去充电点 + Get("/car/goToCharge", param => + { + var CarCode = Request.Query["carCode"]; + //var id = Request.Query["id"]; + Response response; + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + try + { + var car = (Car)SimpleLib.GetCar(CarCode); + if (car != null) + { + /* var carGroup = car.fields.TryGetValue("group", out var value) ? value : "all"; + var targetPlan = Commons.GetNearestPlan((Car)car, site => + site.fields.ContainsKey("charge") + && site.fields["charge"] == "true" && carGroup.Equals(site.fields.TryGetValue("group", out var value) ? value : "all") + ); + if (targetPlan != null) + { + Diagnosis.Post($"小车路径规划成功目标充电位{targetPlan.Destination}", "去充电",true); + Commons.GoSite(car, targetPlan.Destination, 1); + } + else + { + + Diagnosis.Post("小车路径规划失败", "去充电", true); + + }*/ + + Commons.AddOrUpdateTag(car.tags, "shouldCharge", "true"); + } + else + { + responseResult.Success = false; + responseResult.Code = 500; + responseResult.Message = "没有找到任务小车"; + } + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + catch (Exception) + { + return Response.AsText("调用小车去充电电点失败".ToJson(), "application/json"); + } + }); + #endregion + + #region 暂停恢复 + Get("/car/startOrPause", param => + { + var carCode = Request.Query["CarCode"]; + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + + try + { + if (carCode == 0) + { + responseResult.Success = false; + responseResult.Code = (int)HttpStatusCode.BadRequest; + responseResult.Message = "没有找到任务小车"; + return Response.AsJson(responseResult); + } + + ClumsyCar car = SimpleLib.GetCar(carCode) as ClumsyCar; + if (car == null) + { + responseResult.Success = false; + responseResult.Code = (int)HttpStatusCode.NotFound; + responseResult.Message = "未找到对应的小车"; + return Response.AsJson(responseResult); + } + + string releaseStatus = Commons.GetCarStatus(car, "ISRelease"); + + try + { + ToggleCarReleaseStatus(car, releaseStatus); + } + catch (Exception ex) + { + responseResult.Success = false; + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = $"暂停恢复失败 => ex:{ExceptionFormatter.FormatEx(ex)}"; + Diagnosis.Log($"暂停恢复失败 => ex:{ExceptionFormatter.FormatEx(ex)}"); + } + + return Response.AsJson(responseResult); + } + catch (Exception ex) + { + responseResult.Success = false; + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = $"暂停恢复失败 => ex:{ExceptionFormatter.FormatEx(ex)}"; + return Response.AsJson(responseResult); + } + }); + #endregion + + #region 暂停任务/恢复任务 + Post("/car/stopOrPauseTask", param => + { + Response response; + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + try + { + var jReq = new System.IO.StreamReader(Request.Body).ReadToEnd(); + var result = jReq.JsonTo(); + var taskCode = result.TaskCode; + var cdms = SimpleProject + .proj.Missions.OfType() + .ToList(); + + if (cdms.Count == 0) + { + responseResult.Success = false; + responseResult.Code = 500; + responseResult.Message = "未找到CDM进程"; + return Response.AsText(responseResult.ToJson(), "application/json"); + } + + Delivery deliver = null; + foreach (var cdm in cdms) + { + deliver = cdm.GetDeliveries(includeAborted: true) + .FirstOrDefault(p => p.TaskId == taskCode); + if (deliver != null) + break; + } + + if (deliver == null) + { + responseResult.Success = false; + responseResult.Code = 500; + responseResult.Message = $"CDM中不存在任务id[{taskCode}]"; + return Response.AsText(responseResult.ToJson(), "application/json"); + } + + deliver.Terminated = result.TaskStatus == "1"; + var status = 0; + + if (deliver.UsingCar != null) + { + status = (deliver.OnTerminated?.Invoke(deliver, result.TaskStatus)).Result; + } + + if (status != 1) + { + responseResult.Success = false; + responseResult.Code = 500; + responseResult.Message = deliver.Terminated ? "暂停任务停止小车失败" : "恢复任务失败"; + } + + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + catch (JsonSerializationException jsonEx) + { + responseResult.Code = (int)HttpStatusCode.BadRequest; + responseResult.Message = $"JSON解析失败! ex:{jsonEx.Message}"; + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + catch (Exception e) + { + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = $"任务取消失败! ex:{e.Message}"; + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + }); + + #endregion + + #region 设置充电参数 + Post("/car/setChargingSettings", param => + { + Response response; + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + try + { + var jReq = new System.IO.StreamReader(Request.Body).ReadToEnd(); + var chargingSetting = jReq.JsonTo(); + + // 这里可以根据 ChargingSetting 的属性进行具体的业务逻辑处理 + // 例如: + if (chargingSetting.CarMinBattery < 0 || chargingSetting.CarMaxBattery > 100) + { + responseResult.Success = false; + responseResult.Code = 400; + responseResult.Message = "充电电量范围不合法"; + } + else + { + // 假设我们有一个方法来应用这些充电设置 + ApplyChargingSettings(chargingSetting); + } + + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + catch (Exception e) + { + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = $"设置充电参数失败! ex:{e.Message}"; + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + }); + + #endregion + #region 设置包络参数 + Post("/car/setEnvelopeSetting", param => + { + Response response; + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + try + { + var jreq = new System.IO.StreamReader(Request.Body).ReadToEnd(); + var envelopeSetting = jreq.JsonTo(); + // 读取本地 JSON 文件 + var simpleFilePath = + $"{System.AppDomain.CurrentDomain.BaseDirectory}/simple.json"; + var simpleJson = File.ReadAllText(simpleFilePath); + var simpleConfig = simpleJson.JsonTo(); + var jsonFilePath = ""; + if (simpleConfig != null && simpleConfig.Autoload != null) + { + jsonFilePath = + $"{System.AppDomain.CurrentDomain.BaseDirectory}/{simpleConfig.Autoload}"; + } + else + { + responseResult.Code = (int)HttpStatusCode.BadRequest; + responseResult.Message = "修改文件路径不对"; + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + //var jsonFilePath = $"{System.AppDomain.CurrentDomain.BaseDirectory}/0123.json"; + var jsonData = File.ReadAllText(jsonFilePath); + var jsonObject = JObject.Parse(jsonData); + + // 更新或添加属性 + // 获取或创建 "conf" 节点 + var confNode = jsonObject["conf"]; + if (confNode == null || confNode.Type != JTokenType.Object) + { + confNode = new JObject(); + jsonObject["conf"] = confNode; + } + + // 更新 JSON 数据 + confNode[envelopeSetting.Name] = envelopeSetting.Value; + ; + + // 将修改后的数据写回 JSON 文件 + File.WriteAllText(jsonFilePath, jsonObject.ToString()); + + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + catch (Exception e) + { + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = $"设置包络参数失败! ex:{e.Message}"; + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + }); + #endregion + + #region 设置交管参数 + Post("/car/setTrafficControlSetting", param => + { + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + try + { + var jreq = new System.IO.StreamReader(Request.Body).ReadToEnd(); + var trafficControlSetting = jreq.JsonTo(); + // 读取本地 JSON 文件 + var simpleFilePath = + $"{System.AppDomain.CurrentDomain.BaseDirectory}/simple.json"; + var simpleJson = File.ReadAllText(simpleFilePath); + var simpleConfig = simpleJson.JsonTo(); + var jsonFilePath = ""; + if (simpleConfig != null && simpleConfig.Autoload != null) + { + jsonFilePath = + $"{System.AppDomain.CurrentDomain.BaseDirectory}/{simpleConfig.Autoload}"; + } + else + { + responseResult.Code = (int)HttpStatusCode.BadRequest; + responseResult.Message = "修改文件路径不对"; + } + // 读取本地 JSON 文件路径 + // jsonFilePath = $"{System.AppDomain.CurrentDomain.BaseDirectory}/0123.json"; + if (!File.Exists(jsonFilePath)) + { + throw new FileNotFoundException( + $"JSON file not found at path: {jsonFilePath}" + ); + } + + // 读取并解析 JSON 文件 + var jsonData = File.ReadAllText(jsonFilePath); + var jsonObject = JObject.Parse(jsonData); + + // 获取或创建 "conf" 节点 + var confNode = jsonObject["conf"]; + if (confNode == null || confNode.Type != JTokenType.Object) + { + confNode = new JObject(); + jsonObject["conf"] = confNode; + } + + // 更新 JSON 数据 + confNode[trafficControlSetting.Name] = trafficControlSetting.Value; + + // 将修改后的数据写回 JSON 文件 + File.WriteAllText(jsonFilePath, jsonObject.ToString()); + + return Response.AsJson(responseResult); + } + catch (JsonSerializationException jsonEx) + { + responseResult.Code = (int)HttpStatusCode.BadRequest; + responseResult.Message = $"JSON解析失败! ex:{jsonEx.Message}"; + } + catch (Exception e) + { + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = $"设置交管控制参数失败! ex:{e.Message}"; + } + + return Response.AsJson(responseResult); + }); + #endregion + + #region 删除配置参数 + Post("/car/delControlSetting", param => + { + Response response; + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + try + { + var jreq = new System.IO.StreamReader(Request.Body).ReadToEnd(); + var keysToRemove = jreq.JsonTo>(); + // 读取本地 JSON 文件 + var simpleFilePath = + $"{System.AppDomain.CurrentDomain.BaseDirectory}/simple.json"; + var simpleJson = File.ReadAllText(simpleFilePath); + var simpleConfig = simpleJson.JsonTo(); + var jsonFilePath = ""; + if (simpleConfig != null && simpleConfig.Autoload != null) + { + jsonFilePath = + $"{System.AppDomain.CurrentDomain.BaseDirectory}/{simpleConfig.Autoload}"; + } + else + { + responseResult.Code = (int)HttpStatusCode.BadRequest; + responseResult.Message = "修改文件路径不对"; + } + + if (!File.Exists(jsonFilePath)) + { + throw new FileNotFoundException( + $"JSON file not found at path: {jsonFilePath}" + ); + } + var jsonData = File.ReadAllText(jsonFilePath); + var jsonObject = JObject.Parse(jsonData); + var confNode = jsonObject["conf"] as JObject; + + if (confNode == null) + { + confNode = new JObject(); + jsonObject["conf"] = confNode; + } + if (confNode != null) + { + foreach (var key in keysToRemove) + { + if (confNode.ContainsKey(key)) + { + confNode.Remove(key); + } + } + + // 将修改后的数据写回 JSON 文件 + File.WriteAllText(jsonFilePath, jsonObject.ToString()); + } + + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + catch (JsonSerializationException jsonEx) + { + responseResult.Code = (int)HttpStatusCode.BadRequest; + responseResult.Message = $"JSON解析失败! ex:{jsonEx.Message}"; + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + catch (FileNotFoundException fnfEx) + { + responseResult.Code = (int)HttpStatusCode.NotFound; + responseResult.Message = $"文件未找到! ex:{fnfEx.Message}"; + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + catch (Exception e) + { + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = $"设置控制参数失败! ex:{e.Message}"; + response = Response.AsText(responseResult.ToJson(), "application/json"); + return response; + } + }); + #endregion + + #region 删除路径规划参数设置 + Post("/car/delPlanRulesControlSetting", param => + { + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + try + { + var jreq = new System.IO.StreamReader(Request.Body).ReadToEnd(); + var planRulesSettings = jreq.JsonTo>(); + if (planRulesSettings.Count() < 0) + { + responseResult.Code = (int)HttpStatusCode.BadRequest; + responseResult.Message = "没有需要删除的路径参数"; + return Response.AsJson(responseResult); + } + foreach (var planRules in planRulesSettings) + { + //根据参数,站点ID 找到该站点,如果站点有这个字段则删除,没有不用管 + Site site = SimpleLib.GetSite(int.Parse(planRules.NodeId)); + if (site == null) + { + responseResult.Code = (int)HttpStatusCode.BadRequest; + responseResult.Message = "需要修改属性的站点不存在"; + return Response.AsJson(responseResult); + } + if (site.fields.TryGetValue(planRules.Name, out var value)) + { + site.fields.Remove(planRules.Name); + } + } + + return Response.AsJson(responseResult); + } + catch (JsonSerializationException jsonEx) + { + responseResult.Code = (int)HttpStatusCode.BadRequest; + responseResult.Message = $"JSON解析失败! ex:{jsonEx.Message}"; + } + catch (Exception e) + { + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = $"删除路径规划参数失败! ex:{e.Message}"; + } + + return Response.AsJson(responseResult); + }); + #endregion + + #region 设置路径规划参数 + Post("/car/setPlanRulesControlSetting", param => + { + var responseResult = new BaseRespose + { + Success = true, + Code = (int)HttpStatusCode.OK, + Message = "success" + }; + try + { + var jreq = new System.IO.StreamReader(Request.Body).ReadToEnd(); + var planRulesSetting = jreq.JsonTo(); + if (planRulesSetting == null) + { + responseResult.Code = (int)HttpStatusCode.BadRequest; + responseResult.Message = "需要修改属性的站点不存在"; + return Response.AsJson(responseResult); + } + Site site = SimpleLib.GetSite(int.Parse(planRulesSetting.NodeId)); + if (site == null) + { + responseResult.Code = (int)HttpStatusCode.BadRequest; + responseResult.Message = "需要修改属性的站点不存在"; + return Response.AsJson(responseResult); + } + //判断站点属性是否存在,存在则修改,不存在则添加 + if (site.fields.TryGetValue(planRulesSetting.Name, out var value)) + { + site.fields[planRulesSetting.Name] = planRulesSetting.Value; + } + else + { + site.fields.Add(planRulesSetting.Name, planRulesSetting.Value); + } + return Response.AsJson(responseResult); + } + catch (JsonSerializationException jsonEx) + { + responseResult.Code = (int)HttpStatusCode.BadRequest; + responseResult.Message = $"JSON解析失败! ex:{jsonEx.Message}"; + } + catch (Exception e) + { + responseResult.Code = (int)HttpStatusCode.InternalServerError; + responseResult.Message = $"设置路径规划参数失败! ex:{e.Message}"; + } + + return Response.AsJson(responseResult); + }); + #endregion + + Get("/api/QrMap", _ => + { + return QrMapJson; + }); + + Post("/api/CreateSite", o => + { + try + { + string jreq = new System.IO.StreamReader(Request.Body).ReadToEnd(); + QrSite site = JsonConvert.DeserializeObject(jreq); + var newSite = new UISite() { x = site.X, y = site.Y }; + Console.WriteLine($"x:{site.X},y:{site.Y}"); + var d = SimpleLib + .GetAllSites() + .Select(p => LessMath.dist(site.X, site.Y, p.x, p.y)); + if (d.Any() && d.Min() < 3) + { + Console.WriteLine($"重复设置站点?"); + return JsonConvert.SerializeObject( + new { data = new { success = false, message = "设置站点失败,重复设置站点?" } } + ); + } + + SimpleLib.SetSite(newSite); + var ss = SimpleLib + .GetAllSites() + .OrderBy(p => LessMath.dist(site.X, site.Y, p.x, p.y)) + .First(); + ss.fields["th"] = (site.Th).ToString(); + ss.fields["tag"] = (site.Tag).ToString(); + return JsonConvert.SerializeObject( + new { data = new { success = true, message = "设置站点成功" } } + ); + } + catch (Exception e) + { + Console.WriteLine(e); + return JsonConvert.SerializeObject( + new { data = new { success = false, message = "设置站点失败" + e } } + ); + } + }); + + #region OTA获取车辆列表 + Get("/api/agv/list", _ => + { + List cars = new List(); + foreach (var car in SimpleLib.GetAllCars().OfType()) + { + var station = SimpleLib + .GetAllSites() + .ToList() + .FirstOrDefault(site => + site.id == car.status.holdingLocks.FirstOrDefault() + && site.name.Contains("TaskStation") + ); + var statusV = car.status.enums.ContainsKey("actualV") + ? float.Parse(car.status.enums["actualV"]) + : 0; + car.status.enums.TryGetValue("electricCurrent", out var electricCurrent); + var agv_status = ""; + if (statusV == 0) + { + agv_status = "停止"; + } + else if (statusV > 0) + { + agv_status = "运行中"; + } + if ( + statusV == 0 + && electricCurrent != null + && electricCurrent != "" + && float.Parse(electricCurrent) * 0.01f > 0 + ) + { + agv_status = "充电中"; + } + + cars.Add( + new + { + agv_id = car.id, + agv_name = car.name, + agv_ip = car.address, + //agv_status = car.tags["carStatu"], + //agv_status = car.tags.Contains("carStatu") ? car.tags["carStatu"] : "OFFLINE", + energy = car.status.enums.ContainsKey("soc") + ? float.Parse(car.status.enums["soc"]) + : -1, + /* x = tPos.Item1, + y = tPos.Item2, + th = tPos.Item3,*/ + x = car.x, + y = car.y, + th = car.th, + speed = Commons.CarValue(car, "sendSpeed"), + fault = car.status.enums.ContainsKey("mAlarm") + ? car.status.enums["mAlarm"] + : "正常", + siteId = car.GetLastSite(), + // materialinfo =new string[3] { "materialinfo1", "materialinfo2", "materialinfo3" } + stationInfo = station != null + ? new { stationID = station.id, staionName = station.name } + : null, + + agv_status = agv_status + } + ); + } + return JsonConvert.SerializeObject( + new + { + code = 200, + message = "ok", + data = cars + } + ); + }); + #endregion + + #region 第三方交管 + Post("api/agv/traffic", _ => + { + try + { + string jreq = new System.IO.StreamReader(Request.Body).ReadToEnd(); + + var Traffic = JsonConvert.DeserializeObject(jreq); + + var Area = TrafficInterlockMission.TrafficAreaList.Find(t => t.AreaName == Traffic.AreaName); + + if (Traffic != null && Area != null) + { + if (Traffic.IsOccupy && !Area.IsOccupy) + { + lock (TrafficInterlockMission.TrafficAreaList) + { + Area.IsOccupy = true; Area.ControllerName = Traffic.ControllerName; + } + + return JsonConvert.SerializeObject(new { data = new { success = true, message = "申请管制区成功" } }); + + + } + else if (!Traffic.IsOccupy && Area.ControllerName == Traffic.ControllerName) + { + lock (TrafficInterlockMission.TrafficAreaList) + { + Area.IsOccupy = false; Area.ControllerName = string.Empty; + } + + return JsonConvert.SerializeObject(new { data = new { success = true, message = "释放管制区成功" } }); + + } + } + + return JsonConvert.SerializeObject(new { data = new { success = false, message = "失败" } }); + } + catch (Exception e) + { + Console.WriteLine(e); + + return JsonConvert.SerializeObject(new { data = new { success = false, message = "设置交管失败" + e } }); + } + }); + #endregion + } + + private void ToggleCarReleaseStatus(ClumsyCar car, string currentStatus) + { + int targetStatus = (currentStatus == "1") ? 0 : 1; + string command = $"pilot.ISRelease={targetStatus};"; + + while (Commons.GetCarStatus(car, "ISRelease") == currentStatus) + { + car.ImmediateCommand(command); + Thread.Sleep(100); + } + } + + private void ApplyChargingSettings(ChargingSetting settings) + { + Console.WriteLine("开始处理充电配置参数的逻辑"); + // 这里是应用充电设置的具体逻辑 + // 例如,更新设备的充电参数等 + var chargeMission = SimpleProject + .proj.Missions.OfType() + .FirstOrDefault(); + if (chargeMission == null) + return; + Commons.AddOrUpdateMissionField( + chargeMission, + "mustChargeSoc", + settings.CarMinBattery.ToString() + ); + Commons.AddOrUpdateMissionField( + chargeMission, + "fullChargeSoc", + settings.CarMaxBattery.ToString() + ); + Commons.AddOrUpdateMissionField( + chargeMission, + "taskAvailableSoc", + settings.TaskAvailableBattery.ToString() + ); + Commons.AddOrUpdateMissionField( + chargeMission, + "mustChargeSeconds", + settings.CarIdleSecond.ToString() + ); + Commons.AddOrUpdateMissionField( + chargeMission, + "idleChargeSoc", + settings.CarIdleChargeBattery.ToString() + ); + } + + private (bool, int, string, CarStateInfo) CreateTransportTask( + TaskRequest req, + bool isCreate + ) + { + var transportMission = SimpleProject.proj.Missions.OfType().First(); + //校验任务重复 + if ( + transportMission + .GetDeliveries(true) + .FindAll(p => ((TransportDelivery)p).TaskId == req.TaskCode) + .Count > 0 + ) + { + return ( + false, + (int)HttpStatusCode.InternalServerError, + $"taskCode:{req.TaskCode}已经存在", + GetCarStateInfo(req.CarCode) + ); + } + //判定指定车辆是否存在 + Car car = null; + if (!string.IsNullOrWhiteSpace(req.CarCode)) + { + car = SimpleLib + .GetAllCars() + .OfType() + .FirstOrDefault(e => e.id.ToString() == req.CarCode); + if (car == null || car.status.holdingLocks.FirstOrDefault() == -1) + { + return ( + false, + (int)HttpStatusCode.InternalServerError, + $"传入车辆code{req.CarCode}不存在或没有初始化", + new CarStateInfo() + ); + } + } + //判断node的个数 + switch (req.Nodes.Count) + { + case 2: + Diagnosis.Log( + $"receiveTask:[TaskId ={req.TaskCode},carId = {req.CarCode},src = {req.Nodes[0].Code},dst = {req.Nodes[1].Code}", + "task", + true + ); + break; + case 1: + if (car == null) + return ( + false, + (int)HttpStatusCode.InternalServerError, + $"创建单点任务时,未指定车辆", + new CarStateInfo() + ); + Diagnosis.Log( + $"receiveTask:[TaskId ={req.TaskCode},carId = {req.CarCode},dst = {req.Nodes[0].Code}", + "task", + true + ); + break; + default: + return ( + false, + (int)HttpStatusCode.InternalServerError, + $"创建任务时,传入站点个数不对", + new CarStateInfo() + ); + } + + //站点存在判断,默认都是双点任务 + var siteCodes = req.Nodes.Select(e => e.Code).ToArray(); + if (!Commons.IsSceneSiteByCode(siteCodes)) + { + return ( + false, + (int)HttpStatusCode.InternalServerError, + $"不存在设定站点 => taskCode:{req.TaskCode}", + new CarStateInfo() + ); + } + + var src = + req.Nodes.Count == 2 + ? SimpleLib.GetSite(req.Nodes[0].Code) + : SimpleLib.GetSite(car.status.holdingLocks.First()); //如果是单点任务,默认当前未知为起点 + var dst = + req.Nodes.Count == 2 + ? SimpleLib.GetSite(req.Nodes[1].Code) + : SimpleLib.GetSite(req.Nodes[0].Code); + + var d = new TransportDelivery + { + Src = src.id, + Dst = dst.id, + CarType = req.CarType, + TaskId = req.TaskCode, + TaskType = req.TaskType, + Material = req.Material, + Priority = req.priority, + MaterialLength = req.ContainerSize != null ? (float)req.ContainerSize.Length : -1, + MaterialWidth = req.ContainerSize != null ? (float)req.ContainerSize.Width : -1, + }; + if (car != null) + { + d.UsingCar = car; + } + + d.FetchPlanInfo["MaterialLength"] = d.MaterialLength + ""; + d.FetchPlanInfo["MaterialWidth"] = d.MaterialWidth + ""; + if (d.Src == d.Dst) + { + d.FetchPlanInfo["action"] = "/"; + d.PutPlanInfo["action"] = "/"; + } + // 初始化回调配置,确保任务在各阶段触发统一回调 + d.ReportOnStarted = true; + d.ReportOnFetched = true; + d.ReportOnPut = true; + d.ReportOnFinished = true; + d.ReportOnFailed = true; + d.ReportOnTerminated = true; + + // 根据 ReportOn* 写入 key 列表 + if (d.ReportOnStarted) + d.OnStartCallbackKeys.Add(TransportDeliveryCallbacks.KeyOnStarted); + if (d.ReportOnFetched) + d.DoneFetchCallbackKeys.Add(TransportDeliveryCallbacks.KeyOnFetched); + if (d.ReportOnPut) + d.DonePutCallbackKeys.Add(TransportDeliveryCallbacks.KeyOnPut); + if (d.ReportOnFinished) + d.DoneMissionCallbackKeys.Add(TransportDeliveryCallbacks.KeyOnFinished); + if (d.ReportOnFailed) + d.FailedCallbackKeys.Add(TransportDeliveryCallbacks.KeyOnFailed); + if (d.ReportOnTerminated) + d.OnTerminatedCallbackKeys.Add(TransportDeliveryCallbacks.KeyOnTerminated); + + // 统一通过 Attacher 挂载回调,便于持久化与恢复 + DeliveryCallbackAttacher.AttachAll(d); + + transportMission.Enqueue(d); + Diagnosis.Log($"Add task =>{d.ToJson()},req:{req.ToJson()}"); + return (true, (int)HttpStatusCode.OK, "success", GetCarStateInfo(req.CarCode)); + } + + private class GetCar + { + public string CarCode; + } + + public CarStateInfo GetCarStateInfo(string carCode) + { + try + { + var transportMission = SimpleProject + .proj.Missions.OfType() + .FirstOrDefault(); + if (string.IsNullOrEmpty(carCode)) + return new CarStateInfo(); + + var singleCar = SimpleLib + .GetAllCars() + .OfType() + .FirstOrDefault(e => e.id.ToString() == carCode && e.GetLastSite() != -1); + if (singleCar == null) + return new CarStateInfo(); + + var runningTask = (TransportDelivery) + transportMission + .GetDeliveries() + .FindAll(p => + ( + p.GetStatus() == DeliveryStatus.Fetching + || p.GetStatus() == DeliveryStatus.Putting + ) + && p.UsingCar.id == singleCar.id + ) + .FirstOrDefault(); //获取当前车辆正在运行的任务 + var finishedTask = (TransportDelivery) + transportMission + .GetDeliveries(true) + .FindAll(p => + p.GetStatus() == DeliveryStatus.Finished + && p.UsingCar.id == singleCar.id + ) + .OrderByDescending(e => e.FinishTime) + .FirstOrDefault(); //获取最近完成的任务 + var waitingTask = (TransportDelivery) + transportMission + .GetDeliveries() + .FindAll(p => + p.GetStatus() == DeliveryStatus.Waiting + && p.UsingCar != null + && p.UsingCar.id == singleCar.id + ) + .OrderBy(e => e.CreateTime) + .FirstOrDefault(); + var taskList = new List(); + var actions = new List(); + //string carState = SwitchCarState(singleCar); + var isOnline = false; + string carState = SwitchCarState(singleCar, ref isOnline); + //var resNodes = new List(); + if (finishedTask != null) + { + taskList.Add( + new TaskInfo() + { + Code = finishedTask.TaskId, + State = "Completed", + Nodes = new List() + { + new() + { + //Code = Commons.GetSiteCodeById(finishedTask.src) + Code = finishedTask.Src.ToString() + }, + new() + { + //Code = Commons.GetSiteCodeById(finishedTask.dst) + Code = finishedTask.Dst.ToString() + } + } + } + ); + } + + if (runningTask != null) + { + taskList.Add( + new TaskInfo() + { + Code = runningTask.TaskId, + State = "Running", + Nodes = new List() + { + new() + { + //Code = Commons.GetSiteCodeById(runningTask.src) + Code = runningTask.Src.ToString() + }, + new() + { + //Code = Commons.GetSiteCodeById(runningTask.dst) + Code = runningTask.Dst.ToString() + } + } + } + ); + } + + if (waitingTask != null) + { + taskList.Add( + new TaskInfo() + { + Code = waitingTask.TaskId, + State = "Distributed", + Nodes = new List() + { + new() + { + //Code = Commons.GetSiteCodeById(waittingTask.src) + Code = waitingTask.Src.ToString() + }, + new() + { + //Code = Commons.GetSiteCodeById(waittingTask.dst) + Code = waitingTask.Dst.ToString() + } + } + } + ); + } + + var carId = singleCar.id; + var alarmsList = new List(); + if ( + singleCar.status.enums.ContainsKey("AlarmInfo") + && !string.IsNullOrWhiteSpace(singleCar.status.enums["AlarmInfo"]) + ) + { + string alarmMessage = singleCar.status.enums["AlarmInfo"].TrimEnd(','); + string[] alarms = alarmMessage.Split(','); + foreach (string alarm in alarms) + { + string[] info = alarm.Split('.'); + if (info.Length == 2) + { + alarmsList.Add(new CarAlarm() { Code = info[0], Name = info[1] }); + } + } + } + + var currentSite = SimpleLib.GetSite(singleCar.status.holdingLocks.FirstOrDefault()); + // HashSet> blockedBy = singleCar.status.blockedBy; + var blockedBy = singleCar.status.blockedBy.ToHashSet(); + List blockedByItems = new List(); + //var BlockedBy = string.Empty; + for (int i = 0; i < blockedBy.Count; i++) + { + //BlockedBy += $"({blockedBy.ElementAt(i).Item1 + "," + blockedBy.ElementAt(i).Item2});"; + blockedByItems.Add( + new BlockedByItem + { + CarCode = blockedBy.ElementAt(i).Item1.ToString(), + Type = blockedBy.ElementAt(i).Item2 + } + ); + } + //BlockedBy = BlockedBy.TrimEnd(';'); + return new CarStateInfo() + { + Code = carCode, + Name = singleCar.name, + CurrState = carState, + IsOnline = isOnline, + Battery = singleCar.status.enums.ContainsKey("Soc") + ? int.Parse(singleCar.status.enums["Soc"]) + : 100, + Voltage = singleCar.status.enums.ContainsKey("Voltage") + ? double.Parse(singleCar.status.enums["Voltage"]) + : 0, + ElectricCurrent = singleCar.status.enums.ContainsKey("ElectricCurrent") + ? double.Parse(singleCar.status.enums["ElectricCurrent"]) + : 0, + X = singleCar.x, + Y = singleCar.y, + Theta = singleCar.th, + Speed = singleCar.status.enums.ContainsKey("ActualLeftWheelVelocity") + ? double.Parse( + SimpleLib.GetCar(carId).status.enums["ActualLeftWheelVelocity"] + ) + : singleCar.speed, + //CurrNodeCode = currentSite.fields.ContainsKey("code") ? currentSite.fields["code"] : currentSite.id.ToString(), + Load = singleCar.status.enums.TryGetValue("loadStatus", out var statusEnum) + ? int.Parse(statusEnum) + : 0, + CurrNodeCode = currentSite.id.ToString(), + StartNodeCode = "0", + EndNodeCode = "0", + StartEdgeCode = "0", + EndEdgeCode = "0", + HoldingLocks = singleCar.status.holdingLocks.ToList(), + PendingLocks = singleCar.status.pendingLocks.ToList(), + BlockedBy = blockedByItems, + // BlockingTime = singleCar.status.blockingTime.ToString("yyyy-MM-dd HH:mm:ss"),//没有了 + TrafficMessage = singleCar.status.TCStat.ToString(), + AquiringLock = singleCar.status.aquiringLock, + Tasks = taskList, + Alarms = alarmsList, + StopAccept = singleCar.fields.ContainsKey("StopAccept"), + Actions = new List() + }; + } + catch (Exception ex) + { + Console.WriteLine($"getCarStateInfo => ex: {ex}"); + return new CarStateInfo(); + } + } + + public string SwitchCarState(Car car, ref bool isOnline) + { + string state = "Stopping"; + if (car.GetLastSite() == -1) + { + isOnline = false; + return state; + } + if (Commons.GetVehicleStatus(car)!= VehicleStatus.Offline) + { + if (Commons.GetVehicleStatus(car) is VehicleStatus.Normal or VehicleStatus.NeedInit) + state = "Stopping"; //Idle + var lp = car.status.programs.latest; + if (lp != null) + { + if ( + lp.status.state >= SimpleCore.Compiler.CarProgram.StatusEnum.Programming + && lp.status.state <= SimpleCore.Compiler.CarProgram.StatusEnum.Running + ) + { + state = "Running"; //Executing + } + } + //存在报警信息 + if (car.status.enums.ContainsKey("AlarmInfo")) + { + if (!string.IsNullOrEmpty(car.status.enums["AlarmInfo"])) + { + state = "Faulting"; //Malfunction + } + } + if (car.tags.Contains("charging")) + state = "Charging"; + isOnline = true; + } + else + { + isOnline = false; + } + + return state; + } + + public string GetDeliveryStatus(TransportDelivery delivery) + { + ChainedDeliveryMission.DeliveryStatus status = + (ChainedDeliveryMission.DeliveryStatus)delivery.GetStatus(); + + if (status == ChainedDeliveryMission.DeliveryStatus.Error) + { + return "Faulted"; + } + else if (status == ChainedDeliveryMission.DeliveryStatus.Canceled) + { + return "Canceled"; + } + else if (status == ChainedDeliveryMission.DeliveryStatus.Terminated) + { + return "Terminated"; + } + else if (status == ChainedDeliveryMission.DeliveryStatus.Finished) + { + return "Completed"; + } + else if (status == ChainedDeliveryMission.DeliveryStatus.Putting) + { + return "Putting"; + } + else if (status == ChainedDeliveryMission.DeliveryStatus.Fetching) + { + return "Fetching"; + } + else if (status == ChainedDeliveryMission.DeliveryStatus.Waiting) + { + return "Created"; + } + else + { + return "UnKnown"; + } + } + } + + internal class MethodInfoDetails + { + public string MethodName; + + public string ButtonName; + + public string ButtonDescription; + + public string ParamsHint; + + public List ParamsList = new(); + } + + internal class ParamInfo + { + public ParamInfo(string name, Type type) + { + Name = name; + Type = type; + } + + public string Name; + public Type Type; + } + + public class HttpPostData + { + private HttpClient hc = new HttpClient() { Timeout = TimeSpan.FromSeconds(3) }; + + public void UploadSignal(string content) + { + try + { + //var json = JsonConvert.SerializeObject(new { }); + //var data = new StringContent(json, Encoding.UTF8, "application/json"); + StringContent stringContent = new StringContent( + JsonConvert.SerializeObject(content) + ); + //ApiController._logger.Info($"DeviceNotifyPost:[{stringContent.ToString()}]"); + + stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); + //hc.Timeout = TimeSpan.FromSeconds(30); + var task = hc.PostAsync( + "http://localhost:20101/api/v1/SecuritySignal/GetSecuritySignal", + stringContent + ); + var responseStr = task.Result.Content.ReadAsStringAsync().Result; + ResultMsg response = JsonConvert.DeserializeObject(responseStr); + } + catch (Exception e) + { + Diagnosis.Log("DeviceNotifyPost" + ExceptionFormatter.FormatEx(e), $"error", true); + } + } + + public void UploadListNode(HashSet contentList) + { + try + { + /* if (contentList == null || contentList.Count == 0) + { + throw new ArgumentException("Content list cannot be null or empty."); + }*/ + // 序列化List为JSON字符串 + var jsonContent = JsonConvert.SerializeObject(contentList); + StringContent stringContent = new StringContent( + jsonContent, + Encoding.UTF8, + "application/json" + ); + + // 设置内容类型为application/json + stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); + // 发送POST请求 + var task = hc.PostAsync( + "http://localhost:20101/api/v1/Node/NodeListDisable", + stringContent + ); + // 读取响应内容 + var responseStr = task.Result.Content.ReadAsStringAsync().Result; + // 反序列化响应 + ResultMsg response = JsonConvert.DeserializeObject(responseStr); + } + catch (Exception e) + { + // 记录异常 + Diagnosis.Log("DeviceNotifyPost" + ExceptionFormatter.FormatEx(e), "error", true); + } + } + } + + public class QrSite + { + public float X; + public float Y; + public float Th; + public int Tag; + } + + class ResultMsg + { + public string code { get; set; } + + public string reqCode { get; set; } + public string msg { get; set; } + public int statu { get; set; } + } + + public class TrafficRequestModel + { + /// + /// 区域名称 + /// + public string AreaName { get; set; } + + /// + /// 控制单位 + /// + public string ControllerName { get; set; } + + /// + /// 申请占用/释放区域,true为占用,false为释放 + /// + public bool IsOccupy { get; set; } + } +} diff --git a/StandardScene.Core/refpath.json b/StandardScene.Core/refpath.json new file mode 100644 index 0000000..3f67a26 --- /dev/null +++ b/StandardScene.Core/refpath.json @@ -0,0 +1,6973 @@ +{ + "Items": { + "ReferencePath": [ + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\Accessibility.dll", + "FileVersion": "8.0.2726.23001", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "Accessibility", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "31bf3856ad364e35", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/Accessibility.dll", + "FusionName": "Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\Accessibility.dll", + "RootDir": "C:\\", + "Filename": "Accessibility", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 15:24:22.0000000", + "CreatedTime": "2026-05-29 17:24:43.9702275", + "AccessedTime": "2026-06-09 15:08:48.6723289", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\acornima\\1.3.0\\lib\\net8.0\\Acornima.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\acornima\\1.3.0\\lib\\net8.0\\Acornima.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "1.3.0", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "Acornima", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\acornima\\1.3.0\\lib\\net8.0\\Acornima.dll", + "FusionName": "Acornima, Version=1.3.0.0, Culture=neutral, PublicKeyToken=496b38436bb9edeb", + "PathInPackage": "lib/net8.0/Acornima.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\acornima\\1.3.0\\lib\\net8.0\\Acornima.dll", + "RootDir": "C:\\", + "Filename": "Acornima", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\acornima\\1.3.0\\lib\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\acornima\\1.3.0\\lib\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-03-11 05:55:06.0000000", + "CreatedTime": "2026-03-25 17:54:20.9056381", + "AccessedTime": "2026-06-09 15:08:48.6683281", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "E:\\Work\\Core\\Simple-FR\\StandardSence\\build\\CommonUsage.dll", + "HintPath": "D:\\MDCS\\Dependencies\\Commons\\CommonUsage.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "Version": "", + "ResolvedFrom": "{CandidateAssemblyFiles}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "true", + "OriginalItemSpec": "CommonUsage", + "FusionName": "CommonUsage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", + "FullPath": "E:\\Work\\Core\\Simple-FR\\StandardSence\\build\\CommonUsage.dll", + "RootDir": "E:\\", + "Filename": "CommonUsage", + "Extension": ".dll", + "RelativeDir": "E:\\Work\\Core\\Simple-FR\\StandardSence\\build\\", + "Directory": "Work\\Core\\Simple-FR\\StandardSence\\build\\", + "RecursiveDir": "", + "ModifiedTime": "2026-05-11 14:42:31.7071990", + "CreatedTime": "2026-06-09 12:57:36.5577076", + "AccessedTime": "2026-06-09 15:36:39.7316366", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\documentformat.openxml\\3.4.1\\lib\\net8.0\\DocumentFormat.OpenXml.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\documentformat.openxml\\3.4.1\\lib\\net8.0\\DocumentFormat.OpenXml.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "3.4.1", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "DocumentFormat.OpenXml", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\documentformat.openxml\\3.4.1\\lib\\net8.0\\DocumentFormat.OpenXml.dll", + "FusionName": "DocumentFormat.OpenXml, Version=3.4.1.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17", + "PathInPackage": "lib/net8.0/DocumentFormat.OpenXml.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\documentformat.openxml\\3.4.1\\lib\\net8.0\\DocumentFormat.OpenXml.dll", + "RootDir": "C:\\", + "Filename": "DocumentFormat.OpenXml", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\documentformat.openxml\\3.4.1\\lib\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\documentformat.openxml\\3.4.1\\lib\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-01-07 03:41:52.0000000", + "CreatedTime": "2026-04-02 15:34:44.7014389", + "AccessedTime": "2026-06-09 15:08:48.6633339", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\documentformat.openxml.framework\\3.4.1\\lib\\net8.0\\DocumentFormat.OpenXml.Framework.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\documentformat.openxml.framework\\3.4.1\\lib\\net8.0\\DocumentFormat.OpenXml.Framework.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "3.4.1", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "DocumentFormat.OpenXml.Framework", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\documentformat.openxml.framework\\3.4.1\\lib\\net8.0\\DocumentFormat.OpenXml.Framework.dll", + "FusionName": "DocumentFormat.OpenXml.Framework, Version=3.4.1.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17", + "PathInPackage": "lib/net8.0/DocumentFormat.OpenXml.Framework.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\documentformat.openxml.framework\\3.4.1\\lib\\net8.0\\DocumentFormat.OpenXml.Framework.dll", + "RootDir": "C:\\", + "Filename": "DocumentFormat.OpenXml.Framework", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\documentformat.openxml.framework\\3.4.1\\lib\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\documentformat.openxml.framework\\3.4.1\\lib\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-01-07 03:41:52.0000000", + "CreatedTime": "2026-04-02 15:34:44.5489739", + "AccessedTime": "2026-06-09 15:08:48.6561443", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\easymodbustcp\\5.6.0\\lib\\net40\\EasyModbus.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\easymodbustcp\\5.6.0\\lib\\net40\\EasyModbus.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "5.6.0", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "EasyModbusTCP", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\easymodbustcp\\5.6.0\\lib\\net40\\EasyModbus.dll", + "FusionName": "EasyModbus, Version=5.6.0.0, Culture=neutral, PublicKeyToken=null", + "PathInPackage": "lib/net40/EasyModbus.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\easymodbustcp\\5.6.0\\lib\\net40\\EasyModbus.dll", + "RootDir": "C:\\", + "Filename": "EasyModbus", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\easymodbustcp\\5.6.0\\lib\\net40\\", + "Directory": "Users\\admin\\.nuget\\packages\\easymodbustcp\\5.6.0\\lib\\net40\\", + "RecursiveDir": "", + "ModifiedTime": "2020-12-31 21:44:38.0000000", + "CreatedTime": "2026-03-24 15:22:34.1314263", + "AccessedTime": "2026-06-09 15:08:48.6531437", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\iotclient\\1.0.40\\lib\\netstandard2.0\\IoTClient.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\iotclient\\1.0.40\\lib\\netstandard2.0\\IoTClient.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "1.0.40", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "IoTClient", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\iotclient\\1.0.40\\lib\\netstandard2.0\\IoTClient.dll", + "FusionName": "IoTClient, Version=1.0.40.0, Culture=neutral, PublicKeyToken=null", + "PathInPackage": "lib/netstandard2.0/IoTClient.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\iotclient\\1.0.40\\lib\\netstandard2.0\\IoTClient.dll", + "RootDir": "C:\\", + "Filename": "IoTClient", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\iotclient\\1.0.40\\lib\\netstandard2.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\iotclient\\1.0.40\\lib\\netstandard2.0\\", + "RecursiveDir": "", + "ModifiedTime": "2022-10-25 16:40:42.0000000", + "CreatedTime": "2026-03-24 15:22:34.1314263", + "AccessedTime": "2026-06-09 15:08:48.6501429", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\jint\\4.6.3\\lib\\net8.0\\Jint.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\jint\\4.6.3\\lib\\net8.0\\Jint.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "4.6.3", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "Jint", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\jint\\4.6.3\\lib\\net8.0\\Jint.dll", + "FusionName": "Jint, Version=4.6.3.0, Culture=neutral, PublicKeyToken=2e92ba9c8d81157f", + "PathInPackage": "lib/net8.0/Jint.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\jint\\4.6.3\\lib\\net8.0\\Jint.dll", + "RootDir": "C:\\", + "Filename": "Jint", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\jint\\4.6.3\\lib\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\jint\\4.6.3\\lib\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-03-12 04:36:24.0000000", + "CreatedTime": "2026-03-25 17:54:20.9619089", + "AccessedTime": "2026-06-09 15:08:48.6461438", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "E:\\Work\\Core\\Simple-FR\\StandardSence\\Ref\\leegKeys-sdk.dll", + "HintPath": "Ref\\leegKeys-sdk.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "Version": "", + "ResolvedFrom": "{CandidateAssemblyFiles}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "true", + "OriginalItemSpec": "leegKeys-sdk", + "FusionName": "leegKeys-sdk, Version=2.1.1.33176, Culture=neutral, PublicKeyToken=null", + "FullPath": "E:\\Work\\Core\\Simple-FR\\StandardSence\\Ref\\leegKeys-sdk.dll", + "RootDir": "E:\\", + "Filename": "leegKeys-sdk", + "Extension": ".dll", + "RelativeDir": "E:\\Work\\Core\\Simple-FR\\StandardSence\\Ref\\", + "Directory": "Work\\Core\\Simple-FR\\StandardSence\\Ref\\", + "RecursiveDir": "", + "ModifiedTime": "2026-05-30 09:15:26.8949314", + "CreatedTime": "2026-06-09 13:02:25.2575075", + "AccessedTime": "2026-06-09 15:33:01.5388188", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "E:\\Work\\Core\\Simple-FR\\Simple\\SimpleLite\\bin\\Debug\\LessokajiWeaverUtilities.dll", + "HintPath": "E:\\Work\\Core\\Simple-FR\\Simple\\SimpleLite\\bin\\Debug\\LessokajiWeaverUtilities.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "Version": "", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "true", + "OriginalItemSpec": "LessokajiWeaverUtilities", + "FusionName": "LessokajiWeaverUtilities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", + "FullPath": "E:\\Work\\Core\\Simple-FR\\Simple\\SimpleLite\\bin\\Debug\\LessokajiWeaverUtilities.dll", + "RootDir": "E:\\", + "Filename": "LessokajiWeaverUtilities", + "Extension": ".dll", + "RelativeDir": "E:\\Work\\Core\\Simple-FR\\Simple\\SimpleLite\\bin\\Debug\\", + "Directory": "Work\\Core\\Simple-FR\\Simple\\SimpleLite\\bin\\Debug\\", + "RecursiveDir": "", + "ModifiedTime": "2026-05-29 15:37:09.7318341", + "CreatedTime": "2026-06-09 14:32:25.7817234", + "AccessedTime": "2026-06-09 15:08:48.6393164", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "E:\\Work\\Core\\Simple-FR\\StandardSence\\build\\MDCSToolBox.dll", + "HintPath": "D:\\MDCS\\Dependencies\\Commons\\MDCSToolBox.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "Version": "", + "ResolvedFrom": "{CandidateAssemblyFiles}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "true", + "OriginalItemSpec": "MDCSToolBox", + "FusionName": "MDCSToolBox, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", + "FullPath": "E:\\Work\\Core\\Simple-FR\\StandardSence\\build\\MDCSToolBox.dll", + "RootDir": "E:\\", + "Filename": "MDCSToolBox", + "Extension": ".dll", + "RelativeDir": "E:\\Work\\Core\\Simple-FR\\StandardSence\\build\\", + "Directory": "Work\\Core\\Simple-FR\\StandardSence\\build\\", + "RecursiveDir": "", + "ModifiedTime": "2025-07-23 10:35:20.0000000", + "CreatedTime": "2026-06-09 12:57:36.6246719", + "AccessedTime": "2026-06-09 15:08:48.6383141", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.CSharp.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "Microsoft.CSharp", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/Microsoft.CSharp.dll", + "FusionName": "Microsoft.CSharp, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.CSharp.dll", + "RootDir": "C:\\", + "Filename": "Microsoft.CSharp", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:44.9322380", + "AccessedTime": "2026-06-09 15:16:46.9250516", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.dotnet.platformabstractions\\2.0.4\\lib\\netstandard1.3\\Microsoft.DotNet.PlatformAbstractions.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.dotnet.platformabstractions\\2.0.4\\lib\\netstandard1.3\\Microsoft.DotNet.PlatformAbstractions.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "2.0.4", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.DotNet.PlatformAbstractions", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.dotnet.platformabstractions\\2.0.4\\lib\\netstandard1.3\\Microsoft.DotNet.PlatformAbstractions.dll", + "FusionName": "Microsoft.DotNet.PlatformAbstractions, Version=2.0.4.0, Culture=neutral, PublicKeyToken=adb9793829ddae60", + "PathInPackage": "lib/netstandard1.3/Microsoft.DotNet.PlatformAbstractions.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.dotnet.platformabstractions\\2.0.4\\lib\\netstandard1.3\\Microsoft.DotNet.PlatformAbstractions.dll", + "RootDir": "C:\\", + "Filename": "Microsoft.DotNet.PlatformAbstractions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.dotnet.platformabstractions\\2.0.4\\lib\\netstandard1.3\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.dotnet.platformabstractions\\2.0.4\\lib\\netstandard1.3\\", + "RecursiveDir": "", + "ModifiedTime": "2017-11-22 18:48:10.0000000", + "CreatedTime": "2026-03-27 13:02:04.1551171", + "AccessedTime": "2026-06-09 15:08:48.6333171", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.dependencymodel\\2.0.4\\lib\\netstandard1.6\\Microsoft.Extensions.DependencyModel.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.dependencymodel\\2.0.4\\lib\\netstandard1.6\\Microsoft.Extensions.DependencyModel.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "2.0.4", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.Extensions.DependencyModel", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.dependencymodel\\2.0.4\\lib\\netstandard1.6\\Microsoft.Extensions.DependencyModel.dll", + "FusionName": "Microsoft.Extensions.DependencyModel, Version=2.0.4.0, Culture=neutral, PublicKeyToken=adb9793829ddae60", + "PathInPackage": "lib/netstandard1.6/Microsoft.Extensions.DependencyModel.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.dependencymodel\\2.0.4\\lib\\netstandard1.6\\Microsoft.Extensions.DependencyModel.dll", + "RootDir": "C:\\", + "Filename": "Microsoft.Extensions.DependencyModel", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.dependencymodel\\2.0.4\\lib\\netstandard1.6\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.extensions.dependencymodel\\2.0.4\\lib\\netstandard1.6\\", + "RecursiveDir": "", + "ModifiedTime": "2017-11-22 18:48:14.0000000", + "CreatedTime": "2026-03-27 13:01:57.0997239", + "AccessedTime": "2026-06-09 15:08:48.6303161", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.platformabstractions\\1.1.0\\lib\\netstandard1.3\\Microsoft.Extensions.PlatformAbstractions.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.platformabstractions\\1.1.0\\lib\\netstandard1.3\\Microsoft.Extensions.PlatformAbstractions.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "1.1.0", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.Extensions.PlatformAbstractions", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.platformabstractions\\1.1.0\\lib\\netstandard1.3\\Microsoft.Extensions.PlatformAbstractions.dll", + "FusionName": "Microsoft.Extensions.PlatformAbstractions, Version=1.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60", + "PathInPackage": "lib/netstandard1.3/Microsoft.Extensions.PlatformAbstractions.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.platformabstractions\\1.1.0\\lib\\netstandard1.3\\Microsoft.Extensions.PlatformAbstractions.dll", + "RootDir": "C:\\", + "Filename": "Microsoft.Extensions.PlatformAbstractions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.platformabstractions\\1.1.0\\lib\\netstandard1.3\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.extensions.platformabstractions\\1.1.0\\lib\\netstandard1.3\\", + "RecursiveDir": "", + "ModifiedTime": "2016-11-15 04:41:30.0000000", + "CreatedTime": "2026-03-27 13:02:12.1186357", + "AccessedTime": "2026-06-09 15:17:14.7784324", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.VisualBasic.Core.dll", + "FileVersion": "13.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "Microsoft.VisualBasic.Core", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "13.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/Microsoft.VisualBasic.Core.dll", + "FusionName": "Microsoft.VisualBasic.Core, Version=13.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.VisualBasic.Core.dll", + "RootDir": "C:\\", + "Filename": "Microsoft.VisualBasic.Core", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:44.9403607", + "AccessedTime": "2026-06-09 15:16:47.0139693", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.VisualBasic.dll", + "FileVersion": "8.0.2726.23001", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "Microsoft.VisualBasic", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "10.1.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/Microsoft.VisualBasic.dll", + "FusionName": "Microsoft.VisualBasic, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.VisualBasic.dll", + "RootDir": "C:\\", + "Filename": "Microsoft.VisualBasic", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 15:26:16.0000000", + "CreatedTime": "2026-05-29 17:24:43.9922035", + "AccessedTime": "2026-06-09 15:08:48.6115805", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.VisualBasic.Forms.dll", + "FileVersion": "8.0.2726.23001", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "Microsoft.VisualBasic.Forms", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/Microsoft.VisualBasic.Forms.dll", + "FusionName": "Microsoft.VisualBasic.Forms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.VisualBasic.Forms.dll", + "RootDir": "C:\\", + "Filename": "Microsoft.VisualBasic.Forms", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 15:26:10.0000000", + "CreatedTime": "2026-05-29 17:24:44.0159203", + "AccessedTime": "2026-06-09 15:08:48.6054642", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.Win32.Primitives.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "Microsoft.Win32.Primitives", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/Microsoft.Win32.Primitives.dll", + "FusionName": "Microsoft.Win32.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.Win32.Primitives.dll", + "RootDir": "C:\\", + "Filename": "Microsoft.Win32.Primitives", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:56.0000000", + "CreatedTime": "2026-05-29 17:24:44.9593216", + "AccessedTime": "2026-06-09 15:16:47.0219734", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.Win32.Registry.AccessControl.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "Microsoft.Win32.Registry.AccessControl", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/Microsoft.Win32.Registry.AccessControl.dll", + "FusionName": "Microsoft.Win32.Registry.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.Win32.Registry.AccessControl.dll", + "RootDir": "C:\\", + "Filename": "Microsoft.Win32.Registry.AccessControl", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:27:28.0000000", + "CreatedTime": "2026-05-29 17:24:44.0333752", + "AccessedTime": "2026-06-09 15:08:48.5898654", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.Win32.Registry.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "Microsoft.Win32.Registry", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/Microsoft.Win32.Registry.dll", + "FusionName": "Microsoft.Win32.Registry, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.Win32.Registry.dll", + "RootDir": "C:\\", + "Filename": "Microsoft.Win32.Registry", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:44.9663236", + "AccessedTime": "2026-06-09 15:16:47.0259711", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.Win32.SystemEvents.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "Microsoft.Win32.SystemEvents", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/Microsoft.Win32.SystemEvents.dll", + "FusionName": "Microsoft.Win32.SystemEvents, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\Microsoft.Win32.SystemEvents.dll", + "RootDir": "C:\\", + "Filename": "Microsoft.Win32.SystemEvents", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:27:28.0000000", + "CreatedTime": "2026-05-29 17:24:44.0496287", + "AccessedTime": "2026-06-09 15:08:48.5736331", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\mqttnet\\4.3.6.1152\\lib\\net7.0\\MQTTnet.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\mqttnet\\4.3.6.1152\\lib\\net7.0\\MQTTnet.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "4.3.6.1152", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "MQTTnet", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\mqttnet\\4.3.6.1152\\lib\\net7.0\\MQTTnet.dll", + "FusionName": "MQTTnet, Version=4.3.6.1152, Culture=neutral, PublicKeyToken=fdb7629f2e364a63", + "PathInPackage": "lib/net7.0/MQTTnet.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\mqttnet\\4.3.6.1152\\lib\\net7.0\\MQTTnet.dll", + "RootDir": "C:\\", + "Filename": "MQTTnet", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\mqttnet\\4.3.6.1152\\lib\\net7.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\mqttnet\\4.3.6.1152\\lib\\net7.0\\", + "RecursiveDir": "", + "ModifiedTime": "2024-05-24 01:39:56.0000000", + "CreatedTime": "2026-03-24 15:22:34.2626409", + "AccessedTime": "2026-06-09 15:08:48.5638462", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\mqttnet.extensions.managedclient\\4.3.6.1152\\lib\\net7.0\\MQTTnet.Extensions.ManagedClient.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\mqttnet.extensions.managedclient\\4.3.6.1152\\lib\\net7.0\\MQTTnet.Extensions.ManagedClient.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "4.3.6.1152", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "MQTTnet.Extensions.ManagedClient", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\mqttnet.extensions.managedclient\\4.3.6.1152\\lib\\net7.0\\MQTTnet.Extensions.ManagedClient.dll", + "FusionName": "MQTTnet.Extensions.ManagedClient, Version=4.3.6.1152, Culture=neutral, PublicKeyToken=fdb7629f2e364a63", + "PathInPackage": "lib/net7.0/MQTTnet.Extensions.ManagedClient.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\mqttnet.extensions.managedclient\\4.3.6.1152\\lib\\net7.0\\MQTTnet.Extensions.ManagedClient.dll", + "RootDir": "C:\\", + "Filename": "MQTTnet.Extensions.ManagedClient", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\mqttnet.extensions.managedclient\\4.3.6.1152\\lib\\net7.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\mqttnet.extensions.managedclient\\4.3.6.1152\\lib\\net7.0\\", + "RecursiveDir": "", + "ModifiedTime": "2024-05-24 01:40:16.0000000", + "CreatedTime": "2026-03-24 15:22:34.3941931", + "AccessedTime": "2026-06-09 15:08:48.5598426", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\mscorlib.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "mscorlib", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/mscorlib.dll", + "FusionName": "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\mscorlib.dll", + "RootDir": "C:\\", + "Filename": "mscorlib", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:43:18.0000000", + "CreatedTime": "2026-05-29 17:24:44.9757454", + "AccessedTime": "2026-06-09 15:16:47.0390744", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\nancy\\2.0.0\\lib\\netstandard2.0\\Nancy.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\nancy\\2.0.0\\lib\\netstandard2.0\\Nancy.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "2.0.0", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "Nancy", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\nancy\\2.0.0\\lib\\netstandard2.0\\Nancy.dll", + "FusionName": "Nancy, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null", + "PathInPackage": "lib/netstandard2.0/Nancy.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\nancy\\2.0.0\\lib\\netstandard2.0\\Nancy.dll", + "RootDir": "C:\\", + "Filename": "Nancy", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\nancy\\2.0.0\\lib\\netstandard2.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\nancy\\2.0.0\\lib\\netstandard2.0\\", + "RecursiveDir": "", + "ModifiedTime": "2019-04-27 18:54:46.0000000", + "CreatedTime": "2026-03-27 13:01:57.7029131", + "AccessedTime": "2026-06-09 15:17:14.9088276", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\netstandard.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "netstandard", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "2.1.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/netstandard.dll", + "FusionName": "netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\netstandard.dll", + "RootDir": "C:\\", + "Filename": "netstandard", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:43:18.0000000", + "CreatedTime": "2026-05-29 17:24:44.9827448", + "AccessedTime": "2026-06-09 15:16:47.0514710", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\newtonsoft.json\\13.0.4\\lib\\net6.0\\Newtonsoft.Json.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\newtonsoft.json\\13.0.4\\lib\\net6.0\\Newtonsoft.Json.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "13.0.4", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "Newtonsoft.Json", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\newtonsoft.json\\13.0.4\\lib\\net6.0\\Newtonsoft.Json.dll", + "FusionName": "Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed", + "PathInPackage": "lib/net6.0/Newtonsoft.Json.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\newtonsoft.json\\13.0.4\\lib\\net6.0\\Newtonsoft.Json.dll", + "RootDir": "C:\\", + "Filename": "Newtonsoft.Json", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\newtonsoft.json\\13.0.4\\lib\\net6.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\newtonsoft.json\\13.0.4\\lib\\net6.0\\", + "RecursiveDir": "", + "ModifiedTime": "2025-09-16 16:04:24.0000000", + "CreatedTime": "2026-04-02 15:34:44.8258942", + "AccessedTime": "2026-06-09 15:08:48.5298457", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "E:\\Work\\Core\\Simple-FR\\Simple\\SimpleCore\\bin\\Debug\\netstandard2.0\\SimpleCore.dll", + "HintPath": "E:\\Work\\Core\\Simple-FR\\Simple\\SimpleCore\\bin\\Debug\\netstandard2.0\\SimpleCore.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "Version": "", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "true", + "OriginalItemSpec": "SimpleCore", + "FusionName": "SimpleCore, Version=0.3.65.5811, Culture=neutral, PublicKeyToken=null", + "FullPath": "E:\\Work\\Core\\Simple-FR\\Simple\\SimpleCore\\bin\\Debug\\netstandard2.0\\SimpleCore.dll", + "RootDir": "E:\\", + "Filename": "SimpleCore", + "Extension": ".dll", + "RelativeDir": "E:\\Work\\Core\\Simple-FR\\Simple\\SimpleCore\\bin\\Debug\\netstandard2.0\\", + "Directory": "Work\\Core\\Simple-FR\\Simple\\SimpleCore\\bin\\Debug\\netstandard2.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-06-09 14:31:41.9497899", + "CreatedTime": "2026-06-09 14:31:44.1469646", + "AccessedTime": "2026-06-09 15:37:16.2649185", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "E:\\Work\\Core\\Simple-FR\\Simple\\SimpleLite\\bin\\Debug\\SimpleLite.dll", + "HintPath": "E:\\Work\\Core\\Simple-FR\\Simple\\SimpleLite\\bin\\Debug\\SimpleLite.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "Version": "", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "true", + "OriginalItemSpec": "SimpleLite", + "FusionName": "SimpleLite, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", + "FullPath": "E:\\Work\\Core\\Simple-FR\\Simple\\SimpleLite\\bin\\Debug\\SimpleLite.dll", + "RootDir": "E:\\", + "Filename": "SimpleLite", + "Extension": ".dll", + "RelativeDir": "E:\\Work\\Core\\Simple-FR\\Simple\\SimpleLite\\bin\\Debug\\", + "Directory": "Work\\Core\\Simple-FR\\Simple\\SimpleLite\\bin\\Debug\\", + "RecursiveDir": "", + "ModifiedTime": "2026-06-09 15:17:15.9896902", + "CreatedTime": "2026-06-09 14:32:28.3499878", + "AccessedTime": "2026-06-09 15:35:36.5902161", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.AppContext.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.AppContext", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.AppContext.dll", + "FusionName": "System.AppContext, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.AppContext.dll", + "RootDir": "C:\\", + "Filename": "System.AppContext", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:24.0000000", + "CreatedTime": "2026-05-29 17:24:44.9920863", + "AccessedTime": "2026-06-09 15:16:47.1079268", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Buffers.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Buffers", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Buffers.dll", + "FusionName": "System.Buffers, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Buffers.dll", + "RootDir": "C:\\", + "Filename": "System.Buffers", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:24.0000000", + "CreatedTime": "2026-05-29 17:24:45.0023134", + "AccessedTime": "2026-06-09 15:16:47.1106528", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.CodeDom.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.CodeDom", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.CodeDom.dll", + "FusionName": "System.CodeDom, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.CodeDom.dll", + "RootDir": "C:\\", + "Filename": "System.CodeDom", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:26:38.0000000", + "CreatedTime": "2026-05-29 17:24:44.3781064", + "AccessedTime": "2026-06-09 15:08:48.5098435", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Collections.Concurrent.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Collections.Concurrent", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Collections.Concurrent.dll", + "FusionName": "System.Collections.Concurrent, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Collections.Concurrent.dll", + "RootDir": "C:\\", + "Filename": "System.Collections.Concurrent", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:56.0000000", + "CreatedTime": "2026-05-29 17:24:45.0108641", + "AccessedTime": "2026-06-09 15:16:47.1136488", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Collections.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Collections", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Collections.dll", + "FusionName": "System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Collections.dll", + "RootDir": "C:\\", + "Filename": "System.Collections", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:56.0000000", + "CreatedTime": "2026-05-29 17:24:45.0204939", + "AccessedTime": "2026-06-09 15:16:47.1176519", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Collections.Immutable.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Collections.Immutable", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Collections.Immutable.dll", + "FusionName": "System.Collections.Immutable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Collections.Immutable.dll", + "RootDir": "C:\\", + "Filename": "System.Collections.Immutable", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:45.0295074", + "AccessedTime": "2026-06-09 15:16:47.1231838", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Collections.NonGeneric.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Collections.NonGeneric", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Collections.NonGeneric.dll", + "FusionName": "System.Collections.NonGeneric, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Collections.NonGeneric.dll", + "RootDir": "C:\\", + "Filename": "System.Collections.NonGeneric", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:56.0000000", + "CreatedTime": "2026-05-29 17:24:45.0374936", + "AccessedTime": "2026-06-09 15:16:47.1281860", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Collections.Specialized.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Collections.Specialized", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Collections.Specialized.dll", + "FusionName": "System.Collections.Specialized, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Collections.Specialized.dll", + "RootDir": "C:\\", + "Filename": "System.Collections.Specialized", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.0494977", + "AccessedTime": "2026-06-09 15:16:47.1311858", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ComponentModel.Annotations.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.ComponentModel.Annotations", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.ComponentModel.Annotations.dll", + "FusionName": "System.ComponentModel.Annotations, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ComponentModel.Annotations.dll", + "RootDir": "C:\\", + "Filename": "System.ComponentModel.Annotations", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.0568415", + "AccessedTime": "2026-06-09 15:16:47.1354693", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ComponentModel.DataAnnotations.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.ComponentModel.DataAnnotations", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "31bf3856ad364e35", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.ComponentModel.DataAnnotations.dll", + "FusionName": "System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ComponentModel.DataAnnotations.dll", + "RootDir": "C:\\", + "Filename": "System.ComponentModel.DataAnnotations", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:34.0000000", + "CreatedTime": "2026-05-29 17:24:45.0638434", + "AccessedTime": "2026-06-09 15:16:47.1394785", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ComponentModel.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.ComponentModel", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.ComponentModel.dll", + "FusionName": "System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ComponentModel.dll", + "RootDir": "C:\\", + "Filename": "System.ComponentModel", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.0738437", + "AccessedTime": "2026-06-09 15:16:47.1454790", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ComponentModel.EventBasedAsync.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.ComponentModel.EventBasedAsync", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.ComponentModel.EventBasedAsync.dll", + "FusionName": "System.ComponentModel.EventBasedAsync, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ComponentModel.EventBasedAsync.dll", + "RootDir": "C:\\", + "Filename": "System.ComponentModel.EventBasedAsync", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.0818424", + "AccessedTime": "2026-06-09 15:16:47.1494770", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ComponentModel.Primitives.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.ComponentModel.Primitives", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.ComponentModel.Primitives.dll", + "FusionName": "System.ComponentModel.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ComponentModel.Primitives.dll", + "RootDir": "C:\\", + "Filename": "System.ComponentModel.Primitives", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.0898426", + "AccessedTime": "2026-06-09 15:16:47.1544779", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ComponentModel.TypeConverter.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.ComponentModel.TypeConverter", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.ComponentModel.TypeConverter.dll", + "FusionName": "System.ComponentModel.TypeConverter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ComponentModel.TypeConverter.dll", + "RootDir": "C:\\", + "Filename": "System.ComponentModel.TypeConverter", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.0981988", + "AccessedTime": "2026-06-09 15:16:47.1590207", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Configuration.ConfigurationManager.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Configuration.ConfigurationManager", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Configuration.ConfigurationManager.dll", + "FusionName": "System.Configuration.ConfigurationManager, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Configuration.ConfigurationManager.dll", + "RootDir": "C:\\", + "Filename": "System.Configuration.ConfigurationManager", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:26:56.0000000", + "CreatedTime": "2026-05-29 17:24:44.3861048", + "AccessedTime": "2026-06-09 15:08:48.4436203", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Configuration.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Configuration", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Configuration.dll", + "FusionName": "System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Configuration.dll", + "RootDir": "C:\\", + "Filename": "System.Configuration", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:32.0000000", + "CreatedTime": "2026-05-29 17:24:45.1064472", + "AccessedTime": "2026-06-09 15:16:47.1610345", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Console.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Console", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Console.dll", + "FusionName": "System.Console, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Console.dll", + "RootDir": "C:\\", + "Filename": "System.Console", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.1177567", + "AccessedTime": "2026-06-09 15:16:47.1640337", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Core.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Core", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Core.dll", + "FusionName": "System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Core.dll", + "RootDir": "C:\\", + "Filename": "System.Core", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:43:16.0000000", + "CreatedTime": "2026-05-29 17:24:45.1287577", + "AccessedTime": "2026-06-09 15:16:47.1677480", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Data.Common.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Data.Common", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Data.Common.dll", + "FusionName": "System.Data.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Data.Common.dll", + "RootDir": "C:\\", + "Filename": "System.Data.Common", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.1357572", + "AccessedTime": "2026-06-09 15:16:47.1717696", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Data.DataSetExtensions.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Data.DataSetExtensions", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Data.DataSetExtensions.dll", + "FusionName": "System.Data.DataSetExtensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Data.DataSetExtensions.dll", + "RootDir": "C:\\", + "Filename": "System.Data.DataSetExtensions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:43:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.1458076", + "AccessedTime": "2026-06-09 15:16:47.1727558", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Data.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Data", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Data.dll", + "FusionName": "System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Data.dll", + "RootDir": "C:\\", + "Filename": "System.Data", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:43:14.0000000", + "CreatedTime": "2026-05-29 17:24:45.1558075", + "AccessedTime": "2026-06-09 15:16:47.1767608", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Design.dll", + "FileVersion": "8.0.2726.23001", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Design", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Design.dll", + "FusionName": "System.Design, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Design.dll", + "RootDir": "C:\\", + "Filename": "System.Design", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 15:26:12.0000000", + "CreatedTime": "2026-05-29 17:24:44.3951023", + "AccessedTime": "2026-06-09 15:08:48.4092977", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.Contracts.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Diagnostics.Contracts", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Diagnostics.Contracts.dll", + "FusionName": "System.Diagnostics.Contracts, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.Contracts.dll", + "RootDir": "C:\\", + "Filename": "System.Diagnostics.Contracts", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.1641285", + "AccessedTime": "2026-06-09 15:16:47.1797554", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.Debug.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Diagnostics.Debug", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Diagnostics.Debug.dll", + "FusionName": "System.Diagnostics.Debug, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.Debug.dll", + "RootDir": "C:\\", + "Filename": "System.Diagnostics.Debug", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:26.0000000", + "CreatedTime": "2026-05-29 17:24:45.1731306", + "AccessedTime": "2026-06-09 15:16:47.1851089", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.DiagnosticSource.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Diagnostics.DiagnosticSource", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Diagnostics.DiagnosticSource.dll", + "FusionName": "System.Diagnostics.DiagnosticSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.DiagnosticSource.dll", + "RootDir": "C:\\", + "Filename": "System.Diagnostics.DiagnosticSource", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:45.1811312", + "AccessedTime": "2026-06-09 15:16:47.1901109", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.EventLog.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Diagnostics.EventLog", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Diagnostics.EventLog.dll", + "FusionName": "System.Diagnostics.EventLog, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.EventLog.dll", + "RootDir": "C:\\", + "Filename": "System.Diagnostics.EventLog", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:26:30.0000000", + "CreatedTime": "2026-05-29 17:24:44.4041203", + "AccessedTime": "2026-06-09 15:08:48.3929797", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.FileVersionInfo.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Diagnostics.FileVersionInfo", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Diagnostics.FileVersionInfo.dll", + "FusionName": "System.Diagnostics.FileVersionInfo, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.FileVersionInfo.dll", + "RootDir": "C:\\", + "Filename": "System.Diagnostics.FileVersionInfo", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.1901301", + "AccessedTime": "2026-06-09 15:16:47.1941125", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.PerformanceCounter.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Diagnostics.PerformanceCounter", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Diagnostics.PerformanceCounter.dll", + "FusionName": "System.Diagnostics.PerformanceCounter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.PerformanceCounter.dll", + "RootDir": "C:\\", + "Filename": "System.Diagnostics.PerformanceCounter", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:27:40.0000000", + "CreatedTime": "2026-05-29 17:24:44.4121049", + "AccessedTime": "2026-06-09 15:08:48.3839807", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.Process.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Diagnostics.Process", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Diagnostics.Process.dll", + "FusionName": "System.Diagnostics.Process, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.Process.dll", + "RootDir": "C:\\", + "Filename": "System.Diagnostics.Process", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.2002750", + "AccessedTime": "2026-06-09 15:16:47.1982498", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.StackTrace.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Diagnostics.StackTrace", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Diagnostics.StackTrace.dll", + "FusionName": "System.Diagnostics.StackTrace, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.StackTrace.dll", + "RootDir": "C:\\", + "Filename": "System.Diagnostics.StackTrace", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:56.0000000", + "CreatedTime": "2026-05-29 17:24:45.2088193", + "AccessedTime": "2026-06-09 15:16:47.2062444", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.TextWriterTraceListener.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Diagnostics.TextWriterTraceListener", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll", + "FusionName": "System.Diagnostics.TextWriterTraceListener, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.TextWriterTraceListener.dll", + "RootDir": "C:\\", + "Filename": "System.Diagnostics.TextWriterTraceListener", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.2198189", + "AccessedTime": "2026-06-09 15:16:47.2092455", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.Tools.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Diagnostics.Tools", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Diagnostics.Tools.dll", + "FusionName": "System.Diagnostics.Tools, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.Tools.dll", + "RootDir": "C:\\", + "Filename": "System.Diagnostics.Tools", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:26.0000000", + "CreatedTime": "2026-05-29 17:24:45.2263399", + "AccessedTime": "2026-06-09 15:16:47.2135064", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.TraceSource.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Diagnostics.TraceSource", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Diagnostics.TraceSource.dll", + "FusionName": "System.Diagnostics.TraceSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.TraceSource.dll", + "RootDir": "C:\\", + "Filename": "System.Diagnostics.TraceSource", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.2346206", + "AccessedTime": "2026-06-09 15:16:47.2175252", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.Tracing.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Diagnostics.Tracing", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Diagnostics.Tracing.dll", + "FusionName": "System.Diagnostics.Tracing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Diagnostics.Tracing.dll", + "RootDir": "C:\\", + "Filename": "System.Diagnostics.Tracing", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.2430405", + "AccessedTime": "2026-06-09 15:16:47.2195219", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.DirectoryServices.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.DirectoryServices", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.DirectoryServices.dll", + "FusionName": "System.DirectoryServices, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.DirectoryServices.dll", + "RootDir": "C:\\", + "Filename": "System.DirectoryServices", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:27:38.0000000", + "CreatedTime": "2026-05-29 17:24:44.4201027", + "AccessedTime": "2026-06-09 15:08:48.3316843", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.dll", + "FusionName": "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.dll", + "RootDir": "C:\\", + "Filename": "System", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:43:18.0000000", + "CreatedTime": "2026-05-29 17:24:45.2510374", + "AccessedTime": "2026-06-09 15:16:47.2235164", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Drawing.Common.dll", + "FileVersion": "8.0.2726.23001", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Drawing.Common", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Drawing.Common.dll", + "FusionName": "System.Drawing.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Drawing.Common.dll", + "RootDir": "C:\\", + "Filename": "System.Drawing.Common", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 15:24:38.0000000", + "CreatedTime": "2026-05-29 17:24:44.4281054", + "AccessedTime": "2026-06-09 15:08:48.3256827", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Drawing.Design.dll", + "FileVersion": "8.0.2726.23001", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Drawing.Design", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Drawing.Design.dll", + "FusionName": "System.Drawing.Design, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Drawing.Design.dll", + "RootDir": "C:\\", + "Filename": "System.Drawing.Design", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 15:26:10.0000000", + "CreatedTime": "2026-05-29 17:24:44.4371033", + "AccessedTime": "2026-06-09 15:08:48.3206845", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Drawing.dll", + "FileVersion": "8.0.2726.23001", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Drawing", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Drawing.dll", + "FusionName": "System.Drawing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Drawing.dll", + "RootDir": "C:\\", + "Filename": "System.Drawing", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 15:26:14.0000000", + "CreatedTime": "2026-05-29 17:24:44.4461051", + "AccessedTime": "2026-06-09 15:08:48.3133345", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Drawing.Primitives.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Drawing.Primitives", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Drawing.Primitives.dll", + "FusionName": "System.Drawing.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Drawing.Primitives.dll", + "RootDir": "C:\\", + "Filename": "System.Drawing.Primitives", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.2675763", + "AccessedTime": "2026-06-09 15:16:47.2369355", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Dynamic.Runtime.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Dynamic.Runtime", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Dynamic.Runtime.dll", + "FusionName": "System.Dynamic.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Dynamic.Runtime.dll", + "RootDir": "C:\\", + "Filename": "System.Dynamic.Runtime", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:30.0000000", + "CreatedTime": "2026-05-29 17:24:45.2772400", + "AccessedTime": "2026-06-09 15:16:47.2409353", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Formats.Asn1.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Formats.Asn1", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Formats.Asn1.dll", + "FusionName": "System.Formats.Asn1, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Formats.Asn1.dll", + "RootDir": "C:\\", + "Filename": "System.Formats.Asn1", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.2866130", + "AccessedTime": "2026-06-09 15:16:47.2459362", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Formats.Tar.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Formats.Tar", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Formats.Tar.dll", + "FusionName": "System.Formats.Tar, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Formats.Tar.dll", + "RootDir": "C:\\", + "Filename": "System.Formats.Tar", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.2956183", + "AccessedTime": "2026-06-09 15:16:47.2519352", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Globalization.Calendars.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Globalization.Calendars", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Globalization.Calendars.dll", + "FusionName": "System.Globalization.Calendars, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Globalization.Calendars.dll", + "RootDir": "C:\\", + "Filename": "System.Globalization.Calendars", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:26.0000000", + "CreatedTime": "2026-05-29 17:24:45.3076209", + "AccessedTime": "2026-06-09 15:16:47.2539358", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Globalization.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Globalization", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Globalization.dll", + "FusionName": "System.Globalization, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Globalization.dll", + "RootDir": "C:\\", + "Filename": "System.Globalization", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:26.0000000", + "CreatedTime": "2026-05-29 17:24:45.3179310", + "AccessedTime": "2026-06-09 15:16:47.2569397", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Globalization.Extensions.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Globalization.Extensions", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Globalization.Extensions.dll", + "FusionName": "System.Globalization.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Globalization.Extensions.dll", + "RootDir": "C:\\", + "Filename": "System.Globalization.Extensions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:24.0000000", + "CreatedTime": "2026-05-29 17:24:45.3261619", + "AccessedTime": "2026-06-09 15:16:47.2635084", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Compression.Brotli.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.Compression.Brotli", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.Compression.Brotli.dll", + "FusionName": "System.IO.Compression.Brotli, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Compression.Brotli.dll", + "RootDir": "C:\\", + "Filename": "System.IO.Compression.Brotli", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.3361989", + "AccessedTime": "2026-06-09 15:16:47.2675120", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Compression.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.Compression", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.Compression.dll", + "FusionName": "System.IO.Compression, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Compression.dll", + "RootDir": "C:\\", + "Filename": "System.IO.Compression", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:56.0000000", + "CreatedTime": "2026-05-29 17:24:45.3454224", + "AccessedTime": "2026-06-09 15:16:47.2708784", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Compression.FileSystem.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.Compression.FileSystem", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.Compression.FileSystem.dll", + "FusionName": "System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Compression.FileSystem.dll", + "RootDir": "C:\\", + "Filename": "System.IO.Compression.FileSystem", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:48.0000000", + "CreatedTime": "2026-05-29 17:24:45.3539276", + "AccessedTime": "2026-06-09 15:16:47.2766369", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Compression.ZipFile.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.Compression.ZipFile", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.Compression.ZipFile.dll", + "FusionName": "System.IO.Compression.ZipFile, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Compression.ZipFile.dll", + "RootDir": "C:\\", + "Filename": "System.IO.Compression.ZipFile", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.3646528", + "AccessedTime": "2026-06-09 15:16:47.2806483", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.dll", + "FusionName": "System.IO, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.dll", + "RootDir": "C:\\", + "Filename": "System.IO", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:26.0000000", + "CreatedTime": "2026-05-29 17:24:45.3750758", + "AccessedTime": "2026-06-09 15:16:47.2866481", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.FileSystem.AccessControl.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.FileSystem.AccessControl", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.FileSystem.AccessControl.dll", + "FusionName": "System.IO.FileSystem.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.FileSystem.AccessControl.dll", + "RootDir": "C:\\", + "Filename": "System.IO.FileSystem.AccessControl", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.3840740", + "AccessedTime": "2026-06-09 15:16:47.2896486", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.FileSystem.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.FileSystem", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.FileSystem.dll", + "FusionName": "System.IO.FileSystem, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.FileSystem.dll", + "RootDir": "C:\\", + "Filename": "System.IO.FileSystem", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:28.0000000", + "CreatedTime": "2026-05-29 17:24:45.3946112", + "AccessedTime": "2026-06-09 15:16:47.2950671", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.FileSystem.DriveInfo.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.FileSystem.DriveInfo", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.FileSystem.DriveInfo.dll", + "FusionName": "System.IO.FileSystem.DriveInfo, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.FileSystem.DriveInfo.dll", + "RootDir": "C:\\", + "Filename": "System.IO.FileSystem.DriveInfo", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.4036101", + "AccessedTime": "2026-06-09 15:16:47.2980729", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.FileSystem.Primitives.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.FileSystem.Primitives", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.FileSystem.Primitives.dll", + "FusionName": "System.IO.FileSystem.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.FileSystem.Primitives.dll", + "RootDir": "C:\\", + "Filename": "System.IO.FileSystem.Primitives", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:26.0000000", + "CreatedTime": "2026-05-29 17:24:45.4142447", + "AccessedTime": "2026-06-09 15:16:47.3020687", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.FileSystem.Watcher.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.FileSystem.Watcher", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.FileSystem.Watcher.dll", + "FusionName": "System.IO.FileSystem.Watcher, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.FileSystem.Watcher.dll", + "RootDir": "C:\\", + "Filename": "System.IO.FileSystem.Watcher", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.4240296", + "AccessedTime": "2026-06-09 15:16:47.3050681", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.IsolatedStorage.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.IsolatedStorage", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.IsolatedStorage.dll", + "FusionName": "System.IO.IsolatedStorage, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.IsolatedStorage.dll", + "RootDir": "C:\\", + "Filename": "System.IO.IsolatedStorage", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.4320328", + "AccessedTime": "2026-06-09 15:16:47.3119959", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.MemoryMappedFiles.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.MemoryMappedFiles", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.MemoryMappedFiles.dll", + "FusionName": "System.IO.MemoryMappedFiles, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.MemoryMappedFiles.dll", + "RootDir": "C:\\", + "Filename": "System.IO.MemoryMappedFiles", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.4425196", + "AccessedTime": "2026-06-09 15:16:47.3150002", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Packaging.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.Packaging", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.IO.Packaging.dll", + "FusionName": "System.IO.Packaging, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Packaging.dll", + "RootDir": "C:\\", + "Filename": "System.IO.Packaging", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:26:56.0000000", + "CreatedTime": "2026-05-29 17:24:44.4592348", + "AccessedTime": "2026-06-09 15:08:48.2314835", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Pipes.AccessControl.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.Pipes.AccessControl", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.Pipes.AccessControl.dll", + "FusionName": "System.IO.Pipes.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Pipes.AccessControl.dll", + "RootDir": "C:\\", + "Filename": "System.IO.Pipes.AccessControl", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.4546881", + "AccessedTime": "2026-06-09 15:16:47.3200067", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Pipes.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.Pipes", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.Pipes.dll", + "FusionName": "System.IO.Pipes, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.Pipes.dll", + "RootDir": "C:\\", + "Filename": "System.IO.Pipes", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.4646898", + "AccessedTime": "2026-06-09 15:16:47.3249938", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\system.io.ports\\4.6.0\\ref\\netstandard2.0\\System.IO.Ports.dll", + "HintPath": "C:\\Users\\admin\\.nuget\\packages\\system.io.ports\\4.6.0\\ref\\netstandard2.0\\System.IO.Ports.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "NuGetPackageVersion": "4.6.0", + "Private": "false", + "Version": "", + "ExternallyResolved": "true", + "NuGetPackageId": "System.IO.Ports", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\system.io.ports\\4.6.0\\ref\\netstandard2.0\\System.IO.Ports.dll", + "FusionName": "System.IO.Ports, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "PathInPackage": "ref/netstandard2.0/System.IO.Ports.dll", + "NuGetSourceType": "Package", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\system.io.ports\\4.6.0\\ref\\netstandard2.0\\System.IO.Ports.dll", + "RootDir": "C:\\", + "Filename": "System.IO.Ports", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\system.io.ports\\4.6.0\\ref\\netstandard2.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\system.io.ports\\4.6.0\\ref\\netstandard2.0\\", + "RecursiveDir": "", + "ModifiedTime": "2019-09-13 10:25:16.0000000", + "CreatedTime": "2026-03-24 15:22:34.6043255", + "AccessedTime": "2026-06-09 15:08:48.2157260", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.UnmanagedMemoryStream.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.IO.UnmanagedMemoryStream", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.IO.UnmanagedMemoryStream.dll", + "FusionName": "System.IO.UnmanagedMemoryStream, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.IO.UnmanagedMemoryStream.dll", + "RootDir": "C:\\", + "Filename": "System.IO.UnmanagedMemoryStream", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:43:06.0000000", + "CreatedTime": "2026-05-29 17:24:45.4740873", + "AccessedTime": "2026-06-09 15:16:47.3289948", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Linq.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Linq", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Linq.dll", + "FusionName": "System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Linq.dll", + "RootDir": "C:\\", + "Filename": "System.Linq", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.4820856", + "AccessedTime": "2026-06-09 15:16:47.3319943", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Linq.Expressions.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Linq.Expressions", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Linq.Expressions.dll", + "FusionName": "System.Linq.Expressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Linq.Expressions.dll", + "RootDir": "C:\\", + "Filename": "System.Linq.Expressions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.4934536", + "AccessedTime": "2026-06-09 15:16:47.3339965", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Linq.Parallel.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Linq.Parallel", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Linq.Parallel.dll", + "FusionName": "System.Linq.Parallel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Linq.Parallel.dll", + "RootDir": "C:\\", + "Filename": "System.Linq.Parallel", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.5019853", + "AccessedTime": "2026-06-09 15:16:47.3379971", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Linq.Queryable.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Linq.Queryable", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Linq.Queryable.dll", + "FusionName": "System.Linq.Queryable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Linq.Queryable.dll", + "RootDir": "C:\\", + "Filename": "System.Linq.Queryable", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.5104968", + "AccessedTime": "2026-06-09 15:16:47.3429977", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Memory.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Memory", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Memory.dll", + "FusionName": "System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Memory.dll", + "RootDir": "C:\\", + "Filename": "System.Memory", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.5208490", + "AccessedTime": "2026-06-09 15:16:47.3469943", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.dll", + "FusionName": "System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.dll", + "RootDir": "C:\\", + "Filename": "System.Net", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:54.0000000", + "CreatedTime": "2026-05-29 17:24:45.5268462", + "AccessedTime": "2026-06-09 15:16:47.3502430", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Http.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.Http", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.Http.dll", + "FusionName": "System.Net.Http, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Http.dll", + "RootDir": "C:\\", + "Filename": "System.Net.Http", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:45.5340727", + "AccessedTime": "2026-06-09 15:16:47.3572524", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Http.Json.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.Http.Json", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.Http.Json.dll", + "FusionName": "System.Net.Http.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Http.Json.dll", + "RootDir": "C:\\", + "Filename": "System.Net.Http.Json", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:45.5410717", + "AccessedTime": "2026-06-09 15:16:47.3602532", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.HttpListener.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.HttpListener", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.HttpListener.dll", + "FusionName": "System.Net.HttpListener, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.HttpListener.dll", + "RootDir": "C:\\", + "Filename": "System.Net.HttpListener", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:45.5514224", + "AccessedTime": "2026-06-09 15:16:47.3612537", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Mail.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.Mail", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.Mail.dll", + "FusionName": "System.Net.Mail, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Mail.dll", + "RootDir": "C:\\", + "Filename": "System.Net.Mail", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:45.5594221", + "AccessedTime": "2026-06-09 15:16:47.3662527", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.NameResolution.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.NameResolution", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.NameResolution.dll", + "FusionName": "System.Net.NameResolution, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.NameResolution.dll", + "RootDir": "C:\\", + "Filename": "System.Net.NameResolution", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.5682942", + "AccessedTime": "2026-06-09 15:16:47.3721628", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.NetworkInformation.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.NetworkInformation", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.NetworkInformation.dll", + "FusionName": "System.Net.NetworkInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.NetworkInformation.dll", + "RootDir": "C:\\", + "Filename": "System.Net.NetworkInformation", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.5772934", + "AccessedTime": "2026-06-09 15:16:47.3751640", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Ping.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.Ping", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.Ping.dll", + "FusionName": "System.Net.Ping, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Ping.dll", + "RootDir": "C:\\", + "Filename": "System.Net.Ping", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.5852938", + "AccessedTime": "2026-06-09 15:16:47.3781641", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Primitives.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.Primitives", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.Primitives.dll", + "FusionName": "System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Primitives.dll", + "RootDir": "C:\\", + "Filename": "System.Net.Primitives", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.5944601", + "AccessedTime": "2026-06-09 15:16:47.3829823", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Quic.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.Quic", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.Quic.dll", + "FusionName": "System.Net.Quic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Quic.dll", + "RootDir": "C:\\", + "Filename": "System.Net.Quic", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.6024535", + "AccessedTime": "2026-06-09 15:16:47.3879837", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Requests.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.Requests", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.Requests.dll", + "FusionName": "System.Net.Requests, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Requests.dll", + "RootDir": "C:\\", + "Filename": "System.Net.Requests", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:45.6104571", + "AccessedTime": "2026-06-09 15:16:47.3919846", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Security.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.Security", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.Security.dll", + "FusionName": "System.Net.Security, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Security.dll", + "RootDir": "C:\\", + "Filename": "System.Net.Security", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.6174476", + "AccessedTime": "2026-06-09 15:16:47.3963450", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.ServicePoint.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.ServicePoint", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.ServicePoint.dll", + "FusionName": "System.Net.ServicePoint, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.ServicePoint.dll", + "RootDir": "C:\\", + "Filename": "System.Net.ServicePoint", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.6241072", + "AccessedTime": "2026-06-09 15:16:47.4030187", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Sockets.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.Sockets", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.Sockets.dll", + "FusionName": "System.Net.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.Sockets.dll", + "RootDir": "C:\\", + "Filename": "System.Net.Sockets", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.6321056", + "AccessedTime": "2026-06-09 15:16:47.4070197", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.WebClient.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.WebClient", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.WebClient.dll", + "FusionName": "System.Net.WebClient, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.WebClient.dll", + "RootDir": "C:\\", + "Filename": "System.Net.WebClient", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:45.6401422", + "AccessedTime": "2026-06-09 15:16:47.4137647", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.WebHeaderCollection.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.WebHeaderCollection", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.WebHeaderCollection.dll", + "FusionName": "System.Net.WebHeaderCollection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.WebHeaderCollection.dll", + "RootDir": "C:\\", + "Filename": "System.Net.WebHeaderCollection", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.6501538", + "AccessedTime": "2026-06-09 15:16:47.4193862", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.WebProxy.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.WebProxy", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.WebProxy.dll", + "FusionName": "System.Net.WebProxy, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.WebProxy.dll", + "RootDir": "C:\\", + "Filename": "System.Net.WebProxy", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:45.6587451", + "AccessedTime": "2026-06-09 15:16:47.4233879", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.WebSockets.Client.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.WebSockets.Client", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.WebSockets.Client.dll", + "FusionName": "System.Net.WebSockets.Client, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.WebSockets.Client.dll", + "RootDir": "C:\\", + "Filename": "System.Net.WebSockets.Client", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:45.6656764", + "AccessedTime": "2026-06-09 15:16:47.4311280", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.WebSockets.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Net.WebSockets", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Net.WebSockets.dll", + "FusionName": "System.Net.WebSockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Net.WebSockets.dll", + "RootDir": "C:\\", + "Filename": "System.Net.WebSockets", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.6767223", + "AccessedTime": "2026-06-09 15:16:47.4358836", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Numerics.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Numerics", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Numerics.dll", + "FusionName": "System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Numerics.dll", + "RootDir": "C:\\", + "Filename": "System.Numerics", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:54.0000000", + "CreatedTime": "2026-05-29 17:24:45.6887227", + "AccessedTime": "2026-06-09 15:16:47.4388834", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Numerics.Vectors.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Numerics.Vectors", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Numerics.Vectors.dll", + "FusionName": "System.Numerics.Vectors, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Numerics.Vectors.dll", + "RootDir": "C:\\", + "Filename": "System.Numerics.Vectors", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.7017285", + "AccessedTime": "2026-06-09 15:16:47.4461025", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ObjectModel.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.ObjectModel", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.ObjectModel.dll", + "FusionName": "System.ObjectModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ObjectModel.dll", + "RootDir": "C:\\", + "Filename": "System.ObjectModel", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.7117250", + "AccessedTime": "2026-06-09 15:16:47.4494668", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.DispatchProxy.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Reflection.DispatchProxy", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Reflection.DispatchProxy.dll", + "FusionName": "System.Reflection.DispatchProxy, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.DispatchProxy.dll", + "RootDir": "C:\\", + "Filename": "System.Reflection.DispatchProxy", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:56.0000000", + "CreatedTime": "2026-05-29 17:24:45.7249370", + "AccessedTime": "2026-06-09 15:16:47.4511134", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Reflection", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Reflection.dll", + "FusionName": "System.Reflection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.dll", + "RootDir": "C:\\", + "Filename": "System.Reflection", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:28.0000000", + "CreatedTime": "2026-05-29 17:24:45.7363021", + "AccessedTime": "2026-06-09 15:16:47.4557796", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.Emit.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Reflection.Emit", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Reflection.Emit.dll", + "FusionName": "System.Reflection.Emit, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.Emit.dll", + "RootDir": "C:\\", + "Filename": "System.Reflection.Emit", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.7483091", + "AccessedTime": "2026-06-09 15:16:47.4587776", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.Emit.ILGeneration.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Reflection.Emit.ILGeneration", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Reflection.Emit.ILGeneration.dll", + "FusionName": "System.Reflection.Emit.ILGeneration, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.Emit.ILGeneration.dll", + "RootDir": "C:\\", + "Filename": "System.Reflection.Emit.ILGeneration", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.7617234", + "AccessedTime": "2026-06-09 15:16:47.4649194", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.Emit.Lightweight.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Reflection.Emit.Lightweight", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Reflection.Emit.Lightweight.dll", + "FusionName": "System.Reflection.Emit.Lightweight, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.Emit.Lightweight.dll", + "RootDir": "C:\\", + "Filename": "System.Reflection.Emit.Lightweight", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.7727322", + "AccessedTime": "2026-06-09 15:16:47.4692003", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.Extensions.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Reflection.Extensions", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Reflection.Extensions.dll", + "FusionName": "System.Reflection.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.Extensions.dll", + "RootDir": "C:\\", + "Filename": "System.Reflection.Extensions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:28.0000000", + "CreatedTime": "2026-05-29 17:24:45.7849449", + "AccessedTime": "2026-06-09 15:16:47.4728474", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.Metadata.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Reflection.Metadata", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Reflection.Metadata.dll", + "FusionName": "System.Reflection.Metadata, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.Metadata.dll", + "RootDir": "C:\\", + "Filename": "System.Reflection.Metadata", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:45.7957337", + "AccessedTime": "2026-06-09 15:16:47.4785251", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.Primitives.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Reflection.Primitives", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Reflection.Primitives.dll", + "FusionName": "System.Reflection.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.Primitives.dll", + "RootDir": "C:\\", + "Filename": "System.Reflection.Primitives", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.8069931", + "AccessedTime": "2026-06-09 15:16:47.4815248", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.TypeExtensions.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Reflection.TypeExtensions", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Reflection.TypeExtensions.dll", + "FusionName": "System.Reflection.TypeExtensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Reflection.TypeExtensions.dll", + "RootDir": "C:\\", + "Filename": "System.Reflection.TypeExtensions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:56.0000000", + "CreatedTime": "2026-05-29 17:24:45.8193893", + "AccessedTime": "2026-06-09 15:16:47.4842445", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Resources.Extensions.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Resources.Extensions", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Resources.Extensions.dll", + "FusionName": "System.Resources.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Resources.Extensions.dll", + "RootDir": "C:\\", + "Filename": "System.Resources.Extensions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:27:04.0000000", + "CreatedTime": "2026-05-29 17:24:44.4782340", + "AccessedTime": "2026-06-09 15:08:47.9614560", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Resources.Reader.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Resources.Reader", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Resources.Reader.dll", + "FusionName": "System.Resources.Reader, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Resources.Reader.dll", + "RootDir": "C:\\", + "Filename": "System.Resources.Reader", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:26.0000000", + "CreatedTime": "2026-05-29 17:24:45.8336848", + "AccessedTime": "2026-06-09 15:16:47.4875619", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Resources.ResourceManager.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Resources.ResourceManager", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Resources.ResourceManager.dll", + "FusionName": "System.Resources.ResourceManager, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Resources.ResourceManager.dll", + "RootDir": "C:\\", + "Filename": "System.Resources.ResourceManager", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:36.0000000", + "CreatedTime": "2026-05-29 17:24:45.8466829", + "AccessedTime": "2026-06-09 15:16:47.4908983", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Resources.Writer.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Resources.Writer", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Resources.Writer.dll", + "FusionName": "System.Resources.Writer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Resources.Writer.dll", + "RootDir": "C:\\", + "Filename": "System.Resources.Writer", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.8608685", + "AccessedTime": "2026-06-09 15:16:47.4975432", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.CompilerServices.Unsafe.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.CompilerServices.Unsafe", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll", + "FusionName": "System.Runtime.CompilerServices.Unsafe, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.CompilerServices.Unsafe.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.CompilerServices.Unsafe", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:28.0000000", + "CreatedTime": "2026-05-29 17:24:45.8762909", + "AccessedTime": "2026-06-09 15:16:47.5015467", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.CompilerServices.VisualC.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.CompilerServices.VisualC", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.CompilerServices.VisualC.dll", + "FusionName": "System.Runtime.CompilerServices.VisualC, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.CompilerServices.VisualC.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.CompilerServices.VisualC", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.8868640", + "AccessedTime": "2026-06-09 15:16:47.5051975", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.dll", + "FusionName": "System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:56.0000000", + "CreatedTime": "2026-05-29 17:24:45.8979115", + "AccessedTime": "2026-06-09 15:16:47.5105423", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Extensions.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.Extensions", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.Extensions.dll", + "FusionName": "System.Runtime.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Extensions.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.Extensions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:30.0000000", + "CreatedTime": "2026-05-29 17:24:45.9145767", + "AccessedTime": "2026-06-09 15:16:47.5135384", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Handles.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.Handles", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.Handles.dll", + "FusionName": "System.Runtime.Handles, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Handles.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.Handles", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:30.0000000", + "CreatedTime": "2026-05-29 17:24:45.9289101", + "AccessedTime": "2026-06-09 15:16:47.5156739", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.InteropServices.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.InteropServices", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.InteropServices.dll", + "FusionName": "System.Runtime.InteropServices, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.InteropServices.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.InteropServices", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:56.0000000", + "CreatedTime": "2026-05-29 17:24:45.9423436", + "AccessedTime": "2026-06-09 15:16:47.5186815", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.InteropServices.JavaScript.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.InteropServices.JavaScript", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.InteropServices.JavaScript.dll", + "FusionName": "System.Runtime.InteropServices.JavaScript, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.InteropServices.JavaScript.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.InteropServices.JavaScript", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.9551391", + "AccessedTime": "2026-06-09 15:16:47.5244108", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.InteropServices.RuntimeInformation.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.InteropServices.RuntimeInformation", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll", + "FusionName": "System.Runtime.InteropServices.RuntimeInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.InteropServices.RuntimeInformation.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.InteropServices.RuntimeInformation", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:34.0000000", + "CreatedTime": "2026-05-29 17:24:45.9650982", + "AccessedTime": "2026-06-09 15:16:47.5300227", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Intrinsics.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.Intrinsics", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.Intrinsics.dll", + "FusionName": "System.Runtime.Intrinsics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Intrinsics.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.Intrinsics", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:45.9751660", + "AccessedTime": "2026-06-09 15:16:47.5324428", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Loader.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.Loader", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.Loader.dll", + "FusionName": "System.Runtime.Loader, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Loader.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.Loader", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:45.9886827", + "AccessedTime": "2026-06-09 15:16:47.5364399", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Numerics.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.Numerics", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.Numerics.dll", + "FusionName": "System.Runtime.Numerics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Numerics.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.Numerics", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:45.9969230", + "AccessedTime": "2026-06-09 15:16:47.5433186", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Serialization.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.Serialization", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.Serialization.dll", + "FusionName": "System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Serialization.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.Serialization", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:43:08.0000000", + "CreatedTime": "2026-05-29 17:24:46.0076951", + "AccessedTime": "2026-06-09 15:16:47.5465933", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Serialization.Formatters.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.Serialization.Formatters", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.Serialization.Formatters.dll", + "FusionName": "System.Runtime.Serialization.Formatters, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Serialization.Formatters.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.Serialization.Formatters", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:46.0186187", + "AccessedTime": "2026-06-09 15:16:47.5502276", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Serialization.Json.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.Serialization.Json", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.Serialization.Json.dll", + "FusionName": "System.Runtime.Serialization.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Serialization.Json.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.Serialization.Json", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:46.0372726", + "AccessedTime": "2026-06-09 15:16:47.5564634", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Serialization.Primitives.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.Serialization.Primitives", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.Serialization.Primitives.dll", + "FusionName": "System.Runtime.Serialization.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Serialization.Primitives.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.Serialization.Primitives", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:56.0000000", + "CreatedTime": "2026-05-29 17:24:46.0460387", + "AccessedTime": "2026-06-09 15:16:47.5589926", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Serialization.Xml.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Runtime.Serialization.Xml", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Runtime.Serialization.Xml.dll", + "FusionName": "System.Runtime.Serialization.Xml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Runtime.Serialization.Xml.dll", + "RootDir": "C:\\", + "Filename": "System.Runtime.Serialization.Xml", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:46.0609215", + "AccessedTime": "2026-06-09 15:16:47.5623519", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.AccessControl.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.AccessControl", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.AccessControl.dll", + "FusionName": "System.Security.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.AccessControl.dll", + "RootDir": "C:\\", + "Filename": "System.Security.AccessControl", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:46.0737069", + "AccessedTime": "2026-06-09 15:16:47.5672797", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Claims.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Claims", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.Claims.dll", + "FusionName": "System.Security.Claims, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Claims.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Claims", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:46.0835306", + "AccessedTime": "2026-06-09 15:16:47.5733226", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Algorithms.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Cryptography.Algorithms", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.Cryptography.Algorithms.dll", + "FusionName": "System.Security.Cryptography.Algorithms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Algorithms.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Cryptography.Algorithms", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:36.0000000", + "CreatedTime": "2026-05-29 17:24:46.0936439", + "AccessedTime": "2026-06-09 15:16:47.5787843", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Cng.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Cryptography.Cng", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.Cryptography.Cng.dll", + "FusionName": "System.Security.Cryptography.Cng, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Cng.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Cryptography.Cng", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:38.0000000", + "CreatedTime": "2026-05-29 17:24:46.1035999", + "AccessedTime": "2026-06-09 15:16:47.5819549", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Csp.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Cryptography.Csp", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.Cryptography.Csp.dll", + "FusionName": "System.Security.Cryptography.Csp, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Csp.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Cryptography.Csp", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:38.0000000", + "CreatedTime": "2026-05-29 17:24:46.1109979", + "AccessedTime": "2026-06-09 15:16:47.5868369", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Cryptography", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.Cryptography.dll", + "FusionName": "System.Security.Cryptography, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Cryptography", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:46.1239008", + "AccessedTime": "2026-06-09 15:16:47.5909749", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Encoding.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Cryptography.Encoding", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.Cryptography.Encoding.dll", + "FusionName": "System.Security.Cryptography.Encoding, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Encoding.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Cryptography.Encoding", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:36.0000000", + "CreatedTime": "2026-05-29 17:24:46.1349645", + "AccessedTime": "2026-06-09 15:16:47.5939766", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.OpenSsl.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Cryptography.OpenSsl", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.Cryptography.OpenSsl.dll", + "FusionName": "System.Security.Cryptography.OpenSsl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.OpenSsl.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Cryptography.OpenSsl", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:38.0000000", + "CreatedTime": "2026-05-29 17:24:46.1457377", + "AccessedTime": "2026-06-09 15:16:47.5969753", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Pkcs.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Cryptography.Pkcs", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Security.Cryptography.Pkcs.dll", + "FusionName": "System.Security.Cryptography.Pkcs, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Pkcs.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Cryptography.Pkcs", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:26:26.0000000", + "CreatedTime": "2026-05-29 17:24:44.4903431", + "AccessedTime": "2026-06-09 15:08:47.7844294", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Primitives.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Cryptography.Primitives", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.Cryptography.Primitives.dll", + "FusionName": "System.Security.Cryptography.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Primitives.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Cryptography.Primitives", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:36.0000000", + "CreatedTime": "2026-05-29 17:24:46.1586320", + "AccessedTime": "2026-06-09 15:16:47.6038954", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.ProtectedData.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Cryptography.ProtectedData", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Security.Cryptography.ProtectedData.dll", + "FusionName": "System.Security.Cryptography.ProtectedData, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.ProtectedData.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Cryptography.ProtectedData", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:26:46.0000000", + "CreatedTime": "2026-05-29 17:24:44.5014683", + "AccessedTime": "2026-06-09 15:08:47.7733098", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.X509Certificates.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Cryptography.X509Certificates", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.Cryptography.X509Certificates.dll", + "FusionName": "System.Security.Cryptography.X509Certificates, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.X509Certificates.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Cryptography.X509Certificates", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:38.0000000", + "CreatedTime": "2026-05-29 17:24:46.1694921", + "AccessedTime": "2026-06-09 15:16:47.6071131", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Xml.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Cryptography.Xml", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Security.Cryptography.Xml.dll", + "FusionName": "System.Security.Cryptography.Xml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Cryptography.Xml.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Cryptography.Xml", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:26:38.0000000", + "CreatedTime": "2026-05-29 17:24:44.5148586", + "AccessedTime": "2026-06-09 15:08:47.7594793", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.dll", + "FusionName": "System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.dll", + "RootDir": "C:\\", + "Filename": "System.Security", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:38.0000000", + "CreatedTime": "2026-05-29 17:24:46.1811344", + "AccessedTime": "2026-06-09 15:16:47.6111218", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Permissions.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Permissions", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Security.Permissions.dll", + "FusionName": "System.Security.Permissions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Permissions.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Permissions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:27:22.0000000", + "CreatedTime": "2026-05-29 17:24:44.5248069", + "AccessedTime": "2026-06-09 15:08:47.7471699", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Principal.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Principal", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.Principal.dll", + "FusionName": "System.Security.Principal, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Principal.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Principal", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:30.0000000", + "CreatedTime": "2026-05-29 17:24:46.1895267", + "AccessedTime": "2026-06-09 15:16:47.6131201", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Principal.Windows.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.Principal.Windows", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.Principal.Windows.dll", + "FusionName": "System.Security.Principal.Windows, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.Principal.Windows.dll", + "RootDir": "C:\\", + "Filename": "System.Security.Principal.Windows", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:46.1994320", + "AccessedTime": "2026-06-09 15:16:47.6160737", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.SecureString.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Security.SecureString", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Security.SecureString.dll", + "FusionName": "System.Security.SecureString, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Security.SecureString.dll", + "RootDir": "C:\\", + "Filename": "System.Security.SecureString", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:43:06.0000000", + "CreatedTime": "2026-05-29 17:24:46.2089640", + "AccessedTime": "2026-06-09 15:16:47.6192869", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ServiceModel.Web.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.ServiceModel.Web", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "31bf3856ad364e35", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.ServiceModel.Web.dll", + "FusionName": "System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ServiceModel.Web.dll", + "RootDir": "C:\\", + "Filename": "System.ServiceModel.Web", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:43:10.0000000", + "CreatedTime": "2026-05-29 17:24:46.2197555", + "AccessedTime": "2026-06-09 15:16:47.6225646", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ServiceProcess.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.ServiceProcess", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.ServiceProcess.dll", + "FusionName": "System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ServiceProcess.dll", + "RootDir": "C:\\", + "Filename": "System.ServiceProcess", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:32.0000000", + "CreatedTime": "2026-05-29 17:24:46.2314710", + "AccessedTime": "2026-06-09 15:16:47.6268647", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Text.Encoding.CodePages.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Text.Encoding.CodePages", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Text.Encoding.CodePages.dll", + "FusionName": "System.Text.Encoding.CodePages, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Text.Encoding.CodePages.dll", + "RootDir": "C:\\", + "Filename": "System.Text.Encoding.CodePages", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:46.2419814", + "AccessedTime": "2026-06-09 15:16:47.6301903", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Text.Encoding.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Text.Encoding", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Text.Encoding.dll", + "FusionName": "System.Text.Encoding, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Text.Encoding.dll", + "RootDir": "C:\\", + "Filename": "System.Text.Encoding", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:28.0000000", + "CreatedTime": "2026-05-29 17:24:46.2529373", + "AccessedTime": "2026-06-09 15:16:47.6361989", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Text.Encoding.Extensions.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Text.Encoding.Extensions", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Text.Encoding.Extensions.dll", + "FusionName": "System.Text.Encoding.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Text.Encoding.Extensions.dll", + "RootDir": "C:\\", + "Filename": "System.Text.Encoding.Extensions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:46.2604700", + "AccessedTime": "2026-06-09 15:16:47.6410372", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Text.Encodings.Web.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Text.Encodings.Web", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Text.Encodings.Web.dll", + "FusionName": "System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Text.Encodings.Web.dll", + "RootDir": "C:\\", + "Filename": "System.Text.Encodings.Web", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:46.2684492", + "AccessedTime": "2026-06-09 15:16:47.6475569", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Text.Json.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Text.Json", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Text.Json.dll", + "FusionName": "System.Text.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Text.Json.dll", + "RootDir": "C:\\", + "Filename": "System.Text.Json", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:46.2773651", + "AccessedTime": "2026-06-09 15:16:47.6539079", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Text.RegularExpressions.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Text.RegularExpressions", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Text.RegularExpressions.dll", + "FusionName": "System.Text.RegularExpressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Text.RegularExpressions.dll", + "RootDir": "C:\\", + "Filename": "System.Text.RegularExpressions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:46.2851599", + "AccessedTime": "2026-06-09 15:16:47.6577178", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.AccessControl.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Threading.AccessControl", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Threading.AccessControl.dll", + "FusionName": "System.Threading.AccessControl, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.AccessControl.dll", + "RootDir": "C:\\", + "Filename": "System.Threading.AccessControl", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:27:30.0000000", + "CreatedTime": "2026-05-29 17:24:44.5348189", + "AccessedTime": "2026-06-09 15:08:47.6899308", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Channels.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Threading.Channels", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Threading.Channels.dll", + "FusionName": "System.Threading.Channels, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Channels.dll", + "RootDir": "C:\\", + "Filename": "System.Threading.Channels", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:46.2972450", + "AccessedTime": "2026-06-09 15:16:47.6610579", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Threading", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Threading.dll", + "FusionName": "System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.dll", + "RootDir": "C:\\", + "Filename": "System.Threading", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:56.0000000", + "CreatedTime": "2026-05-29 17:24:46.3059768", + "AccessedTime": "2026-06-09 15:16:47.6653245", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Overlapped.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Threading.Overlapped", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Threading.Overlapped.dll", + "FusionName": "System.Threading.Overlapped, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Overlapped.dll", + "RootDir": "C:\\", + "Filename": "System.Threading.Overlapped", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:56.0000000", + "CreatedTime": "2026-05-29 17:24:46.3161887", + "AccessedTime": "2026-06-09 15:16:47.6698486", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Tasks.Dataflow.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Threading.Tasks.Dataflow", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Threading.Tasks.Dataflow.dll", + "FusionName": "System.Threading.Tasks.Dataflow, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Tasks.Dataflow.dll", + "RootDir": "C:\\", + "Filename": "System.Threading.Tasks.Dataflow", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:46.3276480", + "AccessedTime": "2026-06-09 15:16:47.6738553", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Tasks.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Threading.Tasks", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Threading.Tasks.dll", + "FusionName": "System.Threading.Tasks, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Tasks.dll", + "RootDir": "C:\\", + "Filename": "System.Threading.Tasks", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:28.0000000", + "CreatedTime": "2026-05-29 17:24:46.3391714", + "AccessedTime": "2026-06-09 15:16:47.6790214", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Tasks.Extensions.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Threading.Tasks.Extensions", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Threading.Tasks.Extensions.dll", + "FusionName": "System.Threading.Tasks.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Tasks.Extensions.dll", + "RootDir": "C:\\", + "Filename": "System.Threading.Tasks.Extensions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:34.0000000", + "CreatedTime": "2026-05-29 17:24:46.3503412", + "AccessedTime": "2026-06-09 15:16:47.6833902", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Tasks.Parallel.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Threading.Tasks.Parallel", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Threading.Tasks.Parallel.dll", + "FusionName": "System.Threading.Tasks.Parallel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Tasks.Parallel.dll", + "RootDir": "C:\\", + "Filename": "System.Threading.Tasks.Parallel", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:46.3603779", + "AccessedTime": "2026-06-09 15:16:47.6863898", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Thread.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Threading.Thread", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Threading.Thread.dll", + "FusionName": "System.Threading.Thread, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Thread.dll", + "RootDir": "C:\\", + "Filename": "System.Threading.Thread", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:46.3729205", + "AccessedTime": "2026-06-09 15:16:47.6893882", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.ThreadPool.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Threading.ThreadPool", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Threading.ThreadPool.dll", + "FusionName": "System.Threading.ThreadPool, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.ThreadPool.dll", + "RootDir": "C:\\", + "Filename": "System.Threading.ThreadPool", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:46.3826571", + "AccessedTime": "2026-06-09 15:16:47.6929017", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Timer.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Threading.Timer", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Threading.Timer.dll", + "FusionName": "System.Threading.Timer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Threading.Timer.dll", + "RootDir": "C:\\", + "Filename": "System.Threading.Timer", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:32.0000000", + "CreatedTime": "2026-05-29 17:24:46.3936445", + "AccessedTime": "2026-06-09 15:16:47.6962562", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Transactions.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Transactions", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Transactions.dll", + "FusionName": "System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Transactions.dll", + "RootDir": "C:\\", + "Filename": "System.Transactions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:46.0000000", + "CreatedTime": "2026-05-29 17:24:46.4037248", + "AccessedTime": "2026-06-09 15:16:47.7010360", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Transactions.Local.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Transactions.Local", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Transactions.Local.dll", + "FusionName": "System.Transactions.Local, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Transactions.Local.dll", + "RootDir": "C:\\", + "Filename": "System.Transactions.Local", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:38:58.0000000", + "CreatedTime": "2026-05-29 17:24:46.4112634", + "AccessedTime": "2026-06-09 15:16:47.7046926", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ValueTuple.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.ValueTuple", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.ValueTuple.dll", + "FusionName": "System.ValueTuple, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.ValueTuple.dll", + "RootDir": "C:\\", + "Filename": "System.ValueTuple", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:32.0000000", + "CreatedTime": "2026-05-29 17:24:46.4213399", + "AccessedTime": "2026-06-09 15:16:47.7106932", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Web.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Web", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Web.dll", + "FusionName": "System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Web.dll", + "RootDir": "C:\\", + "Filename": "System.Web", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:32.0000000", + "CreatedTime": "2026-05-29 17:24:46.4331283", + "AccessedTime": "2026-06-09 15:16:47.7132038", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Web.HttpUtility.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Web.HttpUtility", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Web.HttpUtility.dll", + "FusionName": "System.Web.HttpUtility, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Web.HttpUtility.dll", + "RootDir": "C:\\", + "Filename": "System.Web.HttpUtility", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:46.4411008", + "AccessedTime": "2026-06-09 15:16:47.7165303", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Windows.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Windows", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Windows.dll", + "FusionName": "System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Windows.dll", + "RootDir": "C:\\", + "Filename": "System.Windows", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:34.0000000", + "CreatedTime": "2026-05-29 17:24:46.4543885", + "AccessedTime": "2026-06-09 15:16:47.7203261", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Windows.Extensions.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Windows.Extensions", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "cc7b13ffcd2ddd51", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Windows.Extensions.dll", + "FusionName": "System.Windows.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Windows.Extensions.dll", + "RootDir": "C:\\", + "Filename": "System.Windows.Extensions", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:27:18.0000000", + "CreatedTime": "2026-05-29 17:24:44.5600429", + "AccessedTime": "2026-06-09 15:08:47.6032630", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Windows.Forms.Design.dll", + "FileVersion": "8.0.2726.23001", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Windows.Forms.Design", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Windows.Forms.Design.dll", + "FusionName": "System.Windows.Forms.Design, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Windows.Forms.Design.dll", + "RootDir": "C:\\", + "Filename": "System.Windows.Forms.Design", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 15:26:08.0000000", + "CreatedTime": "2026-05-29 17:24:44.5721979", + "AccessedTime": "2026-06-09 15:08:47.5982726", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Windows.Forms.Design.Editors.dll", + "FileVersion": "8.0.2726.23001", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Windows.Forms.Design.Editors", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Windows.Forms.Design.Editors.dll", + "FusionName": "System.Windows.Forms.Design.Editors, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Windows.Forms.Design.Editors.dll", + "RootDir": "C:\\", + "Filename": "System.Windows.Forms.Design.Editors", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 15:26:18.0000000", + "CreatedTime": "2026-05-29 17:24:44.5851989", + "AccessedTime": "2026-06-09 15:08:47.5952729", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Windows.Forms.dll", + "FileVersion": "8.0.2726.23001", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Windows.Forms", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Windows.Forms.dll", + "FusionName": "System.Windows.Forms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Windows.Forms.dll", + "RootDir": "C:\\", + "Filename": "System.Windows.Forms", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 15:25:54.0000000", + "CreatedTime": "2026-05-29 17:24:44.5961979", + "AccessedTime": "2026-06-09 15:08:47.5892700", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Windows.Forms.Primitives.dll", + "FileVersion": "8.0.2726.23001", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Windows.Forms.Primitives", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.WindowsDesktop.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.WindowsDesktop.App.WindowsForms", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref/net8.0/System.Windows.Forms.Primitives.dll", + "FusionName": "System.Windows.Forms.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\System.Windows.Forms.Primitives.dll", + "RootDir": "C:\\", + "Filename": "System.Windows.Forms.Primitives", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 15:25:14.0000000", + "CreatedTime": "2026-05-29 17:24:44.6165471", + "AccessedTime": "2026-06-09 15:08:47.5842764", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Xml", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Xml.dll", + "FusionName": "System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.dll", + "RootDir": "C:\\", + "Filename": "System.Xml", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:43:10.0000000", + "CreatedTime": "2026-05-29 17:24:46.4659293", + "AccessedTime": "2026-06-09 15:16:47.7234799", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.Linq.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Xml.Linq", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Xml.Linq.dll", + "FusionName": "System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.Linq.dll", + "RootDir": "C:\\", + "Filename": "System.Xml.Linq", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:43:00.0000000", + "CreatedTime": "2026-05-29 17:24:46.4781585", + "AccessedTime": "2026-06-09 15:16:47.7275751", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.ReaderWriter.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Xml.ReaderWriter", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Xml.ReaderWriter.dll", + "FusionName": "System.Xml.ReaderWriter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.ReaderWriter.dll", + "RootDir": "C:\\", + "Filename": "System.Xml.ReaderWriter", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:00.0000000", + "CreatedTime": "2026-05-29 17:24:46.4909223", + "AccessedTime": "2026-06-09 15:16:47.7305727", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.Serialization.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Xml.Serialization", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b77a5c561934e089", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Xml.Serialization.dll", + "FusionName": "System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.Serialization.dll", + "RootDir": "C:\\", + "Filename": "System.Xml.Serialization", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:43:06.0000000", + "CreatedTime": "2026-05-29 17:24:46.4999707", + "AccessedTime": "2026-06-09 15:16:47.7360761", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.XDocument.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Xml.XDocument", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Xml.XDocument.dll", + "FusionName": "System.Xml.XDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.XDocument.dll", + "RootDir": "C:\\", + "Filename": "System.Xml.XDocument", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:46.5111530", + "AccessedTime": "2026-06-09 15:16:47.7417700", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.XmlDocument.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Xml.XmlDocument", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Xml.XmlDocument.dll", + "FusionName": "System.Xml.XmlDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.XmlDocument.dll", + "RootDir": "C:\\", + "Filename": "System.Xml.XmlDocument", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:30.0000000", + "CreatedTime": "2026-05-29 17:24:46.5226470", + "AccessedTime": "2026-06-09 15:16:47.7457729", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.XmlSerializer.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Xml.XmlSerializer", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Xml.XmlSerializer.dll", + "FusionName": "System.Xml.XmlSerializer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.XmlSerializer.dll", + "RootDir": "C:\\", + "Filename": "System.Xml.XmlSerializer", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:02.0000000", + "CreatedTime": "2026-05-29 17:24:46.5311261", + "AccessedTime": "2026-06-09 15:16:47.7467696", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.XPath.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Xml.XPath", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Xml.XPath.dll", + "FusionName": "System.Xml.XPath, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.XPath.dll", + "RootDir": "C:\\", + "Filename": "System.Xml.XPath", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:46.5415589", + "AccessedTime": "2026-06-09 15:16:47.7509340", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.XPath.XDocument.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "System.Xml.XPath.XDocument", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "b03f5f7f11d50a3a", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "8.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/System.Xml.XPath.XDocument.dll", + "FusionName": "System.Xml.XPath.XDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\System.Xml.XPath.XDocument.dll", + "RootDir": "C:\\", + "Filename": "System.Xml.XPath.XDocument", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:39:04.0000000", + "CreatedTime": "2026-05-29 17:24:46.5480018", + "AccessedTime": "2026-06-09 15:16:47.7557478", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "E:\\Work\\Core\\Simple-FR\\Simple\\tools\\Topaz.dll", + "HintPath": "E:\\Work\\Core\\Simple-FR\\Simple\\tools\\Topaz.dll", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "Version": "", + "ResolvedFrom": "{HintPathFromItem}", + "ImageRuntime": "v4.0.30319", + "CopyLocal": "true", + "OriginalItemSpec": "Topaz", + "FusionName": "Topaz, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", + "FullPath": "E:\\Work\\Core\\Simple-FR\\Simple\\tools\\Topaz.dll", + "RootDir": "E:\\", + "Filename": "Topaz", + "Extension": ".dll", + "RelativeDir": "E:\\Work\\Core\\Simple-FR\\Simple\\tools\\", + "Directory": "Work\\Core\\Simple-FR\\Simple\\tools\\", + "RecursiveDir": "", + "ModifiedTime": "2026-05-26 12:59:05.1578294", + "CreatedTime": "2026-05-29 15:47:48.1945652", + "AccessedTime": "2026-06-09 15:31:23.7071357", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + }, + { + "Identity": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\WindowsBase.dll", + "FileVersion": "8.0.2726.22922", + "ReferenceSourceTarget": "ResolveAssemblyReference", + "AssemblyName": "WindowsBase", + "NuGetPackageVersion": "8.0.27", + "Private": "false", + "PublicKeyToken": "31bf3856ad364e35", + "Version": "", + "FrameworkReferenceVersion": "8.0.27", + "ExternallyResolved": "true", + "NuGetPackageId": "Microsoft.NETCore.App.Ref", + "ResolvedFrom": "{RawFileName}", + "FrameworkReferenceName": "Microsoft.NETCore.App", + "ImageRuntime": "v4.0.30319", + "AssemblyVersion": "4.0.0.0", + "CopyLocal": "false", + "OriginalItemSpec": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref/net8.0/WindowsBase.dll", + "FusionName": "WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", + "FullPath": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\WindowsBase.dll", + "RootDir": "C:\\", + "Filename": "WindowsBase", + "Extension": ".dll", + "RelativeDir": "C:\\Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "Directory": "Users\\admin\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\ref\\net8.0\\", + "RecursiveDir": "", + "ModifiedTime": "2026-04-30 07:42:36.0000000", + "CreatedTime": "2026-05-29 17:24:46.5589208", + "AccessedTime": "2026-06-09 15:16:47.7613800", + "DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\Microsoft.Common.CurrentVersion.targets", + "DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\10.0.300\\", + "DefiningProjectName": "Microsoft.Common.CurrentVersion", + "DefiningProjectExtension": ".targets" + } + ] + } +} diff --git a/StandardScene.Devices/ButtonBox/AzowieButtonBox.cs b/StandardScene.Devices/ButtonBox/AzowieButtonBox.cs new file mode 100644 index 0000000..17ea589 --- /dev/null +++ b/StandardScene.Devices/ButtonBox/AzowieButtonBox.cs @@ -0,0 +1,547 @@ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using StandardScene.Utils; +using SimpleCore; +using SimpleCore.Library; + +namespace StandardScene.ExtendDevice.ButtonBox +{ + /// + /// Azowie 呼叫器按钮盒实现 + /// 基于 Modbus TCP 协议 + /// + public class AzowieButtonBox : BasicButtonBox + { + /// + /// Modbus TCP 客户端 + /// + private ModbusRtu _modbusClient; + + /// + /// 同步锁 + /// + private readonly object _syncLock = new object(); + + /// + /// 是否已启动 + /// + private bool _isStarted = false; + + /// + /// 定时读取任务取消令牌 + /// + private CancellationTokenSource _cancellationTokenSource; + + /// + /// 定时读取任务 + /// + private Task _readTask; + + /// + /// 读取间隔(毫秒),默认500ms + /// + public int ReadInterval { get; set; } = 500; + + /// + /// 重连间隔(毫秒),默认3000ms,避免过于频繁的重连 + /// + public int ReconnectInterval { get; set; } = 3000; + + /// + /// 上次重连尝试时间 + /// + private DateTime _lastReconnectAttempt = DateTime.MinValue; + + /// + /// Modbus 从站地址,默认1 + /// + public byte SlaveAddress { get; set; } = 1; + + /// + /// 呼叫器编号(只读) + /// + public int DeviceId { get; private set; } = 0; + + /// + /// 电池电量(0-100) + /// + public int BatteryLevel { get; private set; } = 0; + + /// + /// 按钮灯状态字典 + /// + public Dictionary ButtonLightStates { get; private set; } = new Dictionary(); + + /// + /// 按钮灯状态枚举 + /// + public enum ButtonLightState + { + /// + /// 常灭 + /// + Off = 0, + /// + /// 常亮 + /// + On = 1, + /// + /// 快闪,间隔0.5秒 + /// + FastBlink = 2, + /// + /// 慢闪,间隔2秒 + /// + SlowBlink = 3 + } + + /// + /// 连接按钮盒 + /// + public override void Connect() + { + lock (_syncLock) + { + if (_isStarted) + { + return; + } + + try + { + UpdateState(ButtonBoxState.Connecting); + + // 根据配置的按钮初始化按钮状态 + var buttonIndices = ButtonConfigs.Keys.OrderBy(k => k).ToList(); + if (buttonIndices.Count == 0) + { + // 如果没有配置,默认初始化按钮1-8 + buttonIndices = new List { 1, 2, 3, 4, 5, 6, 7, 8 }; + } + InitializeButtons(buttonIndices); + + // 初始化按钮灯状态 + foreach (var index in buttonIndices) + { + ButtonLightStates[index] = ButtonLightState.Off; + } + + // 尝试连接 Modbus TCP 客户端 + try + { + _modbusClient = new ModbusRtu(); + _modbusClient.StartTcpRtu(Ip, Port); + UpdateState(ButtonBoxState.Online); + } + catch (Exception connectEx) + { + // 初次连接失败,但不阻止启动读取循环,循环中会持续重连 + UpdateState(ButtonBoxState.Connecting); + Diagnosis.Log($"AzowieButtonBox[{Index}] 初次连接失败,将在后台持续重连: {ExceptionFormatter.FormatEx(connectEx)}", "AzowieButtonBox", true); + } + + // 启动定时读取任务(即使连接失败也会启动,循环中会持续重连) + _cancellationTokenSource = new CancellationTokenSource(); + _readTask = Task.Run(() => ReadButtonStatesLoop(_cancellationTokenSource.Token)); + + _isStarted = true; + } + catch (Exception ex) + { + UpdateState(ButtonBoxState.Error, $"初始化失败: {ex.Message}"); + _isStarted = false; + Diagnosis.Log($"AzowieButtonBox[{Index}] 初始化失败: {ExceptionFormatter.FormatEx(ex)}", "AzowieButtonBox", true); + } + } + } + + /// + /// 断开连接 + /// + public override void Disconnect() + { + lock (_syncLock) + { + if (!_isStarted || _modbusClient == null) + { + return; + } + + try + { + // 停止读取任务 + _cancellationTokenSource?.Cancel(); + _readTask?.Wait(1000); + + // 关闭 Modbus 连接 + _modbusClient?.Close(); + _modbusClient = null; + + _isStarted = false; + UpdateState(ButtonBoxState.Offline); + } + catch (Exception ex) + { + UpdateState(ButtonBoxState.Error, $"断开连接失败: {ex.Message}"); + Diagnosis.Log($"AzowieButtonBox[{Index}] 断开连接失败: {ExceptionFormatter.FormatEx(ex)}", "AzowieButtonBox", true); + } + } + } + + /// + /// 定时读取按钮状态循环 + /// + private void ReadButtonStatesLoop(CancellationToken cancellationToken) + { + while (!cancellationToken.IsCancellationRequested) + { + try + { + if (!_isStarted) + { + break; + } + + // 检查连接状态,如果未连接或连接断开,尝试重连 + bool isConnected = _modbusClient?.modbusRtu?.Connected ?? false; + if (_modbusClient == null || !isConnected) + { + UpdateState(ButtonBoxState.Connecting); + + // 控制重连频率,避免过于频繁的重连导致资源浪费 + var timeSinceLastReconnect = (DateTime.Now - _lastReconnectAttempt).TotalMilliseconds; + if (timeSinceLastReconnect >= ReconnectInterval) + { + _lastReconnectAttempt = DateTime.Now; + TryReconnect(); + } + + // 如果重连后仍然未连接,等待后继续下一次循环 + isConnected = _modbusClient?.modbusRtu?.Connected ?? false; + if (_modbusClient == null || !isConnected) + { + Thread.Sleep(ReadInterval); + continue; + } + } + + // 读取按钮状态(寄存器 01-04 对应按钮1-4,21-24 对应按钮5-8) + ReadButtonStates(); + + // 读取设备信息(每5秒读取一次) + //if (DateTime.Now.Second % 5 == 0) + //{ + // ReadDeviceInfo(); + //} + + // 更新在线状态 + UpdateState(ButtonBoxState.Online); + } + catch (Exception ex) + { + Diagnosis.Log($"AzowieButtonBox[{Index}] 读取状态失败: {ExceptionFormatter.FormatEx(ex)}", "AzowieButtonBox", true); + UpdateState(ButtonBoxState.Error, $"读取状态失败: {ex.Message}"); + + // 如果连接失败,尝试重连 + TryReconnect(); + } + + // 等待指定间隔 + Thread.Sleep(ReadInterval); + } + } + + /// + /// 尝试重连 Modbus TCP 连接 + /// + private void TryReconnect() + { + ModbusRtu oldClient = null; + try + { + // 安全关闭旧连接 + if (_modbusClient != null) + { + oldClient = _modbusClient; + _modbusClient = null; // 先置空,避免并发访问 + + try + { + oldClient.Close(); + } + catch + { + // 忽略关闭时的异常,继续创建新连接 + } + finally + { + oldClient = null; // 确保引用释放 + } + } + + // 创建新连接 + _modbusClient = new ModbusRtu(); + _modbusClient.StartTcpRtu(Ip, Port); + + Diagnosis.Log($"AzowieButtonBox[{Index}] 重连成功", "AzowieButtonBox", false); + } + catch (Exception ex) + { + // 重连失败,确保资源释放 + if (_modbusClient != null) + { + try + { + _modbusClient.Close(); + } + catch + { + // 忽略关闭异常 + } + _modbusClient = null; + } + + // 记录日志但不抛出异常,等待下次循环继续尝试 + Diagnosis.Log($"AzowieButtonBox[{Index}] 重连失败: {ExceptionFormatter.FormatEx(ex)}", "AzowieButtonBox", false); + } + } + + /// + /// 读取按钮状态 + /// 根据配置的按钮数量和编号读取对应的寄存器 + /// + private void ReadButtonStates() + { + try + { + // 获取配置的按钮索引列表 + var configuredButtons = ButtonConfigs.Keys.OrderBy(k => k).ToList(); + if (configuredButtons.Count == 0) + { + // 如果没有配置,默认读取按钮1-8 + configuredButtons = new List { 1, 2, 3, 4, 5, 6, 7, 8 }; + } + + // 将按钮分为两组:按钮1-4(寄存器01-04)和按钮5-8(寄存器21-24) + var buttons1_4 = configuredButtons.Where(b => b >= 1 && b <= 4).OrderBy(b => b).ToList(); + var buttons5_8 = configuredButtons.Where(b => b >= 5 && b <= 8).OrderBy(b => b).ToList(); + + // 读取按钮1-4的状态(寄存器地址 01-04) + // 按钮索引直接对应寄存器地址:按钮1->寄存器01,按钮2->寄存器02,按钮3->寄存器03,按钮4->寄存器04 + if (buttons1_4.Count > 0) + { + // 计算需要读取的寄存器范围(从最小按钮索引到最大按钮索引) + var minButton = buttons1_4.Min(); + var maxButton = buttons1_4.Max(); + var startReg = (ushort)minButton; // 按钮索引直接对应寄存器地址 + var count = maxButton - minButton + 1; + + var buttonStates1_4 = _modbusClient.ReadRegisterBuffer_03(SlaveAddress, startReg, (ushort)count); + + // 将读取结果映射到对应的按钮索引 + foreach (var buttonIndex in buttons1_4) + { + // 计算该按钮在读取结果数组中的位置 + var arrayIndex = buttonIndex - minButton; + if (arrayIndex >= 0 && arrayIndex < buttonStates1_4.Length) + { + var state = buttonStates1_4[arrayIndex]; + UpdateButtonState(buttonIndex, state == 1 ? ButtonState.Pressed : ButtonState.Released); + } + } + } + + // 读取按钮5-8的状态(寄存器地址 21-24) + // 按钮索引对应寄存器地址:按钮5->寄存器21,按钮6->寄存器22,按钮7->寄存器23,按钮8->寄存器24 + // 寄存器地址 = 20 + 按钮索引 + if (buttons5_8.Count > 0) + { + var minButton = buttons5_8.Min(); + var maxButton = buttons5_8.Max(); + var startReg = (ushort)(20 + minButton); // 按钮5对应寄存器21 + var count = maxButton - minButton + 1; + + var buttonStates5_8 = _modbusClient.ReadRegisterBuffer_03(SlaveAddress, startReg, (ushort)count); + + // 将读取结果映射到对应的按钮索引 + foreach (var buttonIndex in buttons5_8) + { + // 计算该按钮在读取结果数组中的位置 + var arrayIndex = buttonIndex - minButton; + if (arrayIndex >= 0 && arrayIndex < buttonStates5_8.Length) + { + var state = buttonStates5_8[arrayIndex]; + UpdateButtonState(buttonIndex, state == 1 ? ButtonState.Pressed : ButtonState.Released); + } + } + } + } + catch (Exception ex) + { + throw new Exception($"读取按钮状态失败: {ex.Message}", ex); + } + } + + /// + /// 更新按钮配置信息 + /// 当配置变化时,同步更新按钮状态和按钮灯状态字典 + /// + /// 按钮配置列表 + public override void UpdateButtonConfigs(List buttonConfigs) + { + lock (_syncLock) + { + // 保存旧的按钮索引列表 + var oldButtonIndices = new HashSet(ButtonConfigs.Keys); + + // 调用基类方法更新配置 + base.UpdateButtonConfigs(buttonConfigs); + + // 获取新的按钮索引列表 + var newButtonIndices = new HashSet(ButtonConfigs.Keys); + + // 如果配置发生变化,更新按钮状态和按钮灯状态字典 + if (!oldButtonIndices.SetEquals(newButtonIndices)) + { + // 移除已删除的按钮状态 + var toRemove = oldButtonIndices.Where(k => !newButtonIndices.Contains(k)).ToList(); + foreach (var index in toRemove) + { + ButtonStates.Remove(index); + ButtonLightStates.Remove(index); + } + + // 添加新按钮的状态(初始化为未按下和常灭) + var toAdd = newButtonIndices.Where(k => !oldButtonIndices.Contains(k)).ToList(); + foreach (var index in toAdd) + { + if (!ButtonStates.ContainsKey(index)) + { + ButtonStates[index] = ButtonState.Released; + } + if (!ButtonLightStates.ContainsKey(index)) + { + ButtonLightStates[index] = ButtonLightState.Off; + } + } + + // 如果没有配置,默认初始化按钮1-8 + if (newButtonIndices.Count == 0) + { + var defaultButtons = new List { 1, 2, 3, 4, 5, 6, 7, 8 }; + InitializeButtons(defaultButtons); + foreach (var index in defaultButtons) + { + if (!ButtonLightStates.ContainsKey(index)) + { + ButtonLightStates[index] = ButtonLightState.Off; + } + } + } + + Diagnosis.Log($"AzowieButtonBox[{Index}] 按钮配置已更新: 旧配置{oldButtonIndices.Count}个按钮, 新配置{newButtonIndices.Count}个按钮", "AzowieButtonBox", false); + } + } + } + + /// + /// 清零指定按钮的寄存器状态 + /// + /// 按钮索引(1-8) + public override void ClearButtonRegister(int buttonIndex) + { + lock (_syncLock) + { + if (!_isStarted) + { + return; + } + + if (buttonIndex < 1 || buttonIndex > 8) + { + Diagnosis.Log($"AzowieButtonBox[{Index}] 按钮索引超出范围: {buttonIndex}", "AzowieButtonBox", true); + return; + } + + try + { + // 检查连接状态,如果未连接则尝试重连 + bool isConnected = _modbusClient?.modbusRtu?.Connected ?? false; + if (!isConnected) + { + // 尝试重连 + TryReconnect(); + isConnected = _modbusClient?.modbusRtu?.Connected ?? false; + + // 如果重连失败,记录日志并返回 + if (!isConnected) + { + Diagnosis.Log($"AzowieButtonBox[{Index}] 清零按钮{buttonIndex}寄存器失败: 连接未建立", "AzowieButtonBox", true); + return; + } + } + + // 根据按钮索引确定寄存器地址 + // 按钮1-4对应寄存器01-04,按钮5-8对应寄存器21-24 + ushort buttonRegisterAddress; + if (buttonIndex >= 1 && buttonIndex <= 4) + { + buttonRegisterAddress = (ushort)buttonIndex; // 按钮索引直接对应寄存器地址 + } + else + { + buttonRegisterAddress = (ushort)(20 + buttonIndex); // 按钮5-8对应寄存器21-24 + } + + // 清零按钮状态寄存器 + _modbusClient.WriteSingleRegister_06(SlaveAddress, buttonRegisterAddress, 0); + + // 清零对应的按钮灯状态寄存器 + // 按钮灯1-4对应寄存器05-08(按钮索引 + 4),按钮灯5-8对应寄存器25-28(按钮索引 + 20) + ushort lightRegisterAddress; + if (buttonIndex is >= 1 and <= 4) + { + lightRegisterAddress = (ushort)(4 + buttonIndex); // 按钮灯寄存器 = 按钮索引 + 4 + } + else + { + lightRegisterAddress = (ushort)(20 + buttonIndex); // 按钮灯寄存器 = 按钮索引 + 20 + } + + _modbusClient.WriteSingleRegister_06(SlaveAddress, lightRegisterAddress, 0); + + // 更新本地按钮灯状态 + if (ButtonLightStates.ContainsKey(buttonIndex)) + { + ButtonLightStates[buttonIndex] = ButtonLightState.Off; + } + + Diagnosis.Log($"AzowieButtonBox[{Index}] 清零按钮{buttonIndex}状态和灯光寄存器成功", "AzowieButtonBox", false); + } + catch (Exception ex) + { + Diagnosis.Log($"AzowieButtonBox[{Index}] 清零按钮{buttonIndex}寄存器失败: {ExceptionFormatter.FormatEx(ex)}", "AzowieButtonBox", true); + + // 如果是因为连接问题导致的异常,尝试重连 + bool isConnected = _modbusClient?.modbusRtu?.Connected ?? false; + if (!isConnected) + { + TryReconnect(); + } + } + } + } + + /// + /// 析构函数,确保资源释放 + /// + ~AzowieButtonBox() + { + Disconnect(); + } + } +} diff --git a/StandardScene.Devices/ButtonBox/LeegButtonBox.cs b/StandardScene.Devices/ButtonBox/LeegButtonBox.cs new file mode 100644 index 0000000..f62cee9 --- /dev/null +++ b/StandardScene.Devices/ButtonBox/LeegButtonBox.cs @@ -0,0 +1,225 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using leegiot; +using SimpleCore; +using SimpleCore.Library; + +namespace StandardScene.ExtendDevice.ButtonBox +{ + public class LeegButtonBox : BasicButtonBox + { + /// + /// LeegKey设备实例 + /// + private LeegKeyDevice _device; + + /// + /// 同步锁 + /// + private readonly object _syncLock = new object(); + + /// + /// 是否已启动 + /// + private bool _isStarted = false; + + /// + /// 连接按钮盒 + /// + public override void Connect() + { + lock (_syncLock) + { + if (_isStarted) + { + return; + } + + try + { + UpdateState(ButtonBoxState.Connecting); + + // 创建LeegKey设备实例 + _device = new LeegKeyDevice(Ip, Port); + + // 设置事件回调,使用Index作为userData + _device.setEventCallback(OnLeegKeyEvent, Index); + _device.autoHeartbeatEnable(2,5); + // 启动设备 + _device.start(true); + + _isStarted = true; + UpdateState(ButtonBoxState.Online); + } + catch (Exception ex) + { + UpdateState(ButtonBoxState.Error, $"连接失败: {ex.Message}"); + _isStarted = false; + } + } + } + + /// + /// 断开连接 + /// + public override void Disconnect() + { + lock (_syncLock) + { + if (!_isStarted || _device == null) + { + return; + } + + try + { + _device.stop(); + _device = null; + _isStarted = false; + UpdateState(ButtonBoxState.Offline); + } + catch (Exception ex) + { + UpdateState(ButtonBoxState.Error, $"断开连接失败: {ex.Message}"); + } + } + } + + /// + /// LeegKey事件回调 + /// + private void OnLeegKeyEvent(LeegKeyEvent evt, object msg, object userData) + { + try + { + switch (evt) + { + case LeegKeyEvent.KEY_HIT: + HandleKeyHit((LeegKeyMsgKey)msg); + break; + + case LeegKeyEvent.STATUS_REP: + HandleStatusReport((LeegKeyMsgStatus)msg); + break; + + case LeegKeyEvent.TIME: + // 时间同步事件,可以用于保持连接状态 + UpdateState(ButtonBoxState.Online); + break; + + case LeegKeyEvent.LOG: + // 日志事件,可以用于调试 + HandleLogEvent((LeegKeyMsgLog)msg); + break; + + default: + break; + } + } + catch (Exception ex) + { + UpdateState(ButtonBoxState.Error, $"处理事件失败: {ex.Message}"); + } + } + + /// + /// 处理按键按下事件 + /// + private void HandleKeyHit(LeegKeyMsgKey msg) + { + var keyTag= msg.content.keys[0].First(); + var buttonIndexStr = keyTag.Key.Substring(3); + if(!int.TryParse(buttonIndexStr,out var buttonIndex)) + return; + switch (keyTag.Value) + { + case "up": + UpdateButtonState(buttonIndex,ButtonState.Released); + break; + case "down": + UpdateButtonState(buttonIndex,ButtonState.Pressed); + break; + } + } + + /// + /// 处理状态报告事件 + /// + private void HandleStatusReport(LeegKeyMsgStatus msg) + { + // 状态报告表示设备在线 + UpdateState(ButtonBoxState.Online); + } + + /// + /// 处理日志事件 + /// + private void HandleLogEvent(LeegKeyMsgLog msg) + { + // 可以根据日志内容更新状态 + // 这里可以根据实际需求实现 + } + + + /// + /// 设置按钮灯光 + /// + /// 按钮索引 + /// RGB颜色值 + public void SetButtonLight(int buttonIndex, Rgb rgb) + { + lock (_syncLock) + { + if (!_isStarted || _device == null) + { + return; + } + + try + { + _device.lightSet(rgb, buttonIndex); + } + catch (Exception ex) + { + Diagnosis.Log($"设置按钮灯光失败: {ExceptionFormatter.FormatEx(ex)}", "LeegButtonBox", true); + } + } + } + + /// + /// 控制IO输出 + /// + /// IO控制内容 + public void ControlIO(IoctrlContent content) + { + lock (_syncLock) + { + if (!_isStarted || _device == null) + { + return; + } + + try + { + _device.ioctrl(content); + } + catch (Exception ex) + { + Diagnosis.Log($"控制IO失败: {ExceptionFormatter.FormatEx(ex)}", "LeegButtonBox", true); + } + } + } + + /// + /// 析构函数,确保资源释放 + /// + ~LeegButtonBox() + { + Disconnect(); + } + } +} diff --git a/StandardScene.Devices/Charge/FLChargeStation.cs b/StandardScene.Devices/Charge/FLChargeStation.cs new file mode 100644 index 0000000..111924d --- /dev/null +++ b/StandardScene.Devices/Charge/FLChargeStation.cs @@ -0,0 +1,405 @@ +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using SimpleCore.Library; +using SimpleCore.PropType; +using StandardScene.Charge; +using StandardScene.TCP; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StandardScene.ChargeStationType +{ + public class FLChargeStation : AbstractChargeStation + { + private AsyncTcpClient Client; + private IPEndPoint _endPoint; + + // 重连相关 + private Timer _reconnectTimer; + private bool _isManualDisconnect = false; // 标识是否为手动断开 + private int _reconnectAttempts = 0; // 重连尝试次数 + private const int MAX_RECONNECT_ATTEMPTS = 5; // 最大重连次数 + private const int RECONNECT_INTERVAL_MS = 3000; // 重连间隔(毫秒) + private readonly object _connectionLock = new object(); // 连接锁 + private bool _isConnecting = false; // 是否正在连接中 + + // 连接状态 + public bool IsConnected { get; private set; } = false; + public DateTime? LastConnectedTime { get; private set; } + public DateTime? LastDisconnectedTime { get; private set; } + + /// + /// 关闭当前TCP连接 + /// + public override void CloseCommunication() + { + lock (_connectionLock) + { + _isManualDisconnect = true; // 标记为手动断开,不触发自动重连 + + // 停止重连定时器 + if (_reconnectTimer != null) + { + _reconnectTimer.Dispose(); + _reconnectTimer = null; + } + _isConnecting = false; + if (Client != null) + { + try + { + // 取消订阅事件,避免内存泄漏 + Client.PlaintextReceived -= OnPlaintextReceived; + Client.ServerConnected -= OnServerConnected; + Client.ServerDisconnected -= OnServerDisconnected; + + // 关闭连接 + Client.Close(); + Client = null; + + IsConnected = false; + LastDisconnectedTime = DateTime.Now; + + Diagnosis.Log($"FLChargeStation[{SiteId}] TCP connection closed manually"); + } + catch (Exception ex) + { + Diagnosis.Log($"ERR:FLChargeStation[{SiteId}] failed to close connection: {ex.Message}"); + } + } + } + } + + /// + /// 创建TCP连接 + /// + public override void CreateCommunication(IPAddress ip, int port) + { + lock (_connectionLock) + { + // 先关闭旧连接 + if (Client != null) + { + CloseCommunication(); + } + + _endPoint = new IPEndPoint(ip, port); + _isManualDisconnect = false; // 重置手动断开标记 + _reconnectAttempts = 0; // 重置重连次数 + + ConnectInternal(); + } + } + + /// + /// 内部连接方法 + /// + private void ConnectInternal() + { + if (_isConnecting) + { + Diagnosis.Log($"FLChargeStation[{SiteId}] is already connecting, skip"); + return; + } + + try + { + _isConnecting = true; + + // 创建新的TCP客户端 + Client = new AsyncTcpClient(_endPoint.Address, _endPoint.Port); + Client.PlaintextReceived += OnPlaintextReceived; + Client.ServerConnected += OnServerConnected; + Client.ServerDisconnected += OnServerDisconnected; + + // 连接 + Client.Connect(); + + if (Client.Connected) + { + Diagnosis.Log($"FLChargeStation[{SiteId}] connecting to {_endPoint.Address}:{_endPoint.Port}..."); + } + else + { + _isConnecting = false; + Diagnosis.Log($"FLChargeStation[{SiteId}] connecting to {_endPoint.Address}:{_endPoint.Port}... 未建立连接"); + } + + } + catch (Exception ex) + { + Diagnosis.Log($"ERR:FLChargeStation[{SiteId}] failed to create connection: {ex.Message}"); + _isConnecting = false; + + // 触发重连 + if (!_isManualDisconnect) + { + ScheduleReconnect(); + } + } + } + + /// + /// 手动触发重连 + /// + public void Reconnect() + { + lock (_connectionLock) + { + Diagnosis.Log($"FLChargeStation[{SiteId}] manual reconnect triggered"); + + _isManualDisconnect = false; + _reconnectAttempts = 0; + + // 关闭现有连接 + if (Client != null) + { + try + { + Client.PlaintextReceived -= OnPlaintextReceived; + Client.ServerConnected -= OnServerConnected; + Client.ServerDisconnected -= OnServerDisconnected; + Client.Close(); + Client = null; + } + catch { } + } + + // 重新连接 + ConnectInternal(); + } + } + + /// + /// 安排自动重连 + /// + private void ScheduleReconnect() + { + if (_isManualDisconnect) + { + Diagnosis.Log($"FLChargeStation[{SiteId}] manual disconnect, skip auto reconnect"); + return; + } + + if (_reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) + { + Diagnosis.Log($"ERR:FLChargeStation[{SiteId}] max reconnect attempts ({MAX_RECONNECT_ATTEMPTS}) reached, stop reconnecting"); + return; + } + + _reconnectAttempts++; + + // 停止现有定时器 + if (_reconnectTimer != null) + { + _reconnectTimer.Dispose(); + } + + Diagnosis.Log($"FLChargeStation[{SiteId}] scheduling reconnect attempt {_reconnectAttempts}/{MAX_RECONNECT_ATTEMPTS} in {RECONNECT_INTERVAL_MS}ms"); + + // 创建新的定时器 + _reconnectTimer = new Timer( + callback: _ => AttemptReconnect(), + state: null, + dueTime: RECONNECT_INTERVAL_MS, + period: Timeout.Infinite + ); + } + + /// + /// 尝试重连 + /// + private void AttemptReconnect() + { + lock (_connectionLock) + { + if (_isManualDisconnect || IsConnected) + { + return; + } + + Diagnosis.Log($"FLChargeStation[{SiteId}] attempting to reconnect (attempt {_reconnectAttempts}/{MAX_RECONNECT_ATTEMPTS})..."); + + try + { + // 清理旧客户端 + if (Client != null) + { + try + { + Client.PlaintextReceived -= OnPlaintextReceived; + Client.ServerConnected -= OnServerConnected; + Client.ServerDisconnected -= OnServerDisconnected; + Client.Close(); + } + catch { } + Client = null; + } + + // 重新连接 + ConnectInternal(); + } + catch (Exception ex) + { + Diagnosis.Log($"ERR:FLChargeStation[{SiteId}] reconnect failed: {ex.Message}"); + + // 继续安排下一次重连 + if (!_isManualDisconnect && _reconnectAttempts < MAX_RECONNECT_ATTEMPTS) + { + ScheduleReconnect(); + } + } + } + } + + private void OnPlaintextReceived(object sender, TcpDatagramReceivedEventArgs e) + { + var messageService = CommunicationMessageService.Instance; + var recBytes = e.Datagram.Take(35).ToArray(); + string IP = ((AsyncTcpClient)sender).RemoteIPEndPoint.Address.ToString(); + Diagnosis.Post($"{string.Join(" ", recBytes.Select(p => $"{p:X2}"))}", $"{IP}", true); + IsSafe = recBytes[28] == 2; + messageService.AddReceiveMessage(_endPoint.Address.ToString(), _endPoint.Port, BitConverter.ToString(recBytes).Replace("-", " "), "FRLDTall"); + } + + /// + /// 服务器连接成功事件 + /// + private void OnServerConnected(object sender, TcpServerConnectedEventArgs e) + { + lock (_connectionLock) + { + _isConnecting = false; + IsConnected = true; + LastConnectedTime = DateTime.Now; + _reconnectAttempts = 0; // 重置重连次数 + + Diagnosis.Log($"FLChargeStation[{SiteId}] TCP connected successfully to {_endPoint.Address}:{_endPoint.Port}"); + + // 停止重连定时器 + if (_reconnectTimer != null) + { + _reconnectTimer.Dispose(); + _reconnectTimer = null; + } + } + } + + /// + /// 服务器断开连接事件 + /// + private void OnServerDisconnected(object sender, TcpServerDisconnectedEventArgs e) + { + lock (_connectionLock) + { + _isConnecting = false; + IsConnected = false; + LastDisconnectedTime = DateTime.Now; + + Diagnosis.Log($"WARN:FLChargeStation[{SiteId}] TCP disconnected from {_endPoint.Address}:{_endPoint.Port}"); + } + } + + /// + /// 发送充电指令到充电站 + /// + public override void SendToChargeStation(int isCharge, Car car,Site site) + { + // 检查连接状态 + if (!IsConnected || Client == null) + { + Diagnosis.Log($"WARN:FLChargeStation[{SiteId}] not connected, cannot send charge command"); + return; + } + + try + { + var messageService = CommunicationMessageService.Instance; + float soc = 0f, voltage = 0, electricCurrent = 0; + int carId = 0; + float setVoltage = 55.0f; + float setElectricCurrent = 50.0f; + //Site site = null; + if (car != null) + { + soc = float.Parse(Commons.GetCarStatus(car, "Soc")); + voltage = float.Parse(Commons.GetCarStatus(car, "Voltage")); + electricCurrent = float.Parse(Commons.GetCarStatus(car, "ElectricCurrent")); + carId = car.id; + //site = SimpleLib.GetSite(car.status.holdingLocks.FirstOrDefault()); + + + + } + if (site != null && site.fields.ContainsKey("setVoltage") && site.fields.ContainsKey("setElectricCurrent")) + { + setVoltage = float.Parse(site.fields["setVoltage"]); + setElectricCurrent = float.Parse(site.fields["setElectricCurrent"]); + } + + var msg = GetSendBytes((byte)(isCharge), + setVoltage, setElectricCurrent, 1000, + Convert.ToSingle(carId), Convert.ToSingle(soc), Convert.ToSingle(electricCurrent), Convert.ToSingle(voltage)); + + messageService.AddSendMessage(_endPoint.Address.ToString(), _endPoint.Port, BitConverter.ToString(msg).Replace("-", " "), "FRLDTall", site?.name); + + // 发送数据,带异常处理 + try + { + Client.Send(msg); + Diagnosis.Post($"{string.Join(" ", msg.Select(d => $"{d:X2}"))}", + $"sendChargeSite: {SiteId}", true); + } + catch (ObjectDisposedException) + { + Diagnosis.Log($"ERR:FLChargeStation[{SiteId}] client disposed during send, triggering reconnect"); + IsConnected = false; + } + catch (SocketException ex) + { + Diagnosis.Log($"ERR:FLChargeStation[{SiteId}] socket error during send: {ex.SocketErrorCode}, triggering reconnect"); + IsConnected = false; + } + } + catch (Exception e) + { + Diagnosis.Post($"ERR:FLChargeStation[{SiteId}] SwitchCharge Fail: {ExceptionFormatter.FormatEx(e)}"); + } + } + + private byte[] GetSendBytes(byte startCharge, float chargeVoltage, float chargeElectricCurrent, + float chargeTimeSpan, float carId, + float carSoc, float carElectricCurrent, float carVoltage) + { + var sendByte = new byte[32]; + try + { + //BB 01 42 48 00 00 42 5C 00 00 00 00 00 02 00 5D 41 B4 00 00 41 28 00 00 00 00 00 00 00 00 00 EE + sendByte = new byte[2] { 0xBB, startCharge } + .Concat(BitConverter.GetBytes(chargeElectricCurrent).AsEnumerable().Reverse()) + .Concat(BitConverter.GetBytes(chargeVoltage).AsEnumerable().Reverse()) + .Concat(BitConverter.GetBytes((ushort)chargeTimeSpan).AsEnumerable().Reverse()) + .Concat(BitConverter.GetBytes((ushort)carId).AsEnumerable().Reverse()) + .Concat(BitConverter.GetBytes((ushort)carSoc).AsEnumerable().Reverse()) + .Concat(BitConverter.GetBytes(carElectricCurrent).AsEnumerable().Reverse()) + .Concat(BitConverter.GetBytes(carVoltage).AsEnumerable().Reverse()) + .Concat(new byte[] { 00, 00, 00, 00, 00, 00, 00, 0xEE }).ToArray(); + + } + catch (Exception ex) + { + Diagnosis.Post($"下发充电控制{(startCharge == 1 ? "启动" : "停止")}异常+ex:{ExceptionFormatter.FormatEx(ex)}", "error"); + } + + return sendByte; + } + } +} diff --git a/StandardScene.Devices/Charge/MuXingChargeStation.cs b/StandardScene.Devices/Charge/MuXingChargeStation.cs new file mode 100644 index 0000000..5c3628c --- /dev/null +++ b/StandardScene.Devices/Charge/MuXingChargeStation.cs @@ -0,0 +1,456 @@ +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using SimpleCore.Library; +using SimpleCore.PropType; +using StandardScene.Charge; +using StandardScene.TCP; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Timers; +using System.Windows.Forms; + +namespace StandardScene.ChargeStationType + +{ + public class MuXingChargeStation : AbstractChargeStation + { + public static TcpListener tcpListener; + public static Thread listenerThread; + public static NetworkStream stream; + public static TcpClient client; + //public Dictionary chargeClient = new Dictionary { }; + public System.Timers.Timer _Timer; + public bool reciveHeartBeat; + public bool running; + public byte[] IdBytes = new byte[] { 0x0f, 0x01 }; + private static IPEndPoint _endPoint; + + /// + /// 关闭当前TCP连接 + /// + public override void CloseCommunication() + { + try + { + running = false; + + // 停止定时器 + if (_Timer != null) + { + _Timer.Stop(); + _Timer.Dispose(); + _Timer = null; + } + + // 关闭流 + if (stream != null) + { + stream.Close(); + stream = null; + } + + // 关闭客户端 + if (client != null) + { + client.Close(); + client = null; + } + + // 停止监听器 + if (tcpListener != null) + { + tcpListener.Stop(); + tcpListener = null; + } + + Diagnosis.Log($"MuXingChargeStation[{SiteId}] TCP connection closed"); + } + catch (Exception ex) + { + Diagnosis.Log($"ERR:MuXingChargeStation[{SiteId}] failed to close connection: {ex.Message}"); + } + } + + public override void CreateCommunication(IPAddress ip, int port) + { + // 先关闭旧连接 + CloseCommunication(); + + _endPoint = new IPEndPoint(ip, port); + reciveHeartBeat = false; + running = true; + int n = 0; + DateTime offlineTime = DateTime.Now; + try + { + tcpListener = new TcpListener(ip, port); + tcpListener.Start(); + Diagnosis.Post($"AGV与牧星充电站通信已建立,监听 IP: {ip}, 端口: {port}"); + client = tcpListener.AcceptTcpClient(); + client.SendTimeout = 5000; + client.ReceiveTimeout = 5000; + stream = client.GetStream(); + } + catch (Exception ex) + { + Console.WriteLine($"与充电站通信建立失败: {ExceptionFormatter.FormatEx(ex)}"); + throw; + } + + while (running) + { + try + { + if (client == null) + { + client = tcpListener.AcceptTcpClient(); + client.SendTimeout = 5000; + client.ReceiveTimeout = 5000; + stream = client.GetStream(); + } + + var type = ReceiveMesageType(); + //item1:byte0 帧头 + //item2:byte11 命令字 + //item3:byte12 动作码/故障码/状态码 + //item4:byte5 设备ID 低 + //item5:byte6 设备ID 高 + + //0x10 充电桩登录回复 1次 + if (type.Item1 == 0xAA && type.Item2 == 0x10) + { + var timestampBytes = GetTimeStamp(); + byte[] dataByte = new byte[16] + { + 0, 0x0d, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x10, + 0, 0, + 0x00, 0x00 + }; //长度必须大于10,与帧长度对应 + dataByte = InitSendBytes(dataByte, type, timestampBytes); + byte[] mesSendByte = + CombineDataAndCRC(dataByte, CalculateCRC16(dataByte.Skip(1).ToArray())); //拼接crc(去掉包头) + Diagnosis.Post($"login => {string.Join(" ", mesSendByte.Select(d => $"{d:X2}"))}", + $"充电桩登录回复"); + SendMessage(mesSendByte); + } + //0x12 充电桩对接完成回复 1次 + else if (type.Item1 == 0xAA && type.Item2 == 0x12) + { + var timestampBytes = GetTimeStamp(); + byte[] dataByte = new byte[12] + { + 0, 0x09, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x12 + }; + ; + dataByte = InitSendBytes(dataByte, type, timestampBytes); + byte[] sendByte = + CombineDataAndCRC(dataByte, CalculateCRC16(dataByte.Skip(1).ToArray())); //拼接crc(去掉包头) + Diagnosis.Post($"docking => {string.Join(" ", sendByte.Select(d => $"{d:X2}"))}", + $"充电桩对接完成回复"); + SendMessage(sendByte); + } + //0x13 故障上报回复 + else if (type.Item1 == 0xAA && type.Item2 == 0x13) + { + var timestampBytes = GetTimeStamp(); + byte[] dataByte = new byte[13] + { + 0, 0x0A, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x13, + type.Item3 + }; + dataByte = InitSendBytes(dataByte, type, timestampBytes); + byte[] sendByte = + CombineDataAndCRC(dataByte, CalculateCRC16(dataByte.Skip(1).ToArray())); //拼接crc(去掉包头) + Diagnosis.Post($"Error => {string.Join(" ", sendByte.Select(d => $"{d:X2}"))}", + $"故障上报回复"); + SendMessage(sendByte); + } + + //收到至少1次充电桩心跳包上传 + if (type.Item1 == 0xAA && type.Item2 == 0xF0 && !reciveHeartBeat) + { + Diagnosis.Post($"收到充电桩心跳包上传", $"HeartBeatRecive"); + reciveHeartBeat = true; + StartSendingHeartBeat(); + } + + //异常情况处理 + //故障上报 故障码不为0 16 17 1 + if (type.Item1 == 0xAA && type.Item2 == 0x13 && + (type.Item3 != 0 && type.Item3 != 16 && type.Item3 != 17 && type.Item3 != 1)) + { + //充电桩掉线 + if ((type.Item3 & (1 << 3)) != 0 && reciveHeartBeat) + { + if (n == 0) offlineTime = DateTime.Now; + //充电桩掉线时间大于60s 重启WiFi模块 + if ((DateTime.Now - offlineTime).TotalSeconds > 60) + { + var timestampBytes = GetTimeStamp(); + //下发 命令码指令 + byte[] dataByte = new byte[17] + { + 0, 0x0E, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x15, + 0x04, //重启WiFi模块 + 0x00, 0x00, 0x00, 0x00 + }; + dataByte = InitSendBytes(dataByte, type, timestampBytes); + byte[] sendChargeByte = + CombineDataAndCRC(dataByte, CalculateCRC16(dataByte.Skip(1).ToArray())); + Diagnosis.Post( + $"Restart => {string.Join(" ", sendChargeByte.Select(d => $"{d:X2}"))}", + $"重启WiFi模块"); + SendMessage(sendChargeByte); + n = 0; + offlineTime = DateTime.Now; + } + + n++; + } + else + { + n = 0; + offlineTime = DateTime.Now; + } + } + + //if (!client.Connected) + //{ + // Console.WriteLine("客户端断开连接,退出循环"); + // running = false; + //} + + } + catch (Exception ex) + { + Console.WriteLine($"充电桩通信异常:{ExceptionFormatter.FormatEx(ex)}"); + running = false; + client.Close(); + tcpListener.Stop(); + stream.Close(); + } + + } + } + + public override void SendToChargeStation(int isCharge, Car car,Site site) + { + var messageService = CommunicationMessageService.Instance; + float setVoltage = 55.0f; + float setElectricCurrent = 50.0f; + float voltage = 430; + // Site site = null; + if (car != null) + { + // site = SimpleLib.GetSite(car.status.holdingLocks.FirstOrDefault()); + + + int carId = 0; + if (car != null && car.GetType() != typeof(DummyCar)) + { + voltage = float.Parse(Commons.GetCarStatus(car, "Voltage")) * 10; + voltage = voltage > 430 ? voltage : 430; + carId = car.id; + } + } + if (site != null && site.fields.ContainsKey("setVoltage") && site.fields.ContainsKey("setElectricCurrent")) + { + setVoltage = float.Parse(site.fields["setVoltage"]); + setElectricCurrent = float.Parse(site.fields["setElectricCurrent"]); + } + + var byte1 = BitConverter.GetBytes(voltage); + var type = ReceiveMesageType(); + var openChargePort = isCharge == 1 ? 2 : 3; + //下发打开充电口指令 + var timestampBytes = GetTimeStamp(); + byte[] dataByte = new byte[18] + { + 0, 0x0F, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x11, + (byte)openChargePort,//开始充电/结束充电 + byte1[0], byte1[1], + 0xc8, 0x00,//下发最大充电电流 + 0x02//电池种类 + }; + dataByte = InitSendBytes(dataByte, type, timestampBytes); + byte[] openCharge = + CombineDataAndCRC(dataByte, CalculateCRC16(dataByte.Skip(1).ToArray())); + if (client.Connected) + { + stream.WriteAsync(openCharge, 0, openCharge.Length); + stream.FlushAsync(); + } + messageService.AddSendMessage(_endPoint.Address.ToString(), _endPoint.Port, BitConverter.ToString(openCharge).Replace("-", " "), site?.name, "MuXing"); + Diagnosis.Post($"openCharge => {string.Join(" ", openCharge.Select(d => $"{d:X2}"))}", + $"下发开始充电"); + + } + + public void StartSendingHeartBeat() + { + if (client == null) + { + Console.WriteLine("客户端为null,无法启动心跳包定时器"); + return; + } + _Timer = new System.Timers.Timer(2000); + _Timer.Elapsed += SendHeartBeat; + _Timer.AutoReset = true; // 反复执行 + _Timer.Enabled = true; + + } + + private void SendHeartBeat(Object item, ElapsedEventArgs e) + { + var timestampBytes = GetTimeStamp(); + var type = ReceiveMesageType(); + //下发心跳包报文 + var rcs = new byte[] + { + 0xBB, 0x09, 0x00, 0x03, 0x00, + IdBytes[0], IdBytes[1], + timestampBytes[0], timestampBytes[1], timestampBytes[2], timestampBytes[3], + 0xF0 + }; + byte[] mesSendByte = CombineDataAndCRC(rcs, CalculateCRC16(rcs.Skip(1).ToArray())); + // 日志记录 + Diagnosis.Post($"heartBeat => {string.Join(" ", mesSendByte.Select(d => $"{d:X2}"))}", $"下发心跳包"); + // 发送心跳包 + SendMessage(mesSendByte); + } + + private byte[] GetTimeStamp() + { + // 获取当前时间戳(秒级别) + int timestamp = (int)DateTimeOffset.UtcNow.ToUnixTimeSeconds(); + //将时间戳转换为字节数组,低字节在前 + byte[] timestampBytes = BitConverter.GetBytes(timestamp); + return timestampBytes; + } + + private static Tuple ReceiveMesageType() + { + byte[] message = new byte[1024]; + int bytesRead = 0; + try + { + if (client != null && client.Connected && stream != null && stream.CanRead && client.Available > 0) + { + bytesRead = stream.Read(message, 0, 1024); + } + } + catch (Exception ex) + { + client = null; + stream = null; + Console.WriteLine($"Error reading message: {ex.Message}"); + } + + //message长度判断:至少需要 13 字节才能安全访问 message[12] + if (bytesRead >= 13) + { + + string receivedMessage = BitConverter.ToString(message, 0, bytesRead); + Diagnosis.Post($"Received <= {string.Join(" ", message.Take(bytesRead).ToArray().Select(d => $"{d:X2}"))}", "读取报文"); + Diagnosis.Post($"item1:{message[0]:x2},item2:{message[11]:x2},item3:{message[12]:x2},item4:{message[5]:x2},item5:{message[6]:x2},", "Tuple.Item"); + var messageService = CommunicationMessageService.Instance; + messageService.AddReceiveMessage(_endPoint.Address.ToString(), _endPoint.Port, string.Join(",", message), "MuXing"); + return Tuple.Create(message[0], message[11], message[12], message[5], message[6]); + } + return new Tuple(0, 0, 0, 0, 0); + } + + public static byte[] CombineDataAndCRC(byte[] data, byte[] crc) + { + //byte[] crcBytes = BitConverter.GetBytes(crc); + // 合并数据和CRC + byte[] combined = new byte[data.Length + crc.Length]; + Array.Copy(data, combined, data.Length); + Array.Copy(crc, 0, combined, data.Length, crc.Length); + + return combined; + } + + private static byte[] CalculateCRC16(byte[] data) + { + byte b = byte.MaxValue; + byte b2 = byte.MaxValue; + byte b3 = 1; + byte b4 = 160; + for (int i = 0; i < data.Length; i++) + { + b = (byte)(b ^ data[i]); + for (int j = 0; j <= 7; j++) + { + byte b5 = b2; + byte b6 = b; + b2 = (byte)(b2 >> 1); + b = (byte)(b >> 1); + if ((b5 & 1) == 1) + { + b = (byte)(b | 0x80u); + } + if ((b6 & 1) == 1) + { + b2 = (byte)(b2 ^ b4); + b = (byte)(b ^ b3); + } + } + } + return new byte[2] + { + b,b2 + }; + } + + private void SendMessage(byte[] message) + { + try + { + if (client != null && stream != null) + { + stream.Write(message, 0, message.Length); + stream.Flush(); + } + } + catch (Exception ex) + { + client = null; + Console.WriteLine($"Error sending message: {ExceptionFormatter.FormatEx(ex)}"); + } + } + + private byte[] InitSendBytes(byte[] sendBytes, Tuple type, byte[] timestampBytes) + { + sendBytes[0] = 0xBB; //帧头 + sendBytes[2] = 0x00; //帧长 高 + sendBytes[3] = 0x03; //设备类型 低 + sendBytes[4] = 0x00; //设备类型 高 + sendBytes[5] = IdBytes[0]; //设备ID 低 + sendBytes[6] = IdBytes[1]; //设备ID 高 + sendBytes[7] = timestampBytes[0]; //时间戳 低 + sendBytes[8] = timestampBytes[1]; + sendBytes[9] = timestampBytes[2]; + sendBytes[10] = timestampBytes[3]; //时间戳 高 + return sendBytes; + } + } +} diff --git a/StandardScene.Devices/Charge/PCBChargeStation.cs b/StandardScene.Devices/Charge/PCBChargeStation.cs new file mode 100644 index 0000000..525db2b --- /dev/null +++ b/StandardScene.Devices/Charge/PCBChargeStation.cs @@ -0,0 +1,147 @@ +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using SimpleCore.Library; +using SimpleCore.PropType; +using StandardScene.Charge; +using System; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using static SimpleCore.Traffic.TrafficControl; + +namespace StandardScene.ChargeStationType +{ + public class PCBChargeStation : AbstractChargeStation + { + private int _index = 0; + + public int IndexReceive; + private IPEndPoint _endPoint; + + public override void OnUdpMessage(byte[] message) + { + if (message != null && message.Length > 1) + IndexReceive = message[1]; + } + + public override void CreateCommunication(IPAddress ip, int port) + { + _endPoint = new IPEndPoint(ip, port); + } + public override void SendToChargeStation(int isCharge, Car car,Site site) + { + var messageService = CommunicationMessageService.Instance; + using (UdpClient udpClient = new UdpClient()) + { + //float soc = 0f, voltage = 0, electricCurrent = 0, chargeTimeSpan = 30f; + + float setVoltage = 29.2f; + float setElectricCurrent = 40.0f; + float soc = 0f, voltage = 0, electricCurrent = 0, chargeTimeSpan = 30f; + int carId = 0; + //Site site = null; + if (car != null) + { + carId = car.id; + soc = (float)Commons.CarValue(car, "Soc"); + voltage = (float)Commons.CarValue(car, "Voltage"); + electricCurrent = (float)Commons.CarValue(car, "ElectricCurrent"); + //site = SimpleLib.GetSite(car.status.holdingLocks.FirstOrDefault()); + + } + if (site != null && site.fields.ContainsKey("setVoltage") && site.fields.ContainsKey("setElectricCurrent")) + { + setVoltage = float.Parse(site.fields["setVoltage"]); + setElectricCurrent = float.Parse(site.fields["setElectricCurrent"]); + } + + + + var msg = GetSendBytes((byte)isCharge, setVoltage, setElectricCurrent, chargeTimeSpan, + carId, soc, electricCurrent, voltage); + messageService.AddSendMessage(_endPoint.Address.ToString(), _endPoint.Port, BitConverter.ToString(msg).Replace("-", " "), "FRLDShort", site?.name); + Diagnosis.Log($"ChargeStation ADD:[{BitConverter.ToString(msg).Replace("-", " ")}]", "UDP发送报文信息", true); + udpClient.SendAsync(msg, msg.Length, _endPoint); + Thread.Sleep(100); + } + } + + private byte[] GetSendBytes(byte startCharge, float chargeVoltage, float chargeElectricCurrent, float chargeTimeSpan, int carId, float carSoc, float carElectricCurrent, float carVoltage) + { + var sendBytes = new byte[32]; + var indexNo = (byte)GetIndexNo(); + try + { + sendBytes = new byte[3] { 0xBB, indexNo, startCharge } + .Concat(BitConverter.GetBytes((int)chargeElectricCurrent * 10).AsEnumerable().Reverse()) + .Concat(BitConverter.GetBytes((int)chargeVoltage * 10).AsEnumerable().Reverse()) + .Concat(BitConverter.GetBytes((ushort)chargeTimeSpan).AsEnumerable().Reverse()) + .Concat(BitConverter.GetBytes((ushort)carId).AsEnumerable().Reverse()) + .Concat([(byte)carSoc]) + .Concat(BitConverter.GetBytes((int)(carElectricCurrent * 10)).AsEnumerable().Reverse()) + .Concat(BitConverter.GetBytes((int)(carVoltage * 10)).AsEnumerable().Reverse()) + .Concat(new byte[] { 00, 00, 00, 00, 00, 00, 00, 0xEE }).ToArray(); + var crcCode = GetCRC(sendBytes.Skip(1).Take(28).ToArray()).AsEnumerable().Reverse().ToArray(); + sendBytes[29] = crcCode[0]; + sendBytes[30] = crcCode[1]; + } + catch (Exception ex) + { + Diagnosis.Log($"充电报文组包异常 ex => {ex.Message}", "充电", true); + } + return sendBytes; + } + private byte[] GetCRC(byte[] data) + { + byte b = byte.MaxValue; + byte b2 = byte.MaxValue; + byte b3 = 1; + byte b4 = 160; + for (int i = 0; i < data.Length; i++) + { + b = (byte)(b ^ data[i]); + for (int j = 0; j <= 7; j++) + { + byte b5 = b2; + byte b6 = b; + b2 = (byte)(b2 >> 1); + b = (byte)(b >> 1); + if ((b5 & 1) == 1) + { + b = (byte)(b | 0x80u); + } + if ((b6 & 1) == 1) + { + b2 = (byte)(b2 ^ b4); + b = (byte)(b ^ b3); + } + } + } + return new byte[2] + { + b,b2 + }; + } + + private int GetIndexNo() + { + if (_index < 255) + { + _index = _index + 1; + } + else + { + _index = 0; + } + return _index; + } + } + +} diff --git a/StandardScene.Devices/Door/ModbusDoorController.cs b/StandardScene.Devices/Door/ModbusDoorController.cs new file mode 100644 index 0000000..5f6d387 --- /dev/null +++ b/StandardScene.Devices/Door/ModbusDoorController.cs @@ -0,0 +1,412 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using StandardScene.Utils; +using SimpleCore.Library; + +namespace StandardScene.ExtendDevice.Door +{ + /// + /// Modbus 门控制器实现 + /// + [DoorType("ModbusDoorController")] + public class ModbusDoorController : BasicDoorController + { + /// + /// Modbus TCP 客户端 + /// + private ModbusRtu _modbusClient; + + /// + /// 同步锁 + /// + private readonly object _syncLock = new object(); + + /// + /// 是否已启动 + /// + private bool _isStarted = false; + + /// + /// 最近一次已下发的门控制状态,键为门索引 + /// + private readonly Dictionary _lastSentControl = new Dictionary(); + + /// + /// 定时读取任务取消令牌 + /// + private CancellationTokenSource _cancellationTokenSource; + + /// + /// 定时读取任务 + /// + private Task _readTask; + + /// + /// 读取间隔(毫秒),默认1000ms + /// + public int ReadInterval { get; set; } = 1000; + + /// + /// 重连间隔(毫秒),默认3000ms + /// + public int ReconnectInterval { get; set; } = 3000; + + /// + /// 上次重连尝试时间 + /// + private DateTime _lastReconnectAttempt = DateTime.MinValue; + + /// + /// Modbus 从站地址,默认1 + /// + public byte SlaveAddress { get; set; } = 1; + + /// + /// 设置门的目标控制状态(线程安全实现) + /// 仅修改内存字段,不直接进行通信,实际通信在内部线程中完成 + /// + /// 门索引 + /// true=打开,false=关闭 + public override void SetDoorControlTarget(int doorIndex, bool open) + { + lock (_syncLock) + { + base.SetDoorControlTarget(doorIndex, open); + } + } + + /// + /// 连接门控制器 + /// + public override void Connect() + { + lock (_syncLock) + { + if (_isStarted) + { + return; + } + + try + { + UpdateState(DoorControllerState.Connecting); + + // 根据配置的门初始化门状态 + var doorIndices = DoorConfigs.Keys.OrderBy(k => k).ToList(); + InitializeDoors(doorIndices); + + // 初始化最近一次已下发的控制状态 + _lastSentControl.Clear(); + foreach (var index in doorIndices) + { + _lastSentControl[index] = false; + if (!DoorControlTargets.ContainsKey(index)) + { + DoorControlTargets[index] = false; + } + } + + // 尝试连接 Modbus TCP 客户端 + try + { + _modbusClient = new ModbusRtu(); + _modbusClient.StartTcpRtu(Ip, Port); + UpdateState(DoorControllerState.Online); + } + catch (Exception connectEx) + { + UpdateState(DoorControllerState.Connecting); + Diagnosis.Log($"ModbusDoorController[{Index}] 初次连接失败,将在后台持续重连: {ExceptionFormatter.FormatEx(connectEx)}", "ModbusDoorController", true); + } + + // 启动定时读取任务 + _cancellationTokenSource = new CancellationTokenSource(); + _readTask = Task.Run(() => ReadDoorStatesLoop(_cancellationTokenSource.Token)); + + _isStarted = true; + } + catch (Exception ex) + { + UpdateState(DoorControllerState.Error, $"初始化失败: {ex.Message}"); + _isStarted = false; + Diagnosis.Log($"ModbusDoorController[{Index}] 初始化失败: {ExceptionFormatter.FormatEx(ex)}", "ModbusDoorController", true); + } + } + } + + /// + /// 断开连接 + /// + public override void Disconnect() + { + lock (_syncLock) + { + if (!_isStarted) + { + return; + } + + try + { + // 停止读取任务 + _cancellationTokenSource?.Cancel(); + _readTask?.Wait(1000); + + // 关闭 Modbus 连接 + _modbusClient?.Close(); + _modbusClient = null; + + _isStarted = false; + UpdateState(DoorControllerState.Offline); + } + catch (Exception ex) + { + UpdateState(DoorControllerState.Error, $"断开连接失败: {ex.Message}"); + Diagnosis.Log($"ModbusDoorController[{Index}] 断开连接失败: {ExceptionFormatter.FormatEx(ex)}", "ModbusDoorController", true); + } + } + } + + /// + /// 定时读取门状态循环 + /// + private void ReadDoorStatesLoop(CancellationToken cancellationToken) + { + while (!cancellationToken.IsCancellationRequested) + { + try + { + if (!_isStarted) + { + break; + } + + // 检查连接状态 + bool isConnected = _modbusClient?.modbusRtu?.Connected ?? false; + if (_modbusClient == null || !isConnected) + { + UpdateState(DoorControllerState.Connecting); + + // 控制重连频率 + var timeSinceLastReconnect = (DateTime.Now - _lastReconnectAttempt).TotalMilliseconds; + if (timeSinceLastReconnect >= ReconnectInterval) + { + _lastReconnectAttempt = DateTime.Now; + TryReconnect(); + } + + isConnected = _modbusClient?.modbusRtu?.Connected ?? false; + if (_modbusClient == null || !isConnected) + { + Thread.Sleep(ReadInterval); + continue; + } + } + + // 读取所有门的状态 + ReadAllDoorStates(); + + // 根据目标控制状态下发控制指令 + ApplyDoorControlTargets(); + + // 更新在线状态 + UpdateState(DoorControllerState.Online); + } + catch (Exception ex) + { + Diagnosis.Log($"ModbusDoorController[{Index}] 读取状态失败: {ExceptionFormatter.FormatEx(ex)}", "ModbusDoorController", true); + UpdateState(DoorControllerState.Error, $"读取状态失败: {ex.Message}"); + + // 如果连接失败,尝试重连 + TryReconnect(); + } + + // 等待指定间隔 + Thread.Sleep(ReadInterval); + } + } + + /// + /// 尝试重连 Modbus TCP 连接 + /// + private void TryReconnect() + { + ModbusRtu oldClient = null; + try + { + // 安全关闭旧连接 + if (_modbusClient != null) + { + oldClient = _modbusClient; + _modbusClient = null; + + try + { + oldClient.Close(); + } + catch + { + // 忽略关闭时的异常 + } + finally + { + oldClient = null; + } + } + + // 创建新连接 + _modbusClient = new ModbusRtu(); + _modbusClient.StartTcpRtu(Ip, Port); + + Diagnosis.Log($"ModbusDoorController[{Index}] 重连成功", "ModbusDoorController", false); + } + catch (Exception ex) + { + // 重连失败,确保资源释放 + if (_modbusClient != null) + { + try + { + _modbusClient.Close(); + } + catch + { + // 忽略关闭异常 + } + _modbusClient = null; + } + + Diagnosis.Log($"ModbusDoorController[{Index}] 重连失败: {ExceptionFormatter.FormatEx(ex)}", "ModbusDoorController", false); + } + } + + /// + /// 读取所有门的状态 + /// + private void ReadAllDoorStates() + { + lock (_syncLock) + { + foreach (var doorConfig in DoorConfigs.Values) + { + try + { + var state = ReadDoorState(doorConfig.Index); + UpdateDoorState(doorConfig.Index, state ? DoorState.Open : DoorState.Closed); + } + catch (Exception ex) + { + Diagnosis.Log($"ModbusDoorController[{Index}] 读取门{doorConfig.Index}状态失败: {ExceptionFormatter.FormatEx(ex)}", "ModbusDoorController", true); + } + } + } + } + + /// + /// 根据 DoorControlTargets 中的目标状态,下发门控制指令 + /// + private void ApplyDoorControlTargets() + { + lock (_syncLock) + { + foreach (var doorConfig in DoorConfigs.Values) + { + var doorIndex = doorConfig.Index; + + // 获取目标控制状态,默认false + bool target = false; + DoorControlTargets.TryGetValue(doorIndex, out target); + + // 如果门配置为不允许发送任何控制指令,则跳过(既不打开也不关闭) + if (doorConfig.NoControl) + { + continue; + } + + // 获取上一次已下发的状态 + bool last; + var hasLast = _lastSentControl.TryGetValue(doorIndex, out last); + + // 如果没有记录或状态发生变化,则下发控制 + if (!hasLast || last != target) + { + try + { + WriteDoorControl(doorIndex, target); + _lastSentControl[doorIndex] = target; + } + catch (Exception ex) + { + Diagnosis.Log($"ModbusDoorController[{Index}] 下发门{doorIndex}控制指令失败: {ExceptionFormatter.FormatEx(ex)}", "ModbusDoorController", true); + } + } + } + } + } + + /// + /// 读取门状态(开到位信号) + /// + /// 门索引 + /// true=打开,false=关闭 + public override bool ReadDoorState(int doorIndex) + { + lock (_syncLock) + { + if (!DoorConfigs.TryGetValue(doorIndex, out var doorConfig)) + { + throw new ArgumentException($"门{doorIndex}不存在"); + } + + if (_modbusClient == null || !_modbusClient.modbusRtu.Connected) + { + throw new InvalidOperationException("Modbus连接未建立"); + } + + // 读取开到位信号 + var data = _modbusClient.ReadDiscreteInputs_02(SlaveAddress, doorConfig.OpenStatusAddress, 1); + return data != null && data.Length > 0 && data[0]; + } + } + + /// + /// 写入门控制信号(开关控制) + /// + /// 门索引 + /// true=打开,false=关闭 + public override void WriteDoorControl(int doorIndex, bool open) + { + lock (_syncLock) + { + if (!DoorConfigs.TryGetValue(doorIndex, out var doorConfig)) + { + throw new ArgumentException($"门{doorIndex}不存在"); + } + + if (_modbusClient == null || !_modbusClient.modbusRtu.Connected) + { + // 尝试重连 + TryReconnect(); + if (_modbusClient == null || !_modbusClient.modbusRtu.Connected) + { + throw new InvalidOperationException("Modbus连接未建立"); + } + } + + // 写入开关控制信号(线圈) + _modbusClient.WriteMultipleCoils_15(SlaveAddress, doorConfig.ControlAddress, [open]); + } + } + + /// + /// 析构函数,确保资源释放 + /// + ~ModbusDoorController() + { + Disconnect(); + } + } +} diff --git a/StandardScene.Devices/StandardScene.Devices.csproj b/StandardScene.Devices/StandardScene.Devices.csproj new file mode 100644 index 0000000..f5f0b04 --- /dev/null +++ b/StandardScene.Devices/StandardScene.Devices.csproj @@ -0,0 +1,54 @@ + + + + net8.0-windows + Library + true + StandardScene + StandardScene.Devices + latest + true + AnyCPU;x64 + x64 + true + false + disable + disable + false + $(NoWarn);NU1701;CS0618;CS0612;MSB3277;CA1416 + {HintPathFromItem};{TargetFrameworkDirectory};{RawFileName};{GAC} + + + + + + + + + + + + + + + + E:\Work\Core\Simple-FR\Simple\SimpleLite\bin\Debug\SimpleLite.dll + + + E:\Work\Core\Simple-FR\Simple\SimpleCore\bin\Debug\netstandard2.0\SimpleCore.dll + + + D:\MDCS\Dependencies\Commons\CommonUsage.dll + + + E:\Work\Core\Simple-FR\Simple\tools\Topaz.dll + + + E:\Work\Core\Simple-FR\Simple\SimpleLite\bin\Debug\LessokajiWeaverUtilities.dll + + + ..\StandardScene.Core\Ref\leegKeys-sdk.dll + + + + diff --git a/StandardScene.Devices/StandardScene.Devices.scene.json b/StandardScene.Devices/StandardScene.Devices.scene.json new file mode 100644 index 0000000..43a1755 --- /dev/null +++ b/StandardScene.Devices/StandardScene.Devices.scene.json @@ -0,0 +1,12 @@ +{ + "id": "scene.device", + "displayName": "设备驱动(门 / 充电桩 / 按钮盒)", + "assembly": "StandardScene.Devices.dll", + "coreVersion": ">=1.0.0", + "requiresCore": "StandardScene.dll", + "provides": { + "doorControllers": [ "ModbusDoorController" ], + "chargeStations": [ "FLChargeStation", "PCBChargeStation", "MuXingChargeStation" ], + "buttonBoxes": [ "LeegButtonBox", "AzowieButtonBox" ] + } +} diff --git a/StandardScene.Magnetic/CarTypes/Kiva.cs b/StandardScene.Magnetic/CarTypes/Kiva.cs new file mode 100644 index 0000000..84d82ab --- /dev/null +++ b/StandardScene.Magnetic/CarTypes/Kiva.cs @@ -0,0 +1,692 @@ +using LessokajiWeaverUtilities.Utilities; +using Newtonsoft.Json; +using SimpleLite; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.Extras; +using SimpleCore.Library; +using SimpleCore.PropType; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Net.Http; +using System.Numerics; +using System.Reflection; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using StandardScene.Model; +using StandardScene.Coders; +using StandardScene.Magnetic.Coders; +using Track = SimpleCore.PropType.Track; + +namespace StandardScene.CarTypes +{ + // MagneticTrackCoder 已物理迁出至 StandardScene.Magnetic.Coders(scene.mag 平台)。 + // Kiva 系字段袋(KivaCarFields/KivaSiteFields/KivaTrackFields/KivaPlanFields)下沉至 + // 基座 StandardScene.Core\CarTypes\KivaFields.cs(ArmCar 等跨平台车型继承它们)。 + + //标定轮里程计 + [TemplateTrackCoderSettings( + priority = 10, + useVerb = "track.CalibrateWheelEncoder && track.ReverseDst != dst.id", + blockVerb = "true", + templateString = "agv.CalibrateWheelEncoder(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id});", + siteFields = typeof(KivaSiteFields), + trackFields = typeof(KivaTrackFields))] + + // 通用避障/IO/纠偏 coder 已抽离为 StandardScene.Coders.*(见类前 [ProgramTrackCoderSettings] 引用) + + // 避障区尺寸(2参)切换 coder 已抽离为 StandardScene.Coders.AvoidanceParamLWCoder(方案 B;见下方 [ProgramTrackCoderSettings] 引用) + [ProgramTrackCoderSettings(priority = 20, program = typeof(AvoidanceParamLWCoder))] + + //plan.SegN 是指 当前路径所有点线的数量 + //plan.SegN-2 就是终点倒数第二个站点 + //[TemplateTrackCoderSettings( + // priority = 1, + // templateString = "agv.BasicGo(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id}," + + // "${track.id},${track.Speed},${track.Reverse||(track.ReverseDst==dst.id)}," + + // "${track.CarDirectionBias},${track.EnableCarAbsoluteDirection},${track.CarAbsoluteDirection},${track.typeInfo});", + // siteFields = typeof(KivaSiteFields), + // trackFields = typeof(KivaTrackFields), + // planFields = typeof(KivaPlanFields))] + + [TemplateTrackCoderSettings( + priority = 30, + useVerb = "dst.tag>0 && src.tag>0", + templateString = "agv.QrGo(${src.x},${src.y},${src.id},${src.tag},${dst.x},${dst.y},${dst.id},${dst.tag},${track.id}," + + "${track.Speed},${track.Reverse || (track.ReverseDst == dst.id)}," + + "${track.CarDirectionBias},${track.EnableCarAbsoluteDirection},${track.CarAbsoluteDirection}," + + "${track.typeInfo});", + blockVerb = "true", + siteFields = typeof(KivaSiteFields), + trackFields = typeof(KivaTrackFields), + planFields = typeof(KivaPlanFields))] + //[TemplateTrackCoderSettings( + // priority = 2, + // useVerb = "track.ReverseDst==dst.id", + // templateString = "agv.BasicGo(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id},${track.id},${track.speed},0,true);", + // blockVerb = "true", + // siteFields = typeof(KivaSiteFields), + // trackFields = typeof(KivaTrackFields))] + + [TemplateTrackCoderSettings( + priority = 20, + useVerb = "plan.action=='fetch' && dst.Shelf&&plan.curSeg==plan.segN-2", + templateString = "agv.Wait();" + + "agv.Fetch(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id}," + + "${dst.FetchSpeed},${dst.FetchLidarArea},${dst.FetchIOArea},${dst.FetchReverse}," + + "${dst.FetchBlindMoveDist},${dst.FetchLiftDownTarget},${dst.FetchLiftUpTarget}," + + "${dst.FetchUseQr},${dst.FetchQrMode},${dst.FetchIsUpQr},${dst.FetchUseDetector},${dst.FetchDetector},${dst.FetchDetectWidth},${dst.FetchDetectDepth}," + + "${plan.CarLength},${plan.CarWidth},${dst.FetchLeaveSrcEarly},${dst.FetchShieldObstacleDist});" + + "agv.Wait();", + blockVerb = "true", + siteFields = typeof(KivaSiteFields), + trackFields = typeof(KivaTrackFields), + planFields = typeof(KivaPlanFields))] + + [TemplateTrackCoderSettings( + priority = 20, + useVerb = "plan.action=='put' && dst.Shelf&&plan.curSeg==plan.segN-2", + templateString = "agv.Wait();" + + "agv.Put(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id}," + + "${dst.PutSpeed},${dst.PutLidarArea},${dst.PutIOArea},${dst.PutReverse},${dst.PutSyncRotate}," + + "${dst.PutBlindMoveDist},${dst.PutLiftDownTarget},${dst.PutLiftUpTarget}," + + "${dst.PutUseQr},${dst.PutQrMode},${dst.PutIsUpQr},${dst.PutUseDetector},${dst.PutDetector}," + + "${dst.PutDetectWidth},${dst.PutDetectDepth},${dst.PutLeaveSrcEarly},${dst.PutShieldObstacleDist});" + + "agv.Wait();", + blockVerb = "true", + siteFields = typeof(KivaSiteFields), + trackFields = typeof(KivaTrackFields), + planFields = typeof(KivaPlanFields))] + + [TemplateTrackCoderSettings( + priority = 22, + useVerb = "src.Shelf&&plan.curSeg==1", + templateString = "agv.LeaveShelf(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id}," + + "${src.LeaveShelfSpeed},${src.LeaveShelfLidarArea},${src.LeaveShelfIOArea},${src.LeaveShelfReverse},${src.LeaveShelfSyncRotate}," + + "${src.LeaveShelfBlindMoveDist},${src.LeaveShelfLiftDownTarget},${src.LeaveShelfRecoveryObstacleDist},);", + blockVerb = "true", + siteFields = typeof(KivaSiteFields), + trackFields = typeof(KivaTrackFields), + planFields = typeof(KivaPlanFields))] + + [TemplateSiteCoderSettings( + priority = 25, + useVerb = "plan.action=='fetch'&& plan.segN == 1 &&dst.Shelf", + templateString = + "agv.FetchInPlace(${dst.FetchUseQr},${dst.FetchQrMode},${dst.FetchIsUpQr},${dst.FetchLiftUpTarget},${plan.CarLength},${plan.CarWidth});" + + "agv.Wait();", + blockVerb = "true", + siteFields = typeof(KivaSiteFields), + trackFields = typeof(KivaTrackFields), + planFields = typeof(KivaPlanFields))] + //[TemplateSiteCoderSettings( + // priority = 100, + // useVerb = "plan.curSeg == 0", + // templateString = "agv.StartingMission();agv.Wait();", + // blockVerb = "false", + // siteFields = typeof(KivaSiteFields), + // trackFields = typeof(KivaTrackFields), + // planFields = typeof(KivaPlanFields))] + + + + [ProgramTrackCoderSettings(priority = 5, program = typeof(KivaCarTrackCoder))] + [ProgramTrackCoderSettings(priority = 19, program = typeof(MagneticTrackCoder))] + [ProgramTrackCoderSettings(priority = 17, program = typeof(LidarAreaSwitchCoder))] + [ProgramTrackCoderSettings(priority = 20, program = typeof(AvoidanceDistanceCoder))] + [ProgramTrackCoderSettings(priority = 20, program = typeof(IoAreaSwitchCoder))] + [ProgramTrackCoderSettings(priority = 20, program = typeof(TrackingErrThreshCoder))] + [CarType(Name = "Kiva", editor = typeof(Kiva))] + [I18N.DocumentTranslation(Name = "Kiva", locale = "en")] + [EnvelopConfig(centerX = 0, centerY = 0, lengthX = 950, lengthY = 650)] + public class Kiva : GhostCar, IScriptErrorRecoverable + { + /// 脚本异常自恢复(AbstractLoopMission 经 IScriptErrorRecoverable 调用),转调 newReset。 + public void RecoverReset(int resetSiteId = 0) => newReset(resetSiteId); + + [FieldMember] public float CarLength = 2000; + [FieldMember] public float CarWidth = 1400; + public class RotateSiteEnvelope : SiteEnvelopeDefinition + { + public override bool Use() => true; + + public override void Prompt() + { + if (curSeg == 0) + { + return; + } + + if (plan.codeArr == null) + { + return; + } + + var carConfig = usingCar.GetType().GetCustomAttribute(); + var carLength = carConfig.lengthX; + var carWidth = carConfig.lengthY; + var code = plan.codeArr[curSeg - 1]; + if (code.Contains("Fetch")) + { + var lengthX = plan.fields.TryGetValue("MaterialLength", out var materialLength) + ? (int.TryParse(materialLength, out var lengthResult) ? lengthResult > 0 ? lengthResult : carLength : carLength) + : carLength; + var lengthY = plan.fields.TryGetValue("MaterialWidth", out var materialWidth) + ? (int.TryParse(materialWidth, out var widthResult) ? widthResult > 0 ? widthResult : carWidth : carWidth) + : carWidth; + reshape(lengthX, lengthY, 0, 0); + } + else if (code.Contains("Put")) + { + reshape(carLength, carWidth, 0, 0); + } + } + + public override bool Block() => false; + + public override int priority => 1; + } + + public static async Task Create() + { + var kiva = new Kiva() + { + lstatus = "连接中", + address = "127.0.0.1", + name = $"Kiva", + haveCoordination = true, + speed = 1, + }; + return kiva; + } + + private const float DrawWidth = 950, DrawLength = 650; + private readonly Pen orientPen = new Pen(Color.White, 3); + private bool twinkle = false; + + protected override void draw(Graphics eGraphics) + { + try + { + var DrawWidth = CarLength; + var DrawLength = CarWidth; + var lineCap = new AdjustableArrowCap(5, 5, true); + orientPen.CustomEndCap = lineCap; + orientPen.StartCap = LineCap.RoundAnchor; + var alarmLevel = Commons.GetCarStatus(this, "AlarmLevel"); + var soc = Commons.CarValue((Car)this, "Soc"); + var electricCurrent = Commons.CarValue((Car)this, "ElectricCurrent"); + var thresSpeed = Commons.CarValue(this, "ThresSpeed"); + LadderLogic.FlipFlop(ref twinkle, 500, true, false); + Rectangle destRect = new Rectangle( + (int)((int)(-DrawWidth / 2)), + (int)((int)(-DrawLength / 2)), + (int)((int)DrawWidth), + (int)((int)DrawLength) + ); + if (int.TryParse(alarmLevel, out var alarm) && alarm > 0) + { + eGraphics.FillRectangle(twinkle ? Brushes.DarkRed : Brushes.Green, destRect); + } + else if (alarmLevel == "-1" || this.siteID == -1) + eGraphics.FillRectangle(Brushes.LightSeaGreen, destRect); + else if (electricCurrent > 1) + eGraphics.FillRectangle(Brushes.YellowGreen, destRect); + else if (thresSpeed <= 0) + { + eGraphics.FillRectangle(twinkle ? Brushes.YellowGreen : Brushes.Green, destRect); + } + else if (soc < 25) + { + eGraphics.FillRectangle(twinkle ? Brushes.DarkRed : Brushes.LightSeaGreen, destRect); + } + else + eGraphics.FillRectangle(Brushes.Green, destRect); + + eGraphics.DrawEllipse(Pens.Yellow, -160, -160, 320, 320); + eGraphics.DrawLine(orientPen, 0, 0, 480, 0); + + } + catch (Exception e) + { + Diagnosis.Post("绘制小车异常" + ExceptionFormatter.FormatEx(e), "绘制小车异常", true); + } + } + + private bool LoopTestRunning = false; + [MethodMember(Name = "循环测试")] + [I18N.DocumentTranslation(Name = "Loop Test", locale = "en")] + public async void LoopTest() + { + LoopTestRunning = true; + + var a = SimpleLib.GetAllSites().First(s => s.name == "A"); + var b = SimpleLib.GetAllSites().First(s => s.name == "B"); + + var plan1 = new SegmentPlan() { usingCar = this }; + plan1.fields["action"] = "fetch"; + plan1.FindRoute(SimpleLib.GetSite(GetLastSite()), a); + await plan1.Compile("fetch").Queue(); + + var plan2 = new SegmentPlan() { usingCar = this }; + plan2.fields["action"] = "go"; + plan2.FindRoute(SimpleLib.GetSite(GetLastSite()), b); + await plan2.Compile("go").Queue(); + + var plan3 = new SegmentPlan() { usingCar = this }; + plan3.fields["action"] = "put"; + plan3.FindRoute(SimpleLib.GetSite(GetLastSite()), a); + await plan3.Compile("put").Queue(); + + var plan4 = new SegmentPlan() { usingCar = this }; + plan4.fields["action"] = "go"; + plan4.FindRoute(SimpleLib.GetSite(GetLastSite()), b); + await plan4.Compile("go").Queue(); + + } + + [MethodMember(Name = "循环停止测试")] + [I18N.DocumentTranslation(Name = "Stop Loop Test", locale = "en")] + public void LoopTestStop() + { + LoopTestRunning = false; + } + public override string SetDisplayInfo() + { + try + { + var str = $"{name}({id})\n"; + status.enums.TryGetValue("ChassisMode", out var manual); + var ms = manual == "0" ? "自动" : "手动"; + status.enums.TryGetValue("Soc", out var soc); + str = $"{str}{ms}|soc:{soc}"; + var alarmStr = Commons.GetCarStatus(this, "AlarmInfo"); + if (alarmStr != "") + str = $"{str}|{alarmStr}"; + //if (status.enums.TryGetValue("mAlarm", out var mAlarm) && mAlarm != "") + // str = $"{str}|M:{mAlarm}"; + //var hasC = status.enums.TryGetValue("cAlarm", out var cAlarm) && cAlarm != ""; + //if (mAlarm != "" && hasC) + // str = $"{str}|"; + //if (hasC) + // str = $"{str}C:{cAlarm}"; + //var L_step = status.enums.TryGetValue("ls", out var ls) && ls != ""; + //if (L_step) + //{ + // str = $"{str}|ls:{ls}"; + //} + if (status.enums.TryGetValue("ElectricCurrent", out var electricCurrent) && + !string.IsNullOrEmpty(electricCurrent)) + { + var charging = float.Parse(electricCurrent) * 0.01f > 0 ? "充电中" : "未充电"; + str = $"{str}|charge:{charging}"; + } + + var thresSpeed = Commons.CarValue(this, "ThresSpeed"); + str = $"{str}{((thresSpeed <= 0) ? "|避障触发" : "")}"; + return str; + } + catch (Exception e) + { + Console.WriteLine(e); + return "bad car"; + } + } + + [MethodMember(Name = "进入小车远程", Description = "进入小车远程桌面")] + public void Mstsc() + { + var ip = this.address; + // 启动mstsc并传递IP地址 + Process.Start( + new ProcessStartInfo + { + FileName = "mstsc", + Arguments = $"/v:{ip}", + UseShellExecute = false, + CreateNoWindow = true + } + ); + } + + [MethodMember(Name = "显示车辆监控", Description = "打开车辆状态监控窗口")] + public void ShowVehicleMonitor() + { + VehicleMonitor.ShowMonitor(); + } + + [MethodMember(Name = "模拟电量", Description = "/")] + public void SimarSoc() + { + if (InputBox.ShowDialog("模拟电量", "模拟电量Soc", "0", InputBox.Buttons.OkCancel) == SimpleLite.DialogResult.Cancel) return; + string value = InputBox.ResultValue; + try + { + status.enums["Soc"] = (60 + int.Parse(value)).ToString(); + status.enums["Voltage"] = (50 + int.Parse(value)).ToString(); + status.enums["ElectricCurrent"] = (40 + int.Parse(value)).ToString(); + + } + catch (Exception) + { + + + } + + + } + + + + [MethodMember(Name = "立即强制结束new", Description = "立刻终止小车运行,重启C,并让小车下线")] + [I18N.DocumentTranslation(Name = "Force Stop new", Description = "Stop car & reset clumsy", locale = "en")] + public new async void ForceStop() + { + try + { + NoSchedule(true); + siteID = -1; + Commons.ClearTags(tags); + new Thread(() => + { + try + { + AppendDebug("restarting clumsy"); + Get("reset"); + AppendDebug("wait for any pending task to flush."); + try + { + status.programs.task.Wait(); + } + catch + { + } + + AppendDebug("Clumsy Restarted"); + NoSchedule(true); + siteID = -1; + Commons.DeleteTag(tags, "occupied"); + } + catch (Exception ex) + { + MessageBox.Show( + $@"未能立即强制结束小车{name}({id}),原因:{ExceptionFormatter.FormatEx(ex)}" + ); + } + }) + { + Name = $"ForceStop:{name}({id})" + }.Start(); + } + catch (Exception e) + { + Console.WriteLine(e); + throw; + } + } + + [MethodMember(Name = "返厂检修new", Description = "不再刷新小车状态,当然也不再被调度")] + [I18N.DocumentTranslation(Name = "Blown new", Description = "Car no longer refresh status and scheduling", locale = "en")] + public new void Blown() + { + AppendDebug("ui-blown"); + Diagnosis.Post($"Car {name}({id}) blown"); + NoSchedule(); + siteID = -1; + tags.Clear(); + status.usage.AddUsage( + "base", + new CarUsage.CarUsageInfo { scheduling = false, refreshing = false } + ); + lstatus = "返厂检修"; + } + + [MethodMember(Name = "现场检修new ", Description = "让小车不再被调度,但仍然刷新状态,并且当前点不再使用")] + [I18N.DocumentTranslation(Name = "Repair new", Description = "Car no longer scheduling but still refresh status", locale = "en")] + public new void Repair() + { + AppendDebug("ui-repair"); + Diagnosis.Post($"Repair Car {name}({id})"); + NoSchedule(); + siteID = -1; + Commons.DeleteTag(tags, "occupied"); + + lstatus = "现场检修"; + } + + public void newReset(int resetId = 0) + { + //if (!status.programs.task.IsCompleted && + // MessageBox.Show($"小车{name}({id})当前有任务:{status.programs.printStatus()},确认初始化?", "确认", + // MessageBoxButtons.YesNo) == DialogResult.No) return; + try + { + if (GetLastSite() != -1 && Commons.GetVehicleStatus((Car)this)!= VehicleStatus.NeedInit) + { + Diagnosis.Post($"Car{id}初始化失败:已初始化"); + return; + } + var debug = "ui invoke reset. "; + + // todo: 找点和线段的最近点。。。 + // lock + UISite site1 = null; + float dist = float.MaxValue; + List<(float, Site, Site)> trackList = new List<(float, Site, Site)>(); + if (resetId == 0) + { + + (float bias, Vector2 hPnt, float fd) Project2DLine( + Vector2 pnt, + Vector2 segSt, + Vector2 segEnd + ) + { + var dir = Vector2.Normalize(segEnd - segSt); + var fd = Vector2.Dot(pnt - segSt, dir); + var hPnt = segSt + fd * dir; + var bias = dir.X * (pnt.Y - segSt.Y) - (pnt.X - segSt.X) * dir.Y; + return (bias, hPnt, fd); + } + + foreach (var allTrack in SimpleLib.GetAllTracks()) + { + var s = SimpleLib.GetSite(allTrack.siteA); + var e = SimpleLib.GetSite(allTrack.siteB); + var (b, h, fd) = Project2DLine( + new Vector2(x, y), + new Vector2(s.x, s.y), + new Vector2(e.x, e.y) + ); + b = Math.Abs(b); + if (fd < 0 || fd > 1) + continue; + if (dist > b) + { + UISite ss; + if (fd < 0.5) + ss = (UISite)s; + else + ss = (UISite)e; + + foreach (var ccar in SimpleLib.GetAllCars()) + { + if (ccar == this) + continue; + if (ccar.status.holdingLocks.Contains(s.id)) + goto next; + } + + dist = b; + site1 = ss; + next: + ; + } + } + float radius = 5000; + //根据小车为圆心找到半径radius内的站点 + var surroundSites = SimpleLib.GetAllSites().ToList().FindAll(p => LessMath.dist(x, y, p.x, p.y) <= radius); + foreach (var allTrack in SimpleLib.GetAllTracks()) + { + var s = SimpleLib.GetSite(allTrack.siteA); + var e = SimpleLib.GetSite(allTrack.siteB); + if (!surroundSites.Contains(s) && !surroundSites.Contains(e) && surroundSites.Count != 0) continue; + + var (b, h, fd) = Project2DLine(new Vector2(x, y), new Vector2(s.x, s.y), new Vector2(e.x, e.y)); + b = Math.Abs(b); + double pathAngle = Double.NaN; + if (allTrack.direction == 1) + pathAngle = Math.Atan2((e.y - s.y), (e.x - s.x)) / Math.PI * 180; + else if (allTrack.direction == 2) + pathAngle = Math.Atan2((e.y - s.y), (e.x - s.x)) / Math.PI * 180 + 180; + else + trackList.Add((b, s, e)); + if (Math.Abs(this.th - pathAngle) < 30) + trackList.Add((b, s, e)); + foreach (var ccar in SimpleLib.GetAllCars()) + { + if (ccar == this) continue; + if (ccar.status.holdingLocks.Contains(s.id)) goto next; + } + next:; + + } + //var sites = trackList.OrderBy(p => p.Item1).ToArray(); + List<(double, Site)> distList = new List<(double, Site)>(); + foreach (var site in trackList) + { + if (site.Item2.fields.ContainsKey("no_reset") || site.Item3.fields.ContainsKey("no_reset")) + continue; + foreach (var ccar in SimpleLib.GetAllCars()) + { + if (ccar == this) continue; + if (ccar.status.holdingLocks.Contains(site.Item2.id) || ccar.status.holdingLocks.Contains(site.Item3.id)) goto next; + } + distList.Add((LessMath.dist(site.Item2.x, site.Item2.y, x, y), site.Item2)); + distList.Add((LessMath.dist(site.Item3.x, site.Item3.y, x, y), site.Item3)); + next:; + } + + site1 = (UISite)distList.OrderBy(p => p.Item1).First().Item2; + + //foreach (var site in SimpleLib.GetAllSites()) + //{ + // if (site.fields.ContainsKey("no_reset")) + // continue; + // foreach (var ccar in SimpleLib.GetAllCars()) + // { + // if (ccar == this) + // continue; + // if (ccar.status.holdingLocks.Contains(site.id)) + // goto next; + // } + + // var d = LessMath.dist(site.x, site.y, x, y); + // if (d < dist) + // { + // dist = (float)d; + // site1 = (UISite)site; + // } + // next: + // ; + //} + TrafficReset(site1, true, strict: false); + } + else + { + TrafficReset(SimpleLib.GetSite(resetId), true, strict: false); + } + + + siteID = site1.id; + + lstatus = "上线"; + debug += $"site={site1.id}"; + AppendDebug(debug); + G.pushStatus($"Car {name}({id}) reset to Site {site1.id}"); + } + catch (Exception e) + { + Diagnosis.Post($"{this.name}---初始化失败--{e.Message}", $"{this.name}", true); + } + } + + HttpClient hc = new HttpClient() { Timeout = TimeSpan.FromMilliseconds(300) }; + // [MethodMember(name = "小车暂停", desc = "小车暂停")] + public void EmergencyStop(string reason) + { + Diagnosis.Post($"car{name}:EmergencyStop"); + hc.GetStringAsync($"http://{address}:8008/setValue?FieldName=ISRelease&Value=1"); + } + + //[MethodMember(name = "小车暂停恢复", desc = "小车暂停恢复")] + public void EmergencyRelease() + { + Diagnosis.Post($"car{name}:EmergencyStop release"); + hc.GetStringAsync($"http://{address}:8008/setValue?FieldName=ISRelease&Value=0"); + } + //[MethodMember(name = "小车重启C", desc = "小车重启Clumsy")] + public void ResetClumsy() + { + Diagnosis.Post($"car{name}-{address}:ResetClumsy"); + hc.GetStringAsync($"http://{address}:8008/reset"); + } + } + + /// + /// 专门用于控制turn的问题 + /// + public class KivaCarTrackCoder : ITrackCoder + { + public bool toBlock() + { + return false; + } + /// + /// 用于记录上一路径的角度 + /// + public static double lastTh = -1; + + public bool Code(SegmentPlan plan, Track track, Site src, Site dst, int i) + { + var trackInfo = StringDictConvert.Convert(track.fields); + var srcInfo = StringDictConvert.Convert(src.fields); + Console.WriteLine($@"srcInfo.Turn:{srcInfo.Turn},i={1}"); + if (!srcInfo.Turn) //不包含旋转指令,直接跳过 + { + return true; + } + if (i == 1) + { + return true; + } + var lastSite = plan.segments[i - 3] as Site; + if (lastSite == null) + { + return true; + } + var lastPathDir = Math.Round(Math.Atan2(src.y - lastSite.y, src.x - lastSite.x) / Math.PI * 2) * 90; + var curPathDir = Math.Round(Math.Atan2(dst.y - src.y, dst.x - src.x) / Math.PI * 2) * 90; + if (Math.Abs(curPathDir - lastPathDir) < 45) + { + return true; + } + var angleTarget = trackInfo.ReverseDst == dst.id || trackInfo.Reverse ? curPathDir + 180 : curPathDir; + + plan.codeArr[i] += $"agv.Wait(); agv.SyncRotate({angleTarget}); agv.Wait(); "; + + return true; + } + } + +} diff --git a/StandardScene.Magnetic/CarTypes/MultiWheelLifterCar.cs b/StandardScene.Magnetic/CarTypes/MultiWheelLifterCar.cs new file mode 100644 index 0000000..013ebf3 --- /dev/null +++ b/StandardScene.Magnetic/CarTypes/MultiWheelLifterCar.cs @@ -0,0 +1,396 @@ +using CommonUsage.Mathematics; +using LessokajiWeaverUtilities.Utilities; +using Nancy.Helpers; +using Newtonsoft.Json; +using SimpleLite; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.Library; +using SimpleCore.PropType; +using StandardScene.Model; +using StandardScene.Coders; +using StandardScene.Magnetic.Coders; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Net.Http; +using System.Numerics; +using System.Runtime; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Track = SimpleCore.PropType.Track; + +namespace StandardScene.CarTypes +{ + // 磁循迹器已与 Kiva 版去重合并为唯一 StandardScene.Magnetic.Coders.MagneticTrackCoder。 + // 原 MWL 版 NaiveMagGo 缺少 ${track.Speed},合并后统一为含 Speed 的版本(用户确认)。 + // MultiWheelLifter 系字段袋下沉至基座 StandardScene.Core\CarTypes\MultiWheelLifterFields.cs + // (MultiVehicleCar 等跨平台车型引用它们)。 + + [TemplateTrackCoderSettings( + priority = 30, + useVerb = "track.SleepTime!=0", + templateString = "agv.Wait();agv.Sleep(${track.SleepTime});agv.Wait();", + blockVerb = "false", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + [TemplateTrackCoderSettings( + priority = 30, + useVerb = "track.TrayTarget!=0", + templateString = "agv.Wait();agv.TrayControl(${track.TrayTarget});agv.Wait();", + blockVerb = "false", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + //调整方向+钻车 + [TemplateTrackCoderSettings( + priority = 19, + useVerb = "dst.name=='FetchSite'&&plan.action=='fetch'", + templateString = "agv.Wait();agv.RotateToTarget(${plan.AngleTarget});agv.Wait();agv.TireFollowing(${plan.TireNum},${plan.FrontLidarDetect},${plan.FirstTire});agv.Wait();", + blockVerb = "false", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + //[TemplateTrackCoderSettings( + // priority = 19, + // useVerb = "dst.FetchPlace && plan.action=='fetch'", + // templateString = "agv.Wait();agv.RotateToTarget(${plan.AngleTarget});agv.Wait();", + // blockVerb = "false", + // siteFields = typeof(MultiWheelLifterSiteFields), + // trackFields = typeof(MultiWheelLifterTrackFields), + // planFields = typeof(MultiWheelLifterPlanFields))] + + //下使能+夹抱+上使能 + [TemplateTrackCoderSettings( + priority = 18, + useVerb = "dst.name=='FetchSite'&&plan.action=='fetch'", + templateString = "agv.DriverDisable();agv.Wait();agv.ClamptoTarget(${dst.ClampClose});agv.Wait();agv.DriverAble();agv.Wait();", + blockVerb = "true", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + [TemplateTrackCoderSettings( + priority = 19, + useVerb = "dst.tag>0 && src.tag>0", + templateString = "agv.QrGo(${src.x},${src.y},${src.id},${src.tag},${dst.x},${dst.y},${dst.id},${dst.tag},${track.id}," + + "${track.Speed},${track.Reverse || (track.ReverseDst == dst.id)}," + + "${track.CarDirectionBias},${track.EnableCarAbsoluteDirection},${track.CarAbsoluteDirection}," + + "${track.typeInfo});", + blockVerb = "true", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + // 通用避障/IO coder 已抽离为 StandardScene.Coders.*(见类前 [ProgramTrackCoderSettings] 引用) + + // 避障区尺寸(4参,含中心点)切换 coder 已抽离为 StandardScene.Coders.AvoidanceParamCoder(见类前 [ProgramTrackCoderSettings] 引用) + + // 纠偏阈值 coder 已抽离为 StandardScene.Coders.TrackingErrThreshCoder + + [ProgramTrackCoderSettings(priority = 19, program = typeof(MagneticTrackCoder))] + [ProgramTrackCoderSettings(priority = 27, program = typeof(LidarAreaSwitchCoder))] + [ProgramTrackCoderSettings(priority = 20, program = typeof(AvoidanceDistanceCoder))] + [ProgramTrackCoderSettings(priority = 20, program = typeof(IoAreaSwitchCoder))] + [ProgramTrackCoderSettings(priority = 20, program = typeof(TrackingErrThreshCoder))] + [ProgramTrackCoderSettings(priority = 20, program = typeof(AvoidanceParamCoder))] + + [EnvelopConfig(lengthX = 3000, lengthY = 1300, centerX = 0, centerY = 0)] + + [CarType(Name = "多舵轮顶升车")] + [I18N.DocumentTranslation(Name = "MultiWheel Lifter Car", locale = "en")] + public class MultiWheelLifterCar : GhostCar + { + [FieldMember]public float CarLength = 2000; + [FieldMember] public float CarWidth = 1400; + public static async Task Create() + { + var car = new MultiWheelLifterCar() + { + lstatus = "连接中", + address = "127.0.0.1", + name = "多舵轮顶升车" + }; + return car; + } + + [MethodMember(Name = "进入小车远程", Description = "进入小车远程桌面")] + [I18N.DocumentTranslation(Name = "Open remote desktop",Description = "Open the car's remote desktop", locale = "en")] + public void Mstsc() + { + var ip = this.address; + // 启动mstsc并传递IP地址 + Process.Start( + new ProcessStartInfo + { + FileName = "mstsc", + Arguments = $"/v:{ip}", + UseShellExecute = false, + CreateNoWindow = true + } + ); + } + + public void newTrafficReset(int resetId = 0) + { + //if (!status.programs.task.IsCompleted && + // MessageBox.Show($"小车{name}({id})当前有任务:{status.programs.printStatus()},确认初始化?", "确认", + // MessageBoxButtons.YesNo) == DialogResult.No) return; + try + { + if (GetLastSite() != -1 && Commons.GetVehicleStatus((Car)this) != VehicleStatus.NeedInit) + { + Diagnosis.Post($"Car{id}初始化失败:已初始化"); + return; + } + var debug = "ui invoke reset. "; + + // todo: 找点和线段的最近点。。。 + // lock + UISite site1 = null; + float dist = float.MaxValue; + List<(float, Site, Site)> trackList = new List<(float, Site, Site)>(); + if (resetId == 0) + { + + (float bias, Vector2 hPnt, float fd) Project2DLine( + Vector2 pnt, + Vector2 segSt, + Vector2 segEnd + ) + { + var dir = Vector2.Normalize(segEnd - segSt); + var fd = Vector2.Dot(pnt - segSt, dir); + var hPnt = segSt + fd * dir; + var bias = dir.X * (pnt.Y - segSt.Y) - (pnt.X - segSt.X) * dir.Y; + return (bias, hPnt, fd); + } + + foreach (var allTrack in SimpleLib.GetAllTracks()) + { + var s = SimpleLib.GetSite(allTrack.siteA); + var e = SimpleLib.GetSite(allTrack.siteB); + var (b, h, fd) = Project2DLine( + new Vector2(x, y), + new Vector2(s.x, s.y), + new Vector2(e.x, e.y) + ); + b = Math.Abs(b); + if (fd < 0 || fd > 1) + continue; + if (dist > b) + { + UISite ss; + if (fd < 0.5) + ss = (UISite)s; + else + ss = (UISite)e; + + foreach (var ccar in SimpleLib.GetAllCars()) + { + if (ccar == this) + continue; + if (ccar.status.holdingLocks.Contains(s.id)) + goto next; + } + + dist = b; + site1 = ss; + next: + ; + } + } + float radius = 5000; + //根据小车为圆心找到半径radius内的站点 + var surroundSites = SimpleLib.GetAllSites().ToList().FindAll(p => LessMath.dist(x, y, p.x, p.y) <= radius); + foreach (var allTrack in SimpleLib.GetAllTracks()) + { + var s = SimpleLib.GetSite(allTrack.siteA); + var e = SimpleLib.GetSite(allTrack.siteB); + if (!surroundSites.Contains(s) && !surroundSites.Contains(e) && surroundSites.Count != 0) continue; + + var (b, h, fd) = Project2DLine(new Vector2(x, y), new Vector2(s.x, s.y), new Vector2(e.x, e.y)); + b = Math.Abs(b); + double pathAngle = Double.NaN; + if (allTrack.direction == 1) + pathAngle = Math.Atan2((e.y - s.y), (e.x - s.x)) / Math.PI * 180; + else if (allTrack.direction == 2) + pathAngle = Math.Atan2((e.y - s.y), (e.x - s.x)) / Math.PI * 180 + 180; + else + trackList.Add((b, s, e)); + if (Math.Abs(this.th - pathAngle) < 30) + trackList.Add((b, s, e)); + foreach (var ccar in SimpleLib.GetAllCars()) + { + if (ccar == this) continue; + if (ccar.status.holdingLocks.Contains(s.id)) goto next; + } + next:; + + } + //var sites = trackList.OrderBy(p => p.Item1).ToArray(); + List<(double, Site)> distList = new List<(double, Site)>(); + foreach (var site in trackList) + { + if (site.Item2.fields.ContainsKey("no_reset") || site.Item3.fields.ContainsKey("no_reset")) + continue; + foreach (var ccar in SimpleLib.GetAllCars()) + { + if (ccar == this) continue; + if (ccar.status.holdingLocks.Contains(site.Item2.id) || ccar.status.holdingLocks.Contains(site.Item3.id)) goto next; + } + distList.Add((LessMath.dist(site.Item2.x, site.Item2.y, x, y), site.Item2)); + distList.Add((LessMath.dist(site.Item3.x, site.Item3.y, x, y), site.Item3)); + next:; + } + + site1 = (UISite)distList.OrderBy(p => p.Item1).First().Item2; + + //foreach (var site in SimpleLib.GetAllSites()) + //{ + // if (site.fields.ContainsKey("no_reset")) + // continue; + // foreach (var ccar in SimpleLib.GetAllCars()) + // { + // if (ccar == this) + // continue; + // if (ccar.status.holdingLocks.Contains(site.id)) + // goto next; + // } + + // var d = LessMath.dist(site.x, site.y, x, y); + // if (d < dist) + // { + // dist = (float)d; + // site1 = (UISite)site; + // } + // next: + // ; + //} + TrafficReset(site1, true, strict: false); + } + else + { + TrafficReset(SimpleLib.GetSite(resetId), true, strict: false); + } + + + siteID = site1.id; + + lstatus = "上线"; + debug += $"site={site1.id}"; + AppendDebug(debug); + G.pushStatus($"Car {name}({id}) reset to Site {site1.id}"); + } + catch (Exception e) + { + Diagnosis.Post($"{this.name}---初始化失败--{e.Message}", $"{this.name}", true); + } + } + + + + protected override void draw(Graphics eGraphics) + { + var HalfCarLength = CarLength / 2; + var HalfCarWidth = CarWidth / 2; + eGraphics.FillRectangle(Brushes.Gray, -HalfCarLength, -HalfCarWidth, HalfCarLength * 2, HalfCarWidth * 2); + eGraphics.DrawRectangle(Pens.White, -HalfCarLength, -HalfCarWidth, HalfCarLength * 2, HalfCarWidth * 2); + eGraphics.DrawLine(Pens.White, HalfCarLength - HalfCarWidth, -HalfCarWidth, HalfCarLength, 0); + eGraphics.DrawLine(Pens.White, HalfCarLength - HalfCarWidth, HalfCarWidth, HalfCarLength, 0); + } + + public override string SetDisplayInfo() + { + try + { + var str = $"{name}({id})\n"; + status.enums.TryGetValue("ChassisMode", out var manual); + var ms = manual == "0" ? "自动" : "手动"; + status.enums.TryGetValue("Soc", out var soc); + str = $"{str}{ms}|soc:{soc}"; + var alarmStr = Commons.GetCarStatus(this, "AlarmInfo"); + if (alarmStr != "") + str = $"{str}|{alarmStr}"; + if (status.enums.TryGetValue("ElectricCurrent", out var electricCurrent) && + !string.IsNullOrEmpty(electricCurrent)) + { + var charging = float.Parse(electricCurrent) * 0.01f > 0 ? "充电中" : "未充电"; + str = $"{str}|charge:{charging}"; + } + + var thresSpeed = Commons.CarValue(this, "ThresSpeed"); + str = $"{str}{((thresSpeed <= 0) ? "|避障触发" : "")}"; + return str; + } + catch (Exception e) + { + Console.WriteLine(e); + return "bad car"; + } + } + + private bool _running = false; + + [MethodMember(Name = "测试", Description = "循环")] + [I18N.DocumentTranslation(Name = "Test", Description = "Looping", locale = "en")] + public async void Test() + { + var siteA = SimpleLib.GetAllSites().First(s => s.name == "A"); + var siteB = SimpleLib.GetAllSites().First(s => s.name == "B"); + _running = true; + while (_running) + { + var plan = new SegmentPlan() { usingCar = this }; + plan.FindRoute(SimpleLib.GetSite(this.GetLastSite()), siteA); + await plan.Compile("GoA").Queue(); + var planB = new SegmentPlan() { usingCar = this }; + planB.FindRoute(SimpleLib.GetSite(this.GetLastSite()), siteB); + await planB.Compile("GoB").Queue(); + await Task.Delay(1000); + } + } + + [MethodMember(Name = "停止测试")] + [I18N.DocumentTranslation(Name = "Stop Test", Description = "Stop Looping", locale = "en")] + public void Stop() + { + _running = false; + } + HttpClient hc = new HttpClient() { Timeout = TimeSpan.FromMilliseconds(300) }; + [MethodMember(Name = "小车暂停", Description = "小车暂停")] + [I18N.DocumentTranslation(Name = "Emergency Stop",Description = "Emergency Stop the car", locale = "en")] + public void EmergencyStop(string reason) + { + Diagnosis.Post($"car{name}:EmergencyStop"); + hc.GetStringAsync($"http://{address}:8008/setValue?FieldName=ISRelease&Value=1"); + } + + [MethodMember(Name = "小车暂停恢复", Description = "小车暂停恢复")] + [I18N.DocumentTranslation(Name = "Emergency Release",Description = "Release Emergency Stop of the car", locale = "en")] + public void EmergencyRelease() + { + Diagnosis.Post($"car{name}:EmergencyStop release"); + hc.GetStringAsync($"http://{address}:8008/setValue?FieldName=ISRelease&Value=0"); + } + [MethodMember(Name = "小车重启C", Description = "小车重启Clumsy")] + [I18N.DocumentTranslation(Name = "Reset Clumsy",Description = "Reset Clumsy of the car", locale = "en")] + public void ResetClumsy() + { + Diagnosis.Post($"car{name}-{address}:ResetClumsy"); + hc.GetStringAsync($"http://{address}:8008/reset"); + } + } +} diff --git a/StandardScene.Magnetic/Coders/MagneticTrackCoder.cs b/StandardScene.Magnetic/Coders/MagneticTrackCoder.cs new file mode 100644 index 0000000..273980e --- /dev/null +++ b/StandardScene.Magnetic/Coders/MagneticTrackCoder.cs @@ -0,0 +1,168 @@ +using CommonUsage.Mathematics; +using LessokajiWeaverUtilities.Utilities; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.Library; +using SimpleCore.PropType; +using SimpleLite.Props; +using StandardScene.CarTypes; +using System; +using System.Linq; +using System.Numerics; +using Track = SimpleCore.PropType.Track; + +namespace StandardScene.Magnetic.Coders +{ + /// + /// 唯一磁循迹器(会话1:Kiva 版与 MWL 版去重;NaiveMagGo 采用含 ${track.Speed} 版本,用户确认)。 + /// C2 物理迁出:原暂置 Kiva.cs(StandardScene.CarTypes),现归 scene.mag 平台插件。 + /// 触发条件:track.Magnet=true 且非倒车段;分叉/汇流路口按顺时针序计算 magSelect。 + /// + public class MagneticTrackCoder : ITrackCoder + { + public bool Code(SegmentPlan plan, Track track, Site src, Site dst, int i) + { + Diagnosis.Post("enter code", "MagTrackCoder", true); + if (!track.fields.TryGetValue("Magnet", out var mStr) || !bool.TryParse(mStr, out var mBool) || + !mBool) return false; + + // do not use magnet navigation for reversing + if (track.fields.TryGetValue("ReverseDst", out var reverseStr) && int.TryParse(reverseStr, out var rId) && + rId == dst.id) return false; + + Diagnosis.Post($">>>> checking {track.id}", "MagTrackCoder", true); + var magSelect = -1; + // choose forking/converging path in clockwise order. + // i.e. 0 is the left-most forking. -1 means no choosing + + float CalculateTangent(Track myTrack, bool checkSrc, int segId) + { + var anchorSite = (Site)(checkSrc ? plan.segments[segId - 1] : plan.segments[segId + 1]); + + if (myTrack is UICircularArcTrack arcTrack) + { + var angleStart = arcTrack.Arc.AngleStart; + var direction = 1; + if (Vector2.Distance(anchorSite.v2, arcTrack.Arc.PointEnd) < + Vector2.Distance(anchorSite.v2, arcTrack.Arc.PointStart)) + { + angleStart = arcTrack.Arc.AngleEnd; + direction = -1; + } + + angleStart = CommonMath.RoundTh(angleStart); + var myAngle = angleStart + direction * 5; + var arcTh = CommonMath.RoundTh(myAngle + 90 * direction); + Console.WriteLine($">>>> {checkSrc} id: {myTrack.id} th: {arcTh:0.0}"); + return arcTh; + } + + if (myTrack is UIBezierTrack bTrack) + { + var add180 = 0f; + var controlPoints = bTrack.BezierCurve.ControlPoints; + if (Vector2.Distance(anchorSite.v2, controlPoints[0]) > + Vector2.Distance(anchorSite.v2, controlPoints.Last())) add180 = 180; + var TangentPoint = bTrack.BezierCurve.QueryTangentPoint(anchorSite.v2); + Console.WriteLine($">>>>Bezier {checkSrc} id: {myTrack.id} th: {TangentPoint.Angle:0.0} add:{add180} queryid:{anchorSite.id}"); + return TangentPoint.Angle + add180; + } + + if (myTrack is UINurbsTrack nTrack) + { + + } + + // line track + var myDst = SimpleLib.GetSite(myTrack.GetOther(anchorSite.id)); + var lineTh = (float)(Math.Atan2(myDst.y - anchorSite.y, myDst.x - anchorSite.x) / Math.PI * 180); + Console.WriteLine($">>>> {checkSrc} id: {myTrack.id} th: {lineTh:0.0}"); + return lineTh; + } + + bool TestMagSelect(bool checkSrc) + { + var anchorSite = checkSrc ? src : dst; + var myTh = CalculateTangent(track, checkSrc, i); + var allTracks = anchorSite.relatedTracks.Select(ii => SimpleLib.GetTrack(ii)).ToList(); + if (allTracks.Count <= 2) return false; + + var tracksAndThs = allTracks.Select(myTrack => (myTrack, CalculateTangent(myTrack, checkSrc, i))).ToList(); + var sameHalfTracks = tracksAndThs.Where(item => Math.Abs(LessMath.thDiff(item.Item2, myTh)) < 90) + .ToList(); + if (sameHalfTracks.Count > 1) + { + sameHalfTracks = checkSrc + ? sameHalfTracks.OrderByDescending(item => LessMath.thDiff(item.Item2, myTh)).ToList() + : sameHalfTracks.OrderBy(item => LessMath.thDiff(item.Item2, myTh)).ToList(); + Console.WriteLine( + $">>>> {checkSrc} {track.id} ({string.Join(", ", sameHalfTracks.Select(tt => tt.myTrack.id))})"); + magSelect = sameHalfTracks.FindIndex(tt => tt.myTrack.id == track.id); + return true; + } + + // check if adjacent to forking/converging path + Track adjacentTrack; + int adjacentSegId; + if (checkSrc) + { + if (i <= 1) return false; + adjacentTrack = (Track)plan.segments[i - 2]; + adjacentSegId = i - 2; + } + else + { + if (i >= plan.segments.Count - 2) return false; + adjacentTrack = (Track)plan.segments[i + 2]; + adjacentSegId = i + 2; + } + var otherHalfTracks = tracksAndThs.Where(item => Math.Abs(LessMath.thDiff(item.Item2, myTh)) >= 90) + .ToList(); + var adjacentTh = CalculateTangent(adjacentTrack, !checkSrc, adjacentSegId); + otherHalfTracks = checkSrc + ? otherHalfTracks.OrderBy(item => LessMath.thDiff(item.Item2, adjacentTh)).ToList() + : otherHalfTracks.OrderByDescending(item => LessMath.thDiff(item.Item2, adjacentTh)).ToList(); + Console.WriteLine($">>>> use adjacentTrack {checkSrc} {adjacentTrack.id} ({string.Join(", ", otherHalfTracks.Select(tt => tt.myTrack.id))})"); + magSelect = otherHalfTracks.FindIndex(tt => tt.myTrack.id == adjacentTrack.id); + return true; + } + + if (!TestMagSelect(true)) TestMagSelect(false); + + Console.WriteLine($">>>> {track.id} select {magSelect}"); + var engine = ProgramCoderHelper.PrepareTrackEngine(plan, track, src, dst, i, + carFields: typeof(BasicCarFields), + siteFields: typeof(BasicSiteFields), + trackFields: typeof(BasicTrackFields), + planFields: typeof(BasicPlanFields)); + var tStr = "agv.MagGo(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id},${track.id}," + + $"{magSelect}," + + "${track.Speed},${track.Reverse || (track.ReverseDst == dst.id)}," + + "${track.CarDirectionBias},${track.EnableCarAbsoluteDirection},${track.CarAbsoluteDirection});"; + + if (track.fields.TryGetValue("NaiveMagnet", out var naiveStr) && bool.TryParse(naiveStr, out var naive) && + naive) + { + var slowDown = i == plan.segments.Count - 2; + if (slowDown && (!dst.fields.TryGetValue("TagValue", out var tagValStr) || + !int.TryParse(tagValStr, out _))) + throw new Exception($"Destination site {dst.id} must have valid TagValue field!"); + Console.WriteLine($">>>> Naive magnet!"); + tStr = "agv.NaiveMagGo(${src.id},${dst.id},${track.id}," + + $"{magSelect}," + "${track.Speed}," + + $"{slowDown.ToString().ToLower()}," + + "${dst.TagValue}," + + "${src.x},${src.y},${dst.x},${dst.y},${track.typeInfo});"; + } + + plan.codeArr[i] += (string)engine.ExecuteExpression($"`{tStr}`", default); + + return true; + } + + public bool toBlock() + { + return true; + } + } +} diff --git a/StandardScene.Magnetic/MagneticSceneProfile.cs b/StandardScene.Magnetic/MagneticSceneProfile.cs new file mode 100644 index 0000000..b642c9d --- /dev/null +++ b/StandardScene.Magnetic/MagneticSceneProfile.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using SimpleCore.Navigation; +using StandardScene.CarTypes; + +namespace StandardScene.Magnetic +{ + /// + /// scene.mag 平台画像:磁导航场景插件(磁条循迹为主,兼容二维码地标段)。 + /// 宿主(SimpleLite)加载本 dll 后反射实例化并 OnActivate / 注册。 + /// + public sealed class MagneticSceneProfile : NavigationProfileBase + { + public override NavKind Kind => NavKind.Magnetic; + + public override string SceneId => "scene.mag"; + + public override string DisplayName => "磁导航平台"; + + public override IReadOnlyList CarTypes => new[] + { + typeof(Kiva), + typeof(MultiWheelLifterCar), + }; + + public override void OnActivate(ISceneContext context) + { + context.Log($"{DisplayName} 已激活(车型:Kiva / 多舵轮顶升车)"); + } + } +} diff --git a/StandardScene.Magnetic/StandardScene.Magnetic.csproj b/StandardScene.Magnetic/StandardScene.Magnetic.csproj new file mode 100644 index 0000000..c4726ee --- /dev/null +++ b/StandardScene.Magnetic/StandardScene.Magnetic.csproj @@ -0,0 +1,54 @@ + + + + net8.0-windows + Library + true + StandardScene.Magnetic + StandardScene.Magnetic + latest + true + AnyCPU;x64 + x64 + true + false + disable + disable + false + $(NoWarn);NU1701;CS0618;CS0612;MSB3277;CA1416 + {HintPathFromItem};{TargetFrameworkDirectory};{RawFileName};{GAC} + + + + + + + + + + + + + + + E:\Work\Core\Simple-FR\Simple\SimpleLite\bin\Debug\SimpleLite.dll + + + E:\Work\Core\Simple-FR\Simple\SimpleCore\bin\Debug\netstandard2.0\SimpleCore.dll + + + D:\MDCS\Dependencies\Commons\CommonUsage.dll + + + E:\Work\Core\Simple-FR\Simple\tools\Topaz.dll + + + E:\Work\Core\Simple-FR\Simple\SimpleLite\bin\Debug\LessokajiWeaverUtilities.dll + + + + + + + + diff --git a/StandardScene.Magnetic/StandardScene.Magnetic.scene.json b/StandardScene.Magnetic/StandardScene.Magnetic.scene.json new file mode 100644 index 0000000..5161cd9 --- /dev/null +++ b/StandardScene.Magnetic/StandardScene.Magnetic.scene.json @@ -0,0 +1,12 @@ +{ + "id": "scene.mag", + "displayName": "磁导航平台", + "navKind": "magnetic", + "assembly": "StandardScene.Magnetic.dll", + "coreVersion": ">=1.0.0", + "requiresCore": "StandardScene.dll", + "provides": { + "carTypes": [ "Kiva", "MultiWheelLifterCar" ], + "missionTypes": [] + } +} diff --git a/StandardScene.Protocol.VDA5050/StandardScene.Protocol.VDA5050.csproj b/StandardScene.Protocol.VDA5050/StandardScene.Protocol.VDA5050.csproj new file mode 100644 index 0000000..d73788d --- /dev/null +++ b/StandardScene.Protocol.VDA5050/StandardScene.Protocol.VDA5050.csproj @@ -0,0 +1,60 @@ + + + + net8.0-windows + Library + true + StandardScene + StandardScene.Protocol.VDA5050 + latest + true + AnyCPU;x64 + x64 + true + false + disable + disable + false + $(NoWarn);NU1701;CS0618;CS0612;MSB3277;CA1416 + {HintPathFromItem};{TargetFrameworkDirectory};{RawFileName};{GAC} + + + + + + + + + + + + + + + + E:\Work\Core\Simple-FR\Simple\SimpleLite\bin\Debug\SimpleLite.dll + + + E:\Work\Core\Simple-FR\Simple\SimpleCore\bin\Debug\netstandard2.0\SimpleCore.dll + + + D:\MDCS\Dependencies\Commons\CommonUsage.dll + + + E:\Work\Core\Simple-FR\Simple\tools\Topaz.dll + + + E:\Work\Core\Simple-FR\Simple\SimpleLite\bin\Debug\LessokajiWeaverUtilities.dll + + + + + + + + + + + + + diff --git a/StandardScene.Protocol.VDA5050/StandardScene.Protocol.VDA5050.scene.json b/StandardScene.Protocol.VDA5050/StandardScene.Protocol.VDA5050.scene.json new file mode 100644 index 0000000..c57f0b6 --- /dev/null +++ b/StandardScene.Protocol.VDA5050/StandardScene.Protocol.VDA5050.scene.json @@ -0,0 +1,10 @@ +{ + "id": "scene.vda5050", + "displayName": "VDA5050 协议车型", + "assembly": "StandardScene.Protocol.VDA5050.dll", + "coreVersion": ">=1.0.0", + "requiresCore": "StandardScene.dll", + "provides": { + "carTypes": [ "VDA5050Car" ] + } +} diff --git a/StandardScene.Protocol.VDA5050/VDACar/MasterMQTTCommunication.cs b/StandardScene.Protocol.VDA5050/VDACar/MasterMQTTCommunication.cs new file mode 100644 index 0000000..10f952d --- /dev/null +++ b/StandardScene.Protocol.VDA5050/VDACar/MasterMQTTCommunication.cs @@ -0,0 +1,297 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CommonUsage.Protocols.VDA5050.Messages; +using MQTTnet; +using MQTTnet.Client; +using MQTTnet.Extensions.ManagedClient; +using MQTTnet.Protocol; +using MQTTnet.Server; +using Newtonsoft.Json; +using SimpleCore; +using SimpleCore.Library; + +namespace StandardScene.CarTypes +{ + public class MasterMQTTCommunication + { + private IManagedMqttClient _client; + private IManagedMqttClient _visualizationClient; // Separate client for visualization + + private const string OrderTopic = "vda5050/frldAGV/order"; + private const string StateTopic = "vda5050/frldAGV/state"; + + private const string VisualizationTopic = "vda5050/frldAGV/visualization"; + private readonly string _connectionTopic = "vda5050/frldAGV/connection"; + private readonly string _instantAction = "vda5050/frldAGV/instantActions"; + private readonly string _factsheet = "vda5050/frldAGV/factsheet"; + private readonly string _carFields = "vda5050/frldAGV/carFields"; + + + + //192.168.123.5 + public MasterMQTTCommunication() + { + // Initialize MQTT client and connect to broker + var mqttFactory = new MqttFactory(); + _client = mqttFactory.CreateManagedMqttClient(); + + var mqttClientOptions = new MqttClientOptionsBuilder() + .WithTcpServer("localhost", 1883) // Connect to the local broker + .WithCleanSession(true) + .WithCleanStart(true) + .Build(); + + var managedOptions = new ManagedMqttClientOptionsBuilder() + .WithClientOptions(mqttClientOptions) + .WithMaxPendingMessages(20) + .WithPendingMessagesOverflowStrategy(MqttPendingMessagesOverflowStrategy.DropOldestQueuedMessage) + .Build(); + + _client.StartAsync(managedOptions).GetAwaiter().GetResult(); + Console.WriteLine(" >>> Master-Control MQTT client connected to broker."); + + // Initialize separate client for visualization + _visualizationClient = mqttFactory.CreateManagedMqttClient(); + var visualizationOptions = new MqttClientOptionsBuilder() + .WithTcpServer("localhost", 1883) + .WithClientId("Master-Visualization") + .Build(); + + var visualizationManagedOptions = new ManagedMqttClientOptionsBuilder() + .WithClientOptions(visualizationOptions) + .WithMaxPendingMessages(10) // Lower queue size for visualization + .WithPendingMessagesOverflowStrategy(MqttPendingMessagesOverflowStrategy.DropOldestQueuedMessage) + .Build(); + + _visualizationClient.StartAsync(visualizationManagedOptions).GetAwaiter().GetResult(); + Console.WriteLine(" >>> Master-Control Visualization MQTT client initialized."); + + } + + public async Task RestartClient() + { + Console.WriteLine(" >>> Restarting MQTT client..."); + + var stopTask = _client.StopAsync(); + if (await Task.WhenAny(stopTask, Task.Delay(5000)) == stopTask) + { + Console.WriteLine(" >>> MQTT client stopped successfully."); + } + else + { + Console.WriteLine(" >>> Timeout while stopping MQTT client."); + } + + // Dispose and reinitialize the client + //_client.Dispose(); + + var mqttFactory = new MqttFactory(); + var newClient = mqttFactory.CreateManagedMqttClient(); + + var mqttClientOptions = new MqttClientOptionsBuilder() + .WithTcpServer("localhost", 1883) + .Build(); + + var managedOptions = new ManagedMqttClientOptionsBuilder() + .WithClientOptions(mqttClientOptions) + .Build(); + + await newClient.StartAsync(managedOptions); + Console.WriteLine(" >>> New MQTT client started."); + } + + + + public void SubsribeToConnectionTopic() + { + _client.SubscribeAsync(_connectionTopic, MqttQualityOfServiceLevel.AtLeastOnce).GetAwaiter().GetResult(); + + _client.ApplicationMessageReceivedAsync += async e => + { + if (e.ApplicationMessage.Topic == _connectionTopic) + { + Console.WriteLine($" >>>>>>> Subscribed to topic: {e.ApplicationMessage.Topic}"); + var payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload); + //LogMessage("RECEIVED", e.ApplicationMessage.Topic, payload); + var connectionStatusMessage = JsonConvert.DeserializeObject(payload); + var car = (VDA5050Car)SimpleLib.GetAllCars() + .FirstOrDefault(cc => cc is VDA5050Car vdaCar); + if (car == null) + { + Diagnosis.Post($"no car of serialNumber {connectionStatusMessage.serialNumber}"); + + } + + car.ConnectionStatus = connectionStatusMessage.connectionState; + Console.WriteLine($">>>> Connection status: {connectionStatusMessage.connectionState}"); + } + }; + } + + public void SubscribeToCarFields() + { + _client.SubscribeAsync(_carFields,MqttQualityOfServiceLevel.AtLeastOnce).GetAwaiter().GetResult(); + _client.ApplicationMessageReceivedAsync += async e => + { + if (e.ApplicationMessage.Topic == _carFields) + { + var payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload); + Console.WriteLine(payload); + //TODO:处理字符串,拿想要的值 + } + }; + } + + //public void SubsribeToFactSheetTopic() + //{ + // _client.SubscribeAsync(_factsheet, MqttQualityOfServiceLevel.AtMostOnce).GetAwaiter().GetResult(); + + // _client.ApplicationMessageReceivedAsync += async e => + // { + // if (e.ApplicationMessage.Topic == _factsheet) + // { + // //Console.WriteLine($" >>>>>>> Subscribed to topic: {e.ApplicationMessage.Topic}"); + // var payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload); + // //LogMessage("RECEIVED FactSheet", e.ApplicationMessage.Topic, payload); + // // Console.WriteLine($">>>> Connection status: {connectionStatusMessage.connectionState}"); + // } + // }; + //} + + public void SubscribeToVisualization() + { + _visualizationClient.SubscribeAsync(VisualizationTopic, MqttQualityOfServiceLevel.AtMostOnce).GetAwaiter().GetResult(); + Console.WriteLine($" >>> Subscribed to {VisualizationTopic}"); + + _visualizationClient.ApplicationMessageReceivedAsync += async e => + { + if(_visualizationClient.PendingApplicationMessagesCount > 5) + { + Console.WriteLine($"[WARNING] Dropping old visualization message. Pending: {_visualizationClient.PendingApplicationMessagesCount}"); + return; // Skip processing to catch up + } + if (e.ApplicationMessage.Topic == VisualizationTopic) + { + var payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload); + //Console.WriteLine($"[DEBUG] Received Visualization Message: {payload}"); + + var state = JsonConvert.DeserializeObject(payload); + var car = (VDA5050Car)SimpleLib.GetAllCars() + .FirstOrDefault(cc => cc is VDA5050Car vdaCar); + + if (car != null) + { + car.UpdatePosition(state); + } + } + await Task.CompletedTask; + }; + } + + public void SubscribeToState() + { + _client.SubscribeAsync(StateTopic, MqttQualityOfServiceLevel.AtMostOnce).GetAwaiter().GetResult(); + Console.WriteLine($"Subscribed to topic: {StateTopic}"); + _client.ApplicationMessageReceivedAsync += async e => + { + Console.WriteLine("e.ApplicationMessage.Topic: " + e.ApplicationMessage.Topic + " StateTopic: " + StateTopic); + if (e.ApplicationMessage.Topic == StateTopic) + { + Console.WriteLine($" >>>>>>> Subscribed to topic: {e.ApplicationMessage.Topic}"); + var payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload); + //LogMessage("RECEIVED", e.ApplicationMessage.Topic, payload); + // Console.WriteLine($" >> Topic: [{e.ApplicationMessage.Topic}] -- {payload}"); + var state = JsonConvert.DeserializeObject(payload); + var car = (VDA5050Car)SimpleLib.GetAllCars() + .FirstOrDefault(cc => cc is VDA5050Car vdaCar); + if (car == null) + { + Diagnosis.Post($"no car of serialNumber {state.serialNumber}"); + + } + car.IsPaused = state.paused; + car.UpdateState(state); + //car.UpdatePosition(state); + //Console.WriteLine($">> Received message on topic '{StateTopic}': {payload}"); + // onTopicReceived(state); + } + await Task.CompletedTask; + }; + } + + //public void SubscribeToState() + //{ + // _client.SubscribeAsync(StateTopic, MqttQualityOfServiceLevel.AtMostOnce).GetAwaiter().GetResult(); + // _client.ApplicationMessageReceivedAsync += async e => + // { + // if (e.ApplicationMessage.Topic == StateTopic) + // { + // var payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload); + // var state = JsonConvert.DeserializeObject(payload); + // var car = (VDA5050Car)SimpleLib.GetAllCars().FirstOrDefault(cc => cc is VDA5050Car); + // if (car == null) + // { + // Diagnosis.Post($"no car of serialNumber {state.serialNumber}"); + // } + // else + // { + // // Instead of calling UpdateState/UpdatePosition directly, + // // simply store the latest state message. + // car.SetLatestState(state); + // } + // } + // await Task.CompletedTask; + // }; + //} + + + + public async Task PublishTo(string order) + { + var message = new MqttApplicationMessageBuilder() + .WithTopic(OrderTopic) + .WithPayload(order) + .WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtMostOnce) + .Build(); + //Console.WriteLine($"[MQTT-Master] Pending Messages before sending: {_client.PendingApplicationMessagesCount}"); + + await _client.EnqueueAsync(message); + //Console.WriteLine($"[MQTT-Master] Sent order message. Pending Messages after sending: {_client.PendingApplicationMessagesCount}"); + + //LogMessage("Sent Order", OrderTopic, order); + } + + public async Task PublishInstantActions(string actions) + { + var message = new MqttApplicationMessageBuilder() + .WithTopic(_instantAction) + .WithPayload(actions) + .Build(); + + await _client.EnqueueAsync(message); + + } + + public void LogMessage(string direction, string topic, string payload) + { + string formattedPayload = payload; + + // Try to parse the payload as JSON and pretty-print it + try + { + var jsonObject = JsonConvert.DeserializeObject(payload); + formattedPayload = JsonConvert.SerializeObject(jsonObject, Formatting.Indented); + } + catch (JsonReaderException) + { + // If the payload is not valid JSON, just leave it as is + formattedPayload = payload; + } + + Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] [{direction}] Topic: {topic}, Payload: {formattedPayload}"); + } + } +} \ No newline at end of file diff --git a/StandardScene.Protocol.VDA5050/VDACar/TextViewer.Designer.cs b/StandardScene.Protocol.VDA5050/VDACar/TextViewer.Designer.cs new file mode 100644 index 0000000..db7443d --- /dev/null +++ b/StandardScene.Protocol.VDA5050/VDACar/TextViewer.Designer.cs @@ -0,0 +1,58 @@ +namespace StandardScene.CarTypes +{ + partial class TextViewer + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.SuspendLayout(); + // + // richTextBox1 + // + this.richTextBox1.Location = new System.Drawing.Point(12, 12); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(776, 1032); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = ""; + // + // TextViewer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 1056); + this.Controls.Add(this.richTextBox1); + this.Name = "TextViewer"; + this.Text = "TextViewer"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RichTextBox richTextBox1; + } +} \ No newline at end of file diff --git a/StandardScene.Protocol.VDA5050/VDACar/TextViewer.cs b/StandardScene.Protocol.VDA5050/VDACar/TextViewer.cs new file mode 100644 index 0000000..0a6c00d --- /dev/null +++ b/StandardScene.Protocol.VDA5050/VDACar/TextViewer.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace StandardScene.CarTypes +{ + public partial class TextViewer : Form + { + public TextViewer() + { + InitializeComponent(); + } + + public void UpdateText(string str) + { + richTextBox1.Invoke((Action)delegate + { + richTextBox1.Text = str; + }); + } + } +} diff --git a/StandardScene.Protocol.VDA5050/VDACar/TextViewer.resx b/StandardScene.Protocol.VDA5050/VDACar/TextViewer.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/StandardScene.Protocol.VDA5050/VDACar/TextViewer.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/StandardScene.Protocol.VDA5050/VDACar/VDA5050Car.cs b/StandardScene.Protocol.VDA5050/VDACar/VDA5050Car.cs new file mode 100644 index 0000000..bf28d9c --- /dev/null +++ b/StandardScene.Protocol.VDA5050/VDACar/VDA5050Car.cs @@ -0,0 +1,1069 @@ +using Acornima.Ast; +using CommonUsage.Protocols.VDA5050.Messages; +using CommonUsage.Protocols.VDA5050.Objects; +using LessokajiWeaverUtilities.Utilities; +using MQTTnet; +using MQTTnet.Client; +using MQTTnet.Extensions.ManagedClient; +using MQTTnet.Protocol; +using Nancy.Routing; +using Newtonsoft.Json; +using SimpleLite; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleLite.RCS.Signal; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.Library; +using SimpleCore.PropType; +using StandardScene.Chained; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Net.Http; +using System.Security.Policy; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using static SimpleLite.RCS.CarTypes.ClumsyCar; +using static SimpleLite.RCS.CarTypes.DummyCar; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock; +using Site = SimpleCore.PropType.Site; + +namespace StandardScene.CarTypes +{ + class VDA5050TrackField + { + public float Speed = -1; + public bool Reverse = false; + public int ReverseDst = -1; + public float[] typeInfo = []; + } + + // VDA5050SiteField 已下沉至 Core(ArmCar.cs):ArmCar 引用它而 ArmCar 留 Core, + // 故拆 VDA dll 时该字段类保留于 Core,本文件不再定义(仅注释中曾引用)。 + + + [TemplateTrackCoderSettings( + priority = 0, + templateString = "agv.Go(${src.id},${dst.id},${track.id},${track.Speed},${track.Reverse || track.ReverseDst == dst.id},[${track.typeInfo}]);", + trackFields = typeof(VDA5050TrackField))] + + //[TemplateSiteCoderSettings( + // priority = 1, + // useVerb = "dst.DI41", + // templateString = "agv.Wait();agv.ChangeDI41Signal();agv.WaitAO3Signal();agv.Wait();agv.Sleep(${dst.SleepTime});", + // siteFields = typeof(VDA5050SiteField))] + + [CarType(Name = "VDA5050标准车")] + [I18N.DocumentTranslation(Name = "VDA5050 Car", locale = "en")] + public class VDA5050Car : Car + { + private static readonly MasterMQTTCommunication _mqttCommunication = new MasterMQTTCommunication(); + + [FieldMember] public string conf = ""; + + [FieldMember] public string SerialNumber = ""; + + /// + /// Total length of base routes sent from master control to AGV. + /// + [FieldMember] public float BaseLength = 5000; + + /// + /// Total length of horizon routes sent from mater control to AGV. + /// + [FieldMember] public float HorizonLength = 5000; + + private string _connectionStatus = "Offline"; // Default to "Offline" + private const string OrderTopic = "vda5050/orders"; + private VDA5050Interface currentAgv; + HttpClient hc = new HttpClient(); + + public bool IsPaused = false; + public int AO3 = 0; + + // Property for connection status + public string ConnectionStatus + { + get => _connectionStatus; + set + { + _connectionStatus = value; + + // Update lstatus based on the connection status + if (_connectionStatus == "ONLINE") + { + lstatus = "Online"; + } + else if (_connectionStatus == "OFFLINE") + { + lstatus = "Offline"; + } + else if (_connectionStatus == "CONNECTIONBROKEN") + { + lstatus = "Connection Broken"; + } + } + } + + public static async Task Create() + { + return new VDA5050Car() + { + lstatus = "Not Connected", + address = "127.0.0.1", + name = $"VDA5050标准车", + haveCoordination = true, + }; + } + + [JsonIgnore]public bool Listened = false; + public override void keepAlive() + { + // MasterMQTTCommunication _mqttCommunication = new MasterMQTTCommunication(); + + // _mqttCommunication.SubscribeTo(UpdateState,"vda5050/state").GetAwaiter().GetResult(); + // _mqttCommunication.SubscribeTo(UpdatePosition, "vda5050/visualization").GetAwaiter().GetResult(); + // var test = new MasterControlMQTTTest(); + // _mqttCommunication.TestPublishTo(); + // if(ConnectionStatus == "Online") + // _mqttCommunication.SubscribeToVisualizationTopic(); + if (!Listened) + { + SetupListeners(); + Listened = true; + } + // StartStateProcessing(); + // SetupInstActionListeners(); + lock(RouteCache) ProcessCacheAndSendOrderMessage(); + + //GetVDA5050StateFromC(); + // else Diagnosis.Post(" WARNING!! AGV is offline. Orders will not be sent"); + } + + public async Task GetVDA5050StateFromC() + { + try + { + //string jsonResponse1 = await hc.GetStringAsync($"http://{this.address}:8008/getStat"); + //var data1 = JsonConvert.DeserializeObject>(jsonResponse1); + string jsonResponse1 = await hc.GetStringAsync($"http://{this.address}:8008/getStat"); + var data1 = JsonConvert.DeserializeObject>(jsonResponse1); + if (data1.ContainsKey("AO3")) + { + string AO3Str = data1["AO3"]; + AO3 = int.Parse(AO3Str); + } + else Console.WriteLine("AO3 key not found in the response."); + } + catch (Exception ex) + { + Diagnosis.Log($"GetVDA5050StateFromC 失败: {ex.Message}", "VDA5050", true); + } + } + + // public override Task actualSendScript(string script) + // { + // var tsk = new Task(() => + // { + // SelfEvaluating(new VDA5050Interface(id), script); + // return null; + // }); + // tsk.Start(); + // return tsk; + // } + public bool running = false; + public override async Task actualSendScript(string script) + { + script += "\nagv.Wait(1);\n"; + Diagnosis.Log($"{script}", "script", true); + if (running) + throw new Exception($"dummy car {id} already running script"); + running = true; + + try + { + route = new int[0]; + AppendDebug($"VDA5050 car {id} use jint for simulation"); + lock(RouteCache)currentAgv = new VDA5050Interface(id); + var finish = false; + var tcs = new TaskCompletionSource(); + new Thread(() => { + try + { + Diagnosis.Log($"start evaluate","script",true); + SelfEvaluating(currentAgv, script); + Diagnosis.Log($"end evaluate", "script", true); + tcs.SetResult(1); + finish = true; + } + catch (Exception ex) + { + tcs.SetException(ex); + } + } + ) + { Name = $"eva_{name}({id}):{status.programs.now.name}" }.Start(); + async void monitor() + { + await Task.Run(() => + { + while (true) + { + if (status.holdingLocks.Length > 0 && status.holdingLocks.Last() == GetLastSite() || finish) + { + Diagnosis.Log($"{script} {status.holdingLocks.Last()} {GetLastSite()} {finish}","script",true); + tcs.SetResult(1); + break; + } + Thread.Sleep(50); + } + }); + } + + // monitor(); + await tcs.Task; + // await currentAgv.WaitAsync(); + + Console.WriteLine($"{name}({id}) self evaluating script completed"); + } + catch (Exception ex) + { + AppendDebug($"simulation error:{ExceptionFormatter.FormatEx(ex)}"); + Console.WriteLine($"* {id} evaluating script failed, ex:{ExceptionFormatter.FormatEx(ex)}"); + running = false; + throw; + } + + running = false; + } + // public bool Restarting = false; + private void ProcessCacheAndSendOrderMessage() + { + try + { + int currentBase; + bool generateNewOrder = false; + + lock (RouteCache) + { + Console.WriteLine("RouteCache.Count: " + RouteCache.Count); + if (RouteCache.Count==0) + { + // Diagnosis.Post($"RouteCache.Count :{0}"); + return; + }; + lock (_receivedLastConfirmedRoute) + { + Console.WriteLine("_receivedOrderId: " + _receivedOrderId + " OrderId: " + OrderId); + Console.WriteLine(_receivedOrderId == OrderId); + if (_receivedOrderId == OrderId) + { + if (_receivedLastConfirmedRoute.Count == 0) + { + if (RouteCache.Count>0 && _receivedLastNodeSequenceId == RouteCache.Last().Item.sequenceId) + _toTraverseSequenceId = RouteCache.Count; + else + { + _toTraverseSequenceId = _receivedLastNodeSequenceId; + // _toTraverseSequenceId = 0; + } + } + else _toTraverseSequenceId = (int)_receivedLastConfirmedRoute[0].sequenceId; + + Console.WriteLine("_receivedLastConfirmedRoute.Count: " + _receivedLastConfirmedRoute.Count); + Console.WriteLine("_toTraverseSequenceId: " + _toTraverseSequenceId); + for (var i = 0; i < _toTraverseSequenceId; ++i)//完成的路径,节点 + RouteCache[i].State = VDA5050Segment.SegState.Executed; + + foreach (var seg in RouteCache.Where(seg => + seg.State == VDA5050Segment.SegState.Executed)) + { + var shouldTriggerFinish = false; + + if (seg.Item.sequenceId == RouteCache.Count - 1) shouldTriggerFinish = true; + else if (seg.IsNode() && !seg.FinishTriggered && seg.Item.sequenceId + 1 + rr.State == VDA5050Segment.SegState.BaseSending || + rr.State == VDA5050Segment.SegState.BaseAcknowledged||rr.State == VDA5050Segment.SegState.Executed); + + var accumulatedHorizon = 0f; + for (var currentHorizon = currentBase + 1; currentHorizon < RouteCache.Count; ++currentHorizon) + { + RouteCache[currentHorizon].State = VDA5050Segment.SegState.HorizonSending; + + if (RouteCache[currentHorizon].IsNode()) continue; + accumulatedHorizon += RouteCache[currentHorizon].GetTrackLength(); + if (accumulatedHorizon >= HorizonLength) break; + } + + foreach (var item in _receivedLastConfirmedRoute) + { + if (item.released) continue; + + if (RouteCache[(int)item.sequenceId].State == + VDA5050Segment.SegState.HorizonSending) + RouteCache[(int)item.sequenceId].State = + VDA5050Segment.SegState.HorizonAcknowledged; + } + } + + if (currentBase > _lastBaseNodeSequenceId) + { + Diagnosis.Log($"\n{RouteCache.Display()}", "Interface", true); + Diagnosis.Log($"lastBase:{_lastBaseNodeSequenceId} curBase:{currentBase}","Interface",true); + _taskUpdateId++; + generateNewOrder = true; + } + } + + RouteCacheViewer?.UpdateText($"{DateTime.Now:HH:mm:ss-fff}\n\n{RouteCache.Display()}"); + + void PrintOrder(orderMessage om) + { + Diagnosis.Post($"order{om.orderId}-{om.orderUpdateId}:\n" + + $"nodes: {string.Join(" ", om.nodes.Select(nn => $"{nn.nodeId}({nn.released})"))}\n" + + $"edges: {string.Join(" ", om.edges.Select(ee => $"{ee.edgeId}({ee.released})"))}", + "orders", true); + } + var startTime = DateTime.Now; + if (generateNewOrder) + { + var activeItems = RouteCache.Skip(_lastBaseNodeSequenceId) + .Where(rr => rr.State != VDA5050Segment.SegState.Waiting).Select(rr => rr.Item).ToList(); + + var newOrder = new orderMessage() + { + orderId = OrderId, + orderUpdateId = (uint)_taskUpdateId, + nodes = activeItems.OfType().ToArray(), + edges = activeItems.OfType().ToArray() + }; + var newContent = JsonConvert.SerializeObject(newOrder, Formatting.Indented); + // Diagnosis.Post($"add order:", "orders", true); + // PrintOrder(newOrder); + _orderList.Add((newContent, DateTime.MinValue)); + startTime = DateTime.Now; + } + + _lastBaseNodeSequenceId = currentBase; + + Console.WriteLine("_orderList.Count: " + _orderList.Count); + if (_orderList.Count == 0) return; + + var pendingOrder = _orderList[0]; + if ((DateTime.Now - pendingOrder.SendTime).TotalSeconds < 0.5) return; + var (content, _) = pendingOrder; + var order = JsonConvert.DeserializeObject(content); + + var acknowledged = true; + lock (RouteCache) + { + // if (generateNewOrder) Console.WriteLine($"~~~哈哈 get Lock ,interval:{(DateTime.Now - startTime).TotalSeconds}s"); + foreach (var item in order.nodes) + { + var state = RouteCache[(int)item.sequenceId].State; + Diagnosis.Post($"node: {item.nodeId}({item.sequenceId}), {state}"); + if (item.released && state != VDA5050Segment.SegState.BaseAcknowledged && + state != VDA5050Segment.SegState.Executed) acknowledged = false; + if (!item.released && state != VDA5050Segment.SegState.HorizonAcknowledged && + state != VDA5050Segment.SegState.BaseSending) acknowledged = false; + } + foreach (var item in order.edges) + { + var state = RouteCache[(int)item.sequenceId].State; + Diagnosis.Post($"edge: {item.edgeId}({item.sequenceId}), {state}"); + if (item.released && state != VDA5050Segment.SegState.BaseAcknowledged && + state != VDA5050Segment.SegState.Executed) acknowledged = false; + if (!item.released && state != VDA5050Segment.SegState.HorizonAcknowledged && + state != VDA5050Segment.SegState.BaseSending) acknowledged = false; + } + } + + if (acknowledged) _orderList.RemoveAt(0); + else + { + //Diagnosis.Post($"order-{order.orderUpdateId} resend"); + + Diagnosis.Post("-------Sending order to AGV"); + PrintOrder(order); + _mqttCommunication.PublishTo(content).GetAwaiter().GetResult(); + // Post("order", content); + + _orderList[0] = (content, DateTime.Now);//todo 这里可能会有时间差?车端还没反应好(或者处理对不上了),在发了一次? + } + } + catch (Exception ex) + { + // 打印异常信息和堆栈跟踪,帮助定位报错位置 + Console.WriteLine("ProcessCacheAndSendOrderMessage 发生异常:"); + Console.WriteLine("异常信息:" + ex.Message); + Console.WriteLine("堆栈跟踪:" + ex.StackTrace); + // throw; + } + + + } + + private int _lastBaseNodeSequenceId = -1; + + private List<(string Content, DateTime SendTime)> _orderList = new(); + + /// + /// Route state stored by master control. + /// + internal VDA5050SegmentsCache RouteCache = new(); + + public void VDAReset() + { + lock (RouteCache) + lock (_receivedLastConfirmedRoute) + { + RouteCache = new(); + _receivedLastNodeSequenceId = -1; + _toTraverseSequenceId = -1; + _receivedLastConfirmedRoute = []; + _lastBaseNodeSequenceId = -1; + TaskId = 0; + running = false; + _orderList = new(); + } + } + + internal class VDA5050SegmentsCache + { + public void Add(VDA5050Segment segment) + { + segment.Item.sequenceId = _sequenceId++; + _segments.Add(segment); + } + + public VDA5050Segment this[int index] + { + get => _segments[index]; + set => _segments[index] = value; + } + + public VDA5050Segment Last() + { + return _segments.Last(); + } + + public int FindLastIndex(Predicate func) + { + return _segments.FindLastIndex(func); + } + + public bool Any(Func func) + { + return _segments.Any(func); + } + + public IEnumerable Where(Func func) + { + return _segments.Where(func); + } + + public IEnumerable Skip(int count) + { + return _segments.Skip(count); + } + + public int Count => _segments.Count; + + public string Display() + { + return string.Join("\n", + _segments.Select(seg => + { + var id = ""; + if (seg.Item is node nn) id = nn.nodeId; + else if (seg.Item is edge ee) id = ee.edgeId; + return $"{seg.Item.sequenceId}\t{id}\t{seg.Item.GetType().Name}\t{seg.State}"; + })); + } + + private uint _sequenceId = 0; + + private List _segments = new(); + } + + private int _taskId; + + private int _taskUpdateId = -1; + + internal int TaskId + { + get => _taskId; + set + { + _taskUpdateId = -1; + _lastBaseNodeSequenceId = -1; + _taskId = value; + } + } + + internal string OrderId => $"order-{_taskId}"; + + internal uint OrderUpdateId => (uint)_taskUpdateId; + + /// + /// Route state stored by AGV. + /// + private List _receivedLastConfirmedRoute = []; + + private string _receivedOrderId = ""; + // Add these fields at the top of the VDA5050Car class (with your other field declarations) + private volatile stateMessage _latestStateMessage = null; + private CancellationTokenSource _stateProcessingCts; + + + private uint _receivedOrderUpdateId = 0; + + private int _receivedLastNodeSequenceId = -1; + + public void ReseData() + { + RouteCache = new(); + _receivedLastNodeSequenceId = -1; + _toTraverseSequenceId = -1; + _receivedLastConfirmedRoute = []; + _lastBaseNodeSequenceId = -1; + // TaskId = 0; + _orderList = new(); + } + + + private int _toTraverseSequenceId = -1; + + public int TotalStateMessageNumber = 0; + + public void UpdateState(stateMessage msg) + { + + // lock (RouteCache) + lock (_receivedLastConfirmedRoute) + { + var segments = new List(); + + int ii = 0, jj = 0; + while (ii < msg.edgeStates.Length && jj < msg.nodeStates.Length) + { + var edge = msg.edgeStates[ii]; + var node = msg.nodeStates[jj]; + var takeEdge = edge.sequenceId < node.sequenceId; + + if (takeEdge) + { + segments.Add(edge); + ii++; + } + else + { + segments.Add(node); + jj++; + } + } + for (var i = ii; i < msg.edgeStates.Length; ++i) segments.Add(msg.edgeStates[i]); + for (var j = jj; j < msg.nodeStates.Length; ++j) segments.Add(msg.nodeStates[j]); + + if (segments.Count > 1) + for (var i = 1; i < segments.Count; i++) + if (segments[i - 1].sequenceId + 1 != segments[i].sequenceId) + throw new Exception("stateMessage not continuous!"); + + _receivedOrderId = msg.orderId; + _receivedOrderUpdateId = msg.orderUpdatedId; + _receivedLastNodeSequenceId = (int)msg.lastNodeSequenceId; + _receivedLastConfirmedRoute = segments; + var s = $"{DateTime.Now:HH:mm:ss-fff}\n\n" + + $"{string.Join("\n", _receivedLastConfirmedRoute.Select(item => $"{(item is nodeState ? "*" + ((nodeState)item).nodeId : ((edgeState)item).edgeId)}\t{item.sequenceId}\t{item.released}"))}" + + $"\n_receivedLastNodeSequenceId:{_receivedLastNodeSequenceId}\n" + + $"{string.Join("\n",msg.errors.Select(e=>$"{e.errorType}:{e.errorLevel}"))}" + + $"{string.Join("\n",msg.actionStates.Select(a=>$"{a.actionDescription}:{a.actionStatus} {a.actionId}"))}"; + StateMessageViewer?.UpdateText(s); + // Diagnosis.Log(s,"stateMsg",true); + } + } + + public void UpdatePosition(visualizationMessage msg) + { + haveCoordination = true; + x = (float)msg.agvPosition.x; + y = (float)msg.agvPosition.y; + th = (float)(msg.agvPosition.theta / Math.PI * 180); + } + + /// + /// Called from the MQTT callback to store the latest state message. + /// + public void SetLatestState(stateMessage msg) + { + _latestStateMessage = msg; + } + + public void SetupListeners() + { + _mqttCommunication.SubsribeToConnectionTopic(); + //_mqttCommunication.SubsribeToFactSheetTopic(); + //_mqttCommunication.SubscribeToRegularState(); + _mqttCommunication.SubscribeToState(); + _mqttCommunication.SubscribeToVisualization(); + //_mqttCommunication.SubscribeToVisualization(); + } + + // public void SetupInstActionListeners() + // { + // InstanceActionPause(); + // InstanceActionResume(); + // InstanceActionCancel(); + // } + // todo: should not inherit form ClumsyCarStatus + public class VDA5050CarStatus : ClumsyCar.ClumsyCarStatus + { + + } + public override CarStatus status { get; set; } = new VDA5050CarStatus(); + + [MethodMember(Name = "Request fact sheet")] + public void InstantActionFactSheet() + { + var instantMsg = VDA5050Commons.CreateInstanceAction( + actionId: Guid.NewGuid().ToString(), + actionType: "factSheetRequest"); + _mqttCommunication.PublishInstantActions(JsonConvert.SerializeObject(instantMsg)); + } + + [MethodMember(Name = "Pause")] + public void InstanceActionPause() + { + var instantMsg = VDA5050Commons.CreateInstanceAction( + actionId: Guid.NewGuid().ToString(), + actionType: "startPause" + ); + + _mqttCommunication.PublishInstantActions(JsonConvert.SerializeObject(instantMsg)); + + + // Post("instanceAction", JsonConvert.SerializeObject(instanceMsg)); + } + [MethodMember(Name = "Resume")] + public void InstanceActionResume() + { + + var instantMsg = VDA5050Commons.CreateInstanceAction( + actionId: Guid.NewGuid().ToString(), + actionType: "stopPause" + ); + + _mqttCommunication.PublishInstantActions(JsonConvert.SerializeObject(instantMsg)); + + // Post("instanceAction", JsonConvert.SerializeObject(instanceMsg)); + + } + [MethodMember(Name = "Cancel")] + public void InstanceActionCancel() + { + + var instantMsg = VDA5050Commons.CreateInstanceAction( + actionId: Guid.NewGuid().ToString(), + actionType: "cancelOrder" + ); + _mqttCommunication.PublishInstantActions(JsonConvert.SerializeObject(instantMsg)); + + //_mqttCommunication.RestartClient(); + + //ForceStop(); + + + // Post("instanceAction", JsonConvert.SerializeObject(instanceMsg)); + } + + [MethodMember(Name = "显示RouteCache")] + public void DisplayRouteCache() + { + RouteCacheViewer = new TextViewer(); + RouteCacheViewer.Show(); + } + + [MethodMember(Name = "立即强制结束")] + public void ForceStop() + { + AppendDebug("Clumsy Restarted"); + NoSchedule(true); + siteID = -1; + VDAReset(); + Get("reset"); + Commons.DeleteTag(tags, "occupied"); + AppendDebug("restarting clumsy"); + AppendDebug( + "wait for any pending task to flush." + ); + status.programs.task = Task.CompletedTask; + + AppendDebug("Clumsy Restarted"); + NoSchedule(true); + siteID = -1; + Commons.DeleteTag(tags, "occupied"); + // Reset(); + } + + [MethodMember(Name = "新现场检修")] + public new void Repair() + { + AppendDebug("ui-repair"); + Diagnosis.Post($"Repair Car {this.name}({this.id})"); + NoSchedule(makeUnavailable: false); + siteID = -1; + base.tags.Clear(); + lstatus = "现场检修"; + } + [MethodMember(Name = "显示上报消息")] + public void DisplayLatestMessage() + { + StateMessageViewer = new TextViewer(); + StateMessageViewer.Show(); + } + + public TextViewer StateMessageViewer; + + public TextViewer RouteCacheViewer; + + public override void rightClickAction(float mouseX, float mouseY) + { + try + { + Site site1 = null; + float dist = float.MaxValue; + foreach (var site in SimpleLib.GetAllSites()) + { + var d = LessMath.dist(site.x, site.y, mouseX, mouseY); + if (d < dist) + { + dist = (float)d; + site1 = site; + } + } + + Console.WriteLine($"cart {id} goto {site1.id}"); + if (dist < 20) + { + _ = Task.Factory.StartNew(() => + { + var siteDst = site1; + if (siteID == -1) + { + dist = float.MaxValue; + foreach (var site in SimpleLib.GetAllSites()) + { + var d = LessMath.dist(site.x, site.y, x, y); + if (d < dist) + { + dist = (float)d; + site1 = site; + } + } + } + //else site1 = SimpleLib.GetSite(siteID); + else site1 = SimpleLib.GetSite(GetLastSite()); + + try + { + var plan = new SegmentPlan() { usingCar = this }; + plan.FindRoute(site1, siteDst); + // var code = $"{plan.Code()}; agv.Wait();"; + G.pushStatus($"向{name}({id})下发行走任务"); + Console.WriteLine($"right click, directs AGV{name}({id}) from {site1.id} to {siteDst.id}"); + tags.Add("occupied", "SimplyMove"); + tags.Add("dest", siteID.ToString()); + var tsk = plan.Compile("walk").Queue(false,false);//接续任务 + // var tsk = plan.Compile("walk").Queue(); + G.pushStatus($"AGV:{name}({id})开始执行任务"); + tsk.Wait(); + G.pushStatus($"AGV:{name}({id})执行任务完毕, siteID={siteDst.id}"); + siteID = siteDst.id; + tags.Remove("occupied"); + tags.Remove("dest"); + } + catch (Exception ex) + { + Console.WriteLine($"Go route exception:{ExceptionFormatter.FormatEx(ex)}"); + } + }); + } + } + catch + { + //... ignored + } + } + + private bool _running; + [MethodMember(Name = "测试")] + public async void Test() + { + _running = true; + var siteA = SimpleLib.GetAllSites().First(s => s.name == "A"); + var siteB = SimpleLib.GetAllSites().First(s => s.name == "B"); + while (_running) + { + var planA = new SegmentPlan() { usingCar = this }; + planA.FindRoute(SimpleLib.GetSite(GetLastSite()), siteA); + await planA.Compile("A").Queue(); + var planB = new SegmentPlan() { usingCar = this }; + planB.FindRoute(siteA, siteB); + await planB.Compile("B").Queue(); + Thread.Sleep(1000); + } + } + + [MethodMember(Name = "多点任务测试")] + public async void MultiPointTest() + { + _running = true; + var siteNumResult = InputBox.ShowDialog("请按顺序输入当前多点任务的站点id:"); + string sitesIDStr = InputBox.ResultValue; + Console.WriteLine("sitesIDStr: " + sitesIDStr); + int[] sitesID = Array.ConvertAll(sitesIDStr.Split(' '), int.Parse); + for (var i = 0; i < sitesID.Length; i++) + { + Console.WriteLine(sitesID[i]); + } + Site[] sites = new Site[sitesID.Length]; + SimpleLite.Point[] pts = new SimpleLite.Point[sitesID.Length]; + + //for (var i = 0; i < sitesID.Length; i++) + //{ + + //} + + for (var i = 0; i < sitesID.Length; i++) + { + Console.WriteLine("-------------------当前点为:" + sitesID[i]); + sites[i] = SimpleLib.GetSite(sitesID[i]); + Commons.AddOrUpdateSiteField(sites[i], "codeArrive", "agv.Wait();agv.ChangeDI41Signal();agv.WaitAO3Signal();agv.Wait();"); + var plan = new SegmentPlan() { usingCar = this }; + plan.FindRoute(SimpleLib.GetSite(GetLastSite()), sites[i]); + G.pushStatus($"下发行走任务from {GetLastSite()} to {sites[i]}"); + await plan.Compile($"plan").Queue(); + //Thread.Sleep(200); + Commons.DeleteSiteField(sites[i], "codeArrive"); + Console.WriteLine("-----------------------开始下一段任务"); + } + + //完成以上任务后返回待命点 + G.pushStatus($"返回待命点"); + var targetPlan = Commons.GetNearestPlan( + this, + site => + site.fields.ContainsKey("standby") + && site.fields["standby"] == "true" + ); + if (targetPlan != null) + { + Commons.GoSite(this, targetPlan.Destination, 1); + } + + } + + + [MethodMember(Name = "停止测试")] + public void Stop() + { + _running = false; + } + + + [MethodMember(Name = "测试修改DI41信号")] + public void ChangeDI41SignalTest() + { + try + { + Console.WriteLine("car address: " + this.address); + hc.GetStringAsync($"http://{this.address}:8008/setValue?FieldName=DI41&Value=True"); + Console.WriteLine("将DI41置为True"); + Thread.Sleep(1000); + hc.GetStringAsync($"http://{this.address}:8008/setValue?FieldName=DI41&Value=False"); + Console.WriteLine("1秒后将DI41置为False"); + } + catch + { + Console.WriteLine("错误"); + }; + + } + + [MethodMember(Name = "测试修改AO3信号")] + public void ChangeAO3SignalTest() + { + try + { + hc.GetStringAsync($"http://{this.address}:8008/setValue?FieldName=AO3&Value=1"); + //hc.GetStringAsync($"http://192.168.2.1:8008/setValue?FieldName=AO3&Value=1"); + Console.WriteLine("将AO3置为1"); + Thread.Sleep(1000); + hc.GetStringAsync($"http://{this.address}:8008/setValue?FieldName=AO3&Value=0"); + //hc.GetStringAsync($"http://192.168.2.1:8008/setValue?FieldName=AO3&Value=0"); + Console.WriteLine("1秒后将AO3置为0"); + } + catch + { + Console.WriteLine("错误"); + }; + } + + [MethodMember(Name = "返回待命点")] + public void GoStandBySite() + { + try + { + if (this != null) + { + var carGroup = this.fields.TryGetValue("group", out var value) + ? value + : "all"; + var targetPlan = Commons.GetNearestPlan( + this, + site => + site.fields.ContainsKey("standby") + && carGroup.Equals( + site.fields.TryGetValue("group", out var value) ? value : "all" + ) + && site.fields["standby"] == "true" + ); + if (targetPlan != null) + { + Commons.GoSite(this, targetPlan.Destination, 1); + } + } + } + catch (Exception) + { + Console.WriteLine($"调用小车去待命点失败"); + } + } + + protected override void draw(Graphics eGraphics) + { + eGraphics.FillRectangle(Brushes.Gray, -160, -120, 320, 240); + eGraphics.DrawRectangle(Pens.White, -160, -120, 320, 240); + eGraphics.DrawLine(Pens.White, 0, -120, 160, 0); + eGraphics.DrawLine(Pens.White, 0, 120, 160, 0); + } + + + public void Post1(string api, string content, int port = 0) + { + } + + public void Post(string api, string content, int port = 0) + { + // Console.WriteLine($"Content of the order message in http: " + content); + var addresses = address.Split(',').OrderBy(p => ((VDA5050CarStatus)status).apiStat.Contains(p) ? 0 : 1); + foreach (var addr in addresses) + { + var call = $"{addr}:{(port != 0 ? port : GetConf("cport", 8008))}/{api}"; + try + { + GetHC().Post($"http://{call}", content); + } + catch + { + + } + } + } + public string Get(string api, int port = 0, bool outputIfFail = false) + { + var addrls = address.Split(','); + var exs = new string[addrls.Length]; + int j = 0; + foreach (var addr in addrls.OrderBy(p => ((ClumsyCarStatus)status).apiStat.Contains(p) ? 0 : 1)) + { + for (int i = 0; i < 8; ++i) + { + var call = $"{addr}:{(port != 0 ? port : GetConf("cport", 8008))}/{api}"; + try + { + ((ClumsyCarStatus)status).apiStat = $"[try{i}]{call}"; + var str = GetHC().GetString($"http://{call}"); + ((ClumsyCarStatus)status).apiStat = $"[fin{i}]{call}"; + // seqAPIFail = 0; + return str; + } + catch (Exception ex) + { + ((ClumsyCarStatus)status).apiStat = $"[bad{i}]{call}, ex={ex.Message}"; + exs[j] = ex.Message; + // seqAPIFail += 1; + } + } + + j += 1; + } + + var exstr = $"Get API {api} failed, addresses={address} all not available({string.Join(",", exs)})"; + AppendDebug(exstr); + throw new Exception(exstr); + } + private HttpClient2 GetHC() + { + lock (this) + return _carHc ??= new HttpClient2(TimeSpan.FromSeconds(GetTimeout()), this); + } + + private int GetTimeout() + { + var timeout = 5; + if (conf.Contains("timeout")) + timeout = Convert.ToInt32(conf.Substring(conf.IndexOf("timeout") + 8).Split(',')[0]); + return timeout; + } + + private T GetConf(string name, T defVal) + { + var timeout = defVal; + if (conf.Contains(name)) + { + var ll = conf.Split(',').Where(ss => ss.Contains(name)).ToList(); + if (ll.Count > 0) + { + var str = ll[0]; + return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(str.Split(':')[1]); + } + } + return timeout; + } + + // mqtt controller + + + private HttpClient2 _carHc; + } +} diff --git a/StandardScene.Protocol.VDA5050/VDACar/VDA5050Commons.cs b/StandardScene.Protocol.VDA5050/VDACar/VDA5050Commons.cs new file mode 100644 index 0000000..ef0703e --- /dev/null +++ b/StandardScene.Protocol.VDA5050/VDACar/VDA5050Commons.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CommonUsage.Protocols.VDA5050.Messages; +using CommonUsage.Protocols.VDA5050.Objects; + +namespace StandardScene.CarTypes +{ + public class VDA5050Commons + { + private static uint _headerId = 0; // Tracks the current header ID. + private static readonly string _protocolVersion = "1.0"; // Example protocol version. + private static readonly string _manufacturer = "YourManufacturer"; // Replace with your manufacturer. + private static readonly string _serialNumber = "test-01"; // Replace with your AGV's serial number. + + public static instanceAction CreateInstanceAction(string actionId, string actionType) + { + return new instanceAction + { + headerId = ++_headerId, // Increment header ID for each message. + timestamp = DateTime.UtcNow.ToString("o"), // ISO 8601 timestamp. + version = _protocolVersion, + manufacturer = _manufacturer, + serialNumber = _serialNumber, + actions = new List + { + new actionState + { + actionId = actionId, + actionType = actionType, + } + } + }; + } + + } +} diff --git a/StandardScene.Protocol.VDA5050/VDACar/VDA5050Helper.cs b/StandardScene.Protocol.VDA5050/VDACar/VDA5050Helper.cs new file mode 100644 index 0000000..9f847bf --- /dev/null +++ b/StandardScene.Protocol.VDA5050/VDACar/VDA5050Helper.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SimpleCore; +using SimpleCore.PropType; + +namespace StandardScene.CarTypes +{ + internal class VDA5050Helper + { + /// + /// If true, use Simple "id" field as VDA5050 id. + /// If false, use Simple "name" field as VDA5050 id. + /// + public static bool UseSimpleId = true; + + public static T FindByVDA5050Id(string vda5050Id) where T : Prop + { + Func testFunc = UseSimpleId ? prop => $"{prop.id}" == vda5050Id : prop => prop.name == vda5050Id; + + var matches = SimpleLib.Things().OfType().Where(prop => testFunc(prop)).ToList(); + if (matches.Count == 0) return null; + if (matches.Count > 1) + throw new Exception( + $"multiple Props have same name {vda5050Id}, matches: {string.Join(", ", matches.Select(pp => $"{pp.id}({pp.GetType()})"))}"); + return matches[0]; + } + + public static string GetVDA5050Id(int propId) + { + return UseSimpleId ? $"{propId}" : SimpleLib.Things().Where(pp => pp.id == propId).FirstOrDefault().name; + } + + public static string GetVDA5050Id(Prop prop) + { + return UseSimpleId ? $"{prop.id}" : prop.name; + } + + public static Site FindSiteByVDA5050Id(string vda5050Id) + { + return FindByVDA5050Id(vda5050Id); + } + + public static Track FindTrackByVDA5050Id(string vda5050Id) + { + return FindByVDA5050Id(vda5050Id); + } + + public static AbstractCar FindCarByVDA5050Id(string vda5050Id) + { + return FindByVDA5050Id(vda5050Id); + } + } +} diff --git a/StandardScene.Protocol.VDA5050/VDACar/VDA5050Interface.cs b/StandardScene.Protocol.VDA5050/VDACar/VDA5050Interface.cs new file mode 100644 index 0000000..20bb83e --- /dev/null +++ b/StandardScene.Protocol.VDA5050/VDACar/VDA5050Interface.cs @@ -0,0 +1,177 @@ +using SimpleCore.BasicProps; +using SimpleCore.Library; +using SimpleCore.Traffic; +using SimpleCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CommonUsage.Protocols.VDA5050.Objects; +using System.Security.Cryptography.X509Certificates; +using System.Numerics; +using System.Threading; +using System.Net; +using System.Net.Http; +using Nancy.Routing; +using Newtonsoft.Json; +using SimpleLite; +using System.Windows.Forms; + +namespace StandardScene.CarTypes +{ + internal class VDA5050Interface : AGVInterface + { + public static int TaskId = 0; + HttpClient hc = new HttpClient(); + + public override bool TryLock(int siteId) + { + if (!_car.status.usage.Get().scheduling) throw new Exception("abandoned"); + var siteId_temp = siteId; + var pendinglocks0 = _car.status.pendingLocks[0]; + if (siteId_temp != pendinglocks0) + { + throw new Exception("lock not according to sequence"); + } + return TrafficControl.TryLock(_car, siteId); + } + + public override void Leave(int siteId) + { + TrafficControl.Leave(_car, siteId); + } + + public VDA5050Interface(int id) + { + _car = (VDA5050Car)SimpleLib.GetCar(id); + // _car.RouteCache = new(); + // _car.TaskId = TaskId++; + if (_car.RouteCache.Count ==0||_car.RouteCache.Count>0&&_car.RouteCache.Last().State==VDA5050Segment.SegState.Executed)//接续任务 + { + // _car.RouteCache = new(); + // _car.ResetLastNodeSequenceId(); + _car.ReseData(); + _car.TaskId = TaskId; + TaskId += 1; + } + } + + public void Go(int srcId, int dstId, int trackId, int speed = -1, bool reverse = false, float[] trackTypeInfo = null) + { + VDA5050Segment src, dst, track; + lock (_car.RouteCache) + { + //Console.WriteLine("_car.RouteCache.Count: " + _car.RouteCache.Count); + if (_car.RouteCache.Count == 0) + { + src = new(new node() + { + nodeId = VDA5050Helper.GetVDA5050Id(srcId), + nodePosition = new() { x = SimpleLib.GetSite(srcId).x, y = SimpleLib.GetSite(srcId).y } + }, VDA5050Segment.SegState.Waiting); + _car.RouteCache.Add(src); + } + else src = _car.RouteCache.Last(); + + if (trackTypeInfo.Length != 0 && trackTypeInfo[0] == 3) + { + var controlPointNum = (int)trackTypeInfo[1]; + var controlPoints = new controlPoint[controlPointNum]; + for (int pt = 2; pt < controlPointNum * 2 + 2; pt += 2) + { + controlPoints[pt/2-1] = new controlPoint(trackTypeInfo[pt], trackTypeInfo[pt + 1], trackTypeInfo[1 + controlPointNum * 2 + pt / 2]); + } + var knotVector = new float[controlPointNum*2]; + for (int i = 0; i < controlPointNum; i++) + { + knotVector[i] = 0f; + knotVector[i + controlPointNum] = 1f; + } + var trajectory = new trajectory(){controlPoints = controlPoints,degree = controlPointNum,knotVector = knotVector }; + track = new(new edge() + { + edgeId = VDA5050Helper.GetVDA5050Id(trackId), + startNodeId = VDA5050Helper.GetVDA5050Id(srcId), + endNodeId = VDA5050Helper.GetVDA5050Id(dstId), + trajectory = trajectory, + orientation = reverse ? Math.PI : 0.0, + action = [new action() { actionDescription = $"{VDA5050Helper.GetVDA5050Id(trackId)}", actionId = Guid.NewGuid().ToString() }] + }, VDA5050Segment.SegState.Waiting); + } + else + { + track = new(new edge() + { + edgeId = VDA5050Helper.GetVDA5050Id(trackId), + startNodeId = VDA5050Helper.GetVDA5050Id(srcId), + endNodeId = VDA5050Helper.GetVDA5050Id(dstId), + trackTypeInfo = trackTypeInfo, + orientation = reverse ? Math.PI : 0.0, + action = [new action() { actionDescription = $"{VDA5050Helper.GetVDA5050Id(trackId)}", actionId = Guid.NewGuid().ToString() }] + }, VDA5050Segment.SegState.Waiting); + } + + dst = new(new node() + { + nodeId = VDA5050Helper.GetVDA5050Id(dstId), + nodePosition = new() { x = SimpleLib.GetSite(dstId).x, y = SimpleLib.GetSite(dstId).y }, + actions = [new action() { actionDescription = $"{VDA5050Helper.GetVDA5050Id(dstId)}", actionId = Guid.NewGuid().ToString() }] + }, VDA5050Segment.SegState.Waiting); + + _car.RouteCache.Add(track); + _car.RouteCache.Add(dst); + } + + Queue(async () => + { + while (!TryLock(dstId)) + await Task.Delay(10); + lock (_car.RouteCache) + { + if (src.Item.sequenceId == 0) + { + src.State = VDA5050Segment.SegState.BaseSending; + } + track.State = VDA5050Segment.SegState.BaseSending; + dst.State = VDA5050Segment.SegState.BaseSending; + src.Item.released = true; + track.Item.released = true; + dst.Item.released = true; + } + }, async () => + { + await src.FinishToken.Task; + Leave(srcId); + }); + } + + public void ChangeDI41Signal() + { + hc.GetStringAsync($"http://{_car.address}:8008/setValue?FieldName=DI41&Value=True"); + Diagnosis.Log("将DI41置为True", "VDA5050", true); + Thread.Sleep(1000); + hc.GetStringAsync($"http://{_car.address}:8008/setValue?FieldName=DI41&Value=False"); + Diagnosis.Log("1秒后将DI41置为False", "VDA5050", true); + } + + public void Sleep(int SleepTime) + { + Diagnosis.Log("小车开始Sleep" + SleepTime + "ms", "VDA5050", true); + Thread.Sleep(SleepTime); + Diagnosis.Log("小车结束Sleep", "VDA5050", true); + } + + public void WaitAO3Signal() + { + while(_car.AO3 == 0) + { + Thread.Sleep(200); + } + Diagnosis.Log($"AO3: " + _car.AO3, "VDA5050", true); + Diagnosis.Log("获取到AO3信号为1,继续下个任务", "VDA5050", true); + } + + private VDA5050Car _car; + } +} diff --git a/StandardScene.Protocol.VDA5050/VDACar/VDA5050Segment.cs b/StandardScene.Protocol.VDA5050/VDACar/VDA5050Segment.cs new file mode 100644 index 0000000..6f8705b --- /dev/null +++ b/StandardScene.Protocol.VDA5050/VDACar/VDA5050Segment.cs @@ -0,0 +1,77 @@ +using System; +using System.Threading.Tasks; +using CommonUsage.Protocols.VDA5050.Objects; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore; +using SimpleCore.Library; +using SimpleCore.PropType; + +namespace StandardScene.CarTypes +{ + /// + /// Intermediate data structure for linking VDA5050 nodes & edges with MDCS sites & tracks. + /// + internal class VDA5050Segment + { + public VDA5050Segment(sequenceItem item, SegState state) + { + Item = item; + State = state; + if (IsNode()) FinishToken = new TaskCompletionSource(); + } + + public enum SegState + { + Waiting, + BaseSending, + BaseAcknowledged, + HorizonSending, + HorizonAcknowledged, + Executed, + } + + public bool IsNode() + { + return Item is node || Item is nodeState; + } + + public float GetTrackLength() + { + var track = VDA5050Helper.FindTrackByVDA5050Id(((edge)Item).edgeId); + if (track is UITrack lineTrack) + { + var sa = SimpleLib.GetSite(track.siteA); + var sb = SimpleLib.GetSite(track.siteB); + return (float)LessMath.dist(sa.x, sa.y, sb.x, sb.y); + } + else if (track is UICircularArcTrack arcTrack) + { + throw new Exception("not implemented yet"); + } + else if (track is UIBezierTrack bezierTrack) + { + var sa = SimpleLib.GetSite(track.siteA); + var sb = SimpleLib.GetSite(track.siteB); + return (float)LessMath.dist(sa.x, sa.y, sb.x, sb.y); + + } + else if(track is UINurbsTrack) + { + var sa = SimpleLib.GetSite(track.siteA); + var sb = SimpleLib.GetSite(track.siteB); + return (float)LessMath.dist(sa.x, sa.y, sb.x, sb.y); + } + else throw new Exception("not implemented yet"); + } + + public sequenceItem Item = null; + + public SegState State; + + public bool FinishTriggered = false; + + public TaskCompletionSource FinishToken = null; + } +} diff --git a/StandardScene.Protocol.VDA5050/VDACar/VDA5050WebApi.cs b/StandardScene.Protocol.VDA5050/VDACar/VDA5050WebApi.cs new file mode 100644 index 0000000..78b3980 --- /dev/null +++ b/StandardScene.Protocol.VDA5050/VDACar/VDA5050WebApi.cs @@ -0,0 +1,130 @@ +//using System; +//using Nancy; +//using System.Linq; +//using CommonUsage.Protocols.VDA5050.Messages; +//using Nancy.Extensions; +//using Newtonsoft.Json; +//using SimpleCore; +//using SimpleCore.Library; +//using System.Collections.Concurrent; +//using System.Timers; + +//namespace StandardScene.CarTypes +//{ +// public class VDA5050WebApi : NancyModule +// { +// private static ConcurrentDictionary agvLastRequestTime = +// new ConcurrentDictionary(); + +// private static TimeSpan offlineThreshold = TimeSpan.FromSeconds(4); +// private static Timer agvStatusCheckTimer; + +// public VDA5050WebApi() +// { + +// Post["uagv/v2/manufacturer/SN/connection"] = param => +// { +// var bodyStr = Request.Body.AsString(); +// var msg = JsonConvert.DeserializeObject(bodyStr); +// var car = (VDA5050Car)SimpleLib.GetAllCars() +// .FirstOrDefault(cc => cc is VDA5050Car vdaCar && vdaCar.SerialNumber == msg.serialNumber); +// if (car == null) +// { +// Diagnosis.Post($"no car of serialNumber {msg.serialNumber}"); +// return ""; +// } +// Console.WriteLine($"Connection status---------------------{msg.connectionState}"); +// car.ConnectionStatus = msg.connectionState; +// return ""; +// }; + +// Post["/registration"] = param => +// { +// var bodyStr = Request.Body.AsString(); +// var msg = JsonConvert.DeserializeObject(bodyStr); + +// var car = (VDA5050Car)SimpleLib.GetAllCars() +// .FirstOrDefault(cc => cc is VDA5050Car vdaCar && vdaCar.SerialNumber == msg.serialNumber); +// if (car == null) +// { +// Diagnosis.Post($"no car of serialNumber {msg.serialNumber}"); +// return ""; +// } + +// return ""; +// }; + +// Post["/vda5050/state"] = param => +// { + +// var bodyStr = Request.Body.AsString(); +// var msg = JsonConvert.DeserializeObject(bodyStr); + +// var car = (VDA5050Car)SimpleLib.GetAllCars() +// .FirstOrDefault(cc => cc is VDA5050Car vdaCar && vdaCar.SerialNumber == msg.serialNumber); +// if (car == null) +// { +// Diagnosis.Post($"no car of serialNumber {msg.serialNumber}"); +// return ""; +// } + +// Console.WriteLine($"Is the car Paused: {msg.paused} ------------------"); +// if (msg.orderUpdatedId == car.OrderUpdateId) car.UpdateState(msg); +// else Diagnosis.Post($"stateMessage orderUpdateId does not match!"); +// car.UpdateState(msg); // todo: what if orderUpdateId does not arrive in order? + +// return ""; +// }; + +// Post["/vda5050/visualization"] = param => +// { + +// var bodyStr = Request.Body.AsString(); +// var msg = JsonConvert.DeserializeObject(bodyStr); + +// var car = (VDA5050Car)SimpleLib.GetAllCars() +// .FirstOrDefault(cc => cc is VDA5050Car vdaCar && vdaCar.SerialNumber == msg.serialNumber); +// if (car == null) +// { +// Diagnosis.Post($"no car of serialNumber {msg.serialNumber}"); +// return ""; +// } + +// car.UpdatePosition(msg); + +// return ""; +// }; +// } + +// private static void CheckAgvStatus(object sender, ElapsedEventArgs e) +// { +// var cars = SimpleLib.GetAllCars() +// .OfType(); // Assuming SimpleLib provides a way to get all cars + +// foreach (var car in cars) +// { +// if (agvLastRequestTime.TryGetValue(car.SerialNumber, out DateTime lastRequestTime)) +// { +// // Check if the time since the last request exceeds the offline threshold +// if ((DateTime.Now - lastRequestTime) > offlineThreshold) +// { +// if (car.ConnectionStatus == "Online") +// { +// car.ConnectionStatus = "Connection Broken"; +// Diagnosis.Post($"AGV {car.SerialNumber} is now offline (no requests received)."); +// } +// } +// } +// else +// { +// // If there’s no record of the last request, the AGV is considered offline +// if (car.ConnectionStatus == "Online") +// { +// car.Online = false; +// Diagnosis.Post($"AGV {car.SerialNumber} is disconnected unexpectedly."); +// } +// } +// } +// } +// } +//} diff --git a/StandardScene.QrLidar/Cad/SyncQrMap.cs b/StandardScene.QrLidar/Cad/SyncQrMap.cs new file mode 100644 index 0000000..2e378ba --- /dev/null +++ b/StandardScene.QrLidar/Cad/SyncQrMap.cs @@ -0,0 +1,49 @@ +using System; +using System.Linq; +using System.Windows.Forms; +using Newtonsoft.Json; +using SimpleCore; +using SimpleLite.CADTools; +using SimpleLite.RCS.CarTypes; +using StandardScene; +using StandardScene.Model; + +namespace StandardScene.QrLidar.Cad +{ + /// + /// 扫描全图带 tag 的站点生成二维码地图(码值 → 坐标/角度),写入 + /// 供 /api/QrMap 下发,并通知带 QrCar 标记的在线车辆刷新。 + /// 自 Core StandardCADTool.cs 迁入(scene.qrlidar 平台专属能力)。 + /// + [CADToolDescriptor(name = "同步二维码地图到小车")] + public class SyncQrMap : CADTool + { + public override async void Invoke() + { + var tagSites = SimpleLib.GetAllSites().Where(p => p.fields.ContainsKey("tag")); + ApiController.QrMap.Clear(); + foreach (var tagSite in tagSites) + { + var tag = int.Parse(tagSite.fields["tag"]); + var tagX = tagSite.x; + var tagY = tagSite.y; + var tagTh = tagSite.fields.TryGetValue("th", out var field) ? float.Parse(field) : 0f; + if (ApiController.QrMap.ContainsKey(tag)) + { + MessageBox.Show(($@"存在重复码值:{tag} 站点id为:{tagSite.id}")); + return; + } + + ApiController.QrMap[tag] = (tagX, tagY, tagTh); + } + + ApiController.QrMapJson = JsonConvert.SerializeObject(ApiController.QrMap); + var qrCars = SimpleLib.GetAllCars().Where(p => p.fields.ContainsKey("QrCar")); + foreach (var qrCar in qrCars) + { + if(Commons.GetVehicleStatus((Car)qrCar) is VehicleStatus.Normal or VehicleStatus.NeedInit) + ((ClumsyCar)qrCar).ImmediateCommand("pilot.GetUpdateQrMap()"); + } + } + } +} diff --git a/StandardScene.QrLidar/CarTypes/ArmCar.cs b/StandardScene.QrLidar/CarTypes/ArmCar.cs new file mode 100644 index 0000000..8d3c0dd --- /dev/null +++ b/StandardScene.QrLidar/CarTypes/ArmCar.cs @@ -0,0 +1,261 @@ +using LessokajiWeaverUtilities.Utilities; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.Library; +using SimpleCore.PropType; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace StandardScene.CarTypes +{ + class ArmCarSiteFields:KivaSiteFields + { + public bool putNeedTurn = false; + } + + class ArmCarTrackFields:KivaTrackFields + { + + } + + class ArmCarPlanFields:KivaPlanFields + { + public bool charge = false; + } + + // 自 VDA5050Car.cs 下沉至 Core:ArmCar 的 siteFields 引用它(见下方 [TemplateTrackCoderSettings])。 + // VDA5050 拆为独立 dll 后 ArmCar 留 Core,不能反依赖 VDA dll,故该字段类置于 Core。 + class VDA5050SiteField : BasicSiteFields + { + public bool DI41 = false; + public int SleepTime = 0; + public bool workPlace = false; + } + //[TemplateTrackCoderSettings( + // priority = 1, + // templateString = "agv.BasicGo(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id}," + + // "${track.id},${track.Speed},${track.Reverse||(track.ReverseDst==dst.id)}," + + // "${track.CarDirectionBias},${track.EnableCarAbsoluteDirection},${track.CarAbsoluteDirection},${track.typeInfo});", + // siteFields = typeof(KivaSiteFields), + // trackFields = typeof(KivaTrackFields), + // planFields = typeof(KivaPlanFields))] + //[TemplateSiteCoderSettings( + // priority = 5, + // useVerb = "plan.action=='fetch'&&plan.curSeg==plan.segN-1", + // blockVerb = "true", + // templateString = "agv.Wait();agv.Fetch(\"${dst.name}\");agv.Wait();", + // siteFields = typeof(ArmCarSiteFields), + // trackFields = typeof(ArmCarTrackFields), + // planFields = typeof(ArmCarPlanFields))] + //[TemplateSiteCoderSettings( + // priority = 5, + // useVerb = "plan.action=='put'&&plan.curSeg==plan.segN-1", + // blockVerb = "true", + // templateString = "agv.Wait();agv.Put(${dst.putNeedTurn},\"${dst.name}\");agv.Wait();", + // siteFields = typeof(ArmCarSiteFields), + // trackFields = typeof(ArmCarTrackFields), + // planFields = typeof(ArmCarPlanFields))] + //[TemplateSiteCoderSettings( + // priority = 5, + // useVerb = "plan.action=='putEmpty'&&plan.curSeg==plan.segN-1", + // blockVerb = "true", + // templateString = "agv.Wait();agv.PutEmpty(\"${dst.name}\");agv.Wait();", + // siteFields = typeof(ArmCarSiteFields), + // trackFields = typeof(ArmCarTrackFields), + // planFields = typeof(ArmCarPlanFields))] + [TemplateSiteCoderSettings( + priority = 5, + useVerb = "plan.action=='pickFull'&&plan.curSeg==plan.segN-1", + blockVerb = "true", + templateString = "agv.Wait();agv.PickFull(\"${dst.name}\");agv.Wait();", + siteFields = typeof(ArmCarSiteFields), + trackFields = typeof(ArmCarTrackFields), + planFields = typeof(ArmCarPlanFields))] + [TemplateSiteCoderSettings( + priority = 5, + useVerb = "plan.action=='pickEmpty'&&plan.curSeg==plan.segN-1", + blockVerb = "true", + templateString = "agv.Wait();agv.PickEmpty(\"${dst.name}\");agv.Wait();", + siteFields = typeof(ArmCarSiteFields), + trackFields = typeof(ArmCarTrackFields), + planFields = typeof(ArmCarPlanFields))] + [TemplateSiteCoderSettings( + priority = 5, + useVerb = "plan.action=='putFull'&&plan.curSeg==plan.segN-1", + blockVerb = "true", + templateString = "agv.Wait();agv.PutFull(\"${dst.name}\");agv.Wait();", + siteFields = typeof(ArmCarSiteFields), + trackFields = typeof(ArmCarTrackFields), + planFields = typeof(ArmCarPlanFields))] + [TemplateSiteCoderSettings( + priority = 5, + useVerb = "plan.action=='putEmpty'&&plan.curSeg==plan.segN-1", + blockVerb = "true", + templateString = "agv.Wait();agv.PutEmpty(\"${dst.name}\");agv.Wait();", + siteFields = typeof(ArmCarSiteFields), + trackFields = typeof(ArmCarTrackFields), + planFields = typeof(ArmCarPlanFields))] + [TemplateSiteCoderSettings( + priority = 5, + useVerb = "plan.action=='MoveArm'&&plan.curSeg==plan.segN-1", + blockVerb = "true", + templateString = "agv.Wait();agv.MoveArm(${dst.MoveDirection});agv.Wait();", + siteFields = typeof(ArmCarSiteFields), + trackFields = typeof(ArmCarTrackFields), + planFields = typeof(ArmCarPlanFields))] + [TemplateSiteCoderSettings( + priority = 5, + useVerb = "dst.name=='charge'", + templateString = "agv.Wait();agv.ControlChargePort(true);agv.Wait();", + siteFields = typeof(ArmCarSiteFields), + trackFields = typeof(ArmCarTrackFields), + planFields = typeof(ArmCarPlanFields))] + + [TemplateSiteCoderSettings( + priority = 5, + useVerb = "dst.name=='charge'&&plan.curSeg==0", + templateString = "agv.Wait();agv.ControlChargePort(false);", + siteFields = typeof(VDA5050SiteField))] + + [CarType(Name = "ArmCar")] + [I18N.DocumentTranslation(Name = "ArmCar", locale = "en")] + public class ArmCar : GhostCar + { + public static async Task Create() + { + var car = new ArmCar() + { + lstatus = "连接中", + address = "127.0.0.1", + name = $"Kiva", + haveCoordination = true, + speed = 0.3f, + }; + return car; + } + private const float DrawWidth = 950, DrawLength = 650; + private readonly Pen orientPen = new Pen(Color.White, 3); + private bool twinkle = false; + protected override void draw(Graphics eGraphics) + { + try + { + float scale = 1; + var lineCap = new AdjustableArrowCap(5, 5, true); + orientPen.CustomEndCap = lineCap; + orientPen.StartCap = LineCap.RoundAnchor; + var alarmLevel = Commons.GetCarStatus(this, "AlarmLevel"); + var soc = Commons.CarValue((Car)this, "Soc"); + var electricCurrent = Commons.CarValue((Car)this, "ElectricCurrent"); + var thresSpeed = Commons.CarValue(this, "ThresSpeed"); + LadderLogic.FlipFlop(ref twinkle, 500, true, false); + Rectangle destRect = new Rectangle( + (int)((int)(-DrawWidth / 2) * scale), + (int)((int)(-DrawLength / 2) * scale), + (int)((int)DrawWidth * scale), + (int)((int)DrawLength * scale) + ); + if (int.TryParse(alarmLevel, out var alarm) && alarm > 0) + { + eGraphics.FillRectangle(twinkle ? Brushes.DarkRed : Brushes.Green, destRect); + } + else if (alarmLevel == "-1" || this.siteID == -1) + eGraphics.FillRectangle(Brushes.LightSeaGreen, destRect); + else if (electricCurrent > 1) + eGraphics.FillRectangle(Brushes.YellowGreen, destRect); + else if (thresSpeed <= 0) + { + eGraphics.FillRectangle(twinkle ? Brushes.YellowGreen : Brushes.Green, destRect); + } + else if (soc < 25) + { + eGraphics.FillRectangle(twinkle ? Brushes.DarkRed : Brushes.LightSeaGreen, destRect); + } + else + eGraphics.FillRectangle(Brushes.Green, destRect); + + eGraphics.DrawEllipse(Pens.Yellow, -160, -160, 320, 320); + eGraphics.DrawLine(orientPen, 0, 0, 480, 0); + + } + catch (Exception e) + { + Diagnosis.Post("绘制小车异常" + ExceptionFormatter.FormatEx(e), "绘制小车异常", true); + } + } + + + public override string SetDisplayInfo() + { + try + { + var str = $"{name}({id})\n"; + status.enums.TryGetValue("ChassisMode", out var manual); + var ms = manual == "0" ? "自动" : "手动"; + status.enums.TryGetValue("Soc", out var soc); + str = $"{str}{ms}|soc:{soc}"; + var alarmStr = Commons.GetCarStatus(this, "AlarmInfo"); + if (alarmStr != "") + str = $"{str}|{alarmStr}"; + //if (status.enums.TryGetValue("mAlarm", out var mAlarm) && mAlarm != "") + // str = $"{str}|M:{mAlarm}"; + //var hasC = status.enums.TryGetValue("cAlarm", out var cAlarm) && cAlarm != ""; + //if (mAlarm != "" && hasC) + // str = $"{str}|"; + //if (hasC) + // str = $"{str}C:{cAlarm}"; + //var L_step = status.enums.TryGetValue("ls", out var ls) && ls != ""; + //if (L_step) + //{ + // str = $"{str}|ls:{ls}"; + //} + if (status.enums.TryGetValue("ElectricCurrent", out var electricCurrent) && + !string.IsNullOrEmpty(electricCurrent)) + { + var charging = float.Parse(electricCurrent) * 0.01f > 0 ? "充电中" : "未充电"; + str = $"{str}|charge:{charging}"; + } + + var thresSpeed = Commons.CarValue(this, "ThresSpeed"); + str = $"{str}{((thresSpeed <= 0) ? "|避障触发" : "")}"; + return str; + } + catch (Exception e) + { + Console.WriteLine(e); + return "bad car"; + } + } + + [MethodMember(Name = "进入小车远程", Description = "进入小车远程桌面")] + [I18N.DocumentTranslation(Name = "Open remote desktop", Description = "Open the car's remote desktop", locale = "en")] + public void Mstsc() + { + var ip = this.address; + // 启动mstsc并传递IP地址 + Process.Start( + new ProcessStartInfo + { + FileName = "mstsc", + Arguments = $"/v:{ip}", + UseShellExecute = false, + CreateNoWindow = true + } + ); + } + + + } +} diff --git a/StandardScene.QrLidar/CarTypes/DualLiftingCar.cs b/StandardScene.QrLidar/CarTypes/DualLiftingCar.cs new file mode 100644 index 0000000..8bdaa1e --- /dev/null +++ b/StandardScene.QrLidar/CarTypes/DualLiftingCar.cs @@ -0,0 +1,105 @@ +using LessokajiWeaverUtilities.Utilities; +using Newtonsoft.Json; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.PropType; +using System; +using System.Diagnostics; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace StandardScene.CarTypes +{ + [CarType(Name = "锂电双举升")] + [I18N.DocumentTranslation(Name = "Dual Lift Car", locale = "en")] + public class DualLiftingCar : GhostCar + { + public static async Task Create() + { + var car = new DualLiftingCar() + { + lstatus = "连接中", + address = "127.0.0.1", + name = "锂电双举升" + }; + return car; + } + public override string SetDisplayInfo() + { + try + { + var str = $"{name}({id})\n"; + status.enums.TryGetValue("ChassisMode", out var manual); + var ms = manual == "0" ? "自动" : "手动"; + status.enums.TryGetValue("Soc", out var soc); + str = $"{str}{ms}|soc:{soc}"; + var alarmStr = Commons.GetCarStatus(this, "AlarmInfo"); + if (alarmStr != "") + str = $"{str}|{alarmStr}"; + if (status.enums.TryGetValue("ElectricCurrent", out var electricCurrent) && + !string.IsNullOrEmpty(electricCurrent)) + { + var charging = float.Parse(electricCurrent) * 0.01f > 0 ? "充电中" : "未充电"; + str = $"{str}|charge:{charging}"; + } + + var thresSpeed = Commons.CarValue(this, "ThresSpeed"); + str = $"{str}{((thresSpeed <= 0) ? "|避障触发" : "")}"; + return str; + } + catch (Exception e) + { + Console.WriteLine(e); + return "bad car"; + } + } + + [MethodMember(Name = "进入小车远程", Description = "进入小车远程桌面")] + [I18N.DocumentTranslation(Name = "Open remote desktop", Description = "Open the car's remote desktop", locale = "en")] + public void Mstsc() + { + var ip = this.address; + // 启动mstsc并传递IP地址 + Process.Start( + new ProcessStartInfo + { + FileName = "mstsc", + Arguments = $"/v:{ip}", + UseShellExecute = false, + CreateNoWindow = true + } + ); + } + + private bool _running; + [MethodMember(Name = "测试")] + [I18N.DocumentTranslation(Name = "Start test", locale = "en")] + public async void Test() + { + _running = true; + var siteA = SimpleLib.GetAllSites().First(s => s.name == "A"); + var siteB = SimpleLib.GetAllSites().First(s => s.name == "B"); + while (_running) + { + var planA = new SegmentPlan() { usingCar = this }; + planA.FindRoute(SimpleLib.GetSite(GetLastSite()), siteA); + await planA.Compile("A").Queue(); + var planB = new SegmentPlan(){usingCar = this }; + planB.FindRoute(siteA, siteB); + await planB.Compile("B").Queue(); + Thread.Sleep(1000); + } + } + + [MethodMember(Name = "停止测试")] + [I18N.DocumentTranslation(Name = "Stop test", locale = "en")] + public void Stop() + { + _running = false; + } + } +} diff --git a/StandardScene.QrLidar/CarTypes/Forklift.cs b/StandardScene.QrLidar/CarTypes/Forklift.cs new file mode 100644 index 0000000..36511d1 --- /dev/null +++ b/StandardScene.QrLidar/CarTypes/Forklift.cs @@ -0,0 +1,435 @@ +using LessokajiWeaverUtilities.Utilities; +using SimpleLite; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleLite.CADTools; +using SimpleLite.Props; +using SimpleLite.UI; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.Library; +using SimpleCore.PropType; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Net.Http; +using System.Numerics; +using System.Threading.Tasks; +using StandardScene.Model; +using StandardScene.Coders; + +namespace StandardScene.CarTypes +{ + class ForkliftSiteFields : BasicSiteFields + { + public int AngleTarget = 0; + public bool Turn = false; + + public float FetchSpeed = 0; + public int FetchLidarArea = -2; + public int FetchIOArea = -1; + public float FetchBlindMoveDist = 0; + public float FetchLiftDownTarget = -1; + public float FetchLiftUpTarget = -1; + public bool FetchUseDetector = false; + public int FetchDetector = 0; + public float FetchDetectWidth = -1; + public float FetchDetectDepth = -1; + public bool FetchLeaveSrcEarly = false; + public float FetchShieldObstacleDist = -1; + + public float PutSpeed = 0; + public int PutLidarArea = -1; + public int PutIOArea = -1; + public float PutBlindMoveDist = 0; + public float PutLiftDownTarget = -1; + public float PutLiftUpTarget = -1; + public bool PutUseDetector = false; + public int PutDetector = 0; + public float PutDetectWidth = -1; + public float PutDetectDepth = -1; + public bool PutLeaveSrcEarly = false; + public float PutShieldObstacleDist = -1; + + public float LeaveShelfSpeed = 0; + public int LeaveShelfLidarArea = -1; + public int LeaveShelfIOArea = -1; + public float LeaveShelfBlindMoveDist = 0; + public float LeaveShelfLiftDownTarget = -1; + public float LeaveShelfRecoveryObstacleDist = -1; + } + + class ForkliftTrackFields : BasicTrackFields + { + public int ManeuverDir = 0; + public int ForwardDst = 0; + public int ForwardObChooseDst = -2; + public float BlindMoveDist = 0; + public bool UseDetector = false; + public int DetectorMode = -1; + public float DetectWidth = -1; + public float DetectDepth = -1; + public bool LeaveSrcEarly = false; + public float ShieldObstacleDist = -1; + } + + class ForkliftPlanFields : BasicPlanFields + { + public bool reverse = false; + public int level = 0; + } + + + // 通用避障/IO coder 已抽离为 StandardScene.Coders.*(见类前 [ProgramTrackCoderSettings] 引用) + + // 避障区尺寸(2参)切换 coder 已抽离为 StandardScene.Coders.AvoidanceParamLWCoder(方案 B;见下方 [ProgramTrackCoderSettings] 引用) + [ProgramTrackCoderSettings(priority = 20, program = typeof(AvoidanceParamLWCoder))] + + //plan.SegN 是指 当前路径所有点线的数量 + //plan.SegN-2 就是终点倒数第二个站点 + [TemplateTrackCoderSettings( + priority = 20, + useVerb = "plan.action=='fetch' && dst.Shelf", + templateString = "agv.Wait();" + + "agv.Fetch(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id}," + + "${dst.FetchSpeed},${dst.FetchLidarArea},${dst.FetchIOArea}," + + "${dst.FetchBlindMoveDist},${dst.FetchLiftDownTarget},${dst.FetchLiftUpTarget}," + + "${dst.FetchUseDetector},${dst.FetchDetector},${dst.FetchDetectWidth},${dst.FetchDetectDepth}," + + "${plan.CarLength},${plan.CarWidth},${dst.FetchLeaveSrcEarly},${dst.FetchShieldObstacleDist});" + + "agv.Wait();", + blockVerb = "true", + siteFields = typeof(ForkliftSiteFields), + trackFields = typeof(ForkliftTrackFields), + planFields = typeof(ForkliftPlanFields))] + + [TemplateTrackCoderSettings( + priority = 20, + useVerb = "plan.action=='put' && dst.Shelf", + templateString = "agv.Wait();" + + "agv.Put(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id}," + + "${dst.PutSpeed},${dst.PutLidarArea},${dst.PutIOArea}," + + "${dst.PutBlindMoveDist},${dst.PutLiftDownTarget},${dst.PutLiftUpTarget}," + + "${dst.PutUseDetector},${dst.PutDetector}," + + "${dst.PutDetectWidth},${dst.PutDetectDepth},${dst.PutLeaveSrcEarly},${dst.PutShieldObstacleDist});" + + "agv.Wait();", + blockVerb = "true", + siteFields = typeof(ForkliftSiteFields), + trackFields = typeof(ForkliftTrackFields), + planFields = typeof(ForkliftPlanFields))] + + [TemplateTrackCoderSettings( + priority = 22, + useVerb = "src.Shelf", + templateString = "agv.LeaveShelf(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id}," + + "${src.LeaveShelfSpeed},${src.LeaveShelfLidarArea},${src.LeaveShelfIOArea}," + + "${src.LeaveShelfBlindMoveDist},${src.LeaveShelfLiftDownTarget},${src.LeaveShelfRecoveryObstacleDist},);" + + "agv.Wait();", + blockVerb = "true", + siteFields = typeof(ForkliftSiteFields), + trackFields = typeof(ForkliftTrackFields), + planFields = typeof(ForkliftPlanFields))] + + [TemplateSiteCoderSettings( + priority = 25, + useVerb = "plan.action=='fetch'&&plan.segN==1&&dst.Shelf", + templateString = + "agv.FetchInPlace(${dst.FetchLiftUpTarget},${plan.CarLength},${plan.CarWidth});" + + "agv.Wait();", + blockVerb = "true", + siteFields = typeof(ForkliftSiteFields), + trackFields = typeof(ForkliftTrackFields), + planFields = typeof(ForkliftPlanFields))] + // 纠偏阈值 coder 已抽离为 StandardScene.Coders.TrackingErrThreshCoder + + [ProgramTrackCoderSettings(priority = 20, program = typeof(LidarAreaSwitchCoder))] + [ProgramTrackCoderSettings(priority = 20, program = typeof(IoAreaSwitchCoder))] + [ProgramTrackCoderSettings(priority = 20, program = typeof(TrackingErrThreshCoder))] + [CarType(Name = "叉车", editor = typeof(Forklift))] + [I18N.DocumentTranslation(Name = "ForkLift", locale = "en")] + [EnvelopConfig(centerX = -900, centerY = 0, lengthX = 3000, lengthY = 1500)] + public class Forklift : GhostCar + { + public static async Task Create() // boilerplate + { + var fl = new Forklift() + { + lstatus = "连接中", + address = "127.0.0.1", + name = $"叉车", + haveCoordination = true, + speed = 1, + }; + + return fl; + } + + private const float DrawWidth = 1100, DrawLength = 600, DrawForkLen = 1532; + private readonly Pen _orientPen = new Pen(Color.White, 3); + + protected override void draw(Graphics eGraphics) + { + var lineCap = new AdjustableArrowCap(6, 6, true); + _orientPen.CustomEndCap = lineCap; + _orientPen.StartCap = LineCap.RoundAnchor; + + eGraphics.FillRectangle(Brushes.DimGray, -DrawLength / 2, -DrawWidth / 2, DrawForkLen, 200); + eGraphics.FillRectangle(Brushes.DimGray, -DrawLength / 2, DrawWidth / 2 - 200, DrawForkLen, 200); + eGraphics.FillRectangle(Brushes.Gray, DrawForkLen - DrawLength / 2, -DrawWidth / 2, DrawLength, DrawWidth); + + eGraphics.DrawEllipse(Pens.White, -160, -160, 320, 320); + eGraphics.DrawLine(_orientPen, 0, 0, 480, 0); + } + [MethodMember(Name = "进入小车远程", Description = "进入小车远程桌面")] + [I18N.DocumentTranslation(Name = "Open remote desktop", Description = "Open the car's remote desktop", locale = "en")] + public void Mstsc() + { + var ip = this.address; + // 启动mstsc并传递IP地址 + Process.Start( + new ProcessStartInfo + { + FileName = "mstsc", + Arguments = $"/v:{ip}", + UseShellExecute = false, + CreateNoWindow = true + } + ); + } + public override string SetDisplayInfo() + { + try + { + var str = $"{name}({id})\n"; + status.enums.TryGetValue("ChassisMode", out var manual); + var ms = manual == "0" ? "自动" : "手动"; + status.enums.TryGetValue("Soc", out var soc); + str = $"{str}{ms}|soc:{soc}"; + var alarmStr = Commons.GetCarStatus(this, "AlarmInfo"); + if (alarmStr != "") + str = $"{str}|{alarmStr}"; + if (status.enums.TryGetValue("ElectricCurrent", out var electricCurrent) && + !string.IsNullOrEmpty(electricCurrent)) + { + var charging = float.Parse(electricCurrent) * 0.01f > 0 ? "充电中" : "未充电"; + str = $"{str}|charge:{charging}"; + } + + var thresSpeed = Commons.CarValue(this, "ThresSpeed"); + str = $"{str}{((thresSpeed <= 0) ? "|避障触发" : "")}"; + return str; + } + catch (Exception e) + { + Console.WriteLine(e); + return "bad car"; + } + } + + HttpClient hc = new HttpClient() { Timeout = TimeSpan.FromMilliseconds(300) }; + [MethodMember(Name = "小车暂停", Description = "小车暂停")] + [I18N.DocumentTranslation(Name = "EmergencyStop", Description = "EmergencyStop", locale = "en")] + public void EmergencyStop(string reason) + { + Diagnosis.Post($"car{name}:EmergencyStop"); + hc.GetStringAsync($"http://{address}:8008/setValue?FieldName=ISRelease&Value=1"); + } + + [MethodMember(Name = "小车暂停恢复", Description = "小车暂停恢复")] + [I18N.DocumentTranslation(Name = "EmergencyRelease", Description = "EmergencyRelease", locale = "en")] + public void EmergencyRelease() + { + Diagnosis.Post($"car{name}:EmergencyStop release"); + hc.GetStringAsync($"http://{address}:8008/setValue?FieldName=ISRelease&Value=0"); + } + [MethodMember(Name = "小车重启C", Description = "小车重启Clumsy")] + [I18N.DocumentTranslation(Name = "ResetClumsy", Description = "ResetClumsy", locale = "en")] + public void ResetClumsy() + { + Diagnosis.Post($"car{name}-{address}:ResetClumsy"); + hc.GetStringAsync($"http://{address}:8008/reset"); + } + + [MethodMember(Name = "显示车辆监控", Description = "打开车辆状态监控窗口")] + public void ShowVehicleMonitor() + { + VehicleMonitor.ShowMonitor(); + } + public void newReset(int resetId = 0) + { + //if (!status.programs.task.IsCompleted && + // MessageBox.Show($"小车{name}({id})当前有任务:{status.programs.printStatus()},确认初始化?", "确认", + // MessageBoxButtons.YesNo) == DialogResult.No) return; + try + { + if (GetLastSite() != -1 && Commons.GetVehicleStatus((Car)this) != VehicleStatus.NeedInit) + { + Diagnosis.Post($"Car{id}初始化失败:已初始化或车辆不在线"); + return; + } + var debug = "ui invoke reset. "; + + // todo: 找点和线段的最近点。。。 + // lock + UISite site1 = null; + float dist = float.MaxValue; + List<(float, Site, Site)> trackList = new List<(float, Site, Site)>(); + if (resetId == 0) + { + + (float bias, Vector2 hPnt, float fd) Project2DLine( + Vector2 pnt, + Vector2 segSt, + Vector2 segEnd + ) + { + var dir = Vector2.Normalize(segEnd - segSt); + var fd = Vector2.Dot(pnt - segSt, dir); + var hPnt = segSt + fd * dir; + var bias = dir.X * (pnt.Y - segSt.Y) - (pnt.X - segSt.X) * dir.Y; + return (bias, hPnt, fd); + } + + foreach (var allTrack in SimpleLib.GetAllTracks()) + { + var s = SimpleLib.GetSite(allTrack.siteA); + var e = SimpleLib.GetSite(allTrack.siteB); + var (b, h, fd) = Project2DLine( + new Vector2(x, y), + new Vector2(s.x, s.y), + new Vector2(e.x, e.y) + ); + b = Math.Abs(b); + if (fd < 0 || fd > 1) + continue; + if (dist > b) + { + UISite ss; + if (fd < 0.5) + ss = (UISite)s; + else + ss = (UISite)e; + + foreach (var ccar in SimpleLib.GetAllCars()) + { + if (ccar == this) + continue; + if (ccar.status.holdingLocks.Contains(s.id)) + goto next; + } + + dist = b; + site1 = ss; + next: + ; + } + } + float radius = 5000; + //根据小车为圆心找到半径radius内的站点 + var surroundSites = SimpleLib.GetAllSites().ToList().FindAll(p => LessMath.dist(x, y, p.x, p.y) <= radius); + foreach (var allTrack in SimpleLib.GetAllTracks()) + { + var s = SimpleLib.GetSite(allTrack.siteA); + var e = SimpleLib.GetSite(allTrack.siteB); + if (!surroundSites.Contains(s) && !surroundSites.Contains(e) && surroundSites.Count != 0) continue; + + var (b, h, fd) = Project2DLine(new Vector2(x, y), new Vector2(s.x, s.y), new Vector2(e.x, e.y)); + b = Math.Abs(b); + double pathAngle = Double.NaN; + if (allTrack.direction == 1) + pathAngle = Math.Atan2((e.y - s.y), (e.x - s.x)) / Math.PI * 180; + else if (allTrack.direction == 2) + pathAngle = Math.Atan2((e.y - s.y), (e.x - s.x)) / Math.PI * 180 + 180; + else + trackList.Add((b, s, e)); + if (Math.Abs(this.th - pathAngle) < 30) + trackList.Add((b, s, e)); + foreach (var ccar in SimpleLib.GetAllCars()) + { + if (ccar == this) continue; + if (ccar.status.holdingLocks.Contains(s.id)) goto next; + } + next:; + + } + //var sites = trackList.OrderBy(p => p.Item1).ToArray(); + List<(double, Site)> distList = new List<(double, Site)>(); + foreach (var site in trackList) + { + if (site.Item2.fields.ContainsKey("no_reset") || site.Item3.fields.ContainsKey("no_reset")) + continue; + foreach (var ccar in SimpleLib.GetAllCars()) + { + if (ccar == this) continue; + if (ccar.status.holdingLocks.Contains(site.Item2.id) || ccar.status.holdingLocks.Contains(site.Item3.id)) goto next; + } + distList.Add((LessMath.dist(site.Item2.x, site.Item2.y, x, y), site.Item2)); + distList.Add((LessMath.dist(site.Item3.x, site.Item3.y, x, y), site.Item3)); + next:; + } + + site1 = (UISite)distList.OrderBy(p => p.Item1).First().Item2; + + //foreach (var site in SimpleLib.GetAllSites()) + //{ + // if (site.fields.ContainsKey("no_reset")) + // continue; + // foreach (var ccar in SimpleLib.GetAllCars()) + // { + // if (ccar == this) + // continue; + // if (ccar.status.holdingLocks.Contains(site.id)) + // goto next; + // } + + // var d = LessMath.dist(site.x, site.y, x, y); + // if (d < dist) + // { + // dist = (float)d; + // site1 = (UISite)site; + // } + // next: + // ; + //} + TrafficReset(site1, true, strict: false); + } + else + { + TrafficReset(SimpleLib.GetSite(resetId), true, strict: false); + } + + + siteID = site1.id; + + lstatus = "上线"; + debug += $"site={site1.id}"; + AppendDebug(debug); + G.pushStatus($"Car {name}({id}) reset to Site {site1.id}"); + } + catch (Exception e) + { + Diagnosis.Post($"{this.name}---初始化失败--{e.Message}", $"{this.name}", true); + } + } + + [MethodMember(Name = "测试", Description = "循环")] + [I18N.DocumentTranslation(Name = "Test", Description = "Loop", locale = "en")] + public async void Test() + { + var siteA = SimpleLib.GetAllSites().First(s => s.name == "A"); + var siteB = SimpleLib.GetAllSites().First(s => s.name == "B"); + while (true) + { + var plan = new SegmentPlan() { usingCar = this }; + plan.FindRoute(SimpleLib.GetSite(this.GetLastSite()), siteA); + await plan.Compile("GoA").Queue(); + var planB = new SegmentPlan() { usingCar = this }; + planB.FindRoute(SimpleLib.GetSite(this.GetLastSite()), siteB); + await planB.Compile("GoB").Queue(); + await Task.Delay(1000); + } + } + } +} diff --git a/StandardScene.QrLidar/CarTypes/MultiVehicleCar.cs b/StandardScene.QrLidar/CarTypes/MultiVehicleCar.cs new file mode 100644 index 0000000..353ba6c --- /dev/null +++ b/StandardScene.QrLidar/CarTypes/MultiVehicleCar.cs @@ -0,0 +1,255 @@ +using System.Drawing; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +using SimpleLite.RCS; + +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.Library; +using SimpleCore.PropType; +using StandardScene.Coders; + +namespace StandardScene.CarTypes +{ + //钻车 + [TemplateTrackCoderSettings( + priority = 18, + useVerb = "(dst.name=='FetchSite1'||dst.name=='FetchSite2')&&(plan.action=='fetch')", + templateString = "agv.Wait();agv.TireFollowing(${plan.TireNum},${plan.FrontLidarDetect},${src.id},${dst.id},${plan.FirstTire});agv.Wait();", + blockVerb = "true", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + [TemplateTrackCoderSettings( + priority = 18, + useVerb = "(dst.name=='PutSite1'||dst.name=='PutSite2')&&(plan.action=='leave')", + templateString = "agv.Wait();agv.TireFollowing(${plan.TireNum},${plan.FrontLidarDetect},${src.id},${dst.id},${plan.FirstTire});agv.Wait();", + blockVerb = "true", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + //离开时钻车(后出的那台车) + [TemplateTrackCoderSettings( + priority = 18, + useVerb = "dst.name=='ReadyFetchSite'&&plan.action=='leave'&&plan.Reverse==true", + templateString = "agv.Wait();agv.TireFollowing(${plan.TireNum},${plan.FrontLidarDetect},${src.id},${dst.id},${plan.FirstTire});agv.Wait();" + + "agv.LineTracking(${src.id},${dst.id},${plan.LineDistance});agv.Wait()", + blockVerb = "true", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + //离开时直线行走(先出的那台车) + [TemplateTrackCoderSettings( + priority = 18, + useVerb = "(dst.name=='LeaveSite'||dst.name=='ReadyFetchSite')&&plan.action=='leave'&&plan.Reverse==false", + templateString = "agv.Wait();agv.LineTracking(${src.id},${dst.id},${plan.LineDistance});agv.Wait();", + blockVerb = "true", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + //下使能+夹抱+上使能 + [TemplateSiteCoderSettings( + priority = 18, + useVerb = "((dst.name=='FetchSite1'||dst.name=='FetchSite2')&&plan.action=='clamp')", + templateString = "agv.Wait();agv.DriverDisable();agv.Wait();agv.ClamptoTarget(${dst.ClampClose});agv.Wait();agv.DriverAble();", + blockVerb = "true", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + + //抱夹打开 + [TemplateSiteCoderSettings( + priority = 18, + useVerb = "(dst.name=='PutSite1'||dst.name=='PutSite2')&&plan.action=='put'", + templateString = "agv.Wait();agv.DriverDisable();agv.Wait();agv.ClamptoTarget(${dst.ClampClose});agv.Wait();agv.DriverAble();", + blockVerb = "true", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + + //临时夹抱动作 + [TemplateSiteCoderSettings( + priority = 18, + useVerb = "plan.action=='templateclamp'||plan.action=='templateput'", + templateString = "agv.Wait();agv.DriverDisable();agv.Wait();agv.ClamptoTarget(${plan.ClampClose});agv.Wait();agv.DriverAble();", + blockVerb = "true", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + [TemplateTrackCoderSettings( + priority = 2, + useVerb = "plan.action=='fetch'", + templateString = "agv.BasicGo(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id}," + + "${track.id},${track.Speed},${track.Reverse||plan.Reverse}," + + "${track.CarDirectionBias},${track.EnableCarAbsoluteDirection},${track.CarAbsoluteDirection},${track.MagnetChoose},${track.MultiVehicleSync},${track.typeInfo});", + blockVerb = "true", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + //[TemplateTrackCoderSettings( + // priority = 3, + // useVerb = "plan.action=='leave'&&(dst.name=='KeepDirectionSite1'||dst.name=='KeepDirectionSite2')", + // templateString = "agv.BasicGo(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id}," + + // "${track.id},${track.Speed},${track.Reverse||plan.Reverse}," + + // "${track.CarDirectionBias},${track.EnableCarAbsoluteDirection},${track.CarAbsoluteDirection},${track.MagnetChoose},${track.MultiVehicleSync},${track.typeInfo});", + // blockVerb = "true", + // siteFields = typeof(MultiWheelLifterSiteFields), + // trackFields = typeof(MultiWheelLifterTrackFields), + // planFields = typeof(MultiWheelLifterPlanFields))] + + [TemplateTrackCoderSettings( + priority = 3, + useVerb = "plan.action=='leave'", + templateString = "agv.BasicGo(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id}," + + "${track.id},${track.Speed},${track.Reverse||plan.Reverse}," + + "${track.CarDirectionBias},${track.EnableCarAbsoluteDirection},${track.CarAbsoluteDirection},${track.MagnetChoose},${track.MultiVehicleSync},${track.typeInfo});", + blockVerb = "true", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + [TemplateTrackCoderSettings( + priority = 19, + useVerb = "dst.tag>0 && src.tag>0", + templateString = "agv.QrGo(${src.x},${src.y},${src.id},${src.tag},${dst.x},${dst.y},${dst.id},${dst.tag},${track.id}," + + "${track.Speed},${track.Reverse || (track.ReverseDst == dst.id)}," + + "${track.CarDirectionBias},${track.EnableCarAbsoluteDirection},${track.CarAbsoluteDirection}," + + "${track.typeInfo});", + blockVerb = "true", + siteFields = typeof(MultiWheelLifterSiteFields), + trackFields = typeof(MultiWheelLifterTrackFields), + planFields = typeof(MultiWheelLifterPlanFields))] + + // 通用避障/IO coder 已抽离为 StandardScene.Coders.*(见类前 [ProgramTrackCoderSettings] 引用) + + // 避障区尺寸(4参,含中心点)切换 coder 已抽离为 StandardScene.Coders.AvoidanceParamCoder(见类前 [ProgramTrackCoderSettings] 引用) + + // 纠偏阈值 coder 已抽离为 StandardScene.Coders.TrackingErrThreshCoder + + [ProgramTrackCoderSettings(priority = 27, program = typeof(LidarAreaSwitchCoder))] + [ProgramTrackCoderSettings(priority = 20, program = typeof(AvoidanceDistanceCoder))] + [ProgramTrackCoderSettings(priority = 20, program = typeof(IoAreaSwitchCoder))] + [ProgramTrackCoderSettings(priority = 20, program = typeof(TrackingErrThreshCoder))] + [ProgramTrackCoderSettings(priority = 20, program = typeof(AvoidanceParamCoder))] + [EnvelopConfig(lengthX = 2000, lengthY = 2000, centerX = 0, centerY = 0)] + + [CarType(Name = "多车联动AGV")] + public class MultiVehicleCar : GhostCar + { + [FieldMember] public float CarLength = 2000; + [FieldMember] public float CarWidth = 1400; + public static async Task Create() + { + var car = new MultiVehicleCar() + { + lstatus = "连接中", + address = "127.0.0.1", + name = "联动AGV" + }; + return car; + } + + protected override void draw(Graphics eGraphics) + { + var HalfCarLength = CarLength / 2; + var HalfCarWidth = CarWidth / 2; + eGraphics.FillRectangle(Brushes.Gray, -HalfCarLength, -HalfCarWidth, HalfCarLength * 2, HalfCarWidth * 2); + eGraphics.DrawRectangle(Pens.White, -HalfCarLength, -HalfCarWidth, HalfCarLength * 2, HalfCarWidth * 2); + eGraphics.DrawLine(Pens.White, HalfCarLength - HalfCarWidth, -HalfCarWidth, HalfCarLength, 0); + eGraphics.DrawLine(Pens.White, HalfCarLength - HalfCarWidth, HalfCarWidth, HalfCarLength, 0); + } + + [MethodMember(Name = "模拟车联动初始化")] + public void GhostMultiAgvSyncInit() + { + var car1 = (GhostCar)SimpleLib.GetAllCars().First(cc => cc.name == "sync-1"); + while (true) + { + car1.ManualTeleport(); + car1.x = 1770; + car1.y = 0; + car1.th = 0; + Thread.Sleep(100); + if (LessMath.dist(car1.x, car1.y, 1770, 0) < 1 && car1.th == 0) break; + } + car1.NoSchedule(); + car1.siteID = -1; + car1.tags.Clear(); + car1.status.usage.AddUsage("base", new CarUsage.CarUsageInfo() { scheduling = false, refreshing = false }); + car1.fields["MultiVehicleSync"] = "True"; + + var car2 = (GhostCar)SimpleLib.GetAllCars().First(cc => cc.name == "sync-2"); + while (true) + { + //car2.ManualTeleport(-750, 0, 180); + car2.ManualTeleport(); + car2.x = -750; + car2.y = 0; + car2.th = 180; + Thread.Sleep(100); + if (LessMath.dist(car2.x, car2.y, -750, 0) < 1 && car2.th == 180) break; + } + var car2Site = SimpleLib.GetAllSites().OrderBy(ss => LessMath.dist(ss.x, ss.y, car2.x, car2.y)).First(); + var syncInitSite = SimpleLib.GetSite(int.Parse(car2Site.fields["SyncInitId"])); + car2.TrafficReset(syncInitSite); + car2.siteID = syncInitSite.id; + car2.fields["MultiVehicleSync"] = "True"; + } + + [MethodMember(Name = "进入联动状态")] + public void StartMultiAgvSync() + { + var car1 = (Car)SimpleLib.GetAllCars().First(cc => cc.name == "sync-1"); + car1.NoSchedule(); + car1.siteID = -1; + car1.tags.Clear(); + car1.status.usage.AddUsage("base", new CarUsage.CarUsageInfo() { scheduling = false, refreshing = false }); + car1.fields["MultiVehicleSync"] = "True"; + + var car2 = (Car)SimpleLib.GetAllCars().First(cc => cc.name == "sync-2"); + var car2Site = SimpleLib.GetAllSites().OrderBy(ss => LessMath.dist(ss.x, ss.y, car2.x, car2.y)).First(); + var syncInitSite = SimpleLib.GetSite(int.Parse(car2Site.fields["SyncInitId"])); + car2.TrafficReset(syncInitSite); + car2.siteID = syncInitSite.id; + car2.fields["MultiVehicleSync"] = "True"; + } + + [MethodMember(Name = "退出联动状态")] + public void ExitMultiAgvSync() + { + var car1 = (Car)SimpleLib.GetAllCars().First(cc => cc.name == "sync-1"); + car1.fields["MultiVehicleSync"] = "False"; + car1.Reset(); + var car2 = (Car)SimpleLib.GetAllCars().First(cc => cc.name == "sync-2"); + car2.fields["MultiVehicleSync"] = "False"; + car2.Reset(); + } + + //[MethodMember(Name = "返厂检修new", Description = "不再刷新小车状态,当然也不再被调度")] + //[I18N.DocumentTranslation(Name = "Blown new", Description = "Car no longer refresh status and scheduling", locale = "en")] + public new void Blown() + { + AppendDebug("ui-blown"); + Diagnosis.Post($"Car {name}({id}) blown"); + NoSchedule(); + siteID = -1; + tags.Clear(); + status.usage.AddUsage( + "base", + new CarUsage.CarUsageInfo { scheduling = false, refreshing = false } + ); + lstatus = "返厂检修"; + } + } +} diff --git a/StandardScene.QrLidar/CarTypes/MultiWheelForkLifter.cs b/StandardScene.QrLidar/CarTypes/MultiWheelForkLifter.cs new file mode 100644 index 0000000..29a9de4 --- /dev/null +++ b/StandardScene.QrLidar/CarTypes/MultiWheelForkLifter.cs @@ -0,0 +1,156 @@ +using LessokajiWeaverUtilities.Utilities; +using SimpleLite.RCS; +using SimpleLite.RCS.CarTypes; +using SimpleCore; +using SimpleCore.Compiler; +using SimpleCore.PropType; +using StandardScene.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; + +namespace StandardScene.CarTypes +{ + class SiteFields + { + public float FetchSpeed = 0; + public float FetchLiftDownTarget = -1; + public float FetchLiftUpTarget = -1; + public float PutSpeed = 0; + public float PutLiftDownTarget = -1; + public float PutLiftUpTarget = -1; + public float LeaveShelfSpeed = 0; + public float LeaveShelfLiftDownTarget = -1; + public bool Shelf = false; + } + + class TrackFields + { + public int ReverseDst = -1; + } + + class PlanFields + { + public string action = "/"; + } + + //[TemplateTrackCoderSettings( + // priority = 20, + // useVerb = "src.Shelf&&plan.curSeg==1", + // templateString = "agv.Wait();agv.LeaveShelf(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id},${src.LeaveShelfSpeed},${src.LeaveShelfLiftDownTarget});agv.Wait();", + // blockVerb = "true", + // siteFields = typeof(SiteFields), + // trackFields = typeof(TrackFields), + // planFields = typeof(PlanFields))] + [TemplateTrackCoderSettings( + priority = 20, + useVerb = "plan.action=='fetch' && dst.Shelf&&plan.curSeg==plan.segN-2", + templateString = "agv.Wait();agv.Fetch(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id},${dst.FetchSpeed},${dst.FetchLiftDownTarget},${dst.FetchLiftUpTarget});agv.Wait();", + blockVerb = "true", + siteFields = typeof(SiteFields), + trackFields = typeof(TrackFields), + planFields = typeof(PlanFields))] + [TemplateTrackCoderSettings( + priority = 20, + useVerb = "plan.action=='put' && dst.Shelf&&plan.curSeg==plan.segN-2", + templateString = "agv.Wait();agv.Put(${src.x},${src.y},${src.id},${dst.x},${dst.y},${dst.id},${dst.FetchSpeed},${dst.FetchLiftDownTarget},${dst.FetchLiftUpTarget});agv.Wait();", + blockVerb = "true", + siteFields = typeof(SiteFields), + trackFields = typeof(TrackFields), + planFields = typeof(PlanFields))] + + + [CarType(Name = "多舵轮叉车", editor = typeof(MultiWheelForkLifter))] + [I18N.DocumentTranslation(Name = "MultiWheel ForkLift Car", locale = "en")] + public class MultiWheelForkLifter : GhostCar + { + public static async Task Create() + { + var car = new MultiWheelForkLifter() + { + lstatus = "连接中", + address = "127.0.0.1", + name = "多舵轮叉车", + haveCoordination = true, + speed = 1 + }; + return car; + } + public static string GetCarStatus(Car car, string key) + { + string value = "0"; + if (car == null) return value; + if (car.status.enums.TryGetValue(key, out var valueStr)) + value = valueStr; + return value; + } + public override string SetDisplayInfo() + { + try + { + var str = $"{name}({id})\n"; + status.enums.TryGetValue("ChassisMode", out var manual); + var ms = manual == "0" ? "自动" : "手动"; + status.enums.TryGetValue("Soc", out var soc); + str = $"{str}{ms}|soc:{soc}"; + var alarmStr = GetCarStatus(this, "AlarmInfo"); + if (alarmStr != "") + str = $"{str}|{alarmStr}"; + if (status.enums.TryGetValue("ElectricCurrent", out var electricCurrent) && + !string.IsNullOrEmpty(electricCurrent)) + { + var charging = float.Parse(electricCurrent) * 0.01f > 0 ? "充电中" : "未充电"; + str = $"{str}|charge:{charging}"; + } + + var thresSpeed = Commons.CarValue(this, "ThresSpeed"); + str = $"{str}{((thresSpeed <= 0) ? "|避障触发" : "")}"; + return str; + } + catch (Exception e) + { + Console.WriteLine(e); + return "bad car"; + } + } + + private bool _running = false; + [MethodMember(Name = "test")] + public async void Test() + { + _running = true; + var siteA = SimpleLib.GetAllSites().First(s => s.name == "A"); + var siteB = SimpleLib.GetAllSites().First(s => s.name == "B"); + var siteC = SimpleLib.GetAllSites().First(s => s.name == "C"); + while (_running) + { + var fetchPlan = new SegmentPlan() { usingCar = this }; + fetchPlan.fields["action"] = "fetch"; + fetchPlan.FindRoute(SimpleLib.GetSite(GetLastSite()), siteA); + await fetchPlan.Compile("fetch").Queue(); + var putPlan = new SegmentPlan() { usingCar = this }; + putPlan.fields["action"] = "put"; + putPlan.FindRoute(SimpleLib.GetSite(GetLastSite()), siteB); + await putPlan.Compile("put").Queue(); + var plan = new SegmentPlan() { usingCar = this }; + plan.FindRoute(SimpleLib.GetSite(GetLastSite()), siteC); + await plan.Compile("go").Queue(); + var fetchPlan2 = new SegmentPlan() { usingCar = this }; + fetchPlan2.fields["action"] = "fetch"; + fetchPlan2.FindRoute(SimpleLib.GetSite(GetLastSite()), siteB); + await fetchPlan2.Compile("fetch").Queue(); + var putPlan2 = new SegmentPlan() { usingCar = this }; + putPlan2.fields["action"] = "put"; + putPlan2.FindRoute(SimpleLib.GetSite(GetLastSite()), siteA); + await putPlan2.Compile("put").Queue(); + var plan2 = new SegmentPlan() { usingCar = this }; + plan2.FindRoute(SimpleLib.GetSite(GetLastSite()), siteC); + await plan2.Compile("go").Queue(); + + } + } + } +} diff --git a/StandardScene.QrLidar/QrLidarSceneProfile.cs b/StandardScene.QrLidar/QrLidarSceneProfile.cs new file mode 100644 index 0000000..4ae47eb --- /dev/null +++ b/StandardScene.QrLidar/QrLidarSceneProfile.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using SimpleCore.Navigation; +using StandardScene.CarTypes; + +namespace StandardScene.QrLidar +{ + /// + /// scene.qrlidar 平台画像:激光 + 二维码融合导航场景插件。 + /// 激光(SLAM 坐标导航)由内核 GhostCar 的 BasicGo 兜底提供;二维码 QrGo 按轨道两端 + /// tag 字段逐段触发——同一台车同一条路线可全激光、全二维码或混合(融合 / 单独使用均可)。 + /// + public sealed class QrLidarSceneProfile : NavigationProfileBase + { + public override NavKind Kind => NavKind.Laser; + + public override IReadOnlyList Kinds => new[] { NavKind.Laser, NavKind.QrCode }; + + public override string SceneId => "scene.qrlidar"; + + public override string DisplayName => "激光+二维码平台"; + + public override IReadOnlyList CarTypes => new[] + { + typeof(Forklift), + typeof(MultiWheelForkLifter), + typeof(DualLiftingCar), + typeof(MultiVehicleCar), + typeof(ArmCar), + }; + + public override void OnActivate(ISceneContext context) + { + context.Log($"{DisplayName} 已激活(车型:叉车 / 多舵轮叉车 / 锂电双举升 / 多车联动 / ArmCar)"); + } + } +} diff --git a/StandardScene.QrLidar/StandardScene.QrLidar.csproj b/StandardScene.QrLidar/StandardScene.QrLidar.csproj new file mode 100644 index 0000000..004032e --- /dev/null +++ b/StandardScene.QrLidar/StandardScene.QrLidar.csproj @@ -0,0 +1,58 @@ + + + + net8.0-windows + Library + true + StandardScene.QrLidar + StandardScene.QrLidar + latest + true + AnyCPU;x64 + x64 + true + false + disable + disable + false + $(NoWarn);NU1701;CS0618;CS0612;MSB3277;CA1416 + {HintPathFromItem};{TargetFrameworkDirectory};{RawFileName};{GAC} + + + + + + + + + + + + + + + E:\Work\Core\Simple-FR\Simple\SimpleLite\bin\Debug\SimpleLite.dll + + + E:\Work\Core\Simple-FR\Simple\SimpleCore\bin\Debug\netstandard2.0\SimpleCore.dll + + + D:\MDCS\Dependencies\Commons\CommonUsage.dll + + + D:\MDCS\Dependencies\Commons\MDCSToolBox.dll + + + E:\Work\Core\Simple-FR\Simple\tools\Topaz.dll + + + E:\Work\Core\Simple-FR\Simple\SimpleLite\bin\Debug\LessokajiWeaverUtilities.dll + + + + + + + + diff --git a/StandardScene.QrLidar/StandardScene.QrLidar.scene.json b/StandardScene.QrLidar/StandardScene.QrLidar.scene.json new file mode 100644 index 0000000..05cc634 --- /dev/null +++ b/StandardScene.QrLidar/StandardScene.QrLidar.scene.json @@ -0,0 +1,13 @@ +{ + "id": "scene.qrlidar", + "displayName": "激光+二维码平台", + "navKind": "laser", + "navKinds": [ "laser", "qrcode" ], + "assembly": "StandardScene.QrLidar.dll", + "coreVersion": ">=1.0.0", + "requiresCore": "StandardScene.dll", + "provides": { + "carTypes": [ "Forklift", "MultiWheelForkLifter", "DualLiftingCar", "MultiVehicleCar", "ArmCar" ], + "missionTypes": [] + } +} diff --git a/StandardScene.sln b/StandardScene.sln new file mode 100644 index 0000000..075b79b --- /dev/null +++ b/StandardScene.sln @@ -0,0 +1,49 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.10.35013.160 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardScene.Core", "StandardScene.Core\StandardScene.Core.csproj", "{7A745509-1593-4044-BA49-9B6B0A35B505}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardScene.Protocol.VDA5050", "StandardScene.Protocol.VDA5050\StandardScene.Protocol.VDA5050.csproj", "{7E5050AA-0001-4A11-9C22-0A0B0C0D0E01}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardScene.Devices", "StandardScene.Devices\StandardScene.Devices.csproj", "{7E5050AA-0005-4A11-9C22-0A0B0C0D0E05}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardScene.Magnetic", "StandardScene.Magnetic\StandardScene.Magnetic.csproj", "{7E5050AA-0006-4A11-9C22-0A0B0C0D0E06}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardScene.QrLidar", "StandardScene.QrLidar\StandardScene.QrLidar.csproj", "{7E5050AA-0007-4A11-9C22-0A0B0C0D0E07}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7A745509-1593-4044-BA49-9B6B0A35B505}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7A745509-1593-4044-BA49-9B6B0A35B505}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A745509-1593-4044-BA49-9B6B0A35B505}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7A745509-1593-4044-BA49-9B6B0A35B505}.Release|Any CPU.Build.0 = Release|Any CPU + {7E5050AA-0001-4A11-9C22-0A0B0C0D0E01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E5050AA-0001-4A11-9C22-0A0B0C0D0E01}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E5050AA-0001-4A11-9C22-0A0B0C0D0E01}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E5050AA-0001-4A11-9C22-0A0B0C0D0E01}.Release|Any CPU.Build.0 = Release|Any CPU + {7E5050AA-0005-4A11-9C22-0A0B0C0D0E05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E5050AA-0005-4A11-9C22-0A0B0C0D0E05}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E5050AA-0005-4A11-9C22-0A0B0C0D0E05}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E5050AA-0005-4A11-9C22-0A0B0C0D0E05}.Release|Any CPU.Build.0 = Release|Any CPU + {7E5050AA-0006-4A11-9C22-0A0B0C0D0E06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E5050AA-0006-4A11-9C22-0A0B0C0D0E06}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E5050AA-0006-4A11-9C22-0A0B0C0D0E06}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E5050AA-0006-4A11-9C22-0A0B0C0D0E06}.Release|Any CPU.Build.0 = Release|Any CPU + {7E5050AA-0007-4A11-9C22-0A0B0C0D0E07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E5050AA-0007-4A11-9C22-0A0B0C0D0E07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E5050AA-0007-4A11-9C22-0A0B0C0D0E07}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E5050AA-0007-4A11-9C22-0A0B0C0D0E07}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {C6119F94-0318-401A-A944-DF38DD88AD83} + EndGlobalSection +EndGlobal diff --git a/StandardScene代码审查报告-会话8复核增强版.md b/StandardScene代码审查报告-会话8复核增强版.md new file mode 100644 index 0000000..00cd5bc --- /dev/null +++ b/StandardScene代码审查报告-会话8复核增强版.md @@ -0,0 +1,166 @@ +# StandardScene 代码审查报告 · 会话8 复核增强版 + +> 审查对象:`E:\Work\Core\Simple-FR\StandardSence`(StandardScene.Core / StandardScene.Devices / StandardScene.Protocol.VDA5050) +> 审查方式:全量反模式扫描(ripgrep)+ 高风险/代表性文件逐行精读核实 + 对既有《StandardScene代码审查报告.md》的逐项复核 +> 目标框架:`net8.0-windows`(最终目标 `net8.0`,去 WinForms) +> 报告日期:2026-06-09(会话8) +> 说明:本报告是对同日既有报告的**复核增强版**。复核发现既有报告中的**多个 P0 已被修复**,本报告据实更新现状、补充精确行号、并记录若干**新发现问题**。 + +--- + +## 〇、覆盖度与方法说明 + +- **全量扫描**:对解决方案内全部 `.cs` 做反模式扫描(`Thread.Abort` / `async void` / 空 `catch{}` / 硬编码 IP / 局部 `new HttpClient` / `throw ex;` / `while(true)` / `Thread.Sleep` / `Console.*` / 反射 `GetMethod`)。 +- **精读核实**(逐行读取、行号精确):`ChargeUdpService`、`StandardChargeMission`(停止)、`AbstractLoopMission`(停止)、`WebApi`(反射端点+白名单+开头)、`Commons`、`PCBChargeStation`、`MuXingChargeStation`、`VDA5050Car`、`AsyncTcpClient`、`CommunicationMessageService`、`AtomicFileUpdateHelper`、`SnowflakeIdGenerator`、`WebAPIHelper`、`JsonParser`、`JsonTool`、`ModbusDoorController`、`Kiva`(代表车型)。 +- **未逐行覆盖**:部分 Model/Designer/Viewer 与少数车型仅做扫描级核对(已在清单标注),不影响主结论。 + +--- + +## 一、对既有报告的复核结论(重点) + +| 既有报告条目 | 复核现状 | 证据(精确行号) | +|---|---|---| +| **P0-1 `Thread.Abort` 被空 catch 吞** | ✅ **已修复** | `Charge/StandardChargeMission.cs:683-685` 改为 `myThread?.Join(2000)`;`Chained/AbstractLoopMission.cs:1313-1314 / 1328-1329` 改为 `flag=false + Join(2000)`;全解决方案 `Thread.Abort` 仅余 1 处注释 | +| **P0-2 WebApi 无鉴权反射任意方法(RCE)** | ⚠️ **部分修复(降为 P1)** | `WebApi.cs:145-151` 新增白名单 `IsReflectionInvokable`(黑名单 `NoReflectionApi` 优先 + 必须标 `MethodMember`/`ReflectionApiWithParameter`);端点 `330-331 / 387-388` 已拦截。**但仍 GET 执行(295/358)、仍无网络层鉴权** | +| **P0-3 实时报文按固定下标取值、缺长度校验** | ✅ **主要路径已修复** | `Charge/ChargeUdpService.cs:49-50` 加 `message.Length>28` 校验且 `56` 不吞断线程;`Devices/Charge/PCBChargeStation.cs:30-31` 加 `message.Length>1` 校验 | +| 范本:`CommunicationMessageService` 安全解析 | ✅ 确认范本 | `Charge/CommunicationMessageService.cs:198 / 276` 先校验 `parts.Length` 再 `byte.TryParse(InvariantCulture)` | +| 范本:`AsyncTcpClient` | ✅ 确认范本 | `TCP/AsyncTcpClient.cs` `_reconnectGate` 锁 + `_closing/_isConnecting/_isReconnecting` + Timer 重连 + IDisposable | +| 范本:`ModbusDoorController` | ✅ 确认范本 | `Devices/Door/ModbusDoorController.cs:40` `CancellationTokenSource` + `_syncLock` + 去抖 `_lastSentControl` + 可配间隔 | + +**结论**:既有报告标注的 3 个 P0 中,P0-1、P0-3 已实质修复,P0-2 已被方法白名单有效缓解。**当前已无 P0 级阻断**。技术债主要集中在 P1/P2(旧模块的 async void、硬编码、Console 日志、上god文件、半成品死代码)。 + +--- + +## 二、仍然存在的问题 + +### P1 高危 + +#### P1-1 WebApi 反射端点无网络层鉴权 + 用 GET 执行副作用操作 +- 位置:`StandardScene.Core/WebApi.cs:295`(`/car_reflection/execute/{id}/{method}`)、`358`(`/mission_reflection/execute/{id}/{method}`);开头 `38` `ApiController : NancyModule` 无任何 `Before`/鉴权管线 +- 现象:虽有方法白名单(145-151),但任何能访问该 HTTP 端口者均可对白名单内方法发起调用,其中包含 `关闭进程`、`立即强制结束` 等危险操作(如 `Kiva.ForceStop`、`StandardChargeMission.Stop`);且为 GET 语义,易被浏览器预取/日志/CSRF 触发。 +- 影响:现场误触发可导致小车强停、充电进程关闭等安全相关后果。 +- 修复:① 增加统一鉴权(API Token / 来源 IP 白名单,Nancy `Before` 管线集中校验);② 执行类端点改 `POST`;③ 对“危险方法”增加二次确认/单独权限位。 + +#### P1-2 VDA5050 硬编码现场设备 IP(换现场/多车必失效) +- 位置:`StandardScene.Protocol.VDA5050/VDACar/VDA5050Car.cs:156`、`909`、`913`;`VDACar/VDA5050Interface.cs:152`、`156`(均为 `http://192.168.2.1:8008/...`) +- 现象:把对外取值/置值的设备 IP 写死为 `192.168.2.1`,且 `VDA5050Car.cs:154` 注释里本有 `this.address` 的正确写法却被弃用。 +- 影响:多 AGV 或换现场时全部失效;所有车都打到同一 IP。 +- 修复:统一取 `this.address`/配置项;端口与路径走配置;删除写死分支。 + +#### P1-3 `Commons.AddOrUpdateTag` 名不符实(只 Add,已存在会抛异常) +- 位置:`StandardScene.Core/Commons.cs:96-107`(正确的“存在则更新”逻辑被注释,仅保留 `item.Add(tag, value)` 于 `106`) +- 现象:方法语义是 AddOrUpdate,实际只 Add;当 tag 已存在时按 `TagSet.Add` 行为可能抛异常或产生重复项。 +- 影响:调用方(如 `AbstractLoopMission.MarkTaskStartSitesAsTerminal → AddOrUpdateSiteField`)在重复标记场景下可能异常或脏数据。 +- 修复:恢复“存在则 `item[tag]=value`,否则 `Add`”语义。 + +#### P1-4 局部 `new HttpClient()`(socket/端口耗尽风险) +- 位置:`WebApi.cs:977 / 1256 / 1322`、`Model/Map.cs:194`(均为方法内 `new HttpClient()` 后即用即弃) +- 现象:高频路径每次新建 HttpClient,底层 socket 进入 TIME_WAIT 累积,长期运行端口耗尽。 +- 影响:运行一段时间后 HTTP 调用大面积超时/失败。 +- 修复:复用静态单例 / `IHttpClientFactory`;项目已有正确范例可参照(`Chained/DeliveryViewer.cs:24`、`Chained/TransportDeliveryCallbacks.cs:26` 的 `static readonly HttpClient`,以及 `Utils/WebAPIHelper` 的连接池设计)。 + +#### P1-5 `async void` 泛滥(异常逃逸、无法等待、无法取消) +- 代表位置:`VDA5050Car.cs:150`(`GetVDA5050StateFromC`,且 `165-167` 空 catch 吞异常)、`Charge/ChargeUdpService.cs:28`(`ListenerProcess`,被 `new Thread(...)` 包裹更失语义)、`Devices/Charge/MuXingChargeStation.cs:424`(`SendMessage`,内部无 await)、`Chained/TransportMission.cs:374/425/470/507`、`Chained/TransportDeliveryCallbacks.cs:79/109/136/145/154/161`、`Chained/AbstractChainedDeliveryMission.cs:672/1020/1276`、`InterLock/AbstractInterlockMission.cs:289/326`、车型 `Kiva.cs:495/619`、`Forklift.cs:419`、`DummyCar.cs:461/576/626/671` 等 +- 现象:`async void` 抛出的异常直达 SynchronizationContext,常导致进程级未观测异常;其中多处 catch 为空(异常被吞)。 +- 影响:偶发崩溃/状态错乱且难排障。 +- 修复:业务异步方法一律返回 `Task` 并由上层 `await`/`ContinueWith` 处理异常;确需 fire-and-forget 的入口(事件/框架回调)内部必须 `try/catch + Diagnosis.Log`;`MuXing.SendMessage` 这种无 await 的应直接改 `void`。 + +### P2 结构 / 可维护性 + +#### P2-1 `WebApi.cs` 上帝文件(约 2800+ 行单 NancyModule) +- 位置:`StandardScene.Core/WebApi.cs`(`ApiController : NancyModule` 单类承载全部路由) +- 修复:按功能域拆分为多个 NancyModule(车辆/任务/地图/充电/交管/系统),公共逻辑(鉴权、统一响应封装、参数绑定、反射执行)下沉到基类/中间件。 + +#### P2-2 `GetMethods` 只扫描当前程序集,与运行期类型发现口径不一致 +- 位置:`WebApi.cs:47` `Assembly.GetExecutingAssembly().GetTypes()` +- 现象:拆分后卫星 dll(Devices/VDA5050)中的车型/Mission 方法不会出现在 `get_type_methods` 列表里;而运行期类型发现走的是 `UiTypeDiscovery.AllTypes()`(全域)。 +- 影响:前端“可用动作”列表缺失卫星类型的方法(execute 端点按实例反射仍可用,但 UI 发现不全)。 +- 修复:`GetMethods` 改用 `UiTypeDiscovery.AllTypes()` 统一口径。 + +#### P2-3 `AtomicFileUpdateHelper` 并非真正“原子”写 +- 位置:`StandardScene.Core/CommonTools/AtomicFileUpdateHelper.cs:54`(`File.WriteAllText` 直接覆盖) +- 现象:仅用 `ConcurrentDictionary` 保证**进程内同路径串行**(线程安全 OK),但写入是直接覆盖,**进程崩溃/断电时文件可能损坏(半截内容)**;类名“Atomic”有误导。另:`PathLocks` 只增不减(长期运行轻微累积,`14`)。 +- 修复:改“写临时文件 → Flush → `File.Replace`/`File.Move` 覆盖”实现真正原子落盘;或在文档/命名上明确其仅保证串行而非崩溃原子性。 + +#### P2-4 `JsonParser` 死代码与文件损坏隐患 +- 位置:`StandardScene.Core/Utils/JsonParser.cs:31-59`(`JsonChangeValue` 的 `foreach` 循环体整段被注释,`Task.Run` 跑空循环,等同 NOP);`22` `WriteJsonFile` 用 `File.AppendAllText` +- 现象:`JsonChangeValue` 是“改值”语义却什么都不做;`WriteJsonFile` 对同一 `TaskId` 重复调用会把多个 JSON 追加进同一文件,得到非法 JSON。 +- 修复:删除/重写 `JsonChangeValue`;`WriteJsonFile` 改为覆盖写(配合 P2-3 的原子写)。 + +#### P2-5 `WebAPIHelper` 退化为空壳 +- 位置:`StandardScene.Core/Utils/WebAPIHelper.cs:52-142`(Get/Post 等全部方法被注释);`getClient` 用 `ContainsKey + 索引器`(`29-33`)非原子 +- 现象:连接池设计正确(`23` `ConcurrentDictionary`),但对外没有任何可用请求方法 → 各处只能各自 `new HttpClient`(正是 P1-4 的根因之一);`getClient` 并发下可能创建多个 client。 +- 修复:恢复/重写 `GetAsync/PostAsync` 并全项目改用之;`getClient` 改 `GetOrAdd`。 + +#### P2-6 UDP 发送的 `SendAsync` 未 await + `using` 竞态 +- 位置:`Devices/Charge/PCBChargeStation.cs:71-73`(`udpClient.SendAsync(...)` 未 await,紧接 `Thread.Sleep(100)` 后 `using` 块结束 Dispose) +- 现象:异步发送可能在 `UdpClient` 被 Dispose 后才真正发出,存在 `ObjectDisposedException`/丢包风险(靠 `Sleep(100)` 掩盖)。 +- 修复:改同步 `Send` 或 `await SendAsync` 后再退出 `using`。 + +#### P2-7 `Console.*` 作为生产日志 +- 代表:`VDA5050Car.cs`(约 30 处)、`MasterMQTTCommunication.cs`(约 22 处)、`DummyCar.cs`(约 29 处)、`PCBChargeStation.cs:97`、`MuXingChargeStation.cs:438`、`Kiva.cs:567`、`Commons.cs`(约6)、`WebApi.cs`(约8) +- 修复:统一改 `Diagnosis.Log/Post`(项目既有日志门面),保留级别与可检索性。 + +#### P2-8 `throw ex;` 丢失原始堆栈 +- 位置:`VDA5050Car.cs:240`、`CarTypes/DummyCar.cs:451` +- 修复:改 `throw;`(重抛)或 `throw new XxxException(msg, ex)`(包装保留 inner)。 + +#### P2-9 反射调用非公开方法 / 按配置名反射 +- 位置:`CarTypes/VehicleMonitor.cs:1671`(`GetMethod(name, Public|NonPublic)` 可达私有方法);`ExtendDevice/ButtonBox/ButtonMission.cs:594`(按 `buttonConfig.TriggerMethod` 反射) +- 修复:限制到公开+白名单;对配置驱动的反射做方法存在性与白名单校验。 + +#### P2-10 UI 与业务耦合(服务端/无人值守会阻塞) +- 位置:`Commons.cs:42`(死锁回调里 `MessageBox.Show`)、`Kiva.cs:648` 等车型在后台线程 `MessageBox.Show` +- 修复:业务层只产生事件/日志,是否弹窗交由表现层决定(迁 migu 平台时一并解决)。 + +### P3 整洁 / 卫生 + +- **空 `catch{}`/静默吞异常**(建议至少 `Diagnosis.Log`):`Kiva.cs:606-610 / 637-639`、`VDA5050Car.cs:165-167 / 997-1000`、`Devices/Charge/FLChargeStation.cs:173 / 243`、`Chained/AbstractLoopMission.cs:1318/1333/1396/1576/1587/1601`、`Chained/LoopViewer.cs:260`、`Charge/CommunicationMessageService.cs:183-186 / 261-264`、`Commons.cs:44`。(注:`AsyncTcpClient` 中 `try{Close();}catch{}` 属清理性吞异常,可接受。) +- **本地回环/端口硬编码**(建议配置化,风险低于 P1-2):车型 `address="127.0.0.1"` 多处;`Model/Map.cs:195/207`(端口 4321);`Chained/LoopMission.cs:74`(`SiemensClient ...,"127.0.0.1",103`);`Chained/TransportDeliveryCallbacks.cs:27`(`_callbackUrl ...20101`)。 +- **`float.Parse`/`int.Parse` 未指定 Culture / 未 TryParse**:`Devices/Charge/PCBChargeStation.cs:61-62`、`Kiva.cs:557/601-603` 等。 +- **`SnowflakeIdGenerator`**:实现良好(`51` 锁、`54-58` 时钟回拨等待);仅提示 `DefaultEpochMs=2026-01-01`(`10`)部署到系统时间早于该值的机器会在构造期抛异常(`33-36`)。 + +--- + +## 三、本次新发现(既有报告未记录) + +| 级别 | 问题 | 位置 | +|---|---|---| +| P2(逻辑bug) | `Kiva.LoopTest` 复制粘贴错误:构造了 `plan4` 却 `await plan2.Compile("go").Queue()`;且 `LoopTestRunning` 标志设了但循环体从不检查(`LoopTestStop` 实际无效,“循环测试”并不循环) | `CarTypes/Kiva.cs:517-520`、`492/497/528` | +| P2 | `MuXingChargeStation.SendMessage` 标 `async void` 但内部全是同步 `stream.Write/Flush`,无 await;且只判 `client!=null` 未判 `stream` | `Devices/Charge/MuXingChargeStation.cs:424-440` | +| P2 | `JsonParser.JsonChangeValue` 空循环死代码;`WriteJsonFile` 用 `AppendAllText` 会损坏 JSON | `Utils/JsonParser.cs:31-59 / 22` | +| P2 | `AtomicFileUpdateHelper` 非真原子写 | `CommonTools/AtomicFileUpdateHelper.cs:54` | +| P2 | `WebAPIHelper` 请求方法全注释成空壳 | `Utils/WebAPIHelper.cs:52-142` | +| P2 | `GetMethods` 仅扫当前程序集,与全域类型发现口径不一致 | `WebApi.cs:47` | + +--- + +## 四、子系统评分(复核更新) + +| 子系统 | 旧评 | 复核新评 | 变化说明 | +|---|---|---|---| +| 设备驱动 `StandardScene.Devices` | ★★★★ | ★★★★ | `ModbusDoorController` 范本;`MuXing/PCB` 有 async void/UDP 竞态待修 | +| TCP 基础设施 `AsyncTcpClient` | ★★★★ | ★★★★ | 维持 | +| `SnowflakeIdGenerator` / `AtomicFileUpdateHelper` | —(未单列) | ★★★★ / ★★★ | Snowflake 好;AtomicFile 名不符实 | +| Coders(重构后) | ★★★★ | ★★★★ | 维持 | +| 任务族 Missions | ★★ | ★★★ | Thread.Abort 已改协作式停止(关键回升);async void/while+Sleep 仍在 | +| 充电 Charge | ★★ | ★★★ | 报文越界已加校验、停止已协作式;UDP 发送竞态/async void 待修 | +| VDA5050 协议 | ★★ | ★★ | 硬编码 IP / async void / throw ex / Console 仍集中,债务最重 | +| WebApi | ★ | ★★ | 反射白名单已加(关键回升);仍上帝文件 + 无鉴权 + GET 执行 | +| Commons / 公共层 | ★★ | ★★ | `AddOrUpdateTag` 名不符实、`WebAPIHelper` 空壳、`JsonParser` 死代码 | + +--- + +## 五、优先整改清单(建议顺序) + +1. **P1-1 WebApi 鉴权 + 危险操作语义化**(安全相关,AGV 现场风险最高)。 +2. **P1-2 VDA5050 硬编码 `192.168.2.1` 配置化**(多车/换现场必踩)。 +3. **P1-3 `Commons.AddOrUpdateTag` 修复语义**(影响面广、易引异常)。 +4. **P1-4 局部 `new HttpClient` 收敛为单例/工厂**(长稳性)。 +5. **P1-5 `async void` 收敛为 `Task` + 异常处理**(先 VDA5050 / 充电 / Transport 回调三处重点)。 +6. **P2-3/2-4/2-5 修死代码与伪原子**(`AtomicFileUpdateHelper`、`JsonParser`、`WebAPIHelper`)。 +7. **P2-1/2-2 WebApi 拆分 + 类型发现口径统一**。 +8. **P2-7 Console → Diagnosis 日志统一**(可脚本化批量替换,先 VDA5050)。 +9. **P3 空 catch 补日志 / 本地端口配置化 / Parse 加 Culture**(清扫)。 + +> 说明:本轮为只读审查,未改动任何源码。`Thread.Abort`、报文越界、反射白名单等旧 P0 经核实已修复,故当前不再列 P0。 diff --git a/StandardScene代码审查报告.md b/StandardScene代码审查报告.md new file mode 100644 index 0000000..d2c4664 --- /dev/null +++ b/StandardScene代码审查报告.md @@ -0,0 +1,267 @@ +# StandardScene 代码审查报告 + +> 审查对象:`E:\Work\Core\Simple-FR\StandardSence`(StandardScene.Core / StandardScene.Devices / StandardScene.Protocol.VDA5050) +> 审查方式:全量反模式扫描(ripgrep)+ 关键文件精读 + 编译告警分类(dotnet build --no-incremental) +> 目标框架:`net8.0-windows`(最终目标 `net8.0`) +> 报告日期:2026-06-09 + +--- + +## 一、审查范围与方法 + +- **代码规模**:113 个 `.cs` 文件;最大文件 `WebApi.cs`(2661 行)、`AbstractLoopMission.cs`(1858 行)。 +- **扫描维度**:并发/线程、异常处理、报文解析边界、资源管理、配置硬编码、日志、UI/业务耦合、安全、编译告警。 +- **证据标注**: + - `精读确认`:已逐行读取、行号精确。 + - `扫描命中`:ripgrep 命中文件级,行号待整改时逐一核对。 + +--- + +## 二、总体评价与子系统评分 + +| 子系统 | 评分 | 说明 | +|---|---|---| +| 设备驱动(StandardScene.Devices·新) | ★★★★☆ | `ModbusDoorController` 工程化优秀,可作团队样板 | +| TCP 基础设施(AsyncTcpClient) | ★★★★☆ | 锁/陈旧回调防护/重连完善,少量瑕疵 | +| Coders(重构后) | ★★★★☆ | 本轮已去重,结构清晰 | +| CarTypes 车型族 | ★★☆☆☆ | 巨类、async void、空 catch、硬编码集中 | +| 任务族 Missions | ★★☆☆☆ | Thread.Abort、while(true)+Sleep、状态机分散 | +| 充电 Charge | ★★☆☆☆ | 实时报文路径越界风险、UDP 线程模型粗放 | +| VDA5050 协议 | ★★☆☆☆ | 硬编码 IP、async void、throw ex、Console 日志 | +| WebApi(老 Nancy) | ★☆☆☆☆ | 2661 行上帝文件、无鉴权反射调用、模板代码爆炸 | +| Commons / 公共层 | ★★☆☆☆ | 上帝工具类、重复实现、隐性 bug | + +**核心判断**:技术债**集中在旧模块**(CarTypes / Missions / Charge / VDA5050 / WebApi / Commons);**新写模块**(Devices、AsyncTcpClient)质量明显更高,说明团队具备写好代码的能力,债务主要是历史遗留。整改应"以新模块为范本、按子系统收敛旧债"。 + +--- + +## 三、问题严重级别汇总 + +| 级别 | 含义 | 主要条目 | +|---|---|---| +| **P0 阻断** | .NET8 下会崩溃/失效,或存在安全风险 | Thread.Abort 被吞、WebApi 无鉴权反射、实时报文越界 | +| **P1 高危** | 生产环境易触发故障/难排障 | 硬编码 IP、async void+throw、空 catch、HttpClient 滥用 | +| **P2 结构** | 可维护性/扩展性差 | 上帝类、重复代码、Console 日志、UI/业务耦合 | +| **P3 整洁** | 编译告警与代码卫生 | 45 项告警(重复 using、未用字段、隐藏成员等) | + +--- + +## 四、P0 阻断级问题 + +### P0-1 `Thread.Abort()` 在 .NET8 必抛异常且被静默吞掉(线程停不掉) + +`Thread.Abort()` 在 .NET8 抛 `PlatformNotSupportedException`(告警 SYSLIB0006,共 14 条/双配置)。多处 `Abort()` 外层是空 `catch{}`,导致**异常被吞、线程实际未停止**——任务"停止"后后台线程仍在跑,造成重复下发、资源泄漏、状态错乱。 + +精读确认命中点: + +| 文件 | 行 | +|---|---| +| `StandardScene.Core/Chained/AbstractLoopMission.cs` | 1314 `_strategyThread?.Abort()`、1329 `_logicThread?.Abort()` | +| `StandardScene.Core/Charge/StandardChargeMission.cs` | 681 `myThread?.Abort()`、684 `ChargeThread?.Abort()` | +| `StandardScene.Core/Scheduler/SecuritySignalMission.cs` | 176 `myThread?.Abort()` | +| `StandardScene.Core/Scheduler/NodeIsEnableMission.cs` | 121 `myThread?.Abort()` | +| `StandardScene.Core/Scheduler/HeartBeatMission.cs` | 68 `_myThread?.Abort()` | +| `StandardScene.Core/Chained/AbstractChainedDeliveryMission.cs` | 1606 `myThread.Abort()` | + +典型代码(`AbstractLoopMission.cs:1309`,`精读确认`): + +```1309:1334:E:\Work\Core\Simple-FR\StandardSence\StandardScene.Core\Chained\AbstractLoopMission.cs + public virtual void StopLoop() + { + try + { + _strategyRunning = false; + _strategyThread?.Abort(); + _strategyThread = null; + ... + } + catch { } + } +``` + +**修复方向**:改为**协作式停止**——已有 `_strategyRunning/_logicRunning` 布尔标志,循环体应周期检查该标志退出;线程创建用 `IsBackground=true`,停止时 `flag=false` 后 `Join(timeout)`。删除所有 `Abort()`。对阻塞型循环用 `CancellationToken` + 可中断等待(`Task.Delay(token)` / `ManualResetEventSlim.Wait(token)`)替代 `Thread.Sleep`。参考 `ModbusDoorController` 的 `CancellationTokenSource` 范式。 + +--- + +### P0-2 WebApi 反射接口:无鉴权远程调用任意方法(RCE 级风险) + +`StandardScene.Core/WebApi.cs`(`精读确认`,272–314 / 332–368)暴露: + +```272:296:E:\Work\Core\Simple-FR\StandardSence\StandardScene.Core\WebApi.cs + Get("/car_reflection/execute/{id}/{method}", parameters => + { + ... + methodInfo = car.GetType().GetMethod((string)parameters.method); + ... + return ExecuteMethod(methodInfo, car, queryParams); + }); +``` + +`mission_reflection/execute/{id}/{method}` 同款。问题:**通过 HTTP 即可按名反射调用 Car/Mission 上任意 public 方法**,无身份校验、无方法白名单、无危险方法拦截。结合 `GET` 语义,配置不当会暴露在内网甚至外网,构成命令执行级攻击面。 + +**修复方向**: +1. 最小化:加访问令牌/来源 IP 限制(中间件统一校验)。 +2. 方法白名单:仅允许标注了 `[MethodMember]`(或新增 `[WebInvokable]`)的方法被反射调用;拒绝其余。 +3. 语义化:执行类操作改 `POST`;统一错误响应封装(见 P2-2)。 + +--- + +### P0-3 实时报文解析按固定下标取值、缺长度校验(IndexOutOfRange 崩溃) + +对比发现两条解析路径**风险等级不同**: + +- ✅ **正确范本**:`StandardScene.Core/Charge/CommunicationMessageService.cs`(`精读确认`)在取下标前先校验 `parts.Length < 30 / < 10`(198、276 行),再访问 `bytes[28]` 等,越界已被防住。 +- ❌ **风险路径**:实时 UDP/回调路径按固定下标直接取值,未见等价长度校验(`扫描命中`): + - `StandardScene.Core/ChargeUdpService.cs`(`message[28]` 等) + - `StandardScene.Devices/Charge/PCBChargeStation.cs`(`OnUdpMessage` 中 `message[1]`) + - `StandardScene.Core/ChargeStationType/MuXingChargeStation.cs` + +设备掉线/半包/异常帧时,直接 `IndexOutOfRangeException`,且若发生在 UDP 接收线程会拖垮整条接收链路。 + +**修复方向**:所有报文解析入口统一"先校验长度(与帧头/类型匹配)再取值",越界返回 null 并 `Diagnosis.Log` 记录原始帧;抽出 `ChargeFrameParser` 复用 `CommunicationMessageService` 的安全解析。 + +--- + +## 五、P1 高危问题 + +### P1-1 配置硬编码(IP/URL/路径),多 AGV/换环境必失效(`扫描命中` 14 文件) + +最典型(`精读确认`)`StandardScene.Protocol.VDA5050/VDACar/VDA5050Car.cs:150`: + +```150:168:E:\Work\Core\Simple-FR\StandardSence\StandardScene.Protocol.VDA5050\VDACar\VDA5050Car.cs + public async void GetVDA5050StateFromC() + { + try + { + //string jsonResponse1 = await hc.GetStringAsync($"http://{this.address}:8008/getStat"); + string jsonResponse1 = await hc.GetStringAsync($"http://192.168.2.1:8008/getStat"); + ... + } + catch (Exception ex) + { + } + } +``` + +把按车 `this.address` 的写法**注释掉、写死 `192.168.2.1`**——多 AGV 场景必然全部打到同一地址;外加空 catch 吞错,故障"静默"。其余命中:`Kiva.cs`/`Forklift.cs`(`192.168.2.1:8008`)、`Map.cs`(`127.0.0.1:4321`)、`LoopMission.cs`(西门子 PLC IP)、`TransportDeliveryCallbacks.cs`(回调 URL)、`StandardCADTool.cs`(Windows 盘符路径)等。 + +**修复方向**:抽 `scene.json`/配置中心统一注入;禁止业务代码内联端点;`StandardCADTool` 路径改相对/可配置。 + +### P1-2 `async void` + 在其中 `throw`(CA2200 失栈)→ 进程级崩溃风险 + +- `Kiva.cs:619` `public new async void ForceStop()`(`精读确认`):`async void`,catch 内 `MessageBox.Show`(UI 耦合),最外层 `Console.WriteLine(e); throw;`——`async void` 抛出的异常无法被调用方捕获,直接打到 `SynchronizationContext`/线程池,可致进程崩溃。`new` 还隐藏基类 `ForceStop`(CS0114)。 +- `VDA5050Car.cs:240` `throw ex;`(`精读确认`)破坏原始堆栈(CA2200,全仓 4 条)。`DummyCar.cs` 同款。 +- `async void` 在 CarTypes/Charge/VDA5050/CAD 等多文件广泛存在(`扫描命中`)。 + +**修复方向**:事件处理器之外一律 `async Task`;确需 `async void` 的入口用 `try/catch` 兜底并 `Diagnosis.Log`,不得外抛;`throw ex;` → `throw;`。 + +### P1-3 空 `catch{}` 静默吞异常(`扫描命中` 10 文件) + +`Kiva.cs`、`VDA5050Car.cs`、`FLChargeStation.cs`、`AbstractLoopMission.cs`、`Commons.cs`、`AsyncTcpClient.cs`、`LoopViewer.cs` 等。`Kiva.cs:606`、`VDA5050Car.cs:165` 为典型业务路径空 catch。 + +> 注:`AsyncTcpClient` / `ModbusDoorController` 中环绕 `Close()/Dispose()` 的空 catch 属可接受的清理兜底,应保留但加注释;业务路径空 catch 必须改为记录日志。 + +### P1-4 同步阻塞调用 `.Result/.Wait()/GetAwaiter().GetResult()`(`扫描命中` 7 文件) + +`ButtonMission.cs`、`DoorMission.cs`、`VDA5050Car.cs` 等。`Kiva.cs:635 status.programs.task.Wait()`(`精读确认`)在 UI/线程上下文易死锁。**修复**:异步链路打通,避免 sync-over-async。 + +### P1-5 `new HttpClient()` 反复实例化(Socket 耗尽)(`扫描命中`) + +`Forklift.cs`/`Kiva.cs`/`VDA5050Car.cs`/`WebApi.cs` 等频繁 `new HttpClient`。**修复**:单例或 `IHttpClientFactory`/`SocketsHttpHandler`(设 `PooledConnectionLifetime`)。 + +--- + +## 六、P2 结构 / 质量问题 + +### P2-1 `Commons.cs` 上帝工具类(`精读确认`) +- `AddOrUpdateCarField/SiteField/MissionField` "ContainsKey→Remove+Add / else Add" 模板**重复 4 份**,应为 `dict[key]=value`。 +- `AddOrUpdateTag` 名为 update 实为 add(更新逻辑被注释),重复键会抛错,命名误导。 +- `CarValue`:存在 `electricCurrent` 时**忽略入参 key** 直接返回,疑似 bug。 +- `GoSite` catch 内 `Console.WriteLine + Thread.Sleep(3000)`,注释写"重新执行"但**并未真正重试**。 +- 调度 `NearestTask`(约 398–538)巨函数、深嵌套、大段 `#region ObsoleteCode` 注释代码、魔法优先级 `Priority=50`。 + +### P2-2 `WebApi.cs` 2661 行上帝文件(`精读确认`) +错误响应 `new { Success=false, Code=500, Data="null", Message=... }` 模板**复制几十处**;路由全堆一个文件。**修复**:抽 `ApiResult.Fail/Ok` 帮助器;按资源拆分路由模块;老接口归入 `WebApi.Core(deprecated)` 并规划迁移。 + +### P2-3 日志体系不统一(`扫描命中` 22 文件 `Console.WriteLine`) +与 `Diagnosis.Log` 混用。`ModbusDoorController` 已全程 `Diagnosis.Log`,应作为统一范式推广;禁用 `Console.WriteLine` 于业务代码。 + +### P2-4 UI 与业务耦合(`扫描命中`) +`MessageBox.Show` 出现在 `Commons.cs`(TrafficControl.OnDeadLock)、`Kiva.cs:648`、`DoorManager.cs`、`ButtonBoxManager.cs` 等业务/管理类中。**修复**:业务层只发事件/日志,弹窗交由 UI 层(后续 migu 平台)。 + +### P2-5 `while(true)+Thread.Sleep` 忙等/阻塞(`扫描命中` 13 文件) +`Forklift.cs`、`StandardChargeMission.cs`、`ChargeUdpService.cs`、`VDA5050Car.cs` 等。**修复**:改 `CancellationToken`+可中断等待或定时器;与 P0-1 协作式停止一并处理。 + +### P2-6 AsyncTcpClient 细节(`精读确认`) +- `Send` 失败抛 `InvalidProgramException`(异常类型不当,应 `InvalidOperationException`/自定义)。 +- `HandleDatagramWritten` 调 `EndWrite` 无 try,写失败异常落到线程池无人观测。 +- `uint on = 1;` 未使用字段(CS0414)。 + +--- + +## 七、编译告警分类(全量,双配置合计 90 实例 ≈ 45/配置) + +| 告警码 | 数量 | 含义 | 处置 | +|---|---|---|---| +| CS0108 | 16 | 隐藏继承成员未加 `new` | 显式 `new`/`override` 或改名 | +| CS4014 | 14 | 调用未 `await`(即发即弃) | 显式 `await` 或 `_ =` 并说明 | +| CS0414 | 14 | 私有字段赋值但从未使用 | 删除 | +| SYSLIB0006 | 14 | `Thread.Abort` 已弃用 | 见 **P0-1** | +| CS0105 | 6 | 重复 using | 删除 | +| CS0162 | 6 | 不可达代码 | 清理 | +| CS0168 | 6 | 变量声明未用 | 删除 | +| CA2200 | 4 | `throw ex` 失栈 | 改 `throw;` | +| CS8321 | 2 | 局部函数未用 | 删除(如 VDA5050Car `monitor()`) | +| CS0169 | 2 | 字段从未使用 | 删除 | +| CS0114 | 2 | 隐藏继承成员(如 ForceStop) | `override`/`new` | +| CS0219 | 2 | 变量赋值未用 | 删除 | +| CS0649 | 2 | 字段从未赋值 | 初始化或删除 | + +--- + +## 八、分子系统评述(摘要,详版见架构方案) + +- **CarTypes**:`BasicCarFields/SiteFields/TrackFields/PlanFields` 字段袋设计合理(`BasicFields.cs`,`CarLength/CarWidth` 默认 `-1` 作"未配置"哨兵,已被避障 Coder 正确利用);但具体车型(Kiva/Forklift/VDA5050Car)是巨类,混杂通信、状态、UI、调度,async void/空 catch/硬编码集中。 +- **Coders**:本轮已完成磁导航统一与避障去重(`AvoidanceParamCoder` 4 参 + `AvoidanceParamLWCoder` 2 参),结构清晰,建议继续把车型内联 Coder 收敛到 `CommonTrackCoders`。 +- **Missions**:Chained/InterLock/Scheduler 线程模型粗放(裸 `new Thread`+`Abort`+`while(true)`),状态机散落字符串 `status.status`。建议统一 `MissionRunnerBase`(CancellationToken + 状态枚举)。 +- **Charge**:解析存在"安全范本"与"风险路径"并存(见 P0-3);UDP 服务与 Mission 线程耦合。 +- **Devices(新)**:`ModbusDoorController` 优秀;唯一瑕疵是用析构函数兜底 `Disconnect`(在 GC 线程取锁+`Wait`,有风险),应实现 `IDisposable` 显式释放。 +- **VDA5050**:MQTT/HTTP 异步用法不规范(async void、throw ex、硬编码 IP、Console 日志),状态处理 `ProcessCacheAndSendOrderMessage` 内大量 Console。 +- **WebApi**:见 P0-2 / P2-2,最高优先级重构对象。 + +--- + +## 九、正面样板(建议作为团队基线) + +1. `StandardScene.Devices/Door/ModbusDoorController.cs`:`CancellationTokenSource` 协作式停止、`lock` 线程安全、变更检测(`_lastSentControl`)、重连节流、统一 `Diagnosis.Log`、资源清理。 +2. `StandardScene.Core/TCP/AsyncTcpClient.cs`:锁保护、陈旧回调防护、自动重连。 +3. `StandardScene.Core/Charge/CommunicationMessageService.cs`:报文解析前置长度校验(安全解析范本)。 + +--- + +## 十、整改路线图 + +**第 1 批(P0,本次执行)** +1. Thread.Abort → 协作式停止(6 文件 8 处)。 +2. WebApi 反射 execute 加来源校验 + `[MethodMember]` 白名单。 +3. 充电实时报文路径补长度校验(复用安全解析)。 + +**第 2 批(P1)** +4. 硬编码端点配置化(VDA5050/Kiva/Forklift/Map/Loop/CAD)。 +5. `async void`→`Task`、`throw ex`→`throw`、业务空 catch 加日志。 +6. HttpClient 单例化;sync-over-async 拆解。 + +**第 3 批(P2/结构)** +7. `ApiResult` 帮助器 + WebApi 拆分;`Commons` 拆服务、修 `CarValue`/`GoSite`/`AddOrUpdate`。 +8. 统一 `Diagnosis.Log`;UI 解耦;`MissionRunnerBase` 统一线程/状态机。 + +**第 4 批(P3 卫生)** +9. 清 45 项告警(重复 using、未用字段、不可达代码、隐藏成员)。 + +--- + +## 附录:扫描方法 + +- 反模式:`rg` 扫描 `Thread.Abort` / `catch\s*\{\s*\}` / `throw ex;` / `async void` / `\.Result|\.Wait\(\)` / 硬编码 IP / `Console.WriteLine` / `while\s*\(\s*true\s*\)` / `new HttpClient` / `MessageBox.Show` / 魔法下标。 +- 告警:`dotnet build --no-incremental` → `_buildwarnings.txt` → 按告警码聚合计数。 +- 精读:AsyncTcpClient、Commons、CommunicationMessageService、VDA5050Car、WebApi、Kiva、AbstractLoopMission、ModbusDoorController、BasicFields 等。 diff --git a/StandardScene会话14交接摘要.md b/StandardScene会话14交接摘要.md new file mode 100644 index 0000000..323c853 --- /dev/null +++ b/StandardScene会话14交接摘要.md @@ -0,0 +1,241 @@ +# StandardScene 插件化拆分 — 会话14 交接摘要 + +> **用途**:供其他 AI 会话快速读取上下文,继续推进 StandardScene 大改或 SimpleLite 内核改造。 +> **工作目录**:`E:\Work\Core\Simple-FR\StandardSence` +> **主交付物**:`StandardScene拆分计划.md`(**v2**,已落盘) +> **上游设计**:`E:\Work\Core\Simple-FR\配置向导与导航场景插件化设计.md`(第 5 节 StandardScene 拆分、第 11.3 节 Phase C) +> **新宿主 API 文档**:`E:\Work\Core\Simple-FR\Simple\SimpleLite\Docs\MIGU-API.md` +> **整理时间**:2026-06-09 + +--- + +## 1. 本会话做了什么 + +| 阶段 | 内容 | 状态 | +|---|---|---| +| 启动 | 用户要求用 wuxianChat 建立「会话14」 | 曾尝试 MCP,一度因执行后端不可用失败 | +| 精读代码 | 对 `StandardSence` 约 110 个 `.cs` 做逐模块走查(车型、Mission、设备、WebApi、VDA5050 等) | ✅ 完成 | +| 产出 v1 计划 | 写入 `StandardScene拆分计划.md`:目录规划、功能归属矩阵、抽离清单、技术难点、分阶段路线 | ✅ 完成 | +| 用户评审反馈 | 宿主改 SimpleLite、net8.0、设备独立 dll+热插拔、删除 FactoryTest/松灵、WebApi 暂留后期废弃 | ✅ 已纳入 | +| 阅读 SimpleLite | 确认 `SimpleLite.csproj` = net8.0 / CycleGUI / EmbedIO;阅读 MIGU-API 做 WebApi 迁移索引 | ✅ 完成 | +| 产出 v2 计划 | 全文更新 `StandardScene拆分计划.md` | ✅ 完成 | +| 代码改动 | **无**(本会话仅分析与文档,未改业务代码) | — | + +--- + +## 2. 用户原始诉求(按时间) + +### 2.1 第一轮 + +> 整个仓库需要大改。参考 `配置向导与导航场景插件化设计.md` 中关于 StandardScene 的「导航场景插件化」部分;精细化读当前代码,抽离标准功能,做好仓库目录规划与功能规划,**先把 plan 做出来**到 StandardScene 本地 md 文件。 + +### 2.2 第二轮(评审反馈,已写入 v2) + +1. **设备驱动**需要独立 dll,并且**支持热卸载和加载**。 +2. StandardScene 依赖 **`SimpleLite.dll`**,老 **`SimpleComposer` 废弃**(**另一个 AI 对话窗口**正在改相关引用)。 +3. **目标框架统一 `net8.0`**(WinForms 场景需 `net8.0-windows` 的说明在评审中被修正:SimpleLite 本身是纯 `net8.0` + CycleGUI,故 StandardScene 应**去 WinForms**)。 +4. **`FactoryTest`、松灵残留**不纳入 Core,**直接删除**。 +5. **`WebApi.cs`** 是针对老平台的 Nancy 接口:整理后**暂时保留在 Core**,后期废弃,改用 SimpleLite 接口能力(MIGU-API.md);**此版本先保留**。 + +### 2.3 第三轮 + +> 把以上会话整理成 md 文件,分享给另一个会话读取。 +> → 即本文档。 + +--- + +## 3. 核心结论(另一会话必须知道的) + +### 3.1 架构修正:导航 ≠ 车型 + +上游设计隐含「按车型/导航整包切 dll」,**与代码事实不符**: + +- 导航由 **轨道/站点 fields + TrackCoder** 决定,与车型**正交**。 +- 例:`Kiva` 同一类上同时挂 **磁导航 coder**、**二维码 coder**、**激光避障 coder**(非 SLAM 定位)。 +- **正确拆法**:`StandardScene.Core` 保留车型本体 + 任务/充电/互锁等;导航能力抽到 `Magnetic` / `QrCode` / `Laser` 等 dll,以**可插拔 coder** 形式挂载。 + +### 3.2 激光:避障 vs 导航定位 + +| 能力 | 代表 | 归属 | +|---|---|---| +| 激光避障 | `LidarArea`、`SwitchLidarArea`、各车型通用 | **Core** | +| 激光 SLAM 定位/地图 | `LidarMap`、`getLidarMap`、拉 `127.0.0.1:4321` | **Laser dll** | + +### 3.3 三个正交维度 + +1. **导航**:磁 / 二维码 / 激光(SLAM) +2. **车型**:Kiva、叉车、多舵轮顶升、机械臂、仿真车等 +3. **设备驱动**:充电桩(FL/MuXing/PCB)、门(Modbus)、按钮盒(Leeg/Azowie) + +设备驱动必须 **独立 `Devices.*` dll + 热插拔**(SimpleLite `/plugins` + collectible ALC)。 + +### 3.4 VDA5050 + +- `CarTypes/VDACar/` 是完整 **MQTT 协议栈**,建议独立 `StandardScene.Protocol.VDA5050` dll。 +- 耦合点:`ArmCar` 引用 `VDA5050SiteField`,拆分时需解耦。 + +### 3.5 宿主与框架(v2 已定) + +| 项 | 旧 | 新 | +|---|---|---| +| 宿主 | `SimpleComposer.exe` (.NET 4.8) | **`SimpleLite`** (net8.0) | +| 契约 | `RefSimpleCore.dll` + Composer 程序集 | **`SimpleCore` + SimpleLite** | +| UI | WinForms(大量窗体) | **CycleGUI / 平台 Web**(去 WinForms) | +| 对外 API | `WebApi.cs` (Nancy 1.4.5) | 暂留 Core;后期 **EmbedIO**(MIGU-API) | + +**SimpleLite 事实**(来自 `SimpleLite.csproj`):`TargetFramework=net8.0`,`OutputType=Exe`,UI 用 CycleGUI,WebApi 用 EmbedIO,引用 `SimpleCore`。 + +### 3.6 老 WebApi 处置 + +- `WebApi.cs` ~123KB,40+ 端点,**与导航弱相关**(导航相关主要是 `QrMap`、`getLidarMap`)。 +- **本版**:整理为 `WebApi.Core.cs` 暂留 Core,标 `[Obsolete]` / deprecated。 +- **后期**:按 `StandardScene拆分计划.md` §4.7 映射到 SimpleLite `/api/sl/projection/*`。 +- **缺口**:二维码地图下发、激光 SLAM 取图在 MIGU-API **暂无直接对应**,迁移前需在 SimpleLite 或场景插件侧补接口。 + +### 3.7 必须删除的文件(不进 Core/Customer) + +| 文件 | 原因 | +|---|---| +| `FactoryTest.cs` | 产测专用 | +| 根目录 `SongLingDeliveryViewer.Designer.cs` | 松灵客户残留,无主文件、未编入 csproj | +| 根目录 `MultiWheelLifterCar.cs` | 与 `CarTypes/MultiWheelLifterCar.cs` 重名死文件,未编入 csproj | +| `CarTypes/UselessCar.cs` | `[CarType]` 已注释,测试残留 | + +--- + +## 4. 目标 dll 结构(摘要) + +``` +StandardScene.Core/ net8.0 基座(alwaysLoad) +StandardScene.Magnetic/ 磁导航 +StandardScene.QrCode/ 二维码导航 + SyncQrMap +StandardScene.Laser/ SLAM / LidarMap +StandardScene.Protocol.VDA5050/ VDA5050 MQTT 栈 +StandardScene.Devices.Charge/ 充电桩驱动(热插拔) +StandardScene.Devices.Door/ 门控驱动(热插拔) +StandardScene.Devices.ButtonBox/ 按钮盒驱动(热插拔) +``` + +各可激活导航/设备 dll 配 `scene.json`,对接 SimpleLite `POST /api/sl/projection/scenes/apply` 与 `active-scenes.json`。 + +**详细文件级归属矩阵**见 `StandardScene拆分计划.md` §4,勿在本摘要重复展开。 + +--- + +## 5. 可抽离的重复代码(C0 优先) + +| 重复项 | 现状位置 | 目标 | +|---|---|---| +| 磁循迹器 | `Kiva.AllCarMagTrackCoder` + `MultiWheelLifterCar.MagTrackCoder` | 合并为 `Magnetic.MagneticTrackCoder` | +| `newReset` / `newTrafficReset` | Kiva、Forklift、MultiWheelLifterCar 各一份 | 上提 `StandardCarBase` | +| `SetDisplayInfo`、远程急停/复位 HTTP | 多车型雷同 | Core 基类默认实现 | +| `GetCarStatus` | Commons 与 MultiWheelForkLifter 各一份 | 统一 Commons | +| 避障/IO/纠偏 coder 模板 | 各车型粘贴 | Core 通用 coder 模板集 | + +--- + +## 6. 技术难点(需与内核会话协同) + +### 6.1 TrackCoder 运行期注册(最关键) + +- **现状**:`[TemplateTrackCoderSettings]` / `[ProgramTrackCoderSettings]` **编译期硬绑定**在车型类上。 +- **目标**:导航 dll 加载时为车型**注册** coder,卸载时移除。 +- **方案**:优先在 **`SimpleCore` 增加 coder 注册表**;导航 dll 在 `INavigationProfile.OnActivate` 注册。 +- **兜底**:Core 暂保留全量 coder,导航 dll 只承载 API/地图/清单(保证不回归)。 + +### 6.2 net4.8 → net8.0 + 去 WinForms + +- 引用从 `SimpleComposer.exe` 切到 `SimpleLite` / `SimpleCore`。 +- 命名空间 `SimpleComposer.RCS` → `SimpleLite.RCS` 等(**另一会话进行中**)。 +- 所有 WinForms 窗体迁 **CycleGUI** 或平台 Web;`MessageBox` 改 CycleGUI 弹窗。 +- 涉及窗体:`DeliveryViewer`、`LoopViewer`、`TrafficInterlockViewer`、`VehicleMonitor`、各 `Charge/*Form`、`DoorMonitor`、`ButtonBoxManager`、`VDACar/TextViewer` 等。 + +### 6.3 热插拔清理 + +设备/导航 dll 卸载前须 `OnDeactivate`:清理 coder 注册、MQTT/TCP 连接、全局回调;配合 collectible ALC,确保无存活 `Car`/`Mission` 实例。 + +--- + +## 7. 分阶段实施(当前均未启动代码) + +| 阶段 | 内容 | 状态 | +|---|---|---| +| **C0** | 删除残留 + 去重沉淀 + 命名空间收敛 + 与 SimpleCore 内核对齐 | ⬜ 待启动 | +| **C1** | 新建 `StandardScene.Core`(net8.0),换宿主,去 WinForms,整理 WebApi.Core | ⬜ | +| **C2** | Magnetic / QrCode / Laser 三导航 dll | ⬜ | +| **C3** | Devices.Charge / Door / ButtonBox(热插拔) | ⬜ | +| **C4** | Protocol.VDA5050 | ⬜ | +| **C5** | 联调 + WebApi 迁 SimpleLite + 文档收尾 | ⬜ | + +--- + +## 8. 待确认项(评审未拍板) + +1. **SimpleCore 是否提供 TrackCoder 运行期注册 API**?(决定 C2 用注册表还是兜底方案) +2. **UI 迁移节奏**:一次性迁 CycleGUI,还是按 dll 分批;哪些仅保留平台 Web? +3. **VDA5050** 是否确认独立 dll?(计划推荐独立) +4. **二维码地图下发 / 激光 SLAM 取图** 在 SimpleLite 侧由谁补接口、何时补? +5. 是否存在**车型仅支持单一导航**的硬约束? + +--- + +## 9. 跨会话分工(重要) + +| 会话/方向 | 负责内容 | 与本计划关系 | +|---|---|---| +| **本会话(会话14)** | StandardScene 代码精读 + 拆分计划 v1/v2 | 主文档已落盘 | +| **另一 AI 会话(用户提及)** | SimpleLite / SimpleCore 引用改造、`SimpleComposer` → `SimpleLite` 命名空间与程序集引用 | StandardScene C1 依赖其进度 | +| **平台 / 配置向导** | `WizardController`、`data/config-deployment.json` | 通过 `/scenes/apply` 驱动插件加载 | + +**协作接口建议**: + +- StandardScene 侧等待:SimpleCore 的 **coder 注册表**、**插件生命周期**(OnActivate/OnDeactivate)、**Collectible ALC** 约定。 +- 内核侧等待:StandardScene 的 **scene.json 清单**、**NavKind 枚举**、各 dll 的 **provides** 字段(见拆分计划 §9)。 + +--- + +## 10. 关键文件索引 + +| 路径 | 说明 | +|---|---| +| `E:\Work\Core\Simple-FR\StandardSence\StandardScene拆分计划.md` | **主计划(v2)**,含归属矩阵、§4.7 WebApi 迁移表、分阶段、风险 | +| `E:\Work\Core\Simple-FR\StandardSence\StandardScene会话14交接摘要.md` | **本文档**,会话级交接 | +| `E:\Work\Core\Simple-FR\配置向导与导航场景插件化设计.md` | 上游框架设计 | +| `E:\Work\Core\Simple-FR\Simple\SimpleLite\Docs\MIGU-API.md` | SimpleLite 新 API(WebApi 迁移目标) | +| `E:\Work\Core\Simple-FR\Simple\SimpleLite\SimpleLite.csproj` | 宿主:net8.0 / CycleGUI / EmbedIO | +| `E:\Work\Core\Simple-FR\StandardSence\StandardScene.csproj` | 现状:net4.8 单体插件 | +| `E:\Work\Core\Simple-FR\StandardSence\Commons.cs` | 插件契约、`CustomOperationsBeforeLoading`、`NoReflectionApi` | +| `E:\Work\Core\Simple-FR\StandardSence\WebApi.cs` | 老 Nancy API(待 deprecated) | +| `E:\Work\Core\Simple-FR\StandardSence\CarTypes\Kiva.cs` | 导航与车型耦合的典型样本 | +| `E:\Work\Core\Simple-FR\StandardSence\CarTypes\BasicFields.cs` | `TagValue` 等轨道/站点字段定义 | + +--- + +## 11. 给下一会话的推荐起手式 + +若继续 **StandardScene 实施**: + +1. 先读 `StandardScene拆分计划.md` §0(TL;DR)和 §4(归属矩阵)。 +2. 从 **C0** 开始:删除 §3.7 所列文件;合并磁循迹器;提取 `StandardCarBase`;`AMRScene1` 命名空间收敛。 +3. 与 **SimpleLite 改造会话**对齐:引用是否已可编译、coder 注册表 API 是否就绪。 +4. **不要**在未确认前大规模改 WebApi 或 WinForms——C1 才系统性处理。 + +若继续 **SimpleLite / SimpleCore 改造**: + +1. 优先落实 **TrackCoder 运行期注册**、**插件 OnActivate/OnDeactivate**、**/plugins 热卸载** 与 StandardScene 计划 §7 对齐。 +2. 评估 MIGU-API 是否需补 **QrMap**、**getLidarMap** 等价端点。 +3. 确认 `SimpleComposer.RCS` → `SimpleLite.RCS` 迁移范围,避免 StandardScene 引用断裂。 + +--- + +## 12. 变更记录 + +| 版本 | 日期 | 说明 | +|---|---|---| +| v1 | 2026-06-09 | 初版拆分计划(代码精读结论) | +| v2 | 2026-06-09 | 纳入 SimpleLite/net8.0/去 WinForms、设备热插拔、删除项、WebApi 暂留+迁移索引 | +| 交接摘要 | 2026-06-09 | 本会话整理,供跨会话阅读 | + +--- + +*本文档为会话级摘要;实施细节、完整类级归属与 WebApi 端点映射以 `StandardScene拆分计划.md` 为准。* diff --git a/StandardScene拆分计划.md b/StandardScene拆分计划.md new file mode 100644 index 0000000..3c0c9b4 --- /dev/null +++ b/StandardScene拆分计划.md @@ -0,0 +1,613 @@ +# StandardScene 插件化拆分计划(导航场景插件化 · Phase C 落地) + +> 版本:草案 **v2**(按评审反馈更新) +> 编写依据:对当前工程 `E:\Work\Core\Simple-FR\StandardSence`(.NET Framework 4.8 单体插件)的**逐文件精读**。 +> 上游设计:承接并细化《配置向导与导航场景插件化设计.md》第 5 节「StandardScene 拆分」与第 11.3 节「Phase C」。 +> 本文目标:把上游"框架级"拆分意图,落地为**基于真实代码事实、可直接执行**的文件级/类级拆分计划。 +> 范围声明:本文原为**计划文档**。**自「会话1」(2026-06-09) 起已开始落地实施**,实际进度与代码现状见 **§11 实施进度记忆**(含已落地改动、当前可编译状态、待确认阻塞项)。 + +### ⚠️ 架构决策变更(2026-06-12,用户拍板):「磁 / 二维码 / 激光」三场景 → **两场景平台** + +原计划的 `Magnetic` / `QrCode` / `Laser` 三个导航 dll 调整为 **两个场景平台插件**(已落地,全解决方案 0 错误): + +| 插件 dll | scene id | 内容 | 说明 | +|---|---|---|---| +| `StandardScene.Magnetic.dll` | `scene.mag` | Kiva、MultiWheelLifterCar + `MagneticTrackCoder` | 磁导航平台(保留车型上的 Qr 地标段能力) | +| `StandardScene.QrLidar.dll` | `scene.qrlidar` | Forklift、MultiWheelForkLifter、DualLiftingCar、MultiVehicleCar、ArmCar + `SyncQrMap` | 激光+二维码融合平台:激光坐标导航由内核 `GhostCar.BasicGo` 兜底,`QrGo` 按轨道 tag 逐段触发,**融合或单独使用均可** | +| `StandardScene.Devices.dll` | `scene.device` | 不变 | 清单 id 由 `devices` 规范化 | +| `StandardScene.Protocol.VDA5050.dll` | `scene.vda5050` | 不变 | 清单 id 由 `protocol.vda5050` 规范化 | + +关键机制结论与配套改动: + +1. **车型按平台归位**(推翻 v2 "车型留基座"):依据 = 项目存档按**短类名**(`JSONLoader` 用 `type.Name.ToLower()`)匹配车型,类迁 dll 不破坏旧存档;coder 特性 `GetCustomAttributes(inherit:true)` 沿继承链收集,内核 `GhostCar` 的 BasicGo 天然被所有车型继承。 +2. **共享字段袋下沉基座**:`KivaFields.cs` / `MultiWheelLifterFields.cs`(ArmCar、MultiVehicleCar 跨平台继承它们);`IScriptErrorRecoverable` 接口解耦 `AbstractLoopMission` 对 Kiva 的反向依赖。 +3. **清单命名修正**:内核只识别 `.scene.json`,原裸 `scene.json` 永远不会被扫描到——已全部改名并规范 id。 +4. **内核配套**(Simple 仓库):① `Startup.LoadPlugins` 两阶段加载——清单 `requiresCore` 声明的基座(`StandardScene.dll`)自动并入 alwaysLoad 且 **non-collectible 先行加载**(否则衍生插件的 collectible ALC 解析不到基座,运行期必炸);② `SceneManifest.navKinds` 多导航声明 + `INavigationProfile.Kinds`(qrlidar 同时覆盖 Laser+QrCode,`FindByKind` 按集合匹配);③ `ShouldLoad` 规则改为「**有清单(含设备/协议)即参与激活判定**,无清单兼容全加载」,scene.device 因此可被选择性加载。 +5. **平台配套**(Migu2.0):`DeploymentProfile.NavKindToSceneId` 改映射 magnetic→scene.mag、qrcode/laser→scene.qrlidar;向导写 active-scenes.json 时固定并入 scene.device。 + +### v2 评审反馈要点(本次更新依据) + +1. **宿主切换**:StandardScene 改为依赖 **`SimpleLite`(net8.0)**,**老 `SimpleComposer.exe`(net4.8)废弃**。内核引用层(命名空间 `SimpleComposer.RCS` → `SimpleLite.RCS` 等)正由**另一个 AI 会话**同步改造,本文按新宿主表述。 +2. **目标框架统一 `net8.0`**(与 SimpleLite 一致;**非 net8.0-windows**)。SimpleLite UI 采用 **CycleGUI**、WebApi 采用 **EmbedIO**,故 StandardScene **需去除 WinForms 依赖**,窗体迁移到 CycleGUI 或平台 Web。 +3. **设备驱动必须独立 dll**,且**支持热卸载/加载**(配合 SimpleLite `/plugins` reload/unload + collectible ALC)。 +4. **`FactoryTest` 与松灵残留:直接删除**,不纳入 Core,也不纳入 Customer。 +5. **`WebApi.cs` 是面向老平台的 Nancy 接口**:本次**整理后暂留 Core**,**后期废弃**,能力迁移到 SimpleLite 接口(见 `E:\Work\Core\Simple-FR\Simple\SimpleLite\Docs\MIGU-API.md`)。此版本先保留。 + +--- + +## 0. TL;DR(结论先行) + +1. **导航方式与车型是正交的两个维度**。导航(磁 / 二维码 / 激光)由**轨道/站点字段 + TrackCoder**决定,不是车型固有属性;同一车型(如 `Kiva`)的类上**同时**挂磁、二维码、激光避障三类 coder。上游"按车型整包切到某导航 dll"**切不干净**,修正为「**车型留基座 + 导航能力抽离为可插拔 coder**」。 +2. **激光"避障"(LidarArea) ≠ 激光"导航定位"(LidarMap/SLAM)**:避障通用留 Core,仅 SLAM 地图进 Laser。 +3. **`WebApi.cs`(123KB) 是老平台 Nancy 接口**,导航耦合极弱(仅二维码 `QrMap`、激光 `getLidarMap`)。**整理后暂留 Core,标记 deprecated,后期迁 SimpleLite EmbedIO 接口**(§4.7 给出端点映射)。 +4. **存在大量重复代码**可借本次"抽离标准功能"沉淀:磁导航循迹器写了**两份**、`newReset/newTrafficReset` 在 3 个车型复制、`SetDisplayInfo/GetCarStatus/Mstsc/EmergencyStop` 雷同。 +5. **三个正交维度**:①导航(磁/二维码/激光) ②车型(顶升/叉车/Kiva/机械臂…) ③设备驱动(充电桩/门/按钮盒)。设备驱动**独立成可热插拔 dll**。 +6. **VDA5050 是自成一体的 MQTT 协议栈**,独立 dll。 +7. **两大技术主线**:① 把 TrackCoder 从"编译期特性硬绑定车型"改为"导航插件运行期注册",需内核 `SimpleCore` 配合;② **net4.8 → net8.0 迁移**:换宿主(SimpleComposer→SimpleLite)+ **去 WinForms(窗体迁 CycleGUI/Web)**。 + +--- + +## 1. 现状盘点(基于代码事实) + +### 1.1 工程概况(来自 `StandardScene.csproj`) + +| 项 | 现状 | 目标(本次方向) | +|---|---|---| +| 输出类型 | `Library`(插件) | 多个 `Library` 插件 dll | +| 目标框架 | `.NET Framework 4.8` | **`net8.0`**(与 SimpleLite 一致,去 WinForms) | +| 宿主 | `SimpleComposer.exe`(net4.8) | **`SimpleLite`(net8.0)**,老 Composer 废弃 | +| 契约引用 | `RefSimpleCore.dll` + `SimpleComposer.exe` | **`SimpleCore`(netstandard2.0/net8) + `SimpleLite` 程序集** | +| UI | `System.Windows.Forms`(大量窗体) | **CycleGUI / 平台 Web**(移除 WinForms) | +| 对外接口 | `WebApi.cs`(Nancy 1.4.5) | 暂留 Core;后期迁 **SimpleLite EmbedIO**(MIGU-API) | +| 其它程序集 | `CommonUsage`、`MDCSToolBox`、`leegKeys-sdk`、`LessokajiWeaverUtilities` | 随归属 dll 保留/下沉 | +| NuGet | `MQTTnet`、`EasyModbusTCP`、`IoTClient`、`Jint`、`Nancy(1.4.5)`、`Newtonsoft.Json`、`DocumentFormat.OpenXml` | 随归属拆分(Nancy 验证 net8 兼容或对齐 SimpleLite 的 Nancy 2.0) | +| 产物落地 | `PostBuildEvent` 拷 dll → `build\plugins\` | 各 dll + `scene.json` → SimpleLite `plugins\` | + +### 1.2 模块与文件分组(约 110 个有效 `.cs`) + +| 目录 | 内容 | 现状性质 | +|---|---|---| +| `CarTypes/` | `Forklift`、`Kiva`、`ArmCar`、`DualLiftingCar`、`MultiWheelForkLifter`、`MultiVehicleCar`、`MultiWheelLifterCar`、`DummyCar`、`UselessCar`、`BasicFields`、`VehicleMonitor`(窗体) | 车型 + 内联导航 coder | +| `CarTypes/VDACar/` | `VDA5050Car`、`VDA5050Commons/Helper/Interface/Segment/WebApi`、`MasterMQTTCommunication`、`TextViewer`(窗体) | VDA5050 通信协议栈 | +| `Chained/`(含 `Loop/`) | 搬运/环线任务 + `DeliveryViewer/LoopViewer`(窗体) | 任务调度 | +| `Charge/` | 充电任务 + `ChargeStation*`/`ChargeStrategy*`/`Alarm*`/`Communication*` + 多个 `*Form`(窗体) | 充电逻辑 + UI/服务 | +| `ChargeStationType/` | `AbstractChargeStation` → `FL`/`MuXing`/`PCB` | 充电桩厂商驱动 | +| `InterLock/` | `AbstractInterlockMission`、`TrafficInterlockMission`、`TrafficInterlockViewer`(窗体) | 互锁/交管 | +| `Scheduler/` | `HeartBeat`/`NodeIsEnable`/`RegionalTrafficControl`/`SecuritySignal` Mission | 调度信号 | +| `ExtendDevice/Door/` | `BasicDoorController` → `ModbusDoorController`、`DoorMission`、`DoorTypeAttribute`、`DoorManager/DoorMonitor`(窗体) | 门控驱动 | +| `ExtendDevice/ButtonBox/` | `BasicButtonBox` → `LeegButtonBox`/`AzowieButtonBox`、`ButtonMission`、`ButtonBoxManager`(窗体) | 呼叫器驱动 | +| `Model/` | `Map`(含 `LidarMap`)、`SimpleMap`、`TaskModel`、`LoopTask`、各 `*Setting`、`VehicleStatus`、`MissionState`、`MapStructure` | 数据模型 | +| `Utils/` `TCP/` `CommonTools/` | Json/Modbus/WebAPIHelper、AsyncTcpClient、Snowflake/AtomicFile | 基础设施 | +| 根 | `Commons.cs`、`Heuristic.cs`、`LadderLogic.cs`、`StandardCADTool.cs`、`WebApi.cs`、`FactoryTest.cs` | 公共 + 契约 + 老 API + 产测 | + +### 1.3 车型清单与继承 + +| 车型类 | `[CarType]` | 基类 | 关键特征 | +|---|---|---|---| +| `Kiva` | "Kiva" | `GhostCar` | 内联磁 coder `AllCarMagTrackCoder` + Qr + 避障 + 取放货 + `KivaCarTrackCoder`(转弯) | +| `Forklift` | "叉车" | `GhostCar` | 避障 + 取放货(无显式磁/二维码) | +| `MultiWheelLifterCar`(CarTypes) | "多舵轮顶升车" | `GhostCar` | 内联磁 coder `MagTrackCoder` + Qr + 钻车/夹抱 | +| `MultiWheelForkLifter` | "多舵轮叉车" | `GhostCar` | 简化取放货 | +| `MultiVehicleCar` | "多车联动AGV" | `GhostCar` | 多车 sync + Qr + 钻车 | +| `DualLiftingCar` | "锂电双举升" | `GhostCar` | 无 coder(仅 UI/测试) | +| `ArmCar` | "ArmCar" | `GhostCar` | 机械臂动作;**依赖 `VDA5050SiteField`**、继承 `Kiva*Fields` | +| `DummyCar` | "模拟车-包络" | `Car` | **命名空间 `AMRScene1`**;`Jint` 仿真 | +| `UselessCar` | (已注释,未注册) | `GhostCar` | 测试残留 | + +### 1.4 Mission 继承体系(均派生内核 `Mission`,导航无关) + +``` +Mission +├─ AbstractChainedDeliveryMission / ChainedDeliveryMission(→TransportDelivery) Chained/ +├─ AbstractLoopMission(→LoopMission) Chained/ +├─ TrafficInterlockMission / AbstractInterlockMission InterLock/ +│ └─ AbstractChargeLogiceMission(→StandardChargeMission) Charge/ +├─ HeartBeat/NodeIsEnable/RegionalTrafficControl/SecuritySignal Mission Scheduler/ +├─ DoorMission / ButtonMission ExtendDevice/ +└─ FactoryTest(产测,本次删除) 根 +``` + +### 1.5 设备驱动体系(第三正交维度,本次独立 dll + 热插拔) + +- 充电桩:`AbstractChargeStation` → `FLChargeStation` / `MuXingChargeStation`(牧星) / `PCBChargeStation`;`ChargeStationType` 枚举;`StandardChargeMission` 按 `car.fields["MuXing"]` 区分 FRLD/MuXing。 +- 门:`BasicDoorController` → `ModbusDoorController`;`DoorTypeAttribute`(注册契约)。 +- 按钮盒:`BasicButtonBox` → `LeegButtonBox`(依赖 `leegKeys-sdk`/`leegiot`) / `AzowieButtonBox`。 + +### 1.6 VDA5050 子系统(独立 MQTT 协议栈) + +- `VDA5050Car : Car` + `MasterMQTTCommunication` + `VDA5050Interface/Helper/Commons/Segment/WebApi` + `TextViewer`(窗体);依赖 `CommonUsage.Protocols.VDA5050.*` + `MQTTnet`。 +- VDA5050 车端自管导航定位,与磁/二维码/激光维度无关。 +- 耦合点:`ArmCar` 引用 `VDA5050SiteField`(拆分时解依赖)。 + +### 1.7 删除项(拆分前清理,**不进 Core/Customer**) + +| 文件/类 | 原因 | 处置 | +|---|---|---| +| `FactoryTest.cs` | 产测专用,非标准能力 | **删除**(评审已确认) | +| 根 `SongLingDeliveryViewer.Designer.cs` | 松灵客户残留,仅 `.Designer.cs`、无主文件、未被 `csproj` 收录 | **删除** | +| 根 `MultiWheelLifterCar.cs` | 与 `CarTypes/MultiWheelLifterCar.cs` 重名旧文件,**未被 `csproj` 收录**(死文件) | **删除** | +| `CarTypes/UselessCar.cs` | `[CarType]` 已注释、仅反射示例 | 删除(或移测试样例) | + +--- + +## 2. 关键洞察(精读结论 → 对上游设计的修正)★ + +### 2.1 洞察 A:导航是"轨道/站点字段 + Coder",与车型正交 +- `CarTypes/BasicFields.cs:23` `TagValue //磁导航,二维码值,或者rfid 值`(站点字段)。 +- 磁:`Kiva.cs:37`、`CarTypes/MultiWheelLifterCar.cs:34` `track.fields["Magnet"]`/`NaiveMagnet`(轨道字段)。 +- 二维码:车型 coder `useVerb="dst.tag>0 && src.tag>0"` → `agv.QrGo(...)`。 +- 激光避障:`useVerb="track.LidarArea != -2"` → `agv.SwitchLidarArea(...)`。 +- **结论**:同一车型在不同轨道字段下走不同 coder 分支;按车型切 dll 会复制车型或丢能力。 + +### 2.2 洞察 B:导航逻辑以"特性"内联在车型,且多导航混杂 +- `[TemplateTrackCoderSettings]`/`[ProgramTrackCoderSettings(program=typeof(...))]` 编译期硬绑定到车型类型。 +- `Kiva` 同时挂磁(prio19)+二维码(prio30)+避障+取放货。 +- **结论**:导航 dll 要可插拔地为车型提供 coder,必须把 coder 外置并由内核支持**运行期注册**(§7.1)。 + +### 2.3 洞察 C:激光"避障" ≠ 激光"导航定位" +- 避障:`LidarArea`/`SwitchLidarArea`/`ChangeAvoidanceDistance`/`FrontLidarDetect`——几乎所有车型都有,通用 → Core。 +- 定位:`Model/Map.cs:183 LidarMap`(拉 `127.0.0.1:4321` SLAM 栅格) + `WebApi.cs:1021 /map/getLidarMap` → Laser。 + +### 2.4 洞察 D:可"抽离为标准功能"的重复代码 +| 重复项 | 位置 | 抽离目标 | +|---|---|---| +| 磁循迹器(选路+`MagGo/NaiveMagGo`) | `Kiva.cs:32 AllCarMagTrackCoder`、`CarTypes/MultiWheelLifterCar.cs:29 MagTrackCoder` | 合并为唯一 `MagneticTrackCoder`(Magnetic dll) | +| `newReset/newTrafficReset` | `Kiva.cs:715`、`Forklift.cs:279`、`CarTypes/MultiWheelLifterCar.cs:347` | 上提 Core 车型基类 | +| `SetDisplayInfo` | 各车型雷同 | Core 基类默认实现 | +| `Mstsc/EmergencyStop/ResetClumsy`(HTTP:8008) | 多车型重复 | Core 基类 | +| 避障/IO/纠偏 coder 模板 | 各车型重复粘贴 | Core 通用 coder 模板集 | +| `GetCarStatus` | `Commons` 与 `MultiWheelForkLifter` 各一份 | 统一 `Commons` | + +### 2.5 洞察 E:`WebApi.cs` 是老平台 Nancy 接口,整体面临废弃 +- `ApiController : NancyModule`(`WebApi.cs:35`),40+ 端点;导航相关仅二维码 `QrMap`(`:38/:40/:2050`)+`QrSite`(`:2807`) 与激光 `getLidarMap`(`:1021`)。 +- 其能力在 SimpleLite 已由 **EmbedIO**`/projection/*`(投影快照 + reflection + map-edit + scenes,见 MIGU-API.md)覆盖。 +- **处置(本版)**:整理后**暂留 Core**(标 `[Obsolete]`/注释 deprecated);**后期整体废弃**,迁移索引见 §4.7。 + +### 2.6 洞察 F:设备驱动是第三个正交维度(本次独立 dll + 热插拔) +- 充电桩/门/按钮盒按厂商/型号扩展,与导航、车型都正交。 +- 通过既有特性(`ChargeStationType`/`DoorTypeAttribute`/新增 ButtonBoxType)注册,编译为独立 `Devices.*` dll,支持 SimpleLite `/plugins` 热加载/卸载。 + +### 2.7 洞察 G:UI 形态需从 WinForms 迁到 CycleGUI/Web(net8.0 约束) +- SimpleLite = `net8.0`(纯)、UI 用 **CycleGUI**、WebApi 用 **EmbedIO**,**不依赖 `System.Windows.Forms`**。 +- StandardScene 现有窗体:`DeliveryViewer/LoopViewer/TrafficInterlockViewer/VehicleMonitor/各 Charge*Form/Door*/ButtonBox*/TextViewer` + `Commons` 内 `MessageBox`。 +- **统一 net8.0 ⇒ 必须移除 WinForms**:窗体迁 **CycleGUI**(SimpleLite 立即模式 UI)或平台 **Web**;`MessageBox` 类提示改 CycleGUI 弹窗 / 平台通知。这是本次**重要工作量与风险**。 + +--- + +## 3. 目标架构与目录规划 + +### 3.1 分层依赖图 + +```mermaid +flowchart TD + SC["SimpleCore (netstandard2.0/net8)
    AbstractCar/CarType/Mission/ITrackCoder/Heuristics
    + 导航契约 NavKind/INavigationProfile/ISceneContext
    + (新增)TrackCoder 运行期注册表"] + SL["SimpleLite (net8.0 宿主)
    CycleGUI UI · EmbedIO WebApi · /plugins 热插拔 · /scenes 选择性加载"] + CORE["StandardScene.Core (net8.0)
    导航无关基座:车型本体+任务/充电/互锁/调度+模型/工具+Commons+通用避障coder
    (暂留)WebApi.Core(Nancy, deprecated)"] + MAG["StandardScene.Magnetic"] + QR["StandardScene.QrCode"] + LAS["StandardScene.Laser"] + VDA["StandardScene.Protocol.VDA5050"] + DCH["StandardScene.Devices.Charge
    (热插拔)"] + DDR["StandardScene.Devices.Door
    (热插拔)"] + DBT["StandardScene.Devices.ButtonBox
    (热插拔)"] + + SC --> CORE + SC --> SL + CORE --> MAG & QR & LAS & VDA & DCH & DDR & DBT + SL -. 加载/卸载 .-> CORE & MAG & QR & LAS & VDA & DCH & DDR & DBT +``` + +### 3.2 解决方案目录布局(单工程 → 多工程,统一 net8.0) + +``` +StandardScene/ 解决方案根 +├─ StandardScene.Core/ net8.0,标准基座(alwaysLoad,不单独作为导航场景) +│ ├─ Navigation/ INavigationProfile/NavKind/ISceneContext/Registry +│ ├─ Cars/ 车型基类 StandardCarBase + 各车型本体(无导航 coder、无 WinForms) +│ │ └─ Sim/ DummyCar(仿真,AMRScene1 命名空间收敛) +│ ├─ Coders/ 通用 coder(避障/IO/纠偏/取放货模板) +│ ├─ Chained/ Charge/ ChargeStationType(抽象) / InterLock/ Scheduler/ +│ ├─ ExtendDevice/ 设备框架(基类 + 注册特性) +│ ├─ Model/ Utils/ TCP/ CommonTools/ +│ ├─ Ui/ CycleGUI 面板(替代原 WinForms 窗体) +│ ├─ Commons.cs Heuristic.cs LadderLogic.cs StandardCADTool.cs +│ └─ WebApi.Core.cs 老 Nancy API(deprecated,暂留,后期删) +├─ StandardScene.Magnetic/ → plugins/ + scene.json +├─ StandardScene.QrCode/ → plugins/ + scene.json +├─ StandardScene.Laser/ → plugins/ + scene.json +├─ StandardScene.Protocol.VDA5050/ → plugins/ + scene.json +├─ StandardScene.Devices.Charge/ → plugins/(热插拔) +├─ StandardScene.Devices.Door/ → plugins/(热插拔) +├─ StandardScene.Devices.ButtonBox/ → plugins/(热插拔) +└─ StandardScene.sln +``` + +### 3.3 各 dll 职责 + +| dll | 职责 | 可激活/热插拔 | +|---|---|---| +| `StandardScene.Core` | 导航无关一切:车型本体、任务/充电/互锁/调度、模型/工具、`Commons`/契约、通用避障 coder、(暂留)老 WebApi | 基座(`alwaysLoad`) | +| `StandardScene.Magnetic` | 统一 `MagneticTrackCoder` + 磁条字段语义 | 是 | +| `StandardScene.QrCode` | `QrTrackCoder` + `SyncQrMap` + 二维码地图下发 | 是 | +| `StandardScene.Laser` | `LidarMap`/`getLidarMap`(SLAM) | 是 | +| `StandardScene.Protocol.VDA5050` | VDA5050/MQTT 协议栈 + `VDA5050Car` | 是 | +| `StandardScene.Devices.Charge` | 充电桩 FL/MuXing/PCB 驱动 | **是(热插拔)** | +| `StandardScene.Devices.Door` | 门 Modbus 驱动 | **是(热插拔)** | +| `StandardScene.Devices.ButtonBox` | 按钮盒 Leeg/Azowie 驱动 | **是(热插拔)** | + +--- + +## 4. 功能归属矩阵(文件级 / 类级)★ + +> 动作:**移动**/**拆分**/**抽离**/**保留**/**删除**/**迁UI**(WinForms→CycleGUI/Web)/**待复核**。 + +### 4.1 车型(`CarTypes/`) + +| 现状 | 目标 | 动作 | 说明 | +|---|---|---|---| +| `BasicFields.cs` | Core | 移动 | 车型公共字段 | +| `Kiva.cs::Kiva` | Core(Cars) | 拆分 | 本体留 Core;移除内联磁/Qr coder 特性 | +| `Kiva.cs::AllCarMagTrackCoder` | Magnetic | 抽离 | 并入唯一 `MagneticTrackCoder` | +| `Kiva.cs::KivaCarTrackCoder` | Core(Coders) | 移动 | 转弯,导航无关 | +| `Forklift.cs` | Core(Cars) | 移动 | 通用避障/取放货 | +| `CarTypes/MultiWheelLifterCar.cs::MultiWheelLifterCar` | Core(Cars) | 拆分 | 本体留 Core;移除内联磁/Qr | +| `CarTypes/MultiWheelLifterCar.cs::MagTrackCoder` | Magnetic | 抽离 | 并入 `MagneticTrackCoder`(去重) | +| `MultiWheelForkLifter.cs` | Core(Cars) | 移动 | `GetCarStatus` 并入 `Commons` | +| `MultiVehicleCar.cs` | Core(Cars) | 拆分 | 联动留 Core;Qr coder 外移 QrCode | +| `DualLiftingCar.cs` | Core(Cars) | 移动 | 无 coder | +| `ArmCar.cs` | Core(Cars) | 拆分/解耦 | 解除 `VDA5050SiteField` 依赖 | +| `DummyCar.cs` | Core(Cars/Sim) | 移动 | `AMRScene1` 命名空间收敛 | +| `UselessCar.cs` | — | 删除 | 未注册 | +| `VehicleMonitor.cs(.Designer)` | Core(Ui) | **迁UI** | WinForms → CycleGUI | + +### 4.2 VDA5050(`CarTypes/VDACar/`) + +| 现状 | 目标 | 动作 | +|---|---|---| +| `VDA5050*` + `MasterMQTTCommunication` | `Protocol.VDA5050` | 移动(整子目录) | +| `TextViewer.cs(.Designer)` | `Protocol.VDA5050`(Ui) | 迁UI(CycleGUI) | +| `VDA5050SiteField`(被 ArmCar 引用) | Core 公共字段 或 VDA dll | 待复核(ArmCar 留 Core 则下沉 Core) | + +### 4.3 任务族(`Chained/` `InterLock/` `Scheduler/`) + +| 现状 | 目标 | 动作 | +|---|---|---| +| `Chained/*`、`InterLock/*`、`Scheduler/*` 逻辑 | Core | 移动(导航无关) | +| `DeliveryViewer/LoopViewer/TrafficInterlockViewer`(窗体) | Core(Ui) | 迁UI(CycleGUI/Web) | + +### 4.4 充电(`Charge/` `ChargeStationType/`) + +| 现状 | 目标 | 动作 | 说明 | +|---|---|---|---| +| `AbstractChargeLogicMission`、`StandardChargeMission` | Core | 移动 | 充电逻辑 | +| `ChargeStation*`/`ChargeStrategy*`/`Alarm*`/`Communication*`(服务) | Core | 移动 | 充电管理/服务 | +| 各 `Charge/*Form`(窗体) | Core(Ui) | 迁UI | CycleGUI/Web | +| `ChargeStationType/AbstractChargeStation.cs` | Core | 移动 | 抽象 + 注册契约 | +| `ChargeStationType/{FL,MuXing,PCB}ChargeStation.cs` | **`Devices.Charge`** | 拆分 | 厂商驱动,独立热插拔 dll | + +### 4.5 扩展设备(`ExtendDevice/`) + +| 现状 | 目标 | 动作 | 说明 | +|---|---|---|---| +| `Door/BasicDoorController`、`DoorMission`、`DoorModel`、`DoorTypeAttribute` | Core(框架) | 移动 | 门控框架 + 注册契约 | +| `Door/ModbusDoorController` | **`Devices.Door`** | 拆分 | Modbus 驱动,独立热插拔 | +| `Door/DoorManager/DoorMonitor`(窗体) | Core(Ui)/Devices.Door(Ui) | 迁UI | CycleGUI | +| `ButtonBox/BasicButtonBox`、`ButtonMission`、`ButtonBoxModel` | Core(框架) | 移动 | 按钮盒框架 | +| `ButtonBox/LeegButtonBox`(`leegKeys-sdk`)、`AzowieButtonBox` | **`Devices.ButtonBox`** | 拆分 | 厂商驱动,`leegKeys-sdk` 随驱动走 | +| `ButtonBox/ButtonBoxManager`(窗体) | 对应 dll(Ui) | 迁UI | CycleGUI | + +### 4.6 公共 / 契约 / 模型 / 基础设施 + +| 现状 | 目标 | 动作 | 说明 | +|---|---|---|---| +| `Commons.cs::Commons` | Core | 移动 | 解除对 `DummyCar` 硬引用(`GetVehicleStatus`) | +| `Commons.cs::CustomOperationsBeforeLoading` | 各可激活 dll 各一份 | 复制/分发 | `MessageBox` 死锁提醒改 CycleGUI 弹窗 | +| `Commons.cs::NoReflectionApi`/`ReflectionApiWithParameter` | SimpleCore 或 Core | 待复核 | 多 dll 共用建议下沉 SimpleCore | +| `Heuristic.cs` | Core | 移动 | 启发式(宿主反射注册) | +| `LadderLogic.cs` | Core | 移动 | 防抖/梯形逻辑 | +| `StandardCADTool.cs`(多数 `CADTool`) | Core | 移动 | 地图编辑工具 | +| `StandardCADTool.cs::SyncQrMap` | QrCode | 拆分 | 二维码地图下发 | +| `Model/Map.cs::Map/ArcHelper` | Core | 移动 | 地图序列化 | +| `Model/Map.cs::LidarMap` | Laser | 拆分 | SLAM 栅格图 | +| `Model/*`(其余) | Core | 移动 | 数据模型 | +| `Utils/*`、`TCP/*`、`CommonTools/*` | Core | 移动 | 基础设施 | +| `FactoryTest.cs` | — | **删除** | 评审确认 | +| 根 `MultiWheelLifterCar.cs`、根 `SongLingDeliveryViewer.Designer.cs` | — | **删除** | 死/残留 | + +### 4.7 老 WebApi(`WebApi.cs`)整理与迁移索引 + +**本版处置**:通用端点整理为 `WebApi.Core.cs` 暂留 Core 并标 deprecated;二维码/激光端点随导航 dll;**后期整体删除**,前端改用 SimpleLite 接口。下表为废弃迁移索引(老 Nancy → SimpleLite EmbedIO,依据 MIGU-API.md): + +| 老端点(`WebApi.cs`) | 行号 | SimpleLite 替代(`/api/sl/projection/...`) | +|---|---|---| +| `car_reflection/mission_reflection get_type/methods/fields/execute` | 191–537 | `reflection/methods/*`、`/fields/*`、`/execute/*`、`/bundle/*` | +| `car/getAllCars`、`api/agv/list` | 1047、2095 | `projection/cars` | +| `task/getTask` | 1099 | `projection/missions` | +| `map/getMap` | 995 | `projection/sites`+`/tracks`、或 `map-edit` | +| `car/goSite` | 1070 | `reflection/car/{id}/goto-site` | +| `car/reset/repair/blown/ForceStop/ReStart/...` | 767+ | `reflection/execute/{kind}/{id}/{method}`(`[MethodMember]`) | +| `car/createTask/carTask/cancelTask` | 542/597/900 | `reflection/execute` + `projection/deliveries/*` | +| `set{Charging,Envelope,TrafficControl,PlanRules}Setting` | 1680+ | `reflection/fields/{kind}/{id}/{field}`(写字段) | +| `api/CreateSite` | 2055 | `map-edit/objects/site` | +| `api/QrMap`(二维码) | 2050 | 暂随 QrCode dll;SimpleLite 侧待新增(无直接对应) | +| `map/getLidarMap`(激光) | 1021 | 暂随 Laser dll;SimpleLite 侧待新增(无直接对应) | + +> 注:二维码地图下发、激光 SLAM 取图在 SimpleLite 现有 MIGU-API 中**无直接对应**,迁移时需在 SimpleLite/场景插件侧补接口,故这两块随导航 dll 先行保留。 + +--- + +## 5. "抽离标准功能"清单(去重与沉淀) + +1. **统一磁导航循迹器**:`AllCarMagTrackCoder` + `MagTrackCoder` → 唯一 `StandardScene.Magnetic.MagneticTrackCoder`(参数化 fields)。 +2. **车型基类 `StandardCarBase`(Core)**:上提 `newReset/newTrafficReset`、`SetDisplayInfo`、`Mstsc`、`EmergencyStop/Release`、`ResetClumsy`、`GetCarStatus` 默认实现。 +3. **通用 Coder 模板集(Core/Coders)**:沉淀避障/IO/纠偏/避障尺寸等重复 `[TemplateTrackCoderSettings]`。 +4. **导航能力抽象 `INavigationProfile`**:每个导航 dll 实现一个 Profile(声明 `NavKind` + 提供的 coder/字段语义),Core/宿主反射收集。 +5. **`Commons` 去重**:合并 `GetCarStatus`;`GetVehicleStatus` 去除对 `DummyCar` 的硬编码(改标记接口)。 +6. **设备注册标准化**:充电桩/门/按钮盒统一特性注册,驱动 dll 即插即用 + 热插拔。 +7. **UI 标准化**:原 WinForms 窗体统一迁 CycleGUI 面板(沉淀少量通用面板基类)。 + +--- + +## 6. 命名空间与依赖治理 + +- **宿主/命名空间迁移**:`SimpleComposer.RCS`/`SimpleComposer.UI` → `SimpleLite.RCS`/对应(以内核改造为准,另一会话进行中);引用 `SimpleComposer.exe` → `SimpleLite` 程序集 + `SimpleCore` 契约。 +- **命名空间收敛**:`DummyCar` 的 `AMRScene1` → `StandardScene.Core.Cars.Sim`。 +- **去 WinForms**:移除 `System.Windows.Forms` 引用,窗体迁 CycleGUI/Web,`MessageBox` 改 CycleGUI 弹窗。 +- **反向依赖治理**:`Commons.GetVehicleStatus`↛`DummyCar`;`ArmCar`↛`VDA5050SiteField`;二维码相关集中 QrCode dll,Core 仅留中立扩展点。 +- **三方依赖随归属**:`MQTTnet`→VDA5050;`leegKeys-sdk`→ButtonBox 驱动;`EasyModbusTCP/IoTClient`→Door/Charge 驱动或 Core 工具;`Nancy`→(暂留的 WebApi.Core,验证 net8 兼容或对齐 SimpleLite 的 Nancy 2.0);`Jint`→含 DummyCar 仿真的 Core。 + +--- + +## 7. 关键技术难点与对策 + +### 7.1 难点①:TrackCoder 由"编译期特性"改为"运行期注册" +- 现状:coder 通过特性硬绑定车型类型。 +- 目标:导航 dll 不改 Core 车型源码即可为车型补 coder。 +- 对策:① **内核扩展(推荐)**——`SimpleCore` 增 coder 注册表,导航 dll 在 `INavigationProfile.OnActivate` 注册/卸载时移除(契合 `/plugins` 热插拔);② 车型留占位、导航 dll 实现委派;③ **兜底**——Core 内置全量 coder,导航 dll 只承载 API/地图/字段/清单。 +- **行动项**:与正在改内核引用的会话同步,确认是否纳入注册表 API。 + +### 7.2 难点②:net4.8 → net8.0 迁移(换宿主 + 去 WinForms) +- 宿主:引用 `SimpleComposer.exe`(net4.8) → `SimpleLite`/`SimpleCore`(net8);`SimpleComposer` 独有类型在内核侧补齐/下沉(与另一会话协作)。 +- **去 WinForms(重点)**:所有窗体迁 CycleGUI(SimpleLite 立即模式 UI)或平台 Web;`MessageBox`→CycleGUI 弹窗/平台通知。工作量集中在 `Charge/*Form`、`Delivery/Loop/TrafficInterlock Viewer`、`VehicleMonitor`、`Door/ButtonBox` 管理窗体、`VDACar/TextViewer`。 +- 三方库 net8 验证:`Nancy(1.4.5)`(暂留 WebApi,验证或升 2.0)、`MQTTnet/EasyModbusTCP/IoTClient/Jint/Newtonsoft/DocumentFormat.OpenXml`。 +- Fody/`LessokajiWeaver`:与内核一致(注意上游 §13.2 环境约束)。 + +### 7.3 难点③:插件钩子与多 dll 初始化 +- `CustomOperationsBeforeLoading.Set()` 宿主按 dll 反射调用:拆分后每个可激活 dll 各保留一份;用 `INavigationProfile.OnActivate` 做导航 dll 自初始化,避免重复注册全局回调。 + +### 7.4 难点④:设备/导航 dll 热插拔(collectible 卸载) +- 配合 SimpleLite `/plugins/reload`、`/plugins/{name}/unload` 与 `/scenes/apply`:dll 须可被 collectible ALC 干净卸载(卸载前无存活 `Car/Mission` 实例),`OnDeactivate` 清理注册的 coder/设备/回调/MQTT 连接/TCP 客户端。 + +### 7.5 难点⑤:老 WebApi 暂留与最终下线 +- `WebApi.Core`(Nancy) 暂留 Core 仅为过渡;新功能一律走 SimpleLite EmbedIO。按 §4.7 索引逐步迁移,迁完即删;二维码/激光取图需先在 SimpleLite/场景插件侧补接口。 + +--- + +## 8. 分阶段实施计划(务实路线) + +> 原则:每阶段都能编译、能加载、可回退。 + +### C0 · 准备与对齐(低风险,先做) +- 删除:`FactoryTest.cs`、根 `SongLingDeliveryViewer.Designer.cs`、根 `MultiWheelLifterCar.cs`、`UselessCar`。 +- 去重沉淀(§5):统一 `MagTrackCoder`、`GetCarStatus`;提取 `StandardCarBase`。 +- 命名空间收敛 `AMRScene1`→Core。 +- 与内核会话对齐:`SimpleLite`/`SimpleCore` 引用与命名空间、coder 注册表(§7.1)、导航契约(上游 Phase A 已就绪)。 +- 验收:编译通过、行为不变。 + +### C1 · Core 基座 net8.0 化(换宿主 + 去 WinForms 闭环) +- 新建 `StandardScene.Core`(net8.0),迁入导航无关全部内容;引用切到 `SimpleLite`/`SimpleCore`。 +- **去 WinForms**:窗体迁 CycleGUI;`MessageBox`→CycleGUI。 +- 整理老 `WebApi`→`WebApi.Core`(deprecated, 暂留)。 +- coder 先用兜底(§7.1 方案③)保证不回归。 +- 验收:`StandardScene.Core.dll` 被 SimpleLite 加载、跑通搬运/充电/交管。 + +### C2 · 抽离导航能力 dll +- `Magnetic`(唯一 `MagneticTrackCoder`)/ `QrCode`(`QrTrackCoder`+`SyncQrMap`+`QrMap`)/ `Laser`(`LidarMap`+`getLidarMap`),各带 `scene.json`。 +- 按 §7.1 选定方案把 coder 接到车型。 +- 验收:仅激活某导航时对应能力可用,其余不加载。 + +### C3 · 设备驱动 dll 化(必做,热插拔) +- `Devices.Charge`(FL/MuXing/PCB)、`Devices.Door`(Modbus)、`Devices.ButtonBox`(Leeg/Azowie);`leegKeys-sdk` 随驱动。 +- 验证 `/plugins` reload/unload 热插拔;`OnDeactivate` 清理连接。 +- 验收:设备驱动可独立热加载/卸载。 + +### C4 · VDA5050 协议 dll +- `Protocol.VDA5050`(整 `VDACar/` 迁出,含 MQTT);解 `ArmCar↔VDA5050SiteField`。 +- 验收:激活后 VDA5050 车可用、可卸载。 + +### C5 · 联调、WebApi 迁移与文档 +- 三导航 + 设备 + 协议组合联调;对接 `/scenes/apply` + `active-scenes.json`。 +- 按 §4.7 把可迁的 WebApi 端点切到 SimpleLite,逐步删 `WebApi.Core`。 +- 更新本文件 §11 进度 + `scene.json` 实际清单 + `README/DEVELOPMENT_GUIDE`。 + +--- + +## 9. 插件清单契约(`scene.json`,对接上游 §5.5 与 SimpleLite `/scenes`) + +```json +{ + "id": "scene.magnetic", + "displayName": "磁导航场景", + "navKind": "Magnetic", + "assembly": "StandardScene.Magnetic.dll", + "requiresCore": "StandardScene.Core.dll", + "provides": { "trackCoders": ["MagneticTrackCoder"], "carTypeBindings": ["*"] } +} +``` + +- 平台「配置向导」→ `WizardController` 写配置 → 调 SimpleLite `POST /api/sl/projection/scenes/apply`(写 `active-scenes.json` + 增量 reload)。 +- 数据契约:`data/config-deployment.json`(平台)/ `plugins/active-scenes.json`(内核)/ `plugins/.scene.json`(插件)。 + +--- + +## 10. 风险、待确认与验收口径 + +### 已确认(v2) +- 宿主 = SimpleLite;老 SimpleComposer 废弃。 +- 目标框架 = `net8.0`(去 WinForms,UI 迁 CycleGUI/Web)。 +- 设备驱动 = 独立 dll + 热插拔。 +- `FactoryTest`、松灵残留 = 删除。 +- `WebApi.cs` = 整理后暂留 Core、后期废弃迁 SimpleLite。 + +### 待确认 +1. **coder 注册表**:内核是否纳入"运行期把 TrackCoder 注册到车型"的 API(否则 C2 用兜底方案③)。 +2. **UI 迁移范围与节奏**:窗体一次性迁 CycleGUI,还是按 dll 分批;是否部分仅保留平台 Web 入口。 +3. **VDA5050** 独立 dll 确认(推荐独立)。 +4. **二维码地图下发 / 激光 SLAM 取图**:SimpleLite 侧补接口的归属与时间点。 +5. **车型↔导航映射**:是否存在车型仅支持单一导航的硬约束。 + +### 验收口径(每阶段通用) +- 编译 0 错误;搬运/环线/充电/交管不回归。 +- 选择性加载 + 热插拔:激活集合内能力可用,未激活不加载、可干净卸载。 +- 反射 API(SimpleLite `/reflection`)、车型/面板随已激活 dll 自然收敛。 + +--- + +## 11. 实施进度记忆(跨会话持续更新) + +> 状态:⬜ 未开始 / 🟦 进行中 / ✅ 完成 / ⏸ 暂缓。 +> **最近更新:会话1(续3,2026-06-09)——设备三 dll 合并为单一 `StandardScene.Devices` + `ChangeAvoidanceParam` 去重(方案 B),全解 `dotnet build` 0 错误。** + +### 11.0 当前代码现状(重要:已领先早期文档) + +会话1 接手时发现**代码已被先前会话推进**,与 v2 文档/会话14交接摘要描述的「net4.8 单体、未动代码」**不一致**。以 `StandardScene.csproj` 实际为准: + +| 项 | 早期文档记述 | **当前实际** | +|---|---|---| +| 目标框架 | net4.8 | **`net8.0-windows`**(仍 `UseWindowsForms=true`,过渡态,**尚未**去 WinForms 到纯 net8.0) | +| 宿主/契约引用 | SimpleComposer.exe + RefSimpleCore | **已切 `SimpleLite.dll` + `SimpleCore.dll`(netstandard2.0)** | +| Nancy | 1.4.5 | **已对齐 `2.0.0`** | +| 死代码 | 在仓库 | csproj 已 `Compile Remove`,会话1 已物理删除 | +| 命名空间 | SimpleComposer.RCS | 车型 using 已是 `SimpleLite.RCS`(内核改造会话已推进) | + +**可编译基线**:`dotnet build`(net8.0-windows,dotnet SDK 10.0.300)= **0 错误 / 47 警告**(均无害:重复 using、隐藏成员 CS0108、未用变量、`Thread.Abort` SYSLIB0006、CS4014 未 await 等)。 + +### 11.1 步骤状态 + +| 步骤 | 内容 | 状态 | 说明 | +|---|---|---|---| +| P0 | 精读现状 + 产出拆分计划 v1 | ✅ | 逐文件精读 | +| P0.1 | 按评审反馈更新 v2 | ✅ | | +| **路线决策** | 评审定 **路线乙**:先「纯搬运不改逻辑」的结构拆分,去重在新结构里从容做 | ✅ | 会话1 用户拍板 | +| **C0-a** | 物理删除死代码 + 清理 csproj | ✅ | 见 §11.3 | +| **C0-b** | 抽离 **4 个通用(导航无关) coder** 并在 4 车型切换 | ✅ | 见 §11.3;编译 0 错误 | +| C0-c | 合并两份磁循迹器为唯一 `MagneticTrackCoder` | ✅ | 用户定:采用含 `track.Speed` 的 `NaiveMagGo`;MWL 旧类已删、引用改向;编译 0 错误 | +| C0-d | `ChangeAvoidanceParam` 去重 | ✅ | 方案 B:4 参 flag 版 `AvoidanceParamCoder`(MWL+MultiVehicle) + 2 参 L,W 版 `AvoidanceParamLWCoder`(Kiva+Forklift);见 §11.4-2 | +| C0-e | 提取 `StandardCarBase`(newReset/Mstsc/GetCarStatus 等上提)| ⬜ | 未启动 | +| C0-f | `AMRScene1` 命名空间收敛 | ⬜ | 建议并入 C1 建 Core 工程时一起做 | +| 路线乙·1 | 工程迁入 `StandardScene.Core/` + 重写 sln(纯搬运) | ✅ | 编译 0 错;AssemblyName 仍=`StandardScene`,对外 dll 名不变 | +| C1 | 去 WinForms + WebApi.Core 整理 | ⏸ | 用户暂缓(窗体后续迁 migu 平台);过渡期各工程暂 `net8.0-windows` | +| C2 | Magnetic/QrCode/Laser 三导航 dll | ⏸ | 受阻于内核 coder 注册表(§11.4-4) + 用户将自行重构 coder | +| **C3** | 设备驱动 dll 化(Charge/Door/ButtonBox,热插拔) | ✅ | 见 §11.3-E3;**合为单一 `StandardScene.Devices`**(用户定,不分多个),编译 0 错、scene.json 产出 | +| **C4** | VDA5050 协议 dll | ✅ | 见 §11.3-E2;`VDACar/` 整迁出、`VDA5050SiteField` 下沉 Core | +| C5 | 联调 + WebApi 迁移 SimpleLite + 文档收尾 | ⬜ | 含卫星 dll→宿主 `plugins/` 部署 + 真机联调(见 §11.4-5) | + +### 11.2 关键决策记录 +- **路线乙(会话1 确认)**:结构拆分优先、纯搬运不改逻辑;去重沉淀在新结构内做。理由:本环境无法跑真实 AGV 回归,纯搬运行为风险低、编译即可保障。 +- 导航与车型正交;导航 coder 外置为可插拔(运行期注册,内核配合;**当前用兜底=Core/单体内置 coder**,用户要求"先抽离合适的通用 coder")。 +- 激光避障(LidarArea)留 Core,仅 SLAM 地图(LidarMap/getLidarMap)进 Laser。 +- 设备驱动单列 `Devices.*` 独立 dll + 热插拔(评审确认)。 +- 宿主 SimpleComposer→SimpleLite;框架统一 net8.0;UI 去 WinForms 迁 CycleGUI/Web(评审确认)。 +- `FactoryTest`、松灵残留删除(评审确认,会话1 已执行)。 +- 老 `WebApi.cs`(Nancy) 暂留 Core、标 deprecated,后期迁 SimpleLite EmbedIO,迁移索引见 §4.7(评审确认)。 + +### 11.3 会话1 已落地改动明细(2026-06-09) + +**A. C0 死代码物理删除**(编译范围不变,0 错误) +- 删 `FactoryTest.cs`(`[MissionType]` 展会演示进程,反射注册,无其它引用) +- 删 根 `MultiWheelLifterCar.cs`(与 `CarTypes/MultiWheelLifterCar.cs` 重名死文件) +- 删 根 `SongLingDeliveryViewer.Designer.cs`(松灵残留,无主文件) +- 删 `CarTypes/UselessCar.cs`(`[CarType]` 已注释、未注册) +- `csproj`:移除上述 3 条 `Compile Remove`;**保留** `Chained\AbstractChainedDeliveryMission.cs` 的 Remove(孤立未编译旧版本,去留待后续核对) + +**B. 抽离通用(导航无关) coder** —— 新增 `Coders/CommonTrackCoders.cs`(命名空间 `StandardScene.Coders`) +- 基类 `CommonTemplateTrackCoder : ITrackCoder`:内部复用内核 `ProgramCoderHelper.PrepareTrackEngine` + Topaz 求值,`useVerb`/`templateString` 与原模板逐字一致;统一用 `BasicXxxFields`(这些 coder 仅引用 Basic 字段,等价)。priority 由车型 `[ProgramTrackCoderSettings]` 指定。 +- 4 个通用 coder: + - `LidarAreaSwitchCoder`(避障,`track.LidarArea != -2` → `SwitchLidarArea`) + - `AvoidanceDistanceCoder`(无 useVerb → `ChangeAvoidanceDistance(StopDistance,SlowDistance)`) + - `IoAreaSwitchCoder`(`track.IOArea != -1` → `SwitchIoArea`) + - `TrackingErrThreshCoder`(`BiasAlarmThresh>0||DthAlarmThresh>0` → `ChangeTrackingErrThresh`) +- 4 车型已把对应内联 `[TemplateTrackCoderSettings]` 删除,改为 `[ProgramTrackCoderSettings]` 引用(保留各自原 priority): + +| 车型 | LidarArea | AvoidanceDistance | IoArea | TrackingErrThresh | +|---|---|---|---|---| +| `Kiva` | 17 | 20 | 20 | 20 | +| `MultiWheelLifterCar` | 27 | 20 | 20 | 20 | +| `MultiVehicleCar` | 27 | 20 | 20 | 20 | +| `Forklift` | 20 | —(原无) | 20 | 20 | + +- 各车型加 `using StandardScene.Coders;`。 +- **验证**:每步 `dotnet build` 均 0 错误(Kiva 单切先验范式,再批量推 MWL/MultiVehicle/Forklift)。 + +**C. 仍保留为内联 Template / 程序 coder(本次未动)** +- 磁程序 coder:`Kiva.AllCarMagTrackCoder`、`MultiWheelLifterCar.MagTrackCoder`(待 C0-c 合并) +- `ChangeAvoidanceParam`(三变体,待 C0-d) +- `Kiva.KivaCarTrackCoder`(转弯)、`CalibrateWheelEncoder`(仅 Kiva) +- 二维码 `QrGo`(导航专用,归 QrCode dll);各车型取放货/钻车/夹抱/TireFollowing 等(车型专用) + +**D. 会话1(续)去重落地**(编译 0 错误 / 0 lint) +- **磁循迹器合并(C0-c)**:`Kiva.AllCarMagTrackCoder` 重命名为唯一 `MagneticTrackCoder`(含 `${track.Speed}` 的 `NaiveMagGo`,用户确认);`MultiWheelLifterCar.MagTrackCoder` 整类删除,其 `[ProgramTrackCoderSettings(priority=19)]` 改向 `MagneticTrackCoder`。(暂置 `Kiva.cs` 的 `StandardScene.CarTypes` 命名空间,C2 抽 Magnetic dll 时物理迁出。) +- **避障 4 参对合并(C0-d 部分)**:新增 `Coders.AvoidanceParamCoder`(`CommonTemplateTrackCoder` 子类,覆写站点字段袋为含 `ChangeAvoidanceParam` 标志位的 `AvoidanceParamSiteFields`),useVerb/模板与原 `MWL`/`MultiVehicle` 逐字一致;两车型删内联 4 参模板、改 `[ProgramTrackCoderSettings(priority=20)]` 引用。基类新增可覆写 `SiteFieldsType` 钩子(默认 `BasicSiteFields`)。 + +**E. 会话1(续2)结构性拆分落地**(路线乙·结构拆分;全解决方案 `dotnet build` 0 错误 / 45 无害警告) + +*E1. 工程迁入 `StandardScene.Core/`(纯搬运)* +- 原单体整体迁入子目录 `StandardScene.Core/`;`StandardScene.csproj`→`StandardScene.Core.csproj`(**AssemblyName 仍=`StandardScene`**,对外 dll 名不变);重写 `StandardScene.sln`。 +- 新增 `Properties/InternalsVisibleTo.cs`:对 4 卫星程序集开放 internal(`Protocol.VDA5050`/`Devices.Charge`/`Devices.Door`/`Devices.ButtonBox`),使卫星以"纯搬运"访问 Core internal,免去大量 internal→public 侵入式改动。 + +*E2. `StandardScene.Protocol.VDA5050`(C4)* +- `CarTypes/VDACar/`(10 文件)整迁至新工程;`scene.json`(provides VDA5050Car);csproj 引 Core(ProjectReference)+SimpleLite/SimpleCore/CommonUsage/Topaz/Weaver + MQTTnet/Nancy/Jint/Newtonsoft。 +- 解耦:`VDA5050SiteField` 由 `VDACar/VDA5050Car.cs` **下沉**至 Core `CarTypes/ArmCar.cs`(`ArmCar` 留 Core 且引用它,不能反依赖 VDA dll)。 + +*E3. `StandardScene.Devices`(C3,用户选 A;**门/充电桩/按钮盒合并为单一 dll**,用户定不分多个;内部按 `Door/`、`Charge/`、`ButtonBox/` 子目录组织,Core 的 IVT 仅 `StandardScene.Devices` 一项)* +- 搬出 6 具体驱动(**命名空间不变**,仍 `StandardScene.ExtendDevice.*` / `StandardScene.ChargeStationType`,以满足发现谓词 `t.Namespace==基类.Namespace`): + - Door:`ModbusDoorController`(基类 `BasicDoorController`+`[DoorType]` 留 Core) + - Charge:`FL/PCB/MuXingChargeStation`(基类 `AbstractChargeStation`+`ChargeUdpService`/`StandardChargeMission` 留 Core) + - ButtonBox:`Leeg/AzowieButtonBox`(基类 `BasicButtonBox`+`ButtonMission`/`ButtonBoxManager` 留 Core;该 dll 额外引 `Ref/leegKeys-sdk.dll`) +- **行为保持解耦(2 处下转型→基类虚方法)**: + - `ChargeUdpService`:`if(cs is PCBChargeStation s) s.IndexReceive=msg[1]` → `cs.OnUdpMessage(msg)`(`AbstractChargeStation` 空实现、`PCB` override)。 + - `ButtonMission`:`if(bb is AzowieButtonBox a) a.ClearButtonRegister(i)` → `bb.ClearButtonRegister(i)`(`BasicButtonBox` 空实现、`Azowie` 改 override)。 +- **类型发现改跨程序集(5 处,关键)**:原 Core 限定扫描(`Type.GetType(简单名)` / `typeof(基类).Assembly.GetTypes()` / `Assembly.GetExecutingAssembly().GetTypes()`)只在 Core 内找类型,驱动外移后**运行期将找不到**。统一改用内核公开的 `SimpleLite.Utils.UiTypeDiscovery.AllTypes()`(`AppDomain.GetAssemblies()` 全域 + 内置 `ReflectionTypeLoadException` 安全枚举),谓词不变 → 今天在 Core 内仍找到原类型(**行为等价**)、外移后亦能发现。涉及 `StandardChargeMission` / `DoorMission` / `DoorManager` / `ButtonMission` / `ButtonBoxManager`。 +- 关键依据:SimpleLite 自身类型发现即 `UiTypeDiscovery`(AppDomain 全域) + `PluginManager`(从 `./plugins/*.dll` 以 collectible ALC 热加载)→**卫星 dll 路线运行期成立**(同时回证 VDA5050Car 可被发现)。 + +### 11.4 待确认 / 阻塞项(影响 C0 收尾与 C2) + +1. ~~**磁 `NaiveMagGo` 参数差异**~~ **【会话1 已决】**:用户定采用含 `${track.Speed}` 的版本(Kiva 版)。已合并为唯一 `MagneticTrackCoder`;`MultiWheelLifterCar.MagTrackCoder` 删除并改向引用。编译 0 错误。(普通 `MagGo` 两份原本一致;合并后磁逻辑全平台统一。) +2. ~~**`ChangeAvoidanceParam` 统一方式**~~ **【会话1续3 已决:方案 B】**:用户选 B。落地=4 参 flag 版 `AvoidanceParamCoder`(MWL+MultiVehicle) + 新增 2 参 L,W 版 `AvoidanceParamLWCoder`(Kiva+Forklift,触发统一取 `dst.CarLength!=-1 && dst.CarWidth!=-1`);两车型内联 `[TemplateTrackCoderSettings]`→`[ProgramTrackCoderSettings(priority=20)]` 引用。Forklift 行为不变;Kiva 原无条件→统一后未配置长宽(-1)时不再下发 `(-1,-1)`(预期内安全收敛)。编译 0 错。原分析留档如下: + - 现状:`Kiva`=无条件/2 参;`Forklift`=`L≠-1&&W≠-1`/2 参;`MWL`/`MultiVehicle`=`ChangeAvoidanceParam==true`/4 参(含中心点)。 + - 已落地(零行为变更):把**逐字相同**的 `MWL`+`MultiVehicle` 4 参对合并为 `Coders.AvoidanceParamCoder`。 + - 关键事实:`CarLength/CarWidth/CarCenterX/CarCenterY` 均已在 `BasicSiteFields` 定义(中心点默认 0),故 4 参模板对各车型都可解析编译;差异只剩「触发条件 + 参数个数」。 + - 选项(已在会话中给用户):**A**=真·单 coder 分支(flag→4 参 / 否则 L,W 有效→2 参;副作用:Kiva 未配置站点不再发 `(-1,-1)` + MWL 设了 L,W 但 flag=false 会新发 2 参);**B**=两 coder(4 参 flag 版+2 参 L,W 版;仅 Kiva `(-1,-1)` 行为差,无 MWL 污染);**C**=只留已合并的同构对,Kiva/Forklift 维持内联(零变更)。**建议 B**(避障涉安全,最小行为差)。 +3. ~~**去 WinForms 迁移策略**~~ **【会话1 暂定】**:用户"暂不/去掉",本阶段不动窗体,留待 C1 专门处理。 +4. ~~**内核 coder 运行期注册表**~~ **【会话1 已核查】**:当前内核**无插件化 coder 注册表**。`SegmentPlan.SetCoders()` 仅硬接 `TemplateCoderSet`+`ProgramCoderSet` 两套,均按**车型类特性**(`[*TrackCoderSettings]`)反射、在**同程序集**内 `Activator.CreateInstance`(无参构造)实例化——无外部 dll 扫描/动态注册 API。 + - 推论①:本次抽出的 `StandardScene.Coders.*` 程序 coder **能被正确加载**(车型特性 `typeof()` 引用 + 无参构造,命名空间无关),故 C0-b/c/d 成立。 + - 推论②:**C2「导航 coder 拆独立可热插拔 dll」受阻**——需内核侧(另一会话)补「运行期 coder 注册 / 插件程序集扫描」插桩;在此之前**继续兜底=coder 留在 Core 同程序集**、由车型特性引用。 +5. ~~**设备驱动外移后运行期发现**~~ **【会话1续2 已解】**:StandardScene 自有的设备类型发现原为 **Core 限定扫描**(与内核 `UiTypeDiscovery` 全域发现不一致),直接外移会断。已把 5 处统一改 `UiTypeDiscovery.AllTypes()`(行为等价、跨程序集)。**遗留验证项(运行期,归 C5)**:卫星 dll 须被 SimpleLite 实际加载入 AppDomain(`PluginManager` 从 `./plugins/` 加载)发现方生效——需将 `StandardScene.Devices.*.dll`+`scene.json` 部署到宿主 `plugins/` 并做一次真机/集成联调。与 coder(§11.4-4) 不同:设备发现码在**本仓库**、可自主修改,故 C3 不受内核阻塞。 + +### 11.5 下一会话推荐起手式 +1. 读 §11.0(代码现状)+ §11.3(已落地,含 **E. 结构拆分**)+ §11.4(待确认/已解)。 +2. **结构拆分现状**:`StandardScene.Core` + 卫星 `Protocol.VDA5050`、`Devices.{Door,Charge,ButtonBox}` 已建并全解 0 错;导航 dll(C2) 待用户重构 coder + 内核注册表后再动。 +3. 待用户就 §11.4-2 拍板:`ChangeAvoidanceParam` 收尾(建议 B)。coder 整体重构由用户主导。 +4. C5 验证项:把 `StandardScene.Devices.*.dll`+`scene.json` 部署到宿主 `plugins/`,真机/集成验证设备与 VDA 车型的**运行期发现**(§11.4-5)。 +5. 校验手段:每步 `dotnet build StandardScene.sln`(net8.0-windows)须保持 0 错误;真机回归留待有环境时。 + +### 11.6 变更日志 + +| 时间 | 步骤 | 改动 | 备注 | +|---|---|---|---| +| 初始 | P0 | 新增 `StandardScene拆分计划.md`(v1) | 现状精读 + 归属矩阵 + 抽离清单 + 技术难点 + 分阶段 | +| v2 | P0.1 | 全文更新 | 宿主 SimpleLite、框架 net8.0、去 WinForms、设备独立 dll、删除项、WebApi 暂留+迁移索引 | +| 会话1 | C0-a | 物理删除 4 个死代码文件 + 清理 csproj | 编译 0 错误 | +| 会话1 | C0-b | 新增 `Coders/CommonTrackCoders.cs`(4 通用 coder);Kiva/MWL/MultiVehicle/Forklift 切换为 ProgramTrackCoder 引用 | 编译 0 错误;NaiveMag/AvoidanceParam 留待确认 | +| 会话1续 | C0-c | 磁循迹器去重:`AllCarMagTrackCoder`→唯一 `MagneticTrackCoder`(含 `track.Speed`);删 `MagTrackCoder` 改向引用 | 用户确认 track.Speed 版;编译 0 错误 | +| 会话1续 | C0-d | 避障同构对去重:`MWL`+`MultiVehicle` 4 参模板→`AvoidanceParamCoder`;基类加 `SiteFieldsType` 钩子 | 零行为变更;Kiva/Forklift 并法待定(§11.4-2) | +| 会话1续 | 核查 | 内核 coder 注册机制核查:无插件注册表,仅车型特性+同程序集反射 | 见 §11.4-4;C2 需内核插桩 | +| 会话1续2 | 路线乙·1 | 工程迁入 `StandardScene.Core/`、`.csproj`→`StandardScene.Core.csproj`、重写 `.sln`、加 `Properties/InternalsVisibleTo.cs`(4 卫星) | 纯搬运;编译 0 错 | +| 会话1续2 | C4 | 拆 `Protocol.VDA5050`:`CarTypes/VDACar/`(10 文件)整迁出;`VDA5050SiteField` 下沉 `ArmCar.cs` 解耦;scene.json | 编译 0 错 | +| 会话1续2 | C3 | 拆 `Devices.{Door,Charge,ButtonBox}`:6 驱动外移;2 处 `is 具体类`→基类虚方法;5 处类型发现→`UiTypeDiscovery.AllTypes()` 跨程序集 | 行为等价;全解编译 0 错、3 dll+scene.json 产出 | +| 会话1续3 | C3 | 三 `Devices.*` **合并为单一 `StandardScene.Devices`**(内部 Door/Charge/ButtonBox 子目录;IVT 3→1;删旧 3 工程、重写 sln) | 用户定"不分多个";编译 0 错、单 dll+scene.json 产出 | +| 会话1续3 | C0-d | `ChangeAvoidanceParam` 去重收尾(方案 B):新增 2 参 `AvoidanceParamLWCoder`;Kiva/Forklift 内联模板→`[ProgramTrackCoderSettings(priority=20)]` 引用 | 编译 0 错;Forklift 不变、Kiva `(-1,-1)` 安全收敛 | + +--- + +*附:本计划引用的类/文件/行号均来自当前工程 `E:\Work\Core\Simple-FR\StandardSence` 实际代码走查;SimpleLite 接口依据 `E:\Work\Core\Simple-FR\Simple\SimpleLite\Docs\MIGU-API.md` 与 `SimpleLite.csproj`(net8.0 / CycleGUI / EmbedIO)。* diff --git a/StandardScene架构重构方案.md b/StandardScene架构重构方案.md new file mode 100644 index 0000000..2bc974d --- /dev/null +++ b/StandardScene架构重构方案.md @@ -0,0 +1,267 @@ +# StandardScene 架构重构方案 + +> 配套文档:《StandardScene代码审查报告.md》(质量/缺陷)、《StandardScene拆分计划.md》(拆分进度) +> 本文聚焦**结构与架构合理性**:现状全景 → 逐模块深度分析 → 目标分层 → 程序集边界 → net8.0 去 Windows → 分阶段迁移路径。 +> 日期:2026-06-09 + +--- + +## 一、现状架构全景 + +### 1.1 程序集与依赖 + +| 程序集 | AssemblyName | TFM | 角色 | 依赖 | +|---|---|---|---|---| +| StandardScene.Core | `StandardScene` | net8.0-windows | 基座:抽象+业务+任务+调度+WebApi+UI | SimpleLite/SimpleCore/CommonUsage/MDCSToolBox/Topaz + NuGet(MQTTnet/Nancy/Jint/EasyModbus/IoTClient/OpenXml/Newtonsoft) | +| StandardScene.Devices | `StandardScene.Devices` | net8.0-windows | 具体设备驱动(门/充电桩/按钮盒) | →Core + SimpleLite/SimpleCore/Topaz + leegKeys-sdk | +| StandardScene.Protocol.VDA5050 | `StandardScene.Protocol.VDA5050` | net8.0-windows | VDA5050 协议车型 | →Core + SimpleLite/SimpleCore + NuGet(MQTTnet/Nancy/Jint/Newtonsoft) | + +插件清单 `scene.json`(Devices / VDA5050 各一份): + +```json +{ "id":"devices", "assembly":"StandardScene.Devices.dll", "requiresCore":"StandardScene.dll", + "provides": { "doorControllers":[...], "chargeStations":[...], "buttonBoxes":[...] } } +``` + +发现机制:`SimpleLite.Utils.UiTypeDiscovery.AllTypes()` 跨程序集扫描 + 类型特性(`[DoorType]`/`[ChargeType]`/`[ButtonBox...]`/`[CarType]`)。 + +### 1.2 当前依赖方向(问题版) + +```mermaid +graph TD + Devices --> Core + VDA5050 --> Core + Core -->|NuGet| MQTTnet + Core -->|NuGet| Nancy + Core -->|NuGet| EasyModbus + Core -->|NuGet| IoTClient + Core -->|NuGet| OpenXml + Core --> WinForms[WinForms 12+ 窗体] + Core --> SimpleLite + subgraph 卫星 + Devices + VDA5050 + end +``` + +**核心结构问题**:Core 是"万能基座"——既是抽象基座,又塞满了具体协议依赖(MQTT 属 VDA5050、Modbus/IoTClient 属设备、Nancy 属 WebApi、OpenXml 属报表),还内置 12+ WinForms 窗体。卫星只能依赖这个臃肿 Core,无法独立演进。 + +### 1.3 体量分布(非 Designer,前列) + +WebApi 2686 / AbstractLoopMission 1858 / VehicleMonitor 1502(UI) / AbstractChainedDeliveryMission 1407(已 Compile Remove) / ChainedDeliveryMission 1365 / ChargeStationManagementForm 1250(UI) / AbstractChargeLogicMission 1143 / VDA5050Car 938 / DoorMission 932 / ButtonBoxManager 913 / DoorManager 848 / Kiva 827 / ButtonMission 743 / StandardChargeMission 671 / Commons 653 … + +> 12+ 个 600~2700 行巨类,是可维护性的主要矛盾。 + +--- + +## 二、结构性问题诊断(按影响排序) + +| # | 问题 | 证据 | 影响 | +|---|---|---|---| +| S1 | **分层污染**:Core 背负协议/设备/报表专有依赖 | Core.csproj 引 MQTTnet/EasyModbus/IoTClient/Nancy/OpenXml | 卫星无法瘦身;Core 编译/部署重;职责不清 | +| S2 | **WinForms 全模块渗透**,阻塞纯 net8.0 | 12+ `*.Designer.cs`(Charge 4 个 Form、VehicleMonitor、各 Manager/Viewer);三 csproj 均 `UseWindowsForms=true` + `net8.0-windows` | 无法 `net8.0` 跨平台/瘦运行;与"UI 迁 migu"目标冲突 | +| S3 | **God-class 泛滥** | WebApi 2686 / AbstractLoopMission 1858 / ChainedDeliveryMission 1365 / AbstractChargeLogicMission 1143 … | 改动风险高、测试困难、并发态难推理 | +| S4 | **充电子系统未独立**,却已自成体系(20 文件) | `Charge/` 任务+站点+配置+数据服务+通信+4 表单 | 应为独立卫星,却深埋 Core | +| S5 | **抽象与实现同居 Core** | 设备基类/特性/Mission/Manager 在 Core,仅具体驱动在 Devices | 卫星仍强依赖 Core 内部;热插拔受限 | +| S6 | **干净抽象反向耦合到巨类** | `Loop/ILoopRules.cs` 顶部 `using static AbstractLoopMission;`(依赖其嵌套 `LoopPoint`) | 好接口被巨类绑架,无法独立复用 | +| S7 | **全局可变静态** | `DeliveryCallbackRegistry`(static 字典)、`Commons` 静态工具、各 `static HttpClient` | 隐式耦合、测试隔离难、生命周期不可控 | +| S8 | **内核 Coder 注册表限定本程序集反射** | `ProgramCoderSet`/`SegmentPlan.Coder` 特性驱动、按内核程序集反射 | 导航类卫星(磁/二维码/激光)无法热插拔(C2 阻塞) | +| S9 | **构建可移植性差** | csproj 多处绝对 `HintPath`(E:\Work…、D:\MDCS…) | 换机/CI 无法直接构建 | +| S10 | **死文件/弃用并存** | `AbstractChainedDeliveryMission.cs`(1407) 被 `Compile Remove` 仍在树 | 认知噪音、误改风险 | +| S11 | **命名空间与程序集名不一致** | 三程序集 `RootNamespace=StandardScene`;类型散落 `StandardScene.*` 子命名空间 | 物理边界与逻辑边界错位,难判断"谁属于谁" | + +--- + +## 三、逐模块深度分析 + +> 每个模块:**职责 / 结构 / 依赖与耦合 / 主要问题 / 目标处置**。 + +### M1 CarTypes(车型族,11 文件) +- **职责**:定义各 AGV 车型(Kiva 827、Forklift 398、MultiWheel*、MultiVehicle、DualLifting、ArmCar、DummyCar 666)+ 字段袋 `BasicFields`(50) + 车辆监控 UI `VehicleMonitor`(1502, WinForms)。 +- **结构**:字段袋 `BasicCarFields/SiteFields/TrackFields/PlanFields` 设计合理(`-1` 哨兵语义被 Coder 正确利用);车型类承载通信(HttpClient)、状态机、调度、UI、强制控制等多职责。 +- **耦合**:车型直引 `Commons`、HttpClient、`MessageBox`、内核类型;`VehicleMonitor` 把 UI 与车辆模型绑定。 +- **问题**:巨类(Kiva 827)、`async void`+`throw`(Kiva.ForceStop 619/659)、空 catch、硬编码 IP(192.168.2.1:8008)。 +- **目标处置**:车型保留在领域层;剥离"通信/HTTP/UI"为协作者(`ICarTransport`/`ICarStatusView`);`VehicleMonitor` 进 UI 程序集。 + +### M2 Coders(轨迹编码器,1 文件 + 车型内联) +- **职责**:`CommonTrackCoders` 通用 `ITrackCoder`(磁导航统一 `MagneticTrackCoder`、避障 `AvoidanceParamCoder`4参/`AvoidanceParamLWCoder`2参)。 +- **结构**:本轮已去重、结构清晰;`CommonTemplateTrackCoder` 提供 `SiteFieldsType` 扩展点。 +- **耦合**:受内核 `ProgramTrackCoderSettings`/`TemplateTrackCoderSettings` 特性约束(S8)。 +- **目标处置**:继续把车型内联 Coder 收敛至此;待内核放开注册表后,导航类 Coder 可下沉到导航卫星。 + +### M3 Chained(链式/循环任务族,12+2 文件) +- **职责**:`AbstractLoopMission`(1858)、`ChainedDeliveryMission`(1365)、`TransportMission`(549)、`LoopMission`、回调注册表/附着器、`Loop/` 规则接口、若干 Viewer(UI)。 +- **结构**:**两面性**——`Loop/ILoopRules`(IEnter/IExit/IJoin/IBranch/ITaskStrategy) 与 `DeliveryCallbackRegistry` 是规范的策略/注册表模式(亮点);但 `AbstractLoopMission` 是 1858 行巨类,且接口 `using static AbstractLoopMission`(S6)反向耦合其嵌套类型。 +- **耦合**:裸 `new Thread`+`while`+`Thread.Sleep`(P0-1 已改协作式停止);UI Viewer 混入。 +- **问题**:巨类、状态用字符串 `status.status`、`AbstractChainedDeliveryMission`(1407) 死文件(S10)。 +- **目标处置**:把 `LoopPoint/LoopTask` 等领域模型从巨类**上提**到 Model/Abstractions,让 `Loop` 接口独立;巨类按"调度循环/任务编排/显示"拆分;删除/归档死文件。 + +### M4 InterLock(互锁,4 文件) +- **职责**:`AbstractInterlockMission`(367)、`TrafficInterlockMission`、Viewer(UI)。交通互锁逻辑。 +- **耦合**:与调度/交通控制耦合;含 Viewer。 +- **目标处置**:归入"交通/调度"领域子模块;UI 外提。 + +### M5 Scheduler(调度后台任务,4 文件) +- **职责**:`HeartBeatMission`、`NodeIsEnableMission`、`SecuritySignalMission`、`RegionalTrafficControlMission`(377)。周期性后台任务(心跳/站点禁用/安全信号上传/区域交通)。 +- **耦合**:直发 HTTP(硬编码端点)、`Console.WriteLine`、原 `while(true)`+`Thread.Abort`(P0-1 已修为 `while(started)`/协作式)。 +- **问题**:每个任务各写一套线程循环(重复),无统一基类。 +- **目标处置**:抽 `MissionRunnerBase`(CancellationToken + 状态枚举 + 统一日志),所有周期任务复用。 + +### M6 Charge(充电子系统,20 文件 + ChargeStationType)★需独立 +- **职责**:任务(`StandardChargeMission`671/`AbstractChargeLogicMission`1143)、站点(`AbstractChargeStation`/`ChargeStation`)、配置(`ChargeStrategyConfig`/`AlarmConfig`/`ChargingSetting`)、数据服务(3 个 *DataService)、通信(`ChargeUdpService`/`CommunicationMessage(Service)`)、Helper、**4 个 WinForms 表单**。 +- **结构**:自成完整子系统(任务+设备+配置+持久化+通信+UI),但全埋 Core。`CommunicationMessageService` 是**安全解析范本**(先校验长度)。 +- **耦合**:与具体充电桩驱动(Devices/Charge)双向(Core 持任务/抽象,Devices 持 PCB/FL/MuXing 驱动);实时 UDP 路径越界(P0-3 已修)。 +- **目标处置**:升级为**独立卫星 `StandardScene.Charge`**(含 Mission/抽象/配置/通信),具体桩驱动留 `Devices` 或并入;4 表单进 UI 程序集;通过 Abstractions 与 Core 解耦。 + +### M7 ExtendDevice + Devices(设备:门/按钮盒,Core 侧 13 + Devices 侧 6) +- **职责**:Core 侧 = 基类(`BasicDoorController`/`BasicButtonBox`)+特性(`DoorTypeAttribute` 等)+管理器(`DoorManager`848/`ButtonBoxManager`913, 含 UI)+任务(`DoorMission`932/`ButtonMission`743)+模型/Monitor(UI);Devices 侧 = 具体驱动(`ModbusDoorController`/`Azowie`/`Leeg`/3 充电桩)。 +- **结构**:**新驱动质量优秀**(`ModbusDoorController`:CTS 协作停止/锁/变更检测/重连节流/统一日志);`DoorTypeAttribute` 特性发现规范。 +- **耦合**:抽象+业务在 Core、驱动在 Devices(S5);Manager 含 WinForms。 +- **问题**:`ModbusDoorController` 用析构函数兜底 `Disconnect`(GC 线程取锁+Wait,风险)→应实现 `IDisposable`;Manager 巨类含 UI。 +- **目标处置**:把设备**抽象+特性**下沉到 `StandardScene.Abstractions`;Manager 拆"设备生命周期服务 + UI";驱动统一 `IDisposable`。 + +### M8 Protocol.VDA5050(协议卫星,9 文件) +- **职责**:`VDA5050Car`(938)、`MasterMQTTCommunication`、`VDA5050Interface/Segment/Helper/Commons`、`VDA5050WebApi`、`TextViewer`(UI)。 +- **结构**:已是独立卫星(好);自带 WebApi 与 MQTT 栈。 +- **问题**:`async void`+`throw ex`(240)、硬编码 `192.168.2.1:8008` 且注释掉按车地址(150)、空 catch、`Console.WriteLine` 满布、`monitor()` 死局部函数。 +- **目标处置**:作为协议卫星范本;端点配置化(按车 `address`)、异步规范化、日志统一、`VDA5050WebApi` 与 Core WebApi 走统一 `ApiResult`/路由约定。 + +### M9 WebApi(老 Nancy 接口,2686 行)★最高优先重构 +- **职责**:车辆/任务/地图/配置等 HTTP 接口(Nancy 2.0)。 +- **结构**:单文件上帝路由;错误响应 `new{Success=false,Code=500,...}` 复制几十处;反射 execute 端点(P0-2 已加白名单)。 +- **目标处置**:抽 `ApiResult.Ok/Fail` + 按资源拆模块(CarApi/MissionApi/MapApi…);统一鉴权中间件(来源/令牌,配置驱动);老接口归 `WebApi.Core(deprecated)` 规划迁移;最终独立 `StandardScene.WebApi` 程序集(隔离 Nancy 依赖)。 + +### M10 Model(领域/配置模型,12 文件) +- **职责**:`Map/SimpleMap/MapStructure`、`SimpleConfig`、`TaskModel/LoopTask/MissionState`、`VehicleStatus`、各 `*Setting`。 +- **结构**:领域模型与配置混居;`Map.cs` 含硬编码 `127.0.0.1:4321`。 +- **目标处置**:拆"纯领域模型(→Abstractions)"与"配置(→Configuration)";端点配置化。 + +### M11 基础设施(TCP 5 / Utils 4 / CommonTools 2) +- **职责**:`AsyncTcpClient`(432, 质量较好)+事件args;`JsonParser/JsonTool/ModbusClass/WebAPIHelper`;`AtomicFileUpdateHelper/SnowflakeIdGenerator`。 +- **问题**:`AsyncTcpClient.Send` 抛 `InvalidProgramException`(类型不当)、`EndWrite` 无异常处理、`uint on` 未用;`ModbusClass` 与设备 Modbus 重复关注点。 +- **目标处置**:归入 `StandardScene.Infrastructure`(net8.0 纯净,无 Windows);TCP/IO/序列化/ID 通用化。 + +### M12 Core 根 God-files(Commons 653 / Heuristic / LadderLogic / StandardCADTool / WebApi) +- **职责**:`Commons` 万能工具+调度(`NearestTask`)、`Heuristic` 启发式、`LadderLogic` 梯形逻辑、`StandardCADTool` CAD(硬编码盘符路径、`async void`)。 +- **问题**:`Commons.AddOrUpdateXxxField` 重复 4 份、`CarValue` 忽略 key、`GoSite` 假重试(详见审查报告 P2-1);根目录堆放无归属大文件。 +- **目标处置**:`Commons` 按职责拆(字段服务/调度服务/控制台辅助);`StandardCADTool` 路径配置化、归 CAD 子模块。 + +--- + +## 四、目标架构 + +### 4.1 分层与程序集边界(目标) + +```mermaid +graph TD + subgraph L0[抽象层 net8.0 纯净] + Abstractions[StandardScene.Abstractions
    接口/特性/字段袋/领域模型/ITrackCoder/设备契约] + Infra[StandardScene.Infrastructure
    TCP/序列化/ID/IO/ILogger] + Config[StandardScene.Configuration
    配置模型+读写] + end + subgraph L1[领域层 net8.0] + Core2[StandardScene.Core
    车型/任务族/调度/交通/Coders] + end + subgraph L2[卫星 net8.0] + Charge2[StandardScene.Charge] + Devices2[StandardScene.Devices] + VDA[StandardScene.Protocol.VDA5050] + Nav[StandardScene.Nav.*(磁/二维码/激光,待内核放开)] + end + subgraph L3[宿主/接入 net8.0-windows] + Web[StandardScene.WebApi(Nancy 隔离)] + UI[StandardScene.UI.WinForms(临时·弃用,待 migu)] + end + Core2 --> Abstractions + Core2 --> Infra + Core2 --> Config + Charge2 --> Abstractions + Devices2 --> Abstractions + VDA --> Abstractions + Nav --> Abstractions + Charge2 -. 受限 .-> Core2 + Web --> Core2 + UI --> Core2 + Devices2 -. NuGet .-> Modbus + VDA -. NuGet .-> MQTT + Web -. NuGet .-> Nancy +``` + +**关键规则**: +1. **依赖只向下**:卫星/宿主 → Abstractions(+受限 Core);**Core 不得依赖任何具体协议/设备 NuGet**(MQTT/Modbus/IoTClient/OpenXml/Nancy 全部下放到对应卫星/宿主)。 +2. **抽象先行**:接口、注册特性、字段袋、纯领域模型、`ITrackCoder`/设备契约统一进 `Abstractions`(net8.0,无 Windows),卫星只认 Abstractions。 +3. **UI 与协议 = 边缘**:WinForms 全部收口到 `UI.WinForms`(标 deprecated,仅过渡,迁 migu 后删);Nancy 收口到 `WebApi`。如此 Abstractions/Infrastructure/Core/卫星可去 `-windows`,回到纯 `net8.0`。 +4. **发现统一**:设备/车型/协议统一"`[XxxType]` 特性 + `UiTypeDiscovery.AllTypes()`",`scene.json` 声明 `provides`。 + +### 4.2 边界接口(最小集) +- `ILogger`(取代 `Console.WriteLine`/直连 Diagnosis):业务只依赖抽象。 +- `IDeviceDriver`/`IDoorController`/`IChargeStation`/`IButtonBox`(下沉 Abstractions),`IDisposable` 释放。 +- `MissionRunnerBase`(CancellationToken + 状态枚举 + 统一异常/日志):统一所有后台任务线程模型。 +- `ApiResult`(统一 HTTP 响应),HTTP 鉴权中间件。 +- `IEndpointProvider`/配置注入:消灭硬编码 IP/URL/路径。 +- `ICarTransport`(车辆通信抽象):把 HttpClient 从车型类剥离,单例化。 + +--- + +## 五、net8.0 去 Windows 依赖路径(解 S2) + +1. **隔离 UI**:所有 `*Form/*Viewer/*Monitor + *.Designer.cs`(12+)迁 `StandardScene.UI.WinForms`(唯一 `net8.0-windows`+`UseWindowsForms`)。 +2. **去 MessageBox**:业务层 `MessageBox.Show`(Commons/Kiva/各 Manager)改为事件/`ILogger`,弹窗交 UI 层。 +3. **核对 Windows-only API**:去掉 CA1416 抑制后逐项消解(P/Invoke 控制台显隐等收口到宿主)。 +4. **切 TFM**:Abstractions/Infrastructure/Core/卫星改 `net8.0`;仅 UI 与(如需)宿主保留 `-windows`。 + +--- + +## 六、分阶段迁移路径(低风险·每阶段 build-green·可回归) + +> 延续既有"路线乙":**先结构移动(无逻辑变更)→ 再去重/解耦**,每步可独立验证。 + +- **A 抽象层奠基**:建 `StandardScene.Abstractions`,**纯移动**接口/特性/字段袋/纯模型(`ILoopRules`、`*TypeAttribute`、`BasicFields`、`LoopPoint/LoopTask` 等)。解 S6/S11。 +- **B 基础设施收口**:建 `Infrastructure`(TCP/Utils/CommonTools)+`ILogger`;修 `AsyncTcpClient` 异常类型/EndWrite。解 S1(部分)。 +- **C UI 隔离**:建 `UI.WinForms`,移走全部窗体;业务去 `MessageBox`。解 S2,打通去 `-windows`。 +- **D 协议/设备依赖下放**:MQTT→VDA5050、Modbus/IoTClient→Devices、Nancy→WebApi、OpenXml→报表所在卫星;Core.csproj 清空专有 NuGet。解 S1。 +- **E 充电独立**:抽 `StandardScene.Charge` 卫星(Mission/抽象/配置/通信),表单已在 UI 层。解 S4。 +- **F 任务线程统一**:落地 `MissionRunnerBase`,迁移 Scheduler/Chained/Charge 后台循环(在 P0-1 协作式停止基础上)。解 S3(并发面)。 +- **G WebApi 重构**:`ApiResult`+按资源拆分+鉴权中间件;老接口归 deprecated。解 S3/S9(WebApi)。 +- **H 巨类拆分**:AbstractLoopMission/ChainedDeliveryMission/AbstractChargeLogicMission/Kiva 按职责拆分。解 S3。 +- **I 切 net8.0 + 清死文件/绝对路径**:TFM 收敛;删 `AbstractChainedDeliveryMission` 等死文件;`HintPath` 改相对/包变量。解 S2/S9/S10。 +- **J 导航卫星(依赖内核)**:待内核放开 Coder 注册表(S8),抽磁/二维码/激光导航卫星。 + +每阶段出口标准:`dotnet build` 0 错误、警告不增、关键路径冒烟可过。 + +--- + +## 七、模块处置矩阵(速查) + +| 模块 | 现位置 | 目标位置 | 关键动作 | +|---|---|---|---| +| 接口/特性/字段袋/纯模型 | Core 各处 | **Abstractions** | 纯移动 | +| TCP/Utils/CommonTools | Core | **Infrastructure** | 移动+`ILogger`+修 TCP | +| 全部窗体/Viewer/Monitor | 各模块 | **UI.WinForms(deprecated)** | 移动+去 MessageBox | +| 充电(任务/抽象/配置/通信) | Core/Charge | **StandardScene.Charge** | 卫星化 | +| 充电桩具体驱动 | Devices | Devices 或并入 Charge | 统一 IDisposable | +| 门/按钮盒 抽象+特性 | Core | Abstractions | 下沉 | +| 门/按钮盒 驱动 | Devices | Devices | IDisposable | +| MQTT/Modbus/IoTClient/Nancy/OpenXml | Core NuGet | 各卫星/WebApi | 依赖下放 | +| WebApi | Core 单文件 | **StandardScene.WebApi** | 拆分+鉴权+ApiResult | +| 车型 | Core/CarTypes | Core(领域) | 剥离通信/UI 协作者 | +| Coders | Core/Coders | Core(→导航卫星 J 阶段) | 继续收敛 | +| Commons/Heuristic/LadderLogic/CAD | Core 根 | 按职责归子模块 | 拆分+配置化 | + +--- + +## 八、风险与约束 + +1. **内核耦合(SimpleLite/SimpleCore)**:Coder 注册表按内核程序集反射(S8)→导航卫星热插拔需内核改造;`UiTypeDiscovery.AllTypes()` 已支持跨程序集发现(设备/车型可行)。 +2. **无 Git 基线**:大量文件未纳入版本控制 → **强烈建议先建 Git 基线**再执行 A~J,保证可回滚。 +3. **行为等价**:车型/充电/VDA5050 含设备协议时序,移动需保持时序与字段语义(沿用"先移动后去重")。 +4. **绝对 HintPath/本地 dll**:迁移期保持 HintPath 可用,I 阶段统一相对化,避免中途断链。 +5. **migu 平台 UI**:UI.WinForms 仅过渡;接口层(Abstractions/WebApi)应面向 migu 提供稳定契约,UI 迁移后整包删除。 + +--- + +## 九、近期可立即执行(已具备条件,低风险) +1. 删除/归档死文件 `AbstractChainedDeliveryMission.cs`(已 Compile Remove)。 +2. 新建 `StandardScene.Abstractions`,先迁 `BasicFields`、`*TypeAttribute`、`Loop/ILoopRules`(解 S6/S11,且不改逻辑)。 +3. `MissionRunnerBase` 抽取(承接 P0-1 协作式停止成果,统一 Scheduler 四任务)。 +4. `ApiResult` 帮助器(先在 WebApi 内消重,零行为变化)。

    }BDt*L7A?rdEsz&l#H)b40nSGF6V#w;ME>Bls%ww6rsp4g1b^7k z@AU+j{$TpXPO7+ePiC#@uCcS33M4A6|8;<;jP`5`&1`XXg_qb!tCDDDTD>Eq9cx@v-~pUC zi8o#LjsKYS$ly+DBFw($>GKe!85xt2@5k?^{fmYD(9P5MoGH`5HF5)Pv!hoHKS7+ih7+)7CTiXblaP6ccQ5g`@*rl z8>9`ouI6VDzXR~dCVP?CI_xmGe+%Jg*=5xLICep{18{Tr+YmVPv&z`ZC}3!KdHR9V z<2%>&Iuy;uZt#5?s}uX$FG`57^E=Sk`YNGHu3`(LT3$A1?T>9~{u3sN9RR;wlY|ag zqb`R;O3OfHtj%`PPt5>5wsmYHXYYdl`lDuVz_Ti|y`iAtDLB6Quw~Pd*$<#zgwFEb z-0rmgw^kTc+-?}ghN-jyeT>X2RrLhqfWB&G;j=<Pu}4SCfC)}scVt3{1v_pDRYXhzY^6OSko;`>D7 ztrY`b#A4mH5?S(K^X}bDQKRSNTwxIgZR(-VTaK%b($MPH@xs#_G=FzDH*s@kI@orw z!Za9R`}HhmFXvv@+Kbxr##5KLsh1xApEch=w}lf)F>U0h)To1|W)w}6=q*|E#=+d| zJQbn3bt$2MKYecw?RHT>jZItxYYY40dRKAfsM6k<%eRGV?B#Tt{fY%4nic_b^Oc*V zh|i(_mTn%YYI{RbDHkmb56&jiA|1=* zalC`#^9ESKy@qdheP5+~?XMt)V;^gIVj()E5Gi%Rdd^nQ3bR2BR8vmQu6|9>mlt{Z z9{C=?!=9E=Kh>TO9IM2`P{)6M_ALR8;5rHvZoKa}6u;YKgjX@BUNeUD~x! zU-0j@-;n=sByEo2tclE^r!BGDM)4O9!qWn<~{G94RPyjker=+lW(X|;-lG5rFI%sM|ZzSL0SSfx5(P^pxZk43t|2C@`Azbp0?WRdO>0* zS2Qbe5Wc6RZgzhsX}Yy-lX7ZxF~KsE?M9DZj|aX`h*q6K=!v;fTg$hhnRV}s)A$8= zBV?O9tT|CRkkbF=I;0>)%;o}#knh^_95(u1gGPNTVO@g5yu8RrgTJO}SUXzRXFFcr zusY%`bxvs&f>`)uofjun^FAU7IEB9=Orw;ODsGk-)%GrpceVPK6oQ{$tvyq3`VRP) zQ7P?u`^3dVoSv-xM;6S#a{tz+01dDh(UwT`#I1W=soVv&9Vr?_eD4IR(oVK`8 zoJ%L^P}^QVpAuDdv;kfB9Abpx zrrP<@A;|R`sjGLHk` zo{j&Q9h3Zw1uK@&$prU09EhI0PUvnOknOWcPg8h~Tpd(P+s3p1+W41~CI!lf%K8#M z(FF1$Q5^oK$C1+fMTzsJCz|xyU+O4cjDk7He%Qui12y%iH_W2-0w&tp_wY(5t~3o3dFG5R7z*EbWCbp3L3SWLe`_+2qzR(hiiOx*Rg`pybMoHkUOgJ~_X z#_8cqxk?=!t2I=OteyX#UZw>8~_kK&(@nxJPHBMzjT|c14#q#*1zRHoN z{RW{)1)k*_496ebDM^sbQ3rm5QuG}W|JPK<|JuF5%EkE~-5WaVv82t&KFewkPX0_T z2Ix{fP`MR3S#9<)3AVPWHEeCAPi&FeqJAM|6MIy^qIjeBO0uDTd9mIwv+1@IFlQq=HDP zebZ-E{-0mTan3*zYV-J32JM9ZQn@e2?ltU_Ge_}`Z;;t7WPpY(eqmVHXhitTLaOjx z9ml9pJ^Vzn>;uVv29eF+LU{okUIom$C)8DLc+es&(A2!2OSDMREa@AGo zBsA-fO$+~#9X?QmL2gMwXblH8Ar^DY@JFE^{3Vyf=g`TdoMQK8qT8*3%zyRO`R?&N ze^sKzt;dfN;g&|ud(sh_f4}KR$dni!Yy81Q3WzH&GaAteMQfWzZ#>(dk7bIN!Gb&6 z=npJq2p7MAfzF-Dmnr8r!2!UTw_A9^CzqgGr}21m&}(=rgheX?B6^$nJvRyNk<@8<_6ODu`bXc8Zkh+pzTpLO?5#l>MiaV1Rdg1dyJq3Mw!(CyHuKO zG(fsFPWf8*Xmh;7E8T8l91ek8z!>>o*}S!En&Tb@MMYa9Sx)NYIeB_#Qs7HPNbDTy z_U3FmkEff&^_97^#JJdL=fJT_AS-uLx@F~gUugq7B&KDzXH!J zu+Ptz%*aU~@clG?bz|_HDs#fbb;|$I(NADA>b2T&`%w0NwkiZXODCf-gHdhp@2$mt=OP_@0LSLBV{0&y;146j@N4#*}%N zDkSC8B%}o`V<@m?VnsGD(vedHz*nY}&W{mo{`O>{mM1bFM+s+fM$ba_p9@;|e=~t+C|gkkt)b6%Zeb3@*RqCCGS2^g^S$G2o?DQ%sddGiY~2)z zKOgC-;jlewo@%oD7A2DwB;Td9D&y!*w$z14aU@U5vSjvlYOW+>%Z)3hpSO6{+dS{+ z${0ub7<)b=TyO1e@_0jT?Ow0X^+27-;EY5JE0uOAKW@)WW~e*H@%qjrKJS5Q6kdmG zw@g74AkG{MmYc1-v*LXKBTxr~fq5a{48sQdBTdzD;dd}M1$*8|+zXLn#|8qN2jKh( zfaK#S28@glVgqUR(vYs>a(gsr;C9jU|A7(6NAX`X1@Eb4fiM9<0g?L0^>?%S3!t&Q z#OE|K$!+n7J#xqP;`D?8MFJx@f*``sNUY@Wfwgrws_H?1r&sbvE_dPXl1g%SWcCiL zbC#jJ+&TH29*@i$&J-#2g``)g#CSYm`!Eu@P*i^Vb&&6P3|yMI|o zf14x}%XU{Un4dK&wpe~hvs22^qGy{bpL()CkI_(2t1Pj?)Jv<-{Iqv*(aW2(?9)uC zer<>!ZOV7NN4N>xcD_VZX=QZak80tdtsvM8BPnG~$|!LNuyu_cb!rO=3dO$afvtvx zvApI97+?2Q$##WMKdfS*?kAN;A=b!Wc=!d>q;?$p2a!S5*zLyV18yTMOl{w7CnfKX zRXk`W;|{duKgyuPz#!%9CCvac*iWfWQuWVBLet1(|CmVe_6R`8SM-nqfy@IT6>m<8 z*uir$l&RhQJ_ZU`uNmTIm>jv5hHl_9xjTV#LS5ms(OZukvQo}=TjK4g8XKh5xSt*C zB@vQRY@UbbI7B?9lq8eEaS^v_24DLTVDA0iYtIFupNyuEv9n4Xmo(-71TiNHU?GZD zV$6E(R6*_%=jcyUA7GtwF%$>4XoxdoikoXc4O`awS)>F%3KHDMQXB`bk}PNTA5h^R zJPf@~DSXAh>ndKw30@%0X)Z0z_QRPAt@s@!E0LUgQcNOG9WZm`k-x zTM`|+*f>aHR4fH0#Fhm%( z%U0ITG3Y?9cbk0O#UlkdHFfGTJLc3>4-l`MAv4XbRUY=%7q??YMj97{B2;^ZGRpV> z7xmswUZOKzlwp=tk>5gub-XM=h#dOkzO*j?d(}J$3;r6$vo1Sxz;o|WKl+bcuQ}@C z4o*jAG^P6k{dncaVCpLZq=T2aFTL2ghB_^d0SgF8)Uj&OEdgBPqwdosNYokIAY9v~ zi@xzI(i$!z;D=x%VTPPgQbKo@5PsB9HkA2>3lDyupI~AO1WR7dx=;uYQM^selVh#t zOaJC*(AtQ??&LXiwSI9txz9YvcL2zER5%2G2ZIvU=F=e%K#c$2$4qx z1Vd~Ttl5<~>4)5M{kLM35Lv9@iDy~70cj4Kg8^CjU-)nMWuyo@0__KUlQlkU+HCIZ zPh<8J`_NfcJ&Ns9j795s-CmmY(pIkVAS$G?*J%0B!+wfC7*qs$v*cZDsDfbcd*Ck%FjXg*QlOUkf%RWYE z^-V}s=|pbhzRNzD!Gd`N0ikW7`Mwuu&3Msyy{j)-F;UoGFu!p&{V+Rf57er+vX7B} z+pL#jy)J~qP^8^DIry1*1tn5|Qg*N5*JsJq4+rC zKv#En-pLbLiCR(@-VD=#pvhAeEE_H_LyaeCIht^Ve!_TC8n6}sZkw}nP9AJ*Ir+y8 zLb`}IdT_NHhi6YR1%lr>2eb!KZh8 zm37X}WHqbDfq*Q{G#-PB5RdNZrwt0##Z1i=`)RGD#Poaf?kuw_kG1j8E_Eha%(t+P zqfq<~XVop{DbG=ldMhm z4}5084lQTjt32b1Upb{q92UBJ8{U38lK79$%M}4@L6>eA+~lY3m)*J#DezfgxA9J0 zbM0M=(p!+JOmeB3o#M~vx@QibeOb*r59o~BG}ep)cKy0x3Dpdxk;F9+|78P{zE2t?(Eu>SSiJ(w3EBNeESwE&WStcLBGkY{fch&Of81O1Sw>OcB8s(dbY?t0wb7D3UeoAn+N zv@34DmiyYu{yh(`_BsanRlYvHii=wATUb%Z3bFr*k5tth@M2%PHCNj_#ka-c5VhZ% za4D?!DgOQx9zBy2HDxWJz!2UGuOg9*wpDQZj2ttL{GN6sKie}S}i zwXjb6_b>X5TLP)OqX@m?AwidGvS#k(HLV4#X20ZluF20ZvTuM-_*I-WUcMKI5uP9a zP?hQ8baaX4nk&)bL!X;2*qUSCY$m5|>AD@`TZhxb`v#9*-uCd6%zbo`$;16O;99`@ zzlHP6|8wU8J3H5Zup)0(?{gq@O)I^429y_mfuq5aadCCpy7}|>Tr>^t$p*M?6RJx# zk&kgu)*k*Db*|Hbb1XfHE96&1D}pK$e$#`*cix7+D_K@_-}d=%e!2HI4{2QDUVS9g zsmc2@=MMz5N_`qAXeIl+?1#|(QSiQhb1Vd%M3FpHJg!$*bsdek2KCSSLL7|pm&Ety z>#(id$9Z%Avq1S(^EZAaT5-QW&}PXlBB7v*-7O-12{EeJ&{x|FctwLU=&w`Jdf-At zPfT6I2=meo`EeYl6q5`KF|`9T-eywxEu4MZeh z#31*opPzNbpwErvo>Il2i&Gb!SVyBzahp|G;8FsSS&k9zgL!Jy&I0m?Xyga&_k&fJ zBxy1vVGXb*iG=s-;@>q3KDH4K-V;cax4&nsNi;4`fl%mwinEJxZ2FlAmlE8vRI|~- z-1nkRt_SNq1^y0lL_B@tq9Tmc%c#GE1fJ<~L>I?gMI$3p3eyCJxnJX&MHJ$0+r`49 zqr}$Dx5XI8siMA8R?);t?ipnA?Mvyh`bK>dz%}YS=!Qu$>#XbH#&N#gUp{Zng}|8d zP=T{9MZ@vrsF=wql5XUa-17%e$-B6cUX~&B@|W*sunF0h#3YWEgW`3*^(y&%zkc4! zY5(r~GCd4 zzwB;rBHHtE)eNKJ!TWb%F<}N9^^{N2f(jQ<#(+=(F`Wu9t$f=!f3E_7jDQ=?PuEbn zfy{AfV?dGSPG+Ek##|Kcn#@*{Ubwcf)tLV=UDPYi;FpI`^K5b&Env$6RJ>W{X}0ER z#=x0|Nz)1fQE}|wKq%cp=U<_o9D|8KThw5e05c5!um~M0xq8TQJH>{&I66!|Y7$0* zIeK>3o9be%@vn~ciHPU@?pZea@mQ9)SY&TdC<_o28E2TA=AfwXY)c$WlFoh9zijmL ze_8+FXPLQ}s7WMy0!M8?gsD&Ik7J3WhLRi?;EiX!bE9SgdY=kAbc6wo^QQ~i_E-VM zd%B)DC0F)uTJ%JYp#}?X1T+a8+Ilx~M zR(z3T#+|gVN>-l?8@oJ0BBS2b5QLN+OfOwth%+zTGA%xu95%*@#yt*W$&8fw;uSk!IO=v2;@-svQx(1O4Pfb-z_N;iFio15m{b&$GimpSEpl`oHrqbEodZJR~cX?9{Gc@2sq>d|#aLT*P4@iBeH9 zQC5IhhA1c-ITGaOcHSB7pA)5hIc?}Stzgg3+ehC zmbnjVISh}1F=Vl8IAWIsCPFZ5%b|J%mJmduC(@_WCjxc`XY&IhXS|RG6IQi`7S1*~B4rs7~el6wT#O$U78J9&OCdtYtOB$Zm77h`TdQ1Xq z`S}Dvb1&!s8bs}O1l2x~bSN?mn~c03LiuBhciirJ9I6EW)V4HjUeTOmi3Hi1rQd)I z(fC8o#z&}gLyQMRne2j(geCsVDo9Vo z)kmEs zWm?&J~b6$q>s%} zsz#Nh5Uz7Q{YyFVcf!_frT^wSk&AF?{U;+ZId{8N>wTWd$fAY@w=MnGV|8~Jwhh&S zdRAo{ZY(;LMEGeg-r#Hp@f0_SmBbIE^fjB%OGPpW?>uxJ9Zt~v$N(}O66(jsH8E$N z??9_ySNtuzUYU&>KVF%Wy)JbVLVRll8l?BF0}X9}!XQ7()vd->^kcR?{Y+i(nW|m2 z)~>+1-0WC97siVjdlfM_Y?l8vQ$A@fU)kK^)!BP}j6i4CFM@_Li#I?~iP#yK*WQDLL#9ahD*1=kMR`;< zjLGpf_S&=M;3Cz3yc&u7W*NtAj;LQ5kKHZhsy5&`UKQs= zq80Qcj;&V3(u=V)m2>rhZ6R}~8YNpDcjl0qwL{s^eE@acFlfHzPem(Q-{dmYkAK5v zom$?gIkob7o^M8-OWNiX%DU8Dxe2(Zr?<6PB@wHp$T9^m)n#wMF0cF`|JdBnqnPU=~F-E6gKN#BN3O1 z(m1~Vh=f}NLXU*h-WT*)w`hx=oZ-*WHA+2(=LWGpAbn~DFg@@i4G5AyW&f?>l5d=S z0LwAr0H_JZM=P&~tVAI>OzukWeb^hiJIA0gxenP4<59ok?-xaP%x69q?0bESwpxwsJvOkRjh>+tU zfA$@N;w3?iD8V*LV^t57{>_3p$0cH~%Ia)gdLCb;O4_2-t6~`oWmq8>vK!OXgyr_8 zbENJILQ~piDJBDq%($FDF6jyxB3R-zmhVMEE2omph{)Xf!hRXJJd_hJfA6)K(j18w z@ouIc9GE;2#)GDE06n|jGin-DhUV(St5wxoGdeNg)Y}i8Dr2PzK|APD9Vur7GX}~c zyj-s33iR*U^>M4#Hmg1w3~*~^kzy=3iH0=OZ(flFds2pjLn*&u0;OYb$kJ`rF1d{v9-N_ zkvOjDr&b>4>_`5k44A6h>gMN*q-xo^r3f>7*IyQ`7z&JwulnaEhrZ0%va-SU{w<3L zzO>j{QjvNf+p(a*W?N<6y^E1Mu%QJ8u>c#$)~kRY&Da2tZE8(F!jlQnIWY6U?_&W> zwhIY18Uidp3SJ2`%r)u#j&(!SM6oaWuVJrofb_ zjckDnLTq86kh>p_c?Wn_PBg<8~7YnIBmi zqU&ji_2TZr7IvArn7QRiHvZZ3VOFO03Zw^iN}7n>Af(M}j(soVbtYfqhY`I%jt9Fn z_<@ZoJ0hj6A5;$}H&40oUHpEY2V0uOA10o4rXH!( zb$AKfEG0d-H&VB9ymh^&18%*`QENv-;o*A|S7Dp3cQe+K#7;9dv9_t5GW|DV42APE zOobmi*TmF50cBNc>K={3(&u&^R0|&#gTh5p)te_VZ0z5Wpl3yI3wl$E*oBT!#CE>R zJfgN?+HniOY@9x3Pn$bmKn#wRytW_Ea~y2E^E_DSX1I>M(A=DrO~h_jq~)4 zN)Hk^S|Dt8_7Y5FAgL|E# z`#d)_x8W(UWluTIv$5rLWVkW9ftO01;o>~JLUX#7Cd-X>w}DI?s>ANhpsKmlJ*>S} zT`{|dN*yHcBR(L=lGR*e_)5m*&Q=4k>FP(8Ejq^LR#m&tSWf&(R91}Jvcf|qyKETfa%psxz@aF*1;!t#vxJA6K~uuc2*np`AThNl1LVq z3JO&9=VXT=qwzL|ExTsuyYrV#xh!WwFyyMFML(n~Kl%;N=ym^(rlJ2|!Yp=X7UutM z8sc4#CFzK{c|*PH_BV;(g2aGcIy3VEUxPo@nKhiZ`P=jZPg9^3h353+F(_4ZMH9v85F|5(|o}w$=2Sbzz zf~ZN4Sez3A<47iwo|^CnF?5Aa&(H{!KqMb|m!Ow|lp@K1&Gj_cZMzHRfo^Ezu3`ld zOKX_DUvPxXwUJ%5^?_J2t0S=ZzIfYgam6gVe)9~7R`{I&~d1R?9Oq=0LR z874TjlaqCSIku0m!P{(mbp<>S%0FQ?I!_BIgygsB5y?zIs1T4+=0TE$JR~S6Xb}WD zk0wErp@pz3Agx2%M2zKUAWKS!^@Rix<)N+e`@=6Z3vSEzr>I^pM5*ZogzCG&YoY~~ zDzT-gX_JAiJiD6}Njl75aiDr|@~%`iki3xhAkCJQ+$G(&QL|u*?o`ZYNyR||Fq=qhTMcyp zkr4yqXIyd3kAg+*Q{hWeP&a_r@M!lN8>yU?D7@{hYopn-9n>_QQ(h&iW>|H-rHTna zWrQnGaJYb=<;Y)ob);PA=-nqJfWgrRd-tfdEET_N_nZSDI#8pWnyR{p;k>Y~7O3 z+R^VADofs$lak5&8S{N}eTz!gl&T0!KG%?}`1!q3?nh7GS3Gk35z~Uco1^r2oA#sm zO%x>bR-W@%H#7xq;WLNU-8|d+Nc|T}J6L6d9%Z8|_zB_@?|sGXl|8#p3ZjXkCpRKB zy|dw6Leu-Q)NYi_SVR-~N@3#!+#)#*zHUO|izvo78A1+8IR1K1gO8_Yg29=)AH=Z@ zens-((G#9*j-i5OE%VD!HtiDqj}2>yhq|eV7Qvp5J6MSRMthF?H&2Lw1LQG}JSxCSNJ^dN#b5OldL9pYF>8mYk;MUWPD(NXmmWwB&iCSp%+qp{xXo8dF0y0WsSIpV~@2 zv9Xb%j4@(d&r&hzb%&faXVFM8Nr28x3xNP*rIx951{1J$(gJA=$Q7A9-OYB)0tv+k ztTADMlUn)ITsGfDGAZ9kl6k;VGRb#2+4OzBgymvWI?}REdVB3vnhCm4+W*2ky|^iZ zIj5Y(uv6*JI8tWxp)@YFQ~CxP9viM4%}vXs|mq&(Gq@@LiJd2|f{Pl$QczR?<1X#ZO^Z6$bloKCffxVn2lJ>y%suCH0@0}=3M zxaNMqo^xrhG9~f7CyC5a@w2=hmf2(LxQ#ZidH(hBrOjV-M~{t z7<)ux>L*2!2o%4jlGiCo;1cmA(>punY)vFmo zTe@9H_+q3azKpcf+gn?uL@&r_C1W}TJW7q7^P%mG|EB6b5}6*Ky8;$FoKjsh zg3?ed`^+i}fAvxb(iV`ZzrDgd`ADqf)*m}>it2`n+Ur1sVZz4sivpz|hIpY7op%e4 zHRMpmWrVVvAbu%VPBo;(foRt}8-fjsJg_E4DZFEQh67Xu9p}A?S@sSyEp#D!QU*I* zN?j}>%3!2BX_aYMww{@m>ur|hf~7>UZLwl1OyMb9Pntc+;XT#_QoqS0U^O{@iSBDQ zQN=-#inN63>gT4BsYA;yq*XJJUUeie6~0`I`ay@DwmrJgW8q$b@@!8KCQAj@fyD886dEO9XV%f!wloR*#nV_4a2OL*QwDB?4XP^gP76#ScPH-tc32}Lllff#4h_{~Zo6fx%s=|>=X46SFm0fDH+ z9Ekp%BK2&+CXqeigBu8@nNM6rb(jOceE^w7I0Yla$pN)bsi5#3V{ivSqpK;fp+d`| z*Q+akCzxyxtuV%2q8#df4+0Fqm82CZFo+xw*xXTpLI%)dK5uox6nzhc!tlE5ZR{(6 z$a4l4f`-N@Ly@1apA#6b&k_o=hzE&QJ&?XdfN{jqt4*<@V9o$s;sz}$F$9pKFO@hU zu%rT+C*T#F0?=pzAMrD;_fPut-!3Migp_bo#P9`m% z#66Wv7_U?gTtv{{tp>+Y0U4ejWW*D}FeFkv#)+C_ECD{TV=?h5gTi&N<|(q*a}!!B zqiiy<1}YJ#nG!$cL?}P^Rjfc&fMOabx`7amv8fR6FT0+*0Wt+*6irA0M1%W5#Ne8V zwJ=1y`5%x6I>aLtGL8}{Is+Gbx=2tNx<(T|?e@*)4lEQP2Nz1`L(gT3Z7cnKnYyxw zFqI;=(gVcCd1sV~-vRExLWVH-4Q)zIy#h*64D zI>jW#cBc^(2AtU3EiY35GRFM#u9}pSH*K2rPk#%b{kfh0mnrI zr6z^W=Elk%T&dz}mW2jc$Uhwh&Ree}qw?tS(U!@tje&=hh*NE(ByzdR;fiYk3Y3*9 z6x4==rqv*cr`qB#%OQ`2JIztQaiLGmM?gKQ!aNnDoCbO zSo=zmLUk(q9zdmq-m>J$XDyOb<(hz=1LC;J>wnqF5Z6SahSD(urj*Oae43xcnb1WQ zCoZ%LCHu6Wv7odipz1<6#V#_cnGtp0U?=-NA4vBgGh{PYG7Q4C>H&6NN zf*ONh12KU#L5)F}7KYoiC+BYqq9+ipsR%{tSA|FW8;OY36A}^6aS;)pA|!~)M~xw9 z<0mYi&;XQg)yoIKjs->rVn*?vgQ&+Zm`)642qEJ=qioy(R48PGDTd(l98Oq2)Hb%j zk3+D98vmheBXp3hciGR*H`>P$tU)>fDe~FkBO@-C2sS-b5~5~D$b`X$W5g5;ONS9; zt*zuEi<;%?m#<2XhFu!h6skZT5B8w%GKuX;u2MPgmakdGZcpT*&&EJ)05b_G;SOX9 zmJehql)+CX{Bv*ERUfUNU+;!b>BAOk0wR4O=p>Gsu>BNU1*KNV6d0?3**{VqtzT9C z+eqb5s^S!2qh2P}sgb_Eg`M%5S%mkipyq1wlm(nd{KR||Ir~EhG>X1avVytcTaeB( zq~v`J{a`}%7&oLZ2xZ_RAv2&MfyN(YjIud3S_;21$_F>$$cauqN~}R&`@ijk zX<~KiKu}dv3)5ioAh_=yRuX<@l`2pclv4}y3Q~I%1BWQ9OyVZd%$lX?(adrB7?>D- z73U@vtf9tlDs-$Jqq5x-V>vjcDBK<~$Y+P0vh9oh(wVXfOpx3$l|$Dq^bIAe^K(E< z`_~Qr)oVePd>{TaP%8-Wh}H085RGtSe>_KjGu{y54Wu{W0Wr^}G2%sahz1_)XZTjx~DP zyf=#3P}A6szroi_7xDFrj$954gRsT7hl^%SocMGF#O{=ExBPEg387V zh_`a#QUkSLYf>wB{wfTG8L^c9hrkq%1bVPp zJIvtiNjBE8E@x=@j(c4?+?6Q%WO3Xx$D<52LoDZ+MDbprdOjQ6Foe5j0}L%3mD)j! zK+NZ>AE;qkeYz_%(KxiWg*}j0GoCaj*08wDe|8S9=n*Lozg%AdtfIuv;}V#wY6UPy zrOJP1pb{=p{{ojS5RTj0{K+ybM*qTn=G=wH?1?J3>0R@`Br!tNNj2tv$9*<9dRxug3x}C~&!E^}hu@b~na}LD{06E_W_1rs`|#saO!TOQY-su4|@+kF^hmj)*^o zs?WTt(3pL4r7~Y@(wP1GmA1H(m~N#1CFjpgAMo|)Dtyzwza{;eXtC}UtiuU|Kvpsu z(*vQGVWspVg?X4@ATds<2uDi`wVkgm)=!$q7(fLzZjk~Y{>&%ZIg=oSs4TdkkTZzt zqhUG`#jogUd6Y+5kFZfOe_xdNEq8XWk8qb1KDOJ8A?ABNi%7&$p-zonvGI{#JcMHB z^}(8q))b|{qHMabv=D;2;eJI3Q$p|DO@yNCy5Nu!bl686p;ZB!IYi&yS81m@rsd2n z&vV~Rg}WN!oGeCo<+zt&{LX@JV?)!HyV_n{5%QRwap)*bs`FBRQ9mJa2{7a=K^sG8m_dT~}lG_dk`r>>=YjE|w`(fn7 zO9i4nEyWL_->_gtaNERV7!&^?>G4Qd;Yp)gwD5+Fb#CiZ5&)G!51K|?Q{Z%LRe&8C07ED^! zbt5ka`@#ascJ!hw^l4Fo{E%Wn)wW0#P1(6vy(^d-$e64c{$US6nODHsAu{Fq$&m`Jrz zd3`FQ^|J-z6}9xgnJ7{3s>8X*IT+X6vK_$8bJpTF5D zdDP8TaYX08fIqOZbZhA`VjW zT$}Bjm&!`__;t3<#G$u@7yIiv9#e)Rs%XRXvT?)y(sC8X_<~v_y+Pf`qNRNjyBX8& z+_$_Sh{0~iN4oxx)}3ckQ(o5e@M_kSdQATqM1XhzPzzA=&k}Ib&W@^xnp5drS#_Lh z1nX8TU0iZN7FOkScevV4bn5=%uip=3@Ubwf;q2{N9pc8Lu(SokYRGhU#>TD3D@T*c z!!L=0H&4!6zeofieYW&+mR-q>81`N_)ECD26Txw)Wz{r}6XrvhX#o}t{>L?;TQowj zIQu>?H2ks;I@xqskyL{!++ye-ygxY4ALcDruJ|_Z`dUJJ6GvrkMtYmq&kQ?7! zAur1@HH*32CGOHRMr;iTqVGKL~=kZ zNHWWI=cdw03r*(cxzIU^UYU4&lFE)V1a;(Q2r1xSG37Tm?nSXs`Q)v)(Jk##AWMw; zBb7xG)Sc_R($?TEm4;&(D@V?4((oOF=qiRRAx<+gye$^HzH<@Psp#D`n9A~qjR9f&R)HwR+TIG)_>g|UyL z4#ellvW~=95x$1(`!I!$?1hL=qn(K4Q&mow-x%-3F}*}T;D3hF-rPv%_q28E1ABQ( z$e~Xt`N&cE4=Cd8j-9YFWa)LYW>iP8-W%uIlcnVnY~)_fA+qN6gPbz1)Q8dhk+;Arg29MEt%Qfo?JsP z1)=hgwQXuYuBxG&Kjq+?7dO+Mr=Ob1@p95{4Do8(^W}cYXgEu~yOcm1O#hZn%dO~X z!7U(ytbf~_AYs@m6_1ac$)!)pVQE|NEvSM@tJlE+ou+-Jq(3Qu80FnCYpEeHG#?V; zdRJ}c&1%_5Z{uW>`PGi?-!u-Ge+f*p7`wI1f;F~DW^Hah|N6{*D5hn0@SA_#p*rqR z_^tad%jr!!hJ-U86qYLTVS8^3Z2e);-Fxfr^n;*OnqM-e6V1v#tnX89Yxz2jJ*(g* zu-S0xVx~pOwcLTFx9;1NXoLAcJwL$(lh<9{uUz^07i-IhScL_*=xDGg9b?cMzzqjJUsHA}|aHpq^L!%>NNgA}2GE*78!LoxPrVtLJ) zUvm}V;(RTeM{59YveV6~g}cAv>_xUv0(FGIZuw4e&Yj2JckeUpCiv96cudejKgziC z-0XpC!DB;*e|hnQ0FUS7>+vPRD=nLqCC$a3IksA=^uWp~u|{DI#5c|yB0l1Xeq`#vPlxE#HlCDCl8kqb3iU1ia0C40s0 zJyiyo*8@(|C0H7}rcGQ1U)rU(sg&2WyEim_ zIH-d7xOeZZp2Bz)>r>4f3DS*3W!F-7cnh_@)X*`aGCHP%j*qd1uiMs&e?($Ecq*>z zZ68zW_%jS%)79ayU9D$-Fp&Dd%2YeZe4kz5(#&vjRmC=>aDdO=&^x#sR1xvoaj)Ra zUY6!&owHSc^?@#RHT*XaI0ME=a&3l#ODfN{FMAA+rCXU)W5AURkJiCqB^R3$tb-&j zhWVf~+XGhIsk_0G$!q}wZ*k8xt#Y^s&FbOh4EBmIe6A90R({I8o^aK^?c4Qo(7HA} z^X4CpwD2f#yKU`c7W9`i0-#t9uP1tTLo1$|UzH0>?v@VY%XGKe!PiCskNgo;3fgY!j5F1_bfVk{&s`iDQu0U@FN?09*wU(oF`iq(Cek#tz*=Hk7=U=m> z{EwqMcg!7)r)Sf+BgI+yYdH)%k#xBn0sDw z>3rL+cQeT5XH5af6Y+>`fllP6v(1Azt@X!;H`C}^(eBMx*Vot1f>~jdoo2WmBXaYJ zh9J^5vUX2O%%W*dy1320$?Xk12ajt(rpvzM(iYz2%bpIko_@J1jGjH+rxd_ZS}W9J z=-mh7$&KX1gr_8Omess+bWRP~lJO_)i*1^j-!m%D?C6Ia8K);_240M_KY9J@)S)$3 z;_FW47++(&VOA`>^(S+ko4R`T)KM*j4L#f;t~5J+L<8g4sL4-y;}3V-DQ8muilp({ z*%Gf+#@5});PN=vh(Q-PBX&+b^qqorV*VDNel0yEbF*g@Z@2&a$qLOmxj@^?Eu#YIoP>=KxsTJk|F(d8m)?Qgka4TS)Ky`gFYxMy~ zus?d7rnIbGk51uti*LlbLI}n-y$V=xTOFb{_~37-I}Q8JPR|_|RkiU%e2GA-Phw)s z&p4FGP+H{J@;86Sntm>X_g;7Q-8CfhEO3pQk$JFK;M?M=cO+F>7+-*3B=<)nw;S5F zeUxpk)>m+|^YZkDZA%8&kCc#Tle{)%6|CRy z$&Sru95jmT-xa31k8!AdGH%$o)!AutHusZr-%(}6b*y<45EuH4>9JlZH;Daps}_;H z+7Yp}@l%d%G+>}#*rMs*tozvXC3^yfMC8|=DBg34LOAk!*f!U1`wGt`*eB(PI;!{rZ-Ij|S!tBx61SBT|9LLXO~D4B!p2hM^#q&~_z)b!(? zIk4l$y;C)N+&`=74$ToPJT*L$g3I{RH^>Xjea*PxElMtJC0b^+*l*>yk8Y?+w*Lui zmOMGSoXJ4noBiIdWGL5Se12xr+b|)UR?mEYPc7VdcHlZQ;OHh9OPBEG=R<0;`ad0g zGX4LO!?Cdczj%Jy>#;bK4n8+^Yij2vd|!ns6w67ixnj!0xj^blanq?`U`z+7pZ+qE#QYh8 zvt^n`dX3xCKzrEmkbb#UM_I&sJmp(E+Z%OJ=+tuc%%)8@*}Np+S|5yAw!n@Hk|W=af`eY5qM_Ms`Soz+ByDK zK?`UfZN~3-IA`$$v?Y5;(`=+c!z=BNKOO~l?;mZOUz1la^d68FZ}(|hr>t}|!8mp5 zsq}qY-vGfN9p2w3N0Wa4a{IKU$7yR}8PK?!e8Jp33mBbjNE4K>dLJ?4+3K-FhWPW+Rt!O7#vG+2mk~LALQbtq6Dp*2< z1V^Y;l7nk(YD9R_R^&B{ip?!N2sNFiD^!M&5RF=bQ=1GKCuUMgCS(NjyX8&x2G#8e zzwF;Up+O&?sQYx4im(cWVB|xz$7#?c)rD&j=4~eJAxrexkeJk!tXMHrgd(iM30qH_ zO*w>VTChGC!V5?@rp6Ey{$kYhVA?RMwAj8x``55O3Aq_iNa##8C3=28wPOEUS$h9A zU2jEVr56NH7sexk(ZHlFxZp}LtS>!>MIfjqWNF!DK^wfZF;fL&M7aS1TlOE(if(P^ zNP{A?k|YIb6`)ThxU(%ZhGFe5rryZU(%L-55!#@@+eo+Hd2IDylr~;8TU$6@H+9KN z*b?M(>LNFb_3QasUg{QTucmFaw%P`R>Z+KsRhLvEeT-RyUA;U9k<>+(<|G?dob|It zIN=y8nA8IfNo38Wj3})^Y|-G6pTbm%c8HFWxQY$8I5aa7wI~U;nXDxM1#paHaYWAe z(>SPPt2Kfqtw>dGiq$kpgJ#umWJp`2Uo1bsmPtqxZ^RJAv<9UJVe1EX5U#*1E1Kdj zM`==oWE3odQGK5+29VI#&CV=gyQ~h3<;9eqzc=%km<<`V(d#84pvGLE7O;2AXE!8N zhrPZW(|oCFOMN~e7TMa$G%=E#e!%toRceX!L+MV<@Q0(C0|qT0K1(%)rfS|xpb@e8 z-EP~EgIqgX4U~nI_z#ABmYwGo1|f6k=G?F6Fu^~O`aQ1V7K3T3^|c+8HVr0g<0c84 zvqf9=Epl_WcsXN-;&IPf>>tl@>qi(8>k``E%|B|nXJOF}QBJLZNC8!|knLJHyocU* z_a|WfP!;^{9z0zdlp4Oa1Zu76p%m|2L;F238ahCy#yu{e69^5+8!`Z^f8<$EHC-`} zx=whrkqhB|z%pa2nG0bmag~w%=sCtlLnp!mWR;Qg>^a6}6W0h_b!jCB+z>@T8|Z|w*6fzu21Xj(Xjn_7j` zA-|sK^#Ycrq9dAu)wXuA`leXJe<%}j6`{niN7CC-s@TZkm2jAz6M`!nu$Y;KiYvH+ zq}a%4*4xGE*{GD<2#p5EeO7M$>JXi}F$^3g8!?^NDgA$s$-@aP+6MMfkf=fGI=V*` z)WTvE=Y!c=lZSieMI#jmOT9$4br-_mMXPEA^7pLnO-EOq+o6edmO=mh+X*p6UlOf9 zKM?YVdv1AQ6nkW_KrWb94V`UUsyhV zGGKBWhF0o&CD4t)u492$Qw*Wz#ml>c{<>TIMDrW7GlM9Z7%}c@7^vQSrY{D^aMEj7 zYC+NW%s1ri0ik#y|0`d>x5F=)?a(R=e7#u!7CaA63^D+_`^0Q5WJy`PVKZb3Fx#ZO`6UO02}pEZ8Vo zgAkJx32?FOo0nnP#FalL`VLp1eHMEH4XJb#&F(?KvJ2_PV z18*796IrfOu2|P>M#Ou$h2%`txs9wKX4M0nnejx_1L0HdQ8|3;umm}+ESH7Dc_ZC^ zDF7W?S210%1^TJ;#$Is}Tp89p`MO4w6URtdjg3Pr)t%HSQ}6oz)Qh->RM6}pp}k=An;TO3p{nK zYj~QP>eD#tn(BYm4j@%WNe7aXR<-kaYMQ#jcdJcWT-`E&Spd2_{+ddNbzc@s@qm^vqsw#wfp=HfBox zL#8e?&COo@2ELjm=ktpe=fzE%_vMXK^3BHwZQkRH7T5C&XU6l_SL%!`b#~;(B9u`R z(c|}bHIs=lXm2JzqnIhUMw)SS26M+WXJCe*8F8tIr(^@B3q}$*a`kpLXA^!cSfcep zYsW?cVF&eqhPGmYT|PsvK{dvY&5gJax*E=@1Kt2Te-N# zsSCKT!RjB)e^Qm-ufJBHANXuh--7j@8~G?-DF-b<;Aiop4!2i8uP;SU(uI^P#3 zV3bdPSpH2og|_M0`C4DGY}IIR%d};cv6*+GGBb`|H-dfko4u5?R?^8Onz^ zH&9is#pj-PuHCpgP!=9Lb+Eu*HPzx#c6Qnx-^nRD*MPi}T~c&{EXNiyx0ano-wi6~ z7CK!j_T@G*BFEn0ike*t%yZg2qv$AFh|gnkD>_RI;fkVLuLSuD5>9tATMiI-1~M|8 z<_ds9%lEogUkvrLipa{@ljs zw=(GG@pk_+ivc(tCfwYQN9(iJVY~s=|KlBf${cE9+W^2Sk6=ID`3 zTcKRNflXfI7CoOy73sMqp)aI@oD0HJnAXf{^6TEQZTC5iUSg{hRB9gn@n_#{VZTY= z$9)iWlOEM;-+B3@6hPmc!Vd@Onv&2$sP7Em^&KQdpMY-!J}>E<^`ZDb_Iu*g14_Wj zyJUaz8gDT8G7z5Td*a-ddraPJq}#O#vrBi$zed#jg{}8*!>d|j3VMC_7gr6up&042 z&oRS7vR~IlyR9ba9@pwxB*yjkux9h+NRDV5FuGQu%px$$Yhi+>`!n${GvtJ2Jmvgrb%`a#3r^SY4Ir17`E~}?SiK@KV-;~W$ zRf0BB1*=Z0%wSh{agr+kx+?#db5)*nm0nc{DJhPb`WGiqT#fI@@6&LnK2>@|dC03w zG*jemWDa~+H`0kXn_C$}Yj+;f67yezKxTD)eJr9y{Bh%VDMGd^f}yXF`~ts7J5$!! zonM@ZVsPC50}$oFD1p(474&l)7GT~iwJFwO13+mJr(R6ys+m^L%qBd=;0U3m#{CkzgawQ zx7C(5pSH`EKHiH=*Cqj+9Wni7>44|PO#rxhUy{vj2=E7JCp5jkV6bD`aY}q zRz(Te<1e)*(g7tO;+rj`j?2_t<{F+vq`X(e6!79bLp@DG9Z0Q#of)a&j zyaq{W>KzTGssxbSTg*=`>BZ-r0bbVjHZu<$r4VkU-7<2DJp8dJwqAZ<-u)y- zTB8u8`V-<6w~TV!zQ&zfiQn3J|EV1@!+$tj1|;{FwNemri@XN(+XI?_s6Fh}mOq){ zR}a11_4;BcGtl4h3-tPec{+-zJF8u3J@Wd>XXZNx&-pgskACyw=LvzrU^+}6Sxo%u z8rU^!IoDtK-gFBRW_Bt$0c-IA^Yru(7V3~>J?R}!{`VT+`Vf#6Rc;gho*eA1 z=mkjRo>qP(sIV!xR0!X7-}m@8_n(v$<0uDm#4YZI;ar#6h7yQ3Z5Ci&+~u zn~0bg*%_Na(f{v<2pAdJ*;$$Xo3H<67NoYa%1?XW$@aQ_=sJcen5jQzs02q4h6QMn1+{!4kIuFB=8ph@0)b7 zbv70#UKAJtTTBK=;mH8E2}ghyAYLRclW&?Oy={yT8Ev z8lqB_06ZE%A_Txh1F|hX^9MdWrr@m*kG#%`nyPem!*P;rTafuIAc6`_B@S;P5z9%C z27oa)K(UHyEMCDiuj`fGTLvt^doPuA%1YQ9vEk9o_KD9 z{cuc`BC8TPpm-Vp1{o|y2WNDuGDv?cFae25GP#@)>GoeIV3>niH5p7D7qjm>X#hb` zfUoPviFx8fuaRP)_>_MqGI<;}VqDI@5D*mu+v`Sjub zzd&I682-CQ0*G@0fUrDM9PP+6j8}Olu8{tRY_kdg79dq-BcPof%-_joPG%z9894w* z`Uh(q<7wL;nj?S;eLBoYdf!FT2~T0;1bcPWU&L0l=xiuo-z-%xIIzxAw!lDu0>85p zi1djJLXgN?$o%Ib!tOp)86QKKHWh-hBE6IXQ1q^$$09Is^AX>iDZoO20Gl%N;td&y zq)ovSL4d?fMxF+0KbKA(fFQI$02mPjKmghL_6j-N-=x>)ypH_c-!3oI9phjVU4ZBD z{t8+UzMW8*$(7b%t2<_gDeP{AlA58Lk=)i^FMZ>y2=Z`5!L^<{kN)6WJdbWNwSsLj z4fAbOt74YzllhIR7tW)R$*f#Pw8$)A+oUtONv$_(G7%2e?tY_mhu`Q_GRDC9XlvP^ zK&ge%ez! zJ^tC`=;TWX`@2vXeRn^0qn5;ui{M1`MN2XK_}$B*aKL(T&2f}oG3Z~J?J_bni z(*G#pkW*a5iBn!A6eT}JjEb&|rh#ex+~v=`j|B-`2*X3w!1Gho^R+7*`&=qacn&HC zJXMqcT}+6NCyGl<7Y#j9DDX+9(w5Zx<`hX;SS>3yKH6?{-tr|p^>&f2a5{mma34ce zJKdmZ+;nEC!}1C}S`ZR$2`_C4p*$mKSpE@MMNp80uz?OZj9=sM@XjXcr;=-?Dx|qL zk0K&cw2f4zNT$*d$X6yqk}_@B$U*N*UX2MoRS=ioQ<50 zoQa%ZG7&Y#Y<$!p)HtURRTW63h?)tk7WyFAS3ME_&fmV)PlSI1_UgJ?`SjdSzLae_ z?gECgqpKi31Wensby0#ohlFv2Mq5&17^|7V^mLNog*>9$v2n+R0Ce+x+j{A$Ua@x* z{r-#OCeuEdGjT-&=_c6A-7;oV|Jd3(qTKh@`MSpACbSLVW~l2?>qoK=`wv8vYolIPrez`*aE?9+fcABMb zyJDoMs;N-r6FEBRO;N)@qCn;VU&*K+bB+AF94F^CQ_s=UQ?}C=oj?*0M9Mc-iB8Qn z^|n{jB=%JM2(m*B3nj)i52U_PuSDKV&+LQrIGND?)gB$~8FqJ$S3^!VFv|FkbSG2{jnWsOJ7 zzc4LSg4^UmTtZM~6!cQW0cOM?#Z}N?!XsWnaIBB?W5f~s@WT0qvq9NF+UIICwF?}j zz)U+Zc8ErK6a?HBST>Xa4q+I}HOjf5Tsts=kOukuA;b# z5gBpC82g8?VowtWI%5wK2BI>j@`I5TB=Un5!mBj`2O-i2{E*R&Xy5qdf^^odzb%Ocvha`I>adMfQD#W< zx^P3T{{3wLIME5qL44MU_2ke`N(8z8Nsh~M0PWRY>IZ+9pZWoH6%=~G$(#q=MvPu{*dg=?;0Jjc zFn$D~51_aJZ9^tBMHXV<8}dVh-!*!)(S-P2XE69tm;8ZC7+`jxQHM=v)*D1|!}a!q z4@R-hU_kW!(a0n51C21y|GT8(5%mF<+7I^#?}72F!JyCNhV2cK4{5e8ZxH>4{*9Xt zwsLjWh?{TJ59ur5c%Omsy;a7jsQFr>hE27kG$_v5b~;C9gcvhdq3uC|5Z?RUD6h$!=Qp2m2I%zg@OmPfVumC z+v@aHi2E-3Bbf*CV*^qD+YQYds!yMTV2JMp(kkfN8o>>!&&*Xo&JAQIxLbeP1=2Hi zkFk57{d49PsP_)Y8;K7Xu#RXz|2g#oMIbczBD@Z{$3!q-_W9C}Yse2IZ}8~?`Udj7 zuLs#+0QJ%L8P3lX7+$+e{YHqt(+ccUyzstZc%SNlhTg?~V`S@Ny6C(iz_$Q~iq4Jo zzyn3eIth>lYcJfMLH$fx2T`AMwvYq|h%R^?F}|@*`g(W1;qPwHdp~d#8aH;Z+3GiT zu($^8gZCX%x1gx{273@=`|2D9Yx^1;1|1+)TX)?>R;wKol`eig2hUyn;t~(}<~UIs zbavQK>veV%NzGe@&|wW*`*6_4?86$xChVb*6Y8@9cU$Qb8XcTOS?$?(YX1g>WtrU- z2o)YEsJ;i-29vEXx~2& zw} z?(GmY#2PDEvi5|4J6}#g*Sj^N?r=n=kAnNrd0vcI2)Do(PpSyV&6+1=ze&0E*S zZ)X)k4S@!qTd9w+K(f)eDx7xfgM@@HTnfS;%(PyMfTCX-b%`VO4sEMw?*zmcBZM`gXg+P8_cDVp^p1OU3k8eE&&wB$JSRGhb zn$K$k4w!^m9>%-l;`bjcPorCT-e2)=*F9fDAO7@&jnBEm$c%m-|8j?cjP|-{bz+U= zw$if{fHZvHy02hf!p#Sm#$O^sZ0`n5Z)j8JhfuC-b2Z^o)}#%*cV z*E^c*j?~~);}vnza>8-4**$v>z9L>dSgick6Eyezdf=>a|K6{g1}o&n zmegx!d|gi}$7{R3CW32Y{13y@+$ArM1AB2zB(jJG>sAm#moZ zeRdPDFne$M;O`7hzCCJ`T}(1kw9ZrGbJ~e4SB&xh zp4L+JR%F2IqBqHKJ-wDK`Q7zW_qMx)EckH~6)quY>Lv9Wztb;BsK)qWJ02bVoBpbu z>-01D$=~}c{K-M@{=AUa8hP=mW=rc$`SNky-MV$r{*Q07o7LrDv+tGnU5`KGvvvQ* zlh>8+^-SKCPt{RT=9>-Xl3Yfk(@Y2V`4J!Q@i_PIDJ?#W{_M`?n;Pi{?RW({0mX3E)&WpMTv+IA0aLR zDvv5f?$s(#M()tX%T~6@(0HJoOxbEHWa6KNw+PiJZq~4&E8U}MU$BJO|6(t1Bu&6I zuVhn|gU1u>H+p1@fY2CJHdU^D(OuC=2ay9BS{d9m+^G84E-zA7*B+9~Y2 zE9uzEUfg<%a7#O)^L@070%#{@1s5c)(b==C<(r2oXgmAA(^=0nl@+T!rYEmsgNA=!XCcOg%GPF{FYL(YCA^J3X`ax8gz%?P*66Z8)-$ z(6;)IYZn`JuwD$nTG!XRur9Xl%m)}IoT9rkm}3FF5^Y8W<%~`?mxW#wG4!nywDdp7 z!cy8!QEQ5ac=AndX`$O=UqVG?H(lfiEj&vi>8^DB27lzz)XuBfj33shr*@uV%Q9-5 zU}e|-!PlEnM^~{QmzQyYK1klQ*|v791jt-X11hVoh-GVdEsu=AzX3srEcTFWY_8ec zH84}24cGxXX_F<2GHgpnTDP>5fF!iLk*A}mA-9^<=XDPgNCU38P%^oz%!K`JSBIg( zqgRI-^$xSLDX7LZ+oP!P-oH=ObQ7ZhEkePdw@lCd@2O?UI|EnLucayTU>XM>Mk@Cr znpwo)t=H@V3eS|(t~(;jisl&R_S5v#r_AXqB|3K#J3GR(VbmYpNod_#ZsFRq$9djV z2*379jh#2+gndAQpIMm?+X={=^?Fo$U_{$D+UO438PnEuu3Tcq8RFVC(rsCmoN1y= zHgPNGySB2E+t_JXdfUjER{H$CIa5@fx0t*JnZDoW`v9OUQlPi3c=<89|1IVgTKhJ- zt2w{HQ&nK>4NUb|X4}^7W$&*1Y97z6JrV6q^EG*8`LRCzbuo1%?vI6ygtnZFtX+=W zFP#((`#qo!YhkXhNkRXXMZ#n?eJy#0bR=a>&jZbjJ2ckT)DJ}>)k7EulLR}KGQ25T z4M6rl3*+1N&sMHchCN`T_F;XoSSx+mkS+7WZf2TS3(MBduTns5`8Z;*>{$wPRBhwC zc?cd7FR8JIgn5{k^&vLf@xT+48 zIa^yewU_RwZ3_m-Sb`sJ6d|y+Vp%p*%WK)^r1U0uQ(k%4RL>i)n>f)`+Z!p2{}N4| zELLk5mj52|3Up7)N-PunsmQP^Zb1^Klv?(MhclveSvT@L)w1qMJAjnYWDT9GO1)2m z$rVsFwU*DV%^>WOVFq5an-Pt2hE2}RaZanARGw1gCq|s9ZERmXd+rs&&co4Xd6mMA zcvWNPq+32tjDNhPe5w>0tM;m%j6j4ogwL|`wXj>=nl(C>Lnmc~9_ve1k4m@bj^%&2 z`i*ltJ%EHt)}J(gFQu5NC^9=brMbUa5NQALm$(F9GwcbROI%gzdVFlE+QtF?Eld-+ z^d}f}yf@zim_GB-+=*-eJlp$tRZw4|7SWTO90oH?jO~NWN#_*Q^PMvym>5gkV?lwU zvS-vMA023YO@>P2JW<~{xw`dS|C$ObkDpV5K>Mfe%{WuFgQL5HypZ>{nG#U!?&ImZ zgDl=?K)%C%dZ_V(er6ZH;0G!{BtK=(zX{jBLvsfNDL;T+|BwXOg2q&&dCV@|9DAGv zycx#{6^QP^IF9`xo=}o(Q#}ts8pnem4(Rj3fh7&=z@;rq7t~X@`o55uupsrMVSmH51FO|vcRXK`fq%J{1dCr=|5TUZtr)IvOnOQ) zn0{|c^fRVAj`=jATVbyrb|AAKD%pD;Mm)FN{B_074g~7sfAPIt{S(A;ihLs@2YH=2 zs?NDz|HwrPu(T|SS(hD5n~lIcF4VziavW(S;7CHa1C8@I5CUJs@!3X4ev;d4RfW}QmT32iHXA7AXdvBWG=%Sfv{mb^mWSb;# zuT9n0+2XoA`<^%6{O-B+=XGzrnV@URXw>xn3DQ#Zud5XUYoE=?rWzR@hI!jYdG-l3$SR-V?-A+Es~66jUWQa#|55fYHahc-(Rb4IkL>0~ zIk!61Mh(&v(KNum_xkU;c4SA6YZP;@uO07s#pPqcWywZhTUztTQsli(jlYYVysba< zp6>GMQ*X|s?JSe0BEWm?eRD&Tx5G5!xf(F?7EUl_5d!QfKkW9il5C9uN_c6o8Qk00 zFrD)XQB71P*$F56uS#TdtaPl)J~_WlBfS$QtxvSe3aoHk+2}_*yj1Zvrp_g}7asZ? z7Cy-J@;DFg$I2cY7J3@;`YKthSTSiAUG4bpZ}9fS+*9g}e`rjY-J59GO_z1wGd0ir z{$G;wzeVW(8S_Oa1v2n?#n%)DL40;SGw2ToE3{*_Y0|~fE{p>4A5uFuY{2Pv<1Y$w zka~Z2!vDD8f7t(jRr}OQ01=Z8fcV&Y5&G}`UkpUS=6>J3vpk%u%XRKrmxR7Q-D&vJ zJZ)UNrYvwYb8)!eesXL46s#_GusYODWQwue&pl^K2?I838mv}>d)B{-=s`DL``4CN zzqd?9I{=UL(1XN!0hg(<5X70CWsROTRNZb1)}I1sASS#{w>sQdWS|kYPK>R?PP%xf zh*taW;#TJY}2inDb3e4Lyzp1e1yk>If_CRk6HO#^8o2l0KM zY34pU74qVABUT81Z8#DbyMFG#9OY*ui=KXR^Qu~q@gv=c+cL)`@M}q1aBwG{_Ap4F z&+yiM{8n0ZmFZXoK`!ZJBW9{MF+TQE^q*UV{&+UQg93eWpz9k{Bc(2HF z?zA@j-Bw@&;&cbxOQo&TrfzDQE_?z=Oy~Tp1KAdKTaas#4eZJ+#}k>Z_d>?2FOE&g z<&2H?5aPAi<`Mf8-%ZwAO9cAbvhF~yz2n`G+w1$-jE@Cu-yemcX1%M``ry;iR`<=o zw+(!o=V2=V;<vCMDZ z7~REiW@+6EU~!Wb?rLuL=McM9^ll)o3%&ZFvYW*_e1osoyTgT&h~dhvwcBc+GgLNi zO&hQ1HN}6@!guX(Q34+jz2ER_kIQ#AJGPKV^lKH8pI_EFgx!#X`{j;|mA>S2XCC~28~Oid8tT7q^ll&wHg|bFBWfcBviGgA z-pk@ah73md%U38l|GUorS&e?n@5z(<@$MHITEI;&FY0 z>BN7N9Yk#J7*RtpO5(4=^Qq_QQ*F(_82pde%j`Y=mE`~`CXO5P+WF_@ly298+u|1W zs+)@U=lP0b?GWMBG>IX2M`2yklm*oPG^y~Oa)LeU*Crq?)4t0yDm3a zhm8;&Mh+HOVyoBCbuT^3iOK4Xho|LcL67<^!LxL$JUz?TkK@ai_hEhar^Ad7(c>;Z zQlV=ikXtB_&AHk;o>{L;oi*;eubcHRvs%dD+F0?VSzf96mf%*<&HMe~R6Zv=7vIwd z^Q09caXXz?TA_?4*U6P!cTV(+TXk^5BS$GZD%*JDniTYanB zo!3UKz6HOJ)wR@}HrYkCyTa>RHYeInjRE8RRk@vaZPh-b$MuflN&<;TEe7j#qIBk*@UPQ~y1p;x)Z=Sr;eJmK`pz^9R)^XA5+G~+{LwG%7&;H!XYuRo z`QLrz^;Oxrn?vf#>@Dac(A!GTUGD;`SMNk)_8Wcn_3`7ebLK7QOaxiOgMYrv^~?1* z^z*)cB`*ua&-3qjWG3C+O7-R2TSCi+$!KWqFVO6azb&~I+9`eW@FhrYaz+O!G@kEW z^K&hT4b9cMhw4s1PxTK*wV!7bi`!0@i%cD>bqoZYd@xevhf7@#U4M-Tem)Myt(l?4 z4<+Sria$Sn!|txy^LLd#bgmK#>b2t#ft|icZ0Nf;+?hjzJ7IWt_pIAoE7tV1^KP`x z=3Sn%Wj~EHVy$0KrSR@-z%yj;x$dmW@}6wi?8{GfcW`_G0h*-o4V+zZ+3>}CYjM2h ze#iJv9;4ld3vs;M3pNj&`ej@G^{wh)8S0xIfUvwL1-LOEopVMH__4wz0{8m*eMWAW zg97mH&thP3vTwtCjQ-Wpq-a)D-EQoD>{~ipqL*^{&|ceJ!`Qx>_NKe8k?N`Eowm}k z6W6KlwH@mzq>txUQ2YDwbymC9;nEsd-LG-fLa5&=xa0)%KNWF@aGlDD=DE7^s`XxL z*;*;P^AkWF(=bar4xE4daGM|I=<>Ge?L9U2e;zpR{R98O-MLRV+uan4gY~M@8~tID zv9ge9bDn|R#X6gvMEb9qF4;xlZ`-8m`$i~~Z3n9v*_Zy|#7y}_Ps`b&zNmw!GKTp7 zA4*<$9{Q3eJ9@viTwnBLP%QZ0TI2u3d>+SSguLRF3H{%A@Y)o;WpK!IPzb~UGNE8> zv@;A^D*P@&(ir(k4}E1Qf3R$7r6xNBGsM{MnXLm*&c;3hc&-F8z2HH(J-t zB1}RnI2{@f!U(15Dl{gHabl1{d>NEEumTn85D+t=05!QaxAKdYd%f)VZvGNF(3HgV z_E<~CJLU{Iu#7`f^2R7W8F7_g&P+d70V8)*-^=t$Su6jT_;kR=36U04urW}O8u4$m z=~F}8@@&8irS{MbruN8|%+y^5T|B9Dcr6@px-*waLEd4&lA~v+o3c|BgqZRJqL1-r z1&GPxxh41|zyialB|+r>=0gx;q;ZMELh1&ccB-`NZn%}WP&84bdtGFhs7mJ_qx=BH z*qrzj@@I?+REh}fsYNYZf(tbgey}Yfqoy4ET* z?sS(edSxwxM!*A>IS*ycRsmnYRk@#1bKM`Zmg^E}jtavma^J71fvQVXmq6%HgC!>x9n;snMO-{jyoRnLkshguC$4`R3-&l56;< zDggc&i>QgR1drIKEM=9YQO5jl8KSw=M=(n9<51BCnEY_KbAx2AJa+u2tux{@=hA|b z#g#&w8j?#V5kbZ@G8IKGYKC}9lL~C|N?8-mx>;e!*Nr0jW4uW7g8aL7zpoUQm%NUp#tQbfQsYXB-UCm{dAuLt5 zBxO$yT(%Sf(G9H7Ta*m?2_{4Q2SpBjjtVk_&M923+=&*FQaCE0^n0;l>MxCrSzk}y zui;C#8gu01yhuHVeWuDT)I}T)ZyAk(C#&M};Av7P*dH@i2|W<8_RV~cgz z_{U14@p}{7PoHQU{#1#ZVwG3u)O#I;t%B1B7F!Zg|W*_o^?<@r0e3gUrWQmO?75V*0FnS!lL zsI_xk?8OK$B_MdFgT|Vm^by4%GR(q1svwLY5Q#B9lk6aHLx!}D3){`Px1N~8(^6B` z+oLS2TXbHm%Ni=5%eH)!9e52`E@|{4QQAi3h&8dPFd|Pauf*hR@w-FBe(vKu%t4PC zdHsmwpTsBd<1oI?)V`(35!=IwJOWLCUhTH3HARuHF_ zR^Ix@y%M=X98M_-f=7*@0uv(SoFl1!2Mlooh9sXvA$${ZS4<*2JS1F-SV%PZNUJX@pczyL3<)Y5#t^(%g{Kb{{TgA1*0o;ru+SMY7~&1$ z-mPDt-v|_#*=-)>mI@C;@$I{AbI(Ff!7T%6OO34DaqCIh(+5<_AmZS7;XUzH$6xt# zbv1d(@VH;;J{(#96kl+Tx<@$~swd}>C_;yU^o@`g#?o_ z)%=H5xIzLFBm@ad4)FB|;wi|z-#&m-4YzJzu6wd!6em_*sOa;WkG8>%$V{a@mu4EJ z#(KK3v-XP2Os=e4OcqJ2rkhJSRXEYikt&E@Tyrt&81889*y;%GK<@xailcUwby16o zTU9fol_ANY&!N+!|3O_WrbR(vog+i5e!2)25vMMefWpI3k;_HU&uCV~n;N8Pc9FXp zwmPC&z?NzwMpl%gd!j@wnqAKZ6OoAt0|M4Yi*|&jRX}wxNRM(b0JVzrwnGjB?fI6x zLRyp^D&&(RW#wvBVQ^>C>|6q&%WJD~-d0$@R?*H;{{335*jK2*4P4B&m&e~)id_&n zMn{G%U5`)z%$)0|_DCd0S1dWLu=Lxkm-aJ-NrR+P*Q+qvo?h#IyGTa| zYoIaN`XZ^>ubcj4mhYBntm@R}rBD8AF^M2Y;bpfPvPf{7PGI({Ei|32_YM z2|h1wGG<4O3_Q{?${$U#EYy;?^qV;4zP&8VUGZWdbx491r|Wq?xllT)KMR@kH7v(3#i-FNsc=? z;i3vq!9;7&kqSY|7=RTisngY@s6vIa36Twn7116u+tjveUAyox(a4-Y{LA(78EUg6 zW}Ko$fi^l)9_qIb)ewt)2lX?SGd5zHPu7|mR=Sui*JMgy*6Q!8@O95pap`YH{Wfbs ztw(J3>Bb0d&m(YQ9;JMv{h?9uSz*@I-Hq5GbJ<_g=h8rV#uQqq0+@9esUOfU7>_QOOe$IsSDAeKM5i9TF2dQ)WUse}K zi-cDEO*{#jrW}%$&*AXon&fPf@JJ;|FtlzbH#kWUfq_%IR`w z(!76~#%8FSuN#f z{{pkW#IUH9RaONqb)qzZtb&grT0+9oRDvom2RNd{5%NFOzuNIZxK%fSWD%H=RcO*( z>eMm6V`{0u31~H9hS4$%*|ZT0aOEA-+1qjt99*=j!1$UkS}j?@lOHYSb#0WHK_de&Fb8gE4Eg=(s6KU`la)_z{*AdlCnRHlqy}Ro|DH#sJL7}AedS;Jb zMIX4>)@bbEFBEsL($QBq3I|3bIpk4%g9uax%>SlZb3F}EVjGD74VI2Bi~82I8F$O` zRdVxL7bpCkQEeF_VMa$RF&0Sdis>qCU)7Yn-Osyg1`Jfu&m4=1Os6(#9}zc za5TuMAyq%nLYY;h#;pqGNE>gigRNR)#(XX#rZiq&lxmzN+8&3_ICE=ToQgcJe^xM7 zKl00@JUQuazM@@&qmPV;k2TTEOIe#9D{-3(^ztWdEIx^?&t5M9t&J4GEkM;oCdx^oqI)+emPD|YzlZGVQkqU zXfdWh#18aZ%HoDt!*I1d$8gPiGww|nDi+^ivCxk^!HDWL2LmN zebd{433dzUQ|!0z=xtMdKe0XO{!hEgWdwdYuk!ephoKA$X;yW4u_~%GCsuh2MPw#o zy#-YTKdyAk(;ka2Q~PoP*C0QqXL%+E%E)A&34Wsc4Ja^X*1Ra>=v;7$bP~+O-7+36 z6i&J14$}sq0x5FXCaC44ffZe+WyU77j zhp@Vn6Xu%G-vI7H_@c=otB5d5K;i(dRgR6G?GH@?WflcG&JOCvt#%gk2rWGNxL9-;@x8VtLUU56ffR{|c3$8oG+@id))Bc; zDjOG_S2%lYjFX5fBYj}%$(D%KTjB#sg5i%06~>Z{576vx<|3n&9zfZA5WR-Xj8M&2 z?3aO~-F{2$IU*d(>m6d{G4xlGkYfIe<13w+Kdn8So87_3Xgo+#MkXqcSajT@bT`)S zs_}#NxK2S5R(xj|({py?xJ^ihI5h1T29iHkJE{d~n{ZhLbYM z)EXX{sBu;K4T$ax2YzTNzB|Z;=-pByqp8{VF>;h9!ywJ)8Io2p$@65S@_}--Oc%;) z8CAzRxeC@l)atg++5`nHH+Qt_1$2wbJix&n5y>{){l#%iS!9`VFq#Az63i)?pA;q2 zM?#|5SU)NI$3ttS4`=G?gkTQle>?q6f+QEO6BD{bMF|wbhc%sikrpDG>mhmalC47b z`OU(fLNxG8Y2?*!D|@m z9x&`|3cZvH=!(sbIb`4wL05XtBk*3?wXVw*F8|=V-7mj8Ke_+WKeu=M&rE-eI z{Od`WZyXSDcD&Yyf68s+Y5uZ{OB(SVYT!}vC!*Aa6oA1RJ3QDl-mBcGkYh#(W5L{e zk=Yc3K(gUAo!8G?cCrde)U%W<*XugFN!3FNXjA5qjm8t34a7h&3^hRt6(i;01gpob zei&-+|AA!{b+GQ!OqYonDTi_xK^sH+8|}{t^%W#c{6vnjGE~x3pLmqpsTrkeRQaYD zXL^K)L@{NCbZLw`HY|3EL{h@91qp+qfzaC1ScRfEB3f<&i8O6_m;mz{=V<5FL^nFT z#m;_1qp!en+uoE|Gwk={oc8N0bj%d_|rCC6M!5SIfOtGm=P-P3uTFp3|mHEav=G;#|q9g4uNXzuG}J*>-H#1 zGWTXI%6$r(@Y!5^Kop%eOdx*EyX&TG8~Ty`p)fC#v(t~)a~p6rmOz#}vFF+NLi(!u z9)DsLA4Hf~z-tSBUO_C(4>$&M_$LzcI+Sp-Rdqv3bHBgCRcu*PO;H?o4l2n>@SG=z3IJT7plr%a zQu)(JQ(= z_JLm2ei`z1>y)-{PsmT(ZS`M3o=W%3T|GBQhiNXX6<%2BQyCXONIMNHv3J@q{$}2l z_sAi0ipW^m^L_?LN4xyc;)lA3A#Gy~t%$p_p{l$F=M);=kXnxE=UZRTd-UNS7Qd7o zSZxkTisu_W`|cOq+ed~pRo}WZS#vfCu$~iHthrvg3WV=nZacHGFz$c4ZwkDzX-RHB zFZcpQad(p~z-&U8^6>TCN+Zj0Id&;ZT^z4mldPp#J;#cCESqf%i8>q>IQ;BCqMz$d zC?dk`$wx>Oo7Rl?n#~(aY*w&k5i|raBX&oJFl9Zu)C!a!|Fkt)D<$9&IH#?XsPinH z-N57o>gZhe_ETs;jh{=mi0(T>pu#vqT*4NryI3k&DnW>ONKT>_w+OX8iSc7ZkUIl5nqmo31})Za5+P>|#EY@c;_55G;K% zmR7E3n9ttR2{~di3k$oQC6s^A{LldC0;EsW>8{M(W8ecidp0|yUoiZ-rdSFMt+LnW z{uj#?G`tC;owh70xhTRiM_M1HgO3`qKi}c4p%m1;k80qXe^rne&KSoNkjyoj^sT~{mtEqf{X@#j-Zm#!otO8`~huZiy1X;B*koR^f< z>ujKdV_Qse3$+HthYfxst|Sle4GW zm9yH?Y_a$TOqCT%-{2B;62^TRgSg)X?kbBysNGmg)NmJm*E}pLu@_>&^8?xC%PbTK zS}ze0im+vzsvydE!5f)%b=YIA^BS$QYfP@H9hlnD$ zki5hhHuK2fqN0{4Q5Qxe$3;cO{jQj7JdPqD+i7N=nC9Fp-Jhn3LJqG~h`nT|y8c!lx~ys9(1iR|s56+yO=AReGC#Sc9$?Q2h4UuYT zLHF+mS`6v3T3ZmzO`eFj*k*Dut-`i{ zW#d1fF_S2U_v(^$D(Kl$Q!rsQlT#^D`7r~tTSA<+eiIHz35G91dZ7)-w^LZ#KN~ua z7nyCCCCjzwi2MPQ&N#?F2nk7nalhkj3b8p##w`oU3r$hquq!!+pNBi`k*GM_Y<+q9 zaShh9byO*_DFqtArEsD5eo?TbT*wtIU4nK;pvbH-zlm$58xv=6^*b&S9f@R1YISt- zF_uUvv8Gl#=VfZSXlndgg}-)+z8J!amr9NBeXuc3!7cG*x9Rrc;k<{u;2`TGs5L`% zs@`sLIHu0|wswm(gEOy4n)Jty6PnG>_qt(IgZTGnA2bQ_S>8D2GT<7i(iJ3F_G z;`Th{uT0K@wfrw3a;2R)yqp~+o1D!ckA}oAE#>_DB;RvB-8NwhXUaPhAu_R>U>UO3 zUv_NPX4=<+Nh-X_p)%H$&c7RkrRh>28(7!uai%}^TnAcjm)~Ur=bzv~SM-v9<>_$l z$wU%O0(xh)UzSL(@|se#eJ7WXCEnexXX#0{4ItV0yUrJqrKWx)tm%loHv{u(OZ%Z55E3BaNH=XTYNry&a^)%usS@=yqQwo zWqL}pN}Jz)is&=KaETDJG^9ogsmP+HPz07HH(;p9YRS+Pr>ay|DPihWV3LxWFa20< zu2H9}ve8@7F3_{KYEJA(CQ6(d|MH*730XDpCt__+G73B4Kju63?3sOf1>1#gK+v8rJ);-b16nrbQL#y1Nwb0{IaSOwmdk}=aCvsIdUcq@befSrLf0&^wRh;jmS=G# zLR=dqP=sGL;%>D-_F8>|XVS9H4C|dEf$KgF?iD3@1`PBk>_@G;e0}&C64`n$P9PHU z8xge!xqY%H%a?CD9J>Y4bqz?&_Qupdw}R3R35PXmeZ|}e+C^AR8b?67UvDPN_>ucm zR@bDT<|;Q3oacy|bH z32);(W<4ktoFHuFi~m}YYr?3|RW=GUiEI#30ml+Fm@D9PaQ{SFEb(wsl(af7J80G$`x3(b1@^5&wtSr<&t^dWMTs8e2h(Bv z!7SrGKnXL*4l`)p0WML?Fnry|t{sqNNTwD$U+MDmp+^jP4t?!#E~*#O0;J#BD}if*9Y7MWW5SmUO_!A+CWDkL>PUvF~wsLi}%&+wE)sd$k5P2RTM}!Ch*MZE_pt> zTr6pc3(PmJr(nT$Vl);-?jL3G9pzgAu9SDw15xFLEC#s;D`1_muCbh&p@^}h=ds*4 z7}m$)(gJ6T@lY%pu!?@=$DFeI?Z~MFt024XyDz$MNm}R{iu=5eO~>2M54}gZdhI{_ zUks5@!~fyt6Zw43-2&;~hI=o|T+kk3JbVV>NoT(6yzho|HkmfM~Q8`r^zAfI{&&#G1-^IV14DB z_XOS7+KdwKwzT`$6NhwSJHB1v8_sSUYK)I&Y!r(v zJ~I+dcx>YI7-*>yn~iBQ3qJAc;F)^bawtiRYgN|L{{U=2lfNL+5Qcp1!SXq8I>iQU z{fwocg97>0uz{t9sp;LL_Qr6s)_koi!WThf#KT+75y_6l`=P%Gp`9uB@zvv=6k&HXgd#9U^=k)1kO_^1FbXN5aEMq)C}fT$5@yBB)`Ly6o>u@ViV{{-Meq_O zzk=BH8OFhN$52dvr*xK_Czz0KG=whXw+`0iVb?%7zjf54r)Y9INo58Rh28h{p9Ns_ zsKj}34UK%YI3*#OC+*g={n;%VbWn}=oDbj+L;#84Uww;S`<*+nW9z)85?W#QoCV*j z-~4olu3iI=`DhIt6Z;?k!N~pBKiGfJEpFInw6|50_YV#3|KQbcz4zZoH!TAMN3QQj z7?n;I8um*oP%#Rl|9mnK9)$%bG#QP;f@d_@3NB)@vh?ycO;SxoSxGXZWh!3*?l`ii$4 zw)d_w6?}S0eBk;TT!@dt6LiVQs=;f+xyN5VYaMvB;P$;>*>?>I$W4E1cwPEORE#1h ziK@`=Ra0e(!H20-k*7#Ujf!BQ8rD1>M|o*1j^avOjd#ZdnUuy$|kQ~WqRFpYiahpL>Qcv_Y&R0k1{U`nyx^;y zj`qN#J+N2v90<1u7*^N>_n8ankKis5>>%Kq4&@fT0{^*W0ge883tiNC4-EZ1JxxBM z&li|s>Ge}D9J+A$5I9%up&zUr+KvDC#9L4RRS)jVZKBuccfPV?$02x`K1t7S9XbKs zc;`#cljSd*IrHAB+=C5sCLW%Xh0RDpX8I??Iq5mJDWEb`iE2>`^grdQOjPPDSbL&5 z-PqNLyBha49&9|_c)n3Yjo=`SEVQ`Ia<;KCm?>6@t81&OtE#IEb>U!m6c(S-G7V}2 z=Fok@tYjNda3FXncp*3z6dAj)JJ=T-2%ZU!1q})b25n{0GWPp!)~wM`qBqf>Alnkh z6Xz2|PHao;O`K0$PD~~wb2{1^Js3S67363rnvQOZ9*>@mN-h#rEw*eTnuwMYzrU!w zh+$+7&3(Ka{fa-}?6PC}%dM=n>k+!7~o_8z+i2uYH`U<{KC!F>b>-{?!T{2GjA zNxs;qP1oKi@KbtM^hN+{o{>i7(aEW*aYa5q_UZsc6Q3l!Lpsg;WpL$GcHsJpKU1Lc zjg93qbB45oP%{f2>R$cI_6^(MU+EgyNjLGwvGI#^tZ~+yb}(LpmGtn`BiFG1(8s$D zK=F>P^u2YvcS%2<`<-um@k@Jl>|FZJJ8!)6#(QrK3ky4Md2j=$^u#;4``*cIeNS|s zxp?@(+qu34EfbIREQX~B&`$bi!$#>KDndU|%N^hVSDK-|9Qai|#6&zEyG1Q3&KlS^ zi@{=$1-pwklj2&@UKhx&Yv2zPBP;PI)Qum&lp67o+;RlSNq=t`lO918;8eZksZ>1P z5d$p8z=C36C9#-*Fyi??MhF%n4Miu%P#8sFo@&<+1{4N`;4ls+?SW)q6uM4mW+M{| zD4MFXPcr6V^C7(yR!hvztl8`h_9wR`v7AgNyOIZ!f*CRN?LrdUNYcu6LuSpYhGSV| zg#@vVPM$esb7rkpulG65Wb*Rz;jA0n44X&pKKFo|u@_Y35mzPYS~ zV7bxsJ!aE+s;FQrq$%l#uC(Fh9>!8hG?_>WT$F&ZU`Qm}apP1~C}M~p(ufRWOV%!! z=MNtJ!5h!my&w$Ei<_z4wvGPj=UbMX_}v$6^nYsVmM?>sJ^=H7(3gb!>Ca!e28jG@ z%>ym%xv$f!-<2NS>Ha(TXZkz()+gGdOK<+kzy0!HqU63lXopjSbR+!$N@48~ozGb_ zIm0gLpOAAB2>jDRyrCeu*Atra?2p;fgNXIoptVI`Oe;yxY%&jil}F9fAv(05lIxa*+4 z4urZ`9X4g^)H+<(*wqMCjnLKz#f{4wv8fTvjm_1~sZ^OW?(rmDF67KOhnz$qPG^J9 zSHf7wMcP5%aUb^a(dN=BVkJIbS+a}`brO}a#HA{&6G0xYdamlVDiW(2tirLXxmANz z+pG3fi9(gL>SEQED#64M8#S0L&mxZH^i>U24eQ)+FHTk^s~Sx84Gcb(wd!gSZEFM6 z2ItzKjeTr^)s}5*!y?{B4wBf7d)Q^}nKtPD$4FhNhi3puT zm>?w8gB8_-O{kYmoG5BJD}$U*JOAp^PwB!Kon)Kt<(x&E4$tY-T2`&;JpCD}8J^## zW>6SY>+|Sc9^A7{e_OeNL%g*sR_fRE^!(={&E6I3Q*3|O!15^`nBz0@)Os6uu)*!l zQ>d|25+-cEH#A~mNXALT?TLFtx2J&>)x>`P{$pDo6y5jIKdBPiGKmOn3 zmr~|%%2@tt)2;#fiywaXk!;V;A64DIuYdv{_yiM{OLPCFl>7icL$5)B^iOMdAKfvu z>(e{?zih>OHc825sVXOJp|4$AJ}CdP%e$1mG79N0uiCNUo^OI3TH_O?*!t(Ot}9Dl zeeD>%O?Va&WSlHCY?Z!`GN=vB21%8pD6E9TVd5g;uzyzlD0H3DX3c7BZf+cfTTf{n z9kRt?VT~WVW^>4nkOK!uv!mHj;P><1p;wdru+6{Mf6zba7gRs!HH%)LRHdr2ej=!< zBmraup&(OT9m>Gz3~bBn%^b{}&IoLIVJpdGycJcvOuBh{M-n;+u!z_#$`1neOh(vIN_xL>xjV!}s zDB=yJLO8EfaEK9`VvuyvPJNP%a7*IMt8edr^u7=9b-`Ld-&wW9X>1y9#gafD8+g0V zESYx>`@H4!8a+o(6bGYApzl6mCm63C*rSv$xqs~eKEmJ6yz++^-#zo{TdV0PeOC}( zXppe5pmkmDz*fAnbW_-OVEMCPC!JpJ(np~R%;rxg=>0}v=RV>7)xs!}P(C8A`DAELw0ldj0xZy{pM6NIJW21LN&Ca} z$M(`wD+k9_Iz~=ydhfxo_krR&={>Oj#)H&dzb-x1lg)ng(JeRk46YlXi^q@s{r(264mqWB2W{!4oSB)~Wd1FnwScw@hR?x8%2m-O@jyVpM@XdMeHv3X4x^p+qnl z2#&&%r?o&Jl}vH+SAk+vn8YBexoznr;Ep87$x!lO@^n(LCe=_nn`FI$v<+-*#EL9R zHfc-Rgs9UgNBg74qeK~w9*Sa4+cO0t*{DS}fuERIs_*h0-G4Y4OxIk9v zI^w*}^2{@eBRj&hmpT`IT1uSK#e95Y$*1@$Sc7^)?}pEi!+7}62Wnb$i4l(gCAQjz zBoh%^Nu0!OtlTcK#U&ThV47pG?|fxfQ6YWVLf`t+J%d2u*Ov%@QNW#Usr0TNUiZxf z`*r-u2VfNqbk(0uZj!E(VD5D8J0}P3fjOiT3Lbif9vk2L^RKT=j6?a&>wh@M}KG7DgBd9I6xQw8AVy&)>4{{Mq_5iHRwF48Es4w+o^gqkG)j2II^fz zDa9qE)Lv>ALX3&fsRlKdD;??z?G2p`2@ERAg!)1QArXbZN>D46(pV`T$ zMnaF)GgaMOYhdR?P|t>dSaD>U2w;oAJHgT|-I;o`LS8h{f1JPcdf{(BBp`_JQ;S9H z{~`PXDWzBF7%1%V+uer>%Cgu4!xIbW{GI#Z3-~ffPdrRdO}s->d-p}9i=UPr84=$f ze}@xq{>TZzJ`_Uj@SW4BX>trTpeC4~50W+)3zB6vmqT`iTv#S99nWxa>Bw9Hn7{!4 zBHJ7wbAJG0A`V9|RhBN}LAq{M>ns+Zsx`(;Rl|MZfw0K-=uG%r_(E7z!xzG1VM4;; zR=Lnp2qvM>?+=!=nk+hmWHNyTnG{plMC|%vaTjNq&eNcmU9r~ft$0c6zSbkHFSQE1 zL0?r~m6b%W2%=NGC=zR{*ed!eI-TxF6FJSE>`fm`i!PGRql9S)`htwc>C-%( zkPo)`&igQv{tx*^d}n-Ow-0Z=aY&ZxVm1VB0umL+W~ZbZu|x?U~Q z+on*H9$antCSj%;T#~5MGNtg$gN%@}GhG@YTJKrt+9 zucC;4mwt^J%jdwCA^n}TU*0}XO%>DD?b@2NB+(o?JAx^$?YIlcW-^R?&Z{2dwa7pLi+|}E&eBJwCU)n>v zw9Q*-d*5=}v|-=P;>HK;bt{MIvP1W5S@+2&OL?IE(6C$jF(cc;tf!(S=@J%7ty--v z-ycFkK*wUs(z*qP(c))dY-L%wK8t*LC@i5Bie2TH0Snn$zD8~ckfJCs8bh#*& zr%9rrpMG(QBsMXe&O|)H=6xI`Sla>mgAimi6-O|5HV(b<{`j^yL2($1L!9s0CE0jhHNZ&~ z(@>kg!8#g9iLKV5hw2&55Jt?ibuO0C(Natp zm6PY|?q7V1y!Ic2MQpQ2@-Nv*-w&5=|6EJENhUN`*l={mhWlDFxnF#3&X&6$_>>%= zLo4n+^}Xyon43cc;eVzD*YG|lfF<;a@%b>ST5$ zn@p1GYBCD*p4OZmx7#xcOP|)l?I_f-#64_6a8Yo~Ng(^cEbnUdBSba?&sOm#ew zjJTL?Sg*FE5F5upYYOm0x*9&F3;wsYbN|af`dL$qUjE0Wuo*vdYbVTs z1+eap&rvh|;y=CMCM$EtN&Bzi*GqGwY+L5-ec%Fn6Dmi)Q0EjBM9UJ1m^m!VQH#ZF zwj&}*F#wcI_M(1-Wz>Os(KaMl5L=T74In(mD6TO%7K&k+#Mt7Aq8N0lc8vj|d!q-V zf{8>$F<=jj^8MKBcF(mhvA<=%Xcz4HyKU!@K=EX`=K{9pJtypJ<6X}x>hugWEgwRe zi^uvDADSDrae8K{{1^HI6!##Q*8j1wD9IN_4UM*ltpOK+d*wQM;q!MhwuHF#I(?fC z-FN#JI-Ey#$Le1@@dSNfaI-q_-#>+l-%AIVUwY&EAbI|qUwQs8?E2sgJxPB>@7li| z7SzS)`77ICHP{#3a?gRmUF6~1EiWU267+Y5OVW=}7*(KJ^xsc1R~n5mgM1JmK3}n? zcoejgT4ha5hRc}bY^Jm#Qjyo<#3LTX6Y)d@rKE&$;;@t0?MeYxbabjEnoCx|rzjak zRR)w{<&bhtF(~EbX4wdSVl?v9r&D!l_^bf9OXwBO3zvmSK^)6xp7}I~?{YUvOs28P zha}rHi;QoAO}2c$A$3E)&Bo?N##u7$UBf%e#O)!8B%ANNE8!}!mDoz4!QsIqAsj8P zxG%e>gZxp+O)ejTb2j=6bb^B6dcoG!?aOX06!u)Wet2Z!(MKmn;16pTyw|zvo3m3RoNHNAyY+ zZ$JOp@SgM}@}m$cVPs^8JSF=}{fxb6)sm%&6iN-JaFm2oI@8|s zQ@Xrx+{~bIZ-@@!4V0h~_TST}8Mkrc7IKE^%gHujFCRTYkjw(% zB$*L(4qZTFNM!u;A^j=JD|zy=HYNkFtx2z+K_r_3scWZuo9p$#zd8}zb(OvixU2LK0bW-Fv6&T zerk9{`U&!*CN%Mk*&GVhWEwI&Z!lVAD>r#D$dcV*XQQTQMa1D|@IT|*IKlyTH%qjN zuq=bzErT2eMRtV44w=O2t5&TWUoP(6cj<{IF6|qCfxcxoN;`I%xAG3_?+uqEjrZ@WQ6uy|Rb+Kr860QU z>g0NG)z=r6G;&zQVyem3)D!|jP)YQZ(3Hv|BnAts3rAu039TYC3hgH}V`>y;tHqk% zc(xjLO>NtMPJ20#hHq871Fti z3l+G6y{*IL&C14*v6oTD`Grw9x{V`7fpItv8A)}8(O6MUMA?1NjV-DhF1W|s*j<`T zmWU2s`deMmtj&hvppbZpSi(Yekw(snfV;$A@w|9hoD?~I=W?E|qd4<)oqUvK0hKjo zZTWWY$`$rJ6?g?(gZx{H&56`>j+mFC>YurhE_x&b8(uc@4F6L|B5AkTbhVF;#w1x? zk!)aCjEyy?A&OzPkV3dyPw>fy`gHD0eJZN{_7T0VCc+ynpDtQH#=&X(3(BkZOjy zW*BIO-Wm{UoHf`KuIaA9vKf??<{GoPrnyDv@S={s4jd(I9WU?_xN&j})uTq3t=crk znMmV)ECdL~1yTXaX(Uttx17`@Da9KYDO3iF)LXPreY(D*o*b{AtjGN+s87|WY{%Qq zx8XL{!BX40+i+joxwZ>!q|Jx?VDkIDva7?j%|$HW0-3m6-iU1T+StM<(TYM|NPB^i z`MSM*-XZTWXYpO|j(LrY=7+ucs&poaZl&(5!pQ)7KXJv1^`CJvnj#J7VZA&PgGZYc z`BuUdo7~>aYLb=H4064LrdO$~IOT;YFFPBVz9`lxN@6_OC@|WK=;4qc7qu`ZL97w< zdRFuxb`|aPO*%K0`rc!$o#6Q?U4`$eDWk)iSA7qZr(w<8^g909zq|;=;C{C0rd;AR ze=+$Fy8Pe4HGeVPN3YY~yT1lEU4@Nw_r!bQ+ldjj0^Xl{b)vXJC6D5-KfJEJdG)PZ zHr@TmTXSv^O5RS6{GjH+J+`m!Jn_b<+6HTFRmEG|7py+~5X{c*2+P zB?9SiN4P6YP#CNv91c`?0(^fj)x6O%(jV9sz$lOjbO-vlmP|r{a3I4aWui<1PWv>8 zmLXq8yP(fD0eVhpBhncOOI(N$j%6k3tR3vUGivX%<01R7{g8dkF4(7xpi(moth~z0 z`VQ}znY^u-79H4{(;KGrgEzA0Of_JG`!i5PK8dT>H+@bNoTddZwg>|#4E6`FUWBbn zd*~Ya8~QF?m+gkdV7`CjCHhu*73?@ejZGC`57t4rstTe@aAsiR$mq~k=ovp2EG4h! z)}0&79U8#jqgP*9-7>sy`Kc#1Z{NCd%gzzHhtlWohjnmq?8wRBmeI$4SMlcGC zp4JdD8yThSgy!;(!YwB>o0komO{=S@D6gqWC&J;sbw;4>trbc3V zyH>UbvqqOKld-vsLb+JZyYZ!{ocn08ZhQfW{cG!b}_zaw+JF@I?c%M_#F8R&o-~<=ILJVil!AeCWL;Og8%dC zxBOo>^VpE7_K?Ore%vT|4BR^+PX}RurVSI_xM`}pSYl&N2zE7kdkZ<09mLWmdWBwu z;u{aiyYT$}cjw&sUkASXeD?O|zV%uxjD9bRzd6z4Jf6+Bfo@SO0b2j-A8*3j6R)AkYc=WqKYe5Jpc-mKkmr$B_Y< z(6$o@33=j;AV@}u^_Ge>!3cuUXk9cPM0us<>nltQ>G-O9^&iMP;)5XO;DeN1Cc_%bah+kYzmXO}0$>EMLmcy6B zlVLI(24-7`WltCPEfo5gL!r#*EnTk5%nQlP#9t)rak)HUVnlX3zXyw+(F$ZE#ECJl zcb@ijWv;f0GiyW&%W%y_0h=(>> zY^^oIyPqBw-nmGJa&w2EZ(;%w1B}?&B8=_sXr&n5)HHJ4so%0RBbp2wk&g5L7G?T--^otFcq`>i7xrz{Hv*OYlDW(*HlaLz7^* zPdd&e3lTKR=AbF$YQIV=yz zL-MdJg+9ZXQjLr`ArOKX*}F@PYod&Rsi`qzW3X8^gog8q>M>+wB`(%g)$40+Sl)b= zzT2FidNZe7L!)T;EAx&kJ{a;ggl|n1L){|sjidD8vEr(I>$k6-HC{(AigRbam&NTSoStlz#R_G3AJXgriMO~HQ zDgj%G&F~v~jb5ae1p0pG2{2$)JyK;I06_I11T5-k>q*43>kT z;PK$;;Mt(a((W$TY1dhoc)GraJYiRf~Jjd=Bswi>oqx@drcsl zn6)vnnDU^2DL-{hQ=$zMvuTyNO{<;#Zl@-lojG}hvAo4lG&zOEeAb$E3d2m#*qQm= zU7-if8$PTyZrot!POLK*`n&kCKmh70Q+UVq-Sm3T#xvsJ_=D|YDZMf=MillCf4O+> z+`Ia7t+_RH`>O3Q2k3?O-n;$@SvK+5>U;1i$|9zjo;PfiG?YLUC6UC zwsA|)D(+k>)S*>q5FJ56N&vs`Z2_AEusVg9P?zt?N`f#boa8@I#_hP=yZ`7;0uDGGetpzY|!z$F8RESyX8K4L?-f77NpPW-YK*tJtZ+>_O~mh z)M3+#+uFPaKv#0JKYC3~Y?05fsis-69(}skM_kwrd+4LEjJ8}F-0(b>Mt(s5=U8!g z`G&ofbPg<|kHW6;i+yBi?oo=D(Ie#G&NI7meYpYp@IAMK9k-IT*W3T~r$#)yrC?Q) z@XD?;J73zE``}Ip9zKjjR7^iKT;f)7UXHHRpx-}ZbJ<)TUxkNf1ojla_{-S6sMIQ$ z3rU6D@3&WwcojhAH3gniAf~`7Wl-6!yro=GL_v8=!B&Nv9|WRVq=1YSrEt2BzF4(s z$gG&Lm6*+uLIV*+!eX^WW5%@H#;7n;I12Nh(To|NFA|S%+?tO*g1+rX@ycV;Bdzq< z+M#`|OE;}szF^(MY4Zl*RstI3+=geXPm|d2Mcfy)L?oBp!(uCj&l@S4Xrw9-p(=38;;o$v;1&HV5mpq0L~VE?Ws?p#i<4%{CjPmlq6 zWlB{J{cl4U@OzfRdv?V#SDdy#Q~JT;!7Z=f{kdEfe&aWzL-c?&^6Bzp&x(&u1d#!S zY0mH)={9~E2y^{wM|048xcSL>el}DtZQi`uvx)+W!eo5dOag(n*==06sm^uJzkSXfJH;~;3W0+?r<;~WUrKKeNl);ZEo2KR%fUzU54edjU0@xB*-vW)1qey(-?nNUsB6jw52G0|a_Z!X=_t8^b5WCtsSDUsywVAy3m z;))z*dm1jL@8D5lo%jU%=zG`T5IuQ#7yT0a>=J$PQmWD%#B08ut0w6}0lZ=%Si>B+ znfT)`@a<81dFds322}Q#SVCWfcImd<>#rX;0BiW=x*PAj<;Rb9<_0@E@tp$hTdN#+ zy{e%;y*Rw?^+yT^RszW#>CD3OM~@yw1nr`q8a7I|@hMY+E~$k@PN&~)=WZAaRI?_d z2*}K-5Zt=B$juDjJRX1GIj*`5z(O^__^4@r2WO-n_lw8%(!%eT3K2pAm`J`-U8I_{ zd-X~chh|o2+^3nV@I8rsYFKvd=(6Qf_qbbl@jLw!4Yhlp{p7&O|Jb(b!L3j_F@Pkrk^Zk? zhx9pQKsMw;K2(C*;P{iwQsgFezLre3)Th&prm){%`45#~uG~_IQCKl$~HF&R|rD7TJoJu+*vPzzvaYwib}vz)NCn&%qp| zp%}wl?7?g-R$Wt5%^MSq!RMeu2a(lKV`C~^2$&tbfUSjPWtJ4O3|NLNXDot^q%3Ul zm1?1ybPYaVbGc@+hB#{g)r4!*8e(SFtXNKUrEp61`k52!nChxY)ubc`Lj2?zu&`;+ z!g-)pO>O~exCKxPI7v%BKW)jo{k6yraOiL2kOUj{5g;=MKHv14Npi?Hce&tn+HZu7 zHp`sYRA@>~dy`DFMDyk&_U3%Mu!+CEl5^Botl<76&CRxE+f)#knl>&rTbOJz8L>5p z3`rCdNf-AeBZ6qCwMm9pl3Ca>Q7aDukyw1AL7^XwdxbrB|K#u+xkK^tpVHmquzmNf zwC7g(&ARRnMi#ctnT-{Av*|=dJN>W!?jM3qXe*_s=<3kt?};}H74+`hY5Kp0Ro5O~ z+$~8*_N=QY!nZcoucePXGBNws+rH6!^W|iHlUhe%{^ED=zu&U9rnfR)UjIT%)3DdM zWO;7>Z8vjc>OUJ^m!3v06i5H|wAECoDE3jfU6nOOiMuQesI^$)?l|ANBl;mUtdWd- zV?J#5`B1dq4alvyGj0;%mUL_(v+F6dGwUvNaoC@#nUW#o3uN9cy1|%mMBp#9_DgV8MHs65C4zB$*T%=_ zl?B}`4Um48cHsmL(@r>ia)OjIxM2Z%4*fC86{Z`$=Hfya1q%dNe-EmcuRDqR|$tOy5bP$ z5NlkChvNhBq4;oIvXOZHWQ}-+x9yn+iO;u<8DSTn^`7_Qu(#Vg=ms1>PRgz`#~6^Jajn+aquhay>s0h)KUc ztK=+^43V`+(bYi@cZ4lpFaVAKc|nbefmqZZfPHk z-c7$lj$SsH0at=KQo;@cgNwA7Ud=r-d;8E@{MZAZP-gI(+eGOPzjx=u2jM^HKhR&@ zxAhH}gLhut$If1vtTwzaeG{2c9co5xF!WR?S(?=84#lO_Y1QP-rqiiXIR%!K>WgGi zDw9%EeW{_8SWbMYQK&qr843$UJwv^>4eHwFwjF6Z+4fSK$mKi=8>2Q*a9dGj8>zF@ zu_|Y?R`0f~Dg~i*uylLrzS4`OqEI@wbV=#O(krE6$_E1bs`KHOe8A4b!8l#mQP@>T zI{48z>|mV9LP$oAZ<19OMIQ1dTv@x6EPt7Bu*HzyvuZ>Mq77HJuY=H4m2bmPL`a8cXPRKt_N* z0h%IBsyiYFLV?QxBBOvB7zmIM2{_m~wjl>6^s+|Fakg*w+qT*E+62~d@%pni^ju!+ zI9Dy#WDGJ+V|LP;AY=CT3J&88CWkO!ELmkMcu9+@GD3-()DEi0RV=F^b+5{vicX}0 zm#BiQ;P!Gs7Tn1?4?k8&Ez=Hq0QYlsJdr(nJ=p9~%c`;-)fdbTdk%Rp@_>bSGL56q z$T*IfbfzQIpV^iXL;NYzlpN1Uawf!|2qu!LsAcc9YN!HANQKSlGnh<9_RB0yo`G)>tt=h+Ol+9_Jz2HgND@0U1*7qSf}tv3Yn zD$E&kP@jHN-aP!(DN7#rOdkv8J(ftagwyar&zu8$=$-hDPrLCsy7b#WXjy*!C-h6O zoW2iHu;Z6Nfhc_+meGxGjqk)ScVEx$eYv)fm|Jg{wCbNk?Zo8NqM^X7F+ zmJhAm^Cs?l^VqRt$KK2xdh=njb`?FaiXK`;kL>R0>+4~2mVRn@TY3aVxszoY-Gmd* z)KsHtNO2a*$&y4iQ_VaR{8}b6M{a}Ow*EHU*#=@8*ihS88!jeo`8UpKV~kgeCeHyh z2ZrVxnuF)Cjl}KG&S5E_GG~s(cf*&jg8TBtv^(1GZO20UVEgv=Bkd>KUuwV7ZV=j? z?XmWK`~}I}&i<9E>TElo9Eu~`*AA$?yB*88eROh2E%f@c?d|FE@-#0j6^CtlEiv$! ztt5+0)RhSH@q*WXbNsq$In3(Frb z7gFWVmA_U_gmUl~+);oZFLiCO-*>DBm3P8voXl#@NU?G8kKjzbCcu)(mO6k0xg#F#zb%f7vCg&UQ z6F-_ZbDzmzOxLngveu_`=e;!3UanZbVZ*dmUia9WimU9Cx}KQXJ>DSs>dRsMU(`)a zOv9H#sXT_OZ|D3+Tb`*iMayCH+h&;d{>&4${=#67d}ib4N*#mn<~JS%Pi}I>U3lIk zq6L#^sC^Yw{h9t94AS=?1_B88eCxMmU))FwnClUHOc>igc;yukjvTop2=uVz+400- z=B*c7-iKexuHE|Oe|YocoA14M{3{Qh%vT%7&~uy0cIl&p?n~|i9t}D zYD3I~Mcq~_14#l}LtR~KOO33^f+DzOcgUS~pLU;hi(bN}-E7sawWmF^t9-h553v(A z4_Z{aHYequR~}@be>zC)Bot&XH)+X|P&^WD&9n}*lD<|5aZ7-(C*v9L40(neHs$COxyLx#0nE2}r|F582 zf5QYa!i^wHrV5-;#?LVWhR) zoy{_>DgBk<1L;ZRL_So77NEtb2S4;Yx_NR8%|kcC%?#yZrz6f&{n6~ac^#-2!o*)Z z3QN?0##+4x{lx0`SLQuwU0j~#C6%Qt%kyZxm3u1>RuZ|gxAJr)v5-pDAIesaPL4fY zS=nK(?_jaML~B{t1hbkzXmU2inwB)JY8q^kgr@CH7n_LCbg>DWns~NrcV$r%#Bozo z{Y^CsdKR$$N{#kV89Y=rUWV(+=9XaaaoUiYv|VW zt;9|i-8u>_C$w}Y`?OJW6(9rH2s_@V8=m!sUssF6S!d*Qut7l;kPW8;{xwq%< zdLHU|uIII$U-lIEd)P~N^!&1Cyhqx$2-1r>7GcvO|Dsuo7A_L*UG(im4=s9b(JvQ? z?6o@<{c_QVi^dm8i`3#!c5o3~Tm;(}?OQaZ$}*+>>4j0YO=!8+A8!1E(=Cn-Qv$)Je1?>- z2055AwdJJp`ml(;Wz^Ru8>bbwP|NU=zqUE>zN=IB`Q(Qj)z_EkaQCt7YEBBPYQrA*-%Wd??f(7dJT~OYL{~hf7 zAh3^f-)fw9^Ub%cB>Qru`xbQkuqN8`&)WMJ=%c%q@A;cYaPcyFec3W3AS-7NKZ!yp zfyz+^eWVuo7>}Z|DwC>8Ri(_x?)6%IzF={&F5WFJwwAbG;P#Vln9Gkw;v!n7(`vRd zscl@7%fVHy#%r?W?8LS5a&x$#pu}kGH}5qcG!tZo5Se-I*VD2yYbKo18`qLa;0MRR zUlI}+(cZ{S-U;FaUVeJaG=|Piz-{``NH<#OQyQ^+3(Pjv6X8tzDQUG68-z$rqhzSS zc?MP9tsnU5!1nxkGKK_!rGUe6`2D7DgNRH2bha)-WArH9|BWAiyt(z$M^?^n?r86P z7ryvIJN++*s~Ml+`qB4CPW@rev(l5{M}9CiK*is^uWURaMRpDTbl;Jd-7kFq?G0ae zco^2?j)5Ke+FR+*$sa#`S6KTFy?*#AU?dd6^4^=!~Ar4jmPZsa-2ebaVS#=BR z$hYf0ti%4gJL>MOd#LX5I&n$eU>z3fj?`VLBeA-=y0_}cbLkJ$m<6Ld()XsHOTWfL zP{FD+45qo{8=J74yqug&5*tafGO?mAolK_dDg-e)t&eR}gIcen-+}RICXBu8nB>A( zcDSFz5jRBREUO7>p-?ZkhPoUTP*jOBg}8vCnW!2iCax4WGNrg|0fkKS5N=XU?4VP2 za1LQASf-LaD+24eW<)Y3f|v(=`PHVA%lQf1(;ewuP9j?_0CR%BXT44l??nO9tHz*3TegJ ztKfw%+}T1K=>fWz&Tn4|t0BFA>o*R}Uk=LSKV7`Exay+~;PnT@mDg(`CF1t+*TN-a z-S}0(IDQrA&wi3?-wnS%`t`qU32q;}`J4BxTs7Eo>*D2K>08?Oqko5-*0c5DOQ5vP zdZn%=r)Dbfz}ktmYje-f?fDx7sE%GXyea(%m7@PtEfF~cCK3u2Nr6Owd+XU0o5@?` zWh2n46`&$u2QLm4k>R34MYyQQ5-TZ5^z$$vCpr=b6K4~Gg`Mr&ml#M0C~+n+mLM`o zOwXBxCpCvd=Ho0Q3v{VAjoHeu(uXmm4&_~?LM3^N8NY5Vvm!Nv**#@`#I`Ihd~2RQ zO{TVKhVHmlKgm|V@vaEs{OmkVnD4Yr*$Ow1JrD#DpUllMn8=)*9m?Qm1M6szjz5=s ze#06(@a0^HRM`#muI8Ke-}&+aP@?59N0ff_^fMC=9+;qOR}J0&GQ3DP)3IHHS0FL* z;DK*`Wm!37;m*1pTTXBV&!piE={T~WBwG8VkBRwDSUt+<fWL;BfFzkObMC3L=1lQRsY}eSLj|)Id)pivNdRx_*gXB9edN_v9W> za$#W&-A#-WSLv(tq_^s8gLidK?3eo0yS|j00D)e^1>Fs@31}4KrkZ>0X-xx1i*586R z9UGi@UwG`5m*Hb-|K^9+e8pe9_wFp@cG5qQOz&+_2MWx;zT)$B^XFcF^*DX%o^?GR ze=>ZZ^Aq~w=8b0Q$eo2{O}{}HHPK1KtJ1$9AF4&aRy|gW8Y<0NEFOd1?L$a1Bx+0i z{#qT>Wp@|{h~MrGM|p~Ti|Wvr>(EH}O!!<_w3BdUI-SxDuKi)pwlrXwdkq{<3)}dU z$+VD`kO6dkIx!HVY!Eyir~V6m>4BK%i038GTb_#^(Zk88k?e>Eu!kSw%^P)|>E2wP z4?2TGlQ%n?KDAq~;?f7U?w;5${bc9S)*tn+ z-Tb2Z)9>zkkvgwkgO9%Y#qn3`j$QfW;tns`N>tt`jzKt1mR&+FxHR`3phFab3eP*FP&97(UpsyFc*Xm2g!#pDF&H4#V z+-pBS8lZDiT@h>$NnSM*V^z1vx}p+kfd!rTW%~Yjn7&U?@x&W=<-9hSvr(|peJdZw z9mBcL(I;}>?`ehqh6ug(<`*>@!-rw(gSSyxmF}JMHtl@=Bs{S=chCI~E_r8yel+qf zy#nRWuYPoO%e`y6zW<|F_I&kMe~SoepuaS{F8u@rQ3a|2q6W+cgH&o6r zY(kY_Bb5q!n-wYiG+(RLSm||=!mzPWAN@>9moBq`GsY5OCdAD$u5maN?h5yZ_l6IK zkB1Fs!{@_zC=6kpZhu4VpaXTD=9#7 z8fhX!5{V$(9!%gD=^w6t{KlK_Z~f?5;SqZ0)oW(&*4@`1+kdt1u{)Q)eQjvzi%Yk^ z00{QIjtlObAM4qiyT&{r-(NoP`u3%adp1c77o`>4PrDwCsisiK5{Ok7M*;v|K%u{Z zV%-`KasAPufZ!qlWYI0qbW;w(E@u$25M*$O9*=`@kBc>a2q!x+iOB~>JZC%-^7MJI znRsg1$km}*XnjVjt1C-YR+h0ri)bDcAc|ZGI8>Rg>|h`Wd&2M#(M2j1H~X!!)}#o?NWDe@>GQ4uXt2r)&93R%ihs#a1< zDXmnaOQ}^W$jz*}lDe$5t_!TotE{z>WqB!83t5-7N|KZJbIvm}3HJYf-oH9LNk|~( zInO!2-}m>u?7eN_H;(V%j{oOXA1QC;Oz>h90-Knt)@Up_UX#Ma;G%qqi9@kM)EZKV z8@!Jz1RqiOL+p3mQimTpSj1JcA8V1{;KzObAwNcbF!CwmF<&6%cN6xxItjUt5@3il#Z`!9~9SU~v z;7O+Y@G+<3_W!HygZB+R+1b&|y^CaLNAg>j{(Lc7^*gz zIa`d?r~%e5oKZe^y$|Op1sVkFFW*`-DQ@c<{x$uH|G7;oyH;Su(8NyC^e}zv!8>ty za<@XbKB>HQ>M45m-HV^^-@h(WeD03_px5a2p%p)ZhvCD?pZ#p&+`T{9U?mGLA_c!! zdz5!@+MkG8Q3}6&)a6nsRP1M{Kq}@4qfk`URzhtAoo^BfnqWZ_ce<;PUa8V4ffuo%%&(hPyn4LYg zg56%*=+rycI~hlj!{Zhy>aOsz-80HnLJAvc^D>#OMQUlAm(r&^sc7nIYC5H`k)jm) z4ZRd8DlL|+JxnCvXN|i?3WWlC3?8D#BhV;5Dn;CIyZb)(qwWc};1;cpl*QfZ?s5;f zh3PiXwB6T+A8h-5+ox^B(gs3XYui8@@wUa<@N^MiebM?N%mSvb77;@cuyhH`qNc^7 zzM>(PFMU36H833@`hX{Z87~751%?CI8;Eg+hQKr>80mZUXY@qFJEh`~tSRxiJSlfu zQ9!Q`6t%e(nq+hB`C44dKqTfFh#jOh-C(inF{3qAtKrjLtJI+ZuclMetLf7m(u``9 zgDmenvqz<46=oswD`))7`G~%|e?$L5PRF%cg(b@OBl zZW75qO`a!3Ht;R4n|&AES<+@rW*;=lJoRdm*~n#h@`)4*R56{NJU>;0gn(VCNN1f` zl*(-FXHAC8vXO(T|N4?Et2&n~z>1NHPNB~bJ|HNj?kj`_y8Cmya_Sn^PJI|7CR`Ug zO`pW-sW0%Ix9<6q#kQualMb!Pd6g;pCg10(zB{OwuAQo-fB)E>yP*SW$tL@ zg=V2cSTAf96oTjtr35C(5_qHCGn?rg$(Z>hXAz+)iGM1ke0!>fRD8MmL18odU!B-N zFLGBMv+6_T&B%`Y5Eg?y>h)@@7E8)fYL>WOD6z?j2x|nE-K~IWDrpFH#3s!dG>Lk6;EMPMcye_xvHRwPR za!-#Q)8wVx1~uE}^CW{9il+<)t>Df>dE7TRo?_RdUVn;#qg`U5RBYd>J;6Ffz1E|R zYM<5$c`_nO?8q*2ShIX#n8g;B0d7-m1Tk7*Ew?_4$j`}4T9q7MHp@&YgLbC@3O3P_ zgPBPYX0|+8pEGljxfo_#3W-2Eg-513m*Cgc-h1DC{Nl5g;OT!@eZNyPRk-%mDWL|0 z%lPa$5Y_Y{<;`ExMRY9MLxTHI_-8W*O|RVo!~S75zF%UjqhGqczlfz4h!P1rj@i z@If!=y*=Lb-mPB2K)h8Extneg9g?@kMT`fdz@|kVQ6fe=qrFk?-zPdv1*xbCDM6_; zT96eq#OlDgR>5e@V_#b!Z8e@Yo;MP&vD4UR95fy>jv2>|s!k&qGa--mOk|o&&)d+w zAzQj+>&+Q)!;Ar7=2MI^)76x=PvuxgB2=BU&!p&OIt0jCy0fh|4`;VpBTr$dDk2X- z&Yv2$ZG2KcWmM)=R;t^^SE>atQC%SU&Ra^L;l@e{DcWi z<6KM75UUJS%Dn6Hl7QaaW5&JaLGu~&n0ef+K#hZqXBvqH1;hY5v=0RodUInS&}b&Q zqG$o=3)UB411bO`DR9_q8kK?v{iswLon{1Dk4ua*jdduR^;bigf!xaO{wx+HSSV;g|>`N&oVbi21CVFAyZn^C3kVwB70&s@rXH8u`wH)nVE)%KZ44J zI@(UJ(F=50yc1d{4?Hs1D!jXH?ejUrW%I)#zaJm{>ix100l_#RHffnOe270jJ~%Zz z2z#gjd(MsYm8u7}RQL9__pLL`+jRWg^(hm5b>gwt`M_+~Z z$>Uv{2l2Meo4LN|s_K&R7bt}mp-$`G(%WQ2F~Ak>;aR}@>>_v4Ymey>X?V?4en zXYwhmNHmCEk@$$nHe(hdZ7@`nnHEG)1dJq-{`O*JWfAu6z2eIYApWPcWUbIA^XXZqLlC&~>}|I8o2tH#;H{7er#YfAjrACnD% zHq5g0h|Mv}lfxwQ1urt1)0wkaWy=zdZv59;#I4z8(mn!8Rgu>pQf4fi`+f1=)E#Z7 zN}_YD^z3Cij$7%MppC3O2Cq^PMmbeu7zfU)$8`F*JR2rhwYjnhslaG*tjT|D927yjM7UV~*XcbbhH!D#W+K%?4qex{y z2s{|687dhsQD{osI=#-Li|Tgi1S^q2B%>q;3=$JZkMi@)a)hcrA55`) zF(0FRF@HG!Q2sa<>qbH)B<}Y*opITP9pxL&J3;RRjlmgnVmT{Jg5wPAZkkeC4rpWT!h0V zobM10hXNsHW^0l30ni6npG-6)U!Fi}V#qFoGokhwUW+j?Q>@m`I;bPr z?BYx}g;;z&*H&}E2}_&E%qNURCey4?3QV}7+89vU6(nFR@(KnUlqu9;UeP; zzCHKmLwM>02i*7(#ONlqGhjjH96~o9 zG5q8jZ+h-I ziWiaZ?)Z4eCsSpgyt%P|)4bu^hM?|4dRCi*_pDLl!PTD(L(Zzz`_^oK z7+$&-5oDWIsK%AYkP-#Z9FUF-yMSdYizNng%HwnvIrJ>#R9BwL4QPssicKfj^I>4m zhlZF+Ne=TSU-pWmDJqo>s#AxhQkNX->4KZYW=ZzoAS_(3!@b_U%l)+bpj#E?ZxXi{ zDowdXYeC9wIH8AO*$1UlPZ*C|K?t7$>m)+l8e+|vQxOc#k+;-R8w*R128k5~AxMI0 zng_cc%Xg)MvY|vlIBlWLJi(C7VYON1_z{oopl#Ylnr$7n)3)+)2V0r$ zEsb(I-%PE%AsrFXpPh~v(+{uQ`E<)c;?4shu$jn2=j$df2%M93S)wc9lOQ zo5z{6BQI+aocZ_)J>_k^evZ;q%2{{)@`r%{E`^54>q6H9!=V1nK6+((8qp(lH#Iig zi(|A>7@=`oaece;*m3$6{bcj2AAQx1pIX@R(CZgr=@Zq7!;nAz*$)Q?ZvX7bzjLH$7WVwma(SHxJVbtUdGj+ zz$CzUVG2yhXD_`?zj*#ReB05@c?(znbS)jBhah}-^=+#h6EA^j*(3Ceex*3PiGJ4i zl=8?&^z43!e>SmiLAZzhW@QC*34;?Kz1a9|vb%};>6$xXExbub=<$AN2PS*Sn>MRH zQT`O^krfr7B9uTMiG^N|C+x`251V+_p^cc$(TLmS3K!UHVXJH^p3PI7&v8XUwE>^B4Pt;{xgTGsRg|x(2Wo$)=eBlU)%c0XtTO zsssGE%G?fCPJD#-Ouj>^!9l7g-@$vndY$;6A3U?|336d)9i^%M>-(s8m3&mbKtKozJG)gcjmA{rC%WKAp@uZc!$;-uJ7S}X_06uMlc zjZHRdT~#nBiuFy_s`~mWYm-oF;q0b1u};eK>Ors9nV6+I&d(?MQcvlw(u1YKuF|JV z50;Wr6+mvYZoO`o?rBz1i#n_$I-NqpcEwzzVLpbrxe6i=O$aP`Me0yMFSn!Xp5;(D zV@b#ptQgXr;J-v>#f7F*k38ee&7z1Kmy#DkjOk);OR%R?oF~9_&v+U z6{>kM=~>8m z2rRoTmWkD0u4%vCsob%9=Y<`QPrW_z?7PqIS3c83Pd>hJ?-+#Xvm-WcDLs0KBld2m*=HOuNV!Wvj?BceEOo}qEx2-JvLNnKT?^(7K@^(A%kEO1UqPEu8) z0Hmxz^4z?pMpdZSdv&^AEifw=ueMVwXgKHf6-ywc)vA@*kZ9xj#;uLJ8c#PWP@|!- zw~?Sm$ZJGlko^j+ffU2VWtF7H8c2oxVZSSAcCo|IE#(V#@YwBUy%_?SK?qSZ2@sT;K7W~|15;CKjWU5k?(RGO0K+Q zU@E)rH?YMUz@*45$E_tCxb*qIQf_R_ih5UK@BcF z&bLjSHx%r6V(jc6E1KU050v;5H;F03EH$DO#N2Ss-Mse$U zMaprz3v!(WtaWip`C6@})5(HYMxAGz3giS0aXK}*nh{uXR8o25K7^II3~`ZdoAVu> z)YaVSTx`ho<__hOUd~!OlPhpCo2e|C$~D9gl;t9nTSly2%s%Ya=u;TW%n`;KIq$vd zRcRS&h5f|Ko&a}I%4@b-jZDPGkMA?qG3$8d`1Z-ix5Fi04Ho$rk8HRh1cu*r*}l1k zlW;c}Z!|*TzDDWQ5XnYqWdQ)z>da!qRT)_oE&Hgk4=ZL|>ngzse$diuP^iT8(p~@S zJxh4WElU#givQ6U=p}Neuz-HP`9J6`Z`sZ*#vi1n#ueqz&&*Wme@5;-P)2R*A2KU9 z?@^W{p(_TyJUg^uHN7$+KJipOIWVNgOBM;O2qQ23->OfPzeH_l5$qRrPyiYZCu&J? z0ZT71NyWuwrKL$Uw{Py?T;e6-Ty|@hNzLJoFxG`3Tu~8g4uK*Bp^(>GsL+B&yKtc< z*xp{)wo5!HPP6?iDmIH-`Q|n)s&odiQ|uE5MInvO*?djtPScceRGxjGXtlD6cRHxC&ZjLJu5_Y9zTbV1K1HYd*SrV43z~h!p{c8P?;{WGR)p%{-Wu>)9I$fgKB$M==)^^dugpKI zE+~JA{AeD0Am$-E*iCv97>LQ>%o5Ak=Al(8g}gj4>151ucYBeWuEEerjxhOVQ zpk_m}x4Ex*ta-dySwxze*@)O8HO`q66Po-@*wWM_SS%Louy8$XoaY4{375%NS5Us1 zZTu=~8OOi^A#90N#Mo+4OM>;R^`ez%tZ6+izm}BAS67fk`MJQwlVGRj|JW$Bwkqj0u)_b7Yv(bI3F58TY6Z$; zIG)wd$|0v2r}~=i8Tk|cRTc}R@$2+E5pHz9QeNU&Q<)j|Lc$TvoR4W6nQnO`%&=-Z z_kl^zY-A`q13(yy6f^24J6p;{GfO#XELI(-4mkduPv5?Nr${e-a+UsO-U@J>e(w7h zHXl8{V)A)-ou*&}ym0x;En|S6fBvW%zqpNFu*8ysP(tiuRcw6bzweNm+)r-oqYPcr}h2?Mu z3q_(=Roj)n=9ZOnp!-NL%!2L~Gcu9NsA9KPE4iZ43OA~NFkxA@M~nQa@(Q*J?NXW7 z>p|s)a&LKWd0)Argp`+i+#Vj3S1`vihkbdu@RRi zIGWd!cRG)tJVTyWzKrFOJRahFv^bQ?%a;G`qDwlR3%Q(dn`_AJ<-~FYJEg~SNp3dA zIb$+9b3DpTaK?75hHI;tv0V4p&rx}$M839)WWS4mj4{aDo3V)5H3q)6LKHWw5aDqs zTL6P}eCjpFUzTqGzSdbEmg z-J@TlPu({MD(8S@4pcg!)w#;K-MQO&(y6F)wmQ3cRuE!+!T5V4_8U(c&l)cpg)ZYNBQ|CT?nb~yUWLno%S2j{ADNw%$M=}o ztzgf}?iyCObF!6OTcz>k*;N(O&lSnJw`{;Jv!D3=w{m@?YKHGroy?qeEIEz6VtBz% z)(c;*9suvex@+rpoLjkN^4%+7IDGh&^XQ8G@0ffGYwDu-Gh6SoS4fI{GHDx8_^y8} zT>bn#VbjlFpr7Hh+YUdn@4)ApphfVEsP$EZ!qS{3x&~{vEt8Hy)Y>-(& za~pG9E@v(qm-IPF5y^M*RpZcVHTi7S%g7ON0L42s5Ko6{13R6K|FT6lKA>fNH(9`|@VdOBz>~@~boj6OacyI+A0dBk zW39rRz*wJnI)Qa4VMz2QNFhlqSYR|8<-AAhX)`cHDP|_)%*#wZ*39V&+?iWRcSsbTvI0bodipH^H>N5R&>Xc$GETu19r@sq5x7sr`wRwx6 z9@wK?1`n1)q1ptiaNfs%|9HD~=bE~Q9-O~!bF6jkBb^`9#Va3pc+x#Iwtf59&=`Fk zTDiaM|ENAx{sI-ED%sot{{7`>=?JvGA~8@7JEE+_)<&b{jNFagq^w*X&xON!+<~!) zU|cq@fqTK~+n7&I8~3A4HuDehWy@CUEypB>PWQFdS|AlM(G#`|dVmoSdOhPF!9hHp zcswuy?K8{tN0NZ9&YPZx=dp99cODGQ8=iM)9%&Xk#I53aQ5Y3rNE{XqiKHWWFo`>o zTa&wzB*{dav1DIzFgcnOP_8!@YjX`x$KiAwyzy8Zd*i+FzWAZ|Xk3BfhPWICt>3Jiy8_vA<>2)pd0yi;3^3r!8Pf z@2Hmaj%rDZHZ3T-*>UwwdX$!4$5EO0)xDuc7MZX!vH!1I%dGMKjoTsWSvlL*G21iL z@TfL(CW%aZ6a&*&R{JG6j`{+lYhGX!n74(*=|K0(w-c>f)C=Adqr}p7hGcQFCw9{9=q`#|r zYF%z@>Vx$gO=Qz!BzGP>+6Y0r3m*7f4ARe6K?PhnTQ_i}r_t2E@w!d0OpLF(m&CTy z;qBZV{6AIalt+*jRiOE(6P^$?$;QU2d5hxl%8ts{c*svBw2Qe?RaI@h&+qqgvp8#6 zS*g9GloecRDeQFSmz3n&^G8^(&=H&0GLIF?1yV|{@F=1RqVXzX3an7H+;kIaH?(78 zJ1^he-c)o|t8`!;J)JuDEbrLDCGYw`J7#=O?247J``9OL^jsYSy8tWpC|GjqGA^#}EW zo#^#yCTN;3dL`VUW+EoSL`;3$$oG(XRDDLB)2kj+WA%(LPNw)ui_9Y3vt8oU$7$2$e|56BN>)n& zZv>RWoe;hm{*_*vO3`cZc5vd=w;^X}NEDUo?ZI~GQ}KKeOBPNork z-)P>ywwP+#@2+#I9)Cz#S_vIh;IcVkE!{}}aQdFDm-qh7@0JceRQJ$5-`F=YzG>Tn zL)4jUfAZY-xL*E`s!Pfvs1`M$o6tgRK2lj-9p|eL)q;zV+SlM_B%u_yhz_SxsX$#( zQE_8{=jRqlA+y=;32Y5uPaqmN5jY(X`T{T-7!TmSz)%2lYw5eoW2r!(CjyHjP!<7a z1V~K;B6*=a$m=eL{POwbIHx>ZUQT1EJ*g&bjyASDTTmOcAC{OUW2b17PBcSvv$4cw1QIoZ&IoxziIIKZ z9x2L6vLuR{*|^)le(6O+XqY7w>PpyAG6$8Qk`}vnAuL?DzJ+Pt^(oY1Xu;l=Sj$k$ zaEs8wva|H0puo{+mrWg628kLeK}VEIhlg7;G7X>0q0jN;;OQL5VNC0soU})yoTnv> zJHU}P;&-I&KBCzW-W&XFXL?;ZS}C22SR=c6uuYWNp|UU85SjI`aGrAw*8(^V|H8P5 zwXBovVO;)rG?Mi;Pd_5Ytc_|K3FJ$@DqUe%d8f+@2-yj_I744l@?q*M=Drc+oM@Rl z!~+0Rv2T9+t+znEZ{Go|e0zA`>TmuNyk7~vD7Nn0bo@O~FDRrxq<@*DM_rEg)~;W_ zUZZ=d>0|DQmq{^i7-%l~UFb_1pqo&kp^2;aC4o%GQ4srr_V=)Avusr}k; z_50WUW#28~y_?#He$bJsw%MnC+yAhA;AiS(@I7q*=Jy_%I!X`Fm%sbiZQs89r^##C zAo7<{C%P4_fUTl=k$$mfadh$N#X=rgym)>cFMFBoXEKqPzYJ3IQ>^0EOZBl>MZqZ^ltZk1xcpE#k$dLRa=}W<%UyP(QPN3yD>SYq z7cZuBnv{HFZxf@^QqtmSg3cyrYH4Z-cg(L6gC(gd(dkZAiFw9URn@NffaV+K$L5nf zGCwVzX4j(yMXC8&QGbew`u%ybs6P*GIwtA$ex7N6ObVWs#~7GnIJ2Q01w8#lL(QOux!>whQ>WckRtW+t! zw$IL#1haPJ*={qk18H!!Ee*>EE3y%$TU9+v&%C+?;**=s)!?(go4XCR@A&F0{gU2Q zxd1BPd-ti9y3=h7@BXLlrqTtqjls9Py*u7|3xwyNe~LiV=b_&NSAFCF{RCcjd!Ve? z2md;idKe6M#pv?dZ$i$xD*6+JdBJmIO{>O^Jv#i^;HqD?^lkA=%d6J(EmY@G{lFF@ z*|tLnSHr4ODAbr?1)%g^{;pH3?zm;_UU9+Lf_d?-HFQ<=Po>3^f4h1mV@TWRf2qzW zUq(f!h3(a-1Dap1D1D6w1y)Rti|UGsjzpEk!coLUhox2%4<6OG=G~OKi96|OQga*F z)@YH?T*F*(Zs%MMzC~rJRz+b_h5!Q` z`g_ITO4TYm3Og88TQ9i^3W|#SeuPMGAr!J~hD0vD*+YIt+*A|Ep8hq7nQbzg zB{-WYG|Txt+nV!Ip(c_RqFcZAuW`nBA{e@%5?~8YrOb3z%1oO+LsM1k+tmIDT&CM$ zE#1vuyC-9G(q?IzM^^%>ZiiSy=fv_;kh5cl*sjK6)9AWBOSo>?yfteLD;_yT-h&$Y zcIKsg`T2p=x%W?FLg0(ari~i{x3+ykggir&kgvOMrsQ9*eZb?b|gWpzvn=#m`rEjV|!RBB`kfb?G#-L~` zOawov2K(ac)csGh23z zrSdM1I?7VpSq)2&+RLQ)`RYn_C0gGOtN{166Ax+UQq_V~dx3{Hij@UWkfx0DtEEs5 z<#I7tvHX8}1&y`_SFO-JGJX)u#&XF1Q<^d%;2OWlxY+pSo9d2fAZ~ z)jZm}MxgbuWZ-f`ZowyehK68O-75s95mBbm^1BXRl=CyE+GkHb#;gno0KZe|jRo(`a;_VCtymoHAE(|6AAdt%kLN7fx#(YWqj zfPzHu*}89Spm$CD`Yv(H_Y}9m0|8L$^5FIl*OhJTT|uus(0B)(@0_|2@O%vCcE;{r z2N9$|PQDdAgA%A7b)Z|&a=7<(6rCPNb5ImgqEnhPN8eG>1zqLkC}N0U4T(gSExf6t zfgcpP(!8c7kEda29S3i!ZkCI%fYa#+S=DO0QpgGAjBw|M5*#vwLJ3%Acf1C-APL#0 z$B)|Wund@Vpaqxu}vy+FBP?x6id&=ORJW--OH+$3dUA3+R)R0 zQ3Lbp6dQ!h8@&yE4TBBi4LPU*@<>BvWlfFVs818^jOUHmYaEi%-s;ltl1lh82~VyiJAU`W{RqwmECN$%aJzRu#dZD+S2D( zC>TmqXOFR}%%ZPOT2%gIkxI@t$$~1g{WZCktcu(A@h~Ih_NkgReZew}I~N^Vx6M+x zuVziJZR48v-={CW*wv0<^*c~j`VOp)E!(nYa!^Ro$*EDg<MW*Y5lgxcR8`pcb?v)8j`h zZr}qjN0B@LW7H-#6~k`khpg2ZQf`CRt##|vy7W3?*P|LsN-Z;i^%YVYUD2b_v(bxDVIT^cBvdA$D|s||HhD2A3?xBq z@Pt7VhORISguxR7tdD^v7K6?h)I^i&a14b)C>B;Hqcu4eFBT0p&SU{y%qw~^@(z2? zc*nfsUWJi(Z@TIKg*F<#hBjuP!z^<}hR!!IlQ#x5)});-XF`2YMof{B{5qnthh-$v zUDKZ#$;jTw*?^FYEhe`nOJt6WnNDZcQIH0LcwD)y`i2?JOmI-~tgDQu^Ts$G7sYfM z;&Y$B^wPq5EbLtPPa7?+$BJz5s%3r8bNHlCI`KX!n>q`NaO>3TFtC4e8=g1y2J{Wn zFK`eruB2^8z`wMC{^d?c%v`d_vr%8-ypE#fFdcgd=^{!kea>`&j z%Zk~`)dxK1sgGR-vtc3rnLNUHdN<1&9BlZjp}b7}&zRj{nC81wJYE^5T#?A=o<>-)arZw_$S4N)q9$Ldq4f0*3sYo zufBIy{B+{;mtGop>=ev}zo#QtnNRfEX^rZF@=?ZXg?|xSnolE*T%allBAX;sHRaG^gi4_!7@gJ+rY)|R+T>We&RaJ>VAX*yoGydXnjUnYX z`20Lxy2uBLS`JQmBz-N^*5>O=q9x5G9VLREl$4c}Ra985Q7>oOvSdCZ3-^qgh{j}c z=RfT`=)+MTGpZ#%(Or}heVsn+%lG9+57h%_A$hHiRQq^AqU+3NI_9Q?{E6gTv63JCj~`g=J0k*oTdSp^pzrUTzNzRNHM zYc>N;c8@d`@t9k?l0}Q!m8wv+YHZ&$dj5-VG*7M=-``aIhOcIq^fsXPz(zm0b7$xN zx)twrKj07J$B)8c@b*vAqqu$Ivp1L2y|j!JOpFVLsWtS8&Z@gr-tF=Ir)r-4`^nND zy)lM2Pwg1{$>O2@ojn_<4?g_Ek5+Wi+1bEWr;`4sYD{?$ z)u3-+{PL1pxN>>PlAAj_Z!d9yc;?A;gX6G3{*Jc5~iFkY#c#%2h z(g=q0@BN^( z{KL-b<#z?9R>7)*e6YAZ&`C!3(k~CuD?11J#dq76j^4EL7I+&9`|0QO4cw{7&u>fI zGq!Dv7Iv?7Kd?rMRlYvidhA!iZO}KiZEWd+<$t^Wmp6~iua7Uecgn|}nEt8n(IXp| z-o5Akryl9;J@SuWBik!h(d(%~`UL`1NdKrBQT_r2(czap8aeN($MduYdpv^Gu6Oh} zu!cAsR=0)4ma{-B=LzdoD@N9sRkZe5hpfX^C3}ZubL-h-qC* zJFtTMGPkhc*3ESK>d`G~dqRXw?Nk3q|1LE;1Z$uhS|I101;1ENzkFyr{c7r8cRr9X zAcDrHRVtSqt_4AB(ROJsY6XKfZF|G6 zqS@g}$%ok)?U+_!!djO9*C{$BJ;*`zJf@z70d9rUa2^zpNqtUx-DF#(^w|)(F|eM! z#+7CC-N^=Wa_04wD)!}>#~xE!=!&TtIEoZ#%d|>$LHToJ;oznoDR3YP}LfpEZ}vLL=hB9eeudLpL<$cCsLo*vItkJ3v#qAfpF zxkq8ZxQmy@oym#s*n2Fw5()o1cOiElN6}DYKhot-Nng5^$3c8R4`j zg`!|cV9;g}eC-FzEWL4vyo)=b@VV#q(7(_LuOD2lC#DWf9wrw0C1qx_*%$s|=h)}R zhZKw1V1|A%>3i-)_3?E%d&$m;LggD@EqP>*;y4|c8i2=O(ew1Jr=a2;q(p=C1J$5% zK39YnB0o>7)gSZweLALWO&yk;7LIF&BK$pvo4@A?${L~*Wv9!|myu>Cc%0DVJnh7y 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%0D?NW9OQutK5|N}X01j)kv*#OFpd>oZ*xbvwk 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 z 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

  • t&(pT1Lxn)$gx3lvHV!*J9mAiG}5=Lync0?I5r7kSc(du z{;A|_z_8tq-{OU2Wx5^f*;a3LGoo;5r0)$?SKL+{5c_a=f~2weVjFf)xClASZ9)t& zyMK3<_U5f0GxFAud3*TA8iX)kE+$7D(uVCfTvrr&XVG05nmblYiWQu*gQcN zQ4*+h*)S4vC+%I)1rF@@EmyY!OBAR?bgF>W8I$i&=C{5HUg7Gu?(LVqjl`c%j(x>+ zVpJNZRQ9!Mp7_f)3U%Ulwh0IkJzv6Hd$BCCF~X4$S=IvU>m z*Exx-O||1>O(Bss9xxZcB+AAfYLg$s5bCpOE3*A5q5CAlWAvx9)E1yFr%!|UR(vZA zGHD7Q8y1?K&AXrDXNIk7Ffb?j(&p=^`A-tJNe1Qkeq0XDw&MCBRH6gOg(_m}Sd+it zPual)SRnj@HsPLdHlgLo0;@)zf~pmrDK|Un9&5)go4ll+*WQh9 zmgOfK@u=P77*t-(D31pUOtbOp25z$PT)m5(TiPxLtGls{%9bU5x^FO%hCo`FS1%Jxm=wiPU#PU zSV31p;E{%j294O(!I%wq$YAI*=#Y6>;=T(fyDgsK&c-?ol92jEmuTtkzC77W)9!g7X0JUDw?Qu_U8-9A^UEqaZ#yBMN6 zRd=>Dj$Uwe9H?YrvUOjxxz2}LfEo@jP<&8YKEj{X?gtk4u0eIILF7O;ICuJ(qv|D( zhS~{Zt3QMN>fRb}WB8;w)92ZGF5URU?nXRGR*72=F0-OSM~j$o6wVP*M%$U6Fxi#X z6a83GBoKagqXGXMDO8f!L7>oh5#-UJTM2-KXf%$N=RGb{Yjf$b?0_!-%ow7LF}Fj1 z^gg#CU-5fPnA=aTOSl5|^}aYu-xuT=rxD?av6bM+${b0aH>cA~e?qOGWoPoBRi(oz<< zG3OUKdCyr?j^=Jf`8LZd5Ld61gRM*n5WqS zt=j`O&HJ?Y=i3fhpVbql*W%D^NZGkv>2$X0Rd*gjPc($0_l3**&KYI;4hmZ<(Z;87 zr`?kvT14eAj$QP_{W@tGs?>f5VYVo@Ns9IU9OHl}Jn*vgo+S^u2QosX#_L_AZ2ZHI zz9k?`E#f1Qs7Wd#Ug%z2i2h<}m(uwy2w^zF`~$(@Y=;l&>{_KKtZPS}PxXt6)Uf3a zCEU|BEt=Bo_1;}aA6r&qKxd`i)J)Y`vVyF42K)gUB*zhh*hnu^*aobdZTwcUD$lpy zkg|6ZuA6|2rn}e6v?cEu2kPc_i>vqRSZ{L|ph)%3Etn}Mzsu~C_l_)f3B;jW3WmO* z)g}A)l|4T^)bni-(`kl-R}@hsmLd-D%N`2deC>&=Zp9ZqOz$2aC&;-SHfvth)6M2v zQg|uOlnjg<^1s*>kt^*##)MZQ_i6t*jQveFmb3WrRw$=41oL-M_H`-h_GF@HtWg=v}dKd<^X zHTX5*MtybZ3qy0j;%@r)06VEp-sQJRK(Bd~Oo9m3xn@M&fbY?D3}n5De4JUIOf$;= z)Sds~nm~={=p1o5+5_S*Ti$&S|H_`%&;HGL?UI(xaX)kYy{WyM5w6@BVOk+4NUaQ1 z@L!Cpe~6htR(Xa2fsv6vY>MGf_AWd&**i$$Hz!&$92Ukbp5xkY|BuCgBg^A5G8GjS zyB)cd`pZ&NHx0Aj3c(_8{t_Dd`^WsJxlk@=IBUG9A3$%3;YX^?|C;CL*q>hi6z7Zy-cC}1%b|3RJo{|{kIG;d*G!r2pUWe*$B@y21u?IYBT zYuONR0Rx=@T5Rqmv2-U0Qit0Y=>8}F=`}oW9)RaC1`N53To5Q5qFuB!)ztFcO8Ye# z%8<}5i;EwxR+^fh*DcA}n#kl9lFnIV+27HjC(wbg&`dOuhpC(_EbpV8g1YAq>vWKI z<>MZKuzW&a-nM8=kT?OXv0OloJ0+6{JB2f+p!WGSz90WVDOeirapK$e5{j(OR>!u= z%e;wR7q1KUanfdFv_z$ut^hmx(3Hp*TV^b~P|obEkAT1;ksbU83qWVCbVK%E^U8i( z2}J@ZH;yIlz2KTgsEAP~8qAe+-4+^#6Xy<>ud%ZojLK5AiOnmfz%)`Y!(|z3U%>tl zXw?sjwZV?Be?q&*gzbn;p=-EG)M8uRC3M1Nhj{sA%jDfauFxumU~mFQ z$hsg7KT|>ZW&1`@h7%R75UVa2J&ek^C_#|9xGIh0~^S(+N!hkYp z@h0;ALkHv3?oU+ax6Z*~- zvNOZSu;ad$4oJxN*k*|tca}qF-`S(S3H1<|^!4oh;{%Qi!BD6lB?7UJ2 z$3b`3XRdrGgnw4zJQ{UCFb1vtk7*I=R6+z4?s$@oQLJn*|IueM6eKRL^r-&fP#jMe zyKG=4G1?iU$|uuB-k$*Kc;CgMdVAfWYyWyg)kQ(+Q$aME@d`)0@UI@Y9o}O}_i)H7 zv4zW_Igz z@6LW8`LW^wLs<8}99!fc!W3g)oqJR`To}tFzRkD>t_NnKK}FDXFFn%wE*G{}_2cjU z0G8hUaSJ;P#d6?P;9Y%Y===MOpHo+GTY2IMhTs7I6v{_>C!Atp^tR0smor0Ld;Hb= zEH9(ISUWpe`UCwDptCB;Gbd`;j;*&`F}j5mlxLhpp1o+yz0rmZ7mZDHU$D{DtZQ*0(n(Sc zFq?w#(jA!F>WYTM7`9sGOr16fDLw^WhvS*hcN$4*7r;y*1*3#t066|zg854%(eWf6 zcJ*mBX|cs-`?ZEl(DeBR`>emH#{&rB?ns;g7ON-U-p*N{+TXUlP%_bYy*x62rXX9 ztS+cAtP!l?Daff2N%A$IkE8G=aw7BxXO=O^ggVc{|6U9obnR52ioIst&_bT*xDo`f zs$&HK-b8`5(_OP`(K?tKHnPCdb^}&{iKI*B+NYQO{1meEO;iY6P3LYPe9i!Sws$i> zgRT@z_IcS+@=690 z!YP&aD78ouW)DMF`nTO)OS~0S@SLnx?K>HulXYjtMpm%$^1dT7hVKnHI2pACh{|8( zK6K$*LF!WyoU?yX#QvFY$v-;QhL*mTVVjMi<9D*S?z3|{MVPm-B4qjCX;RR}HY$dwoti56gZpoL|!*48s zB+mjY5e`aKKA3L-tmV7*`5#~2Ev7TDt*?wV5-t&-y*&WYbjfOWbs_hJ=I`X`*ZdE1 zcw+k9n9Bj;ni{8*dfb~UqAL)?|4J;h4>E#i$!2%w$L<6Vlzk<;81HN%pM+DJy#SsK52;fG@ zF0S4Ryy$>xLZs74WOwGTGa4j0%NWU?gf%w4$na`|J`>X?leHmYtYR6BlNF%wqUY|# zGYwaL6|LME{NN|#7%pC}L4yr%H10+5YP}EjAwq+` z`I7>wKq~+^{-^c@+`W%9NTQ`z7LVsX*nqXSnNSQ_R5duF#OhiDxFM{5U@Tz)uW7d2 z!&nw^P|3PJnp4=ox$yV3$PM>MRqMsrGDwF#Ae_oxu{4&d=p~9Y>l@SWm!V@<&5t<^ zRwA&8RxryA9a%4X%s^lr-}4`7Mws%drUPm!L{O?Ap2Ci5u4*XKnt&GqH%%=Z{U^pbb2RN*bz@73v zSf)-@10iUW!?w}UScV@(=i!@dK#%3_9C@_o3SgzG04q2XmmnkBmK z^4p96NtnUJ^$1h-K1`*1{SD)LH?lp0>Nf+K)e()I%?Zw6Vxv$+6|I1dJPKN3>@+TP z`#apz-fDwhMdmh-zkJkW^Om9o|DdLUL39J-(%2QOic%cr!_17c?Jp{fMEpYGza4<2 zb!M7zTs$~N3|SMtN4e&|l&@}73fdprq6h7Y74KM=4f6S;c$h_0xAzk(vsirvw_fXv z)=+GI)sk->%Wi3ox03N+c2Irrv@^>4+5b8gd9E}IDw`B2mhRoof8UN)NUd|K!kyKRKparuQOI=f zRphv356eIDRNl<~SMoTM$=;#C-Vqw#RQRpDTZlPi<)aD$0zyT8v{WD{SOPh+j6n3I zAw|EPg?{9V@^{X>SsNJ?9R^%!tkgP0XNvKwiK19h?kA8rgp8~F9jjG*jufzJ!NPxT z%^#TqGdMCt2lGjCsHzoJrn+y17xOi~dtTz3U18o~;7E^)uYrgazKlVQ5Mw@U9(Qc; zpkSi*Z<#!_&I`3ydz4a*+L-adR)D_MsahfsxUisQkSIXl%7ol~D^q%U<-6P*24sFR ztY3S9**b$x-NGV}8C$$20OI+$4OO;cs4tHLLQDF(dm~@c0U6o2-4;LRm0&DqG*;lT zmHC2|RjG$LuOr65&T~}F(MJmsgXhx@CVocX7u*m;{gx67kir|4`K9t8?#!*tz?xDz zj_s{?fZzrsFbLag2?u)W5tp=cjoHuMfi~>K-7S zFiV$ZTexi7?6U2uF56a@yKEa>w!3Vr%eHOXwq19wz0ba9uYJz_zMu1XX1;S~WW13X zkz^}uYw*%?f&n^_t)XlL zV6x`9jSG3W*uBr0{4+g3f3jK~POprr*AEM~(>|IEj=4>M7oaH= zZqr~1QQ*~MmO2(nxUO&+c#^EDvLE@qxL9Nkf7f7J_#ogGGzg@gtEoase9^@_p(iH% zmHY*UW$Vhxn*=+FejhX+uz$4w(*gUpbVJfPa-JixrgnePX{(khi0gln1d^22vt)qJr=mH-b`Q zD}owdJ#b0Ku#sc~vtl=tog|FXGWYZlOia!R2fT;dDi~549#h;o#i+owA}kMCpm>B< zpURHE-{rM5v}U)Z2q&!2viNAKNV(Gs(UmLy>C+8s$NL>KjAvpfP3}0`Lk?dtB!j^C zi*MK~*)Xwh9J-!;ty54sGf2ZKwobjY44*-H(0x1H*U?dCP-&*+>O=zJ)z}zMR6FaL ztd~{NLel_~@%ZLO0;z%jh>)+`H$pg_r@7&psRm#0C=>rkmBE}hZgZ?GvHLi5m^8Qj z)6$ENelmfP5eJ_OcPtV)Bt?VN9jx`-<$gb|;U_bP#3_$YDGs<~!vo@%`6TglGGbUt z+HCZKv8m^~%)^^=7z`sg#;P!UY}_PiLsJ`bMSS4GsAd2_Yuo)Z(6EExcA7IfR3MLi z?}DJkbV_6Puns>10f&rB$$O2u(+9_x_+pQPzs*GUkXiB^o{UnfadSn&-812jO}Q5x zWjYc`ew1i0600UgPYe9mJ8f+g&6an&?tdLzVTd#0nF%m43-W08(0=u1F)X6yI20D9 z6IWN+=+UY!Ek%oW6lZ%Rb>3i8l!{k0nC+NWIFyiKzPM=zzCGo2$_2yD$Xda<))dgv zBMqy05zRQO5s{(h!aMLnr5ulLgWG?$9t$6JpPe-ooOPyxa<$s?j9hjRV`YkyaXx0qjxlrKa6O zDnGyfNfC3bJM~+^^l`Q84$ky7dpPbJ<2LATL{hvWy`}uK$XmD$o>^oDUoC|er4ej} z**PGXq8lB7krMJACPY#Vy*7zD&Lcsdd-mxKrS-*LIEF7q;*>-%%@gK`9~iBWBx$7iKMs zslQ3Bu0lUUnV%Lw@ea^de^mkvLM?d94eWK#H{Wqr*BU!{3D^+KSElNU-l|t^6QhfrAI5hEwtG9%;VAipWk1V%3gz=-nXHfm92F z&@TbnvMU_&411JG=v>UN>7gMYd~g%}yge$ZGTr_o`kU~%<4%=Nb;OVf9aDy!!l~&E zus;XY8u>fXt-%CXfS-W&=}(4yu3B8w%_lsU?x+Q@IZlWDTO}z zfm1d6oqHUEeGr$>|9~y$;>_+fbz(EbeJ#19==ETW2>kK=7LV?o6uYs>i`sJ7(E&3yeJ6Yf| zP#?#cd4o~#Fo6iA;x}=z3ymN*y{9}+^HUJ&LN~)v79-6p6sxvc|K0_>pyD4b17oVX zUq?pgk-yO;HCqSSCDPD_D$5}!mjhWSlyO9FD02XEFoOY$qqY?MrljeP+^wRbX6a{m zS<~=>oUUf3X|ipT=pDKhsi|<%KaHUs_GfXG@5<~|9>3QaJ#?}YV z2#*J8ytDnANp{u?o<{D#b<#mh7DuXNh?)|B*0tU8;n+|pk}R}DQnm|Iuq)n&Xgds& zzICHjby?oDbolH>EJpqfwyZEyC9rjqdOEK=)3e9#>h$ogXz}EEh`YkdwAD`vvGOik zu3kZSt$NtDr+ngmz~Ep#tV{A(y0XVts07C2TY_78_F>5i_4C`#%{b(snAAOi-zzHj4rsaw@HbWKiEX3#hYICI znYFwVXy?j-WL_&e7qbF|DxYUv>hWR#h#4r=9-zHL;;TZp4idvcG zdm+K^Zv75QH{{jwo(|6KKn*M5sAa~yhF%l#p z%rFy}U8v#dU;!Tp7)60%v${>VL#WmL4Yi&m?F!6_rgk)4)0U(-z^O5BV}9(X+*(>v7K2qVAD?Fr#Fi&opSjz?G0qE`Ivs1Rs{R=$xp-Fg+*m!P3tLb-9xzUzHP1)cMkm5I-)c_IYoZ`X5v(l;V8uUGuiTqIV5b=tTNshf zJdqjo_UJirRFaXKX)!HgQr4led|K|pNOpBv){SToYooT`gW|_X#Q(tTe=k{=DdwLj zci^GBu1IB$kc)0M*q%$*j|M~pNp3BD&IMP2WkMQ3sFthYLAd2WM|7^V;&oxgSmsV#*j(??4T z-Ty2PaKOO{s_g>zPBYEUOvj?1W24Y=Lz(aquB!nt;|B@_^MX6VVKc+>IJX=n@DlQ!>U;N%3mTu_<8_l)FiP;+3(+~Aj>?h(cS1zxEThef zCNhw>l>=k{6au^8uk-!4j9Y5XM&JpuytQ=C7EtTdqA)$K26;4NiK{e8_%8lvhrK&_ zPvS(B2Vo6o(Pl%AuM)jk+vRTA>h|ls&}bZ<59>c;B)Ey^wQcqfP@#^sV1s=sIjD|{ zmHqI{muTp9(71e3B|6oqU|R%!lmY@%_~7zo%o0IgHl(mSLh&BBXb-l^mk)^mJ`T`U zF0Ohne*oh?kei-Nzx0 z;u%-$C$qEb4jVRB2Pyv)&GMz5M_}OFidHGL&GSUP+N3~1LEc!uL&LxFi@~mG34$@U zz9E`k+<2-T<^b{~*0OdOrwPAC2i3PJVWa!AS}sKL2|-&0lN4=nU@%5Y+hR{g4aWPB zZm>0rx-8C%Ynlhg#O8C1+xTL<5*E3ks%WV&S(_&=Pocg^-%BYUOIYU#0@m#dEgc{H z@B?~(|HQHNI7$#0mxY~jXnYf(JBwvi(y0fDsIGfU91RYh)r$)Av2uUUF~*HnZixVJ zWajAFUpnN>o8i~@3NB~z(slD>8cRQ&w+chAm8s#}Y`(Y56`-TEc+C)EC(#Sm*uQVo zOhiqCVVbEv3y4peq-;3_5AxI0B#|+}0szNTyd;8b&FCz}Ez-X~gO=`B_|PHOjZA)L z&B!(gCPUXRx*-Ggr+R_CYGWbD>`p-KEX_N7#z2v5cUaPQ05295Ax4zcMN?EOH{rx3S}>#gpYv&=WN|NUi0L5~GQmpV2NDCsrj2b|QpEfW6VKQ_P%yA;rs@k_&^%a-8Dabn>8wNdjX*bs;clK?`&Mc! zc!pB-GmIS)XcCNAF?!n>O{5U_frrFuR!n-_AEe&M&k9rXS}JAims6X_tC!Y==4&Lb zSd?OifQ6+214&-vw;Ru7|H3~=!@eL}2ys~;w}h%=0W>_sE;mReFQ&DQsgE6%$kpiT zt5t2c!his#u;yHdV$Ftw;Le<3>^^qzqgxPwFTDDi2J z)Ebck-euJe?fhmP0Z{!@T8*DUJC|DrAwdmduX@gA6{0Fe&^zp_BPYzl9SlPcFA2M) zz^xtB01Khvb^*t=x3Gww;|?6yR0c|Nov-$D#{$ZLw;8OiGrt5b0*~X?#P{vP!O0>i zsG+?NFVZAr$ZVE(q?tzUQktHcWCS};ykg-#qg^6zyGDs6H}aM-Q2E(gXEcQC@I_6< z*xX)$oofh9ce@e(RdDbTdV2S~XCuX>;0YNo$*%E@#7-4$wD3@3s^S27h|I5z?Xqhh z$*|o~4VTTZC<<#cnIL}x_^WQHMUdMjJZ!5WGddR`#AC`mX*Av#YpREnBLLh9q^dk) zYvyzq-)4BiirD$=gU)%&a5EZ=sB(bt^zk9__UO257kEg>b7F}ACxEU zGbdt@gW0z=R7YlG{jP9SN-k)dnWxey5%tbMrSmJ$lAx{@cz%J{4H%JfKija`FV2eu z;M$K=^`i$@(S0prmdA}e6Mlg;npyG7VV#RNC;YhmaVU1}j3US`13R(PimdP9O@g&} zn)LMsNgIq%Vl%$v*JmOy#x?8#V?TKoku%mRHv|bqK-5!L*wW>_W3y&#DY*gmGq7nGfk@ z&`L0tk|GHRi$O?;mvb4`u;ZMy&KrJW)tFgUFG7HlUtvJo##xh-S99)r@!8bkG0l|I z_hGGU)0I?`b675F4T8HzOZ?l5pF0)o5CIPz|g?UZ? zWH<#=gb9gKfWp~v3GuE{tfKSVx2ijlZmT>GC^g)ySCBZ9wU_2cD|+s( z3*9xfQqRkOSH=U=bL$n7CZdueKtA3{HL z`Ywa@s9u+#^V)}Coi)&d->{f2V1fExd+hH))81Cn<;dVnJRjKM-0^Mt@)zI0mc8Ac zX_ws7@y#~!IAo60`)7=w71+RTX@-smBDR;x%CloYr?}ChUxieE6INoZDGhq?$B z)p=8z0^D65UBX$DYgS#_5nBKaxdoUD?ve9ONae%~{ym|2V=gWcbPtV(uOs6z5aMT{ z#pP1yn$lc6Hs(J|gdiTdKe;m7U3PgLQYP~Z&-Y=YVzw1orZ(w$3c@HL|Ahs>kvhKb z;MgS3Z+LQE=%=Tkb`l8+zlL|{Pz+J?nU2EErt3l{CqMeEe7bE&k07H#EZtEjKs6BR zg|vSUw7bt^EuD5S(tMV%zmG4JWM*9Oh|E?pe;v}+4&X5x*<6z##IPFY6E^HH0)}h# z*_%l#+$*QHtEJYFuolV2SK;S(#g4c@-E*Z>l@;2u?k?A5%r+dmK*HFGPTmbrLzv+S z3|y!Ul*}_pp?lHM!zkq({ejyV*c=+2qCchd9a`CJ^uRSn1Go~yQ1w{)Iyp}zf8U{L zO`qq3c4&V7eIV+sL^>hCJYHmZSLE`L!Mr#5m5l@JM6!$+0V!7U1G`lUZC9wMs4Uw! ztp{8ts9vK+-k^(g{1h3k%Q?bJTD`%tC@qzQC=a5vtZ@g-;n(EZ&g%f8Bam`6juC>g zxKwoZ&NKnJvG8zl6xd0u=1Y|ljc6zBIr_q2tnLF5pizn9Q?%U|SOQ0A>1iDfQI-jXveg~3z6!%84WyKSwA-rZ*^i*>L-b=r~g+R?4Wjklo zlnha63z^I|G#z*u->OG$psYi+mLJBXOFSIg+ti~ zyUcHjQ|fT8qGYD_A7pmBt?sgvUCGOdE!pN1VVLW?9Q3C~ebN9;W;gz>+{QFEkt3h! zaReu&cuUk-Ya2SP`T=wPCGp-?HVyiZb8H}#4gz^i^)@&&>>me3`qOCqoSrS**hWb& z3V_byj-XH>UscCcQa)haoOWoYzDyhxB0%f5CPd?0r}q*IKep}i;PNC+VIvYn@bc|7 zdw=#6ZISV*iOq*TDizZ-N>O8-&L8dm^BSUkPq!QlM8Jqb*`^2}FPw*8Tv{K{xrlzS z)NV6oUkutKjtob8f$|I1xC`B&UNl0r?v8%xO2Pz@phZ1Nw2SO$=)10$o}LXWv)0Qd z_WB0hks3C5pu*UTK`fTAyQXnTVee=ik<)!4&Xs`mc3UF4*e?Qqjkw@VhHwp*=!hvE zr}Yz1l7*z1>5z_1jABzOIQO&}IFpK?^Gi>JSuE_}q+$jKjt`n&fj)TI2*7G>;h1X;*@@;pcgIa6t-0fHp?@--HlMtU}I(>iG z7L2o2z2RSv5s)y+Bm}R3IGDp*6W+b=Awu1rMUR@0#Hp23Ap-Oo8NGK z%#8dyhGRvRh#n>tD8|o$gAd)fR}MXT!63dR%twm^dSew_3tT{$klxaq7~cBa{;^D* zR9oH7mhd8b75(iWvp{K{uEi)s74}HG=j5U@>2LgHClj?+!ZU^foz_=Q(_cEKszqlY z`f8mjr6f>8QT#m2m&!UoXIs||%|<9N-s{y%h_Cj=gF?Iiubbp=XjxudSlF9>lR)pp z!F(oYLkTZYGDZs03b(64x?>+Qs0%RwMLuY4l26X&QY`jawgDy+Ui(&$PNe%%Oz261dX+8Djw@3R!C9s@4CQT8HwJ*w2RSBK-D8} zB%vgIueUSS38F2}Z8bx(8h%W_P0`B0?V@IgxgO$DklL_)>8}Oy_u@O-U_E@i$r|zx zIm%1i7fTdst+d>Ms|Pk#3!HvYWDmQjyRdAtkn5hclJ7UHHlHVem*0arI(PqMmm)7? z6*NM*+@t!TR(q;37T?9~POz>V7rW+x;i2sjOyqbB&+TlTdG|NQh||X|1=~GdE(QBjzcba+a{qBwpB$Q0;DW{DVhIE}l*0McyT%Af zAX9170Ls4TXxsEU;0SoRGuEug?$@>ugO2l6ELASBFX*-FQg|ULi9M7f^FI8?xS3&9Jyjag560|wf<1X1tQ*HO!l#-vgBVj%^lRm{oD;si`Aj|38W zGE}7mt$a8jl8U`XH*hV(suYd2+!fK;=gcP)a8kBFI~2ylmnS%>-##N3b?C9BwgPHL zSL$K6rxP-EPPM0v-+AndJ-KV^CYao$w@KvKtd^;~|LZF7CU_+vd6Futor^Ji?IiC$ zLZtr(N1b^%-KCoVzf^+6mUh*PMP`wP(4`j18vBN%fExc|@MLi@kYvIB@Ic^C1sb~_ zd)le0og28((bFfZ0_3|FR2s_dB0Zt#5CH>EyxfVBkZ6HxZdjT72?#^AwPvl1kIH1` z^V!Nedd}Nbln-4D3Z8dT7GaE=g2zSdQHl5unS>vhG;d`h55*qa?RFDj)TD?r(+o3ro(sJ5N}j^vB~2 zSqi+C?A5uyCTJ6hgZQ>6{KX9kOW8mgOMW*DxL4ReZsjqo4qY3s()o$ovK(EAn-kg- z6d)ZRw@y1WFhx~tPQq>qo)@AgwM4$LzFppFQ51s{@$#ZC7&9v0eX;LoUHkx|t;77a z?{zF$g3RW)ZF|DK4(x1T33G!ABY%*}bJS>!O-P?Z z1|b-p|30wm#IsDTd#rFWFzXmpwrsaZBfaRzuGxzj-1S-E(bF?EWZHLkI+B7^C?+v1 zh~~Dt^=-sut3bZh*)mKttaHHaXQ`2TU@EENL2>FHJBT2H5P7-k=j0Aa?xR!7a86eI z7-wCG7m5#^5ra0!VNlN(0|MGYOnV*81Ky9`kHxrX9qcB_fDa>SsQGMKQLq;5L%Zqa z8M~$2jMp1l*yYzaGK;>;u+^`uT7DXf=ToA}yC*-RIyB0syn|8cH~P{wehM~3 zwP*={xX8u?mGDrb;>&LG{yzFGa{3E;eL70+4SIW&|7*`v%!oMt_pVSc?JSe%5)UW^ z_b=)>#LWD&owb(rCq)X?@2TSe@DO2a6PU}->Y!h6hpzDgKzHfd4U4>W&cik_6X)%V z&t_?{gjtg-dtOn@c**VOduDV-5{r;_!Xp0eWmy7ozMpF8<+I`*KP_ZkNtgY+=_7?s$cu|$K)4TC$yv7kuV_{EyY`l@%`7-iOh%~t^ek4GTW+lq`H^ zE%mOV7^GvLRoRJcNRR?ERdwkDv}s z;H)juD=QWc95m(PGf?Wfh>-VrQpj>$G;1wqwyd+POl`ZUquEXh->#rG)BqwJx4D5> zgfwdop*)6KKlj*A`rn7JU$@j)iT5l&?jrE?V1$4Wx`5R-Z3Y zfw9g^2s?Rg4(hDF1;I4pP!|VUwxnSULY=m*8xcL1dm~|C#kLc`0WkQ5IaY^{zSq;D^(2a?$AYh) z^dqy%rE%qQHUd}*P3orn0W%DSs__z)2`^Y77}&sobab=&d*VqCs&h1~z3w6vtrMQz za&`Kn^^a)F@xmCDJ(@`CAf#d&w)<#kInI*w5p4h+EVfdSBOl7dTIW@||H|?!*3FYa zqAYN|+!(JB0pZKfw?zw=$8ZX<-bm6p(=BDn=4x^HvPjnfd=GH@f&M--~CW_mbWIA&+>aTEk)20(#P^*b}kxKYWiMB0h4R)t<; zD!trsEHI9wUUo1b;Wt!VbkVa@IodhXEgx*!@=TN_s$g1w0STb*A*T}Do~tY$JwYby zH7<$x9+sat^-$PFJDZp5>YAW;lD!@*{Ea9#s1?n48V3?-lg_D zv`J^S=`J=$O#32#b{8_y^O;BH9{~1vdHejNnRRYsy!>`;SJWpZD++e@x0kR=%DKcw zziF;a2ZMqF1<(!nDt8e-%*qC%9YC?QpBQJE*#H6p#+A=YeKH+rl18R663{o%_07kZ@{SNf28m ze?X-`JQK&t%6zRWDvo{`{R-*d8RskF5t-tHQ_*`X=nXLTvZ2NbUKr*ZBW?3S$*`C- zZI2fc5;9ckI4Tti(D=iR@H}eKr?N3;v|rwTjHi8$foHQyhx^CtRY()|vf!-S<;>=I zrBz{5wWqIQY{%vB*Cw3E9MD65$k?GG?>k&E|3sf+9XD-B`<9n`q|9A->iGCX|6n<@ zek?ybCIK|k{GVMA0rgw*DK!Z`Go-X!|M0+pM@O%GXRG#0FeOVgGf6hly0s?YO9|-|cF3Los#oD2Uc!GJS^t~U_0J#Vx;=11IdrPpfE66j_JS^UG`QxWO;;m?QE;<m9JYgnHTd3GR?*SN!sM3>pJBp6N{z3ggpA(kg!0tF!fm~gO+yQ!ticat zvw*SA7e&{5A9P6?G8dt$vY1?bbqs&l`)-&KS)lvI)am{L7RZ{s5S~5C@s!d2i-t6 zSPhzrr$!>JJb%R+?D8_y0J7B;S7Y@Wr>ncj$X=*9SiDqS-Esg{vI)DX6d(qxKjn;( zG|>Wf_CZ}Z%Vu@*9>NNMej+MQx?VC-W9_ZD|0iz&OBOE@BOv77sI>K%qtlhiD01>jQ;n>m+qRA6FLeZrw~3Li*i>eP?pZD&EVSM@ZBljBenRW z=+Aw*3FEU(BQc>3xR(@#>d@uY;JH$z&^`7&n>XXIta~S@)y@(JI-%-#uu9xC07yJX z38GrY?omGWRgm#)lv5&XV%?QsWW9LUY_Izl))RQnM*n?f&6Tqb3F2AzajH=2V0=~3 zQY|TKAbHyeM_%gT=Q#3hE>=%u^OZRpNik04P$}gy8#(~OMDwO4qQuOB9Z+`K{2#qg z_C?&3|Gd%Muze>?RNzF4?w-+cG6)Kn-xCDqQ|G6Rv1f%;d*{z!O;0Z%gaV? z+iiwjxVN6uGpXT|vky9(B+Ltp%Bjup(iNsmSspuw+))u^;x<5U z(SPskilzLUsWZoaI2e~nZU(@CKv4M;!C~l&v3fS?D?QSvmTm*1ahi=v4nT4@7`QGy z3p}FE68~5tSPzF&tQkD9SyV9iwfxvt10)LIoRKMb8{Yr?Rsso@8MZ*m0*_0O#H7*( zwp-+0+69Q`qZA7cXpTy41#GBr>R{nx?lH}GzcbI_LLGWkxkMKl?+fzLPG5xc<~BCr zAFjaA`vXx1&L{BI{R{Tzd!yv&ytMutF=fCd`d>R*sb{dgpSk})NH+i?HkE74ooT^q&f7Y30ldSY0h%}yrUOvk5wrVfB9x6 zg8}~>zJg=#e0bv?(2N~siF`UH1Z4?hiE8Px9W6;4`(v7vMAKAGv}v~vPH$4iiDM>; ztc_RT8wX#mx$a=o-!gCbk$tTnF*Z*a3cEzNtcp9kitwu+uH}6+Zd73Zi7_oUV}}nb zIV;8)5CnN$U%xX0;KKkuNB(6;Tv0h}hRj$wcRuOgCmWa0#6bT{P;dHG9RbQ3Ks<}x z;S##J;9_%}Y~Q@N;9eAVFit2tVp|&jCR!M+3Owr<)C1!=;<20@1}9+;%d!bBTd?;7 z{|reoYi(}N6(7HjmtzQ-pYchHfX`B~E+qqd*U2A5#;E#k_%>*5~BJft2lbv64lU53%NG zxRYMneXE+KVvpqRg2wO6xz~|tehhGZ2YS5fYEDU&5anOF8BHS~-msVer2Fm6~_8_K|2uZ{XimF3$Fpm*tnEMV$9@E&hnZ#jNRUi;Z=Mp{QiY+E1|EL2D-r2|q%zmQB6M?e*Hj<9@0Mw0 zFzy+T!kpO;(&R2a!B8ZD*EDvtx-|Ar4Ydx5#0eUxiV>_aBP%5>wGY*u2Ow1^?n@t! z=nb;CAM=rvz(Q|$X{;&Q_mZ@|%P!D^W$$k@`fdS}o>Ki@3+zDI6q>L(Ah-D{_dh6A zk2}AO^YlejBYV-#a)6z6o`zezjq%+1R~=zH113ECNg3v=w7KHp=3rF-#DyYw z*9IazjsWzCuH?DnPrln&C3!|e@tLK7wt_h+kVw08BocXz+C){YC}4D~3;O1q7ag6= z8Q3~CA8#=w*0Y-;1D9)@<_;b#`18(|<2M$!I!*jM3j^@VMw>JZqs9ZRlYGVF zYtv+RPpmHrhM_mV?5Ct>v1PzcUk{UOSl7X|^BxCh6_0u4U{ivGI)#8Gjg9rsi?)9` zM|+@d#e!zDOyA`!%<$lsue;em2gK46GvuJDj1?F+x4J=;Ej(0d2p^Yu5mo_K(6Ikh7Jvqf1g-y66N@J1}l{Aa1&x`Df~ zT=@>t)&h1Ey$RUp6oxy;^;dZ5x@)0D51N80Dvu*zo|MBx^)5vte~NbZPUBW%ozLsi z-Ij9LNqAWep5!QUB~56-P7YRjf?88G{-3XRu%iRn8&923(9no#K&1uoWg$a!Vb~=a zh)6EL;M+8x`fl+Ru1j=V_^so9lO9ggVt>6WaCj{(ysx4re?FHjM@L7)>2@R90hAp} zw1dALjlSPxQUOGEh-yGH3(D!*^kn*Aj4((sA3ZW^8Ey=hiN4VgEImA{f=BV<=k>){ z^qgzBZrVd%!RD+sl4y| z?J40D$?T8VF={Bl#X_>XkzTUfR)%$?(F`{!`E_UVop>W|Z^VBGrZFz-6omkX2=X)Hvt0QjSZN5T* zFcgEH4+*a3&wJZA+5mMgvR)VxPW}Ve_hQ8qTjR@%6=B&$1Xj=u9ty(Uu#gLeZ(Y&? zUin#nHw6oTuIgbO%0-aLEda`>RJqiu86!X!a5!$A~$tyyEsxk`41 z4=9L9wZK^Tr0)2iKepardZq+)xU3w%T!-KNN676&$q=}}S{y6&4eWg`+0_ogZ4xN1 zza{+CrnDI13KKl3*XPcUD!oqs`3K|_LO{F}yc+31?T-9Uwr_jdXn4597|ZUD$AJcX zVP-sM!>(iq+>knAZV5_%){0=(-bb=PQEp>0XGdG6pbW*=i>B|#tZ{QHs8N8@b=Gpi3dH8` zHT6e;zWpWE;I<#xJgPg(_VRFvh+ED2{_=9Jg{7OzQ5dya(4(P)=KC=r&k3sF z46+l~Uwx=-B1>k!MAq#0{Uqx*Yyu`#?~F47*5utA*5R{g(8Xxy&QIQud2DUZjIy4|)3Q zf|ho5mO~&lHzM^on?15pzB6Bb1ttRcbEp|Ke@`S~nr?Mf`Q8P1g{bxu_*dyoM#Tow zMiYnFQaI3m5vyg&vK=Rlu5soRgARwKTgpku2}YNYy-!T&S<(^;3c{0Kx;i zcb97AJaKu87W}#^-42O<#dR?8Yh0nD$rgGF0|Vb)eTKC;em}-Rrtdg(IX=~az`D(q z^iNDFI8bFUxsZ*uL&*8_koNLQbsV`j1%-fwZUTE>rwKK3NT=7diyY04!4##+JeYX6 zSyfb5a{D^e2{q{S017ms8xIIH-{i6L%>p+nEIC~?&Xtvwm#R$1x$xO~`(;=vX?-@? zfdL`v@6*m-X>vyHE*Jk(K3qLdHxz5p^vQ7-3(?tkosPyILvkNrccB&4p2^r zj&NKM$*eWsdV9%nZN$hInFShUbqc1bgJzJHJg@u}Qh72uVaJym=t#G56c4`4Il*hn z!h^~MmQ>UchLPzC`h(lfKN`twU1Y1IOvZV&t?8cz?`!D z-c3uaMB8b+-Wg7FQJVzdd}-$n{XLjQW@J$}qw$eLA?+smM;1Kw{*u4Dy0f3ljA?Q7 zBBYqgYwrpaRE(T@#POsd(ta^rOk~0 znKl~-g^?f4l|?{p``_&IuTg(Z z1yEL2P~an;MSpnW<>meVb9~?ok*nOrL_hi1G3Tsv>%Vf9zdPhV9$k-@yHMEI`7XG` zy+PLfw9&kGnE@cF1>>pxKfW)ed(OoQL<0OLCm;Mny{_&ycMcxf_8|~*);tGrUw zz=OCD=Av?SOVN?kosC&|e0cH1VTT&OkUhtZO(S_ApL6^D{aqilPMkA__FOF*a-?G`y>@6QQL+V7Svax) z&TMY(KQ)1nbkmZCHZTaQa%3Ph7`KWq^dm%c6djfJ_66?o7h08VortvdIYDvlFW-Tn zPL^7%`lah3NgL^_vXZKs|naKsgOr^7~J z2y~!A{2NyDSi-nZf-k;GUXReu+FWOy6gwwE_-1TM2i+8fgOFl(3#6;WuVudJI5E9Q zwZyYaD^^u2;s=$6B>$iO`HB981og zw#1vw0$U1L{14?TY+Y2kgWlE%AhGa$8$wgGi`XE=lN#Tbx~NOKFiAKHMb@>GrkG`V z3C^l7j7bQkSsav|8$)v(Y(LV>k$UCP?P%Dg_ZmTrPD&>6PD&OXCc&^#xAa`k+&c@^ z-`|ydPVCWUd!2DW31scj%-b?lZ?!^L;~WiM@O^`E;t``AUiu+X60MPglEc%X?Uxn* zU@HBf$-^@bQQsaq@savuKC9<4e%OAgq?6(B^;xTSD2HLQu8D=X+nj{#mq-(uFk!%7 zM)aQO#)%YZ>&+=IU-yshoMjz1STylC4C*kvBAiN3wo*q0jbcKd`Hik2Uv;s* znY9g!+`nP($%4t38$=I<17=Hs+)X>Q0=(yxB@_&6xF-Xk#A(ihG0> zsZhkYd;-ZJ|NG6OdjQc;{wy19RgUE&ndvaThX<;N-QxPqNQxiUsp`>s{`V$byzd!p zzrW|^w-4n)Vp5_w^*bCNl~Quh40_(xdY7hXYg2ebk2=%6V!(?KnQje=f@pL*Fa$1` zX{M>Wiq%C$rwbVJr__8F{vqkoTGEt8`b!-}-|uUA!zU zS|Vv=08vmWBHz7#w@n;fgM=B z_szkJAXKq2DMlh?^{(aq@H}D4HC=&F|p_n zS|V*FepMS=&OBoK(DuKK@=yCvs74}aLz(bk#CK655G(=A=GUi2JQ!9S*Ws~ z5bNmK-f8TLsV2+e(iI*ui(c|^X|JLXvDVi0X1ZzZ6o^iWlLII5) zV!G)^VdrVkba-y6V1gIl417fbsX~1z*SzTPaHqW3qGa?ZXBKR@+@9uHNRGSrLPa%i zjjVQ}Ewx(v-F#5s_zj4|17NLZh6I~TVsKsaOkz57w10Tae>soTT*e55j%##86h-x* z5EW=A-^J=`;2s98A!Bk<|0bO5`!1^!rBHy1cAg0vIxy57sDoWpg9Py%h=+oD={PAU z(L3}yX-HMAlJrFpy~-1eH9h%y<<5qLl;Z_jU+bY_HYu5yfDJG(E%w(!t`3>xWv2-u z?PkOmA1d)sVD@BX)WsC9^3Y?j@xDJDxS5Lg4lPs>9CHuk%Vz0w&>tFRIy&bV@48{O zI`KPJ$8U5tnUDkcAt4+*yS-+F0yYf|AR3jxGul{g=3-q@;53`T>{> zp4bOFZn*S@($wV9zxGp*k0mzvq<*~X=DvRXLP)&2!o0$Rx~XqwvHi}v(=L7MWl!w< zrGOMWYkStw{qa-~@$Fk1K#=GEzGcLBzd;!5Y=v-!a+IO?K&LdTE?-_Cg#}|2k%{^` zZLpvaD?@)dteRs7vC{T0+HuAtqiFel{^B3o&8%hKJ8YwGlZkjnF@1T5mvg}C94Qw> zF+mB)CKyxpz2F}9S{K|qGvRY-hlAMqmgU?wibC+#C83=mH78p<{O%P=!;@-^_qmfQVU&> zw5__5mAZ_of+P4(xP*7_V|r!aiccEFZAaTKA8x0rDRwe=HN|M3>5CJL3d&P)abKw4 za^6eg&S=uHr8FPV6$!z24$TrKwV!`>1syH5C1OO?SuDd3VdONvuUA(!IsjYY3$ zAV9)9uy>BtU2zLb3yL1Kh@H%_ZQZzGaW=AB+YoLdvpo3G^i*fj@RJNU^kN29=EpcIjRZ4kfiP? zi{2h}zYQD8%aK6)`O9hPge4m{dMMRGHjDE|W3ERg`LAe@B*!Y|!SoXDOLb-lok*CG zEx(Og2=ImUnm@|Jne}N7g6RHyUo(2kO9V9Ne>hCuUr~44H zu$NL`0)P30Wu(9VlDp?uJ^bY4WQ2+b2uV^>(%iq#-@s2-w|Xx+V!zliGtF!$VZdSE z&H&2=QingdA7z%TP1VQTS!K~p{#TAC+fc`HU*bhZl9)7n>x>PUoU(r-Wcz(JKl}xf zcAkP^6IO{d*>*U297<#T3*??5{vW`AvhLt%;n);X=uwXE01rax`$kDU!t0d zxHt^{UagS(&UVa3LQG#+wx{e}PMVQ#o5M-Pm>ZX(asFxMc#f!hiu5bWEvP^p^*9)v zW4N-X(XB-V+)e%q-?-SXpu$1WJZ;XCTcx_r(}s2Bs$01-8)6c3V~>MWaq+H^Z!T2Rve>dYaw2OvJUJ;e70$0B zjTKspyD(7KlclZt5D~w#W0X4jj)WFZ_g}ezU%nApWzCu=^*4>?ae<#)8}adUgf{o| zlVp1%SL%}b9e)HJCOc>=CQIs4DEKZUXDM^qCCLxQ#ST&WQTP*85z$7IXUMN)*3wMJ zDp~`>7%%+yOINs_G2IGk7h~k}6Y~?POht9vGd+3#zDfI&Yru=N>&6+c7Y!WeVAE=m3++~rIGUmg}xuXmiw<@uosgvZz@6S2 zwNwUxS9DWBVxZJ)_6PVV3v=ZfMvpDBg$ya9_YaNn8mpQ+=z^FCY9 zIsZ3w1E_TieySQ6wB|BUC!|$Mp~e>}gq}!c$6GCXQ<~!4p5%Av+}o zEl0IuJ()IpmL`Td(i5_GPbC*1Braq`BK_|3TZmN`ECV7;{I6c6U1)n_y=kO}8eo}BGEkc#lUn&T| zVRL}mz39qdmnyboh2Bk1nE4XzLPg#0&jIs!xMf9}4b~2uJqpn#jl3RWiF~>LFe(t$ z@0xqNh{t9KxtK>c{j1Dc`X-7uH#Z+JvP?Zlf9ZZXtd+ySpgoW?LVvgj>;UcLbM;q% zgo$)}zmZU|0o-NbQ}4YcJyeu_sVZSWw*1;k1$P$9t_LXH!Z`&goLg<#! z$))35x*aq$@J%+bCB=NoKDS4WRt#C=+)lgldbYPgJw*#@PPBZtR+tnY zOE!kSxKXxbu4eJu_PwQ9y)MrnH#I9AOm%5J{DXt*<7qF+l z+qTfxnHdj^1UlbkCAj;oXMPT~Ey>UJn55HPLrCyT7scTm;s21|_NyQ5mwtIP30Jme zmh3UGvKttZafN?tQiHRIWl9GdCK+q)6#4S1BpL*5ioI~;+zUPUDalL)4i3>luH%qm zYv%p?PFri@>($0~m*D2IEz4tyjh|Xgp2yvW(xSMYWI_3%__G?rBlD#SFcQ^ud(H{MS>gE5E} zp&3UVQgc*}tvHFh)#uO?({;<9Iez~_Q16;F_iJ@Db_nR?U5v9 zKC1o?-XEw<-UtSH8yL1JS5qxc3>5`M>W9T(W;H3(*cakWfOPd~o&`(m`>>_zu4V*E`P zg!VJv4LfbC3KUTzHiFFFyzacBp9o{mnY(e&Wpif&UX22#o z#`psE(lTn}DX|{(HtDzD4L6_|#KDQEu68I3z${)-qr}0%VL&D6&Ld{({_pYX zpEo3hJCYzk3Btp}pQm*=y;6#XTwGC9XKKp$208`JSF&m|=z&}SOaGt<$?ek1l@`^wLFjY1#VZhQ5o-LL=~{TCtsCJ;r# z>aCMnkYLqw!T%+1y*t$I=Q^>aD4?vYC-kPcK6v;<2vZTLMn+;kZagbH>AexG>bp$Q znHiNVre%DOXuo`9=oGe3{cq6HS2WInf@W`F(Tf+7IA!X&d+V|IqdFlDwc4HqKQ@@$ zW2^!aN+he3Qz|8?$=~j8fBC#U^mw!ZXT+EM(~NG|<0!B5=Z1ulSrqtI^>*L&yuYa) zoC~Md{@cg`iZc4q{^-yhuqB0!JBjtM|C0LGeok}VhKmfyciD0He8y3clq9+Ex~S+? zEn7<;S3LKs;vz^VvMP=1W2C93G@}4AiP#Sp81IrHrRb^p-1)d}I4E^VnH|q9s9tia z)0XG^RFT^2e+WPg7<08akpE(PtyZUXzbs7ECyxfLl?}eRzoge;k=Itumx}9`h=%Xv zSjD$2m9@2z0$bZyfLqMUIyXGO$Q~Fk8NRK~IW@GX5G*Y-&srO@B9gkt?}D9H>Fosl z#*Ykxvvsq)>1tBw{^yhXzKMYdt0N?6EW||xjNEig%ro0w+(gccIHQaySO=ZCB)Vvw zDC`vb0<`p0Y5q_v7JhH61_>?~G)SA`EO_>t1l~@h4-XFmaR&}K2F4h^@K9d`O7fcd zXA(Ynnz?Xl({`fvyzFFXWKsQ!1ytJ8OAOd(;d`!^p2md)-=RcWY8#h?s(O8r}58?Rl(P(b1Pq9P6>H2fo`f}bBaEB^p|qN zcb^LsD#O?7`)c_|IWlXg-3WwWNUn*HM99G?dQja8wA<-T$m_9?c7_`NG_w@Ouj1sE zbwAQ}%dgBK4&rNGzTw}c!z+qy#NtKl84(6mx)$Lmn|Z?#t;^D{VG2hy0*$#wQCw^< z>{pJkHsbb`bJ?5V2EavOhN%(g?zNXtnV5HnhO-vz6&!r(ip5Ynkjq>lJZ@!!av~v( zMVnn_;YwVRt^dIS5R~8bax^S(y@S|LPuIP)gM+uwdv4ee)XuV}rpC6mf)86o2AU`z zWN#+1&DpLchP;r~oL~D_h$lT0Q^fq4^ zNxYR9*-&i2bpJ6w(x^+tyhd49`7c0k z3fnW&on_HezkLX){YG8PEOXL+S#gg2#QjRqrCdq$-KBUJs47=fMTKgll(FpPgz9+`4xX#yc+j5QfR!uKgX}H+fb8uBL zQEWb8q7Zq?&U{f2K3wW)T})dMV~Q1{DgTjagB1LO$=KdrMXE@Rqf8xP19KXssVQS> z{o{E)Kb&Z0y!%)*W%D9V<=0pAMzS(X(ZlBq<}bPTVHC=x!f+A}ZtE?}kkxIwCzB`J zk`Szm3!Po;a1Vj32!VtrVht6$>Y>>@fv4FB*#cY78jFS?8-Ni?94$_)S36=$PH<)K zwEzR@B889@_~Wu(rOZ=6+=K}g2m~Q(#x$?|^qk4mL&hJtWaKr&wVvwO0<&)}o1hrJ zvyz~8UiaRJ-?cJ9k)Nu_4`QVSALF|g-)jpSGdKvgORPekmnfc}r=^di?x)FX2Rk5y zbT}-26%1vN{1tDb-6rA7ZwbX>H$r@xACj7P$;oXu4*BP4Bgd(OHz?lFmDP4yW_Lq< zw=bG23G`eo7R}oe>|S7g?Mf4BTEs1P7aacJ{>z-9X!sc*Ay{ zc-$)q#;W~gEmd0ZY>beb`7562%z;XDczhEam?m4DvUy$u5rQ7CY8=N8C^X;lQR;q- zRY{_bMBs{grw7=N0Ie^wMy)|9V;GSb^m(umXt4+yK;1J;iEwO2;}2fduPC8=WtS@X@K86R9$QI;FzR?#7gTew9G5?X{ZlFI2CnOi>*)wr#UJ* zixsGr3}eb*jQfR%35hEmq?9$bQ=AF?S*Pnbi$*#II^uljEnrCP{zXbhIx@0?X9lrD zf=(}NYoKfr6X;vZml%Y1v0bn62|kDfNGaiyhP9qL3J0w)4iasRc{gd`o%YbXtmbQjSy!)Ay<_ry&u_J_yZ3$%T(iWrCMd$@=%OQ}VK=5^lGEU|3g~g!kn}=6slG`1+OttBcxD^kevs?}|v!1EGPPQ$RIvQSzTjRjsC3xeq0ktAo7Bg`T-xje1D-FwD>6-dX-F7sZ;>u z7(1I3vAFqQ$DUG{4otfOZ^6{cx2lX+zItt|ce8tkACByYtoc)$iZ0l){2j;38DbrO z1na9Vlx`43)!|4&UWjTsCUL#=>5pw693qA7nU!4^%l&C@k6T$;c^WRuiWph?=EIf> zExMXDfs>7HIh}Ekf&R)5uRf86i`=6Bn0dYH^W1m3y3+?5>(V zaAqf-lQWeF2Q|*rEdU0B#uy|fK#~Gl@PEe#VmUPSd}%WRI+5C3^w3Ldmal!kZXOz2 zeY}u$)Rc3HvABo?x0GYti%eC~lP_MS`aazBlH;(=e^H57$^f1|gKQqItJ|Z=I2Whg z5YuM1Ep$ax5NF|MZdduFZMR6Y^6f1&A(oEe(aWU~{v=GwEX>tvbey{6mCj9JBR0MI z;Q2D#dwv95vy$BLbq(j9{vp+-e0?G%b1_{P{xv?4HIt;$qxy!;B{${T3di(}6PWnU ztoK+Sty!T{Lm>uEuewe{1jS9(1lU4#Lb9l?=Gbv~2+%b?lnnAg?rzw^xXid0&<2FE zwZ8%`(Ne+UUZGUPias>nyn*2$KKGw`HGTura}IUXOT{Egw=QW(*-{R&nL)G9GGN}j zr)zi8JTvJX(JJ2ReV-;>CWeS}m&#-TwVKfsYZ)1^LZ?R$^lKg+9qmj_t+TMmQ;N0t zh_z+_e~65%GGTI^-#-i7+GBtcp{lvi;<^7H>Bw!F&({0gh(0$*f9bUWV~uJcgpQuz zQDNx8WtgOUcA1@>9mnkz8}x1mvhE=?2PbOGMr==3Ge$K8mbB9Tl}Lac)WH16!0qmR z>Wq-HdWdD^Rez^(Uz?R7W@#{dnmLl}mSk3If)PJPjrpQrrOX^>zG_gaF+ag!2DL+B zU(@P=CDx?8;aQi8nOz%4OI)08z5QS+I5qi@|2qD~UZbL6s#8J!*NL%dS*k?8SrSC= z5n3Fa98DX^b|IT)oz!DtDDzp^LPooRF=kfekrHu|igWjQ#mcu5-0JATDyjtLI7bke zr>E1M>+&J7>oI_I+z+oSW{#fRfLX{WO_C?h$*QuQY^#sy>fmD(qc93t#XTc?Uy(Dym!=I(E`q?p0VQmMbcxsVVGG|WV)QM@%%=6+P==hoj+K|pF(qyfv!$pZ|yxq=$MY~!GF z3}z)EzI}Cdb!&e92pdTOYlAvCB658ovt)jHm%z&xHZF4A@&t^07?nm23Y=<=H1K+! ze5G$8q0mT4T`LOm5olkftbZU!C}#c6uYrtxPMZ!{`dM{A^6i(eP(>*T*2a*U^iGRY zxDf-1E`7>ftz665eR-z$xJK1&wQq-e=@@*j>M5f!O+%hjo) zIKqc+EH`F%w~a9(dv8A-j;#BmGkmQ1Cb4>ZPEjtb8i%M0KQA@ZJG)UUR;@J2#^vNe)Ws`?1DzqbtB}ys z!o;O3L1BO_rz|3mL|*q+hzgr5!Yh`BVE<>D`=AVm0dYRJ%4(Q)saMePE`qZzN=XkZIic6}3;50lY)&EzXP>OjKQ7m3FIG_$#z- zfA1~=++pF8bxGu#1x!}B0sSW@7nSLexueJsbppixKGyP;jUn}eZ_*M?#jmifRf!lK zPB&CNE%#-sP$fH2*=gfN`rWWp@RduaF$`iy42%f7iw}*JTEKQ5?_cq_w3*vivO`wc za#z{k@6$%O89DO~%fD2oU%Ze3vGvN?;vX+SN6!_GX8izJtdZm13|~O%`(d}~H+Tn; z9HcBOwJGx|XLS^~YTZuBsA_H`Ub)T!%Ws zJyEkd3$}_7yAQZzO{X1JuQcc@^%hJ^Agh484A~iClhxSS*~!Roxw>bxO5-KI;>C}7 zGe1WR0p+T>q>n6&jEvhAlnq!oc8-pYxVU5-{Y@*9yk69drYH24fqL@1;s>~knuvVL zD@+;1o;-=goFB?1zxQr&XZwpn87at(pwuy>X}7rfon$&22CDLo$f=;-ZQS3@ZpEG~)#cad<=VIhp$uc)$Aknm1h=CuY0sQvt4SoXuy$w%2odebAC zh|*6{K5$^R*uS-^>IWBF`6>18X0PSRki0pr6N#afsGrnMDE)P37hBE;+~Y4P1%$g| z3ZGWa%*Xsp=7JF9OEy`Cmd4h~M&)Fv-gO8pnSA?VG6H9(uYQkVrUk&}3}`1;&RtEb z7FhKqo!Rv8bMrzAr_yw`+dX0E@OO?Y0u;yvc&pCQ@AU zPJCb^&NzUz{VQv!hA=_;j-&l;c<`bAR}4Xl{+8aBg?CC8*E4-2_+aW>%T5g%jIc3g zv}m}ni8zi`H6s~;6ucK=dybkiA}F6qteG4ZoHuYFFM@m=NL{0uQX$WaF9`_NkKcgz zu3fBX7DIFhaM(c+UGNrl1y2c!pf2C!&(@W(FTaUL+1GJJg@urH5{>F=XHAsVpctR6 zq#B@UDK5@g2qf$dCFkAafT5G3=a#@Sr|^FR&VXNOkpV`4_8WqMka9uMuqSb$EiUk9 z&^^EGmVb6Ha&p)<6hmG`$78%XP^Ws0(eTJ`FGG9#*R z-cx#HR>{))Ijp|dWCSV>sK9pG+wW15SCU@>h57{Tm4icva^E&#nbBgmRXPMj2c)C&*{?n0fc&2k|9D-qCc4 z*mtZg@M(^T;4}#Zm77S1h>BZYBg*eAwz5A4Q%8O}SLjH?4sA~$fveew4gS;-HMXAg zv$vlwQmo)A! zjJq~DYpgU6KQi~+=ZHWo0I`=1^d4@##}YNjznr8hQ|uiyg@M?9QJ=VsZ_+ZdnJiFK z(~JXMkZjsfK)xj`7C0hwsJ$$vbG?BTtCqJcEpch+H6=f{6&?M}%6iQZ`>ZbIR_qJ7 zzDpAHZ?!p~a+VJ$FDWlWARNfUi-^KzqoXD?J+s^X^Zxhn6SywCV(2h-BxzQ?pFI56 z@s3CsvR@3a!61m4xhGgSX-!;JEJ*e*okq*VTcHDPAr{+xmSGo!^uObQWw3zvXzw}g zOxoQ-f154{@(b|tyM+HvZ`@v`uD(RW5;v0(?2vJXL$s@c4{I`l^+C3n9`tRy1RwQ* z_X9^BiMKForpUMLdR&ANl2T1Spj1cPb=0(tt?!=UK;1{F4sVBV!c{BL+ds3VqCl{P zrfp1*(qZh897_^xXvvVMh!tsoa=lICmq{y9uE#CzLau1_YG~@KE7Mhn4YcQQyxrp6 zBn15HA{nUa4i3AbXihg%k2fj@n7Xq?e(>{M4X8)fkGJ0lO0-H7_1{nPg})ia8T0<6 z!zeoYg<;Oz-Xrk9LoLjvY3*bSUG)>RLwT0%cVl*q$5}GJh3~9){!$yVNTx=xmh5dQ zCzZ2;PS;yrLJP;5m6N&TWP%IbU*5#+)kmX!((T}_Qx2U~L?3+jn@{z9*f~Bv7E75V zimqj4ylkvoJ2dN_(=>?}8i+f9V?>=UXew zWRsjsJn*;}tBR5AVY;=ZEtewtqt{Xt2@cnjip*?O6wj02)PWNkJ*(hh(^^Vl3?FjA z?{HV|kVoFb+b+6QlaUs=gQA5>)j|JICN+~x`_es8d&6X%L)dv&apEaV@n~2&nbssv zc#-hjLFUE1s0%{?4OK$5Fw8sF=%uX0%}3~61?rThV0sfWDx}7-uH&knRjv?2j_F+i z<-m>N0t~R(A6~TdL{Wk(-R;M7VHfdP!EAMH=ADaRtzLYNN08xH4%{=sH1b=kK6H>W zIM=3l_di!6TQ%5LevF(cF^IQ>X|z6mpy^g3hcgjY(+?~NDX4D{XZV?t=FRctCIA{8 z-rOiRqA0#6!8EpgHtOt*$={COIGMI{q412RJVZT|b@Y`eBqYx_{1KRZVyZYT6Nl1o zw-i0}R=UTjpjp6GbV*j9y|kJ@9p)3xq&0#xhT>dX|tdne9q9E=I>IE;f3e^4#piTxNSi-Qti8Vcpk7>afhb)x;Ith*{bf;-h_@ znrxxZj={U^V_%pD?}~pRUoRhjO~#N0m#2_je5=-g1$Sa>EPgZiFq@m3n?(L2{;=#G z_iBKtrvBYdUZ};F# zW1G8Ls518Wrp;2PW!kEQk4%f!Cgxgn*oe5-gJU46(Y((*{3Dy#x$B74A30Le#fhzw z=*Zj;3a9oOD5($OxwtyB(?f6f+A{1#=X-*jNIh)U2G==A%tG`_!F!B#CF^jhRvaNq zwPKLjQh;J{b@%B{ccvx~T=8Ws`hss1_CxQIbE*GDSrCNpcNC0pNwi%W|kY(u&%wzu1ji!~DiZY=51X)P7^M!H9t zvp|&Q1D=9RCQMDu2}dn6>0aT4dpTMle_80e@-Buxy$Ap|i1kemFoc1qNqxW-G=ItF zDQhKwV_?M**QTN&48Kd%ZZo1LU++|Vx;im^*tq9!W?bvMBI=KoguMt(_|7ogvM@&O znQb?*W&%@?H?ek_e;!}doUx*t_(UP0{yWeFfKiQwFL$OjC9a&o)2T?L;=3?6c8W*V z$Yzf;hi`f3Zr0ZR9tr-vq);~?i-}&wHVE^ZQTq#b@$of^ce&snzUP~<15`^GmA3Dn zS4;i^T@e2I()gdhm&>g+H#axrkcJ)v3DjhR_4ii(&j9>m3(AMm(?UOh9qcJ*?8MegGiL?z zf{c8RF%jRf{qryXUFhj$43N5|nqJP(aW6*P0+1t~?+tnMp4*jw*y#8ABts_zqgm>C z?w3-KA{VEeOPKSl*5g%x${;PmunvBvb*v6f6^VlxFlnjzC||8 z9vP@kPzm5Rd@hV5QgX_pQBuW78Dg1#1Bd*Fso`4t8YOC2H>P~-kff}V#(D7{KiSz& zR5EnnU0QR~GcC6=0T8Le8QJIJWw(E7tYdF)Le13jg2nJ)*F)|?&IzUMUF|m;G;TJZXrE?-I=g%;^cj{UAKXZdWLrOzY#nPv*P;c$t9^3#}c%79=NK z!!dTDs;X)TMo$6YY>Qb1CbV`xQ@b)GlIhM&Kc}EfaQZNkQSfkt9M)SpoZvT6^T3sj zi}}ksYh}FO?7Q9k9lG=Utnq!)MoRU3s7zFaZN$M4+9_VtVfC#q>mUk)c=H0oU|aUi zE(h88a7E!LH?XC1&sAGjF=icXP)R4>4EH6!(e~Ef-sgrSt=9lu-mb|;uA}MTK-T!X znw!|#kok;!gwUEsW8Bugy-(ky_uj_~gkzI@^P!23t{cHIIs!j9I2aZOhaIiW!LjTq z%iSFq7ygXJj{`~2?6D%ta-0D;*r-+uC*+@xW}N%C_C8%V4?={w#ys8fG=BqsL8Qe<6UkOE|hU)vY37xO%pPVT<8(4QSJGt zzvNjWS77i9@=fAfzAv%&{U=I6bE3q{tCWI*E|xFgL_l61#;N#|;S1i0FP;!cSG!nJ#=!tE1Q6l|_5CunjXU_}XVnxo1OpT+RFTrBT z`!Q*BN8=jLp(X2_hO5UK-?UsB4C(lStec0dVEMeSJS}| ztmAK<>AvC?9>w8aO>`$-J>67p1HBS=p@(A=79c%HXqjd8uQC$f^`E*A@}ovf(6INS zjX~ByhF#sSaCfn|j-Bogde0jSfEKj+V5byWwGTb*OO@c;vt0w8E>?)O?(Eh!+;)H# zn6n0^YuSFd-hOt^M&neYZMlWoqj) zVZ1a16nf+@tLiR8j4)4w9IHagv6WXbz0P>BS2jL)u5bQgo+S{XPA}ZNk8=u4k_Wo zU49VAy94{|gDZ*+Nh(R)RViXredwAuiFod1iF{~z|5kv=GcvNH8Rq27{Jlu>sj@^N zBBs8}I888kjS}{Wq;ehFf$ko5g*Pk98~~gh$o;yv*TEzYwf^~7&DFKF!@5>1Ha0f< zxpcYag$w9S!G(OIUZYOUrf^qFFHhersQz+fB=W7C;4&T4*pkB!*?sP!hW;u!`6MWM zqMVaqT8bn}s*g7LfK%jEi5JGxBV`;_G}s76d#wNgzF$x&uV=ZYd+({e{G%+@j6a5r zinx5?B5R;89~D*zs|cIP691AioZZz8eDa8RZ{%dayy$B+>(|+24zKxIKR=LxzZjZ` z?;9*CE1I}%zu?xH&?X8AkGa4BGbPa zBY*M;;i^sJ=bspJO;r_0NsH?`##+uNfz^xuczW6ogR`I!>tfgariAbrN;jp#cn13t9S)->1Rp*@)wA?x^mEz)t ziZRm4_CBP>ST1F)#s?;N8)_y}+f^Si8y?_jAP+OlGlyzXNMAf?b z2;L4Qi9A73!&-4F7VlKzfX8|TeQ(92EElwnLGAtKElk+@zCKdZqA-+%6U)P_1x=%@ z_n}VnN?!)#&F~GBT>lz2yfTEjF{y)6#M?9r!yxNl!EQc$66X4pa{`k%t{31O}1;s|D?$D_rJE1#q^b%vEdJou__HOk?w-nm)IPM zZPHfaE4)HJN$}suMFnxhn^C@Y-0;YKRFER9%MlLA*c%M%8P-aB3pz6(Jq@VK&~S zVEH1@YzUNnHcT~L#1_ggIvZK;XoKqvQKtQY_FE@(XwEd=)7urOkUb+%gum0?GN&dc zgg2D}46jG}UQ~d94z-=w!Ge?@l0b;fYP@BKt`OMN)CV6a0+n|o52LY#1WV&VsglO7 zOEs+#aE)FGVrwGaME?EUb*UXAF>2R!a4zL5{jTr$whMat7%A%Mp#4mOa0M~B(zx;G z`SoaLfDjj}0aVfYmc&y_4!E40)fmo*bqmX^u2Eg&&Yq|4-?(_0?)2?MMO=acUgCC5 z4;<1Am;w)(JhF4sIUAx1l#LuyC;E1#vSR3fD=S%QR@tj}4~bkq(iix6&)_v+Mh4hX zd9G4KIr2iW(2w!&@Cl+m1}?(6z7u%zlD6{SbM2XG9f2q7RK#6x>|I%ZSJ!e3Cx|v{ zCVa1Jaa;HP_*kC(0$Y}o?Y8FN5?-p5^;DYDy&vaI!$jhaGN+#@;b2Fjpb5`{k5KdI zk6+FYAvX_W;TYxpd$Ic7*y`iD?CZ)Ora&*wYPcyeD4H+e7z0P-K1n_7~9R;|` zW>Srd1eRNMmd?6ZpZ!EF2Bh&`s={=z=Ha5it!ch~(Cp2l!RCHzzUbm~g5K#S?v`7T zEP4rCd--w8Ty0&8BEhC2(QZgUY!wrqgQJ0iLno)+WA{Yt!Y)9Hl%1-ffun)Vx^i3J z_m|iEDx;cCVCpAaYgFAs@zJ3+hcf25RF#7OX#Pw|tnV$KKXn@p4$bxX2k-?03D(grg~%e;RwH3R3%*xKJHDdKy40iorQkm&w@ zF8&{Hf9g6@RI6FV5sb0@&iuH8~ef}kMK?M6-*?Jv9O ziqMacDmJhfbOrOAj<+!BJ2UeEcC)44x`YU6X9q}|xV54{h!NW6E%@%a{|a>t$32v{ zrNV%H75X+w9Iym5X-O=$^j;f@0)!Cc?z++cy8^C>+7>+&!`~a=8-b>|Yj{UF4(+*c4383m(GZ_1C+R-Wk?G?q2?@Aq?Z|ScCmMR6I zNpZ&_+g1JZ&+Hx>fSJj#n$9Ozu?|Qx$-w^xbiSrRbyCQ|vo5H|0lEU)1R;Lslg_6k zs_Bl7j^&yfrt5QoHSb>s)Rs)<4?#fzcXvQlJ2$316CdS+;&W~VSiBB=R00QwLmFfT zZvblIcE7R+Hk>4DEZ|OkiHZHPY{@W{tttNs?f>33$2=ka;V$aTK=qxjH|W|Bn2hv? zyZ}JfAHVu+O0ii4exv?hlx-Obe+%_L`w3V0fdC6_qtX_OZ)>-)?X6|dE4`+80MD5Njr(&Ik{&+~Z?l@s$c?>!DQb*D{J{T#o-3{4!WkXHr$W6a z#xLG=40jLfTj4aY)U}V>+ZaOaKDd3&y|IetQ0=&gBEAcEPkt>;M@$@}wPfnDr2VG`kFv6j!i}Mt?8f%f=|Jzb93`q|6Zp z>A=!4Bx5#DoNPV(YZp4l00DKR;jNqhn+pSoM;UjzvgYXMV6Y_Gdd$PKMGJ-_J``at z?`_Y1yVlM*_T5pl*vv+Y-Wr;Uj`;P*7!@k7*+FDpA4us%KMHssA9!d7&_poW=NSH# zSK$3+QLsZOJQ;~X{Ncy6B21u zgTc!=w3Am|91neu&BhW66@jjPKx%~=29B|D59jwec5W$9=oJYII-axslWIB?Qm(J8 zP?|}ZLH#w66I~4NKQb38ysYovMBhs^r@y(_#4pi`qt1cXq&q zp}GNRRbgRa3=E7e2n&{z2daXoh|i+gfGuXCi~mj2ryDRbY!mvb6@`v7g$~I`Dn+kq zm{QjI8h!|U$&h7Ab!D7(M_&t$mQO{cMNPN*}&Pj;yaW= za`j%an4gE9Bws`8-y$A)c=w9{kEco4xCC!L0K*Q1Sc?&S4gK&gsSMh?c*)HKEFs9v zgxsEY1f6!dB0#CTFC@ zn-teMaj3vJ>L*Pbig*x{ksMdu6l{pQ&s0~lp!WkO>)W%2OcsKxE9Z(MpqM|w@lnbU zWp@jU5nXMj`@s~04nphtX888EY{HOv(i1VW){o`(>noZlZ<<=G3NHzQbN91{!SAo; zl9evBVs4cXjpFDBzZ)?hk0+=zXTELR{j4sJ`w1v1QY|W_>;@cJ^k#fK!vDZW>_y1d zoUelqquM@4iSvE`{kFnQ`pA&Ocb;*8FyYz1QjBLaz8Y~65fP#2*Xem$_j~e-vRR@? zXF_zHKVq=zT~(jMA;af(DO(=zD5Ho^rb4EIBog-CG!96foK$!zwHkmPUADguX{#SJ zmS}i1>8P^q$|6YodJVO*4H1KAIr&; zPsCWZ*4oq0sRnT@hbE>=D>wpOON5M$^OxU?1Ntl{XLp|K|7}rv`bI=Itg5yu>&a5I zYP+nPC~aSH>1yH}m@WH=K`E;KlGOV)?FFuYg&HGT#$>6wOR0_;vd-aHGN+#1IHw@x zFCCES(VQ@kg@FZ*XGYA|6iW{*vs0Y^@fys(yhbOd1ibpgbI>)m5E4yPsRlyQs0x_};u~Yl<_*&hvJmTIA{t!J!{-Li^*>;LDInr-- zYJpS=AtmiTA%qq!KVnME^Pp$tNA5V%fNx4LR{2Xq^_SKJi1U-U=M(Ik@XJa!c91f! zD1UVWpN8fp?X}u=BeF#OAtccFl|ym1s{Jik`OBpL`XW$okwG2Yeg4+Jc~qne#9DgH z-=624{tilgDYAiz3v{!YIi z`~X&?;imbEApbG!6 z!*jO%vyEn8HAOEGhW@bo{1*V(LR)CA*8jB_po8nzYU12sfA8!1&+8G?evyr$4GT{9 z58KcHR&#JViTH=z+wJ^{>;C_miR5^tY&D*qo+rmCHk<>;$o|yZ1CGIdfVBKi2H|h^ zlbryA|0@?4h0zdNViPvy4*jVC-v@YL@*Yh1gIY06WUJpQ?SG2{M;_s1F3|NL#420+ z;v{-Z^BS07_CH06zeNr>9qfM&)zKkq@Xlnh1bet84Er?HGXC`Y#Du@)O2CRRkKWJ* z_fBL080Hy@PJU00<*X4G6&1D3r?lMsZ};(!LZs;er9NOnJ zY+?@&kIbE!f_dkR{+7_i_gE{vw1xQ(GCq+(7>X`GB=WeXpnG}y>HEr` zX1wep5!#2?KdB!pJfJG9OOV<%e^}6MEudpVcGjQ&V47t3e?`LlI8n#kf6$d3#asiU z9fDt@=>EqV0MXdQ>q{y|0+JT$sZF$4cvo+{c$YY-=kYvHU?hAAU<+++dzf!EXaG9} zlrovF6>ydRba+M`Av9j8k&-GDgm?rE)DHtEV`g2$%1_OoBwh4!xIF)!J*DD%098J8n+wC#@j4=2l8nQ!fDgOwpj&=dY(66<#XTPowg#H0HMzSEEaAD;K3MErrW zV3`2F!t8|@^Zvw4B;Z3D`x(zaFjGV6mu+)_f9U)-yK-Bqfe&wyhNS*bp+~s+Wibm2 z=hf2xAO+`uqi?V7)BOJbZSw!UoD4Tkz3*3gzJIWTqyRPr7wkB_q7qfzo&VVD)9-eG zA^Hy6tS$3Qb|cdPP*H2xi+6tsP?jYSECl{&ipBdsfuiI;E3IvWh%qjtX`T6xXd~R} z=GutK$YkI1%ee_xVsf8#k~XzP>Q<-DRd!4i@O&nR@|+)ySqC#-Dj_Ty6-)I!2OmF`Q?4{ z*nH*~V~**(q{(e4w!^TVT=|a{U?VaH(G95>r@GQ=U{N9NL2;&tlPw_NTY%?NPA^NM zu%+-)J_LPJ;OD2e+QNFPc&R*()VJz;yAAax;t_@?d~LV!y%$^>lahWo-gLcQG9!(>7l&ffM9fWcBO%=*l(sQ<_<^N@s3a@RIOGC z@2v}Ok4XDC$xsT^j*&BFio}@WKgPfGYhAxQ(R$7G`=8&HjKn%@j|RQ-97G!12y zZmB`Nkz?Hgs>9lD!}(qO8RK?nANu+QX;>t7*}#Ea!J*B9rx-CbI|*J|Dh2|>LYO&9e{=8*$L z^V~8Hv}5XW88gIKACjwUIOg{z6fpn7%M`|J!3nNIw}qETU(~9*W6=-r#gr{vkWHj_ zh<<#(@f;U>#rrm{BTAFvl~1pO!48R!3Y8?t9)U;LY*f9v?Cw=tS!WDj0gM?koU*SQ z*O_SN4PRA}XYJFaW)<$z#W_UzBD|r|k`K9JLnI{X3aBh?ljTFwz3rk%ybC~=!B-xd z?GALxC_#KT+Qxz{rx4#1$I3Yk2a*QTcC;VCF2Q-CzgI^AT-e0s)|CDs>pyD+?#Vd% zVUbwaH&l=s7E(fYD|YoF___YdbR1kOQc0{$b^WyWKDT37U>Mzn_EmPLwl50m3y%BYvRM~kw7b3U5uE+{Nt?da!CXClE49G2p zjd#uNkMH9gg&TG%qdQKOyA)Em#)HLtu-F~mm12#~xBjz8w(Q8gH(dWbW_Y>}dFDmE zi)%CWHi!wk=SZ=`rI{nTwgJS=C^~F*p~J0D_9+@s5X-uf(EY{56Gg2w1qKPzDB`26 z`c)d=eNaI`Un6`-hOHHSt;DB$nim|58TkYmjn&oCC)dQ6qCysbV=ow=|CO-hfBpH# z=4z_WVw5*@mT!Q1G_=5WkAROoC%Ve4gS&cx!lg3ZWB2#5p;g0UYFu1>m+UMm+0KEv zgIRl66}8m>b4}K9g4n_%b?soiX(Y*`FV;KPM7j(9uA0~vF%80wAm+%?K+OFD$0AQo zXx1r;g04Sc*+gmIwecmr@0XueWQMShcoL4QqKNmL1ro1Z_$y&zhj*Kh5xs}Nz_}11 zay1qF6*QUKnx0=Z@ocF9W)Tk9$iXU~l%~~Xb2-qqg^rGhon|I(-t`HfMKQJCrzU%3SpPUPYk^cYXvAboC%3NQg0-p_#0HU)Lo6J5`B4)OaXq6JC{OP9ldd zdTy`+V2ik3W$8m+r6}Bhh?T+oBTmH2l$9^s(*xg0BQ|Qe!5u9R+`gB+S3$^s_wx@D zpouO^fk?3lI1F)OZi}EG+DKQXX?D0AF531FTQSMZp$Q@Lc_3bSKR@FBIZt*=3#)Zx zPCQ+B32E20VL2lp;qK|8?UNkIBtME^xBb1$MqYYm!kx$(tQL=-TNu%#sBKK`p_$zJ zOM{*%y1~w}pP)dbQn=*WWi@yqFTA( zwsC6~OpWW|V_9NmCnO?*Ht)OGQrbbRU^P0j81?+rD3s3($65EU}^fkl^n4Gtjoq>%{JB)onpdG()CEn$!9#H4066 zhE#_(1)Cn=29v*hxmmn6;=(D9H`aNVb^^4KeRxVdTqo_Ji|a~HJUe^jIYz#Ho~b13 zTvF60NP|eSayh})$@4Sn6%DBhN*}8Ew=0)J<`b^X-49D@-8$C%ixCuqap2js|ch5Ioy#*rQnEMOE8^7SigXx80F1t#exhH+MW(Y|Bo@ z({plua^pkE72hbel$=eDNfQ9D6S{r_@j`zAdW2uK{Pq_6XUj&Z?AN2$siS(d>^6jr z%@>UL0_?Nrmk7FF0fH=zH{)E9Z%Joc{oQ-t+AuIhFabOL>sbO99I+rO=Y4+T|Y;nVPR}iH21`9AC?D*g=%_B&N zNMWKbzH4mWiwv%wqN-i!xZpV}V?_Ar&^uqN_)*)UNK>wQg@~F=Tn4c~WbGRhf$NQ^ zuTT<6D-Gi7H<5%6zO}m51~B4%wn_QOZt~+1rU(#-T(5?|AKtd9_%uL848_Z;( zsX>eSEZ9Uc9UG3DC2=mi+X^`2O=qc~rmM#9Pf2+2d&^0Yp!U5P9u$J%5?QwFj)SXz zt`EOsZPj;2P*tqJvR_e8Yb^<~Ak>hilMun*{4#ibE^=^?in`LnL-8SLDOa}X(Rz3s z7?I3^^2Ko+oHXNln9+H;o3iVLxvXnzXecfm#GaXtTVDI6EWyF%d3ph(qcnuL5Z=SV z`HKCNIA2YJQ4(UUfrK@No$t$AHcFIA>pgw>hui|9Mz!?8&j^yq z!1)l-p-Avt7}E=s(hddCju7k$>j(%oBnMlnqr0o){hF@y7qVOu{;)I?SixkVJ&G~w zV00Ly9xK56vdtH`Trl~I6o97EPS}m(9_wn&XRLx|+0Ui7m@a1yM0;4v4_W-gNuhXM zH6CIa1Jlxkr8*Y!f-EDnD#dm1Yg5(lf&YO6v?#UFx4PcKBtCw8mBF6w4|sTgf_j^3WG(e21!SC3^!KaHI_uap0ME z1Xwa$p^#{&v|x|O2PTqT!N~o#_;VeX)-MC3^aQPNcjX{I6ptrAa1@tT(_h2=+b*cz zXqh{95fXB|p>8BySeJbcKkk2@*OaVAhxw&9P(bAE7G3w#HGXjRT|2VV%gCIsNBCtO zqg&6LT{!lFllG}8$|RTQNIZa`$W?!|DoMrdH-rt3h%}~o_^(|*CAwqXGVB;Eei>YH zVGh>S9pJ-sGP=-CZz#z`2+A#JS@(sPbw#P8Rof(c_-cXtc+BrcwX}B54n9mo;J^2o z6cwoCii7lb?6aBA1zlk2U!%+wHESPo-F0k2Jdy#G6*T@9G8y$n^#Nb-$*u}6g}Jc! z?(!Qf;1|Ra^!A-&xFC8yy9O>^R%rN2Sve7DhWU>2&qOeaj*PY9+IvfgH_;@>HS-2@ z*8d{nqlcv8dP98c$)ScW-sLagk|ruQt#;R8fAjSnOafkss3x80{cZd8Zw`n#EJ9ySt(VY%zDES^I z6;`@O{2GK*-c_jq{2_(}@z(}KobI`k;1$VeL&Q%_&1FGVeo2U{eS8UJ?|58EKg@+G z@XPLR#hY@jAer+~bkR#-ELdN_)O1%kkbXn1O*6ld6Xw$Rgg=f>MY57Y+Kbyz#_1zh zH^Ni5-1>*(xyo+z-@imjHmy#`AmcOIA+r?buV752fi$o$~BWMu%PH04M~ zLjxw8?{Db5G#)fvOMSi8{Cas+qE{S3QslFBn1?j(&WC|R92m&`Q#F|w;H=NTAIN^k zn&}v9k629X_^J}u-=dSVnTTDXQ2mxhuuK-W8xp3QHR~kYPFS$8@b$Ix&r-=4S0CJO z^KtDkO1S5p3cftWRoje(3Cc@u$7{wz(3r{wK~2aesfPTh=6<(Q;N%MYa))>ILDi81}@38Fke7vC_Jjd{2R!;u8`WK@uQ4lbtO^+!p#%b4gkd z{ib18nx%P(DqI@rQ`>W<07kiD7jDG(LLxj_JK>QfsNZ_={@q@LwSSRbC2-!CDcoCp zQ4LgT_4ATB$r+PFR0Eg9x0l*Igrz5Hs$u%$kxqn#FWeI%1@ZRL=AfL13LBOycTFM$ zFtbG)Rac-;zR9t4oHILs&ikW}gz*Dhq42P$6$#3w z^FNC?_dN^Rq}ly9AS3u%J}0g4Ix2keXV#d zn6pbd9D*GOF2?eR>s)eNC1Jcp@^3GYRg}2x$y_aVK(~&7`{1FDl4B001%yTrLP^3I z+ZUY2)qN$4`Hn6UJ!PM7ue@`7{?SK?yEszwI|?zNHjP)roHvi#a0eV&&TL$So< zdp1yzp*VTzO95x7=$_ znvGlrHE>ciaKX833u5-Dwn0w4m=fexD~xqna8XJPRVNJH5@p zdIHi+Lp!3a4vGV|cE2(d#fg&sD_v~bQTW#RXRRRQV#ZgASgo-GYmsLvetbWbQ6kJ?zk*Q3My0)#jcF}q9^!> z{IU0@p4WeaFOmt@72{J}#-qf)Q1s&pMbmzWV1JJ-epSpqRZ-l2)t;GN zpZ3_s)neUa<^#HbftyX@oXn~syiXL30@o7<)30gs!xem-pN7Ug9_z7cCwMTFh4Hg3 z9`14tJDr4Zy}U=kwgz5-;}LQhzIz|_gD%im6|}V4a^Jt!8SB*am;QFJJ5oJZXI-r# z-V5leXbDe*YHM}{%goH>DJt0ee2LT?eX-daU{`#)W{veQTh4^Afb7*0FfRWO1a`RzuukU%a8CL z2)CyO-x?bmbK#Lr!jeyBHX)?&Glwf$SewKa@rDlfm7LE5!(>Yffr5*V#XxH-bDpNR zxwGb8ozAS%i;kIyRI*#x0>21PLS0knUu()l^A<(Bs=t&e8AfrD`ektZlEP5=UOnKi z%FOwwGw=sM$UfPZhm6m#jVq_l;2}J21{Qq`QBxP7I)f%&xJ8R0;W>x-K9lO?aiqV$ zm8otvE@O;DcyHNWJ5G5UyOUi5)Fnb5$<{xZ-)V=LrqNL}?eaUz3ji&g=hxH-!6wD!nDQn24t!*=} z&*%+vm>IPO1sUN_YIVy}*d6t6kTHapE7%o6Rm; z&k<*??ijk{9=l4b*FVLddpK~xC%K%hKHDR#nC-NO@+-Gzr=Xk-IMebkZ0Ae2ECB>h4C;)mG|&ug3QyxL;E7b^3$ z>^8K-qT&2yhaH)$HX0t9Y0|yMA@t;%F8Hr-jj^kXTT<6pZijiqDHhQfbnz)GbX~rY zBFK-XUQW_DUsy+DQu~KG;nyD=edTDd!u9~gs0X$#4n{{0AtCwGd9f;}NBH~OLF7hj zeexbELTi{e3E~(Hc}{49A>v$j+=K}fn!diGCTUTW)7`kgW18W~U+<&0jk$pezo~in zg8t2=L@}twL!Yl0h!l+T_~9PYtuAF9R0Bn~>O71Hlh>Mz0NMVSu#!wNZ$;mVixzF0 zhC)B&bEOIYJKfvRB8wRTo>~$rSFOGBLaImA-#K1FbHf zB!rqJ)ly=shVvWYb^>q8348Z{kNJKnScWr~Lp}_N76*N_NvNG}epnH$_ z^oN$FY4106U?e*BKNzp7>bFtdDOe5N|H8NbutTSC8+177;nV--?f?GO|E!@wGC0HD z@k;NHGxR^hp+E-@TDRoK`2Ux~H~filtvE4^e=Ns;vxhG+Zs8yRQGWEW&Yxu^{|xff z?>kzJK=}W~?B#FkMTV39_ly34;^;t|kiF|T? zXiJDMP|tpllf=!QN0!edCys19Xda0q-_8}YJlnrkS9r^6k#3{>?itbyUL1q6x^lmu zlA=AdKEaF(gZ6#>8hjT8t^--}UQ9@r|6>$E>94S0L{P@o#|8=_PQ39=O0j832wUT>qr3?12 z=*?mJu)aX9ehji8Kc`fixhi(c210;x0V#ByMIp3;I7X&6IYh;9$a^V?QPxLOt64VC7DhZB|%Kp{L$ca>rNn?I=U}u#F zm;49{>cvG;lIYUIie}qjnOWq-B`1&EZDk+n%5V5ktR>6h5BxoVd)qUe^nsR#05DZk~T07}YdPUr*pz?@mnUhwWc)_u>*qE7AmrbDR9a}mSwfEq|9tDB-V zgXZeEX>TotVG6u$nmU1FU9Ac)!tm&AmmY55@jI6sxGQ&2?EgT2O*9jpXJ+~sT3ot8 zFil~3u05~pgz40!g!U-#ncHhGrdWhw;w-)#|7{mRzFJaMc z->@nwAO+u+%Z<10P~fo~HSrgldl|k2K?#e45Fy{QnD`{6nztz#frQRotW z4Y9oQ0FJMAXbNo28wB$0gb=;5} z5LI~lD*Dr@0ZBZI0xNx9U*{{BYWY9utOs|my5uQQrpDB;&(l>U&zHtKs3rs?%& zQ`Z1{$aREQRNL|KN3Od;cnf|D<+Pr!RvK_#-U1$}3!m%z3HZ3U_d7A7lq@a~Zd3B)sWkLyO!@nl=78nVr%0MK*cwa&a)eM= zC9%qswie-HPqUTxWNN#~V)*ygBqId*(_px~BPSbqjjg{5wCm~-C*a^S&#@D!`$Hh- z9y)3%t5?kUZ?=?|?-$D-@|uH~??A4Uh!ge*u4Y=z#<<>>iARpw%x2l$+mbBSeaCDy z$!$eM1#jA(G{m+WFA1(fx4dsL$*-r?J$VAP0eG5a<_w;xF1tuaB&D0F(o(z!G*fH4 zMZO+}DqhDbDM6OK3Twk){2(;(shwBfL}hldX&&>mTwpyFM!vuH-rZ4se}Q3-!c6CSx1<*8b@$a}y52$v zl|3$>B6P%gX*gBXqGqA17seMO;-JI)sv$vK&ixlk>Fp&W;ydC{8{B;40eKbuC~iwK zOYdeVfGN?M9bf$;V3D0AKN)&d?r{u6pO&f?G7j6LZO|~@mjk; zwM)ugyuSo+D6@O%BS5^zS&PNN0=}55+^C`w|aLS@`Sw- zRHcy)Kh_iHAj1N#x_stlC*)vF4d`b|Bm9f;MP1^=&aAv&?AR|!y(??YWPMWjOUSK- zfsqbf=D>s=IpW#HpHktN;@r@jCt=hFce#zOV5is<*o&7l44kr{K963$MV#?i$T!*fB%weWgVG3oL2&AS)j6Q8q}}4~rztA~5}5Aj_)8_#!tGX&zY)GZc;Pay{j$zPaigFN4>(I>UIee~OsI)l?}UMZ=m-yyq*q zlpKB6v7}`_YG=65uK~Ummr#bv6eP?1>B$0+g$8PLPqLU^LNLP5z8v@k2FWG;QryM&!gL;9=-N59*SJg>-BTRw2 z6yb#&_c76uRj8e zh)`iZP5y|D#2HPjX#~)619) z0`w((%4oEDFs5ajSP>Rh3-iwK-L$bs&;9)hM?PulgJHEibsDeV^$lAe1AZu@PnSHq z{@=;xxw*MtQova*)qs2Ic2wp29C@#YCko0LXm5IfS@cSt>_JH1Z<&mq%izbeKL%WZ zjl>~s_u|e70|Pfm^UlEmn!l6yBD#~2-L!oNt>WTsX9Bk&sRfHNs$=|ykz5V9 z+z8cuR_mq;@9W4~z@0F^w!X=;Vd|8aX8=Tc-o7P4aG)2bz2(Uj1UVbjU|99bk0B@@bOdiswRVAJVUD6ON6yxk4iTO!2}o#}i( zZM*OjQ;*K=HR7w=z7zAbkNgZ!h8+CY`;_G24c{R3{%*v|+;Rpv;g^LPjD{h5T_|#<~((S<-a>D8=>Se1XwTMLcGc_McMZ%gs;H0h?d|pXA<| z-{s-c!p5LR$yP3jag4}BZBZxjx#+(U%ni2^B`;N4)E z4pm>fpsE9H$zapO^b$E4y};Xa?RH|rYDyjE6!Y7h3c=)i#bjbZD1z0kv424{j#eyE zy~hVzL6V&6KnuccRgDYtDUUKp9w|zSm{@qa6%G4e0z#caHBxjmTQQCl>%u8es3LdC z_Ek?aAVi)!(#2{;9NM;=^2Sh1M2d8=68SwH$CQoN+Fk^L^CEj^F&yhJ|D0l%B*lx< z8V+}waQkHLHaXl+*RQmc#9ZcW$P(vheav^mhef=^ii3IX{e+Tx-1Md+%(p;1?rGeT zn4IFx>4oozUdEO~8ZBqUWjPzqsb<9AX^`tvtPC#-j{RNyttj9qJG04^?LuntrpDv{9g!Ab3{v zkU#ya5NDh!dl@&+UXM|Z+%3U8P`9}YD;x!E8F5_n>~0blx`$&y;kL`*kX6pJSV(w%-NnEo9x>AS1mun-|L^PYf% z4dyRd2a0wZ=j~y02D}v=L?wxE?5wBU9;x-|b0YTrR8Y0;-(t*Q|ob;S`V z&vXEego4kaJ{!rj`p{ODj7u$Di|JwWYB$Cg5Qde3-6o5)&9S z&r~@tQ1HXiCQ+S{Y1;1K8(SDaH#j=KiXwkl-IR*H=C%tmj&i29^sEm3V|t9+q%??qT5`(U7DB z@D^ExCt1>#w#n3HG#0r1k-*{nt}t01%tcGKd{;zs5R|PGwJ&9&D38 z&Q_1AuG`V-a&rELdgT3l&zHGkzFNq#nk4fEZm!KUl4*5hTdkE`9-UVYRAo2C4OC$PuxvRlFWE%Sc9%9@R8tZt$TYYZLJeRYgE(fUBPoU@zPL zgU!Iz<=B61)P%6G;nRq}B**8*q*sFZr(Ljo@NAVY=E$|es)$}PM77=~;(lq?oQ_DC z^x)r8lSG!poAtA;mHTCE&rzoSA^mHUYOAk6jv+7h~bWU zTQOvQqDA_hV)gPP#(KF08Y@&Fg{--D6mz$~L{Lr4tQin;vN#7z)bwXK!VnAf`7E03 zHN1&tlI`zT3b{td8+|k*^O*`sDOHNdGkNje6f>k(=5&Dadp^2VbMq2?q13uuDl8Uj zfX3!l<84sNqbnjxx`%V`)m_;PFAH^a(En&}k}5em`r7xBF14KcP?3YhTp`q_8AqvY z#oo!?)Y(L{Je$=jJ84mf!w`ig@Eg~e zNVm%RuRZ+tU+xv`Oor#Y&s4}&xS=M&YUt;>=lh<_+yaV?z(+Kr>|FAtqM(OH{hp2* z3_VyoJ->uyJ zIRm;h%GqnzjtOL!;c_%2P{*Av9e>clTJ};K_CR#IB%wv_u6q-`Bnff{3l%+xq#{Lc zD%*w-^6k%fYhWavL{s|v->93Krl2#DB$gQ_f28nGs-x@Q^yH^}deS>QqKvjD9e4+9 z6m9i3hUyDU(}ff6s5&{l`_#*z#g!-P5E7#kmD#YinG7`O%v=1g@k0EHJoAQu2>FhX zzX{&a+U0I(nJvrdf4*{xyC3Ds@^mFL@kg%upIj^QH#`>UZ+HI>4EMiz7`%G#cUjA& zUeh1>!+!udHFG%krUn@Dl=)-r|MO8H4vqx=|LT!7(PcWUM*lTveOaaXjv%|YHoVR? zZ<&zn8&+^}F^G^>uE(ks61O^N1Ak*i{Ay--Eq?_1YRPtQV-hRatM z6)>L##?{Fb9Fm2wxbNm)K6xp>TFSxMdK^G=E&s12D7 z!xr`n?x7*A}Cvvl@)K zEN4h?Kz!FGKgVc}y4t41Z+&(Gg%ET;RK${mSRpkh!=-@Rf%wDaf)Dce=UxOguP=VQ zCHRUEj=Hd0s!q-u;R>_IL0iVaJJ&kca-T1Mc%B;|iTFebRCiXK=S8&37uJR-- zLl>z~mI=!Yt1vMB=IumS06pZtk!?ax1UiEpyJg1Iuw^QkUmvs!efhCuU4+S~6sQ=e zm~os2yq3lFH7!pyvL=}TOIy2p*i%%cHM;_)Xs4aQ&8vE_zI8$mg_-e>;*}xM z4aDgn)@5QV&AvCG@KOoPU|=Ys1c<|g?%G5fmZ5NtE}A=MIbUzd&pHCtS-q5mkA#3+ zsYXT*J8kT9D?ZVgMV^og8Rj4yDEBTn| z&5#kJ(3Un{E?lmDg?)=5MP!-*f+%)u**3|QQTJdCE7VTvV2GNQq-@P+!I1T>jrC^x z`lHtMdhNXLPj=$x2@c^FD`%Vdbctcb)8{`LlE7u2Pwu%iIQ`k8s@#X94`KU>25-$$ za_ANnL|`w8(_%BOs*du$4RtZO_?Ta^-(;iq;Y)NAH2p%f(Kc+5Y^38CE{10Vn0j?z z{`XusRge2#ct3+`WtHzvFDY?pVa2Xdar?dkP&p=iTOD#V<1o)8NHA*Y9}^^BTLy3I zBrF_BCqskD5uFaZ3>^?fS3-N1UVm6ej<#@O^2i7LO40C*n#cQu1LNTVZLg+zE%5*kYe%}*LxCQ7(aibXFLmYd7v zF!-KhXwytm36lrY$R%OT0UMtQ*mO2L866C8OH!}D`CW0;wyNX7n{0fOQ@uK)Q^Ow+ zMs9$y?s)lDTL-CNJ{bAfef;ELv~V~P8dLN&yV>yXZvlvPg+F=XI@kFEpA2rP;-jMV z|DuApi1$!5leJ|8>cI$P&6NbW?C54PJk36p9 zkmj0`Pae|jdhaosMy{y7&oh+p#Ud0goD?VKi~%Mi5%Mp$uTE&TT|Mx(LdP)*nfg$w zC{VUUedgoCo~_t}4};3h$LKyAjq~yYZ&>mI@~0biA`DQ(?ye5(}`vHl9H+p_w@PGl~FV|+mE>=Eh1vgWPnc@Q`7=u zaXB_r7~9)Zmt2y_aVRIj$ilY=}hh=VO;j8dArz0Aw)GOwKB-6%zW+WHie{)XN~`ZpZ5L) zY3H(|l&$=K@zd64nT0t%r7^7BLX+hTUxbrk3(`@0n-}3u7 ziA?G`S9x8qHmNQLe85BgG0F7+qn%zFUn}6Ltu##et51O{9j#DXs^Q-gzR;O+T#b!A zlrNiFgaMHkcEXyo2V;YGtvfAsQfeF;MJ8txmBTmyJJ|4e> z#WgB?eVB};aVqWI1p|Ax^{@=o$WDmU?pNi*vQK{=DVU9`xsM6(HrN+=((F^aRv`Z~srif^m#+D@y#N@+LXh;Hy z>~zSM!x4!FH)FvR#nr)DP_Fxk~-N*p0{RX#tNfXLc@%f#3Ja|4Bv zuKT25V71vSt&fytof|fz*M!XM^_zNz;pckWFAaQHZ>KPUmPxT90q)IPqC3cFf7hYH zA@=`Qp@xZ9g&JXomsyeN*cR{2DINz5laxf~tqDT7=R9+&$(*13uF-GvWrKsOrk+zo zu6UE1T=c%4zRV#-_1faTtstyAA{Zc(uOp=bv|K{jLlas1(>gCgp=(AdEl z%H7z;w=Sl!-Qt$V=sgPS+UOtAzp2)H*`rQxelT7BWZ+tEe|*m(>fW6Yf)K8y25BB_ zuS~vLhGNHI7Rmry;?rT;_Z(qQmsNL89^E>c*4b!`5kx;~k-UsAZqWLJ3ZciCx!EFE z%7Iz1Dz-+sEfEShfp=wSRpE_fMYBVImX~kDrvfNUD3qh*c1G?IT?e! zg!WNd1R6_!CEQ_@>f_ie>Sn^56iyfeAe}g31lVZ)nc!RUWUIWc_(bc~TXTLyWe_R( zkSV(7ack7KL}_#z-$>v@+L{x0%ayyS=sKELIR(Q#hbo;Y*Ku6+6`HRqSlq@t2bF^R z9#_DxS7Q*Q@Q^b24kotDGY|SAfShG@?h4FXea~@nHRb^2rp5ur%E>h@N~7i^V^A7h z&5n(+F@c5c8(@^~PpL^LlQqKUucwGS6U<%Bw!Xb>zW5wF?qRyXW?1%q^J$pIE!z_1 zuI^AYOcR z-n*pHHVem!T$>o&=G)IU{&|x@mV~=J#Qo;rZDfRZ?wdRP>H;rS zGZzYuqirWYM@aPk)#&GSxhM&A(mR{76b9oNpGQA;^y!W^Z5PZZdrTV>f{+NvSGdhsv7< zyzG|6Vqs<<7g-39TYBuYt+?z~NsL(Hp!g`qOSXomKWTWh)YNLpk%wKNmp2C_By$gaQA`4UEjdK*?f>pW<{ftcBK58!nvNi zsnlqsUdA2|$39%k*`$HaoKx>uq!;AO7$JpwM6-F*Fv1;gQSe_QfNn4&1zn!h)O^A%|3gG67ZQA))QP@AA#3^``zOS2L zx6C(&C%!JF)Y148o$nCjlxAZ&@+A@)F(f($ZFnEcu(yoRuxbgXO{9vvgnVQ3EFEVGd4%<88{?vy5a{ zmOa%!8kqtJ_uCu_s)E4;hy+D9?b_Lgg{0}!BMdqG^>Yhk$*h~UdmptFA&`OFzz{i3 zhqX@zro79YEe%V3NN!!*P8{>0u5wGD?goDbeGk&@gc>k9Q=W;X%jq=xBmPA9kM)K7 zTnbOr_YRJCN|HS0vb$CeEv(HbT3j2Q8rZEO99_6PG34axFcM-;w10>Wf4>0Qd-CJnS!(2p4p$P1E<2=Out*i z;6goz{sDpDGAo4Tm(xU2!K6rW+y?pIj-~<5he|UuR#Vy13k>Wpa|Xb`DCfhTyQAv9 zMxiy!JD(;WOGC{0V8S(0hiW;pHsG9Eh@lN3uTb$;@ukH`xJpX2tK3i_Nw6}?c;Du$ zr?y&MR2@?CJ@a!`33bh~1A^4~L+M`lLTw1F7}`97+bhkjJ962SYl#)gC{F77bBO!43`gxfN%X<09|ww{^^4qJl~ zXMK{&R!@sUlfx(c<|t1FEWRY{z?t^sXf{jcohiOv!wM2ixg#9|Ywh}6t0D6`rqWlO z&?S;5?-yT*>i_nCkmrS){v&XmaUD@>RIQFcywRp6uZ8=g-Nlx?`lJ?R9=n*7vmB&!bUR}+e(>Z{@&oMXIJ@+;mcIc)j@Lbjh(57i>y|8gv$*0=>z|Jo zvKW$FY;uK1xD3!oXwqcRFtBd^e9`G4Ce+u;&PG;nj{hft4WGov-;-EFKKi-}=wYRS+qg;`ssm9vQ)M+ERb{Td!mRNMGc(jLVP z8Fq@r#nj5N`hodZf#vL;z>LH}17gal$DDwBKvk-imM>a3mJA~F5l=B-?@~`I>k5=B za-CmtJRn=xLBC8maAt679_Mx9#8~zB#a&Btc65zP{ReF2tL0yd3*EaP|B7s)Bj${A zbiFrcR!J1ho__w)%j6jrQl{#mFX!CB9=Omoa-zQuQRjC4Ojh#ZFse~%*$?}n_0K<}mZw%@66p0zpYgh02Bsi%u|>fxcV_3~~gm)8u@+@u`R zr;>ktJjQ=OU3^cqgm{7=9*3w%XkrkNut zL-`F5OjLSZAYOoG4va<^d?_#lG!65m_)kXk&v*P{(X6-|;NjPnyidn*R z?}Swp|K{ZdnB{Ap_#D`H!3-)~@SbZp;|NhGfKl@@(tef-r|v@ypQ(7|NU0@2>EY-| zaahx^rQ#Lhu*vSLqRg^wY(oZ$0xiL%LT#5DBo+hLWcy3;wKs|-eyBDcT3o*(?^|Q* zLZ%uKGULY#HeW_LkG$WB+z(2{`5^->nMinn!ANU*(@LJmoVcE|iFmz}2|29)7GFHQ zX{MU_IhlT>F})S)8 z9fHx^C?wTJdFwRg)ZRTXqwQig52Fiqy|-NLatYB@m;Xl#(B3pj)OV?MGh6h6hCV~y zf-_dtNL%z%;&5hUn--pxxnN(49OLOdmA4ARxnfOarA?lZhs7taILWX0A>5DO~EicL*`s{=-rG?P}9TV;blEch!H91_20J2==tF z18al$KS_jtONkFW;BY=dp_1p(AHnaRj|%0#$q@3_^MAqv|GwD-7{Uc`dm@l@j{n26 zh~DbA1i9P;?GHWmzeUe)alh&w9g_FmnY$sy!XHf^_=4@9=lvsZh8w=>U{D~+aGqR8 zF5a23sq-#?m;ws^50@Z%qfbqIP|iTbBMJw+P9~W?>a_Hcub~b*RQpA zpEwwG^?~Dfbo@4GnpHF~V+4ZVomR2lH8sY5XFQdbgjE zL>6Y`ZjR$RwK=>RQ2%gkc}=HR;LPxoIuY1^GH4dPVRmrNTgS$B>8H}y1+QpV8e+ci z9`?v*G1cOkj8r*p3TpU_IZWI?Oo#ofiS$ib)#j_A7q|~mvdd1$@ccMBAbEo&eTOb5 zcH~ymvmT^`oFbNj#DE95aY-$fYq;ZX0U|sdYX4w;_wMx%sBzAgI4%n2bnuZg*H?VN zi#hPuCV&;D1zF01_H~E(9~1RM0sp(KJCdljP?5xBpl!;zrH2H!tFecy75`GhveyH?yUr*qEBdzUSs067q^|pNfcD(dA^jU$TSpluOt|j8$h&tIdxQxS zQd7^@o_t_eFe$}Sy2{pjHtt2R*W>SYL-1BPVyjALkpTW1IQXQfp)r&3lnqGho1THX z9QuT>oXKBbA~`>TarC!H!`zfLKKqun_qG%4sLylaOstE(B>jKby6Uj1wx>-ug0vvr z(i}RayStR`Zb7;`q+6ts<{;hOAb7|_Nq0AV$9u2$`g@-5@4ffhYt5RO74y!##CvTK z?hAB#Tdq<~RNq31zclq1?U|efk<&|z@~_h()tOE$VFif|lbAl}OHK_Ej3&?P9(?#7 zGq-_m%y@d#2^Ob=y35-Hw-r_ ztC&rXP0zgI^70z@?71rltwoQ3h-xr^LREiNig%TFoK!Tv%WAq{Zr0ykSX5UxB1y82 z8ghSOtXnVsMI=0`A$VMFazfO0YJi4fwXHi!!FKj6dtc8ByT74=%LFlUEOwQ*$Tbs* zg0ZJy=V<6pIs-_}MV5N9&DLcb(iyw~Ib`r+fXHBMyRu4!ZzWNjp+n>eHscHGF6Xd- zd8N3eqA>^jpp^O~pLfK|QU0z2htDBJsB(C|F$pfT#yvc+Fl+40U|-iqGbc1t4cYPn8U;Tr6qbA z<^s+~Cj$F6{K4tL-6zize5DDI%z_II0zy?>-RVo*@}2olFF$K{d_ZMP!7^T z$KuO;9yD|LiSjXvX;4}RkC;C;1*z^3e}O|I^NJBDE$_SD#r4ilH9r5-vzo_*lrO1d z&8K8_pGC|lDaMaC*zbQHzuPrjK=3gQbLPYAmONQa#dLQM##tDMFG{+`!Xx(!7f&H= z`(RdbZ)puL>bIj*n_lGU?QgTa(_C~rXyGfrOSoCaNmx{_Z0rHF*cdgUv~Qx!EWkJt zwl>K38EdO?m2Q8}XjV}3o~(ikx$n>;DBgDz-ula$t=;QyuZ$0`C;$ zssq%7LxQhsGgo%MW~utp1_k3vOT&^7z5m99ZxbKt8^?}_+()>9hiKtjjW4nH72kG? z#t+ru2zSy?N)xYkD_)F#t&Ao++935~aHfE%B^Yr^Xopr0Z_J!l5r9dK~C#k%JtdBD&kVOA8*b zAhZ;M&R`OOmVk{!r-64sV0_`fyn$I^IyI(DuuVqxWAgJTMTj#k+>(-aW{{!(xLRK< z@rxJeHv9byLJ2gUq=zACT^1yM2X#5ioyIQb0!Y|kn%EvINU44X*!|gv4LW{(Tz&OP z?0Htl?Ydhi00_d3RfpR6?vKm3s-LOW&g&}m0!{hEkxdqJJa^E8C|H9TfN3PFQ35D3 znPCx=1aN%L3z!~SNCJ#_#z&_b36$rU9eY2)6?P@E<*F0mj)bwwd!>;W;!qY9t4Lz~ zgKEXDA{Y8%vel!I?4V+I7b#oIZj93yAYBYiRNE%&(cMSZ3vH~Tcl&d#Fo~)hcd+-D z_B0pVIhH~m0vEN6X5Ml0tp0@xobl-Obi)n?&~*u z9vjKW)au9GsPnZB?rmuetI#18%QRl*8U&c;2%FYUc&tuFCfTKbF3jv=k~sWZnODt;uwTH+so?Amr2a!6l4 zLOv>t5ZBSNR-kRJehT^wycZTynfj%6Q4YDixz|*ui0phaXo7aR4q(dIry4ZPWd7uv ziE8Y2*z30BdLZk(JkV{b$0z}{a%PV<41EIboc;i(w;$$RlA6oi?QK@C)A+p^i5&e& zJb<6P-^924D?Fi{o8vIoIo~(j?pXo@%R^MqMwr+7>4@RGsVht!v&4ad$d^v`Os$Q~ zN9a%y5%EwI5!ZQNM;;NTRzp002>!V}NsX2ot>+rY%|;H1bLD{8{RB zxF#Cf=Zk5913*4LPVRHV?71oH(}--;?|v;bbIp|fJ_W#*7- zC(WE>uyFK8>dlUCSZj}x?ckb*rVRyy_>3-?`QsqLFxw$k?0LHY4p;Ckz3u^XBQnXte3;~2j%~SG|Zj9)e8v+OM4UQwD3a_VO z-DXXf7Mmr?Eu=CZQ1!8FMtV-h>XK?Ca^wrhAYO>mUvcoNMWfze&#e19TDF*z-6 z&_y6YaU9pp+cF&?jl}iP56ydPk3&_R552}r#Rw}Q2;m;yJVx1n*r~u#9-0U$#~}74 zkbWqQCJ>Si!PQy~gN>hFo6f5*W{!YyTY~!;M-IlTVEsOfaRUZ1YSjA!i|~@x#Rah$ z?k7pPb6sn!@gGnMx@aS>ndv*&Kel(yhvT6_>ZgbCP{ID8PbZeqsu{yC%WgAjUIQ(4 zE)&|1x^qT|Q02HW2{hc>O6g+iKO)B?D{Vh(oVdb>2Kve_P(cVx*f+=%E_%+qyXer) zIzO;Q?z`__jG1bB+@BL&eUGA0U=Ls=QbCAA;I`0>xc$x~WYd-#kGF~=sGVS*mWDLz zmOh+4Z}gbxMZlo88jiDbTwuW^(=RIIsbprR6oUR#dW*)uh^mSHRAXX4*72gyPFFVX zEk|xO9>Vu{R}3{t55|{de$|r&o^~_lwHdGo5z>&elKB^^gbA~~CG$%P3aP{a~VArhN)WbQ_m8HI_ zy+c?2#=q!f1%jDvM9*7_J*S>oQ8tuLSGbY!=g{f}O&*#eb;}Xoq^H}#cnRx>aUK#I zRuCcBT|5I?&Qo!OA`0j*i<&%E4I8<4>2SXAIr+0BU-qGa>_&n)NVzlH~hn zePc50p92s8b@*HS?Dh>G<(fopEOLafr~*gRXxtYP8Q(jLnTO#JxfZWZm7%}OO?bBe zr@7ZtPy_uI>kma~(I(0&VDPDh1u=TKYPm6QUlu5Dm+5c-%+{qi1*~ZZGgKzlyBtkp zLBelbEGAI1j|iHU5e@m`2WkpA0A(|WhDf_?DtFb5m@i0Fcd&NLpuuAe+|&uxNevZC zL+BHogNjCK7_-td$!1G1%?Xnh-irm7_XqwZW(X1#_7Ow+q6D$yDlZ$fytbs4gor+u3wy|>t~xT zR*eO1s$v>{(>V6nvuX1_bG)iuom8{#x$$dRK?#2I+I+4%{E7a;c?73Tx(Odc6s(M; zja1IXj0bN77SLRfd(Z;)Ny|M!$5A=%d}?UP#O4bfCzfs0tFj&VBJ#6!+X_ti22%Io z4g<7Ss~JHYso-AoSazDL4Cfq!)gkM1v>b(h z4Imw4*lNjU!@GDRFiSnj+Pe0S%V(eIfMZwK|?>u$Ii|KGLUZVi%b* zxQBYvQkSToqiGbVw#X)AvQVU3NEKFos=0CX1@`hxGaMp#U7;AXB&dtyL10k_4=1-? zqYC4zIM_n_kB?7qxGn4np=$h~7XqeF!p%TU)$cADmv9j{_x-+SH6=rrSV=KNb+S~3Wq^5FnzVgMITYpAINtE-+k z^cc1?V`XO@ip>!F1k_;TI~eC6f8x#ik$l~{0sMGMb1KEjp z!g{SUtM$2F-!9(VYs55p=0`Fodi3cB+f4@ubrks)!s+USsYLp(V>=D*lPah4R4mo% z*`9$I$=<>B>Mym{wOs%OG4DxWmxBTLq>V98AD*;CoS9v370iw0z>|j`<%M{9_3Od{oeFe$I_MV4Qs z!aGt5#!L{1VWUAi2+rKP_xe+Elb+s*bYB@DGqTil0a)6yZS@X%JW3{?2Y#0bPc5d( z+Rh?;6D{>Tj98|;ZarjcOe|0skMhKVvZvsLssH-VQnOP2Z}^eB3tg2vS0;^2P#-!4 zm&VfaR1xM-D&oY{FhR9ywYt~K4MIxpb3a%B^I(C6C=my~%rccKzS2n!L0Ys;%P3W% zSdxwdsGcY}8MIUY-pgLZe2H_>Pq_wf9IY<%EL9wQx+V?wMzNj>V4T*g;o_5{lq$Ws zmrd`65));rJC84&rWvnwPuK+;9|nXBKqkHGDplaL7xRis8%#INkF$>0mwMynGCuft zFPQRPOg2mOAqyojFlf0vK|@7ZKNUv481+Lr`GI}=xgXtKpZaqn%H3RlZt|{DotWf}G)BMX&7?cEBsmBB~YlkwEZp<^lSezA#Gmo>t)5UN!Ac02>x5pl}Ygrf3bs_%DCaR z>GzRC?o_;B7rh2C{i7jaaUj5eoAbf2uzeuIU0GSMeSC9o&sl=N{jNZAifRsFB{CxT zqwiRVdn~A1%-ZgyXcORh>>$i|K5 z*+n_HBAPNSx>E|}c%gd$E{F1lh+Hcm9mcC1%4stKIwFES@(e}sPFQpEjxiRNBAapb z&SL6HC;8xXO4@N_Q$%?ks}_Sqb2`1aTe!GDa=d)`reNBA*kyG`&1>?~wj))&`6bdA zT%X|{$9m)2*iB`%-ta&eI1{owiLW;6M(GFi`(;OiVXH93#ewjTUuJ*Y7){ENI%1Q2 zB5-fxK7mAP>1LZC97v-<*3zDy;)29IObDcztju}Jv6y&hTRrkkq=xyO zjwH(~qH+u2=bUwI%3I~6Yz}6MLzbgQ;$4?v;Tc}lDJw{v@RMFQx0tkGTvZo!wz5LQ z%I`LCGHMYrXco7#0cQ-SI9p{2rD2B|r6F_P1aN4Zm^t4obr(*1qrXZqzt%q!q|0S_ zE@_i($w!tuPwVLwuQ_?IyI-41P7Y_?$(^$kWP+fn4AF%n2d0!ib%8b7=!?AK!1*wB zHdET0XlFRXujL&$4PlpN2~;!W9CozhHOn$%mRD)27+wGmbMBVLTNT`XU7ekd835Qa;;NoJ@d<^RDnfcX&5Yk-w5hcdm)=4 zQBNOi>pwDBF_MTlE~E5sWcAsjyEv0!qTBbAy^6x0Z~kf&jx=}wf_xrQY4jCk&J!8~ zv=~@2($z%(!CiE{n4u_}C=OsYP9H!m!zDHV!7MMXT*tdJu&;qz*-Rh9pht3Lf zxg0qJ5bJEide(E+B8g&ZD4^F24TlebpX`T{lK7hOtrLQmOQE1nkg#A~8YlHPSM=Dv zX*mQ4skD?F4!Pif?!W9-BQJMXTzJ7ZwSwHPhD~sd0ED1ON+%EC5<1*O)>^G+abgD% zvi&n7I&FoV+)IG-C}X~ad(v7I%Yac6RP6~TdC*!UhW;}uK2C)0Y7>%T+wd+wk0&}t zXeE24XGj2TB!kkJN5}B_Mp6cC(dFig{r>(ofr%|~ozAfOLV@E&^SDp3O4t784A&3N z@Yb~olTz<0z@J?_!%DDRP?p z03*DW8;-UDp^c8DP@k?O_$rQ=JT1r2PPkNM7xAGkj?6Ko`m<)=b*_G}`>KFK1QlYZ zU~qkFeC=9r-Y3UFjRNO-2hu)jPM8hj#wS};^VunRZobMukD?=RysK+k5UcDtV=X0dJD7P_g0nhbj%1xgA$l z&gN?Q+JY)8&yD)U`le#}7fX`Z`z|c`k(Sv^Yfy}k@s5=Eo?@A;p$UGZZA#1=iS~+! zs7&Qb^i5oZ;MUk+()GID-rnNGQY)ypCy1lcRs|Y~hRqxJhknM+HQWreBKL``y&gS^ zD<8J3N{)QF*^=!DHpo-TT!Q!C{CUjM22Ti+k`V*?=2q(HVBNEmb?++)FW9TDTb49P zqU<5o2jC2Mqt50NXeTR7`i%w9RxeE-!V-e++m%z%p!|p?p*>BYKY||B=$gHQ?wfM& z4?=#~^51nn3L=Zn17NlfRv;u7})~pTJ0qebGIPW&a=L#eu3S7gA zC4+PmQF7-sQ((+0yt?xT8B%!FS-rNyd?JSl;zB0)$WBp3tTNIh5>{6u5~FYsistEs zbm|rJ*)Z7g1x>8QWmVxWL_>a-^agzzp7b;^(Fl#4*vFc-+h@~{V07KR7McY_&e&Ib zFYl@P>xrsHht9lP&5Pl%j$=(AC}^p?tk{ylF-Om}h8hw=Yguu7`O-Zoe*e}*qfp-j zl0#}<@xzNm;BXpFFi?!uVl><2x#c96mr17u+UbpmiQ6cx=p&Ar8aHsSZDkN znmZ2{L@2ywxG@Bp7LMoZWOSj>VppbbQqVSd3Hl(Z=hG>lnC&$`pD~!406}c}7N~tp zxLk8!TBMmx)=)VQ5q&+=Qr5c!f3s4S^JAmuHVZ-;`D0YJ2$$VBDsa*Jn(^gAPfF2? z7d7@2Z<;EHUBT5N1|hNBm3&bp|tF8@Z=vEo!<;9 zMIm4WASCbi4?>)OFa@cpVUT1{i-#I}ng6BY`ODMfu|dEHp{2G}{~y^H;dp9&W7uw- z=pRYtzgvx#B1puT9WxYgs`%ef)89A+KZE*bi?6~&MsjZKhqtfAcMA=upRnDs$WBnQEzJNzhh7al62OpU(mx)sD}ljLF(WC7g~@SMM1SC z7BH}Hiway(iR$NSP>^#^-lCPjj@R5yC&gNg?}?g_J-{%kM@9q_$#8O?eb(}+Y5B_L zCOpGURDE>?^a(#m^*fL2rzLvDvHqz#T3#jT#Tg(Y$-q7e)XW=rRu zV!IOVBEETi58|*|xAd%430>+sX_G+~(KvE@TAyK|^;1PEutEYskLxN7Wd3}paE;}T zfPRJFL8Tj6Zpu91^2*=PV^dKZS=zKP#$&pQ%gF^t=b;NW@FANY>EaW{<%uan`jGBOTY`J#bM1$&irX?P(=`R=GoO+cKBVQ)6|NogI=;M|yPt1B8Y8S)RR_ zMFB5WugE{&e7-g9&1+IO_?Rza*5^|b@1m<_IsNjyEzPwi8f$S$ITuJiOS)Kzc}`4} zsf$mHTngnF5_&89!Pvu*w3EZTBVau0(aG3>IB3Aq#g;Jk5Y9>qXcvwTU%wpS5nFI# zL0kT5#|nx-sIPMI&>cs!gR>kP)NE9XcvbM6w^y7PG{y#({RiG35bQBLe82fK$roL za-GqSJNZ4Am9&^|K03o63(*5ACF`yITUxN(!TfptuL0kr^+#79YQ@;l*W~dABwa*b~(!hMw zjllqLfbn4_{RkC41Q&(!e`J> z^{$J=h48egUV@{H?P)M$rHy2wm8W2X(F3y{raw@z`U6#9LiOI4v&^uz*aUMKRuR+F zTuy`BTn5c&B|;tfDKQ|fIjjBkNQY}Flyftrnhs)EhR`2N2-$W5k^ofKPAMZX4qU++ zk+Gn{A_a2su6C6QnK-sqb|frn=_TC#TnNeN!l5&EXEq;fr-)<7gTBLvW&{D5leXj8 z!igVapGdY~#_;RF7vZkP7ZzH8MfMRh0NOFX&a5*wr&p17eEkMG!6CC}ih=cFN%sl3 zTxXln4CXw#rs76<${u6%W>agqv}P4*C>Yl^m7^%98+&%J?Xcb${E^E2pc|RZfjF^4 z1qE5mG8a1WrBL*+rJNWuwPMA{2WB17Vj7zK;h|SKCD5*?ghZ_sdHdfW(VXvyxm<@6 zW}2K(c;OM7BGYj#;RBosM|wbbaD5~At1Xk!G%K?)sagZq_WmRT{?nsTUwI?s{O!ro zQP!}g7+fk7{}==Fx}LvtF@JFc`(=dhN}e5&pL4zEd#tuQtx@j0P#^oRgBeCAZV~5u zoMzH#-@}JzJQtrXhlSyc+&)Z#Vjb)J`dm9iBJ#SgGII)c{G`zVrdrCdwrPSUY$h~! zaoNY=dF4mfk?wb(v#2jqzU}H?XY2t5INP+fWhaLu0$*DQk|rEyNd5$V1*&H`t93EO zdWKm&KdZrGA~M^v$G~dU$=}+=^$=&k@sgOER4x`3IGc6l*fSz!3gIMuZ}tqAY^!b` z%Ud>8ABjxq5SmZ&6_zF_c`#)L(9fCv5(q9#Sh^9kOZmCGJsbM>RO~NEfOevFjYJdT zE_NgI3|{he>+JXHi%4$G&IZ-y*VrGJY~G)*AX#$}-XfXHn3%7?%%jt{y+`wM9%Y7u zi>vK}GbG zus%Xj^L%>T^?-8oJSr&I^x4{(;F%p3pu;oVhYeLg!<$M|Z%Jvyr>}UhKam|Vk7TH< zS#&6_>J^tg;6hX*dcR{)-}tCHs_CZEWG-7P8lLj?9>%uyK>$&|8Cs@JOpH>lZ>Z{_ zUC6K`GsW*jt{HDLXr$gM8*wf>hy(9hsi3OX-|fX-8bwB_S_UPYh#}&vi*=__*E~~R zVw|3-9LeK@`MhTC8#eRjb!3t0+9)Vo1=e>r>NkVcNeD4~adkd?%BhFlk?3 z4yJH1q)*3#xoxFQ4|_8!@`O*RRsm{`PRMrkuoAuEr94mJ@)scE!usm!BJEsz#?YlU zwlI}DjYh9-g321S*US~^MEb)Qu@ObKO!e4D2$N5yYs8hedB+Xm2x8Zg)85n`z~j0o zl`#}k`MTapdUeqOGg-6d4JmX&9FjgaYG%ZGOI%j_t9RGs1R}UMZ3s!RvfLAKd>+n7 zlzE{Hm>7p?Pk1O4ZtPG$m--;}&L`AH@~F0z$HR^H&-)zTw;K+v5*0@b`8@HP4~&hG z2dh}D1rxs%uFWURw+u;{CR=SxnkXRmnhB`lsAaT+X%aVov?G;;3UHVZe)qs`lbe)Z z?r+(Eu@lNfxJP4?nIomSvJ}TCMF*$(Urj`?Vd`t^@~KQq`mFDdBN?GGy@o(uO!55> zFm+@k`4Kg(*t0Z>6KciYL52Xd4`Sp&Z(B`RbfEby1Wn{E?3fI0+4=}$V zg=mQDL@-)dyzcIuNybPz)wx?Ru!&RINt(Z~?rwx(^w|R)R{XR}4WDVFW#69=K_VL@ z$F!-E{v5j-I?;*|P)aqVOXC{+gpu?kH_wLX?}=m-|fjs`hzoAIT|yN+BG+5+NZWQG>l%&7J} z8KcgG1jk@6Pz6{5ELE1Q3t_=Q{2RSaA~f8W*j7I<1Pxs;1%k`5T>6MG;>wQao=+O4 zex^}bD1D9@A~yjp|+Q8E1mjQ7y!9q~E;@sJ_aNkys=kN#2R{iRg2XxnPNBzogje4Lzp!+xZEM9cnLNc9xI!O{3z(GzXQP9owRAo3Mfiu+eAfy?8J4qv89W{Q&HJ)U`cWdg`APe2x|eY6n5~WXg6%JpXx_;c#>x%8 zIET=}L4UF4{;Djh1VFcene&!|-A=~OTqZJe^`^wPt_pW9LEaKkA!)c^?o-8EvLSh> z!aX?9c|DNI`n1f$zaWPTvbYGx$G42b4=D^l0!xI;$>sT2>RNs7E??ka)%pIuU`O%W zQz`TA!=T$z@V7Z@#EQLZ;vAV;_46tKgks{pAw`MAJd973j|twwCf&-)xepyWj~n3O zk(G=@V0vGNYeKfd<_PxKAf~|!QAw(tR;loS?BO`AP#b2_RN<6q=Twi655_p}#y)Wx zSos9J?MA6KD`j80MiMXi{>0o_CpP6qeJ2}fZYDT3FYKR;oih=NhSL6eV!`K*$bZg< z_3D7P{q?^H@jUv|k6!TlJIJnI8aOu-WR&_-HF@k)aqy9<*k2*rX`vT7=4Y~ki9TOZ zoIhMYGAh3L8E}pnMWTU7c|=J`|A4JT>x8qQCN#*S))*JAE^IlqF6d1Kj$V zh6r<(TGva?ScaBdJHDUA!CCR?Iz%{`cT5&PDx!q)2v2tc5q4h!2JtdOkVZwnJYd7$ zU7wRb86)^Q7*34=X?wlaTMsk5F2G^9^YfnS-b4w`9saD&T`2W6y`ebo>JPyKysoJT z=D5Uqz}Hij=KN*unFEcD*SgY~MWKm{!;yS6=%I zevowQ!(dkHUS^0bKr50L9mX2YmJF?X7WqLab5swVFa@3BR~x7!BNHwL0ZLQYwb7N( zW0%Mc3_^}9?S7l>zmKocyxw^!#!0jaJB!xRPnT3T<&k^LZj~PWNBNO4bdd=N3mNOm zG?GpR1vtAlW_$5Aa+bB23?+TYG|$1=S8C&D3edlj?y(;hGn1;=2B2-+1D0Q-8#4)-ZPotM+ZtEIv9~X$d2UPb2&l|06H(>#0eg_+9gU}<#{n)PpH@m1}sY0hY)z2 zXxW8^wZZJ|#(nQpgE=*rTHcU*E#<*hVg!cd=SLsam+Ub!o$~j2sk)4x^ z%zkdo663-H%}Fp+48F9zY5?2@AD~hThL5xaqPl#kbruwu6{EhEWCJxV$AaA)NL0;^ zr}QgtCqsv>RQPt$Mz@+&+3+T-E84;Ky`Njj=)YZHoR>zm4$w!cYdOQI3WfyK7cnD+ z&X>cq@G6^G!KsRZ3?SrAbZjw+E+vJgm@$<-aIQ0ve&gu9)6r){ird*P1CzV8l6y+z zKN{xwBG89SBlJu4pEr_IHVUgQ@15~>3j2CVj4%crHr7QJ%dYx)pXO;q}7gFEC1A9WFRovv^O01M+5;le@0 zr)P}sjqkQS8BYT{qUYvb4PvnKZU=wr5rCwgyypORqAgkD?{Or??0(~t-Qd%2T!Whc z$ZZIM7i zcNl#$8hD5uva7paym+TupaQs7uIhcY;uE%*RE{x={OYO?f;h$JU zG&Ra{Fw|;2lsO7n1r6JmY5=^IFi1+%=}?(5C+NR-5mm>j`28;2gS+(%qjBURw?<%} z?~++%S-2vG`Zxw$)A-HpSlE(xd?CX(OVUsaCJSFtdd^*TmSS*49E710pj-rluJhZ& z`!4CRUPM(-QlL}b&PegdEOT<}X1_>jIISVfEbOR?vgdI%c3Vzg>}@yJv@=EFZ4I&1lt)tKa6g(aXXmbOLU3%Yo7PVAQy6;S%lLlQ}; zCy9xNPiwE*)<4YM*ksSe?poH#s_y}Tlt-Z=rZtQOQQyCy7Rt?SP*2YCiNe6}+PG$L z;w$dEJ!Do-91=9RJ+m=S^5l*Hm4WR0-%iz?Dgdvdut2NFE^n+iuTb+w3jG^ixgkU! z=gQRJ1&}R}qnq{?5;>MKW*#9e&`Jnw5{Ag76Tf&BK^ECdFp0RjY9hNb?B$vVAi0tf zfVC)hc|4!w7iL^?=9Us(d8BAxE<~SSWJd==V@1syNlPkx)UI3Y^du|*-G+uVtB4Sr z+-4Xzj|B&e`9kZSbCKG*HjLD5L2@1^ctVmjVQu+eAs4%EpgILz2UK^|!p^!q>WAFJ zsEBf*>G$#hX%0kh=U?e+mD<$|5NAx7nnT zGYbsQvemJM_gWy-XkXN?G9VUhCIVs;YUFDPMpCQdSWW<^xG_p^NZf)b?n8fkmX^F4 z!4g$@daMnDZiCAhr+FZwxY~z=~SgjQtH|PpHFQs9;3#PdgZIU@|puvS0 zi;3(~Gh|}b{g+j_XCJLb6@jyF zTp$IY6`nfPP(L`pmV_7gYVn$I$%IVBa-cPdh^{QulMheb-I^)m7Vzq8@ zoK8dwzTYs^_=+8Rp^yjzLQP?g6?g8Cv1DTR4J>4qc*DYy(fSahs74ScT8Z>NY8yi; zTwQysU}1Pq4nf!uNtbr_c8o(Ytq<|*X<1wbt}ns?GD)#$zN9qeyC3FY7(S2zX*Ygi zMneqnRsO;_f~cX2g<~XT&SXNjQXY)i+!H@wG)LABf@pgu#6!g8ko<#w<>hkHVN|jE zSx+VPY!CO<{Pa^$wI^xy5l_Tgf&C8>bL4L$4 znIh;FOkeN-cPbgkq*sacLr%z-?vobm_ivk;@qxL$TfF%n&{vgcFdqE6S#Yj(&tXfU zE*y-W!ad#)xM&5*6C4Ht!CHwMyisdJ#GQfz1(2*>JwI&*LceuLY*^xb0Vvzr2|8p? zw+H}ZWb;KK)E=9tn@5dYqpIs@A`A7j_P;l{h9t%r({Qlja-}`5!BSv zImNv@#MK*B-1Awsx7D0O==ot~PdT`{XJl}BBw~?IT+5-0#~cisiW6NrUIkPgR+J#V zm;M{fNsNr13i0LHi0@*r)FQ*Ad1U=hB7#WB>Dbf1Cw%B8fF$Wz)15{7v{EJ38YtO5 zf0PT}j+%}2$|{h|b(5umf84z^M0z#5v1g`f19i?ughNlcelHKQK-ZcR5E9q zXl@R>(8l0!Kc-07Wt5rvCk&EmzpXH-;2PUa2s;xByR(pY^|3JOMY}&LpSWy;?I+U{ z^T6?%ruvOeNDyjz>5ij4MaM$3oA^98D|wUq+B98`j*r^32N47ab6tb~ik> zG$)a|a%PlC1n)Z#3S{G4o%CG;iTj$=WQJe^g69e+yX6$kZy(w;Zx$#!zIlZEM`m`1 zN@%zsDM33iNngFJzVb0DgPSUl=HIJEh}7aDW63t2&0>~|;cKwE%k6}7(cV;Q+ApYWY2`EuinM9uIVz5$ zSYPVVg-T$R3Y@Wu`M3s;_I@TT<^x{mpqo3e2m58N7rF~Ddl!>|p<`Gio@@Xg5@`d| z{QQfl@UJUcDhH)JGTrt`>+9}?US!UdU|sfgcSmQ3lcs^QgcoI@BJuq$swoKMVL?A$ zXg8bN-8-nVp|R1=dhIs^bbHcqdbY2)ro*xdteSJmFj!xrFW7jF`rE$duv4}rIhpY^Yu6orC;UktGxB_-VVF^{45UYWjQFGgODu&DD z4)lT^xHR!*rQO8ERmAaY!yIF~#i(DgsrC@`87rl@7)6}V0gi*}yzSO5n$rVcjOb{0 zcj!2rvKY@sN#D4(%e$Zor^#7z42B$PfXHs|e>m92VI4UvKJ}fMAENvBR_AM9kjFa=!aWszMLFk*X7ni0K?f)q*8@>41LV?pBS-ee( z0Rw^ar(el)?ygq&jHpS5u|S-w{zq*!<0MZ#5k8LLOQ4M^a=$*=^BQPDlff3>K$VfJ z?l7jH+wnnJSi!{tLE?2VG4ot?yzc}VPxrJM>C!{&=<`b94fOMmXWxOyM7v6PkYGg} zHi!U3jJL_`Hpy-5OqFL56Ck@QKZ;$jTjdHJ8U4Z-*R;}HTqCpa`z)xEP|v_vq&LoX zqWcaWelVvJ>KJTp>hfowLwWcyLDHMnR0C$$AFHjE@DrQD*Eio zjN2aOpTDsH83sSlq(b83dj<0p5Q_M$D%e5z$MVk2mE-Gd3Goi!z2;doHn5(@+no?p z1CQk>?WMg%(SfhJhZ?$H`Eu{0UA+}c9vw|ZS$l0Cf44XqD&4}FWKA$Xjh>%w)~NSk^yqgO zH}C3Kw3(Ws>ixg5PwlKzs@4TCbO#=Y^P;#Q?1`Lt-o}o+>vywMqbv|gZzasu|43D} zHNQ2lVH6htIv!t-Y{f6g6k^{h;}+RHyfga!qgK{mR%-n-=l8byHA>>=%Aew{rt_re zo1hBSDRvsm+$6;!O!mcpzJZ3M>|@S+`!`4y9`g;Fh60nh{l!j>U-O^b zqJLa*%1pP1??`b#dScVorSMP0=RG7|k5jM2{(Hyw_H=@r>f}qcVG!f3(}=E6d1O+| zLu&tD(fsI-EfAJ8CtC!e-_-Jd`hc@RE@ zm;AT*OYB}J%)7#lhVqS`<#zZ*x@?{S?hi1lzoGq28n^Y!h)*g$B>yXxO8nC^B5{)w zh?DEKQFOkq#1HcR2NN(dnObknF@^Yh65gINeE8zcFmo{p!Hl0paZ1a5EJWB}GLZYb zRso(jq;0Gv$>HCu!ziCvHc53fNPU_vX} z6dz>$)iIQWU;JbQO?zVh{zIL`3!8!8mE1Mf&6)x-;F~3F+`k9x2hn5;OOX2S1^w-3 zAJ1rR<9rqV)v;Ij!o+1u4=;vw+z5<&n#u5N`gW**i`7Ma;shdIR_Q-`8yo zzP{K|lIq~;chQ301^PiNek}aSWAL}Uso)@1_`HMp&jtoE3xO=3)kPN;9CdRQH^1mS zKva2eJGP7buP&#~KrC?it!CG6QNGRE@j?NgQ^S{lVuqvn!;|v9`>X8(ZAjCs zPJ(X={!cdOL~$MBnC}1gcp%UlZR^(sJJppQd=b-L zP+@L_E~g1MYf@v~<>se^sU?5+<@A~qBBv3&l8paQTUsnm;m^Wx^A0MHtuF09KNb>c z{QP@YA4mY1x4kQ0_W0lMoIvw!ui1sKO1glW%@=&M?;)0;%JW(17YGN%>6cEMi^S#r zUR5Dzu)mFF36{00^2rLEq^Q!AMJx){?wB?H>!m>HU$saUW7!FQxBvF^`I~8KC2Z%V zNnp3zeKvjXeZ_Ku%O(R2l0UTG6)%bN&xjAIF&@U*LN(T9XtcN^99~=sDjAd z?V)85b09e?>i%m1(Jq7N(*Zls%kw`2ifN%*5J%@>h-05F-|#(0c@C1=9{dZ=5zYIH z;qkt2T5^M%&PNLWqB9+^yRa{g2SnXC7ie zfOc}gv%=o!E+G?S62+9dvs3V1Rs2&B<$&dvqGT&G`TwgZC{d#fkB9Tw-D( zMdB5*J3j;NwYsP%|5mPdzrL{{Ws>~wo5pSJ<~yL0<)T74sthuY^S##b@3;4Vz1_Xe zwD;fJBimWuIaN$2rGT&0O$dA39nC|sr2djgGypQ)%ScaN@BbB1>df{?J%ffmIiQ2n zB7f=O95MAK+OC*IHY=xT>oqZ*E;e6d5j z$#7x1lfbo@{P*wPW)VV+wsBXBQuIG`8CWVhd>*o{3Es*`5!gQC`qJjC783Dn|D8QY zrTEL)1_|o@M+8Jwsq}TYRw90NaNCamm^Yzf?-R z_|^G;@)9(lDF4F7ufVmn77nW-r2vk!48N&=&K0yR(EPOwqR=R5sqpCNM7#$4W68f} z1~`;z?X(3sJ2i1URzoTYKrBTmXXrVIgW&HKE7~9jqK;N_26X@Y8uCp=%9r_RzOcsI zCBdGkT{a-*Wub^YH# z-<@A%o&H3Wy#F}JUk+tE%T^OtaFMf!bYG7bln;??+)UqJV?|l{wYX$9W!3$+$2jpy z#n^Eeb4p9zfm;J~B8P;dZGR>feP+OX`b#syCn3rR&haV!FUrj7@D^2ecUoSTQ>A4{ z>%O@i=`rC3VzrK!C~<%Jaj-o^xq5BNcK@4{l2@tvGK)216!K>{HB5ybfcj~Oa=|z{ zzZ^yUd*9Le%MsmL$j1GvklM&uYYe)+xw#!(Xb zKUq>R(dwb9I#;jc?ohKk)4Pb4*+$0C$p-O2Ncq?0D7pldL@@``^*<*mcznEx0o~}Z zWu{tfS18zrbdN3Q9QoG+SVX}p8jrJnIQRWi7e1k+P9&mvEj4r#y>jpEV`XEO{Q0l^ z>-msHcK8&3XTc26&bEd1pc6y3B8wc4Nq4Zq6?FaltIRrHeu%7U{4byXiQ1S@l4Q3^ zhX4nQ2)U9_obN#>$H?`6)!DTyF=z~IvvKQRnE%*3EIBfM#J$2P*qL8ak>00mi=@K< z**cCO_8B(r{!WzU?yx78-;C2TPguD=|rexJPgMW7={k zX4<{j`8#UOHGKIWZzn(QY01CbkFNsfHM*Ada4ry%Aa&$^dmm%-JL`*ksrW<~vavnl zswd_2Z<#ELDb0y|oBP?QPtrg5c8~p$OyuTYDbhCvE|z~!;*U$c$5=H7pCmmgZHdhL zEyDMR&7bu84YIPg78Y)Z(Oveho^YK?R-(!PmH}@^%I`I$yCUipE;9R34W&6VD;l|j z5OhVith7Mj2z~1x+Q6Z16rphp4xD9ik^kfym5Ib>%|v38@cYP}b4ITqN|&Cx*Ni9= z90bjL-@mT?6~GK1yfhy$x~Giw>i2|gmbFkMmUHF!kw9`D($(3>snh-y%_4mNVB5y+ zSj11bRIvY)jeAv9;3o5X`#rLMLV4UhMCs;(o$9y2CbsRhuqyXSJp1k&>EsWmp?S-t z%m_>gox<^7NhUPWgEZ=Qb)`{s8!CU4^oo;{YTO~)hq$zg9jDsx)Apb~^FotY|G}f6 zQ@QN@XQ}V@Cu{eAr4(>u)8`gfQOX(RcSXs98rqEJWs!{rGc4r01CcXgCoxIYCbxCp zU}Oe$CtlLRDfI}4DhOrYnadSK)$tcHkguHC%wfj^!mA z+a=!cg5b+V&jp>TF0Gj_bZPvRgJUco3ekoteXEWlAb4kQ_)M1xCjW=p0oeHWKM~ub$Ighh8V7`qIwpyFXW;r%kQzH zW9lE~%!bB2bg^NSGhhAP&wWUtqoL*#Nml~*R+MakF5+@2-EN-u79d}4qZ>U$GQk~a zbXjg^=>DEL57828UYi725ZOavNQ@Jbe^qgh4|?)LUUv_V$ecAo62W#wke-0WO!CeazYBXV7~MtB2yD=oAE`%TM_E?=|FA))F^P&dnm5P;?)Y zTzPWZas|d9a5&v`1|I=`LH~!3bm!hV{ZCac?wQgu*x!qI6E^R!ust9srCw~qZYemBse)v z4Zer8m6`|&im&t|=1G6-q2v>V#&Ayz{oxapT#*jQzeAW{j}eW&hdord9vXV7!*pf; zH1q`1c++YJBIs}$;w^8xK3=DW5U*V{1fl$=^xt||DUbnt!27Re`@_4$ga#*O@8HRQ zeG}%5$2&@5rDpS!Hb}3y?dSEZW!Z-nsBUHDk;uR5t}W0hWbopY`E$YdC+x>u+~dOc*+E>ppMQ;595YOVGz=ce^7D_%fzmp$Z8`$h zXorC723%%sjHjZ(IUjj)?|mo5zCP^c17Z|!hb!M$_m3&%}e18G2O!#1UU^C7!+%M9H*4g*(W~f(FHw2$GGXYvH>;GmyhX;R$eSE?E;wJGH1I?j_=3R^mFeq;G6c!(AyRPbuZI5! z9v}0bWVy)-W~BB62%h$aH@k=c+C6rLTK&#LlyG^0Tv-%U+4nnv9eXSJU}a}E3PjtF zihFx`K)>NV#HQ!Jjh0y(|DN=akZVoBCFe4S`15Jj6)!_Y#Lms)Q?jz|DkK;Q)biJ; zn{9qZ?K0CmT%y$HAnk8xCvp9gF~P7Yna_7{oc13}NM#L7{-Q{G(reTowulr0xM)DZ zkzxDSDK7VcQxs|a^2aAVVph_=f|kKW&V4Q_>BL;;%kW_VbP)SFY{GWqRIuoJoBn_G zjq4tUe_V8&|43V**@*zaRVx+(UX+D|0FR<4i?& zQw_>ZEUE~voGSvnpcSUp`apjS9g*wuA=*qImNwS$VXFHbhgCeXMaWQ#S;lgM++cmO z#pT!NiBb!}wq;%dnH}(m^?#*@Z-*dzSD=0-_|GJ#zpng-*m>di^YiokVT++xkKuHW zw7!LfHkPfCT-mVRc_3^^FGd@qY0BM^@M2|TJUP0EvYY7O=jZPj%V*+;Mo3Y|oGJSH z?j0248G8ZtOs{{Z8>b*WOCR-Fo$LZZ$lXd4%4hi?D+uld*9yx@M41 zFSV1dyAG$$spx`_j*cv}pf^e&x$THpNb@~I{5zkMgM_Kns`$I6%b+Yvtf;8a)6)|b zViBQ8+3zFOn;V6zku;g#;qLj@BkrzY`7>M*@4Y#i4Y7JX4s?1uhP`0aNq5*E}>no3*EEV~>c z)6o6x`U=u-s`j4o77b_e1Mx8JY3$GRqp25>(k7N&#)eac(mjoDL$nS<-9PefMUwJq z<%b!E{#(&u(pTTTmr_>Gl%=NH+oC0KuLTq0%}t6yA(r6s@x}JiEQwNA%`Ab;Hs)h1 z^{g%Gbbh(U$zeuPEiX)_$N26r8pJvkR$UNo*q_(9ejdG(!%mEXp!|kw>I$YqsJwy+ zdL{YKWcr8j)odQ_Vtx3Qo&}v}M;^UaB0L?^^!TG31eM$yII}kX?-J)&dv-WsXqW;M z@W`CA@BbPtIwk^{uIX+$=s$yN4;4yGL)!HV{KlD;4|+fJ2FMOl!Sk+Q$UV&b3x>oM z`0(2GoG5#rl}meH_=k9Rwh%*TRHGvrg4~6)^iYDvvRB3ZZfL}WcJ>t}4Ta5iN^^94 zBAO>%6W^1YM<&8?q(ML@{Qkk_B+UI)081s&N5eMpD80JtU!xg&4{rp)E*Qu7M_F85 zS6>;h$#?Zqy9aw91WR*L4fLP~ae^{Yop3t&;JI-`oMvj;=l`lN79R4sQGGr0AH}O2 z=SyxUNiM|qEOcUxj28tEq7U4!;*Yv`jZK06f~xSTuB>duFP2+lla zzQ`S}+%FF6j{wIfYZUA?AR3c?Ln)gKa||RVaPszlnve1h4HhG)dJg`Rn3En%H@wJ0 zF969#!zagb)+Qcr;CEvlv<>3x>Rli{6+zn@-yr@VAf10q_Z(Lkp^|g-Y1gXIVSL}y zhY^taqqO>D?3C9lwtwW5I!Pu$9zHEy^nP*IRU3jzDzn@$)tZ6TFg+iM@TFe|ImWLt zJCC}gr1%}lf{Aa=V&3*ik!lgR2Pi-43U2z^v$f{?bBZbidqVl)?Qs@!vdOQ6$MSF#mi!zTyx&1WdL^rYO=gtkONxzT@1a^5&Skaot1f}N6uilV z)2%=1{v+B55o7wIZ1iT<=4)kdZ?=!sl_`~TqJMp!loCOM9#IuRa$Nk6?dv3m6X#!A z#wiuwBQ@+#&MHXEk?D9DJ+ug~UL_Ww-nhsA(L@kTBxDKA)6ThrZc{r9M{5rpph&(y{lY8VdPGV7tJi@i{f z8+FbPYq+30+*mA+^+SKR!5A^dWei1;<*)ZOO*J$cVjInXrmOnzc1(#C<*|2z4Di;58%CafFztzmnz zzu72>;uUq(sg+#AU^!$^5$Prb&Pc-Eac*+6Eb=6L7~AgQ?BcVHU{plv9EGvbZ)nlA zcnRLn+6_$AqR%;9Yu`OK@hj9U@MVbcmoAlSLodM@b5YD#7xN*T47$JcsQfWc7iO}> zR7zv2>+kf{X82Y_y8A+mN(<5&74P{}B4pv=Jj<8XH7u-_M(Ik(Yph%@!^hM7umgtj zy3gg7BuR&~?G=@>(FeY=H)l?fc7`1{3$;a&KyV`agQefcCHBndcP<@YAO>A-ak1p+ zB9b9@eNbo`;d`#wumeLKGh_BsW)o`F{d-0mUCH^>{iWJZs&w-Ax3hE!t4v{Dgfbvm zsiKhT?EFquf{7#Rb>)cGGFIFH9#PpaKP${gslR+V8K~1wioy;-j@WW#`gUjaD5RLv zCotrVo+YEl2UUN$NLV9c=FO6gGeWMitR)k?W^$%?I>*EOMfm;fkv^stQRq*u!sJRC zE+$btB)IH2Bhz2grrhjJW+=`2F0yB%)u z7yaVrST^%WlR*E%)6b~Ua@`gwPv7oziLlA!FR7Q5Up>Z(;LMWX3J}rghJm~%TRt-J zxyh(X50Kb~=KVORhs$R|Ux%d%FBZ_>rR7akdg`QC^1WmbZ#uY^FU6C1b9@Io&58S~ zM8yahTp7bG&K|DI&59*-=t44BBfwR*)de4;2T{={UAy*cWTlS$)wX3{dT)TNe??$` zFuuj38u;wVr}MaN0|>D*oOKaQ9Q`Z?xXPn2l4 z6HohC1uEpr#0y|A$J8}vrGNVQYRzRg!a~pNbVJIcTb?0|hkhz=fBLaqIgouWUg7d9 zj_r2}OX7woRd{ZUa;JEHt#?iKH|2p@g zlyihcePKgCSIUhi2U?fpL-Sx5k9k~y>uLV0TH6y)z>p`#iTu^u`>T{W=D_Qv)(sYS zPp+$JQ^z(*!Nq(;VjhJ}qo0|XS7U29UfR`>N2U!`%d9*w7{}=J##!4n&o7o>Dv;My zHN|K(`i;{T+@X^wye^vEo35BEax_{YsqjGAr0$^Cr7wsZ=8O3|?y8gVPPO|*(FzTk zT5?y|8=Yt8bdEmA3}Oz3>?N|)hp_gC2!;0PA7HH}+}RKwt}SEH-PKt-ab$M1m`p01 z)f93pHViFw1rg0JeNg!9uG`ZT6l6oFuVG5?YL0HHCM<8kpTM)T)ED8~tU^0<%H&5R zfAr4ai@x`d%th713Fk|mMswe26}49gF!5U!UJoKh-DLV(SLZ)8DM6j{tA9;-xcS-U zRSN>)G_JzbBJoPxW|so|g^iT!8R;W7-(B=jY1b<5yu+(lv?CZAnw1%apBwD4HeN|> zVTF?Sd5s9lJ|_#&5{u77^xqa>@6l;-ykmSb|BC)hHwQfL{sZq?{AsEGd}A$9-g-@X zbyF}T3il>QQO0)XOG{S&1kS9|rlRQ6-gy^c-bEaHV|h&tSaAqiC>IRmU% zb44uot|L!fKe{DA40$5+Bs?G;htr-4qfbh`cD+=*dh}+2zhxCt$1){(@qpw} zRvC2;Z6xwVy^+*4a_ln&UKXsMqPzSG+Ju@Pamglf7#&jt-ET%X}*#JVau=Nf0Nss{bS*keb}6kDo|$ z>F&4PTYf2cQpjVhShm{Cb|wjRf5XWGUldln$sTq==!k=TRLf44*(=UyrWd4|r?0%( zDnCkIvTd_u6@E>t<}DrU_mR3`vSJRxi)E=A*>?FQQU&b{EN+3deT;u;n1?yhIwf0< zIO)>JI34~~;t{WUBoWHSRyCX`=rzvqks&q=C=BNP$h*MmW7er`F zF)Iwu;PmreC|?B=2Z|2(tG*yQkhrO&^_q8Ikv?%UaCzdmc=&SuP4U9=n+xS2=(&Zp z20P)QVhva!F<2x=Ru4zBEPfF}V%>$aGRzP|*gRJ!O5%YaIcP*o%QI3VKi;7(J-aV` zx7`RfLslIFneDxPbOyN=+ro`uf;(MUVP(nO?g%#&Mp>}*h>~??=U3my`h5R0hv*>! zHxdWh&R-(ZHcayEjxUzLtC^;>nGjTW@B2%?8(hG|k#@#CK)DJN?($flp1y=>zg+TI zNTgfMT<&L+U4dk5ar1Eheg+RuDwXoh@8G8bVR#bxHGX_(R#R`agOk<1WD67Bky5tL zHA>|LZ}r;2fN)P)&!+4p|ZjEw04o_z~lUf$-*6}siXKwXR<#?M`4 z&WcxDmR^w(!i3D)`2`}RekfMZK6st{;-2e0&)rArN(7PEqGnp<8=SN30hlc`viQ9m zhLi5)2NBN?urkbR+eNo%Qx5la9Sw&NUnaXl_{TGKh*&;@-sGMY9n zJt=-)=lx-316wqEh;_ko4uVz|d?d)G7aE0d;F_GvaOIN{l#Z8Gvc`(HsDl9RlA~GG zhA&*ulkZ0=0vQykQxys}l|l|w3WJDXs>LKA4 zEHqbzGdAo*5oL~V=@*;Tr@UEk5cX}qlBW8g`F{N;s*$_aljg#ZG4I7sB0hodkiD~% zSwCSoZAMA&e~7nm#mJew7w8NA@bg3{T}e)+nd7=kdykxHFPK-4E8~S86s>Qjr{}Xn zq`>EjhIP?->G~2+`DE-a6P>uvMEq_Dp(vuma=brcxT${;B<7Gw%$$?ltU<7yX{3Oy|+_%R0&3)VQIV(0to~=9)uj6~|Hm6w*95RM*0kT~Lityq< zDh{4vsh3|>VSQ}Nuev^X+V9^DO<6sKQ;cYtDvzbTyps}GGzGJ>r(fKyP(3S|o$bdh zwmVj}7(vyhy93;9_!gkG+9D9 z-TKq|ZyEWEX|&{C4LTJtTBy^i>cW<)gu*bIrI;9;}dj+)40WW*13x#qR21 zJ_8EqfGCk~%qWKyS?oCb#4MQGuUm6n*0O_T{d4Zev&`ToNN@o8W_h~t(l#jP-WFHxMkJ}l<5q6dzxT& zetlofgZ)T`%>9#1gAG+lh?!{l;OSnZJ;@j2=q;=QPyOvzaSZ|bO)UwJBlOsBC@n36 zf(h8%?Ft}hWZnf0TNXd}d0g+XTIwWFU^~FFm0O}tfH#{%02?`=^*kQFNU9J=T0KWS zZa=>38@g{}c0D4e@UXZ)XF8UBKbMy|Oo09A47h>rS7KR8$w%Zi7T5H8b8UH7O2(ym zGclSokjA>2IhwfW^#I@Je?cKQ$*PnSAzHGTgb(!ooJL(9 z+a&{9H(?6_2u#(1oUBeLOJ1vkeF}XgxI-kWVyH%<#C7N75GlnS!LXqOObIPan^<{< zVSNNnd{OWg*Tp%}^RRHA>@d9ZwQ{5f*$+Rro`}Pw&L_;f*)k?p*wOpHs$=FY-N0sJ z>()p!MUCAEeA3*f(UYmw6Gl4B6JpHV;;z<7{!=H$+qA+#jwG8{`$QIYm&W9<9j6F~ zzD8c(B}o_QV~Ix}V>D+aQ`T2A=@yc7m7P!TM>R`xMAECT#I)m$>~UFd8kN(K1rzU4&&6XSK9?>FAQV!^i+# z$9lu|Dd28LRO2lgGd<$Ewe$KPwM4 zGD&fiPK=JsDcDT2VSp#e!ttH4_H9acmXf>k$syrnC544~>zPKzhK7k}2ff515l3q2 zkaEJa$YDU7e|~=!{&D;jAtiMXW0}Xij7&?2z)oWjR6p%f0iukgR_==;ZnBqzuF&(^ z%YAI40;d6O-{_^j?hrTCSdgb={b(nXrI&ta>}aNqZqOb*?=7CrA9mPRRvU^X@x3K< zi>&aLK|?t`_@W!Mf|I-g&-u}yX3l`GbF#DO;D<7i9qH?fOym#kJgj59Zzf_I+N9%O zUE!Y!L}Zj~AS;s8{g9C$wIA=kUjJ#nz7(|@$6!uNv4794C0vBs>Ao?fsC&?&a*WD! zibhoV*3n4^%Zc&L;f^#vX{=ZBnY|Kg<*SZoGC?nn4&}(1AWd5)Uu5Tt%OzwJ@U=@{ z^_0Y)T7YWKvdOPcPl3G+sxqm}qVby*-_Ue}ZO69WTxDfS*i8vr0p~p)o2ucrQ5P(v zMG}^#8{5JA*?30NH!9TY&8+pUHpqSu40&W8LOrvS4m>T)A>BopzmcEgymEFA+wjSB}uLJ;#q)HKI3EzU;zW~#5}0*;@h?q{6Rbd*s> z(?4`V+*T9aQN}4+9&a*uozNN)4K_s?s}1gMVw>y6|4dq^hBCvj=d|(~ly}g)nC0{g z=fgXLT$$;?I1`pvr0Px1+EsO3GfAdd4|}}F*(S^;ePS|h#+Zf5VOC&xDs^ZY(~yO= zu`mBb_{M9jSgG#tl@lW^PP2Uchrq}nCKWLG5)N8zTku3BWFFBzhorB%+H+OB=@lgJ zrL{p0BYXcVA18gC=Z0C~I1@^uZ&YPd5ty=&P{ym&upq-{{bn?TqHn8Fu;e5<=TUGi zIB~u`ZbIx@?DicWNAiHok=69A#fDVm)0GUEQx%mmwyDb-HS0jcHVC&Dnp&*aqN z8Cq=vSOv&a;!F#D{Q~k3FDqkKLanL2ZZeaJOz-}<6{BHI8)L%ivmlC0|Fg~Yt}AXY zZ@6o~z_}8m{Y6)d!TynA2|mm;N9%+tPJ%qvM5VyYt{xP_qK(Q-2_t1Md})NZ`%T|! zObfOTf8QxyK{0=svFF5#Ob$fJq==J-IJXe(GX%@!HB)v&ePQnc;1m z!y8v;TlvBv#1AFj>Mh3#>sO8{!LV25xHpiSM~JGi(F$=Ve>SRr4Tn-E{)m4%Swx#5 zm%cup?dY+fgjne|%B=RE00{U(IQg=>z$;-7WT-vbU{u+|976*CyTa1@p5 zJEuB+5+g4=#xkv+9H;q_C?ry6emo=z()Rj(T^wb^p!DhG!+pIwd*jKv38XwenGS^* zdI#%j!CjWoXll;qn@#4`aI0~LpLGU?H_4zQUG!KL+i>`&5(WMovBP)^|Oi zb&Ds8O-xkM7$nKX#TJTHr>^Dd(mDGXf<*qf9|*>#_f{yC`q&%xofiMR-S9i$tzc-J zP(Dsg{m;Jh-?3}W1cv3wypmu3Jz@FJ^GAX_`Np0l7{h~d#J4C2zFL#+UDWB2MvHF} z1ziNmA71*OudO7Vp}eZRs{i@J|9OF1FfFwRy!IoFIaLGv)JOy0m<0vb1Z7hp!LN3L zG2q_>_)SnS4PW!&l`3b!NI@;|&UJ#=zusRCeAf_+Sp&NXLJO=kWq`j63c?9y&hLVs zI`1Dgdj0FW*85*?Cs>#Ia2W6vGcGumx^|T)sHr*hVM~|Ucz=gpj8l8u!N*HZa1y-! z>i~akD=3(=k;(^N`=2du&F@#lnE4-$FVe;ZSz z;G0bl(aEsI`?bWh7!Xy7Pe2@1WeEQHpZb%uYMR0^-v9gh?~N$ap0pl&gIVH#?)LjX z*Gg6933pFjmEZr{+dpjQ+?rrx7M{J0Yc}+{&gkYGGDVUN{J~2qs9s48d zeN6cFs1h@u<}2n2nx*KQ|Bo0(^ir8@o&SM6#==yd_ca3~Y~&Ah`9g$DE`5sTQ3kQK?dL1Gq}6^9hlyp_S&Q6f z!{XUZ7QQijGEsLiNvbyEouU+LzFyf4VzJy^QP}Is*LYJr@A7(4(4+6z61_W3AD8Dp z6XlgJ6gW^Chpaw9{`~#N7wld=njT0q&40UQ^>e$DyVILV%1}$rq7A)IcyE2zjPl&3 zZjC6&j$-Mgt}~tRFApChd`0c^U%9JPci^>Eh=id-Duq;4G-bA2A~EAhW}aw@=H)TRO~Um{wnrYCxDhBoCQCacdWw$82S zxrDN*mr-tZf@7n(J{vsQZ6frrKJAY*fr3x^Aw_aS*J&XUjp%#_<7?0Ud&@ehEOUg zi?TT)_d!zBY;^QrES@3_u!WC?oT_Y&rx@MQN36jbZOA? zlWw9N4j-UnAm2pwCN_UFW#g8yb?LZrRXu0$!1~CB_caH;`lxo9A=kw3Hr40mV7SqE zbT&}({4GJM`T8}&8sYMRc?`P6GYy|69<72Eo{3r>Wyu7rzd$tc*}5D-@FkSL zN|@=sSqjw{LI3IRhu>7EQNe(B#c!zEaQCDI%S@;Oy)YQ(vmo0tWJ5h{1!jcmdta^n)zQ!EIyvlI0tPZ4rdVva9PjS zLUmYN+*2{Lh-s+j0&&NVsk8Sq&%5%*r&oOx(_;++-(knyoo}*_1sHa$oc;WQ3&s6L zGfK{cN67!puqJ0DacU}bJ$9t(dqdt&HYcNr2|5||r3cnLV%zmrUnyS~U3;}IoX+p< z_mQj-OsnVI&sTLW>?ItyUan(E(iPRWQSdGBd8T!bD#B~1<`13|o?aJR$G5sKGzXS3 zS8&AE)-KBrWo9zrt3RIplti?4tvp=)Ikx7VpZoVlP zh=^P>`D%n>NdQMl>_%{$-XUsRI&bU#Lmfs&$(Sz6zpK!h?-h5LEIs7)2lN3W9GTKb zF}hsCP+pW?ts8HT_Vzar7Ic2V9e%ImaFwhzw9XjKIq#n#7?xa9R7}lERnGLa2x=z3 z>a?zn&@z1Sbwgkn+eVMSy#0v;zJW0Qa*`;l0+UPkX?HVbgmp8`OXP$g%7m+|B0IBw z^f=GH=y8rYljocNlZC(WYFuBAGn`wI1xU^F!rlzGG{+^1mu9I`8@~OLP#vCv&o{}V z=xPt~M5-?CYh2|F+g(XotMmQN0g@E|P<;gEH9{4E?oWJ8*svlE3dy+2=j+N?a7%`S z6wR5LX(AuTPs@AFZ+B^!6*qQr#@2bb)R(i3QL08N5jF1`YE)Fh$;&i+$GqP+m4!~b z@?>>>|G}qZIXuW)DV5E9F^^v~si=NXr(Z7njoMxfW?e+-YaVK%m^Xt32SIonwM2P) zXd-bL($^6p`V1I4sCVxaX(NQ{SQfibW;tSvat~F}K41TDOIj|LJ5xViLH5c09qz#$t0Dx*qIRjd(W2Ot z+5Y+>5-l%zS(7EBs)0&^=H|4BoNApCSQll38!6zZ*nLLmEV zWH;v4h79w?qu^()18~327Y_eR=6phVSf^5uGD@bUe$h{E7d)V({s_OkKFxLP`0k{T zQ$$RY@%+-#?}Y3;8_6dZ@2R31=#}uNKn#kIi)W-}wQq8Du``8y(w{e8c77!99GvTn z0wKfpM6o5|*{M}6nm!9pPudId{aIy|!KedI#x3=Jk4Wa7&LSW+aVNN%4owAY$0+omnww1`!QlOn8r zN$CBI>$?0jP-C*n|LEER3v(z+cEu>JBlG&Ze)TlV6=d$nlcXK|&79-^ZCz4oCaWlZ zG2i3HqGBs$SoV}FC)zBx8O}@GV*ZWjciUt|- zUfr*1?z%0u$VNNW=W{eJ();Lpi;t0?3KE2CFw;;KI=E~_1d&mX;G16 zmv~q(ynsl`rGaVgV}z;U)$ijNz0&R9i>R+>(0y*xLS!eJ{97I3VD9oYwscHeGG?QK zsd7)gk*`+AGkoGAF-$ddh;9B{R6@#wkrt@#YDG_}pKBPaQtRuW3n7C<3Y~h-T%oIb zHSVsaYMwWQm! zP8-y@4^llNXzlEbcElbQ6O&oBrlO*{xVUhxXfyf3xq!u-QsA?iuX%J62Xk@zN@lQ` z5O(DHqW|{xcFTbOExC#)9fcS_s%a!~)2+`ISy@3?3*M7sAIV|L&LAIkil~WwNsC$g zf}6I8Cm+v0KHdNJdQmIHskxUvcZ0`b0kRPu z-u2eS*@`;X;s;amzR?$Tqn9@}Pb^3an~nFJn{+Vt4!@)o#!YLZ$b~PX(K~!*e>wK3 zivcWBP7f!9&Bc%Y9QXOZ_QOE`B{VV(;!6UU6|CdP5lIvkW>X&t=IUm%Q4ar0llE7y z#q#}erJ^Dy+Ijid|Fe5Go%om)hTHo6zZFcNJ9x}_20Cb#azs&>Y5!CC{OYTzW*uS5KWXVa)>!vyOhH}$?KM6`9FF~-t34?Lx|EsI@|Bq8>^7X~eLy@(q`uBK> z36=JZp~p}P!^!{N`0pXD%Bb(rcw*+6mw7Vy-~Hf!db5`7RWs6BN$-~byEB=38M@?9 z_QpQAQD&ZQ3p|YW>FIOo}qsSCZ4-o58Fd@M$~jCUx5#xsjD~!_#%>(kP0| zv2}+!5INGPfQe5?jBM-}q6&<^Bm(b&G+-0Z1jYaj-~?a>WPvC^3>XHufjYno*aeaS zSAYV*1Ns0JUX5Ofo4DnZ~`KL0pJcG0ek=l z01JQvU;r5)9C!mn0?_~@fC;z*{Qx7t4m<%K#-Hc_Q@{mC0$6|*zyxRoE`hgzHQ)=} z1I2(j@C8T!vH%QV3J?JJ04Tr+I0O)ZYXBMO0ww_@01X%iashJS0Kf%^fjFQP5CYNx zYCsss0m6WKpb}^ThyXJ{3TOucfg+$2r~zhy7r;lL00w{nZ5Cqr*qQDtI52yi5z!9(roB{@b z74RGg2513RUWuOd@0JZ^AAOJuB=74WN2>=bq z0fJ+Kf>l5w@E%A5HUUjw4A1~h0A@fIhyuibVSpQ`1H6D;AQ^B4C;&WQ2Plz~lY77q ze(wN21Np!P@CnEOmVr!Q3s?uH0Wx3+a0Z$ICBO-Y00w|NfCTUX8~`i;4uAn~CL(ukr2iU)4J}(YpTCg{&zbXHkZs>rpA?SI zf}$o{OK}|ztb~eUSsU&tv}KG?sx(ASS785Pqn8#q7<#mm-J&(C>mj_dr0VzRY>re9 zBWh6hYbI-SlTdb6SQ}a^kKGGzCck}CpM3+%qMMfOibm<%qSS?10WC#o%yC^bOI$I5 zuZ_Xm6^u>zKJ!enVjbGj5JWf4&0h#nyq^d(ixKcXQ_oH9zT#u7a3^YyvPF%PE5<3A z%@uKy+pgoKP}2+dV4B@_60bnMg4cTY=-CzGb3hvqHRX_uSCn?BhM$$bBQtYeHshs46js+UHJ(}X$y z^%O*^bgzIJ9|gQX{Pv>fjCS>lR4#I?Xr+i(>41Aa0|9HkWWRh zlaBK_b@zxPfW3-*#?$DbrHzE=xbOFfTedcDgS3Hr3AxHQncL?oV+)L3xX02L=p z2~(gj&p=2%c2US-F9m*i*ZA7t{z$zM^<+<6`jJEuf#?|2dnB zwo5~`hFcHisV$c}mHoTooIAd_f_8!LOxHauYL7U-5zcxqevHrbb=`x&|JClhN&~k; zY)?efe5(Fz4pTxVQ%<<}M%^+~1}2}!x$YXs%a^J*Pj3$&qV>k%=s23V9)>=SCM2F4 z%AoN&hb{avKPd6N-Gd{tkbBd>%r!4iDz|<7BLO##esRVvIsNT@uBHJAqD}^GYLBpo zZ{EtBv%$NxgpUNPB;3+@NN#z?Qt_7h5fIR{EnAazq&cTQWfYR}c4=N?8a+>Uf}G9N zQgCxq6qUy)N*F5Gh+pWuKz>164sShj??_7Tr}Q{38*#;Z2NTnYCu|NHNsmnW*n0gl z)zEUkrYy6{4bgK5W3+D)B-;u|HAl`7l{E`jPxg|&yJ~C8Q1$5+B)4Iw9JM!k&mGw1 zTBfg1_OUm@oPSsc)Rb%5`m_2P(G2tloVi@0(Y3XJ5z-A$kwO*8 zUv~$t`4Z_DulcUZRsO43z&6Qfe1_RL`BhV!q_QtB0JR9hZ>=V9v-aX~kQ;?uSP3&< zO142lAVtL>{78rFft0gG?K0QBB#yRRe-N037zGheuil;|MdUk0waHIqSJNbs565Q= zCsyN8ih(lazvOHmv4+m%CH147IEl^H15t?wM*>0gMyOC;OwpVKe?{H4RxUnJ;As#$ z(b9-l{EOE6J&ZlW%GB{U;~o}zoope(R*nZzWIV^> zrXONXjjA>nzJlIf8|8$}Ibrs_*0W*Xo;A4b-f_Ko*;S$Kq*{?ZbAIV4aTRtcp{G_1 z^`lphD&58y?wy&n6-+@8S`Q|+%KX}s$Gxr_Cq3N(Oke>$w1UxZBbzeK4&5VIsX-Bc zS2PMS{#yEPV%MSa|IGh_8rPGF#9CKS-JNXZd;2x-oBGuP_6{t%_w~3MSq%>6lmjQV)nG{Ybs2<|3kHPFaY56GyGO$U>Hxkl>jEwlzj}^uyo1dtpjq)j+ z=@2MT?YgP9`m!&TFi+C$-oDn{-=f$@>F*9SyYz3Zx1oI z8}>4k_G(IgTl?5j5t^5Tx3{oI1}k6Ze#hwt>`v{Y1}nAe4`#>3g^LA|LQ}1ic4wC< zXrlEVDHD(n9nR36A#fMBhd9dVzk0RTB#8p7Q{vn8>+?`FHW3>X8#LWSZ8eV~=WaU1 z?~+vvP}6zqQwcxO@+QOW>O19?e103VPE_0YxPjfejzqgyY{MFv(@o2AajCpYyQ8wX z`O3KYE#G+-O?1ebdz6Z#@=0~nymDeG31hi0LD6u&865BPLtRHqpT=n=*%Detsk5M@ z77a1-*Q=skaO$hgQT+ZZnGEzVH||m#+M|5!Ebx_{;#zZ)L>#b_et%!lAlK4nUtQ41{OCnsKW!Ra=JuQGj-Cwt!vwZz}aM~d-bBrfzs6Jzq(qcXsv2~f= z?7!)aS)AW~-~X!-NK-5bEqTodr}AGn_3M+9pYSuUp{M@zW$9qWVGW~Ig5*P$;ULFT zWIeL#K1~P~_YYKn*&a76R1`F@EhdQAH+qgrv1z?&5jGzAEySL9n}0T)=hG`&w$Re( z*_mXX1zBh4(y(aUqty3{S^GFztf}WAE5qX$j2{=2;~ey3FORlXc%GD=ec@_Sba0wO zWK&wO$59bZ?#ewdo;W(tl+9A9b7e1my}h?z;+rByLE}~#JI+D?X(F$(|NJEa?F{$l z-lTkfRs>#i6>OE2;kR@jr68O5EF92KFeV8Lu?vL?ZtSJ>2jrIad~ro|ePP0HA;={1 z91}-&K9<>|`$=3)*p7_gdO9GX=!G9$m%8j)PnA9@s9&S7uU?E*hEcT7+7d`BSk zh8wQF-}03~5yo@UHzB&6FpQvix5HcYFdTJv4h9BkCS)Ps|1&rRhD)!8)4sQr%*z|` zHoQ9L=MIC?lPD)sT{!h5FEEV#Xy<9yo(m@cJx}0Vb}`EBZ+8BjzB#(iZu>g6ZL_hRG`88GjqRM+HX1c%V>E7(#@QdF4|P?>glN zNI?gjnK|a-aWKzyGzv{i0C;Vy}Qs^vaafo27d}qX)^nH~&Nm)%x zWAvj9#xJ-0{V!Q_&6?LSW%9-oAdo|<{6liY_(uKsDoYJ+$4Dk$6)I(hp_i3mlyB)c zC9c@e^krXCMCZ0fg9+mUTqU~RSU>u~iaB}Mdiq{b2>w1#T1tMCsU>vX7XL*}+kL#0 zg6azejH3X!kIsxJ7TtP?eDx^ic?dbj9=zzrhDF(HVOT-3^Xh{`YeG|RrShAThA z2>VMX`=^hHqs6oxRGGqA-siXvlb&&mALh~HRjl^-il=1JKP?lXI?5+pso%pZBeKk6 zvSzbmk+j$qEUap&7>60>Y_HgW1m%9Ny3LUT_+o5t=;9mFDRps#R_WVCrbc`(GAi|r zNdw&{q%{5|W(meMZs_RpzRLCLWSp^s8192SYjqU}b^z0=?Enu`=N7qfI_JSmGZ{OM z(NHG8H8AuT`JshwVlpKtSY&$X9eK?z*w8@`ZSaJE0gidd=UBg_bw3-dhD6jq zNIsAp*nr5D@JsLMz{SMOAo^a+$>%(Qtvk#(X6z$AaiE$B7ztzsfEaz1mOmn*CRi7K zK=1?8pP^OIvzVJ3J5L)HDa$2%oXu?tGr)loEc0o|wdu6w;c@r;&=Tn&<1A1Fn&XQI zyM|M98~bBIH~PhXNEm!|%|)Z@KB#fq;ZuaDGBoHx-FC^OtjP|b3DQnvg`?PCu*v9} z@R_YQF760&q$=__=DlK^lUMC{;XeJboHbF8vM(4fG`HX3SFvdoD>Cni`7P2Ru)Lw8 zzS#T$G~15Evg{u%*n6xe=vUBe21)!fPY3f_yT$tqQ??L=BZV>h;Ogc1YzG}&b65vb zQRE0&EIIsj2F+7&Fw8buco-{UvdVgez%*sC{jDmw?Iq(I375kHG|r7tIp-`P_U#U{ z^5)y9AIpv&-amtbC4HZkH)PBrULDF>$t$eZi_H=b^#$WNO$%AUd^8LVr^v5hFEz|4v1cMFfKVni- zse2ALX)4VvA^@9Z@SNkZn7CflqlKE~=teMZ@r!+Rzp(26+N2IBkiDL>3iau;^Qs+n z7IgK)wCyyWpC=@-b!LwRaX+0Z^|Pp~?iYMmyCGUz6IX78;7NmjYm*Eyg5z-U6nQ41 zK8$#{+U!<1WpFYs-qmV&f5@`kYIQgcOOCg+fqV&)(^!W}%q-RXHlL*oNS zVMzbMyVu;^7{<}WDZ($oYSSJpa4mYS-1WMd9#Kcb8s@D4Rxi`auGSX270nqmg`psG z*y3U$Lu*P%a{1Z-S{60P=AxfV-oq;y4!zSTU}n0gVoBlri&$O0i?XQ;NNl@pt;Fa@S=D5#Ah5E&BZ z*VW*gA|N2l2mDO%8M^u~?vas^Q6x9|tu}b>TY7{CB&V#okpO?=u4scQpkRwI51-@V zWMrhfkhV@2XZm*UAP$b+nE-I_v&=l_FzvR|o_Zv)QjYO2q)}+vJ>@ z8u)piY|q3)V}bgq%k;8IYfIj*XDCtE*r{bvj9o-3x?`jM>IcF}T~u**rs_37G>M%l z&=cgd1sjp3`HdoA+U5<;9A?>sRh(3h&biE;-)dkv?JFg=U3$5akJG#?NeLYAx+-|k>Q`OJC$obsrF&-L9VaN&k&%3= z11R@8-W|;cw|oB3wnB!=cB`}^H26@=@PM{3d>bMVbLacnXh~f;)tW#d9|j*?vX#N6 z2MV*3^*VQU5(L8Gt2v&&kOeFc=@+VlG)Ej;Rf&4;8fBMLPCk4ED}kf z)tIDpkl5R(P>7xc-DE<5blDWECGNsQ67_Rc{x42T@6Yls6%+M~1rZL$e0<#0%)13g zUv&wR*bWAA%#x0QyEQligYxC~otXmUIR8VmchSba5|>er?~O7H zo1`+9GB`JHdQmsgj6+6-9q3Q$Dw9)R`el~rTxk7_4EH*99UBj3<^dEit);w!Z+JRG zLqpg0_V}qqBewH>({3-4K~yOsL%j6BPCfa>UYHxfMnj;Zpyb$(wAiR=~;|#Lgdc?o;g~2Ax8N6-I zU)hH3*BXEeuT|WM7==^M)sODp$YF=dJz;VR^GJMPgz%Fnw&;y`ln$MqhpTzS0Ymk@ zrN^V5FeNsmRK!Uy+AGNHLDQG*SsMf`L=L!#(~zg=nJ&A(9VGF47o60Bp)fm`*z=l-;6_)11YoJR!}fqK)R z8hhSs$+h&weym^i#ba(;yN_He{uu(g(}QTKTpvmHBD%Z_6GB%X)~Fa}xvkT3(+rOKvDO9 zK6y)wo}uONlXF+%2)h>vj28yDMuj1dwjs~z3NH7b*jY;&z&b-w8#j~k{}sOdzF`MC zd{k3&CE@sq|Nl=dU%H+E;kr^#R)*t$T_ykT4<(o16nPeVBAnn~@~2W-&kJTqE@Zym zngFVSQd6Y{zp(Y;AVS33$!@*k0*#Byc0w@-Les}GdS$M%TA6cU`aPtDwz#YK;&v34 z?Y$l!*j;Vfo&HM|Q$&qGit`g}Uv-ow&+DbQ`S-1?;M!m%YB@<9`ilH8xg<1x#pnNf z6atE14+;}CPoFMMI%QdwmNtthpv1`R3<}t#hLg_~+S)l<3zm7CcPq&j_o$VN@{@TA zWC?sjjWZyyiV2$hH=4^~A^kSF<{{}K+U*2>>E}n1moUJu9v&>xe|}rVV>G;(*(4-H zd!n`#I+P6)fyjPdo{2hmL48faCsMKPrdB;hx$iH^GI*QNs+ftY`b<1lW~DyJgSNs_ z1>MmW>{?t!hW3O{K%8ZdHx3J$hupqejKTX0IZNq>sx zn)o*bm%~Qda`w=<#)C*-i4wsR0Km?@gA9J*)xEWY(Kdc~yDQ=1WY$0;%m9@Yx-D#M zkfHxc$B|BN3LQW1A0(ObgCga5PeU@#o0+Z9^iJl>R@nu%=G%J`z00#d^{Dk^SgX6t zUv0-Fr|Y*89?@Q7koAC3H8nz4?oeBI-cwar#ZDGkQjL4i#kXV=!W-kngx3wKV4ZfM zDjuw{>vakv%S4^|#ByBFGwPbww%1h18f&PnWyj zS|L!$u_S9wLl!Yzop%#-PVtFGL&|ndO}X5McrrT@W~G3C<%6pKLG#$X%;;io~o}Lrf>wZP&yU14@dqK$8(b~E=xKOYFv=Y z4LiWP+7CtEp5EEzzR9?aj1J|zF0wE?1T=H%jdU}Q5}DmQ?6M?jg=8L_&eIo7*b|iFyd0oggw$GvR_Y zr2u>SG4S0yCX?0S@2F0|fF&>?aumh3__Rof0*#)IGWI>U=I3vE$a25af#BqGPu`9M zEBdkqhe%%r1vZJos-RThXF5yS;_)xb$Fi@%L^h8T>5o#l)_r$Io}Fsk&0rqS?v#nV z)<3SjK_>Db4TQzGr=}X#RSt0;3#aVLqI4Nma1B65DT)ZX@h{w1&NHm-JIm0gT=MGBU@?p{X zdXzF9XXUnWrJRm_*l=)h(CwL@pC2{5AoIsdw+RY^p-Quxl_kNs?I|~ppko*+ReL6Zit3#lx zYk&hwNqudJ06~V{6Ci^cah(L+K${-q(0O15zi&Z)3!BteVtqlNw0dcnJC8H;9$$Wk z{|H6s&e%s=7;#R{Idk#pCdWJo=ZnxG{)Fq2x**JGXlim=t=od!I-b(_5vnh-Qvg-> z?MS=*H3gR(&ZyvuWMIgH{>BEHszG!A`$wSB>!17i$}bA^sykxN6!?(Hk*yevlU|2p zUQHIrLWyhVwJ{n5buuYtvrCgH_Y_KVi!8@?XP3MhBN_o^Z~WBWJYrpe?5w6UCDo)- z&(P>1wSu)!iOpmc@T(_)fTN!*3j>vJ-~5dtf-p7(IT4&08w{M0WHkF}NF+SG<|j1A zK!h-yJ`L-bAp!=d>PUIV^u1r6;?-DrSRk0l99>~1RLK67fdgnM_+T3?sD5BuQt_b3 z62SWJvK&pz@Jx%!*4yiIY~C! z34R)dfI{#XZZL=4UxU#|Q1@qne|oM~!e`sU&Ex2|Eqqv}O|4~v+&9=Rq>#+5m8(kH zc=EjLWECiTvhwUssVuT&0#Pl zT_i4*8pU2zoBqq!qk=_q_ft3&rHQ7(MVGFlE_zg}`C8-HzVkh=fO{vm;7?Pw{Dsv! z_V6L}NV|Vezenxd;rgyA`G+QiaV1^=LQh@_T@Ww(JUwL@<$=(%#3%&gYvA}*XSS9l ziiyNh)}4iQO$#e$P&b3o@E9g%KP?8*`>f%&B$1R3*fDuw#{<4DykWylwf3Ql-DqVz zi*m*0)bZOEEV?K+4w4Y<7yn zb8l}_&_pZegP>l*F9PL)XAuR8j~Qm+Utl#3t9z_p8zBovKHE0uHb2CS`WGb!K`5hdnDbM##QOKC zU9YVhK^KU?WH`R)%P7P33t06F%wP{9EFfk+V5eD3%yJPolYP!}yq#MW9R(%iI{;ss zQPt+pDmO!m)d*aeQB=|y2^>gId4ZI|k`nh`Ub3elAxi)8*cdV8wYzMfA_^h(yy1^c z(hy^){?HQwQlZ>t#N^6PB2J0_eX;1e3qM(CfjBQOnk_;jQ6Lt=V69B62vB8p#hAz{>}bI1u|1SsCf#Ph@{kF``{d-$IBJuIf-&h3@T3_a1sGlPx*sXfsF2OiH{=yp6*dGs5S;0`~urc_0?bvPe! zLmNvh-c1-eTUFXIvIw%WPofZ%GvB)V8cvyN0|-}?~{7}-4p8zh6!RV)%4Kc>C4F@ZCQNi zyd5+uvzNrWN3dqBLVR~s=A+JdtzxhCZWf+rd9dr5=Xs>$)kH*l>LTkv1-;usN>2x@ z^d?+79N>4QpkE*-_bg!r^U8uq$KD!Yju3@FoiMWbS3-Xx^LMIx$)c8Nk(*S6x7_ki zr2W^l%^&?di&QD-6Nh2ryLF$Zy3NCi>q~hF8hby!Lz~V%%Y3=}Qt5JAAiCvT1u%BR zvJC(aWB&>uE4=^l^Ky*>j2e^P7~H0Zqw4*ow$hG;%eP;nWrGEF{e zqD&@QiqEHwI^{i6k_HAET3A36!pmUH8KH~er=2g)Ty#ZzYbwZa!W)QSj>46mGxRBp zn_Hk*dx(0D)r4<7Qk68679C2ll}QkCr3CFNntNUB;+l8=5*aS;&(1@ql{VooU%qsB zw#Yd-sFnYdosY^sXbF0F2<4Ev9iLgV_4XprWfI?}JIbR5md3%1Ux>aRvZ3tWMkh{* znW=mv#PMgdLQnOMwXYhAunX7EVLJpAWdU0s)Kks!dZfyumPI9K3Oja$dWMnU6SmUY zdy_bt?Z)YKD78^%2>q$1ebmY@fw^FJ1~o@Thxds$7#$PW^d!c)FfLNYp7VW_siBHJ z_YYlhI~B-ualTnH2XE+L!3!C8IMHza<+qF5vxm0Ta$xUYSYCkX@OEi=7Lr>Ru&Ho3 z;Gfe0l@0O!!?H04o9RP9Z64>ier3GmfM_{aiYp>%=0!RROr4`WW*7?3g+*o_Hj#r@ zemJn!*(VHVYCKA_(b9X>&7_XA?hw%4Dd=1PZJq$S!(2ksvp~i9OzwSv@%FT?dIQol z<6YH+27?;2KV`2h_cpqUEF?i`x7aa;o*34BoWA_75H}PCVmj8{t8-%=Sn3ODKGr{s z^s{-*vpc}K;@XJ{FqFf!&qW3DVNU$6u$J;F-(}9X$Nu`d>pFe+L;lg+yS-Jj+MU&o z&_5iB68RQ1HGB;cyST!C>aL(* z-TP30NQvAf;PY>w`7u}b>Qa1Mm8mo z9mq%|Xu>l1%0g^NI1rTAnpa4gQQ=*rg zJcPz0uioGauz8S@9R1tvLGkew-?%iX8kZBGA8wVGEBPV=;b->Vg!!bul@$WcQD@3N ze#~cA7iQi3xk9JA?#_C)UqBTFR)Bc0oy&mf}HA4Ie`Mbpgj zIUj8X(x3A$X6*H-e5w~qN~$|G67y&)ZZ7OAtklCn&>a*FQW0QQwOY!KLPhOnX&e=6 zM@db0^WD9F$*=L(bRYZ%t`u{9emCc_asv?v1O2>8Eb$8RcN}Ttcod`s`<=He9Kuz6FxqMIsEHGU85S0Z4by6 z((3z`v#Ca9@P76}uWHg;JPR~KUUfS9$%+Ta??0Vu|90{{a(Q%gM7N)mYa;GOi}u+5!W^S%1oxs8z#7K-!#A zz12L+nzvhC`A1V{=j*UAeC>kccDn9cczak8WWG6k7MQgOi}tWLy?_Ku>koc~dWfWT zE#_~uvTEW6itH3S@0RR~-B;Br+DKGxQex8kVzIXDPr!Y`X%?_`r>nv&v|m_0tbZtb zjFH>#S#!=yl~)nNIUy@nn5x9_eLWcuB{edx5kC*e{aqU6^&3m$f#ra8YtFDQ^42Tg za0@*%`fiKkkzn=M)nW108uW**FAD3k+`2|UYF>xd<<723`}kpj*VpqRgnTltn9@hX z8Il4ZCoPLB8;8;8>G$}%MY=__xuSCa;D!r09Gi%+7z zYz!gZiVsCfmlf_UKGn1nx_KEg2sop(AJjR%0tv7HSsPd#j}C|K)Pyx^1-|vLY$w7^ z??|q}<7mgLuSlXT-LO~uijKZR#LE&##0~u;c1UYhvoBtCkdlLm7X@ea8kRm>(Q;9J zoeeGNEDa9jDtG;O>&sPDJ-92QuGO?Inulu;Ra}h(4&NN3;57)Gk`aUk<5OGj0Sad_ zZLh}OL|$QC3Y4od{%rnKgA>Q4dA78s*Y-BfQVh& z7a9R0%wDGlmK4DRjqNAq?+snO>){B_bl=dmEztRxXjbyVo5@BE8>ME zp}$d;yl`|Bd?F8lrPs%rw@;)J+_uzelz3c%QHQmOwidI<|60A)iU%O<&j)FLm~iNV zMn4(C`YNxdb+PVQ62bs=b_4Bn{&snO;nY8`18DP6FP@sH8f*VY3$Xi?88eUKXq(dZ zOTCR8hSFkE3p96M_YdP3JRP-=oNkCTOl*p-({CIGgz}!QUS=v0US7+GgfSR4Hi%?sK(}J$k|PEDhTR|T zX_a%h+=Ae2JPMh~$h~tuM>vNH=%BE%0>O6>L;4+RqSc-?4@{Xln#rn-!_Y%9nn}-j zZf+*rCvDTeP)oQFJ4Gx|+io&h8F!VJPRjKbgD9wTD>51Wxk7;(ef`~%fcO@BObEt6 zeL*)WiLa*ONlHXp7`(dtlEgrgc>87)t(|8pN_%-EfbygiYa@uHH5lg&o<69R8QV~d zS^xD&bI2cX7{nf2@Ur?D2R^E-)e*1nbrYYIeyQo}T!y{WUG}aY508c zX1vr$86Jg0DPzbp{^8q`0WnKFY8W^=tP9<-?nXwW#j1Va3I*oAOJQwk0-M{5u_Vp? zk^C@TTDX(8rsFa-uLbHzXbHu|3l+nD^6Z|VxNl8eNIUTlhj-~1V(C;W&^E%>$ou0g zA{(hG&(C9>wOmhaROPXM2)D&tZ~t|8$RDEBgWbhwDWy~!Sq|W%EG$JUtDX4G z)n8mzG?O9G-%3Wye0r)hb6HFlve9L}>=7_g!OaLGhkK88|g?Gd4EuQ8&Nt@-fvSx{1b zUa1RO<6D>n?Ls&;QxS96P8r8PR?5c+u;|nw+5yQ*B;?@M{RwP1ruP)~@!@jJ5|Gny z?;Kk5B(Dc!9-8Ct3VWo2GEVLIWBCGkQv4T+$}m;F$WRuJu~R%Y1-s0-DDq%Tj1NBX`pY= z9aF4Zwz7v_lg2CZkQ%IkvWyGF8g_unmwO+^o1*yp67$Prr3C}PZTPpXQj!ZJybsCu zB5+*=Sl0d*Tg~%79w8^hy^K1mS5pb7`C+7`@v0Y!Zq&r(q6tC3|#`l=iCsG*WyS=jG8TDcaxo+`7ko+soqoBZbIQoVu`&M|l>_Xmu zan4i6`S)Nb=K8W)l*XV}f$s3XdLl#cyexrT7z`ZCs0o`=N%cP>t&_EVTi!<@{%*j^ z=o~WYb(M(1?Rl(fI3>T=H^yM7MT>;4ws}7day?_J{n=Dz8Lx566fCJj9E)qOy@NT| z)Ko(DK;9)e0X#y?+zdoB5UCxVE(>Jf)x>XRmuw~h^A6SR7)0-+i~D4C!y*rOs@4De znel3pAnq-jzqdB)qA7$G&3bdX+aZFzRJPGozvfZb^EF{`m%hskmDl;MqY2IBGb7Hn zJQ{$X-FHNi4XDI-3r1id^$i1M-^`G7K?1`)w6ixnneJr6($=IHmxjz5%Z}@M)U0tz zQbrK@84O)0uI4k$N}yd;Z!A1bmQnyUGA5`eF5u}H8$XUuhmab64xc>R>6x7SRq$1A zB+1WUF^~!(SP5eD)i$|>v9F3pZO}$T$~?^-B}8{ma@@U{HQZ6^TRIIo<8CG=egSOG zxG|F%w7@CDC_g;Pb%dR8xc0F4@sirL&ZY799(!9iug}eYu4Zr4zcE)rO}hq+UAd2q z&7;M}Vq0JE!JJ9LgL!Rbj*`8(`Hpi%+GIG__oh^-*u6fQZ@+aez_mmo>(}D*%VPFZ z+2G;WcA5x!9(Q_M2yTQqpZ%oI<3gh3$By$ypJbWEDlrHaesy)>XY8@_8!d_hVo<_ap29}AL2e;gM-Ot+ zB_g=zI&E|F>0AH}@=TG3uX=?7vMZY4!(FFF=K}p{Y?#YtW2-(oUHKpTtDL*5r*QeD zI{}NUKd=0MY@(#vx0ekiuO_xNac`3QNnm>>Qwt^!((Qy0wGXrpPEfGM22+uJlPPb? z(Dx3LuIk_8DLtLuos>_hS&Kb_#~$)U6?nd`D?9IUqrc?q6pB1Mz=uI0C;HWM79=CO zXf2?M-kaJ@)>aI&!xtGa@sPz;xfQs&2tN>&!+ynKbRgYQ#1H!FpGNM+kPbzJ71RG^ zxnwj5f1f;r=uK;zaV4eF-t*M@6Ex2+6;I(ck9GV2TXSHoi(|BZqcnK86o$F8NztiS za;FGd_SVI(=CwLH1+!ZAe(7RqLJa~9qOXHQH;9JU1!ya~# z?_Wy)428gN9fce7%$NVREQvDkGjxU_D>NOQ-z$pasr@t+DoVh=14V!htUJTCk8`D( z9#=Q2A4hS$o6U7Up4q=A%si|JS5cbcOPmFrF`H zD{HraIT)cEpO7j~6RdBe5%YkVRl&mog;inPy`*gbjh2hVO6o=(28*34bReNh`Rr-w z=~D^BVybQoBR6=O53A@(FGoc84rDku)x(PVH*hr~Y@%%=qo9av+3*alZL>Vw8hL%f zKVB96@dmXF)^Ay))t4sgmy%m=1Ksdrh!LJ$*R*c|NatX81Iep}2);1(t(eO&^G8Tu z>6y2-KY#ekha3P!Vikoz4N@$i(q+H&m%kJQUS}c0($H&#=Tma zF@0J8`K3R7SmVKs8r=^DW@TodYwJT~e>!Mx0)ksr=L?ykb5MVnTu&jlgF$)O&naqe zT}ZRm39Xh zN(dLUP+~8ZEN0nVABY&uW7ff$KX2_y5heFa#nE!pfh^H2*(}vK3o)O`whQ689L&+MNP;rG=Epq z!$%JH<5%s6t-||ZjP>ut;Vc#hlGj#1zi|@Jll68++<-2)|S(x zW#>`}7!u^4N!cI{-OQ%bJLZVS>r+uVv<0_Ws~c=-bku5h7)3TnWUs0R@e15kuIG`9~AaSK)7N~O?&R`!rd zt|Q4esx9xQR_3>@fXO&f@^x~ep-3cYOQ$59FYLC9NMl}IcoYR zh^G3xhoHPRx~=NobD$XXk{}W{PHeH z{W!&G@ePwIAXIHARv8H%H>L0peUWS8@WgYCidi-o+zyZDW@>wPO=o7t!aww|r>e@2 zFwB1ZLxJJA@+ceXGcq@S74BaC0sD%<8fI)Iat;Mb&p;UZbqAB;-6{@IhVJ|M2+*yn-9f=Y>YoZ~VgRMb=TuX ziP)hPXJ6Ja0cpP}ob2L<1(9k7c^tlobqXQ5pcNkx6}EY*eg=|@XcHbE+-=3`K|bQ% zUwq44ckDEbf~Vn|r0CQR4D%HeX@Aynksom49=}(4di^OW0LB3NpSP!vFe~3mfg!VH zG52fJ*^91HxVBqK1xZd2AOyKR*`vuOpU;dJ?frm`WVVa#&|g`uC)OfE19Y-gL$bIl zw$b%hmP7F=x|rx0PfNtJ*m~KaRQ-ZaB$_T1p$UPjE+_irySb(edtqcipDRZ>z`Cd5 zfO8_>{T(`@E&;Pq*JF^-v97pKRHx?tq;m)Il`b9pF&D>)wQ(hL^?>M|uM6sac;i$5 zI-l`MXpO9WG{IxqqWef&T~~SbEr~6>?b5hOITvurpBiS;-Nhnb72_ZAtg$bisi@zO zvMjzLmT$DptAp@C}(R)sl_(S9oZj%U!1X6|TwnC#+@R6~}VDx<>927a|wYAC~ zv{S-mW#^E-q#0vCGB;W zO>o^A%^;!T^JY@6+}Eu-a%2%F(mCU9uY&M=i7a^SZ5{2V9fb*YZ&M32Bx()6{w~#b zi$w-x2h;EP%?z)EIe!Y!WXP{5_V{{)()y_W$7gjUi$KKVl7IkFC<{F^a`BBd1~&F8 z4cO#~4V2XUOnOz&Ns0>syG2uMSzp@a$1APCD9k4q1HKZ>oVKU$(t)5B8k*PC15G(7 zGehTcIXO9jw;8w2gt?wfbIcbZ2E+iTUODNCii$*{SS@SVtZyzIcCxj!T>k|H+fXx> zx)n<1z-E!O7yV0%ZKg|f%?}0a0w%Rftsr0QT7E`pt{;B`F+>eB{50hEvC3phQJ0za=9{veY7c-EFFy+#iPV6uGu8{yQFEmaT1 zB|kst`W=LQU~Xj5R>p_;WwaCxwSQ3vf4&$B^dt`RDahM1`6D6r8qEmhUk`z%YYzL5 z|N9>r-AmY;k3Z6jszEJ||M%Db^{LZL;M1LE3NHQ4vHoX8+@Eh0#bltu!g3T<%MIe#tW zE|K*#h-z3l%+52RA~E-b`2tnLC$Zm37x;!WG&Cluw;sin&JQ2|zUM#2Vl6Dk@xi<) za(hk-h%>^HtOW5%;1oODV5*CHhNLo}WT6gUaepz~4_k4Ms!>yiwt5OOfllbzh;;^X zt|(VT5WRbSVgB!NxMU$UylFE(pKvl7{?XEITl?c|>&)n204HglCkci30L$)6wn|9s{%idWH zkxR0?3_x0Ho8es?fsZDVSpjkLgi7T3D&{5_#;*ql;>no^DUNcoD!AFTS(wBknSMqj zW^a@#73$b{bUL2{`+aNJ*pxIeI^RnFE}DPl_WxGx(VDLF|K}Y2-;cm`63{l_#QpF05a|Jq?aQM;4nlUmkjszdwnfh0+s@{G6_54p zF+yBv24Z^zz> z6Dy&__ZQ%!4d97v?kP&`6$!lMr|o~Tu3|!INv0OA-JuR0sc)#^^7hf}h5(EHK~g3q zFi!Mz#sU{Q8oVY{I1Q&iy#Gthk&C^wG7paOlO(RB<{wL~)rU=5wQaQCh3Z zC;YSVMA$81GW%I1+#dO(1kI>#PK2-OfzCsNp6^^W^O%~{v)tk%lpdLiiiIy9B1R!rA<^qz~bk_ONZ zqa#t}8?5)_4qDk3%dHt?U^ZDu>d`N!_FGXk6Ty=G91)%K3T2q@&bY%dXvfuUM_K~s{ zP(9DSEXFV;ujNbn5F6R?dZN=vCM=Y@xkt7fSKYR(-+u_l`HNIf?F2JMs#O_A(;iF1 z@?ruRVn^w3La&Q7ASiPp(cJQX+#DY}a@DTcu#|-t?~KddabzT8u(l+XBRN0W&G%F3 z=n$aw|5%#()rF4nYO+%~QJZ&DU1>r*=C&PQa(g(J6^Lp5QWeXBUN;y5#Np??Dfk%R0gyG3IKa#%QeV#0Z8Lq{uNHI3T z8tBKqU+e@RbqC|H<^$GDm51M|m$5$T{Bw#s9OrAzWmK!Q7K*R=w8j)dc48^>a&>mjo`R8MQAM{sS{wFL zIL+bg7oN15O?!<5TF{9-ld8YJuX&{73CY?8YGCwelNEmgbD)2gCT?X0=_xBuA3`{R zyJ!R79MFSm&lbX#qASf^OVzAV*-i`+?6;gPpwqbEK-iutCWs)_t~vC{L6*~nOM$c( z0_vPS8QIGt3jwhA7E43B>vRlT@i;k^j^lGCj*h2>}q&zf8wA6!Ac8Su~y1}1&Z(A&ENv7}tHKc5@vUYo?en$6GXgeAW zY0OTY`2pDvqztV-`BQ!q><#kreHcBAT8a-?G+hGd2dXpFB|b~`a;-}G()gzV@TLme zCO8|q9mo#U4g=G4VqF*N$PPVUtm5=P1>?0PB#tG9N)8y>{W!}s9=LNZ>Vx+F0Tyls zC7a&$&e8n{k!fz;9Ss#8LD-Jtog?sxLH>IXC4=1*o$ksMgO+TYe1}D9(#aDMYJf!) zWn{q)Ftsf!^Xm`8rSN-r6x8x3|1-n`spQ>^C-gq+GzAIGHf2oC$p!J6OuAZ4ajOCW z4Oly1=s`vW|%W^ z9nccP51{+@=H6UuGm#dN<52UbFQI9JIb`m+8s(Rx;H$9Dg8N74^iJV5SQH#h< zVR$OWobr8UNa#kn7bnd2c|RFEcQ7kPqmPF)`$VDyAfz5Rf^PGc&TikWVZITV(pgv! z-l&p%8tT=4Oi}(c$K8|H$WVDpvwZU;U|Xx1Kv^sUtRaky^s;AB3UhXqJjGTqHR)98 z>=eR@2{j1$67hI9I7oNeDs5i3FUk$_eovkdAs-55Zp|L5`2?19;7(YRAqQ#*T4o)<$59JBYGNE+dTDqu!d;>t*B@D)!^)=x)zNaJ$@hxMyhSJM6*zw zUw~eq#&BiLc!etn$4>inUcc3%OB%0UMNBSf7}z-GZ;zPr8~=DP3xF?94z++iguM@=rEXP#{VEogjC}?y^kRPqT3=FApvLS(%7;=HCtOZ1f-|4P`5lM zO69Upa!R$V%;8kzp@fX)+ma1SAnQ_o$Jkde)!8n~;_mK*;O=h05;V9=a9Kcb zclU(_0xaC!A-KB-_l3K=bNTi;`^c@jRre3PRgb+h-P6;9B^VYi;p5>B1Vt=#bJ&7> zbnpk5h%}JpoEM3FFmt9_cylOHFo7nfy0lD8rbf6*?$EW?OcdAluWF z2M{F-q4x;X>I9B-loqbck+=k)e>w8*ek7OsGXD!JerW~lUGlKX!}a2uUx)~ zPq@UGnYjYCC@Kt68`PumTsS@!G$uPKEVW5eY#ePkTN*|k9`w5l-f!Wj)YJHP6f?W|8oaO=sxbiQi;_j z@PERQORSkMv4Wup)%~$DLdr>w_oxjKqCjqH8v*2>e;X?BLM00Zm~tf}p=gEUVz@IW zC#Up-Ou&`sYVQvgo<3CY0!G_6UnQOdLdH31@jEf@FR!*9wEK=EVr(dBMHZLU9sB=; zdJJ&Jj0?09o4rY0MakES%OS;||JEcg%I6~!wx!@ zlG<3Z!%vpLe8vgX;+;%5G2cQ&3^S}O97E|KrU8U3@l5y5AFM~b7>05e@xGo3`m9}N zEiq)__~IaaC@U_5H$R?#FmIyM|9bw95jmd{mTf(2I(Ui6fksnqEHYw-pEMU@_`N;e zE^OgR&dF;K7RE-U^MpYbF&Q(3hzcJ4;0+H zNS=e$uxDm2-6g@&mMcQ%aj4tDueq*?Bfhu*l12Nf&^n)vw@i7Fk!$BLy(wsfJh~;& zY;(o-m{B~%MKS7RTu+WcXBYjs+pI%8#Kb2gdsRk#}dgpzaaRw z&lGB6y6LTV(c4ls6q|9uxtJQSTz|TY+$x&bzZ!R%%N;e|g|~+=Jxxj#ZslQ&OKlT2 z4_VtihT zK2ipSb5mo;|M@qImZ&B{l%)xsHn>Bai;Q;<>|TU3KryZz8Nd@B)4?(i1hBMdRzAJz z99LU7Ak3`BmiLXh2>LWoc8hmy-`rq0j4jqB%4I!_caK!Rm4rjrIm>g3+s)VWEBVMo z9o2rSUCoWj!?JNQLHMcMXl)9qo0I$S?I~2#&qR|Y1JZT85MtP21M+nV7t>zYzFH_( zpA8L4y2K9~uH@V@pLGf1R+vlr=^jT|e_DJ=<*Yd})$9eXDAj^%f<+u0Je@DpCpdK` z=&HdQiy*c@o8_skU6wOqY4j^)`)6LxKllak^-^6kAd*`j^nZ;gv77qie*w zyu&{itu_#8?0@5dvcYsK09_;_4|BzR3up|4^MDes@N`e!s4P=HFpHpwIX zf1cfca+&{ntRTQguG3|u*z^A&RqT#FkjNuGB`fv6shs~NWd46Y@Ig)DYIt@3Uyl4m z*6ICX$h*fcE&Dt9FJCTgJ-h_lWAgsUdg(t+{R4ld5@cyQj`P|ScC}c?65a^L5*mu2 zAZsc8Ac~V96pKZ9wK57|y0ROY)>)q(CYJR5v!=C}dk=n?_n}8w0UVGTIijqpOd1(s zdi=HCvWL9`r3T)Qy)w#k;(ok8)Rv84HzpCb5+|%582Gr!mJtmpZk)B9Wqv1IIpq-OYwE{U2uAshBDiRwG1K=T3DlLkfiOXrAHGC^diba8P ze~3*(u{o!TT{=7+*fi*BY~+DU_xHX(c$h?(RzlfhG!uK~@HvSEQPB0nh%unKq(!s0j3yd}adGttPIE>tGzLS}8zX~__ z{B)9cM!1k~LzHBBaHA*-TtQjqr~t;l4dhNw`bd|G!50(C69@DZhuM^l^Ztqox-K=2 zYyC)!rd`B=rh&~V!z#kSslfPVmJkZpb2?lPfT6RK3X>vF7+5}3u+UUL0cRR&(D-@8 z-x#nf=(DWvXaB)^j0Eow_p$zQdSViG_=DA<^$*upOotFL!SC@+21;pRA)&fCI^)K#7+H66LFkg>@`wHS)=CV7n6(o6O2TGAvM&=mahz7?&z8VM-zr+VC5lXr zEDRx zW}ZI%HR#%BK=MDDolE`!o+bQw7D-Ea^^CH9nT;I2Utz|!6=AR0d@RK69-awL4%dpoGt@DEd zdZRbG@3*DTq*KApzwvYVPb7B;&5jluf*cD6mqp+r6MJyfadYctb_=FAmuwy+jOYnH z;f`FSeyyCv) zva^FRL{7o57ca@U`zUB*mO&Y+m|8_PUoXmnx_!E{+IWk1 zqJDf$&B|D$e?@Kl%XtSQok3Gf>a38u^rjCB0NbHki+2qY%CNCxTDNa)0j@=zZ10wN zCF1OGTl!NMIm}fRc;@AE5cVu@xnEHK1* zH^M>Uso|=CTO91v@I-D1Hpp=MmEOW3DW@({4~6x;|8wrimvmBvkE)2{=aJvZA#7i!08hFs@y%(D z1(TlJOskhsHC!(P)EjK4EgJD~XFY+=F_UiN;esw|&At(uF}rciabIIYvmd!p6E^kN zwEPNokF%{mtiZ#kuA@ks(}To>0tSJj+F3f2uOXeu{cT~BeqqI07&@X*do}3Hl#qD5 zTwyd^DxBW^x`FtVBD0JrS$8==MCd;3(F-}g6x;409z{btzU159z*tp{_)vtO%L39k zBk!Ae_F5AP4D_Dw2%udKK)|eYzMD>_lH*1g_VbFd3%KT+dbeUs19wm;qv&{oU zMXxpp1@^;cGGe886;!0ahP7f!G%Rr|x60CaOKQ&g;Gr?Xu7Z?4<(eH4R2u;TMjfe& z;W+;9n5o0v*ggpY&;=uRKGJ*v9l)B4dqs#pU~?yWIuay*P8C-LQbp9oB{y$g-s{j@ zNoj^eyZnmJ!5S3_SX*Xuyu3twv&QcTiA?{MbhX+4Q&4shjj}r%y#94<-mZ*uO1}h) z0}ZzlE*7yG2=0l4$zJ~3((b_LHIM>~Oj-?^bS&!66Ufx}HkpizS2fy4Mr`2vykLo- zojxy~N<}3lC1`;EqQ!o`fG?}A9%zMcbjng!olR_{H1iTsJiF>lnks7J@!VN*3mfyu z?rQ&f2Dmv0spvo#lEvI53#^ErY;a*_2KU7VbUN+WaS}sLw=UN7zatAh=3nu_WSJ_P zr0Ulqc(#P?F~^DtRyXd-$ylqA;@#~b{J%wukL z$q(A;A1J$53~hxxo2ScmXfD5qp!#>04%R_UVx>>zXIQ1#!PUcmqca3~ais2oJCAKw zlxHJ!k-@E3NEpv$yFtE354*fJ0YA)f_Q`d9u!dW-Fke!7C1Oq6QYsO`k=eG~L zyOv9&1&i=$U9Xb<1Bm^@{QCS8_6OlN`@sH9)Cnn>(;A)t!-DW+7U(Y2B9$tOs}Y}; zV@4U97qh9`7jnM6RCR#w`m$qG+XICk@np#vhvSo6vk*zEOmDL#HQVqeZCuY)2{XL? zMoWpVZIr6if%O_AChC_>Gj!1UH(RsgX`ZNv)17w2A1;4p7$3%p%Jc&DpOj+zuN~Kv z(=Fx(TSQhoOvWRw3pejE%R)-XSTQ1?mEIv{qEPbU2jphyBVlKqqEXzAJ<(ZzJ|zz~ z?JlVS+|Zsv!@&Yi!#JDU@eo%J<^?4IZhK8p7~>u5UcvmW_tZjjN4k07`H~i~UK@tk zg95dXsa^E7r@T3_jjE-kf_qc%=%7fX26|8%t3J5p_wNpX!50 z?n(!4P_YYIrn__H-N)o`VNU_M+R7Y*G6v zWjIkNTNj1OaQYTEksIQGf&aiEj*uUTdRd)F`l{Z{7tW*pSnbDB*E!22^UB1*2>rX8 zsjEhj1QyiT+q2SH1GQ4(u-`%Nd$M3Kf#^?lv2em>a zEcBB^moNTIUc;_^!`AV=t+PF8-njU6(GKgSRqQ?{KNNV1)!OL+xlb5`hRY{)<0W6%=(8^@9uZNQL1*c-k%F$ z0ntriScP{UtZ$H*H*n%={#%7qvxt=v)U{^esbo!c%u|MzhhU@&w3{iDDQt?1I9w9r z!b`NVvx26JO=VprnSLjzt#=uV#iNn1Yw<|S@I371!Ix!CY9m(U=#VN1^mu^Z1dbO^ zl>D57VKmgq?5qgQtXl;xG$-9}b|DYl1h-@w$&anCV)zyyX5_V&U1OPxlZulh7ku!> zcAA>ygB*l}(c~+k6W{ksCR1>Ckn(~Z$EH7@`eH2tC@-OfJWPSdqi~t-s>=)Gz@~p?#Gt|6K^Sg}V_||Mdo$!b z!vgTkYyA0}WavhVW3>V#JJhA(A02pih#G$wjvrCMRoa>G{rM9c;7qr#aBM>12grI+ z55c|$(-{^qSTc6s{M8EvmY*+AvBZ@4KsLGtaP!R`On4NDNa~Ovz`rUl|M0?c|KK~h znH_Y;y+1PyHcl$}7p?Frhc40euUAZxwlUFRX_Ly~6m5Sem{#Bt!$MnVE~V%#UCxW2 zkKw-z+*v$7KO;ONdcLY`lw2QTx~qE<5w{~OGy|VCa2kYCp2Td!g++*2&@EO)hKP87 z1>b-SGw2)pKR(&U;l9rN@GGto2-2+Pll<-yf$D}3hTv&=DB3W1MXjXS@M$Q3V9Ug* z>@ukhw2g0U#6QP4tryk!7G|~^$KfIm4RjX)k!MG;6M$#RIt$nJQTx(MrHfYzU)FjT z7FmnJU|Nw}sja@tpulfw?06SS^To)TCpwtC$LoYut_6?_8>RLOn%v`Ie%o=%>6!og zimdoYfl(u+GJ~2fo^ep%(d&+SW7`jZ3WAu|n*q@kPwZ}RPX&W{AdBIi$q<3+R29aIr+b3C++{l-BMvA zyWGnz*IMM-F4vxVUPjX)m}DSAeUz0@ADOAk0he3{74QAdk5j)q*fc|SyEAOHGida5 z4BH}9SZ1e*Q+$K-3BdWH$D%tu8Pgs@wmk28YryLH1xMGDYqh0um$B7vl@E*emJ4vl z)anweJM$~TTpE<%?h0WC@!2-tTEYYw%)t(xO{lcsP(HN8pd@CDM?6Se;8K-T4?EC! zazKOu?28v%=7W|-8iR+`w|)a4+8bC~Sw;DoCqztg7J z`muo%wmnD|lvho1%Vk0vQ^ItL2_d``AsqcM%b!uE<~O^heFE|e1OYObUU7kL(CILQ zGm%5nLyLKKW{eMt7c_Xy?5?Q?B^hTegPrmw6RjJE-$h$gs$Hvk`3g_LcX9Mq+08Ys+mxt}gUP$Ao_E7rBhbp6=)j3uH0B8pky8 zdz_k?d6Sd1&pSCmR1QgE8 zL05l{kDJJ%(x-4HMs;+x$1|R~!T7?G%?r>JZ(N*j8s@W;Ee6J$yOnKqjrkKXkQ=iO z91k+ADqUz47rz2#hHMt*3cJqL&UBw6&6JNVdpGj}r%C3rs=mSL1SMT39+~WO;+UP> zrjPUR94R(u)1|+dRKIdUp~(_AL|~X6c1E$|Q#8x#1_xR*UVnR1TT|ITb}5v`*pBWR z5Oj%UoWV@Z=sc~^)+of;onZ1NB9)iZ7k(oD!x2RjH-O;mdlfDBucBLZK8XUDdX7+; zs|&V_l&WW&`v<+<-XF8@i#N9zJrpv@D{Vo$6L^|zxxv5(v%_D#y804bIB$jvi}<$o zaQB2;kDO99$IJJ5cQ&A1UJt)!EFqd$JFAP}G>rwpy>4qF{(-LbWi_a!-nS)x#zfM6 z7`M?!3}_Bh*>lt(%()MwCzh+3bHebG29N4ArCB~ zfVoKKvQ;(vE(rfiMO>r@bL3?{C0>DG8%9xym5n6=dl#E$?tlXvLhX6lZDnB%Y-pVS z9SFyk0jZ8D&OG6~CojUG>;FJk^%zT$gNozVn`8ZCIJKDju<1gO7Qv1_@dPnFbN&~< z=^{g&qO654uPsyGI0rvvV!{|o?Ib0y>y7LwsN*66X=ULt7A!QI>8{>|BNtkd0^`*B zGJV_OK98TrMZtm?c_U0Ky1jI-jlkst*U9jmh7YM*KLjhuk##9laU*x~iUQHxv3CL} z0F`s76O{TIMx*NEx8gfQNWva#{(#xRai+NcPi?F&FoDAj7e5pBoh^BvD3%1hdcA2|jl{=nM1G(*t;J|j#v&eNlyfC& zaVyMtAod5GaVsY!`La=be8G8NZ9Qg>FGtt9s@4f6O&WShO6(n(Wv=^?lYToJau$y~ zdB;Qi-g(9CsNO>m;SstZgPoObQ@i3q&7xm^r)_2_$*PZ7+T{D0b@Rl21TPX ztJcx@u+ify-+V&z}J|&pA`38)l0vv=KAq0xH%-gaPr$*<7fLu z$RqC{;;*SXGH*yMaDMyCA$M9lQq6!ypU9nE;apy`hWFRmr}nc6SL1`)XtpaRdFmR& zuvAuFGEa2do9rszl%1{~`5Efu3~W&Uffh(7V|!gRVhpNra_1F-ghD2oq4x0KS^$Wt z$F9^@6in#>rPyAp{VV^`^)bJOnQ>W8ngFpZ-xyN*c)7h*FO*9Jmu%fb6h7ZD(-VL# zZGIz85^Jf?VfE~rfHo8*fnqKyFP^q6fv$`) zb!k!T`cHp!!R|R}Aiibx#5|2q$amyptbl8{!sda+iey6+;eC2cqa$jP6mL+AEIL`ZoFOmb}mKGDaX&uWxJaqp%@&d^16Ta}HJ+k~w!lyRQ}1Y0@dO_ldob2~6w}dBhk{Xm@81 z)Z=!8%J_XR=|J#IlfWG{xeOF&gMW?RJDcT5lNTqO?Mru80P$mQ&*Lz5LyKApn8+{r zLDcj$Go|Vuo=^;G<#gqL{q9JY4%GFear||N^+wxMG|Yde=<%yMN2&d`BTf`Q&r-%V zY1%>9 zxQ7a0k`kcFhHopp>g)2$a_o=fq)vH~H_I}&Iq8Zo@Rr+sv;U4`nW1l82=Zc^r`A9> zUh~%II~AX7X%OyihDQ80;N)et8|#)52ZniNr%r*<1G+`o2{N2r)>%3dBK<8WR0QIw_P|(GR68aJ=sYr9ZdLsH= z4uT9aPrpz(yU?!l!TV7<*1v&x(eLQRDiHRuuced6PwD(R8T`>+}KVrXcdf>6umjzAJdq*m8zva{Qag9Z^|$|%;a#}3Ded^Ya<9-K{)rqGHc_GJ9e>#VW6Sdc1{r4wQdT zkY+Zubf&ovVWd8a)R)?a^jWPi5{f>VC9D3=0u0GrofAT+C|yVlr+nS_A!l6YWfm~b zra@-Y}G`XZ~}@gV(J8+EKT z*&d;EK4EaD65oR@g#|i>V=0lvn7JW?i}VKE{gXM$}?`5p$8cr zU-mw>Do{##O(iRve4YH(d6bmoAD$D85l8w0(+3**)2#lv^#Sf#y?=`ojB!4^Q^5dD zx-uW+c}Rf{B(*vH`D4YwbcwA}GILcUOzy?-&z3|i(?Td92Fo>#(}rM^6IOSB&VKk` zRHK@nJV_hmC$DGA8*{lb^!r9@BT`4>_X<_(hR8~c56phB1fN|~iI(ft=WadJ?;wUq zueWKzYnx$Jl6!Lg;HT>#;i_g8ESYJX6oaa`%X?(s_rSIPeD z0W2AX)V{a?4J9IuN7`wpoieH0uXH(cDF%^S@G7Zr?;=SieB6JpeF3u16Y)Y zd5HXy*LhiB8ZS~6o)h3x?`vpJpm;b0fkL)g`MyTuqD$yyCnQYLC;@;XXw~MeZ**DP z=vYp-sL>~7<#~tA3hbEW(RoZQBq$B6cTTg^a}QwfChIldXPI>1R>33}JTcZd+nB^`t z67Lu#k$=CQh`wGAxn1^ul#vO-IFS;Tidpo`)`JDHAm{KT)gWwWw3W4x1s!9f~^2@jFyH-|idtT&(d=x#w0?<+g zzREQ%oEF%QTpBC&EubfXbdG=Py1e0X^eVwp+wA=DEL}ARE(jJ|eLbW>qshW`pTZ^t z%RGJ{^t8_1-`yR}ew!ju=clWtEE#w~<(Z8bp%Pkg1o{PjnhtB>3uCp+5SleLUZkI` zE;9KvYRvg52x?ur`N0MlQiYWyRvsXG8*|oCkP9nC$H@EaZ4p1F;*%mqN~%n->iu?b zGZTOkLZ%ty%R0_`Q0v*U83hCCa7fhfCa8#1%{r4xW^BN#+2?b-x{`z7)|e*mQtnW| z*2V|hiG&G>^?z>&D=060fc8k-P3=ze;r_GQ@rSqgZPR_#FreCdu}T=j_mE7lgrh<^ zW_CFg8F4J4&uI(Gw=M_oIhF zexp8suB(Da_Rr*=z{TV)`>o!H&-U1-Q7%L=I#yLwwXxkP!|I3qSMfV7P<*~;F&Btj zzX6t|C*h}6%oY)lkD?UyA_JH46S%3Dhs$Rzg@_T^*BeTMZq-IUY7wnnwIggO7P3D%of|UnG{Bqm z1#sIvNU5^x$rw;M&-n@XeF2$!HS92kOG`1v16eW(>`^8CTVDQ0pM8IJlAuToD+Da^ z{I(KScOMPj&!3sq2T6CN-q7359#F+sb)`LLhjNkmQ!k0(c^=Q?u3FXy{;5f0=CkBy z7SsQ;!aJS9J zob(9$gX)gK7Od|3o_CLFsSq8i^%IUC!qyWEE7f}XlTN*PgmC5~=9UGe3u}U#j6mn? zW9l%qHz~KMs0}{7cQep;m|FKST$}J&2r*DEa0K0@z`D_2D1t4X=IO*T*Q~BAhaq%n z?d2kV=OFdO7zD1;6@-~_rSSX54MD|?2ai=I%v0TNRhz*>Up&_$m@ymaN{c{U2RNF_ z70!==K$~}`GqP@vj*NET^1 zoC9SkVDG2&1t9|&kDV-t{AlBcVGX{W7VZVNY-X|HnvuDW>28r6P55&&)d-qs9VnPF zzv_l{J(d%j%XStIcAUSpTo{yjXwl%eRy)P0_m+zyM_$@e;JXe-{B2)fK&am+i*cPP zA23m&pEmgRsg%)y1i0#Em(*XHn4dKnju&u2KeW2fX(QKsp7I#>3r&FJ6Ob#eh ze;>7cO{xT1tE*SzPWp)=En|;ikn{yd@GUHVQzm*j5`WFv=PPOmbtCU!`vLZw!ZEcQ zB_e+dUvNmP%=R`4Fth`aI%0QVkQQ;0nF^Iz4V@ut9rgZ;FXJ(ero2%ImV(>C(%KY) zx#(3YH^H1gTNZ+8Rykm%Ps22F$m{Xn@&x@Ey{_~&*=?`;We5El-GNT$P+%^|5qBff zAg}gK?0~9i&CXDxDH+*Tys83}kMBap^;a(9BbGK>(^noq!pd`%z{AT6N1l!h?3rnr zy4o;|f4;FC3ma-8yWo|s8Q=P8;SYDrP(pr+ZNDFcUPk(-XD(u}{3uDJyDn%<)CjW! zX)fztO=2xo+s=79%Sq{!D4u+qY=}IF*dtI=sB5#YmYMpbzpk&3Mes#*Ly0Q&sA}>v zjCcB_f+DL2b|?vLaZ_?rR-&#dt(yN-pqvnjs#Wn`wMo$$b|Oa$vbAc~Ha?4X>)dc& zXU;4lUxH9VWCXp~bJDN1OI#_5w+VZeF{p5zJTqGP7%iWB0&s>1llbtmk=UP2Z1b=IC3mc*1f4Z;Rt;Q!u;#dS@r$XG zmME@(rK^b{dh=HGvi#sL=igTdXk?d!7%i#V2nlXy=2fhg@X2!g{WY=AHpRl~LmE=6 z92(=)ZOaqFuk%N@*R$3-$ra0`>7^YZtm(h;dGd5gK!_< z?1k*jf{3%=`s}>Cqufta7i@$c7cV+olU0Zu*W+DmMEH#d4j$7l<(cZ2=)URY5Mnen z_bEE;z4~u-&HbeI7Wh7R8+??fC0b_T@}z;`8_qrlRu&40IR&aSGfGA5iim=upv#Qw z(#a}h3LAlcd9=6f$CCPUZ+NTX${@GakV49#9kYLLi86yOzKz(n*1{Pe z2o(b(7~-+$P_fza(|yQJfU(pxWb!|cA-iBClF3~i_)Pj*rsf$uEy6zv_Bx#fcc;7O zk)XxxB?9}lP(_Zc{Q;6=y$@#`ki&DfuN?~P7RQ@USSXONCq(nmbjDKRXVQep{z z*pNka_$M&o==i{BwT^9Tz&@2ADw6)HiB~0fv*CpBD@an<%NBk z4aG(M2XH~}i>X2u@es`xx+FgIy4&C!g;|28Di|~Ah_*p=tNKD7JpGr=3(t163!{{o zKPlD}yUhEB0shmx!F0<;DN8j)^0LRGbQ))DLXj{#d@DQ1Q#4|X@2rvBl3s33Duid! zStekH1)4O^le+|tyX=kb`-NrNDfc$Q^sf>m!(>JSwFX2yaU>qFW{!(uTb}Y0c%__? z0CyY*cM||HM~nFz*0iB`MkFD&GjRh+C5<&$2usr`F@es7+luv;+H5(@`A zNf1Ti%|AIqURy>rtNHpf0m}g0(xsH~;|75Wwbr?9+}>X~EDv9p(c>%NpTt;cv_ZPh zpLFlRmJc^?#7#>q>hbDhoZYVgv6m3}q{EY3+Bbl}A2&E`al=V$A}K4KRSBUUi+C&x zEMur!+WYhJ8yKvD{H=5rH4iv-O2(5KJ%9SCf%0S2nY^j`==}q$qJlTt2?7NX-L!3# z{P3@2fQg4r{MLzPEAAi@np3jfV^X3-QM84sdLH5v2yDcNDAYFCW^YqgIkSe|RExYmM#MP@&Kl9l+E@~u*z-&>f@GCK#2CE@YI?y} zmh_D&P-v80N6IP&tEN`(-OxirUWYBIsJmpz>oQu1F|T5Ov*P6T@$CnnQloIM{EVBw z+5}gJ8sRt~kT`YdoqUNKAT5Wua{J9z)hOC>~!x-wsJkA*Yvf8of0F>s;Ruy16th}}zChN#pH91v^=%sZ%Q z>D=9?CEX3KA{?ui4{yTM(^6-MZ);7fz{ryCWqm4smGdfO4CJK}C_-W0wSv0%+Fq5M zXAvvs@N1_Wm+;Cfwl2e*%bzXS!%ud_V3o2_>N`3_HzYKl$`jnlaUCvEE4t!`Imw4x z!D=zDY{(RI>8s^a)WECbggW@x;FTw5YlqR8XDrdGSdFwQL4&0rS*PK3Qvybc8rvfJ z_c+HI4(Nbw-Qj@_6QJea47mKT^}9UE(Sz?{)V(G-&`puR<$Bzkkg@f>eb`O0IKLR& z*$aJI!cQV+i;1*~KgpLN0}BBEB`Fv$aDu!WHfzHf4f~$vjHk4IAB`C^18LTnY{#jt ztmC#i^1uc%oo* zz*Via=en+1w1i>yEqx2_PwJD;UXs1nR8z%@IMX)?g`(1Cc3z5l5t=mL0GzZd;2lNE zroR=okb>5^-*MJH3BtE4xAq~q`cnqH*Qoqor`h*1KQ%nJZ%I}{Mmd1kQGB8TMjcdZ zVJk|$zih0G>^tlRA{FkwW#DQv(>9Hm^*U@2WYsjC7IO}IKoNM2Z%_{GA}bG1GIyEu1U6-{S;wt3l~SYMcW2noa=7St-9!Re zGc`g8Sh7^|+g*Lgg)^v5bxtEv#(a|9KOR9;_bGs)CF)bE+J$jp!j+Nl+%c)|fYaO` zg|W+06!QeEZ5oUB+A2S4$4K@)I4tb)b7 zdFc5)8&yf1@C|E}?HJN)4F+;2x2vX4rVT{6n}cGGW?LVUE9Xjb^1YV;NXy*HEv`y^ z?yJch2MhL?X9jT#UXjQz1@zx(Rq+5)GEh2$6r;iS~RYNhu2-v4MpeDM}o0DEtJ~F;}Bhd`}$23*O zsh!f?Aejmgbv8CtjXgnGNNGH#kckZD&nWRQ%8t`ToY|wA53fN|3 zqJbdElT-a(cw4T+6k-2Tde@!_QYjt~N}o)WqAYqRAqMam ztna{pWHGp_3UBDK(X4r|I}YZbW|UjS4(-S4ukOcbkm_XoeOR-Q^wPslD^X8$3T4HH z_P9OJ3oR~IOpMI{Sz=L_vLc#`Q{zg@wvmm+ClQN~DoFM;Fn{L>ytMpOGv3a5DQEzU zn$y#zLGQg*{n;7(!D}DC;V=Py# z=a;QX=Mv^u7c5p!Z}BLT3Tuz`ti`a6JmD;?wsoBuxvUbE3dHJcsSKnA&l z*3V!MjatLL7Q}2R%y#eUzxLd1@dypYkj;V-`cl|GS`HiH9J}+sbrTfc-eR&9=MDdz z43bHWrE>a~+%F3W)T&PbjX&W8&!<2{x`GVC(*+*3&+16&9jwgC~)wnW|%E2LFv53FoAM z7Tn*LPi=|EC^7!CRMtDXo6&j6h$jh;4KxIui~eQ2D0ivZ|5e9|O;6s8C%&IwY%qIF z*(WKCovSp?3*3p3U7bVg2?s@HHyQ0#>L%|^$K+g-FL#7@#MhEciwdGm0lVP&a^0J& z-*^`6I@X?+=j~TlX_xv^jg4NDUtTCV{BC708)(q1RA}>nl%_^Es3$gD<(Uq?y)Qn) z*omz}#Dau0kqQmj>aY}oDb9!6Ue{O>|MWFCL|Z1JhKgr=(hyOssgIEG(eM(^D82)Nltm-Sw>OOx${lysxrLqtanm~9L0IbA~NzKvJ0uV3ir{k zspDOY-I)iqrEY~A*y(uZT+3T{KfKd^iCp=YI@818AykPE<0bW6^@#LZg=5k$Bwuzr zwGsn&xShx#`!I(CBBgwiTD8hFk@Qoj1xC9MrB;PYzV=B?#;VTCy;>e*A$DnbIY>v$ z+HvZA^`sE{7P+0ZS03z8JH`4+)fS@uCvh(Dt*qy>Vp{vqFVaA!a;(4<`RW<^ob+4< z`yZ_%59;D4_>BX6}Y$d3(h~ePo zVaOi^?8yY&=KkgpsP__fW-uDWmRC&EB|{R7d?Zba&RYw*Hj|iH(n=W+LY2CJWV^Fz z!A(|cMh1+tqFg#SYbRc4IJEoJi0@9gw!$Y20Q$zs?ZI#}yjg=k!518T7^&)_MC1-_ zNt#VL!y6DtXav{3Zn>ZYwYJp_!2q&bEJ^Xq*suDLR-+7`JlQNTpG^6CK4V;~W{Cc@ zBsAA?XgTfi%>0;Mpzmk+q!;R#eI37Yf+i}j^&cayO?2_2 z)(M`pzCt4elg!o%_4)6do&EsS`RxsG4OnY$t4eo7R^sF;?7fBqyJCNB?l&u3bd4q) zBmG+o@cLO>wxU6h{mv;>t#qI7>$Dl@I{$Kz3Ab-DjD+)ZksJ+?cmRCsap5+hXTmdn zs$S5w;&$s+f?GVQl;&=Hu?X&fwD8A?WUnX04oQ4BpfCgwePvObb&w;T|4Kc4qYRT? z>gybjl{81HuV9uJsx(_89EfuhOBj8&k#uFy>Qvx|%=rf1sYsETLwUP~ZH%t1`NTFN z-d0K5HOa(YV_K8(j#6o4S+DY@j$&QdbC#n!V&50r;PIEw=t6!#{`}S{^tD>T4&X5jlWEp>~L9;k^cYX$DnWBoOIDaH< z^sRT(7?P!>SjgZ0>Q=FwdGtk0zH5Vd1Td4~0<*5$= z*fdz51-s`e#tR}CjKVe|lsur!n`@egO$*%N)>ZWwWoNvktfZjA2k0KD980jC-dveo zpoQmn;WCPD$>9{NpXvl!3Usx+Tk$ErLEujZ`L&BF zUR;2_r)Ig2-!#B>#vE*ME`{3aJ|t7P?tkcXmv?xYm^8gO(oahdZBUyQ4b#T(um(HtNe` z7pq-D^@_bLDuOQbXo@1vcP5j2uWW=bF;TpNCrdrt7!?&z$zu)r@XF&1#f)PLzwdtRf@oYeQ${}M^fzfm|nymGbhLncOd!dg$ zqxWP+hEywKlp8pp{e-iR{q2nprHMan=z$DLKby`Cr%hc@5dTv`$Kx#zZv@JS*3EXJ znXvFPB!2DOpsumCKZ^l6B}<%b@I6jMqcdiy6uEZ#q2>sjgqFGpV9A- zUA$W4I52+<6X-Csb_j=b()r-k_;rnZRUkdMSkq$zbEpve65h5Qa1yPPy|S6gL>X*7 zbUFi92|qmb9{O2jYitUFSUYTpM;5^v)EOTC2c% zRi2crv)-!L*3NAj+9@x6v2w$>L<^C4dyR1E$mj8x{!h}q0@$cRw2G?@7>ALM%ed(~ z*&lWG(WHcvmYJCbxhPCKrDMV6>y=$dGGX|& zU?~{z#xKbk8IctY%!mn6GI6s3tmaskI&t44JinFjI^Nqx?9n4RYM^1B{cjXfZPJEC zK8wxV-)e}Chi#WTj`Jn{WRI+)K5xc~nXTyHWu#+?K0^+Z_e^!h%j0l8F7kX<<4!BT zxZzq^YS+sk>{Z_(6}`Eo@qWdn?HynY$>fgFeEU6EF`1D22`~fvoOu7bm7MAacH zOaUiM(^9|l^IK>MsKdNQzL1`T$*hc-x!;x1F!uD(yq^h3?}!O^1m8Xa+j{yQ`M-?& zT8yHtN+DD708b>^r81gicPqd9AR)&EFiCIsen&-`zy0@-IJ75ZVx)`NrJmztNJNHY zh+Kin9qo!k)W$L+GVB@(0k+b=EU$3!YC!p$n@X#aPyO{X#$%Irh_uKLnvxOvnu0gi zPmM|x{VPx9Je(ak+06__Zj@Y|g_>Xpi!94dyAv%(C_ku*5#o<0P#Q3FFNmIcj_3W* zrhceWMUo3f^YYb@573*XN4sncP2+ek_B|TJ-QS_pnT#h6og>BnZ-f{VN@Ru6Q){7F*oL$^ay(sDH3nIJLj1_Jt3l zB}A^n>dvN0%}hsRpo==1&(neU5t=D$w>xeB>^A&kwJl3RaO_b}gaSgXZ+KA3iQt$F z4Ixhk^VWR8*t;bWnWWh$h_nHY8{>bg3s1GSFyfx!k>fJN!KZ_e0p|bT&lXTp@pJE1 zE0a={PQ|+W3R3JZA&nhq)9}%qNqtVyb%}iJ6QwJh?lA@~xR3Mfr$SWmD6P)IPVYO(Yy01NutoS$}j!)v3l z_Yi=PtwJI$DWr%}e#6wYTn&q@ft)Rc@~7HsN^?6$N2yP5cq$|g5vlC+WJZeg0nQ@` z5~dc&e>;qoOAVg?FD5#D>+0-?zS08a#Y_Qg^g5BHh|4(FnJ{d96zZ#SA>=2M0ien* z7o_(MMSLV(pR#lLvj(O;s3_B=wH=8zC*DOn^R6WmhJbAjk&X~!l_M(ce^*!QUV1(A zYovwbA4RHk%8%MIJ69ep+)U}1LXgLx+PHSsFg&sOS+nvHSCmBvxaAy!{ z7a~QxqVv`mfu6=wzGq9-lPLBxY6Kim!t$yohl0v-|$ z26uP|&$&ka8?}@=E#ly^L7!t=ot7mq>-@2xl*Defngj28KI+_rcip0krFck!M$qXx zaapD0!P1q>jXeu@wZq4CC*-W|6osU&yQ3fJ%|KSQ{^}py!_z(?*F+fb`u+>Ju{m{=U zOt%EVQY4Ie0OQQ%P0Ssmng1N?vXFT0smY^gX_B|>oiUb*aP{LW8HU)q0>oXHz&?@| zmuT3L7++6&tXr4vFKrm{)#v)#nG9YDE+anQK%7vi-?W8Cw1se4yMauGy|T>)+R)G< zR~qBGyd<6DGCl(h)ov#|AjJsU!Xtct@qxR%k@4b?I>V$?o9uoF8(A?Moq@_Ui#@TP z3(_CnkO@8}xyN2U35@0I7RSv<+eh%MT=7gmV)($a(YFLRaaXWWhLTrtyGI>M`QCEB z*S;8RJ%$@#V*$;xfVU7qyW0&{oTkiN!`O6Dh47&N_7o#%T7Un}P|pdi$dMw_M}3aA za%0O-*F}Vg+?}>gFW2gm8-}t^)^i;(U@reiMfkOc{Rl0uR=EhN%Ze1ix0&C_$2?DC z_9^WF;|R~spp_a4otYaVLd5m82_(SHoivjfe^1s#A7IQFp_y86#svjv$Cuf|(ASAI zX++wKy*vYQX_K6jRJ?Paohc`}^m7#2m5ii2z7fA5B{u4>WX!3?mBJTI7R6EBLG$g} zCls9bIbjyepdZr)Q6TM5N{vf6rqq`w2n?HvCJLGQr!aERuP>#W6*R9Wr@g(4;v-$x{P8*A6#Dg_h~qthkdhYaAZ_bjwW))I7qHFYC#lyhLkc$Cx$t6FT(#iUZ39#;l7R ztjFcgSJ!cL?hJE8&-wF(x&9dr+1?iQiOm-1%L~OXrm0+IKjhu{5{(12GZl~jh5zfJ zmeVTnDD;k3g(R*N21Flq*w~Uo7#1>9C_{7uVvN5kY<~~B{kmhp++^J}O@RY$PXLH| z&B_ft2%b^T^fcjtx2Qh2U}!vtgHhX$0E82)F83@~R-C$R06bsR4B%85ekx55dl6)Z zx{VMAC_`*RT$(ldwC#@oY_;2`Kq8 zvKB=qQT@?m-ebH_)68NA{L-o{HY=PZ{fH`}I3+Ldp~^p!mi5Ex2lPZY$DoT3?1wTq zIP(sIU270s6S6#Bw?+#IkNhNNm=tB)R8(bAFPwOKKxB5x??cM(=qp52oabbaf@*em z74Hog-duuoO0iQ6eMt^ECxpAg`~`p(dXUnT&(d6lZpUExWnBLhkV?fCM<8tQR<$<> zRfz2)>244 zy@9z-I@Jtg`xb8M8kLb+t^!?}S6NCoNKK|#WqhEY~h=}TEcVjV;8%U1|LlUpGzXXCs z?*ftTq;-ST3E(9Hk<$HU<=BvJdmcn4b`2%@I-n5ml;F0x)p@sZ)Eb{GJ~z-3Fa|zT zifOyEwBP~z(u*z0t;NR(;kfGK#_DmRab2L|3b;uTVB0uNs%c_1UgUlNshH*AD`W-^ zvca|(WQVxzI;b{x*2f+cr_=io|8vv(Q(e3b`Ve-RNZ8WT%?J`c<4hcTFSlTpue>^I2U?bbx?Lc!m7 zeVLDn3_o^9fl1&EBJvsd!X@~1g_*L=<3*JYU!n;EP4kqhaiVn^^RS)zBab%1RiLe1`u;9I}Y#_riFrc64HAo?76IE#^O%%vl`ghy0N&2}u$l;oQj2JfnCQBH7ec5l1r_ldFj(b8`>{xMzNu%Pys+e{%e=zWWIUE22Hq9x1Pj%|_cg(}O!l z(_dkq-P4%*qGk)l{#zw^U6<7xJ^Li|uVqTm-sIXis~t=catGG=6TFbfTprUlR_qet zlI~W#84r9+n&PX*sS3P6C0{i1VYWB<-vMW=kni~@tyoyFlNw3^F-tHWqs=4iy_S;` zueL7o`Dwm*bOf2($=o642W=Z<@sZe%RO0=s<-dB?Bd=}AB+L2=8vXFrm{QB|usP|AZ02z%3HrRfC z{l#eV#|@6-b9g5o{T%(an5A}Ak5*bM13d%2{2Wb$+%AoULpw=uq+ON?>%2C zf3Te~iDBs1QLx6(24$T66%*dE55@<+WejGq&s=7Rvo1@|r_oDnh|Nf*@B_}UwZu0V z@XS;cqD8z-W=mdpXyp-PtcEM{V94;8uSRe1BWl!N@?9XOwh@^tl#8l@z!-CyNtR5h zcVT>#3J(y>ocz+e0mtSK#zRZ$XVu7B1TJPe>AWk$ziDU<9Zs)UPF{Vbd5RlJnhci~)FJgKx;?ip{=@PLk__|* z7P#z9^{U}~(%n*eEm_iCGP*>HcA@m27@0?_(wt^TglT13to69KoNxsHnabAeD$|l# zdz~|x0uvRbFN+5ZU|jg|VQWBviAFw>;iXZF?_MJ>QN#cCy{hkYR%?a6*@8C@ryLrjaKB6AI z)Ll|JLP(ng;YAYkR>@&!uIm@n?e1XiLDW!K%M6fJ-d!2$_I#nm7CJtpaT!}JdrucFR_lc^)&cY8eGy}GfO1xEFbrhul*mA6c$dP9J(<%jFirDWhV8T_SgXm~DW2 z3LJ?|R1a=$=#A!XcJn_QCP#^+XCkhvwo$v&CbmjCE}E#><9O*BK(~;ujwA>!i#?`9 zL~1)_h4sWFrrV-c1^~;jf!&X>vroi%+t}DlzT$6`@ox=O)&OdT#m&ApPIvTOY%wKJ z)a~1lLtyC}5^?Rl%#GjBApx*`=_$}}#5O^qViGOFwMq9%|mx^ z7HE;P+ei>|%3@fLkH-IU!ZFIji2^uZFzBRzwvnK4MCte(Ud>GL26rQhsRb8s))9n` zalGZD0S$W>r1E|n;D9REBWlAf9i^S1aXZKAPiE5`H|_nfw;KU>0G})Z#C*+Gjg0BS z#>$qoBf)T?p6ubHEGzHu;ShYgh?k+*$kxI_`VF^56$OsvQpw9#SPaof&)=z9OMK%I zkkV9hk`NAgCx7syGKwcoACX}(u5hEY1Asu{<|J{qgDX)X#Io(ls4h!x@>tFF{w2I z+#L|U%L|IamQt(VZ<{?soQ-VC^V61hjMKNJGs@0Ro$Wu^T-jqI%|Q~y9sPBM$2-iO z1mA_iSiE+3B5p^$sG}>rtdn#GEuY~vBCgSyn{3Dljw4I}PYb4q_tT;TDQtqavut~= z$Z*m&1-dbB-tW`imB>ujEUc=MNT+9POR@fs^T}f~3J|7UpFmf=LTsIY+U_t&! z|BYLf3{>M|`3`oMEYLc~TG%eZqFauLm)=+#-negGU`pQKqWlizB>L>S5!g~4-z07z zErtgqvqUBFI>H^COei<^foyY|ncJkrD3JiKDUl2k9pQ%K9|`ZNR=QLQE5Ef(dUn#@ zh<;j7?pH9#B;ntd#{|HVoqVF;+fcHI=6)qAq>}!E5n@*0LnF^6@l2~uf+GGgA?Jt} zPDu*lF@Q#ij1IR}j86w`hh+B5`Vvm+jw=Gobgc(ILS24?Z^`NbqXnqL zvYaD>NeCAPqHuVbm{%vhu9BK z)Kl97M^Pq@-9a?9&kf!kzC3b>$!*qRKS$W5ql83~p;zN46DbrFyEuEf>P;-pkpxZ< zz{=kI0;2aQb|dZ-$9IQJDq{^o2*uzWawBsEgKc?yj-SX;?sSnk-Ns8BqK*3gPp&8s zOX{43B7VE-s2)*J@H!Zau@EXenJ^K>jZ4{CAKe1riGW8|`@a5<6LA$qYW*qOc!Tby%ogq}t z^@uzJ@c;S zd77C}kiIc!S;nS^RPXZ^%Tr@@%UHEiaR(`t0irIr0$?C@2y4Fi%Y-*HwZ(&53EOrm z+2=EaTFUptT%4u)D{fF8-R!YbK>84!b1S|pj{|Qc14jq3ChlhlD=XKCBfmk(stuUp zEFN?s8D!S|_O!mvcS-(|t?v@TGGOZ#s{)A<1Q#QZFEx=wKAa<63ekGU$n3q^V`>A2 z%pqIK&W}W)DMK^&qY^(GpNv6zi~5KJ$xP~ke+Sm@xGYXT>RB++mKH{u7;M)*uQ=}a6& z(|=|H5jTdVQE<;;&xHME!Htfm&oF6zSB+><0=E~tuETOB3qL|jX-(H7oapkP?JF*< zPlr8pRK@69%u_+R)mL!SsAjDGrKls*4#(rV<3PjPE?!;LfP0a0S(!Q_k^??ZLB)=>h0pZYY$a9}oRsyg!>u3>k$R4gr2!n?}WOO_6vtnN69w zn#4kpeC;MS7iTC)N+~)ZXF;*xHmM{+4Z8E}n^qO)@rqvS z2gLQ17-MGbKA)Hi9T#iaeJXOS9pt1rY+?KSiXt!5e3E^Te5I=)b0MQP60cfYP1D~Nr1H@FMj89mL13$p&B$OzKld(I5F9`}ab@7WSTPz^rEWv6B~|^2W-U=V z%MFDX?c-b;hisy(d_(DU1+B1Ft=wxgZ3z6ynwZs@nz;|e11czkrJ#ElKtQ8F!g?7I zJ2S&8NKXS6s(7eG1qq!_E4P1sG$z!>nw^Jx)_wF9RE-ey6=orHSAi|PNU4t+Ls<$2 z`^{ubA9%uikWvsaxOqwRNj*`*padx?g)skhSjSr)E3YwcPwfSX4BU{*h+B+?hX6LR z)z8pxEJ^yfWQ)`qfub=z-bTNq3F+8q&2jkKM^l)_4!eFz zZ{u7%-pV(i%(b+Owiqj!_U6Q?!%*g6vzY&#K-n?999*EOO0&HRDEwRJ*Ks6D{K{u@NA(Wx1`kVlOO{26er`)JN4yVTgKbV=B zDh78!zs2?hnSI7MgsD^)7cA#;>?>T){P7B;c-50*nOV3}1Pvp}_Yf=aOrDffYYWD} z1ue`Q;B`CeL5J9s`0?X_aWQs37D@TXb{K!wx>weW9QYQpeur+zqWj+CbSohSw@LIx z5GO}9IBjRzY3=t3$yr#@KiA5|)U|U*Z&5-Pt)OY7;)0NeU&||U<}}Oi1#4f@J{v#w zCHg{JZMgj|qT;`9g zxGv*fL!AY5z_QP{-*AMsG!21DpyrgVVRK}tj;<4&To2aF4Vkb^gd~Qzrex#}Y(AF6 zPFb@`Xwq+eR8j$Ug^FA`X$d@r-ofFthF6L`)kv^&eg9_4soj7(iOOYdjU~zf#PP7Z zT%o-il35m0C+w)f&`zA?7oTP1SJ>(MStHsopU zP!~rA5#xNEoj;IDaI0&aOl!nEn}rw0J3q;^tKOJw%MAuKWI%FUc7f@D z?H;6{u8LCp+mCkYx*;<9?ANM664)TmyUyC+yEt;ChvveV(K{W& zakw&Yxhppwx&$!EyNHqW^^HYsGu5TIlO}*=RHW-0x6-q*p0gcQAc%sr}&|Y#m ziN5)Z8ffsCB>J_HI_`pxtQ2v6&kqvnUe0WX;(wYRq|n9%=ek zG!$NaMkSdrBIkOmdm+6PD(n<+6O}u83{*Czhl)X$1bh^)V^deVXs^v;GCs~Mi+zo# zg#j-B?QK6^^<{({I9$L~Zfy5Edc z_=7VZ2G(~FQOLxKC8FHFkvl_f>!M-A%f$? zs%Jj%Le7hdqO0T!IseY@YBKv0tGS$akF0B*68ugCLp6VibD^l1>KgE2w-9V(Nf*)v zf6f9U99^`rP&dyND;#&BpRN2tq@V|Cfg~aVa=9PnEpyc&>t*aKdAed;Nda!DK;~8W zo4akh0+)<~PQdGb^5cEO3~bwPf+CR`P)$rYe?2$e5B}7u;cQ}f_OtkP#RH&w|TEW5Zg;1rFr>yWOB4Z}v{!DOSz=heSG>sqf6|Rgda3 z0#Y-_+k#JuIx8b>pFX8uHz!7z{sfQ)Fw63Nil=52@K$wHa!XbjnxZD2r>aKg9m z1a|a`24kd3A$uEAyKvap>PgYLNHQgbzu9Lp!MFNxb1`s>HoonUJn_c=oK1y$SfgsR z&h?ZmMy|8vl14|^r0xKOj^AR5HaJW@=SLyBKA#Sg;9o0Rs8f6D5ZG z)kY+$E`F`n_BH)_g=kR;jMCM=OyDrI=RsO$^EbcprO|dOo+U9*0lssA+ZK?ePR<`+ zdnq-(NXt$QbN5nBy@z>^>iyR&<_z`!2Dzs}x%Kv(Wvsqlg>ccP2Su6PD;LhBh9+*& zG4NeyLn``lXjxmQ3DsdR=ke;HBvo6V-h^TNw_fcVr<)ee_>?W9pbju3W(-vNe_{HtbOrnGsrxNXC7WM`@V(p@ zPFtm{xAwt&e5;oTzrjkm=a(t0zq7h)TvqK2x9P9V3(7V9vdNlsx5(El_j=MhKa5RCJa zrlUza%4imftD{g@BUCrQN1k>n7b$EM#aBI2@DdD;7)$PXI=-`H^f+SNV4HsO|D4HW zE~lg*@hXf*zj);Lla}`?>0{XCoeU_m6_QZ9cqqG=fvSF4b?VZEg!}%=$w>%B)@G?X z=2q})Z%h!u0l+SCZNqGWU&oNC5sKEbasGJUdCq#?zN@6&oecv*!QsT&v?&(-WE$fp z!d^ww6)kw7A3IS9%+kajGAFUjy6j%Dx<=n0N7Ei6p(mJzL0!KyFuv~0%B|-)nz{8T zgeo%iR_(~OPI_E9rH0gc%Dq`<6;W=yta8i;Pw@M-=_>g%)gY*wQ>~xqR@g8+ZtO!s0_Qg{0#;(?6nE z!-}1`KUdit=xc%mFg|L{)nq5r)t3i|mzPJKZVoo)FOi^{KLsiEWmy+4fj-$1=ke!V zy8%JlN!l@rY$y-nTM}p-}KTftgdY zb~a<+JKNJV#?DhZbaFLpJtiR`q!wN+9`Uz;C~IBh%%;7&En^8qKPq%pov_yolCdv{ zKta=_VAT>TL7al2IthnP>Jwh&3`PYR54i6wtj#k~_^ ze)N{gJ|hlGY%o}_JtEo%q|-bNL)1%POwm!8JERK7EQhrtiJ71RhT4xmZ#Py}fUkxn zDX^^Vz z`#-xpCYp4kfju`|f$Vh^Tb?(mDtln@qrc-=eZg~Z9J^LavgeZo-$LV{zX1^KD-+g5 zOa^d22v4F~VtTi#l>@{cDIVOZgEoEF(;TiMA3cc!_szfaZ7!HOg-|_RHE-10cvit7Jc+l> z$H(rv+w);V1nWV?Iv^5%mnC;dpoKOp^|ydWGO-mjQ!S%(x!lmcmMx=y+ZI%V=eOs# z=eOtavu=zHvYV$wy10CI`9Vl?EI-QcPM(yIsROa4an(R3E`ncPI+X9|X4`KpI)nr6ct*Pa(AO>mrZ8o=+?OQp(OP(d)D zErf~^AcmNKCgt@j5s-*gy4Y|4%e@uxrB)|ckxGmq?h?F+4Yp;`3m-aBLE+&SI;4#a z*R%z#Q%(8dcA1VFiDgj-RRiMGkfJMJ8^bkfEPuk2@E4ikJ~dy*8$zhJv#J9@G)5M& zTA00+?Z@O9n`c=&F#pA7ZZ|Q|sYT?@^ntdbgI6Zz5Ba#C06POShNY2kf%Yc;{7;r$ zR*!5@lo2HZBHS*kyVW$HYW!R`H*o?}D1E|AT*}Q?5&Wm` zTuFqCopU$+&u|ZGrzmiaVz}_r!5oX~mMvKX zA>FbNxJS2c^GO?W$NQ%?TN}5FCW@TvcPA;we5UrUNshuZdXu1RmMD5?$_V?d=>fRZyf$n_=2|RlW9&5D(P0~t~sLX_kf$OUF2 z4`p82yeR=z92@`t{Sd5d9bv@jSo}34<1_d0buE0sAa6;<2e9WauAsqL6M@vscIy9i z+l~qmz4Ny3CnSWfU!JVEzjlHsphQPAjE1o;EW zCP3K{!Yd=fW?ioMb0tJ@FDgn}OSnD$Mj3rbL)e-@ z>%z)AWGqB7?47e0J!{fT-EK__&{IBp|NOILQEQB-qMo32G4^)Rm$`q+tS`H{Fr9&y zMpw;+c+`8Ld!c)wd!c)wzLT79X2Rppcb0M%1elx|0>Ff#6-EJePL)ALR2O+H#0!3| zgIGG>DaRApQ@K4W9_>A_9_=t|RiExr7**M5>~0;AcXyQ|A#Nx1+|+W>`IhrX4I6V8 zpGkm-As)*(z{;l#_dvSsiQ8<7Gi&4iQ3r9LU!^tJ>wB~m76A%iZ(EYZI<8qY%h+I- zXje9n<9KR(eD|LX?EUW0LGbX?1VQzF_??0Hkb-#=F*8_iBOezanZeSyaffPQ7h+|{ z`=IRP#bb6`dF=D{3bGMoPWA^R; z6GQ-;5Z;V7#2XIcwo_iA`r@0h$@jQ6n_C64hIp|llto=bq3e0+7|f@6FXzZ*qbQqq z?^;jQ{tq4^gD+-h!7*`vztYhCvV(D^#q|*0$U08HTX+(c8AK_dsimvEqLDVm+R}5Z z^Yy$AYU6rl&v6%IqQ;=#w4Y85{{DTHK_Eyzpx%T{ zgBr7{co)S|Hi;5Ykyt#W-5L><_aI|8jpjcC)&2`0yP}&wc%K!>lZSC+0~_5Bz~Q<% z3tl`9F`{=4WoR6gLF*PQp55(4s`bJU3tlYy2808}D}+)8SZi>-QZG+sW~{ulSta$J zC{%ns^kA}g^WTlsC~Vecs@+j3HUxiCT7pS z2i1qC8bQiscQbnI>%HfXmE@h6S)k+HP%ylDb*k!{%%kfVg3a=z6j(g3F5$sKOXZI4 zyW`mP;G~u1@V2Q*CMLPR1eCkg=#gAFX0kX zIB??SPNe<(g~N@AuuI%w7l~r9t=*zvVYb^}4YHc3VfWvWd-Iyq#T@vZVr#DHNz)g%t^eO z!lKV}(Fhk-b-~xI7?e&*F#Ln#6T4_E&TnevYbxV9LL~3Y$`2-rqGhxCPb1hlhGJwD zG0|To``V>|KTf&mJv{X#5OH91W3_e|YB;R80pw!Jn0|L^C`AAI@^9Du>5(*aVKPC+ zx67)GZ3Dhs@S76nx99Q7;v`6stS1e^>OmCIbbnMqwXp*|H;su@ok8ur7D+}(2vXr7 zL83En3?thgKiOOpU@t7>4|ryb)?Eb5Si1NrmKqBcEsfb9d4hCfndU!@?wt395>c9L zr61Fkz(a^sQ72z}R5=6>?&LtGXWj61ff50oE4ZWR&2+BO0?n7*wO)Qcxp3t*`*fXx zgW?vyc8nb68P!JvBAA_P906XntakP(QY(I}$79xn=rLe`#ygLO_fm?79Nwy(JhhIq zu*g%)9@&%FxAw$W=n1hcC#!aBw#y!%J*0>wc6-hkodPCPeq?&(BvFJL8yj`m77KOc zdBKZ$6U|=jdJ5bwuUm`O4;z1a4GispoB(L@A=NRZa;^HC%rcCDtzTs!eXh!m@-(|* zU*{BN3{EX-m4?UFHE(9P@&EPuBb*^ZDz{TXkbs%jRSkr&i;YBAQC&K7)3g-+Sxx(f zZ79#yNHo)syOL~Gl;qaXd(iZ8(A$B71BHiS6>C8gUWSLq@@5c=w^1M)?S~Zva|YBh zRP9W4zBe184&xP-KU61Bn^tp*q%A-vmHXz1v zD2L6<$FDT92j)?}9Yhd+$LX4OGUvZKITHeH&l0Vu`|6O~WZbm(YVQ7EV>H_DAW5o# zxGhWAT!FEz?WB-~V>S@X{#*oDHqJfO2;}ZuSBNZkKJz9xj)|vlvND&&kn{(v6V?V{ z4v2NmYlLmP0zS8_9h=lF*oS{1s7&DGOq)IRD-&6U17OF-dE)peZu4AoOsLsDByxXD zc^7}way~Eiu>;hIZf~9_-HbG`nJpjATns}u5#GkM)#*fs^!CudF-Ik>LwQujG$vg{ z8O&p2W_8juCN4c=F{3J@ZMC5sJwf{J!7akTQK**qN?%<$5qwEs7yZtWCrNcCji$6rGEh6hM@hn5?xb^<_q)6?ry~BLCzH{pI*?)I5)Yvf__Xi z%xhT`unAYujt?4Rey4imE<(DCK7Pd=bw53f=1_Nc=@oM$CDdPasu0rfVL+E`JqeGl z5n=IO&F&~Mr*Y{!BO!rUI>_*ZAeV5K4=selqfA+RKF2ffWOS0){s4r(`*AhTr)wPZ z2KWAW!RIZF=AYztH%+;Xz<*}s`WXU_PA`o8`0IfEhR;O+pBjHzpT^jlCmDjyOfjrK z5)nDr&(?wU<&vYd>rI~hF%OL}Ld8Fgq6LK&6ke9|hz)twmQh9I&Z~mb4@mgL2%y%{ zM29vTKV$9QyO+W;Fdgt=IZGiiq%zZ&(~NFkx1G}3H?Q7@9nLkuxeJcu#l<8&D0u$` zJouZPq-;yhT+X{*pO}7s?T&(~_{oLg6lHb7o$hG?B@hL@ZGgcAxNd%EJP zN~P#>wswn7k2&!Adyn04Tx?;R(a*jJq{jGlk7AOtgwYM0A9Bw+Fh<~o^Ij-L-I-$5 z$oPbV)NJG4GFJkMozsH$$7E_JooEp(pj3z>p?jfwp?jfwp+BCtoznFTnO4XA@}XTG z^RnD5Rbj*R5GQqVmJwAwxq?G!#!|O+x4|oUrlUlv8{a^K@~0?*n9Ro)<_+Nd^LC|q zoBzmzBk_cZ5sqUloKF|xZs-e~fM16Q+DTxMI_C3!OQZnnO%1c*5o?}5N8TjGwFfK! zq7m7#HSPQZP+s$Fe21D@kiNe|LJc4jT;MBR%7@u7p67J+k(j_zya)v`3n#m2$rKnz zOWYTl_u)p@xX}sfcjuO{A^xq#3_!Di<#((79bQ&3lgxKz7d!}tZZoC)J>(Yp|DnH4 z07U96u8cr3A9L#GxJ5*6rZCk*<%_|)qro{&r`I~sNOO#{>wltiCm@_F z-i0tx6zo$z@*}rTJM*E5@}fShY<0MH3*5?4mJ%_l^sc!Nju_>KiZjH2=g7;@tDj^v z+>Wr_`z|Lk(KL=G>=alfr=%x4(y8_HzyL-t@{SB}`+1xTa z%^gL5OhO=!#`0BI;`DclB@xSfgM$nL?Lg_iDQ#0Ckq z@X_}&Mp4|!{dC(uC z(!Y7`cwKp2`JY{vQ&Xe3suIPK5B6>M-}#>w)0=R!ZX7Kh+7*Aw(^K#$fbq|U4a zH_74MAo>hdGd_pKtQ8F!g?7I@KL_<$jjyq53*Hr zy0liEj+eVRIXSFSd%8t9te&NM*t;MKqhkMXQ|D7=^~WBIe;l&h9)y%r&U_u{$;iF`3VU&wJ-06rih$5p=Y1 z1|DKS*#ruSgWMpD4<1d98TkwD0iY@nPPmp~eCUC+Wixv0#$`Qno{ay~BGMB@f08lE zl2}BG<)^eleiy51>QJf^gDmN6Vv23cBHONY3gdew)f7zuQF0`b{R&d6jIXCnrhdq4 z83m9`zwXk*tg|AGl7F!&twcGXafv1oN1-`Ub;U0Bf)wlwvh4*Jr&MccX%P`4PHFgz zf`BKai;7B?38ya_6f}p~+(Df2(;R{ksnC#)`_{WyHz*f~dt9>M2mpop;BiFnT}His ztyt4->F$}m*_H~uZdvFbBS&^!;lY;SEIK~%jH?!d)kRg*Q=K|b!yR8eA%y+QhNOQ0 z1^ndaL!Y|X4(#NFvnt$4>Cge2hNaNf$tyWVCs_&_H!DJc3ADd@87hcfj4gJZmSK?@ zH3=CU86>8-Ko8#bUcV1Oc??tuy7+UvexyLic70C~bxJ`c{0h#&5c|BaiO|q8B2Sb* zYr9r+e}1S8dmMvjPu0l7vdrzuD|)UsRi^rRe*5_Xdn+lHR8#KujtQ{mQ|8!KM*X6) z?4;PG4hg4t@GktC{}Tde*{A8Jw4{;s$Kh@mVZ?Qdp2@Cijo(zp4#mrfr-cb5%6?*F zGtPnBqwZ&hWW`h(9u#71Lk1gN!IM7o`)VsEp~-oq3TvP1<=$TKYtnPczkrkSifUs8 z{mH^GZ{)+k8E2HjZCjnr?giB$(zk^hRF?BG_f=QyP)SVFT={ULw49+T5S!BF_@nE* z^)OF5A=C_elbX<^I;$;w56{QZWIuM-Vxc0(EKYBcBa+oGij${54&@=gc8QJbCt!hk z$omRSFr8@|fbBI9^Wre=h0v$uuxeNq!thQ1i|E45xu9Zo5%41cyg-q`h+Po4!5mP! zsCj?AZfiZ$M9l#60rd%7?7v&nm(!Qim(!QijMP52ozmLzwK~C|6rAdG2lX_?v6H*- zS*w%7#jxh*A=Z38geC}*RRXqq^d1fMa$*o1298J-SA@kjNM9}$OQGwy%GYIAX&8W> z7;}{;U2-jzq*IM&eF?`{SjI-iPz9;yRMVG1T@)WwtOuQ8fdbIgRA4PtE~9(D-B7ht ziQB-cA$xL??%3=#txNQUe%Nq>?p#Ra;?r;N=+`I{^D>G~R2$v>e}=25>YsGIV|Zj+ z*Df5}wrv|7b!@X^+qUhFZCf4N?2gf~om8Bh^nT8MzrCOHepmfkRdubJbFMM&aSzlO zEQTInJq=mC)akMmvIg0EmwQHBJoICwQiHE{PB!*72dSFT>3N}XJN~>FTnU04wMn&^ zvg^Jdc4-zzDlEk6ZN*0h@wG|e$kk=S`nOfZEU{8Qz63EMRcTzS=FGFJinDxKhFI|C ziZwNXu}A*~>I}Nv@jz26#?ViT*p}3WEn;j3l^Qqfs{vV=KF78U9Xvd(af8#wN|-C1 z5f5p}>kHbU7y;HxhP4$SWoMSxT#@FMR(j4vSf}NGU8jolkW%0YNHIT0icROrzWd1a zC0DyEJGncT9sm1j@a^C|Z2ex}+0vDA$hRTwi(D24!JV4~KdjU#cB}M2>x0R=2Q<;} zo8At%^|O;njf&v8lBnW_*d<75-kjc%m*=sH5#2)vJi*TwEL|&O`P7V_V--Q$XlM*Q<2GaN=uY zP4J7s8(QCjz|F7u$W(M`UdNVUVR+A;-8=x>JDo(Zi7g$yv`r41QDKl?#t>lIM^^ud z^rV*;PTZ4+nfiJiD}oF^+U6PlzTAx>v$XS!m$|8e^qF5g(iD!Lf)9}>-ore=tF;yz z>3c$#y)1yCk6WNvgsNV08@?f0(MX(Wbd{0x|eyO3Mp*36)gyj%PLd?ezaRFVu)t{+9c@`g!3HA_RoILD4t zYK#m@30SoD{{PK`e1;vk+_UvF;&USPR0}`EUvv8m{@0my|>GY z1LF0XmGr@P51fvqk8M$!8EPaSR?_mqg^Uh@uVO${BfmdK7)yj1bFQP=3VWoalYkeP zLs6K2g1`AlTKhLhS$aZHZ>|b!nYCKP0GxTcnV1sDO``~zh@f<0X=yEIW5%;&00pI> zx##(ZFLN*+H}06XC2bo6DJmZ3%bg-pz)!F?ph_|>NI%eZH&+h2SS#P=9V?P80)|76 z3w!v|F=wL!QfVp43!n|g7xOOOTN~Tm1Z&%K-8YRfik*oaHoyTCeWN3ZmB9}i_G0WW zKMIj8-GT}BC-&ob3DdT|b4I;y1&X103&XEjv8xt&-+ z+{EuOg8@1DyNn?<8kVdF`qzm2k>@yF5Rqj-Su@OqqhEXvtbROi4*6&=7GjMESdqsD09)KQA7V`d;~;_IMgZfQzDM4IkLpkD_7Cnbg+v>b(Hi1u&1xkg zr1!eT$Y5>hGU0~*02F1Kci>?7>ruoF(9RQFw+I3;a+_kkgB9{d3zJ6Vi7 zAw%6+LNR4(&@)PHj=2!Q7r3YNQZpm1x+VEWz3b!=b3}HGrL;9aGqA|W463F#&lsw7 z>B4fDF>*l4tSNZPudC^=o3;{Uk~y3p0+aq{+XxZ0!*KY-BqNYC z!KtDhKmg zJU%Wdyik`rsAKPM4Cw)%QW}roSj}jG^ zw#g!OdigFNnlAYvw-GFn-T$4{F?Tn?-T5eM@!{0D-4f>dN}2&TLnBF9qAZ^iMq;_> z8W9xnTS^)D8a63mOAZ2E%uA@cK#@r{6cRz_2wFZAwLSeWI`82+rP=fBn8nzx=F5Pj zRv_dyzlg|1Epwr!$wos@g#cV6=@JL#KU(s zg$AE0E%jadB|o>4o5OLgT=G-WV;pG2FGzXl7~Z}`3gEAleO}zkL44603cwr6aD03s z#?bF0@o^VcpG@nMYkdQJr|%DqrUTB-Yse>}-RviVKINrFRAgHlY>nHIo~{YTSr@*A zm7zK=g}#4UvukM`-m|(fqiDlUm4wrEf@tK(PKTT6S(f8F*-iGJ$X~P_YjBVe*CXK8){~+i*~>-e%RBKHh~B^6LhC8nDPZ&>&CWW-v9;Ptm@$gxv>? zD?ZhzM8=M%y@*SQD7t&PamwB)4IK*@w_;WEeF})YLkR2jszgG-z=$`a7;*x-)mDO* zE>*;jET>OxcjxvGfc2vZrkHw-4|SN{2J;ct{E`)QL&h_@P#lxqZNpt{E&PGXsMJ}( zd(Y8hsp*d~c+a_`r!x}FZMfm!RemtglIT5bl` zULCy`GR)eZN;ZKoCGK=h@y@~raFGV>%U8pN6=W^}nA0}=7S%ST1DMblK`2CcZ$>~( z3P5*-FQ{*y4^9(&9RcyEgRD3Bu05Q*8Hom5IW0X zzmup4S~}xu`|FShrSgw=8i)oJS8nRC3cWpca08fIra+sftEy8?z0dK5y3g}pKr(gS zbk&}~^UrSWs{)<`s7oS&I)azk%fcGPsMZh`KHyz)VF}qDH(*X>*%LoKc~|lbRX7C<2fGd#xo+uBIuk(7cv?Pi9Jf4UP~c;LLmu$V_RTVOF4#xUFgRNCIR;iUZwrPuL}WQ~ zT4lBl_wKe3;|%69V}n*mg6# z2KtHE7wIA_=RI7z>|K^avrIxIl<{T!m904n$zdD9bCE_3qDBcRaGBlh&LsK9Y~1~x zIC$4n&Fn?Xr51FrCIqAM3bki8IEm`7P1WQ_%VrI>{&PcLet3&y)t=_M7)uZO%1;jK zMU7nbx`+&dV$9HSR)_mS^D_m}aG}smF^Jp91(U|ohUy1<`Dq_gx42PsL|i#HylF=4 z(?Miv#VB}~obm5g6$M|R^Z-|`-iL9aV3qa-vG9In5*g;$O&oP-0?&0yy*l$L8Rsj| z7gjPNCI*FBVWfmmPel4rMZa~1y>@mV5uyIXO0eD|QG*$)Hro@Q)gk2YxVV`E7U1e{@T)rpv&%x)Gp|U=jseCKZ}P$zLIZx!f+QdMsl_N*(mW zsyrw*cAS6?G-DI)7`Iwe$!@DQT<`*&vu`sEaHz%rX9SAp;?#M)SvpbRk=`PJq6>%k z+NkCR=pdE>neMwBVP$cl)!22og{bdP#>-R?EH7AttvOtmDB>vQMq$zSekAsXiSR4z zC5qF1lFhH$+BpxdH0as5N?ETd8@q&0Z!U5}H%7X?t~2?XW#Rbm!y#kRm8!tJt=6WW zsO4H``PqZDWnVNq=Y?kio?2WK=1THTJ(NkWyC^r;kuA*!yDCA&*zx_O$zq}sPS8me zo5Hx#3*_5%6z$FJm}-nzx?F{Q*H!8<9L3kKU#YX=9a9(Zj_wC?$_}lI4q`%BU_g3lX5(R3or7zo+HQf7xrlt+dm3Q1!RDt)R1d(Oyl zC2(=$+Ixx_9q%Q2Q#^qe3CSwIM;w8`$bUA!Hs2V6G=u!_+rEo_|saJeAThJ0&8Gf>jvE`eS+~uR(~Oz;q%qRwcYSIfM1ex zPQ2t@EAL)L4B-uV8C*qx?*a`aa#KW6Gof0_`9Nb+T*s)7(n)IlY4q zDm67cw3cACW1f>=NJe|7r?Vp%EG+VYUFfX+eczY6mO^z@lfbh6sO3L&6s9j9>`<|N zknG{OF3kHy4{{9!hyI5pwqK6^z8A-`$T=SoWmp7T4dtxDY|jelQ)dL3m_1Hyr&!>` zJiX2cD`($C7l!Dla^Va=p0c;3UvoJc+N|i^iRF;nj*g6kj??-sN{_7?7lQ_?u}?7$ z5f(8vP`;YU{QKytjY+TwW=5oOp2=9V&glKd4r0B0O<)PCk-Rvp4r@1U*};a*jN38x zZPR>wP4@_-!Jbhxi9K`rFa8%hmsdq=Y<0;B<}@wxjrwK(?z|e?WAG22=1_S1fG2fz zUnPw)twV`r3vB;SB*Ituf~K-hOxzuOKFBJr&y+SFIx~n!f<{8G6B*gt+v^V?2VhOp zKcp-CV!}T9scMokRYQaIPbiNTsr&9PL=swY`jF-B7=a+u1zLW3K+4dxGN02Xzs`Wq zE~eo%nRazA0Tu_9QP{IY*A{-ZoG%q{PWVV&Qi2B}-%tL*78TipR_Pv}nOytBR zT+fAGo3B6R+-GGPWqP}43z?ud1`-mrk_4@X4m*?t%l(W2t0^eS`i82Sni@ItQqo5L zz6}@03Zpxu_WmLN%7&w^4b@!IQwI&KlqAE@$}Ttdehm0GlQb9BbHUS=HPc?D@m*nT^aBT$c(}?j}I?pOQvcnvGKOen)9$|*QVh({Y`&Azc&bndM z;wW&ORg|XB*%Qd)6cH93@k(E(q82}DTS;~OH=JT`VR~V%*@iJZAt-L8x zV)@yc{KuU2XNh_*RDbmJ^cc1t9y0a5zcVFgU4L2Jp?$o~AJ7cM4RLLA>eLpR8`r-1 zr}%uHF08K9@1fo++=8`nz)!Q+wP*b8- zsj2t*Crl$g?wD$a;So>*Epq&4Wl#w<-ay!aeSe#zVAC`x)mg-Tcg0z@{>nIrnD4glW5#t#q7a)(!i8V2wcegckZ=(6r)U|UO&ws$&7Nhi|x6F8{4`)BLQy@0!;r6`3(miS=!NehglM|6Y_rS?pXr^ z15wor8Od>Sb}Eb!0>FyULR>tYoy!X7>XX0+ng*)NVeLYS#(|xL%(djwzfiKm|9Zm(K~Ca zL9pHt5(;WriEh^~k}$Wh?Z*V#9*{KLW687|z-9b=oLZWHThojA9@tgev17XMj!_c4o7X=ZQ@WD` z5>uVP5xg*0L7A{;y3$&v0~4X5#L2z*ht+fwa>z;{J39oYMn(!biJvPAj9)tJJN!8I zT<#$&agObDB)lfDose0R5Ye0;H{)Q_8PSRh=s9r~YiKw>76|z)+R9E9#B?8TZbS+_ z8YG;^bQC87CFF165MnHk5{lrc2heq8lb|(-;w{Q{l@`0yR|lf?9$~{J8XF@nl*baO z_g{KC*7y#8MlKq<_!m+>*<=hZ4Nmy`D>iels9j_VP;)(&YgN+ed)9YzEuqWhJ z(s|z6S9!G$?B|DlNPLoXQ}dK#GPAq;moR87R1(axGdnCV>#D&Iy=J5V>rqfhaOrH@ z$;&{K{-MwZ%>y-(wv%i;;;$8VhE5}`dp?P@J1VBJ-g?q3bC#->~(fUBqMW>eIeW zOJjY%{}&OkyJ=0i_Pn)m8PE)!5u^YCHkn+s+|r#-i`mpc8)D76x*hXYl`tS=-&AI? zbFg90;C}K&R4HND<4M1HOKlh_I0XSw2nu(iQ(NPNTYNzBNbvaL{^ptOdh)Yihj@Rp z4iVawkcZnflg0Bu&4Ao-`qFzmusvL4dx+g-O$O>{xsfyJCABm$UW<01@2s-#$&K`- zOp>hybYhINmzh2acT%+KOBF>5Z$bxdTDi63{IS8Fg(Ov~-N);9Q`i&bil}1cXQ;=3 zcRS$Nln-#(@flegNDbuHokBG7OtWAk;SupGWk>1Duj7rQ?5AUviJKw>lD4g%;Qd2t z@#g!A0Tx{?4e&oTEPDF!yJgudMg41C#K&*Ya@DR3ry&D)ebp0Oy=1tAr#DcEGxRvg zNmCKc@1Qz1z$!so2shAi#^4${I1+k~Z^(jAKwVKx`!q_H)hde(%YDT=bt$@14@s1+ zN>3RTsoEtMhH|2SxWWA9(y+L!B?#MY)Qo|3vR8g&2t3;&Upz{4z<{@ttuZpQ!p z7Ca??&T_apD?0Dr^!;y7|GM|b7gZB480_VLxQYK*1=;Y&=N1F1 zU+3|Q+14{Dmsi%m_|X4%QE2fQNuq{{CjQ^g^h^Hd9TIx^$-gcBOC|qvfmA&S@^>x3 zUyilz_Lr9b^=|lQ-w_Rjg@vgV{ak(VD*gazPS*ZuZ*uZUJzMC;_m$59$Ta`Y8qR~F zIXlDIoDbl|ufZvfzt(^5sZ%JY>1U>cLuJbN7Exg3Uj$Alm4%*l%eXgrZ~L6&n#vcg3f3wKK~5Zxfk zB4S9@HXki3P;Q3H41umk;?4~PPIdCi$_0zsPvJkmi+Gw&LE%%IM}}P9B^?%arn4`MGV0cHY z57tLnQe@L`hSLn-*ekt=`S@Iz(|;D`Q&j5%gejFwq0DYpZd6fX+n}uQCwS*$1bvGl z#q%{Ta@eW#$&v%%(DdSHHu!#obnSsYy97M^!#Oc%3 zdvN;C(M8}}MK4Zb;_Bt(|0RFlqxWxqOve}522~>Z2i>>+VG;lI@$hZG?6L2nn0zPx z&)a!Hg?L_XxcWCy7Owvi*(c?EkR)$%eCPuZ4X;143e$c1Jx!Nanc8q3cwF#HBlB^LN%_K8PT{PlBVM57>{!vw@_=V8`V$jsQ5ial&qOrK!n3h zbmrd=ipFf}8!1uS8*#COnO}@|@R}s?7jv*f`GmHo?i~%FpZ|oe&NctMM3HZ#cPXxc z&rka#?i)@Oj>-_Tn+4^lO}|kC1sqEPRqM#d=82~_BY4b5y}p%ndYjtu(N|ZwWyJ1a zP0m@O?j#i6X2Z=s$tv25#x4qc~e3N5~wK3kTja2p~PGepB|^ zGcBOm_;ex$YjpK?SuG~#W-GPcHwwW*W$)v$!D@gu-4e|Q`_1>zTM1WTsT!Jjak zih38W8OWka>BbxM&Aw4FJLqKQpt^w{*#KyT`B_DyGLn!}JQ~hDs!k)l=sxXm%kqNZ zqrkelflX3|0+v`o6^zEIt?N}$4!GcSA9lf*851xgg*nQwJ1cX6kn~?sR9v`)os_8Xg%p8v_)iX7NUyYj~$al1IP(wA2 zuggy|Z{|-|zc}8j$3N4J=Z%Gk~}qf7s5J&K<7-&k?vkKZPJLL{R#(&nW_hjv!=mw@C~6u#E_03>j}@1LNU|y zUCu*6GOryt59S%PYZ0`JgK26K)^?nN?~H)P`LRh{tv82CrY4>9T9=(G3Cz{6+8MN< z4C#;DZ)rV+5`uz4v#KstOdXHF`l?{+<}Vc-{KGQR;xol*vC27lPQZaV@`$k0v$_ zyw<(Ejz`tm8lHB6Hct3S5h|L6U{t_&?>t)UHyYr-!uqnaz4s=wh75|j1?0*`7>Bx0 zB4!ZtTgs6L%r6nq0Kzi{8=S}KWo7;DmL39PIim>JO2b`&w(Cp&7_=x|3vbUZ25i0m zMj1P>R{Lz&4RH+PFyq0@aU_b3)B`FgKgl@7Gv*RFcX_rN;YJ~^N_xmDNf0Gy%9`|g z`QC3B&2~pAB~X15cWhFM=tY#-k*>vJP!<~@3izj!6am6R2xe8;nI|3r&P7}<|{P53VF+kNxUX6!! zWh*i@7O98$;w)$69BpK!}0;D1(uP6}o`=DqI zPi7UoB#I!cftN`dKyi`om6~JINZr^im|5DG7AG^S{9qGv&9KN&GfxKTnN>DHpXdFX zi2d7vnjBetjwY-=6m=Z|LW@Z7mHfRe9Ixo&^rs=fgo_rvATV9a3jJ?vs61`m`-nkO zV&_TChvl2Vkuf8V*QUBfpNx=J4PUPeUZBdXU=!XLu$`12W62R`u(<%FQRp8L?jcVX zNf-v6RmeHxFjXtyXttO+rR6oIwkU-*Ad6|BT#K36%9fWJ^Ei^vs_r6V`Cskq1Hto! z1!NuUopq%!UD5kW^u%W1h=l!Qt_zsG9%y^6i5?~BJBy59NIdawATg5V;B;-!!hB~y zfqDx5cjKNN7P4)|VYP?f&{PV+80bq87E6sQNVT*I`r%YNp1VmWi+wg3W?7Tl_8! zY~zlVDLJFILOBkq39*Fs6)#K9`dET;=6NcJef~ z%5qP?dz?&rGtEAtzFA~tQ&Q`6?spXXln&y-?mlVCjBzBSHynMW$GYJ@NGn-i@i$Fn zVqO2Du^<*;Q$q-@zwuBVjf2Ao81l${3{u^Jyl(?t#g|@bceXJ{3kvsbS*ABMA`L#(G7BXoH*iJ1 zhBI~Z;EN5V6M2m1&aI~E48wjJf~MCY*t&)bah&1s-W=o-?T`XED%Q=EcOdo%d#(LP zreKhTabnO6ZyCL-Cz%JkJ2g7~01h1q;Jn%;&7uUe>s)qof3Pg8=noL<9V5`NI)*!C zj_T@krf!{pi|oE+60IwUR%kD%w4xZ9X`f>7w8$KI{aJTew6q;e%N#rOiwPZ!=(acxBuAohS@-*$q~u*FW3K%{w7>^AN^#}cg}Ot{*XPW<$PEVd%8nm zC|vPaO`!e0qI#GhxePmtIh3M6?BbUMy*@AAU?Ef2?M!4>_e;aYFQ5?|(7!N`Q1T7| zI>%$&EkB8~c5w_?4%Sc18;A{7EwdsHc6i)t-HTGk=o^Jnk6a3%UAedRLe^h@abb%! z&)Y0}Lb*?zo@CKqtt!)0U01Ab=73S^($}8}nW|Id?0!Ww1Cq413Hz8AS2wt03vH2e z?wVqQLSMr8vDANfXKFrT<}}S)@oCZq2;-bsIcsh#U?ZosKApJ0+|L9pT5cfrU(A+F zEx%gBbgq_^7g}&tEtf|3|4PRvmG%_zWo5Yykc5k$*uwL-%;vv)M0@X*gob;)uHF*{@vJ^v)Mq^U2#1sd#A8xByVTK}2LdNJdPbmQ|iPO-+f?(xxO z#(4%w5wfyR)oXNw7@c$n6%+hiUw^Ho`XvUDrk~zys9RD(pOAT2VhG5rc6@s09kSNU z#X#u|2^^lo&KF9&L-xsNLaO{em3n-75OAz$=0s@za10tsILr^<#wDCgrR;1!SfkHd zt>_4SD=Rdb$kR1&777lXh9g&+ZrGY%n*6B)P6l%)9!Z~G@pN`{5r%L>x(LQSSqnux zDQ}o0#R1pK0%b;GYNg|kJP)e4{lAe17w>z~50g{y`|~56BE**%?i%&u&newxU|0zW zTSZnX8MUF+jq(Y#VyK!#N-eP;!kebn4>n)R25-N00frgwk=@o#3yv*BeNWsxp5@&W z=teqgM}L91Dud5{uprBIdO@o+B>OwO5K48w7kDbUNr}2zP zOduV*p(#5PM6EV5-`&s-k+l^AEhs~a^3t)kRE;%ajMK#DJQ#%WJydmq6ZLV{}BWq^wRfYH_V*~Ga= zAccF+uUMm_R z%(why1dq%lzbbnf_c_gntW#TbkzbXh`B@6A_rbX!W?7D3qW8H}5ShYMMU4<+!*eW= zUbm0^WeMNuXU;xmzh~BF9tLXp7IpB`_V?zMb-l~sjGCHSbriOZSJ8}gK(|6WFf$yO zM*Kr^7lQm1rV`7qOD24I#s@HDY4w-Uv`eUWxu}xWClyzD<3P{1P}MMlY^h3+8PGey z0-=)usar@3NSx8VL*RGzAptJ>;kzW3@%}ZrvABa7F^sP6?)M+19qonGD~)=H9Nn zLau~i<}C*;PBQlC`2fV8j%`L00BA-ysFLL%<{>($@~df^Wf8EzJolH|HylJ{b{L4% z#Sxe_IBV){2%p6M+BKh;pnpSiN-*dS=uE8N=4}6z0ew!M;FR|KNuvSRj#ebG}@tPC4WU@Zlkjtc4-E$VY^SVALv z;~l~}=Ee~F4(AO71HMyw()BjL?FDQ*iNxhYo=ZqxS-&ij9izMv2kS;kx(B&m^46Bd zJ45C>Bs3gZj$Dh}e>1=0INO;w3Jkq`$vwC;yLmh;sG|~&wY6postytJ1V7B2KZX6sd&O@h0+v8C_@S;b_FV zpo<-|;0$(1PSvD5{rQH|!C<}Wstp0}V&=h;0!d1429qiz=Jzvie?y>~p482oL(vUv z(=#!Ee%zN2{B&~1-mhteoYk5`r2;)$?(twpcHS<*_2pYgL$_dtSmH<|rDc(^nFdM1q$T)4} za12uMdxd>hPEcSjaytPY@MD^{h-o%hE$#sx*6)C`4?j!^M8p6^njfl?)iLa5w++9x z2TkgYr z8`K4#Q}l1NzY2;FxD7y3cSCsVK=Zdi?h&&qPb-D87gatWP)@q2{gT%&DMNr$Mk5Ix zeoVUdjJ77@Fop_Ps(0Dg3+t{=Tb}Oq_V6K&EuW%|i)|*$T4H@<{|0Q zClwpcR%rS?EnRY{U1>FOkn0*V^U4$h`HPsf??3}o!hzTg>x82bd<-rx*NNWyftDMY zG-#4-1oRxuncNT=3bO4~bVv^4x}F2yqAYhKO?gw65T{+HQ&Cj@R?<$aHh_?rhXYE6 z!%lpLLzKWrd;29s|G|z-={0$Nf|Ux4_@VidnFa((Iy**@8R(PhD@MnLYLAZNN^BEST8tf65|5Xe?p15TQ>#I98%Ee{mMS@$_~4ADSCBD)FGK$}303PU4; zhoG1`kQECwh41-}P#gou8|(wB<4&<9J4t~Dl37|k-fUvhdF|>nboUqSiCZ_c5I#SS zHRz8`DFK2HF`qmoXwYxvjg_pkI~7gpLSoSR3F>qN$V$>Oc@2dtpx~_ZH5<(iFI?u7PSGhLW1ZCB z8c%hcO=T5>il8p#Qg|FuVtgPTaSsEaN~{86VKB7Ba&1&ENrsGIoog^0t7jDhF**p_tDM z6BIFb9(HWmKqu<7okUp)Fd&wE#=N3%=7=GyXp!PS|HP2rdAOp@#hOEfQWztmmJD8D z{O-21GG8tylRG^NTz2de0g*g05QuQjitfp8=Q!Xe0Pi&f0(T}8f#9-3M@Vpkl>qIF zV65K0IO%4jO|*Pc*;Ab2ZTfOebr}g(IMy*_`4L3iBveA-<*`1H5a=N zbaciB&rUtH-lLS|4XN(1&)aSvT$MN}YJCC5z(C|P>b{a*^?TC&32N=ffq_+;AU#cN z-48CV3Ho(?#T;7=HGHm|!Q+uWOaaYfE#JN5zR0bCigt{v8b7IA5*fmYgTTTJKawv?NUsR80){sZhq3g_TY1Zc0#R zhH&nHl!sYac#``CRF!}C3rSL#DOFf}Mm_nf^CXZ|Uw@C!AjzWncFxK=jw?j)FT2ob zi8}uZ^U=}PmhufkH<6SoqTM+b;{L2BIvyV)jaxRrVE=JrQC2gcx86A7$~)#bVS6d~ ztXch4iC>Q8W6u=m9vqSC{c9{XFdBS3TiE3xD|5E&OC#( z5yZ@at5E)GXoWQ2fNasCSsCNT>D~#3egcCXXZM+RN+1G~8+GLfc?^a}K^(heg=w{Y zul@F&o~G(*V}|oGR-V?N5o7K&A3Q`!(7X=sXaLPHUC+68$Ebap(n}e#G)JS$tYTpu zsK})w*kvZ4kV)M^Gw6J`<@R+V(CpzW!AACmszN#Lnx2#I8soV)VmOsn_E50k3uKutoK)U9qYgU9W8t;6m z=k`;zR{E7z1F9dPwSzh$A{+zq`)ubZ!V5!Ds|xfgTU6-Q+^Ve&rpII7HkhUg!5?jo z!IEjq+_k#$)fuW$GJh`DC{RG!=wm!LXLtV>ZRu0lNkx@iK=WFN4s37l#NmZy4|HYw zRds;7LoN)hZYzXk^z1D&Z1TkX0`1$rae~~!6o`>@p)G^XkXDl!_ME%+%?Y6e0?&aX zA-OI2YG}CsF)$_e6pSm1<$^_^HM0-TH_kALlk^E(zJ%uamkE|YyRM6r^oa+)r#%TO zf4Lf9=JoX?FLSCk%yI5z##;nyNUx;Otxj6->r9u!D^;^1QOWDl+cb-6Ev6N;y%JuB zHkhISr_|7jo@7{@^ni_g6;ifuHBT0d0t%SXJYW&*w3`@M`|eLf6_Lt%uQQ znGgN}>@0cpTrT)se3@(N4M4JMo%M~p#jLnG-a&JCG_xB|+bzM{8guk0C(>ca^U*p1 ztHxj~IJd_-nZD2Wr?nl~b`!6X& zbj+U4DQi^`+(R$7EorZ*^Wev-hjY(|ezf>p;q>m(NFUe-76dq)Qh97#?Tj$o6HbJl z*jl62#8C^yaqq5cc0#c#|L`R9XNsh2g+zp|-|5`T+`qSO*V7Q2Sj26(WjSN^Au#T-lc!xM5kb9cKFG2JRfX1N)Kfb$I6|Wh?1tAzN?xi*oFb~F1 zu+>r_7iQkF&+*GKXy^&UAGj(^qYTAkE;j_dTiGVJ)A6EJSxlm2zZG%f*+qH{hXW&YS1!$H z`n^Fpm#){dOq)7@5W}cySB7E3r|}C;-F?&jsoq3g^{*@PzoNuD!(2^QZI0R>aiD}i5N4njs2A=gEIkLcX35!W zMMdLyUiVcDeuF5AG+Z`;=ihl91gY%P8`kW|4q)yyoiF6ha{IuVd+HU7S|+)6(uX3{ z78PsU$*ILiq4+F{dUX-Nw&WtHUzRRpp6+-=olUky-xr-{7TMm~mj1ZeZzjQVUKsek z*>7c*2(~|>o=LZznRRQmJ|Mc!nGa4a{8yUdydMTl|I&e&a@Wf`)NRDTFbKtAC>Moq zH{=&GSLt1d@Hv#Ir@-!+1K0eA^;qD$^T}%nG*7j2;d=sFxYg{bXh)bu|KGI$HKO6S zdbj0q1tiGS;fDzQV+lPI00Dj2eqbULr7sM+InQxD)KJ-puO^48FiSVF;W~2f&By zJ2T2c>lFe4i$`$LF1d)BWkwLdp_T$23B8&0Tm-^uc(#jJ`WbR%aAcltezZNNI&Z{g@EyKMnd(liCSb!jvc&VYJhxlETigaWb%V`OSB18L1 zdKwx{j3wf82n(?D0cd3hp8Sx`+%OU^FldWrQa+!Vyf@%k!l6;?M|u)8go_Tpn?BE?n+7ZGp%`7{-r>+kJbrTbu)V$uC%$ zV;)uORJ~Mxy_R%zK(ll;4SbwKhu~%-UQYX~N=>L%ZZj4albh&W3Gy~qCnJfEkJSy* z2ak*egX1L*4L#Q;!fusfD4k1Xt2fkQ`?w2#_G<0Qi>^;y9R5lwEXSZ`c}aRigSJ=p zH8RW1?rUo+8Vij+doIBv!|d$opVElWVvdWf`LQjFGrux4X*-Fquj!r*2+y+4!lGxy z;<#nYRBE5Bn37O;(C^HOQQ(@RG=2_jD7F54tqttp8+zN#8KMrxvPArlCTywDJv@gA zWzT?9u{A=Wt8R*UM$>Iw47J_T$7e(TK-}W^$~c)_4QhV^E1c$mPGVT%$6q35!&TFB zj0%HwqgN%8(4udBIS($4lfshLs6kx)=sHrOy1Q+AX}Z|k8@W1;3wx7i)n36Sp~%u@ z;sS>q(}XDe4_h!R7@Rr|%6XCbirD9@DN_uS=+^WB8>mW6mqBy35(~!DWFi1eJ?-=| z+TdnYMm0HBt!Yy7_KGVVS@wO^#iXp&!tsVngLc_VZ5t(PiEg0xBOrgv;L3(G)yWB- z2{yr6BdE@PYs`9WD8571$@Zt|!!E>r^~$x+bXR5-*=#z`xJI*DYryaIQOwZP~gjiAE$djnL1xD(MCG zi79jDfq0^v*TEIt%~gItlu^?9i>4!%HcG<31D7bgC40sXuckoc3e(}EOwbGSN5WBg zv4E%#d<;p?TI?2o+xKh8Qp;X*p4WL#Cs0LvR*gbMrv&;P(1su~wbdH)NN+u8Ruvra zal2d$VN>_3OGou!k~IB;w~^6g#AV1H8$Q>3;3Dwb(DvzpUm50Q0DOw~u)C9G!q0fnpdY?I;l%1HD-ix7^wk1QaT!ib;MOUTavH{kI-#Fh0+8byw zuThR%Kignf70rDQ7DWe>F0bAz_;F?Pp9CiBUCO;JG}Q!!w*SNhDM$YdK2O`mxtBJn za{<@Jv4O61pyNIB{b;mO2zD9)^m@+qB@V*@BK&o4+=6a#(Iwe&@s9bsSO$v)qyL20X03edJ`nkmMGaoGK~7s#EG6sLo6dr z&`ZWb!Yc~xJFVL`geGhI4HPrvH^wYwiCW*UQJ@AJKFlFks6o|K(Hf>G67S|tx5-P3 zXcRXW$N;+x!SlsUzl2GT=e9GDFLW)$+cWbUvw#Pu9!=mRZ_xyb4Dw~PUvOOd^l4)kg zjH(5h=EFDFWYolk6Wg-ne)OFiu;`)O$9N#+*bPH;dO@CP+1=TroM1 zc!6H!(0;aA9t93)W?=6W?%_tF6$BDq7DmVPBdmS~x7QmU4_2-5(sURv?#wfOLB~%P zsL}aIE%YRz>%_3lj9>tjTSRKky)=^hqOTAcxD7l~cm;PPj?sQ7-$kg-DEL-){u~{R zjacfny9hwx1&oEJ!=sV~Vultk2O|gYjM+VCK}+Rafx8mNu7a6Sm;K!I#_{bcK&e0{ z8V^f2O|5qg#w^;#xOJqrV`HY6Ff0ROglK-SGe%jW7ko|>r*dUPTGdR=M_N>5*{Y^Rp#mrkOjI8stc?|JcPngPpJ?@ekNb^Np=l8T% zzF1boASlF<`uD4&(b`bHA|(Zmy<$^e!-~wSH;^?bdQQU}EM1_Rhb5_rO}qq|6DZ@) zlgF^M0$3;w(e2&vgcPEHIiuCGnd@bP8M-~tWn@JTj;f$$D7a=%5;S^31F|wu|6ryA zEItc@mtx5tdWYb6xN^D8FkmYv&A}^rErWU*#bMAjd@u%Omn^>L$NBbSYcNxJil;v4 z#NwpvXajW+W1nOAO?#|b8C!yddIS0YNUdOibnJ~~=S_OlkjoPY2hDG{MJc@ePL4<` zG={y9Xed9NF3VE=G0;KAX&K?@cSJdU{sIjcGkx_+@gu0~tCT{ciI>~U!Yl&5ye1T{9M_!1+xEUIZAXH(k+S%Y?c_`&??kjCIT%x}0}IlKx(*VPy4FkSJK z-rV|Bh&j9378~E-lwpxBk}l1DT3-j8oXQi~DTy+s-s`{#nN^VD=-oRRwA_fJ z1l+=?xn%-aDRP09|6MEgz}%;Dfr6g++eT!t@{xB_sfk5Dl@orp*F&up=C3A@z})Io z(aNIvA+&c~PBB-ZwuFDVX@5pj4JI#0WkwK>UG7AlJUT&Y(UsSL$FF^RYcSrIp?qY+ z#NDt4PEeuu!<|;&P5XWzbrL>weF3H;A?yW>gZh`i?sR3X{tTc^UfFQOz%OgW6F!KZ z7^)&oPv$23&!#0oav4LbmWHRDe!H!2ypf!9nD7M__Z8|i77i+oB>dNIXXxl=!+tWM z6qxTvi^-}vPjvn5CDvW^vhL=M%4*{Yo;#cSSY&em^S}^S+TB+jItZ%>&o=;wgoNe` zaGA#IRX$~!68sZY?Ha_omAy{n{SWW~UpW!Jj8?EmR4ud2LB_eVz{#f!Vr{=Ir#nkdB#zfR8j>zjXl+HI+;9;#ekwT z7DaZFq;&vAFq49zk7wK*V|hq8od`jm9g+-~mg2}YQy*K&xnnZPhwFnY^GYe^ZjP6R zvi`^vl=c8tYI#40)wL7%bu5jtT7A_zo%sc^LvC8iPLoQz!=Ymp-sE`9wG;NfR`I+^ zf&4|LgR;{aaWk?O!+#`3*NO)n)r!1*_MXG{;#!nkYzD_y%Z_X}^CwM_n)sy>qDrf9 zpV0@bp$&cZ8_US9&V^`hg@qTeAM4R_GUyeZ&3OcxABOx4Ao_+9tM}kP2p}(MtfO}J z+WEjb-SeT=*VYmdEV0*<>*^S6k;+B)Rv6lS16q8z6^X(wZMJ|)bM z(Q|$%xE3n)EHBn6In%gzbXVp>yuMNz3fVf=ByM;$!g*xU_?_f1Dat5lq=OEh+;P@v zeQ%GmL90eW$wh8?$nGtb;8Y9pCW$z>F23SI$@FzDdGG@$Ysq`y_VCn*wM9PoeA=g^ z;Io-$pD6Drl&V|CD^J5_V?;qN+Vrs}gEbM&qvF-<^;b65&^?}}M6Sc(BoDoi7t)-O zgX~AyEdFN3D~L{D;Z>;gJ7w$fxKGJ+PnUXblzOJ|{vJG%U>eU!nxmT4U>q@1k_nh>pnF z1P6+LWr{WswK&9}p)|lEw^5+DWy><}b79Ut5(p?>1GP_z%9Cx+F!Yo%BoI2XmW&N7 z3$J=C#Q%LavwTA)risj<8zCX`N&J z?%!l8F;;5~irDr@=(Jbj&(dIn%TufSG zmgt#nRb_WCD1Da&uskO^6B2DeL$YbI7P>ADR6vT`>DgM_f&C9Mr>Cch^%PG}|H@<- z;G4w6#1|W>evpi9SYA*GIBk(ClmJ&PyCX8M_t}p6YV{9i3sI%DMQgw#?tQpa#2lGy zqer6U?z+K|`(7_evpM96lcw16MU5*q-2tX}MT8raFY&ZuHYVonjp8^)S-PfQ#?{sf!wvr06miT_OyGHDDPjhl z!5<-#1%su=F6IVN;AWcaLq_|)&CgN#Hh;+jB`0m`g3qT=0;m|v<_v4tJ9bmWI<>l| zu@&H{4{UohN*l&)h@^Osw#&r&=Td~$Zd@b9ub!*}Xm`u)V!dJ-mvzXg21!anMoax7 zf%&2TnkurmvbdgHExj{vnoQ&4IQQMBfa?4zL@u8NW{B_ zpLgf#hSDTak+zswVm!AI<4ktGQ7=ZSKVmEco_e^q!|Y{t<)xrziOy`d%!L5;CGp;T zLB*R`vpS7^DmD)l_qXyMbGBPB2jS)vyeUJ5>G!{RW`Iz2H0)JL;Sm=P)vMgkw#vw@ zjRjRz$sa@e>AK*T9l(Qre;mdH$D$v^F52_|I`!VB2P?t@qT&nT_pPBzCU%Se7)kQa zLZWf8a^$yxF@bWnm=qC|yRmSPVXlQ%a>HirZ9@<7cS7*TqVRG&0Jlp~g@wwjO`_-* z1zn$a{n)W_pl=6$m?Gb~N?l zDp6Vb#O$+vC~g(Y8S8d%o}bSr;3QypVrD1 zSq+g|t=^{}i$;Q()Q;M-PHf2sOY-tBMa(X9uwm{$y>D@EO0xCfapO zg0F~lvw(f9{GNx0qX75K`P2WLz*m94CGqe}sFB3@jnA4+s{QFB8}3rP@;5Q#Zzj`R z58i?yM(zym!wPMIv_OI140s8$A{7C|yCQo{cb=P_gmhoSTAFqe;{rDqsCBw z37SlD5uE0CWa~$LbVRUEq~|X$(VOgJ^$S3&EgnvO>%u62jm5wwg- z2Y)N8tdXFu2V6mWcoHyO#F*E_nV zYQOMWY;mnam5D0H`ql>W$d`iOq`jvtQWDMio+)}q?@AeIr4?K}G6Np{T>Q3?Cw%>er zK~ogNip|OXK#;vTxTDnDFjeHCO$)_+F`|~~C@)0mzu%xaXq!yU==1@b?({~_As>23VY2ii&^_4C#q5#FW)mfqd&XJ}VxH+RoA2KgkuU3m86U1p z`lMde5*Ng_yRTuh2c|#)9L3eVS+m%yj`J?zzFwfY`;Z^fyXm+0|3UMkCV=C>c7q%es}tg!g|RzkYUo zirSWOhbLNa8Z$OAJSTDoQ{~CpSW^u;(=8Un{$r-tY{q08&1PZM?cBCqa`aIQn+omo$rIA7(e~yLTF9Esc4j`%A!@~bw`_4?)O8j2g;^S zB6kpm{jNx&{?8@25jktrprT#YPP12HI`gb@{rof2ZbIWH=Gz>-JTX{xHZbA`h2GN6 zXe5=%e0qi_iTm64XCwJ8x63yD9>F)0A+*8~uz}qCD3+Xre>cXwuPf2t{{=4<#ULfb z?EX6V4>u(I33IBX%pMj+{>zs- zm+(Qj(pOpZC0NsmkcrNEkOlJC-QBbbFvb4k92av}HO3n}@A&9$18%VS5@sA%Dg6dE z4^Eb?V?W$Nfk^Jc)u1aRC^mIP=cUK32Mc0;X1gDkTF;`B*K*yT?Uk$AwwS6MFj_am2M;p@l@!l%dET|0tuwHCa=I3eC1LANgrZRP=rBtbPf zFi&a78HcYEx)Poj0Bt?rGjrh>=#{+sQkJ&Zi~QSL<9hGlo09V0mi+xc2uMt?F9;A* zJ)rgXzv!&%u{@xWP#*Yi>;J34{Vxn@`In`TUFLsw9RKAB{{wdstH7k{j(!TbaQ%a5 z`WGY^752dg3kv}i3-YhO!<_%N=kcW(r}|zyngEhP?8_kZ5Ay5lM*-}4+@p7FK)v1U@;=by`)m58yD`6+q11CEeQoACT?8K0|+xnOAvce}6xfR;O&tG9O>cZ;{(XSxi~_+y|RKLjtovJ0%)hwD_GJstm0(U~JMK@|S+nPq)Fc-Z7=$ z`oA8iqTm{PUFQ`$ng1AJgk@o_0JSGy!Q3oQbZM*@sac~4>M-O%jR zf9$Cuz7oQ_+}{3IwEWiycb?;yKA{++jxV$tf*4gZo9$x5CRry7>b@@1^LRS{ z989m6OizY3Idwx7mvzQh7{QP^*u-I~2T#9U zJAdlsG$ty(%Kgb#b4E2H&dI>(uFPyzsk8}J?^=clyt#@~bWdWohOxmaJ8d?UyepcZ zh;eGjgzrn_?CZnJI~eLTxF#y4#l0+{%w*o~V($b+SPL6vbEL6sD&X)=1IvC3rIr;e zO5y)y|DUrMG!9Sj3uC=b;f@B>!KiGwXGBRfn?RzD%np6+xO!0O4hzj0BH_u)$YJC@ zma^q*XNPce;N8nj>*Q|~K7h+faN2dU(G^#nwnTk$NlvgBV5&)=b<-T8m1w=Lpc3TcNv2 z>Y_CdAh#eykcPGcmMW)>^po#Z!=H;*|viV)%A1RKq&u z^)%%UlM~#P#PbF2YjQLv=vS?6M7{Aif?N<)MurTVn_Z#*QSko}v%!U5G2c!JVmKcG zh5N-%jN@0#HkBCy4kI%P1zx&>^sGGA&5Hx@XUOu=E$Ha4^|!asMDY7&9&OW;xg}7X zO5W-;;kx3`#b+Vmn zL3kCcXJ&@c$U8B9m#Y=RqWvpW4e@edgWaf@IdZ${19rCh1DZsTA>ncv!h$@t5lF&%QzbxjKR(0r&yGv~C zLEDN*NKuhVfYx9J>64Rh$Dl`BX(Y7^1*iI}wM)B%LC;+mt;cJZj{I3%xiBU2$Fpu} z;mWTcEz1vyl|LG-?$JXFG5<4p{x7Uv$@|)|BBH2-tVLza8ibZd?E z?F;_=vjDuz=5>0Uy6J(`M|0*c*Tqw^!?|V801kZQYrp#HhTc189#Prv9;YY5S20TZ z7pf!+yb;kig}HFcx`Y02$2exoTiYaE@F+v@@b>0D*7cs5%nE2+=ZoH%XEr~8v1>)* z&=O?nix+wT2;aeWlQgX42(de0{yK#!^6SvaD|}SW&k3YqPXqg;fxA4d$;gPzbNuH^ zJ8InGTWwSx+WY#?OPMqiELVHQ3vXy&H@)w<7F}7huH|EDQtCYdYo&Evc1t^*;EJF- z%MA(=Z%+A8P)QM+ABhnL?3L0`mFId;vm9TtM;sj3vQ_iR70E;B0g883vn~|DZ5EIC z6V5?fezEEDOKc>x8`nEV`A>Xh!#J=dM~6j4vDd$hC8#>oo!_!`@}QugDxKzBtySsc zvE2SDtz`Xsa=`97|6D3cv@KvVD}iBJeC+VL{I@;@u=WSk^wSLCwCN>f-NP~K;i8u_ z5Aax#J7p)N`MwzWW&SnRQ>?l_W}Lg^ep6{4BYCj&dLs8bVe`|d%fhMkUO z>ImX`PqMt}OlBZaoZ24oeTTD>82;FN?m2M5hp2(c5#sStKYisZ*8I1gtFyKY>nb*3 z+cy(jMOo+|+h~6Y8TPp%Odn2BWwWdO`G4dv9*kl(-q=cpmNLIULxWcvq_Hqn=9dti zF<-4i$HV*Z0Tj@M1^M3XN9-QHNf`?Kci9>L%sd= z&e+)aa1GK0%=vdOA}!R!)t3-j3s>=KcUPts=dPY7Y7VVv!65d3RwqOrRTGbvK3*~P z?(NKP?@wA-ES>gw4h`#lgPuLa9uQt{Ynp6v4Q17S$3kq`&LZue~wx@J4Ir~`fHppRu)fkHk3@Y5Z?xVmI2inyyH!D0%O&<#yqznV z6E4|4td`dz6K@6Nf9Dj|JDvyz_^XdvYD%f=uhNS$$RQy}q3?QZGIUN9bBE}Z(#meGZs8eWk8C)_BvICvJTpb%LsG;&v4xliH zpo3mXMzszDHu9$NUz;Ehu*|uzUX;*okHFfeFhQ3D=X{dxaXhhqN75;mInj*!6Cv%M zsM<(W@bbJf`Cn1{WJlR-XjT#h;9wl1IDdXnJSekjA8Xr5>RBY1FIZc9GW@c6prj*f zv;bqy>$NG6R`ytVOs26;NDc%<=DO$SUC3W$a%t3rdw`CWBZpip2W~=i`F`aqq@xNV zr5iZ-0sb~a-&Y!R!k*>AWHTeN~R<=a++b*@akWXy~NmUk~WQ7!%sCqgh&K@OgJn z&8_|Yi>I3Z`nsu5`nlE^F$nH>edu;bxX^r4V^X+T;(0-b;B?b5(cy#Y9(>pv;Lp#u2YnvW%>jil)r}JI&0Hv%aVI69C%UDGHF6~B$E#z1Bh~D#XCHu6P=S0j8QZf5VFIr zemR=+jZWpKtxdnnCdudFgS`0(u4B|W8hsJ8^{DapV(j~&`ndU-u@T5RN0$O7*2IZ;6*lTO{+QliU!UeMBw>3;uYyX7U!U4ACD^EMwUMOT?E5kIg^XfJ#^# z*ALm&Di+hCa;Z(ha~W>`JWL)?9?4e$YN}Eqw?%41yrEuV!`aksqlXz3a4GwxMh~zFWJOCzpo7?z`(vK87gSH4YW}#9 z$RyY^bO(54-Qugy<~8+bxtkMk*K%DJ6SDP}GrS$}bGfGj`Jh01JYsbBv`Rx3`@nqv zd34Id3G~4vgyu%^rY%%bPu!{?QV8}7s}p4x3@(m7R-W0|YH_;+dL8Lu-_gn}fJC9q zV0og24_~W{3bXG%z9;T5TRvBsk{T@sPD`rit`efpm*n-;IkGn#kz_CZ9s7ya2Z@fC zOQ8!9TCGjG^dV`#B+$;9aVPS|vsu!ZJZ_QH2ao%jtW$-8IUZ{!$d5;uEAUDh!K;*L zu8n@g%brM~B3Jq#=Xh^=(q2*{w)?n(vRwXgy4T`tq z(&P?}Z4PZZC&ZxyhO)z}MMr{w}jl$`?q2Z*$;GcYj?UPWYlg^X~9_&o9XniM*MB^z?v zCopWmZTz!AeFl4O^UbNw?m&xECC|%RbL1BvcF`G?Y|>10>M|?(l=x@ANznIM8dFNo zQL)$rL7ay@nmMtt>^GtLk1cNfZvZYnCnzHZ#2%FC#bE)F9%Vj!jxLr_W2fDEwKT}M zU1ZR^Ij#6PToE-k9@-C^7^!ILS{?)ha&Y*j(KcH$Otmw$(KHl|)MiZU)}S*}DHzei^K6A-G9qv*yuzH5 zN^j>scAW??*ow-9V-Tu>0ZTsm;W;B&i}I_L7_W(kDBPgAiU#H?Ky(mU5sQD!5O2LD z0KBZRV@2dOz|O76i2bA7INHnX!CyVQB7=EH6RmDv%I#KI?FQ*%wfzYwgh_BP4%AOiU!2*>3&Y-xChSi> z^nNuRx8em!q)Pmh!o<&-exR|LXmM)9=!*ei6Q2c5W2G?pp_>lH`6M;|u#kQS{@Jhng4d>%(F|aXW(fyog348hqc8 z=i|qNj3`FCmeK9g&q7SqA*YM^A{-us>1dyz4g)L!ZCF?Xaw(?Z=i^6z-$c4lcjS+` z_J|KTt_6%D$+c~nsmHLyn^=4PaC|J1bEZ$yk~Te~vXBcwW{53bnHL(HWLUAsns1R)5l^)G<`ua_8?j^`p( zuc|8CA9ZJ*Mo04GL&%^8?(TP>lt{wIIA>)w{OIWqRrnSv*_hKz zstzGC?GE3Ycv(c4%DbHo4#72C6+{NmxVxAv45o~-tee%6%^T_>I2{FL+n@SSFwnO& zDO>wX~g*iL?A~6n}Fj`{WwC8FG09 z*~J>UI;ZUD)1QNvIOUp5KLMA$h9KCc$i#!L3jAWsd79(E>I_gjlvx)M2!Y9i^;U-)vg(hcj3AJF6d~@j{GccK_@itgo zzg?rs(l^a)awkFQOJ&ps%J`1vo@eju^BE6KZ>@8WmVG_22AdDTn;26x*-1qVM$F6v z`!lQp1pfJ)Xx6q*d6%!1Sern#rk-&YdF1*AbRGJNdR%O+#RCG6w(;iU^*yAe#_?tkwuCt1&u<6C@Qx4t#97SFu-%#hK5YO!ib-#xs{{o9# z0D@K(_2jjFNpH^o@xHmmaYNq3D{II3izSDnkVG-FDm81r85__Czf-t4Kbz5?zL53j z90Jm6*AhG%2?(NlLhX-%{I}WzG8a>?Ss2LUavRI*Ne^Xb-5H&e1g8dE3 z8dCiWwb*7B9HUO^IauM&Au-7+L_U8TXN=8DLE;CQ9%;~O=-q{1jRwW0@*%~_n;&3) zcAE84*g9?4;_m5ZPBKwN8+yZwy%7fj= zI91#HBUqJ~EG*u^1Xk9@C1yyd?uV`qc!?P&r4u5VG`8cr7*U;hovr#dGyJk1f4AM0#SS{jMI~n${O^uu3q=TozQ3fxk+h0Cb4qK#v)_= zWjhXy8{gso*wDXfa#;y4;BNYV40CXp%}|a2 zD9xJnQwKE{0!m08wiCi>A7q((XaduY)EUVi?*=z%+J(eq*3YS}xb0LO+6nHXAo$c0 zx7gp%SrqFu)A+0n_P&HXRg{4V1J+$LIZ8MWN{IKTieBUx@E)_gM@yX0m4}Ve3eXJr zPZ09p8XlR~G-E<;gBTwy?FhrfwcKWJy2S!jx=U4#Aog}0@1}56@0(gOLXR*Z8E4+d zNvaPEKzk;shjSzP4suB#7;IO+!B7`QzAo#`Y}zoMRrcr=7QLI1vVxKn43()csa)TLJk^}Nx!M!_To9kn zrKqE?0}P7#pT2Y<5q;Dy-tPcE=0k=oDoh(uMns3oNnmv+RcIjaOeBNbTDv2d6)SN2 z_HqxbIak=9Ne~}Zx96IVj&k}d87qqd{%IDG1ej0nH4I0nU`b#$g7e&ye`<3h+04~Q z9nlzI_W&#BI;PVcno;?8{?XCk$m9l?DutgsLHo6Y7x@(@+*cTYeqIo~TW*2mLJxFbgdjNU5m1qWvi%UyL zi9t?UjOBT=`RS)h1xBssfq|pp&tj@FoZKhOK&FqEXm208H8(Mz2QAx2cA zKrp_EFQvQxWt8ZXM2%?DixzKI+|g;2cX=Q$HN~{*XCxsI9wChUkFbw6;PPEBP-2y< z#~7`jK_##WyBiuwQ4kteOQRk~FpYWY>dpYyK^Jh+PlW?Q*vtu93^Z4t&-bBfM7g`5X6ez_8JKpqoq!tlJ zsyx0~gXRN=J`vEv{HtQGK~oE~?T_w>_XoQrJC7o##QPMn45kL4i8uXYTF20SJ3;S- zIY9H%og}9@%Xo>Ez3c2uIe(=!e?0k(fEm7IY@o921l^(CKD5GbcnY1uh5^&M5rimZ1HYW`o&Ou z3}~7h;3szqGG^Sm4E}z*X&(h`2~1!}LuqqG9?e|7+}c7lSHn796@@{LB1a1kOG~C? z8@<~knrzF!(nvIaizrufsRuLh!e+3k#zIe;{(uEav407!&vXr`{%Pf{d*~TJ%A*XY zU9uE~AwihRq|vHC7Ce+=b@_f$D8SfOy+-RC(+LT&Tae7KZrK!FO{eyIfJ5iq(t#d+ zpm7sBbMt-HZ+5d=tgZN(t5g(-aG8Oi_ov=gfKBEo1#VjDAjBin7T1M)#@yzXX&p8p z)BrJ+qd|d^uFaws_oG(>GQ&+>lTGqy=m8ohEjz%)a*sH$s}V#YD=Fzq*QpWLdB152 zDHD=6v#k7dz{a1Bj}n-O1wD%F#cp$$RINqyCr)6+`6zJC{ZUPE5!6f+dXidA@9Z1D zrUi2@-=N!5fBrg!_6od%)v9+{jdKAD`4Dc}rk%SHMCK2HgFt zoqZUZiN!`JiR+-2#vRj?#c0UR`CStYkL;31^WC{*#?psS-b$Esub$);T9Nr_?A<9K zRvb8;n$yb|Uwi~r^)AU0+O$7yUWTuxE9qbK16jE?9jq(YS*#OITgmo}Wo_iI2BR+2 z8BNDAb^-a8A2uoe5z)M;R2hygrc?sqRb^pRNZ3DmQ-6+-x3=n zz+@CCDZ`)nfJo?eVZI3KM>G)BTDCnkO!^p-7~q z2VAGd=QYk*`{B|xK_bVlh`(ix9 z_$+~4aJ)io8EuTaUAr=9RHue2!1JCx5!3=|xqD6v#_AUW7(cmRcxM1ifZ66@Y62QW z{>&d^qTFadxX;^nYJYus>J${?hgoWNteY%qEw|8(aO(ufF%Wz0j?=wD1Chiym8gSw z4c}+ehJ2IhUWS>EqOhD`Y%P^eNr#pT~3XA^Z2oM8mB z0JqYU=*J~IjzhKV~Rd9}{@3p~_-U{%zfwFbc&7th^i8Jya#Pe?vX;Fs2SIj2;pWra739Zu} z&)Dmm7g9r%Xna&aKfaDJEG~uKx9w3S2SwF9>aki{C!AL zF#yJUap6t0d;K9P8+@Z(#KpEH7sqH70%|MsaG>K2N|N>(q0-^d0p$X)cS^R|47ejbyyMf zcj#y^(VALmN7PMJrT6%FmIqd|oLdy_2g19_&ZfW?60};?+`R1m)eKlk%sfUl#`B`)5g#rd*h1 zwl&4VlS9f)aGA!}Dld;gn!xE|fF<@#AeWe}YUVP9%ed6Y*>NtehPxzW9B2&x;&8s) zuhVd(d8XeJ9E#pll}oRBMfVrIqc0{1LXXjfwK*F(rf)`#-;H6>!T|NR=+SkD!*gt^ z^BI3_DQB*?Kb#K(%#_Y!n@*Y7A8?(l{Mr<%Quf)AvA+Ri7gR|HxN~h%vz6l6H|C# z()%AFKFcrzZ5brJ^iED+X4if2@YA_FTPahaB8EOY)uK;7dU>Ml_mXWA4cmHDM3p9_ z0Q!bsWQ2X*#A6Isem#YYFEmc}7OXt+#nTN7n3Oq}2jS6!dln%wdc^$BiD^>cPat7l zO5S)N*#T{{#`6h6j7;fQHs4mGN{4U-_G{7J-nO?^Puz8CZuP`M>xm;p*Gh!@6%OeD z?dfW%Rls;qq`{5FxObPLnS6GMmbEXU@SN)(%O$h#o+c*jKEMVq$EX%qj&ax@rV4c5 zu)-9MMS?yN+QVk$!q#CmRd_w(isW#tl@y*>5&O%vA-uzK6X8*IX}6%o%8rvjZb2PR z`=N{clZQR>NF^at4c8UJkLER#YThSg+aQT9IXUEhQ#y7wPX3hy3if^kgZw^EpE&X!xyHJ*h8+28=-j4N9u_W^SJgEx#j^`ytml7XiobzTzLUknb*P*;rvOqDl zf-ot1v$o}JH=wkqh^P1oqjsyz?r$wX^Weosz{d&8g?12p{MT?CNgz-ZeL{v#E;s&O zgU!=(?uD^Iy0zdeQ&~AW%J%i z#3LEOt2?;EcN%ndcJW6Ev!F#eIY3X#kxOrV3t_ZXyE=DEhL}B08i`UEK$d4#OZ=R; zzj+8eMVUwSiNg0{vkTm1AJsugV9Tsd0DabZtNQZfj?~#T6!7(bz?J?OTdEI2U#`Qv zL-Z7Td+-(%A%ef;B1VGT@Ne(aPx6`#6ywb>KkI|7V>oYREj&j@v3d*A)_xt6-DZ9c zIiQN?BkSQFMpN)SctzTsZI@?so!RSHERC@i9l~^~FCzA!f)UF#;d*&ZL*|bB{;Y2g z8hBdKootTaKO2hRmd0xKAUFXha!0EVjJr7k>i&_fvRRi+sqBG32o7fF=Jg^n~z;_Y4g~YDD9$840Qn3+vZwWy|DvhqkV!WgEOu(p28+;e7{tS0+Ya|DA4F zYm;Y7zp73}3BZ(@X;2V_RPR&tKl=TPXY<2HE9`S;+7N?OMBRdm+Q5@o9vgeu^LZ2(w@mM2WPa}Wg${u63m=luXfg1iDAtNMI;x}lO?%@ z1Vr!Vg>hs-_2IKcQU++hM%r=68ZEo`(nBIoOFJ`sq=OMFWEAj3?48)~dk?1k@v9sk z6^En^9n0>mSQSV4&W;3J1e*zmPFOv0i`dDaPP^7LgLX>Q`x`*+bc+6o(Rs*t|41kKHL65nQ{x%%NCPA4o1qKWWWUm3l6{lN@vnPQqB_;PD z*C&H&_Kjne<##R!%+mU-<-{KjsX*W9{_!1*LL=R!SW*Gk$mLp#i>rZ;cS z1pI`m8YA9FXWqT)Gy{Vc6qD?moH^-MQWu9t2RUq7vercESUSAhpH~8QhiHym;P#Hz zz-Dw1nyV<0GT<9D<`w}{B_x}YFGA$K+P&*v?wVYXI)}08A>Q1XqF6jg!@h?bL@{+@ za00z@bCy6^VX%X8yr&#!^{CV?wsO2)2nc~cR=3V3fBN_)w`f^qY26Ry6vPSs4o*`G z)a^=uBoe z=#@$I`+3W?C1wI`GBeM}Sz>io7mfQ)JxXE-+f2oX3Tp^JbMtO?g#UrjAO*GYuXTQ44)c znHPvEj3U?Y`h@(fQMEJ?jY@TC6YADcRUk==3sU?vZdDiZZl`=Fr)^>(1ng8^LUPK( zGCEF;A7Jf9GvU>+PuMPXLvX%^Y9R2})m9acW!$;4Lyi8sG}di!R&{=QUJGam&!7FD z;fSd+I_=hHHxKVg%rV>o8l)*rj#Q%pYyk<4g&4bbmr@pV9tWH(yUDtCAKXH+{`Y8C zyu`q0mL-3{X1?wj7Gn}i+!e_Qg7jm=+RZT2QbtA;7 zFlX48_2~^F6Bm77I-sg5Qg{~BbeEJs*P?j{p-}#GI#BRD4Kn~ApP}bFJj`V&Bd4ii zypqK!N#kRTXX%a90>cBKz##WP8`+B(Pa{JtOC>$4a1M3(*6qlS6*7(!+WU4#RM}GA zv^6g}3K$H$3_RE}zG{T&1sL!g`;sA;$9@hk7;(`NG!e6KE? zT18wg(ZEFwxFDqTdBK~W5uv$qeyYNXRv41Nr76+!RFg3VR|{V{El!n?;MR+figh>` zwB1NgmXcEVZI*S)f5%KqA|8U~%>C7QMY0X>D4ooWT7Jp2vKb#d2B`7j@j}y6MMSN8%3@ z!SzZos|<31bpnHLR$pp~YsH%apUPZvXZVR<`$}FMJxO^3i3WP7 zl$B_uVN(C}(ePE$l{lX%=GB#ZFXmeOl?e+B#ps0_)auZoD03GWtoY$qbBxJSWN(H2 zUY|oaWCZ{w-i7OA^?mO5Goq^71Etx~F3w0~GS-F&hLkNPZceiB41j>2Ue5=+*Z6{w zePEusGRlp0*-cR!Ywt=}??QhPLy!rM&2%>hJFw7}0u;4N52Z5bc_Iht!CWQZsmj(0 zz>kfF*qX)X)csofopJ!BYmhLz(L&M$o(IRe)hc89Gn8EgV}kO07s@>-wcz`Z;bU}6 z4~}MoR=uW+6&H&-kYrDhOeSUKE}y566X?-4V_6CM^friX+cLIVU7I_(0t)10EoZWm zi8g6a)d>65g%noIde`|ajn(Ji{ew3Bgx>qIhd%TI#R(K}&eE*>+DL8sx0pUrG!irW z<~T$0^+{nB)H6+-T|NH^#*V4j$MsG%la4xp-NOGv+gpa!wJckpz`|V@?!kh4f(8rj zuEE{i39@jP1b26L5AKlQ?(QBSyp?m$-tT1JbKk$mzx6R^&)L;g)uU^Usv2e8<5GQO zmQ_WP=IG&ayiX8D;F3JAQ|4~F^K*1`KRct^AIwh@gKn_x)lvKYic#@A+Ix3%t4ZKZ z&lz0sxaC48mv_m2zfxjwUA{PwJBCC%YNmm9S5!6Jb&o0V{S#Lmex&xo4W#;g41rxn zD84npg`K_T$IX`E#pn}hnv@ptVr%tDLTFLmO=cm_HvoSQ520r_UZeS zgjhE@aoS871d_mF{0-X&4z3(JRDC}nI6p0=BwM$|h2`yL zZ$4yJs~EhZ^xB4>ME51ZL3OiVQO2+?ejH$>{mi3EZwDeU;&w(HN{d}y3K~L}h6Ok8 zIn{lv^+46-D|%5t{7J!iq5*87N}@ROXd^8Sfu*5nU_^i=L!sd_x9*9)?-40mCAQbg zcN_|wc0AXrG>D@i`{fHUm9rAc+S)u^X&15LQM@+qflH!1#M2;2Nl8Q4Xcjq6gRbLk zNrL;2Vk$?CJ7s@S82?2q1;sXHum9xgBi(05pOH=96;01!Aj~nGqM99k0)gb`=*VG9 z!XX5*SmN+bH6P8Z((pXKzJZO#)1Lfen7@BS=4TR#dC_~6Tw4Z`6K>#udD$EH`1pT8 z=)bS~SLzbt)n_6BT+U>T1U+#Ot4-Nt4+@xn-kR`#B#=eQ_2!upGT`rbg42AWgoRtU z=f)iEIPz*4^nJ8r|NA4}%vFym+j3HW6uZ^6krqv407l0POiSZJ_M6&jSp1cI@Cok*IMhgt6pO59|5 zV}3<_WUMe6IfR=qU_A31i^O<;4Blv{HUo?f@I?}n*f=V=-vNCO_hgweVtBz7ps+Hl zeU?NI=H})mXRoT#9QO|}(*I<0<6VBm@zHFAzb<+l16k^5^}gf;EN?xp-r?wROd$}t z5qNazPUd{)e!oFfUK?PY1n5{5#2P_(8>0*|2&WN zA9ri+r-R6wpmBaA76?Lw-S6e>;HP5w@zm-0bWdg+8~u?@^C5lmA#b!^V1oP(jbn(F zuX>z%8o8BEh;PCn0t#}vP?K)%YvKCI4_-?Uwd61y+X{_p=9$%=9a`}%_Z)WY+*kd$ zrEkC|Yr9U4cC|@&{l`-ta9|j#_$+BukZXs^=VTl*g@{4ma8B9rLvQFXE_r^R_{k|F2k6&nBWG%P^B;aLgR8bHp&Zd>t8RyJ)$gQ} zAXhh?Du{Z(xcD3yi1DyllqSfSj7GMt1Hn_JWEgWCSf(g2;|#( z#p@Y~w&l8Q-p=VB?9m3K?WaB_DTb{wn_aAXPF-t({lEM{y{4@I}UJR z$X@AFBm-SMN8m7iq1*LJ(2wRC=+$Y1w!;M}E-U5QiIA=d_zeb$U7#3X%_&CjtUlXE zarP0Cy76AzPlNR{iw8u!u-)~G#m`VnJ~l@}4hbI6HLXm3QsQ`6OtV&k(6wC>Ockt= zSoWSzX%fgIG;fuw^ytAVwSm4LI9gQ`WQ9a?4tr`cp;5cBDAaKVtyIeu^N4`FNpgXu z4!5wZk1<>=b1EdFp{&)bq>*wcgp<2h6O1z$m;UiWx#-b}%afXnYPL zrcEL^Y&+@jA@PB3(`%dtMo&ydB>3B!VdoOl;olwC{{L9?d4}AK8(RXgZJt7Aap3FJ;f2c&oXT$&}7)D7+N)5c3;L)@5 z$Es1qifgMhhD96QlYL1Y8 zZvH^Q`6`1by`Z&k!aAbM;Z3SlY0W38Ffil13}kDZ)${R+oOkQ(9@Ga#ijr3B!nZk@ zePoCQm-l{-%gLszJ4Nh2(y%VCts-Y(gxP!{1h828>PKynTljqVL@}e3q@V?#9Bexv%R5&& z?E`{pOHva;Q@#{KL2Evj_!HhMY-saT_OHM6z676%?$W+Tl<9FO(tJzk?U4MquD>m@g<3`sf;kOwC-w@3%C)?)V4`>Fjam9=6!Njt zcF0Gaytxdm>(d>}GzF~z;tZ-&*xFrzOz8vRcIyj659`>jvBf}Sf$WfM%s8^YJKO!wP?$`Bu>r!^lNJLl!I#gsdSm;MTDE%q^jW%8dD(iCk(HZ@zVJ<;GY@xiV1^QBBc`a(vF>hfFpMR}^!$T-T4O|xth;SASQ&Ko z(=pVTh&1HoglK(-qSTY)g|bFZ^A+R%&H(uzYk7mbOO!9`aiX=kBo}n&KHxH6(SjpF z+OU`SFzW&r#bGUB0PGhB^cB1BdRU~3u&jtWDL#KuFlO7yQ+QIO>1qG`fDuE40hHc zGtHg}gS;MI>YZ{eee_*W^<%q}cA%C1gHn_`xX5cZP=mha>Cc&7?B#twaF z`?MbH;2cui9Hd`sDQ+2Cq|t>?kO=@1L!q>FJpRa82FDBv;ltr36Hw>u*I}7az8g{N z&c#6agyYLLYt1ZjCMv>7(X6NT;1Jw^1~HcKO}lNOq#|(#s$OEO)*%^^>D_e0EcZ|<5w8f; znfzU$$4?Swvy>D3YP7s}V!q|3A2VY#7tql~t73P0?E@;KaaH3_u&h|9=nUm;nVfi> zwAPc8(?SST`JT*eCO;Z~RnQi+#W8}|5>1LdcOuc2W68;24~rI4!DTx%8Q1jJw6@_$ zs~?OiF_M+_K`7_iHW24nuxHgI8j}}on8D`{;Ukz2b3msF&|7&0Mc3;uRI!J|deGjf z`h|f{3Jfs5lgV+A&*N3A)WyVG?V!GgM2t1Mkb@$IO0Y~239fdNJHh(t=QEiAAJvul z&L^7)6&1D1WaBX6mytRDhy6e5M1U;?$|GIdraU6`T%@>x*|yMNbuRjs5YAp66^YWM z{2@kf{-@_a{EvZQX=X-6z%zPKc93g^Bxma;N0a+$|8+)md;RJo`&jN$vMwhEpN%X; z-(g)?2v;osZHm@Cema{cF69#*EP&won!_N@h(uifz~$SG#w{we@b`GU`M9L0GVPLt z{+rHQHCnr|hrR-9!Sl2`fJm>p=+6+Nz%;aBwvrGZ9+J6$J6A>shY*7Dek~LQe<00J z8-0x)N+*nNO)DlVE367eU^N=Of?_3p5$D0;QP3PK4N7|gN64s?g3n+=&#B#r2-Z|k zi=t7I-oBFKx8IqnBd;Ik+$E{QYE}+&NA3-LQ=lcmxn`As-NtpNx;CF~;)oyDe+nxy z{c|3+lPq$H0-O|gIG0I>by^DohtDL8f)L0jSca*XHIH{>T%F)hG5c4BTNsM4ZJ+1G z1c`k`p1DT9>|E%Q9GA@J-jx{{Bg6?=ugzvkr`ltb)f(bY?+x{6ueWi*gNGZG_^9C#^#i7 zGwWS_rn&@!t1n}K=EQq&AAsk9sKGaG18GeB8X_?Oa7E3?v;)KDUhejI{YnE;dJco< z5dRF5TP7wZ{a~CZLkngT!}`QQ4tj61X>bzle*>>=8w7QA3z!FAN_kn=;$4*%yd3E9 zC7gckH4r$1>?UDV?Z;XJ=SLpGma+oG=uS#p#5U=BV^eRa7yOy1P;WcZVQtW0zAy2Z z1Pk8a42NXMF@;iCYThX^#P@%v@bfb_H`MAihqi=+=|SiLNKMh@&FB{QuX-~M7&o-D zUlbqg?s^mDWl01m2m37>^WHft^FJ;bjDOA?Xv2nP;FLZU1my3drCA20d}LNb5aSOcDG2hP zZ&|V8M?|AV$tW&B60JCKP>-6;UE`KuEA|^-epMbJF&9~YBpoajR^z2vLuh1bof75tS%Q{aV(!!@LQEvsqij-`xj00^V4-G_>M`P29w?yf8m#>$)vcFv* zPx|nppLo~G1C-p@A#+vQu?FgoKQm%^l&@?&%0fqY0k|T}2~bJ~Bkz2W+~{7xL7CqJ zK&S8Vb|_h!YW@s}PfR7H`tC6RHV2aZ#6KO#UsYi)7atH25kG`4UZ*7W^y0GyuX_)s z#b&QNq^HOHA9v)wd^o0=ASJy~vM5z!GHT}|xvvIGC0)SlAAs<$O;9RY(F%LNFQvS&%=g(>V&dq$QfLwVQ$ryW;1=f!2qddfsAd-94|2{Ujkw{+2C&(<* z5~Fhc4B_LgQ;ER8xB$rD7kP8)`QaHgji3K$|C5-CAIyGwGgt&~SHEVJ{wxjMM-y7#uf z0j%B+KCpZGGv0Z~TmD*nx1Ng97U z4%Hr_01W|*kNZ~Ii)WM?zq_AETYa_6^MHi`o21crdi8_RM&8uFSxtZ6b{7c#CRm#a z8GDy;@nuX%B;|MWzuZfr_~Yq)5+&+7c%CA=DI_uQIXagcV<+qHx&B)y>kfGwq?i+d zvR(b6;F1B6B+W#5ZS77!!LaW5rR+Ty1$K}yacYRQ-+M2U1lMlZMZMtvLlYN0BY}qs z(9mQ&#z#Ra+uNKJjkp*T(6Ci$xJ@5>{whuM57DbOe?Y$SW@4h^UN<^YQc~KkO;BaD z1BVpfe*InK;=iopoAbp;!~m(EMLo$gmg`=`Lt-BV@r^^T*8h(u{H}yij9r^6A~Ft+ zB(7uK^Aan8jnI+qoynhP$iF43`aN=&_eGF38UPMj@+@%z01fL8m`Wb-@wpeM{eJ(S z!BI;I-pXuS4sgSoJeX>y8VN3cXT|6j3W8+C@7^kl)+Xp)f6l7?EPcFAyy6u2Qj?{D z=M6a%rVl8;0Xlc42A#QhYm+EuR*y?)+S$9amybk~ndtjVuMl<^tz=$XX~cF(IK@G7E^D?bvwX!7yV5GfaPj9Vw0H9RruYA;w2?4*ZCA5J(uBc9Bj}w+b}4U%QI-+C z+ju4eKekeVLf_7W_n1t~9Sgi1<4ziw%PEkE1wXryxF4!jOxwNM%l`-{=m^L4=|$#0 zkIOf*ZmpVY;=|(Zn5ApN3oI_+S|p~ZJ9t-A_8A+(X!=J5L@Tde^HI`e53mUSJ^uXZ zxuv!zQa3a{E&$?3On?}G@H&iK`4);E?T%k4-WdnU*6$~uje>?&!LX;dFNn62V?}au zW#ksKQ>xCfZh&~3KLEm~3ZNAn;j3)Y;k-0bl1R-9AJIop74c*|=EqR~z;gXLoZmx_ z6TIkgjp^L&RZskM7x$g|iU2f}K#BET;Jg?yycc*2^ZUW}r@dWfOtnd%LS#k(B<6S# zT9MLOco2co+de}von|wAHV^ojSJw&G>0!vAc^6EHPTR!-RHM*lmLXC)}_>u4V^!;OcSp zN*fHOmgv`+-7kWUceA@E`=xSb>PiP?;GN31~Mm?vtVyfE<1tZj{W1!3QL`& zLCIsh{aV;7hq2IGIM!N?qp@nNxCY=gyj9au^mmwty|pOjiZo{>fBsWf+IDF9%aiL8 z70L=8QA@~vVH`f0#_kSnLVN!fz`ed5uu=(q3#8fu(KSWuGWn{xQ|lj0=ADLobC?bB z#+IYhCDMX+!Oa@kv|5cp(Znce-hM zLXB4^Jx-XzBk@uW5cutBysOi}r43PdLT9sz?A$us46v}UvJ|Mo^8S_P^q(l_&g!ku zYKngHV46=dva$XUD<~6Eu{isUx9~=ZCh#Z{h93*NeD~~{wJZdIZG45BN=%OK)(-Hb zefTQ(CEK?0z`k4k{=tyC=al`aTb^Jn!An#h=}w(QfT1Hn-UT zEa9Az58K2zvH7LrPGKD@Q?A#~AqPafIdL087{Vi@HRI0*=cTr=kbRamP*TC@H@bmA zlyOQ-77w^+eu+=c&vsRm zXP)RU$*hX~>AUC4ppJnttqreu&SZMku@%*j?$LglgRg}J=4DlI@+L|O>?JN!Mk|XW zl-v0XW5pR&N`u#_#synkb_U86lU`cGMj8%ya&XM?Ki@Y3cj5NL2Dl-ydTxAoOES^E_5C`jzD z%zI*p* z%Y6Gkg;@Va$ry^lRO4<(6gd$)Rfnd((F}3@t=Xnods+39P~v&6k76!>G;miYbau zKI*S<7tcR0cOK1m3j-sF#g@DJ((_c0Y6whg}`j8&cn-?GN?PH`_xOd|-2vaEAH)geK zz>}GD`5`CoLz6DihxE3uk@1u%ppiX-dLvctsF)ikPjpOpG!lIdjmmrXJ8A?4nOX+3 z=3p-Puc7up6z^5P+S4&V7w%DtGzSo@#WTy}mjZM1Dn}JTX~!7WhS~Db-Q@D#+Z!kc zK_ds$v$Mdi*4rum92? zBYRrO{17^Yq#`FynZE}gpHDA)Q3Ya>TNm9+Y;{GoV^gb^0|izt0m`E8{8(hsgiTvB?%OB5iv-9Tyr zP9%ci+?riux-B7>TG(z1W=Q)IVOO`TY1WHV_kj&6;gE8uGM(@^3RFX02TtkK5NNxw zFDjGt3L+y+XVL^c zIMZG;jdj#H{j+!*HPVk|B|6Z$rTc>`(>#?xqh2sbcT~9|Jiz*^Y!F1fQ5C}%h$~nUYpsrE3DJahhcnO9>alaGfVH?s~SGEbM1{ajo7mTR|=e-NfGlRoXbksy8$x6{k zkl>%Byr}Lg7*B(*;d?X5RE)_izewBm+@$WZl=a`amzz^JmOYVu9XCfYuxI9qQqTO- ziu{c(>jKt84XTsYJB=Shi~2d6J7^#u*gP4-Y56dpxi%g~_c_s(cn*6A{j;@ya{X>o zLxCUx63xn4|FXG@7^By>`neFF)I4*OF?Q%4(e6pXVII1wp`Q=5p~|=y2(%oMf+ZBG z1sG5)W^hz!GnPqL17Nwa?f<+yUaBXPW=~eK<|EawOhXYQJx@)kfv+1Hs!?9#V}4g0 z*}R_c=_Ad5O72Y;b9ti5Y%-2Mrv25lTf|$)g}UqOGcN-Z?A-eiv0uUxFJAkW&?s`! z9lRNf9N(~|Lp6!tP~aynD`lR3ufhOc#98)##+#3n%XJfY7#Ky7nYgNbAm14{9y{o! zE_3(6C_2e9h*f4v9d?p^y5eLunJ}ayXRY_hSh9H1loh63DABAfMmDjd7;6^k9nQ>u z?yS~KzkK5GaR44r)RX28oug8eJ&JPR$k=0*cFd64(R(tuhw}ZKYnm za(!GwH``5eqQDuiPzf0MPgu0B+LZDhTmAXpT97 z54tbYB;mG?iVD)+e^nv`1rjt0xlnzsZ?toTjQN?oT`M>2h>8R=Un8S20Mf8MI`Bg@LXA!A)4IYyH;7s~!hvmNF z7&}c4*(pY`xMoX#CBme)R(tHckB+2^Obd^$V4Jv-t8aeIO(PxCnpU#u*`d@Fm89B3WYv?>i{SYZn9|&YX!H^)` zRe#qRo!(|JaHGYg7{@v9&YVy!7Q!w}aMk#t6O;7~ay?>1$-jIY@K(?I?`T0l`w3bX)k#{sX> zrdyv2xvH}dDcsO8y;sObIPl*8_Y?oRd@V;5wk0hst(6ba_SN1l?BnK=86EyERmNrM z{{Vr%)$sSN5ZfPSIK6ap3fWT$5R)M0{NB4SbDLf+iMfey8JR^|ohv3#te^@I4*ZgiPGdk2iZ^77y za=`sbt@S?k1>*MxpP&|yDuwoT;rI6c7kK%9-&x9JzpdBF#2+!?-T#{Vhs)1iM7w7> zu3sqs%dPxQAC}gC8bk%O{`fZ}`g_!3n@DPKUo#_D&Eecr)uExGr0I^r;R9K-O|L&z z^?zi{;_&w3A_6Yxlsa}9OV~4`kg^^sj+2uUEIZIU(0^*dzpu~u%1ObJkueOl@ul`- zRze)&$oXAQj~+wF<%Rc5SCd9k>)&tk*K+>EZDKj>-yXoP+qsHQVgpz5wVpmA`H_b1 z`iJoTT6Dt?`Q4ww-+))=e@jfm@&oI#-ha7MDlXl{>nu6;2s1HBXH37(yc-wgJokyq ze0I)3bUmfdjvd^Gi)BP|bLr3wdlZ`3_MZCwewTT3#+67301823<+no^d;nA95T^wR zsBH!uOkb7h)F_ZKktMD5PMw_3qQ#-|hds3xX9;BlT^_b*bc24za)!Vt)w`9{u_%WY z8cYf;-B|P5;XIHG59Uu_09)X)ikm#sAXeRMb^f8-8d2$ZJtohU)?tg?gGLdPGoiku z1eKgyKf>f}pC@4mRcpEd!K->A4FnQ9Q58Bu1}nDqE6qp2T<=`sCnppyoqyHQe6-=? z=mm{n&JSK&JN{6t*nGt+13HKKvzl#Ghn>YVdK#-^r8&cJj_CuGw6+`eABQ|QoY*hr z-aQ{5JYf_q!w=lUyB(8v%%!Ph*qcNdCy`bJ zqY=;*#mLkVOSms4gg;X0D;&bU@;LTLza!YptW_JK(yu59b?U;VX)t}um#lSK)R>ep zOxDnZZ#+ak6CPf1TfD+eA_4E`dkArDw>H_Cx}A!9hl6YHQ7{u`Mq?+Y=+~*-JGqmO zy(WSu-oXmi(1j1w5vzEsSHJdqHp#~w zCz4!Mo<4sLSWB$ZQ9Mq`q79}Cmgou? zGv@K~gPJfkt#DaRF>%W;W}LcLbNVty9qRsW>9CKUs5g2|Ay~Q;Ly~Xa�SvWBkh( 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

    rj4ttDr3VE8+L2DXt+-Zu-vb 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