From e67d1988971510158b16d33a643d89494a1a75ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A3=E9=9B=A8=E6=9E=97?= Date: Tue, 2 May 2023 23:48:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E6=9C=BA=E7=89=88=E7=A9=B7=E4=B8=BE?= =?UTF-8?q?=E8=B4=A8=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 7 + PrimeNumber.sln | 25 + PrimeNumber/App.config | 6 + PrimeNumber/Form1.resx | 120 +++ PrimeNumber/Helper/LogHelper.cs | 228 ++++++ PrimeNumber/Helper/PrimeNumberHelper.cs | 38 + PrimeNumber/MainForm.Designer.cs | 209 +++++ PrimeNumber/MainForm.cs | 198 +++++ PrimeNumber/MainForm.resx | 760 +++++++++++++++++++ PrimeNumber/PrimeNumber.csproj | 98 +++ PrimeNumber/Program.cs | 55 ++ PrimeNumber/Properties/AssemblyInfo.cs | 36 + PrimeNumber/Properties/Resources.Designer.cs | 63 ++ PrimeNumber/Properties/Resources.resx | 117 +++ PrimeNumber/Properties/Settings.Designer.cs | 26 + PrimeNumber/Properties/Settings.settings | 7 + PrimeNumber/opengps.ico | Bin 0 -> 38078 bytes 17 files changed, 1993 insertions(+) create mode 100644 .gitignore create mode 100644 PrimeNumber.sln create mode 100644 PrimeNumber/App.config create mode 100644 PrimeNumber/Form1.resx create mode 100644 PrimeNumber/Helper/LogHelper.cs create mode 100644 PrimeNumber/Helper/PrimeNumberHelper.cs create mode 100644 PrimeNumber/MainForm.Designer.cs create mode 100644 PrimeNumber/MainForm.cs create mode 100644 PrimeNumber/MainForm.resx create mode 100644 PrimeNumber/PrimeNumber.csproj create mode 100644 PrimeNumber/Program.cs create mode 100644 PrimeNumber/Properties/AssemblyInfo.cs create mode 100644 PrimeNumber/Properties/Resources.Designer.cs create mode 100644 PrimeNumber/Properties/Resources.resx create mode 100644 PrimeNumber/Properties/Settings.Designer.cs create mode 100644 PrimeNumber/Properties/Settings.settings create mode 100644 PrimeNumber/opengps.ico diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d95c904 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +################################################################################ +# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。 +################################################################################ + +/PrimeNumber/bin/Debug +/PrimeNumber/obj/Debug +/.vs/PrimeNumber diff --git a/PrimeNumber.sln b/PrimeNumber.sln new file mode 100644 index 0000000..9f42929 --- /dev/null +++ b/PrimeNumber.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33502.453 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrimeNumber", "PrimeNumber\PrimeNumber.csproj", "{4DE1916E-3164-4A40-8935-3FD3CAB9216D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4DE1916E-3164-4A40-8935-3FD3CAB9216D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4DE1916E-3164-4A40-8935-3FD3CAB9216D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4DE1916E-3164-4A40-8935-3FD3CAB9216D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4DE1916E-3164-4A40-8935-3FD3CAB9216D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {FEA967DF-C1FE-4D62-8F8F-CA44F04C6502} + EndGlobalSection +EndGlobal diff --git a/PrimeNumber/App.config b/PrimeNumber/App.config new file mode 100644 index 0000000..8e15646 --- /dev/null +++ b/PrimeNumber/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/PrimeNumber/Form1.resx b/PrimeNumber/Form1.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/PrimeNumber/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/PrimeNumber/Helper/LogHelper.cs b/PrimeNumber/Helper/LogHelper.cs new file mode 100644 index 0000000..9670f2f --- /dev/null +++ b/PrimeNumber/Helper/LogHelper.cs @@ -0,0 +1,228 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Web; + +namespace PrimeNumber.Helper +{ + public class LogHelper + { + static string assemblyDirPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + + /// + /// 创建文件夹 + /// + /// 文件夹路径 + /// + public static bool CreateFolder(string path) + { + //try + //{ + + //目录已存在等同于创建成功处理 + if (Directory.Exists(path.Trim('\\'))) + { + return true; + } + else + { + //创建文件夹 + DirectoryInfo dirInfo = Directory.CreateDirectory(path); + return true; + } + //} + //catch (Exception ex) + //{ + // Console.WriteLine(ex.Message); + // return false; + //} + } + + /// + /// //创建文件 + /// + /// path 文件路径 + public static void CreateFile(string path) + { + //try + //{ + if (CreateFolder(path.Substring(0, path.LastIndexOf("\\")))) + { + if (!File.Exists(path)) + { + FileStream fs = File.Create(path); + fs.Close(); + } + } + //} + //catch (Exception ex) + //{ + // Console.WriteLine(ex.Message); + // return; + //} + } + + /// + /// 删除文件 + /// + /// + public void DeleteFile(string path) + { + if (File.Exists(path)) + { + File.Delete(path); + } + } + + /// + /// 写文件 + /// + /// 文件路径 + /// 文本内容 + public static void WriteFile(string path, string content) + { + try + { + if (!File.Exists(path)) + CreateFile(path); + + using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write)) + using (StreamWriter sw = new StreamWriter(fs)) + { + sw.WriteLine(content); + sw.Close(); + fs.Close(); + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + return; + } + } + + /// + /// 将即时日志保存入日志文件(asp.net WebForm) + /// + //public static void WriteAppDataLog(string content) + //{ + // //string assemblyDirPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + // string assemblyDirPath = HttpRuntime.AppDomainAppPath.ToString(); + + // string logPath = assemblyDirPath + "\\App_Data\\Log"; + // string logName = string.Format("Log_{0}.txt", DateTime.Now.ToString("yyyyMMdd")); + // content = DateTime.Now.ToString("HH:mm:ss.ffffff") + " , " + content; + // WriteLogFile(logPath, content, logName); + //} + + /// + /// 将即时日志保存入日志文件(bin目录下创建Log文件夹,按天生成日志文件) + /// + public static void WriteBinLog(string content, string forder = "Log", string fileName = "", bool autoTime = true, bool autoTimeFileName = true) + { + try + { + //string assemblyDirPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + //string assemblyDirPath = HttpRuntime.AppDomainAppPath.ToString(); + string logPath = assemblyDirPath; + string logName = string.Format("{0}.txt", fileName); + + if (!string.IsNullOrEmpty(forder)) + logPath = Path.Combine(assemblyDirPath, forder); + + if (string.IsNullOrEmpty(fileName)) + fileName = forder; + if (string.IsNullOrEmpty(fileName)) + autoTimeFileName = true; + if (autoTimeFileName) + logName = string.Format("{0}_{1}.txt", fileName, DateTime.Now.ToString("yyyyMMdd")); + + if (autoTime) + content = string.Format("{0},{1}", DateTime.Now.ToString("HH:mm:ss.ffffff"), content); + + WriteLogFile(logPath, content, logName); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + //故意吞噬异常 + } + } + + private static object objLock = ""; + /// + /// 将即时日志保存入日志文件 + /// + public static void WriteLogFile(string directoryPath, string content, string fileName) + { + //写入新的文件 + string filePath = ""; + if (directoryPath.Trim().Trim('/').Trim('\\') == "") + { + filePath = fileName; + } + else + { + if (!Directory.Exists(directoryPath)) + CreateFolder(directoryPath); + filePath = directoryPath + "\\" + fileName; + } + lock (objLock) + { + using (FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write)) + using (StreamWriter sw = new StreamWriter(fs)) + { + sw.WriteLine(content); + //sw.Flush(); + sw.Close(); + fs.Close(); + } + } + } + + #region 控制台输出日志 + static object cwLock = new object(); + public static void WriteLine(string msg, object arg0, object arg1, object arg2) + { + string tips = string.Format(msg, arg0, arg1, arg2); + WriteLine(tips); + } + public static void WriteLine(string msg, object arg0, object arg1) + { + string tips = string.Format(msg, arg0, arg1); + WriteLine(tips); + } + public static void WriteLine(string msg, object arg0) + { + string tips = string.Format(msg, arg0); + WriteLine(tips); + } + public static void WriteLine(string msg, ConsoleColor color = ConsoleColor.Gray, bool prefixTime = true) + { + try + { + //关闭控制台显示时候,Console已释放,可能会调用到 Console.WriteLine,所以要吞噬异常 + //if (color != ConsoleColor.Gray) + //{ + lock (cwLock) + { + Console.ForegroundColor = color; + Console.WriteLine("{0}, {1}", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fffffff"), msg); + Console.ResetColor(); + } + //} + //else + //{ + // Console.WriteLine("{0}, {1}", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fffffff"), msg); + //} + } + catch (Exception) + { + } + } + #endregion + + } +} diff --git a/PrimeNumber/Helper/PrimeNumberHelper.cs b/PrimeNumber/Helper/PrimeNumberHelper.cs new file mode 100644 index 0000000..f045d8b --- /dev/null +++ b/PrimeNumber/Helper/PrimeNumberHelper.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PrimeNumber.Helper +{ + public class PrimeNumberHelper + { + /// + /// 判断某个数字是否为质数 + /// + /// + /// + public static bool IsPrimeNumber(UInt64 number) + { + //0,1单独处理(类型UInt64最小0) + if (number < 2) + return false; + + //2单独处理 + if (number == 2) + return true; + + //遍历检查 + for (UInt64 i = 2; i < number; i++) + { + if (number % i == 0) + { + return false; + } + } + + return true; + } + } +} diff --git a/PrimeNumber/MainForm.Designer.cs b/PrimeNumber/MainForm.Designer.cs new file mode 100644 index 0000000..695e6bd --- /dev/null +++ b/PrimeNumber/MainForm.Designer.cs @@ -0,0 +1,209 @@ + +namespace PrimeNumber +{ + partial class MainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.txtMax = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.txtMsg = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.txtStartValue = new System.Windows.Forms.TextBox(); + this.btnStartParallel = new System.Windows.Forms.Button(); + this.btnFillMax = new System.Windows.Forms.Button(); + this.btnStop = new System.Windows.Forms.Button(); + this.txtSetCores = new System.Windows.Forms.TextBox(); + this.btnSetCores = new System.Windows.Forms.Button(); + this.lbMsg = new System.Windows.Forms.ListBox(); + this.label3 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // txtMax + // + this.txtMax.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtMax.Location = new System.Drawing.Point(72, 31); + this.txtMax.Name = "txtMax"; + this.txtMax.Size = new System.Drawing.Size(125, 21); + this.txtMax.TabIndex = 1; + this.txtMax.Text = "10000"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(1, 34); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(65, 12); + this.label1.TabIndex = 2; + this.label1.Text = "限制最大值"; + // + // txtMsg + // + this.txtMsg.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtMsg.Location = new System.Drawing.Point(3, 110); + this.txtMsg.Name = "txtMsg"; + this.txtMsg.ReadOnly = true; + this.txtMsg.Size = new System.Drawing.Size(309, 21); + this.txtMsg.TabIndex = 6; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(1, 9); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(65, 12); + this.label2.TabIndex = 7; + this.label2.Text = "穷举起始值"; + // + // txtStartValue + // + this.txtStartValue.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtStartValue.Location = new System.Drawing.Point(72, 6); + this.txtStartValue.Name = "txtStartValue"; + this.txtStartValue.Size = new System.Drawing.Size(125, 21); + this.txtStartValue.TabIndex = 1; + this.txtStartValue.Text = "0"; + // + // btnStartParallel + // + this.btnStartParallel.Location = new System.Drawing.Point(3, 86); + this.btnStartParallel.Name = "btnStartParallel"; + this.btnStartParallel.Size = new System.Drawing.Size(63, 23); + this.btnStartParallel.TabIndex = 0; + this.btnStartParallel.Text = "开始Parallel"; + this.btnStartParallel.UseVisualStyleBackColor = true; + this.btnStartParallel.Click += new System.EventHandler(this.btnStartParallel_Click); + // + // btnFillMax + // + this.btnFillMax.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnFillMax.Location = new System.Drawing.Point(203, 30); + this.btnFillMax.Name = "btnFillMax"; + this.btnFillMax.Size = new System.Drawing.Size(109, 23); + this.btnFillMax.TabIndex = 0; + this.btnFillMax.Text = "填充long最大值"; + this.btnFillMax.UseVisualStyleBackColor = true; + this.btnFillMax.Click += new System.EventHandler(this.btnFillMax_Click); + // + // btnStop + // + this.btnStop.Location = new System.Drawing.Point(72, 86); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(63, 23); + this.btnStop.TabIndex = 8; + this.btnStop.Text = "终止"; + this.btnStop.UseVisualStyleBackColor = true; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // txtSetCores + // + this.txtSetCores.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtSetCores.Location = new System.Drawing.Point(72, 57); + this.txtSetCores.Name = "txtSetCores"; + this.txtSetCores.Size = new System.Drawing.Size(125, 21); + this.txtSetCores.TabIndex = 9; + this.txtSetCores.Text = "4"; + // + // btnSetCores + // + this.btnSetCores.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnSetCores.Location = new System.Drawing.Point(203, 56); + this.btnSetCores.Name = "btnSetCores"; + this.btnSetCores.Size = new System.Drawing.Size(109, 23); + this.btnSetCores.TabIndex = 10; + this.btnSetCores.Text = "工作内核数设置"; + this.btnSetCores.UseVisualStyleBackColor = true; + this.btnSetCores.Click += new System.EventHandler(this.btnSetCores_Click); + // + // lbMsg + // + this.lbMsg.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.lbMsg.FormattingEnabled = true; + this.lbMsg.ItemHeight = 12; + this.lbMsg.Location = new System.Drawing.Point(3, 130); + this.lbMsg.Name = "lbMsg"; + this.lbMsg.Size = new System.Drawing.Size(309, 64); + this.lbMsg.TabIndex = 11; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(1, 59); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(65, 12); + this.label3.TabIndex = 12; + this.label3.Text = "启用内核数"; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(314, 202); + this.Controls.Add(this.label3); + this.Controls.Add(this.lbMsg); + this.Controls.Add(this.btnSetCores); + this.Controls.Add(this.txtSetCores); + this.Controls.Add(this.btnStop); + this.Controls.Add(this.label2); + this.Controls.Add(this.txtMsg); + this.Controls.Add(this.label1); + this.Controls.Add(this.txtStartValue); + this.Controls.Add(this.txtMax); + this.Controls.Add(this.btnFillMax); + this.Controls.Add(this.btnStartParallel); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MinimumSize = new System.Drawing.Size(330, 175); + this.Name = "MainForm"; + this.Text = "穷举质数"; + this.Load += new System.EventHandler(this.PrimeNumberForm_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.TextBox txtMax; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtMsg; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtStartValue; + private System.Windows.Forms.Button btnStartParallel; + private System.Windows.Forms.Button btnFillMax; + private System.Windows.Forms.Button btnStop; + private System.Windows.Forms.TextBox txtSetCores; + private System.Windows.Forms.Button btnSetCores; + private System.Windows.Forms.ListBox lbMsg; + private System.Windows.Forms.Label label3; + } +} \ No newline at end of file diff --git a/PrimeNumber/MainForm.cs b/PrimeNumber/MainForm.cs new file mode 100644 index 0000000..4e40030 --- /dev/null +++ b/PrimeNumber/MainForm.cs @@ -0,0 +1,198 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; + +namespace PrimeNumber +{ + public partial class MainForm : Form + { + /* + * //Parallel 不支持UInt64,所以使用Int64 + * + * 2023/03/27 15:22:38.9969871,Parallel起始值:2,终止值1000000,结果数量:78498,耗时:00:00:21.8807827 + * 2023/03/27 15:28:46.9166055,Task起始值:2,终止值1000000,结果数量:78498,耗时:00:06:00.3271774 + * + */ + + + public MainForm() + { + InitializeComponent(); + } + + //Parallel并行计算 + ParallelOptions parallelOptions; + CancellationTokenSource cts; + + //进度监控线程 + Task tMoniter = null; + CancellationTokenSource tMoniter_cts = null; + + //结果 + static object PrimeNumberListLock = new object(); + static List PrimeNumberList = new List(); + + private void PrimeNumberForm_Load(object sender, EventArgs e) + { + this.txtMax.Text = "100000";//Int64.MaxValue.ToString(); + this.txtSetCores.Text = Environment.ProcessorCount.ToString(); + RuningStatus(false); + } + + #region log + private delegate void ShowInLogCallback(string msg, bool autoTime = true); + private ShowInLogCallback showInlogMethodCallback; + private void ShowLog(string msg, bool autoTime = true) + { + if (this.lbMsg.InvokeRequired) + { + showInlogMethodCallback = new ShowInLogCallback(ShowLog); + lbMsg.Invoke(showInlogMethodCallback, new object[] { msg, autoTime }); + } + else + { + if (autoTime) + { + msg = string.Format("{0},{1}", DateTime.Now.ToString("HH:mm:ss.fffffff"), msg); + } + Helper.LogHelper.WriteBinLog(msg, "Log"); + this.lbMsg.Items.Insert(0, msg); + } + } + #endregion + + private void btnFillMax_Click(object sender, EventArgs e) + { + this.txtMax.Text = Int64.MaxValue.ToString(); + } + + private void btnStartParallel_Click(object sender, EventArgs e) + { + DateTime dtStart = DateTime.Now; + Int64 startValue = Convert.ToInt64(this.txtStartValue.Text.Trim()); + Int64 endValue = Convert.ToInt64(this.txtMax.Text.Trim()); + + ParallelLoopResult result = new ParallelLoopResult(); + PrimeNumberList.Clear(); + + RuningStatus(true); + + Task.Run(() => + { + try + { + ShowLog("启动计算"); + string fileName = string.Format("{0}-{1}", startValue, endValue); + //计算核心 + cts = new CancellationTokenSource(); + parallelOptions = new ParallelOptions() { MaxDegreeOfParallelism = Convert.ToInt32(this.txtSetCores.Text.Trim()), CancellationToken = cts.Token, }; + result = Parallel.For(startValue, endValue, parallelOptions, (x, pls) => + { + bool IsPrimeNumber = Helper.PrimeNumberHelper.IsPrimeNumber(Convert.ToUInt64(x.ToString())); + //Console.WriteLine($"{x}:{b}"); + + if (IsPrimeNumber) + { + lock (PrimeNumberListLock) + { + PrimeNumberList.Add(x); + } + Helper.LogHelper.WriteBinLog(x.ToString(), "PrimeNumber_Parallel", fileName, false, false); + } + }); + } + catch (Exception ex) + { + ShowLog(ex.Message); + } + finally + { + TimeSpan ts = DateTime.Now - dtStart; + string tips = string.Format("Parallel,起始值:{0},终止值{1},结果数量:{2},耗时:{3}", startValue, endValue, PrimeNumberList.Count(), ts.ToString()); + ShowLog(tips); + RuningStatus(false); + } + }); + + //进度监控 + tMoniter_cts = new CancellationTokenSource(); + tMoniter = new Task(() => + { + DateTime dtEnd = DateTime.Now; + TimeSpan ts = dtEnd - dtStart; + try + { + //Thread.Sleep(1 * 1000);//给result启动预留时间 + while (!result.IsCompleted) + { + if (tMoniter_cts.Token.IsCancellationRequested) + { + ShowMoniter(string.Format("得到质数总数:{0},后台运行状态:{1},耗时:{2}", PrimeNumberList.Count(), "取消", ts.ToString())); + return; + } + + dtEnd = DateTime.Now; + ts = dtEnd - dtStart; + ShowMoniter(string.Format("得到质数总数:{0},后台运行状态:{1},耗时:{2}", PrimeNumberList.Count(), "运行中", ts.ToString())); + Thread.Sleep(1 * 1000); + } + //完成 + ShowMoniter(string.Format("得到质数总数:{0},后台运行状态:{1},耗时:{2}", PrimeNumberList.Count(), "完成", ts.ToString())); + } + catch (Exception ex) + { + ShowLog(ex.Message); + } + }, tMoniter_cts.Token); + tMoniter.Start(); + + } + + private void btnStop_Click(object sender, EventArgs e) + { + ShowLog("终止计算"); + if (cts != null) + { + cts.Cancel(); + } + if (tMoniter_cts != null) + { + tMoniter_cts.Cancel(); + } + RuningStatus(false); + } + + private void btnSetCores_Click(object sender, EventArgs e) + { + parallelOptions.MaxDegreeOfParallelism = Convert.ToInt32(this.txtSetCores.Text.Trim()); + ShowLog("工作内核数设置为" + parallelOptions.MaxDegreeOfParallelism); + } + + private void RuningStatus(bool isRuning) + { + this.btnStartParallel.Invoke(new Action(() => + { + this.btnStartParallel.Enabled = !isRuning; + this.btnFillMax.Enabled = !isRuning; + this.btnSetCores.Enabled = !isRuning; + this.btnStop.Enabled = isRuning; + })); + } + private void ShowMoniter(string msg) + { + this.txtMsg.Invoke(new Action(() => + { + this.txtMsg.Text = DateTime.Now.ToString("HH:mm:ss.fffffff") + "," + msg + Environment.NewLine; + })); + } + } +} diff --git a/PrimeNumber/MainForm.resx b/PrimeNumber/MainForm.resx new file mode 100644 index 0000000..f52f01a --- /dev/null +++ b/PrimeNumber/MainForm.resx @@ -0,0 +1,760 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAEAYGAAAAEAIAColAAAFgAAACgAAABgAAAAwAAAAAEAIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAA + AAD////////////////////////////////////////////////////////////////9/f3//f39//39 + /f/9/f3/4eHh/0BAQP8HBwf/AgIC/xsbG/85OTn/NDQ0/zQ0NP8yMjL/Ly8v/xYWFv8EBAT/BAQE/wkJ + Cf9VVVX/n5+f/5ubm/+BgYH/bm5u/2tra/9qamr/bm5u/3Jycv92dnb/d3d3/3R0dP9zc3P/d3d3/3t7 + e/97e3v/enp6/3h4eP94eHj/jo6O/4ODg/8XFxf/AgIC/wEBAf8QEBD/IyMj/yAgIP8hISH/Hx8f/xwc + HP8aGhr/GBgY/xkZGf8bGxv/HR0d/yAgIP8kJCT/ExMT/wcHB/8BAQH/BwcH/xkZGf8pKSn/LS0t/y8v + L/8zMzP/IyMj/w4ODv8FBQX/CwsL/1tbW//r6+v/+/v7///////+/v7//v7+//////////////////// + ///////////////////+/v7//f39//39/f////////////////////////////////////////////// + ///////////////////9/f3//f39//39/f/9/f3/0dHR/ywsLP8GBgb/BQUF/yEhIf8zMzP/KCgo/zAw + MP8vLy//LS0t/xkZGf8GBgb/BgYG/wgICP9OTk7/nZ2d/56env9/f3//ZmZm/2RkZP9lZWX/aWlp/21t + bf9xcXH/dHR0/3Fxcf9wcHD/dHR0/3l5ef97e3v/enp6/3h4eP95eXn/kZGR/4SEhP8WFhb/AgIC/wEB + Af8QEBD/IyMj/yAgIP8hISH/Hx8f/xwcHP8aGhr/FRUV/xcXF/8ZGRn/Gxsb/x0dHf8mJib/FRUV/wUF + Bf8EBAT/BwcH/wwMDP8mJib/LS0t/zExMf80NDT/Hh4e/wgICP8HBwf/DAwM/2dnZ//z8/P//f39//// + ///8/Pz//f39///////////////////////////////////////+/v7//f39//39/f////////////// + ///////////////////////////////////////////////////9/f3//f39//39/f/9/f3/xsbG/x0d + Hf8GBgb/CgoK/ygoKP8zMzP/IiIi/ygoKP8oKCj/LCws/xkZGf8FBQX/BAQE/wQEBP9HR0f/lJSU/5eX + l/97e3v/YWFh/15eXv9dXV3/YGBg/2dnZ/9ra2v/bGxs/2tra/9tbW3/cnJy/3Z2dv94eHj/d3d3/3d3 + d/96enr/kpKS/4ODg/8XFxf/AQEB/wMDA/8RERH/IiIi/yIiIv8hISH/Hx8f/xwcHP8ZGRn/FRUV/xYW + Fv8YGBj/GBgY/yAgIP8pKSn/ICAg/w0NDf8HBwf/BwcH/wgICP8lJSX/LS0t/zExMf8zMzP/Gxsb/wYG + Bv8NDQ3/CwsL/2pqav/09PT//v7+//39/f/5+fn/+Pj4//v7+//7+/v//v7+//////////////////// + ///+/v7//f39//39/f////////////////////////////////////////////////////////////// + ///9/f3//f39//39/f/9/f3/zMzM/yEhIf8GBgb/CgoK/yMjI/8xMTH/IiIi/yUlJf8jIyP/LCws/xgY + GP8DAwP/BwcH/wYGBv9DQ0P/hoaG/4aGhv9tbW3/VVVV/09PT/9HR0f/SUlJ/1hYWP9hYWH/YWFh/19f + X/9lZWX/a2tr/29vb/9vb2//cXFx/3Nzc/94eHj/jY2N/4GBgf8jIyP/BQUF/wYGBv8SEhL/Hx8f/yYm + Jv8jIyP/ICAg/xsbG/8YGBj/FxcX/xcXF/8XFxf/FxcX/xwcHP8lJSX/JiYm/xISEv8EBAT/AwMD/wcH + B/8hISH/MDAw/zQ0NP81NTX/Hh4e/wgICP8HBwf/CgoK/2xsbP/j4+P/6urq/+/v7//5+fn/+vr6//v7 + +//9/f3//Pz8//z8/P/////////////////+/v7//f39//39/f////////////////////////////// + ///////////////////////////////////9/f3//f39//39/f/9/f3/zMzM/yYmJv8DAwP/CQkJ/yEh + If80NDT/JCQk/yMjI/8jIyP/Li4u/xoaGv8GBgb/CgoK/wgICP9DQ0P/f39//3h4eP9gYGD/SUlJ/z8/ + P/8uLi7/Kysr/z09Pf9RUVH/WFhY/1hYWP9gYGD/aWlp/25ubv9vb2//cXFx/3R0dP95eXn/ioqK/4KC + gv8yMjL/BgYG/wUFBf8NDQ3/Gxsb/ycnJ/8jIyP/ICAg/xsbG/8YGBj/FxcX/xcXF/8XFxf/FxcX/xwc + HP8lJSX/JiYm/xISEv8FBQX/AwMD/wICAv8YGBj/MzMz/zg4OP82Njb/HR0d/xMTE/8ICAj/CwsL/y8v + L/9TU1P/XV1d/2lpaf+tra3/7e3t//n5+f/9/f3//Pz8//39/f/////////////////+/v7//f39//39 + /f/////////////////////////////////////////////////////////////////9/f3//f39//39 + /f/9/f3/1NTU/zExMf8DAwP/CgoK/xcXF/8wMDD/KSkp/ygoKP8lJSX/MTEx/x0dHf8ICAj/CwsL/wkJ + Cf9ERET/eXl5/2xsbP9UVFT/Pz8//y8vL/8cHBz/GBgY/yIiIv8zMzP/QUFB/0xMTP9WVlb/YmJi/2ho + aP9ra2v/bW1t/29vb/90dHT/fHx8/3l5ef8/Pz//CAgI/wQEBP8ICAj/FxcX/ycnJ/8jIyP/ICAg/xsb + G/8YGBj/FxcX/xcXF/8XFxf/FxcX/xwcHP8lJSX/JiYm/xISEv8FBQX/AwMD/wUFBf8eHh7/OTk5/zw8 + PP84ODj/HR0d/wYGBv8GBgb/DQ0N/wkJCf8GBgb/ERER/wgICP83Nzf/np6e/+rq6v/7+/v/9vb2//// + ///////////////////+/v7//f39//39/f////////////////////////////////////////////// + ///////////////////+/v7//v7+//7+/v/+/v7/6Ojo/1JSUv8ICAj/BgYG/wwMDP8pKSn/LCws/yws + LP8qKir/MTEx/xwcHP8HBwf/DAwM/xMTE/9HR0f/aGho/1RUVP8/Pz//Kysr/x0dHf8VFRX/FhYW/xcX + F/8eHh7/KCgo/zQ0NP9BQUH/T09P/1dXV/9ZWVn/W1tb/11dXf9eXl7/X19f/2ZmZv9GRkb/ERER/wQE + BP8GBgb/EBAQ/yUlJf8lJSX/Hx8f/xoaGv8YGBj/FxcX/xcXF/8XFxf/FxcX/xwcHP8iIiL/JCQk/xMT + E/8FBQX/BAQE/woKCv8rKyv/Pj4+/z8/P/80NDT/Ghoa/wsLC/8HBwf/CAgI/w4ODv8NDQ3/DAwM/wkJ + Cf8JCQn/HR0d/4qKiv/t7e3/9/f3//39/f/+/v7//v7+//7+/v/9/f3//f39//39/f////////////// + ////////////////////////////////////////////////////////////////////////9PT0/4GB + gf8NDQ3/AgIC/wYGBv8hISH/MDAw/y4uLv8wMDD/MjIy/xgYGP8DAwP/BgYG/x8fH/9QUFD/VlZW/zs7 + O/8pKSn/Ghoa/xkZGf8cHBz/Gxsb/xsbG/8bGxv/HBwc/yMjI/8uLi7/Ozs7/0JCQv9DQ0P/RERE/0RE + RP9FRUX/RkZG/0ZGRv84ODj/FhYW/wQEBP8GBgb/BgYG/yAgIP8tLS3/ISEh/xgYGP8XFxf/FxcX/xcX + F/8XFxf/FxcX/xoaGv8cHBz/ICAg/xQUFP8GBgb/BQUF/wwMDP82Njb/RERE/0hISP8tLS3/EBAQ/woK + Cv8JCQn/Q0ND/3Fxcf+CgoL/a2tr/yAgIP8EBAT/BwcH/zk5Of/Q0ND/+Pj4//v7+//9/f3//f39//39 + /f/9/f3//f39//39/f////////////////////////////////////////////////////////////// + ////////////////////////+/v7/8LCwv8sLCz/BAQE/wUFBf8cHBz/MzMz/zc3N/81NTX/NjY2/xsb + G/8DAwP/DAwM/zAwMP9WVlb/RUVF/ygoKP8gICD/Gxsb/xwcHP8dHR3/Gxsb/xsbG/8bGxv/HR0d/yEh + If8lJSX/KSkp/ywsLP8rKyv/Kysr/ysrK/8sLCz/Ly8v/yoqKv8pKSn/IyMj/wgICP8DAwP/BAQE/xcX + F/8sLCz/JSUl/xwcHP8XFxf/FxcX/xcXF/8XFxf/FxcX/xoaGv8cHBz/ICAg/xMTE/8FBQX/BQUF/w4O + Dv86Ojr/TExM/0xMTP8rKyv/CQkJ/wkJCf8TExP/mJiY/+zs7P/29vb/5eXl/4ODg/8eHh7/CAgI/ygo + KP/AwMD/+vr6//39/f/9/f3//f39//39/f/9/f3//f39//39/f////////////////////////////// + /////////////////////////////////////////////////////////Pz8/+3t7f9vb2//CgoK/wcH + B/8XFxf/ODg4/0BAQP86Ojr/Ozs7/x0dHf8DAwP/CQkJ/y4uLv9LS0v/Nzc3/yIiIv8dHR3/HBwc/xoa + Gv8aGhr/Gxsb/xsbG/8bGxv/HBwc/x8fH/8gICD/IiIi/yIiIv8fHx//Hx8f/x8fH/8eHh7/HR0d/x0d + Hf8eHh7/LCws/xwcHP8KCgr/BQUF/wkJCf8cHBz/Hx8f/x0dHf8ZGRn/FxcX/xcXF/8XFxf/FxcX/xoa + Gv8cHBz/ICAg/xMTE/8FBQX/BQUF/xISEv9AQED/Tk5O/z8/P/8aGhr/BgYG/wYGBv8mJib/wcHB//n5 + +f/8/Pz/+/v7/9TU1P87Ozv/BQUF/yUlJf/CwsL//Pz8//z8/P/9/f3//f39//39/f/9/f3//f39//39 + /f////////////////////////////////////////////////////////////////////////////// + ////////+/v7//j4+P+oqKj/FBQU/woKCv8TExP/Ozs7/0dHR/8+Pj7/QEBA/yAgIP8EBAT/BQUF/yIi + Iv8+Pj7/NjY2/ygoKP8hISH/Hh4e/xkZGf8ZGRn/HR0d/x0dHf8dHR3/Hh4e/yAgIP8jIyP/JSUl/yUl + Jf8hISH/ICAg/x4eHv8cHBz/HBwc/x8fH/8fHx//Li4u/y0tLf8VFRX/CgoK/wMDA/8NDQ3/GBgY/xwc + HP8YGBj/GBgY/xcXF/8XFxf/GRkZ/xoaGv8dHR3/IiIi/xUVFf8FBQX/CAgI/xYWFv9CQkL/TExM/y4u + Lv8LCwv/CAgI/wQEBP9HR0f/4uLi//r6+v/6+vr/9fX1/9PT0/89PT3/CgoK/yQkJP/CwsL/+fn5//f3 + 9//9/f3/+fn5//z8/P/8/Pz//f39//39/f////////////////////////////////////////////// + ////////////////////////////////////////+/v7//b29v/Ozs7/MjIy/wQEBP8NDQ3/MTEx/0RE + RP9CQkL/R0dH/yYmJv8EBAT/AwMD/xUVFf84ODj/PT09/zIyMv8xMTH/LCws/ywsLP8uLi7/MDAw/zAw + MP8wMDD/Ly8v/y0tLf8tLS3/LS0t/y4uLv8wMDD/Kysr/yYmJv8kJCT/JSUl/yYmJv8rKyv/MzMz/zs7 + O/8sLCz/GBgY/woKCv8LCwv/ExMT/xkZGf8cHBz/HBwc/xkZGf8ZGRn/HR0d/xsbG/8fHx//JSUl/xUV + Ff8FBQX/CwsL/x8fH/9DQ0P/SUlJ/yEhIf8ICAj/CQkJ/wwMDP95eXn/9PT0//f39//5+fn/9vb2/8jI + yP8xMTH/BwcH/xQUFP+Ojo7/1tbW/93d3f/19fX/8vLy//r6+v/6+vr/+/v7//v7+/////////////// + /////////////////////////////////////////////////////////////////////////f39//n5 + +f/s7Oz/b29v/wMDA/8CAgL/FBQU/zY2Nv9JSUn/TExM/zAwMP8KCgr/AQEB/w4ODv8wMDD/Pz8//zw8 + PP88PDz/NDQ0/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/Li4u/yws + LP8qKir/Kysr/ysrK/8wMDD/OTk5/0dHR/9JSUn/Pj4+/ywsLP8bGxv/FhYW/xsbG/8jIyP/IiIi/x0d + Hf8cHBz/Hx8f/x0dHf8gICD/JCQk/xISEv8DAwP/CQkJ/ycnJ/9JSUn/QEBA/xoaGv8FBQX/BAQE/xgY + GP+rq6v/+/v7//n5+f/5+fn/9fX1/46Ojv8YGBj/CAgI/wQEBP8XFxf/Kioq/0dHR/+Ojo7/1NTU//T0 + 9P/5+fn/+fn5//r6+v////////////////////////////////////////////////////////////// + /////////////////////////f39//r6+v/6+vr/rKys/x4eHv8DAwP/AwMD/yQkJP9FRUX/S0tL/zo6 + Ov8VFRX/BQUF/wkJCf8cHBz/Kioq/yoqKv8nJyf/Gxsb/xUVFf8UFBT/FBQU/xQUFP8UFBT/EhIS/w0N + Df8NDQ3/DQ0N/w0NDf8LCwv/CwsL/woKCv8LCwv/Dg4O/w4ODv8UFBT/HBwc/ywsLP85OTn/QEBA/z8/ + P/85OTn/NjY2/zY2Nv84ODj/MjIy/ysrK/8nJyf/Jycn/ycnJ/8pKSn/Kioq/xYWFv8FBQX/CgoK/zAw + MP9HR0f/Kysr/w4ODv8EBAT/BgYG/0ZGRv/Y2Nj/+/v7//39/f/8/Pz/29vb/0BAQP8EBAT/BAQE/wsL + C/8FBQX/BQUF/wUFBf8ODg7/QUFB/6enp//y8vL/9/f3//j4+P////////////////////////////// + ///////////////////////////////////////////////////+/v7//f39//z8/P/8/Pz/09PT/0xM + TP8LCwv/AwMD/xUVFf8wMDD/NDQ0/y0tLf8TExP/AwMD/wEBAf8EBAT/CgoK/wkJCf8ICAj/BgYG/wgI + CP8KCgr/CAgI/wgICP8HBwf/BQUF/wMDA/8DAwP/AwMD/wICAv8AAAD/AQEB/wICAv8CAgL/AQEB/wIC + Av8GBgb/CgoK/wYGBv8JCQn/ERER/xgYGP8fHx//Kysr/zMzM/81NTX/OTk5/zQ0NP8wMDD/MDAw/zEx + Mf8yMjL/MDAw/xwcHP8KCgr/Dw8P/zU1Nf8/Pz//GBgY/wUFBf8DAwP/Dg4O/42Njf/29vb/+vr6//z8 + /P/5+fn/09PT/zQ0NP8CAgL/AgIC/wcHB/8KCgr/Dw8P/wMDA/8LCwv/CQkJ/yoqKv+wsLD/9PT0//T0 + 9P/////////////////////////////////////////////////////////////////5+fn//Pz8//// + ///9/f3//Pz8//r6+v/4+Pj/8vLy/4+Pj/8YGBj/CgoK/wYGBv8ODg7/Dw8P/wwMDP8FBQX/BAQE/wUF + Bf8FBQX/BgYG/wQEBP8CAgL/AQEB/wEBAf8EBAT/CAgI/wcHB/8FBQX/BQUF/wYGBv8GBgb/BgYG/wYG + Bv8EBAT/BQUF/wYGBv8HBwf/BQUF/wQEBP8DAwP/AwMD/wUFBf8FBQX/BQUF/wUFBf8FBQX/CAgI/w4O + Dv8TExP/GRkZ/x8fH/8nJyf/LS0t/zU1Nf88PDz/NTU1/yMjI/8UFBT/Hx8f/z4+Pv8yMjL/CwsL/wUF + Bf8BAQH/JiYm/8LCwv/6+vr/+fn5//n5+f/+/v7/6Ojo/4iIiP9TU1P/XFxc/2NjY/9/f3//eHh4/0hI + SP8XFxf/BwcH/wUFBf9UVFT/5+fn//Ly8v////////////////////////////////////////////// + ///////////////////9/f3//Pz8//v7+//7+/v/+vr6//j4+P/p6en/ra2t/1NTU/8NDQ3/BgYG/wUF + Bf8JCQn/CQkJ/wkJCf8EBAT/AgIC/wMDA/8FBQX/BwcH/wkJCf8KCgr/DAwM/w0NDf8PDw//ERER/xQU + FP8XFxf/Gxsb/yEhIf8hISH/ISEh/yAgIP8bGxv/GBgY/xUVFf8TExP/EBAQ/wsLC/8GBgb/BAQE/wYG + Bv8GBgb/BgYG/wYGBv8FBQX/BgYG/wgICP8JCQn/AgIC/wUFBf8NDQ3/ExMT/yQkJP83Nzf/QEBA/zg4 + OP8vLy//NTU1/zk5Of8bGxv/BwcH/wQEBP8HBwf/VFRU/+Dg4P/9/f3/+fn5//b29v/9/f3//Pz8//Hx + 8f/o6Oj/7Ozs/+zs7P/19fX/9fX1/9/f3/9iYmL/DQ0N/wsLC/8uLi7/0NDQ//n5+f////////////// + ///////////////////////////////////////////////////+/v7//Pz8//j4+P/w8PD/1NTU/5SU + lP9dXV3/IyMj/wgICP8GBgb/DAwM/wgICP8HBwf/DAwM/xQUFP8XFxf/Ghoa/yAgIP8nJyf/LS0t/y0t + Lf8pKSn/JiYm/yQkJP8iIiL/IyMj/yQkJP8mJib/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8oKCj/JiYm/yUl + Jf8kJCT/JCQk/yAgIP8cHBz/GRkZ/xYWFv8WFhb/FhYW/xUVFf8ODg7/CwsL/wgICP8GBgb/BgYG/wYG + Bv8EBAT/BAQE/woKCv8YGBj/LS0t/z09Pf9ERET/T09P/0BAQP8XFxf/BQUF/wQEBP8dHR3/mZmZ//f3 + 9//8/Pz/+vr6//n5+f/8/Pz/+Pj4//39/f/9/f3//Pz8//39/f/7+/v//f39//r6+v+Xl5f/Dg4O/wIC + Av8cHBz/vb29//f39/////////////////////////////////////////////39/f/+/v7//v7+//7+ + /v/29vb/8vLy/8LCwv92dnb/OTk5/xMTE/8ODg7/AwMD/wUFBf8LCwv/CgoK/xcXF/8hISH/KSkp/zc3 + N/9BQUH/R0dH/0hISP9FRUX/QkJC/0BAQP86Ojr/MjIy/yoqKv8mJib/JSUl/yQkJP8iIiL/ISEh/yMj + I/8iIiL/IiIi/yAgIP8cHBz/Hh4e/yEhIf8jIyP/JiYm/yYmJv8nJyf/JiYm/yQkJP8kJCT/JCQk/yMj + I/8fHx//Gxsb/xYWFv8RERH/BgYG/wcHB/8JCQn/CgoK/wYGBv8CAgL/CgoK/x8fH/8xMTH/QUFB/zIy + Mv8NDQ3/BgYG/wgICP87Ozv/zc3N//z8/P/6+vr//Pz8//7+/v/9/f3/+/v7//7+/v/+/v7//v7+//// + ///7+/v/9/f3//j4+P+np6f/GRkZ/wICAv8WFhb/urq6//Ly8v////////////////////////////// + //////////////v7+//9/f3//f39//X19f/U1NT/i4uL/y8vL/8JCQn/CgoK/woKCv8KCgr/CwsL/xAQ + EP8cHBz/Kioq/zIyMv8yMjL/NTU1/z4+Pv9GRkb/S0tL/0VFRf88PDz/Ozs7/zo6Ov82Njb/MDAw/ykp + Kf8nJyf/JSUl/yAgIP8fHx//ICAg/x4eHv8dHR3/HBwc/xsbG/8bGxv/Gxsb/xsbG/8cHBz/Hh4e/x0d + Hf8eHh7/Hh4e/x0dHf8dHR3/HR0d/x4eHv8hISH/ISEh/yEhIf8gICD/Ghoa/xYWFv8RERH/DQ0N/wYG + Bv8EBAT/AgIC/wEBAf8GBgb/Dw8P/xAQEP8GBgb/AwMD/xAQEP+Dg4P/8PDw//7+/v////////////// + ///8/Pz/+/v7//r6+v/6+vr/+/v7//z8/P/9/f3/+/v7/+np6f91dXX/DAwM/wQEBP81NTX/zMzM//T0 + 9P////////////////////////////////////////////z8/P/5+fn/9vb2/6enp/9ISEj/EBAQ/wgI + CP8KCgr/CAgI/wwMDP8SEhL/FhYW/yAgIP8oKCj/LS0t/y0tLf8jIyP/KCgo/zg4OP87Ozv/MDAw/x0d + Hf8ODg7/Dg4O/xYWFv8aGhr/Hh4e/yMjI/8lJSX/JCQk/yEhIf8dHR3/Gxsb/xsbG/8cHBz/HR0d/x0d + Hf8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8cHBz/HBwc/xwc + HP8dHR3/JSUl/yMjI/8gICD/Hh4e/xwcHP8VFRX/CgoK/wMDA/8DAwP/CQkJ/wsLC/8HBwf/BQUF/zAw + MP/FxcX/9/f3//z8/P/9/f3//f39//39/f/7+/v/+Pj4//Pz8//t7e3/6+vr/+7u7v/4+Pj/3Nzc/4mJ + if8hISH/CAgI/w4ODv99fX3/6urq//j4+P////////////////////////////////////////////n5 + +f/39/f/wcHB/zo6Ov8GBgb/BwcH/wUFBf8LCwv/EhIS/xUVFf8ZGRn/HR0d/x8fH/8jIyP/JCQk/yEh + If8gICD/JiYm/ycnJ/8dHR3/ExMT/woKCv8DAwP/AQEB/wICAv8CAgL/BwcH/wwMDP8LCwv/ExMT/yYm + Jv8rKyv/JSUl/yUlJf8jIyP/ISEh/x8fH/8bGxv/Gxsb/xsbG/8aGhr/GRkZ/xkZGf8ZGRn/GRkZ/xkZ + Gf8ZGRn/GRkZ/xkZGf8XFxf/FxcX/xcXF/8XFxf/HR0d/x0dHf8dHR3/HR0d/yMjI/8dHR3/FRUV/w4O + Dv8JCQn/CAgI/wYGBv8EBAT/BgYG/yIiIv+ioqL/8fHx//v7+//7+/v/+/v7//v7+//8/Pz/+fn5/9LS + 0v+JiYn/YWFh/29vb/+Ghob/YGBg/x4eHv8CAgL/CgoK/z8/P//Kysr//Pz8//n5+f////////////// + ///////////////////+/v7//f39//n5+f/Dw8P/T09P/w0NDf8EBAT/CAgI/w4ODv8YGBj/HR0d/x0d + Hf8dHR3/HR0d/x0dHf8fHx//IyMj/yEhIf8hISH/Hx8f/xUVFf8RERH/ERER/yIiIv8wMDD/LCws/ygo + KP8pKSn/JCQk/yEhIf8SEhL/BgYG/woKCv8bGxv/Li4u/zExMf8rKyv/JiYm/x8fH/8cHBz/Gxsb/xsb + G/8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8UFBT/FBQU/xQUFP8VFRX/GBgY/xkZ + Gf8aGhr/Gxsb/xkZGf8ZGRn/Ghoa/xsbG/8aGhr/EhIS/wgICP8EBAT/AwMD/wUFBf89PT3/pqam/+Xl + 5f/39/f/+fn5//n5+f/29vb/+/v7/8rKyv9KSkr/CQkJ/wsLC/8NDQ3/CAgI/wYGBv8BAQH/ICAg/6Gh + of/19fX//v7+//n5+f//////////////////////+/v7//z8/P/4+Pj/+fn5/9XV1f9WVlb/EBAQ/wcH + B/8JCQn/FhYW/yEhIf8fHx//HBwc/xsbG/8aGhr/Ghoa/xkZGf8dHR3/JSUl/yQkJP8bGxv/FBQU/ycn + J/9bW1v/UlJS/5WVlf/m5ub/5+fn/+bm5v/Z2dn/tra2/8vLy/+UlJT/VlZW/yoqKv8JCQn/FxcX/xoa + Gv8kJCT/Li4u/yUlJf8gICD/Hh4e/xwcHP8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8hISH/Hx8f/xMT + E/8FBQX/AgIC/wEBAf8DAwP/JCQk/2dnZ//Q0ND/8/Pz//n5+f/5+fn/+vr6//Ly8v+urq7/SUlJ/xYW + Fv8LCwv/AgIC/wcHB/8FBQX/IyMj/6CgoP/19fX//Pz8//n5+f/////////////////+/v7/+Pj4//X1 + 9f/09PT/5eXl/2tra/8PDw//AgIC/woKCv8aGhr/ISEh/yMjI/8dHR3/GRkZ/xoaGv8bGxv/HBwc/xsb + G/8kJCT/IyMj/xUVFf8NDQ3/Pz8//6Kiov/a2tr/YmJi/21tbf/s7Oz//f39//39/f/Y2Nj/hoaG/97e + 3v/5+fn/5eXl/6Ojo/84ODj/DAwM/wsLC/8eHh7/JSUl/yYmJv8hISH/Hx8f/xwcHP8aGhr/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8dHR3/JiYm/yMjI/8VFRX/BQUF/wEBAf8EBAT/AwMD/wwMDP9TU1P/x8fH//r6 + +v/6+vr//Pz8//b29v/6+vr/0dHR/4KCgv85OTn/EBAQ/wUFBf8ODg7/CAgI/zw8PP+1tbX/8/Pz/+zs + 7P///////////////////////Pz8//f39//29vb/iIiI/w8PD/8CAgL/BgYG/w8PD/8lJSX/JSUl/yEh + If8bGxv/FxcX/xcXF/8bGxv/Hh4e/x0dHf8mJib/GBgY/woKCv80NDT/t7e3//Ly8v/p6en/Xl5e/0xM + TP/i4uL/+/v7//T09P+srKz/gYGB/97e3v/7+/v/+vr6/8bGxv9ubm7/aWlp/zAwMP8HBwf/GBgY/yIi + Iv8gICD/Hx8f/xwcHP8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/HR0d/x4eHv8ZGRn/ExMT/woK + Cv8FBQX/BQUF/woKCv8GBgb/RUVF/7Gxsf/v7+//+fn5//r6+v/5+fn/8fHx/+/v7//Jycn/gYGB/zAw + MP8EBAT/DQ0N/wsLC/82Njb/mZmZ/9/f3///////////////////////+Pj4//v7+//S0tL/PDw8/woK + Cv8CAgL/CwsL/xQUFP8iIiL/ICAg/xwcHP8bGxv/FhYW/xYWFv8bGxv/ICAg/x8fH/8gICD/CgoK/woK + Cv9gYGD/6enp//X19f/w8PD/a2tr/0JCQv/b29v/+vr6/+np6f+Li4v/x8fH//b29v/4+Pj/9PT0/5qa + mv9ra2v/09PT/6qqqv85OTn/DQ0N/x8fH/8gICD/Hh4e/xwcHP8aGhr/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8gICD/Ghoa/xgYGP8eHh7/Gxsb/yEhIf8MDAz/AwMD/wQEBP8DAwP/BwcH/zY2Nv+rq6v/9vb2//n5 + +f/8/Pz/9vb2//n5+f/09PT/8vLy/7y8vP86Ojr/Dw8P/wkJCf8NDQ3/KSkp/7W1tf////////////// + ////////+vr6/+vr6/+AgID/ExMT/wICAv8HBwf/FBQU/yAgIP8fHx//Hh4e/x4eHv8eHh7/GRkZ/xYW + Fv8ZGRn/ICAg/yIiIv8UFBT/BQUF/ykpKf9OTk7/3t7e//n5+f/v7+//X19f/1dXV//e3t7/+fn5//Dw + 8P+Wlpb/4+Pj//X19f/5+fn/9PT0/4yMjP93d3f/6+vr//Ly8v+qqqr/JSUl/w4ODv8cHBz/FxcX/xwc + HP8aGhr/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8aGhr/Ghoa/xoaGv8aGhr/HBwc/yIiIv8bGxv/CwsL/wcH + B/8DAwP/AgIC/woKCv9GRkb/ysrK//Ly8v/6+vr/9/f3//f39//5+fn/+/v7//Ly8v+8vLz/WFhY/xwc + HP8HBwf/CgoK/zo6Ov/////////////////+/v7/+Pj4/729vf8mJib/AwMD/wQEBP8RERH/HR0d/xwc + HP8bGxv/HBwc/xwcHP8cHBz/GBgY/xYWFv8ZGRn/ICAg/x8fH/8MDAz/Gxsb/2pqav9QUFD/z8/P//f3 + 9//o6Oj/WVlZ/29vb//x8fH/+Pj4//Pz8/+Xl5f/5eXl//j4+P/7+/v/4eHh/2FhYf96enr/7Ozs//T0 + 9P/t7e3/goKC/xUVFf8LCwv/EhIS/x4eHv8cHBz/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xgY + GP8YGBj/GRkZ/x8fH/8hISH/Gxsb/xMTE/8LCwv/AwMD/wEBAf8ODg7/VlZW/9fX1//19fX/9vb2//f3 + 9//5+fn/+/v7//T09P/5+fn/2tra/3Fxcf8QEBD/BAQE/wsLC///////////////////////5eXl/2Bg + YP8HBwf/BAQE/w0NDf8aGhr/ICAg/xwcHP8ZGRn/GRkZ/xkZGf8ZGRn/FxcX/xYWFv8ZGRn/ICAg/x0d + Hf8GBgb/Ojo6/56env9OTk7/zMzM//z8/P/i4uL/S0tL/2hoaP/y8vL/+Pj4/93d3f9wcHD/1tbW//r6 + +v/6+vr/1NTU/0tLS/+IiIj/8vLy//f39//w8PD/pKSk/0dHR/8NDQ3/DQ0N/xoaGv8dHR3/Gxsb/xsb + G/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8WFhb/FhYW/xYWFv8WFhb/FhYW/xoaGv8fHx//IiIi/x4eHv8YGBj/DQ0N/wIC + Av8BAQH/EhIS/2RkZP/g4OD/+Pj4//f39//5+fn/+/v7//j4+P/x8fH/+fn5/9fX1/9YWFj/CwsL/xAQ + EP/+/v7////////////9/f3/sbGx/xkZGf8HBwf/CQkJ/xoaGv8cHBz/HR0d/x4eHv8ZGRn/GBgY/xgY + GP8YGBj/FxcX/xYWFv8ZGRn/ICAg/x0dHf8GBgb/TExM/6mpqf8/Pz//xcXF//f39//Nzc3/Ojo6/0lJ + Sf/Ly8v/19fX/6SkpP82Njb/uLi4//j4+P/5+fn/ra2t/0lJSf/Dw8P/8PDw//b29v/U1NT/hISE/3t7 + e/8hISH/CQkJ/xMTE/8cHBz/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8UFBT/FBQU/xQUFP8UFBT/FBQU/xQU + FP8YGBj/HR0d/yIiIv8iIiL/Ghoa/wwMDP8FBQX/BQUF/xISEv9kZGT/4eHh//f39//5+fn/+/v7//v7 + +//7+/v/+vr6//r6+v/FxcX/MzMz/woKCv/29vb/+fn5//v7+//z8/P/enp6/wgICP8FBQX/EhIS/yQk + JP8cHBz/HBwc/xoaGv8XFxf/FxcX/xcXF/8XFxf/GBgY/xQUFP8WFhb/IyMj/yMjI/8KCgr/UFBQ/5GR + kf9FRUX/m5ub/6qqqv9kZGT/Dg4O/xQUFP88PDz/QEBA/ykpKf8UFBT/WVlZ/5+fn/+mpqb/UFBQ/1FR + Uf/b29v/7e3t//X19f+ysrL/ra2t/8vLy/8/Pz//AwMD/wwMDP8TExP/Gxsb/xsbG/8bGxv/Ghoa/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/Ghoa/xoaGv8bGxv/Gxsb/x8fH/8kJCT/ISEh/xcXF/8KCgr/BwcH/wQE + BP8bGxv/iIiI/+/v7//4+Pj/+fn5//v7+//9/f3//f39//39/f/v7+//eXl5/xISEv/39/f/+vr6//v7 + +//k5OT/TExM/wkJCf8DAwP/GBgY/ycnJ/8cHBz/HBwc/xoaGv8XFxf/FxcX/xcXF/8XFxf/GBgY/xcX + F/8bGxv/Jycn/yIiIv8HBwf/Kioq/1dXV/8iIiL/NjY2/yUlJf8WFhb/CQkJ/wwMDP8LCwv/DQ0N/woK + Cv8GBgb/Dg4O/xcXF/8ZGRn/Dw8P/zw8PP+hoaH/1tbW/8jIyP+Dg4P/w8PD/8zMzP9FRUX/BAQE/wsL + C/8YGBj/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/Ghoa/xsbG/8bGxv/Gxsb/xwc + HP8hISH/JiYm/ycnJ/8aGhr/BwcH/wQEBP8DAwP/MDAw/7e3t//39/f/+fn5//39/f/9/f3//f39//39 + /f/6+vr/wMDA/ycnJ//5+fn//Pz8//r6+v/Q0ND/JiYm/woKCv8EBAT/ISEh/ygoKP8cHBz/HBwc/xoa + Gv8XFxf/FxcX/xcXF/8XFxf/GBgY/xoaGv8cHBz/Hx8f/yIiIv8SEhL/DAwM/xMTE/8GBgb/DAwM/w0N + Df8VFRX/FxcX/x4eHv8iIiL/HR0d/xYWFv8YGBj/ExMT/w0NDf8PDw//Dw8P/w0NDf8hISH/UlJS/0hI + SP9MTEz/xsbG/7CwsP85OTn/CQkJ/w4ODv8cHBz/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/Ghoa/xsbG/8bGxv/Gxsb/xkZGf8cHBz/JCQk/y8vL/8tLS3/Dw8P/wICAv8HBwf/CQkJ/1BQ + UP/W1tb//f39//n5+f/9/f3//f39//39/f/39/f/7+/v/3Z2dv/7+/v//Pz8//n5+f/BwcH/HR0d/wYG + Bv8KCgr/Kioq/ykpKf8cHBz/HBwc/xoaGv8XFxf/FxcX/xcXF/8XFxf/Ghoa/xsbG/8VFRX/Dg4O/xsb + G/8oKCj/Gxsb/w8PD/8VFRX/GBgY/yUlJf8hISH/HR0d/x8fH/8fHx//Ghoa/xoaGv8aGhr/GRkZ/xoa + Gv8XFxf/Gxsb/xQUFP8LCwv/CgoK/wUFBf8yMjL/ra2t/5KSkv8kJCT/DQ0N/xEREf8bGxv/Gxsb/xsb + G/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/Ghoa/xsbG/8bGxv/Gxsb/xgYGP8WFhb/HR0d/yoq + Kv8tLS3/IiIi/wcHB/8CAgL/BwcH/xISEv+bm5v/9fX1//v7+//9/f3//f39//39/f/6+vr/8fHx/6am + pv/4+Pj//f39//n5+f+urq7/Ghoa/wEBAf8NDQ3/JiYm/ygoKP8cHBz/HBwc/xoaGv8XFxf/FxcX/xcX + F/8XFxf/GBgY/xcXF/8TExP/EBAQ/wsLC/8bGxv/Li4u/zAwMP8wMDD/Kioq/ykpKf8kJCT/Hh4e/x0d + Hf8YGBj/FxcX/xoaGv8aGhr/Ghoa/x8fH/8iIiL/JCQk/yIiIv8eHh7/GRkZ/wcHB/8dHR3/VlZW/0ZG + Rv8ZGRn/FRUV/xYWFv8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xUVFf8WFhb/Gxsb/yEhIf8qKir/KSkp/w4ODv8DAwP/BAQE/wUFBf9LS0v/4ODg//j4 + +P/8/Pz//v7+//39/f/5+fn/7e3t/3l5ef/5+fn//Pz8//r6+v+xsbH/Ghoa/wEBAf8NDQ3/JCQk/ygo + KP8cHBz/HBwc/xoaGv8XFxf/FxcX/xcXF/8XFxf/GBgY/xgYGP8XFxf/FhYW/wsLC/8SEhL/IyMj/ysr + K/8uLi7/KCgo/ygoKP8mJib/Hh4e/x0dHf8cHBz/Gxsb/xwcHP8eHh7/ISEh/yoqKv8tLS3/Jycn/yQk + JP8mJib/JSUl/xQUFP8LCwv/DQ0N/xAQEP8VFRX/EhIS/xMTE/8WFhb/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xYWFv8XFxf/HBwc/x8fH/8jIyP/KCgo/xsb + G/8HBwf/BAQE/wUFBf8WFhb/hISE/+vr6//19fX/+Pj4//f39//29vb/vb29/y4uLv/6+vr/+/v7//r6 + +v+5ubn/Gxsb/wEBAf8NDQ3/JCQk/ygoKP8cHBz/HBwc/xoaGv8XFxf/FxcX/xcXF/8XFxf/Ghoa/xwc + HP8cHBz/Hh4e/xoaGv8UFBT/EBAQ/xEREf8YGBj/GRkZ/yIiIv8pKSn/IiIi/yEhIf8iIiL/HBwc/xMT + E/8PDw//ExMT/x0dHf8nJyf/LCws/ygoKP8jIyP/IiIi/yEhIf8YGBj/EhIS/xsbG/8aGhr/FxcX/xgY + GP8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xgY + GP8aGhr/Gxsb/xwcHP8fHx//JSUl/yQkJP8PDw//AQEB/wMDA/8NDQ3/Gxsb/2NjY/97e3v/h4eH/4+P + j/+Li4v/VVVV/w0NDf/6+vr/+vr6//n5+f+/v7//HBwc/wEBAf8NDQ3/JCQk/ygoKP8cHBz/HBwc/xoa + Gv8XFxf/FxcX/xcXF/8XFxf/Gxsb/x4eHv8hISH/IyMj/x4eHv8ODg7/AgIC/wUFBf8GBgb/BAQE/xgY + GP8qKir/KSkp/yoqKv8nJyf/GBgY/woKCv8EBAT/BQUF/wkJCf8PDw//Gxsb/ysrK/8pKSn/JCQk/yEh + If8SEhL/Dw8P/xEREf8XFxf/FBQU/xYWFv8YGBj/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xoaGv8bGxv/Ghoa/xkZGf8fHx//Hx8f/yUlJf8YGBj/BQUF/wUF + Bf8FBQX/BAQE/wYGBv8ICAj/Dw8P/xEREf8UFBT/DAwM/woKCv/8/Pz//f39//r6+v/FxcX/Hx8f/wEB + Af8HBwf/Hh4e/yQkJP8dHR3/GRkZ/xUVFf8WFhb/FxcX/xcXF/8XFxf/Ghoa/x4eHv8hISH/Hh4e/w8P + D/8GBgb/AgIC/wEBAf8BAQH/AgIC/xMTE/8uLi7/Ojo6/zQ0NP8yMjL/FBQU/wcHB/8BAQH/AAAA/wEB + Af8BAQH/CAgI/yAgIP8sLCz/JSUl/x0dHf8ODg7/CwsL/xEREf8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoa + Gv8aGhr/GRkZ/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8ZGRn/Gxsb/x8fH/8hISH/ERER/wQEBP8FBQX/CAgI/wICAv8HBwf/BgYG/wwMDP8ICAj/CQkJ/wUF + Bf/8/Pz//f39//r6+v/Nzc3/Jycn/wEBAf8GBgb/FxcX/x4eHv8bGxv/FxcX/xQUFP8WFhb/FxcX/xcX + F/8XFxf/Ghoa/x4eHv8hISH/HR0d/w0NDf8FBQX/AwMD/wAAAP8CAgL/AQEB/woKCv8tLS3/QkJC/zs7 + O/81NTX/ERER/wQEBP8AAAD/AAAA/wAAAP8AAAD/AwMD/xcXF/8mJib/JiYm/yUlJf8aGhr/FxcX/xoa + Gv8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/Ghoa/x8fH/8jIyP/GBgY/wcHB/8FBQX/BgYG/wMD + A/8SEhL/CAgI/wsLC/8JCQn/ERER/zc3N//5+fn//v7+//n5+f/Z2dn/NDQ0/wICAv8GBgb/DQ0N/xcX + F/8XFxf/FRUV/xUVFf8XFxf/FxcX/xcXF/8XFxf/Ghoa/x4eHv8hISH/HR0d/w0NDf8FBQX/AwMD/wAA + AP8EBAT/AQEB/wcHB/8nJyf/Pj4+/zg4OP8xMTH/DAwM/wEBAf8AAAD/AAAA/wAAAP8AAAD/AgIC/xIS + Ev8kJCT/JCQk/yAgIP8bGxv/GRkZ/xkZGf8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Ghoa/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/Ghoa/x8f + H/8iIiL/ICAg/w4ODv8EBAT/BQUF/w0NDf9cXFz/fX19/3Z2dv91dXX/h4eH/76+vv/39/f//v7+//j4 + +P/i4uL/Pj4+/wMDA/8HBwf/BgYG/xEREf8UFBT/FBQU/xUVFf8WFhb/FxcX/xcXF/8XFxf/Ghoa/x4e + Hv8gICD/HR0d/w0NDf8FBQX/AwMD/wAAAP8BAQH/AAAA/woKCv8jIyP/MTEx/ysrK/8pKSn/CAgI/wAA + AP8AAAD/AAAA/wAAAP8DAwP/BwcH/xQUFP8pKSn/JiYm/x0dHf8dHR3/Gxsb/xkZGf8bGxv/Gxsb/xsb + G/8bGxv/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/Ghoa/x8fH/8iIiL/Jycn/xISEv8DAwP/AwMD/xISEv+ZmZn/7e3t//Ly + 8v/x8fH/8PDw//Pz8//8/Pz//v7+//z8/P/x8fH/XV1d/wsLC/8GBgb/EBAQ/wwMDP8PDw//ERER/xMT + E/8YGBj/Gxsb/xsbG/8YGBj/Ghoa/xwcHP8cHBz/Gxsb/xAQEP8JCQn/BgYG/wMDA/8BAQH/AgIC/w4O + Dv8fHx//JCQk/yIiIv8fHx//DAwM/wAAAP8AAAD/AAAA/wAAAP8BAQH/BAQE/xMTE/8mJib/KCgo/x0d + Hf8cHBz/Ghoa/xkZGf8cHBz/Ghoa/xoaGv8ZGRn/GBgY/xgYGP8YGBj/GBgY/xYWFv8XFxf/FxcX/xgY + GP8UFBT/FBQU/xQUFP8VFRX/GRkZ/xoaGv8aGhr/GRkZ/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/GRkZ/xsbG/8eHh7/IyMj/xwc + HP8ICAj/AgIC/wgICP9iYmL/5+fn//f39//7+/v//Pz8//r6+v/9/f3///////39/f/29vb/gYGB/wsL + C/8EBAT/DAwM/woKCv8NDQ3/EBAQ/xEREf8XFxf/HR0d/x8fH/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xYW + Fv8TExP/ERER/w8PD/8MDAz/DQ0N/xUVFf8dHR3/Hx8f/yAgIP8dHR3/ERER/wUFBf8BAQH/AQEB/wEB + Af8CAgL/DQ0N/yIiIv8rKyv/JiYm/x4eHv8cHBz/Ghoa/xkZGf8cHBz/HBwc/xwcHP8cHBz/HBwc/xwc + HP8cHBz/Gxsb/xkZGf8ZGRn/GBgY/xcXF/8UFBT/FBQU/xQUFP8UFBT/GBgY/xkZGf8ZGRn/GBgY/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8YGBj/GBgY/xoaGv8dHR3/ISEh/yAgIP8NDQ3/AgIC/wQEBP9AQED/2NjY//j4+P/8/Pz//f39//39 + /f/9/f3///////39/f/39/f/r6+v/xcXF/8DAwP/BAQE/wkJCf8LCwv/DQ0N/w8PD/8WFhb/HR0d/yEh + If8hISH/HBwc/xsbG/8bGxv/Gxsb/xsbG/8cHBz/HR0d/x4eHv8dHR3/HBwc/xsbG/8bGxv/HBwc/x4e + Hv8cHBz/GBgY/xISEv8PDw//Dw8P/w8PD/8QEBD/Hh4e/y8vL/8uLi7/JSUl/yEhIf8fHx//HBwc/xsb + G/8bGxv/Hh4e/yAgIP8jIyP/IyMj/yMjI/8jIyP/IiIi/x4eHv8cHBz/GRkZ/xcXF/8UFBT/FBQU/xQU + FP8UFBT/FhYW/xYWFv8WFhb/FhYW/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoaGv8dHR3/ISEh/yMjI/8TExP/BAQE/wMD + A/8tLS3/ycnJ//39/f/+/v7//f39//39/f/9/f3///////39/f/4+Pj/39/f/0lJSf8JCQn/BQUF/wcH + B/8JCQn/CwsL/wwMDP8VFRX/Hh4e/yQkJP8lJSX/HR0d/xsbG/8bGxv/Gxsb/xwcHP8eHh7/ISEh/yQk + JP8iIiL/HR0d/xsbG/8YGBj/Ghoa/xwcHP8cHBz/Hh4e/yMjI/8mJib/JiYm/yYmJv8mJib/Jycn/yws + LP8pKSn/JSUl/yMjI/8hISH/Hh4e/xwcHP8bGxv/Hx8f/yQkJP8oKCj/KSkp/yoqKv8qKir/KCgo/yMj + I/8fHx//Ghoa/xYWFv8UFBT/FBQU/xQUFP8UFBT/FBQU/xQUFP8UFBT/FBQU/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoa + Gv8dHR3/ICAg/yYmJv8YGBj/BgYG/wUFBf8fHx//t7e3//n5+f/7+/v//f39//39/f/+/v7///////7+ + /v/9/f3/9fX1/6+vr/86Ojr/DAwM/wgICP8FBQX/BQUF/woKCv8RERH/ISEh/ykpKf8lJSX/IiIi/yIi + Iv8hISH/HR0d/x8fH/8eHh7/JCQk/yYmJv8kJCT/HR0d/xsbG/8bGxv/GRkZ/xoaGv8aGhr/Gxsb/yQk + JP8sLCz/Kysr/ycnJ/8jIyP/HBwc/x8fH/8uLi7/MzMz/zIyMv8xMTH/MDAw/zExMf8yMjL/MzMz/y8v + L/8dHR3/FxcX/xcXF/8XFxf/FxcX/xwcHP8hISH/Hx8f/xkZGf8WFhb/FRUV/xISEv8SEhL/FBQU/xQU + FP8UFBT/FBQU/xQUFP8UFBT/FBQU/xQUFP8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoaGv8dHR3/HR0d/yYmJv8WFhb/AgIC/wQEBP8UFBT/p6en//b2 + 9v/4+Pj//f39//39/f/////////////////+/v7/+vr6//X19f+wsLD/Li4u/wUFBf8GBgb/BAQE/wgI + CP8ICAj/IiIi/zExMf8zMzP/MjIy/y8vL/8vLy//MjIy/zk5Of8qKir/IyMj/yUlJf8kJCT/HBwc/xsb + G/8YGBj/Dw8P/w4ODv8ODg7/Dg4O/xUVFf8fHx//IyMj/yIiIv8eHh7/ExMT/xgYGP86Ojr/Tk5O/1VV + Vf9YWFj/W1tb/1xcXP9bW1v/UFBQ/yQkJP8FBQX/AgIC/wICAv8CAgL/BQUF/xcXF/8gICD/ISEh/xsb + G/8YGBj/FhYW/xQUFP8SEhL/FBQU/xQUFP8UFBT/FBQU/xQUFP8UFBT/FBQU/xQUFP8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoaGv8dHR3/HBwc/yYm + Jv8WFhb/AQEB/wUFBf8MDAz/j4+P//Pz8//6+vr//f39//39/f///////////////////////Pz8//j4 + +P/y8vL/h4eH/xcXF/8HBwf/DQ0N/wQEBP8NDQ3/Ly8v/zIyMv8pKSn/Pz8//0dHR/9JSUn/Tk5O/0RE + RP8iIiL/Dw8P/xMTE/8WFhb/FRUV/xkZGf8VFRX/CAgI/wUFBf8FBQX/BQUF/wkJCf8TExP/HBwc/x8f + H/8dHR3/Dw8P/xAQEP8yMjL/T09P/2FhYf9lZWX/a2tr/2xsbP9jY2P/Pj4+/wsLC/8BAQH/AgIC/wIC + Av8CAgL/BAQE/xEREf8cHBz/ICAg/xwcHP8aGhr/GRkZ/xYWFv8UFBT/FBQU/xQUFP8UFBT/FBQU/xQU + FP8UFBT/FBQU/xQUFP8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8YGBj/GBgY/xoaGv8dHR3/HBwc/yYmJv8WFhb/AQEB/wYGBv8GBgb/dnZ2//Dw8P/7+/v//f39//39 + /f///////////////////////v7+//f39//9/f3/4+Pj/3R0dP8NDQ3/CQkJ/wkJCf8VFRX/Ojo6/ysr + K/8TExP/Ojo6/1FRUf9VVVX/SkpK/ywsLP8LCwv/AQEB/wUFBf8GBgb/CgoK/xgYGP8aGhr/DAwM/wkJ + Cf8JCQn/CQkJ/w0NDf8VFRX/HBwc/x0dHf8cHBz/EBAQ/wcHB/8SEhL/Gxsb/yQkJP8lJSX/JiYm/ykp + Kf8lJSX/Dg4O/wMDA/8AAAD/AAAA/wAAAP8AAAD/AQEB/wwMDP8ZGRn/Hx8f/x0dHf8cHBz/Gxsb/xkZ + Gf8XFxf/FBQU/xQUFP8UFBT/FBQU/xQUFP8UFBT/FBQU/xQUFP8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoaGv8dHR3/HBwc/yYmJv8WFhb/AQEB/wUF + Bf8ICAj/b29v//Ly8v/6+vr//f39//39/f///////////////////////v7+//39/f/+/v7/+/v7/+Pj + 4/9eXl7/DAwM/wgICP8JCQn/ISEh/xcXF/8GBgb/GBgY/yUlJf8kJCT/GBgY/woKCv8BAQH/AAAA/wIC + Av8DAwP/CQkJ/xUVFf8cHBz/GRkZ/xcXF/8XFxf/FxcX/xkZGf8cHBz/Hh4e/x0dHf8bGxv/EBAQ/wcH + B/8EBAT/BAQE/wMDA/8CAgL/AgIC/wMDA/8FBQX/BQUF/wgICP8FBQX/AQEB/wEBAf8BAQH/AgIC/w4O + Dv8WFhb/HBwc/x4eHv8bGxv/Gxsb/xoaGv8ZGRn/FhYW/xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW/xYW + Fv8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoa + Gv8dHR3/Hh4e/yQkJP8UFBT/AgIC/wQEBP8PDw//bW1t//Ly8v/5+fn//f39//39/f////////////// + //////////////////////////////b29v/ExMT/Ojo6/wQEBP8FBQX/DAwM/wUFBf8BAQH/BAQE/wcH + B/8HBwf/AwMD/wEBAf8BAQH/AgIC/wYGBv8EBAT/BwcH/xISEv8dHR3/Hh4e/xsbG/8bGxv/Gxsb/xwc + HP8cHBz/HBwc/xwcHP8YGBj/Dg4O/wkJCf8JCQn/CwsL/woKCv8KCgr/CgoK/wsLC/8NDQ3/DQ0N/wwM + DP8MDAz/DQ0N/w0NDf8NDQ3/Dg4O/xMTE/8WFhb/Gxsb/x0dHf8bGxv/Gxsb/xsbG/8aGhr/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoaGv8dHR3/Hx8f/yMjI/8TExP/BAQE/wUFBf8KCgr/Y2Nj/+3t + 7f/6+vr//f39//39/f////////////////////////////////////////////r6+v/r6+v/ZmZm/wsL + C/8CAgL/Dw8P/xsbG/8QEBD/CQkJ/wkJCf8KCgr/CwsL/wwMDP8ODg7/ExMT/xgYGP8cHBz/HBwc/xwc + HP8cHBz/Gxsb/xsbG/8bGxv/Gxsb/xoaGv8aGhr/Ghoa/xoaGv8dHR3/ICAg/yAgIP8lJSX/Kysr/ysr + K/8rKyv/Kysr/ysrK/8qKir/Jycn/yQkJP8hISH/HBwc/xwcHP8cHBz/Gxsb/xkZGf8aGhr/HBwc/x0d + Hf8bGxv/Gxsb/xsbG/8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xoaGv8dHR3/Hx8f/yMj + I/8TExP/AwMD/wYGBv8JCQn/bGxs/+3t7f/8/Pz//f39//39/f////////////////////////////// + //////////////z8/P/r6+v/Z2dn/wkJCf8GBgb/ISEh/0dHR/9FRUX/Pj4+/zo6Ov81NTX/Nzc3/zU1 + Nf8zMzP/NDQ0/zU1Nf8xMTH/Kioq/yMjI/8cHBz/Ghoa/xsbG/8bGxv/Gxsb/xkZGf8YGBj/GBgY/xgY + GP8aGhr/Hh4e/yIiIv8sLCz/MTEx/zExMf8xMTH/MDAw/y8vL/8qKir/JiYm/yEhIf8eHh7/HR0d/x0d + Hf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8bGxv/Gxsb/xsbG/8aGhr/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8YGBj/GBgY/xoaGv8dHR3/Hx8f/yMjI/8TExP/BAQE/wUFBf8XFxf/lJSU//f39//7+/v//f39//39 + /f////////////////////////////////////////////f39//w8PD/Y2Nj/wgICP8EBAT/ERER/0pK + Sv9QUFD/Q0ND/z8/P/87Ozv/Nzc3/zk5Of86Ojr/Nzc3/zU1Nf8rKyv/IiIi/x4eHv8bGxv/Ghoa/xgY + GP8YGBj/GBgY/xgYGP8XFxf/FxcX/xcXF/8ZGRn/Hh4e/yYmJv8zMzP/OTk5/zU1Nf81NTX/MDAw/yoq + Kv8lJSX/Hx8f/xwcHP8cHBz/GRkZ/xoaGv8aGhr/Gxsb/x0dHf8dHR3/Hh4e/x4eHv8bGxv/Gxsb/xsb + G/8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xkZGf8dHR3/IyMj/yAgIP8RERH/CgoK/wsL + C/8sLCz/vLy8//r6+v/5+fn//f39//39/f////////////////////////////////////////////f3 + 9//19fX/bW1t/wcHB/8FBQX/DAwM/0VFRf9DQ0P/PT09/zc3N/8yMjL/NjY2/zk5Of83Nzf/MzMz/y4u + Lv8lJSX/Hh4e/xwcHP8aGhr/GBgY/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8ZGRn/Hh4e/yMj + I/8pKSn/LS0t/zAwMP8yMjL/Li4u/ykpKf8mJib/Hh4e/xsbG/8bGxv/GBgY/xgYGP8ZGRn/GRkZ/xsb + G/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xkZ + Gf8eHh7/JCQk/xwcHP8QEBD/DQ0N/xAQEP8wMDD/ycnJ//z8/P/4+Pj//f39//39/f////////////// + //////////////////////////////j4+P/5+fn/kZGR/wwMDP8EBAT/DQ0N/01NTf9PT0//RERE/0ND + Q/9DQ0P/QEBA/z09Pf8zMzP/IiIi/xMTE/8TExP/Ghoa/x0dHf8aGhr/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8ZGRn/HR0d/x0dHf8XFxf/EhIS/xYWFv8gICD/LS0t/zQ0NP8xMTH/KSkp/yUl + Jf8lJSX/IiIi/x8fH/8dHR3/HBwc/x4eHv8bGxv/GRkZ/xgYGP8bGxv/Gxsb/xsbG/8aGhr/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8YGBj/GBgY/xkZGf8eHh7/IyMj/xoaGv8NDQ3/CwsL/xAQEP88PDz/1dXV//39 + /f/5+fn//f39//39/f////////////////////////////////////////////r6+v/39/f/wsLC/x8f + H/8FBQX/Dg4O/1FRUf9WVlb/TExM/0RERP81NTX/ISEh/xAQEP8KCgr/CAgI/wUFBf8LCwv/FhYW/x4e + Hv8aGhr/FhYW/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/HR0d/x0dHf8RERH/BwcH/wcH + B/8MDAz/GRkZ/ykpKf81NTX/MjIy/zU1Nf84ODj/ODg4/zQ0NP8vLy//Kysr/yYmJv8iIiL/Hh4e/xsb + G/8bGxv/Gxsb/xsbG/8aGhr/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/xkZGf8eHh7/ISEh/xgY + GP8LCwv/CQkJ/w0NDf9dXV3/7u7u//z8/P/5+fn//f39//39/f////////////////////////////// + //////////////z8/P/q6ur/pKSk/x0dHf8HBwf/Dg4O/0JCQv83Nzf/FBQU/w0NDf8ICAj/BAQE/wUF + Bf8HBwf/CAgI/wgICP8WFhb/IiIi/yEhIf8bGxv/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8YGBj/GRkZ/x4eHv8aGhr/Dg4O/wsLC/8DAwP/BQUF/wsLC/8PDw//EhIS/xYWFv8gICD/ODg4/zg4 + OP81NTX/MTEx/ykpKf8kJCT/JiYm/yIiIv8cHBz/Gxsb/xkZGf8ZGRn/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8YGBj/GRkZ/xwcHP8gICD/ISEh/xYWFv8KCgr/CAgI/w8PD/+NjY3/9/f3//j4+P/6+vr//f39//39 + /f////////////////////////////////////////////r6+v+7u7v/MjIy/wUFBf8CAgL/BwcH/x0d + Hf8SEhL/AQEB/wUFBf8HBwf/AgIC/wcHB/8GBgb/BwcH/xYWFv8nJyf/Kioq/yMjI/8dHR3/GBgY/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/GBgY/yEhIf8nJyf/Gxsb/w4ODv8HBwf/BQUF/wUF + Bf8EBAT/BgYG/wgICP8LCwv/FhYW/xkZGf8YGBj/FRUV/xMTE/8UFBT/JCQk/ycnJ/8dHR3/Gxsb/xkZ + Gf8YGBj/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/Ghoa/x8fH/8iIiL/Hx8f/xMTE/8ICAj/CAgI/yAg + IP+8vLz/+fn5//j4+P/8/Pz//f39//39/f////////////////////////////////////////////j4 + +P+tra3/EBAQ/wcHB/8DAwP/BgYG/wICAv8BAQH/AQEB/wEBAf8DAwP/BQUF/wMDA/8GBgb/FhYW/yUl + Jf8oKCj/JSUl/yEhIf8dHR3/GRkZ/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/Ghoa/yMj + I/8uLi7/MzMz/yUlJf8KCgr/AQEB/wQEBP8GBgb/BgYG/wYGBv8FBQX/BQUF/wgICP8HBwf/AwMD/wEB + Af8KCgr/JiYm/y8vL/8dHR3/Gxsb/xkZGf8YGBj/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8YGBj/Ghoa/x8f + H/8iIiL/GRkZ/wwMDP8DAwP/BQUF/zY2Nv/R0dH/+/v7//f39//9/f3//f39//39/f////////////// + //////////////////////////////j4+P+fn5//HBwc/wwMDP8HBwf/BgYG/wMDA/8CAgL/BQUF/wQE + BP8GBgb/Dw8P/xMTE/8eHh7/KSkp/ycnJ/8iIiL/ISEh/x4eHv8dHR3/GRkZ/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8WFhb/HR0d/yAgIP8nJyf/PDw8/0RERP80NDT/Gxsb/woKCv8JCQn/BwcH/wQE + BP8DAwP/BwcH/woKCv8JCQn/BgYG/wMDA/8LCwv/JSUl/y0tLf8eHh7/Gxsb/xkZGf8YGBj/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8YGBj/Ghoa/x8fH/8jIyP/FBQU/wUFBf8AAAD/AwMD/zs7O//X19f/+fn5//Pz + 8//8/Pz//f39//39/f///////////////////////////////////////////+jo6P9hYWH/CAgI/wQE + BP8EBAT/BAQE/wQEBP8HBwf/CgoK/wkJCf8VFRX/LS0t/0NDQ/82Njb/KCgo/yMjI/8eHh7/HR0d/xwc + HP8cHBz/Ghoa/xgYGP8ZGRn/GRkZ/xkZGf8XFxf/FRUV/xYWFv8XFxf/GRkZ/xoaGv8mJib/Ojo6/1NT + U/9tbW3/XV1d/zY2Nv8TExP/CAgI/wQEBP8BAQH/BQUF/wcHB/8EBAT/BgYG/wYGBv8JCQn/Ghoa/yQk + JP8dHR3/Gxsb/xkZGf8YGBj/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xUVFf8WFhb/FxcX/xgYGP8ZGRn/Hx8f/yIiIv8hISH/Dw8P/wMD + A/8BAQH/AgIC/xMTE/+BgYH/ysrK//T09P/4+Pj/+vr6//n5+f////////////////////////////// + /////////////9DQ0P8mJib/CQkJ/wgICP8DAwP/AgIC/wICAv8jIyP/PDw8/0RERP9RUVH/Wlpa/05O + Tv8xMTH/IyMj/yIiIv8cHBz/Gxsb/xsbG/8bGxv/Gxsb/xwcHP8cHBz/HBwc/xsbG/8WFhb/ExMT/xUV + Ff8ZGRn/GBgY/xgYGP8pKSn/QEBA/2dnZ/+UlJT/qqqq/6SkpP91dXX/NDQ0/yAgIP8dHR3/Dw8P/wcH + B/8LCwv/BwcH/wMDA/8EBAT/ERER/x8fH/8dHR3/Gxsb/xkZGf8YGBj/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xUVFf8WFhb/GBgY/xoa + Gv8dHR3/IyMj/yUlJf8dHR3/CQkJ/wEBAf8BAQH/AwMD/wUFBf8WFhb/PT09/6mpqf/5+fn/+Pj4//f3 + 9////////////////////////////////////////////+Li4v9TU1P/BQUF/wkJCf8DAwP/AgIC/wcH + B/8zMzP/ampq/319ff98fHz/eXl5/1lZWf8/Pz//JiYm/xgYGP8YGBj/Gxsb/xsbG/8bGxv/HBwc/x0d + Hf8bGxv/GRkZ/xYWFv8RERH/ERER/xUVFf8aGhr/HBwc/ycnJ/9CQkL/YmJi/4qKiv+2trb/3Nzc/+zs + 7P/k5OT/zs7O/62trf+CgoL/PDw8/wgICP8EBAT/AQEB/wAAAP8BAQH/DQ0N/xwcHP8dHR3/Gxsb/xkZ + Gf8YGBj/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8YGBj/Gxsb/x0dHf8hISH/JSUl/yEhIf8WFhb/CgoK/wcHB/8GBgb/BQUF/wcH + B/8EBAT/DAwM/zw8PP/R0dH/+/v7//X19f////////////////////////////////////////////j4 + +P+2trb/Jycn/yMjI/8iIiL/AwMD/wICAv8UFBT/aGho/5eXl/+VlZX/k5OT/25ubv9cXFz/Nzc3/xsb + G/8aGhr/Gxsb/xsbG/8bGxv/Ghoa/xcXF/8SEhL/Dg4O/w0NDf8NDQ3/Dw8P/xUVFf8aGhr/Hx8f/zY2 + Nv9eXl7/gICA/5+fn//Dw8P/39/f/+vr6//z8/P/7e3t/9fX1/+xsbH/eHh4/zMzM/8NDQ3/AgIC/wIC + Av8EBAT/ERER/x8fH/8dHR3/Gxsb/xkZGf8YGBj/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xkZGf8bGxv/HR0d/x8fH/8kJCT/JiYm/x4e + Hv8ODg7/BAQE/wQEBP8GBgb/CAgI/wsLC/8DAwP/BQUF/xUVFf+FhYX/7u7u/+/v7/////////////// + //////////////////////////////v7+//t7e3/tra2/7e3t/+MjIz/Ghoa/wkJCf8TExP/iIiI/9zc + 3P/f39//w8PD/4aGhv9paWn/SkpK/yoqKv8fHx//Gxsb/xsbG/8bGxv/GRkZ/xEREf8JCQn/BQUF/wcH + B/8ICAj/DAwM/xcXF/8hISH/JCQk/zY2Nv9fX1//goKC/6Ghof/FxcX/3Nzc/+Xl5f/u7u7/9PT0/9vb + 2/+vr6//iIiI/19fX/8zMzP/EhIS/w0NDf8ODg7/FhYW/x0dHf8aGhr/GRkZ/xgYGP8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FhYW/xYWFv8WFhb/FRUV/xgY + GP8bGxv/ICAg/yUlJf8oKCj/JSUl/xkZGf8JCQn/BgYG/wkJCf8fHx//NTU1/yoqKv8QEBD/CAgI/wYG + Bv86Ojr/z8/P/+/v7//////////////////////////////////////////////////9/f3/+fn5//X1 + 9f/Z2dn/R0dH/w0NDf8QEBD/h4eH//Pz8//4+Pj/2NjY/6ampv90dHT/V1dX/y4uLv8fHx//Gxsb/xsb + G/8bGxv/Ghoa/xEREf8GBgb/BAQE/wcHB/8GBgb/CQkJ/xcXF/8kJCT/Jycn/zMzM/9bW1v/f39//52d + nf++vr7/1tbW/+vr6//39/f/8PDw/8nJyf+dnZ3/cnJy/1JSUv9AQED/IiIi/xoaGv8aGhr/Ghoa/xkZ + Gf8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FBQU/xQUFP8UFBT/FBQU/xcXF/8cHBz/IyMj/ykpKf8qKir/Hh4e/w4ODv8JCQn/CgoK/w4O + Dv80NDT/UVFR/0RERP8hISH/BQUF/wMDA/8cHBz/sbGx//T09P////////////////////////////// + //////////////7+/v/+/v7////////////5+fn/lpaW/xMTE/8NDQ3/V1dX/9fX1//5+fn/2tra/7a2 + tv+BgYH/W1tb/zAwMP8gICD/Gxsb/xsbG/8bGxv/Gxsb/xQUFP8KCgr/CwsL/w0NDf8ICAj/CAgI/xER + Ef8eHh7/JCQk/y0tLf9MTEz/bW1t/5GRkf+zs7P/y8vL/9/f3//s7Oz/3t7e/7CwsP+BgYH/X19f/0JC + Qv8xMTH/ISEh/x4eHv8fHx//Hx8f/x0dHf8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xoaGv8dHR3/IiIi/ycn + J/8kJCT/FBQU/wUFBf8LCwv/DAwM/xkZGf89PT3/SUlJ/0NDQ/8nJyf/CQkJ/wQEBP8LCwv/nZ2d//b2 + 9v////////////////////////////////////////////39/f/8/Pz//f39//39/f/6+vr/29vb/zk5 + Of8QEBD/IiIi/4+Pj//l5eX/0tLS/7Gxsf96enr/UlJS/ywsLP8fHx//Gxsb/xsbG/8bGxv/HBwc/xcX + F/8QEBD/EhIS/xMTE/8LCwv/BgYG/woKCv8UFBT/GRkZ/yAgIP81NTX/SUlJ/2ZmZv+IiIj/oKCg/7S0 + tP/CwsL/urq6/5GRkf9nZ2f/Tk5O/zIyMv8fHx//HR0d/xsbG/8bGxv/Gxsb/xoaGv8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/GRkZ/xkZ + Gf8ZGRn/GRkZ/x0dHf8gICD/IiIi/yQkJP8ZGRn/DAwM/wYGBv8LCwv/ExMT/yYmJv85OTn/OTk5/zc3 + N/8eHh7/BgYG/wgICP8NDQ3/nJyc//b29v////////////////////////////////////////////// + /////////v7+//39/f/7+/v/9PT0/35+fv8TExP/CAgI/zQ0NP+ZmZn/t7e3/5ycnP9qamr/RERE/yUl + Jf8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xcXF/8TExP/FhYW/xYWFv8QEBD/CwsL/w0NDf8RERH/FBQU/xcX + F/8hISH/Kysr/zo6Ov9UVFT/bm5u/4SEhP+Tk5P/k5OT/3Z2dv9SUlL/Nzc3/yYmJv8cHBz/Hh4e/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/GRkZ/xkZGf8aGhr/Gxsb/x0dHf8gICD/ICAg/x0dHf8ODg7/CgoK/wwM + DP8PDw//ISEh/zIyMv83Nzf/NjY2/zc3N/8eHh7/BgYG/wUFBf8PDw//paWl//f39/////////////// + ///////////////////////////////////////////////////7+/v/+fn5/8LCwv8tLS3/CQkJ/wcH + B/85OTn/hISE/3p6ev9SUlL/MzMz/yMjI/8aGhr/Gxsb/xsbG/8bGxv/GRkZ/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/Ghoa/x8fH/8mJib/Ojo6/0pKSv9NTU3/TU1N/z8/ + P/8uLi7/JSUl/x0dHf8ZGRn/GBgY/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/GBgY/xkZGf8cHBz/Hh4e/x4e + Hv8fHx//Gxsb/xEREf8KCgr/CwsL/xQUFP8gICD/Kysr/zAwMP8yMjL/NTU1/zc3N/8hISH/CwsL/wkJ + Cf8SEhL/ra2t//39/f////////////////////////////////////////////////////////////// + ///6+vr//f39/+vr6/92dnb/DAwM/wgICP8SEhL/RERE/1tbW/9DQ0P/Kysr/yQkJP8fHx//Gxsb/xsb + G/8bGxv/GBgY/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/GBgY/xcX + F/8VFRX/GBgY/x8fH/8iIiL/Hh4e/xwcHP8dHR3/GBgY/xUVFf8XFxf/Ghoa/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/Ghoa/xwcHP8eHh7/ICAg/yEhIf8cHBz/ExMT/wkJCf8GBgb/CAgI/xUVFf8qKir/MjIy/zIy + Mv8yMjL/MjIy/zQ0NP8eHh7/CQkJ/wcHB/8XFxf/rq6u//v7+/////////////////////////////// + ///////////////////////////////////5+fn//Pz8//r6+v/Kysr/PDw8/wkJCf8ODg7/EhIS/y8v + L/88PDz/Ly8v/yIiIv8eHh7/Gxsb/xsbG/8bGxv/GBgY/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xgYGP8XFxf/FhYW/xUVFf8VFRX/ExMT/xQUFP8XFxf/FxcX/xUV + Ff8XFxf/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/HBwc/x4eHv8hISH/IiIi/x0dHf8UFBT/CwsL/wgI + CP8GBgb/EBAQ/yIiIv8uLi7/NDQ0/zQ0NP8yMjL/MDAw/ysrK/8VFRX/BwcH/wwMDP8zMzP/w8PD//n5 + +f/////////////////////////////////////////////////////////////////9/f3//f39//n5 + +f/4+Pj/pqam/x8fH/8JCQn/DAwM/xAQEP8nJyf/Li4u/yMjI/8eHh7/HR0d/xsbG/8bGxv/GRkZ/xgY + GP8YGBj/GBgY/xgYGP8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FhYW/xUVFf8ZGRn/GRkZ/xgY + GP8XFxf/GBgY/xcXF/8WFhb/Gxsb/xgYGP8XFxf/GBgY/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FhYW/xYWFv8XFxf/GBgY/xYWFv8WFhb/FxcX/xgYGP8ZGRn/GBgY/xcXF/8XFxf/HR0d/yEh + If8kJCT/Hh4e/xQUFP8KCgr/BQUF/wkJCf8WFhb/LCws/z09Pf84ODj/NTU1/zc3N/8zMzP/Kioq/x4e + Hv8MDAz/CAgI/xQUFP9sbGz/5+fn//39/f////////////////////////////////////////////// + ////////////////////////////////////////8PDw/4mJif8yMjL/DQ0N/woKCv8RERH/GRkZ/yEh + If8oKCj/JCQk/x8fH/8cHBz/GRkZ/xgYGP8ZGRn/GRkZ/xgYGP8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FRUV/xYWFv8YGBj/GRkZ/xYWFv8XFxf/GRkZ/xsb + G/8fHx//HR0d/xwcHP8eHh7/IyMj/yAgIP8gICD/Dw8P/wcHB/8EBAT/DQ0N/yEhIf89PT3/UVFR/1dX + V/9JSUn/Ojo6/zU1Nf8pKSn/FRUV/wcHB/8GBgb/BwcH/zo6Ov+/v7//9fX1//////////////////// + ////////////////////////////////////////////////////////////////////////+/v7//Dw + 8P+jo6P/MDAw/wsLC/8SEhL/CgoK/xMTE/8nJyf/KCgo/yYmJv8gICD/Gxsb/xgYGP8WFhb/FRUV/xUV + Ff8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FRUV/xYW + Fv8YGBj/GRkZ/xoaGv8bGxv/Hh4e/x8fH/8gICD/JCQk/yYmJv8lJSX/JSUl/xQUFP8ODg7/CAgI/wYG + Bv8HBwf/GBgY/zk5Of9ISEj/R0dH/0JCQv88PDz/Kioq/xgYGP8LCwv/BgYG/woKCv8LCwv/GBgY/4eH + h//w8PD/+fn5//////////////////////////////////////////////////////////////////// + /////////////////////////f39//7+/v/y8vL/i4uL/x0dHf8ICAj/BgYG/wwMDP8VFRX/ICAg/ycn + J/8lJSX/ISEh/x8fH/8bGxv/FxcX/xYWFv8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FRUV/xYWFv8YGBj/Ghoa/x4eHv8gICD/IyMj/yQkJP8kJCT/KSkp/ycn + J/8eHh7/FhYW/wcHB/8FBQX/BAQE/wUFBf8GBgb/Dg4O/xsbG/8bGxv/FxcX/xQUFP8RERH/CQkJ/wMD + A/8CAgL/CQkJ/wgICP8jIyP/bW1t/9bW1v/9/f3//v7+//7+/v////////////////////////////// + ////////////////////////////////////////////////////////+Pj4//39/f/6+vr/7Ozs/46O + jv8sLCz/CAgI/wkJCf8GBgb/FhYW/yUlJf8nJyf/Jycn/ycnJ/8hISH/HBwc/xoaGv8ZGRn/FhYW/xYW + Fv8XFxf/FxcX/xcXF/8XFxf/FxcX/xgYGP8YGBj/GBgY/xgYGP8YGBj/FxcX/xcXF/8WFhb/FxcX/xcX + F/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FRUV/xcXF/8ZGRn/Ghoa/yAg + IP8iIiL/JSUl/yYmJv8mJib/Kioq/yIiIv8PDw//BgYG/wICAv8FBQX/AwMD/wICAv8FBQX/CgoK/wcH + B/8EBAT/CQkJ/woKCv8GBgb/BQUF/wkJCf8HBwf/DQ0N/y8vL/+Xl5f/4uLi//r6+v/9/f3//v7+//7+ + /v////////////////////////////////////////////////////////////////////////////// + /////////v7+//39/f/9/f3//f39/+rq6v+Kior/HBwc/wQEBP8FBQX/CQkJ/xUVFf8kJCT/LS0t/yws + LP8oKCj/ISEh/x4eHv8cHBz/FRUV/xYWFv8YGBj/FxcX/xcXF/8XFxf/GBgY/xkZGf8ZGRn/GRkZ/xoa + Gv8aGhr/GBgY/xYWFv8VFRX/GBgY/xgYGP8YGBj/GBgY/xcXF/8XFxf/FhYW/xYWFv8ZGRn/GRkZ/xkZ + Gf8ZGRn/Gxsb/x0dHf8fHx//ISEh/yUlJf8lJSX/JCQk/yMjI/8dHR3/FxcX/xAQEP8JCQn/BgYG/wcH + B/8GBgb/BgYG/wUFBf8FBQX/CgoK/wcHB/8FBQX/BgYG/wcHB/8HBwf/CQkJ/yIiIv9BQUH/fHx8/76+ + vv/u7u7//Pz8//X19f/7+/v//f39//39/f////////////////////////////////////////////// + /////////////////////////////////////////v7+//39/f/9/f3//f39//f39//p6en/jY2N/yQk + JP8MDAz/BAQE/wUFBf8QEBD/GBgY/yQkJP8sLCz/Kioq/ycnJ/8mJib/Hx8f/xsbG/8ZGRn/GBgY/xgY + GP8YGBj/GRkZ/xkZGf8ZGRn/GRkZ/xoaGv8cHBz/Ghoa/xgYGP8XFxf/Ghoa/xoaGv8aGhr/GRkZ/xYW + Fv8YGBj/Ghoa/xsbG/8hISH/IiIi/yIiIv8hISH/Hh4e/x8fH/8hISH/IyMj/yYmJv8iIiL/HR0d/xkZ + Gf8NDQ3/BAQE/wMDA/8JCQn/CgoK/xcXF/8qKir/ISEh/wUFBf8JCQn/BQUF/w0NDf8QEBD/GBgY/y8v + L/9CQkL/Z2dn/6ioqP/c3Nz/8fHx//X19f/6+vr/9vb2//T09P/8/Pz//f39//39/f////////////// + /////////////////////////////////////////////////////////////////////////v7+//39 + /f/9/f3//f39//f39//5+fn/7e3t/7Gxsf9cXFz/Hx8f/woKCv8GBgb/AwMD/wsLC/8ZGRn/Jycn/zMz + M/83Nzf/MjIy/yYmJv8gICD/ISEh/yEhIf8hISH/ISEh/yEhIf8hISH/ISEh/yAgIP8eHh7/HR0d/xoa + Gv8aGhr/HBwc/xwcHP8cHBz/HBwc/x0dHf8gICD/JCQk/ycnJ/8sLCz/LCws/ywsLP8sLCz/Li4u/ysr + K/8mJib/IiIi/xMTE/8PDw//CwsL/wgICP8FBQX/BwcH/wkJCf8KCgr/GBgY/zc3N/9aWlr/QUFB/wsL + C/8JCQn/CQkJ/09PT/+Wlpb/rq6u/83Nzf/n5+f/8fHx//T09P/y8vL/9vb2//b29v/7+/v//Pz8//j4 + +P/6+vr//f39//39/f////////////////////////////////////////////////////////////// + /////////////////////////v7+//39/f/9/f3//f39//z8/P/9/f3//f39//v7+//k5OT/l5eX/z09 + Pf8ODg7/BQUF/wUFBf8DAwP/ERER/yEhIf8sLCz/MjIy/y4uLv8qKir/KSkp/yoqKv8rKyv/Kioq/ygo + KP8oKCj/KCgo/ycnJ/8iIiL/ISEh/x8fH/8eHh7/ISEh/yEhIf8hISH/ISEh/yUlJf8pKSn/Li4u/zEx + Mf8yMjL/MjIy/zExMf8wMDD/LCws/yAgIP8UFBT/Dw8P/wUFBf8FBQX/BgYG/wcHB/8HBwf/BgYG/xMT + E/8qKir/QEBA/0VFRf9aWlr/Pj4+/wkJCf8ICAj/IiIi/66urv/39/f/+fn5//v7+//8/Pz/+fn5//j4 + +P/4+Pj/+vr6//n5+f/39/f/+fn5//39/f/9/f3//f39//39/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v/9/f3//f39//39/f/39/f/9/f3/7+/v/9JSUn/Dw8P/wsLC/8FBQX/BgYG/wcHB/8KCgr/EBAQ/xcX + F/8aGhr/GBgY/xoaGv8hISH/Jycn/ygoKP8qKir/LCws/y0tLf8uLi7/Li4u/y4uLv8uLi7/LS0t/y0t + Lf8tLS3/LCws/yoqKv8qKir/KSkp/ygoKP8kJCT/IiIi/x8fH/8cHBz/Dg4O/wQEBP8BAQH/BgYG/wQE + BP8EBAT/BQUF/wkJCf8XFxf/KCgo/zs7O/9GRkb/TU1N/1BQUP9RUVH/IyMj/wUFBf8ICAj/SkpK/97e + 3v/9/f3//f39//39/f/9/f3//v7+//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7+/v/9/f3//f39//39/f/8/Pz/+Pj4//n5+f/R0dH/jY2N/05O + Tv8kJCT/FRUV/wYGBv8HBwf/BgYG/wEBAf8CAgL/AwMD/wMDA/8HBwf/DQ0N/xEREf8TExP/FRUV/xgY + GP8bGxv/Gxsb/xsbG/8ZGRn/FBQU/xUVFf8VFRX/FBQU/xUVFf8RERH/DAwM/wkJCf8FBQX/BAQE/wMD + A/8DAwP/BQUF/wUFBf8GBgb/CAgI/w4ODv8bGxv/KSkp/zMzM/9ISEj/UFBQ/1JSUv9QUFD/UVFR/01N + Tf8rKyv/EBAQ/wkJCf8ODg7/i4uL//T09P/5+fn//f39//39/f/9/f3//v7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7+/v/9/f3//f39//39 + /f/29vb/+fn5//z8/P/6+vr/+vr6/+Pj4//BwcH/jo6O/1NTU/8sLCz/Dw8P/wUFBf8FBQX/AwMD/wEB + Af8DAwP/BQUF/wICAv8EBAT/BgYG/wcHB/8ICAj/CAgI/wgICP8HBwf/AwMD/wMDA/8DAwP/AwMD/wcH + B/8DAwP/AQEB/wAAAP8DAwP/BAQE/wYGBv8HBwf/BAQE/wsLC/8gICD/ODg4/0tLS/9ZWVn/YmJi/2Ji + Yv9dXV3/WVlZ/09PT/9DQ0P/NjY2/ywsLP8MDAz/BQUF/wkJCf9CQkL/xMTE//v7+//6+vr//f39//39 + /f/9/f3//v7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v/9/f3//f39//39/f/6+vr/+vr6//n5+f/7+/v/+fn5//z8/P/9/f3/+Pj4/+zs + 7P/T09P/n5+f/1ZWVv8nJyf/GRkZ/xISEv8PDw//DAwM/wgICP8ICAj/CAgI/wcHB/8FBQX/BQUF/wQE + BP8EBAT/AwMD/wMDA/8DAwP/AwMD/wMDA/8CAgL/AwMD/wMDA/8DAwP/AQEB/wQEBP8FBQX/BAQE/x8f + H/88PDz/TExM/2NjY/9xcXH/dHR0/2xsbP9cXFz/SUlJ/y8vL/8ZGRn/Dw8P/wgICP8DAwP/BgYG/zIy + Mv+qqqr/7+/v//T09P/9/f3//f39//39/f/9/f3//v7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////v7+//8/Pz/+fn5/+Pj4//Pz8//w8PD/7Ozs/+ioqL/jo6O/3Jy + cv9mZmb/WVlZ/1BQUP9KSkr/SUlJ/0ZGRv9DQ0P/PDw8/z09Pf9AQED/QUFB/0ZGRv9UVFT/Z2dn/3Jy + cv9dXV3/LS0t/wkJCf8CAgL/AgIC/wYGBv8LCwv/FxcX/yEhIf8pKSn/LS0t/yoqKv8lJSX/FRUV/wkJ + Cf8EBAT/BwcH/wICAv8GBgb/Kysr/5ubm//p6en/+/v7//n5+f////////////////////////////// + ///////////////////////////////////+/v7//f39//39/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////39/f/9/f3//Pz8//39 + /f/9/f3//Pz8//z8/P/7+/v/+vr6//b29v/z8/P/7+/v/+zs7P/o6Oj/5+fn/+Xl5f/k5OT/4eHh/+Li + 4v/j4+P/5OTk/+bm5v/s7Oz/8vLy//X19f/t7e3/uLi4/1hYWP8aGhr/BAQE/wUFBf8HBwf/AgIC/wQE + BP8FBQX/BgYG/wYGBv8HBwf/DAwM/wUFBf8BAQH/BgYG/wkJCf80NDT/q6ur//Pz8//5+fn/+/v7//r6 + +v/9/f3////////////////////////////////////////////////////////////+/v7//f39//39 + /f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/v7/+/v7//z8/P/8/Pz/+fn5//n5+f/5+fn/+fn5//v7+//9/f3//f39//39 + /f///////v7+//z8/P/7+/v/+vr6//z8/P/9/f3//Pz8//j4+P/6+vr//Pz8//39/f/+/v7/9PT0/9bW + 1v+Xl5f/RUVF/xgYGP8LCwv/CAgI/wkJCf8LCwv/CgoK/wYGBv8ICAj/CgoK/woKCv8kJCT/V1dX/3Nz + c/+zs7P/7e3t//r6+v/7+/v//v7+//f39//6+vr///////////////////////////////////////// + ///////////////////+/v7//f39//39/f////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7+/v/9/f3//f39//n5+f/4+Pj/+/v7//z8 + /P/9/f3//f39//v7+//8/Pz//v7+//39/f/9/f3//Pz8//r6+v/6+vr//f39//7+/v///////f39//r6 + +v/9/f3//f39//z8/P/8/Pz//Pz8//n5+f/39/f/5OTk/7u7u/+pqan/j4+P/2BgYP9FRUX/QEBA/1NT + U/9mZmb/fHx8/4+Pj/++vr7/5eXl//T09P/19fX/+Pj4//f39//7+/v/+fn5//r6+v/+/v7///////// + ///////////////////////////////////////////////////+/v7//f39//39/f////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v/+/v7///////////////////////////////////////////////////////7+ + /v/+/v7//////////////////////////////////////////////////////////////////f39//z8 + /P/8/Pz/+vr6//Dw8P/u7u7/7u7u/+/v7//z8/P/9PT0//X19f/39/f//Pz8//39/f/9/f3//Pz8//7+ + /v///////v7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////f39//39/f/9/f3//f39//r6+v/6+vr/+vr6//r6+v/9/f3//f39//39 + /f/9/f3//f39//39/f/9/f3//f39//7+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////f39//39/f/9/f3//f39//7+ + /v/+/v7//v7+//7+/v///////////////////////f39//39/f/9/f3//f39//7+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////f39//39/f/9/f3//f39//39/f/8/Pz//Pz8//z8/P/9/f3//f39//39/f/9/f3//f39//39 + /f/9/f3//f39//7+/v////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/PrimeNumber/PrimeNumber.csproj b/PrimeNumber/PrimeNumber.csproj new file mode 100644 index 0000000..8b395e7 --- /dev/null +++ b/PrimeNumber/PrimeNumber.csproj @@ -0,0 +1,98 @@ + + + + + Debug + AnyCPU + {4DE1916E-3164-4A40-8935-3FD3CAB9216D} + WinExe + PrimeNumber + 质数穷举 + v4.5 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + opengps.ico + + + + + + + + + + + + + + + + + + + Form + + + MainForm.cs + + + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + {f4d21539-f371-4d7b-a507-6211cb17c1d5} + PrimeNumber.FrameWorkCore + + + + + + + \ No newline at end of file diff --git a/PrimeNumber/Program.cs b/PrimeNumber/Program.cs new file mode 100644 index 0000000..9a3785e --- /dev/null +++ b/PrimeNumber/Program.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace PrimeNumber.WinForm.OneThread +{ + internal static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + #region MyRegion + + //32767 + Console.WriteLine(Int16.MaxValue); + Console.WriteLine(UInt16.MaxValue); + + //2147483647 + Console.WriteLine(Int32.MaxValue); + Console.WriteLine(int.MaxValue); + //4294967295 + Console.WriteLine(UInt32.MaxValue); + Console.WriteLine(uint.MaxValue); + + //9223372036854775807 + Console.WriteLine(Int64.MaxValue); + Console.WriteLine(long.MaxValue); + //18446744073709551615 + Console.WriteLine(UInt64.MaxValue); + Console.WriteLine(ulong.MaxValue); + + //79228162514264337593543950335 + Console.WriteLine(decimal.MaxValue); + + //3.40282347E+38F + Console.WriteLine(Single.MaxValue); + Console.WriteLine(float.MaxValue); + + //1.7976931348623157E+308 + Console.WriteLine(double.MaxValue); + #endregion + + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + Application.Run(new MainForm()); + } + } +} diff --git a/PrimeNumber/Properties/AssemblyInfo.cs b/PrimeNumber/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..28b4201 --- /dev/null +++ b/PrimeNumber/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("PrimeNumber.WinForm.OneThread")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("PrimeNumber.WinForm.OneThread")] +[assembly: AssemblyCopyright("Copyright © 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("4de1916e-3164-4a40-8935-3fd3cab9216d")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/PrimeNumber/Properties/Resources.Designer.cs b/PrimeNumber/Properties/Resources.Designer.cs new file mode 100644 index 0000000..2626c4f --- /dev/null +++ b/PrimeNumber/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace PrimeNumber.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.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 (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PrimeNumber.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/PrimeNumber/Properties/Resources.resx b/PrimeNumber/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/PrimeNumber/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/PrimeNumber/Properties/Settings.Designer.cs b/PrimeNumber/Properties/Settings.Designer.cs new file mode 100644 index 0000000..52c1732 --- /dev/null +++ b/PrimeNumber/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace PrimeNumber.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.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/PrimeNumber/Properties/Settings.settings b/PrimeNumber/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/PrimeNumber/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/PrimeNumber/opengps.ico b/PrimeNumber/opengps.ico new file mode 100644 index 0000000000000000000000000000000000000000..2ddb89b9d2671e615a96bf0b993ad868424ec6c8 GIT binary patch literal 38078 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