From c1d8e2c6f9b5347a8aec4168c4a99a2f113ac2cb Mon Sep 17 00:00:00 2001 From: MoYue <18168119590@163.com> Date: Mon, 24 Jul 2023 16:07:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YTDX202303TCP.sln | 25 + YTDX202303TCP/App.config | 6 + YTDX202303TCP/Client.cs | 197 +++ YTDX202303TCP/Data.cs | 34 + YTDX202303TCP/Form1.Designer.cs | 637 +++++++++ YTDX202303TCP/Form1.cs | 492 +++++++ YTDX202303TCP/Form1.resx | 1253 +++++++++++++++++ YTDX202303TCP/Program.cs | 22 + YTDX202303TCP/Properties/AssemblyInfo.cs | 36 + .../Properties/Resources.Designer.cs | 71 + YTDX202303TCP/Properties/Resources.resx | 117 ++ YTDX202303TCP/Properties/Settings.Designer.cs | 30 + YTDX202303TCP/Properties/Settings.settings | 7 + YTDX202303TCP/Sockets.cs | 109 ++ YTDX202303TCP/YTDX202303TCP.csproj | 96 ++ YTDX202303TCP/bitbug_favicon.ico | Bin 0 -> 67646 bytes YTDX202303TCP/tools.cs | 223 +++ 17 files changed, 3355 insertions(+) create mode 100644 YTDX202303TCP.sln create mode 100644 YTDX202303TCP/App.config create mode 100644 YTDX202303TCP/Client.cs create mode 100644 YTDX202303TCP/Data.cs create mode 100644 YTDX202303TCP/Form1.Designer.cs create mode 100644 YTDX202303TCP/Form1.cs create mode 100644 YTDX202303TCP/Form1.resx create mode 100644 YTDX202303TCP/Program.cs create mode 100644 YTDX202303TCP/Properties/AssemblyInfo.cs create mode 100644 YTDX202303TCP/Properties/Resources.Designer.cs create mode 100644 YTDX202303TCP/Properties/Resources.resx create mode 100644 YTDX202303TCP/Properties/Settings.Designer.cs create mode 100644 YTDX202303TCP/Properties/Settings.settings create mode 100644 YTDX202303TCP/Sockets.cs create mode 100644 YTDX202303TCP/YTDX202303TCP.csproj create mode 100644 YTDX202303TCP/bitbug_favicon.ico create mode 100644 YTDX202303TCP/tools.cs diff --git a/YTDX202303TCP.sln b/YTDX202303TCP.sln new file mode 100644 index 0000000..bee32ec --- /dev/null +++ b/YTDX202303TCP.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33403.182 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YTDX202303TCP", "YTDX202303TCP\YTDX202303TCP.csproj", "{99EB89BC-A17C-48A3-8E8F-A62D84EB02D1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {99EB89BC-A17C-48A3-8E8F-A62D84EB02D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99EB89BC-A17C-48A3-8E8F-A62D84EB02D1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99EB89BC-A17C-48A3-8E8F-A62D84EB02D1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99EB89BC-A17C-48A3-8E8F-A62D84EB02D1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0A92B70F-1BDF-484D-9775-72426781D90C} + EndGlobalSection +EndGlobal diff --git a/YTDX202303TCP/App.config b/YTDX202303TCP/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/YTDX202303TCP/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/YTDX202303TCP/Client.cs b/YTDX202303TCP/Client.cs new file mode 100644 index 0000000..4472bf5 --- /dev/null +++ b/YTDX202303TCP/Client.cs @@ -0,0 +1,197 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Sockets; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using static YTDX202303TCP.Sockets; + +namespace YTDX202303TCP +{ + public class Client : SocketObject + { + public PushSockets pushSockets; + + bool IsClose = false; + /// + /// 当前管理对象 + /// + Sockets sk; + /// + /// 客户端 + /// + TcpClient client; + /// + /// 当前连接服务端地址 + /// + IPAddress Ipaddress; + /// + /// 当前连接服务端端口号 + /// + int Port; + /// + /// 服务端IP+端口 + /// + IPEndPoint ip; + /// + /// 发送与接收使用的流 + /// + NetworkStream nStream; + + /// + /// 初始化Socket + /// + /// + /// + public override void InitSocket(IPAddress ipaddress, int port) + { + Ipaddress = ipaddress; + Port = port; + ip = new IPEndPoint(Ipaddress, Port); + client = new TcpClient(); + } + /// + /// 初始化Socket + /// + /// ipd地址 + /// 端口 + public override void InitSocket(string ipaddress, int port) + { + Ipaddress = IPAddress.Parse(ipaddress); + Port = port; + ip = new IPEndPoint(Ipaddress, Port); + client = new TcpClient(); + } + /// + /// 重写Start方法,其实就是连接服务端 + /// + public override void Start() + { + Connect(); + } + /// + /// 连接 + /// + public bool Connect() + { + try + { + client.Connect(ip); + } + catch (Exception) + { + return false; + } + nStream = new NetworkStream(client.Client, true); + sk = new Sockets(ip, client, nStream); + sk.nStream.BeginRead(sk.RecBuffer, 0, sk.RecBuffer.Length, new AsyncCallback(EndReader), sk); + return true; + } + /// + /// 读取 + /// + private void EndReader(IAsyncResult ir) + { + Sockets s = ir.AsyncState as Sockets; + try + { + if (s != null) + { + if (IsClose && client == null) + { + sk.nStream.Close(); + sk.nStream.Dispose(); + return; + } + s.Offset = s.nStream.EndRead(ir); + if (pushSockets != null) + pushSockets.Invoke(s);//推送至UI + sk.nStream.BeginRead(sk.RecBuffer, 0, sk.RecBuffer.Length, new AsyncCallback(EndReader), sk); + } + } + catch (Exception skex) + { + Sockets sks = s; + sks.ex = skex; + sks.ClientDispose = true; + if (pushSockets != null) + pushSockets.Invoke(sks);//推送至UI + } + } + /// + /// 停止 + /// + public override void Stop() + { + Sockets sks = new Sockets(); + try + { + if (client != null) + { + client.Client.Shutdown(SocketShutdown.Both); + Thread.Sleep(10); + client.Close(); + IsClose = true; + client = null; + } + else + { + sks.ex = new Exception("客户端没有初始化.!"); + } + if (pushSockets != null) + pushSockets.Invoke(sks);//推送至UI + } + catch (Exception ex) + { + sks.ex = ex; + } + } + /// + /// 发送消息 + /// + public void SendData(byte[] SendData) + { + try + { + if (client == null || !client.Connected) + { + Sockets sks = new Sockets(); + sks.ex = new Exception("客户端无连接.."); + sks.ClientDispose = true; + if (pushSockets != null) + pushSockets.Invoke(sks);//推送至UI + } + if (client.Connected) //如果连接则发送 + { + if (nStream == null) + { + nStream = client.GetStream(); + } + nStream.Write(SendData, 0, SendData.Length); + } + } + catch (Exception skex) + { + Sockets sks = new Sockets(); + sks.ex = skex; + sks.ClientDispose = true; + if (pushSockets != null) + pushSockets.Invoke(sks);//推送至UI + } + } + + public bool Is_Connected() + { + return client.Connected; + } + + public bool IsOnline() + { + if (client == null) + return false; + return !((client.Client.Poll(1000, SelectMode.SelectRead) && (client.Client.Available == 0)) || !client.Client.Connected); + } + } +} diff --git a/YTDX202303TCP/Data.cs b/YTDX202303TCP/Data.cs new file mode 100644 index 0000000..528ad7c --- /dev/null +++ b/YTDX202303TCP/Data.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace YTDX202303TCP +{ + public class Data + { + public float AIN0 { get; set; } + public float AIN1 { get; set; } + public float AIN2 { get; set; } + public float AIN3 { get; set; } + public float AIN4 { get; set; } + public float AIN5 { get; set; } + public float AIN6 { get; set; } + public float AIN7 { get; set; } + + + + public float DI1 { get; set; } + public float DI2 { get; set; } + public float DI3 { get; set; } + public float DI4 { get; set; } + + + public string DO1 { get; set; } = "关"; + public string DO2 { get; set; } = "关"; + public string DO3 { get; set; } = "关"; + public string DO4 { get; set; } = "关"; + + } +} diff --git a/YTDX202303TCP/Form1.Designer.cs b/YTDX202303TCP/Form1.Designer.cs new file mode 100644 index 0000000..bf963c8 --- /dev/null +++ b/YTDX202303TCP/Form1.Designer.cs @@ -0,0 +1,637 @@ +namespace YTDX202303TCP +{ + partial class Form1 + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button1 = new System.Windows.Forms.Button(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.label37 = new System.Windows.Forms.Label(); + this.label36 = new System.Windows.Forms.Label(); + this.label35 = new System.Windows.Forms.Label(); + this.label34 = new System.Windows.Forms.Label(); + this.label33 = new System.Windows.Forms.Label(); + this.label32 = new System.Windows.Forms.Label(); + this.label31 = new System.Windows.Forms.Label(); + this.label30 = new System.Windows.Forms.Label(); + this.label21 = new System.Windows.Forms.Label(); + this.label20 = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.label18 = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.button11 = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); + this.button9 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.label22 = new System.Windows.Forms.Label(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.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.groupBox1.Controls.Add(this.button1); + this.groupBox1.Controls.Add(this.textBox2); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.textBox3); + this.groupBox1.Controls.Add(this.label22); + this.groupBox1.Controls.Add(this.textBox1); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Font = new System.Drawing.Font("宋体", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(510, 118); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "TCPClient"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(410, 31); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 4; + this.button1.Text = "连接"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(281, 31); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(100, 23); + this.textBox2.TabIndex = 3; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(212, 34); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(63, 14); + this.label2.TabIndex = 2; + this.label2.Text = "端口号:"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(78, 31); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(116, 23); + this.textBox1.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(9, 34); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(63, 14); + this.label1.TabIndex = 0; + this.label1.Text = "目标IP:"; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.label37); + this.groupBox2.Controls.Add(this.label36); + this.groupBox2.Controls.Add(this.label35); + this.groupBox2.Controls.Add(this.label34); + this.groupBox2.Controls.Add(this.label33); + this.groupBox2.Controls.Add(this.label32); + this.groupBox2.Controls.Add(this.label31); + this.groupBox2.Controls.Add(this.label30); + this.groupBox2.Controls.Add(this.label21); + this.groupBox2.Controls.Add(this.label20); + this.groupBox2.Controls.Add(this.label19); + this.groupBox2.Controls.Add(this.label18); + this.groupBox2.Controls.Add(this.label17); + this.groupBox2.Controls.Add(this.label16); + this.groupBox2.Controls.Add(this.label15); + this.groupBox2.Controls.Add(this.label14); + this.groupBox2.Controls.Add(this.label13); + this.groupBox2.Controls.Add(this.label12); + this.groupBox2.Controls.Add(this.label11); + this.groupBox2.Controls.Add(this.label10); + this.groupBox2.Controls.Add(this.label9); + this.groupBox2.Controls.Add(this.label8); + this.groupBox2.Controls.Add(this.label7); + this.groupBox2.Controls.Add(this.label6); + this.groupBox2.Controls.Add(this.label5); + this.groupBox2.Controls.Add(this.label4); + this.groupBox2.Font = new System.Drawing.Font("宋体", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBox2.Location = new System.Drawing.Point(12, 136); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(275, 439); + this.groupBox2.TabIndex = 1; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "RTU IO 状态"; + // + // label37 + // + this.label37.AutoSize = true; + this.label37.Location = new System.Drawing.Point(154, 413); + this.label37.Name = "label37"; + this.label37.Size = new System.Drawing.Size(21, 14); + this.label37.TabIndex = 32; + this.label37.Text = "关"; + // + // label36 + // + this.label36.AutoSize = true; + this.label36.Location = new System.Drawing.Point(154, 372); + this.label36.Name = "label36"; + this.label36.Size = new System.Drawing.Size(21, 14); + this.label36.TabIndex = 31; + this.label36.Text = "关"; + // + // label35 + // + this.label35.AutoSize = true; + this.label35.Location = new System.Drawing.Point(154, 332); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(21, 14); + this.label35.TabIndex = 30; + this.label35.Text = "关"; + // + // label34 + // + this.label34.AutoSize = true; + this.label34.Location = new System.Drawing.Point(154, 298); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(21, 14); + this.label34.TabIndex = 29; + this.label34.Text = "关"; + // + // label33 + // + this.label33.AutoSize = true; + this.label33.Location = new System.Drawing.Point(9, 372); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(35, 14); + this.label33.TabIndex = 28; + this.label33.Text = "复位"; + // + // label32 + // + this.label32.AutoSize = true; + this.label32.Location = new System.Drawing.Point(9, 332); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(77, 14); + this.label32.TabIndex = 27; + this.label32.Text = "继电器控制"; + // + // label31 + // + this.label31.AutoSize = true; + this.label31.Location = new System.Drawing.Point(8, 413); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(28, 14); + this.label31.TabIndex = 27; + this.label31.Text = "DO4"; + // + // label30 + // + this.label30.AutoSize = true; + this.label30.Location = new System.Drawing.Point(9, 298); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(91, 14); + this.label30.TabIndex = 26; + this.label30.Text = "电子开关控制"; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.Location = new System.Drawing.Point(154, 260); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(14, 14); + this.label21.TabIndex = 17; + this.label21.Text = "0"; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(154, 230); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(14, 14); + this.label20.TabIndex = 16; + this.label20.Text = "0"; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(154, 201); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(14, 14); + this.label19.TabIndex = 15; + this.label19.Text = "0"; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(154, 172); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(14, 14); + this.label18.TabIndex = 14; + this.label18.Text = "0"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(154, 144); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(14, 14); + this.label17.TabIndex = 13; + this.label17.Text = "0"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(154, 115); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(14, 14); + this.label16.TabIndex = 12; + this.label16.Text = "0"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(154, 87); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(14, 14); + this.label15.TabIndex = 11; + this.label15.Text = "0"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(9, 260); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(35, 14); + this.label14.TabIndex = 10; + this.label14.Text = "AIN7"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(9, 230); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(35, 14); + this.label13.TabIndex = 9; + this.label13.Text = "AIN6"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(9, 201); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(35, 14); + this.label12.TabIndex = 8; + this.label12.Text = "湿度"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(9, 172); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(35, 14); + this.label11.TabIndex = 7; + this.label11.Text = "温度"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(9, 144); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(77, 14); + this.label10.TabIndex = 6; + this.label10.Text = "短路故障位"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(9, 115); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(77, 14); + this.label9.TabIndex = 5; + this.label9.Text = "过流故障位"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(9, 87); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(35, 14); + this.label8.TabIndex = 4; + this.label8.Text = "电流"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(154, 58); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(14, 14); + this.label7.TabIndex = 3; + this.label7.Text = "0"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(9, 58); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(35, 14); + this.label6.TabIndex = 2; + this.label6.Text = "电压"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(157, 28); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(35, 14); + this.label5.TabIndex = 1; + this.label5.Text = "数据"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(28, 28); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(35, 14); + this.label4.TabIndex = 0; + this.label4.Text = "名称"; + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.button11); + this.groupBox3.Controls.Add(this.button10); + this.groupBox3.Controls.Add(this.button9); + this.groupBox3.Controls.Add(this.button8); + this.groupBox3.Controls.Add(this.button7); + this.groupBox3.Controls.Add(this.button6); + this.groupBox3.Controls.Add(this.button5); + this.groupBox3.Controls.Add(this.button4); + this.groupBox3.Controls.Add(this.button3); + this.groupBox3.Controls.Add(this.button2); + this.groupBox3.Controls.Add(this.label3); + this.groupBox3.Font = new System.Drawing.Font("宋体", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBox3.Location = new System.Drawing.Point(310, 136); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(212, 439); + this.groupBox3.TabIndex = 2; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "RTU DO 控制"; + // + // button11 + // + this.button11.Location = new System.Drawing.Point(18, 389); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(75, 23); + this.button11.TabIndex = 10; + this.button11.Text = "自动读取"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // + // button10 + // + this.button10.Location = new System.Drawing.Point(115, 304); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(88, 23); + this.button10.TabIndex = 9; + this.button10.Text = "继电器4关"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(18, 304); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(88, 23); + this.button9.TabIndex = 8; + this.button9.Text = "继电器4开"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(115, 230); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(88, 23); + this.button8.TabIndex = 7; + this.button8.Text = "继电器3关"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(18, 230); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(88, 23); + this.button7.TabIndex = 6; + this.button7.Text = "继电器3开"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(115, 163); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(88, 23); + this.button6.TabIndex = 5; + this.button6.Text = "继电器2关"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(18, 163); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(88, 23); + this.button5.TabIndex = 4; + this.button5.Text = "继电器2开"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(115, 87); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(88, 23); + this.button4.TabIndex = 3; + this.button4.Text = "继电器1关"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(18, 87); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(88, 23); + this.button3.TabIndex = 2; + this.button3.Text = "继电器1开"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(117, 28); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 1; + this.button2.Text = "读取"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(15, 33); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(91, 14); + this.label3.TabIndex = 0; + this.label3.Text = "读取系统状态"; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(9, 79); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(63, 14); + this.label22.TabIndex = 0; + this.label22.Text = "子站地址"; + // + // textBox3 + // + this.textBox3.Location = new System.Drawing.Point(78, 76); + this.textBox3.Name = "textBox3"; + this.textBox3.Size = new System.Drawing.Size(116, 23); + this.textBox3.TabIndex = 1; + this.textBox3.TextChanged += new System.EventHandler(this.textBox3_TextChanged); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(534, 608); + this.Controls.Add(this.groupBox3); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "Form1"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "YTDA202303TCP"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label37; + private System.Windows.Forms.Label label36; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.Label label34; + private System.Windows.Forms.Label label33; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button10; + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.Label label22; + } +} + diff --git a/YTDX202303TCP/Form1.cs b/YTDX202303TCP/Form1.cs new file mode 100644 index 0000000..bf238e4 --- /dev/null +++ b/YTDX202303TCP/Form1.cs @@ -0,0 +1,492 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Reflection.Emit; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Windows.Threading; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.ToolBar; + +namespace YTDX202303TCP +{ + public partial class Form1 : Form + { + private string main_ip = "192.168.0.65"; //IP + private int main_port = 502; //端口 + private Client _client = new Client(); //主板客户端 + //单线程 + private System.Threading.Timer _flash_page; + private Data data = new Data(); + static bool isSending = false;//数据是否定时发送 + + private int station_id = 100; + + public Form1() + { + InitializeComponent(); + textBox1.Text = main_ip; + textBox2.Text = main_port.ToString(); + textBox3.Text = station_id.ToString(); + //刷新界面的线程 + _flash_page = new System.Threading.Timer(new System.Threading.TimerCallback(WritetoPage), null, 2000, 1000); + } + + /// + /// 数据写入界面 + /// + /// + private void WritetoPage(object sender) + { + Invoke((EventHandler)(delegate + { + label7.Text = data.AIN0.ToString("0.00") + " V"; + label15.Text = data.AIN1.ToString("0.00") + " A"; + label16.Text = data.AIN2.ToString("0.00") + " V"; + label17.Text = data.AIN3.ToString("0.00") + " V"; + label18.Text = data.AIN4.ToString("0.00") + " ℃"; + label19.Text = data.AIN5.ToString("0.00") + " %"; + label20.Text = data.AIN6.ToString("0.00") + " V"; + label21.Text = data.AIN7.ToString("0.00") + " V"; + + label34.Text = data.DO1; + label35.Text = data.DO2; + label36.Text = data.DO3; + label37.Text = data.DO4; + + })); + } + + + /// + /// 连接 + /// + /// + /// + private void button1_Click(object sender, EventArgs e) + { + if (button1.Text == "连接") + { + //连接Socket + _client.InitSocket(textBox1.Text, Convert.ToInt32(textBox2.Text)); + bool isConnected = _client.Connect(); + if (isConnected) + { + _client.pushSockets = ReceiveMess;//注册推送器 + button1.Text = "断开"; + textBox1.Enabled = false; + textBox2.Enabled = false; + } + } + else if (button1.Text == "断开") + { + if (button11.Text == "停止") + { + MessageBox.Show("请先关闭自动读取功能!"); + } + else + { + _client.Stop(); + button1.Text = "连接"; + textBox1.Enabled = true; + textBox2.Enabled = true; + } + + } + } + + + /// + /// 客户端数据接收 + /// + /// + private void ReceiveMess(Sockets sks) + { + if (sks.ex != null) + { + if (sks.ClientDispose == true) + { + //由于未知原因引发异常.导致客户端下线. 比如网络故障.或服务器断开连接. + //wirte_textbox(string.Format("客户端下线.!异常消息:{0}\r\n", sks.ex)); + } + else + { + //SetClientState(string.Format("异常消息:{0}\r\n", sks.ex)); + } + //timerConnect.Enabled = true; + } + else if (sks.Offset == 0) + { + //客户端主动下线 + //wirte_textbox("客户端下线!"); + } + else + { + byte[] buffer = new byte[sks.Offset]; + Array.Copy(sks.RecBuffer, buffer, sks.Offset); + string str = Encoding.UTF8.GetString(buffer); + + try + { + ParsingData(new List(buffer)); + } + catch (Exception) + { + return; + } + } + } + + + + /// + /// 数据解析 + /// + /// + private void ParsingData(List byteList) + { + string rec_16 = null; + for (int i = 0; i < byteList.Count; i++) + { + rec_16 += byteList[i].ToString("X2"); //16进制显示 + } + //string _message = tools.HexStringToString(rec_16, Encoding.Default).Replace("\r\n", ""); + + //校验当前List是否为空或者长度 + if (byteList == null || byteList.Count == 0) + return; + //获取当前系统时间 + DateTime time_DataBase = DateTime.Now; + //帧头 + byte[] _header = new byte[] { (byte)station_id }; + //功能码 + byte _fun_code = 0; + //操作功能 + byte _operation = 0; + //传感器类型 + byte _kind = 0; + + //校验帧头 + if (byteList[0] != _header[0]) + { + return; + } + + //读取状态显示 + if (rec_16.StartsWith(station_id.ToString("x2") + "0330")) + { + data.AIN0 = (float)tools.bytetofloat(byteList, 3) * 118F; //电压 + data.AIN1 = (float)tools.bytetofloat(byteList, 7) / 0.75F; //电流 + data.AIN2 = (float)tools.bytetofloat(byteList, 11); + data.AIN3 = (float)tools.bytetofloat(byteList, 15); + data.AIN4 = (float)tools.bytetofloat(byteList, 19) * 100F; //温度 + data.AIN5 = (float)tools.bytetofloat(byteList, 23) * 100F / 3F; //湿度 + data.AIN6 = (float)tools.bytetofloat(byteList, 27); + data.AIN7 = (float)tools.bytetofloat(byteList, 31); + + if (byteList[44] == 1) + { + data.DO1 = "开"; + } + else + { + data.DO1 = "关"; + } + + if (byteList[46] == 1) + { + data.DO2 = "开"; + } + else + { + data.DO2 = "关"; + } + + if (byteList[48] == 1) + { + data.DO3 = "开"; + } + else + { + data.DO3 = "关"; + } + + if (byteList[50] == 1) + { + data.DO4 = "开"; + } + else + { + data.DO4 = "关"; + } + + } + + } + + + /// + /// 继电器1开 + /// + /// + /// + private void button3_Click(object sender, EventArgs e) + { + Control(20, 01); + } + + /// + /// 继电器1关 + /// + /// + /// + private void button4_Click(object sender, EventArgs e) + { + Control(20, 00); + } + + /// + /// 继电器2开 + /// + /// + /// + private void button5_Click(object sender, EventArgs e) + { + Control(21, 01); + //Thread.Sleep(500); + //button3_Click(null, null); + + } + + /// + /// 继电器2关 + /// + /// + /// + private void button6_Click(object sender, EventArgs e) + { + Control(21, 00); + } + + /// + /// 继电器3开 + /// + /// + /// + private void button7_Click(object sender, EventArgs e) + { + Control(22, 01); + } + + /// + /// 继电器3关 + /// + /// + /// + private void button8_Click(object sender, EventArgs e) + { + Control(22, 00); + } + + /// + /// 继电器4开 + /// + /// + /// + private void button9_Click(object sender, EventArgs e) + { + Control(23, 01); + } + + /// + /// 继电器4关 + /// + /// + /// + private void button10_Click(object sender, EventArgs e) + { + Control(23, 00); + } + + /// + /// 读取 + /// + /// + /// + private void button2_Click(object sender, EventArgs e) + { + //byte[] byte_read = new byte[] { (byte)station_id, 03, 00, 00, 00, 24, 76, 53 }; + byte[] byte_read = new byte[] { (byte)station_id, 03, 00, 00, 00, 24 }; + byte[] nr_crc = new byte[2]; + nr_crc = Crc16(byte_read, byte_read.Length); + List data = byte_read.ToList(); + data.AddRange(nr_crc); + string list = tools.byteToHexStr(data.ToArray()); + byte[] bytea = tools.ConvertHexStringToBytes(list); + _client.SendData(bytea); + } + + + //创建读取线程 + private System.Threading.Timer timer_Read; + /// + /// 定时读取 + /// + /// + /// + private void button11_Click(object sender, EventArgs e) + { + if (button11.Text == "自动读取") + { + int time = 1;//间隔 + isSending = true; + //byte[] byte_read = new byte[] { (byte)station_id, 03, 00, 00, 00, 24 }; + //byte[] nr_crc = new byte[2]; + //nr_crc = Crc16(byte_read, byte_read.Length); + //List data = byte_read.ToList(); + //data.AddRange(nr_crc); + //string list = tools.byteToHexStr(data.ToArray()); + //byte[] bytea = tools.ConvertHexStringToBytes(list); + //Time_Send(time, bytea); + + timer_Read = new System.Threading.Timer(new System.Threading.TimerCallback(Time_Send), null, 0, 1000); + button11.Text = "停止"; + } + else if (button11.Text == "停止") + { + timer_Read.Dispose(); + isSending = false; + button11.Text = "自动读取"; + } + } + + /// + /// 定时发送数据 + /// + /// + /// + //private async void Time_Send(int time, byte[] message) + //{ + // while (isSending) + // { + // _client.SendData(message); + // //间隔 + // await Task.Delay(1000 * time); + // } + //} + + private void Time_Send(object sender) + { + byte[] byte_read = new byte[] { (byte)station_id, 03, 00, 00, 00, 24 }; + byte[] nr_crc = new byte[2]; + nr_crc = Crc16(byte_read, byte_read.Length); + List data = byte_read.ToList(); + data.AddRange(nr_crc); + string list = tools.byteToHexStr(data.ToArray()); + byte[] bytea = tools.ConvertHexStringToBytes(list); + _client.SendData(bytea); + } + + + /// + /// 远程控制 + /// + /// + /// + /// + /// + private void Control(int kind, int Sensor_Id) + { + byte[] byteaq = new byte[] { (byte)station_id, 16, 00, (byte)kind, 00, 01, 02, 00, (byte)Sensor_Id }; + byte[] nr_crc = new byte[2]; + nr_crc = Crc16(byteaq, byteaq.Length); + List data = byteaq.ToList(); + data.AddRange(nr_crc); + string list = tools.byteToHexStr(data.ToArray()); + byte[] bytea = tools.ConvertHexStringToBytes(list); + _client.SendData(bytea); + } + + private void textBox3_TextChanged(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBox3.Text)) + return; + station_id = Convert.ToInt32(this.textBox3.Text); + } + + #region CRC校验 + private static readonly byte[] aucCRCHi = { + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40 + }; + private static readonly byte[] aucCRCLo = { + 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, + 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, + 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, + 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, + 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, + 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, + 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, + 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, + 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, + 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, + 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, + 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, + 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, + 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, + 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, + 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, + 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, + 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, + 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, + 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, + 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, + 0x41, 0x81, 0x80, 0x40 + }; + private static byte[] Crc16(byte[] pucFrame, int usLen) + { + int i = 0; + byte crcHi = 0xFF; + byte crcLo = 0xFF; + UInt16 iIndex = 0x0000; + + while (usLen-- > 0) + { + iIndex = (UInt16)(crcLo ^ pucFrame[i++]); + crcLo = (byte)(crcHi ^ aucCRCHi[iIndex]); + crcHi = aucCRCLo[iIndex]; + } + + return new byte[] { crcLo, crcHi }; + } + + + #endregion + } +} diff --git a/YTDX202303TCP/Form1.resx b/YTDX202303TCP/Form1.resx new file mode 100644 index 0000000..3603b24 --- /dev/null +++ b/YTDX202303TCP/Form1.resx @@ -0,0 +1,1253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAMMOAADDDgAAAAAAAAAA + AAD///////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7+/v/+/v7//v////// + /////////fz7//n28v/49O//+fXx//z59v/+/v7///////7////+/////v/+//7+/v/+/v7//v7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////7+fb/8ebc/+HGrv/Po3v/wYlW/72CS/+/hlH/xpRl/9Os + h//kzLX/9Ovj//38+////////v/+//3+/v/+/v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7///////////////z59//w49f/27ud/8GM + Wv+vZyX/plYN/6FOAf+gTAD/oEsA/6BLAP+gTAD/ok8B/6ZYD/+zbzD/yptv/+TOuP/28ez//v7+//7/ + //////////////////////////////////////7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7+//7+ + /v/+/////f7+//fy7f/kzbf/yZhr/7BqKf+jUgf/oEsA/6BMAP+hTQD/oE0A/6RSCP+uZiT/sm0t/6te + GP+iTwL/oUwA/6FMAP+hTAH/qFoS/7yCS//ZuJj/8OTY//z7+f///////v7+//7+/v/+/////v7+//7+ + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/////v7+//Xu5//ewab/v4hU/6ldFv+hTQH/oUwA/6FN + AP+hTgD/ok4A/6FNAP+uZyX/06yJ/+zbzf/x5Nj/5s+6/8aTZP+mVw7/oU0A/6JOAP+gTQD/oUwA/6RU + Cf+zcDL/zqR8/+zay//8+ff//v////7+///+/v7//v7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////n0 + 7//ewaf/vIBK/6hZEf+gTQD/oU0A/6JNAP+iTgD/oU4A/6FNAP+hTAD/sWws/+PLtP/9+/r///////7/ + ////////+fTw/9OsiP+oWhL/oUwA/6FOAP+iTgD/oE0A/6BMAP+jUAT/r2gm/8qccP/q2Mf//Pr4//// + ///+/v////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v/////////+//////////v49f/mz7r/wIhU/6ZYD/+hTQD/oU0A/6FOAP+hTgD/oU4A/6FO + AP+hTQD/oU0A/7JsLP/kzrj//f39//7+///+/v7//v7+//7+/v//////+/j1/9Wxj/+pXBX/oU0A/6FO + AP+hTgD/oU4A/6FNAP+hTAD/ok4C/6xjH//JmWz/69rK//z7+f////////////7////+/////v////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////v7+//7+/v/+/v7//v////38+//t3c7/yJhr/6ld + F/+gTAD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FMAP+xbS7/5s+7//7+/v/+//7//v7+//// + ///////////////////+/////Pn3/9i1lf+qXxn/oUwA/6FNAP+hTgD/oU4A/6FOAP+hTgD/oEwA/6FN + Af+tYyD/zaF5/+3f0f/9+/r//v////7//v/9/v7//v7+///////+//7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v7//v/+//7////17+j/17ST/7JtLf+iTwL/oUwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTQD/s24v/+XQu//+/v7//v/+//7//v/+/v7///////////////////////7+/v/+////+/r3/9q4 + mP+qXhn/oUwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BMAP+iTwT/sm0v/9Ouiv/y6N///v79//7/ + /v/+/v7//v7+///+//////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////9/Pr/6NTC/8CIU/+mVgz/oUwA/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7JuL//lz7n//f39//7////+//7//v7+//7+ + /v///////////////////////v7+//7+/v/+/////Pr5/9q5m/+qXxn/oUwA/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FNAP+gTAD/pFMI/7l6Qf/fxKn/+fbx//7////+/v////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7///7/ + ///+////9/Hr/9Sui/+uZiP/oU0B/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BN + AP+ybi7/5c+7//39/P/+/v7//v7+/////////////v/+/////////////////////////////v/+//7+ + /////////Pr5/9u7nv+rYRz/oU0A/6JOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oE0A/6hb + Ev/FkmH/7NzM//39/P///////v7+///////+//////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/////fz8/+vay//AiFX/o1IH/6BMAP+hTQD/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/s3Ax/+bSvv/+/v7//v7+//7+/v////7///////// + //////////////////////////////////////////////7//v/+/////Pv6/93ApP+tZCD/ok0A/6JO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6JNAf+waSf/1bGP//bv6f/+/////v7+//7+ + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////r1 + 8f/bu57/sm0t/6FNAf+hTQD/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7Rw + Mf/n08D//v/+//7//v/+/v7//f7+//7+/v////////////////////////////////////////////// + /////////v/+//3+/v/+/////fz7/97Cp/+uZSL/oUwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU0A/6FMAP+kUwr/wIhU/+nXxf/8+/r//v////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////06+H/zJ5z/6hbFP+gTQD/oU0A/6BNAP+hTgD/oU4A/6FN + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+zcDL/5tG9//7+/f/+/v7//v7+//7+/v/+/v7//v7///// + ///////////////////////////////////////////////////+/v7//v7+//7+/v/+/////f37/+DE + qv+uZSL/oEwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FNAP+hTQH/sGop/9e0 + k//48u3///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////v////7//v/+/v7///7+///////+/v7/69vK/72C + S/+jUQb/oE0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTQD/s3Ax/+fR + vf/9/f3//f7+//7+/v////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v///fz7/+HGrP+uZiT/oEwA/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+gTAD/plcO/8WRYf/w49f//v////7//////v////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+//7+/v//////+/n2/9/Dqf+xbCz/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oUwA/7VyNf/o1cL//v7+//3+/v/+/v7///7+//////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v/9/v///f38/+PKs/+xain/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JN + AP+hTQD/oU4B/7RyNP/iyrL//Pr4//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////9/v7//v////fy7f/TrIf/ql8Z/6FM + AP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+1cjT/6tbE//7/ + ///+/v7//v7+//7+/v///v7///////////////////////////////////////////////////////// + /////////////////////////////////////////v7+//7+/v///////v39/+TMtf+xbCz/oUwA/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FNAP+hTQD/oUwA/6xhHf/Vr43/+PLs//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7///7+ + /v/+//7//v/////////06+P/yZhs/6VWDf+gTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTQD/tXM1/+fUwf/+/v7//v7+/////////////////////v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7//////v///v79/+TNuP+xayv/oU0A/6FOAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU0A/6FOAP+hTgD/oE0A/6ZXDf/Hlmj/8uje///////+/v///v7+//7+/v/+/v7///7///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+//7//f7+//7+/v/+////7+LV/8CIVP+jUQb/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7VyNf/n08D//f79//7+ + ///+/v7//v////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v79/+TO + uf+ybS7/oUwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6JR + Bf+9gkz/7d7Q//7//v/+/v7//v7+//7+/v/+//////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v/+//7//f39/+jVwv+4eT7/ok4B/6FNAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FNAP+1dTj/6dfF//7+/v/+/v7//v7+//3+/v/+//7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////3+/v/+/v7//v7+/+bRvf+0cDH/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FNAf+1cjT/5c64//38+//+/v///v7+//7/ + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////v////38+//iybH/sm0t/6FMAP+hTQD/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/tnQ3/+vZyP///////v/+//7/ + /v/+//7//v7+//7//v////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v///v////7/ + ///+/////v7+/+fTwP+1cjb/oU0B/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/ok0A/6BMAP+vaCb/3sGm//v6+P/+/////v7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v7//v7+//7/ + ///8+/n/3cCl/65mI/+gTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTQD/oU0A/7Z1OP/p1sX//v////7+/v////7//////////////////v////n18f/o1cP/9u7n//// + ///////////////////////////////////+/v7//v7+//Pp3//n07//9e/n//7+/v///v///v7+//7+ + /v/+/v7//v7+//7+/v/+/v7//v/+//79/f/x5dr/4sqy//Xt5f/+///////+/+nVw/+1czb/oE0A/6FO + AP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BNAP+sYh3/2biY//z5 + 9//+/////v7///3+/v/+/v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7///7+/v/+////+/n3/9m5mf+rYRz/oEwA/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+2dTj/6dbE//7+/v/+/v7//v7+//7+ + /v//////////////////////5Mu0/61jIP/XtJP///////////////////////////////////////7/ + ///7+vj/zJ50/6lbE/+8gEj/38Oq//r28//+/////v7+//7+/v/+/v7//v7+//7////59vL/3L2h/7Z1 + Of+nWRD/2LaX//7////+/////v7+/+jVw/+1dDf/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FMAP+pXBb/17OS//v59//+/////f7+//7+/v/+//////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v////r3 + 9P/WsY//ql0W/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/t3Y7/+rYx//+/v7//v7+//7+/v/9/v7//v7+///////////////////////cvaD/o1IH/9Cl + fv///////////////////////////////////////v/+//z9+//bvJ//r2gn/6FOAv+nWhH/yptv//Pr + 4v/9/////v7+//7+/v/+////9Ovi/8mZbP+nWBD/ok8D/7VxM//o1MH//v////7+/v/+/v7//v7+/+nX + x/+2djv/oU4B/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BM + AP+oWxP/1bGO//r49P/+/////v/+//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////v/+/v7//v7+///////69vL/0quH/6dZEf+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7d3O//r3Mz//v////7+/v/+/v7//v7+//7+ + /v/+/v7//v/+/////v/+/////////92+of+lUwj/0KZ//////////////////////////////v////7+ + /v///////v////39/P/w49f/zaB4/6tgGv+iTgP/wIpW//Pr4v/+/////v////Hm2/+/hlH/ok4D/6xh + HP/PpHz/8ufc//7+/v/+//7//v/+//7////+/////v///+vay/+5ej//oU4B/6FNAP+hTQD/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FMAP+nWhL/1K+L//r39P/+/////v7///// + ///+//7////+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//7+/v/+////+vby/9Gp + g/+mVw//oUwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JN + Af+3djz/6tnJ//7////+/v7//v7+//7+/v/9/v7//v7+//7/////////////////////////3L6i/6RT + CP/Qp4D///////////////////////7////+/v7//v7+///////////////////////8+vj/4Mat/7Jt + Lf+iTgP/yptv//r49f/17eX/wotY/6JOA/+1cjX/48my//z6+P/+//////7+//////////////////7+ + ///+/v///v///+zczf+5ekD/ok0B/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6BMAP+oWxT/1rKR//v59//+/////v/+//7+/v///v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/v///v////r28//RqoX/p1gQ/6FMAP+iTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+iTgH/t3g8/+rYx//+/v7//v7+//7+/v/+//7//v7+//3+ + /v/+/v7/9u/n/+jUwf/m0Lz/5tG8/+fSvf/NoHf/pFIG/8SPXv/n0r3/59G8/+bRvP/m0bz/7t/R//z6 + +P/+/v7////////////////////+//7+///9/f3/48qz/61kIP+oWxT/38Oq/9Gpg/+kUQf/tHEz/+nX + xf/+/v3//v////7+/v/+/v7//////////////////v7+//3//v/9/v7//v///+zczf+6e0L/ok4B/6FN + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6BNAP+pXRf/27ue//38 + +//+//7//v/+///+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v////7////6+PT/062J/6dZ + Ef+hTAD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4B/7h5 + Pv/r2sr//v7+//7+/v/+/v7//v/+//7//v/+/v7//v////fy7f/GlGX/qV0V/6haEf+nWRL/qFkS/6VV + C/+hTgH/pFQI/6haEf+oWhH/qFoR/6haEv+ybCz/5c65/////////v///////////////////v7///7/ + ///9/Pv/062I/6RSBv+ybi7/q2Id/6peGf/ky7X//v////7+///+//7//v7+//7+/v////////////// + //////7//v7+//7+/v/+/v7//v///+3dz/+6fUT/ok4C/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FMAP+sYx7/4Mat//39/f/+/v7//v7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+//7//v7+//7+/v/9////+/n3/9aykP+nWhL/oEwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/ok0A/6FNAf+4eT//7N3O//7////9/v7//v7+//////////////////// + ////////8OLW/65mI/+nWBD/vIFK/7+GUP+/hlD/sm8v/6FPAf+yayv/xJBf/8WQYP/Djlz/rmUi/6BM + AP/TrIj//v7+//7+/v/+/v7//v/+//7+/v/+/v7//v7+///////z6d//sm4v/59LAP+iTwL/zJ91//v6 + +P/9/f7//f39//39/f/+/v7//v7+///////////////////////////////////////+//7//////+7h + 1P+8gEn/ok4D/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BN + AP+wain/5c+6//39/f/+/v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7//v/+/v7//f7+//39/P/cvaD/qV0X/6BM + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+iTgH/uHk+/+zd + zf///////f/+//3+/v/+///////////////////////////////v4dT/rGIe/7d4Pf/17eb/+vby//r3 + 8//Ztpf/o1IG/8yfdf/8+/n//Pr5//r18f/EkF//oEwA/9Cog//9/f3//v/+//7////v4tf/062J/8+l + ff/PpX7/z6V+/86kfP+xair/oEwA/6VTCP/Bilf/z6Z+/8+lff/PpX3/z6V9/+LJsv/9/fz///////// + //////////////////////////////7+/v/9/v7//v///+/i1v+9g0z/ok4C/6FNAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+2dDj/69rK//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////7///7+/v/+/v//5M23/65mIv+hTAD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/ok4B/7l6QP/r2sr//v////7+/v/9/v7//v7+///+/v////////////// + /////////////+/h1P+sYh3/uXxC//r39P///////////92+of+kUgf/zqJ5//7////+////+/r4/8WT + Y/+gTAD/0aiD//79/f////7//v///9azkv+kVAn/oU4A/6FOAf+hTgH/ok4B/6JOAf+iTgD/oU4B/6JO + Af+iTgH/ok4B/6JOAf+gTAD/vH9H//v49f///////////////////////////////////////v7+//3+ + /v/9/v7//////+/j1v+9g03/ok8D/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FNAf+8gEn/8ubc//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////v////7////+/////////+3bzP+1czb/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FOAf+5e0H/69zN//7/ + /v/+//7//v7+//7+///+/v7//v//////////////////////////////7+HU/6xiHf+5fEL/+vf0//// + ////////3b6i/6NSBv/Ponr////////////8+/n/xpNk/6BMAP/QqIP//f39//7//v/+////7+HU/9Kq + hv/No3v/zaN7/86je//PpHz/voRN/6JOAP+zbi7/zaB3/8+kfP/PpHv/z6R7/8+ke//iybL//fz8//// + /////////////////////////////////////////v7+//7+/v/+//7//v////Dk1/++hE7/ok8D/6FN + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU0A/6JPAv/EkF//+PLs//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v/+/v7//f7+//7////y6N//vYNN/6JOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6BNAP+hTQH/unxD/+3f0f/+/////v7+//7+/v////////////////////////////// + /////////v7+//7////u4dT/rWMf/7FsK//hx67/5c+6/+bPu//LnHH/olAE/76ETv/fxKr/4MSr/93A + pf+4eT//oE0A/9Gqhf/+/f3//v7+//3+/v/+/////v7+//3+/v/+/v7//v7+///////bvaD/ok4B/8WQ + YP/79/T////////////+//7//v79//7+/v/+/v7///////////////////////////////////////// + ///////////////////+/v7///////Hm3P/AiFX/olAE/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6NSB//Oonn/+vfz//7////+/v////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////v7+//7+/v/+////+fTv/8mabv+jUQX/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU4B/7p7Qf/u39H//v////7+ + /v/9/v7//v7+///////////////////////////////////////+//7//v////Lp3/+2dDf/oU4B/6dY + D/+oWRD/p1kQ/6RTCf+iTQD/ok8D/6VTCP+lUwn/pFMJ/6FPAv+kVAn/27ue///////+/v7//v7+//7+ + /v/+/v7//Pr4//v49f/7+PX//Pr4/9q5mv+hTgD/w41c//jx7P/8+ff//Pn2//z59//9/fz//v7+//7+ + /v////////////////////////////////////////////////////////////7+/v/+/v7///////Lo + 3v/Ci1j/o1AE/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6ha + Ev/YtpX//Pr5//7///////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v7//v7+//39/P/ZtpX/plgP/6FNAP+iTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAf+5fEL/7N3N//7////+/v7//v7+//7+/v/+//7///////////////////////// + //////////////7//v/+/v7//Pv5/+HHrv/GlGX/woxa/8KMWv/CjFr/tnU5/6JPA/+xbS3/w41b/8KM + Wv/Djl3/xJFh/9GphP/06+P//v////7+/v/+/v7//v///+rZyP/Gk2b/w45c/8ONXf/Dj17/tnY6/6FN + AP+uZiP/wYtZ/8OOXf/Djl3/w49e/97Bp//8+/r//v7+//////////////////////////////////// + /////////////////////////v7+//7//v/+/v7///////Pp3//Ci1j/o1EF/6FNAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/65lIv/jyrP//v7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7+/v//////6NTB/65lIv+gTQD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgH/uXtC/+vczf/+/////v7+//7+ + /v///v///v/+/////////////////////////////////////////////v///////v///////v79//v5 + 9v/69/P/+/f0//v49v/auJn/o1EG/82heP/7+PX/+/f0//v49P/7+PX//fz6///////+/v7//v7+//7+ + /v/+////2LeX/6RTCP+iTwP/ok8D/6JQA/+iUQT/o1IG/6NRBf+iUAP/olAD/6JQA/+iTwH/xpNk//r3 + 9P/+/v///////////////////////////////////////////////////////////////////v/+//7/ + //////////////Pp3//DjFv/o1EF/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU0A/7V0N//u3tH///////7+///+//7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////Pp3/+6fkb/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTQD/oU4B/7l7Qv/t3tD//v////7+/v/+/v7///////////////////////////////////////// + /////////////////////////////////////////////////////////////+nWxf+8f0b/4MSr//// + ///////////////////////////////////+/v7//v7+//7////27uf/4Mav/97Bpv/ewaf/38Gn/9/C + p//fwqf/38Kn/9/Cp//fwqf/38Kn/+DDqf/w4tb//f39//7+/v////////////////////////////// + //////////////////////////////////////////////7//v/+/v7//v////Tr4v/EkGD/o1EG/6FN + AP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+iTQD/oU0A/7+HUv/27+j//v////7+ + /v////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////69/T/zJ50/6NRBf+hTQD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAv+6fEP/7d/S//7////+/v7//v7+//7/ + /v/+//7///////////////////////////////////////////////////////////////////////// + ///////////////////+/////Pz7//fx6//8+vn///////////////////////////////////////7/ + /v/+/v7//v7+//////////////////////////////////////////////////////////////////// + ///+/v7//v////7///////////////////////////////////////////////////////////////// + //////////7+//7+/v/+/v7//v////Xt5f/Gk2T/pFEH/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+gTQD/oU0A/6FOAP+hTQD/o1EF/82hef/69/T//v////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+/9/Dqf+qXhj/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTwL/un5G/+3f0f/+/////v////7+/v/+/v7//v/+//////////////////////////////////// + /////////////////////////////////////////////////////////////////v/+//7///////7/ + /v///////////////////////////////////////v7+//7//v/+/v7//v7///7//v/+//7//v7+//7/ + ///////////////////////////////////+//7///7+//7+/v/+/v7///////////////////////// + ///////////////////////////////////////////////////+//7//v7+//7+/v/+/v7///////Xu + 5v/Gk2T/pFIH/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BOAP+hTQD/oU4A/6FOAP+hTQD/qFwU/9y8 + oP/9/fz//v////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+//7//v/+//7////w49j/t3Y6/6FNAP+iTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+gTQD/oU4B/7p+Rv/s3tD//v////7////+/v////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7///////Xt5v/GlWf/pFIH/6FNAP+hTQD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/smwt/+nXxf/+/////v7+//7+/v///v7///////// + //////////////////////////////////////////////////////////////////////////////7/ + /v/+////+/j1/8mabv+iTwL/ok0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FO + Af+6fkX/7t/S//7////+/v7//v7+//7///////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v/9/v7//v////bu5//ImGv/pFMJ/6FNAP+iTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTQD/voRO//Tr5P/+/////f7+//7+/v////////////////////////////////////////////// + /////////////////////////////////////////v/+//7////gxqz/p1oS/6FNAP+hTQD/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgH/un5G/+/i1v///////v7+//7+/v/+/v7//v/+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////7///7+/v/+/v7///////fx6//Km3D/pVQK/6FN + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU4A/6FNAP+jUQX/zqN7//v59//+/////f/+//// + ///////////////////////////////////////////////////////////////////+/////v////7+ + /v/+////8uje/7l5Pv+hTAD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU8C/7p+ + Rf/t39H////////+/v/+/v7//v/////////+//7///////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//////////////7+//// + /v/+/v7//v7+//7+/////////////////////v7//fz7//v28//38ev/9u7n//bt5f/27+j/+fPt//v4 + 9v/+/fz//v/+/////////////v////7+/////v7////////+///+/v7//v7+//7//v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v/+/////v////jy7f/LnHH/pVQK/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FNAP+pXBb/4cev//7////+//7///////////////////////////////////////// + //////////////////////////////3//v/+/v7//v////v69//PpHz/pFIG/6JOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FOAf+7fkb/7N7Q//3////+/v///v7+//7///////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/v7////////////+//7//v7+//7//////////f38//fw6v/r2sr/38Gn/9Gp + hP/Hlmj/wYhU/7yASP+5e0L/uHpA/7l8Q/+9gkz/woxZ/8mabv/Ur4z/4smx/+/g0//69fH//v7+//// + ///+/////v7+//7+/v/+/v7//v7+//////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v7///////fx + 6//LnnP/pVUL/6BNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FMAP+3dTn/8OTY//// + /////////////////////////////////////////////////////////////////////////v7+//7+ + /v/+////5tC8/6xjH/+gTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgH/u31F/+7e + 0f/+/////v7+//7+/v/+/v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/f3/9e3l/+LIsf/LnHL/uHk+/6thHP+kUwn/oU4C/6BLAP+gSwD/oUwA/6JNAP+hTgD/oU0A/6FL + AP+fSgD/oEwA/6NQBP+mVw3/r2cl/7yBSv/RqIP/6NTC//j08P/+/v7//v////7+/v/+/v7///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v////7+/v/+/v7///////fx7P/MoHb/plUL/6FNAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6JQBP/JmW3/+vby//////////////////////////////////// + ///////////////////////////////////+/v7//v////bv6f+/h1P/oE0A/6BNAP+hTQD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU8B/7uASf/v4tb//v////7+/v/+//7///////7+/v////7///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////7+Pb/69vM/9Cngf+0cjT/pVUK/6BMAP+hTQH/pVYN/61k + IP+4eD3/wYpX/8mZbf/PpX7/062J/9Wvi//Tq4b/zqN6/8eVZ/+/hlH/tHI2/6tfGv+kUwj/oEwA/6FM + AP+oWxP/u39I/9i2l//x5tv//Pz7//7////+//////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/////v7+//7/ + /v/+/v7///////j07//PpHz/pVcN/6BNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oE0A/6ha + E//dv6T//v79//////////////////////////////////////////////////////////////////7+ + /v/9/f3/2bia/6VWDf+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU0A/6JPAv+8gEn/7+PW//// + ///+/v7//v7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7+/v/9/v7//f7+///////9+/n/6tnI/8qb + b/+uZiP/oU0C/6FNAf+pXRb/untB/82gd//gxKv/7uDT//fv6P/8+vf///////////////////////// + /////////v7+//v38//07OP/69nJ/9u6nP/Hlmn/tXI0/6ZWDf+gSwD/o1EH/7RxNP/Tron/8ufd//7+ + /f///////v7+//7+/v////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+/////v////n18f/PpX7/plYN/6FN + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oE0A/7Z1OP/w49f//v////7+/v///v////////// + //////////////////////////////////////////////Hk2f+0cTT/oEwA/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+jTgL/vYFJ/+7g0////////v7+//7+/v/+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v////3+/v/+/v7/8+nf/9Gog/+vaCb/oU0C/6JOA/+wain/y51y/+XOuP/27eb//fz7//// + //////////////////////////////////////////////////////////////////////////////v5 + 9//y593/3sGm/8KNW/+rYBr/oEwA/6RRB/+3dzz/3L2f//jz7v/+/////v////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v/+/v7///////n18P/Qpn//p1cP/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/olAE/8yfdf/8+ff//v7///7///////////////////////////////////////////////// + ///9/Pv/zqN6/6JPAv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4B/7yASP/u4dP//v////7/ + /v/+/v7//v7+//7///////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////Pv6/+PLtP+6e0L/o1EH/6FM + Af+vaSf/0aeB/+7f0v/8+vj///////7////+/////v7+//7//v////////////////////////////// + ///////////////////////////+//7+/v/+/v7//v7+///////+////+fXx/+fTwP/HlWf/qV0W/59L + AP+nWBD/xZBf/+3f0f/+/v7///////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//7+/v/9/v7//v////n1 + 8P/QqIL/p1gP/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+gTQD/ql4Y/+XOuf/+/////v////// + /////////////////////////v7+//7+/v/+/v7//////+jVw/+sYx//oEwA/6FOAP+hTgD/oU4A/6FO + AP+hTQD/oU4A/6FPAf+8gUr/8OPX//7////+/v7//v7+//7+/v/+//////////////////////////// + /////////////////////////////////////////////////////////////////////////v////7+ + /v/+/v////////jy7f/SqoX/ql8Y/6BLAP+pXBX/yptu/+/g0//9/Pv///////7////+/v7//v////7/ + /v/+/v7//////////////////v///////////////////////////////v////7+/v/+//7///7///7+ + ///+/v7//v7+//7+/v////////////v59//m0b3/voRO/6VUCv+hTQH/sW0t/+DFq//9+vj//v////7+ + /v////7///////////////////////////////////////////////////////////////////////// + /////////////////////v7//v7+//7//v/+/v7//v////r28//TrIf/qFkR/6FNAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTAD/vYNO//fx7P///////v7///7+/v////7////////////+/v7//v7+//7/ + ///59O//xI9d/6FNAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FNAP+iTgL/vIBI//Dj1//////////+//7+ + /v////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v///v7+//7////z6eD/xpVm/6VSCP+iTgP/t3Y6/+HF + rP/8+ff//v////7////////////////////////////////////+//////7///7+/v/+/v///v7+//// + /v////////7////+/v/+/v7//v7+//7+/v///////////////////////////////////v7//v7///// + ///38Or/1LCN/65mJP+gTAD/ql4Y/9WvjP/59O///v/////+//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /v/+/v7//v////r49f/Urov/p1oR/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+lVgz/2rmb//7+ + /v/+/v///v7+//7+/v////////////7////+/v7//v///+DFrP+pXBX/oU0A/6JNAP+hTgD/oU4A/6FO + AP+hTgD/ok8C/72BSf/u4dP//////////v/+/v7//v7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v/+////8OPX/8CIVP+iUAT/pFMK/8SQX//v4dT//v7+//7+/v/9/v7//v////////////////////// + //////////////7+///+/////////////////////v////7////////////////////+/////v////// + ///////////////////////////////+///+/v7//v/+//7////9+/r/5s+7/7l6QP+hTQH/p1gQ/86j + ev/38uz///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////+//7+/v/+/v7//v////r49P/Ur4v/qFsT/6FM + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BNAP+3djv/8ebc///////+/v7//////////////////v/+//7/ + ///17ub/vYJM/6FNAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAf+8gEn/7uDS//7////+/v7//v7+//7+ + /v/+//7///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////Dl2f++hE//ok4C/6ZWDf/Oo3z/9vDp//7/ + ///+/v7//v7+//7+/v/+//7//////////////////////////////////fv6//Ts5P/r2sn/48my/9u7 + nf/Xs5L/1rOR/9i4mf/fxKv/6NTB//Hm2//7+PX//////////////////////////////////v/+//3+ + /v/+/v7//v7+//7+////////8OPX/8CIVP+iTgP/pVQL/8yfdv/59fD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////v///v7+//7+/v/+/v7//v////r39P/VsY3/qVwU/6BNAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6VT + CP/Urov//fz8//7+/v/+//7////////////+//7//f39/9m4mv+lVgz/oU0A/6FNAP+hTQD/oU0A/6FO + AP+iTgH/vIBJ/+/i1f///////v7+//7+/v///v////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v7//v/+//// + ///06+L/v4dS/6FOAf+nWBH/06yI//r49P/+/////v/+//7+///+/v7//v/+//7+/v/+//7//v////// + ///8+ff/7+LV/9q5m//DjVr/s3Ax/6pfGP+lVAr/o1IG/6NRBf+jUQX/o1IG/6RTCP+oWhL/r2oo/7yB + Sv/Tq4b/6dbE//j07//+/v7//v////7+/v/+/v7//v7+//7+/v/+/v7//v////7//v//////9Ovj/8WQ + YP+jUQX/pFMJ/9CmgP/7+PX//v////7+//////////////////////////////////////////////// + ///////////////////////////////////////////////////+/v///v/+///////+/v7//v////v5 + 9v/XtJP/qV0W/6FNAP+hTgD/oU0A/6FOAP+hTgD/oEwA/7RyNf/w5Nn//v////3+/v////////////7/ + ///y6N7/tnU5/6BMAP+hTgD/oU4A/6FOAP+hTgD/oU8C/7x/SP/w49j///////7+/v/+/v7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7+/v/+////+PPu/8eWZ/+iTgL/p1kQ/9OsiP/7+fX//v7///7+ + /v////7////////////+/v7//v/+//7////69vP/5tC8/8iWaf+vZyT/o1AE/6BMAP+gTAD/oE0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+gTAD/oEwA/6FNAf+pXRb/voVP/92/o//17uf//v7///7/ + /v/+/v7//v7+//7+/v//////////////////////9ezk/8SQX/+iUAT/p1gQ/9i2lv/8+/r//v7///// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+//7//v////z6+P/Zt5j/qV0X/6FMAP+hTgD/oU4A/6FO + AP+hTQD/o1IH/9axj//9/fz//v7//////////////v7//9axj/+jUQX/oU0A/6FOAP+hTgD/oU4A/6JP + Av+8gEn/7+HU//7////+/v7//v7+//7+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////7+//z6 + +P/Ur4v/plUL/6VTCf/NoXj/+fXx//7////+/v7//f7+//7+/v/////////////////+/fz/7NzM/8eW + aP+qYBr/oU0B/6FMAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU0A/6FNAP+hTAD/plcN/72CS//iybH/+vf0//7////+/v7//v/+///////////////////+ + /v/+////8ujd/76ETv+hTQD/r2Ui/+TNt//+//7///////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7+//3+ + /v/+/v7//v////z6+P/Yt5j/ql8Z/6FNAP+hTgD/oU4A/6FOAP+gTAD/t3g9//Xt5P////////////// + ///07OT/tXQ3/6BMAP+hTgD/oU4A/6FOAP+hTgH/u39H/+7g0//+/////v7+//7+/v/+/v7//v/+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7////+////5M64/61kIP+hTQD/woxa//bu6P/+/////f/+//7/ + /v/+/v7//v7+////////////+vby/9m5mv+ybS3/ok8C/6FNAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU0A/6FOAP+hTQD/oUwA/6pe + Gf/MnnT/8+nf//7////+/v///////////////////v/+//7+///+////7N3O/7NvMf+hSwD/untC//Lm + 3P////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//v7+//7+///+/v///v////z59//auJn/q2Aa/6FN + AP+hTgD/oU4A/6FNAP+lVgz/4MWr///////+/v7//v///9u8nv+kVAn/oU0A/6JOAP+hTQD/oU4B/7t9 + Rf/t39H//f////7+/v/+/v7///////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//7+/v/+/v7//v////Tr + 4v+7gEj/oEsA/7NwMf/u4dT//v////7+/v/9/v7//v7+//7+/v/+/v7//v////Xt5v/KnHH/p1gQ/6BN + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oE0A/6NRBf+8gEj/7NvL//7+/v/+/v7//v7+//7+ + /v/+/v7/////////////////4MWs/6lbFP+iTwP/zaB3//v59v////7//v7+//7//v////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/v7//v7///z6+P/cu53/rGAb/6BNAP+hTgD/oU4A/6BMAP/FkmL/+/n3//7/ + ///59PD/v4ZR/6FMAP+hTgD/ok0A/6FOAP+5fEL/7+HU//7////+/v7//v7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+//7+/v/8+/r/0qyI/6NRBv+nWBD/3sKn//7////9/v7//v7+//7+ + /v/+//7//v7+//7////z6eD/wotY/6JPBP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FMAP+zbzD/59O///3+/f/+//7//v7+//3+/v/////////////////8+ff/zaF4/6JQ + BP+qXhf/5c65//7////+/v7//v7+//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7//v/+/v7//v////38 + +//dv6T/rGIe/6FMAP+hTgD/oUwA/69pJ//v4tX//////+vayv+tZCD/oUwA/6FNAP+hTgH/t3k//+3d + zv/+/////v7///7+/v/+/v7//v/+//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7+///+/v7//v///+3f + 0f+wain/oU0A/8aTZP/69vL//v/////+/v///v7//v7+//7+/v/+////8+ri/8KMWv+iTwP/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FMAP+zcDL/6NPB//7+ + /v/+/v7//v7+///////////////////////x5dn/t3Y6/6BLAP/Ah1L/+fTv///////+//7///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//7+/v/+/v7//v////38+//dv6P/rWMg/6BNAP+hTQD/pVcN/9y9 + oP/+////2rqb/6RTCP+hTQD/oU0A/7Z1OP/q2cj//v////3+///+/v///v/////////+//7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+//7+/v/9/Pv/zaF4/6FNAP+uZiP/6tfG///////+///////+//7+ + ///+/v7//v////fy7f/JmGv/o1IG/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+4eD7/7uDS//7////+//7///////////////////////79 + /f/auZr/plYM/6dYD//hxqz//v////7+/v////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+//7///7+//// + /////v7//v7+//z7+v/ewaX/rmUh/6FNAP+iTwP/yptv//z6+P/LnXP/ok8B/6BNAP+qXxn/4ciw//3+ + /v/9/v7//v7+//////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v////////Di + 1v+vaCb/oU4B/8uedf/7+ff//v////////////////////7////8+/r/1rKQ/6ZWDv+hTQD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JP + Av/DjVv/9/Dr//////////////////////////7//v////Xt5f+6fkX/oUwA/8GIVP/59O////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7////+/v7//v////38+v/dwKT/ql8Y/6FN + AP+5e0L/+vbz/8GKV/+hTAD/oU0A/8GKV//59fH//v////7+/v/+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7+/v/9/f3/06yJ/6JPAv+tZiL/6tnI//7////+/v7///////// + /////////////+fTwP+tZSH/oE0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6RTCP/VsI7//f38//////////////////7+ + /v/+/v7//v///9q6nf+kVAn/ql4X/+XPuv////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////7///3+/v/+/v7//v////r39P/EkF//oU0A/61kIf/59fH/vYRO/6BLAP+jTgL/z6V9//39 + /f/+/v7//v7+//7+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////Xu + 5/+5ekD/oEwA/8aSYv/7+PX///7///7+/v/////////////////59O//wIlV/6FMAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTQD/oEwA/69oJv/t3s///////////////////v7+//7+/v//////8+ri/7RxNP+hTQD/y55z//37 + +P////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//3+/v/+/v7//f38/8+l + ff+hTgH/qVwV//r28v/AiFT/oEsA/6FOAP/Il2r/+/r4//7////+/v7//v7+///+//////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////5M24/6lcFP+mVg3/4MSr///////+/v7//v7+//7/ + /v/+/v7//////9/Eq/+mVw3/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/8qbcP/8+/n//v7+//7+ + /v/+//7//////////////v7/zqJ5/6BMAP+1dDf/8+je//7////+/v7//v/+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7////+/v7//v7+//7////48+7/wIdU/6FMAP+nWRH/+/n2/8iYa/+hTgH/oEwA/7Ft + Lf/t3c////////7+/v/9/v7//v////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////79 + /P/PpX3/oU4B/7NwMf/z6uH//////////v/+/v7//v7+//7////49PD/voVP/6BMAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6JNAP+hTAD/rmYj/+zbzP///////v7+//7////////////////////m0b3/p1gP/6da + Ef/iybL//v////7+/v/+//7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////3+/v/9/v7//v39/92+ + ov+pWxX/oE0A/6haEv/+/v7/17SV/6RSB/+hTQD/ok8C/8GIVf/y6N3//v////7+/v////7///////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////9/Hr/72BSv+gSwD/x5Vn//38+//+/v7//v7+//7+ + /v/+/v7//////+XPuv+oXBX/oUwA/6FOAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FOAP+jUAT/0KeA//38 + +//+/v7//v/+//////////////////bu5/+2dTj/oEwA/9Ckff/9/Pv//v7+//7+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7///39/P/iyLD/r2gl/6FNAP+hTQD/q18a///////p1sX/rGId/6FN + AP+iTQD/o1AD/8CHU//x5dr//v////7//////v7//v7+///+//////////////////////////////// + ///////////////////////////////////////////////////////////////////+///////+//// + ///u39H/rmck/6JPAv/bvJ/////////+/v/+//7//v7+//7+/v/9/Pv/zJ91/6JOAv+hTQD/oU4A/6FN + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+iTgD/oU4A/6FMAP+5eT//9Ozk//7//////////////////////////Pv6/8eX + aP+gSwD/voRP//jz7//+/////v/+//////////////////////////////////////////////////// + //////////////////////////////////////////////7+///+/v7//v////7////+/v3/4smy/69n + Jf+gTQD/oU4A/6JOAP+3dzz//v////jz7v++hE7/oUwA/6FNAP+hTQD/ok8C/7+FUP/w5Nj////////+ + /v/+/v7//v7+//////////////////////////////////////////////////////////////////// + //////////////////////////////7+/v/+//7//v///+LIsP+mWA//qFoS/+vayv////////////// + ///+/v7//v////Xs5f+5eT7/oEwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6pd + F//m0Lz///////7/////////////////////////2LeX/6JPAv+xayr/8uje///////+/v7//v////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+//7+/f/+/v7//v79/+TMtv+wair/oEwA/6FOAP+iTgD/pFIG/8+ke//+/v7//v///9m3 + mP+kUgf/oU0A/6FOAP+hTQD/ok8D/72DTP/v4dX//v////7+/v/+/v7///////////////////////// + /////////////////////////////////////////////////////////////////////////v////7+ + /v/+/v7/1bGP/6JPAv+ybi//9Ovh///////////////////+/v/+////6dbE/6tgG/+hTAD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/o1EF/9Wvjf/+/v7//v7+//////////////////// + ///lz7r/p1kQ/6ldFv/p1sT///////7+/v////////////////////////////////////////////// + ///////////////////////////////////////////////////+/v7//v7+//3+/v/kzLb/sWws/6FN + AP+hTgD/ok4A/6JNAP+rYBv/59TB//7+/v/+////8+rg/7RxM/+gTAD/oU4A/6FOAP+hTQD/ok8C/7t/ + Rv/t3tD//v/+//7+/v////////////////////////////////////////////////////////////// + ///////////////////////////////////+//7//v7+//z8+//Mn3T/n0oA/7yASP/69vL///////// + ///////////+//7////bu57/pVUK/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTAD/xpNk//v49f///////////////////////////+3ez/+uZyP/pVMI/+DEq////////v7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////7////9/f3/5Mu1/7FrKv+hTQD/oU0A/6FOAP+hTgD/oEsA/76FUP/59fD///////// + ///+//7/1bCO/6NRBf+gTQD/oU4A/6FOAP+hTgD/oU0A/7l6QP/s28v//v////7//v/+/v7//v/+//// + /v////////////////////////////////////////////////////////////////////////////// + /v//////+vj0/8SQYP+fSgD/w49e//z8+v///////////////////v///f79/8+lfv+iTgH/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BMAP+7fkb/9vDp//////////////////// + ////////8+rh/7RyNP+hTAD/2baX//////////7///////////////////////////////////////// + ///////////////////////////////////+/////v7+//7+/v/+/////v79/+PLtP+waSj/oU0A/6FO + AP+hTgD/oU4A/6FNAP+kUQb/2rqd///////////////////////y6N7/tXU5/6BMAP+hTgD/oU4A/6FO + AP+hTgD/oU0A/7h4Pf/r2sn//v////3+/v/9/v7//v////////////////////////////////////// + /////////////////////////////////////////v////7////49O//voZR/6BLAP/KnG///f38//// + ///////////////////8+vj/x5Zp/6BMAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oEwA/7NvMP/z6eD////////////////////////////48ev/uHk//59JAP/SrIj//v////7+ + /v////////////////////////////////////////////////////////////////////////////7/ + /v///v3//v7+//7+/f/kzLb/sGoo/6FNAP+hTgD/oU4A/6FOAP+hTgD/oEwA/7JuL//x5tv//v////// + /////////v////39/f/Ztpf/pVUL/6FNAP+hTgD/oU4A/6FOAP+hTQD/oU0A/7d2O//p1sX///7///7+ + /v/+//////////////////////////////////////////////////////////////////////////// + /////////v////fx7P+7gEj/oEwA/86je//+/v3///////////////////////r28//DjVv/oEwA/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+gTAD/r2ck//Hl2v////////////// + //////////////j07/+7f0f/n0kA/8+lfv/+/v7//v////////////////////////////////////// + /////////////////////////////////////////v/+//7+/v/9/v3/5My2/7JrLP+hTQD/oU0A/6FN + AP+hTgD/oU4A/6FOAP+iTwL/zqJ6//z6+f/+/v/////////////+//7//v////Xt5f+8gUn/oE0A/6FO + AP+hTgD/oU4A/6FNAP+hTQD/oU0A/7VzNv/o08H//v7+//7//v////////////////////////////// + //////////////////////////////////////////////7+/v/+////9/Hr/7p+Rf+hTAD/z6V+//7+ + /f//////////////////////+fXw/8GJV/+gSwD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6BMAP+uZSL/7+LW///////////////////////+////+fXw/72CS/+fSgD/zqJ6//7+ + /v/+//////////////////////////////////////////////////////////////////////////// + ///+/////f39/+TMtv+xayv/oU0A/6FOAP+iTQD/oU4A/6FOAP+hTgD/oE0A/61lIv/q2Mf//v////7+ + /v////////////7+///+/v7//v///+HHrv+pXRb/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7Ju + L//lz7r//v7+//7//v/+/v7//v7+//7//v////////////////////////////////////////////// + /////////v7+//7////48uz/vIBI/6BMAP/Oonr//v39///////////////////////59fH/wotZ/6BM + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oEwA/65mIv/w5Nj///////// + //////////////7////48+//u39H/59KAP/Ppn7//v7+//7+/v////////////////////////////// + /////////////////////////v////7+/v/+/v7//v7+//7+/f/ky7T/sGko/6BMAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FNAP+iTgH/yZhr//r49f/+/////v7+/////////////v/+//3+/v/+////+vXx/8aT + ZP+iTgH/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7FsK//lzrj//v79//7+///+/v7///////// + /////////////////////////////////////////////////////v///v////j07/+/hlH/oEsA/8qb + cP/+/Pz//////////////////v////v49f/GkmP/oEwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+gTAD/sWwq//Lo3v////////////////////////////fx6/+5eT//n0oA/9St + if////////7+///////////////////////////////////////////////////////+/////v7+//7+ + /v/9/v3/5M24/7FqKf+hTQD/oE0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oE0A/61jH//n07///v////7+ + /v/+/v7////////////+//7//f7+//3+/v//////69nJ/69mJf+gTAD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgH/oU0A/7FsK//jyrP//f39//7+/v/+//////////////////////////////////////////// + ///////////////+////////+vf1/8SRYP+fSgD/w45d//37+v///////////////////////fz7/8uf + df+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BMAP+4eD3/9e3m//// + ////////////////////////8+nf/7RxM/+hTAD/2beY///////+/v7///////////////////////// + //////////////////////////////7////+/////v79/+TMtf+ybCv/oU0A/6FNAP+hTQD/oU4A/6FO + AP+hTgD/oU4A/6FNAP+iTgH/x5Zn//r39P/+//7//v7+//7+/v////////////7////+/v7//v7+//7+ + ///9/fz/0quG/6NQBP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/7BpKP/hx67//f38//7/ + ///+/v7//v7+//7//v////////////////////////////////////////7+//7+///9/Pv/zJ91/59K + AP+7f0f/+vby//////////////////7////+/v7/1rOR/6RSBv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oEwA/8KLWP/59fD////////////////////////////t3c//rmYj/6VU + Cf/gxaz///////7+/v///////////////////////////////////////v7///7//v/+/v///v////7+ + /v/kzLb/smwr/6FNAP+hTgD/oU4A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oEwA/6xhHf/o1cL///////7/ + /v/+//7//v7+///////////////////////////////////////07OT/unxD/6BMAP+hTQD/oU4A/6FN + AP+hTgD/oU4A/6FOAP+hTQD/oUwA/65lIv/ewqj//Pz7//7////+/v7//v7+//////////////////// + //////////////////////////////7+/v/WspH/o1AD/7JtLf/z6eD///////////////////7+//// + ///kzbf/qFsT/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+iTwL/z6V9//38 + /P/+/v7//////////////////////+TNuP+mWA//qV0X/+nXxv///////v7+//////////////////// + ///////////////////+/v7//v79//7+///+/f3/48u0/7BqKP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FNAP+hTQD/y5xx//z7+f/+//////////////////////////////////////////// + /////////v7+//7////ix6//ql0Y/6BMAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTgD/oUwA/6xi + Hv/dwKT//fv6//7////+//7////////////////////////////////////////////+/v7//////+PK + s/+nWRD/qFkQ/+vZyP////////////////////////////Hl2v+zbi//oEwA/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6dYD//fxKv//v////7+///////////////////+////17WV/6JP + Af+xbCz/8unf///////+//7///////////////////////////////////////7+/v/+/v7//f7+/+TM + tf+waSj/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oEwA/7BoJ//t3tD///////7/ + ///////////////////////////////////////////////////+/v7//v////r28v/Kmm7/o08D/6FN + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTQD/oEwA/6xiHv/cvZ///Pr5//////////////////// + ////////////////////////////////////////7uDT/69oJv+iTwL/2rqc//////////////////// + /v/+/v//+vf0/8SQYP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+gTAD/sm4u/+/j + 2P/+/////v/+//////////////////z7+f/GlGb/oEsA/7+HUv/59PD///////////////////////// + /////////////////////////v////7+/f/kzLb/sWsq/6FNAP+hTQD/oU0A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+jUgb/0qqF//z8+v/+/v7///////////////////////////////////////// + /////////////////////////////+7g0/+0cjT/oEwA/6JNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU0A/6xhHP/auZv//Pr4//7////+/v7//v7+//////////////////////////////////// + ///38uz/vYJM/6BKAP/Gk2T//fz7//7+/v/+/v7//v7+//7+/v/+////3L2h/6VVCv+hTQD/ok4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP/HlGb/+/j2///+///+/v//////////////////9e3l/7Rz + Nv+hTQD/0KaA//38/P/+/v7//v7+//////////////////7////+/v7//v7+//7////+/v7/5My2/7Js + LP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oEwA/7h4Pf/y593//v////7+ + /v///v///////////////////////////////////////////////////////////////////v7+/92+ + ov+nWRH/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oUwA/6pdF//XtJP/+/n2//7/ + ///+/v7///////////////////////////////////////79/f/Qp4H/ok8C/7NuLv/y6N////////7+ + /v/+/v7//v7+///////z6eD/tXM1/6BMAP+hTgD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JNAP+hTQD/qFsT/+LK + sv/+/////v7+//7//v/////////////////lz7r/plYN/6haEv/jy7X///////7+/v/+/v7///////// + /////////v////7+/v/+/v///f39/+PLtP+xain/oU0A/6JNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU0A/6FMAP+oWxP/3sGm//7+/v/+//7//v7+//7///////////////////////////////// + ////////////////////////////////////////+fby/8aUZf+hTgH/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6JOAP+hTgD/oUwA/6haE//VsY//+/j1///////+//7///////////////////////// + /////////////+bQvP+qXhf/pVUL/97Cp////////v/+//7+/v/+/v7//v7+//7+/v/TrYn/olAE/6FO + AP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FMAP++hE//+PPu//7////+/v7//v7+/////////////v79/8ue + dP+gSwD/tnY6//Pq4P///////v7+//7////////////////////+/////v////7+/v/jy7T/sGko/6FM + AP+hTQD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/ok8C/8aTZP/59fD//v////7+ + /v/+/v7////////////////////////////////////////////////////////////////////////+ + /v//////7uDT/7NvL/+gTAD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6lb + E//Urov/+vbz///////+/v///v//////////////////////////////9vDp/7t9Rf+gTAD/w49e//r2 + 8//+/////v7///7//v///v7///////Ln3f+0cjT/oEwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JOAP+hTAD/qFkR/+LI + sP///////v7///7////+//7////////////z6N7/s28w/6FOAP/OoXj//Pv5//7///////////////// + ///+//7//v////7////+/v3/5My2/7FrKv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6BMAP+xayv/7NvM/////////v7//v7+//7+/v////////////////////////////// + /////////////////////////////////////////v7+///+/v/+/v7/27yf/6dYEP+hTQD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6haE//SqoX/+vby///////+/v7//v7+//// + //////////////7+///+/v//1bCO/6JPA/+sYx//6NbE///////+/v7//////////////////v7+/9q6 + m/+mVg3/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP/FkmP/+vbz//////////////////7//v/+/v7//v///9m3 + mP+kUwj/ql8a/+fRvv///////////////////////v/+//7+/v/+/v///v79/+TMtv+xbCz/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/ok4A/6JOAP+iTQD/pVQK/9m2l//9/f3//v////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v7//v7+//7////49fD/x5dq/6JQA/+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU0A/6dYD//Qpn//+fTw//7////+/v7//////////////////v/+///////w5Nn/sGoq/6FN + AP/Km2//+/j2//7////////////////////+////+PPu/8WSYf+iTwL/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+gTAD/tHEy/+7f + 0f///////////////////////v7+//7////06+P/uXtC/6BMAP/Ci1f/+fXw//////////////////// + ///+/v7//v7+//39/f/kzLX/sWsq/6FNAP+hTQD/ok4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FN + AP+hTgD/oU0A/6FNAP/DjVv/+PTv//7////+//7///////////////////////////////////////// + //////////////////////////////////////////////7+/v/+/v7//v7+///////w49b/t3c8/6FN + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6VVC//NoXj/+PPv//7/ + ///////////////////+/v7//v7+//39/f/Ppn//oU0B/6xjH//n08H///////////////////////7+ + ///+////7+LV/7h6P/+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oEwA/6xhHf/hxqz//v39//7+/v/////////////////+//7//f38/9e1 + lP+lVAr/qFoR/+PKsv/+/////v7+//////////////////7////+/v3/5Mu0/7FpKP+hTQD/oU4A/6FO + Af+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JNAP+gTAD/sm4v/+zdzv///////v7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7+/v/gxq3/q18Z/6BMAP+iTQD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6VVC//NoHb/9/Hr//7////+/v7//v7+//7+/v/+/v7//v///+/i + 1f+ybS7/oEwA/8OOXP/49O////////7+/v/+/v7//v7+//7//v/+/v7/59O//7JuLv+gTAD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6BMAP+oWxP/17OS//z6 + +P/+/v///v/+//7+/v/+/v7//v/+//7////v4dT/tXI0/6BLAP/Bi1j/+vby//7////+/v7//v7+//7+ + /v/+/////v79/+TMtv+xain/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oUwA/6hbFP/cvKD//v38//////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v////v5 + 9//PpX7/o1EG/6FNAP+hTQD/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6VV + C//KnHD/9/Dq//7////+/v7//v7+//7+/v/+/v7//fz7/9Wxj/+kUwj/plcN/9u8n//+/////v7+//7+ + /v/+/v7///7+//7+/v/+/f3/5M64/7BrKf+gTAD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+gTAD/p1gR/9Sui//69/T//v////7+/v/9/v7//v7+//7+/v/+////+vj1/8mb + b/+iTgL/q2Ab/+fSv////////v7+//7+/v/+/v7//v7+//7+/f/kzLb/sWwr/6FNAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+jUQX/ypxx//n18v////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7//v////bu5/++gkz/oUwA/6FNAP+hTQD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+iTQD/oE0A/6RUCf/ImGv/9u/p//7////+/v7//v7+//7+ + /v/+////9ezl/72DTf+gTAD/sm0t/+3ez////////v7+//7+/v/+/v7///7+///////+/v3/5tG8/7V0 + N/+hTgH/oE0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oE0A/6tgG//XtJT/+/j2//7+ + ///+/v7//f7+//3+/v/+/v7//f7+//7////ewab/qFoS/6NPBP/Po3z/+/r3//7+/v/+/v7//f7+//7+ + ///9/f3/5My2/7FsK/+hTQD/oU0A/6JOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oE0A/7x/Sf/z6OD//v/////+//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v/+/v7//////+vZyf+ybCz/oEwA/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FN + AP+hTgD/oU0A/6NRBf/FkmL/9e3m//7////+/v7//v7+//7+/v/+////59O//69nJP+hTQD/v4ZR//Tr + 4//+/////v7+//7+/v/+/////v7///7////+////7+HU/8OOXP+lVg3/oEwA/6FOAP+hTgD/oU4A/6BO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FN + AP+hTgD/oEwA/6JQBP+2dzv/4sqz//z8+v/+/////f7+//3+/v/+/v7//v7+//7+/v/+////6tjI/7Fq + Kv+gSwD/u4BI//Pp4P/9/////f7+//7+/v/+/v///v79/+PLtP+xaSj/oU0A/6FOAP+iTQD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BMAP+wair/6tnJ//7////+/v7///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////f38/9y+ov+pXRb/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6NQBf/EkWH/9Ori//7/ + ///+//7//v/+//7//v/9+/r/2LSU/6dXDv+jUQb/yZpu//jy7P/+//////7+//7+/v/+/v7///////// + ////////+PHs/9i1lf+zbzD/olAE/6BMAP+hTgD/oU0A/6FOAP+hTgD/oU4A/6JOAP+iTgD/oU4A/6FO + AP+hTgD/oU0A/6FOAP+hTgD/oU4A/6FNAP+hTQD/oEwA/6BNAf+rYRz/y51z//Dj2P/+/v7///////// + ///+/v///v7+//7+/v/+/v7//v///+/j1/+7fkb/oEwA/69pJ//m0r7//v/+//3+/v/9/v7//v/+//7+ + /f/kzLb/sGko/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JO + AP+gTQD/ql4Y/97Bpv/+/v7//v7+//7+/v/+//////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////+vbz/86ief+kUgj/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU0A/6NRBv/Djl3/8+jf//7////+/v7//v7+//7////59fH/yptw/6JP + BP+lVgz/z6V9//n18f///////v7+//7+/v///////////////////////f38/+7g0v/PpH3/sm0u/6RS + Bv+gSwD/oEwA/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU4A/6FNAP+gTQD/oEsA/6FO + Av+sYh3/xZFh/+XPu//7+PX///////7+/v/////////////+/v/+/v3//v7+//7////y6N7/wIlW/6JP + A/+pXBX/3Lyf//z8+//+/v///v7+//7//v/+/v3/5My2/7FsLP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6ZWDP/Sq4f/+vn2//7////+/v7//v7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7+/v/+////9ezk/8CI + Vf+hTgH/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTgD/oU0A/6NR + Bf/Cilf/8ufd//7////+//7//v7+///////17eX/woxZ/6JOAv+mVw3/z6V+//r28v////////7+//// + ///////////////////+//7//v////v7+f/v49f/2beX/7+GUf+tZCD/pFQJ/6FNAP+hTQD/oEwA/6BM + AP+gTAD/oEwA/6FMAP+hTQD/o1AE/6peF/+4eT7/0aiB/+nXxf/59fL//v7///7//v/+//7//v7+//// + /////////v7+//7+/v/+////8ufd/8GKV/+iTwT/pVQL/9Osh//7+ff//v////7+/v/+/////f39/+TL + s/+ybCv/oU0A/6FNAP+hTQH/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FN + AP+jUQX/yZhr//jy7P/+/////v7+//7+/v/+/v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//7+/v//////7uHU/7RzNv+gTAD/oU0A/6FNAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6JPA/++hE//8OXa//7////+/v7//v7+//7/ + ///z6N//wYpX/6JPA/+kUwn/yZtv//Ts5P/+//////7///7+/v/+/v7//v7+//7////+//////////// + //////7/+/j1//Dj1//hxq7/062J/8iWaf+/iFP/u4BI/7t/R/+9hE//xZFh/8+lfv/dvqH/69rK//nz + 7v/+/f3//////////////////v////7+/v///v7//v7+//7//v/+/////v7+/+3dz/+7gEj/oU0B/6ZW + Dv/Qpn//+vf0//7////+/v7//v////79/f/iyLD/r2gm/6FNAP+hTgD/ok4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/ok8C/8GLWP/17OT//v////7//v/+//////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v7//v7+//// + ////////5My3/61kIf+hTAD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTQD/oU0A/6FOAf+9hE3/7+LW//7////+/v7//v7+//7////y593/w45d/6NRBv+iUAb/wIhU/+vb + y//9/f3//v////7+/v/+//7//////////////////////////////////////////////v7//fv7//v5 + 9//7+PX/+/j1//v59v/9+/n//v3+/////////////////////////////////////////////v7///7+ + /v/+/v7//v////v59//iyLD/tXM2/6BMAP+pWxT/0qqF//n18f/+/////f7+//7+/v/+/v3/4smx/65n + Jf+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/ok4A/6FN + AP+7fkb/8eXa//7////9//7//v7///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7//v7+///////9+/r/2bma/6lcFf+gTAD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+iTQD/ok4A/6JPA/+8gUv/7t/R//// + ///+/v7//f7+//7////17OX/y5xw/6ZWDf+hTQL/tHAx/9u8nv/59fD///////7///////////////// + ///////////////////+///////////////+/////v7///7+//////////////7////+/v7//v////7+ + /v/////////////////////////////////+/v7//v/////////z6uH/z6aA/6xiHf+hSwD/rWMf/9m2 + lv/69/P//v7///7+/v/+/v7//f39/+LJs/+waSj/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTAD/tnY7/+vbzP/+/////v7+//7+/v/+/v7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7/ + ///+/v7//v7+//7////69/T/0KeA/6VUCv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU0A/6FOAP+hTQD/oU0A/6JPA/+7fkb/7d7Q///////+/v7//v7+//7////59PD/1rKR/61i + H/+gSwD/p1kQ/8WRYP/q2Mf//fz6/////////////////////////////////////v///v7//v7+//// + //////////7///7+///+/////v7+//7//v/+/////v////////////////////////////////////// + ///69/P/4ceu/7p8Q/+kUgf/oE0B/7VzNv/jy7T//Pv6//7////9/v7//v7///7+/f/jyrP/sWop/6FN + AP+hTgD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oUwA/7Rx + M//o1cP//f7+//7+/v/+/v7//v7+///+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//7////38uz/yZls/6NR + Bv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6JO + Af+4eT7/69vM//7////+/v7//v7+//7////8+/r/59K//72CS/+lUwn/oUwB/6xjH//LnXH/69nI//v4 + 9f/+//////////7////+/////v7+//7+/v/+//7////+//7+/v/+/v7//v7///7+/v/+/v7//v7+//7/ + /v/+/////v7+//7+/v////////////7+/v/48u3/48u0/8KLWP+nWRH/oUwA/6hbE//Il2n/7+PX//7+ + /v/9/v7//v7+//7+///+/fz/4smx/69pJ/+hTQD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTQD/oU4A/6FNAP+0cDL/59O///7+/v/+//7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+//7//v7+///////17uf/wo1b/6JPAv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+3djr/6tnI//7+/v/+/v7//v7+//7+ + /v/+////9u7n/9Wwjv+ybS3/oU8E/6BMAf+sYR3/xZFh/+DFrP/y593/+/j2//7+/v////////////// + //////////////7+///+/v///v7///7///////////////////////////79//r28v/v4NP/2reZ/76C + TP+oWRH/oEsA/6VUCv+6fUX/4MSq//r39P///////v7+//3+/v/9/v///v79/+LJsf+uZyX/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/tHAy/+fS + v//+/v7//f7+//7+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7+/v/+/v7//v7+//// + ///x5tv/vYJM/6JOAv+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FN + AP+hTQD/oU0A/6FOAf+2djn/6NXC//7+/v/+/v///v7+//7+///+/////fz8/+3e0P/Oo3v/smws/6NQ + Bv+gSwD/plcN/7RzNf/Hlmj/27mb/+nVw//z6d//+PLt//v49f/8+/r//v79//7+/v/9/fz//Pv5//r2 + 8//38ev/8OXZ/+TOuf/VsI7/woxa/7BqKf+kUgf/oEoA/6VWDP+4eT7/2LSU//Tr4//+/v7//v/////+ + /v/+/v7///7///39/f/jyrP/r2ko/6FMAP+hTgD/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU0A/7RxNP/n07///v7+//7+/v/+/v7//v7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//7+/v/+/v7//v/+//7////u39H/un1F/6FOAf+hTQD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FNAP+hTQD/oU0A/6JOAf+1czb/59PA//7+ + /v/+/v7//f7+//7+/v/+/v7///////z6+P/u4NP/1bCN/7l7Qv+nWRH/oEsB/59LAP+kUgf/q2Ab/7Nv + L/+8gEj/xZBf/8qab//NoXj/zaJ6/8ygdv/ImGv/wYta/7l7Qf+wayr/qVwV/6JQA/+gSwD/oU0C/6tg + G//BiVb/3b6i//Tq4f/+/f3///////7+///9/v7//v7+//7+///+/f3/4smy/7BqKf+hTQD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAf+3djv/6dXD//7+ + /f///v7//v7+//7+/v/+//7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+//7//v/t3s//un1D/6JOAf+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/ok4A/6FNAP+zbi//5tC8//7+/v/+/v7//v7+//////////////////// + ///9/fz/9u/p/+bQu//Qpn//un5G/61lIf+lVQv/oU4B/6FNAP+gTAD/oEsA/6BMAP+gTAD/oEsA/6BM + AP+hTAD/oU0A/6JPA/+oWhH/sGop/8GIVf/WspH/69vL//n18f/+/v7//////////////////v/+//7+ + /v/+/v///v39/+LJsv+vaSj/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FNAP+jUAT/vYJL/+3czf/+/v7//v7///7///////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7////9/v7//v7+//7////u39L/u35G/6JO + Af+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU0A/6FM + AP+wair/5M64//39/P/+/////////////////////v7+//7////+//////////7+/v/69vP/7+PX/+LJ + sv/Xs5L/zJ91/8SPX/++hU7/u35G/7p9Rf+7f0j/v4dT/8aTZP/PpHz/2rma/+bQvP/z6eD//Pn3///+ + /v/+/////v////7////////////////////+/v7//v7///39/P/ix7D/r2cl/6FNAP+hTgD/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+gTAD/pFQK/8eUZf/z6d///v////7+ + /v/9//7//v////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v/+/v7//v7+///////v4dT/voNM/6JPA/+hTQD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTgD/oU4A/6FMAP+xayv/4smy//39/P////////////// + ///+/v7//v7+//3+/v/+/v///v////7////+//////////7////9/fz//Pr4//v49f/69/P/+vbz//r3 + 9P/8+fb//Pv5//79/P/////////////////+/////v7+//7+/v/+//7//v////////////////////7/ + ///9/fz/4sev/69nJf+gTAD/oU4A/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oE0A/6lcFf/PpX7/9/Hr///////+/v7//v7+//7+/v/+//////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////+/////////////v7+//// + ///x5dr/w45d/6NRB/+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6BNAP+waSj/4cat//39/P/+/////v/+//7+/////////v////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/v7//v7+//7+/v///////f38/+HHr/+waCf/oE0A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+hTgD/oU0A/6FMAP+waSf/3Lyf//r38//+/////v7+//// + ///////////+//7+/v/+/v7///7+//7//v/+/////v39//fx6//t3c7/5My1/+HGrv/kzrj/7uDS//jz + 7////v7//v/////+/v/+/v7//v7+//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+//7//f7+//7////07eX/yptv/6VVDP+hTAD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+uZiP/38Sq//39 + /P/+/////v////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7+/v/+/v7//v7+//39 + /f/hx6//r2gm/6FNAP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU4A/6FN + AP+hTgL/uHk//+fSv//9/Pv//v////7+/v/+/////////////////////v7+//7+/v/+/v7//v79//Dk + 2f/SqoX/uXpA/69mJP+vZyX/r2gl/65nJP+vZyX/u39I/9e0k//06+L//v7+//7+///+/v7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7/ + ///+/v7//f7+//7////59fH/1a+O/6pfGf+gTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+iTgD/ok4A/6FNAP+sYRz/3sCm//37+v////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7///7+/v/9/fz/4cat/65mI/+hTAD/ok0A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/pVUL/8WRYf/y59z//v////7+/v/+/v7//v7+//7+ + ///////////////////+/v7//v////v59v/dvqL/s28x/69oJv/Gk2T/3Lyf/+fRvf/p1sX/5c66/9i2 + mP/Bilf/rWMg/7d4Pv/hybL//Pv5//7///////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////v////7+/v/+/v7//v7+//7////8+/n/3sKo/7Ju + Lv+hTgH/oU0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FM + AP+sYh7/272f//z6+P////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7//v7+/////////////f38/+LH + r/+uZiP/oEwA/6FNAP+iTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTQD/oU0A/6xj + Hv/TrYn/9/Ls///////+/v7////+//7+/v/+/v7///7///////////7////+//7////69/P/062K/61j + H//Djl3/6tnJ//z6+P////////////////////////////r39P/kzbj/u39I/61mI//bvJ///fv6//// + ///+//7////+/////v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//7//v/9/Pv/6dfG/7+FT/+jUQb/oUwA/6FNAP+hTQD/ok4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+rYh3/2bma//z69//+/////v7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v/+/v7//v7///39/P/hx6//r2gn/6BMAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FNAP+hTQD/oUwA/6JOAv+3dzz/4smx//z59/////////////////////////////// + /////////v7+//7//v/+//7//fz7/9m4mv+rYh7/zJ91//fx6//7+Pb/+PLt//z6+P////////////// + ///+/fz/+PPu//n18f/x5tv/w41b/65lIv/ix6///v7+//7+/v/+/v7//v/+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v7//v7+//7+ + /v/+////8+rh/82geP+nWhP/oEwA/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+iTgD/ok4A/6FNAP+qXxr/2LeX//z7+f/+//////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//7+/v/9/f3/4siw/69o + J/+gTQD/ok4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FMAP+lVAv/xZJh/+/j + 1v/+/v3//v///////////////////////////////////////v///v7//v7+//7////r2sr/sm0t/8SQ + YP/38ez//f38/9i2lv+8gEn/59K+//////////////////Ts5P/Ah1L/zqJ6//v59v/z6d//untD/7d2 + Ov/x5dv//v////7+/v/+//////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7+/v/+//7//v7+//7+/v/+/////Pn3/9/Dqf+0cTL/ok8C/6FN + AP+iTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+iTgD/oU4A/6FMAP+pWxT/17OS//v5 + 9/////////////////////////////////////////////////////////////////////////////// + ///////////////////+/////f38/+HHrf+uZyT/oEwA/6JNAP+iTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgH/r2gm/9i1lf/59fD//v////7//v////////////////////////////// + ///////////+//7+/v/+//7//Pr4/8qbb/+ybS3/7d3P//7////7+vn/ypxx/6RUC//fwqj///////// + ////////7+LV/6lcFf/Ailf/+vj1///////kzbf/rGEc/9OsiP/9/Pz//f///////v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7/ + ///+/////////////////////v7+/+7f0f/GlGX/qFoS/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6BNAP+oWxT/1bCO//r38////////v7+/////v////////////// + /////////////////////////////////////////v////7+/v/+//7//v////39/P/hx6//rmYj/6BM + AP+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FOAP+gTAD/pVQK/7+GUf/o1cL//fz7//7/ + /////////////////////////////////////////////////////////v7+//7////y59z/s24v/8ud + c//8+vj//v////z7+f/LnXL/pVYL/9/DqP/////////////////n0r//p1gQ/8WRYv/7+ff///////n1 + 8f+/h1L/unxC//Xu5////////v////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v////jz + 7//bvJ//tHAz/6JOAv+hTQD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FN + AP+pWxT/062J//r28v/+///////+//////////////////////////////////////////////////// + ///+/v7//v7+//7////+/fz/4cev/69oJv+gTAD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTQD/oU0A/61jH//Tq4f/9e3m//7////+/v////////////////////////////////////////// + ///////////////////+//7//////+XOuf+rYR3/4Mat///////+/v///Pv5/8udcv+lVQv/3L6h//v5 + 9//59vP/8+ri/8eWZ/+mVgz/2LWV//7+/f/+/////v7+/9WvjP+uZiP/69rK///////+/v7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7//v////79/P/t39L/yJdr/6hbE/+hTAD/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+iTgD/oU0A/6BNAP+oWhL/0qqF//r39P////////////// + /////////////////////////////////////////////////v/+/v///f38/+DFrP+vZyb/oU0A/6FO + Af+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oEwA/6RSCP+9gk3/5dC7//z6+P/+/////v/+//7+ + /v////////////////////////////////////////////////////////7///7//v//////27mb/69n + Jf/r2cn///////7////9+/n/y55z/6NRBf+3dzz/w41c/8CIVf+1cjX/qVwW/8mZbP/28On///////3+ + /v/+////4ciw/6thG//jy7X///////7+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7/ + ///+/////v/+//7////59/P/4ciw/7t+Rf+kUwj/oE0A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FO + AP+hTgD/oU4A/6FNAP+nVw3/0aeA//v28//////////+/////////////////////////////v////// + /v///////v////38/P/fxKr/rmUi/6FNAP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FOAP+hTgD/oE0A/6FO + Af+uZyX/1a+M//bu5//+/////v////7+/v/+/v7///7+//////////////////////////////////// + /////////////////////////v7+///////XspH/sWsq/+3f0P/+/////v7///37+f/LnnP/o1EF/7V0 + N//AiVb/v4ZQ/7Z0N/+vaCb/zJ5z//Pr4v/+/////v7+///////m0Lz/rGEb/+DFrP/+/////v7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7/////////9e7m/9Sw + jf+xbS3/o1AE/6FMAP+hTgD/oU0A/6FNAP+hTgD/oU4A/6FOAP+hTgD/ok4A/6FNAP+mVQz/0KR9//jz + 7v/+/////v7+///////////////////////+/v7//v7+//7////9/fz/4MSq/61kIf+gTAD/oU4A/6FO + AP+hTgD/oU4A/6FNAP+hTQD/oU0A/6FNAP+nWhL/w45d/+vZyf/+/fz///////////////////////// + ///////////////////////////////////////////////////////////////////+/v7//////9u6 + nP+uZyT/69nI//7////+/////fv6/8udc/+lVQv/3L6i//v6+P/6+PT/9/Hr/9Wwjf+mVg3/y5xx//v5 + 9//+/////v///+HIr/+rYRv/48u1//7////+/v////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v///f7+//3+/v/+/////fz7/+zez//LnnP/rWQg/6FNAf+hTAD/oU0A/6FO + AP+hTgD/oU4A/6FOAP+hTgD/oU4A/6FNAP+mVw3/zaF4//fy7P/+//////////////////////////7+ + /v/+/v///fz7/+DFrP+vZSP/okwA/6JOAP+hTgD/oU4A/6FOAP+hTgD/oU0A/6FMAP+kUgf/t3k+/9y/ + o//48+7///////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//7+/v//////5s+6/6xhHP/gxKz//v////7////9+/r/y51z/6VV + C//ewqj///////7/////////8eba/6leF/+3dzz/9e7n///////+/v3/066K/65mI//r28v///////7/ + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7+/v/+/v7//v7+//3+ + /v/9/v7//v////r49f/n1MH/xpNk/6lcFf+gTAD/oE0A/6FOAP+hTgD/oU4A/6JOAP+hTgD/oU0A/6FN + AP+mVg3/zJ50//fy7P///////////////////////v////39/P/fxav/rmck/6FMAP+iTgD/oU4A/6FO + AP+hTgD/oU4A/6BMAP+hTQL/sGkn/9Ksh//y593//f79//7+///+//7///////////////////////// + /////////////////////////////////////////////////////////////////////v///v7+//7/ + ///y6N7/s28x/8mabv/7+vf//v////37+v/LnXP/pVUM/9/Eqv////////////z6+P/fw6n/pVUL/7t+ + Rv/38ez///////j07/+9g03/un1D//bu5//+/////v////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7///7+/v/+/v7//v7///7//v////7//v/+//7////69vP/5M65/8KM + Wv+oXBX/oU0B/6BNAP+hTgD/oU4A/6JOAP+hTQD/oU4A/6FNAP+lUwn/yZpu//fw6v////////////// + ///8/Pr/38Sq/65mJP+hTQD/ok0A/6FOAP+iTQD/oU0A/6BNAP+hTgH/rGIc/8qabf/s3c7//fz7//// + ///+/////v7+//7///////////////////////////////////////////////////////////////// + ///////////////////////////////+///+//7//v////z7+f/Mn3X/sGop/+rZyP///////Pv5/8qc + cv+jUAb/voVQ/86ke//MnnT/wotY/6xiHf+pWxP/2LaW//79/P//////4sew/6pfGf/Urov//Pz7//7+ + /v/+//7///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7////+////+vbz/+XOuP/Ej17/q18a/6JOAv+gTAD/oU0A/6FN + AP+hTQD/oU0A/6BNAP+jUQb/wYhU/+PLtP/u4dT/6tjH/8+nf/+sYhz/oU0A/6FOAP+hTgD/oU4A/6FM + AP+iTgL/rGEc/8eWZ//q18X//Pr4///////+//////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+7e0P+zcDH/wYlV//Xt5f/9/fz/17ST/7d3O/+1dDj/tXM2/7Z1Of+6fUT/xpJj/+DE + q//7+PX///////Dk2P+3djv/t3g9//Hn3f/+/////v7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7+//7+ + /v/+//////////n28v/m0Lv/yJdp/65nJP+iUAT/oEwA/6FNAP+iTQD/oU4A/6FNAP+hTgH/qFoR/69o + Jv+rYBv/olAE/6FMAP+hTgD/oU0A/6BMAP+iTwP/rmQh/8eVZ//m0b3/+/f1///////+/v///v7+//7+ + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////f38/9y/ov+tZCD/x5Vn//Ts + 4//7+ff/+PPu//fy7f/48u3/+PPu//n18P/8+ff///////7//v/v4tX/v4ZR/69mJP/jyrT///7+//7+ + /v/+//7//v////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7//v7+//7+/v/+/v7//v/////////79/T/69nI/8+l + fv+0cTL/pFMI/6BLAP+hTQD/oU0A/6FNAP+hTQD/oUwA/6BMAP+hTQD/oU0A/6BMAP+jUQb/sm0t/82g + eP/p1sX/+vfz///////+/v///v7+//7+/v/+/v7//v7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+////+/n2/9i2lf+tZSH/voRO/+bQvP/69vP///////////////////////// + /v/48u3/4MSq/7d4Pf+vaCb/3cGl//38+/////////////7//v/+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////Pv6//Hm3P/auZv/voVQ/6thHP+kUwf/oU0A/6BM + AP+hTQD/oU0A/6FPAv+oWxP/u39H/9i1lP/w49j//Pr5//////////////////7////+/////v/+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7+/v/+/////Pr5/+HI + sP+3dzz/rWQh/8CIVP/Vr43/4cau/+TNt//gxKr/06qG/7yASP+sYh3/u4BI/+XQu//9/Pv//v////// + /////////v////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v/+//7//v////7////69/P/7+DS/96/o//Qpn7/yJdq/8WSZP/Jmm//1bCN/+jTwP/58+///v/+//7/ + ///+/v///v7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//7+/v/+/v7//v/+//Tr4//Yt5n/v4ZS/7NvL/+xayr/sGop/7Br + Kf+zbzH/wYxa/92/pP/38Or///////7+/v/+/v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////v7+//7+/v/+/v7//f/+//7///////////////7+ + /f/8+vn/+/n2//37+v////////////7////+/v7//v7+//7+/v/+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v7//v7+//7+ + /v/+/v7//v////7+/v/59fH/8OPX/+fSv//lzrj/6NTC//Hm2//69/T///////7////9/v7//v7+//7+ + /v//////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/YTDX202303TCP/Program.cs b/YTDX202303TCP/Program.cs new file mode 100644 index 0000000..33f726f --- /dev/null +++ b/YTDX202303TCP/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace YTDX202303TCP +{ + internal static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/YTDX202303TCP/Properties/AssemblyInfo.cs b/YTDX202303TCP/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..25e796a --- /dev/null +++ b/YTDX202303TCP/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("YTDX202303TCP")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("ZTT")] +[assembly: AssemblyProduct("YTDX202303TCP")] +[assembly: AssemblyCopyright("Copyright © ZTT 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("99eb89bc-a17c-48a3-8e8f-a62d84eb02d1")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/YTDX202303TCP/Properties/Resources.Designer.cs b/YTDX202303TCP/Properties/Resources.Designer.cs new file mode 100644 index 0000000..17edacd --- /dev/null +++ b/YTDX202303TCP/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace YTDX202303TCP.Properties +{ + + + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 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() + { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [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("YTDX202303TCP.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/YTDX202303TCP/Properties/Resources.resx b/YTDX202303TCP/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/YTDX202303TCP/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/YTDX202303TCP/Properties/Settings.Designer.cs b/YTDX202303TCP/Properties/Settings.Designer.cs new file mode 100644 index 0000000..f00f329 --- /dev/null +++ b/YTDX202303TCP/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// 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. +// +//------------------------------------------------------------------------------ + +namespace YTDX202303TCP.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; + } + } + } +} diff --git a/YTDX202303TCP/Properties/Settings.settings b/YTDX202303TCP/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/YTDX202303TCP/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/YTDX202303TCP/Sockets.cs b/YTDX202303TCP/Sockets.cs new file mode 100644 index 0000000..bfa57a9 --- /dev/null +++ b/YTDX202303TCP/Sockets.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Sockets; +using System.Net; +using System.Text; +using System.Threading.Tasks; + +namespace YTDX202303TCP +{ + public class Sockets + { + public delegate void PushSockets(Sockets sockets); + + /// + /// + /// + public Sockets() + { + + } + /// + /// 创建Sockets对象 + /// + /// Ip地址 + /// TcpClient + /// 承载客户端Socket的网络流 + public Sockets(IPEndPoint ip, TcpClient client, NetworkStream ns) + { + Ip = ip; + Client = client; + nStream = ns; + } + /// + /// 创建Sockets对象 + /// + /// 用户名 + /// 密码 + /// Ip地址 + /// TcpClient + /// 承载客户端Socket的网络流 + public Sockets(string name, string pass, IPEndPoint ip, TcpClient client, NetworkStream ns) + { + UserName = name; + Password = pass; + Ip = ip; + Client = client; + nStream = ns; + } + /// + /// 接收缓冲区 + /// + public byte[] RecBuffer = new byte[8 * 1024]; + /// + /// 发送缓冲区 + /// + public byte[] SendBuffer = new byte[8 * 1024]; + /// + /// 异步接收后包的大小 + /// + public int Offset { get; set; } + /// + /// 用户名 + /// + public string UserName { get; set; } + /// + /// 密码 + /// + public string Password { get; set; } + /// + /// 当前IP地址,端口号 + /// + public IPEndPoint Ip { get; set; } + /// + /// 客户端主通信程序 + /// + public TcpClient Client { get; set; } + /// + /// 承载客户端Socket的网络流 + /// + public NetworkStream nStream { get; set; } + /// + /// 发生异常时不为null + /// + public Exception ex { get; set; } + /// + /// 新客户端标识.如果推送器发现此标识为true,那么认为是客户端上线 仅服务端有效 + /// + public bool NewClientFlag { get; set; } + /// + /// 客户端退出标识.如果服务端发现此标识为true,那么认为客户端下线 + /// 客户端接收此标识时,认为客户端异常. + /// + public bool ClientDispose { get; set; } + + } + /// + /// Socket基类(抽象类) + /// 抽象3个方法,初始化Socket(含一个构造),停止,启动方法. + /// 此抽象类为TcpServer与TcpClient的基类,前者实现后者抽象方法 + /// + public abstract class SocketObject + { + public abstract void InitSocket(IPAddress ipaddress, int port); + public abstract void InitSocket(string ipaddress, int port); + public abstract void Start(); + public abstract void Stop(); + } +} diff --git a/YTDX202303TCP/YTDX202303TCP.csproj b/YTDX202303TCP/YTDX202303TCP.csproj new file mode 100644 index 0000000..7bfd0cc --- /dev/null +++ b/YTDX202303TCP/YTDX202303TCP.csproj @@ -0,0 +1,96 @@ + + + + + Debug + AnyCPU + {99EB89BC-A17C-48A3-8E8F-A62D84EB02D1} + WinExe + YTDX202303TCP + YTDX202303TCP + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + bitbug_favicon.ico + + + + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + Always + + + + \ No newline at end of file diff --git a/YTDX202303TCP/bitbug_favicon.ico b/YTDX202303TCP/bitbug_favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..74d528365b967308be503c4f37b961cd3c276848 GIT binary patch literal 67646 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 literal 0 HcmV?d00001 diff --git a/YTDX202303TCP/tools.cs b/YTDX202303TCP/tools.cs new file mode 100644 index 0000000..6ca83e8 --- /dev/null +++ b/YTDX202303TCP/tools.cs @@ -0,0 +1,223 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace YTDX202303TCP +{ + class tools + { + //获取当前设备的所有端口号 + public static string[] GetSerialPort() + { + string[] ports = null; + ports = System.IO.Ports.SerialPort.GetPortNames(); + return ports; + } + + + + /// 16进制原码字符串转字节数组 + /// + /// "AABBCC"或"AA BB CC"格式的字符串 + /// + public static byte[] ConvertHexStringToBytes(string hexString) + { + hexString = hexString.Replace(" ", ""); + if (hexString.Length % 2 != 0) + { + throw new ArgumentException("参数长度不正确"); + } + + byte[] returnBytes = new byte[hexString.Length / 2]; + for (int i = 0; i < returnBytes.Length; i++) + { + returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); + } + + return returnBytes; + } + + ///

+ /// //16转2方法 + /// + /// + /// + public static string HexString2BinString(string hexString) + { + try + { + string result = string.Empty; + foreach (char c in hexString) + { + int v = Convert.ToInt32(c.ToString(), 16); + int v2 = int.Parse(Convert.ToString(v, 2)); + // 去掉格式串中的空格,即可去掉每个4位二进制数之间的空格, + result += string.Format("{0:d4} ", v2); + } + return result; + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + throw; + } + + } + + + /// + /// 字节数组转16进制字符串 + /// + /// + /// + public static string byteToHexStr(byte[] bytes) + { + string returnStr = ""; + if (bytes != null) + { + for (int i = 0; i < bytes.Length; i++) + { + returnStr += bytes[i].ToString("X2"); + } + } + return returnStr; + } + + + public static string HexStringToString(string hs, Encoding encode) + { + StringBuilder strTemp = new StringBuilder(); + byte[] b = new byte[hs.Length / 2]; + for (int i = 0; i < hs.Length / 2; i++) + { + strTemp.Clear(); + strTemp.Append(hs.Substring(i * 2, 2)); + b[i] = Convert.ToByte(strTemp.ToString(), 16); + } + return encode.GetString(b); + } + + + /// + /// txt文档自动保存 + /// + /// + public static void AddLgoToTXT(string _file_name, string path, string logstring) + { + path = path + _file_name; + if (!System.IO.File.Exists(path)) + { + FileStream stream = System.IO.File.Create(path); + stream.Close(); + stream.Dispose(); + } + //using (StreamWriter writer = new StreamWriter(path, true)) + //{ + // writer.WriteLine(logstring); + //} + //[1]创建文件流 文件路径 和枚举类型的文件操作类型 + FileStream fs = new FileStream(path, FileMode.Append); + //[2]创建写入器 + StreamWriter sw = new StreamWriter(fs); + //[3]以流的方式写入数据 + //sw.Write(logstring.Trim()); + sw.Write(logstring); + //[4]关闭写入器 + sw.Close(); + //[5]关闭文件流 + fs.Close(); + } + + //十六进制转字符串 + public string ConvertHexToString(string HexValue, string separator = null) + { + HexValue = string.IsNullOrEmpty(separator) ? HexValue : HexValue.Replace(string.Empty, separator); + StringBuilder sbStrValue = new StringBuilder(); + while (HexValue.Length > 0) + { + sbStrValue.Append(Convert.ToChar(Convert.ToUInt32(HexValue.Substring(0, 2), 16)).ToString()); + HexValue = HexValue.Substring(2); + } + return sbStrValue.ToString(); + } + /// + /// 将传入的byte数组 从指定位置倒置 + /// + /// + /// + public static float bytetofloat(List b, int start) + { + return BitConverter.ToSingle(new byte[] { b[start + 3], b[start + 2], b[start + 1], b[start] }, 0); + } + + public static int bytetoint(List b, int start, int len) + { + string a = ""; + for (int i = 0; i < len; i++) + { + a += b[start + i].ToString("X2"); + } + return Convert.ToInt32(a, 16); + } + + public static int ByteToInt16(List b, int start, int len) + { + string a = ""; + for (int i = 0; i < len; i++) + { + a += b[start + i].ToString("X2"); + } + return Convert.ToInt16(a, 16); + } + + /// + /// 将一条十六进制字符串转换为ASCII + /// + /// 一条十六进制字符串 + /// 返回一条ASCII码 + public static string HexStringToASCII(string hexstring) + { + byte[] bt = HexStringToBinary(hexstring); + string lin = ""; + for (int i = 0; i < bt.Length; i++) + { + lin = lin + bt[i] + " "; + } + + + string[] ss = lin.Trim().Split(new char[] { ' ' }); + char[] c = new char[ss.Length]; + int a; + for (int i = 0; i < c.Length; i++) + { + a = Convert.ToInt32(ss[i]); + c[i] = Convert.ToChar(a); + } + + string b = new string(c); + return b; + } + + /**/ + /// + /// 16进制字符串转换为二进制数组 + /// + /// 用空格切割字符串 + /// 返回一个二进制字符串 + public static byte[] HexStringToBinary(string hexstring) + { + + string[] tmpary = hexstring.Trim().Split(' '); + byte[] buff = new byte[tmpary.Length]; + for (int i = 0; i < buff.Length; i++) + { + buff[i] = Convert.ToByte(tmpary[i], 16); + } + return buff; + } + } +} +