diff --git a/.vs/VisionEdit/v14/.suo b/.vs/VisionEdit/v14/.suo index de35ceb..a8e47c5 100644 Binary files a/.vs/VisionEdit/v14/.suo and b/.vs/VisionEdit/v14/.suo differ diff --git a/CaliperTool/obj/Debug/CaliperTool.csproj.FileListAbsolute.txt b/CaliperTool/obj/Debug/CaliperTool.csproj.FileListAbsolute.txt index 1fbb4fa..14b3644 100644 --- a/CaliperTool/obj/Debug/CaliperTool.csproj.FileListAbsolute.txt +++ b/CaliperTool/obj/Debug/CaliperTool.csproj.FileListAbsolute.txt @@ -32,9 +32,6 @@ G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.FormCaliper.resources G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csproj.GenerateResource.Cache G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.dll G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.pdb -F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csprojResolveAssemblyReference.cache -F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.FormCaliper.resources -F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\log4net.config F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\CaliperTool.dll F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\CaliperTool.pdb @@ -60,5 +57,8 @@ F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\HWindow_Tool.pdb F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\halcondotnet.xml F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\Newtonsoft.Json.xml F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\DevComponents.DotNetBar2.xml +F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csprojResolveAssemblyReference.cache +F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.FormCaliper.resources +F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.dll F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.pdb diff --git a/CommonMethods/Interface/CommonStruct.cs b/CommonMethods/Interface/CommonStruct.cs index 1af3dff..d1f6857 100644 --- a/CommonMethods/Interface/CommonStruct.cs +++ b/CommonMethods/Interface/CommonStruct.cs @@ -49,6 +49,7 @@ namespace CommonMethods { String, IntValue, + DoubleValue, Region, Image, Point, @@ -89,6 +90,7 @@ namespace CommonMethods No_Input_String, Tool_Run_Error, Input_Value_Type_Error, + Model_UnFound, 未运行, 未启用, 缺少输入搜索区域, diff --git a/CommonMethods/obj/Debug/CommonHelper.csproj.FileListAbsolute.txt b/CommonMethods/obj/Debug/CommonHelper.csproj.FileListAbsolute.txt index a3eae75..703c107 100644 --- a/CommonMethods/obj/Debug/CommonHelper.csproj.FileListAbsolute.txt +++ b/CommonMethods/obj/Debug/CommonHelper.csproj.FileListAbsolute.txt @@ -12,4 +12,3 @@ F:\GitHubClone\最新克隆\VisionEdit\CommonMethods\bin\Debug\halcondotnet.xml F:\GitHubClone\最新克隆\VisionEdit\CommonMethods\bin\Debug\Newtonsoft.Json.xml F:\GitHubClone\最新克隆\VisionEdit\CommonMethods\obj\Debug\CommonMethods.dll F:\GitHubClone\最新克隆\VisionEdit\CommonMethods\obj\Debug\CommonMethods.pdb -F:\GitHubClone\最新克隆\VisionEdit\CommonMethods\obj\Debug\CommonHelper.csprojResolveAssemblyReference.cache diff --git a/DataStruct/DataStruct.cs b/DataStruct/DataStruct.cs index 6683e7b..b5e748d 100644 --- a/DataStruct/DataStruct.cs +++ b/DataStruct/DataStruct.cs @@ -37,11 +37,11 @@ namespace DataStruct [Serializable] public class XYU { - internal XYU() + public XYU() { _point = new XY(); } - internal XYU(double x, double y, double u) + public XYU(double x, double y, double u) { _point = new XY(); _point.X = x; diff --git a/FindCircle/obj/Debug/FindCircleTool.csproj.FileListAbsolute.txt b/FindCircle/obj/Debug/FindCircleTool.csproj.FileListAbsolute.txt index 38ab3f2..0606f79 100644 --- a/FindCircle/obj/Debug/FindCircleTool.csproj.FileListAbsolute.txt +++ b/FindCircle/obj/Debug/FindCircleTool.csproj.FileListAbsolute.txt @@ -24,9 +24,6 @@ G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircle.FormFindCircle.resource G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csproj.GenerateResource.Cache G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.dll G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.pdb -F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csprojResolveAssemblyReference.cache -F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircle.FormFindCircle.resources -F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\FindCircleTool.dll F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\FindCircleTool.pdb F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\CommonMethods.dll @@ -41,5 +38,8 @@ F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\ToolBase.pdb F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\HWindow_Tool.pdb F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\halcondotnet.xml F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\Newtonsoft.Json.xml +F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csprojResolveAssemblyReference.cache +F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircle.FormFindCircle.resources +F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircleTool.dll F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircleTool.pdb diff --git a/FindLine/FindLine.cs b/FindLine/FindLine.cs index 04c4f6d..3ae5ae2 100644 --- a/FindLine/FindLine.cs +++ b/FindLine/FindLine.cs @@ -1,11 +1,9 @@ using System; using HalconDotNet; -using DataStruct; using static DataStruct.DataStruct; using ToolBase; using CommonMethods; using System.Diagnostics; -using ChoiceTech.Halcon.Control; namespace FindLineTool { @@ -207,7 +205,7 @@ namespace FindLineTool { if(inputImage != null) { - FormFindLine.Instance.myHwindow.DispHWindow.DispImage(new HImage(inputImage)); + FormFindLine.Instance.myHwindow.DispImage(new HImage(inputImage)); } } diff --git a/FindLine/FormFindLine.Designer.cs b/FindLine/FormFindLine.Designer.cs index c6c4f00..eee906c 100644 --- a/FindLine/FormFindLine.Designer.cs +++ b/FindLine/FormFindLine.Designer.cs @@ -32,6 +32,9 @@ this.toolStrip1 = new System.Windows.Forms.ToolStrip(); this.tsbtRunTool = new System.Windows.Forms.ToolStripButton(); this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.panel1 = new System.Windows.Forms.Panel(); this.tabControl1 = new System.Windows.Forms.TabControl(); @@ -68,9 +71,6 @@ this.label7 = new System.Windows.Forms.Label(); this.label10 = new System.Windows.Forms.Label(); this.label9 = new System.Windows.Forms.Label(); - this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); - this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStrip1.SuspendLayout(); this.statusStrip.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); @@ -119,6 +119,22 @@ this.statusStrip.TabIndex = 3; this.statusStrip.Text = "statusStrip1"; // + // lb_RunStatus + // + this.lb_RunStatus.Name = "lb_RunStatus"; + this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(120, 17); + this.toolStripStatusLabel1.Text = " "; + // + // lb_RunTime + // + this.lb_RunTime.Name = "lb_RunTime"; + this.lb_RunTime.Size = new System.Drawing.Size(0, 17); + // // splitContainer1 // this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; @@ -528,23 +544,7 @@ this.label9.TabIndex = 105; this.label9.Text = "起点列坐标:"; // - // lb_RunStatus - // - this.lb_RunStatus.Name = "lb_RunStatus"; - this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); - // - // toolStripStatusLabel1 - // - this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; - this.toolStripStatusLabel1.Size = new System.Drawing.Size(120, 17); - this.toolStripStatusLabel1.Text = " "; - // - // lb_RunTime - // - this.lb_RunTime.Name = "lb_RunTime"; - this.lb_RunTime.Size = new System.Drawing.Size(0, 17); - // - // FormFindLine2 + // FormFindLine // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; @@ -553,7 +553,7 @@ this.Controls.Add(this.statusStrip); this.Controls.Add(this.toolStrip1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "FormFindLine2"; + this.Name = "FormFindLine"; this.Text = "找线工具"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormFindLine2_FormClosing); this.Load += new System.EventHandler(this.FormFindLine2_Load); diff --git a/FindLine/obj/Debug/FindLineTool.csproj.FileListAbsolute.txt b/FindLine/obj/Debug/FindLineTool.csproj.FileListAbsolute.txt index 36c45a7..c42f8e1 100644 --- a/FindLine/obj/Debug/FindLineTool.csproj.FileListAbsolute.txt +++ b/FindLine/obj/Debug/FindLineTool.csproj.FileListAbsolute.txt @@ -32,9 +32,6 @@ G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.FormFindLine.resources G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.csproj.GenerateResource.Cache G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.dll G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.pdb -F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.csprojResolveAssemblyReference.cache -F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.FormFindLine.resources -F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\log4net.config F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\FindLineTool.dll F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\FindLineTool.pdb @@ -60,5 +57,8 @@ F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\HWindow_Tool.pdb F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\halcondotnet.xml F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\Newtonsoft.Json.xml F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\DevComponents.DotNetBar2.xml +F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.csprojResolveAssemblyReference.cache +F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.FormFindLine.resources +F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.dll F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.pdb diff --git a/HalconTool/obj/Debug/HalconTool.csproj.FileListAbsolute.txt b/HalconTool/obj/Debug/HalconTool.csproj.FileListAbsolute.txt index 83ba5d4..f68bb43 100644 --- a/HalconTool/obj/Debug/HalconTool.csproj.FileListAbsolute.txt +++ b/HalconTool/obj/Debug/HalconTool.csproj.FileListAbsolute.txt @@ -32,9 +32,6 @@ G:\VisionEdit\VisionEdit\HalconTool\obj\Debug\HalconTool.FormHalconTool.resource G:\VisionEdit\VisionEdit\HalconTool\obj\Debug\HalconTool.csproj.GenerateResource.Cache G:\VisionEdit\VisionEdit\HalconTool\obj\Debug\HalconTool.dll G:\VisionEdit\VisionEdit\HalconTool\obj\Debug\HalconTool.pdb -F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.csprojResolveAssemblyReference.cache -F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.FormHalconTool.resources -F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\log4net.config F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\HalconTool.dll F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\HalconTool.pdb @@ -58,5 +55,8 @@ F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\HWindow_Tool.pdb F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\DevComponents.DotNetBar2.xml F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\halcondotnet.xml F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\Newtonsoft.Json.xml +F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.csprojResolveAssemblyReference.cache +F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.FormHalconTool.resources +F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.dll F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.pdb diff --git a/PMAlignTool/FormPMAlignTool.Designer.cs b/PMAlignTool/FormPMAlignTool.Designer.cs index f1de632..491860e 100644 --- a/PMAlignTool/FormPMAlignTool.Designer.cs +++ b/PMAlignTool/FormPMAlignTool.Designer.cs @@ -29,7 +29,10 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormPMAlignTool)); - this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStrip1 = new System.Windows.Forms.ToolStrip(); this.tsbtRunTool = new System.Windows.Forms.ToolStripButton(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); @@ -41,7 +44,6 @@ this.label4 = new System.Windows.Forms.Label(); this.panel9 = new System.Windows.Forms.Panel(); this.label3 = new System.Windows.Forms.Label(); - this.hWindowTool_Smart1 = new ViewROI.HWindowTool_Smart(); this.panel3 = new System.Windows.Forms.Panel(); this.label1 = new System.Windows.Forms.Label(); this.panel8 = new System.Windows.Forms.Panel(); @@ -61,9 +63,9 @@ this.rdo_templateRegionSub = new System.Windows.Forms.RadioButton(); this.rdo_templateRegionAdd = new System.Windows.Forms.RadioButton(); this.panel14 = new System.Windows.Forms.Panel(); - this.cNumErosionValue2 = new Controls.CNumericUpDown(); - this.cNumDilationValue2 = new Controls.CNumericUpDown(); - this.cNumErosionValue1 = new Controls.CNumericUpDown(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); this.cbCDilation1 = new System.Windows.Forms.CheckBox(); this.cbCErosion1 = new System.Windows.Forms.CheckBox(); this.cbCErosion2 = new System.Windows.Forms.CheckBox(); @@ -76,16 +78,6 @@ this.panel11 = new System.Windows.Forms.Panel(); this.label11 = new System.Windows.Forms.Label(); this.panel2 = new System.Windows.Forms.Panel(); - this.ckb_autoContrast = new Controls.CCheckBox(); - this.numericUpDown2 = new Controls.CNumericUpDown(); - this.nud_angleRange = new Controls.CNumericUpDown(); - this.numericUpDown1 = new Controls.CNumericUpDown(); - this.nud_angleStart = new Controls.CNumericUpDown(); - this.cbx_polarity = new Controls.CComboBox(); - this.nud_minScore = new Controls.CNumericUpDown(); - this.numericUpDown3 = new Controls.CNumericUpDown(); - this.nud_angleStep = new Controls.CNumericUpDown(); - this.nud_matchNum = new Controls.CNumericUpDown(); this.tkb_contrast = new System.Windows.Forms.TrackBar(); this.lbl_contastValue = new System.Windows.Forms.Label(); this.label87 = new System.Windows.Forms.Label(); @@ -100,7 +92,6 @@ this.label15 = new System.Windows.Forms.Label(); this.label85 = new System.Windows.Forms.Label(); this.panel5 = new System.Windows.Forms.Panel(); - this.cbx_searchRegionType = new Controls.CComboBox(); this.label5 = new System.Windows.Forms.Label(); this.tabPage4 = new System.Windows.Forms.TabPage(); this.panel6 = new System.Windows.Forms.Panel(); @@ -117,6 +108,25 @@ this.Column9 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column10 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column12 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.hWindowTool_Smart1 = new ViewROI.HWindowTool_Smart(); + this.cmbErsion2 = new Controls.CComboBox(); + this.cmbDilation = new Controls.CComboBox(); + this.cmbErsion1 = new Controls.CComboBox(); + this.cNumErosionValue2 = new Controls.CNumericUpDown(); + this.cNumDilationValue2 = new Controls.CNumericUpDown(); + this.cNumErosionValue1 = new Controls.CNumericUpDown(); + this.nud_angleRange = new Controls.CNumericUpDown(); + this.ckb_autoContrast = new Controls.CCheckBox(); + this.nud_ScaleRange = new Controls.CNumericUpDown(); + this.nud_ScaleStart = new Controls.CNumericUpDown(); + this.nud_angleStart = new Controls.CNumericUpDown(); + this.cbx_polarity = new Controls.CComboBox(); + this.nud_minScore = new Controls.CNumericUpDown(); + this.numericUpDown3 = new Controls.CNumericUpDown(); + this.nud_angleStep = new Controls.CNumericUpDown(); + this.nud_matchNum = new Controls.CNumericUpDown(); + this.cbx_searchRegionType = new Controls.CComboBox(); + this.statusStrip.SuspendLayout(); this.toolStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); @@ -147,14 +157,33 @@ ((System.ComponentModel.ISupportInitialize)(this.dgv_matchResult)).BeginInit(); this.SuspendLayout(); // - // statusStrip1 + // statusStrip // - this.statusStrip1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.statusStrip1.Location = new System.Drawing.Point(0, 633); - this.statusStrip1.Name = "statusStrip1"; - this.statusStrip1.Size = new System.Drawing.Size(999, 22); - this.statusStrip1.TabIndex = 0; - this.statusStrip1.Text = "statusStrip1"; + this.statusStrip.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.lb_RunStatus, + this.toolStripStatusLabel1, + this.lb_RunTime}); + this.statusStrip.Location = new System.Drawing.Point(0, 633); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(999, 22); + this.statusStrip.TabIndex = 0; + // + // lb_RunStatus + // + this.lb_RunStatus.Name = "lb_RunStatus"; + this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(16, 17); + this.toolStripStatusLabel1.Text = " "; + // + // lb_RunTime + // + this.lb_RunTime.Name = "lb_RunTime"; + this.lb_RunTime.Size = new System.Drawing.Size(0, 17); // // toolStrip1 // @@ -174,6 +203,7 @@ this.tsbtRunTool.Name = "tsbtRunTool"; this.tsbtRunTool.Size = new System.Drawing.Size(85, 29); this.tsbtRunTool.Text = "运行工具"; + this.tsbtRunTool.Click += new System.EventHandler(this.tsbtRunTool_Click); // // splitContainer1 // @@ -310,18 +340,6 @@ this.label3.TabIndex = 11; this.label3.Text = "模板ROI方式"; // - // hWindowTool_Smart1 - // - this.hWindowTool_Smart1.DispStatus = false; - this.hWindowTool_Smart1.Dock = System.Windows.Forms.DockStyle.Fill; - this.hWindowTool_Smart1.hv_Image = null; - this.hWindowTool_Smart1.Location = new System.Drawing.Point(4, 5); - this.hWindowTool_Smart1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.hWindowTool_Smart1.Name = "hWindowTool_Smart1"; - this.tableLayoutPanel1.SetRowSpan(this.hWindowTool_Smart1, 3); - this.hWindowTool_Smart1.Size = new System.Drawing.Size(226, 169); - this.hWindowTool_Smart1.TabIndex = 0; - // // panel3 // this.panel3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(26)))), ((int)(((byte)(106)))), ((int)(((byte)(175))))); @@ -359,9 +377,10 @@ // this.panel18.Controls.Add(this.rabGray); this.panel18.Controls.Add(this.rabShape); - this.panel18.Location = new System.Drawing.Point(6, 2); + this.panel18.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel18.Location = new System.Drawing.Point(0, 0); this.panel18.Name = "panel18"; - this.panel18.Size = new System.Drawing.Size(367, 35); + this.panel18.Size = new System.Drawing.Size(376, 38); this.panel18.TabIndex = 147; // // rabGray @@ -376,6 +395,7 @@ this.rabGray.TabIndex = 143; this.rabGray.Text = "基于灰度"; this.rabGray.UseVisualStyleBackColor = true; + this.rabGray.CheckedChanged += new System.EventHandler(this.rabShape_CheckedChanged); // // rabShape // @@ -391,11 +411,13 @@ this.rabShape.TabStop = true; this.rabShape.Text = "基于轮廓"; this.rabShape.UseVisualStyleBackColor = true; + this.rabShape.CheckedChanged += new System.EventHandler(this.rabShape_CheckedChanged); // // groupBox1 // this.groupBox1.Controls.Add(this.rabFormLocal); this.groupBox1.Controls.Add(this.rabFormFlow); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; this.groupBox1.Location = new System.Drawing.Point(237, 3); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new System.Drawing.Size(142, 79); @@ -405,6 +427,9 @@ // // rabFormLocal // + this.rabFormLocal.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.rabFormLocal.AutoSize = true; this.rabFormLocal.Location = new System.Drawing.Point(6, 51); this.rabFormLocal.Name = "rabFormLocal"; @@ -415,6 +440,8 @@ // // rabFormFlow // + this.rabFormFlow.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.rabFormFlow.AutoSize = true; this.rabFormFlow.Checked = true; this.rabFormFlow.Location = new System.Drawing.Point(6, 25); @@ -578,6 +605,12 @@ // panel14 // this.tableLayoutPanel1.SetColumnSpan(this.panel14, 2); + this.panel14.Controls.Add(this.label8); + this.panel14.Controls.Add(this.label7); + this.panel14.Controls.Add(this.label6); + this.panel14.Controls.Add(this.cmbErsion2); + this.panel14.Controls.Add(this.cmbDilation); + this.panel14.Controls.Add(this.cmbErsion1); this.panel14.Controls.Add(this.cNumErosionValue2); this.panel14.Controls.Add(this.cNumDilationValue2); this.panel14.Controls.Add(this.cNumErosionValue1); @@ -591,95 +624,35 @@ this.panel14.Size = new System.Drawing.Size(376, 142); this.panel14.TabIndex = 127; // - // cNumErosionValue2 + // label8 // - this.cNumErosionValue2.BackColor = System.Drawing.Color.White; - this.cNumErosionValue2.DecimalPlaces = 2; - this.cNumErosionValue2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cNumErosionValue2.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.cNumErosionValue2.Location = new System.Drawing.Point(71, 85); - this.cNumErosionValue2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.cNumErosionValue2.MaximumSize = new System.Drawing.Size(300, 26); - this.cNumErosionValue2.MaxValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.cNumErosionValue2.MinimumSize = new System.Drawing.Size(50, 26); - this.cNumErosionValue2.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.cNumErosionValue2.Name = "cNumErosionValue2"; - this.cNumErosionValue2.Size = new System.Drawing.Size(227, 26); - this.cNumErosionValue2.TabIndex = 174; - this.cNumErosionValue2.Value = 0.1D; - this.cNumErosionValue2.ValueChanged += new Controls.DValueChanged(this.PreValueChanged); + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label8.Location = new System.Drawing.Point(218, 96); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(44, 17); + this.label8.TabIndex = 176; + this.label8.Text = "方式:"; // - // cNumDilationValue2 + // label7 // - this.cNumDilationValue2.BackColor = System.Drawing.Color.White; - this.cNumDilationValue2.DecimalPlaces = 2; - this.cNumDilationValue2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cNumDilationValue2.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.cNumDilationValue2.Location = new System.Drawing.Point(71, 49); - this.cNumDilationValue2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.cNumDilationValue2.MaximumSize = new System.Drawing.Size(300, 26); - this.cNumDilationValue2.MaxValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.cNumDilationValue2.MinimumSize = new System.Drawing.Size(50, 26); - this.cNumDilationValue2.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.cNumDilationValue2.Name = "cNumDilationValue2"; - this.cNumDilationValue2.Size = new System.Drawing.Size(227, 26); - this.cNumDilationValue2.TabIndex = 174; - this.cNumDilationValue2.Value = 0.1D; - this.cNumDilationValue2.ValueChanged += new Controls.DValueChanged(this.PreValueChanged); + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label7.Location = new System.Drawing.Point(218, 54); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(44, 17); + this.label7.TabIndex = 176; + this.label7.Text = "方式:"; // - // cNumErosionValue1 + // label6 // - this.cNumErosionValue1.BackColor = System.Drawing.Color.White; - this.cNumErosionValue1.DecimalPlaces = 2; - this.cNumErosionValue1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cNumErosionValue1.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.cNumErosionValue1.Location = new System.Drawing.Point(71, 13); - this.cNumErosionValue1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.cNumErosionValue1.MaximumSize = new System.Drawing.Size(300, 26); - this.cNumErosionValue1.MaxValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.cNumErosionValue1.MinimumSize = new System.Drawing.Size(50, 26); - this.cNumErosionValue1.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.cNumErosionValue1.Name = "cNumErosionValue1"; - this.cNumErosionValue1.Size = new System.Drawing.Size(227, 26); - this.cNumErosionValue1.TabIndex = 174; - this.cNumErosionValue1.Value = 0.1D; - this.cNumErosionValue1.ValueChanged += new Controls.DValueChanged(this.PreValueChanged); + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label6.Location = new System.Drawing.Point(218, 19); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(44, 17); + this.label6.TabIndex = 176; + this.label6.Text = "方式:"; // // cbCDilation1 // @@ -706,7 +679,7 @@ // cbCErosion2 // this.cbCErosion2.AutoSize = true; - this.cbCErosion2.Location = new System.Drawing.Point(6, 85); + this.cbCErosion2.Location = new System.Drawing.Point(6, 92); this.cbCErosion2.Name = "cbCErosion2"; this.cbCErosion2.Size = new System.Drawing.Size(56, 24); this.cbCErosion2.TabIndex = 3; @@ -716,18 +689,18 @@ // // btnCreateModel // - this.btnCreateModel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); this.btnCreateModel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(150)))), ((int)(((byte)(219))))); this.btnCreateModel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; this.btnCreateModel.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCreateModel.Dock = System.Windows.Forms.DockStyle.Fill; this.btnCreateModel.FlatAppearance.BorderSize = 0; this.btnCreateModel.FlatAppearance.MouseDownBackColor = System.Drawing.Color.DarkGray; this.btnCreateModel.FlatAppearance.MouseOverBackColor = System.Drawing.Color.LightGray; this.btnCreateModel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnCreateModel.ForeColor = System.Drawing.Color.White; - this.btnCreateModel.Location = new System.Drawing.Point(259, 134); + this.btnCreateModel.Location = new System.Drawing.Point(237, 134); this.btnCreateModel.Name = "btnCreateModel"; - this.btnCreateModel.Size = new System.Drawing.Size(97, 42); + this.btnCreateModel.Size = new System.Drawing.Size(142, 42); this.btnCreateModel.TabIndex = 129; this.btnCreateModel.TabStop = false; this.btnCreateModel.Text = "创建模板"; @@ -736,18 +709,18 @@ // // btnAcqNewModelImage // - this.btnAcqNewModelImage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); this.btnAcqNewModelImage.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(150)))), ((int)(((byte)(219))))); this.btnAcqNewModelImage.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; this.btnAcqNewModelImage.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAcqNewModelImage.Dock = System.Windows.Forms.DockStyle.Fill; this.btnAcqNewModelImage.FlatAppearance.BorderSize = 0; this.btnAcqNewModelImage.FlatAppearance.MouseDownBackColor = System.Drawing.Color.DarkGray; this.btnAcqNewModelImage.FlatAppearance.MouseOverBackColor = System.Drawing.Color.LightGray; this.btnAcqNewModelImage.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnAcqNewModelImage.ForeColor = System.Drawing.Color.White; - this.btnAcqNewModelImage.Location = new System.Drawing.Point(259, 88); + this.btnAcqNewModelImage.Location = new System.Drawing.Point(237, 88); this.btnAcqNewModelImage.Name = "btnAcqNewModelImage"; - this.btnAcqNewModelImage.Size = new System.Drawing.Size(97, 40); + this.btnAcqNewModelImage.Size = new System.Drawing.Size(142, 40); this.btnAcqNewModelImage.TabIndex = 129; this.btnAcqNewModelImage.TabStop = false; this.btnAcqNewModelImage.Text = "获取图像"; @@ -844,10 +817,10 @@ // panel2 // this.panel2.BackColor = System.Drawing.Color.White; - this.panel2.Controls.Add(this.ckb_autoContrast); - this.panel2.Controls.Add(this.numericUpDown2); this.panel2.Controls.Add(this.nud_angleRange); - this.panel2.Controls.Add(this.numericUpDown1); + this.panel2.Controls.Add(this.ckb_autoContrast); + this.panel2.Controls.Add(this.nud_ScaleRange); + this.panel2.Controls.Add(this.nud_ScaleStart); this.panel2.Controls.Add(this.nud_angleStart); this.panel2.Controls.Add(this.cbx_polarity); this.panel2.Controls.Add(this.nud_minScore); @@ -873,266 +846,6 @@ this.panel2.Size = new System.Drawing.Size(376, 301); this.panel2.TabIndex = 149; // - // ckb_autoContrast - // - this.ckb_autoContrast.BackColor = System.Drawing.Color.White; - this.ckb_autoContrast.Checked = true; - this.ckb_autoContrast.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.ckb_autoContrast.Location = new System.Drawing.Point(85, 236); - this.ckb_autoContrast.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.ckb_autoContrast.Name = "ckb_autoContrast"; - this.ckb_autoContrast.Size = new System.Drawing.Size(96, 20); - this.ckb_autoContrast.TabIndex = 181; - this.ckb_autoContrast.TextStr = "自动"; - // - // numericUpDown2 - // - this.numericUpDown2.BackColor = System.Drawing.Color.White; - this.numericUpDown2.DecimalPlaces = 1; - this.numericUpDown2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.numericUpDown2.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.numericUpDown2.Location = new System.Drawing.Point(171, 183); - this.numericUpDown2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.numericUpDown2.MaximumSize = new System.Drawing.Size(300, 28); - this.numericUpDown2.MaxValue = new decimal(new int[] { - 100, - 0, - 0, - 0}); - this.numericUpDown2.MinimumSize = new System.Drawing.Size(50, 28); - this.numericUpDown2.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.numericUpDown2.Name = "numericUpDown2"; - this.numericUpDown2.Size = new System.Drawing.Size(141, 28); - this.numericUpDown2.TabIndex = 180; - this.numericUpDown2.Value = 0.1D; - // - // nud_angleRange - // - this.nud_angleRange.BackColor = System.Drawing.Color.White; - this.nud_angleRange.DecimalPlaces = 0; - this.nud_angleRange.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.nud_angleRange.Incremeent = new decimal(new int[] { - 10, - 0, - 0, - 0}); - this.nud_angleRange.Location = new System.Drawing.Point(171, 154); - this.nud_angleRange.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.nud_angleRange.MaximumSize = new System.Drawing.Size(300, 28); - this.nud_angleRange.MaxValue = new decimal(new int[] { - 180, - 0, - 0, - 0}); - this.nud_angleRange.MinimumSize = new System.Drawing.Size(50, 28); - this.nud_angleRange.MinValue = new decimal(new int[] { - 0, - 0, - 0, - 0}); - this.nud_angleRange.Name = "nud_angleRange"; - this.nud_angleRange.Size = new System.Drawing.Size(141, 28); - this.nud_angleRange.TabIndex = 178; - this.nud_angleRange.Value = 0D; - // - // numericUpDown1 - // - this.numericUpDown1.BackColor = System.Drawing.Color.White; - this.numericUpDown1.DecimalPlaces = 1; - this.numericUpDown1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.numericUpDown1.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.numericUpDown1.Location = new System.Drawing.Point(85, 183); - this.numericUpDown1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.numericUpDown1.MaximumSize = new System.Drawing.Size(300, 28); - this.numericUpDown1.MaxValue = new decimal(new int[] { - 100, - 0, - 0, - 0}); - this.numericUpDown1.MinimumSize = new System.Drawing.Size(50, 28); - this.numericUpDown1.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.numericUpDown1.Name = "numericUpDown1"; - this.numericUpDown1.Size = new System.Drawing.Size(141, 28); - this.numericUpDown1.TabIndex = 179; - this.numericUpDown1.Value = 0.1D; - // - // nud_angleStart - // - this.nud_angleStart.BackColor = System.Drawing.Color.White; - this.nud_angleStart.DecimalPlaces = 0; - this.nud_angleStart.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.nud_angleStart.Incremeent = new decimal(new int[] { - 10, - 0, - 0, - 0}); - this.nud_angleStart.Location = new System.Drawing.Point(85, 154); - this.nud_angleStart.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.nud_angleStart.MaximumSize = new System.Drawing.Size(300, 28); - this.nud_angleStart.MaxValue = new decimal(new int[] { - 0, - 0, - 0, - 0}); - this.nud_angleStart.MinimumSize = new System.Drawing.Size(50, 28); - this.nud_angleStart.MinValue = new decimal(new int[] { - 180, - 0, - 0, - -2147483648}); - this.nud_angleStart.Name = "nud_angleStart"; - this.nud_angleStart.Size = new System.Drawing.Size(141, 28); - this.nud_angleStart.TabIndex = 176; - this.nud_angleStart.Value = 0D; - // - // cbx_polarity - // - this.cbx_polarity.BackColor = System.Drawing.Color.White; - this.cbx_polarity.CanEdit = false; - this.cbx_polarity.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cbx_polarity.Items = new string[] { - "使用极性", - "忽略极性"}; - this.cbx_polarity.Location = new System.Drawing.Point(84, 129); - this.cbx_polarity.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.cbx_polarity.Name = "cbx_polarity"; - this.cbx_polarity.SelectedIndex = 1; - this.cbx_polarity.Size = new System.Drawing.Size(231, 26); - this.cbx_polarity.TabIndex = 172; - this.cbx_polarity.TextStr = "忽略极性"; - // - // nud_minScore - // - this.nud_minScore.BackColor = System.Drawing.Color.White; - this.nud_minScore.DecimalPlaces = 2; - this.nud_minScore.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.nud_minScore.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.nud_minScore.Location = new System.Drawing.Point(85, 9); - this.nud_minScore.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.nud_minScore.MaximumSize = new System.Drawing.Size(300, 26); - this.nud_minScore.MaxValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nud_minScore.MinimumSize = new System.Drawing.Size(50, 26); - this.nud_minScore.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.nud_minScore.Name = "nud_minScore"; - this.nud_minScore.Size = new System.Drawing.Size(227, 26); - this.nud_minScore.TabIndex = 173; - this.nud_minScore.Value = 0.1D; - // - // numericUpDown3 - // - this.numericUpDown3.BackColor = System.Drawing.Color.White; - this.numericUpDown3.DecimalPlaces = 0; - this.numericUpDown3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.numericUpDown3.Incremeent = new decimal(new int[] { - 100, - 0, - 0, - 0}); - this.numericUpDown3.Location = new System.Drawing.Point(84, 96); - this.numericUpDown3.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.numericUpDown3.MaximumSize = new System.Drawing.Size(300, 28); - this.numericUpDown3.MaxValue = new decimal(new int[] { - 10000, - 0, - 0, - 0}); - this.numericUpDown3.MinimumSize = new System.Drawing.Size(50, 28); - this.numericUpDown3.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.numericUpDown3.Name = "numericUpDown3"; - this.numericUpDown3.Size = new System.Drawing.Size(227, 28); - this.numericUpDown3.TabIndex = 177; - this.numericUpDown3.Value = 100D; - // - // nud_angleStep - // - this.nud_angleStep.BackColor = System.Drawing.Color.White; - this.nud_angleStep.DecimalPlaces = 0; - this.nud_angleStep.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.nud_angleStep.Incremeent = new decimal(new int[] { - 10, - 0, - 0, - 0}); - this.nud_angleStep.Location = new System.Drawing.Point(84, 67); - this.nud_angleStep.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.nud_angleStep.MaximumSize = new System.Drawing.Size(300, 28); - this.nud_angleStep.MaxValue = new decimal(new int[] { - 100, - 0, - 0, - 0}); - this.nud_angleStep.MinimumSize = new System.Drawing.Size(50, 28); - this.nud_angleStep.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nud_angleStep.Name = "nud_angleStep"; - this.nud_angleStep.Size = new System.Drawing.Size(227, 28); - this.nud_angleStep.TabIndex = 175; - this.nud_angleStep.Value = 1D; - // - // nud_matchNum - // - this.nud_matchNum.BackColor = System.Drawing.Color.White; - this.nud_matchNum.DecimalPlaces = 0; - this.nud_matchNum.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.nud_matchNum.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nud_matchNum.Location = new System.Drawing.Point(85, 38); - this.nud_matchNum.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.nud_matchNum.MaximumSize = new System.Drawing.Size(300, 28); - this.nud_matchNum.MaxValue = new decimal(new int[] { - 10000, - 0, - 0, - 0}); - this.nud_matchNum.MinimumSize = new System.Drawing.Size(50, 28); - this.nud_matchNum.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nud_matchNum.Name = "nud_matchNum"; - this.nud_matchNum.Size = new System.Drawing.Size(227, 28); - this.nud_matchNum.TabIndex = 174; - this.nud_matchNum.Value = 1D; - // // tkb_contrast // this.tkb_contrast.AutoSize = false; @@ -1174,7 +887,7 @@ this.label26.AutoSize = true; this.label26.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label26.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.label26.Location = new System.Drawing.Point(249, 159); + this.label26.Location = new System.Drawing.Point(318, 160); this.label26.Name = "label26"; this.label26.Size = new System.Drawing.Size(31, 17); this.label26.TabIndex = 171; @@ -1282,25 +995,6 @@ this.panel5.Size = new System.Drawing.Size(376, 181); this.panel5.TabIndex = 151; // - // cbx_searchRegionType - // - this.cbx_searchRegionType.BackColor = System.Drawing.Color.White; - this.cbx_searchRegionType.CanEdit = false; - this.cbx_searchRegionType.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cbx_searchRegionType.Items = new string[] { - "整幅图像", - "矩形", - "仿射矩形", - "圆", - "多点"}; - this.cbx_searchRegionType.Location = new System.Drawing.Point(79, 14); - this.cbx_searchRegionType.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.cbx_searchRegionType.Name = "cbx_searchRegionType"; - this.cbx_searchRegionType.SelectedIndex = 0; - this.cbx_searchRegionType.Size = new System.Drawing.Size(172, 26); - this.cbx_searchRegionType.TabIndex = 122; - this.cbx_searchRegionType.TextStr = "整幅图像"; - // // label5 // this.label5.AutoSize = true; @@ -1473,6 +1167,443 @@ this.Column12.Name = "Column12"; this.Column12.ReadOnly = true; // + // hWindowTool_Smart1 + // + this.hWindowTool_Smart1.DispStatus = false; + this.hWindowTool_Smart1.Dock = System.Windows.Forms.DockStyle.Fill; + this.hWindowTool_Smart1.hv_Image = null; + this.hWindowTool_Smart1.Location = new System.Drawing.Point(4, 5); + this.hWindowTool_Smart1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.hWindowTool_Smart1.Name = "hWindowTool_Smart1"; + this.tableLayoutPanel1.SetRowSpan(this.hWindowTool_Smart1, 3); + this.hWindowTool_Smart1.Size = new System.Drawing.Size(226, 169); + this.hWindowTool_Smart1.TabIndex = 0; + // + // cmbErsion2 + // + this.cmbErsion2.BackColor = System.Drawing.Color.White; + this.cmbErsion2.CanEdit = false; + this.cmbErsion2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbErsion2.Items = new string[] { + "octagon", + "rectangle", + "rhombus"}; + this.cmbErsion2.Location = new System.Drawing.Point(268, 91); + this.cmbErsion2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cmbErsion2.Name = "cmbErsion2"; + this.cmbErsion2.SelectedIndex = 1; + this.cmbErsion2.Size = new System.Drawing.Size(95, 26); + this.cmbErsion2.TabIndex = 175; + this.cmbErsion2.TextStr = "rectangle"; + this.cmbErsion2.SelectedIndexChanged += new Controls.DSelectedIndexChanged(this.cmbErsion1_SelectedIndexChanged); + // + // cmbDilation + // + this.cmbDilation.BackColor = System.Drawing.Color.White; + this.cmbDilation.CanEdit = false; + this.cmbDilation.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbDilation.Items = new string[] { + "octagon", + "rectangle", + "rhombus"}; + this.cmbDilation.Location = new System.Drawing.Point(268, 49); + this.cmbDilation.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cmbDilation.Name = "cmbDilation"; + this.cmbDilation.SelectedIndex = 1; + this.cmbDilation.Size = new System.Drawing.Size(95, 26); + this.cmbDilation.TabIndex = 175; + this.cmbDilation.TextStr = "rectangle"; + this.cmbDilation.SelectedIndexChanged += new Controls.DSelectedIndexChanged(this.cmbErsion1_SelectedIndexChanged); + // + // cmbErsion1 + // + this.cmbErsion1.BackColor = System.Drawing.Color.White; + this.cmbErsion1.CanEdit = false; + this.cmbErsion1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbErsion1.Items = new string[] { + "octagon", + "rectangle", + "rhombus"}; + this.cmbErsion1.Location = new System.Drawing.Point(268, 14); + this.cmbErsion1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cmbErsion1.Name = "cmbErsion1"; + this.cmbErsion1.SelectedIndex = 1; + this.cmbErsion1.Size = new System.Drawing.Size(95, 26); + this.cmbErsion1.TabIndex = 175; + this.cmbErsion1.TextStr = "rectangle"; + this.cmbErsion1.SelectedIndexChanged += new Controls.DSelectedIndexChanged(this.cmbErsion1_SelectedIndexChanged); + // + // cNumErosionValue2 + // + this.cNumErosionValue2.BackColor = System.Drawing.Color.White; + this.cNumErosionValue2.DecimalPlaces = 0; + this.cNumErosionValue2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cNumErosionValue2.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.cNumErosionValue2.Location = new System.Drawing.Point(71, 91); + this.cNumErosionValue2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cNumErosionValue2.MaximumSize = new System.Drawing.Size(300, 26); + this.cNumErosionValue2.MaxValue = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.cNumErosionValue2.MinimumSize = new System.Drawing.Size(50, 26); + this.cNumErosionValue2.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.cNumErosionValue2.Name = "cNumErosionValue2"; + this.cNumErosionValue2.Size = new System.Drawing.Size(127, 26); + this.cNumErosionValue2.TabIndex = 174; + this.cNumErosionValue2.Value = 1D; + this.cNumErosionValue2.ValueChanged += new Controls.DValueChanged(this.PreValueChanged); + // + // cNumDilationValue2 + // + this.cNumDilationValue2.BackColor = System.Drawing.Color.White; + this.cNumDilationValue2.DecimalPlaces = 0; + this.cNumDilationValue2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cNumDilationValue2.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.cNumDilationValue2.Location = new System.Drawing.Point(71, 49); + this.cNumDilationValue2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cNumDilationValue2.MaximumSize = new System.Drawing.Size(300, 26); + this.cNumDilationValue2.MaxValue = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.cNumDilationValue2.MinimumSize = new System.Drawing.Size(50, 26); + this.cNumDilationValue2.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.cNumDilationValue2.Name = "cNumDilationValue2"; + this.cNumDilationValue2.Size = new System.Drawing.Size(127, 26); + this.cNumDilationValue2.TabIndex = 174; + this.cNumDilationValue2.Value = 1D; + this.cNumDilationValue2.ValueChanged += new Controls.DValueChanged(this.PreValueChanged); + // + // cNumErosionValue1 + // + this.cNumErosionValue1.BackColor = System.Drawing.Color.White; + this.cNumErosionValue1.DecimalPlaces = 0; + this.cNumErosionValue1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cNumErosionValue1.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.cNumErosionValue1.Location = new System.Drawing.Point(71, 14); + this.cNumErosionValue1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cNumErosionValue1.MaximumSize = new System.Drawing.Size(300, 26); + this.cNumErosionValue1.MaxValue = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.cNumErosionValue1.MinimumSize = new System.Drawing.Size(50, 26); + this.cNumErosionValue1.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.cNumErosionValue1.Name = "cNumErosionValue1"; + this.cNumErosionValue1.Size = new System.Drawing.Size(127, 26); + this.cNumErosionValue1.TabIndex = 174; + this.cNumErosionValue1.Value = 1D; + this.cNumErosionValue1.ValueChanged += new Controls.DValueChanged(this.PreValueChanged); + // + // nud_angleRange + // + this.nud_angleRange.BackColor = System.Drawing.Color.White; + this.nud_angleRange.DecimalPlaces = 0; + this.nud_angleRange.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_angleRange.Incremeent = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.nud_angleRange.Location = new System.Drawing.Point(208, 154); + this.nud_angleRange.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_angleRange.MaximumSize = new System.Drawing.Size(300, 28); + this.nud_angleRange.MaxValue = new decimal(new int[] { + 180, + 0, + 0, + 0}); + this.nud_angleRange.MinimumSize = new System.Drawing.Size(50, 28); + this.nud_angleRange.MinValue = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nud_angleRange.Name = "nud_angleRange"; + this.nud_angleRange.Size = new System.Drawing.Size(102, 28); + this.nud_angleRange.TabIndex = 182; + this.nud_angleRange.Value = 10D; + // + // ckb_autoContrast + // + this.ckb_autoContrast.BackColor = System.Drawing.Color.White; + this.ckb_autoContrast.Checked = true; + this.ckb_autoContrast.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.ckb_autoContrast.Location = new System.Drawing.Point(85, 236); + this.ckb_autoContrast.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.ckb_autoContrast.Name = "ckb_autoContrast"; + this.ckb_autoContrast.Size = new System.Drawing.Size(96, 20); + this.ckb_autoContrast.TabIndex = 181; + this.ckb_autoContrast.TextStr = "自动"; + // + // nud_ScaleRange + // + this.nud_ScaleRange.BackColor = System.Drawing.Color.White; + this.nud_ScaleRange.DecimalPlaces = 1; + this.nud_ScaleRange.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_ScaleRange.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nud_ScaleRange.Location = new System.Drawing.Point(208, 183); + this.nud_ScaleRange.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_ScaleRange.MaximumSize = new System.Drawing.Size(300, 28); + this.nud_ScaleRange.MaxValue = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.nud_ScaleRange.MinimumSize = new System.Drawing.Size(50, 28); + this.nud_ScaleRange.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nud_ScaleRange.Name = "nud_ScaleRange"; + this.nud_ScaleRange.Size = new System.Drawing.Size(104, 28); + this.nud_ScaleRange.TabIndex = 180; + this.nud_ScaleRange.Value = 1.1D; + // + // nud_ScaleStart + // + this.nud_ScaleStart.BackColor = System.Drawing.Color.White; + this.nud_ScaleStart.DecimalPlaces = 1; + this.nud_ScaleStart.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_ScaleStart.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nud_ScaleStart.Location = new System.Drawing.Point(85, 183); + this.nud_ScaleStart.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_ScaleStart.MaximumSize = new System.Drawing.Size(300, 28); + this.nud_ScaleStart.MaxValue = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.nud_ScaleStart.MinimumSize = new System.Drawing.Size(50, 28); + this.nud_ScaleStart.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nud_ScaleStart.Name = "nud_ScaleStart"; + this.nud_ScaleStart.Size = new System.Drawing.Size(96, 28); + this.nud_ScaleStart.TabIndex = 179; + this.nud_ScaleStart.Value = 0.9D; + // + // nud_angleStart + // + this.nud_angleStart.BackColor = System.Drawing.Color.White; + this.nud_angleStart.DecimalPlaces = 0; + this.nud_angleStart.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_angleStart.Incremeent = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.nud_angleStart.Location = new System.Drawing.Point(85, 154); + this.nud_angleStart.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_angleStart.MaximumSize = new System.Drawing.Size(300, 28); + this.nud_angleStart.MaxValue = new decimal(new int[] { + 180, + 0, + 0, + 0}); + this.nud_angleStart.MinimumSize = new System.Drawing.Size(50, 28); + this.nud_angleStart.MinValue = new decimal(new int[] { + 180, + 0, + 0, + -2147483648}); + this.nud_angleStart.Name = "nud_angleStart"; + this.nud_angleStart.Size = new System.Drawing.Size(96, 28); + this.nud_angleStart.TabIndex = 176; + this.nud_angleStart.Value = -10D; + // + // cbx_polarity + // + this.cbx_polarity.BackColor = System.Drawing.Color.White; + this.cbx_polarity.CanEdit = false; + this.cbx_polarity.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cbx_polarity.Items = new string[] { + "ignore_color_polarity", + "ignore_global_polarity", + "ignore_local_polarity", + "use_polarity"}; + this.cbx_polarity.Location = new System.Drawing.Point(84, 129); + this.cbx_polarity.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cbx_polarity.Name = "cbx_polarity"; + this.cbx_polarity.SelectedIndex = 3; + this.cbx_polarity.Size = new System.Drawing.Size(231, 26); + this.cbx_polarity.TabIndex = 172; + this.cbx_polarity.TextStr = "use_polarity"; + // + // nud_minScore + // + this.nud_minScore.BackColor = System.Drawing.Color.White; + this.nud_minScore.DecimalPlaces = 2; + this.nud_minScore.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_minScore.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nud_minScore.Location = new System.Drawing.Point(85, 9); + this.nud_minScore.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_minScore.MaximumSize = new System.Drawing.Size(300, 26); + this.nud_minScore.MaxValue = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nud_minScore.MinimumSize = new System.Drawing.Size(50, 26); + this.nud_minScore.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nud_minScore.Name = "nud_minScore"; + this.nud_minScore.Size = new System.Drawing.Size(227, 26); + this.nud_minScore.TabIndex = 173; + this.nud_minScore.Value = 0.8D; + // + // numericUpDown3 + // + this.numericUpDown3.BackColor = System.Drawing.Color.White; + this.numericUpDown3.DecimalPlaces = 0; + this.numericUpDown3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.numericUpDown3.Incremeent = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.numericUpDown3.Location = new System.Drawing.Point(84, 96); + this.numericUpDown3.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.numericUpDown3.MaximumSize = new System.Drawing.Size(300, 28); + this.numericUpDown3.MaxValue = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.numericUpDown3.MinimumSize = new System.Drawing.Size(50, 28); + this.numericUpDown3.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown3.Name = "numericUpDown3"; + this.numericUpDown3.Size = new System.Drawing.Size(227, 28); + this.numericUpDown3.TabIndex = 177; + this.numericUpDown3.Value = 100D; + // + // nud_angleStep + // + this.nud_angleStep.BackColor = System.Drawing.Color.White; + this.nud_angleStep.DecimalPlaces = 0; + this.nud_angleStep.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_angleStep.Incremeent = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.nud_angleStep.Location = new System.Drawing.Point(84, 67); + this.nud_angleStep.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_angleStep.MaximumSize = new System.Drawing.Size(300, 28); + this.nud_angleStep.MaxValue = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.nud_angleStep.MinimumSize = new System.Drawing.Size(50, 28); + this.nud_angleStep.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nud_angleStep.Name = "nud_angleStep"; + this.nud_angleStep.Size = new System.Drawing.Size(227, 28); + this.nud_angleStep.TabIndex = 175; + this.nud_angleStep.Value = 1D; + // + // nud_matchNum + // + this.nud_matchNum.BackColor = System.Drawing.Color.White; + this.nud_matchNum.DecimalPlaces = 0; + this.nud_matchNum.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_matchNum.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nud_matchNum.Location = new System.Drawing.Point(85, 38); + this.nud_matchNum.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_matchNum.MaximumSize = new System.Drawing.Size(300, 28); + this.nud_matchNum.MaxValue = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.nud_matchNum.MinimumSize = new System.Drawing.Size(50, 28); + this.nud_matchNum.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nud_matchNum.Name = "nud_matchNum"; + this.nud_matchNum.Size = new System.Drawing.Size(227, 28); + this.nud_matchNum.TabIndex = 174; + this.nud_matchNum.Value = 1D; + // + // cbx_searchRegionType + // + this.cbx_searchRegionType.BackColor = System.Drawing.Color.White; + this.cbx_searchRegionType.CanEdit = false; + this.cbx_searchRegionType.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cbx_searchRegionType.Items = new string[] { + "整幅图像", + "矩形", + "仿射矩形", + "圆", + "多点"}; + this.cbx_searchRegionType.Location = new System.Drawing.Point(79, 14); + this.cbx_searchRegionType.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cbx_searchRegionType.Name = "cbx_searchRegionType"; + this.cbx_searchRegionType.SelectedIndex = 0; + this.cbx_searchRegionType.Size = new System.Drawing.Size(172, 26); + this.cbx_searchRegionType.TabIndex = 122; + this.cbx_searchRegionType.TextStr = "整幅图像"; + // // FormPMAlignTool // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); @@ -1480,7 +1611,7 @@ this.ClientSize = new System.Drawing.Size(999, 655); this.Controls.Add(this.splitContainer1); this.Controls.Add(this.toolStrip1); - this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.statusStrip); this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); @@ -1488,6 +1619,8 @@ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "模板匹配工具"; this.Load += new System.EventHandler(this.FormPMAlignTool_Load); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); this.toolStrip1.ResumeLayout(false); this.toolStrip1.PerformLayout(); this.splitContainer1.Panel1.ResumeLayout(false); @@ -1536,7 +1669,7 @@ #endregion - private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.StatusStrip statusStrip; private System.Windows.Forms.ToolStrip toolStrip1; private System.Windows.Forms.ToolStripButton tsbtRunTool; private System.Windows.Forms.SplitContainer splitContainer1; @@ -1563,10 +1696,8 @@ public System.Windows.Forms.Label label15; public System.Windows.Forms.Label label85; internal Controls.CCheckBox ckb_autoContrast; - public Controls.CNumericUpDown numericUpDown2; - public Controls.CNumericUpDown nud_angleRange; - public Controls.CNumericUpDown numericUpDown1; - public Controls.CNumericUpDown nud_angleStart; + public Controls.CNumericUpDown nud_ScaleRange; + public Controls.CNumericUpDown nud_ScaleStart; public Controls.CComboBox cbx_polarity; public Controls.CNumericUpDown nud_minScore; public Controls.CNumericUpDown numericUpDown3; @@ -1624,5 +1755,16 @@ private System.Windows.Forms.CheckBox cbCErosion2; internal System.Windows.Forms.Button btnCreateModel; internal System.Windows.Forms.Button btnAcqNewModelImage; + public Controls.CNumericUpDown nud_angleRange; + public Controls.CNumericUpDown nud_angleStart; + public Controls.CComboBox cmbErsion1; + public System.Windows.Forms.Label label8; + public System.Windows.Forms.Label label7; + public System.Windows.Forms.Label label6; + public Controls.CComboBox cmbErsion2; + public Controls.CComboBox cmbDilation; + private System.Windows.Forms.ToolStripStatusLabel lb_RunStatus; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripStatusLabel lb_RunTime; } } \ No newline at end of file diff --git a/PMAlignTool/FormPMAlignTool.cs b/PMAlignTool/FormPMAlignTool.cs index 5f2cace..caafd9e 100644 --- a/PMAlignTool/FormPMAlignTool.cs +++ b/PMAlignTool/FormPMAlignTool.cs @@ -1,6 +1,7 @@ using ChoiceTech.Halcon.Control; using CommonMethods; using HalconDotNet; +using Logger; using System; using System.Collections.Generic; using System.ComponentModel; @@ -16,12 +17,13 @@ namespace PMAlignTool { public partial class FormPMAlignTool : Form { - private PMAlign myPMAlign = null; - private IToolInfo myToolInfo = null; + private PMAlign myPMAlign = new PMAlign(); + public IToolInfo myToolInfo = new IToolInfo(); public HWindowTool_Smart myHwindow = new HWindowTool_Smart(); private HDrawingObject selected_drawing_object = new HDrawingObject(); - private List templateModelListAdd = new List() { }; - private List templateModelListSub = new List() { }; + public List templateModelListAdd = new List() { }; + public List templateModelListSub = new List() { }; + public FormPMAlignTool(ref object pmalign) { InitializeComponent(); @@ -30,6 +32,7 @@ namespace PMAlignTool { myToolInfo = (IToolInfo)pmalign; myPMAlign = (PMAlign)myToolInfo.tool; + myPMAlign.toolName = myToolInfo.FormToolName; myPMAlign.DispImage(); } } @@ -70,15 +73,22 @@ namespace PMAlignTool myHwindow.Dock = DockStyle.Fill; InitTool(); } - + bool isInitTool = false; private void InitTool() { + isInitTool = true; cNumErosionValue1.Value = myPMAlign.imageProcess.erosionValue1.algValue; cbCErosion1.Checked = myPMAlign.imageProcess.erosionValue1.isEnable; + cmbErsion1.TextStr = myPMAlign.imageProcess.erosionValue1.algName; + cNumDilationValue2.Value = myPMAlign.imageProcess.dilationValue.algValue; cbCDilation1.Checked = myPMAlign.imageProcess.dilationValue.isEnable; + cmbDilation.TextStr = myPMAlign.imageProcess.dilationValue.algName; + cNumErosionValue2.Value = myPMAlign.imageProcess.erosionValue2.algValue; cbCErosion2.Checked = myPMAlign.imageProcess.erosionValue2.isEnable; + cmbErsion2.TextStr = myPMAlign.imageProcess.erosionValue2.algName; + isInitTool = false; } private void btnAcqNewModelImage_Click(object sender, EventArgs e) @@ -121,10 +131,12 @@ namespace PMAlignTool myHwindow.DispHWindow.AttachDrawingObjectToWindow(temp_object); if(rdo_templateRegionAdd.Checked) { + temp_object.SetDrawingObjectParams("color","green"); templateModelListAdd.Add(temp_object); } else { + temp_object.SetDrawingObjectParams("color", "red"); templateModelListSub.Add(temp_object); } } @@ -156,27 +168,124 @@ namespace PMAlignTool selectObj.Dispose(); } + public HObject contour; private void btnCreateModel_Click(object sender, EventArgs e) { - if(myPMAlign.modelID == -1) + if(myPMAlign.inputImage != null) { - myPMAlign.oldTrainImage = myPMAlign.inputImage; + if(myPMAlign.CreateModelTemplate() == 0) + { + if (myPMAlign.matchMode == MatchMode.BasedShape) + { + HOperatorSet.GetShapeModelContours(out contour, myPMAlign.modelID, (HTuple)1); + HTuple area, row, col; + HOperatorSet.AreaCenter(myPMAlign.templateRegion, out area, out row, out col); + HTuple homMat2D; + HOperatorSet.HomMat2dIdentity(out homMat2D); + HOperatorSet.HomMat2dTranslate(homMat2D, row, col, out homMat2D); + HOperatorSet.AffineTransContourXld(contour, out contour, homMat2D); + } + myHwindow.DispHWindow.ClearWindow(); + hWindowTool_Smart1.DispHWindow.ClearWindow(); + myHwindow.DispImage(myPMAlign.inputImage); + //在模板窗口显示模板 + HTuple row1, col1, row2, col2; + HOperatorSet.SmallestRectangle1(myPMAlign.templateRegion, out row1, out col1, out row2, out col2); + HObject outRectangle1; + HOperatorSet.GenRectangle1(out outRectangle1, row1 - 20, col1 - 20, row2 + 20, col2 + 20); + HObject imageReduced, imagePart; + HOperatorSet.ReduceDomain(myPMAlign.inputImage, outRectangle1, out imageReduced); + HObject outBoundary, inBoundary; + HOperatorSet.Boundary(myPMAlign.templateRegion, out outBoundary, "inner_filled"); + HOperatorSet.Boundary(myPMAlign.templateRegion, out inBoundary, "outer"); + HOperatorSet.CropDomain(imageReduced, out imagePart); + HOperatorSet.SetSystem("flush_graphic", "true"); + hWindowTool_Smart1.DispImage(imagePart); + hWindowTool_Smart1.DispHWindow.SetColor("green"); + hWindowTool_Smart1.DispHWindow.SetDraw("margin"); + hWindowTool_Smart1.DispHWindow.DispObj(outBoundary); + hWindowTool_Smart1.DispHWindow.DispObj(inBoundary); + if (myPMAlign.matchMode == MatchMode.BasedShape) + { + HOperatorSet.SetLineStyle(myHwindow.DispHWindow, new HTuple()); + HOperatorSet.SetColor(myHwindow.DispHWindow, new HTuple("orange")); + HOperatorSet.DispObj(contour, myHwindow.DispHWindow); + } + } + else + { + LoggerClass.WriteLog("创建模板失败!", MsgLevel.Exception); + } + } + else + { + myPMAlign.isCreateModel = false; + } + } + /// + /// 设定工具运行状态 + /// + /// 运行中的信息 + /// 运行状态 + public void SetToolStatus(string msg, ToolRunStatu status, Exception ex = null) + { + if (myPMAlign != null) + { + myPMAlign.runMessage = msg; + myPMAlign.toolRunStatu = status; + lb_RunStatus.Text = myPMAlign.toolRunStatu == ToolRunStatu.Succeed ? "工具运行成功!" : $"工具运行异常, 异常原因:{myPMAlign.runMessage}"; + lb_RunTime.Text = myPMAlign.runTime; + if (myPMAlign.toolRunStatu == ToolRunStatu.Succeed) + { + statusStrip.BackColor = Color.LimeGreen; + } + else + { + statusStrip.BackColor = Color.Red; + } } } private void PreProcess_CheckChanged(object sender, EventArgs e) { - myPMAlign.imageProcess.erosionValue1.isEnable = cbCErosion1.Checked; - myPMAlign.imageProcess.dilationValue.isEnable = cbCDilation1.Checked; - myPMAlign.imageProcess.erosionValue2.isEnable = cbCErosion2.Checked; + if(!isInitTool) + { + myPMAlign.imageProcess.erosionValue1.isEnable = cbCErosion1.Checked; + myPMAlign.imageProcess.dilationValue.isEnable = cbCDilation1.Checked; + myPMAlign.imageProcess.erosionValue2.isEnable = cbCErosion2.Checked; + } + } private void PreValueChanged(double value) { - myPMAlign.imageProcess.erosionValue1.algValue = cNumErosionValue1.Value; - myPMAlign.imageProcess.dilationValue.algValue = cNumDilationValue2.Value; - myPMAlign.imageProcess.erosionValue2.algValue = cNumErosionValue2.Value; + if (!isInitTool) + { + myPMAlign.imageProcess.erosionValue1.algValue = cNumErosionValue1.Value; + myPMAlign.imageProcess.dilationValue.algValue = cNumDilationValue2.Value; + myPMAlign.imageProcess.erosionValue2.algValue = cNumErosionValue2.Value; + } + } + + private void rabShape_CheckedChanged(object sender, EventArgs e) + { + myPMAlign.matchMode = rabShape.Checked ? MatchMode.BasedShape : MatchMode.BasedGray; + } + + private void cmbErsion1_SelectedIndexChanged() + { + if (!isInitTool) + { + myPMAlign.imageProcess.erosionValue1.algName = cmbErsion1.TextStr; + myPMAlign.imageProcess.dilationValue.algName = cmbDilation.TextStr; + myPMAlign.imageProcess.erosionValue2.algName = cmbErsion2.TextStr; + } + } + + private void tsbtRunTool_Click(object sender, EventArgs e) + { + myPMAlign.Run(SoftwareRunState.Debug); } } } diff --git a/PMAlignTool/FormPMAlignTool.resx b/PMAlignTool/FormPMAlignTool.resx index 5904e09..836d7e6 100644 --- a/PMAlignTool/FormPMAlignTool.resx +++ b/PMAlignTool/FormPMAlignTool.resx @@ -117,7 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 17, 17 diff --git a/PMAlignTool/PMAlign.cs b/PMAlignTool/PMAlign.cs index 5d969a4..3340d4f 100644 --- a/PMAlignTool/PMAlign.cs +++ b/PMAlignTool/PMAlign.cs @@ -20,13 +20,25 @@ using CommonMethods; using HalconDotNet; using ToolBase; using static DataStruct.DataStruct; +using System.Windows.Forms; +using Logger; +using System.Diagnostics; +using System.IO; namespace PMAlignTool { [Serializable] - public class PMAlign:IToolBase + public class PMAlign : IToolBase { - + public string toolName { get; set; } = string.Empty; + /// + /// 输入姿态 + /// + public PosXYU inputPose = new PosXYU(); + /// + /// 制作模板时的输入位姿 + /// + public PosXYU templatePose = new PosXYU(); /// /// 是否显示匹配到的模板 /// @@ -50,7 +62,7 @@ namespace PMAlignTool /// /// 模板句柄 /// - internal HTuple modelID { get; set; } = -1; + internal HTuple modelID = -1; /// /// 行列间隔像素数 /// @@ -62,13 +74,11 @@ namespace PMAlignTool /// /// 模板区域 /// - internal HObject templateRegion { get; set; } + internal HObject templateRegion; /// /// 在进行模板创建及匹配时进行的图像预处理 /// public ImagePreProcess imageProcess { get; set; } = new ImagePreProcess(); - - internal HObject totalRegion; /// /// 搜索区域图像 /// @@ -101,10 +111,14 @@ namespace PMAlignTool /// 训练时所使用的模板图像,不点击获取图像时,不进行更新 /// public HObject oldTrainImage { get; set; } + public bool isCreateModel { get; set; } - internal void DispMainWindow(object dispHWindow) + public override void DispMainWindow(HWindow dispHWindow) { - throw new NotImplementedException(); + if (showFeature) + { + ShowTemplate(dispHWindow, false); + } } /// @@ -119,30 +133,365 @@ namespace PMAlignTool /// /// 模板匹配结果 /// - internal List L_result = new List(); + public List L_resultList { get; set; } = new List() { }; + /// + /// 匹配模式 + /// + public MatchMode matchMode { get; set; } = MatchMode.BasedShape; + /// + /// 缩放最小值 + /// + public HTuple minScale { get; internal set; } = 0.9; + /// + /// 缩放最大值 + /// + public HTuple maxScale { get; internal set; } = 1.1; + public bool isAutoConstants { get; set; } + public string modelFilePath { get; set; } + public RegionType searchRegionType { get; set; } + public HObject SearchRegion { get; private set; } public override void Run(SoftwareRunState softwareRunState) { - + Stopwatch sw = new Stopwatch(); + sw.Restart(); + + if (inputImage == null) + { + FormPMAlignTool.Instance.SetToolStatus("工具输入图像为空", ToolRunStatu.Not_Input_Image); + return; + } + try + { + if (softwareRunState == SoftwareRunState.Debug) + { + DispImage(); + } + if (inputPose != null) + { + HTuple Row = inputPose.X - templatePose.X; + HTuple Col = inputPose.Y - templatePose.Y; + HTuple angle = inputPose.U - templatePose.U; + + HTuple _homMat2D; + HOperatorSet.HomMat2dIdentity(out _homMat2D); + HOperatorSet.HomMat2dRotate(_homMat2D, (HTuple)(angle), (HTuple)templatePose.X, (HTuple)templatePose.Y, out _homMat2D); + HOperatorSet.HomMat2dTranslate(_homMat2D, (HTuple)(Row), (HTuple)(Col), out _homMat2D); + //对预期线的找模板区域做放射变换 + + } + minScore = FormPMAlignTool.Instance.nud_minScore.Value; + startAngle = Convert.ToInt16(FormPMAlignTool.Instance.nud_angleStart.Value); + angleRange = Convert.ToInt16(FormPMAlignTool.Instance.nud_angleRange.Value); + angleStep = Convert.ToInt16(FormPMAlignTool.Instance.nud_angleStep.Value); + polarity = FormPMAlignTool.Instance.cbx_polarity.TextStr; + isAutoConstants = FormPMAlignTool.Instance.ckb_autoContrast.Checked; + minScale = FormPMAlignTool.Instance.nud_ScaleStart.Value; + maxScale = FormPMAlignTool.Instance.nud_ScaleRange.Value; + HObject findModelImg = ProcessImage(inputImage); + int ret = FindModelTemplate(findModelImg); + ToolRunStatu myState = ret == 0 ? ToolRunStatu.Succeed : ToolRunStatu.Model_UnFound; + string retMsg = ret == 0 ? "工具运行成功,已找到匹配项!" : "未找到匹配项"; + sw.Stop(); + runTime = $"运行时间: {sw.ElapsedMilliseconds} ms"; + FormPMAlignTool.Instance.SetToolStatus(retMsg, myState); + } + catch (Exception ex) + { + FormPMAlignTool.Instance.SetToolStatus($"工具运行异常,异常原因: {ex}", ToolRunStatu.Tool_Run_Error); + } + finally + { + + } } public override void DispImage() { + FormPMAlignTool.Instance.myHwindow.DispHWindow.ClearWindow(); if (inputImage != null) { FormPMAlignTool.Instance.myHwindow.DispHWindow.DispObj(inputImage); } } - - public override void DispMainWindow(HWindow window) + private void CreateModelRegion() { - throw new NotImplementedException(); + HOperatorSet.GenEmptyObj(out templateRegion); + foreach (var item in FormPMAlignTool.Instance.templateModelListAdd) + { + HObject selectObj = item.GetDrawingObjectIconic(); + HOperatorSet.Union2(selectObj, templateRegion, out templateRegion); + } + foreach (var item in FormPMAlignTool.Instance.templateModelListSub) + { + HObject selectObj = item.GetDrawingObjectIconic(); + HOperatorSet.Difference(templateRegion, selectObj, out templateRegion); + } } - public void CreateModelTemplate() + public int CreateModelTemplate() { - + HObject template; + oldTrainImage = inputImage; + if (FormPMAlignTool.Instance.templateModelListAdd.Count == 0) + { + LoggerClass.WriteLog("未划定模板建立区域", MsgLevel.Exception); + isCreateModel = false; + return -1; + } + CreateModelRegion(); + HObject createModelImg; + HOperatorSet.GenEmptyObj(out createModelImg); + createModelImg = ProcessImage(inputImage); + HOperatorSet.ReduceDomain(createModelImg, templateRegion, out template); + try + { + HTuple rows, cols, angles, scores, scale; + if (matchMode == MatchMode.BasedShape) + { + HOperatorSet.CreateScaledShapeModel(template, + "auto", + ((HTuple)startAngle).TupleRad(), + ((HTuple)angleRange).TupleRad(), + "auto", + minScale, + maxScale, + "auto", + "auto", + polarity, + isAutoConstants ? (HTuple)"auto" : (HTuple)contrast, + "auto", + out modelID); + HOperatorSet.FindScaledShapeModel(inputImage, + (HTuple)modelID, + ((HTuple)startAngle).TupleRad(), + ((HTuple)angleRange - startAngle).TupleRad(), + minScale, + maxScale, + (HTuple)minScore, + (HTuple)matchNum, + (HTuple)0.5, + (HTuple)"least_squares", + (HTuple)0, + (HTuple)0.9, + out rows, + out cols, + out angles, + out scale, + out scores); + } + else + { + HOperatorSet.CreateNccModel(template, + "auto", + ((HTuple)startAngle).TupleRad(), + ((HTuple)angleRange).TupleRad(), + "auto", + "use_polarity", + out modelID); + HOperatorSet.FindNccModel(inputImage, + (HTuple)modelID, + ((HTuple)startAngle).TupleRad(), + ((HTuple)angleRange - startAngle).TupleRad(), + (HTuple)minScore, + (HTuple)matchNum, + (HTuple)0.5, + (HTuple)"true", + (HTuple)0, + out rows, + out cols, + out angles, + out scores); + } + isCreateModel = true; + HOperatorSet.WriteRegion(templateRegion, FormPMAlignTool.Instance.myToolInfo.FormToolName + ".hobj"); + if (scores != null && scores.Type != HTupleType.EMPTY) + { + templatePose = new PosXYU { X = rows[0].D, Y = cols[0].D , U = angles[0].D }; + } + } + catch (Exception ex) + { + Logger.LoggerClass.WriteLog("创建模板时出现异常", ex); + isCreateModel = false; + return -1; + } + finally + { + FormPMAlignTool.Instance.templateModelListAdd.Clear(); + FormPMAlignTool.Instance.templateModelListSub.Clear(); + } + return 0; } + + public int FindModelTemplate(HObject findModelImage) + { + if (!isCreateModel) + { + LoggerClass.WriteLog("未创建或加载模板", MsgLevel.Exception); + return -1; + } + if (File.Exists(toolName + ".hobj")) + { + HOperatorSet.ReadRegion(out templateRegion, toolName + ".hobj"); + LoggerClass.WriteLog($"{FormPMAlignTool.Instance.myToolInfo.FormToolName} 已加载模板", MsgLevel.Info); + } + HObject image; + if (searchRegionType == RegionType.AllImage) + { + image = findModelImage; + } + else + { + HOperatorSet.ReduceDomain(inputImage, SearchRegion, out reducedImage); + image = reducedImage; + } + HTuple rows, cols, angles, scores; + L_resultList.Clear(); + try + { + if (matchMode == MatchMode.BasedShape) + { + HTuple temp; + + HOperatorSet.FindScaledShapeModel(image, + (HTuple)modelID, + ((HTuple)startAngle).TupleRad(), + ((HTuple)angleRange - startAngle).TupleRad(), + minScale, + maxScale, + (HTuple)minScore, + (HTuple)matchNum, + (HTuple)0.5, + (HTuple)"least_squares", + (HTuple)0, + (HTuple)0.9, + out rows, + out cols, + out angles, + out temp, + out scores); + + } + else + { + HOperatorSet.FindNccModel(image, + (HTuple)modelID, + ((HTuple)startAngle).TupleRad(), + ((HTuple)angleRange - startAngle).TupleRad(), + (HTuple)minScore, + (HTuple)matchNum, + (HTuple)0.5, + (HTuple)"true", + (HTuple)0, + out rows, + out cols, + out angles, + out scores); + } + FormPMAlignTool.Instance.myHwindow.DispHWindow.ClearWindow(); + FormPMAlignTool.Instance.myHwindow.DispImage(inputImage); + if (rows.TupleLength() > 0) + { + for (int i = 0; i < rows.TupleLength(); i++) + { + MatchResult matchResult = new MatchResult(); + matchResult.Row = Math.Round((double)rows[i], 3); + matchResult.Col = Math.Round((double)cols[i], 3); + matchResult.Angle = Math.Round((double)angles[i], 3); + matchResult.Socre = Math.Round((double)scores[i], 3); + L_resultList.Add(matchResult); + } + MatchResult temp; + for (int i = 0; i < L_resultList.Count - 1; i++) + { + for (int j = i + 1; j < L_resultList.Count; j++) + { + if (L_resultList[i].Socre < L_resultList[j].Socre) + { + temp = L_resultList[i]; + L_resultList[i] = L_resultList[j]; + L_resultList[j] = temp; + } + } + } + } + if(L_resultList.Count > 0) + { + toolRunStatu = ToolRunStatu.Succeed; + ShowTemplate(FormPMAlignTool.Instance.myHwindow.DispHWindow); + return 0; + } + } + catch (Exception ex) + { + LoggerClass.WriteLog("寻找模板时出现异常!", ex); + toolRunStatu = ToolRunStatu.Not_Succeed; + } + return -1; + } + + public HObject contour; + /// + /// 显示模板 + /// + internal void ShowTemplate(HWindow dispHWindow, bool clearImg = false) + { + try + { + if (modelID == null) + { + return; + } + if(clearImg) + { + dispHWindow.ClearWindow(); + dispHWindow.DispObj(inputImage); + } + if (matchMode == MatchMode.BasedShape) + { + HOperatorSet.GetShapeModelContours(out contour, modelID, new HTuple(1)); + HTuple area, row, col; + HOperatorSet.AreaCenter(templateRegion, out area, out row, out col); + HTuple homMat2D; + HOperatorSet.HomMat2dIdentity(out homMat2D); + HOperatorSet.HomMat2dTranslate(homMat2D, row, col, out homMat2D); + HOperatorSet.AffineTransContourXld(contour, out contour, homMat2D); + dispHWindow.SetColor("green"); + dispHWindow.DispObj(contour); + } + HObject outBoundary, inBoundary; + HOperatorSet.Boundary(templateRegion, out outBoundary, "inner_filled"); + HOperatorSet.Boundary(templateRegion, out inBoundary, "outer"); + HOperatorSet.SetColor(FormPMAlignTool.Instance.myHwindow.DispHWindow, "green"); + HOperatorSet.SetLineStyle(FormPMAlignTool.Instance.myHwindow.DispHWindow, new HTuple()); + dispHWindow.DispObj(outBoundary); + dispHWindow.DispObj(inBoundary); + } + catch (Exception ex) + { + Logger.LoggerClass.WriteLog("显示模板时出现错误", ex); + } + } + + private HObject ProcessImage(HObject inputImg) + { + if (inputImage == null) return inputImage; + if (imageProcess.erosionValue1.isEnable) + { + HOperatorSet.GrayErosionShape(inputImg, out inputImg, imageProcess.erosionValue1.algValue, imageProcess.erosionValue1.algValue, imageProcess.erosionValue1.algName); + } + if (imageProcess.dilationValue.isEnable) + { + HOperatorSet.GrayDilationShape(inputImg, out inputImg, imageProcess.erosionValue1.algValue, imageProcess.erosionValue1.algValue, imageProcess.dilationValue.algName); + } + if (imageProcess.erosionValue2.isEnable) + { + HOperatorSet.GrayErosionShape(inputImg, out inputImg, imageProcess.erosionValue1.algValue, imageProcess.erosionValue1.algValue, imageProcess.erosionValue2.algName); + } + return inputImg; + } + } [Serializable] public class ImagePreProcess @@ -156,5 +505,35 @@ namespace PMAlignTool { public double algValue { get; set; } = 0; public bool isEnable { get; set; } = false; + public string algName { get; set; } = "rectangle"; + } + [Serializable] + public enum MatchMode + { + BasedShape, + BasedGray, + } + [Serializable] + public enum RegionType + { + AllImage, + Rectangle1, + Rectangle2, + Circle, + Ellipse, + MultPoint, + Ring, + Any, + } + /// + /// 模板匹配结果 + /// + [Serializable] + public struct MatchResult + { + internal double Row; + internal double Col; + internal double Angle; + internal double Socre; } } diff --git a/ToolLib.VisionJob/FormToolBox.Designer.cs b/ToolLib.VisionJob/FormToolBox.Designer.cs index 9481cf7..efbf627 100644 --- a/ToolLib.VisionJob/FormToolBox.Designer.cs +++ b/ToolLib.VisionJob/FormToolBox.Designer.cs @@ -96,8 +96,9 @@ treeNode4.Name = "节点3"; treeNode4.SelectedImageIndex = 3; treeNode4.Text = "HIKVision"; - treeNode5.ImageIndex = 4; + treeNode5.ImageKey = "相机.png"; treeNode5.Name = "节点0"; + treeNode5.SelectedImageKey = "相机.png"; treeNode5.Text = "获取图像"; treeNode6.Name = "节点5"; treeNode6.Text = "滤波"; @@ -173,6 +174,7 @@ this.imageList1.Images.SetKeyName(14, "停止.png"); this.imageList1.Images.SetKeyName(15, "几何_32.png"); this.imageList1.Images.SetKeyName(16, "图像预处理_32.png"); + this.imageList1.Images.SetKeyName(17, "相机.png"); // // richTextBoxEx1 // @@ -205,6 +207,7 @@ this.imageListTool.Images.SetKeyName(8, "卡尺.png"); this.imageListTool.Images.SetKeyName(9, "匹配.ico"); this.imageListTool.Images.SetKeyName(10, "模板.ico"); + this.imageListTool.Images.SetKeyName(11, "相机.png"); // // splitContainer1 // diff --git a/ToolLib.VisionJob/FormToolBox.resx b/ToolLib.VisionJob/FormToolBox.resx index 1f87590..a23f5a4 100644 --- a/ToolLib.VisionJob/FormToolBox.resx +++ b/ToolLib.VisionJob/FormToolBox.resx @@ -124,8 +124,8 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABs - LAAAAk1TRnQBSQFMAgEBEQEAAVgBAAFYAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADS + LgAAAk1TRnQBSQFMAgEBEgEAAXABAAFwAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABgAMAAaADAAEBAQABCAYAAVAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -153,168 +153,178 @@ AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wAHAAH/ARYBagiP - AWcBSgg4AVkBmgH/aAABFgqPAWcBSgo4AZpoAAFqCo8BZwFKCjgBWWgAC48BZwFKCzhoAAuPAWcBSgs4 - aAALjwFnAUoLOGgAC48BZwFKCzhoAAuPAWcBSgs4aAALjwFnAUoLUmgAC48BZwxDaAALjwFnAUkLcWgA - C48BZwFJC3FoAAuPAWcBSQtxaAALjwFnAUkLcWgADEMBSQtxaAALowFmAUkLcWgAC8YBZwFJC3FoAAvG - AWcBSQtxaAALxgFnAUkLcWgAC8YBZwFJC3FoAAvGAWcBSQtxaAALxgFnAUkKcQFWaAABsArGAWcBSQpx - AXhoAAH/AbABgAjGAWcBSQhxAVYBeAH0/wD/AHIAAfQGVQF3Af82AAolAW80AA1VMgAPJTAAB1UBlwGY - AXcGVQF3EgAL9BEACSUBTAglAW8tAARVAZgJAAF3BFUPAA/rDgAFJQFvCQABRgUlKgAB9ANVAZ0NAAGX - A1UB/wwAAusB8gsAAQcC6wwABCUBTA0ABSUTAAL0EwAB/wNVEAAB/wNVDAAB6wHtDQAC6wsABCUQAAH0 - BCUSAAL/EwADVRIAAf8DVQsAAesB8gEAAusCAAHyAesDAAHrAewBAAHsAesKAAQlEgAB/wMlAW8FAAH0 - AfEB/wkAAv8JAAH/AfEB9AYAA1UUAAH0AlUBlwoAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesJAAH/ - AyUUAAH0AyUFAAH/AbwBcwHxAf8HAAL0BwAB/wHxAXMBvAH/BQAB/wJVAQgHAAHxDQABdwJVCgAB6wH0 - AQAC6wIAAfIB6wMAAesB7AEAAZIB6wkAAyUBFhUAAUYDJQYAAf8BBwEcAfMB/wUAAv8FAAH/AfMBHAEH - Af8HAANVCAACVQ0AAlUBdwkAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesIAAH/AyUFAAz/BgADJQgA - Af8BBwEcAfMB/wMAAvQDAAH/AfMBHAEHAf8JAAJVAfQIAANVDAABdwJVCQAB6wH0AQAC6wIAAfIB6wMA - AesB7AEAAZIB6wgAAyUB8wUAAW8LJQYAAUYCJQFvAwAB8wFyARwB8wIAAf8BBwEcAfMB/wEAAvQBAAH/ - AfMBHAEHAf8CAAG8AfIBHAH0BAABCAJVCQAEVQHxCwACVQH/CAAB6wH0AQAC6wIAAfIB6wMAAesB7AEA - AZIB6wgAAyUGAAFvCyUHAAMlAwAB/wEcAfMFAAH/AQcBHAHzAv8B8wEcAQcB/wQAAf8BcwG8BQADVQkA - BlUKAAJVAXcIAAHrAfQBAALrAgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUDAAH/AfQBcwH/ - BgAB/wG8AnMBvAH/BgAB9AEcAe8FAAJVAZcJAAdVCQADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGS - AesHAAH/AyUGAAFvCyUHAAMlAwAB9AIHAfQHAATwBwAB8AH0AfAB9AQAAlUB8wkACFUBCAcAA1UIAAHr - AfQBAALrAgAB8gHrAwAB6wHsAQABkgHrBwABlAIlARoGAAFvCyUHAAMlCgAC/wHxAf8BAALxAQAB/wHx - Av8LAAJVAfQJAAlVBwABnQJVCAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wcAAUYCJQH0BgABbwsl - BwABbwIlCQAB9AH/AfMDAALxAwAB8wH/AfQKAAJVAfMJAAhVCAADVQgAAesB9AEAAusCAAHyAesDAAHr - AewBAAGSAesHAAGTAiUBGgYAAW8LJQcAAyUHAAP0BQAC8QUAA/QIAAJVAZcJAAZVAQgJAANVCAAB6wH0 - AQAC6wIAAfIB6wMAAesB7AEAAZIB6wcAAf8CJQFMBgABbwslBwADJQcAAv8GAALxBgAC/wgAA1UJAAVV - Af8KAANVCAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUGAAFvCyUHAAMlDwAC8RAAAZgCVQkA - BFUMAAJVAfQIAAHrAfQBAALrAgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUPAALxEQACVQH/ - CAACVQEIDAABlwJVCQAB6wH0DQABkgHrCAADJQH/BQABbwslBgABFgMlDwAC8REAA1UIAAFVDgADVQcA - Av8B6wHwDf8B7AHrAv8GAAH0AyUFAAEWC0YGAAMlAf8PAALxEQAB9AJVAfMVAAGXAlUIABXrBwADJQHz - FQABbwMlEAAC8RIAA1UVAANVCAAV6wcAARoDJRUAAyURAALxEwADVRMAA1UJABXrCAAEJRMABCURAALx - AgAB/xAAAfIDVREAA1UPAALrBwAB6wHsDgAEJREABCUSAALxAgABHBEAAQgDVQHyDQABmANVAfQPAALr - AfQFAAG8AesB7w8ABCUB8w0AAZMEJRMAAvEBAAH/AXIB9BEAAfIEVQH/CQAB8gRVEgAJ6xEABSUB/wkA - AfMFJRQAAvEBAAEIAfABHBMABlUBlwHxAfQB8QdVFAAB8QWSAfQTAAclAW8BGwH0ARoBRgclFQAC/wEA - AfIB/wHzAf8TAAH0DVUB/zAAARoPJQH/MwABmAdVAfA1AAH0CyUB/3cAAf8BkwFGAZMB/3AAAZcDVQEI - IQABwghaAfNPAAHCBlUB9B0AAfMMWgH0TQAJVQH/GgAQWg4AAfQDBwHyDgAB9AMHAfImAApVAZcYAAZa - AQgEAAGeBVoNAAH0AXMB8gLzAfQOAAH/A/MBBwHyBgABvBkUBQAMVQHCFQAFWgH/CAAB/wNaDQAB8wEH - FgAB8wEHBgABvAEUBLgBkA0UBLgBkAEUBQAOVQH/EgABngRaDAAB5AH/DQAB8wEHAgAB/wLzAvQB/wIA - Av8CAAH/AwAB/wMAAfMBBwYAAbwBFAG4A5ABbAcUAYsBkAQUA5ABuAGQARQFABBVEQAEWhwAAfMBBwUA - Af8B8wHwAgAB8wFyAbwCBwEAAf8CBwMAAfMBBwYAAbwBFAG4CRQBbAPZAWwGFAG4AZABFAUAEVUBmA4A - BFodAAH/AfQCAAHzAgcBvAH0AgAB8AH/AfQB8QHzAf8B8wHvAfIB/wHyAf8BAAH/AfQGAAG8ARQBuAgU - AZAC2QGzApACuAGQAxQBuAGQARQFABNVAfIMAANaAf8jAAH/AfQBcwEcAf8B9AEcAQAB8AIAAXMB9AH/ - AXMBBwH/CQABvAEUAbgHFAGQAtkBbAGQBNkBkAMUAbgBkAEUBQAVVQH/CQABngNaIQAB/wMHAfEB9gHy - Ae8B9AHyARwB/wHwAf8BBwHyAfQBBwsAAbwIFAFsAtkBbAGyAdkBuAKLAbMBkAYUBQAWVQGXCAADWgH/ - JAAB/wG8AXMB/wH0AXIB/wHvAfICAAH/AQcBAAEHCwABvAgUAbgB2QFsAZAB2QG4ARQBkALZAbIGFAUA - GFUBmAYAA1oUAANaCQAIBwHvDwcHAAEZGd8FABpVAfQEAANaEwABCARaLwABGgFZARsBGgFZAfQBGgFZ - AZoBAAGaAVkBGgoAG1UBmAIAAf8DWhIAAf8GWggAAfQB8gH0AfIC8wH0Af8B8wH0AfMB9ALzAfQB8wH0 - AfMB9AHzAfQB8xAAAZoBWQH0AXoBmgH/AnoB9gGaAXoBGgH/CgAcVQH/AQABngJaAZ4SAAdaAQgHAAHz - AQcB8wEHAfMBCAIAAfIBvAHyAbwB8gG8AfMBBwHzAQcB8wG8AfMBBxAAAZoBWQH/AVkBGgEbAVkB/wHz - AVkBmgH/AZoKABxVAZgBAANaAcIRAAlaAf8GAAH/AfQB8wHvAfMBHAH/AfMB9AFzAfYB9AHwAvIB8AH/ - AfQB8gHwAfIBvA0AAvQBAAGaAXoB/wFZAhoBegEAAZoBegH0AnoKABxVARsBAAGeAloBnhAAC1oB/wcA - AfQBcwH2AXID/wG8AXMB7wEcAQABBwL/AQABvAH0AfAB8w0AAnoBAAGaAVkB/wFZAXoB/wH2AfQBWQEa - ARsBWQEaCgAcVQIAAf8DWg8ABFoBngNaAf8EWgYAAQcB/wFzAfQBHAHzAvQB/wH0AfMB9gHwAQcB/wEH - AQABBwH/AQcB/w0AAZoBegH/ARoBWQHzARsCegEaAXoBmgH/AZoBegH/CgAaVQGXBAADWg8ABFoBAANa - AQAB/wNaBgABBwHyAfMBvAH/ARwB/wH0AfEB9gEHAXMBBwH/Ae8B8AH0AQcB/wEHDgABGwFZARsB9gFZ - AXoB/wEbAXoBWQF6Af8BmgFZARsLABlVAf8FAANaDwADWgIAA1oCAAHAAloGAAH/Ae8C/wEAAfMBHAHz - Av8B8wL0AQcBvAH0AXMB9AEHAfEOAAH/AnoB/wHzAnoBGwH/AvQBmgFZARoB/wsAF1UB8QcAA1oQAAEb - AgAB8wNaAwAB/wgAAbwB8AEAAvQB/wHvAXIBHAEHAnMB9AH/ARwB9AHzAXMB/w8AARoBWQEaAQAB/wF6 - BVkBmgH/DAAVVgGYCQABfANaEgADWgGeDAAB/wEcAfIB/wEHAbwB9AH2AvMB9AH/AfABHAHzAQABBwH/ - EAAB9gJ6ARoC/wHzAxoB9A4AFFYB/wsAA1oRAAH/A1oJAAH0AfIEAAEcAfAB/wHzAnMCHAFzAVAB8AcA - AfQB8ggAAfcEAAH/AXoBWQF6AfMB/woAAfcB8QYAElYB9A0ABFoQAARaCQAB8wEHBAAB/wG8Ae8B8gH/ - AfQC8wH0Af8B8wEIAf8FAAHzAQcIAAH3BQAB/wEaAXoBWQJ6AZoBGgcAAfcB8QYAEFYBCBAABFoOAARa - CgAB8wEHBgAB/wEHAXIBcwEcAe8BHAFQARwB9AYAAfMBBwgAAfcHAAH/ARsBmgF6AVkBGgcAAfcB8QYA - DlYBlxIABVoMAARaAZ4KAAHzAQcIAAH/AfQC8wH0Af8IAAHzAQcIAAH3A/EB9A0AA/EB9wHxBgANVgH/ - FAAFWgoABVoLAAH/AVAB7wIHAfIOAAH0AwcBcwH0CAAE9wHxDQAE9wHxBgALVgH0FwAGWgYABloNAAH/ - A/MB9A4AAf8D8wH0JgAJVgEIGgAQWkwAAZgGVgGXHQAB5AxaAZ5OAAVWAf8gAApaUQACCAH/JQAB9AKe - Af//ADMAAfMDWigAAfMDWjAAAfYbWQQAAfMBWgEAAVomAARaAQAEWhQAAWwB9AHzFgAdWQMAAfMDWiMA - Af8CWgH0AQAB8wNaAgABCAJaEQABbAH0AWYXAB1ZBAAC8wHCAVohAAGeAVoB/wQAA/MEAAHCAVoB/w4A - AWwC9AH/AwAB/wGuEgAdWQcAAfQBWh8AAloPAAFaAcIMAAFsAvQBZgQAAWwBtRIAHVkIAAH/AVodAAHk - AVoRAAFaAf8KAAFsAvQBZgQAAfIB9AGREgAdWQkAAf8BWhsAAf8BWhMAAVoJAAG8AvQBrgUAAe0B9AFm - EgAdWQoAAfQBWhoAAVoUAAHCAVoIAAH3AvQBZgQAAewC9AHzEgAdWQsAAfQBWhgAAf8BWhUAAVoHAAFs - BPQBvAH3AgABZgL0EwAdWQwAAf8BWhcAAVoWAAEIAVoGAAT0AfcBbAHzAWwBZgEJAWYBrhMAHVkNAAH/ - AVoWAAFaFwABWgUAAa4B8wX0AfMBbAH/AfECCQFsEgAdWQ4AAfQBWhUAAVoXAAFaBgABZgL0AWwE9AG8 - Aa4B/wGuAQkBkQG8EAAdWQ8AAfQBWhIAAfMDWhQAAfMDWgQAAf8B9AFmAgABbAGRAvQB8AH0Aa4B8QH/ - Aa4BCQFsAW0BuwHtDAAdWRAAAf8BWhEAAfMBWgEAAVoUAAHzAVoBAAFaBAABbAHxAgABBwEJAbsBbAP0 - Aa4B9AFmAv8CCQJmDAAdWREAAf8BWhAAAfMDWhQAAfMDWgMAAfMBZgH/AgACkQEAAWYBbAEJAWYC9AGu - AQcBZgH/Ae8BbAG7AfcLAB1ZEgAB9AFaEAAB8wFaAfMVAAHzAVoB8wcAAfMBCQEHAgABbQH0AWwBuwGu - AvQBtQFsAfcB/wGuAfALAB1ZEwAB9AFaEAABWhcAAVoIAAHzAWwFAAFmAf8BkQGuAQcC9AHzA2YLAB1Z - FAAB/wFaDwABWhYAAfQBWg0AAZIB/wFmAf8BbAH/AQkBZgT0AfABbAFmCQABMRtZATEVAAH/AVoOAAGe - AVoVAAFaDwABZgH/AgAB9wG8Ae0BCQFmAfQB8gP0AZEB8AcAAzEBWBX/BDEWAAH0AVoOAAFaFAAB/wFa - FQABbAH/AWwBrgb0AWwB/wUAAzEBWBX/BDEXAAH0AVoNAAEbAVoTAAFaAf8WAAH/AfMBAAGuAfAG9AFs - BAAdMRgAAf8BWg0AAloRAAFaAZ4cAAFmBvQB8gGuAgAbMQF5GgAB/wFaDQACWg8AAlofAAFsBfQBZgIA - EjElAAH0AVoNAAJaDQABWgHkIQABvAGSAvQB8wMAETEBmSYAAcIDWgsAARsCWgIAAfMDWgMAAloB/yQA - AWwB9AFsAwARMScAAfMBWgEAAVoNAAGeBFoBAARaAf9kAAHzA1oQAAHzA1ppAAPzEQAD8/8ANgABsxAA - Af8Bu20AAbIRAAGybAABsgEJAbICCQGzAgkBugIJAbsHCQG6AbNqAAL/AQABswIAAQkCAAHzAgAB/wgA - AQlqAAH/AgABswIAAQkCAAHzAgAB/wgAARkJAAH/BQkB9AIAARkFCQH/AgAGCRQAC7IBswYAHfQGAAH/ - AgABswIAAQkCAAHzAgAB/wgAARkJAAH/BQkB9AIAARkFCQH/AgAGCRMAAQkMsgUAH4oFAAH/ArMBshKz - CQAB/wIJAf8CCQH0AgABGQEJARkB/wIJAf8CAAMJAf8B8gEJCgABswqyAfQIAAG6AbIEAAG0AYoBZQK7 - GhkBigUAAf8UAAEZCQAB/wIJAQACCQH0AgABGQEJAfMBAAIJAf8CAAMJAQAB8wEJCQAB8wGzCAABugGy - AfQIAAG6AbIEAAGzAYoCZQK7GRkBigUAAf8UAAEZCQAB/wUJAfQCAAEZBQkB/wIABgkJAAG6AfQIAAEJ - DLIEAAGzAYoBuwJlAbsBCRgZAYoFAAH/FAABGQkAAf8FCQH0AgABGQUJAf8CAAYJCQABugH0CQAMsgQA - AbMBigG7ARkCZQG7AQkJGQEJDBkBuwGKBQAB/xQAARkKAAH/AgkC/wMAAv8DCQH/AwAC/wIJAfMB/wkA - AboB9BkAAbMBigG7AhkCZQG7CBkCuwsZAQkBZQGKBQAB/xQAARkLAAIJBwADCQYAAgkB9AoAAboB9BkA - AbMBigG7AxkCZQG7BhkBuwJlAbsKGQJlAYoFAAH/FAABGQsAAgkH/wMJBv8CCQH0CgABugH0CQALsgGz - BAABswGKAbsEGQJlAbsFGQFmAmUBZgEJCBkBuwFlARkBigUAAf8UAAEZCwAUCQH0CgABugH0CAABCQyy - BAABswGKAbsFGQJlAbsDGQG7AWUBZgGRAWUBuwcZAQkCZQEZAYoFAAH/FAABGQsAFAkB9AoAAboB9AQA - BPQBswGyAfQIAAG6AbIEAAGzAYoBuwYZAWUBZgG7AQkBuwJlAhkBZQFmAQkGGQFmAWUCGQGKBQAB/xWy - FAAB8wIJEwABugH0AgAIsgH0CAABugGyBAABswGKAbsGGQG7AmUBuwJlAxkBCQFlAbsFGQG7AWUBbAIZ - AYoFAAH/AgABswIAAQkCAAHzAgAB/wgAARkUAAHzAgkTAAG6AfQCAAGyBQABCQyyBAABswGKAbsHGQG1 - A2UFGQJlAbsDGQEJAmUDGQGKBQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDQAH/wEZAgkH/wwAAboB9AIA - AbIGAAyyBAABswGKAbsQGQEJAWUBuwMZAa4BZQQZAYoFAAH/AgABswIAAQkCAAHzAgAB/wgAARkMAAHz - EgkLAAG6AfQCAAGyFgABswGKAbsCGQFmAmUMGQJlAbsBGQG7AmUEGQGKBQAB/wIAAbMCAAEJAgAB8wIA - Af8IAAEZDAAB8wEJDv8DCQsAAboB9AIAAbIWAAGzAYoBuwEZAWUBiwIZAWUMGQFlArsCZQUZAYoEAAH/ - AbIVtAGyCwAB8wEJDgADCQoAB7IBswQAC7IBswQAAbMBigG7ARkBZQG7AhkBZQwZBGUBkQUZAYoEAAGy - FwABsgoAAfMBCQMAAgkJAAMJCQABCQiyAwABCQyyBAABswGKAbsBGQFlAbsCCQFlDhkBtQcZAYoEAAGy - F7MBsgoAAfMBCQMAAgkJAAMJCQABugGyAfQEAAG6AbID9AGzAbIB9AgAAboBsgQAAbMBigG7AhkDZQG7 - FhkBigQAAboXAAGyCgAB8wEJDgADCQkAAboBsgH0BAABugayAfQIAAG6AbIEAAGzAYoBuxwZAYoEAAG6 - FwABsgoAAfMBCQ4AAwkJAAEJCLIDAAEJDLIEAAGzAYoduwGKBAABuhcAAbIKAAHzEgkKAAiyBAAMsgUA - H4oEAAG6BAABsgH0CwABCQGyBAABsgoAAf8RCQHzJwAB/xytAbQFAAG6AwABsgEAAbMLAAEJAQABsgMA - AbJnAAG6AgABsgMAAbIJAAGyAwABswIAAbJnAAG6AbMBugQAAboIAALzAwAB/wG6AbMBCW8AAbIBCQUA - AboBs3kAAboDsgEJbQABQgFNAT4HAAE+AwABKAMAAYADAAGgAwABAQEAAQEGAAEKFgAD/wEABP8MAAT/ - DAAE/wwABP8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHw - AgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEP + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAH2dgAAH0AWcdmAFn + YAAB7QFnHZgBZ2AAAe0BZwyYAW0DZwHrDJgBZ0QAAf8BFgFqCI8BZwFKCDgBWQGaAf8EAAHtAWcKmAHs + B2cBkgqYAWdEAAEWCo8BZwFKCjgBmgQAAe0BZwmYA2cF/wJnAesJmAFnRAABagqPAWcBSgo4AVkEAAHt + AWcJmAFnAfcH/wJnCZgBZ0QAC48BZwFKCzgEAAHtAWcImAJnCf8CZwiYAWdEAAuPAWcBSgs4BAAB7QFn + B5gB6wFnBP8B8wHtAfQE/wFnCJgBZ0QAC48BZwFKCzgEAAHtAWcHmAJnA/8FZwP/AmcHmAFnRAALjwFn + AUoLOAQAAe0BZweYAWcD/wFtAWcCmAHtAWcBBwP/AWcHmAFnRAALjwFnAUoLOAQAAe0BZweYAWcD/wFn + AewDmAJnA/8BZweYAWdEAAuPAWcBSgtSBAAB7QFnB5gBZwP/AWcFmAFnA/8BZweYAWdEAAuPAWcMQwQA + Ae0BZweYAWcD/wFnBZgBZwP/AWcHmAFnRAALjwFnAUkLcQQAAe0BZweYAWcD/wFnAZIDmAHqAWcD/wFn + B5gBZ0QAC48BZwFJC3EEAAHtAWcHmAFnA/8CZwOYAWcBjQP/AWcHmAFnRAALjwFnAUkLcQQAAe0BZweY + AWcB6wP/BWcD/wJnB5gBZ0QAC48BZwFJC3EEAAHtAWcHmAHrAWcE/wH3AWcBvAT/AWcImAFnRAAMQwFJ + C3EEAAHtAWcImAFnAW0J/wJnCJgBZ0QAC6MBZgFJC3EEAAHtAWcImAHsAWcB8wf/AZIBZwOYBWcBmAFn + RAALxgFnAUkLcQQAAe0BZwmYA2cF/wNnA5gFZwGYAWdEAAvGAWcBSQtxBAAB7QFnCpgBbQdnAewEmAFn + A+MBZwGYAWdEAAvGAWcBSQtxBAAB7QFnDJgFZwaYBWcBmAFnRAALxgFnAUkLcQQAAe0BZxeYAW0DZwHs + AZgBZ0QAC8YBZwFJC3EEAAHwAWcdmAFnRAALxgFnAUkKcQFWBQAfZ0QAAbAKxgFnAUkKcQF4BgAFBwJn + D24BZwHsBQdFAAH/AbABgAjGAWcBSQhxAVYBeAH0CwAB8AFnD5oBZwH/bgABZw+aAWdvAAFnD5oBZ28A + EWdvAAH0D2cB/1MAAfQGVQF3Af82AAolAW80AA1VMgAPJTAAB1UBlwGYAXcGVQF3EgAL9BEACSUBTAgl + AW8tAARVAZgJAAF3BFUPAA/rDgAFJQFvCQABRgUlKgAB9ANVAZ0NAAGXA1UB/wwAAusB8gsAAQcC6wwA + BCUBTA0ABSUTAAL0EwAB/wNVEAAB/wNVDAAB6wHtDQAC6wsABCUQAAH0BCUSAAL/EwADVRIAAf8DVQsA + AesB8gEAAusCAAHyAesDAAHrAewBAAHsAesKAAQlEgAB/wMlAW8FAAH0AfEB/wkAAv8JAAH/AfEB9AYA + A1UUAAH0AlUBlwoAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesJAAH/AyUUAAH0AyUFAAH/AbwBcwHx + Af8HAAL0BwAB/wHxAXMBvAH/BQAB/wJVAQgHAAHxDQABdwJVCgAB6wH0AQAC6wIAAfIB6wMAAesB7AEA + AZIB6wkAAyUBFhUAAUYDJQYAAf8BBwEcAfMB/wUAAv8FAAH/AfMBHAEHAf8HAANVCAACVQ0AAlUBdwkA + AesB9AEAAusCAAHyAesDAAHrAewBAAGSAesIAAH/AyUFAAz/BgADJQgAAf8BBwEcAfMB/wMAAvQDAAH/ + AfMBHAEHAf8JAAJVAfQIAANVDAABdwJVCQAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUB8wUA + AW8LJQYAAUYCJQFvAwAB8wFyARwB8wIAAf8BBwEcAfMB/wEAAvQBAAH/AfMBHAEHAf8CAAG8AfIBHAH0 + BAABCAJVCQAEVQHxCwACVQH/CAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUGAAFvCyUHAAMl + AwAB/wEcAfMFAAH/AQcBHAHzAv8B8wEcAQcB/wQAAf8BcwG8BQADVQkABlUKAAJVAXcIAAHrAfQBAALr + AgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUDAAH/AfQBcwH/BgAB/wG8AnMBvAH/BgAB9AEc + Ae8FAAJVAZcJAAdVCQADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesHAAH/AyUGAAFvCyUHAAMl + AwAB9AIHAfQHAATwBwAB8AH0AfAB9AQAAlUB8wkACFUBCAcAA1UIAAHrAfQBAALrAgAB8gHrAwAB6wHs + AQABkgHrBwABlAIlARoGAAFvCyUHAAMlCgAC/wHxAf8BAALxAQAB/wHxAv8LAAJVAfQJAAlVBwABnQJV + CAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wcAAUYCJQH0BgABbwslBwABbwIlCQAB9AH/AfMDAALx + AwAB8wH/AfQKAAJVAfMJAAhVCAADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesHAAGTAiUBGgYA + AW8LJQcAAyUHAAP0BQAC8QUAA/QIAAJVAZcJAAZVAQgJAANVCAAB6wH0AQAC6wIAAfIB6wMAAesB7AEA + AZIB6wcAAf8CJQFMBgABbwslBwADJQcAAv8GAALxBgAC/wgAA1UJAAVVAf8KAANVCAAB6wH0AQAC6wIA + AfIB6wMAAesB7AEAAZIB6wgAAyUGAAFvCyUHAAMlDwAC8RAAAZgCVQkABFUMAAJVAfQIAAHrAfQBAALr + AgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUPAALxEQACVQH/CAACVQEIDAABlwJVCQAB6wH0 + DQABkgHrCAADJQH/BQABbwslBgABFgMlDwAC8REAA1UIAAFVDgADVQcAAv8B6wHwDf8B7AHrAv8GAAH0 + AyUFAAEWC0YGAAMlAf8PAALxEQAB9AJVAfMVAAGXAlUIABXrBwADJQHzFQABbwMlEAAC8RIAA1UVAANV + CAAV6wcAARoDJRUAAyURAALxEwADVRMAA1UJABXrCAAEJRMABCURAALxAgAB/xAAAfIDVREAA1UPAALr + BwAB6wHsDgAEJREABCUSAALxAgABHBEAAQgDVQHyDQABmANVAfQPAALrAfQFAAG8AesB7w8ABCUB8w0A + AZMEJRMAAvEBAAH/AXIB9BEAAfIEVQH/CQAB8gRVEgAJ6xEABSUB/wkAAfMFJRQAAvEBAAEIAfABHBMA + BlUBlwHxAfQB8QdVFAAB8QWSAfQTAAclAW8BGwH0ARoBRgclFQAC/wEAAfIB/wHzAf8TAAH0DVUB/zAA + ARoPJQH/MwABmAdVAfA1AAH0CyUB/3cAAf8BkwFGAZMB/3AAAZcDVQEIIQABwghaAfNPAAHCBlUB9B0A + AfMMWgH0TQAJVQH/GgAQWg4AAfQDBwHyDgAB9AMHAfImAApVAZcYAAZaAQgEAAGeBVoNAAH0AXMB8gLz + AfQOAAH/A/MBBwHyBgABvBkUBQAMVQHCFQAFWgH/CAAB/wNaDQAB8wEHFgAB8wEHBgABvAEUBLgBkA0U + BLgBkAEUBQAOVQH/EgABngRaDAAB5AH/DQAB8wEHAgAB/wLzAvQB/wIAAv8CAAH/AwAB/wMAAfMBBwYA + AbwBFAG4A5ABbAcUAYsBkAQUA5ABuAGQARQFABBVEQAEWhwAAfMBBwUAAf8B8wHwAgAB8wFyAbwCBwEA + Af8CBwMAAfMBBwYAAbwBFAG4CRQBbAPZAWwGFAG4AZABFAUAEVUBmA4ABFodAAH/AfQCAAHzAgcBvAH0 + AgAB8AH/AfQB8QHzAf8B8wHvAfIB/wHyAf8BAAH/AfQGAAG8ARQBuAgUAZAC2QGzApACuAGQAxQBuAGQ + ARQFABNVAfIMAANaAf8jAAH/AfQBcwEcAf8B9AEcAQAB8AIAAXMB9AH/AXMBBwH/CQABvAEUAbgHFAGQ + AtkBbAGQBNkBkAMUAbgBkAEUBQAVVQH/CQABngNaIQAB/wMHAfEB9gHyAe8B9AHyARwB/wHwAf8BBwHy + AfQBBwsAAbwIFAFsAtkBbAGyAdkBuAKLAbMBkAYUBQAWVQGXCAADWgH/JAAB/wG8AXMB/wH0AXIB/wHv + AfICAAH/AQcBAAEHCwABvAgUAbgB2QFsAZAB2QG4ARQBkALZAbIGFAUAGFUBmAYAA1oUAANaCQAIBwHv + DwcHAAEZGd8FABpVAfQEAANaEwABCARaLwABGgFZARsBGgFZAfQBGgFZAZoBAAGaAVkBGgoAG1UBmAIA + Af8DWhIAAf8GWggAAfQB8gH0AfIC8wH0Af8B8wH0AfMB9ALzAfQB8wH0AfMB9AHzAfQB8xAAAZoBWQH0 + AXoBmgH/AnoB9gGaAXoBGgH/CgAcVQH/AQABngJaAZ4SAAdaAQgHAAHzAQcB8wEHAfMBCAIAAfIBvAHy + AbwB8gG8AfMBBwHzAQcB8wG8AfMBBxAAAZoBWQH/AVkBGgEbAVkB/wHzAVkBmgH/AZoKABxVAZgBAANa + AcIRAAlaAf8GAAH/AfQB8wHvAfMBHAH/AfMB9AFzAfYB9AHwAvIB8AH/AfQB8gHwAfIBvA0AAvQBAAGa + AXoB/wFZAhoBegEAAZoBegH0AnoKABxVARsBAAGeAloBnhAAC1oB/wcAAfQBcwH2AXID/wG8AXMB7wEc + AQABBwL/AQABvAH0AfAB8w0AAnoBAAGaAVkB/wFZAXoB/wH2AfQBWQEaARsBWQEaCgAcVQIAAf8DWg8A + BFoBngNaAf8EWgYAAQcB/wFzAfQBHAHzAvQB/wH0AfMB9gHwAQcB/wEHAQABBwH/AQcB/w0AAZoBegH/ + ARoBWQHzARsCegEaAXoBmgH/AZoBegH/CgAaVQGXBAADWg8ABFoBAANaAQAB/wNaBgABBwHyAfMBvAH/ + ARwB/wH0AfEB9gEHAXMBBwH/Ae8B8AH0AQcB/wEHDgABGwFZARsB9gFZAXoB/wEbAXoBWQF6Af8BmgFZ + ARsLABlVAf8FAANaDwADWgIAA1oCAAHAAloGAAH/Ae8C/wEAAfMBHAHzAv8B8wL0AQcBvAH0AXMB9AEH + AfEOAAH/AnoB/wHzAnoBGwH/AvQBmgFZARoB/wsAF1UB8QcAA1oQAAEbAgAB8wNaAwAB/wgAAbwB8AEA + AvQB/wHvAXIBHAEHAnMB9AH/ARwB9AHzAXMB/w8AARoBWQEaAQAB/wF6BVkBmgH/DAAVVgGYCQABfANa + EgADWgGeDAAB/wEcAfIB/wEHAbwB9AH2AvMB9AH/AfABHAHzAQABBwH/EAAB9gJ6ARoC/wHzAxoB9A4A + FFYB/wsAA1oRAAH/A1oJAAH0AfIEAAEcAfAB/wHzAnMCHAFzAVAB8AcAAfQB8ggAAfcEAAH/AXoBWQF6 + AfMB/woAAfcB8QYAElYB9A0ABFoQAARaCQAB8wEHBAAB/wG8Ae8B8gH/AfQC8wH0Af8B8wEIAf8FAAHz + AQcIAAH3BQAB/wEaAXoBWQJ6AZoBGgcAAfcB8QYAEFYBCBAABFoOAARaCgAB8wEHBgAB/wEHAXIBcwEc + Ae8BHAFQARwB9AYAAfMBBwgAAfcHAAH/ARsBmgF6AVkBGgcAAfcB8QYADlYBlxIABVoMAARaAZ4KAAHz + AQcIAAH/AfQC8wH0Af8IAAHzAQcIAAH3A/EB9A0AA/EB9wHxBgANVgH/FAAFWgoABVoLAAH/AVAB7wIH + AfIOAAH0AwcBcwH0CAAE9wHxDQAE9wHxBgALVgH0FwAGWgYABloNAAH/A/MB9A4AAf8D8wH0JgAJVgEI + GgAQWkwAAZgGVgGXHQAB5AxaAZ5OAAVWAf8gAApaUQACCAH/JQAB9AKeAf//ADMAAfMDWigAAfMDWjAA + AfYbWQQAAfMBWgEAAVomAARaAQAEWhQAAWwB9AHzFgAdWQMAAfMDWiMAAf8CWgH0AQAB8wNaAgABCAJa + EQABbAH0AWYXAB1ZBAAC8wHCAVohAAGeAVoB/wQAA/MEAAHCAVoB/w4AAWwC9AH/AwAB/wGuEgAdWQcA + AfQBWh8AAloPAAFaAcIMAAFsAvQBZgQAAWwBtRIAHVkIAAH/AVodAAHkAVoRAAFaAf8KAAFsAvQBZgQA + AfIB9AGREgAdWQkAAf8BWhsAAf8BWhMAAVoJAAG8AvQBrgUAAe0B9AFmEgAdWQoAAfQBWhoAAVoUAAHC + AVoIAAH3AvQBZgQAAewC9AHzEgAdWQsAAfQBWhgAAf8BWhUAAVoHAAFsBPQBvAH3AgABZgL0EwAdWQwA + Af8BWhcAAVoWAAEIAVoGAAT0AfcBbAHzAWwBZgEJAWYBrhMAHVkNAAH/AVoWAAFaFwABWgUAAa4B8wX0 + AfMBbAH/AfECCQFsEgAdWQ4AAfQBWhUAAVoXAAFaBgABZgL0AWwE9AG8Aa4B/wGuAQkBkQG8EAAdWQ8A + AfQBWhIAAfMDWhQAAfMDWgQAAf8B9AFmAgABbAGRAvQB8AH0Aa4B8QH/Aa4BCQFsAW0BuwHtDAAdWRAA + Af8BWhEAAfMBWgEAAVoUAAHzAVoBAAFaBAABbAHxAgABBwEJAbsBbAP0Aa4B9AFmAv8CCQJmDAAdWREA + Af8BWhAAAfMDWhQAAfMDWgMAAfMBZgH/AgACkQEAAWYBbAEJAWYC9AGuAQcBZgH/Ae8BbAG7AfcLAB1Z + EgAB9AFaEAAB8wFaAfMVAAHzAVoB8wcAAfMBCQEHAgABbQH0AWwBuwGuAvQBtQFsAfcB/wGuAfALAB1Z + EwAB9AFaEAABWhcAAVoIAAHzAWwFAAFmAf8BkQGuAQcC9AHzA2YLAB1ZFAAB/wFaDwABWhYAAfQBWg0A + AZIB/wFmAf8BbAH/AQkBZgT0AfABbAFmCQABMRtZATEVAAH/AVoOAAGeAVoVAAFaDwABZgH/AgAB9wG8 + Ae0BCQFmAfQB8gP0AZEB8AcAAzEBWBX/BDEWAAH0AVoOAAFaFAAB/wFaFQABbAH/AWwBrgb0AWwB/wUA + AzEBWBX/BDEXAAH0AVoNAAEbAVoTAAFaAf8WAAH/AfMBAAGuAfAG9AFsBAAdMRgAAf8BWg0AAloRAAFa + AZ4cAAFmBvQB8gGuAgAbMQF5GgAB/wFaDQACWg8AAlofAAFsBfQBZgIAEjElAAH0AVoNAAJaDQABWgHk + IQABvAGSAvQB8wMAETEBmSYAAcIDWgsAARsCWgIAAfMDWgMAAloB/yQAAWwB9AFsAwARMScAAfMBWgEA + AVoNAAGeBFoBAARaAf9kAAHzA1oQAAHzA1ppAAPzEQAD8/8ANgABsxAAAf8Bu20AAbIRAAGybAABsgEJ + AbICCQGzAgkBugIJAbsHCQG6AbNqAAL/AQABswIAAQkCAAHzAgAB/wgAAQlqAAH/AgABswIAAQkCAAHz + AgAB/wgAARkJAAH/BQkB9AIAARkFCQH/AgAGCRQAC7IBswYAHfQGAAH/AgABswIAAQkCAAHzAgAB/wgA + ARkJAAH/BQkB9AIAARkFCQH/AgAGCRMAAQkMsgUAH4oFAAH/ArMBshKzCQAB/wIJAf8CCQH0AgABGQEJ + ARkB/wIJAf8CAAMJAf8B8gEJCgABswqyAfQIAAG6AbIEAAG0AYoBZQK7GhkBigUAAf8UAAEZCQAB/wIJ + AQACCQH0AgABGQEJAfMBAAIJAf8CAAMJAQAB8wEJCQAB8wGzCAABugGyAfQIAAG6AbIEAAGzAYoCZQK7 + GRkBigUAAf8UAAEZCQAB/wUJAfQCAAEZBQkB/wIABgkJAAG6AfQIAAEJDLIEAAGzAYoBuwJlAbsBCRgZ + AYoFAAH/FAABGQkAAf8FCQH0AgABGQUJAf8CAAYJCQABugH0CQAMsgQAAbMBigG7ARkCZQG7AQkJGQEJ + DBkBuwGKBQAB/xQAARkKAAH/AgkC/wMAAv8DCQH/AwAC/wIJAfMB/wkAAboB9BkAAbMBigG7AhkCZQG7 + CBkCuwsZAQkBZQGKBQAB/xQAARkLAAIJBwADCQYAAgkB9AoAAboB9BkAAbMBigG7AxkCZQG7BhkBuwJl + AbsKGQJlAYoFAAH/FAABGQsAAgkH/wMJBv8CCQH0CgABugH0CQALsgGzBAABswGKAbsEGQJlAbsFGQFm + AmUBZgEJCBkBuwFlARkBigUAAf8UAAEZCwAUCQH0CgABugH0CAABCQyyBAABswGKAbsFGQJlAbsDGQG7 + AWUBZgGRAWUBuwcZAQkCZQEZAYoFAAH/FAABGQsAFAkB9AoAAboB9AQABPQBswGyAfQIAAG6AbIEAAGz + AYoBuwYZAWUBZgG7AQkBuwJlAhkBZQFmAQkGGQFmAWUCGQGKBQAB/xWyFAAB8wIJEwABugH0AgAIsgH0 + CAABugGyBAABswGKAbsGGQG7AmUBuwJlAxkBCQFlAbsFGQG7AWUBbAIZAYoFAAH/AgABswIAAQkCAAHz + AgAB/wgAARkUAAHzAgkTAAG6AfQCAAGyBQABCQyyBAABswGKAbsHGQG1A2UFGQJlAbsDGQEJAmUDGQGK + BQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDQAH/wEZAgkH/wwAAboB9AIAAbIGAAyyBAABswGKAbsQGQEJ + AWUBuwMZAa4BZQQZAYoFAAH/AgABswIAAQkCAAHzAgAB/wgAARkMAAHzEgkLAAG6AfQCAAGyFgABswGK + AbsCGQFmAmUMGQJlAbsBGQG7AmUEGQGKBQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDAAB8wEJDv8DCQsA + AboB9AIAAbIWAAGzAYoBuwEZAWUBiwIZAWUMGQFlArsCZQUZAYoEAAH/AbIVtAGyCwAB8wEJDgADCQoA + B7IBswQAC7IBswQAAbMBigG7ARkBZQG7AhkBZQwZBGUBkQUZAYoEAAGyFwABsgoAAfMBCQMAAgkJAAMJ + CQABCQiyAwABCQyyBAABswGKAbsBGQFlAbsCCQFlDhkBtQcZAYoEAAGyF7MBsgoAAfMBCQMAAgkJAAMJ + CQABugGyAfQEAAG6AbID9AGzAbIB9AgAAboBsgQAAbMBigG7AhkDZQG7FhkBigQAAboXAAGyCgAB8wEJ + DgADCQkAAboBsgH0BAABugayAfQIAAG6AbIEAAGzAYoBuxwZAYoEAAG6FwABsgoAAfMBCQ4AAwkJAAEJ + CLIDAAEJDLIEAAGzAYoduwGKBAABuhcAAbIKAAHzEgkKAAiyBAAMsgUAH4oEAAG6BAABsgH0CwABCQGy + BAABsgoAAf8RCQHzJwAB/xytAbQFAAG6AwABsgEAAbMLAAEJAQABsgMAAbJnAAG6AgABsgMAAbIJAAGy + AwABswIAAbJnAAG6AbMBugQAAboIAALzAwAB/wG6AbMBCW8AAbIBCQUAAboBs3kAAboDsgEJbQABQgFN + AT4HAAE+AwABKAMAAYADAAGgAwABAQEAAQEGAAEKFgAD/wEABP8BgAsABP8MAAT/DAAE/wwAAfACAAEP DAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHw - AgABDwwAAfACAAEPDAAB8AIAAQ8MAAT/DAAE/wwABP8MAAT/DAAB/wHwAQcG/wHgAQMG/wHAAQEG/wGA - AQAG/wIAAX8B/wHgAQMB/wH+AgABPwT/Af4BDwH4AT8B/wGAAQAB/wH8AQ8B+AEfBP8B+AE/Af4BDwH/ - AR8B/AF/AfgBPwH+AQ8B/wH+AX8B/wHwAv8BDwH/AT8B/gF/AfAC/wEHAf8B/gF/Af8B8QL/AYcB/wEm - AXIBfwHhAv8BgwHjAf4BfwHHAeMC/wHDAf8BJgFyAX8BwwL/AcMB4AH+AX8BBwHDAfsB/wHjAf8BJgFy - AX8BwwL/AeEB+AE+AXwBHwHHAfkB/wHxAf8BJgFyAX8BhwHAAQMB8QH+AQ4BcAF/AccB+AH/AfEB/wEm - AXIBfwGHAcABAwHwAeEBggFBAYcBjwH4AT8B+AH/ASYBcgF/AY8BwAEDAfgB4wHgAQcCjwH4AR8B+AH/ - ASYBcgF/AY8BwAEDAfgB4QH4AR8CjwH4AQ8B+AH/ASYBcgF/AQ8BwAEDAfgB4QH8AT8BhwGPAfgBAwH4 - Af8BJgFyAX8BDwHAAQMB+AH/AcIBQwH/AY8B+AEDAfgB/wEmAXIBfwEPAcABAwH4Af8BjgFxAf8BjwH4 - AQcB+AH/ASYBcgF/AQ8BwAEDAfgB/gE+AXwBfwGPAfgBDwH4Af8BJgFyAX8BDwHAAQMB+AH+An4BfwGP - AfgBHwH4Af8BJgFyAX8BjwHAAQMB+AH/Af4BfwH/AY8B+AF/AfgB/wEmAXIBfwGPAcABAwH4Af8B/gF/ - Af8BxwH4Af8B8QH/AT8B/gF/AYcBwAEDAfAB/wH+AX8B/wHHAfsB/wHxAfwCAAEfAYcBwAEDAfAB/wH+ - AX8B/wHDAv8B4wH8AgABHwHDAv8B4QH/Af4BfwH/AeMC/wHjAfwCAAEfAcMC/wHjAf8B/gF/Af8B8QL/ - AccB/AIAAR8B4QL/AcMB/wH+AW8B/wHwAv8BjwH/AecB8wH/AfAC/wGHAf8B/gFvAf8B+AE/Af4BDwH/ - AuMB/wH4AT8B/gEPAf8B/gFHAf8B/AEPAfgBPwH/AfABBwH/AfwBDwH4AR8B/wH+AUcC/wIAAX8B/wH4 - AQ8B/wH+AgABPwH/Af4BQwL/AYABAAb/AgABfwX/AfABBwb/AcABAQ7/AfwBHw3/AeAE/wGAAR8J/wHA - AT8C/wH+AQABBwn/AcABDwL/AfwBAAEDAf8B8AF/Af4BDwT/AcABBwL/AfgBDwEDAf8B4AF/Af4BBwHg - AgABBwHAAQEC/wHwAT8BwwH/AecC/wHnAeACAAEHAcABAAF/Af8B4AH/AfMB/wHmAQYBbgHnAeACAAEH - AcABAAE/Af8B4QP/AecBxgEIAecB4AIAAQcBwAEAAQ8B/wHDA/8B5gEMAQABJwHgAgABBwHAAQABAwH/ - AcME/wGAAbABPwHgAgABBwHAAgAB/wGHA/8B/AIAAf8B4AIAAQcBwAIAAX8BhwT/AYABMgH/AeACAAEH - AcACAAEfAY8C/wEfAfACAAEPAeACAAEHAcACAAEHAY8B/wH+AQ8F/wHgAQgB/wHAAgABAwEPAf8B/AEH - AfgCAAEfAf8B4AEAAf8BwAIAAQEBDwH/AfwBAwH4ARgBAAEfAf8B4AEAAf8BwAIAAQEBDwH/AfgBAQH4 - AgABHwH/AiAB/wHAAgABAQEPAf8B8AEAAf4BAAEiAR8B/wEgAQAB/wHAAgABAwEPAf8B4AEAAfwBAAEC - AR8B/wIAAf8BwAIAAQcBjwH/AeEBEAH8AgABPwH/AQABAQH/AcACAAEPAY8B/wHjARgB/AEgAQABPwH/ - AQABAQH/AcACAAE/AY8B/wH2AR0B/gFAAQABPwH/AYgBAwH/AcACAAH/AYcB/wH+AR8B/gEAAQIBfwH/ - AYABDwH/AcABAAEBAf8BxwH/AfwBPwHnAYABDwHnAfsBwAH/Ac8BwAEAAQcB/wHDAf8B/AE/AecBgAED - AecB+wHgAR8BzwHAAQABHwH/AeEB/wH4AX8B5wHgAQcB5wH7AfgBHwHPAcABAAF/Af8B4AH/AfABfwHn - AfgBHwHnAfgBPwH+AQ8BwAEAAv8B8AF/AeAB/wHgAX8B/gEHAfgBPwH+AQ8BwAEDAv8B+AEfAYEB/wHw - AX8B/gEPBP8BwAEPAv8B/AEAAQMJ/wHAAT8C/wH+AQABBwn/AeABfwP/AYABHwn/AfEE/wHwJv8BwwT/ - AfwBPwX/AcACAAEDAcsE/wHwAYcC/wGPAv8BwAIAAQEBwwT/AYQBMQL/AR8C/wHAAgABAQHhBP8BHgE8 - AX8B/gEcAv8BwAIAAQEB/AP/Af4BfwH/AT8B/AE8Av8BwAIAAQEB/gF/Av8B/AL/AZ8B+AF4Av8BwAIA - AQEB/wE/Av8B+QL/Ad8B8AH4Av8BwAIAAQEB/wGfAv8B+wL/Ac8C8AL/AcACAAEBAf8BzwL/AfMC/wHv - AeABMQL/AcACAAEBAf8B5wL/AfcC/wHnAeABAQL/AcACAAEBAf8B8wL/AfcC/wH3AcABAAL/AcACAAEB - Af8B+QL/AfcC/wH3AeABAAE/Af8BwAIAAQEB/wH8Av8BwwL/AcMBxgEAAQMB/wHAAgABAQH/Af4BfwH/ - AcsC/wHLAcwBAAEDAf8BwAIAAQEC/wE/Af8BwwL/AcMBjAGAAQEB/wHAAgABAQL/AZ8B/wHjAv8B4wH4 - AcABAQH/AcACAAEBAv8BzwH/AfcC/wH3AfkB8AEBAf8BwAIAAQEC/wHnAf8B9wL/AecB/wHAAQABfwHA - AgABAQL/AfMB/wHzAv8B7wH/AeYBAAEfAcACAAEBAv8B+QH/AfsC/wHPAv8BgAEHAcACAAEBAv8B/AH/ - AfkC/wHPAv8ByAEDAcACAAEBAv8B/gF/AfwC/wGfAv8B/gEAAcACAAEDA/8BPwH+AX8B/wE/A/8BgAHA - AQABDwT/AZ8B/wE/Af4BfwP/AcEBwAEAAQ8E/wHDAf8BjAE4BP8B8QHAAQABHwT/AcsB/wHgAYMM/wHD - Af8B/AE/DP8B4wH/Af4BPyX/Af4C/wE/DP8B/gL/Ab8M/wH8AgABHwz/AfkBbQG/Ad8M/wH7AW0BvwHf - AfABGAEMAQ8C/wEAAQ8BwAIAAQEB+wFtAb8B3wHwARgBDAEPAf8B/gEAAQ8BgAMAAfgCAAEfAfABGAEM - AQ8B/AEAAT8BzwQAAfsC/wHfAfEBGAGMAU8B+QH+AT8BzwQAAfsC/wHfAfABGAEMAQ8B+QH+AQABDwQA - AfsC/wHfAfABGAEMAQ8B+QH/AQABDwQAAfsC/wHfAfgBOAEcAQ8B+QP/BAAB+wL/Ad8B/AH+AT8BHwH5 - A/8EAAH7Av8B3wH8AgABHwH5Af8BAAEPBAAB+wL/Ad8B/AIAAR8B+QH+AQABDwQAAfsC/wHfAfwCAAEf - AfkB4AE/Ac8EAAH4AgABHwH/Af4BPwH/AfkBgAE/Ac8EAAH7AW0BvwHfAf8B/gE/Af8B+QG+AQABDwQA - AfsBbQG/Ad8B/wIAAX8B+QG/AQABDwQAAfsBbQG/Ad8B/gIAAT8B+QG/Av8EAAH7AW0BvwHfAf4CAAE/ - AfkBvwL/BAAB8AIAAQ8B/gF/Af4BPwHwAQ8BAAEPBAAB9wL/AfcB/gFzAf4BPwHgAQ4BAAEPBAAB8AIA - AQcB/gFzAf4BPwHjAcABPwHPBAAB9wL/AfcB/gF/Af4BPwHjAcABPwHPBAAB9wL/AfcB/gF/Af4BPwHg - AQ4BAAEPBAAB9wL/AfcB/gIAAT8B8AEPAQABDwGAAwAB9wGfAfwB9wH+AgABPwT/AYACAAEBAfcBXwH9 - AXcM/wH2Ae8B+wG3DP8B8QHvAfMBhw3/AfMB5w7/AfwBHw3/Cw== + AgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEP + DAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPAYALAAHwAgABDwHA + AgABAQgAAfACAAEPAf4CAAE/CAAF/wIAAX8IAAX/AgABfwgABf8CAAF/CAAF/wIAAX8IAAH/AfABBwb/ + AeABAwb/AcABAQb/AYABAAb/AgABfwH/AeABAwH/Af4CAAE/BP8B/gEPAfgBPwH/AYABAAH/AfwBDwH4 + AR8E/wH4AT8B/gEPAf8BHwH8AX8B+AE/Af4BDwH/Af4BfwH/AfAC/wEPAf8BPwH+AX8B8AL/AQcB/wH+ + AX8B/wHxAv8BhwH/ASYBcgF/AeEC/wGDAeMB/gF/AccB4wL/AcMB/wEmAXIBfwHDAv8BwwHgAf4BfwEH + AcMB+wH/AeMB/wEmAXIBfwHDAv8B4QH4AT4BfAEfAccB+QH/AfEB/wEmAXIBfwGHAcABAwHxAf4BDgFw + AX8BxwH4Af8B8QH/ASYBcgF/AYcBwAEDAfAB4QGCAUEBhwGPAfgBPwH4Af8BJgFyAX8BjwHAAQMB+AHj + AeABBwKPAfgBHwH4Af8BJgFyAX8BjwHAAQMB+AHhAfgBHwKPAfgBDwH4Af8BJgFyAX8BDwHAAQMB+AHh + AfwBPwGHAY8B+AEDAfgB/wEmAXIBfwEPAcABAwH4Af8BwgFDAf8BjwH4AQMB+AH/ASYBcgF/AQ8BwAED + AfgB/wGOAXEB/wGPAfgBBwH4Af8BJgFyAX8BDwHAAQMB+AH+AT4BfAF/AY8B+AEPAfgB/wEmAXIBfwEP + AcABAwH4Af4CfgF/AY8B+AEfAfgB/wEmAXIBfwGPAcABAwH4Af8B/gF/Af8BjwH4AX8B+AH/ASYBcgF/ + AY8BwAEDAfgB/wH+AX8B/wHHAfgB/wHxAf8BPwH+AX8BhwHAAQMB8AH/Af4BfwH/AccB+wH/AfEB/AIA + AR8BhwHAAQMB8AH/Af4BfwH/AcMC/wHjAfwCAAEfAcMC/wHhAf8B/gF/Af8B4wL/AeMB/AIAAR8BwwL/ + AeMB/wH+AX8B/wHxAv8BxwH8AgABHwHhAv8BwwH/Af4BbwH/AfAC/wGPAf8B5wHzAf8B8AL/AYcB/wH+ + AW8B/wH4AT8B/gEPAf8C4wH/AfgBPwH+AQ8B/wH+AUcB/wH8AQ8B+AE/Af8B8AEHAf8B/AEPAfgBHwH/ + Af4BRwL/AgABfwH/AfgBDwH/Af4CAAE/Af8B/gFDAv8BgAEABv8CAAF/Bf8B8AEHBv8BwAEBDv8B/AEf + Df8B4AT/AYABHwn/AcABPwL/Af4BAAEHCf8BwAEPAv8B/AEAAQMB/wHwAX8B/gEPBP8BwAEHAv8B+AEP + AQMB/wHgAX8B/gEHAeACAAEHAcABAQL/AfABPwHDAf8B5wL/AecB4AIAAQcBwAEAAX8B/wHgAf8B8wH/ + AeYBBgFuAecB4AIAAQcBwAEAAT8B/wHhA/8B5wHGAQgB5wHgAgABBwHAAQABDwH/AcMD/wHmAQwBAAEn + AeACAAEHAcABAAEDAf8BwwT/AYABsAE/AeACAAEHAcACAAH/AYcD/wH8AgAB/wHgAgABBwHAAgABfwGH + BP8BgAEyAf8B4AIAAQcBwAIAAR8BjwL/AR8B8AIAAQ8B4AIAAQcBwAIAAQcBjwH/Af4BDwX/AeABCAH/ + AcACAAEDAQ8B/wH8AQcB+AIAAR8B/wHgAQAB/wHAAgABAQEPAf8B/AEDAfgBGAEAAR8B/wHgAQAB/wHA + AgABAQEPAf8B+AEBAfgCAAEfAf8CIAH/AcACAAEBAQ8B/wHwAQAB/gEAASIBHwH/ASABAAH/AcACAAED + AQ8B/wHgAQAB/AEAAQIBHwH/AgAB/wHAAgABBwGPAf8B4QEQAfwCAAE/Af8BAAEBAf8BwAIAAQ8BjwH/ + AeMBGAH8ASABAAE/Af8BAAEBAf8BwAIAAT8BjwH/AfYBHQH+AUABAAE/Af8BiAEDAf8BwAIAAf8BhwH/ + Af4BHwH+AQABAgF/Af8BgAEPAf8BwAEAAQEB/wHHAf8B/AE/AecBgAEPAecB+wHAAf8BzwHAAQABBwH/ + AcMB/wH8AT8B5wGAAQMB5wH7AeABHwHPAcABAAEfAf8B4QH/AfgBfwHnAeABBwHnAfsB+AEfAc8BwAEA + AX8B/wHgAf8B8AF/AecB+AEfAecB+AE/Af4BDwHAAQAC/wHwAX8B4AH/AeABfwH+AQcB+AE/Af4BDwHA + AQMC/wH4AR8BgQH/AfABfwH+AQ8E/wHAAQ8C/wH8AQABAwn/AcABPwL/Af4BAAEHCf8B4AF/A/8BgAEf + Cf8B8QT/AfAm/wHDBP8B/AE/Bf8BwAIAAQMBywT/AfABhwL/AY8C/wHAAgABAQHDBP8BhAExAv8BHwL/ + AcACAAEBAeEE/wEeATwBfwH+ARwC/wHAAgABAQH8A/8B/gF/Af8BPwH8ATwC/wHAAgABAQH+AX8C/wH8 + Av8BnwH4AXgC/wHAAgABAQH/AT8C/wH5Av8B3wHwAfgC/wHAAgABAQH/AZ8C/wH7Av8BzwLwAv8BwAIA + AQEB/wHPAv8B8wL/Ae8B4AExAv8BwAIAAQEB/wHnAv8B9wL/AecB4AEBAv8BwAIAAQEB/wHzAv8B9wL/ + AfcBwAEAAv8BwAIAAQEB/wH5Av8B9wL/AfcB4AEAAT8B/wHAAgABAQH/AfwC/wHDAv8BwwHGAQABAwH/ + AcACAAEBAf8B/gF/Af8BywL/AcsBzAEAAQMB/wHAAgABAQL/AT8B/wHDAv8BwwGMAYABAQH/AcACAAEB + Av8BnwH/AeMC/wHjAfgBwAEBAf8BwAIAAQEC/wHPAf8B9wL/AfcB+QHwAQEB/wHAAgABAQL/AecB/wH3 + Av8B5wH/AcABAAF/AcACAAEBAv8B8wH/AfMC/wHvAf8B5gEAAR8BwAIAAQEC/wH5Af8B+wL/Ac8C/wGA + AQcBwAIAAQEC/wH8Af8B+QL/Ac8C/wHIAQMBwAIAAQEC/wH+AX8B/AL/AZ8C/wH+AQABwAIAAQMD/wE/ + Af4BfwH/AT8D/wGAAcABAAEPBP8BnwH/AT8B/gF/A/8BwQHAAQABDwT/AcMB/wGMATgE/wHxAcABAAEf + BP8BywH/AeABgwz/AcMB/wH8AT8M/wHjAf8B/gE/Jf8B/gL/AT8M/wH+Av8Bvwz/AfwCAAEfDP8B+QFt + Ab8B3wz/AfsBbQG/Ad8B8AEYAQwBDwL/AQABDwHAAgABAQH7AW0BvwHfAfABGAEMAQ8B/wH+AQABDwGA + AwAB+AIAAR8B8AEYAQwBDwH8AQABPwHPBAAB+wL/Ad8B8QEYAYwBTwH5Af4BPwHPBAAB+wL/Ad8B8AEY + AQwBDwH5Af4BAAEPBAAB+wL/Ad8B8AEYAQwBDwH5Af8BAAEPBAAB+wL/Ad8B+AE4ARwBDwH5A/8EAAH7 + Av8B3wH8Af4BPwEfAfkD/wQAAfsC/wHfAfwCAAEfAfkB/wEAAQ8EAAH7Av8B3wH8AgABHwH5Af4BAAEP + BAAB+wL/Ad8B/AIAAR8B+QHgAT8BzwQAAfgCAAEfAf8B/gE/Af8B+QGAAT8BzwQAAfsBbQG/Ad8B/wH+ + AT8B/wH5Ab4BAAEPBAAB+wFtAb8B3wH/AgABfwH5Ab8BAAEPBAAB+wFtAb8B3wH+AgABPwH5Ab8C/wQA + AfsBbQG/Ad8B/gIAAT8B+QG/Av8EAAHwAgABDwH+AX8B/gE/AfABDwEAAQ8EAAH3Av8B9wH+AXMB/gE/ + AeABDgEAAQ8EAAHwAgABBwH+AXMB/gE/AeMBwAE/Ac8EAAH3Av8B9wH+AX8B/gE/AeMBwAE/Ac8EAAH3 + Av8B9wH+AX8B/gE/AeABDgEAAQ8EAAH3Av8B9wH+AgABPwHwAQ8BAAEPAYADAAH3AZ8B/AH3Af4CAAE/ + BP8BgAIAAQEB9wFfAf0Bdwz/AfYB7wH7AbcM/wHxAe8B8wGHDf8B8wHnDv8B/AEfDf8L @@ -324,159 +334,187 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACI - IwAAAk1TRnQBSQFMAgEBCwEAAUABAAFAAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABMAMAAQEBAAEgBgABMP8AJwAB/wH2AesB/3AAAyMBMwFOAVEBUAGZAzgBXBwAAU4BUQFQAZkBTgFR - AVABmVgAAf8B9gHrAf8DBgEIBAADDAEQKAABTAFEATQB/wHUAbgBAAH/AdQBuAEAAf8BTAFEATQB/wFM - AUQBNAH/AUwBRAE0Af8BTAFEATQB/wFMAUQBNAH/AUwBRAE0Af8BTAFEATQB/wHUAbgBAAH/AdQBuAEA - Af8BTAFEATQB/wwAAU4BUQFQAZksAAFOAVEBUAGZUAAB/wH2AesB/wFkAUgBLwH/CAAB/wH2AesB/ygA - AUwBRAE0Af8BTAFEATQB/wFMAUQBNAH/AUwBRAE0Af8BTAFEATQB/wFMAUQBNAH/AfQB2wEAAf8B/gHk - AQAB/wFMAUQBNAH/AUwBRAE0Af8BTAFEATQB/wHUAbgBAAH/AUwBRAE0Af8MAAFOAVEBUAGZCAADCwEP - A0IBdAQAAU4BeQFnAfABUAFTAVEBnwQAAU4BUAFPAZcIAAFOAVEBUAGZTAABtAGhAZAC/wH2AesB/wgA - AV8BWQFVAc8B/wH2AesB/ygAAUwBRAE0Af8BTAFEATQB/wFMAUQBNAH/AUwBRAE0Af8BTAFEATQC/wHl - AQAB/wFcAVMBLwL/AeUBAAL/AeUBAAH/AasBmQEXAf8BTAFEATQB/wHUAbgBAAH/AUwBRAE0Af8YAAMo - AT0BUwFbAVcBsQMkATUIAAFRAXYBZAHnAwgBCwFPAVIBUQGbVAAB/wH2AesC/wH2AesB/wF3AV0BRgH/ - AW4BUwE7Af8B4gHKAbAB/wGFAWgBUgH/KAABTAFEATQB/wFMAUQBNAH/AUwBRAE0Af8BTAFEATQB/wHS - Ab0BCwH/AWMBWQEtAv8B5QEAAf8BTAFEATQC/wHlAQAB/wHCAa4BEAH/AUwBRAE0Af8BTAFEATQB/wFM - AUQBNAH/GAABSAFKAUkBiAMVAR0BSgF8AWgB8gFTAVkBVwGtBAADCAELXAAB/wH2AesB/wFuAVMBOwL/ - AfYB6wL/AfYB6wH/AZMBewFpAf8BjgF0AWEB/wGoAY8BcQH/NAABSgG3Av8BTAFPAVIBkAMsAUQBSgG3 - Av8EAAFKAbcC/5QAAW4BUwE7Af8EAAJMAUsBjwHLAbIBmQH/AfsB8QHlAv8B9gHrAf8B+wHxAeUF/wHb - AcIBqAH/AWQBSAEvAf8sAAFKAbcC/wFKAbcC/wFAAkEBbwMhATABSgG3Av8DIgEyHAABTgFRAVABmQFO - AVEBUAGZAUoBTAFLAYsEAAFIAkkBhgFIAkkBhQFIAUoBSQGHAUsBTQFMAY4BTAFOAU0BkQFIAkkBhQFL - AU0BTAGOVAAB4gHKAbAB/wQAAWQBVQFKAecBdgFdAUYB/wGAAWMBTAL/AfYB6wH/AXgBXwFIBf8DOwFk - IAABUAGjAd0B9QQAAUoBtwL/AUoBtAH2Af0DBAEGAywBRAFHAUkBSgGCAUoBtwL/IAABVAFzAWUB4AFN - AYMBawH3Aw0BEQFIAkkBhQFTAVkBVwGtBAADEgEZBAADIwEzAzEBTVwAAVcBVgFUAbgBZAFIAS8B/wFy - AVkBQgH/AeIBygGwAv8B9gHrAv8B9gHrAf8B4wHWAckB/wFkAUgBLwH/HAACNwE4AVsBPgI/AWsBSgG3 - Av8DAwEEAU0BrAHqAfoBUQGgAdUB8gFWAWkBdAG9Aj0BPgFoHAABSwFOAU0BkAMxAU4DBQEHAwABAQM6 - AWIBUQFUAVMBoQFNAVABTwGWAVEBWAFVAakDIwE0AwABAXAAAfsB+gH5Af8BkwF4AWMC/wH2AesC/wH2 - AesC/wH2AesB/wMGAQgYAAFKAbcC/wQAAVIBogHZAfQBSgG3Av8BSgG3Av8BUAFZAV0BoyQAA0ABcAMm - ATkDBAEGAUgBfAFiAfYBUAFTAVEBnwFTAXYBZQHlAwIBAwMiATIBVQFxAWIB3HwAAf8B9gHrAv8B9gHr - Av8B9gHrAf8B7AHhAdQB/xQAAwoBDgFKAbcC/wM1AVYUAAGuAaQBkAH/EAADOAFcCAADQgF0AzEBTwFR - AXYBZAHnAVIBWgFWAbABRwF+AWUB+BAAAzgBXHgAA0ABcAH/AfYB6wH/AfEB5gHaAf8cAAE/AkABbQFN - AaEB1gHzAUkBSwFNAYgMAAGuAaQBkAH/EAABTgFRAVABmQwAAUsBTgFNAZABVgFuAWEB1wFRAVgBVgGq - AUcBgwFjAfsDHAEoDAABTgFRAVABmZAAAa4BpAGQAf8BrgGkAZAB/xwAAa4BpAGQAf8BrgGkAZAB/xAA - AUcBfgFlAfgBTgFRAVABmQM4AVwcAAFOAVEBUAGZAU4BUQFQAZkDIgEx/wD/AP8AywADMgFQUAABJAH6 - ARUB/wEkAfoBFQH/BAABJAH6ARUB/wEkAfoBFQH/GAABqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFW - AQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/ - AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8YAANQAZ4B2wGWAQwB/wHbAZYBDAH/AdsBlgEM - Af8DAAEBHAADMgFQASMB+gEUAf9AAAFRAVMBUQGgAxIBGAgAAzIBUAgAAT4BPwE+AWwDIQEwDAABfwFl - AUsB7wFNASQBCwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/xQAAdsBlgEMAf8UAAHbAZYBDAH/IAABIwH6ARQB/zgAAVYBcgFTAc8kAAMhATAIAAF/AWUBSwHv - AeEBvQGKAf8BTQEkAQsB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/ - EAAByQGWARgB/UAAASMB+gEUAf9cAAM7AWQIAAF/AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wFNASQBCwH/ - AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTQEkAQsB/wHhAb0BigH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFNASQBCwH/EAADNgFZHAAB2wGWAQwB/yQAASMB+gEU - Af8sAAEkAfoBFQH/LAABJAH6ARUB/wQAAX8BZQFLAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8BTQEk - AQsB/wHhAb0BigH/AfoB6wHSAf8B3QG5AYcB/wFTASoBEQH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wFNASQBCwH/AfoB6wHSAf8wAAM1AVcoAAEjAfoBFAH/KAABJAH6ARUB/ywA - ASQB+gEVAf8EAAF/AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTQEkAQsB/wHh - Ab0BigH/AU0BJAELAf8B+gHrAdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGK - Af8BcQFOATUB/wH6AesB0gH/IAAB2wGWAQwB/zwAASMB+gEUAf8gAAMyAVAsAAMyAVAIAAF/AWUBSwHv - AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/ - IAAB2wGWAQwB/0AAASMB+gEUAf8gAAEkAfoBFQH/LAABJAH6ARUB/wQAAX8BZQFLAe8B4QG9AYoB/wFN - ASQBCwH/AfoB6wHSAf8BTQEkAQsB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wHaAbYBhAH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8QAAHbAZYBDAH/ - DAAB2wGWAQwB/xAAAZoBegE1AfAwAAEjAfoBFAH/HAABJAH6ARUB/ywAASQB+gEVAf8EAAF/AWUBSwHv - AeEBvQGKAf8BTQEkAQsB/wHpAcwBoQH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B9gHnAc4B/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - FAACTAFLAZAIAAHbAZYBDAH/SAABIwH6ARQB/0QAAxIBGAgAAX8BZQFLAe8B4QG9AYoB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8YAAHbAZYBDAH/BAAB2wGW - AQwB/wwAAdsBlgEMAf88AAEjAfoBFAH/GAABJAH6ARUB/yQAAVIBVgFSAagMAAGoAVYBBAH/AagBVgEE - Af8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGo - AVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/ygAAdsBlgEMAf8DQAFw - RAABIwH6ARQB/xgAASQB+gEVAf8cAAFWAWgBUwHHwAADMgFQIAABJAH6ARUB/wEkAfoBFQH/BAABJAH6 - ARUB/wEkAfoBFQH/zAADMgFQJAADMgFQ/wD/AP8APwAB2wGWAQoB/wHbAZYBCgH/AdsBlgEKAf8B2wGW - AQoB/wHbAZYBCgH/AdsBlgEKAf8MAAGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEE - Af8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGo - AVYBBAH/AagBVgEEAf8BqAFWAQQB/wQAAagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFW - AQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/ - AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/BAABqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGo - AVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEE - Af8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8MAAFpAWIBVAHfEAAB2wGWAQoB/xAAAloBWAHACAABfwFl - AUsB7wFNASQBCwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wF/AWUBSwHvAU0BJAELAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AX8BZQFLAe8BTQEkAQsB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8MAAMqAUAQAAHbAZYBCgH/AdsBlgEKAf8B2wGWAQoB/wHbAZYBCgH/ - AdsBlgEKAf8B2wGWAQoB/wgAAX8BZQFLAe8B4QG9AYoB/wFNASQBCwH/AeEBvQGKAf8B+gHrAdIB/wH6 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0 + KQAAAk1TRnQBSQFMAgEBDAEAARgBAAEIAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABQAMAAQEBAAEgBgABQP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A4gABIwEhASMBMAGt + AdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGf + Af8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/xQA + Af8B9gHrAf9wAAMjATMBTgFQAU4BmQM4AVwcAAFOAVABTgGZAU4BUAFOAZkIAAFUAUEBWwG+Aa0B2wGf + Af8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/AWoBXgFuAf8BUAEsAVsB/wF3 + AXYBeAH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/EAAB/wH2 + AesB/wMGAQgEAAMMARAoAAFLAUMBMwH/AdQBuAEAAf8B1AG4AQAB/wFLAUMBMwH/AUsBQwEzAf8BSwFD + ATMB/wFLAUMBMwH/AUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/AdQBuAEAAf8B1AG4AQAB/wFLAUMBMwH/ + DAABTgFQAU4BmSwAAU4BUAFOAZkEAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGf + Af8BrQHbAZ8B/wFQASwBWw3/AVABLAFbAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGt + AdsBnwH/DAAB/wH2AesB/wFjAUcBLgH/CAAB/wH2AesB/ygAAUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/ + AUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/AfQB2wEAAf8B/gHkAQAB/wFLAUMBMwH/AUsBQwEzAf8BSwFD + ATMB/wHUAbgBAAH/AUsBQwEzAf8MAAFOAVABTgGZCAADCwEPA0IBdAQAAU4BdgFmAfABUAJRAZ8EAAFO + Ak8BlwgAAU4BUAFOAZkEAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BUAEs + AVsV/wFQASwBWwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8IAAG0AaEBkAL/AfYB6wH/ + CAABXQFZAVcBzwH/AfYB6wH/KAABSwFDATMB/wFLAUMBMwH/AUsBQwEzAf8BSwFDATMB/wFLAUMBMwL/ + AeUBAAH/AVsBUgEuAv8B5QEAAv8B5QEAAf8BqwGZARYB/wFLAUMBMwH/AdQBuAEAAf8BSwFDATMB/xgA + AygBPQFVAVcBVgGxAyQBNQgAAVMBcgFkAecDCAELAU8BUQFQAZsMAAFUAUEBWwG+Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/Aa0B2wGfAf8BXgE9AWgF/wFQASwBWwH/AVABLAFbAf8BVAEwAV4F/wFSAS4BXQH/ + Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8IAAH/AfYB6wL/AfYB6wH/AXYBXAFFAf8BbQFS + AToB/wHiAcoBsAH/AYUBZwFRAf8oAAFLAUMBMwH/AUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/AdIBvQEK + Af8BYgFYASwC/wHlAQAB/wFLAUMBMwL/AeUBAAH/AcIBrgEPAf8BSwFDATMB/wFLAUMBMwH/AUsBQwEz + Af8YAAFIAkkBiAMVAR0BSwF6AWcB8gFTAVcBVQGtBAADCAELFAABVAFBAVsBvgGtAdsBnwH/Aa0B2wGf + Af8BrQHbAZ8B/wGtAdsBnwn/AYQBjQGBAf8BrQHbAZ8B/wFUATQBXgn/Aa0B2wGfAf8BrQHbAZ8B/wGt + AdsBnwH/Aa0B2wGfAf8IAAH/AfYB6wH/AW0BUgE6Av8B9gHrAv8B9gHrAf8BkwF6AWgB/wGOAXMBYAH/ + AagBjwFwAf80AAFJAbcC/wFMAU0BTgGQAywBRAFJAbcC/wQAAUkBtwL/UAABVAFBAVsBvgGtAdsBnwH/ + Aa0B2wGfAf8BrQHbAZ8B/wGoAdIBnAn/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwn/Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/Aa0B2wGfAf8EAAFtAVIBOgH/BAACTAFLAY8BywGyAZkB/wH7AfEB5QL/AfYB6wH/ + AfsB8QHlBf8B2wHCAagB/wFjAUcBLgH/LAABSQG3Av8BSQG3Av8DQAFvAyEBMAFJAbcC/wMiATIcAAFO + AVABTgGZAU4BUAFOAZkDSgGLBAADSAGGA0gBhQFIAkkBhwFLAUwBSwGOAUwCTQGRA0gBhQFLAUwBSwGO + CAABVAFBAVsBvgGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwn/AVABLAFbAf8BrQHbAZ8B/wFQ + ASwBWwn/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8MAAHiAcoBsAH/BAABZAFWAU0B5wF1 + AVwBRQH/AYABYgFLAv8B9gHrAf8BdwFeAUcF/wM7AWQgAAFRAZ4B0gH1BAABSQG3Av8BSQGzAfMB/QME + AQYDLAFEAkcBSAGCAUkBtwL/IAABVwFuAWQB4AFPAYIBawH3Aw0BEQNIAYUBUwFXAVUBrQQAAxIBGQQA + AyMBMwMxAU0IAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BUAEsAVsJ/wFY + ATYBYwn/AVABLAFbAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/xQAAVcCVgG4AWMBRwEu + Af8BcQFYAUEB/wHiAcoBsAL/AfYB6wL/AfYB6wH/AeMB1gHJAf8BYwFHAS4B/xwAAzcBWwM+AWsBSQG3 + Av8DAwEEAU0BqQHjAfoBUwGbAckB8gFXAWIBaAG9Az0BaBwAAUsCTAGQAzEBTgMFAQcDAAEBAzoBYgFR + AlIBoQFNAk4BlgFSAVUBUwGpAyMBNAMAAQEMAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfAf8BggGJAYAB/wHpAeQB6g3/AZ0BiQGjAf8BqQHTAZwB/wGtAdsBnwH/AVABLAFbAf8BUAEs + AVsB/wGtAdsBnwH/JAAB+wH6AfkB/wGTAXcBYgL/AfYB6wL/AfYB6wL/AfYB6wH/AwYBCBgAAUkBtwL/ + BAABUgGcAc8B9AFJAbcC/wFJAbcC/wFQAVUBVgGjJAADQAFwAyYBOQMEAQYBSAF6AWIB9gFQAlEBnwFW + AXMBZQHlAwIBAwMiATIBVgFsAWEB3AwAAVQBQQFbAb4BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/AWcBWAFsAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8DeQH/Aa0B2wGfAf8BrQHb + AZ8B/wFwAU8B8AH/AXABTwHwAf8BrQHbAZ8B/zAAAf8B9gHrAv8B9gHrAv8B9gHrAf8B7AHhAdQB/xQA + AwoBDgFJAbcC/wM1AVYUAAGuAaQBkAH/EAADOAFcCAADQgF0AzEBTwFTAXIBZAHnAVMBVgFVAbABRwF9 + AWMB+BAAAzgBXAQAAVQBQQFbAb4BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BUAEs + AVsB/wFQASwBWwH/Aa0B2wGfAf80AANAAXAB/wH2AesB/wHxAeYB2gH/HAADPwFtAU0BmgHMAfMCSQFK + AYgMAAGuAaQBkAH/EAABTgFQAU4BmQwAAUsCTAGQAVkBaQFgAdcBUgFWAVQBqgFHAYIBYQH7AxwBKAwA + AU4BUAFOAZkIAAFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQ + ASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFb + Af8BUAEsAVsB/0wAAa4BpAGQAf8BrgGkAZAB/xwAAa4BpAGQAf8BrgGkAZAB/xAAAUcBfQFjAfgBTgFQ + AU4BmQM4AVwcAAFOAVABTgGZAU4BUAFOAZkDIgExFAABUAEsAVsB/wGJAcoB/QH/AYkBygH9Af8BiQHK + Af0B/wGJAcoB/QH/AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/AVABLAFbAf/cAAFQASwBWwH/AYkBygH9 + Af8BiQHKAf0B/wGJAcoB/QH/AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/AYkBygH9Af8BUAEsAVsB/9wA + ASABHwEhASwBUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEs + AVsB/wMGAQj/AJEAAzIBUFAAASMB+gEUAf8BIwH6ARQB/wQAASMB+gEUAf8BIwH6ARQB/xgAAagBVQED + Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGo + AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/GAADUAGe + AdsBlgELAf8B2wGWAQsB/wHbAZYBCwH/AwABARwAAzIBUAEiAfoBEwH/QAADUQGgAxIBGAgAAzIBUAgA + AT4BPwE+AWwDIQEwDAABewFkAUwB7wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/xQAAdsBlgELAf8UAAHbAZYBCwH/IAABIgH6ARMB/zgAAVgBbAFW + Ac8kAAMhATAIAAF7AWQBTAHvAeEBvQGKAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6 AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BfwFlAUsB7wHhAb0BigH/AU0BJAELAf8B4QG9AYoB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wF/AWUBSwHvAeEBvQGKAf8BTQEkAQsB/wHh - Ab0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/DAADKgFAMAABfwFlAUsB7wHh - Ab0BigH/AfoB6wHSAf8BTQEkAQsB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AU0BJAEL - Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTQEkAQsB/wF/ - AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wFNASQBCwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8BTQEkAQsB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFN - ASQBCwH/AX8BZQFLAe8B4QG9AYoB/wH6AesB0gH/AU0BJAELAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wFNASQBCwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AU0BJAELAf8MAAMqAUAQAAHbAZYBCgH/AdsBlgEKAf8B2wGWAQoB/wHbAZYBCgH/AdsBlgEK - Af8B2wGWAQoB/wgAAX8BZQFLAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8BTQEkAQsB/wHhAb0BigH/ - AfoB6wHSAf8B3QG5AYcB/wFTASoBEQH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wFNASQBCwH/AfoB6wHSAf8BfwFlAUsB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wFNASQBCwH/ - AeEBvQGKAf8B+gHrAdIB/wHdAbkBhwH/AVMBKgERAf8BTQEkAQsB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AU0BJAELAf8B+gHrAdIB/wF/AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ - AU0BJAELAf8B4QG9AYoB/wH6AesB0gH/Ad0BuQGHAf8BUwEqAREB/wFNASQBCwH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8BTQEkAQsB/wH6AesB0gH/DAADKgFABAAB2wGWAQoB/wHbAZYBCgH/ - AdsBlgEKAf8B2wGWAQoB/xAAAloBWAHACAABfwFlAUsB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AU0BJAELAf8B4QG9AYoB/wFNASQBCwH/AfoB6wHSAf8B5wHVAbwB/wHhAb0BigH/AfoB6wHS - Af8B+gHrAdIB/wHhAb0BigH/AXEBTgE1Af8B+gHrAdIB/wF/AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8BTQEkAQsB/wHhAb0BigH/AU0BJAELAf8B+gHrAdIB/wHnAdUBvAH/AeEBvQGK - Af8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BcQFOATUB/wH6AesB0gH/AX8BZQFLAe8B4QG9AYoB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFNASQBCwH/AeEBvQGKAf8BTQEkAQsB/wH6AesB0gH/AecB1QG8 - Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wFxAU4BNQH/AfoB6wHSAf8MAAMqAUAQAAHb - AZYBCgH/AdsBlgEKAf8B2wGWAQoB/wHbAZYBCgH/AdsBlgEKAf8B2wGWAQoB/wgAAX8BZQFLAe8B4QG9 - AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8BTQEkAQsB/wH6AesB0gH/AfoB6wHSAf8BTQEkAQsB/wH6AesB0gH/AfoB6wHSAf8BfwFl - AUsB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wFNASQBCwH/AfoB6wHSAf8B+gHrAdIB/wFNASQBCwH/AfoB6wHSAf8B+gHr - AdIB/wF/AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AU0BJAELAf8B+gHr - AdIB/wH6AesB0gH/DAADKgFAMAABfwFlAUsB7wHhAb0BigH/AU0BJAELAf8B+gHrAdIB/wFNASQBCwH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AdoBtgGEAf8BTQEk - AQsB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF/AWUBSwHvAeEBvQGKAf8BTQEkAQsB/wH6AesB0gH/ - AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B2gG2 - AYQB/wFNASQBCwH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AX8BZQFLAe8B4QG9AYoB/wFNASQBCwH/ - AfoB6wHSAf8BTQEkAQsB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wHaAbYBhAH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8IAAHbAZYBCgH/AdsBlgEK - Af8B2wGWAQoB/wHbAZYBCgH/CAAB2wGWAQoB/wHbAZYBCgH/AdsBlgEKAf8B2wGWAQoB/wHbAZYBCgH/ - AdsBlgEKAf8IAAF/AWUBSwHvAeEBvQGKAf8BTQEkAQsB/wHpAcwBoQH/AU0BJAELAf8B+gHrAdIB/wH6 + Af8B+gHrAdIB/wHhAb0BigH/EAABxgGWARkB/UAAASIB+gETAf9cAAM7AWQIAAF7AWQBTAHvAeEBvQGK + Af8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHh + Ab0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/EAADNgFZ + HAAB2wGWAQsB/yQAASIB+gETAf8sAAEjAfoBFAH/LAABIwH6ARQB/wQAAXsBZAFMAe8B4QG9AYoB/wH6 + AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B3QG5AYcB/wFSASkBEAH/AUwBIwEK + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8wAAM1AVcoAAEi + AfoBEwH/KAABIwH6ARQB/ywAASMB+gEUAf8EAAF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AUwBIwEKAf8B+gHrAdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHr + AdIB/wH6AesB0gH/AeEBvQGKAf8BcAFNATQB/wH6AesB0gH/IAAB2wGWAQsB/zwAASIB+gETAf8gAAMy + AVAsAAMyAVAIAAF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEK + Af8B+gHrAdIB/wH6AesB0gH/IAAB2wGWAQsB/0AAASIB+gETAf8gAAEjAfoBFAH/LAABIwH6ARQB/wQA + AXsBZAFMAe8B4QG9AYoB/wFMASMBCgH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHaAbYBhAH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8QAAHbAZYBCwH/DAAB2wGWAQsB/xAAAZQBdwE6AfAwAAEiAfoBEwH/HAABIwH6ARQB/ywA + ASMB+gEUAf8EAAF7AWQBTAHvAeEBvQGKAf8BTAEjAQoB/wHpAcwBoQH/AUwBIwEKAf8B+gHrAdIB/wH6 AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B9gHnAc4B/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AX8BZQFLAe8B4QG9AYoB/wFNASQBCwH/AekBzAGhAf8BTQEkAQsB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH2AecBzgH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BfwFlAUsB7wHhAb0BigH/AU0BJAELAf8B6QHMAaEB/wFN - ASQBCwH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfYB5wHO - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wgAAdsBlgEKAf8IAAJaAVgBwAHbAZYBCgH/ - AdsBlgEKAf8B2wGWAQoB/xAAAloBWAHACAABfwFlAUsB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6 + Af8B+gHrAdIB/wH6AesB0gH/FAACTAFLAZAIAAHbAZYBCwH/SAABIgH6ARMB/0QAAxIBGAgAAXsBZAFM + Ae8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF/AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AX8BZQFLAe8B4QG9AYoB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8IAAHbAZYBCgH/ - AdsBlgEKAf8B2wGWAQoB/wHbAZYBCgH/CAAB2wGWAQoB/wHbAZYBCgH/AdsBlgEKAf8B2wGWAQoB/wHb - AZYBCgH/AdsBlgEKAf8MAAGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFW - AQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/ - AagBVgEEAf8BqAFWAQQB/wQAAagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGo - AVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEE - Af8BqAFWAQQB/wGoAVYBBAH/BAABqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/ - AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFW - AQQB/wGoAVYBBAH/AagBVgEEAf//AP8A/wADAAFCAU0BPgcAAT4DAAEoAwABQAMAATADAAEBAQABAQUA - AYABARYAA/8BAAb/AgAB+wP/AccB8wIAAfIB/wHAAQEB3wH9AgAB5gH/AcABAQHZAS0CAAHMAf8BwAEB - AfgBxwIAAcAB/wHAAQEB+AFfAgABwAF/AfwBLwL/AgABoAEfAfwBDwHiAQMCAAHoAQ8B9AEPAfABUwIA - AfgBBwHwAQ8B4AEHAgAB/wGBAfoBHwHwAQcCAAH/AfAB+AH7AdgBPQIAAf8B+AH+ATsB3AEdAgAC/wHn - AfMBxwHxAgAG/wIABv8CAAz/Ab8B/wH8AZ8BgAEAAfwBHwHPAf8B8wFnAgAB+wHvAfcB/wHvAfsCAAH3 - Af8B+wL/AfsCAAL3Af0B/wHfAf0CAAH/AfcB/gH/Ad8B/QIAAf8BfwH/AX8BvwH7AgAB/wF/Af8BvwHf - Af0CAAH3AXsB/wLfAf0CAAH7AX8B/wHvAf8B+wIAAf0BdwH/AfcB7wH7AYABAAH/Ac8B/wH7AvcF/wH7 - AfwBnwX/Af0B/wF/Gf8BAwGAAQABgAEAAYABAAHvAXsGAAHvAQMGAAHvAf8GAAHvAQMGAAHoAXsGAAHv - AQMGAAHvAf8GAAHDAQMGAAHYAXsGAAHDAQMBgAEAAYABAAGAAQAY/ws= + Af8YAAHbAZYBCwH/BAAB2wGWAQsB/wwAAdsBlgELAf88AAEiAfoBEwH/GAABIwH6ARQB/yQAAVIBVQFS + AagMAAGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/ + AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFV + AQMB/ygAAdsBlgELAf8DQAFwRAABIgH6ARMB/xgAASMB+gEUAf8cAAFXAWEBVgHHwAADMgFQIAABIwH6 + ARQB/wEjAfoBFAH/BAABIwH6ARQB/wEjAfoBFAH/zAADMgFQJAADMgFQ/wD/AP8APwAB2wGWAQkB/wHb + AZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8MAAGoAVUBAwH/AagBVQEDAf8BqAFV + AQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/ + AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wQAAagBVQEDAf8BqAFVAQMB/wGo + AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQED + Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/BAABqAFVAQMB/wGoAVUBAwH/ + AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFV + AQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8MAAFmAWEBVgHfEAAB2wGW + AQkB/xAAAloBWAHACAABewFkAUwB7wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHvAUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXsBZAFMAe8BTAEjAQoB/wHhAb0BigH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8MAAMqAUAQAAHbAZYBCQH/AdsBlgEJ + Af8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wgAAXsBZAFMAe8B4QG9AYoB/wFMASMBCgH/ + AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BewFkAUwB7wHhAb0BigH/ + AUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wF7AWQBTAHv + AeEBvQGKAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/ + DAADKgFAMAABewFkAUwB7wHhAb0BigH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8BTAEjAQoB/wF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AUwBIwEKAf8B4QG9 + AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8MAAMqAUAQAAHbAZYBCQH/AdsBlgEJAf8B2wGW + AQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wgAAXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHS + Af8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B3QG5AYcB/wFSASkBEAH/AUwBIwEKAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8BewFkAUwB7wHhAb0BigH/AfoB6wHS + Af8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wHdAbkBhwH/AVIBKQEQAf8BTAEjAQoB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wF7AWQBTAHvAeEBvQGK + Af8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/Ad0BuQGHAf8BUgEpARAB/wFM + ASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/DAADKgFA + BAAB2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/xAAAloBWAHACAABewFkAUwB7wHhAb0BigH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B4QG9AYoB/wFMASMBCgH/AfoB6wHSAf8B5wHV + AbwB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/AXABTQE0Af8B+gHrAdIB/wF7AWQBTAHv + AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AUwBIwEKAf8B+gHr + AdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BcAFNATQB/wH6AesB0gH/ + AXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8BTAEj + AQoB/wH6AesB0gH/AecB1QG8Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wFwAU0BNAH/ + AfoB6wHSAf8MAAMqAUAQAAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGW + AQkB/wgAAXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wH6 + AesB0gH/AfoB6wHSAf8BewFkAUwB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wFM + ASMBCgH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6 + AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/DAADKgFAMAABewFkAUwB7wHhAb0BigH/AUwBIwEK + Af8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AdoBtgGEAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHvAeEBvQGK + Af8BTAEjAQoB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B2gG2AYQB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXsBZAFM + Ae8B4QG9AYoB/wFMASMBCgH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHaAbYBhAH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8IAAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/CAAB2wGWAQkB/wHbAZYBCQH/AdsBlgEJ + Af8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8IAAF7AWQBTAHvAeEBvQGKAf8BTAEjAQoB/wHpAcwBoQH/ + AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B9gHn + Ac4B/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXsBZAFMAe8B4QG9AYoB/wFMASMBCgH/ + AekBzAGhAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH2AecBzgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BewFkAUwB7wHhAb0BigH/ + AUwBIwEKAf8B6QHMAaEB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfYB5wHOAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wgAAdsBlgEJ + Af8IAAJaAVgBwAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/xAAAloBWAHACAABewFkAUwB7wHhAb0BigH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHv + AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ + AXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8IAAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/CAAB2wGWAQkB/wHbAZYBCQH/ + AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8MAAGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGo + AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQED + Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wQAAagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/ + AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFV + AQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/BAABqAFVAQMB/wGoAVUBAwH/AagBVQED + Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGo + AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf//AP8A/wADAAFCAU0BPgcAAT4DAAEo + AwABQAMAAUADAAEBAQABAQYAAQIWAAP/gQAG/wIAAfsD/wHHAfMCAAHyAf8BwAEBAd8B/QIAAeYB/wHA + AQEB2QEtAgABzAH/AcABAQH4AccCAAHAAf8BwAEBAfgBXwIAAcABfwH8AS8C/wIAAaABHwH8AQ8B4gED + AgAB6AEPAfQBDwHwAVMCAAH4AQcB8AEPAeABBwIAAf8BgQH6AR8B8AEHAgAB/wHwAfgB+wHYAT0CAAH/ + AfgB/gE7AdwBHQGAAQAC/wHnAfMBxwHxAfABBwb/AfABBwb/AfABBwz/Ab8B/wH8AZ8BgAEAAfwBHwHP + Af8B8wFnAgAB+wHvAfcB/wHvAfsCAAH3Af8B+wL/AfsCAAL3Af0B/wHfAf0CAAH/AfcB/gH/Ad8B/QIA + Af8BfwH/AX8BvwH7AgAB/wF/Af8BvwHfAf0CAAH3AXsB/wLfAf0CAAH7AX8B/wHvAf8B+wIAAf0BdwH/ + AfcB7wH7AYABAAH/Ac8B/wH7AvcF/wH7AfwBnwX/Af0B/wF/Gf8BAwGAAQABgAEAAYABAAHvAXsGAAHv + AQMGAAHvAf8GAAHvAQMGAAHoAXsGAAHvAQMGAAHvAf8GAAHDAQMGAAHYAXsGAAHDAQMBgAEAAYABAAGA + AQAY/ws= diff --git a/ToolLib.VisionJob/VisionJob.cs b/ToolLib.VisionJob/VisionJob.cs index 24595af..a58d489 100644 --- a/ToolLib.VisionJob/VisionJob.cs +++ b/ToolLib.VisionJob/VisionJob.cs @@ -267,7 +267,6 @@ namespace ToolLib.VisionJob TreeView tree = GetJobTree(); graph = tree.CreateGraphics(); tree.CreateGraphics().Dispose(); - foreach (KeyValuePair item in D_itemAndSource) { // 将此划线线程委托到JOB管理界面 diff --git a/ToolLib.VisionToolList/VisionToolList.cs b/ToolLib.VisionToolList/VisionToolList.cs index 680ef12..6f651a9 100644 --- a/ToolLib.VisionToolList/VisionToolList.cs +++ b/ToolLib.VisionToolList/VisionToolList.cs @@ -46,6 +46,7 @@ namespace VisionJobFactory public class FindLineToolInterface : IToolInfo { ToolIO inputImage = new ToolIO("InputImage", null, DataType.Image); + ToolIO inputPos = new ToolIO("InputPos", null, DataType.Pose); ToolIO outputXld = new ToolIO("outputXld", null, DataType.Line); ToolIO startPointRow = new ToolIO("StartPointRow", null, DataType.IntValue); ToolIO startPointColumn = new ToolIO("StartPointColumn", null, DataType.IntValue); @@ -59,7 +60,7 @@ namespace VisionJobFactory tool = new FindLine(); FormToolName = "FindLineTool.FormFindLine"; FormTool = null; - toolInput = new List() { inputImage }; + toolInput = new List() { inputImage, inputPos }; toolOutput = new List() { outputXld, startPointRow, startPointColumn, endPointRow, endPointColumn }; } /// @@ -75,6 +76,7 @@ namespace VisionJobFactory public class CaliperInterface : IToolInfo { ToolIO inputImage = new ToolIO("InputImage", null, DataType.Image); + ToolIO inputPos = new ToolIO("InputPos", null, DataType.Pose); ToolIO inputCenterRow = new ToolIO("inputCenterRow", null, DataType.IntValue); ToolIO inputCenterColumn = new ToolIO("inputCenterColumn", null, DataType.IntValue); ToolIO inputPhi = new ToolIO("inputPhi", null, DataType.IntValue); @@ -88,7 +90,7 @@ namespace VisionJobFactory tool = new Caliper(); FormToolName = "CaliperTool.FormCaliper"; FormTool = null; - toolInput = new List() { inputImage, inputCenterRow, inputCenterColumn, inputPhi }; + toolInput = new List() { inputImage, inputCenterRow, inputCenterColumn, inputPhi , inputPos }; toolOutput = new List() { outputCenterRow, outputCenterColumn }; } /// @@ -112,6 +114,10 @@ namespace VisionJobFactory { ToolIO inputImage = new ToolIO("InputImage", null, DataType.Image); ToolIO outPose = new ToolIO("GetPose", null, DataType.Pose); + ToolIO outPoseX = new ToolIO("GetPose.X", null, DataType.IntValue); + ToolIO outPoseY = new ToolIO("GetPose.Y", null, DataType.IntValue); + ToolIO outPoseR = new ToolIO("GetPose.Z", null, DataType.DoubleValue); + ToolIO outPoseScore = new ToolIO("GetPose.Score", null, DataType.DoubleValue); public PMAlignToolToolInterface(string toolName) { enable = true; @@ -121,7 +127,8 @@ namespace VisionJobFactory FormToolName = "PMAlignTool.FormPMAlignTool"; FormTool = null; toolInput = new List() { inputImage }; - toolOutput = new List() { outPose }; + toolOutput = new List() { outPose, outPoseX, outPoseY, outPoseR, outPoseScore }; + } /// /// 只获取选择工具的描述信息 diff --git a/VisionEdit/VisionEdit.csproj b/VisionEdit/VisionEdit.csproj index 6ae89cd..b03d528 100644 --- a/VisionEdit/VisionEdit.csproj +++ b/VisionEdit/VisionEdit.csproj @@ -32,6 +32,10 @@ prompt 4 + + + + False @@ -151,6 +155,9 @@ + + +