Commit ab3dd788 顾剑亮

new version

1 个父辈 1f67d6e9
正在显示 124 个修改的文件 包含 6591 行增加0 行删除
...@@ -7,6 +7,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AGVControl_Steel", "AGVCont ...@@ -7,6 +7,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AGVControl_Steel", "AGVCont
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test", "Test\Test.csproj", "{752A054D-58EC-460A-A936-F5483B1BC8B2}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test", "Test\Test.csproj", "{752A054D-58EC-460A-A936-F5483B1BC8B2}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BLL", "BLL\BLL.csproj", "{C547FEDD-0B62-4AC3-96E7-C86DD38C670B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DAL", "DAL\DAL.csproj", "{82C814D9-4407-4B98-AACE-82CAF714BDAD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model", "Model\Model.csproj", "{AC764294-C5E4-441F-ACC8-F912366CA1BC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UI", "UI\UI.csproj", "{6F08F614-2767-456A-80B8-A8FDB19F3988}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
...@@ -21,6 +29,22 @@ Global ...@@ -21,6 +29,22 @@ Global
{752A054D-58EC-460A-A936-F5483B1BC8B2}.Debug|Any CPU.Build.0 = Debug|Any CPU {752A054D-58EC-460A-A936-F5483B1BC8B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{752A054D-58EC-460A-A936-F5483B1BC8B2}.Release|Any CPU.ActiveCfg = Release|Any CPU {752A054D-58EC-460A-A936-F5483B1BC8B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{752A054D-58EC-460A-A936-F5483B1BC8B2}.Release|Any CPU.Build.0 = Release|Any CPU {752A054D-58EC-460A-A936-F5483B1BC8B2}.Release|Any CPU.Build.0 = Release|Any CPU
{C547FEDD-0B62-4AC3-96E7-C86DD38C670B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C547FEDD-0B62-4AC3-96E7-C86DD38C670B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C547FEDD-0B62-4AC3-96E7-C86DD38C670B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C547FEDD-0B62-4AC3-96E7-C86DD38C670B}.Release|Any CPU.Build.0 = Release|Any CPU
{82C814D9-4407-4B98-AACE-82CAF714BDAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{82C814D9-4407-4B98-AACE-82CAF714BDAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{82C814D9-4407-4B98-AACE-82CAF714BDAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{82C814D9-4407-4B98-AACE-82CAF714BDAD}.Release|Any CPU.Build.0 = Release|Any CPU
{AC764294-C5E4-441F-ACC8-F912366CA1BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AC764294-C5E4-441F-ACC8-F912366CA1BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AC764294-C5E4-441F-ACC8-F912366CA1BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AC764294-C5E4-441F-ACC8-F912366CA1BC}.Release|Any CPU.Build.0 = Release|Any CPU
{6F08F614-2767-456A-80B8-A8FDB19F3988}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6F08F614-2767-456A-80B8-A8FDB19F3988}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6F08F614-2767-456A-80B8-A8FDB19F3988}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6F08F614-2767-456A-80B8-A8FDB19F3988}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
......
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{C547FEDD-0B62-4AC3-96E7-C86DD38C670B}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BLL</RootNamespace>
<AssemblyName>BLL</AssemblyName>
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.ServiceModel.Activation" />
<Reference Include="System.ServiceModel.Web" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Job\ChargeJob.cs" />
<Compile Include="Control.cs" />
<Compile Include="Job\TakeOldJob.cs" />
<Compile Include="WebService\WebService.cs" />
<Compile Include="WebService\IWeb.cs" />
<Compile Include="JobStep.cs" />
<Compile Include="Job\MoveJob.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RunMode.cs" />
<Compile Include="Job\StandbyJob.cs" />
<Compile Include="SteelManage.cs" />
<Compile Include="Job\StorageJob.cs" />
<Compile Include="Job\SendNewJob.cs" />
<Compile Include="Job\WashPointJob.cs" />
<Compile Include="WebService\WebWork.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Model\Model.csproj">
<Project>{ac764294-c5e4-441f-acc8-f912366ca1bc}</Project>
<Name>Model</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file \ No newline at end of file
using System;
using System.Diagnostics;
using System.Threading;
using Model;
namespace BLL
{
public class Control
{
private Timer timerCall;
public delegate void AgvChangedEvent(int agvIndex);
public event AgvChangedEvent AgvChanged;
public event AgvChangedEvent AgvOnline;
public Control()
{
ThreadPool.SetMaxThreads(5, 5); //线程池最大数量
}
public void Start()
{
timerCall = new Timer(CallProcess, null, 0, 2000);
}
public void Stop()
{
if (timerCall != null)
timerCall.Dispose();
}
private void CallProcess(object obj)
{
for (int i = 0; i < Common.agvInfos.Count; i++)
{
AgvInfo info = Common.agvInfos[i];
if (info.IsCall) continue;
try
{
info.IsCall = true;
CheckAgvOnline(ref info);
if (!info.IsOnline) continue; //脱机
GetAgvState(ref info);
if (!info.IsAuto) continue; //手动
if (info.StateID == (int)StateID.Pause)
Common.mir.State_Ready(info.IP, info.Authorization);
if (info.CurrentJob == null)
info.CurrentJob = new StandbyJob();
else
info.CurrentJob = info.CurrentJob.Execute(info);
}
catch (Exception ex)
{
Common.log.Error("CallProcess " + info.Name, ex);
}
finally
{
info.IsCall = false;
}
}
}
private void GetAgvState(ref AgvInfo info)
{
if (!info.IsOnline) return;
bool rtn = Common.mir.Get_State(info.IP, info.Authorization, out int stateID, out string stateText, out int battery, out string missionText, out System.Drawing.PointF position);
//Common.log.Debug(string.Format("{1} GetAgvState[return={0}] stateID={2}, stateText={3}, battery={4}, missionText={5}, position={6}", rtn, info.FullName, stateID, stateText, battery, missionText, position));
if (rtn)
{
info.StateID = stateID;
info.StateText = stateText;
info.Battery = battery;
info.MissionText = missionText;
info.Position = position;
string ip = info.IP;
int idx = Common.agvInfos.FindIndex(s => s.IP == ip);
if (idx > -1) AgvChanged?.Invoke(idx);
}
}
private void CheckAgvOnline(ref AgvInfo info)
{
bool rtn = Common.mir.CheckIP(info.IP);
if (rtn)
{
if (!info.IsOnline)
{
info.IsOnline = true;
string ip = info.IP;
int idx = Common.agvInfos.FindIndex(s => s.IP == ip);
if (idx > -1) AgvOnline?.Invoke(idx);
//rtn = Common.mir.Get_IO_Modules(info.IP, info.Authorization, out string[] guid);
//if (rtn) info.IOGuid = guid[0];
}
}
else
{
if (info.IsOnline)
{
info.IsOnline = false;
string ip = info.IP;
int idx = Common.agvInfos.FindIndex(s => s.IP == ip);
if (idx > -1) AgvOnline?.Invoke(idx);
}
Common.log.Debug(string.Format("{0}[{1}] 脱机", info.Name, info.IP));
}
}
private enum StateID : int
{
None,
Starting,
ShuttingDown,
Ready,
Pause,
Executing,
Aborted,
Completed,
Docked,
Docking,
EmergencyStop,
ManualControl,
Error
}
}
}
\ No newline at end of file \ No newline at end of file
using System;
using Model;
namespace BLL
{
public class ChargeJob : IJob
{
private AgvInfo _info;
private MoveJob move;
private string mission;
private JobStep<ChargeStep> chargeStep;
private int currBattery;
//private const int CHARGE_PLACE_PLC = 20;
public ChargeJob()
{
chargeStep = new JobStep<ChargeStep>(ChargeStep.None);
Common.log.Debug("加载ChargeJob");
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (chargeStep.Equals(ChargeStep.None))
{
currBattery = _info.Battery;
if (_info.IsWorkspace())
MoveCharge();
else
PassDoor();
}
else if (chargeStep.Equals(ChargeStep.PassDoor))
{
move.Execute(_info);
if(move.IsEnd)
MoveCharge();
}
else if (chargeStep.Equals(ChargeStep.MoveStation))
{
MoveStation();
}
else if (chargeStep.Equals(ChargeStep.Charging))
{
Common.log.Debug(_info.Name + "当前电量" + _info.Battery);
if (_info.Battery == _info.BatteryMax)
{
chargeStep.Msg = _info.Name + "电量达到" + _info.BatteryMax;
chargeStep.NextStep(ChargeStep.End);
}
else if (_info.Battery > _info.BatteryMin)
{
IJob job = SteelManage.GetSteelJob(_info);
if (job != null)
{
Common.mir.Del_Mission(_info.IP, _info.Authorization);
return job;
}
}
}
else if (chargeStep.Equals(ChargeStep.End))
{
Common.mir.Del_Mission(_info.IP, _info.Authorization);
chargeStep.Msg = _info.Name + "充电工作结束,回待机位";
return new StandbyJob();
}
return this;
}
private void MoveCharge()
{
mission = Common.MISSION_CHARGE + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
chargeStep.NextStep(ChargeStep.MoveStation);
chargeStep.Msg = _info.Name + "发送任务" + mission;
}
private void PassDoor()
{
mission = Common.MISSION_PASS_DOOR_INTO + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
chargeStep.NextStep(ChargeStep.PassDoor);
chargeStep.Msg = _info.Name + "发送任务" + mission;
}
private void MoveStation()
{
if (_info.Battery > currBattery)
{
chargeStep.Msg = _info.Name + "到达充电位,准备充电";
chargeStep.NextStep(ChargeStep.Charging);
}
}
private enum ChargeStep
{
None,
End,
PassDoor,
MoveStation,
Charging
}
}
}
using System;
using Model;
namespace BLL
{
public class MoveJob : IJob
{
private string _id;
private string _mission;
private AgvInfo _info;
private DateTime _getTime;
private JobStep<MoveStep> moveStep;
public MoveJob(string mission)
{
IsEnd = false;
this._mission = mission;
moveStep = new JobStep<MoveStep>(MoveStep.Send);
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (moveStep.Equals(MoveStep.Send))
Send();
else if (moveStep.Equals(MoveStep.Working))
Working();
else if (moveStep.Equals(MoveStep.Error))
Error();
else if (moveStep.Equals(MoveStep.End))
IsEnd = true;
return this;
}
private void Send()
{
bool rtn;
if (Common.FLEET_SEND)
rtn = Common.mir.Add_Mission_Fleet(_info.FleetID, _info.Authorization, _mission, out _id);
else
rtn = Common.mir.Add_Mission(_info.IP, _info.Authorization, _mission, out _id);
if (rtn)
{
Common.log.Debug("MoveJob To:" + _info.Name + ", " + _mission + " 发送成功");
moveStep.NextStep(MoveStep.Working);
_getTime = DateTime.Now;
}
else
{
Common.log.Warn("MoveJob To:" + _info.Name + ", " + _mission + " 发送失败");
}
}
private void Working()
{
TimeSpan span = DateTime.Now - _getTime;
if (span.TotalMilliseconds > 5000)
{
bool rtn;
string state;
if (Common.FLEET_SEND)
rtn = Common.mir.Get_MissionState_Fleet(_info.Authorization, _id, out state);
else
rtn = Common.mir.Get_MissionState(_info.IP, _info.Authorization, _id, out state);
if (rtn)
{
Common.log.Debug("MoveJob To:" + _info.Name + ", " + _mission + state.ToString());
if (state == MissionState.Done.ToString())
moveStep.NextStep(MoveStep.End);
else if (state == MissionState.Aborted.ToString())
moveStep.NextStep(MoveStep.Error);
else if (state == MissionState.Executing.ToString())
_getTime = DateTime.Now;
}
else
{
Common.log.Warn("MoveJob To:" + _info.Name + ", " + _mission + " 获取状态失败");
}
}
}
private void Error()
{
Common.log.Debug("MoveJob To:" + _info.Name + ", " + _mission + " 重新发送");
Common.mir.Clear_Error(_info.IP, _info.Authorization);
Common.mir.Del_Mission(_info.IP, _info.Authorization);
moveStep.NextStep(MoveStep.Send);
}
private enum MoveStep
{
Send,
Working,
Error,
End
}
private enum MissionState
{
Aborted,
Executing,
Done
}
}
}
using System;
using Model;
namespace BLL
{
public class SendNewJob : IJob
{
private AgvInfo _info;
private MoveJob move;
private string mission;
//private DateTime _getTime;
private JobStep<SendNewStep> sendNewStep;
public SendNewJob()
{
sendNewStep = new JobStep<SendNewStep>(SendNewStep.None);
Common.log.Debug("加载SendNewStep");
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (sendNewStep.Equals(SendNewStep.None))
{
if (_info.IsWorkspace())
sendNewStep.NextStep(SendNewStep.FindLine);
else
PassDoor();
}
else if (sendNewStep.Equals(SendNewStep.PassDoor))
{
move.Execute(_info);
if (move.IsEnd)
sendNewStep.NextStep(SendNewStep.FindLine);
}
else if (sendNewStep.Equals(SendNewStep.FindLine))
{
bool rtn = SteelManage.FindNewSteelWork(_info, out string place);
if (rtn)
{
if (place.ToLower() == "storage")
return new StorageJob();
else
FindLine(place);
}
else
{
sendNewStep.Msg = info.Name + "没有后续新钢板任务";
sendNewStep.NextStep(SendNewStep.End);
}
}
else if (sendNewStep.Equals(SendNewStep.MoveLine))
{
move.Execute(_info);
if (move.IsEnd)
sendNewStep.NextStep(SendNewStep.FindLine);
}
else if (sendNewStep.Equals(SendNewStep.End))
{
IJob job = SteelManage.GetSteelJob(info);
if (job == null)
return new StandbyJob();
else
return job;
}
return this;
}
private void FindLine(string place)
{
mission = Common.MISSION_MOVE_STEEL + place;
_info.Place = place;
move = new MoveJob(mission);
move.Execute(_info);
sendNewStep.NextStep(SendNewStep.MoveLine);
sendNewStep.Msg = _info.Name + "发送任务" + mission;
}
private void MoveLine()
{
}
private void PassDoor()
{
mission = Common.MISSION_PASS_DOOR_INTO + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
sendNewStep.NextStep(SendNewStep.PassDoor);
sendNewStep.Msg = _info.Name + "发送任务" + mission;
}
private enum SendNewStep
{
None,
End,
PassDoor,
FindLine,
MoveLine
}
}
}
using System;
using Model;
namespace BLL
{
public class StandbyJob : IJob
{
private AgvInfo _info;
private MoveJob move;
private string mission;
private DateTime _getTime;
private JobStep<StandbyStep> standbyStep;
public StandbyJob()
{
standbyStep = new JobStep<StandbyStep>(StandbyStep.None);
Common.log.Debug("加载StandbyJob");
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (standbyStep.Equals(StandbyStep.None))
{
if (_info.IsWorkspace())
MoveStandby();
else
PassDoor();
}
else if (standbyStep.Equals(StandbyStep.PassDoor))
{
move.Execute(_info);
if (move.IsEnd)
MoveStandby();
}
else if (standbyStep.Equals(StandbyStep.MoveStandby))
{
move.Execute(_info);
if (move.IsEnd)
{
standbyStep.NextStep(StandbyStep.End);
standbyStep.Msg = _info.Name + "到达待机位";
_getTime = DateTime.Now;
}
}
else if (standbyStep.Equals(StandbyStep.End))
{
if (_info.Battery <= _info.BatteryMin)
{
standbyStep.Msg = _info.Name + "电量小于" + _info.BatteryMin + ",执行充电任务";
return new ChargeJob();
}
else
{
TimeSpan span = DateTime.Now - _getTime;
if (span.TotalMinutes >= 2)
{
standbyStep.Msg = _info.Name + "在待机位停留超过2分钟,执行充电任务";
return new ChargeJob();
}
else
{
IJob job = SteelManage.GetSteelJob(info);
if (job != null) return job;
}
}
}
return this;
}
private void MoveStandby()
{
mission = Common.MISSION_STANDBY + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
standbyStep.NextStep(StandbyStep.MoveStandby);
standbyStep.Msg = _info.Name + "发送任务" + mission;
}
private void PassDoor()
{
mission = Common.MISSION_PASS_DOOR_INTO + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
standbyStep.NextStep(StandbyStep.PassDoor);
standbyStep.Msg = _info.Name + "发送任务" + mission;
}
private enum StandbyStep
{
None,
End,
PassDoor,
MoveStandby
}
}
}
using System;
using Model;
namespace BLL
{
public class StorageJob : IJob
{
private int delayGetSignal; //延迟获取信号
private int dockTime; //停靠次数
private AgvInfo _info;
private MoveJob move;
private string mission;
//private DateTime _getTime;
private JobStep<StorageStep> storageStep;
public StorageJob()
{
storageStep = new JobStep<StorageStep>(StorageStep.None);
Common.log.Debug("加载StorageStep");
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (storageStep.Equals(StorageStep.None))
{
if (_info.Is4DWorkshop())
MoveStorage();
else
PassDoor();
}
else if (storageStep.Equals(StorageStep.PassDoor))
{
move.Execute(_info);
if (move.IsEnd)
MoveStorage();
}
else if (storageStep.Equals(StorageStep.MoveStorage))
{
move.Execute(_info);
if (move.IsEnd)
{
storageStep.NextStep(StorageStep.GetSingle);
storageStep.Msg = info.Name + "已到位,等待离开信号";
delayGetSignal = 0;
dockTime = 0;
}
}
else if (storageStep.Equals(StorageStep.GetSingle))
{
if (Common.StorageDockFinish)
{
SteelManage.StorageWorkDel(info.Place);
storageStep.Msg = info.Name + "已到位,等待离开信号";
storageStep.NextStep(StorageStep.WaitStorageLeave);
}
else
{
if (delayGetSignal >= 3)
{
if (dockTime >= 3)
{
storageStep.Msg = info.Name + "对接仓库连续3次信号没有到位";
storageStep.NextStep(StorageStep.Error);
dockTime = 0;
//小车报警任务
}
else
{
dockTime++;
MoveStorage();
}
}
delayGetSignal++;
}
}
else if (storageStep.Equals(StorageStep.WaitStorageLeave))
{
if (SteelManage.FindStorageWorkLeave())
{
SteelManage.StorageWorkDelLeave();
storageStep.Msg = info.Name + "收到离开信号";
return new StandbyJob();
}
else if (SteelManage.FindNewSteelWork(info))
{
return new SendNewJob();
}
}
else if (storageStep.Equals(StorageStep.Error))
{
}
else if (storageStep.Equals(StorageStep.End))
{
}
return this;
}
private void MoveStorage()
{
mission = Common.MISSION_MOVE_STORAGE;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
storageStep.NextStep(StorageStep.MoveStorage);
storageStep.Msg = _info.Name + "发送任务" + mission;
}
private void PassDoor()
{
mission = Common.MISSION_PASS_DOOR_INTO + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
storageStep.NextStep(StorageStep.PassDoor);
storageStep.Msg = _info.Name + "发送任务" + mission;
}
private enum StorageStep
{
None,
End,
PassDoor,
MoveStorage,
WaitStorage,
GetSingle,
WaitStorageLeave,
Error
}
}
}
using System;
using Model;
namespace BLL
{
public class TakeOldJob : IJob
{
private AgvInfo _info;
private MoveJob move;
private string mission;
//private DateTime _getTime;
private JobStep<TakeOldStep> takeOldStep;
public TakeOldJob()
{
takeOldStep = new JobStep<TakeOldStep>(TakeOldStep.None);
Common.log.Debug("加载TakeOldJob");
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (takeOldStep.Equals(TakeOldStep.None))
{
info.OldSteel = 0;
takeOldStep.NextStep(TakeOldStep.FindLine);
}
else if (takeOldStep.Equals(TakeOldStep.FindLine))
{
if (info.OldSteel == 5)
{
takeOldStep.Msg = info.Name + "旧钢板已满";
takeOldStep.NextStep(TakeOldStep.GoWashPoint);
}
else
{
FindLine(info);
}
}
else if (takeOldStep.Equals(TakeOldStep.MoveLine))
{
move.Execute(_info);
if (move.IsEnd)
{
info.OldSteel++;
takeOldStep.NextStep(TakeOldStep.FindLine);
takeOldStep.Msg = _info.Name + "到达" + _info.Place;
}
}
else if (takeOldStep.Equals(TakeOldStep.GoWashPoint))
{
mission = Common.MISSION_MOVE_WASH + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
takeOldStep.NextStep(TakeOldStep.WaitWashPoint);
takeOldStep.Msg = _info.Name + "发送任务" + mission;
}
else if (takeOldStep.Equals(TakeOldStep.WaitWashPoint))
{
move.Execute(_info);
if (move.IsEnd)
{
takeOldStep.NextStep(TakeOldStep.End);
takeOldStep.Msg = _info.Name + "到达" + _info.Workshop + "清洗点";
}
}
else if (takeOldStep.Equals(TakeOldStep.End))
{
info.OldSteel = 0;
IJob job = SteelManage.GetSteelJob(info);
if (job == null)
return new StandbyJob();
else
return job;
}
return this;
}
private void FindLine(AgvInfo info)
{
bool rtn = SteelManage.FindOldSteelWork(info, out string place);
if (rtn)
{
info.Place = place;
mission = Common.MISSION_MOVE_STEEL + place;
move = new MoveJob(mission);
move.Execute(_info);
takeOldStep.NextStep(TakeOldStep.MoveLine);
takeOldStep.Msg = _info.Name + "发送任务" + mission;
}
else
{
takeOldStep.NextStep(TakeOldStep.GoWashPoint);
takeOldStep.Msg = info.Name + "没有后续旧钢板任务";
}
}
private enum TakeOldStep
{
None,
FindLine,
MoveLine,
GoWashPoint,
WaitWashPoint,
End
}
}
}
using System;
using Model;
namespace BLL
{
public class WashPointJob : IJob
{
private AgvInfo _info;
private MoveJob move;
private string mission;
private JobStep<WashPointStep> washPointStep;
public WashPointJob()
{
washPointStep = new JobStep<WashPointStep>(WashPointStep.None);
Common.log.Debug("加载WashPointJob");
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (washPointStep.Equals(WashPointStep.None))
{
if (_info.IsWorkspace())
MoveWash();
else
PassDoor();
}
else if (washPointStep.Equals(WashPointStep.PassDoor))
{
move.Execute(_info);
if (move.IsEnd)
MoveWash();
}
else if (washPointStep.Equals(WashPointStep.MoveWash))
{
move.Execute(_info);
if (move.IsEnd)
{
washPointStep.NextStep(WashPointStep.End);
washPointStep.Msg = _info.Name + "到达清洗点";
}
}
else if (washPointStep.Equals(WashPointStep.End))
{
IJob job = SteelManage.GetSteelJob(info);
if (job == null)
return new StandbyJob();
else
return job;
}
return this;
}
private void MoveWash()
{
mission = Common.MISSION_MOVE_WASH + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
washPointStep.NextStep(WashPointStep.MoveWash);
washPointStep.Msg = _info.Name + "发送任务" + mission;
}
private void PassDoor()
{
mission = Common.MISSION_PASS_DOOR_INTO + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
washPointStep.NextStep(WashPointStep.PassDoor);
washPointStep.Msg = _info.Name + "发送任务" + mission;
}
private enum WashPointStep
{
None,
End,
PassDoor,
MoveWash,
}
}
}
using System;
namespace BLL
{
public class JobStep<T>
{
private T _step;
private DateTime _time;
private string _msg;
public JobStep(T step)
{
_step = step;
_time = DateTime.Now;
_msg = "";
}
public bool Equals(T step)
{
return _step.Equals(step);
}
public bool TimeOut(int ms)
{
TimeSpan span = DateTime.Now - _time;
if (span.TotalMilliseconds > ms)
return true;
else
return false;
}
public void NextStep(T step)
{
_step = step;
_time = DateTime.Now;
_msg = "";
}
public string Msg
{
get
{
return _msg;
}
set
{
if (!string.IsNullOrEmpty(value) && !_msg.Equals(value))
{
_msg = value;
string s = string.Format("{0} (step={1})", _msg, _step.ToString());
Model.Common.log.Info(s);
Model.Common.log.UI_Display(s);
}
}
}
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("BLL")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("BLL")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("c547fedd-0b62-4ac3-96e7-c86dd38c670b")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Drawing;
using System.Diagnostics;
namespace BLL
{
public static class RunMode
{
[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
private static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
[DllImport("user32.dll ", SetLastError = true)]
private static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab);
private const int SW_RESTORE = 9;
private static Form frm;
private static FormWindowState state;
private static bool exit = false;
private static ToolStripItem[] items;
private static NotifyIcon notify;
private static ContextMenuStrip notifyMenu;
private static void AddItem()
{
notifyMenu = new ContextMenuStrip();
items = new ToolStripItem[4];
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetEntryAssembly();
string text = assembly.GetName().Version.ToString();
text = frm.Text + (frm.Text.Contains(text) ? "" : " " + text);
items[0] = new ToolStripMenuItem(text) { Font = new Font("微软雅黑", 11f, FontStyle.Bold), Image = frm.Icon.ToBitmap() };
items[1] = new ToolStripSeparator();
items[2] = new ToolStripMenuItem("显示") { Font = new Font("微软雅黑", 11f) };
items[3] = new ToolStripMenuItem("退出") { Font = new Font("微软雅黑", 11f) };
notifyMenu.Items.AddRange(items);
items[2].Click += ItemShow_Click;
items[3].Click += ItemExit_Click;
notify = new NotifyIcon { Icon = frm.Icon, Visible = true, ContextMenuStrip = notifyMenu, Text = frm.Text };
notify.MouseDoubleClick += Notify_MouseDoubleClick;
}
private static void ItemShow_Click(object sender, EventArgs e)
{
frm.Show();
if (frm.WindowState == FormWindowState.Minimized)
frm.WindowState = state;
}
private static void ItemExit_Click(object sender, EventArgs e)
{
notify.Dispose();
exit = true;
frm.Close();
}
private static void Notify_MouseDoubleClick(object sender, MouseEventArgs e)
{
frm.Show();
if (frm.WindowState == FormWindowState.Minimized)
frm.WindowState = state;
}
public static void Init(Form frm)
{
RunMode.frm = frm;
state = frm.WindowState;
frm.StartPosition = FormStartPosition.CenterScreen;
AddItem();
}
public static void MenuLanguage(params string[] name)
{
if (items == null || name == null) return;
if (name.Length >= 1) items[2].Text = name[0];
if (name.Length >= 2) items[3].Text = name[1];
}
public static bool Closing(FormClosingEventArgs e)
{
if (!exit)
{
e.Cancel = true;
state = frm.WindowState;
frm.WindowState = FormWindowState.Minimized;
}
return exit;
}
public static bool IsRun()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
foreach (Process process in processes)
{
if (process.Id == current.Id) continue; //自己
if (process.MainModule.FileName == current.MainModule.FileName)
{
//显示已打开的程序
ShowWindow(process.MainWindowHandle, SW_RESTORE);
SwitchToThisWindow(process.MainWindowHandle, true);
return true;
}
}
return false;
}
public static bool IsAdmin()
{
System.Security.Principal.WindowsIdentity current = System.Security.Principal.WindowsIdentity.GetCurrent();
System.Security.Principal.WindowsPrincipal windowsPrincipal = new System.Security.Principal.WindowsPrincipal(current);
return windowsPrincipal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
}
public static void AdminRun()
{
string path = Process.GetCurrentProcess().MainModule.FileName;
ProcessStartInfo startInfo = new ProcessStartInfo
{
UseShellExecute = true,
WorkingDirectory = Environment.CurrentDirectory,
FileName = path,
Verb = "runas"
};
Process.Start(startInfo);
}
/// <summary>
/// 复制文件
/// </summary>
/// <param name="srcPath">原路径</param>
/// <param name="dstPath">目标路径</param>
/// <param name="overwrite">是否覆盖</param>
/// <returns></returns>
//public static bool CopyFile(string srcPath, string dstPath, bool overwrite)
//{
// bool rtn = false;
// try
// {
// if (!srcPath.EndsWith("\\")) srcPath += "\\";
// if (!dstPath.EndsWith("\\")) dstPath += "\\";
// if (System.IO.Directory.Exists(srcPath))
// {
// //目录是否存在
// if (!System.IO.Directory.Exists(dstPath))
// System.IO.Directory.CreateDirectory(dstPath);
// //复制文件
// string[] files = System.IO.Directory.GetFiles(srcPath);
// foreach (string file in files)
// {
// System.IO.FileInfo fInfo = new System.IO.FileInfo(file);
// fInfo.CopyTo(dstPath + fInfo.Name, overwrite);
// }
// rtn = true;
// //复制文件夹
// string[] dirs = System.IO.Directory.GetDirectories(srcPath);
// foreach (string dir in dirs)
// {
// System.IO.DirectoryInfo dInfo = new System.IO.DirectoryInfo(dir);
// rtn = CopyFile(dir, dstPath + dInfo.Name, overwrite);
// if (!rtn) break;
// }
// }
// }
// catch (Exception ex)
// {
// rtn = false;
// }
// return rtn;
//}
}
}
\ No newline at end of file \ No newline at end of file
using System;
using Model;
using System.Collections.Generic;
namespace BLL
{
public static class SteelManage
{
private static List<SteelWork> oldSteelWork = new List<SteelWork>();
private static List<SteelWork> newSteelWork = new List<SteelWork>();
private static List<SteelWork> storageWork = new List<SteelWork>();
#region OldSteelWork
public static void OldSteelWorkAdd(string place)
{
int index = oldSteelWork.FindIndex(sw => sw.Place == place);
if (index == -1)
{
SteelWork sw = new SteelWork() { Place = place };
oldSteelWork.Add(sw);
SaveOldSteelWork();
Common.log.Info("添加(" + place + ")回收钢板任务");
}
else
{
Common.log.Info("重复(" + place + ")回收钢板任务,已忽略");
}
}
public static void OldSteelWorkDel(string place)
{
int index = oldSteelWork.FindIndex(sw => sw.Place == place);
if (index > -1)
{
oldSteelWork.RemoveAt(index);
SaveOldSteelWork();
Common.log.Info("删除(" + place + ")回收钢板任务");
}
else
{
Common.log.Info("没有找到(" + place + ")回收钢板任务");
}
}
public static void OldSteelWorkDelAll()
{
oldSteelWork.Clear();
SaveOldSteelWork();
Common.log.Info("删除所有回收钢板任务");
}
public static void OldSteelWorkLoad()
{
oldSteelWork = new List<SteelWork>();
if (!System.IO.File.Exists(Common.PATH_OLD_STEEL_WORK)) return;
string[] lines = System.IO.File.ReadAllLines(Common.PATH_OLD_STEEL_WORK, System.Text.Encoding.UTF8);
if (Common.lstOldSteel != null)
{
Common.lstOldSteel.Items.Clear();
Common.lstOldSteel.Items.AddRange(lines);
}
for (int i = 0; i < lines.Length; i++)
{
string[] arr = lines[i].Split(',');
SteelWork sw = new SteelWork() { Place = arr[0], DateTime = Convert.ToDateTime(arr[1]) };
oldSteelWork.Add(sw);
}
Common.log.Info("加载回收钢板任务");
}
public static bool FindOldSteelWork(AgvInfo info, out string place)
{
place = "";
bool find = false;
string name = "";
int lineIdx = Common.agvLines.FindIndex(s => s.Workshop == info.Workshop);
if (lineIdx == -1) return false;
int placeIdx = Array.FindIndex(Common.agvLines[lineIdx].Lines, s => s == info.Place);
if (placeIdx == -1) return false;
for (int i = placeIdx; i < Common.agvLines[lineIdx].Lines.Length; i++)
{
name = Common.agvLines[lineIdx].Lines[i];
int idx = oldSteelWork.FindIndex(s => s.Place == name);
if (idx > -1)
{
find = true;
break;
}
}
place = name;
return find;
}
#endregion
#region NewSteelWork
public static void NewSteelWorkAdd(string from, string place)
{
int index = newSteelWork.FindIndex(sw => sw.From == from && sw.Place == place);
if (index == -1)
{
SteelWork sw = new SteelWork() { From = from, Place = place };
newSteelWork.Add(sw);
SaveNewSteelWork();
Common.log.Info("添加(" + from + "," + place + ")送新钢板任务");
}
else
{
Common.log.Info("重复(" + place + ")送新钢板任务,已忽略");
}
}
public static void NewSteelWorkAdd(string from, string[] place)
{
for (int i = 0; i < place.Length; i++)
{
int index = newSteelWork.FindIndex(sw => sw.From == from && sw.Place == place[i]);
if (index == -1)
{
SteelWork sw = new SteelWork() { From = from, Place = place[i] };
newSteelWork.Add(sw);
Common.log.Info("添加(" + from + "," + place[i] + ")送新钢板任务");
}
else
{
Common.log.Info("重复(" + place[i] + ")送新钢板任务,已忽略");
}
SaveNewSteelWork();
}
}
public static void NewSteelWorkDel(string from, string place)
{
int index = newSteelWork.FindIndex(sw => sw.From == from && sw.Place == place);
if (index > -1)
{
newSteelWork.RemoveAt(index);
SaveNewSteelWork();
Common.log.Info("删除(" + from + "," + place + ")送新钢板任务");
}
else
{
Common.log.Info("没有找到(" + place + ")送新钢板任务");
}
}
public static void NewSteelWorkDelAll()
{
newSteelWork.Clear();
SaveNewSteelWork();
Common.log.Info("删除所有送新钢板任务");
}
public static void NewSteelWorkLoad()
{
newSteelWork = new List<SteelWork>();
if (!System.IO.File.Exists(Common.PATH_NEW_STEEL_WORK)) return;
string[] lines = System.IO.File.ReadAllLines(Common.PATH_NEW_STEEL_WORK, System.Text.Encoding.UTF8);
if (Common.lstNewSteel != null)
{
Common.lstNewSteel.Items.Clear();
Common.lstNewSteel.Items.AddRange(lines);
}
for (int i = 0; i < lines.Length; i++)
{
string[] arr = lines[i].Split(',');
SteelWork sw = new SteelWork() { From = arr[0], Place = arr[1], DateTime = Convert.ToDateTime(arr[2]) };
newSteelWork.Add(sw);
}
Common.log.Info("加载送新钢板任务");
}
public static bool FindNewSteelWork(AgvInfo info, out string place)
{
place = "";
string name = "";
bool find = false;
int lineIdx = Common.agvLines.FindIndex(s => s.Workshop == info.Workshop);
if (lineIdx == -1) return false;
for (int i = 0; i < Common.agvLines[lineIdx].Lines.Length; i++)
{
name = Common.agvLines[lineIdx].Lines[i];
int idx = newSteelWork.FindIndex(s => s.Place == name);
if (idx > -1)
{
find = true;
break;
}
}
place = name;
return find;
}
public static bool FindNewSteelWork(AgvInfo info)
{
int index = newSteelWork.FindIndex(s => s.From == info.Place);
if (index > -1)
return true;
else
return false;
}
#endregion
#region StorageWork
public static void StorageWorkAdd(string place)
{
int index = storageWork.FindIndex(sw => sw.Place == place);
if (index == -1)
{
SteelWork sw = new SteelWork() { Place = place };
storageWork.Add(sw);
SaveStorageWork();
Common.log.Info("添加(" + place + ")仓库钢板任务");
}
else
{
Common.log.Info("重复(" + place + ")仓库钢板任务,已忽略");
}
}
public static void StorageWorkDel(string place)
{
int index = storageWork.FindIndex(sw => sw.Place == place);
if (index > -1)
{
storageWork.RemoveAt(index);
SaveStorageWork();
Common.log.Info("删除(" + place + ")仓库钢板任务");
}
else
{
Common.log.Info("没有找到(" + place + ")仓库钢板任务");
}
}
public static void StorageWorkDelAll()
{
storageWork.Clear();
SaveStorageWork();
Common.log.Info("删除所有仓库钢板任务");
}
public static void StorageWorkLoad()
{
storageWork = new List<SteelWork>();
if (!System.IO.File.Exists(Common.PATH_STORAGE_WORK)) return;
string[] lines = System.IO.File.ReadAllLines(Common.PATH_STORAGE_WORK, System.Text.Encoding.UTF8);
if (Common.lstStorage != null)
{
Common.lstStorage.Items.Clear();
Common.lstStorage.Items.AddRange(lines);
}
for (int i = 0; i < lines.Length; i++)
{
string[] arr = lines[i].Split(',');
SteelWork sw = new SteelWork() { Place = arr[0], DateTime = Convert.ToDateTime(arr[1]) };
storageWork.Add(sw);
}
Common.log.Info("加载仓库钢板任务");
}
public static bool FindStorageWork(AgvInfo info, out string place)
{
int index = storageWork.FindIndex(sw => sw.Place.StartsWith(info.Workshop));
if (index == -1)
{
place = "";
return false;
}
else
{
place = storageWork[index].Place;
return true;
}
}
public static bool FindStorageWorkLeave()
{
int index = storageWork.FindIndex(s => s.Place == Common.STORAGE_LEAVE);
if (index > -1)
return true;
else
return false;
}
public static void StorageWorkDelLeave()
{
int index = storageWork.FindIndex(sw => sw.Place == Common.STORAGE_LEAVE);
if (index > -1)
{
storageWork.RemoveAt(index);
SaveStorageWork();
Common.log.Debug("删除仓库离开架子任务");
}
}
#endregion
//public static bool FindWork(AgvInfo info)
//{
//}
public static IJob GetSteelJob(AgvInfo info)
{
if (info.Battery < info.BatteryMin)
return null;
//int newSteelIndex = newSteelWork.FindIndex(s => s.From.StartsWith(info.Workshop) && s.From == s.Place);
//int storageIndex = storageWork.FindIndex(s => s.Place.StartsWith(info.Workshop));
bool rtn;
#region 清洗点呼叫
rtn = GetWash(info);
if (rtn)
{
//info.SteelFrom = newSteelWork[newSteelIndex].From;
Common.log.Info(info.Workshop + "清洗点呼叫");
return new WashPointJob();
}
else
{
Common.log.Debug("没有找到" + info.Workshop + "清洗点呼叫");
}
#endregion
#region 仓库入架子出钢板
rtn = GetStorage(info);
if (rtn)
{
//info.SteelFrom = "storage";
Common.log.Info("4D仓库呼叫");
return new StorageJob();
}
else
{
Common.log.Debug("没有找到4D仓库呼叫");
}
#endregion
#region 回收钢板
rtn = GetOldSteel(info);
if (rtn)
{
Common.log.Info(info.Workshop + "回收钢板");
return new TakeOldJob();
}
else
{
Common.log.Debug("没有找到" + info.Workshop + "回收钢板任务");
}
#endregion
return null;
}
private static bool GetWash(AgvInfo info)
{
int index = Common.agvLines.FindIndex(s => s.Workshop == info.Workshop);
if (index == -1) return false;
bool find = false;
for (int i = 0; i < newSteelWork.Count; i++)
{
if (newSteelWork[i].From == newSteelWork[i].Place)
{
index = Array.FindIndex(Common.agvLines[index].Lines, s => s == oldSteelWork[i].Place);
if (index > -1)
{
find = true;
break;
}
}
}
return find;
}
private static bool GetOldSteel(AgvInfo info)
{
int index = Common.agvLines.FindIndex(s => s.Workshop == info.Workshop);
if (index == -1) return false;
bool find = false;
for (int i = 0; i < oldSteelWork.Count; i++)
{
index = Array.FindIndex(Common.agvLines[index].Lines, s => s == oldSteelWork[i].Place);
if (index > -1)
{
find = true;
break;
}
}
return find;
}
private static bool GetStorage(AgvInfo info)
{
int index = Common.agvLines.FindIndex(s => s.Workshop == info.Workshop);
if (index == -1) return false;
bool find = false;
for (int i = 0; i < storageWork.Count; i++)
{
index = Array.FindIndex(Common.agvLines[index].Lines, s => s == storageWork[i].Place);
if (index > -1)
{
find = true;
break;
}
}
return find;
}
private static void SaveOldSteelWork()
{
string[] content = new string[oldSteelWork.Count];
for (int i = 0; i < content.Length; i++)
content[i] = oldSteelWork[i].Place + "," + oldSteelWork[i].DateTime.ToString();
if (Common.lstOldSteel != null)
{
Common.lstOldSteel.Items.Clear();
Common.lstOldSteel.Items.AddRange(content);
}
System.IO.File.WriteAllLines(Common.PATH_OLD_STEEL_WORK, content, System.Text.Encoding.UTF8);
}
private static void SaveNewSteelWork()
{
string[] content = new string[newSteelWork.Count];
for (int i = 0; i < content.Length; i++)
content[i] = newSteelWork[i].From + "," + newSteelWork[i].Place + "," + newSteelWork[i].DateTime.ToString();
if (Common.lstNewSteel != null)
{
Common.lstNewSteel.Items.Clear();
Common.lstNewSteel.Items.AddRange(content);
}
System.IO.File.WriteAllLines(Common.PATH_NEW_STEEL_WORK, content, System.Text.Encoding.UTF8);
}
private static void SaveStorageWork()
{
string[] content = new string[storageWork.Count];
for (int i = 0; i < content.Length; i++)
content[i] = storageWork[i].Place + "," + storageWork[i].DateTime.ToString();
if (Common.lstStorage != null)
{
Common.lstStorage.Items.Clear();
Common.lstStorage.Items.AddRange(content);
}
System.IO.File.WriteAllLines(Common.PATH_STORAGE_WORK, content, System.Text.Encoding.UTF8);
}
}
}
\ No newline at end of file \ No newline at end of file
using System.IO;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Runtime.Serialization;
namespace BLL
{
[ServiceContract(Name = "Services")]
internal interface IWeb
{
[OperationContract]
[WebGet(UriTemplate = "StealAgv/takeOld?Place={place}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Result TakeOldGet(string place);
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "StealAgv/takeOld", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Result TakeOldPost(Stream info);
[OperationContract]
[WebGet(UriTemplate = "StealAgv/sendNew?From={from}&Place={place}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Result SendNewGet(string from, string place);
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "StealAgv/sendNew", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Result SendNewPost(Stream info);
[OperationContract]
[WebGet(UriTemplate = "StealAgv/storage?Place={place}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Result StorageGet(string place);
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "StealAgv/storage", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Result StoragePost(Stream info);
}
[DataContract]
internal class Result
{
[DataMember]
public int Code { get; set; }
[DataMember]
public string Msg { get; set; }
public Result()
{
Code = 0;
Msg = "OK";
}
}
}
\ No newline at end of file \ No newline at end of file
using System;
using System.ServiceModel.Web;
namespace BLL
{
public static class WebService
{
private static WebServiceHost _serviceHost;
public static bool IsOpen { private set; get; }
public static void Open(string url)
{
try
{
WebWork service = new WebWork();
_serviceHost = new WebServiceHost(service, new Uri(url));
_serviceHost.Open();
Model.Common.log.Info("Web服务已开启");
IsOpen = true;
}
catch (Exception ex)
{
Model.Common.log.Error("WebService Open", ex);
IsOpen = false;
}
}
public static void Close()
{
if (_serviceHost != null)
_serviceHost.Close();
Model.Common.log.Info("Web服务已关闭");
}
}
}
\ No newline at end of file \ No newline at end of file
using System;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.IO;
using Model;
namespace BLL
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single, IncludeExceptionDetailInFaults = true)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
internal class WebWork : IWeb
{
public WebWork()
{
}
public Result TakeOldGet(string place)
{
Common.log.Info("takeOld[GET] place=" + place);
return TakeOld(place);
}
public Result TakeOldPost(Stream info)
{
StreamReader sr = new StreamReader(info);
string s = sr.ReadToEnd();
Common.log.Info("takeOld[POST] " + s);
s = s.ToLower().Replace("place=", "");
return TakeOld(s);
}
public Result SendNewGet(string from, string place)
{
Common.log.Info("sendNew[GET] from=" + from + " place=" + place);
return SendNew(from, place);
}
public Result SendNewPost(Stream info)
{
StreamReader sr = new StreamReader(info);
string s = sr.ReadToEnd();
Common.log.Info("sendNew[POST] " + s);
s = s.ToLower();
string[] arr = s.Split('&');
arr[0] = arr[0].Replace("from=", "");
arr[1] = arr[1].Replace("place=", "");
return SendNew(arr[0], arr[1]);
}
public Result StorageGet(string place)
{
Common.log.Info("storage[GET] place=" + place);
return Storage(place);
}
public Result StoragePost(Stream info)
{
StreamReader sr = new StreamReader(info);
string s = sr.ReadToEnd();
Common.log.Info("storage[POST] " + s);
s = s.ToLower().Replace("place=", "");
return Storage(s);
}
private Result TakeOld(string place)
{
Result res = new Result();
try
{
place = place.ToUpper();
bool rtn = FindLine(place);
if (rtn)
{
SteelManage.OldSteelWorkAdd(place);
Common.log.Info("TakeOld(" + place + ") OK");
}
else
{
res = new Result { Code = -2, Msg = "Not Find" };
Common.log.Info("没有找到" + place);
}
}
catch (Exception ex)
{
res = new Result { Code = -100, Msg = ex.Message };
Common.log.Error("TakeOld", ex);
}
return res;
}
private Result SendNew(string from, string place)
{
Result res = new Result();
try
{
from = from.ToUpper();
place = place.ToUpper();
string[] arr = place.Split(',');
bool rtn = FindLine(from, arr);
if (rtn)
{
SteelManage.NewSteelWorkAdd(from, arr);
Common.log.Info("SendNew(" + place + ") OK");
}
else
{
res = new Result { Code = -2, Msg = "Not Find" };
Common.log.Info("没有找到" + place);
}
}
catch (Exception ex)
{
res = new Result { Code = -100, Msg = ex.Message };
Common.log.Error("SendNew", ex);
}
return res;
}
private Result Storage(string place)
{
Result res = new Result();
try
{
place = place.ToUpper();
if (place == Common.STORAGE_ENTER_4C.ToUpper())
{
res.Msg = "OK,4C";
SteelManage.StorageWorkAdd(place);
}
else if (place == Common.STORAGE_ENTER_4D.ToUpper())
{
res.Msg = "OK,4D";
SteelManage.StorageWorkAdd(place);
}
else if (place == Common.STORAGE_LEAVE.ToUpper())
{
SteelManage.StorageWorkAdd(place);
}
else if (place == Common.STORAGE_IO_ON.ToUpper())
{
Common.StorageDockFinish = true;
UpdateStorageIO();
res.Msg = "OK," + FindAgv();
}
else if (place == Common.STORAGE_IO_OFF.ToUpper())
{
Common.StorageDockFinish = false;
UpdateStorageIO();
res.Msg = "OK," + FindAgv();
}
else
{
res = new Result { Code = -2, Msg = "Not Find" };
Common.log.Info("没有找到" + place);
}
}
catch (Exception ex)
{
res = new Result { Code = -100, Msg = ex.Message };
Common.log.Error("Storage", ex);
}
return res;
}
private bool FindLine(string place)
{
bool rtn = false;
for (int i = 0; i < Common.agvLines.Count; i++)
{
rtn = Common.agvLines[i].FindLine(place);
if (rtn) return true;
}
return rtn;
}
private bool FindLine(string from, string[] place)
{
bool rtn = false;
for (int i = 0; i < Common.agvLines.Count; i++)
{
rtn = Common.agvLines[i].FindLine(from);
if (rtn)
{
for (int j = 0; j < place.Length; j++)
{
rtn = Common.agvLines[i].FindLine(place[j]);
if (!rtn) return rtn;
}
return true;
}
}
return false;
}
private string FindAgv()
{
string val = "";
for (int i = 0; i < Common.agvInfos.Count; i++)
{
bool rtn = Common.mir.Get_Register(Common.agvInfos[i].IP, Common.agvInfos[i].Authorization, 19, out int value);
if (rtn)
{
if (value == 1)
{
val = Common.agvInfos[i].Workshop;
break;
}
}
}
return val;
}
private void UpdateStorageIO()
{
if (Common.lblStorageIO == null) return;
int.TryParse(Common.lblStorageIO.Tag.ToString(), out int n);
if (Common.StorageDockAlway) Common.StorageDockFinish = true;
string s = Common.StorageDockFinish ? "ON" : "OFF";
Common.lblStorageIO.Text = string.Format("仓库IO信号 {0} ({1})", s, n);
Common.lblStorageIO.BackColor = Common.StorageDockFinish ? System.Drawing.Color.Lime : System.Drawing.Color.Red;
if (n == 9) //没有意义,仅仅是为了能看到信号在变化
n = 0;
else
n++;
Common.lblStorageIO.Tag = n.ToString();
}
}
}
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件的差异太大,无法显示。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<logger name="AGVControl_Steel">
<level value="Debug"/>
<appender-ref ref="AGVControl_Steel"/>
</logger>
<logger name="MiR_API">
<level value="Debug"/>
<appender-ref ref="api"/>
</logger>
<appender name="AGVControl_Steel" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\AGVControl_Steel.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
<appender name="api" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\MiR_API.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
</log4net>
</configuration>
\ No newline at end of file \ No newline at end of file
此文件类型无法预览
此文件的差异太大,无法显示。
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")]
7064026118c881cf53f37963fb3a012bf156bc71
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\BLL.dll
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\BLL.pdb
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\Model.dll
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\log4net.dll
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\RestSharp.dll
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\Model.pdb
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\log4net.xml
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\RestSharp.xml
D:\Neotel_Beta\AGVControl_Steel\BLL\obj\Debug\BLL.csprojAssemblyReference.cache
D:\Neotel_Beta\AGVControl_Steel\BLL\obj\Debug\BLL.csproj.CoreCompileInputs.cache
D:\Neotel_Beta\AGVControl_Steel\BLL\obj\Debug\BLL.csproj.CopyComplete
D:\Neotel_Beta\AGVControl_Steel\BLL\obj\Debug\BLL.dll
D:\Neotel_Beta\AGVControl_Steel\BLL\obj\Debug\BLL.pdb
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\log4net.config
此文件类型无法预览
此文件类型无法预览
//using System;
//using System.Text;
//namespace DAL
//{
// public class CSV
// {
// private readonly string PATH;
// private string[][] content;
// public CSV(string path)
// {
// try
// {
// PATH = path;
// if (!System.IO.File.Exists(path))
// System.IO.File.WriteAllText(path, "", Encoding.UTF8);
// string[] lines = System.IO.File.ReadAllLines(path, Encoding.UTF8);
// content = new string[lines.Length][];
// for (int i = 0; i < lines.Length; i++)
// content[i] = lines[i].Split(',');
// }
// catch (Exception ex)
// {
// content = new string[0][];
// Common.log.Error("CSV.Open", ex);
// }
// }
// public string[][] Read()
// {
// return content;
// }
// public string[] Read(int row)
// {
// if (row >= content.Length)
// return null;
// else
// return content[row];
// }
// public void Save()
// {
// try
// {
// string[] lines = new string[content.Length];
// for (int i = 0; i < content.Length; i++)
// lines[i] = string.Join(",", content[i]);
// System.IO.File.WriteAllLines(PATH, lines);
// Common.log.Debug("文件已保存," + PATH);
// }
// catch (Exception ex)
// {
// Common.log.Error("CSV.Save", ex);
// }
// }
// }
//}
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{82C814D9-4407-4B98-AACE-82CAF714BDAD}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DAL</RootNamespace>
<AssemblyName>DAL</AssemblyName>
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CSV.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file \ No newline at end of file
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("DAL")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DAL")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("82c814d9-4407-4b98-aace-82caf714bdad")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
此文件类型无法预览
此文件类型无法预览
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")]
b7104e81191ba955eefc04653b5fc2db93ad05e7
D:\Neotel_Beta\AGVControl_Steel\DAL\bin\Debug\DAL.dll
D:\Neotel_Beta\AGVControl_Steel\DAL\bin\Debug\DAL.pdb
D:\Neotel_Beta\AGVControl_Steel\DAL\obj\Debug\DAL.csproj.CoreCompileInputs.cache
D:\Neotel_Beta\AGVControl_Steel\DAL\obj\Debug\DAL.dll
D:\Neotel_Beta\AGVControl_Steel\DAL\obj\Debug\DAL.pdb
此文件类型无法预览
此文件类型无法预览
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Model
{
public class AgvInfo
{
/// <summary>
/// 小车名称
/// </summary>
public string Name { set; get; } = "";
/// <summary>
/// 在Fleet中的ID
/// </summary>
public string FleetID { set; get; } = "";
/// <summary>
/// 小车IP地址
/// </summary>
public string IP { set; get; } = "";
/// <summary>
/// 授权码
/// </summary>
public string Authorization { set; get; } = "";
/// <summary>
/// 工作车间
/// </summary>
public string Workshop { set; get; } = "";
/// <summary>
/// 是否自动使用
/// </summary>
public bool IsAuto { set; get; } = false;
/// <summary>
/// 是否在线
/// </summary>
public bool IsOnline { set; get; } = false;
/// <summary>
/// 电量百分比
/// </summary>
public int Battery { set; get; } = 0;
/// <summary>
/// AGV最大充电电量
/// </summary>
public int BatteryMax { set; get; } = 0;
/// <summary>
/// AGV最低电量,小于此值必须充电
/// </summary>
public int BatteryMin { set; get; } = 0;
/// <summary>
/// 状态ID号
/// </summary>
public int StateID { set; get; } = -1;
/// <summary>
/// 状态文本
/// </summary>
public string StateText { set; get; } = "";
/// <summary>
/// 任务文本
/// </summary>
public string MissionText { set; get; } = "";
/// <summary>
/// 小车坐标位置
/// </summary>
public System.Drawing.PointF Position { set; get; }
/// <summary>
/// 是否正在被调用
/// </summary>
public bool IsCall { set; get; } = false;
/// <summary>
/// 当前的工作
/// </summary>
public IJob CurrentJob { set; get; } = null;
public string Place { set; get; } = "";
public int OldSteel { set; get; } = 0;
public int NewSteel { set; get; } = 0;
public AgvInfo(string fleetID, string name, string ip, string workshop, string authorization)
{
Name = name;
FleetID = fleetID;
IP = ip;
Workshop = workshop;
Authorization = authorization;
}
public string[] ToGridRow()
{
string[] arr = new string[] { Name, Place, StateText, Battery.ToString(), IsOnline.ToString(), IsAuto.ToString(), "清除" };
return arr;
}
public string ToMissionState()
{
string s = Name + " [" + IP + "]\r\n\r\n" + MissionText;
return s;
}
/// <summary>
/// 在自己的工作区域
/// </summary>
/// <returns></returns>
public bool IsWorkspace()
{
if (Position.Y < 55)
{
if (Workshop.IndexOf('D') > 0)
return true;
else if (Workshop.IndexOf('C') > 0)
return false;
}
else if (Position.Y > 62)
{
if (Workshop.IndexOf('D') > 0)
return false;
else if (Workshop.IndexOf('C') > 0)
return true;
}
return false;
}
public bool Is4DWorkshop()
{
if (Position.Y < 55)
return true;
else if (Position.Y > 62)
return false;
else
return false;
}
}
}
using System;
using System.Collections.Generic;
namespace Model
{
public static class Common
{
public static MiR_API mir;
public static Log log;
public static List<AgvInfo> agvInfos;
public static Dictionary<string, string> agvMissions;
public static List<WorkshopLine> agvLines;
public static System.Configuration.Configuration appConfig;
public static System.Windows.Forms.TextBox txtLog;
public static System.Windows.Forms.ListBox lstOldSteel;
public static System.Windows.Forms.ListBox lstNewSteel;
public static System.Windows.Forms.ListBox lstStorage;
public static System.Windows.Forms.Label lblStorageIO;
//public static string[] PLACE_NAME;
public static bool FLEET_SEND;
public static bool StorageDockFinish = false; //停靠完成
public static bool StorageDockAlway = false; //指定停靠状态,一直不改变
public const string STORAGE_ENTER_4C = "4C_enter";
public const string STORAGE_ENTER_4D = "4D_enter";
public const string STORAGE_LEAVE = "leave";
public const string STORAGE_IO_ON = "di_on";
public const string STORAGE_IO_OFF = "di_off";
public const string MISSION_TAKE_OFF_SHELF = "Placeqisdashelf";
public const string MISSION_TAKE_ON_SHELF = "Pickupqisdashelf";
public const string MISSION_PASS_DOOR_INTO = "PassDoorInto";
public const string MISSION_CHARGE = "AutoCharge";
public const string MISSION_STANDBY = "MoveStandby";
public const string MISSION_MOVE_WASH = "MoveWash";
public const string MISSION_MOVE_STORAGE = "MoveSteelstorage";
public const string MISSION_MOVE_STEEL = "MoveSteel";
public static readonly string PATH_AGV_NAME = Environment.CurrentDirectory + "\\Config\\AgvName.csv";
public static readonly string PATH_AGV_MISSION = Environment.CurrentDirectory + "\\Config\\AgvMission.csv";
public static readonly string PATH_AGV_LINE = Environment.CurrentDirectory + "\\Config\\AgvLine.txt";
public static readonly string PATH_NEW_STEEL_WORK = Environment.CurrentDirectory + "\\Config\\NewSteelWork.txt";
public static readonly string PATH_OLD_STEEL_WORK = Environment.CurrentDirectory + "\\Config\\OldSteelWork.txt";
public static readonly string PATH_STORAGE_WORK = Environment.CurrentDirectory + "\\Config\\StorageWork.txt";
}
}
using System;
namespace Model
{
public interface IJob
{
public bool IsEnd { get; }
public IJob Execute(AgvInfo info);
}
}
using System;
namespace Model
{
public class Log
{
private readonly log4net.ILog LOG;
public Log(string name)
{
LOG = log4net.LogManager.GetLogger(name);
}
public System.Windows.Forms.TextBox LogBox { set; get; }
public void Info(string s)
{
LOG.Info(s);
}
public void Debug(string s)
{
LOG.Debug(s);
}
public void Warn(string s)
{
LOG.Warn(s);
}
public void Error(string s, Exception ex)
{
LOG.Error(s, ex);
}
public void UI_Display(string s)
{
if (LogBox == null) return;
string time = string.Format("[{0:HH:mm:ss}] ", DateTime.Now);
LogBox.AppendText(time + s + "\r\n");
//LogBox.SelectionStart = LogBox.Text.Length;
LogBox.ScrollToCaret();
}
}
}
using System;
using System.Collections.Generic;
using System.Web.Script.Serialization;
using RestSharp;
namespace Model
{
/// <summary>
/// MiR小车API
/// </summary>
public class MiR_API
{
private readonly log4net.ILog LOG;
private const int httpTimeout = 10000;
/// <summary>
/// Fleet的IP地址
/// </summary>
public string FleetIP { set; get; }
/// <summary>
/// 任务列表
/// </summary>
public Dictionary<string, string> MissionList { set; get; }
/// <summary>
/// MiR小车API
/// </summary>
public MiR_API()
{
LOG = log4net.LogManager.GetLogger("MiR_API");
}
/// <summary>
/// 获取IO模块guid列表
/// </summary>
/// <param name="ip"></param>
/// <param name="authorization"></param>
/// <param name="guid"></param>
/// <returns></returns>
public bool Get_IO_Modules(string ip, string authorization, out string[] guid)
{
guid = null;
try
{
string url = "http://" + ip + "/api/v2.0.0/io_modules";
string json = HttpGet(url, ip, authorization);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
object[] obj = (object[])serializer.DeserializeObject(json);
if (obj == null) return false;
guid = new string[obj.Length];
for (int i = 0; i < obj.Length; i++)
{
Dictionary<string, object> dic = (Dictionary<string, object>)obj[i];
guid[i] = dic["guid"].ToString();
}
return true;
}
catch (Exception ex)
{
LOG.Error(ex);
return false;
}
}
/// <summary>
/// 获取IO模块的状态
/// </summary>
/// <param name="ip"></param>
/// <param name="authorization"></param>
/// <param name="guid"></param>
/// <param name="input"></param>
/// <param name="output"></param>
/// <returns></returns>
public bool Get_IO_Status(string ip, string authorization, string guid, out bool[] input, out bool[] output)
{
input = null;
output = null;
try
{
string url = "http://" + ip + "/api/v2.0.0/io_modules/" + guid + "/status";
string json = HttpGet(url, ip, authorization);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
object[] objInput = (object[])dic["input_state"];
input = new bool[objInput.Length];
for (int i = 0; i < input.Length; i++)
input[i] = Convert.ToBoolean(objInput[i]);
object[] objOutput = (object[])dic["output_state"];
output = new bool[objOutput.Length];
for (int i = 0; i < output.Length; i++)
output[i] = Convert.ToBoolean(objOutput[i]);
return true;
}
catch (Exception ex)
{
LOG.Error(ex);
return false;
}
}
/// <summary>
/// 获取任务状态
/// </summary>
/// <param name="authorization"></param>
/// <param name="id"></param>
/// <param name="state"></param>
/// <returns></returns>
public bool Get_MissionState_Fleet(string authorization, string id, out string state)
{
state = null;
try
{
string url = "http://" + FleetIP + "/api/v2.0.0/mission_scheduler/" + id;
string json = HttpGet(url, FleetIP, authorization);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
state = dic["state"].ToString();
return true;
}
catch (Exception ex)
{
LOG.Error(ex);
return false;
}
}
/// <summary>
/// 获取任务状态
/// </summary>
/// <param name="ip"></param>
/// <param name="authorization"></param>
/// <param name="id"></param>
/// <param name="state"></param>
/// <returns></returns>
public bool Get_MissionState(string ip, string authorization, string id, out string state)
{
state = null;
try
{
string url = "http://" + ip + "/api/v2.0.0/mission_queue/" + id;
string json = HttpGet(url, FleetIP, authorization);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
state = dic["state"].ToString();
return true;
}
catch (Exception ex)
{
LOG.Error(ex);
return false;
}
}
/// <summary>
/// 获取PLC寄存器的内容
/// </summary>
/// <param name="ip"></param>
/// <param name="authorization"></param>
/// <param name="reg"></param>
/// <param name="regValue"></param>
/// <returns></returns>
public bool Get_Register(string ip, string authorization, int reg, out int regValue)
{
regValue = -1;
try
{
string url = "http://" + ip + "/api/v2.0.0/registers/" + reg + "?whitelist=value";
string json = HttpGet(url, ip, authorization);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
string s = dic["value"].ToString();
float f = Convert.ToSingle(s);
regValue = Convert.ToInt32(f);
return true;
}
catch (Exception ex)
{
LOG.Error(ex);
return false;
}
}
/// <summary>
/// 设置PLC寄存器的内容
/// </summary>
/// <param name="ip"></param>
/// <param name="authorization"></param>
/// <param name="reg"></param>
/// <param name="regValue"></param>
/// <returns></returns>
public bool Set_Register(string ip, string authorization, int reg, int regValue)
{
try
{
string url = "http://" + ip + "/api/v2.0.0/registers/" + reg;
string body = "{\"value\": " + regValue + "}";
string json = HttpPost(url, ip, authorization, body);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
string s = dic["value"].ToString();
float f = Convert.ToSingle(s);
if (regValue == Convert.ToInt32(f))
return true;
else
return false;
}
catch (Exception ex)
{
LOG.Error(ex);
return false;
}
}
/// <summary>
/// 添加任务到小车自身任务队列
/// </summary>
/// <param name="ip"></param>
/// <param name="authorization"></param>
/// <param name="missionName"></param>
/// <param name="id"></param>
/// <returns></returns>
public bool Add_Mission(string ip, string authorization, string missionName, out string id)
{
id = null;
try
{
string url = "http://" + ip + "/api/v2.0.0/mission_queue";
string body = "{\"mission_id\":\"" + MissionList[missionName] + "\"}";
LOG.Info(string.Format("URL:{0} Body:{1}", url, body));
string json = HttpPost(url, ip, authorization, body);
LOG.Info("Return:" + json);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
id = dic["id"].ToString();
string missionId = dic["mission_id"].ToString();
if (missionId == MissionList[missionName])
return true;
else
return false;
}
catch (Exception ex)
{
LOG.Error(ex);
return false;
}
}
/// <summary>
/// 添加任务到Fleet任务队列
/// </summary>
/// <param name="fleetID"></param>
/// <param name="authorization"></param>
/// <param name="missionName"></param>
/// <param name="id"></param>
/// <returns></returns>
public bool Add_Mission_Fleet(string fleetID, string authorization, string missionName, out string id)
{
id = null;
try
{
string url = "http://" + FleetIP + "/api/v2.0.0/mission_scheduler";
string body = "{\"mission_id\":\"" + MissionList[missionName] + "\",\"robot_id\":" + fleetID + "}";
LOG.Info(string.Format("URL:{0} Body:{1}", url, body));
string json = HttpPost(url, FleetIP, authorization, body);
LOG.Info("Return:" + json);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
id = dic["id"].ToString();
string missionId = dic["mission_id"].ToString();
if (missionId == MissionList[missionName])
return true;
else
return false;
}
catch (Exception ex)
{
LOG.Error(ex);
return false;
}
}
// /// <summary>
// /// 获取所有任务列表
// /// </summary>
// /// <param name="info"></param>
// /// <param name="mission">任务(名称,guid)</param>
// /// <returns></returns>
// public bool Get_Mission(AgvInfo info, out Dictionary<string, string> mission)
// {
// try
// {
// mission = null;
// string url = "http://" + info.IP + "/api/v2.0.0/missions/search?whitelist=guid,name";
// string body = "{\"filters\" :[]}";
// string json = HttpPost(url, info.IP, info.Authorization, body);
// Common.log.Info(string.Format("URL: {0}; Body: {1}", url, body)+"\n"+"Return: " + json);
// if (string.IsNullOrWhiteSpace(json)) return false;
// JavaScriptSerializer serializer = new JavaScriptSerializer();
// object[] obj = (object[])serializer.DeserializeObject(json);
// if (obj == null) return false;
// mission = new Dictionary<string, string>();
// for (int i = 0; i < obj.Length; i++)
// {
// Dictionary<string, object> dic = (Dictionary<string, object>)obj[i];
// mission.Add(dic["name"].ToString(), dic["guid"].ToString());
// }
// return true;
// }
// catch (Exception ex)
// {
// mission = null;
// Common.log.Error(ex);
// return false;
// }
// }
// /// <summary>
// /// 获取当前任务队列guid
// /// </summary>
// /// <param name="info"></param>
// /// <param name="mission"></param>
// /// <returns></returns>
// public bool Get_Mission_Queue(AgvInfo info, out List<string> mission)
// {
// try
// {
// mission = null;
// string url = "http://" + info.IP + "/api/v2.0.0/mission_queue/search";
// string body = "{\"filters\" : [{\"fieldname\": \"state\", \"operator\": \"IN\", \"value\": [\"Pending\", \"Executing\"]}]}";
// string json = HttpPost(url, info.IP, info.Authorization, body);
// Common.log.Info(string.Format("URL: {0}; Body: {1}", url, body)+"\n"+"Return: " + json);
// if (string.IsNullOrWhiteSpace(json)) return false;
// JavaScriptSerializer serializer = new JavaScriptSerializer();
// object[] obj = (object[])serializer.DeserializeObject(json);
// if (obj == null) return false;
// mission = new List<string>();
// Dictionary<string, object> dic;
// for (int i = 0; i < obj.Length; i++)
// {
// dic = (Dictionary<string, object>)obj[i];
// mission.Add(dic["id"].ToString());
// }
// for (int i = 0; i < mission.Count; i++)
// {
// url = "http://" + info.IP + "/api/v2.0.0/mission_queue/" + mission[i];
// json = HttpGet(url, info.IP, info.Authorization);
// serializer = new JavaScriptSerializer();
// dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
// mission[i] = dic["mission_id"].ToString();
// }
// return true;
// }
// catch (Exception ex)
// {
// mission = null;
// Common.log.Error(ex);
// return false;
// }
// }
/// <summary>
/// 删除小车所有任务
/// </summary>
/// <param name="ip"></param>
/// <param name="authorization"></param>
public void Del_Mission(string ip, string authorization)
{
try
{
string url = "http://" + ip + "/api/v2.0.0/mission_queue";
HttpDel(url, ip, authorization);
}
catch (Exception ex)
{
LOG.Error(ex);
}
}
/// <summary>
/// 删除Fleet尽快中指定id的任务,已运行的无法删除
/// </summary>
/// <param name="authorization"></param>
/// <param name="id"></param>
public void Del_Mission_Fleet(string authorization, string id)
{
try
{
string url = "http://" + FleetIP + "/api/v2.0.0/mission_scheduler/" + id;
HttpDel(url, FleetIP, authorization);
}
catch (Exception ex)
{
LOG.Error(ex);
}
}
/// <summary>
/// 获取当前小车状态
/// </summary>
/// <param name="ip"></param>
/// <param name="authorization"></param>
/// <param name="stateID"></param>
/// <param name="stateText"></param>
/// <param name="battery"></param>
/// <param name="missionText"></param>
/// <param name="position"></param>
/// <returns></returns>
public bool Get_State(string ip, string authorization, out int stateID, out string stateText, out int battery, out string missionText, out System.Drawing.PointF position)
{
stateID = -1;
stateText = "";
battery = 0;
missionText = "";
position = new System.Drawing.PointF();
try
{
string url = "http://" + ip + "/api/v2.0.0/status?whitelist=state_id,state_text,battery_percentage,mission_text,position";
string json = HttpGet(url, ip, authorization);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
stateID = Convert.ToInt32(dic["state_id"].ToString());
stateText = dic["state_text"].ToString();
missionText = dic["mission_text"].ToString();
Dictionary<string, object> tt = (Dictionary<string, object>)dic["position"];
position.X = Convert.ToSingle(tt["x"]);
position.Y = Convert.ToSingle(tt["y"]);
string s = dic["battery_percentage"].ToString();
float f = Convert.ToSingle(s);
battery = Convert.ToInt32(f);
return true;
}
catch (Exception ex)
{
LOG.Error(ex);
return false;
}
}
/// <summary>
/// 小车状态改为Ready
/// </summary>
/// <param name="ip"></param>
/// <param name="authorization"></param>
/// <returns></returns>
public bool State_Ready(string ip, string authorization)
{
try
{
string url = "http://" + ip + "/api/v2.0.0/status?whitelist=state_id,state_text";
string body = "{\"state_id\": 3}";
string json = HttpPut(url, ip, authorization, body);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
string s = dic["state_id"].ToString();
if (s == "3")
return true;
else
return false;
}
catch (Exception ex)
{
LOG.Error(ex);
return false;
}
}
/// <summary>
/// 小车状态改为Pause
/// </summary>
/// <param name="ip"></param>
/// <param name="authorization"></param>
/// <returns></returns>
public bool State_Pause(string ip, string authorization)
{
try
{
string url = "http://" + ip + "/api/v2.0.0/status?whitelist=state_id,state_text";
string body = "{\"state_id\": 4}";
string json = HttpPut(url, ip, authorization, body);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
string s = dic["state_id"].ToString();
if (s == "4")
return true;
else
return false;
}
catch (Exception ex)
{
LOG.Error(ex);
return false;
}
}
/// <summary>
/// 清除错误
/// </summary>
/// <param name="ip"></param>
/// <param name="authorization"></param>
/// <returns></returns>
public bool Clear_Error(string ip, string authorization)
{
try
{
string url = "http://" + ip + "/api/v2.0.0/status";
string body = "{\"clear_error\": true}";
string json = HttpPut(url, ip, authorization, body);
if (string.IsNullOrWhiteSpace(json)) return false;
return true;
}
catch (Exception ex)
{
LOG.Error(ex);
return false;
}
}
/// <summary>
/// 检查IP地址
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public bool CheckIP(string ip)
{
//IP合法
string pattern = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$";
bool rtn = System.Text.RegularExpressions.Regex.IsMatch(ip, pattern);
if (!rtn)
{
LOG.Info("非法的IP地址" + ip);
return false;
}
//Ping服务端
try
{
System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
System.Net.NetworkInformation.PingReply result = ping.Send(ip, 2000);
ping.Dispose();
if (result.Status != System.Net.NetworkInformation.IPStatus.Success)
{
LOG.Info("Ping " + ip + " 请求没有响应");
return false;
}
return true;
}
catch (Exception ex)
{
LOG.Error(ex);
return false;
}
}
// public bool GetResourcePosition(AgvInfo info, out Dictionary<string, string> res)
// {
// res = new Dictionary<string, string>();
// string ip = Common.appConfig.AppSettings.Settings["FLEET"].Value;
// string url = "http://" + ip + "/api/v2.0.0/resources/positions";
// string json = HttpGet(url, info.IP, info.Authorization);
// Common.log.Info("URL: " + url + "\n" + "Return: " + json);
// if (string.IsNullOrWhiteSpace(json)) return false;
// JavaScriptSerializer serializer = new JavaScriptSerializer();
// object[] obj = (object[])serializer.DeserializeObject(json);
// if (obj == null) return false;
// for (int i = 0; i < obj.Length; i++)
// {
// string key;
// Dictionary<string, object> dic = (Dictionary<string, object>)obj[i];
// if (dic.TryGetValue("name", out object value))
// key = value.ToString();
// else
// continue;
// if (res.ContainsKey(key))
// continue;
// else
// res.Add(key, "");
// if (dic.TryGetValue("queue", out value))
// {
// object[] temp = (object[])value;
// if (temp.Length == 0) continue;
// string[] robotName = new string[temp.Length];
// for (int j = 0; j < temp.Length; j++)
// {
// if (GetRobot(info, temp[j].ToString(), out string name))
// robotName[j] = name;
// }
// res[key] = string.Join(",", robotName);
// }
// }
// return true;
// }
// public bool GetResourceArea(AgvInfo info, out Dictionary<string, string> res)
// {
// res = new Dictionary<string, string>();
// string ip = Common.appConfig.AppSettings.Settings["FLEET"].Value;
// string url = "http://" + ip + "/api/v2.0.0/resources/areas";
// string json = HttpGet(url, info.IP, info.Authorization);
// Common.log.Info("URL: " + url + "\n" + "Return: " + json);
// if (string.IsNullOrWhiteSpace(json)) return false;
// JavaScriptSerializer serializer = new JavaScriptSerializer();
// object[] obj = (object[])serializer.DeserializeObject(json);
// if (obj == null) return false;
// for (int i = 0; i < obj.Length; i++)
// {
// string key;
// Dictionary<string, object> dic = (Dictionary<string, object>)obj[i];
// if (dic.TryGetValue("name", out object value))
// key = value.ToString();
// else
// continue;
// if (res.ContainsKey(key))
// continue;
// else
// res.Add(key, "");
// if (dic.TryGetValue("queue", out value))
// {
// object[] temp = (object[])value;
// if (temp.Length == 0) continue;
// string[] robotName = new string[temp.Length];
// for (int j = 0; j < temp.Length; j++)
// {
// if (GetRobot(info, temp[j].ToString(), out string name))
// robotName[j] = name;
// }
// res[key] = string.Join(",", robotName);
// }
// }
// return true;
// }
// public bool GetRobot(AgvInfo info, string id, out string name)
// {
// name = "";
// string ip = Common.appConfig.AppSettings.Settings["FLEET"].Value;
// string url = "http://" + ip + "/api/v2.0.0/robots/" + id;
// string json = HttpGet(url, info.IP, info.Authorization);
// Common.log.Info("URL: " + url + "\n" + "Return: " + json);
// if (string.IsNullOrWhiteSpace(json)) return false;
// JavaScriptSerializer serializer = new JavaScriptSerializer();
// Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
// if (dic.TryGetValue("status", out object value))
// {
// Dictionary<string, object> dic2 = (Dictionary<string, object>)value;
// if (dic2.TryGetValue("robot_name", out object robotName))
// {
// name = robotName.ToString();
// return true;
// }
// else
// {
// return false;
// }
// }
// else
// {
// return false;
// }
// }
private string HttpGet(string url, string ip, string authorization)
{
LOG.Info("[GET]URL:" + url);
RestClient client = new RestClient(url) { Timeout = httpTimeout };
RestRequest request = new RestRequest(Method.GET);
request.AddHeader("Host", ip);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Accept-Language", "zh_CN");
request.AddHeader("Authorization", authorization);
IRestResponse response = client.Execute(request);
string s = response.Content;
if (string.IsNullOrWhiteSpace(s))
{
s = "";
}
else
{
s = s.Replace("\n", "");
s = s.Replace("\r", "");
while (s.IndexOf(" ") >= 0)
s = s.Replace(" ", " ");
}
LOG.Info("Return:" + s);
return s;
}
private string HttpPost(string url, string ip, string authorization, string body)
{
LOG.Info("[POST]URL:" + url + " Body:" + body);
RestClient client = new RestClient(url) { Timeout = httpTimeout };
RestRequest request = new RestRequest(Method.POST);
request.AddHeader("Host", ip);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", authorization);
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
string s = response.Content;
if (string.IsNullOrWhiteSpace(s))
{
s = "";
}
else
{
s = s.Replace("\n", "");
s = s.Replace("\r", "");
while (s.IndexOf(" ") >= 0)
s = s.Replace(" ", " ");
}
LOG.Info("Return:" + s);
return s;
}
private string HttpPut(string url, string ip, string authorization, string body)
{
LOG.Info("[PUT]URL:" + url + " Body:" + body);
RestClient client = new RestClient(url) { Timeout = httpTimeout };
RestRequest request = new RestRequest(Method.PUT);
request.AddHeader("Host", ip);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", authorization);
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
string s = response.Content;
if (string.IsNullOrWhiteSpace(s))
{
s = "";
}
else
{
s = s.Replace("\n", "");
s = s.Replace("\r", "");
while (s.IndexOf(" ") >= 0)
s = s.Replace(" ", " ");
}
LOG.Info("Return:" + s);
return s;
}
private void HttpDel(string url, string ip, string authorization)
{
LOG.Info("[DELETE]URL:" + url);
RestClient client = new RestClient(url) { Timeout = httpTimeout };
RestRequest request = new RestRequest(Method.DELETE);
request.AddHeader("Host", ip);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", authorization);
request.AddParameter("application/json", "", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
string s = response.Content;
if (string.IsNullOrWhiteSpace(s))
{
s = "";
}
else
{
s = s.Replace("\n", "");
s = s.Replace("\r", "");
while (s.IndexOf(" ") >= 0)
s = s.Replace(" ", " ");
}
LOG.Info("Return:" + s);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{AC764294-C5E4-441F-ACC8-F912366CA1BC}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Model</RootNamespace>
<AssemblyName>Model</AssemblyName>
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
<ItemGroup>
<Reference Include="log4net, Version=2.0.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.11\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="RestSharp, Version=106.11.7.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
<HintPath>..\packages\RestSharp.106.11.7\lib\net452\RestSharp.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AgvInfo.cs" />
<Compile Include="Common.cs" />
<Compile Include="IJob.cs" />
<Compile Include="Log.cs" />
<Compile Include="MiR_API.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SteelWork.cs" />
<Compile Include="WorkshopLine.cs" />
</ItemGroup>
<ItemGroup>
<None Include="log4net.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file \ No newline at end of file
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("Common")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Common")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("ac764294-c5e4-441f-acc8-f912366ca1bc")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
\ No newline at end of file \ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Model
{
public class SteelWork
{
public string From { set; get; }
public string Place { set; get; }
public DateTime DateTime { set; get; }
public SteelWork()
{
DateTime = DateTime.Now;
}
}
}
using System;
namespace Model
{
public class WorkshopLine
{
public string Workshop;
public string[] Lines;
public bool FindLine(string place)
{
int idx = Array.FindIndex(Lines, s => s.ToUpper() == place.ToUpper());
if (idx == -1)
return false;
else
return true;
}
}
}
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件的差异太大,无法显示。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<logger name="AGVControl_Steel">
<level value="Debug"/>
<appender-ref ref="AGVControl_Steel"/>
</logger>
<logger name="MiR_API">
<level value="Debug"/>
<appender-ref ref="api"/>
</logger>
<appender name="AGVControl_Steel" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\AGVControl_Steel.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
<appender name="api" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\MiR_API.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
</log4net>
</configuration>
\ No newline at end of file \ No newline at end of file
此文件类型无法预览
此文件的差异太大,无法显示。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<logger name="AGVControl_Steel">
<level value="Debug"/>
<appender-ref ref="AGVControl_Steel"/>
</logger>
<logger name="MiR_API">
<level value="Debug"/>
<appender-ref ref="api"/>
</logger>
<appender name="AGVControl_Steel" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\AGVControl_Steel.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
<appender name="api" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\MiR_API.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
</log4net>
</configuration>
\ No newline at end of file \ No newline at end of file
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")]
e1d2cd34bcbfa49d1a1bef981de43c0fe5f2ed09
D:\Neotel_Beta\AGVControl_Steel\Common\bin\Debug\Common.dll
D:\Neotel_Beta\AGVControl_Steel\Common\bin\Debug\Common.pdb
D:\Neotel_Beta\AGVControl_Steel\Common\bin\Debug\log4net.dll
D:\Neotel_Beta\AGVControl_Steel\Common\bin\Debug\log4net.xml
D:\Neotel_Beta\AGVControl_Steel\Common\obj\Debug\Common.csprojAssemblyReference.cache
D:\Neotel_Beta\AGVControl_Steel\Common\obj\Debug\Common.csproj.CoreCompileInputs.cache
D:\Neotel_Beta\AGVControl_Steel\Common\obj\Debug\Common.csproj.CopyComplete
D:\Neotel_Beta\AGVControl_Steel\Common\obj\Debug\Common.dll
D:\Neotel_Beta\AGVControl_Steel\Common\obj\Debug\Common.pdb
d480f537fc8054565c9d1586e5e41d9a7a213025
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\Model.dll
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\Model.pdb
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\log4net.dll
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\RestSharp.dll
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\log4net.xml
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\RestSharp.xml
D:\Neotel_Beta\AGVControl_Steel\Model\obj\Debug\Model.csproj.CoreCompileInputs.cache
D:\Neotel_Beta\AGVControl_Steel\Model\obj\Debug\Model.csproj.CopyComplete
D:\Neotel_Beta\AGVControl_Steel\Model\obj\Debug\Model.dll
D:\Neotel_Beta\AGVControl_Steel\Model\obj\Debug\Model.pdb
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\log4net.config
D:\Neotel_Beta\AGVControl_Steel\Model\obj\Debug\Model.csprojAssemblyReference.cache
此文件类型无法预览
此文件类型无法预览
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="log4net" version="2.0.11" targetFramework="net46" />
<package id="RestSharp" version="106.11.7" targetFramework="net46" />
</packages>
\ No newline at end of file \ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<appSettings>
<add key="FLEET_IP" value="10.85.199.3"/>
<add key="FLEET_Send" value="true"/>
<add key="WebService" value="http://10.85.196.40:8089/"/>
<!--<add key="WebService" value="http://127.0.0.1:8089/"/>-->
<add key="AGV_BATTERY_MAX" value="100"/>
<add key="AGV_BATTERY_MIN" value="40"/>
<add key="11号_4C" value="false"/>
<add key="13号_4D" value="false"/>
</appSettings>
</configuration>
\ No newline at end of file \ No newline at end of file
namespace AGVControl_Steel
{
partial class FrmMain
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = 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 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.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmMain));
this.DgvName = new System.Windows.Forms.DataGridView();
this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column7 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column4 = new System.Windows.Forms.DataGridViewButtonColumn();
this.Column8 = new System.Windows.Forms.DataGridViewButtonColumn();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel();
this.TxtAgvMission0 = new System.Windows.Forms.TextBox();
this.TxtLog = new System.Windows.Forms.TextBox();
this.TxtAgvMission1 = new System.Windows.Forms.TextBox();
this.LblStorageIO = new System.Windows.Forms.Label();
this.LblWeb = new System.Windows.Forms.Label();
this.tabPage3 = new System.Windows.Forms.TabPage();
this.ChkMissionDebug = new System.Windows.Forms.CheckBox();
this.ChkStorageIO = new System.Windows.Forms.CheckBox();
this.LblMissionHint = new System.Windows.Forms.Label();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.LstStorage = new System.Windows.Forms.ListBox();
this.LstOldSteel = new System.Windows.Forms.ListBox();
this.LstNewSteel = new System.Windows.Forms.ListBox();
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
this.BtnOldSteelWorkDelAll = new System.Windows.Forms.Button();
this.BtnOldSteelWorkDel = new System.Windows.Forms.Button();
this.BtnOldSteelWorkAdd = new System.Windows.Forms.Button();
this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
this.BtnNewSteelWorkDelAll = new System.Windows.Forms.Button();
this.BtnNewSteelWorkDel = new System.Windows.Forms.Button();
this.BtnNewSteelWorkAdd = new System.Windows.Forms.Button();
this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel();
this.BtnStorageWorkDelAll = new System.Windows.Forms.Button();
this.BtnStorageWorkDel = new System.Windows.Forms.Button();
this.BtnStorageWorkAdd = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.BtnMissionPause = new System.Windows.Forms.Button();
this.BtnMissionRun = new System.Windows.Forms.Button();
this.BtnMissionClear = new System.Windows.Forms.Button();
this.BtnMissionAdd = new System.Windows.Forms.Button();
this.LstMission = new System.Windows.Forms.ListBox();
this.BtnClearLog = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.DgvName)).BeginInit();
this.tabControl1.SuspendLayout();
this.tabPage2.SuspendLayout();
this.tableLayoutPanel5.SuspendLayout();
this.tabPage3.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.tableLayoutPanel2.SuspendLayout();
this.tableLayoutPanel3.SuspendLayout();
this.tableLayoutPanel4.SuspendLayout();
this.tabPage1.SuspendLayout();
this.SuspendLayout();
//
// DgvName
//
this.DgvName.AllowUserToAddRows = false;
this.DgvName.AllowUserToDeleteRows = false;
this.DgvName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
dataGridViewCellStyle1.Font = new System.Drawing.Font("宋体", 12F);
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.DgvName.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
this.DgvName.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.DgvName.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Column1,
this.Column2,
this.Column5,
this.Column3,
this.Column7,
this.Column4,
this.Column8});
dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Window;
dataGridViewCellStyle9.Font = new System.Drawing.Font("宋体", 12F);
dataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.ControlText;
dataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
this.DgvName.DefaultCellStyle = dataGridViewCellStyle9;
this.DgvName.Location = new System.Drawing.Point(12, 12);
this.DgvName.Name = "DgvName";
this.DgvName.ReadOnly = true;
dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle10.BackColor = System.Drawing.SystemColors.Control;
dataGridViewCellStyle10.Font = new System.Drawing.Font("宋体", 12F);
dataGridViewCellStyle10.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle10.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle10.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle10.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.DgvName.RowHeadersDefaultCellStyle = dataGridViewCellStyle10;
this.DgvName.RowHeadersWidth = 50;
this.DgvName.RowTemplate.Height = 23;
this.DgvName.Size = new System.Drawing.Size(833, 88);
this.DgvName.TabIndex = 0;
this.DgvName.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.DgvName_CellContentClick);
//
// Column1
//
this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;
dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Column1.DefaultCellStyle = dataGridViewCellStyle2;
this.Column1.HeaderText = "名称";
this.Column1.Name = "Column1";
this.Column1.ReadOnly = true;
this.Column1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
//
// Column2
//
this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;
dataGridViewCellStyle3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Column2.DefaultCellStyle = dataGridViewCellStyle3;
this.Column2.HeaderText = "地点";
this.Column2.Name = "Column2";
this.Column2.ReadOnly = true;
this.Column2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
//
// Column5
//
this.Column5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;
dataGridViewCellStyle4.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Column5.DefaultCellStyle = dataGridViewCellStyle4;
this.Column5.HeaderText = "小车状态";
this.Column5.Name = "Column5";
this.Column5.ReadOnly = true;
this.Column5.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
//
// Column3
//
this.Column3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;
dataGridViewCellStyle5.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Column3.DefaultCellStyle = dataGridViewCellStyle5;
this.Column3.HeaderText = "电量";
this.Column3.Name = "Column3";
this.Column3.ReadOnly = true;
this.Column3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this.Column3.Width = 80;
//
// Column7
//
this.Column7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;
dataGridViewCellStyle6.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Column7.DefaultCellStyle = dataGridViewCellStyle6;
this.Column7.HeaderText = "在线";
this.Column7.Name = "Column7";
this.Column7.ReadOnly = true;
this.Column7.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this.Column7.Width = 80;
//
// Column4
//
this.Column4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;
dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
dataGridViewCellStyle7.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Column4.DefaultCellStyle = dataGridViewCellStyle7;
this.Column4.HeaderText = "自动";
this.Column4.Name = "Column4";
this.Column4.ReadOnly = true;
this.Column4.Width = 80;
//
// Column8
//
dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
dataGridViewCellStyle8.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Column8.DefaultCellStyle = dataGridViewCellStyle8;
this.Column8.HeaderText = "任务";
this.Column8.Name = "Column8";
this.Column8.ReadOnly = true;
//
// tabControl1
//
this.tabControl1.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.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Controls.Add(this.tabPage3);
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Font = new System.Drawing.Font("宋体", 12F);
this.tabControl1.Location = new System.Drawing.Point(12, 106);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(833, 552);
this.tabControl1.TabIndex = 1;
//
// tabPage2
//
this.tabPage2.Controls.Add(this.BtnClearLog);
this.tabPage2.Controls.Add(this.tableLayoutPanel5);
this.tabPage2.Controls.Add(this.LblStorageIO);
this.tabPage2.Controls.Add(this.LblWeb);
this.tabPage2.Location = new System.Drawing.Point(4, 26);
this.tabPage2.Name = "tabPage2";
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
this.tabPage2.Size = new System.Drawing.Size(825, 522);
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "状态";
this.tabPage2.UseVisualStyleBackColor = true;
//
// tableLayoutPanel5
//
this.tableLayoutPanel5.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.tableLayoutPanel5.ColumnCount = 2;
this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 70F));
this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30F));
this.tableLayoutPanel5.Controls.Add(this.TxtAgvMission0, 1, 0);
this.tableLayoutPanel5.Controls.Add(this.TxtLog, 0, 0);
this.tableLayoutPanel5.Controls.Add(this.TxtAgvMission1, 1, 1);
this.tableLayoutPanel5.Location = new System.Drawing.Point(6, 48);
this.tableLayoutPanel5.Name = "tableLayoutPanel5";
this.tableLayoutPanel5.RowCount = 2;
this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel5.Size = new System.Drawing.Size(813, 468);
this.tableLayoutPanel5.TabIndex = 10;
//
// TxtAgvMission0
//
this.TxtAgvMission0.Dock = System.Windows.Forms.DockStyle.Fill;
this.TxtAgvMission0.Font = new System.Drawing.Font("宋体", 12F);
this.TxtAgvMission0.Location = new System.Drawing.Point(572, 3);
this.TxtAgvMission0.Multiline = true;
this.TxtAgvMission0.Name = "TxtAgvMission0";
this.TxtAgvMission0.ReadOnly = true;
this.TxtAgvMission0.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.TxtAgvMission0.Size = new System.Drawing.Size(238, 228);
this.TxtAgvMission0.TabIndex = 11;
//
// TxtLog
//
this.TxtLog.Dock = System.Windows.Forms.DockStyle.Fill;
this.TxtLog.Font = new System.Drawing.Font("宋体", 12F);
this.TxtLog.Location = new System.Drawing.Point(3, 3);
this.TxtLog.Multiline = true;
this.TxtLog.Name = "TxtLog";
this.TxtLog.ReadOnly = true;
this.tableLayoutPanel5.SetRowSpan(this.TxtLog, 2);
this.TxtLog.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.TxtLog.Size = new System.Drawing.Size(563, 462);
this.TxtLog.TabIndex = 2;
//
// TxtAgvMission1
//
this.TxtAgvMission1.Dock = System.Windows.Forms.DockStyle.Fill;
this.TxtAgvMission1.Font = new System.Drawing.Font("宋体", 12F);
this.TxtAgvMission1.Location = new System.Drawing.Point(572, 237);
this.TxtAgvMission1.Multiline = true;
this.TxtAgvMission1.Name = "TxtAgvMission1";
this.TxtAgvMission1.ReadOnly = true;
this.TxtAgvMission1.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.TxtAgvMission1.Size = new System.Drawing.Size(238, 228);
this.TxtAgvMission1.TabIndex = 12;
//
// LblStorageIO
//
this.LblStorageIO.BackColor = System.Drawing.Color.Red;
this.LblStorageIO.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.LblStorageIO.Location = new System.Drawing.Point(165, 9);
this.LblStorageIO.Margin = new System.Windows.Forms.Padding(3, 6, 6, 6);
this.LblStorageIO.Name = "LblStorageIO";
this.LblStorageIO.Size = new System.Drawing.Size(160, 30);
this.LblStorageIO.TabIndex = 9;
this.LblStorageIO.Tag = "0";
this.LblStorageIO.Text = "仓库IO信号 OFF (0)";
this.LblStorageIO.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// LblWeb
//
this.LblWeb.BackColor = System.Drawing.Color.Red;
this.LblWeb.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.LblWeb.Location = new System.Drawing.Point(9, 9);
this.LblWeb.Margin = new System.Windows.Forms.Padding(6, 6, 3, 6);
this.LblWeb.Name = "LblWeb";
this.LblWeb.Size = new System.Drawing.Size(150, 30);
this.LblWeb.TabIndex = 0;
this.LblWeb.Text = "WebService Close";
this.LblWeb.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// tabPage3
//
this.tabPage3.Controls.Add(this.ChkMissionDebug);
this.tabPage3.Controls.Add(this.ChkStorageIO);
this.tabPage3.Controls.Add(this.LblMissionHint);
this.tabPage3.Controls.Add(this.tableLayoutPanel1);
this.tabPage3.Location = new System.Drawing.Point(4, 26);
this.tabPage3.Name = "tabPage3";
this.tabPage3.Padding = new System.Windows.Forms.Padding(3);
this.tabPage3.Size = new System.Drawing.Size(819, 522);
this.tabPage3.TabIndex = 3;
this.tabPage3.Text = "钢网任务";
this.tabPage3.UseVisualStyleBackColor = true;
//
// ChkMissionDebug
//
this.ChkMissionDebug.Appearance = System.Windows.Forms.Appearance.Button;
this.ChkMissionDebug.BackColor = System.Drawing.Color.Red;
this.ChkMissionDebug.FlatAppearance.BorderColor = System.Drawing.Color.White;
this.ChkMissionDebug.FlatAppearance.BorderSize = 0;
this.ChkMissionDebug.FlatAppearance.CheckedBackColor = System.Drawing.Color.Lime;
this.ChkMissionDebug.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
this.ChkMissionDebug.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(255)))));
this.ChkMissionDebug.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.ChkMissionDebug.Location = new System.Drawing.Point(540, 6);
this.ChkMissionDebug.Name = "ChkMissionDebug";
this.ChkMissionDebug.Size = new System.Drawing.Size(130, 40);
this.ChkMissionDebug.TabIndex = 5;
this.ChkMissionDebug.Text = "调试功能";
this.ChkMissionDebug.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.ChkMissionDebug.UseVisualStyleBackColor = false;
this.ChkMissionDebug.CheckedChanged += new System.EventHandler(this.ChkMissionDebug_CheckedChanged);
//
// ChkStorageIO
//
this.ChkStorageIO.AutoSize = true;
this.ChkStorageIO.Enabled = false;
this.ChkStorageIO.Location = new System.Drawing.Point(542, 52);
this.ChkStorageIO.Name = "ChkStorageIO";
this.ChkStorageIO.Size = new System.Drawing.Size(171, 20);
this.ChkStorageIO.TabIndex = 4;
this.ChkStorageIO.Text = "仓库IO信号始终为ON";
this.ChkStorageIO.UseVisualStyleBackColor = true;
this.ChkStorageIO.CheckedChanged += new System.EventHandler(this.ChkStorageIO_CheckedChanged);
//
// LblMissionHint
//
this.LblMissionHint.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.LblMissionHint.Font = new System.Drawing.Font("宋体", 9F);
this.LblMissionHint.Location = new System.Drawing.Point(540, 451);
this.LblMissionHint.Margin = new System.Windows.Forms.Padding(3);
this.LblMissionHint.Name = "LblMissionHint";
this.LblMissionHint.Size = new System.Drawing.Size(273, 65);
this.LblMissionHint.TabIndex = 3;
this.LblMissionHint.Text = "label4";
this.LblMissionHint.TextAlign = System.Drawing.ContentAlignment.BottomLeft;
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.tableLayoutPanel1.ColumnCount = 2;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 400F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 128F));
this.tableLayoutPanel1.Controls.Add(this.LstStorage, 0, 5);
this.tableLayoutPanel1.Controls.Add(this.LstOldSteel, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.LstNewSteel, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 1, 1);
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel3, 1, 3);
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel4, 1, 5);
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.label2, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.label3, 0, 4);
this.tableLayoutPanel1.Font = new System.Drawing.Font("宋体", 12F);
this.tableLayoutPanel1.Location = new System.Drawing.Point(6, 6);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 6;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(528, 510);
this.tableLayoutPanel1.TabIndex = 2;
//
// LstStorage
//
this.LstStorage.Dock = System.Windows.Forms.DockStyle.Fill;
this.LstStorage.FormattingEnabled = true;
this.LstStorage.IntegralHeight = false;
this.LstStorage.ItemHeight = 16;
this.LstStorage.Location = new System.Drawing.Point(3, 373);
this.LstStorage.Name = "LstStorage";
this.LstStorage.Size = new System.Drawing.Size(394, 134);
this.LstStorage.TabIndex = 5;
//
// LstOldSteel
//
this.LstOldSteel.Dock = System.Windows.Forms.DockStyle.Fill;
this.LstOldSteel.FormattingEnabled = true;
this.LstOldSteel.IntegralHeight = false;
this.LstOldSteel.ItemHeight = 16;
this.LstOldSteel.Location = new System.Drawing.Point(3, 33);
this.LstOldSteel.Name = "LstOldSteel";
this.LstOldSteel.Size = new System.Drawing.Size(394, 134);
this.LstOldSteel.TabIndex = 3;
//
// LstNewSteel
//
this.LstNewSteel.Dock = System.Windows.Forms.DockStyle.Fill;
this.LstNewSteel.FormattingEnabled = true;
this.LstNewSteel.IntegralHeight = false;
this.LstNewSteel.ItemHeight = 16;
this.LstNewSteel.Location = new System.Drawing.Point(3, 203);
this.LstNewSteel.Name = "LstNewSteel";
this.LstNewSteel.Size = new System.Drawing.Size(394, 134);
this.LstNewSteel.TabIndex = 4;
//
// tableLayoutPanel2
//
this.tableLayoutPanel2.ColumnCount = 1;
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel2.Controls.Add(this.BtnOldSteelWorkDelAll, 0, 2);
this.tableLayoutPanel2.Controls.Add(this.BtnOldSteelWorkDel, 0, 1);
this.tableLayoutPanel2.Controls.Add(this.BtnOldSteelWorkAdd, 0, 0);
this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel2.Location = new System.Drawing.Point(403, 33);
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
this.tableLayoutPanel2.RowCount = 3;
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel2.Size = new System.Drawing.Size(122, 134);
this.tableLayoutPanel2.TabIndex = 3;
//
// BtnOldSteelWorkDelAll
//
this.BtnOldSteelWorkDelAll.Dock = System.Windows.Forms.DockStyle.Fill;
this.BtnOldSteelWorkDelAll.Enabled = false;
this.BtnOldSteelWorkDelAll.Font = new System.Drawing.Font("宋体", 12F);
this.BtnOldSteelWorkDelAll.Location = new System.Drawing.Point(3, 91);
this.BtnOldSteelWorkDelAll.Name = "BtnOldSteelWorkDelAll";
this.BtnOldSteelWorkDelAll.Size = new System.Drawing.Size(116, 40);
this.BtnOldSteelWorkDelAll.TabIndex = 17;
this.BtnOldSteelWorkDelAll.Text = "全部删除";
this.BtnOldSteelWorkDelAll.UseVisualStyleBackColor = true;
this.BtnOldSteelWorkDelAll.Click += new System.EventHandler(this.BtnOldSteelWorkDelAll_Click);
//
// BtnOldSteelWorkDel
//
this.BtnOldSteelWorkDel.Dock = System.Windows.Forms.DockStyle.Fill;
this.BtnOldSteelWorkDel.Enabled = false;
this.BtnOldSteelWorkDel.Font = new System.Drawing.Font("宋体", 12F);
this.BtnOldSteelWorkDel.Location = new System.Drawing.Point(3, 47);
this.BtnOldSteelWorkDel.Name = "BtnOldSteelWorkDel";
this.BtnOldSteelWorkDel.Size = new System.Drawing.Size(116, 38);
this.BtnOldSteelWorkDel.TabIndex = 16;
this.BtnOldSteelWorkDel.Text = "删除任务";
this.BtnOldSteelWorkDel.UseVisualStyleBackColor = true;
this.BtnOldSteelWorkDel.Click += new System.EventHandler(this.BtnOldSteelWorkDel_Click);
//
// BtnOldSteelWorkAdd
//
this.BtnOldSteelWorkAdd.Dock = System.Windows.Forms.DockStyle.Fill;
this.BtnOldSteelWorkAdd.Enabled = false;
this.BtnOldSteelWorkAdd.Font = new System.Drawing.Font("宋体", 12F);
this.BtnOldSteelWorkAdd.Location = new System.Drawing.Point(3, 3);
this.BtnOldSteelWorkAdd.Name = "BtnOldSteelWorkAdd";
this.BtnOldSteelWorkAdd.Size = new System.Drawing.Size(116, 38);
this.BtnOldSteelWorkAdd.TabIndex = 15;
this.BtnOldSteelWorkAdd.Text = "添加任务";
this.BtnOldSteelWorkAdd.UseVisualStyleBackColor = true;
this.BtnOldSteelWorkAdd.Click += new System.EventHandler(this.BtnOldSteelWorkAdd_Click);
//
// tableLayoutPanel3
//
this.tableLayoutPanel3.ColumnCount = 1;
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel3.Controls.Add(this.BtnNewSteelWorkDelAll, 0, 2);
this.tableLayoutPanel3.Controls.Add(this.BtnNewSteelWorkDel, 0, 1);
this.tableLayoutPanel3.Controls.Add(this.BtnNewSteelWorkAdd, 0, 0);
this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel3.Location = new System.Drawing.Point(403, 203);
this.tableLayoutPanel3.Name = "tableLayoutPanel3";
this.tableLayoutPanel3.RowCount = 3;
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel3.Size = new System.Drawing.Size(122, 134);
this.tableLayoutPanel3.TabIndex = 4;
//
// BtnNewSteelWorkDelAll
//
this.BtnNewSteelWorkDelAll.Dock = System.Windows.Forms.DockStyle.Fill;
this.BtnNewSteelWorkDelAll.Enabled = false;
this.BtnNewSteelWorkDelAll.Font = new System.Drawing.Font("宋体", 12F);
this.BtnNewSteelWorkDelAll.Location = new System.Drawing.Point(3, 91);
this.BtnNewSteelWorkDelAll.Name = "BtnNewSteelWorkDelAll";
this.BtnNewSteelWorkDelAll.Size = new System.Drawing.Size(116, 40);
this.BtnNewSteelWorkDelAll.TabIndex = 17;
this.BtnNewSteelWorkDelAll.Text = "全部删除";
this.BtnNewSteelWorkDelAll.UseVisualStyleBackColor = true;
this.BtnNewSteelWorkDelAll.Click += new System.EventHandler(this.BtnNewSteelWorkDelAll_Click);
//
// BtnNewSteelWorkDel
//
this.BtnNewSteelWorkDel.Dock = System.Windows.Forms.DockStyle.Fill;
this.BtnNewSteelWorkDel.Enabled = false;
this.BtnNewSteelWorkDel.Font = new System.Drawing.Font("宋体", 12F);
this.BtnNewSteelWorkDel.Location = new System.Drawing.Point(3, 47);
this.BtnNewSteelWorkDel.Name = "BtnNewSteelWorkDel";
this.BtnNewSteelWorkDel.Size = new System.Drawing.Size(116, 38);
this.BtnNewSteelWorkDel.TabIndex = 16;
this.BtnNewSteelWorkDel.Text = "删除任务";
this.BtnNewSteelWorkDel.UseVisualStyleBackColor = true;
this.BtnNewSteelWorkDel.Click += new System.EventHandler(this.BtnNewSteelWorkDel_Click);
//
// BtnNewSteelWorkAdd
//
this.BtnNewSteelWorkAdd.Dock = System.Windows.Forms.DockStyle.Fill;
this.BtnNewSteelWorkAdd.Enabled = false;
this.BtnNewSteelWorkAdd.Font = new System.Drawing.Font("宋体", 12F);
this.BtnNewSteelWorkAdd.Location = new System.Drawing.Point(3, 3);
this.BtnNewSteelWorkAdd.Name = "BtnNewSteelWorkAdd";
this.BtnNewSteelWorkAdd.Size = new System.Drawing.Size(116, 38);
this.BtnNewSteelWorkAdd.TabIndex = 15;
this.BtnNewSteelWorkAdd.Text = "添加任务";
this.BtnNewSteelWorkAdd.UseVisualStyleBackColor = true;
this.BtnNewSteelWorkAdd.Click += new System.EventHandler(this.BtnNewSteelWorkAdd_Click);
//
// tableLayoutPanel4
//
this.tableLayoutPanel4.ColumnCount = 1;
this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel4.Controls.Add(this.BtnStorageWorkDelAll, 0, 2);
this.tableLayoutPanel4.Controls.Add(this.BtnStorageWorkDel, 0, 1);
this.tableLayoutPanel4.Controls.Add(this.BtnStorageWorkAdd, 0, 0);
this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel4.Location = new System.Drawing.Point(403, 373);
this.tableLayoutPanel4.Name = "tableLayoutPanel4";
this.tableLayoutPanel4.RowCount = 3;
this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel4.Size = new System.Drawing.Size(122, 134);
this.tableLayoutPanel4.TabIndex = 5;
//
// BtnStorageWorkDelAll
//
this.BtnStorageWorkDelAll.Dock = System.Windows.Forms.DockStyle.Fill;
this.BtnStorageWorkDelAll.Enabled = false;
this.BtnStorageWorkDelAll.Font = new System.Drawing.Font("宋体", 12F);
this.BtnStorageWorkDelAll.Location = new System.Drawing.Point(3, 91);
this.BtnStorageWorkDelAll.Name = "BtnStorageWorkDelAll";
this.BtnStorageWorkDelAll.Size = new System.Drawing.Size(116, 40);
this.BtnStorageWorkDelAll.TabIndex = 17;
this.BtnStorageWorkDelAll.Text = "全部删除";
this.BtnStorageWorkDelAll.UseVisualStyleBackColor = true;
this.BtnStorageWorkDelAll.Click += new System.EventHandler(this.BtnStorageWorkDelAll_Click);
//
// BtnStorageWorkDel
//
this.BtnStorageWorkDel.Dock = System.Windows.Forms.DockStyle.Fill;
this.BtnStorageWorkDel.Enabled = false;
this.BtnStorageWorkDel.Font = new System.Drawing.Font("宋体", 12F);
this.BtnStorageWorkDel.Location = new System.Drawing.Point(3, 47);
this.BtnStorageWorkDel.Name = "BtnStorageWorkDel";
this.BtnStorageWorkDel.Size = new System.Drawing.Size(116, 38);
this.BtnStorageWorkDel.TabIndex = 16;
this.BtnStorageWorkDel.Text = "删除任务";
this.BtnStorageWorkDel.UseVisualStyleBackColor = true;
this.BtnStorageWorkDel.Click += new System.EventHandler(this.BtnStorageWorkDel_Click);
//
// BtnStorageWorkAdd
//
this.BtnStorageWorkAdd.Dock = System.Windows.Forms.DockStyle.Fill;
this.BtnStorageWorkAdd.Enabled = false;
this.BtnStorageWorkAdd.Font = new System.Drawing.Font("宋体", 12F);
this.BtnStorageWorkAdd.Location = new System.Drawing.Point(3, 3);
this.BtnStorageWorkAdd.Name = "BtnStorageWorkAdd";
this.BtnStorageWorkAdd.Size = new System.Drawing.Size(116, 38);
this.BtnStorageWorkAdd.TabIndex = 15;
this.BtnStorageWorkAdd.Text = "添加任务";
this.BtnStorageWorkAdd.UseVisualStyleBackColor = true;
this.BtnStorageWorkAdd.Click += new System.EventHandler(this.BtnStorageWorkAdd_Click);
//
// label1
//
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.Location = new System.Drawing.Point(3, 3);
this.label1.Margin = new System.Windows.Forms.Padding(3);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(394, 24);
this.label1.TabIndex = 10;
this.label1.Text = "回收钢板任务";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label2
//
this.label2.Dock = System.Windows.Forms.DockStyle.Fill;
this.label2.Location = new System.Drawing.Point(3, 173);
this.label2.Margin = new System.Windows.Forms.Padding(3);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(394, 24);
this.label2.TabIndex = 12;
this.label2.Text = "送新钢板任务";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label3
//
this.label3.Dock = System.Windows.Forms.DockStyle.Fill;
this.label3.Location = new System.Drawing.Point(3, 343);
this.label3.Margin = new System.Windows.Forms.Padding(3);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(394, 24);
this.label3.TabIndex = 14;
this.label3.Text = "仓库出入库任务";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// tabPage1
//
this.tabPage1.Controls.Add(this.BtnMissionPause);
this.tabPage1.Controls.Add(this.BtnMissionRun);
this.tabPage1.Controls.Add(this.BtnMissionClear);
this.tabPage1.Controls.Add(this.BtnMissionAdd);
this.tabPage1.Controls.Add(this.LstMission);
this.tabPage1.Location = new System.Drawing.Point(4, 26);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
this.tabPage1.Size = new System.Drawing.Size(819, 522);
this.tabPage1.TabIndex = 2;
this.tabPage1.Text = "小车任务";
this.tabPage1.UseVisualStyleBackColor = true;
//
// BtnMissionPause
//
this.BtnMissionPause.Font = new System.Drawing.Font("宋体", 12F);
this.BtnMissionPause.Location = new System.Drawing.Point(232, 204);
this.BtnMissionPause.Name = "BtnMissionPause";
this.BtnMissionPause.Size = new System.Drawing.Size(120, 60);
this.BtnMissionPause.TabIndex = 16;
this.BtnMissionPause.Text = "暂停";
this.BtnMissionPause.UseVisualStyleBackColor = true;
this.BtnMissionPause.Click += new System.EventHandler(this.BtnMissionPause_Click);
//
// BtnMissionRun
//
this.BtnMissionRun.Font = new System.Drawing.Font("宋体", 12F);
this.BtnMissionRun.Location = new System.Drawing.Point(232, 138);
this.BtnMissionRun.Name = "BtnMissionRun";
this.BtnMissionRun.Size = new System.Drawing.Size(120, 60);
this.BtnMissionRun.TabIndex = 15;
this.BtnMissionRun.Text = "运行";
this.BtnMissionRun.UseVisualStyleBackColor = true;
this.BtnMissionRun.Click += new System.EventHandler(this.BtnMissionRun_Click);
//
// BtnMissionClear
//
this.BtnMissionClear.Font = new System.Drawing.Font("宋体", 12F);
this.BtnMissionClear.Location = new System.Drawing.Point(232, 72);
this.BtnMissionClear.Name = "BtnMissionClear";
this.BtnMissionClear.Size = new System.Drawing.Size(120, 60);
this.BtnMissionClear.TabIndex = 14;
this.BtnMissionClear.Text = "删除任务";
this.BtnMissionClear.UseVisualStyleBackColor = true;
this.BtnMissionClear.Click += new System.EventHandler(this.BtnMissionClear_Click);
//
// BtnMissionAdd
//
this.BtnMissionAdd.Font = new System.Drawing.Font("宋体", 12F);
this.BtnMissionAdd.Location = new System.Drawing.Point(232, 6);
this.BtnMissionAdd.Name = "BtnMissionAdd";
this.BtnMissionAdd.Size = new System.Drawing.Size(120, 60);
this.BtnMissionAdd.TabIndex = 13;
this.BtnMissionAdd.Text = "添加任务";
this.BtnMissionAdd.UseVisualStyleBackColor = true;
this.BtnMissionAdd.Click += new System.EventHandler(this.BtnMissionAdd_Click);
//
// LstMission
//
this.LstMission.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.LstMission.Font = new System.Drawing.Font("宋体", 12F);
this.LstMission.FormattingEnabled = true;
this.LstMission.IntegralHeight = false;
this.LstMission.ItemHeight = 16;
this.LstMission.Location = new System.Drawing.Point(6, 6);
this.LstMission.Name = "LstMission";
this.LstMission.Size = new System.Drawing.Size(220, 510);
this.LstMission.TabIndex = 12;
//
// BtnClearLog
//
this.BtnClearLog.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.BtnClearLog.Location = new System.Drawing.Point(457, 6);
this.BtnClearLog.Name = "BtnClearLog";
this.BtnClearLog.Size = new System.Drawing.Size(116, 36);
this.BtnClearLog.TabIndex = 11;
this.BtnClearLog.Text = "清空日志";
this.BtnClearLog.UseVisualStyleBackColor = true;
this.BtnClearLog.Click += new System.EventHandler(this.BtnClearLog_Click);
//
// FrmMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(857, 670);
this.Controls.Add(this.tabControl1);
this.Controls.Add(this.DgvName);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FrmMain";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "钢网AGV调度";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmMain_FormClosing);
this.Load += new System.EventHandler(this.FrmMain_Load);
((System.ComponentModel.ISupportInitialize)(this.DgvName)).EndInit();
this.tabControl1.ResumeLayout(false);
this.tabPage2.ResumeLayout(false);
this.tableLayoutPanel5.ResumeLayout(false);
this.tableLayoutPanel5.PerformLayout();
this.tabPage3.ResumeLayout(false);
this.tabPage3.PerformLayout();
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel2.ResumeLayout(false);
this.tableLayoutPanel3.ResumeLayout(false);
this.tableLayoutPanel4.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.DataGridView DgvName;
private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.TabPage tabPage2;
private System.Windows.Forms.Label LblWeb;
private System.Windows.Forms.TextBox TxtLog;
private System.Windows.Forms.Label LblStorageIO;
private System.Windows.Forms.TabPage tabPage1;
private System.Windows.Forms.TabPage tabPage3;
private System.Windows.Forms.Button BtnMissionPause;
private System.Windows.Forms.Button BtnMissionRun;
private System.Windows.Forms.Button BtnMissionClear;
private System.Windows.Forms.Button BtnMissionAdd;
private System.Windows.Forms.ListBox LstMission;
private System.Windows.Forms.Button BtnOldSteelWorkDel;
private System.Windows.Forms.Button BtnOldSteelWorkAdd;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5;
private System.Windows.Forms.TextBox TxtAgvMission0;
private System.Windows.Forms.TextBox TxtAgvMission1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
private System.Windows.Forms.Button BtnOldSteelWorkDelAll;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
private System.Windows.Forms.Button BtnNewSteelWorkDelAll;
private System.Windows.Forms.Button BtnNewSteelWorkDel;
private System.Windows.Forms.Button BtnNewSteelWorkAdd;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4;
private System.Windows.Forms.Button BtnStorageWorkDelAll;
private System.Windows.Forms.Button BtnStorageWorkDel;
private System.Windows.Forms.Button BtnStorageWorkAdd;
private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
private System.Windows.Forms.DataGridViewTextBoxColumn Column5;
private System.Windows.Forms.DataGridViewTextBoxColumn Column3;
private System.Windows.Forms.DataGridViewTextBoxColumn Column7;
private System.Windows.Forms.DataGridViewButtonColumn Column4;
private System.Windows.Forms.DataGridViewButtonColumn Column8;
private System.Windows.Forms.ListBox LstOldSteel;
private System.Windows.Forms.ListBox LstStorage;
private System.Windows.Forms.ListBox LstNewSteel;
private System.Windows.Forms.Label LblMissionHint;
private System.Windows.Forms.CheckBox ChkMissionDebug;
private System.Windows.Forms.CheckBox ChkStorageIO;
private System.Windows.Forms.Button BtnClearLog;
}
}
using Model;
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 AGVControl_Steel
{
public partial class FrmMain : Form
{
//private Webs.WebService webService;
private BLL.Control control;
public FrmMain()
{
InitializeComponent();
control = new BLL.Control();
}
private void Control_AgvChanged(int agvIndex)
{
Invoke(new Action(() =>
{
DgvName.Rows[agvIndex].SetValues(Common.agvInfos[agvIndex].ToGridRow());
tableLayoutPanel5.Controls["TxtAgvMission" + agvIndex].Text = Common.agvInfos[agvIndex].ToMissionState();
}));
}
private void Control_AgvOnline(int agvIndex)
{
Invoke(new Action(() =>
{
DgvName.Rows[agvIndex].DefaultCellStyle.ForeColor = Common.agvInfos[agvIndex].IsOnline ? Color.Black : Color.Red;
DgvName.Rows[agvIndex].SetValues(Common.agvInfos[agvIndex].ToGridRow());
tableLayoutPanel5.Controls["TxtAgvMission" + agvIndex].Text = Common.agvInfos[agvIndex].ToMissionState();
}));
}
private void FrmMain_Load(object sender, EventArgs e)
{
Common.log.LogBox = TxtLog;
Common.lstOldSteel = LstOldSteel;
Common.lstNewSteel = LstNewSteel;
Common.lstStorage = LstStorage;
Common.lblStorageIO = LblStorageIO;
BLL.SteelManage.OldSteelWorkLoad();
BLL.SteelManage.NewSteelWorkLoad();
BLL.SteelManage.StorageWorkLoad();
BLL.RunMode.Init(this);
BLL.WebService.Open(Common.appConfig.AppSettings.Settings["WebService"].Value);
LblWeb.BackColor = BLL.WebService.IsOpen ? Color.Lime : Color.Red;
LblWeb.Text = BLL.WebService.IsOpen ? "WebService Open" : "WebService Close";
LstMission.Items.AddRange(Common.agvMissions.Keys.ToArray());
List<string> missionHint = new List<string>();
for (int i = 0; i < Common.agvLines.Count; i++)
missionHint.AddRange(Common.agvLines[i].Lines);
missionHint.Add(Common.STORAGE_ENTER_4C);
missionHint.Add(Common.STORAGE_ENTER_4D);
missionHint.Add(Common.STORAGE_LEAVE);
LblMissionHint.Text = "提示:" + string.Join(",", missionHint);
for (int i = 0; i < Common.agvInfos.Count; i++)
{
DgvName.Rows.Add(Common.agvInfos[i].ToGridRow());
DgvName.Rows[i].DefaultCellStyle.ForeColor = Color.Red;
DgvName.Rows[i].HeaderCell.Value = (i + 1).ToString();
DgvName.Rows[i].Height = 30;
}
control.AgvChanged += Control_AgvChanged;
control.AgvOnline += Control_AgvOnline;
control.Start();
}
private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (BLL.RunMode.Closing(e))
{
control.Stop();
BLL.WebService.Close();
}
}
private void DgvName_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex == -1) return;
AgvInfo info = Common.agvInfos[e.RowIndex];
if (e.ColumnIndex == DgvName.Columns.Count - 2) //最后二列,自动/手动
{
info.IsAuto = !info.IsAuto;
DgvName.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = info.IsAuto.ToString();
Common.appConfig.AppSettings.Settings[info.Name].Value = info.IsAuto.ToString();
Common.appConfig.Save();
System.Configuration.ConfigurationManager.RefreshSection("appSettings");
Common.log.Info("手动修改 " + info.Name + " IsUse=" + info.IsAuto);
}
else if (e.ColumnIndex == DgvName.Columns.Count - 1) //最后一列,清除任务
{
string text = "确定要清除 " + info.Name + " 的任务吗?";
DialogResult dr = MessageBox.Show(text, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (dr == DialogResult.Yes)
{
info.CurrentJob = null;
Common.mir.Del_Mission(info.IP, info.Authorization);
info.IsAuto = false;
info.Place = "";
DgvName.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Value = info.IsAuto.ToString();
Common.appConfig.AppSettings.Settings[info.Name].Value = info.IsAuto.ToString();
Common.appConfig.Save();
System.Configuration.ConfigurationManager.RefreshSection("appSettings");
}
}
}
#region 手动添加小车任务
private void BtnMissionAdd_Click(object sender, EventArgs e)
{
if (DgvName.SelectedCells.Count == 0) return;
int idx = DgvName.SelectedCells[0].RowIndex;
if (idx < 0) return;
AgvInfo info = Common.agvInfos[idx];
if (info.IsAuto)
{
MessageBox.Show(info.Name + " 自动状态,不允许手动发送任务");
return;
}
if (LstMission.SelectedIndex == -1) return;
if (Common.FLEET_SEND)
Common.mir.Add_Mission_Fleet(info.FleetID, info.Authorization, LstMission.Text, out string id);
else
Common.mir.Add_Mission(info.IP, info.Authorization, LstMission.Text, out string id);
}
private void BtnMissionClear_Click(object sender, EventArgs e)
{
if (DgvName.SelectedCells.Count == 0) return;
int idx = DgvName.SelectedCells[0].RowIndex;
if (idx < 0) return;
AgvInfo info = Common.agvInfos[DgvName.SelectedRows[0].Index];
Common.mir.Del_Mission(info.IP, info.Authorization);
}
private void BtnMissionRun_Click(object sender, EventArgs e)
{
if (DgvName.SelectedCells.Count == 0) return;
int idx = DgvName.SelectedCells[0].RowIndex;
if (idx < 0) return;
AgvInfo info = Common.agvInfos[idx];
Common.mir.State_Ready(info.IP, info.Authorization);
}
private void BtnMissionPause_Click(object sender, EventArgs e)
{
if (DgvName.SelectedCells.Count == 0) return;
int idx = DgvName.SelectedCells[0].RowIndex;
if (idx < 0) return;
AgvInfo info = Common.agvInfos[idx];
Common.mir.State_Pause(info.IP, info.Authorization);
}
#endregion
#region 手动修改钢网任务
private void BtnOldSteelWorkAdd_Click(object sender, EventArgs e)
{
string text = "手动添加回收钢板任务";
string msg = Microsoft.VisualBasic.Interaction.InputBox(text, "添加", "");
if (string.IsNullOrWhiteSpace(msg)) return;
Common.log.Info(text + " " + msg);
BLL.SteelManage.OldSteelWorkAdd(msg);
}
private void BtnOldSteelWorkDel_Click(object sender, EventArgs e)
{
if (LstOldSteel.SelectedIndex == -1) return;
string[] arr = LstOldSteel.Text.Split(',');
string text = "手动删除【" + arr[0] + "】回收钢板任务";
DialogResult dr = MessageBox.Show(text, "删除", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (dr == DialogResult.Yes)
{
Common.log.Info(text);
BLL.SteelManage.OldSteelWorkDel(arr[0]);
}
}
private void BtnOldSteelWorkDelAll_Click(object sender, EventArgs e)
{
string text = "手动删除全部回收钢板任务";
DialogResult dr = MessageBox.Show(text, "删除", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (dr == DialogResult.Yes)
{
Common.log.Info(text);
BLL.SteelManage.OldSteelWorkDelAll();
}
}
private void BtnNewSteelWorkAdd_Click(object sender, EventArgs e)
{
string text = "手动添加送新钢板任务,from&place逗号分割";
string msg = Microsoft.VisualBasic.Interaction.InputBox(text, "添加", "");
if (string.IsNullOrWhiteSpace(msg)) return;
string[] arr = msg.Split(',');
Common.log.Info(text + " " + msg);
BLL.SteelManage.NewSteelWorkAdd(arr[0], arr[1]);
}
private void BtnNewSteelWorkDel_Click(object sender, EventArgs e)
{
if (LstNewSteel.SelectedIndex == -1) return;
string[] arr = LstNewSteel.Text.Split(',');
string text = "手动删除【" + arr[0] + "," + arr[1] + "】送新钢板任务";
DialogResult dr = MessageBox.Show(text, "删除", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (dr == DialogResult.Yes)
{
Common.log.Info(text);
BLL.SteelManage.NewSteelWorkDel(arr[0], arr[1]);
}
}
private void BtnNewSteelWorkDelAll_Click(object sender, EventArgs e)
{
string text = "手动删除全部送新钢板任务";
DialogResult dr = MessageBox.Show(text, "删除", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (dr == DialogResult.Yes)
{
Common.log.Info(text);
BLL.SteelManage.NewSteelWorkDelAll();
}
}
private void BtnStorageWorkAdd_Click(object sender, EventArgs e)
{
string text = "手动添加仓库钢板任务";
string msg = Microsoft.VisualBasic.Interaction.InputBox(text, "添加", "");
if (string.IsNullOrWhiteSpace(msg)) return;
Common.log.Info(text + " " + msg);
BLL.SteelManage.StorageWorkAdd(msg);
}
private void BtnStorageWorkDel_Click(object sender, EventArgs e)
{
if (LstStorage.SelectedIndex == -1) return;
string[] arr = LstStorage.Text.Split(',');
string text = "手动删除【" + arr[0] + "】仓库钢板任务";
DialogResult dr = MessageBox.Show(text, "删除", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (dr == DialogResult.Yes)
{
Common.log.Info(text);
BLL.SteelManage.StorageWorkDel(arr[0]);
}
}
private void BtnStorageWorkDelAll_Click(object sender, EventArgs e)
{
string text = "手动删除全部仓库钢板任务";
DialogResult dr = MessageBox.Show(text, "删除", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (dr == DialogResult.Yes)
{
Common.log.Info(text);
BLL.SteelManage.StorageWorkDelAll();
}
}
private void ChkMissionDebug_CheckedChanged(object sender, EventArgs e)
{
BtnOldSteelWorkAdd.Enabled = ChkMissionDebug.Checked;
BtnOldSteelWorkDel.Enabled = ChkMissionDebug.Checked;
BtnOldSteelWorkDelAll.Enabled = ChkMissionDebug.Checked;
BtnNewSteelWorkAdd.Enabled = ChkMissionDebug.Checked;
BtnNewSteelWorkDel.Enabled = ChkMissionDebug.Checked;
BtnNewSteelWorkDelAll.Enabled = ChkMissionDebug.Checked;
BtnStorageWorkAdd.Enabled = ChkMissionDebug.Checked;
BtnStorageWorkDel.Enabled = ChkMissionDebug.Checked;
BtnStorageWorkDelAll.Enabled = ChkMissionDebug.Checked;
ChkStorageIO.Enabled = ChkMissionDebug.Checked;
}
private void ChkStorageIO_CheckedChanged(object sender, EventArgs e)
{
Common.StorageDockAlway = ChkStorageIO.Checked;
}
#endregion
private void BtnClearLog_Click(object sender, EventArgs e)
{
TxtLog.Text = "";
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="Column1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column5.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column7.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column4.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column8.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAgGkAAAEAIAC42AAAFgAAACgAAACAAAAA0gAAAAEAIAAAAAAAANIAAGEPAABhDwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAZAAAAKAAAADYAAAA5AAAAOQAAADkAAAA5AAAAOgAA
ADgAAAAeAAAAAAAAAQAAAAAAAAABAAAAAAEAAAAiAAAAOQAAADkAAAA5AAAAOQAAADkAAAA5AAAAOQAA
ADkAAAA5AAAAOQAAADkAAAA5AAAAOQAAADkAAAA5AAAAOQAAADkAAAA5AAAAOQAAADkAAAA5AAAAOQAA
ADkAAAA5AAAAOQAAADkAAAA5AAAAOQAAADkAAAA5AAAAOQAAADkAAAA5AAAAOQAAADkAAAA5AAAAOQAA
ADkAAAA5AAAAOQAAADkAAAA5AAAAOQAAADkAAAA5AAAAOQAAADkAAAA5AAAAOQAAADkAAAA5AAAAOAAA
AC8AAAAgAAAADwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAADsAAAB+AAAAtQAA
ANgAAADnAAAA8AAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAANcAAABEIiqZADZD8wAkLaMAAAAAUwAA
AN0AAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAA
APIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAA
APIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA8gAA
APIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADxAAAA6wAAAOEAAADIAAAAmwAAAFsAAAAdAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAACAAAAFAAAAC0AAAA8AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wwPN8Y2RPZ3NkP0eDVC73gKDCzPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAANgAAACFAAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAClAAAA9gAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAwv/ISmW/zdE9v82Q/T/NkP1/x4l
hv8BAgf/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAf8AAAL/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAADZAAAAZgAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAABLAAAA1wAAAP8AAAD/AAAA/wAAAP8CAgj/Cgwr/xMYWP8bIXn/HyaK/yAokf8gKJD/ICiQ/yAo
kP8gKJD/ICiR/ycxsv80Qe3/NkP1/zZD9P82Q/X/NEDq/yYvrP8gKJH/ICiQ/yAokP8gKJD/ICiQ/yAo
kP8gKJD/ICiQ/yAokP8gKJD/ICiQ/yAokP8gKJD/ICiQ/yAokP8gKJD/ICiQ/yAokP8gKJD/ICiQ/yAo
kP8gKJD/ICiQ/yAokP8gKJD/ICiQ/yAokP8gKJD/ICiQ/yAokP8gKJD/ICiQ/yAokP8gKJD/ICiQ/yAo
kP8gKJD/ICiQ/yAokP8hKJP/GiB1/wUGFv8AAAD/AAAA/wAAAP8AAAD/AAAA/xgPA/9DKQn/bEMP/4JQ
Ev+LVhP/fEoQ/2Q7Df88JAj/FQwD/wAAAP8AAAD/AAAA/wAAAP8AAAD5AAAAmgAAABcAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVwAAAOgAAAD/AAAA/wAAAP8DAwz/EhdU/yYv
q/8xPd//NkPy/zdE9/83RPj/N0T4/zdE+P83RPj/N0T4/zdE+P83RPj/N0T3/zZD9f82Q/T/NkP0/zZD
9P82Q/X/N0T4/zdE+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE
+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE
+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE+P83RPj/N0X6/zA82v8QFEj/AAAB/wAA
AP8AAAD/AAAA/y0cBv+GUhL/zH4c/+uRIP/1lyH/95gi//eYIv/0liH/640f/92DHf+9cBn/eUgQ/yYX
Bf8AAAD/AAAA/wAAAP8AAAD/AAAArgAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AEkAAADnAAAA/wAAAP8AAAD/Cw0x/yUvqf81Qe7/N0T4/zZD9f82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9v8yPuH/EBRK/wAAAP8AAAD/AAAA/w8JAv91SBD/2YYe//aYIf/2mCH/9JYh//OW
If/zliH/85Yh//OWIf/ylSH/644f/+iKHv/niR7/yXga/2c9Df8LBwH/AAAA/wAAAP8AAAD/AAAAqQAA
ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAA1QAAAP8AAAD/AAAA/xEWT/8vOtT/N0T4/zZD
9f82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/X/NkLy/xkfb/8AAAD/AAAA/wAA
AP8bEQT/omQW//KWIf/1lyH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/ylSH/6o0f/+WI
Hv/niR7/44ce/5FWE/8WDQP/AAAA/wAAAP8AAAD+AAAAgwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA
AKEAAAD/AAAA/wAAAP8RFU3/MT3f/zdE9/82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9f82RPb/NkP2/zZD
9f82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkT2/zRB7P8eJYj/AwMM/wAAAP8AAAD/Fg4D/6ppF//2mCH/85Yh//OWIf/zliH/85Yh//OW
If/1lyH/95gi//eZIv/3mCH/9Zch//OWIf/ylSH/6Isf/+WIHv/miB7/54ke/5pcFP8RCgL/AAAA/wAA
AP8AAADuAAAAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKAAAA8wAAAP8AAAD/Cg0u/y860v83RPf/NkP0/zZD
9P82Q/T/NkP0/zdE9/82QvL/Mj7i/y860/8wPNr/NEHs/zdE9/82Q/b/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zdE9/8wO9j/FRpf/wECBf8AAAD/AAAA/wYE
Af+QWRT/9Zch//OWIf/zliH/85Yh//OWIf/2mCH/7pMg/81/HP+rahf/o2UW/7FtGP/WhB3/8pYh//WX
If/vkiD/5oke/+WIHv/liB7/5oge/4BMEf8EAgH/AAAA/wAAAP8AAAC1AAAADAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA
AKwAAAD/AAAA/wIDCv8kLaX/N0T3/zZD9P82Q/T/NkP0/zZD9f81Qu//JzGx/xQZXP8KDS7/Bgcb/wgK
I/8PEkL/HiaJ/zE83P83RPb/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9f82Q/X/KTO5/wwPNv8AAAD/AAAA/wAAAP8AAAD/UTIL/+qRIP/0lyH/85Yh//OWIf/zliH/85Yh/7x0
Gf9VNQz/GQ8D/wUDAf8CAQD/CAUB/yIVBf9sQw//0oEc//WXIf/rjh//5Yge/+WIHv/miR7/2oId/0Up
Cf8AAAD/AAAA/wAAAPYAAABKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAA7AAAAP8AAAD/ERVM/zRB7P82Q/X/NkP0/zZD
9P82Q/b/Mj/k/xgebf8DAwz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/DA81/ykzuf82Q/b/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82RPb/NEHt/yAnj/8FBxj/AAAA/wAAAP8AAAD/AAAA/xAK
Av+4chn/9pgh//OWIf/zliH/85Yh//OWIf+ZXhX/GA8D/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8tHAb/uXMZ//KUIf/miR7/5Yge/+WIHv/oih7/pmMW/wsHAf8AAAD/AAAA/wAAAJ0AAAACAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AHMAAAD/AAAA/wEBBf8kLaP/N0T4/zZD9P82Q/T/NkP1/zRB7P8WHGX/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/CAki/ys1wf83RPf/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/N0T3/zA8
2v8WG2L/AQIG/wAAAP8AAAD/AAAA/wAAAP8AAAD/Si4K/+ySIP/0liH/85Yh//OWIf/2mCH/rmsY/xML
A/8AAAD/AAAA/wAAAP8BAQH/BgYG/wAAAP8AAAD/AAAA/wAAAP8rGwb/z4Ac/+uNH//liB7/5Yge/+aI
Hv/cgx3/PiUI/wAAAP8AAAD/AAAA2wAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAqgAAAP8AAAD/CAok/zA82f82Q/b/NkP0/zZD
9P83RPf/Iyud/wECBv8AAAD/AAAA/wgICP9ERET/cnJy/19fX/8eHh7/AAAA/wAAAP8AAAD/EBRI/zNA
6P82Q/X/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP1/zZD9v8pM7v/DRA5/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP+OWBP/95gi//OWIf/zliH/9Jch/+OMH/87JAj/AAAA/wAAAP8BAQH/QkJC/52dnf+4uLj/jIyM/yoq
Kv8AAAD/AAAA/wAAAP9oQQ7/648f/+WIHv/liB7/5Yge/+iKHv+ATBH/AAAA/wAAAP8AAAD7AAAAVgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ABEAAADOAAAA/wAAAP8RFUz/NULv/zZD9P82Q/T/NkP1/zNA6f8OET//AAAA/wAAAP8MDAz/kpKS//X1
9f///////v7+/87Ozv83Nzf/AAAA/wAAAP8CAgj/JzCu/zdE9/82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZE9v81Qe7/ICiS/wYH
Gv8AAAD/AAAA/wAAAP8ABAX/AAID/wAAAP8AAAD/DQgC/711Gv/2mCH/85Yh//OWIf/3mCH/rGoX/wcE
Af8AAAD/AAAA/1FRUf/q6ur/////////////////0NDQ/ysrK/8AAAD/AAAA/x8TBP/QgBz/6Ioe/+WI
Hv/liB7/6Ioe/7puGP8SCwL/AAAA/wAAAP8AAACdAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAN8AAAD/AAAA/xcdav82RPb/NkP0/zZD
9P83RPf/LDfI/wQFE/8AAAD/AAAA/2BgYP/8/Pz//////////////////////7q6uv8NDQ3/AAAA/wAA
AP8ZIHP/N0T2/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P83RPf/MTzc/xYcZf8CAgf/AAAA/wAAAP8AAAD/ARwm/wNOZ/8ABwr/AAAA/wAA
AP8gFAT/14Qd//WXIf/zliH/85Yh//aYIf96SxH/AAAA/wAAAP8NDQ3/wcHB////////////////////
////////kZGR/wAAAP8AAAD/BgMB/6ppF//sjh//5Yge/+WIHv/miB7/3IMd/z8lCP8AAAD/AAAA/wAA
ANkAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAsAAAA7AAAAP8AAAD/HCN+/zdE9/82Q/T/NkP0/zdE+P8oMbP/AgII/wAAAP8AAAD/oaGh////
////////////////////////6+vr/ysrK/8AAAD/AAAA/xMYV/82QvL/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/X/NkP2/yo0vf8NEDv/AAAA/wAA
AP8AAAD/AAAA/wI1Rv8GntD/BGWF/wAAAP8AAAD/AAAA/ycYBf/fih7/9Jch//OWIf/zliH/9Jch/2A7
Df8AAAD/AAAA/yQkJP/k5OT///////////////////////////+/v7//CQkJ/wAAAP8AAAD/ml8V//GS
IP/liB7/5Yge/+WIHv/oih7/fUoQ/wAAAP8AAAD/AAAA+gAAAFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAADrAAAA/wAAAP8cIn3/N0T3/zZD
9P82Q/T/N0T4/ygytP8CAgj/AAAA/wAAAP+enp7////////////////////////////p6en/KSkp/wAA
AP8AAAD/FBhZ/zZD8v82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkT2/zVB7v8hKZT/Bgcb/wAAAP8AAAD/AAAA/wAICv8DV3P/BrLr/we8+f8CNET/AAAA/wAA
AP8AAAD/JxgF/9+JHv/0lyH/85Yh//OWIf/1lyH/b0UP/wAAAP8AAAD/FhYW/9PT0///////////////
/////////////6enp/8DAwP/AAAA/wMCAP+iZBb/9JYh/+aJHv/liB7/5Yge/+iKHv+3bRj/EQoC/wAA
AP8AAAD/AAAAmQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAHwAAAN4AAAD/AAAA/xcdaP82Q/b/NkP0/zZD9P83RPf/LTjL/wUGFv8AAAD/AAAA/1ZW
Vv/4+Pj//////////////////////7Gxsf8LCwv/AAAA/wAAAP8aIXf/N0T3/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zdE9/8xPd3/Fxxn/wICCP8AAAD/AAAA/wAA
AP8BGCD/BHqh/we++/8HxP//BqDT/wESF/8AAAD/AAAA/wAAAP8eEwT/1YMd//WXIf/zliH/85Yh//eY
Iv+bYBX/AgEA/wAAAP8AAAD/eXl5//7+/v/////////////////w8PD/TExM/wAAAP8AAAD/EwwD/8Z6
G//1lyH/6Isf/+WIHv/liB7/5oge/9uCHf88JAj/AAAA/wAAAP8AAADWAAAAGgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAzAAAAP8AAAD/EBRJ/zVB
7v82Q/T/NkP0/zZD9f80Qev/DxNG/wAAAP8AAAD/CAgI/4GBgf/s7Oz///////r6+v/AwMD/Ly8v/wAA
AP8AAAD/AgML/ygxtP83RPf/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9f82RPb/KjW//w4RPf8AAAD/AAAA/wAAAP8AAAD/AjND/waZy/8Hw///B8H//wfE//8Edpz/AAEB/wAA
AP8AAAD/AAAA/wsHAv+6cxn/9pgh//OWIf/zliH/9Zch/9WDHf8kFgX/AAAA/wAAAP8NDQ3/e3t7/9bW
1v/n5+f/yMjI/1tbW/8DAwP/AAAA/wAAAP9LLgr/65Eg//SXIf/sjyD/5Yge/+WIHv/liB7/6Ioe/3lI
EP8AAAD/AAAA/wAAAPkAAABPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAMAAACmAAAA/wAAAP8HCSD/LzvW/zZE9v82Q/T/NkP0/zdE9/8lLab/AgMJ/wAA
AP8AAAD/BAQE/zU1Nf9hYWH/Tk5O/xQUFP8AAAD/AAAA/wAAAP8SFlL/NEHr/zZD9f82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/b/NULv/yIql/8GCB3/AAAA/wAAAP8AAAD/AAcJ/wNU
b/8GsOn/B8P//wfB//8Hwf//B7/9/wNGXP8AAAD/AAAA/wAAAP8AAAD/AAAA/4lUE//2mCH/85Yh//OW
If/zliH/9Jch/4hUEv8DAgD/AAAA/wAAAP8AAAD/GRkZ/ygoKP8RERH/AAAA/wAAAP8AAAD/EgsC/7Nv
GP/2mCH/85Yh//CTIP/miR7/5Yge/+WIHv/oih7/tGsY/w8JAv8AAAD/AAAA/wAAAJUAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0AAAD/AAAA/wEB
A/8iK5v/N0T4/zZD9P82Q/T/NkP1/zVC7/8ZH3L/AQEC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/Cg0v/y04y/83RPb/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/N0T3/zE9
3/8YHWr/AgIJ/wAAAP8AAAD/AAAA/wEXHv8EeJ//B736/wfC//8Hwf//B8H//wfC//8GreT/AR0n/wAA
AP8AAAD/AAAA/wAAAP8AAAD/SC0K/+ySIP/zliH/85Yh//OWIf/0lyH/6ZAg/2hADv8DAgD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/w4JAv+PWRP/8pUh//OWIf/zliH/8pUh/+iLH//liB7/5Yge/+aI
Hv/agR3/OSIH/wAAAP8AAAD/AAAA0wAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAOgAAAD/AAAA/w8TQ/8zQOj/NkP1/zZD9P82Q/T/NkP1/zRA
6v8cIn3/BAYU/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQED/w8TRP8sN8f/N0T2/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP1/zZE9v8rNcL/DhJA/wAAAP8AAAD/AAAA/wAAAP8CMUH/BpjJ/wfD
//8Hwv//B8H//wfB//8Hwf//B8T//wWItP8ABgf/AAAA/wEBAf8FCgT/AAAA/wAAAP8XDgP/yXwb//aY
If/zliH/85Yh//OWIf/0lyH/6ZAg/4dUEv8jFgX/AQEA/wAAAP8AAAD/AAAA/wUDAf8zHwf/pGUW//GV
If/0liH/85Yh//OWIf/zliH/7I8f/+WIHv/liB7/5Yge/+iKHv91Rg//AAAA/wAAAP8AAAD4AAAASwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAApgAA
AP8AAAD/AQIG/yIqmv83RPf/NkP0/zZD9P82Q/T/NkP1/zZD8/8qNb//GR5v/w0QO/8JDCv/Cw0w/xIX
U/8iK5v/Mj/k/zdE9v82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9v81QvD/Iiqa/wcI
H/8AAAD/AAAA/wAAAP8ABgj/A1Jt/wav5/8Hw///B8H//wfB//8Hwf//B8H//wfB//8Hwv//A1l2/wAA
AP8AAAD/Bg0G/yFIH/8CBAL/AAAA/wAAAP+OWBP/95gh//OWIf/zliH/85Yh//OWIf/0lyH/9Jch/9OD
Hf+YXhX/bEMP/1w5Df91SBD/pWYW/9+JHv/1mCH/85Yh//OWIf/zliH/85Yh//OWIf/wkyD/5oke/+WI
Hv/liB7/6Ioe/7FpF/8NCAL/AAAA/wAAAP8AAACRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAA8AAAAP8AAAD/CAom/y03yv83RPf/NkP0/zZD
9P82Q/T/NkP0/zdE9/82Q/X/NEDp/zI+4v8zP+T/NULx/zdE9/82Q/X/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P83RPf/Mj3g/xgebf8CAwr/AAAA/wAAAP8AAAD/ARYd/wR2nP8Hvfn/B8P//wfB
//8Hwf//B8H//wfB//8Hwf//B8L//we28f8CLDr/AAAA/wAAAP8SJhH/QIw9/woXCv8AAAD/AAAA/0su
Cv/tkiD/85Yh//OWIf/zliH/85Yh//OWIf/zliH/9Zch//eYIv/1lyH/85Yh//WYIf/3mCL/9Jch//OW
If/zliH/85Yh//OWIf/zliH/85Yh//KVIf/oix//5Yge/+WIHv/miB7/2YEc/zYgB/8AAAD/AAAA/wAA
ANEAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAQAAACVAAAA/wAAAP8AAAD/DhE+/y861f83RPf/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/X/NkP1/zZD
9f82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/X/N0T2/ys2xP8PEkL/AAAA/wAA
AP8AAAD/AAAA/wIvPv8Flsb/B8L//wfC//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hw///BpnK/wAN
Ef8AAAD/AAAA/yNNIv9PrUv/HD0a/wAAAP8AAAD/GQ8D/8x+HP/1lyH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh/+yP
H//liB7/5Yge/+WIHv/niR7/ckQP/wAAAP8AAAD/AAAA9wAAAEkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADLAAAA/wAAAP8AAAD/DhE+/y03
yv83RPf/NkP1/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP2/zVC8P8jK53/Bwkg/wAAAP8AAAD/AAAA/wAGB/8DUGr/Bq7m/wfD//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfE//8EbI//AAAA/wAAAP8CBAL/N3g0/1K0Tv8ybS//AQEB/wAA
AP8BAAD/kloU//eYIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/8JMg/+aJHv/liB7/5Yge/+iKHv+vaBf/DAcC/wAA
AP8AAAD/AAAAjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAD4AAADiAAAA/wAAAP8AAAD/CAol/yIqmf8zQOj/N0T4/zZE9v82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD
9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zZD9P82Q/T/NkP0/zdE9/8yPuH/GR9w/wIDCv8AAAD/AAAA/wAA
AP8BFBv/BHSZ/we8+f8Hw///B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B736/wI9
UP8AAAD/AAAA/wsYC/9HmkP/UbJN/0WWQf8JFAn/AAAA/wAAAP9PMQv/7pMg//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/ylSH/6Isf/+WIHv/liB7/5oke/9eAHP80Hwf/AAAA/wAAAP8AAADPAAAAFAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwAAADhAAAA/wAA
AP8AAAD/AQIG/w8SQ/8iKpr/LzrU/zVB7f82Q/X/N0T3/zdE+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE
+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE+P83RPj/N0T4/zdE
+P83RPf/LDbG/w8TRf8AAAD/AAAA/wAAAP8AAAD/Ai07/wWUxP8Hwv//B8L//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfD//8Gp9z/ARcf/wAAAP8AAAD/Gzwa/0+sS/9Qr0z/T6xL/xs6
Gf8AAAD/AAAA/xsRBP/PgBz/9Zch//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/sjx//5Yge/+WIHv/liB7/54ke/3BC
D/8AAAD/AAAA/wAAAPUAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0AAADKAAAA/wAAAP8AAAD/AAAA/wEBA/8HCB//DxNG/xcc
Z/8bInz/HCN//xwjf/8cI3//HCN//xwjf/8cI3//HCN//xwjf/8cI3//HCN//xwjf/8cI3//HCN//xwj
f/8cI3//HCN//xwjf/8cI3//HCN//xwjf/8cI3//HCOA/xogdf8ICiP/AAAA/wAAAP8AAAD/AAUH/wNO
Z/8GreT/B8P//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8T//wWA
qf8AAwT/AAAA/wAAAP8vaC3/UbJN/1CvTP9Rsk3/MWsu/wABAP8AAAD/AQEA/5ZcFP/3mCL/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh/++SIP/miR7/5Yge/+WIHv/oih7/rWYX/wsHAf8AAAD/AAAA/wAAAIoAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AB8AAACUAAAA7wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wETGv8EcZb/B7v4/wfD//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//A09p/wAAAP8AAAD/Bg4G/0GOPv9RsU3/UK9M/1Gx
Tf9ElED/CBMI/wAAAP8AAAD/UjML/++UIP/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/8pUh/+iLH//liB7/5Yge/+aJ
Hv/Wfxz/MR0G/wAAAP8AAAD/AAAAywAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAAAAAowAAAOcAAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CKzn/BZLB/wfC
//8Hwv//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8L//way
6/8BJDD/AAAA/wAAAP8ULBP/TKdJ/1CwTP9Qr0z/UK9M/06rSv8ZNxj/AAAA/wAAAP8dEgT/0YEc//WX
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/644f/+WIHv/liB7/5Yge/+eJHv9sQA7/AAAA/wAAAP8AAAD0AAAAQgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAEAAAALAAAAGoAAACjAAAAyAAAAN8AAADnAAAA5wAAAOcAAADnAAAA5wAA
AOcAAADnAAAA5wAAAOcAAADnAAAA5wAAAOcAAADnAAAA5wAAAOcAAADnAAAA5wAAAOUAAADpAAAA/QAA
AP8AAAD/AAAA/wAAAP8ABAb/A0xk/was4/8Hw///B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8HxP//BZHA/wAJDP8AAAD/AAAA/ydWJf9RsU3/UK9M/1Cv
TP9Qr0z/UbJN/y9oLf8AAAD/AAAA/wIBAP+ZXhX/95gi//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/vkiD/5oke/+WI
Hv/liB7/6Ioe/6plFv8KBgH/AAAA/wAAAP8AAACGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAIAAAAOAAAAHgAAACUAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAA
ACYAAAAmAAAAJgAAACYAAAAjAAAANwAAAKkAAAD9AAAA/wAAAP8AAAD/ARIY/wRvk/8Hu/f/B8P//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfD
//8EY4P/AAAA/wAAAP8DBwP/O4A4/1GyTf9Qr0z/UK9M/1CvTP9RsU3/Q5I//wgRB/8AAAD/AAAA/1U1
DP/wlCH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//KVIf/oix//5Yge/+WIHv/miR7/1H4c/y4bBv8AAAD/AAAA/wAA
AMgAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkAAACvAAAA/AAA
AP8AAAD/AAAA/wIqN/8Fkb//B8L//wfC//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B7r2/wI0Rf8AAAD/AAAA/w4eDf9Jn0X/ULBM/1Cv
TP9Qr0z/UK9M/1CvTP9Oqkr/GDUX/wAAAP8AAAD/HxME/9OCHf/1lyH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh/+uO
H//liB7/5Yge/+WIHv/miR7/aD4O/wAAAP8AAAD/AAAA8gAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAIAAABTAAAA2AAAAP8AAAD/AAAA/wAEBf8DSWH/Bqrh/wfD//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfD
//8GoNT/ARIX/wAAAP8AAAD/H0Qe/1CuTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1GyTf8uZiz/AAAA/wAA
AP8DAgD/nGAV//eYIv/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/75Ig/+WIHv/liB7/5Yge/+iKHv+mYxb/CAUB/wAA
AP8AAAD/AAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgQAAAPEAAAD/AAAA/wAA
AP8BERb/BG2Q/we69v8Hw///B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8T//wR3nf8AAQH/AAAA/wECAf8zcDH/UbJN/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UbFN/0KRP/8HEAf/AAAA/wAAAP9YNgz/8ZQh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/ylSH/6Isf/+WIHv/liB7/5oke/9N9HP8rGgb/AAAA/wAAAP8AAADGAAAADwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAKgAAAK8AAAD+AAAA/wAAAP8AAAD/ASg0/wWOvP8Hwv//B8L//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hv/3/A0Zd/wAAAP8AAAD/CBMI/0SVQf9RsU3/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/TqpK/xgz
Fv8AAAD/AAAA/yEUBP/VhB3/9Zch//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/rjh//5Yge/+WIHv/liB7/5oge/2U8
Df8AAAD/AAAA/wAAAPEAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAFAAAADVAAAA/wAAAP8AAAD/AAME/wNH
Xv8Gqd//B8P//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8L//wat5P8BHif/AAAA/wAAAP8YMxb/TqpK/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9RsU3/LWMr/wAAAP8AAAD/BAIA/59iFv/3mCL/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh/++SIP/liB7/5Yge/+WIHv/oih7/pGEV/wgEAf8AAAD/AAAA/wAAAIAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AA4AAAB+AAAA7wAAAP8AAAD/AAAA/wEQFf8Ea43/B7n1/wfD//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8HxP//BYm1/wAGB/8AAAD/AAAA/yteKf9RsU3/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Gx
Tf9Bjz7/Bw8G/wAAAP8AAAD/XDkN//GVIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/8pUh/+eKH//liB7/5Yge/+aJ
Hv/RfBv/KRkF/wAAAP8AAAD/AAAAwwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAArAAAAP0AAAD/AAAA/wAAAP8BJjL/BY26/wfB
//8Hwv//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfC//8DWnb/AAAA/wAAAP8FCgT/Poc7/1Gx
Tf9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/02pSf8WMRX/AAAA/wAAAP8kFgX/2IUd//WX
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/644f/+WIHv/liB7/5Yge/+WIHv9iOg3/AAAA/wAAAP8AAADwAAAAOQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAATQAA
ANMAAAD/AAAA/wAAAP8AAwT/A0Vb/wao3f8Hw///B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwv//B7bx/wIsOv8AAAD/AAAA/xEkEP9Lo0f/ULBM/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UbFN/yxhKv8AAAD/AAAA/wUDAf+jZRb/95gi//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/vkiD/5Yge/+WI
Hv/liB7/6Ioe/6FgFf8HBAH/AAAA/wAAAP8AAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAHsAAADuAAAA/wAAAP8AAAD/AQ8U/wRpiv8HufT/B8P//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfD//8Gmcr/AA0R/wAAAP8AAAD/I00h/1Cw
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9RsU3/QI09/wYNBv8AAAD/AAAA/2A7
Df/ylSH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//KVIf/nih7/5Yge/+WIHv/miR7/0Hsb/ycXBf8AAAD/AAAA/wAA
AL8AAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAACqAAAA/QAA
AP8AAAD/AAAA/wEkMP8Fi7f/B8H//wfC//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8T//wRtkP8AAAD/AAAA/wIEAv83eDT/UbJN/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9NqEn/FS4U/wAAAP8AAAD/JhcF/9mGHv/1lyH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh/+uO
H//liB7/5Yge/+WIHv/liB7/XzgM/wAAAP8AAAD/AAAA7gAAADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAA5AAAAzgAAAP8AAAD/AAAA/wACA/8CQ1j/Bqbb/wfD//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hvfn/Aj1R/wAAAP8AAAD/CxgK/0aa
Q/9RsE3/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1GxTf8rXin/AAAA/wAA
AP8GAwH/pmcX//eYIv/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/7pEg/+WIHv/liB7/5Yge/+mKHv+eXhX/BgMB/wAA
AP8AAAD/AAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgAAANgAAAD/AAAA/wAA
AP8ADhL/BGaH/we48/8Hw///B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8L//war4v8BGiL/AAAA/wAAAP8bOxr/T6xL/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UbFN/z+LPP8GDAX/AAAA/wAAAP9jPQ3/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/xlCH/54oe/+WIHv/liB7/54ke/856G/8kFgX/AAAA/wAAAP8AAAC8AAAACwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACcAAADPAAAA/wAAAP8AAAD/ASEs/wWJtP8Hwf//B8L//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwv//Bq/n/wEjLv8AAAD/AQEB/zJt
L/9RsU3/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9QsEz/TKdJ/xQs
E/8AAAD/AAAA/ygZBf/bhx7/9Zch//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/qjR//5Yge/+WIHv/liB7/5Ige/1s2
DP8AAAD/AAAA/wAAANkAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAqQAAAP8AAAD/AAAA/wIt
PP8GoNP/B8P//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//CIuz/xhCKf8rXCf/TKVI/1CwTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9RsU3/Klwo/wAAAP8AAAD/BgQB/6loF//3mCL/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh/+6RIP/liB7/5Yge/+WIHv/niR7/smkX/ykYBf8NCAL4AgEAggAAAAMAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAGAAAAD6AAAA/wAAAP8BIy7/BqHU/wfE//8Hwf//B8H//wfB//8Hwf//B8H//wfC
//8Hw///B8T//wfD//8Hwv//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wbB//8Vv97/SrBa/1Gw
TP9QsEz/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Gx
Tf8/iTv/BQsF/wAAAP8AAAD/Zj8O//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/8ZQh/+eKHv/liB7/5Yge/+WI
Hv/liB7/zHkb/7xwGeXAcxkoq2YXAAQCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAygAAAP8AAAD/AAwQ/wWI
tP8HxP//B8H//wfB//8Hwf//B8H//wfD//8Hwf//BrHp/waczv8FlMT/BqTY/we49P8Hw///B8L//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//BsL//ya5s/9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/ULBM/0ymSP8UKxP/AAAA/wAAAP8qGgb/3Yge//SX
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/6o0f/+WIHv/liB7/5Yge/+WIHv/niR7/54ke/OeKHl7miR4A9JEgAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAFwAAAD7AAAA/wAAAP8DUWv/B7/9/wfB//8Hwf//B8H//wfB//8Hwv//BqLW/wNW
cv8BIi3/AA4S/wAIC/8BExr/AjJC/wRzmP8HtfD/B8P//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8FsvD/Nq+E/1Kw
Sv9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UbFN/ylZJ/8AAAD/AAAA/wcFAf+sahf/95gh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/ukSD/5Yge/+WI
Hv/liB7/5Yge/+WIHv/liB7/6osfpf///wAaEAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAArAAAAP8AAAD/AREX/wac
zv8Hw///B8H//wfB//8Hwf//B8L//wWGsf8BHCX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAIC/wI9
Uf8GqeD/B8P//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Gvv3/AnKc/wEpOP8fSif/SqFF/1CwTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9RsU3/Poc7/wUKBP8AAAD/AAAA/2pB
Dv/0liH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//GUIf/nih7/5Yge/+WIHv/liB7/5Yge/+SHHv+oZBbnFAwDgQAA
ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACEAAADfAAAA/wAAAP8CP1T/B736/wfB//8Hwf//B8H//wfD//8Fj77/ARQa/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wI7Tf8Gs+z/B8L//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//Bb///wGZ1/8AExv/AAAA/wAA
AP8zcDH/UbJN/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CwTP9MpUj/EykS/wAAAP8AAAD/LhwG/9+KHv/0lyH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh/+qN
H//liB7/5Yge/+WIHv/niR7/u28Z/x0RBP8AAAD/AAAA2QAAACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAPcAAAD/AAAA/wRw
lP8HxP//B8H//wfB//8Hwv//B7Tu/wIxQf8AAAD/AAAA/wAAAP8vLy//fn5+/5WVlf9kZGT/FBQU/wAA
AP8AAAD/AAAA/wRpi/8Hwv//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Hwf//B8D//wS7//8Bt///AG6d/wABAf8AAAD/AQIB/zRyMf9Rsk3/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1GxTf8oVib/AAAA/wAA
AP8JBQH/sGwY//eYIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/7pEg/+WIHv/liB7/5Yge/+mKHv+iYBX/BQMB/wAA
AP8AAAD/AAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAABoAAAA/wAAAP8ACAv/BZLB/wfE//8Hwf//B8H//wfE//8FhrH/AAUH/wAA
AP8AAAD/SUlJ/+Dg4P////////////7+/v+ysrL/GBgY/wAAAP8AAAD/ASYy/way6/8Hwv//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wa///8DuP//ALT//wCz//8AQl7/AAAA/wAA
AP8IEgj/RJRA/1GxTf9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UbFN/z2FOv8ECQT/AAAA/wAAAP9uRA//9Jch//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/xlCH/54oe/+WIHv/liB7/54ke/8d2Gv8eEgT/AAAA/wAAAP8AAACyAAAABwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAD/AAAA/wER
Fv8GodX/B8P//wfB//8Hwf//B8P//wNad/8AAAD/AAAA/w8PD//CwsL/////////////////////////
//90dHT/AAAA/wAAAP8ACg7/BZbG/wfE//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//B8H//wfB
//8Fvf//Abb//wC0//8As///AH+1/wATG/8AAAD/AAAA/xczFv9Oqkr/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9QsEz/S6RH/xEm
Ef8AAAD/AAAA/zAeB//hix//9Jch//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/qjR//5Yge/+WIHv/liB7/4oYe/1Ix
C/8AAAD/AAAA/wAAAOYAAAArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAjQAAAP8AAAD/ARgf/wao3/8Hw///B8H//wfB//8Hwf//A0Zc/wAA
AP8AAAD/LS0t/+vr6////////////////////////////66urv8EBAT/AAAA/wACA/8Fgqz/B8T//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8HwP//BLv//wG0//8Atf//AKz0/wBijP8ADhT/AAAA/wAA
AP8AAAD/K14p/1GxTf9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9RsE3/JlMk/wAAAP8AAAD/CgYB/7NuGP/2mCH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh/+6RIP/liB7/5Yge/+WIHv/pih7/kVYT/wIBAP8AAAD/AAAA/wAAAGkAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFAAAA/wAA
AP8BExn/BqTZ/wfD//8Hwf//B8H//wfB//8DSmH/AAAA/wAAAP8kJCT/4+Pj////////////////////
////////oKCg/wICAv8AAAD/AAQF/wWItP8HxP//B8H//wfB//8Hwf//B8H//wfB//8Hwf//Br///wO4
//8As///ALX//wCc3v8AQV3/AAME/wAAAP8AAAD/AAAA/wQKBP8+hzv/UbFN/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Gx
Tf84fDX/AwcD/wAAAP8AAAD/cUYP//WXIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/8ZQh/+eKHv/liB7/5Yge/+eJ
Hv/GdRr/HBEE/wAAAP8AAAD/AAAArwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG4AAAD/AAAA/wAKDv8Fl8j/B8T//wfB//8Hwf//B8T//wRp
i/8AAAD/AAAA/wUFBf+bm5v///////////////////////T09P9QUFD/AAAA/wAAAP8BERf/BqHU/wfD
//8Hwf//B8H//wfB//8Hwf//B8H//wW9//8Btv//ALT//wCz//8Ag7v/ACQz/wAAAP8AAAD/AAAA/wAA
AP8AAAD/ESQQ/0ujR/9QsEz/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/T65L/0OXQP8PIQ7/AAAA/wAAAP8zHwf/4owf//SX
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/6o0f/+WIHv/liB7/5Yge/+KGHv9OLgr/AAAA/wAAAP8AAADkAAAAKAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAA
APsAAAD/AAEC/wR6of8HxP//B8H//wfB//8Hw///BprM/wEQFf8AAAD/AAAA/xwcHP+jo6P/7e3t//f3
9//d3d3/bm5u/wUFBf8AAAD/AAAA/wI7Tf8Hu/f/B8H//wfB//8Hwf//B8H//wfB//8Eu///AbT//wC0
//8ArPX/AGSO/wAPFv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8jTCH/ULBM/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Nqkn/SKFE/yFKH/8AAAD/AAAA/wsHAf+1cBn/9pgh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/tkCD/5Yge/+WI
Hv/liB7/6Yoe/41UE/8BAQD/AAAA/wAAAP4AAABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAA6AAAAP8AAAD/A0xk/wfA/v8Hwf//B8H//wfB
//8Hvvz/A1Nt/wAAAP8AAAD/AAAA/wgICP8yMjL/RERE/yEhIf8AAAD/AAAA/wAAAP8ACw//BYq2/wfD
//8Hwf//B8H//wfB//8Gv///A7j//wCz//8Atf//AJ3g/wBDX/8AAwX/AAAA/wAAAP8AAAD/AAAA/AAA
AP8AAAD/AgQC/zd4NP9Rsk3/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/0unR/9IokT/NHYx/wMHA/8AAAD/AAAA/3RI
EP/1lyH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//GUIf/miR7/5Yge/+WIHv/niR7/w3Qa/xoPA/8AAAD/AAAA/wAA
AKwAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAoAAAC7AAAA/wAAAP8BGiL/Bqfd/wfD//8Hwf//B8H//wfC//8GreX/AjVG/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAYI/wRniP8Hv/3/B8H//wfB//8Hwf//Bb7//wK2//8AtP//ALT//wCF
vf8AJTX/AAAA/wAAAP8AAAD/AAAA/gAAALYAAADRAAAA/wAAAP8LFwr/RppD/1GwTf9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Prkv/SaNF/0ehQ/9ClD7/DiAN/wAAAP8AAAD/NSEH/+SNH//0lyH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh/+mM
H//liB7/5Yge/+WIHv/hhR3/Sy0K/wAAAP8AAAD/AAAA4wAAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAD/AAAA/wAAAP8EZIT/B8L//wfB
//8Hwf//B8H//wfD//8Gq+L/A01l/wALD/8AAAD/AAAA/wAAAP8AAAD/AAAA/wEcJf8EdJr/B736/wfC
//8Hwf//B8H//wS7//8BtP//ALT//wCt9v8AZpH/ABAX/wAAAP8AAAD/AAAA/wAAAPEAAACBAAAAMgAA
AN0AAAD/AAAA/xs7Gv9PrEv/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/06sSv9IoUT/R6BD/0ehQ/8gSB7/AAAA/wAA
AP8MCAL/uHIZ//aYIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/7ZAg/+WIHv/liB7/5Yge/+iKHv+LUhL/AQEA/wAA
AP8AAAD+AAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAIwAAANwAAAD/AAAA/wEXHv8GnM7/B8T//wfB//8Hwf//B8H//wfD//8Hvfn/BZLB/wNc
ef8CO03/AjVG/wJDWf8EbpL/Bqbc/wfC//8Hwv//B8H//wa///8Duf//ALP//wC1//8AnuL/AEVi/wAE
Bf8AAAD/AAAA/wAAAP8AAADZAAAAVAAAAAAAAABUAAAA+wAAAP8AAAD/L2ct/1GyTf9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/TKhI/0egQ/9HoEP/SKJE/zN0MP8DBgP/AAAA/wAAAP94ShD/9Zch//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/xlCH/5oke/+WIHv/liB7/54ke/8FzGf8YDgP/AAAA/wAAAP8AAACpAAAABAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAP8AAAD/AAAA/wI3
Sf8GsOn/B8P//wfB//8Hwf//B8H//wfB//8Hw///B8P//we++v8HvPj/B7/9/wfE//8Hw///B8H//wfB
//8Fvv//Arb//wC0//8AtP//AIfA/wAnOP8AAAD/AAAA/wAAAP8AAAD+AAAAswAAAC0AAAAAAAAAAAAA
AJUAAAD/AAAA/wYOBv9Bjj7/UbFN/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9KpUb/R6BD/0egQ/9HoUP/QZI9/wwb
C/8AAAD/AAAA/zgjCP/ljh//9Jch//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/pjB//5Yge/+WIHv/liB7/4IUd/0kr
Cv8AAAD/AAAA/wAAAOEAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAYAAAAxAAAAP8AAAD/AAAA/wNFW/8Gsuv/B8P//wfB//8Hwf//B8H//wfB
//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//BLv//wG0//8AtP//AK73/wBolf8AERn/AAAA/wAA
AP8AAAD/AAAA8gAAAIYAAAASAAAAAAAAAAAAAAATAAAAzgAAAP8AAAD/FCsT/0ynSP9QsEz/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/T61L/0iiRP9HoEP/R6BD/0ihRP8+jDv/ChUJ/wAAAP8AAAD/DgkC/7x0Gf/2mCH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh/+2QIP/liB7/5Yge/+WIHv/oih7/iFES/wAAAP8AAAD/AAAA/QAAAF4AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAA5gAA
AP8AAAD/AAAA/wI8T/8Gotb/B8P//wfC//8Hwf//B8H//wfB//8Hwf//B8H//wfB//8Hwf//BsD//wO5
//8AtP//ALX//wCe4f8AR2X/AAQG/wAAAP8AAAD/AAAA/wAAANoAAABXAAAAAwAAAAAAAAAAAAAAAAAA
AD4AAADzAAAA/wAAAP8nVSX/UbFN/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Nqkn/R6BD/0egQ/9HoEP/SKNE/zBt
Lf8BAwH/AAAA/wAAAP8AAAD/fE0R//aYIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/8ZQg/+aJHv/liB7/5Yge/+eJ
Hv+/chn/Fg0D/wAAAP8AAAD/AAAApQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeAAAA7wAAAP8AAAD/AAAA/wEdJv8EcZb/BrDp/wfD
//8HxP//B8P//wfC//8Hwv//B8L//wW///8Cuf//ALX//wCo7/8Ac6T/ACMy/wAAAP8AAAD/AAAA/wAA
AP8AAAC2AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAP8AAAD/AwYD/zp/N/9Rsk3/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/0umR/9HoEP/R6BD/0egQ/9HoEP/H0Ud/wAAAP8AAAD/AAAA/wAAAP87JQj/548f//SW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/6Ywf/+WIHv/liB7/5Yge/9+EHf9GKQn/AAAA/wAAAP8AAADeAAAAIQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAEAAABhAAAA6QAAAP8AAAD/AAAA/wACA/8BJjL/A199/wWOvP8GqN7/B7Xv/wa49P8EsfH/AaDi/wCJ
w/8AX4j/ACo7/wAEBv8AAAD/AAAA/wAAAP8AAADzAAAAiQAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAkAAAC5AAAA/wAAAP8NHQ3/SZ9F/1CwTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Prkv/SaNF/0egQ/9HoEP/R6FD/0KV
Pv8OIA3/AAAA/wAAAP8AAAD/AAAA/xAKAv++dhr/9pgh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/tkCD/5Yge/+WI
Hv/liB7/6Ioe/4RPEf8AAAD/AAAA/wAAAPwAAABaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHAAAAzQAAAP8AAAD/AAAA/wAA
AP8AAAD/AAcK/wEXHv8BJzT/ASw7/wAmNv8AGCL/AAkN/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA2QAA
AFkAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAOcAAAD/AAAA/x9DHf9Qrkz/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/06rSv9HoUP/R6BD/0egQ/9IokT/Nnsz/wQJBP8AAAD/AAAA/wAAAP8AAAD/AAAA/39P
Ef/2mCH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/0liH/9pgh//eY
Iv/3mCL/95gi//WXIf/zliH/85Yh//CTIP/miR7/5Yge/+WIHv/niR7/vXAZ/xQMA/8AAAD/AAAA/wAA
AKEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAfAAAAiwAAAOYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA7QAAAJoAAAApAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAABhAAAA/gAAAP8BAQH/M28w/1GyTf9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/S6dH/0egQ/9HoEP/R6BD/0ii
RP8mVST/AAAA/wAAAP8AAAD7AAAA+AAAAP8AAAD/PiYI/+iPIP/0liH/85Yh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/zliH/9pgh/+iPH/++dhr/nGAV/5JaFP+kZRb/zX4c//CUIf/1lyH/85Yh/+mM
H//liB7/5Yge/+WIHv/ehB3/QicJ/wAAAP8AAAD/AAAA3AAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAMAAA
AIcAAADPAAAA9AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD3AAAA1wAAAJMAAAA6AAAABAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKEAAAD/AAAA/wgSCP9ElED/UbFN/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CuTP9JpEX/R6BD/0egQ/9HoEP/RZtB/xQuE/8AAAD/AAAA/wAAANcAAACxAAAA/wAA
AP8RCgL/wXca//aYIf/zliH/85Yh//OWIf/zliH/85Yh//OWIf/zliH/9JYh//GUIf+qaRf/QikJ/w8J
Av8BAQD/AAAA/wMCAP8ZDwP/XzoN/8p9G//1lyH/7ZAg/+WIHv/liB7/5Yge/+iKHv+ATBH/AAAA/wAA
AP8AAAD7AAAAVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAABAAAAAbgAAAJIAAACpAAAArAAA
AKsAAACYAAAAdQAAAEgAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAaAAAA1wAAAP8AAAD/FzMW/06qSv9Qr0z/UK9M/1CvTP9Qr0z/UK9M/1CvTP9RsE3/UbJN/1Cv
TP9Prkz/UK9M/1GyTf9RsU3/UK9M/1CvTP9Qr0z/UK9M/1CvTP9Qr0z/TqxK/0ihRP9HoEP/R6BD/0ii
RP88hzn/BxAH/wAAAP8AAAD/AAAAnAAAAFMAAAD5AAAA/wAAAP+CUBL/9pgh//OWIf/zliH/85Yh//OW
If/zliH/85Yh//OWIf/vlCH/hlMS/w0IAv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/JhcF/7Nv
GP/ylSH/5oke/+WIHv/liB7/6Ioe/7puGP8TCwL/AAAA/wAAAP8AAACcAAAAAQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAABdAAAA9QAAAP8AAAD/AwYD/yhYJv9Mp0n/UbFN/1CvTP9Qr0z/UK9M/1Cv
TP9Qr0z/UK9M/1CvTP9Qr0z/UK9M/0unR/9HoEP/SKFE/0egQ/8xbi7/ChUJ/wAAAP8AAAD/AAAA/wAA
AJsAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
AFYAAADgAAAA/wAAAP8AAAD/AAAA/xQMA/9HLAr/fU0R/6JkFv+4chn/unIZ/6ZjFv+IURL/XDYM/ycX
Bf8EAgD/AAAA/wAAAP8AAAD/AAAA/AAAAKIAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACFAAAA/QAA
AP8AAAD/AQMB/xs7Gf9AjT3/UK9M/1GxTf9QsEz/UK9M/1CvTP9Qr0z/UK9M/1CuTP9LqEf/SKJE/0ii
RP8/jzz/Ik4h/wULBP8AAAD/AAAA/wAAAP8AAAC5AAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcAAAC3AAAA/AAAAP8AAAD/AAAA/wAA
AP8AAAD/AwIA/wsHAf8MBwL/BgQB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOUAAAB1AAAADAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAACPAAAA/AAAAP8AAAD/AAAA/wgSCP8iSyH/PIQ5/0qi
R/9Prkv/UbFN/1GyTf9Qr0v/SqVG/0SZQP86gzf/JlUk/w0dDP8AAAD/AAAA/wAAAP8AAAD/AAAAvQAA
ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAABAAAABnAAAAywAAAPoAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAOkAAACcAAAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAoAAAB5AAAA7wAAAP8AAAD/AAAA/wAAAP8ECQT/ECIP/x0/G/8mVCT/KFcm/yRRIv8cQBv/EScQ/wYO
Bv8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAAKYAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAVwAA
AKEAAADVAAAA7wAAAPoAAAD/AAAA/wAAAP0AAAD1AAAA4wAAAL0AAAB8AAAAMQAAAAMAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABKAAAAxAAAAP0AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN4AAABvAAAADAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAABcAAAA1AAAAUAAAAGMAAABlAAAAWwAA
AEEAAAAlAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAVAAAAaQAAAMUAAAD1AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/AAAANkAAACIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAA
AEYAAACFAAAAtwAAANYAAADjAAAA5gAAAOQAAADcAAAAwQAAAJYAAABZAAAAHQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAFwAAACIAAAAnAAAAJAAA
ABsAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAD//////////////////////////////////////////////////////////////////wABAAAAAAAA
AAf///////gAAAAAAAAAAAAA///////gAAAAAAAAAAAAAH//////wAAAAAAAAAAAAAAf/////4AAAAAA
AAAAAAAAD/////8AAAAAAAAAAAAAAAf////+AAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAA/////wA
AAAAAAAAAAAAAAH////4AAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAAP////AAAAAAAAAAAAAAAAD/
///wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAH////AAAAAAAAAAAAAAAAB////wAAAAAAAAAAAA
AAAAf///8AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAP///8AAAAAAA
AAAAAAAAAB////AAAAAAAAAAAAAAAAAf///wAAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAA////AA
AAAAAAAAAAAAAAAP///4AAAAAAAAAAAAAAAAD///+AAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAH
///8AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAAP///4AAAAAAAAAAAAAAAAD////AAAAAAAAAAAA
AAAAA////4AAAAAAAAAAAAAAAAP////AAAAAAAAAAAAAAAAB////4AAAAAAAAAAAAAAAAf////gAAAAA
AAAAAAAAAAD/////AAAAAAAAAAAAAAAA////////AAAAAAAAAAAAAP///////gAAAAAAAAAAAAD/////
//wAAAAAAAAAAAAAf//////wAAAAAAAAAAAAAH//////4AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAA
P/////8AAAAAAAAAAAAAAD/////+AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAH/////gAAAAAAAAA
AAAAAB/////wAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAH////+AAAAAAAAAAAAAAAB/////gAAAA
AAAAAAAAAAAf////wAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH////
wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAP////AAAAAAAAAAAAAAAAD////wAAAAAAAAAAAAAAA
Af///8AAAAAAAAAAAAAAAAH////AAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAAP///8AAAAAAAAAA
AAAAAAD////AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAB////AAAAA
AAAAAAAAAAAAf///4AAAAAAAAAAAAAAAAD///+AAAAAAAAAAAAAAAAA////gAAAAAAAAAAAAAAAAP///
8AAAAAAAAAAAAAAAAB////gAAAAQAAAAAAAAAAAf///8AAAAIAAAAAAAAAAAH////gAAAGAAAAAAAAAA
AA////8AAAHgAAAAAAAAAAAP////gAADwAAAAAAAAAAAD/////AAD8AAAAAAAAAAAA/////+AP/AAAAA
AAAAAAAP////////wAAAAAAAAAAAD////////8AAAAAAAAAAAA/////////AAAAAAAAAAAAP////////
wAAAAAAAAAAAD////////8AAAAAAAAAAAA/////////AAAAAAQAAAAAP////////wAAAAAEAAAAAD///
/////8AAAAADAAAAAA/////////AAAAAA4AAAAAP////////wAAAAAOAAAAAD////////8AAAAAHgAAA
AB/////////AAAAAB8AAAAAf////////wAAAAAfAAAAAP////////+AAAAAH4AAAAD/////////gAAAA
D/AAAAB/////////8AAAAB/4AAAA//////////gAAAAf/AAAAf/////////4AAAAP/4AAAf/////////
/AAAAH//AAAP//////////4AAAD//+AAP///////////gAAD/////////////////+AAB///////////
///////8AD//////////////////////////////////////////////////////////////////////
//8=
</value>
</data>
</root>
\ No newline at end of file \ No newline at end of file
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Model;
namespace AGVControl_Steel
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += Application_ThreadException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (!RunMode()) return;
Common.log = new Log("AGVControl_Steel");
Common.log.Info("=====程序开始=====");
ReadConfig();
Application.Run(new FrmMain());
Common.log.Info("=====程序结束=====\r\n");
}
private static bool RunMode()
{
if (BLL.RunMode.IsRun()) return false;
bool rtn = BLL.RunMode.IsAdmin();
if (!rtn) BLL.RunMode.AdminRun();
return rtn;
}
private static void ReadConfig()
{
Common.appConfig = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);
Common.FLEET_SEND = Convert.ToBoolean(Common.appConfig.AppSettings.Settings["FLEET_Send"].Value);
Common.mir = new MiR_API { FleetIP = Common.appConfig.AppSettings.Settings["FLEET_IP"].Value };
ReadAgvInfo();
ReadAgvMission();
ReadAgvLine();
}
private static void ReadAgvInfo()
{
Common.agvInfos = new List<AgvInfo>();
string[] lines = System.IO.File.ReadAllLines(Common.PATH_AGV_NAME, System.Text.Encoding.UTF8);
for (int i = 0; i < lines.Length; i++)
{
string[] str = lines[i].Split(',');
if (str.Length != 5) continue;
string isUse = "false";
if (Common.appConfig.AppSettings.Settings[str[1]] == null)
{
Common.appConfig.AppSettings.Settings.Add(str[1], "false");
Common.appConfig.Save();
System.Configuration.ConfigurationManager.RefreshSection("appSettings");
}
else
{
isUse = Common.appConfig.AppSettings.Settings[str[1]].Value;
}
AgvInfo info = new AgvInfo(str[0], str[1], str[2], str[3], str[4])
{
IsAuto = Convert.ToBoolean(isUse),
BatteryMax = Convert.ToInt32(Common.appConfig.AppSettings.Settings["AGV_BATTERY_MAX"].Value),
BatteryMin = Convert.ToInt32(Common.appConfig.AppSettings.Settings["AGV_BATTERY_MIN"].Value)
};
Common.agvInfos.Add(info);
}
Common.log.Info("读取配置文件 " + Common.PATH_AGV_NAME);
}
private static void ReadAgvMission()
{
Common.agvMissions = new Dictionary<string, string>();
string[] lines = System.IO.File.ReadAllLines(Common.PATH_AGV_MISSION, System.Text.Encoding.UTF8);
for (int i = 0; i < lines.Length; i++)
{
string[] str = lines[i].Split(',');
if (str.Length != 2) continue;
Common.agvMissions.Add(str[0], str[1]);
}
Common.mir.MissionList = Common.agvMissions;
Common.log.Info("读取配置文件 " + Common.PATH_AGV_MISSION);
}
private static void ReadAgvLine()
{
Common.agvLines = new List<WorkshopLine>();
string[] lines = System.IO.File.ReadAllLines(Common.PATH_AGV_LINE, System.Text.Encoding.UTF8);
for (int i = 0; i < lines.Length; i++)
{
string[] str = lines[i].Split(',');
string[] temp = new string[str.Length - 1];
Array.Copy(str, 1, temp, 0, temp.Length);
WorkshopLine wl = new WorkshopLine
{
Workshop = str[0],
Lines = temp
};
Common.agvLines.Add(wl);
}
Common.log.Info("读取配置文件 " + Common.PATH_AGV_LINE);
}
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Common.log.Error("CurrentDomain_UnhandledException", (Exception)e.ExceptionObject);
}
private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
Common.log.Error("Application_ThreadException", e.Exception);
}
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("AGVControl_Steel")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AGVControl_Steel")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("6f08f614-2767-456a-80b8-a8fdb19f3988")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本: 4.0.30319.42000
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace AGVControl_Steel.Properties
{
/// <summary>
/// 强类型资源类,用于查找本地化字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// 返回此类使用的缓存 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AGVControl_Steel.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 覆盖当前线程的 CurrentUICulture 属性
/// 使用此强类型的资源类的资源查找。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
\ No newline at end of file \ No newline at end of file
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AGVControl_Steel.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{6F08F614-2767-456A-80B8-A8FDB19F3988}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>AGVControl_Steel</RootNamespace>
<AssemblyName>AGVControl_Steel</AssemblyName>
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>图标.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.VisualBasic" />
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="FrmMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmMain.Designer.cs">
<DependentUpon>FrmMain.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="FrmMain.resx">
<DependentUpon>FrmMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="图标.ico" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\BLL\BLL.csproj">
<Project>{c547fedd-0b62-4ac3-96e7-c86dd38c670b}</Project>
<Name>BLL</Name>
</ProjectReference>
<ProjectReference Include="..\Model\Model.csproj">
<Project>{ac764294-c5e4-441f-acc8-f912366ca1bc}</Project>
<Name>Model</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file \ No newline at end of file
此文件类型无法预览
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<appSettings>
<add key="FLEET_IP" value="10.85.199.3"/>
<add key="FLEET_Send" value="true"/>
<add key="WebService" value="http://10.85.196.40:8089/"/>
<!--<add key="WebService" value="http://127.0.0.1:8089/"/>-->
<add key="AGV_BATTERY_MAX" value="100"/>
<add key="AGV_BATTERY_MIN" value="40"/>
<add key="11号_4C" value="false"/>
<add key="13号_4D" value="false"/>
</appSettings>
</configuration>
\ No newline at end of file \ No newline at end of file
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
4D,D1,D2,D3,D4,D5,D6,D8,D9,D10,D11,D12,D14,D15,D16,4Dwash,storage
4C,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,4Cwash
\ No newline at end of file \ No newline at end of file
MoveSteelC1,77a02463-f387-11ea-8452-94c691a7387d
MoveSteelC2,b2dc4ed9-f387-11ea-8452-94c691a7387d
MoveSteelC3,c7f598c1-f387-11ea-8452-94c691a7387d
MoveSteelC4,ddfd5992-f387-11ea-8452-94c691a7387d
MoveSteelC5,f0a4498e-f387-11ea-8452-94c691a7387d
MoveSteelC6,037a7f67-f388-11ea-8452-94c691a7387d
MoveSteelC7,1b361828-f388-11ea-8452-94c691a7387d
MoveSteelC8,2aec8e6c-f388-11ea-8452-94c691a7387d
MoveSteelC9,3cad8c7d-f388-11ea-8452-94c691a7387d
MoveSteelC10,4cc3d656-f388-11ea-8452-94c691a7387d
MoveSteelD1,e9ed94bf-f2ac-11ea-8452-94c691a7387d
MoveSteelD2,04e5690f-f2ad-11ea-8452-94c691a7387d
MoveSteelD3,1d3f9b5a-f2ad-11ea-8452-94c691a7387d
MoveSteelD4,55bf620d-f2ad-11ea-8452-94c691a7387d
MoveSteelD5,6c1fe859-f2ad-11ea-8452-94c691a7387d
MoveSteelD6,8498ea0b-f2ad-11ea-8452-94c691a7387d
MoveSteelD8,ba683168-f2ad-11ea-8452-94c691a7387d
MoveSteelD9,de7f8051-f2ad-11ea-8452-94c691a7387d
MoveSteelD10,f81944b7-f2ad-11ea-8452-94c691a7387d
MoveSteelD11,0a0b0df1-f2ae-11ea-8452-94c691a7387d
MoveSteelD12,201e368d-f2ae-11ea-8452-94c691a7387d
MoveSteelD14,445106a1-f2ae-11ea-8452-94c691a7387d
MoveSteelD15,002b3e45-f105-11ea-a03e-94c691a7387d
MoveSteelD16,15a766ac-f2a2-11ea-8452-94c691a7387d
MoveWash4C,691e75ab-f2b0-11ea-8452-94c691a7387d
MoveWash4D,e52ae766-f2ab-11ea-8452-94c691a7387d
MoveStandby4C,2dd387ce-f2b0-11ea-8452-94c691a7387d
MoveStandby4D,21ca7ffe-f29e-11ea-8452-94c691a7387d
AutoCharge4C,8ed7b459-f2b0-11ea-8452-94c691a7387d
AutoCharge4D,2f0a31b1-f2ab-11ea-8452-94c691a7387d
PassDoorInto4D,d67f31c8-ca7e-11ea-9a66-94c691a7387d
PassDoorInto4C,fd6e26ac-c1bf-11ea-9a66-94c691a7387d
MoveSteelstorage,418c9064-f2ac-11ea-8452-94c691a7387d
Pickupqisdashelf,f2acdcae-e524-11ea-b003-0001299a3f0e
Placeqisdashelf,4001120d-e525-11ea-b003-0001299a3f0e
\ No newline at end of file \ No newline at end of file
32,11号_4C,10.85.199.82,4C,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==
25,13号_4D,10.85.199.84,4D,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==
\ No newline at end of file \ No newline at end of file

\ No newline at end of file \ No newline at end of file

\ No newline at end of file \ No newline at end of file

\ No newline at end of file \ No newline at end of file
[2020-10-21 10:04:07,085][1][AGVControl_Steel:18]INFO =====程序开始=====
[2020-10-21 10:04:07,149][1][AGVControl_Steel:18]INFO 读取配置文件 D:\Neotel\AGVControl_Steel\UI\bin\Debug\Config\AgvName.csv
[2020-10-21 10:04:07,151][1][AGVControl_Steel:18]INFO 读取配置文件 D:\Neotel\AGVControl_Steel\UI\bin\Debug\Config\AgvMission.csv
[2020-10-21 10:04:07,153][1][AGVControl_Steel:18]INFO 读取配置文件 D:\Neotel\AGVControl_Steel\UI\bin\Debug\Config\AgvLine.txt
[2020-10-21 10:04:07,266][1][AGVControl_Steel:18]INFO 加载回收钢板任务
[2020-10-21 10:04:07,281][1][AGVControl_Steel:18]INFO 加载送新钢板任务
[2020-10-21 10:04:07,282][1][AGVControl_Steel:18]INFO 加载仓库钢板任务
[2020-10-21 10:04:08,511][1][AGVControl_Steel:18]INFO Web服务已开启
[2020-10-21 10:04:10,134][8][AGVControl_Steel:23]DEBUG 11号_4C[10.85.199.82] 脱机
[2020-10-21 10:04:12,132][8][AGVControl_Steel:23]DEBUG 13号_4D[10.85.199.84] 脱机
[2020-10-21 10:04:12,132][9][AGVControl_Steel:23]DEBUG 11号_4C[10.85.199.82] 脱机
[2020-10-21 10:04:14,141][9][AGVControl_Steel:23]DEBUG 13号_4D[10.85.199.84] 脱机
[2020-10-21 10:04:14,142][8][AGVControl_Steel:23]DEBUG 11号_4C[10.85.199.82] 脱机
[2020-10-21 10:04:16,018][1][AGVControl_Steel:18]INFO Web服务已关闭
[2020-10-21 10:04:16,041][1][AGVControl_Steel:18]INFO =====程序结束=====
此文件的差异太大,无法显示。
[2020-10-21 10:04:10,132][8][MiR_API:614]INFO Ping 10.85.199.82 请求没有响应
[2020-10-21 10:04:12,131][8][MiR_API:614]INFO Ping 10.85.199.84 请求没有响应
[2020-10-21 10:04:12,132][9][MiR_API:614]INFO Ping 10.85.199.82 请求没有响应
[2020-10-21 10:04:14,141][9][MiR_API:614]INFO Ping 10.85.199.84 请求没有响应
[2020-10-21 10:04:14,141][8][MiR_API:614]INFO Ping 10.85.199.82 请求没有响应
此文件的差异太大,无法显示。
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件的差异太大,无法显示。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<logger name="AGVControl_Steel">
<level value="Debug"/>
<appender-ref ref="AGVControl_Steel"/>
</logger>
<logger name="MiR_API">
<level value="Debug"/>
<appender-ref ref="api"/>
</logger>
<appender name="AGVControl_Steel" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\AGVControl_Steel.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
<appender name="api" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\MiR_API.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
</log4net>
</configuration>
\ No newline at end of file \ No newline at end of file
此文件类型无法预览
此文件的差异太大,无法显示。
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")]
此文件类型无法预览
此文件类型无法预览
f653881c86976e85b8a19161c143cb745ecc0339
D:\Neotel_Beta\AGVControl_Steel\UI\bin\Debug\AGVControl_Steel.exe.config
D:\Neotel_Beta\AGVControl_Steel\UI\bin\Debug\AGVControl_Steel.exe
D:\Neotel_Beta\AGVControl_Steel\UI\bin\Debug\AGVControl_Steel.pdb
D:\Neotel_Beta\AGVControl_Steel\UI\bin\Debug\BLL.dll
D:\Neotel_Beta\AGVControl_Steel\UI\bin\Debug\Model.dll
D:\Neotel_Beta\AGVControl_Steel\UI\bin\Debug\log4net.dll
D:\Neotel_Beta\AGVControl_Steel\UI\bin\Debug\RestSharp.dll
D:\Neotel_Beta\AGVControl_Steel\UI\bin\Debug\BLL.pdb
D:\Neotel_Beta\AGVControl_Steel\UI\bin\Debug\Model.pdb
D:\Neotel_Beta\AGVControl_Steel\UI\bin\Debug\log4net.xml
D:\Neotel_Beta\AGVControl_Steel\UI\bin\Debug\RestSharp.xml
D:\Neotel_Beta\AGVControl_Steel\UI\obj\Debug\UI.csprojAssemblyReference.cache
D:\Neotel_Beta\AGVControl_Steel\UI\obj\Debug\AGVControl_Steel.FrmMain.resources
D:\Neotel_Beta\AGVControl_Steel\UI\obj\Debug\AGVControl_Steel.Properties.Resources.resources
D:\Neotel_Beta\AGVControl_Steel\UI\obj\Debug\UI.csproj.GenerateResource.cache
D:\Neotel_Beta\AGVControl_Steel\UI\obj\Debug\UI.csproj.CoreCompileInputs.cache
D:\Neotel_Beta\AGVControl_Steel\UI\obj\Debug\UI.csproj.CopyComplete
D:\Neotel_Beta\AGVControl_Steel\UI\obj\Debug\AGVControl_Steel.exe
D:\Neotel_Beta\AGVControl_Steel\UI\obj\Debug\AGVControl_Steel.pdb
D:\Neotel_Beta\AGVControl_Steel\UI\bin\Debug\log4net.config
此文件类型无法预览
回收钢板接口:http://10.85.196.40:8089/StealAgv/takeOld
body:Place=xx
Place产线名称,D1,D2,D3
清洗点呼叫小车接口:http://10.85.196.40:8089/StealAgv/sendNew
body:From=4cwash&Place=4cwash
From:清洗点,4cwash,4dwash
Place:清洗点,4cwash,4dwash
清洗点送新钢板接口:http://10.85.196.40:8089/StealAgv/sendNew
body:From=4cwash&Place=xx,xx,xx
From:清洗点,4cwash,4dwash
Place:产线名称,逗号分隔,D1,D2,D3,storage
仓库进料架接口:http://10.85.196.40:8089/StealAgv/storage
body:Place=xxx
Place:4C_Enter:4C的小车入库,4D_Enter:4D的小车入库
return:Msg:"OK,4C/4D"
仓库出料架接口:http://10.85.196.40:8089/StealAgv/storage
body:Place=Leave
用于从清洗点送到仓库,入库完后可以离开时调用
仓库送新钢板接口:http://10.85.196.40:8089/StealAgv/sendNew
body:From=storage&Place=xx,xx,xx
Place:产线名称,逗号分隔,D1,D2,D3
仓库对接信号接口:http://10.85.196.40:8089/StealAgv/storage
body:Place=DI_On/DI_Off
3个信号全亮DI_On,有1个没信号DI_Off
return:Msg:"OK,4C/4D"
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!