From 57719354d70269e309d659c7617d94776e74efd2 Mon Sep 17 00:00:00 2001 From: wixy Date: Mon, 1 Apr 2019 14:10:58 +0800 Subject: [PATCH] update --- .gitignore | 10 + .vs/Ultron.Ngrok/v15/.suo | Bin 91136 -> 161792 bytes Ultron.Ngrok.sln | 13 +- Ultron.Ngrok/Form/AboutBox.Designer.cs | 81 +--- Ultron.Ngrok/Form/AboutBox.cs | 1 - Ultron.Ngrok/Form/AboutBox.resx | 286 ------------ Ultron.Ngrok/Form/SettingForm.cs | 23 +- Ultron.Ngrok/FormMain.cs | 212 ++++++--- Ultron.Ngrok/Properties/Resources.Designer.cs | 14 +- Ultron.Ngrok/Properties/Resources.resx | 3 + Ultron.Ngrok/Resources/autoUpdate.exe | Bin 0 -> 46592 bytes Ultron.Ngrok/Ultron.Ngrok.csproj | 2 + Ultron.Ngrok/Utils/HttpUtils.cs | 102 +++++ Ultron.Update/App.config | 6 + Ultron.Update/Program.cs | 28 ++ Ultron.Update/Properties/AssemblyInfo.cs | 36 ++ .../Properties/Resources.Designer.cs | 71 +++ Ultron.Update/Properties/Resources.resx | 117 +++++ Ultron.Update/Properties/Settings.Designer.cs | 30 ++ Ultron.Update/Properties/Settings.settings | 7 + Ultron.Update/Ultron.Update.csproj | 88 ++++ Ultron.Update/UpdateForm.Designer.cs | 90 ++++ Ultron.Update/UpdateForm.cs | 142 ++++++ Ultron.Update/UpdateForm.resx | 408 ++++++++++++++++++ Ultron.Update/favicon.ico | Bin 0 -> 16958 bytes 25 files changed, 1362 insertions(+), 408 deletions(-) create mode 100644 .gitignore create mode 100644 Ultron.Ngrok/Resources/autoUpdate.exe create mode 100644 Ultron.Ngrok/Utils/HttpUtils.cs create mode 100644 Ultron.Update/App.config create mode 100644 Ultron.Update/Program.cs create mode 100644 Ultron.Update/Properties/AssemblyInfo.cs create mode 100644 Ultron.Update/Properties/Resources.Designer.cs create mode 100644 Ultron.Update/Properties/Resources.resx create mode 100644 Ultron.Update/Properties/Settings.Designer.cs create mode 100644 Ultron.Update/Properties/Settings.settings create mode 100644 Ultron.Update/Ultron.Update.csproj create mode 100644 Ultron.Update/UpdateForm.Designer.cs create mode 100644 Ultron.Update/UpdateForm.cs create mode 100644 Ultron.Update/UpdateForm.resx create mode 100644 Ultron.Update/favicon.ico diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..11a900b --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +################################################################################ +# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。 +################################################################################ + +/packages +/Ultron.Ngrok/bin +/Ultron.Ngrok/obj +/Ultron.Update/bin +/Ultron.Update/obj +/.vs/Ultron.Ngrok/v15/Server/sqlite3 diff --git a/.vs/Ultron.Ngrok/v15/.suo b/.vs/Ultron.Ngrok/v15/.suo index 8cd851e64ce0f1743c8317331dfeb05d2669f7bd..be6ac423b0525a1f2a1544859f72fca864106687 100644 GIT binary patch literal 161792 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 private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox)); this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.logoPictureBox = new System.Windows.Forms.PictureBox(); this.labelProductName = new System.Windows.Forms.Label(); this.labelVersion = new System.Windows.Forms.Label(); this.labelCopyright = new System.Windows.Forms.Label(); - this.textBoxDescription = new System.Windows.Forms.TextBox(); this.okButton = new System.Windows.Forms.Button(); this.tableLayoutPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); this.SuspendLayout(); // // tableLayoutPanel // - this.tableLayoutPanel.ColumnCount = 2; - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F)); - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67F)); - this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0); - this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0); - this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1); - this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2); - this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4); - this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5); + this.tableLayoutPanel.ColumnCount = 1; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.Controls.Add(this.labelProductName, 0, 0); + this.tableLayoutPanel.Controls.Add(this.labelVersion, 0, 1); + this.tableLayoutPanel.Controls.Add(this.labelCopyright, 0, 2); + this.tableLayoutPanel.Controls.Add(this.okButton, 0, 3); this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel.Location = new System.Drawing.Point(9, 8); this.tableLayoutPanel.Name = "tableLayoutPanel"; - this.tableLayoutPanel.RowCount = 6; - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.89362F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.31206F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.89362F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.382979F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 26.24113F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 24.11348F)); - this.tableLayoutPanel.Size = new System.Drawing.Size(417, 141); + this.tableLayoutPanel.RowCount = 4; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel.Size = new System.Drawing.Size(223, 100); this.tableLayoutPanel.TabIndex = 0; // - // logoPictureBox - // - this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image"))); - this.logoPictureBox.Location = new System.Drawing.Point(3, 3); - this.logoPictureBox.Name = "logoPictureBox"; - this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6); - this.logoPictureBox.Size = new System.Drawing.Size(131, 135); - this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.logoPictureBox.TabIndex = 12; - this.logoPictureBox.TabStop = false; - // // labelProductName // this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelProductName.Location = new System.Drawing.Point(143, 0); + this.labelProductName.Location = new System.Drawing.Point(6, 0); this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); this.labelProductName.MaximumSize = new System.Drawing.Size(0, 16); this.labelProductName.Name = "labelProductName"; - this.labelProductName.Size = new System.Drawing.Size(271, 16); + this.labelProductName.Size = new System.Drawing.Size(214, 16); this.labelProductName.TabIndex = 19; this.labelProductName.Text = "产品名称"; this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -90,11 +69,11 @@ // labelVersion // this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelVersion.Location = new System.Drawing.Point(143, 20); + this.labelVersion.Location = new System.Drawing.Point(6, 20); this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); this.labelVersion.MaximumSize = new System.Drawing.Size(0, 16); this.labelVersion.Name = "labelVersion"; - this.labelVersion.Size = new System.Drawing.Size(271, 16); + this.labelVersion.Size = new System.Drawing.Size(214, 16); this.labelVersion.TabIndex = 0; this.labelVersion.Text = "版本"; this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -102,36 +81,22 @@ // labelCopyright // this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelCopyright.Location = new System.Drawing.Point(143, 42); + this.labelCopyright.Location = new System.Drawing.Point(6, 39); this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 16); this.labelCopyright.Name = "labelCopyright"; - this.labelCopyright.Size = new System.Drawing.Size(271, 16); + this.labelCopyright.Size = new System.Drawing.Size(214, 16); this.labelCopyright.TabIndex = 21; this.labelCopyright.Text = "版权"; this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // - // textBoxDescription - // - this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBoxDescription.Location = new System.Drawing.Point(143, 73); - this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); - this.textBoxDescription.Multiline = true; - this.textBoxDescription.Name = "textBoxDescription"; - this.textBoxDescription.ReadOnly = true; - this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.textBoxDescription.Size = new System.Drawing.Size(271, 29); - this.textBoxDescription.TabIndex = 23; - this.textBoxDescription.TabStop = false; - this.textBoxDescription.Text = "说明"; - // // okButton // this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.okButton.Location = new System.Drawing.Point(339, 117); + this.okButton.Location = new System.Drawing.Point(145, 65); this.okButton.Name = "okButton"; - this.okButton.Size = new System.Drawing.Size(75, 21); + this.okButton.Size = new System.Drawing.Size(75, 25); this.okButton.TabIndex = 24; this.okButton.Text = "确定(&O)"; this.okButton.Click += new System.EventHandler(this.okButton_Click); @@ -141,7 +106,7 @@ this.AcceptButton = this.okButton; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(435, 157); + this.ClientSize = new System.Drawing.Size(241, 116); this.Controls.Add(this.tableLayoutPanel); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; @@ -153,8 +118,6 @@ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "AboutBox"; this.tableLayoutPanel.ResumeLayout(false); - this.tableLayoutPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); this.ResumeLayout(false); } @@ -162,11 +125,9 @@ #endregion private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; - private System.Windows.Forms.PictureBox logoPictureBox; private System.Windows.Forms.Label labelProductName; private System.Windows.Forms.Label labelVersion; private System.Windows.Forms.Label labelCopyright; - private System.Windows.Forms.TextBox textBoxDescription; private System.Windows.Forms.Button okButton; } } diff --git a/Ultron.Ngrok/Form/AboutBox.cs b/Ultron.Ngrok/Form/AboutBox.cs index 5b50bd7..929c687 100644 --- a/Ultron.Ngrok/Form/AboutBox.cs +++ b/Ultron.Ngrok/Form/AboutBox.cs @@ -18,7 +18,6 @@ namespace Ultron.Ngrok this.labelProductName.Text = AssemblyProduct; this.labelVersion.Text = String.Format("版本 {0}", AssemblyVersion); this.labelCopyright.Text = AssemblyCopyright; - this.textBoxDescription.Text = AssemblyDescription; } #region 程序集特性访问器 diff --git a/Ultron.Ngrok/Form/AboutBox.resx b/Ultron.Ngrok/Form/AboutBox.resx index 43d2af5..1af7de1 100644 --- a/Ultron.Ngrok/Form/AboutBox.resx +++ b/Ultron.Ngrok/Form/AboutBox.resx @@ -117,290 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 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 - - \ No newline at end of file diff --git a/Ultron.Ngrok/Form/SettingForm.cs b/Ultron.Ngrok/Form/SettingForm.cs index 492bb43..c3a2e1b 100644 --- a/Ultron.Ngrok/Form/SettingForm.cs +++ b/Ultron.Ngrok/Form/SettingForm.cs @@ -1,12 +1,10 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using System.Data; -using System.Drawing; using System.IO; using System.Linq; +using System.Reflection; using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; using Ultron.Ngrok.Model; using Ultron.Ngrok.Properties; @@ -54,7 +52,7 @@ namespace Ultron.Ngrok public void InitFile() { - string path = System.IO.Directory.GetCurrentDirectory(); + string path = Directory.GetCurrentDirectory(); string ngrokFile = string.Empty; if (Environment.Is64BitOperatingSystem)//判断是否为64位操作系统 { @@ -80,12 +78,20 @@ namespace Ultron.Ngrok } } + public string AssemblyVersion + { + get + { + return Assembly.GetExecutingAssembly().GetName().Version.ToString(); + } + } + /// /// 初始化配置文件 /// public void InitConfig() { - string path = System.IO.Directory.GetCurrentDirectory(); + string path = Directory.GetCurrentDirectory(); ConfigFile = path + @"\ngrok.cfg"; if (!File.Exists(ConfigFile)) @@ -97,6 +103,7 @@ namespace Ultron.Ngrok { ServerAddr = "ngrok.aaqbee.com:8083", TrustHostRootCerts = false, + Version = AssemblyVersion, Tunnels = new Dictionary() }; Tunnel httpTunnel = new Tunnel @@ -131,6 +138,12 @@ namespace Ultron.Ngrok var input = new StringReader(configText); var deserializer = new Deserializer(namingConvention: new CamelCaseNamingConvention()); ServerConfig = deserializer.Deserialize(input); + + if(ServerConfig.Version != AssemblyVersion) + { + ServerConfig.Version = AssemblyVersion; + SaveConfig(); + } } this.tunnelListBox.DisplayMember = "TunnelName"; diff --git a/Ultron.Ngrok/FormMain.cs b/Ultron.Ngrok/FormMain.cs index 9b2609c..4ce772a 100644 --- a/Ultron.Ngrok/FormMain.cs +++ b/Ultron.Ngrok/FormMain.cs @@ -1,45 +1,137 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; using System.Diagnostics; using System.Reflection; using System.Resources; using System.Threading; -using System.Text.RegularExpressions; -using System.IO; -using System.Net.NetworkInformation; -using YamlDotNet.Serialization; -using YamlDotNet.Serialization.NamingConventions; using Ultron.Ngrok.Utils; -using Ultron.Ngrok.Model; +using System.Net; +using System.IO; using Ultron.Ngrok.Properties; namespace Ultron.Ngrok { public partial class FormMain : Form { - CmdUtils cmd = new CmdUtils(); + #region 属性 - SettingForm setting; + /// + /// 命令行 + /// + public CmdUtils cmd { get; set; } + /// + /// 设置 + /// + public SettingForm setting { get; set; } + + /// + /// 数据集名称 + /// + public string AssemblyProduct + { + get + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyProductAttribute)attributes[0]).Product; + } + } + + /// + /// 数据集版本 + /// + public string AssemblyVersion + { + get + { + return Assembly.GetExecutingAssembly().GetName().Version.ToString(); + } + } + + #endregion + + #region 初始化 + + /// + /// 构造 + /// public FormMain() { //引用资源处理 AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; - //初始化 + //初始化界面 InitializeComponent(); //初始化配置 InitSetting(); } + /// + /// 窗体Load + /// + /// + /// + private void FormMain_Load(object sender, EventArgs e) + { + //进程检测 + CheckProcessAndKill(setting.ExeFile); + + //初始化CMD + new Thread(new ThreadStart(InitCmd)).Start(); + + //检查更新 + new Thread(new ThreadStart(CheckUpdateAsync)).Start(); + } + + #endregion + + #region 事件 + + private void startBtn_Click(object sender, EventArgs e) + { + //网络检测 + NetworkUtils.CheckServeStatus(this); + cmd.SendMsg(setting.ExecuteCommand); + + startBtn.Enabled = false; + endBtn.Enabled = true; + } + + private void endBtn_Click(object sender, EventArgs e) + { + CheckProcessAndKill(setting.ExeFile); + cmd.CloseCmd(); + startBtn.Enabled = true; + endBtn.Enabled = false; + } + + private void 设置ToolStripMenuItem_Click(object sender, EventArgs e) + { + setting.ReLoadConfig(); + setting.ShowDialog(); + } + + private void 帮助ToolStripMenuItem_Click(object sender, EventArgs e) + { + Process.Start("explorer.exe", "http://git.iwangyu.cn/wixy/Ultron.Ngrok/wiki"); + } + + private void 关于ToolStripMenuItem_Click(object sender, EventArgs e) + { + AboutBox about = new AboutBox(); + about.ShowDialog(); + } + + #endregion + + #region 方法 + Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { string dllName = args.Name.Contains(",") ? args.Name.Substring(0, args.Name.IndexOf(',')) : args.Name.Replace(".dll", ""); @@ -78,47 +170,25 @@ namespace Ultron.Ngrok setting.WriteLogToForm += WriteLog; } - private void InitCmd() { + public void InitCmd() + { //创建CMD + cmd = new CmdUtils(); cmd.ProcessMessageEvent += DealMessage; cmd.ProcessKilled += cmd_Exited; } - - private void startBtn_Click(object sender, EventArgs e) - { - //网络检测 - NetworkUtils.CheckServeStatus(this); - cmd.SendMsg(setting.ExecuteCommand); - startBtn.Enabled = false; - endBtn.Enabled = true; - } - - private void endBtn_Click(object sender, EventArgs e) + /// + /// 检查更新 + /// + public void CheckUpdateAsync() { - CheckProcessAndKill(setting.ExeFile); - cmd.CloseCmd(); - startBtn.Enabled = true; - endBtn.Enabled = false; + string checkUrl = "https://blog.wixy.cn/api/release/" + AssemblyProduct + "/" + AssemblyVersion; + checkUrl = "https://blog.wixy.cn/api/release/NisStartTool/0.0.1"; + HttpGet(checkUrl); } - private void 关于ToolStripMenuItem_Click(object sender, EventArgs e) - { - AboutBox about = new AboutBox(); - about.ShowDialog(); - } - - private void FormMain_Load(object sender, EventArgs e) - { - //进程检测 - CheckProcessAndKill(setting.ExeFile); - - //初始化CMD - new Thread(new ThreadStart(InitCmd)).Start(); - - } - - public void DealMessage(int proId,string message) + public void DealMessage(int proId, string message) { if (message.StartsWith("Server failed to allocate tunnel")) { @@ -168,14 +238,52 @@ namespace Ultron.Ngrok endBtn.Enabled = false; } - private void 设置ToolStripMenuItem_Click(object sender, EventArgs e) + public void HttpGet(string url) { - setting.ReLoadConfig(); - setting.ShowDialog(); + WebClient wc = new WebClient(); + Uri uri = new Uri(url, UriKind.RelativeOrAbsolute); + wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); + wc.OpenReadAsync(uri); } - private void 帮助ToolStripMenuItem_Click(object sender, EventArgs e) + public void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { + StreamReader read = new StreamReader(e.Result); + string str = read.ReadToEnd(); + if (str.Contains("\"code\":1")) + return; + else + { + if (MessageBox.Show("检测到新版本,立即更新?", "版本更新", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + int verStart = str.IndexOf("\"version\":\"") + 11; + int verEnd = str.IndexOf("\",\"title\""); + string version = str.Substring(verStart, verEnd - verStart); + string updateExe = Directory.GetCurrentDirectory() + @"\autoUpdate.exe"; + if (File.Exists(updateExe)) + { + File.Delete(updateExe); + } + + FileStream stream = new FileStream(updateExe, FileMode.OpenOrCreate); + stream.Write(Resources.autoUpdate, 0, Resources.autoUpdate.Length); + stream.Close(); + + RunUpdateProgram(version); + } + } } + + public void RunUpdateProgram(string verion) + { + Application.Exit(); + ProcessStartInfo startInfo = new ProcessStartInfo(); + startInfo.FileName = "autoUpdate.exe"; + startInfo.Arguments = "https://cloud-disk-1251608065.cos.ap-guangzhou.myqcloud.com/uNgrok_" + verion + ".exe" + " uNgrok.exe"; + startInfo.WindowStyle = ProcessWindowStyle.Normal; + Process.Start(startInfo); + } + + #endregion } } diff --git a/Ultron.Ngrok/Properties/Resources.Designer.cs b/Ultron.Ngrok/Properties/Resources.Designer.cs index 61f5f95..fde35fd 100644 --- a/Ultron.Ngrok/Properties/Resources.Designer.cs +++ b/Ultron.Ngrok/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace Ultron.Ngrok.Properties { // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen // (以 /str 作为命令选项),或重新生成 VS 项目。 - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -47,7 +47,7 @@ namespace Ultron.Ngrok.Properties { } /// - /// 使用此强类型资源类,为所有资源查找 + /// 重写当前线程的 CurrentUICulture 属性 /// 重写当前线程的 CurrentUICulture 属性。 /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] @@ -60,6 +60,16 @@ namespace Ultron.Ngrok.Properties { } } + /// + /// 查找 System.Byte[] 类型的本地化资源。 + /// + internal static byte[] autoUpdate { + get { + object obj = ResourceManager.GetObject("autoUpdate", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// 查找 System.Byte[] 类型的本地化资源。 /// diff --git a/Ultron.Ngrok/Properties/Resources.resx b/Ultron.Ngrok/Properties/Resources.resx index 05a859a..038321e 100644 --- a/Ultron.Ngrok/Properties/Resources.resx +++ b/Ultron.Ngrok/Properties/Resources.resx @@ -127,4 +127,7 @@ ..\Resources\YamlDotNet.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\autoUpdate.exe;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/Ultron.Ngrok/Resources/autoUpdate.exe b/Ultron.Ngrok/Resources/autoUpdate.exe new file mode 100644 index 0000000000000000000000000000000000000000..589b54eb3c7d148fe09c58e4a375971c0909575d GIT binary patch literal 46592 zcmeHQ31Ade(ypE)lVpGZkwftsqxg?3j0qs33rHYhmfM8ez zMMXtXSKMDwypcmi#hcarz1>w;g%FYuiTkUotE~IGUhw{}UU$zC0s?~K?zHyn_v%&G ztEyL3@94>6%=y<-8WE-A7J_I!o_r0J>7J8XROcM~R1U4ne)G8X%IG(bn^+Mv+*P_( zuKOz8eqT7OMck#TTaSj_!LYk%T#36<3#i@>9b6|^q{ojS8m**J`rz)b+pTS-JZh)p z6IB2*+Js)U5KlMm<+zzUHy#d?Z{*0y314nS!a3`pix&`elK;n_R*?~KoeH|+IJ2DS z`ZGDx`ckMpKv#m&z}8iJD!YlY66&*1P9*P*sMQhFUtfjG4}2{#xWa>r}xTpq|K2Tymn-M20e-=%AFmaE<`Se2Yfnp0IED)QSPmq z`EJO!)4K!QWAWj5p=Y;D4JFq#|AoR`J-cUWfZC8n7&;em`!j~iu|(-hU|^c;txiSsaUB!gyM zm)6iY=AYZdj6)gIk=AV)^N@))dl508=uYU)4CbQGbcSAJDpD881O=u))R?S z10qC~@37fGH=WZpsNH3F80jP=E~ow(YXxYo-Y5Nl{t!zn{h7+O70pUF6|Hwvs7gNx zNe|DjK=P=5g-*R6idt`!j%{~tJEwk@U2N~n%*s4Z>w}sO4t*-X+4@IFrD{#%ky3A# zg0g_wET9+o+Q~>50)KQG2rDkF07;tB7iqfI4{5K9OlkCgaC_YA4v$MJ@yL7!;eB`p zbO=**x}1(VAf4_^p973^=T0X~!fEu!JMA2qo>TBVu`%t$MzZau3w8e$rLo-{nV&{b zro4;+K^jdqgLkVA7bC*84EWY#3R3?{?->`!$dq zX`VrN^g{ook-|0ze&52=;Ta6LF$9UrVVr@-9GFA8!x+k0?hGr-4&d+<0_vE}7{|6h zw!JY7MQwNtrhm=qDT+J!fF$RSoq24ZM3M~Ca~&~~ z66a_%n?TQ`5vQlS8DI90<+CPzW*;mk(Px-`Vw}FjX+@u5hg=WK>{^Gq-wCH&CG1I1Is+3uc+5>ggpx|?SbLp+m__FCpS2aj%^a~X7PpLPb? zb9&C>Du)4Pto$(!&-n~nJr`D!-sc#-3gq5Gy=gq!1*kNpAgSegiPWpdT)10$uVWmw z^4Vi9oQsQ|3z^bn<1nUv5%Lje)lqBL%68aBVJ-4<%w}hj7U!7F4y8@SOWMUqtSVMo zLX{i}^v78RKE`BI=!Jo;_``bYbUKt>y6OeH=WbNWV%A8noO^h=?fC)mb49^;F0N964H=%Vup)e%;=Ksqz-9K znK^V*W(1H|oL#bA6b3wpu63@$TM_5u896j9`Lw(iSd{CAz4HY0V>-7e<2DVx*ZAk85+FmtF#^7EeLXBA}0 zp}`JLr)00nbkPU0m9?PkBn>!DdIkAh#KsGd9+AOmDO~`5t^%fuE?2r_-$z5xaV|RA z(Iq>V8i3=XQfSOce{uDOboW7`9C`?vK{pbd3m03Wf|=*D8P7NhWxf`Hd^JiwNYDWo zoyeJ`WpN1>g1XyKx(PGJTuMWUt-wdw)D^ixWg!AgAbSzgGiWi=fwTna1f-qmm5iH^ zUgKDXv`V={ang>g6-bZDxKA1H1{qqI^^I}^=$vbnvK>r6V3rPFj$U$5|KlVkN-HsV zY%xo8ZFVQvYo|O}NAJ_aN;5sI|(G{h)EX=Ri5~-mlQ&~dqX1t_yp!5^DG+%O-L+xeh#;h-$Zzwr5&?-e7 z@1S&sRjPGtLTQvN-JErAc9YVP#>&z{Nu?uAmZc?!-<#P&9VwJl7m=m;)E)A4M9T`b zz$q2_8vdrx3iPT%pE}t~kCOS@kU9tvw-r1Q=WK~-QfNufrsbImbw=u>Bapi2B&40F zK&Ge3v{0tSGCfCvBJMH%NP+4;XSBQa5^p^972Q?WG6k zc4t4N16-#eJyWKgWSWPxP??iG80n1cA}Us%QMw{s&!OSX`lUQufWXNV&mv8}i3w+>3Nn#!9-= zdiN=Mm>#h5J(TstlskdiB6^;hk)IAu9#Gz-CxPQcdLHcdNu`hDU3yhH-&Id$E8{`!8w>JHx(kq7 zTncI(8SpvB^32Xkwxe%$ccit-G0HsZn87%i**%pb9JkT006D_ZSIJf`&pr+Lx{M)6 zpLcZyCu?Ln-Z=vJVdRUI*=YT3<;tuUq>p5eR^C?TI?q=AAbD$6{_Hvjbe3mcsGKAv zEp+r(RHfK)gK`?A*qqK0U`BRWano$t;y6yGUTO#Ky>u8k99}w-jzfAp^+Nh9#5*tb zlj*NzI$XlfqTzs-NXP{;_0t7_Os54%4Z6WGR8lUc+dwTS)A@8YH9O|hjc9kitX*NH zS5scvi!#4lnUC84!m{)tnoBRyNAL{=qZ+Rzd2H+8XhAURl!>`IEp_}I=^NSqM2t}o zSrlOLIPXMjjE8ZW_ZYF7zO!L^J&mb|I{LFW;mqz0^@nV zLp6-y6~1t}8W>VK6$l|;sTwN4`o^pq=Fw0kzl7YOW*MSjhuK3uD; z3aJq_AYa%OdQMzWZaNt~k*Ro13HYthwJ-z=(4Z03sy`Z0`Q;(gr%oN_^H0a5Yh+Lj z1&GC)sEr5*Xp$a0D~M-6E%QY~k>aos@rC^=8ERx|VKkzZ_jal_qoCkSvth8Rkef zJse7i>L!|F;Yo(7w^hj<7k{A@fAI=%V)bksR%jS%Wof8pVla|O zBL>!e0kzVnPmjMb(Wk?jMq;y4ov9^O*za%$O;&XS8jinZR}R<0Wx?_&6wzjNk!tw$ zU{!LZsX_V11U2NVmN{cr+OV8J)F0WkVz^dSqX)|?+N`Rq@`Y>S?^rg^ZK9phU?><# zsAWr>>oxG9d=0(t!i zU`XY|!Y>N?%EOuw3Hps#pP1p_iy>ImwW<B8kBXi7Dd&D<4-n4K77zMj}-x+1)l4S-cUE>=l_a z2UZJrBS*ZDYFam&HB@Y4Am&d+UtomAQ0WV4^HUf#K41m$)Im3d+lO~llqaDSk?n?o8|MML?+SJ8RlcF( ztjhceiQFk^*pxha3aHxrPDM)ts6XDf_}-;7GY3KtYEbK~M`zTG%EzERT949|1HXB?YYZ ziq?wqOGQP&L?7Hi5Sfl#0rjO*kPd*_2jU)p5-U(cy;rKR4}^{)$HLFT*Fy~@FI7U( zmjI8I&os?83%YS-}()9$0Ss^9xVjGls4a1x!p}VoRK%I(BUkx-XiLyVLcmD*byb;OW zo`~(G@sg)1sa#egbLPdy7e84(9j$Pl(t7ezZD{trkpV9~Kkj#3pIn=J=Zj}jI=1Gs z(%htEAk(=s7jrmqWVjtlPL7kIwTqpZX*s!*a?-Kx&&ePKS-g^kZLyr3qp{_KM^0L% zl9PtbTqmWW#Hb*YspMXm$%H!BKFkDW*tzx_^Q|2WYu{cL<|*bQoB5m9!F=f+6UK@?SA0_x4UmXe^S6#%M<(s1!ZLe0)alIzEWSG{(*wNeFpaR4d`=P zpsc`O=Ia+27yxE_g)$59Edu}H>wrQ%ykkd9j4e5OThq6}_+D`eSk37YtFrbSczu}5 z@3><%Zs1~D2nMfEKWoktpIc1Sw2Ti-uLM3wsm5$+1qVRfd_}xXhipgdb`I*OR@4jORbrRHGg<;>8Yps zPVt{Ipy0HA{nh+|ryaj*W9IzNZWBUr$1`($m)R3Xb1CBGbwO`;GH`#`%I{ZpO4+Gp z1qFdq@_qe$!=~M~46PA5n!2J=?y@oVK4v=fh9 z>JqDGDq_Rp0@#NBZzex%9{v8#@6Q!$s-5E5rN0(`S~Fd|u{tQ8yJ@gkTazW$&P*5U zF6$^(%_Q;ijl-oc9PoJXbM-%bz5bp`@y3da#E13I@sb7CPU{xpljc{&)7SMAYoY|7 zaEZrjyIHaD0Q#r8ye*2Y_T@yt9?>~pI{M$C%Dz>ist!R9>_TcQb9D@BX z=i_%(h%f5@AXxsUM`}g$;|oROn%M_r@0Is!>|3te4`}~0?aJ7_KkMN-^hy1LhWN+U z*F^L4w}`Ee&J$Z7yIeFswm@uI$$PIqX02`Raq%8*!-F&7TT$s-KQ{hJJ%TUZ6EtZv zeef#xNcWy!?w5MV*!0L;@sFlg#FodehV9Q4TOVH_b+GlZ`Ph5qeaF@`TbJ8ji}POo z8^0SXURZoG?tJm*+a`(z?00UwGq8{ApH|}^_QiP~^!}Zt;*ZyzDqdXd6))dVC^lg~ zjpOUC{4#&7d4}x(m;1U2GPC?mkbm<7fZ6in+4RUfQGaj3o*UbP+>2#cYnrAWSg#E$ zXNs4W3=*rW)3BGFDfe&I)TE17mJS#7cUOuJU%5vv`S))98<(H^oMnISE}vL8H%F|U zl_A!G{_1K)te=03*m%#hHgte~Mn5uNF&{ym<6QF-@b!o1Nco%BUoYz64~?s95Chl- z=0g{#UpvS21AK>Qgg&-Cd!uMxe+_8us%vh8_jUh#>jb%Hv$i@ztcqa&Zg#eKbZ!T+ z2K>Hs?XSg0Z>-*D`Tw%~0_>O9i1+UFVQ)B7teW8vt8uTv&HKcxgBPzGn7mI6o|~Vz zQnWm~6tR6F_Kwg;+&?iH7f74m-t@BA`oy)OL4JQSq|DL|)|onJSXC``v+da%ApcU) z^8C%v59SMqKQWy$ZT3Of;h*jcimmUg6o3ElO|j|4CF0R}J;d7TbnN9}KO1}fo1VVP zlz#{R?4#|=-v4QO4gFt5=<`ys1?{b0aJ+c;najmzEpLjJjgN^9%SK5ZJc92gPs}^q z>?$UeRl zJl-U>f!A$#Hm|=5{;ivK4ZmmK=ezFikoaQrAL8;qR4r|I^MlYq3=jT*v7rv{fAG{| z=yECS06M^P3-E0_;F$7%pa0e5@B44Dt-V9+`2HJN{{r{Kx(@PJh^^}vTkI#x&p=zA%`g2- zL$eUqs-*np@1LeYCzww_hdhSy%`vkHer}G7thx!f7SjRjnr(vT$-Fj*#{>8d^v5y9jxjA8euvl^5r6&D z8p-R<-Nbe~ChkU{Ho?1l$8O`Jw;zK{Rib6XEis#He)1Y~jwAUt=XA~N^U#MqPRss> z|9^q_&;7rdfB(m^95>5s=Q*CTY&7AfHlU{;oVO*y z_BO)r8HpGIKr>_&6Fvt7i!}m-b?BN?nlAQZeuxNhK@-Et%j<}QH z^UvJ^zAm+RT?o77ISk?*c#X?$&Q*D>zfZq^WF25W$n!#;A95_<*xG;?6OTE!0Dgto zh`HB4EkEC#{qBp%Hm*%;`^WX-eU_c$khJ?HG9EQOiggRtbj+JMhlS0;R+Hyxw*372 z&%Nw_IlnXKcul-cgig(PumFB$h$hSjO&x#_!~)hgudlxT@)OCr&9^Pb{yc3OUv2+b zY=Z6bJa(Jq^K5&~Pht&&xFq}Bp1Yv`>#?qBbG-r|->3e!=FjnY)B?GNu>GnT-*uS} zIreP0S;o=L@R_eH9bgdLAF<7MtatzQ<)@-<)hx{A3{&4cCx_pE@bvYNontrVw^-M3 z-^g`5<}th2z1^4lBR}5d_*uU)Dw+^md2HlZ$#cLhu)Fx&i05B7$$5C)Lvx^m&!il7 zAMT4H?0EUjSKCGX!poj<`?;U;OJ9Nx z%<+MJg4f0Td%a57`gI`~+_qYLBX_-w*@zx(cM{BGcC>>rfL z^{3qi`&*I$e&0jmWK|o9^$bvHZS0{BG#aF%LAh6 z=_TSjtP3ndXj9xIpe;MzX?pqwvGEQ+`gOjv``EmT*P(I^wg)+5{I$Y4;PPAaq4#F2 z1!A!PI^ew&=D&HvGO>f@lCqiew zJa^$T+h)RkM-ol~{y~(V=Z74VB){-aj*SfC{lAu1?rw9P6ce3mp&yo=_lh>b=2@<- zPh16hnA^*>-4etbJGNQ2jxx_txE*s1$8kSF-q!hpB|qkXG9DuSwD7zT>x3rkMX*2e zUev}rRPncWo{-}59M+79EG=Z_IB&)Jme(E<8{s$R{#6L;mdnJ4uqC#u2FO`=PYCka zeU5zy(B^pDg!tEpInW+uXI&gL`7ND8Ub)7^IwQ^}x6AXc3i0Wt4Q7{Her_s+^&rIG z-g{E^yEzY!)06#*dBrYq9kQ^@ytXstpCk3QM;#n&`B}#tgE1~7^I`VcrWMn~2QS_( zw*POP_zu7K`}SY|5Zgbh6WieLte+&ES+>h|wJSZ=DfULOUNvyot-C`({+JBh-}~O@`>iK#_mGmmm2bxMk_fl=B@$sj zBER4ABc@^fA-^~An07GxO~z02J1Xxr^SqqmlJAQdi z1G%@NEgsk9jd5OnliH6lB8kuak{|0|$jjrEoNHizT+T!HX1={U8TSC^aY3%NZQ14A z4s#o<^OI!R1C8C{?Wg?G|KR`Z1F^N{{Jt@E0II+b(~jGw0EGVxG(U)(0fsCdhA}1CVCL*keGr%2*Onov?ylG9=7l66a) zMy}B}zpgBu^9COrQgr&1F*STFnK5NtSS`ZYWU9N5J5uFU15s~e<`h0tZ_21(WQuj{ z&De5Xn{F4(a}%d%rPHS1lu8w6icU#59kMD=N>dlcd8pyMJ6=xA+5fzZ37a}x({YBX zJbzIh_oAxaK!}g#$0d4_d#KE%lAlWh>GIzvz(GZ|{O=ZAj3?XM^?2gn-JuQU`76lT z7a!Fk|Lve!8)7~gihpClEF`3WUxss*+n~cpp5Y0oGHcSme>eD}cZ0uaH~80&1kpRu z4i1&EuhhXZdsuWN46LbxWl{&rqz;xj$bVRJfEOLRT`=x#JBOVA^Ja;C?;&pOt$aU( zcZkSueR_4F!7{0XWl{&r2$4EiMu^nGGO2@QQU}ZM!9xG32kXTD zurhV9#xMV1tsnb`)v1Gpcz@sk?G60Y>wmPD>i^WiGW&M0+D{e#QwPhW4wgwBER#A| zCUvlk`3IA!gJn_&%cKsL;Xk5I9W28K67U}^rw*1$9W0YNSSEF_3=Zu`9W0YNSO!0E zPaQ0iI#?!kuuSS;8UDkU)WI^TgJn_&%cKsLk+C3kuuSS;nbg5Dse@(YAH}8)mTBvo zJ^#^k>R_4F!7`?8qz;y8%SV!7se@%w2g{@mmT5{IER#A|W|zbI_Tx8!KlShb_TzVp zse@%w2g}%J8Kj;EPXhzD5p_u-&u3E%9ZE>u@GHll@@CK^H=fzMisNZc?eg%UXPQ4}>=QY&6yR^#UDOv=UkqfsiC zZ?g1NR3o`ArwY7FQX|PQH$4CgaZ_LLQb4Bxrx&Os(lL7}0J@c+tJCzDCJ7p1p2t~j za4#{>w%)kJ+9y2s%=;jz@A06cL4#4~I+7qcLFV1-xxdtN^1H3I-CEZJ`l_n(PBtk-^r#Uj4wq?r$xq)r`5xLfRDV=Qn^qYRUA-gEL80f0Q{Mtfy8c<`IFJ!2e zP?E^WZE$0=esU7;gHDbq0SJRmwtHv@j5u}u^ctuoYL8a08Sv9Looeyt*TDY+=1&jI literal 0 HcmV?d00001 diff --git a/Ultron.Ngrok/Ultron.Ngrok.csproj b/Ultron.Ngrok/Ultron.Ngrok.csproj index 9f28079..93616fa 100644 --- a/Ultron.Ngrok/Ultron.Ngrok.csproj +++ b/Ultron.Ngrok/Ultron.Ngrok.csproj @@ -89,6 +89,7 @@ SettingForm.cs + AboutBox.cs @@ -149,6 +150,7 @@ + diff --git a/Ultron.Ngrok/Utils/HttpUtils.cs b/Ultron.Ngrok/Utils/HttpUtils.cs new file mode 100644 index 0000000..f8add4f --- /dev/null +++ b/Ultron.Ngrok/Utils/HttpUtils.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace Ultron.Ngrok.Utils +{ + public class HttpUtils + { + public static void HttpGet(string url) + { + WebClient wc = new WebClient(); + Uri uri = new Uri(url, UriKind.RelativeOrAbsolute); + wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); + wc.OpenReadAsync(uri); + } + public static void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) + { + StreamReader read = new StreamReader(e.Result); + string str = read.ReadToEnd(); + } + + public static void HttpPostAsync(string url,string postData) + { + HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; + request.Timeout = 30000; + request.Method = "post"; ; + request.ContentType = "application/json;charset=UTF-8"; + StatePara para = new StatePara + { + RequestInfo = request, + PostData = postData + }; + request.BeginGetRequestStream(GetRequestStreamCallback, para); + } + + private static void GetRequestStreamCallback(IAsyncResult asyncResult) + { + StatePara para = (StatePara)asyncResult.AsyncState; + try + { + para.RequestInfo.BeginGetResponse(GetResponseCallback, para); + } + catch (Exception ex) + { + string retString = ex.Message; + } + } + private static void GetResponseCallback(IAsyncResult asyncResult) + { + string retString = ""; + StatePara para = (StatePara)asyncResult.AsyncState; + IAsyncResult IAResult = para.RequestInfo as IAsyncResult; + try + { + HttpWebRequest request = para.RequestInfo; + HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult); + + + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + using (var gzip = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress)) + { + + var reader = new StreamReader(gzip, Encoding.GetEncoding("utf-8")); + retString = reader.ReadToEnd(); + reader.Close(); + } + } + else + { + Stream myResponseStream = response.GetResponseStream(); + StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); + retString = myStreamReader.ReadToEnd(); + myStreamReader.Close(); + myResponseStream.Close(); + } + } + catch (Exception ex) + { + retString = ex.Message; + } + } + + class StatePara + { + public HttpWebRequest RequestInfo { get; set; } + + public string PostData { get; set; } + + public string ServerType { get; set; } + + } + } +} diff --git a/Ultron.Update/App.config b/Ultron.Update/App.config new file mode 100644 index 0000000..8e15646 --- /dev/null +++ b/Ultron.Update/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Ultron.Update/Program.cs b/Ultron.Update/Program.cs new file mode 100644 index 0000000..e9e3415 --- /dev/null +++ b/Ultron.Update/Program.cs @@ -0,0 +1,28 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Windows.Forms; + +namespace Ultron.Update +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main(string[] args) + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + if (args.Length == 0) + { + Application.Run(new UpdateForm()); + } + else + { + Application.Run(new UpdateForm(args)); + } + } + } +} diff --git a/Ultron.Update/Properties/AssemblyInfo.cs b/Ultron.Update/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..74dc06c --- /dev/null +++ b/Ultron.Update/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("Ultron.Update")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Ultron.Update")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("c11ff6dd-baba-4d12-82a6-9df1cfa3d8d9")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Ultron.Update/Properties/Resources.Designer.cs b/Ultron.Update/Properties/Resources.Designer.cs new file mode 100644 index 0000000..3e62cdc --- /dev/null +++ b/Ultron.Update/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace Ultron.Update.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("Ultron.Update.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/Ultron.Update/Properties/Resources.resx b/Ultron.Update/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Ultron.Update/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/Ultron.Update/Properties/Settings.Designer.cs b/Ultron.Update/Properties/Settings.Designer.cs new file mode 100644 index 0000000..aa69ce5 --- /dev/null +++ b/Ultron.Update/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 Ultron.Update.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/Ultron.Update/Properties/Settings.settings b/Ultron.Update/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Ultron.Update/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Ultron.Update/Ultron.Update.csproj b/Ultron.Update/Ultron.Update.csproj new file mode 100644 index 0000000..4a13fbc --- /dev/null +++ b/Ultron.Update/Ultron.Update.csproj @@ -0,0 +1,88 @@ + + + + + Debug + AnyCPU + {C11FF6DD-BABA-4D12-82A6-9DF1CFA3D8D9} + WinExe + Ultron.Update + autoUpdate + v4.5 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + favicon.ico + + + + + + + + + + + + + + + + + Form + + + UpdateForm.cs + + + + + UpdateForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + \ No newline at end of file diff --git a/Ultron.Update/UpdateForm.Designer.cs b/Ultron.Update/UpdateForm.Designer.cs new file mode 100644 index 0000000..d5884d5 --- /dev/null +++ b/Ultron.Update/UpdateForm.Designer.cs @@ -0,0 +1,90 @@ +namespace Ultron.Update +{ + partial class UpdateForm + { + /// + /// 必需的设计器变量。 + /// + 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(UpdateForm)); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(12, 12); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(233, 23); + this.progressBar1.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(119, 45); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(29, 12); + this.label1.TabIndex = 1; + this.label1.Text = "进度"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 45); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(29, 12); + this.label2.TabIndex = 2; + this.label2.Text = "提示"; + this.label2.Visible = false; + // + // UpdateForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(257, 65); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.progressBar1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "UpdateForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "自动更新"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + } +} + diff --git a/Ultron.Update/UpdateForm.cs b/Ultron.Update/UpdateForm.cs new file mode 100644 index 0000000..7bcd6aa --- /dev/null +++ b/Ultron.Update/UpdateForm.cs @@ -0,0 +1,142 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Windows.Forms; + +namespace Ultron.Update +{ + public partial class UpdateForm : Form + { + public string ExecuteFile { get; set; } + + public UpdateForm() + { + InitializeComponent(); + + string fileVersion; + if (File.Exists("uNgrok.exe")) + { + try + { + FileVersionInfo file1 = FileVersionInfo.GetVersionInfo("uNgrok.exe"); + fileVersion = string.Format("{0}.{1}.{2}.{3}", file1.FileMajorPart, file1.FileMinorPart, file1.FileBuildPart, file1.FilePrivatePart); + string checkUrl = "https://blog.wixy.cn/api/release/Ultron.Ngrok/" + fileVersion; + HttpGet(checkUrl); + } + catch (Exception) + { + fileVersion = ""; + } + } + else + { + label1.Visible = false; + label2.Visible = true; + label2.Text = "未检测到uNgrok"; + } + } + + public UpdateForm(string[] args) + { + InitializeComponent(); + + ExecuteFile = args[1]; + + string updateFile = Directory.GetCurrentDirectory() + @"\"+ ExecuteFile; + + if (File.Exists(updateFile)) + File.Delete(updateFile); + if (File.Exists(Directory.GetCurrentDirectory() + @"\ngrok_x64.exe")) + File.Delete(Directory.GetCurrentDirectory() + @"\ngrok_x64.exe"); + if (File.Exists(Directory.GetCurrentDirectory() + @"\ngrok_x86.exe")) + File.Delete(Directory.GetCurrentDirectory() + @"\ngrok_x86.exe"); + + DownLoadFile(args[0], args[1]); + } + + + public void HttpGet(string url) + { + WebClient wc = new WebClient(); + Uri uri = new Uri(url, UriKind.RelativeOrAbsolute); + wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); + wc.OpenReadAsync(uri); + } + + public void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) + { + StreamReader read = new StreamReader(e.Result); + string str = read.ReadToEnd(); + if (str.Contains("\"code\":1")) + { + label1.Visible = false; + label2.Visible = true; + label2.Text = "未检测到新版本"; + return; + } + else + { + label2.Visible = false; + label1.Visible = true; + if (MessageBox.Show("检测到新版本,立即更新?", "版本更新", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + int verStart = str.IndexOf("\"version\":\"") + 11; + int verEnd = str.IndexOf("\",\"title\""); + string version = str.Substring(verStart, verEnd - verStart); + + DownLoadFile("https://cloud-disk-1251608065.cos.ap-guangzhou.myqcloud.com/uNgrok_" + version + ".exe", "uNgrok.exe"); + } + } + } + + + private void DownLoadFile(string fileUrl,string fileName) + { + WebClient wc = new WebClient(); + wc.DownloadProgressChanged += wc_DownloadProgressChanged; + wc.DownloadFileCompleted += Wc_DownloadFileCompleted; + wc.DownloadFileAsync(new Uri(fileUrl), fileName); + } + + private void Wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) + { + label1.Text = "完成"; + RunNewApp(); + } + + // int index = 0; + void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) + { + try + { + Action act = () => + { + progressBar1.Value = e.ProgressPercentage; + label1.Text = e.ProgressPercentage + "%"; + }; + Invoke(act); + } + catch(Exception ex) + { + + } + } + + public void RunNewApp() + { + try + { + ProcessStartInfo startInfo = new ProcessStartInfo(); + startInfo.FileName = "uNgrok.exe"; + startInfo.WindowStyle = ProcessWindowStyle.Normal; + Process.Start(startInfo); + Application.Exit(); + } + catch (Exception ex) + { + + } + } + } +} diff --git a/Ultron.Update/UpdateForm.resx b/Ultron.Update/UpdateForm.resx new file mode 100644 index 0000000..44a2792 --- /dev/null +++ b/Ultron.Update/UpdateForm.resx @@ -0,0 +1,408 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAABILAAASCwAAAAAAAAAA + AADdtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qo + cP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9ii + Z//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnbv/ap27/2qdu/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2aZu/9qnb//cqXP/3Kl0/9yp + dP/ap3D/2aZu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mk + a//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2aZu/9yp + dP/bqHD/0qBc/9KfVv/Sn1r/2aZs/92qdv/apm//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qo + cf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2aZu/92qdf/QnVf/uoUg/7J9Df+xfAn/sXsI/7aBFv/HlEL/26lz/9qncP/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2aZt/96reP/Nl0n/rHMA/6txAP+scwD/r3YB/7N9C/+yfAr/rncB/8CN + Mf/bqHL/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdu/9yqdf/SnFj/r3gG/72UO//Or2v/zK5p/76V + Pf+weQj/sHcE/7R/D/+tdwD/x5ND/92qdv/Zpm7/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920 + iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocP/bpW3/zKNe/+Xb + vv/////////+/////v//////6uHJ/7uPM/+vdQD/sn0K/7aAFv/Zpm7/2qdw/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qo + cf/Zo2n/3riL//r69v////////7+//79+//+/fv//v79///////4+PP/vZZA/692AP+yfAv/055c/9yp + c//ap27/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2KZt//Ps3////////v37///////////////////////9/fr//////+/p + 1/+zfxL/r3kF/9KeWf/cqXT/2qdu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHD/2aNp/9+5jf/9//////7+//////////////////// + //////////////79+///////xaNZ/6tyAP/ToFz/3Kl0/9mnbv/ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Z + v//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9ihZf/nyqf////////+ + /f/////////////////////////////////+/fv//////9rDjf+pcQD/1KBd/9ypdP/ap27/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9uo + cf/YoWX/5cmn///////+/v3//////////////////////////////////v37///////fypv/qnEA/9Sg + XP/cqXT/2adu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//aqHH/16Fl/+XJp////////v79//////////////////////////////////79 + +///////38qZ/6pxAP/UoFz/3Kl0/9mnbv/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qo + cP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9ehZf/lyaf///////7+/f////////////// + ///////////////////+/fv//////9/Kmv+qcQD/1KBd/9ypdP/Zp27/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9ii + Z//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/XoWX/5cmn//// + ///+/v3//////////////////////////////////v37///////fypr/qnEA/9SgXf/cqXT/2adu/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//aqHH/16Fl/+XJp////////v79//////////////////////////////////79+///////38qa/6px + AP/UoF3/3Kl0/9mnbv/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qhx/9ehZf/lyaf///////7+/f////////////////////////////// + ///+/fv//////9/Kmv+qcQD/1KBd/9ypdP/Zp27/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mk + a//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/XoWX/5cmn///////+/v3///////// + /////////////////////////v37///////fypr/qnEA/9SgXf/cqXT/2adu/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qo + cf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/16Fl/+XJ + p////////v79//////////////////////////////////79+///////38qa/6pxAP/UoF3/3Kl0/9mn + bv/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2qVr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qhx/9ehZf/lyaf///////7+/f/////////////////////////////////+/fv//////9/K + mv+qcQD/1KBd/9ypdP/Zp27/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSH/9mkaf/ap3D/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qocf/XoWX/5cmn///////+/v3///////////////////////// + /////////v37///////fypr/qnEA/9SgXf/cqXT/2adu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomj/79m//963 + jP/cqXL/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/16Fl/+XJp////////v79//// + //////////////////////////////79+///////38qa/6pxAP/UoF3/3Kl0/9mnbv/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//aqHH/2KJo/+/Zv//jwJn/4LSC/96xgP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9eh + Zf/lyaf///////7+/f/////////////////////////////////+/fv//////9/Kmv+qcQD/1KBd/9yp + dP/Zp27/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//26hx/9iiaP/w28H/48CZ/9+ygP/htob/3q97/9mmbv/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2aZu/9mm + bv/Zpm7/2qdu/9qocf/XoWX/5cmn///////+/v3//////////////////////////////////v37//// + ///fypr/qnEA/9SgXf/cqXT/2adu/9qnb//ap27/2aZt/9mmbf/Zpm3/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9mnb//bqnP/8uDK/+G/l//gs4H/4LWE/+G1 + hf/cq3b/2qZu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdu/9yqdf/dqnb/3ap3/9ypdf/aqHD/16Fl/+XJp////////v79//////////////////// + //////////////79+///////38qa/6pxAP/UoF3/3Kl0/9qnbv/apm7/26hy/92qdv/dqnb/3ap2/9qn + cP/ap27/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9mmbv/bq3b/37J+//Lf + yP/ctov/3rF+/+C2hf/gtYT/4LWD/9upcv/ap27/2qdv/9qnb//ap2//2qdu/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9ypc//MmE7/wo0v/8KNMP/Pm1T/3at4/9ehZP/lyaf///////7+ + /f/////////////////////////////////+/fv//////9/Kmv+qcQD/1KBd/9ypdP/Zpmz/3Kl0/9ah + Yv/Ejzf/w40u/8eSQf/YpW3/2qhx/9qnbv/ap2//2qdv/9qnb//ap2//2qdu/9qnb//ap2//2qdv/9qn + bv/ZqHH/4LWE/9+xfv/y38j/37aL/9qpcf/gtoX/4LWE/+C2hf/fsoH/26Zw/9qnb//ap2//2qZu/9qo + cv/ap3D/2qdu/9qnb//ap2//2qdv/9qnb//ap2//2aZu/92rd//GkTz/rngD/7F7B/+veQX/r3kE/8iU + Q//bpG3/5cil///////+/v3//////////////////////////////////v37///////fypr/qnEA/9Sg + Xf/bqHL/3Kl0/9WiYf+0fg7/sHoF/7B7B/+ueAH/uIMe/9elav/aqHH/2qdu/9qnb//ap2//2qdu/9up + cv/Zpm7/2qdv/9qnb//apm7/3rGA/+G3hv/esX3/8t/I/+G4kP/bp2//3q55/+G2hf/gtYP/4LaG/96w + ff/apm7/2qZv/96ygf/jvZP/4biM/9qncf/ap27/2qdv/9qnb//ap2//2aZu/9yqdf/PmVL/q3IA/7B4 + Bf+tdAD/snsJ/7N+Df+vegX/xo47/+jMrv///////v79//////////////////////////////////79 + +///////38qa/6pxAP/ToFv/3qt5/9WhYf+wdwf/rXYC/652Av+vdgL/tH8P/654Af/Djzj/3ap2/9mm + bv/ap2//2qZv/+G3iP/kvZT/4LSG/9mnb//apm7/3a55/+G2hf/gtYX/3rF+//Hfx//gt47/3alz/9yp + c//esH3/4LaF/+C0g//gtob/3a14/9unb//jvZL/472U/+S/lv/gtYf/2aZt/9qnb//ap2//2qdv/9qn + cP/apW3/zqdp/+DSq//u5c3/2MOR/7OBGv+weAT/s38P/61zAP/Yu4r///////79/P////////////// + ///////////////////+/fv//////9/Kmv+qcAD/1aJi/9ymbf+4hSP/1LyE/+3kzf/k17X/wJpH/692 + Av+yfAn/t4EY/9qmbv/aqHD/2qVt/+C0hP/kv5b/472T/+S+lf/cqXP/26p1/+G2hf/gtYT/4beH/9yt + eP/v2sD/4LeP/92pc//dq3j/26h0/+Czgf/gtoX/4LWE/+C2hP/bqXL/4LSF/+S/lv/ivJL/5L+W/96x + f//ZpW3/2qdw/9qocf/Yo2j/37yT//z9/P///////v79///////x6tj/t4Yf/7F7CP+udAD/yqtp//// + ///+/fv//////////////////////////////////v37///////fypn/q3IA/9OeWv+7iS//6ODE//// + ///+/v3////+///////JqWH/rnQA/7V/Fv/XpGr/2qZu/92ufP/kv5X/47yS/+O/lf/huIr/2qly/+C1 + g//gtYT/4LWE/+C1hP/ZpGz/8NrB/+C3j//dqXP/3ax4/9yqdf/aqnT/4LWE/+C1hP/gtYX/4LOB/9mp + cv/iuo3/5L6U/+O9kv/kvpT/3Kx4/9mmbf/ap2//2ahx//Xv5v///////vz6//7+/f/9/Pn//////+nf + xv+vfBL/rHAA/8yub////////v37//////////////////////////////////79+///////38ua/61z + AP+6hiD/4da0///////9/Pn//v79//38+v//////8+/k/7B/Ef+9hiL/3Klz/9qqdf/jvZP/472T/+O9 + lP/jvJH/26l0/9+yf//gtoX/4LWD/+C1hP/brHf/26Zu//Hbw//etor/3Khz/92reP/drHj/26l0/9ys + d//htoX/4LWD/+G2hf/esX7/3ap0/+S9kf/jvZT/472U/+O8kf/bqnT/2aNn/+C3i//+//////7+//// + //////////////79+///////49m//6pxAP/Lq2r///////79+/////////////////////////////// + ///+/fv//////9/Kmf+mawD/4NKs///////+/fv///////////////////79//////++l0L/zJVH/9yr + eP/huo3/476U/+O9k//kvpT/3at2/96ufP/htob/4LSD/+G2hf/drXj/3Kp1/9yncf/w28P/3LSI/9qn + bv/erHn/3at3/96seP/bqHP/3a57/+C2hv/gtIP/4baH/92uef/crXn/5L6W/+O8kv/kvpX/47qP/9mj + aP/guI3//////////v///////////////////////v37///////axpj/x6hl///////+/fz///////// + /////////////////////////v37///////axI7/1LyD///////+/fv///////////////////////// + /v/9////1rF+/9mjZ//htor/5L+W/+O8kv/kv5b/3q9+/9ysdv/gtob/4LSD/+G2hv/fsH7/3Khy/96s + ev/bp3D/8NvD/920iP/ZpGr/3Kp2/92reP/dq3f/3at3/9mnb//fsX//4LaF/+C1g//htob/3Kp1/96z + gv/kv5f/4ryS/+S/lv/fs4L/26x4//v38//////////+/////////////////////////v7//Pz7/+/r + 3v///////////////////////////////////////////////v//////8vDl//v69/////////////// + /////////////////v//////+vn2/9yufP/fr33/5L+W/+O8kv/kv5b/37SF/9upc//gtoX/4LWE/+C1 + hf/fs4L/2ahx/92qd//drHn/26dw//Dbw//dtIj/2aRq/9qncP/cqnb/3at4/92qdP/ap27/26hx/+C0 + gv/gtYT/4LWE/+C1hP/bqHL/4biK/+S/lf/jvJL/5MCY/9uqdP/mzq////////79/P////////////// + //////////////7+/f////////////////////////////////////////////////////////////// + ///+/v3////////////////////////////+/fz//////+jRtf/ZqHD/5MCX/+O8kv/kvpX/4bmM/9mo + cf/gtIL/4LWF/+C1hP/htYT/26lz/9mmbv/cqnX/3qx6/9umbv/w2sD/3bSI/9qka//ap3D/2qdw/9uo + cf/ap3D/2qdw/9qmbv/bqnT/4bWF/+C1hP/gtoX/37KA/9upc//ivJH/472U/+O9k//kvpX/2adw/+rY + wv///////v39/////////////////////////////v7+//////////////////////////////////// + /////////////////////v7////////////////////////////+/f3//////+3dyP/YpW3/5LyS/+O+ + lP/jvZP/472T/9uqdf/esX7/4baF/+C1g//htoX/3Kx3/9qmbv/ap2//2qdw/9upc//Yomj/79m//920 + iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qZt/96tef/htoX/4LWD/+G2hv/dr3v/3Kt4/+S+ + lP/jvZL/476V/+S7j//YpG3/8OXV///////+/v3///////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v3///////Dk + 1P/YpGv/4LiK/+S/lv/jvJL/5L6X/92vfP/erXn/4baG/+C0g//gtoX/3a97/9qmbv/ap2//2qdv/9qn + b//aqHD/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//apm3/3rB9/+C2 + hv/gtYP/4baG/92rdv/dr37/5L+W/+O8kv/kv5f/4baH/9emb//0697///////7+/f////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v3///////Hp2//WpGv/4LOC/+TAl//jvJH/5L+X/9+zg//bqnP/4baG/+C1g//gtoX/4LKA/9qn + b//ap2//2qdv/9qnb//ap2//2qhx/9iiaP/v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qncP/fs4H/4LaF/+C1hP/gtYX/2ahz/9+1h//kv5b/47yR/+TAmP/dr3v/26t2//jz + 6v///////v79//////////////////////////////////////////////////////////////////// + ///////////////////+/v3///////bx6f/YqXP/3a55/+PAl//jvJL/476V/+G5i//aqHL/4LSD/+C1 + hP/gtYT/4LSD/9upcf/ap27/2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//apm7/2qly/+C1g//gtYX/4beG/9ysd//apm7/4bmN/+O+ + lf/jvJL/5MCW/9yqdv/arXn/9vPq/////////v3///////////////////////////////////////// + /////////////////////////////////////v3///////fz7P/ZrXr/2qlz/+S/lv/jvZL/476U/+K7 + kP/aqHD/3Kp1/+G3hv/gtYT/4bWF/9ypdP/apm7/2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Z + v//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9mmbv/bq3X/37SC/9+x + f//bqHH/2aZt/9yqc//kvZH/472U/+O9k//jvZX/2qVt/9msff/28+3///////7+/f////////////// + ///////////////////////////////////////////////////+/v7///////n28f/bsYH/2aRp/+O9 + kv/jvZT/472T/+O+lP/bq3j/2aZt/9mncf/esH3/37SC/92sd//Zpm7/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qZu/9qncP/ap2//2qdu/9qocP/Zpm3/3a56/+S+lf/jvJL/4r6V/+K7j//Zomj/3bOG//v6 + 9/////////7+/////////////////////////////////////////////////////////v7///////v7 + +P/fuYv/16Fm/+G4jP/kvpX/47yS/+S/lv/dsH7/2aVt/9qncP/ap2//2qZv/9qncP/apm7/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdw/9mlbf/fsoD/5L+V/+O8 + kv/kv5b/4LeI/9mgZP/fu5H/+/z6/////////v7///////////////////////////////////////// + /////v7///////v8+v/fu5L/159j/9+0g//kv5b/4ryS/+S/lv/ftYf/2aVt/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qo + cP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qZu/+G3i//jvpX/47yS/+S/lv/fsoH/159j/+HAmv/9/v7///7+/////v////////////// + //////////////////////7///7+//7////iwp3/155j/92vfP/jvpT/47yS/+O+lf/iuY3/26dv/9qn + b//ap2//2qdw/9qnb//ap27/2qdu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9ii + Z//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qmbv/bqHL/4ruQ/+O+lP/jvpT/4bmN/9uocv/XoWX/5Mik//7/ + /////v7///////////////////////////////7///7+//7////lyKX/2KFm/9qnb//gt4r/476W/+O9 + k//jvZH/3Kp0/9qmbv/ap3D/2qZu/9qqdP/erXn/26hy/92seP/bqXH/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap3D/2aZt/9ysd//kvZP/5L+X/9+0 + hP/apm7/26ly/9efZf/r0rf///////79/P/+/v3////+/////v/+/v3///79///////kyqz/16Bk/9up + cv/Zpmz/37B//+W/lv/jvpX/3a15/9mlbP/ap3D/2qdv/9qnbf/aqXL/37F//9+wff/er3z/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//apm7/3Kp1/9ysef/ap3D/2qdv/9qnb//aqHD/2KJo/+zYwP////////7+//////////////7+//// + ///r1bn/2KFm/9uocf/ap2//2qdv/9qmbv/drHj/26t2/9mmbv/ap2//2qdv/9qnb//aqHH/3q98/9+w + fv/fsH3/3q99/9upcv/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mk + a//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qmbv/apm3/2qdv/9qnb//ap2//2qdw/9qnb//Yo2r/4sOe//Hn + 2f/7+PP/+vfy//Ho2f/jwp3/2KJo/9qncP/ap2//2qdv/9qnb//ap2//2aZt/9qmbf/ap2//2qdv/9qn + b//ap2//2qhy/9yrd//er3z/37B9/92vev/crHf/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qo + cf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//26hw/9iiZ//Yo2n/26x4/9qrd//Xo2j/2KJn/9uocP/ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//Zpm3/3Kt2/92tef/Zpm7/2adv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/26hw/9mmbf/apm3/26hw/9qocf/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocP/bqHD/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap3D/2qdw/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920 + iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdw/9uocf/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + bv/aqXP/2qhx/9qmbv/bp3D/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qmbv/apm7/2aZu/9ys + eP/drXj/2qZu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//apm3/3Kt3/96vfP/drnr/26pz/9qnbv/ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + bv/cqnT/3ax3/9urdv/fsH7/3q97/9qncP/apm7/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap27/26p0/9+wfP/fsX7/3rB9/9mncP/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qly/9+wfv/gsX7/37B9/9+wff/fr3z/3a14/9uocP/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Z + v//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9mncP/brHj/37B+/9+u + e//cqnT/2qdu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9mmbf/bq3X/37B9/9+wff/fsH3/3q99/9uq + df/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//apm7/2qlz/9yrd//apm//2qdw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//apm7/3q55/9+x + f//fsH3/37F+/9uqdP/Zpm3/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//26hw/96teP/bqnT/26p0/9+wff/cqnX/2qZu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qo + cP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//bpm7/2qZu/9qmbv/aqHL/26lz/9qnbv/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9ii + Z//v2b//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Ultron.Update/favicon.ico b/Ultron.Update/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..730194d82069f14094da62d0b36dd7f8b2af410b GIT binary patch literal 16958 zcmeHPTX0nM8DCnhx3Qi2z;yc1I_-;3wVgh+Gqy8SADq7Qq0?!rwVmcVWXJ&q8cGu78s}o;z+cn>pa| zgzKLb|E6gY*fvuFTc7-DY}=j^-)n!9v;Nm*9RIle$Nhgi{zsSpo&fJU+cn_eF~WcT zEyVn!gtq5lo26S|>r8Quk61n$1Ne!Nn1jf>$Jak3$6x(Dwg-WIx`cPkk-(M_^n+2x zPwe3xv*ll}{6Y4Y+$p<@ZkJt!x5%#fH_P5d6Xi(7y%K~^&=*F;2SyRUf6EMsROQRN zmA{tiJdad8<d@75B({ z-f42IW{MnK^-HNOxLIoF-XQhG-;$kkJ#ys5`!p7YoexIK{)qM9<{5Hq<6opRcu>q= zKX%+i&cxo9rWHRG?`#iZ;#S$aaH7qH!yE^rfgktuZ=52L#^ut}b3yS+f4}ti^_s1} zPmf)?bY7ZQPZIAO=%Da6`C#2cnjcJl941a24gAP+KE(d{Pc6ks-06RPeLZ^U?CCbC zE51X#1vkp^br0Bi(d5cu;lpcmHtqi*l^yld1pBo>Ls;52j0dgbrq+jc! z>(u_#_lC#i&vo3@qan& z-v;{+4gZ?2IR3RZe&hewd;AaG{^R&f{EyrJ%aH%Z{eP(Zf9>Kwuz7^%f5`u1*ZxcK z{A0?<%^LVjWlZ9qtj|9p4bP#z#GGLypZ|edTY}&UEtNpq540p?=ANIp0!5w*WF4`)w*DEDjw@9LU zmPl+*iG->+d%c=o+swE)!wv74i`bg2v30flr+S23oC%t>xjtmo8EN+N(k?+@w019$ zbJkG_?OhJvUm(%FC8~qyp2e8Ga_*SEX8QNcy*Ow2$6or4yjgZPwjay;FaJ)$n0K~q zcx;IMPg?%NT%2{#$qkRlTPuDhhsu5=M^^qye3++^U$2yx@}`rib8+ML)=y!NovFZia^&bv`+v3^bd1ZiCSJ!#uKHG>XdXV{T)xiNyz zq=eo9-QmG zzvj0(v#HI$QFhM4{BHg&Qn%oC@j~9i&)*}bj@1kq{|D>;gn4;^oY?R%X2Unh&N*L` z8f;!{oD)+AhgSSNbxsVKV-3$rytxA0UW(ZfY()FG7)#XWyR9PZc z8y$pq=BsWxnpXmUg~VT94gH{A0ROl;<=Tuv_~Cn7r%3d8mHemkUGW_%m%2sYmD>Cp zFw4U{8?%02(=vmD1OFhaN8`y zg>Eb?Q6Gxdm*{%!2UhAnva4A9j632+Joz?G7VE%^a@oe^_;>dipEQ(yU!UvLz#m$x zrlerZqy%UFWwov`^S^ZuO4Hx(mQ&HU%(Xf@GV{Z?w?8agcTe#|Y1@PtP#YIQ##Pb* zSv# zo{;X~A&Kl=CZTP4%F$t9;`t%`?r;J3%nxDcCEi@Fally6wQA-t7?B(C7nwmX+*ni7358|mh^ELJi@nGe>a%|Q8$lLi6gN-`WM)dm%V44G7E7aO1 zikK!A#x%Jq1Rm=G{t(`OBBw{H3zWYj)B*KTGhcboT(?xYBeb&s>#kPcVqA6XUjh7+ zCE8e~GCI$3>@O*D2M)g^N47m~AN%6?54`m};(c+-8p-SOUYw<$gl%Yp80<)XqTh2L z@h*TJ=Oke$6{{A;i30%2czB>|oO_)5_a0!HDe;y{*C%89o-;L$%57@87-Js#aPqX;AMxJ> z{-^x|eE*MJj*Xa|&*W2LV_mE|K>V;*;9BkA7Ucmu$M|vW8Q+_>4$QN>bWr_i{E+^8 z%J%`z?e8;de-=KfwO^b(Z^t}&k9m%KmCRq{vqVh~jF8`l{wJ&V|B!nli2KBPr4mM; zM80wIK?k@X-n2q|sPVcwPZ%8x@{A(|=TN@bYj(vy#J#40camcMU?t=#v}G-Y-?D}Q z-$B*{c2lde*B{dRkJJI`LDq$=56K1O)-X6G!8w&UzEs*!d;Qmr^MU+#D3G0Vowd48 z2jwKOlZVvr%axC;I`l2*=_s42Vd1mz)zmu8!O!*XL(|w z9yB_D9N+@#oBh?L^Ji3aM{Wm4E_-K<3*D#12j68K+hNB%eJ{2TJq&nBZSK@AuzwJJ zO~!r&F+L>w+x2szjw;a}!ilRGp6gN$%{?uvl}7`JnG3cKP}JlC+gxK`d-43I;@>$B zwOpRjH*0dleS6ajz)tQ)eT%+^w$VNwb<7oh@7OXI{J56<8LXNu7PytUkzC0dFa*C# z)JCkoR%spXuP%ZPK2scy4Tqu#hc7?B&@I7Ts6#QQbb1l3@qj-F9@2RT>KVo;WebDv zQu;mzx3kX?zs3@DVDbZFf_*XH*P8*KoCiKMKG2SRJNVF#7z@{xCi3_IoSso9_PM>i zm+;=ea?B6@s{N;P55`;=^^Dtx5SzX;hdib-+Oh6nPTpS){^WJs&(Hz-A?8N6E?}>S z9@M}7F|nG;r5AmH?Fbp+rW|yz;~J}JrL?{JDD1je{obv+*oSHlHV95vzO-|O9lyOk z^d3Vm;BoM=Omp!g7{eIVEQ0aKSybDrkIN^= z8x$^USi^}#3(Vwso9pAP)zXHzG4reG=v#`V6TU>h3InHq^K{^IY>qhu)+QfY;J*lJ zph2-y7bAw>);aKMkBL4bAt&$4x@)q0>T5A3x8vL>gnAJ9#1E)S6spC zz(UOI?F{}R)!U#t7-{^}F*z7{Ayp1zGvCIk(tc>2bbsuZUcB$ubMc&XpYlrw;+^_Q z(V6YL^s6h^qfRj!MZaovPz0`+r}K-{``UVR;^11~ckY#8&v(9AfBEoE9DC;g)2e&dY}DvR`pi4a=GU*f6mfAMxRw8xAEDu#tHS}o|gezHoxVB-^{|S zTI5>Hm)L7@=5^Jw3?wgW8sLuNUd-#dAo_?`a` L!1(^Fse%6kQ{amS literal 0 HcmV?d00001