diff --git a/.gitignore b/.gitignore
index 3e759b7..1f7a27e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,9 @@
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+# SVN
+.svn*
+
# User-specific files
*.suo
*.user
diff --git a/Config.cs b/Config.cs
new file mode 100644
index 0000000..5ff1e48
--- /dev/null
+++ b/Config.cs
@@ -0,0 +1,59 @@
+using Microsoft.WindowsAPICodePack.Dialogs;
+using System;
+using System.IO;
+
+namespace SystemTrayMenu
+{
+ public class Config
+ {
+ public static string Language = "en";
+
+ public static string Path
+ {
+ get
+ {
+ return Properties.Settings.Default.PathDirectory;
+ }
+ }
+
+ public static bool LoadOrSetByUser()
+ {
+ bool pathOK = Directory.Exists(
+ Properties.Settings.Default.PathDirectory);
+ if (!pathOK)
+ {
+ pathOK = SetFolderByUser();
+ }
+ return pathOK;
+ }
+
+ public static bool SetFolderByUser()
+ {
+ bool pathOK = false;
+ bool userAborted = false;
+ CommonOpenFileDialog dialog = new CommonOpenFileDialog();
+ dialog.InitialDirectory = Path;
+ dialog.IsFolderPicker = true;
+ do
+ {
+ if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
+ {
+ if (Directory.Exists(dialog.FileName))
+ {
+ pathOK = true;
+ Properties.Settings.Default.PathDirectory =
+ dialog.FileName;
+ Properties.Settings.Default.Save();
+ }
+ }
+ else
+ {
+ userAborted = true;
+ }
+ }
+ while (!pathOK && !userAborted);
+
+ return pathOK;
+ }
+ }
+}
diff --git a/Controls/AboutBox.Designer.cs b/Controls/AboutBox.Designer.cs
new file mode 100644
index 0000000..bd3ca39
--- /dev/null
+++ b/Controls/AboutBox.Designer.cs
@@ -0,0 +1,526 @@
+namespace SystemTrayMenu.Controls
+{
+ partial class AboutBox
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox));
+ this.buttonDetails = new System.Windows.Forms.Button();
+ this.ImagePictureBox = new System.Windows.Forms.PictureBox();
+ this.AppDateLabel = new System.Windows.Forms.Label();
+ this.buttonSystemInfo = new System.Windows.Forms.Button();
+ this.AppCopyrightLabel = new System.Windows.Forms.Label();
+ this.AppVersionLabel = new System.Windows.Forms.Label();
+ this.AppDescriptionLabel = new System.Windows.Forms.Label();
+ this.GroupBox1 = new System.Windows.Forms.GroupBox();
+ this.AppTitleLabel = new System.Windows.Forms.Label();
+ this.buttonOk = new System.Windows.Forms.Button();
+ this.MoreRichTextBox = new System.Windows.Forms.RichTextBox();
+ this.TabPanelDetails = new System.Windows.Forms.TabControl();
+ this.TabPageApplication = new System.Windows.Forms.TabPage();
+ this.AppInfoListView = new System.Windows.Forms.ListView();
+ this.colKey = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.colValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.TabPageAssemblies = new System.Windows.Forms.TabPage();
+ this.AssemblyInfoListView = new System.Windows.Forms.ListView();
+ this.colAssemblyName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.colAssemblyVersion = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.colAssemblyBuilt = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.colAssemblyCodeBase = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.TabPageAssemblyDetails = new System.Windows.Forms.TabPage();
+ this.AssemblyDetailsListView = new System.Windows.Forms.ListView();
+ this.ColumnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.ColumnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.AssemblyNamesComboBox = new System.Windows.Forms.ComboBox();
+ this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+ this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel();
+ this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
+ this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
+ ((System.ComponentModel.ISupportInitialize)(this.ImagePictureBox)).BeginInit();
+ this.TabPanelDetails.SuspendLayout();
+ this.TabPageApplication.SuspendLayout();
+ this.TabPageAssemblies.SuspendLayout();
+ this.TabPageAssemblyDetails.SuspendLayout();
+ this.tableLayoutPanel1.SuspendLayout();
+ this.tableLayoutPanel4.SuspendLayout();
+ this.tableLayoutPanel2.SuspendLayout();
+ this.tableLayoutPanel3.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // buttonDetails
+ //
+ this.buttonDetails.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.buttonDetails.AutoSize = true;
+ this.buttonDetails.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.buttonDetails.Location = new System.Drawing.Point(148, 5);
+ this.buttonDetails.Margin = new System.Windows.Forms.Padding(5);
+ this.buttonDetails.MinimumSize = new System.Drawing.Size(133, 40);
+ this.buttonDetails.Name = "buttonDetails";
+ this.buttonDetails.Size = new System.Drawing.Size(133, 40);
+ this.buttonDetails.TabIndex = 25;
+ this.buttonDetails.Text = "Details";
+ this.buttonDetails.Click += new System.EventHandler(this.DetailsButton_Click);
+ //
+ // ImagePictureBox
+ //
+ this.ImagePictureBox.BackgroundImage = global::SystemTrayMenu.Properties.Resources.STM;
+ this.ImagePictureBox.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
+ this.ImagePictureBox.Location = new System.Drawing.Point(5, 5);
+ this.ImagePictureBox.Margin = new System.Windows.Forms.Padding(5);
+ this.ImagePictureBox.Name = "ImagePictureBox";
+ this.ImagePictureBox.Size = new System.Drawing.Size(68, 63);
+ this.ImagePictureBox.TabIndex = 24;
+ this.ImagePictureBox.TabStop = false;
+ //
+ // AppDateLabel
+ //
+ this.AppDateLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.AppDateLabel.AutoSize = true;
+ this.AppDateLabel.Location = new System.Drawing.Point(5, 140);
+ this.AppDateLabel.Margin = new System.Windows.Forms.Padding(5);
+ this.AppDateLabel.Name = "AppDateLabel";
+ this.AppDateLabel.Size = new System.Drawing.Size(668, 25);
+ this.AppDateLabel.TabIndex = 23;
+ this.AppDateLabel.Text = "Built on %builddate%";
+ //
+ // buttonSystemInfo
+ //
+ this.buttonSystemInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.buttonSystemInfo.AutoSize = true;
+ this.buttonSystemInfo.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.buttonSystemInfo.Location = new System.Drawing.Point(5, 5);
+ this.buttonSystemInfo.Margin = new System.Windows.Forms.Padding(5);
+ this.buttonSystemInfo.MinimumSize = new System.Drawing.Size(133, 40);
+ this.buttonSystemInfo.Name = "buttonSystemInfo";
+ this.buttonSystemInfo.Size = new System.Drawing.Size(133, 40);
+ this.buttonSystemInfo.TabIndex = 22;
+ this.buttonSystemInfo.Text = "System Info";
+ this.buttonSystemInfo.Visible = false;
+ this.buttonSystemInfo.Click += new System.EventHandler(this.SysInfoButton_Click);
+ //
+ // AppCopyrightLabel
+ //
+ this.AppCopyrightLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.AppCopyrightLabel.AutoSize = true;
+ this.AppCopyrightLabel.Location = new System.Drawing.Point(5, 175);
+ this.AppCopyrightLabel.Margin = new System.Windows.Forms.Padding(5);
+ this.AppCopyrightLabel.Name = "AppCopyrightLabel";
+ this.AppCopyrightLabel.Size = new System.Drawing.Size(668, 25);
+ this.AppCopyrightLabel.TabIndex = 21;
+ this.AppCopyrightLabel.Text = "Copyright © %year%, %company%";
+ //
+ // AppVersionLabel
+ //
+ this.AppVersionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.AppVersionLabel.AutoSize = true;
+ this.AppVersionLabel.Location = new System.Drawing.Point(5, 105);
+ this.AppVersionLabel.Margin = new System.Windows.Forms.Padding(5);
+ this.AppVersionLabel.Name = "AppVersionLabel";
+ this.AppVersionLabel.Size = new System.Drawing.Size(668, 25);
+ this.AppVersionLabel.TabIndex = 20;
+ this.AppVersionLabel.Text = "Version %version%";
+ //
+ // AppDescriptionLabel
+ //
+ this.AppDescriptionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.AppDescriptionLabel.AutoSize = true;
+ this.AppDescriptionLabel.Location = new System.Drawing.Point(5, 40);
+ this.AppDescriptionLabel.Margin = new System.Windows.Forms.Padding(5);
+ this.AppDescriptionLabel.Name = "AppDescriptionLabel";
+ this.AppDescriptionLabel.Size = new System.Drawing.Size(142, 25);
+ this.AppDescriptionLabel.TabIndex = 19;
+ this.AppDescriptionLabel.Text = "%description%";
+ //
+ // GroupBox1
+ //
+ this.GroupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.GroupBox1.Location = new System.Drawing.Point(5, 91);
+ this.GroupBox1.Margin = new System.Windows.Forms.Padding(5);
+ this.GroupBox1.Name = "GroupBox1";
+ this.GroupBox1.Padding = new System.Windows.Forms.Padding(5);
+ this.GroupBox1.Size = new System.Drawing.Size(668, 4);
+ this.GroupBox1.TabIndex = 18;
+ this.GroupBox1.TabStop = false;
+ this.GroupBox1.Text = "GroupBox1";
+ //
+ // AppTitleLabel
+ //
+ this.AppTitleLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.AppTitleLabel.AutoSize = true;
+ this.AppTitleLabel.Location = new System.Drawing.Point(5, 5);
+ this.AppTitleLabel.Margin = new System.Windows.Forms.Padding(5);
+ this.AppTitleLabel.Name = "AppTitleLabel";
+ this.AppTitleLabel.Size = new System.Drawing.Size(142, 25);
+ this.AppTitleLabel.TabIndex = 17;
+ this.AppTitleLabel.Text = "%title%";
+ //
+ // buttonOk
+ //
+ this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.buttonOk.AutoSize = true;
+ this.buttonOk.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.buttonOk.Location = new System.Drawing.Point(291, 5);
+ this.buttonOk.Margin = new System.Windows.Forms.Padding(5);
+ this.buttonOk.MinimumSize = new System.Drawing.Size(133, 40);
+ this.buttonOk.Name = "buttonOk";
+ this.buttonOk.Size = new System.Drawing.Size(133, 40);
+ this.buttonOk.TabIndex = 16;
+ this.buttonOk.Text = "OK";
+ //
+ // MoreRichTextBox
+ //
+ this.MoreRichTextBox.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.MoreRichTextBox.BackColor = System.Drawing.SystemColors.ControlLight;
+ this.MoreRichTextBox.Location = new System.Drawing.Point(5, 210);
+ this.MoreRichTextBox.Margin = new System.Windows.Forms.Padding(5);
+ this.MoreRichTextBox.Name = "MoreRichTextBox";
+ this.MoreRichTextBox.ReadOnly = true;
+ this.MoreRichTextBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical;
+ this.MoreRichTextBox.Size = new System.Drawing.Size(668, 210);
+ this.MoreRichTextBox.TabIndex = 26;
+ this.MoreRichTextBox.Text = "%product% is %copyright%, %trademark%";
+ this.MoreRichTextBox.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.MoreRichTextBox_LinkClicked);
+ //
+ // TabPanelDetails
+ //
+ this.TabPanelDetails.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.TabPanelDetails.Controls.Add(this.TabPageApplication);
+ this.TabPanelDetails.Controls.Add(this.TabPageAssemblies);
+ this.TabPanelDetails.Controls.Add(this.TabPageAssemblyDetails);
+ this.TabPanelDetails.Location = new System.Drawing.Point(5, 430);
+ this.TabPanelDetails.Margin = new System.Windows.Forms.Padding(5);
+ this.TabPanelDetails.Name = "TabPanelDetails";
+ this.TabPanelDetails.SelectedIndex = 0;
+ this.TabPanelDetails.Size = new System.Drawing.Size(668, 219);
+ this.TabPanelDetails.TabIndex = 27;
+ this.TabPanelDetails.Visible = false;
+ this.TabPanelDetails.SelectedIndexChanged += new System.EventHandler(this.TabPanelDetails_SelectedIndexChanged);
+ //
+ // TabPageApplication
+ //
+ this.TabPageApplication.Controls.Add(this.AppInfoListView);
+ this.TabPageApplication.Location = new System.Drawing.Point(4, 33);
+ this.TabPageApplication.Margin = new System.Windows.Forms.Padding(5);
+ this.TabPageApplication.Name = "TabPageApplication";
+ this.TabPageApplication.Size = new System.Drawing.Size(660, 182);
+ this.TabPageApplication.TabIndex = 0;
+ this.TabPageApplication.Text = "Application";
+ //
+ // AppInfoListView
+ //
+ this.AppInfoListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.colKey,
+ this.colValue});
+ this.AppInfoListView.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.AppInfoListView.FullRowSelect = true;
+ this.AppInfoListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
+ this.AppInfoListView.Location = new System.Drawing.Point(0, 0);
+ this.AppInfoListView.Margin = new System.Windows.Forms.Padding(5);
+ this.AppInfoListView.Name = "AppInfoListView";
+ this.AppInfoListView.Size = new System.Drawing.Size(660, 182);
+ this.AppInfoListView.TabIndex = 16;
+ this.AppInfoListView.UseCompatibleStateImageBehavior = false;
+ this.AppInfoListView.View = System.Windows.Forms.View.Details;
+ //
+ // colKey
+ //
+ this.colKey.Text = "Application Key";
+ this.colKey.Width = 120;
+ //
+ // colValue
+ //
+ this.colValue.Text = "Value";
+ this.colValue.Width = 700;
+ //
+ // TabPageAssemblies
+ //
+ this.TabPageAssemblies.Controls.Add(this.AssemblyInfoListView);
+ this.TabPageAssemblies.Location = new System.Drawing.Point(4, 33);
+ this.TabPageAssemblies.Margin = new System.Windows.Forms.Padding(5);
+ this.TabPageAssemblies.Name = "TabPageAssemblies";
+ this.TabPageAssemblies.Size = new System.Drawing.Size(660, 182);
+ this.TabPageAssemblies.TabIndex = 1;
+ this.TabPageAssemblies.Text = "Assemblies";
+ //
+ // AssemblyInfoListView
+ //
+ this.AssemblyInfoListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.colAssemblyName,
+ this.colAssemblyVersion,
+ this.colAssemblyBuilt,
+ this.colAssemblyCodeBase});
+ this.AssemblyInfoListView.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.AssemblyInfoListView.FullRowSelect = true;
+ this.AssemblyInfoListView.Location = new System.Drawing.Point(0, 0);
+ this.AssemblyInfoListView.Margin = new System.Windows.Forms.Padding(5);
+ this.AssemblyInfoListView.MultiSelect = false;
+ this.AssemblyInfoListView.Name = "AssemblyInfoListView";
+ this.AssemblyInfoListView.Size = new System.Drawing.Size(660, 182);
+ this.AssemblyInfoListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
+ this.AssemblyInfoListView.TabIndex = 13;
+ this.AssemblyInfoListView.UseCompatibleStateImageBehavior = false;
+ this.AssemblyInfoListView.View = System.Windows.Forms.View.Details;
+ this.AssemblyInfoListView.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.AssemblyInfoListView_ColumnClick);
+ this.AssemblyInfoListView.DoubleClick += new System.EventHandler(this.AssemblyInfoListView_DoubleClick);
+ //
+ // colAssemblyName
+ //
+ this.colAssemblyName.Text = "Assembly";
+ this.colAssemblyName.Width = 123;
+ //
+ // colAssemblyVersion
+ //
+ this.colAssemblyVersion.Text = "Version";
+ this.colAssemblyVersion.Width = 100;
+ //
+ // colAssemblyBuilt
+ //
+ this.colAssemblyBuilt.Text = "Built";
+ this.colAssemblyBuilt.Width = 130;
+ //
+ // colAssemblyCodeBase
+ //
+ this.colAssemblyCodeBase.Text = "CodeBase";
+ this.colAssemblyCodeBase.Width = 750;
+ //
+ // TabPageAssemblyDetails
+ //
+ this.TabPageAssemblyDetails.Controls.Add(this.AssemblyDetailsListView);
+ this.TabPageAssemblyDetails.Controls.Add(this.AssemblyNamesComboBox);
+ this.TabPageAssemblyDetails.Location = new System.Drawing.Point(4, 33);
+ this.TabPageAssemblyDetails.Margin = new System.Windows.Forms.Padding(5);
+ this.TabPageAssemblyDetails.Name = "TabPageAssemblyDetails";
+ this.TabPageAssemblyDetails.Size = new System.Drawing.Size(660, 182);
+ this.TabPageAssemblyDetails.TabIndex = 2;
+ this.TabPageAssemblyDetails.Text = "Assembly Details";
+ //
+ // AssemblyDetailsListView
+ //
+ this.AssemblyDetailsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.ColumnHeader1,
+ this.ColumnHeader2});
+ this.AssemblyDetailsListView.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.AssemblyDetailsListView.FullRowSelect = true;
+ this.AssemblyDetailsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
+ this.AssemblyDetailsListView.Location = new System.Drawing.Point(0, 32);
+ this.AssemblyDetailsListView.Margin = new System.Windows.Forms.Padding(5);
+ this.AssemblyDetailsListView.Name = "AssemblyDetailsListView";
+ this.AssemblyDetailsListView.Size = new System.Drawing.Size(660, 150);
+ this.AssemblyDetailsListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
+ this.AssemblyDetailsListView.TabIndex = 19;
+ this.AssemblyDetailsListView.UseCompatibleStateImageBehavior = false;
+ this.AssemblyDetailsListView.View = System.Windows.Forms.View.Details;
+ //
+ // ColumnHeader1
+ //
+ this.ColumnHeader1.Text = "Assembly Key";
+ this.ColumnHeader1.Width = 120;
+ //
+ // ColumnHeader2
+ //
+ this.ColumnHeader2.Text = "Value";
+ this.ColumnHeader2.Width = 700;
+ //
+ // AssemblyNamesComboBox
+ //
+ this.AssemblyNamesComboBox.Dock = System.Windows.Forms.DockStyle.Top;
+ this.AssemblyNamesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.AssemblyNamesComboBox.Location = new System.Drawing.Point(0, 0);
+ this.AssemblyNamesComboBox.Margin = new System.Windows.Forms.Padding(5);
+ this.AssemblyNamesComboBox.Name = "AssemblyNamesComboBox";
+ this.AssemblyNamesComboBox.Size = new System.Drawing.Size(660, 32);
+ this.AssemblyNamesComboBox.Sorted = true;
+ this.AssemblyNamesComboBox.TabIndex = 18;
+ this.AssemblyNamesComboBox.SelectedIndexChanged += new System.EventHandler(this.AssemblyNamesComboBox_SelectedIndexChanged);
+ //
+ // tableLayoutPanel1
+ //
+ this.tableLayoutPanel1.AutoSize = true;
+ this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.tableLayoutPanel1.ColumnCount = 1;
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel4, 0, 8);
+ this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 0);
+ this.tableLayoutPanel1.Controls.Add(this.AppCopyrightLabel, 0, 4);
+ this.tableLayoutPanel1.Controls.Add(this.AppDateLabel, 0, 3);
+ this.tableLayoutPanel1.Controls.Add(this.GroupBox1, 0, 1);
+ this.tableLayoutPanel1.Controls.Add(this.TabPanelDetails, 0, 7);
+ this.tableLayoutPanel1.Controls.Add(this.MoreRichTextBox, 0, 6);
+ this.tableLayoutPanel1.Controls.Add(this.AppVersionLabel, 0, 2);
+ this.tableLayoutPanel1.Location = new System.Drawing.Point(16, 12);
+ this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(4);
+ this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+ this.tableLayoutPanel1.RowCount = 9;
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel1.Size = new System.Drawing.Size(678, 712);
+ this.tableLayoutPanel1.TabIndex = 28;
+ //
+ // tableLayoutPanel4
+ //
+ this.tableLayoutPanel4.AutoSize = true;
+ this.tableLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.tableLayoutPanel4.ColumnCount = 3;
+ this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.tableLayoutPanel4.Controls.Add(this.buttonSystemInfo, 0, 0);
+ this.tableLayoutPanel4.Controls.Add(this.buttonDetails, 1, 0);
+ this.tableLayoutPanel4.Controls.Add(this.buttonOk, 2, 0);
+ this.tableLayoutPanel4.Location = new System.Drawing.Point(4, 658);
+ this.tableLayoutPanel4.Margin = new System.Windows.Forms.Padding(4);
+ this.tableLayoutPanel4.Name = "tableLayoutPanel4";
+ this.tableLayoutPanel4.RowCount = 1;
+ this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel4.Size = new System.Drawing.Size(429, 50);
+ this.tableLayoutPanel4.TabIndex = 29;
+ //
+ // tableLayoutPanel2
+ //
+ this.tableLayoutPanel2.AutoSize = true;
+ this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.tableLayoutPanel2.ColumnCount = 2;
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 548F));
+ this.tableLayoutPanel2.Controls.Add(this.ImagePictureBox, 0, 0);
+ this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel3, 1, 0);
+ this.tableLayoutPanel2.Location = new System.Drawing.Point(4, 4);
+ this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(4);
+ this.tableLayoutPanel2.Name = "tableLayoutPanel2";
+ this.tableLayoutPanel2.RowCount = 1;
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel2.Size = new System.Drawing.Size(626, 78);
+ this.tableLayoutPanel2.TabIndex = 29;
+ //
+ // tableLayoutPanel3
+ //
+ this.tableLayoutPanel3.AutoSize = true;
+ this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.tableLayoutPanel3.ColumnCount = 1;
+ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.tableLayoutPanel3.Controls.Add(this.AppTitleLabel, 0, 0);
+ this.tableLayoutPanel3.Controls.Add(this.AppDescriptionLabel, 0, 1);
+ this.tableLayoutPanel3.Location = new System.Drawing.Point(82, 4);
+ this.tableLayoutPanel3.Margin = new System.Windows.Forms.Padding(4);
+ this.tableLayoutPanel3.Name = "tableLayoutPanel3";
+ this.tableLayoutPanel3.RowCount = 2;
+ this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel3.Size = new System.Drawing.Size(152, 70);
+ this.tableLayoutPanel3.TabIndex = 25;
+ //
+ // AboutBox
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(168F, 168F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
+ this.AutoSize = true;
+ this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.CancelButton = this.buttonOk;
+ this.ClientSize = new System.Drawing.Size(704, 861);
+ this.Controls.Add(this.tableLayoutPanel1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Margin = new System.Windows.Forms.Padding(5);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "AboutBox";
+ this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "About %title%";
+ this.Load += new System.EventHandler(this.AboutBox_Load);
+ this.Paint += new System.Windows.Forms.PaintEventHandler(this.AboutBox_Paint);
+ ((System.ComponentModel.ISupportInitialize)(this.ImagePictureBox)).EndInit();
+ this.TabPanelDetails.ResumeLayout(false);
+ this.TabPageApplication.ResumeLayout(false);
+ this.TabPageAssemblies.ResumeLayout(false);
+ this.TabPageAssemblyDetails.ResumeLayout(false);
+ this.tableLayoutPanel1.ResumeLayout(false);
+ this.tableLayoutPanel1.PerformLayout();
+ this.tableLayoutPanel4.ResumeLayout(false);
+ this.tableLayoutPanel4.PerformLayout();
+ this.tableLayoutPanel2.ResumeLayout(false);
+ this.tableLayoutPanel2.PerformLayout();
+ this.tableLayoutPanel3.ResumeLayout(false);
+ this.tableLayoutPanel3.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button buttonDetails;
+ private System.Windows.Forms.PictureBox ImagePictureBox;
+ private System.Windows.Forms.Label AppDateLabel;
+ private System.Windows.Forms.Button buttonSystemInfo;
+ private System.Windows.Forms.Label AppCopyrightLabel;
+ private System.Windows.Forms.Label AppVersionLabel;
+ private System.Windows.Forms.Label AppDescriptionLabel;
+ private System.Windows.Forms.GroupBox GroupBox1;
+ private System.Windows.Forms.Label AppTitleLabel;
+ private System.Windows.Forms.Button buttonOk;
+ internal System.Windows.Forms.RichTextBox MoreRichTextBox;
+ internal System.Windows.Forms.TabControl TabPanelDetails;
+ internal System.Windows.Forms.TabPage TabPageApplication;
+ internal System.Windows.Forms.ListView AppInfoListView;
+ internal System.Windows.Forms.ColumnHeader colKey;
+ internal System.Windows.Forms.ColumnHeader colValue;
+ internal System.Windows.Forms.TabPage TabPageAssemblies;
+ internal System.Windows.Forms.ListView AssemblyInfoListView;
+ internal System.Windows.Forms.ColumnHeader colAssemblyName;
+ internal System.Windows.Forms.ColumnHeader colAssemblyVersion;
+ internal System.Windows.Forms.ColumnHeader colAssemblyBuilt;
+ internal System.Windows.Forms.ColumnHeader colAssemblyCodeBase;
+ internal System.Windows.Forms.TabPage TabPageAssemblyDetails;
+ internal System.Windows.Forms.ListView AssemblyDetailsListView;
+ internal System.Windows.Forms.ColumnHeader ColumnHeader1;
+ internal System.Windows.Forms.ColumnHeader ColumnHeader2;
+ internal System.Windows.Forms.ComboBox AssemblyNamesComboBox;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4;
+ }
+}
\ No newline at end of file
diff --git a/Controls/AboutBox.cs b/Controls/AboutBox.cs
new file mode 100644
index 0000000..9be8f61
--- /dev/null
+++ b/Controls/AboutBox.cs
@@ -0,0 +1,846 @@
+using Microsoft.Win32;
+using System;
+using System.Collections.Specialized;
+using System.Drawing;
+using System.IO;
+using System.Reflection;
+using System.Text.RegularExpressions;
+using System.Windows.Forms;
+
+namespace SystemTrayMenu.Controls
+{
+ ///
+ /// Generic, self-contained About Box dialog
+ ///
+ ///
+ /// Jeff Atwood
+ /// http://www.codinghorror.com
+ /// converted to C# by Scott Ferguson
+ /// http://www.forestmoon.com
+ ///
+ public partial class AboutBox : Form
+ {
+ public AboutBox()
+ {
+ InitializeComponent();
+ buttonOk.Text = Program.Translate("buttonOk");
+ buttonDetails.Text = Program.Translate("buttonDetails");
+ buttonSystemInfo.Text = Program.Translate("buttonSystemInfo");
+ }
+
+ private bool _IsPainted = false;
+ private string _EntryAssemblyName;
+ private string _CallingAssemblyName;
+ private string _ExecutingAssemblyName;
+ private Assembly _EntryAssembly;
+ private NameValueCollection _EntryAssemblyAttribCollection;
+ private int _MinWindowHeight;
+
+ //
+ // returns the entry assembly for the current application domain
+ //
+ //
+ // This is usually read-only, but in some weird cases (Smart Client apps)
+ // you won't have an entry assembly, so you may want to set this manually.
+ //
+ public Assembly AppEntryAssembly
+ {
+ get
+ {
+ return _EntryAssembly;
+ }
+ set
+ {
+ _EntryAssembly = value;
+ }
+ }
+
+ //
+ // single line of text to show in the application title section of the about box dialog
+ //
+ //
+ // defaults to "%title%"
+ // %title% = Assembly: AssemblyTitle
+ //
+ public string AppTitle
+ {
+ get
+ {
+ return AppTitleLabel.Text;
+ }
+ set
+ {
+ AppTitleLabel.Text = value;
+ }
+ }
+
+ //
+ // single line of text to show in the description section of the about box dialog
+ //
+ //
+ // defaults to "%description%"
+ // %description% = Assembly: AssemblyDescription
+ //
+ public string AppDescription
+ {
+ get
+ {
+ return AppDescriptionLabel.Text;
+ }
+ set
+ {
+ if (value == "")
+ {
+ AppDescriptionLabel.Visible = false;
+ }
+ else
+ {
+ AppDescriptionLabel.Visible = true;
+ AppDescriptionLabel.Text = value;
+ }
+ }
+ }
+
+ //
+ // single line of text to show in the version section of the about dialog
+ //
+ //
+ // defaults to "Version %version%"
+ // %version% = Assembly: AssemblyVersion
+ //
+ public string AppVersion
+ {
+ get
+ {
+ return AppVersionLabel.Text;
+ }
+ set
+ {
+ if (value == "")
+ {
+ AppVersionLabel.Visible = false;
+ }
+ else
+ {
+ AppVersionLabel.Visible = true;
+ AppVersionLabel.Text = value;
+ }
+ }
+ }
+
+ //
+ // single line of text to show in the copyright section of the about dialog
+ //
+ //
+ // defaults to "Copyright © %year%, %company%"
+ // %company% = Assembly: AssemblyCompany
+ // %year% = current 4-digit year
+ //
+ public string AppCopyright
+ {
+ get
+ {
+ return AppCopyrightLabel.Text;
+ }
+ set
+ {
+ if (value == "")
+ {
+ AppCopyrightLabel.Visible = false;
+ }
+ else
+ {
+ AppCopyrightLabel.Visible = true;
+ AppCopyrightLabel.Text = value;
+ }
+ }
+ }
+
+ //
+ // intended for the default 32x32 application icon to appear in the upper left of the about dialog
+ //
+ //
+ // if you open this form using .ShowDialog(Owner), the icon can be derived from the owning form
+ //
+ public Image AppImage
+ {
+ get
+ {
+ return ImagePictureBox.Image;
+ }
+ set
+ {
+ ImagePictureBox.Image = value;
+ }
+ }
+
+ //
+ // multiple lines of miscellaneous text to show in rich text box
+ //
+ //
+ // defaults to "%product% is %copyright%, %trademark%"
+ // %product% = Assembly: AssemblyProduct
+ // %copyright% = Assembly: AssemblyCopyright
+ // %trademark% = Assembly: AssemblyTrademark
+ //
+ public string AppMoreInfo
+ {
+ get
+ {
+ return MoreRichTextBox.Text;
+ }
+ set
+ {
+ if (value == null || value == "")
+ {
+ MoreRichTextBox.Visible = false;
+ }
+ else
+ {
+ MoreRichTextBox.Visible = true;
+ MoreRichTextBox.Text = value;
+ }
+ }
+ }
+
+ //
+ // determines if the "Details" (advanced assembly details) button is shown
+ //
+ public bool AppDetailsButton
+ {
+ get
+ {
+ return buttonDetails.Visible;
+ }
+ set
+ {
+ buttonDetails.Visible = value;
+ }
+ }
+
+ //
+ // exception-safe retrieval of LastWriteTime for this assembly.
+ //
+ // File.GetLastWriteTime, or DateTime.MaxValue if exception was encountered.
+ private DateTime AssemblyLastWriteTime(Assembly a)
+ {
+ if (a.Location == null || a.Location == "")
+ return DateTime.MaxValue;
+ try
+ {
+ return File.GetLastWriteTime(a.Location);
+ }
+ catch (Exception)
+ {
+ return DateTime.MaxValue;
+ }
+ }
+
+ //
+ // returns DateTime this Assembly was last built. Will attempt to calculate from build number, if possible.
+ // If not, the actual LastWriteTime on the assembly file will be returned.
+ //
+ // Assembly to get build date for
+ // Don't attempt to use the build number to calculate the date
+ // DateTime this assembly was last built
+ private DateTime AssemblyBuildDate(Assembly a, bool ForceFileDate)
+ {
+ Version AssemblyVersion = a.GetName().Version;
+ DateTime dt;
+
+ if (ForceFileDate)
+ {
+ dt = AssemblyLastWriteTime(a);
+ }
+ else
+ {
+ dt = DateTime.Parse("01/01/2000").AddDays(AssemblyVersion.Build).AddSeconds(AssemblyVersion.Revision * 2);
+ if (TimeZone.IsDaylightSavingTime(dt, TimeZone.CurrentTimeZone.GetDaylightChanges(dt.Year)))
+ {
+ dt = dt.AddHours(1);
+ }
+ if (dt > DateTime.Now || AssemblyVersion.Build < 730 || AssemblyVersion.Revision == 0)
+ {
+ dt = AssemblyLastWriteTime(a);
+ }
+ }
+
+ return dt;
+ }
+
+ //
+ // returns string name / string value pair of all attribs
+ // for specified assembly
+ //
+ //
+ // note that Assembly* values are pulled from AssemblyInfo file in project folder
+ //
+ // Trademark = AssemblyTrademark string
+ // Debuggable = true
+ // GUID = 7FDF68D5-8C6F-44C9-B391-117B5AFB5467
+ // CLSCompliant = true
+ // Product = AssemblyProduct string
+ // Copyright = AssemblyCopyright string
+ // Company = AssemblyCompany string
+ // Description = AssemblyDescription string
+ // Title = AssemblyTitle string
+ //
+ private NameValueCollection AssemblyAttribs(Assembly a)
+ {
+ string TypeName;
+ string Name;
+ string Value;
+ NameValueCollection nvc = new NameValueCollection();
+ Regex r = new Regex(@"(\.Assembly|\.)(?[^.]*)Attribute$", RegexOptions.IgnoreCase);
+
+ foreach (object attrib in a.GetCustomAttributes(false))
+ {
+ TypeName = attrib.GetType().ToString();
+ Name = r.Match(TypeName).Groups["Name"].ToString();
+ Value = "";
+ switch (TypeName)
+ {
+ case "System.CLSCompliantAttribute":
+ Value = ((CLSCompliantAttribute)attrib).IsCompliant.ToString(); break;
+ case "System.Diagnostics.DebuggableAttribute":
+ Value = ((System.Diagnostics.DebuggableAttribute)attrib).IsJITTrackingEnabled.ToString(); break;
+ case "System.Reflection.AssemblyCompanyAttribute":
+ Value = ((AssemblyCompanyAttribute)attrib).Company.ToString(); break;
+ case "System.Reflection.AssemblyConfigurationAttribute":
+ Value = ((AssemblyConfigurationAttribute)attrib).Configuration.ToString(); break;
+ case "System.Reflection.AssemblyCopyrightAttribute":
+ Value = ((AssemblyCopyrightAttribute)attrib).Copyright.ToString(); break;
+ case "System.Reflection.AssemblyDefaultAliasAttribute":
+ Value = ((AssemblyDefaultAliasAttribute)attrib).DefaultAlias.ToString(); break;
+ case "System.Reflection.AssemblyDelaySignAttribute":
+ Value = ((AssemblyDelaySignAttribute)attrib).DelaySign.ToString(); break;
+ case "System.Reflection.AssemblyDescriptionAttribute":
+ Value = ((AssemblyDescriptionAttribute)attrib).Description.ToString(); break;
+ case "System.Reflection.AssemblyInformationalVersionAttribute":
+ Value = ((AssemblyInformationalVersionAttribute)attrib).InformationalVersion.ToString(); break;
+ case "System.Reflection.AssemblyKeyFileAttribute":
+ Value = ((AssemblyKeyFileAttribute)attrib).KeyFile.ToString(); break;
+ case "System.Reflection.AssemblyProductAttribute":
+ Value = ((AssemblyProductAttribute)attrib).Product.ToString(); break;
+ case "System.Reflection.AssemblyTrademarkAttribute":
+ Value = ((AssemblyTrademarkAttribute)attrib).Trademark.ToString(); break;
+ case "System.Reflection.AssemblyTitleAttribute":
+ Value = ((AssemblyTitleAttribute)attrib).Title.ToString(); break;
+ case "System.Resources.NeutralResourcesLanguageAttribute":
+ Value = ((System.Resources.NeutralResourcesLanguageAttribute)attrib).CultureName.ToString(); break;
+ case "System.Resources.SatelliteContractVersionAttribute":
+ Value = ((System.Resources.SatelliteContractVersionAttribute)attrib).Version.ToString(); break;
+ case "System.Runtime.InteropServices.ComCompatibleVersionAttribute":
+ {
+ System.Runtime.InteropServices.ComCompatibleVersionAttribute x;
+ x = ((System.Runtime.InteropServices.ComCompatibleVersionAttribute)attrib);
+ Value = x.MajorVersion + "." + x.MinorVersion + "." + x.RevisionNumber + "." + x.BuildNumber; break;
+ }
+ case "System.Runtime.InteropServices.ComVisibleAttribute":
+ Value = ((System.Runtime.InteropServices.ComVisibleAttribute)attrib).Value.ToString(); break;
+ case "System.Runtime.InteropServices.GuidAttribute":
+ Value = ((System.Runtime.InteropServices.GuidAttribute)attrib).Value.ToString(); break;
+ case "System.Runtime.InteropServices.TypeLibVersionAttribute":
+ {
+ System.Runtime.InteropServices.TypeLibVersionAttribute x;
+ x = ((System.Runtime.InteropServices.TypeLibVersionAttribute)attrib);
+ Value = x.MajorVersion + "." + x.MinorVersion; break;
+ }
+ case "System.Security.AllowPartiallyTrustedCallersAttribute":
+ Value = "(Present)"; break;
+ default:
+ // debug.writeline("** unknown assembly attribute '" + TypeName + "'")
+ Value = TypeName; break;
+ }
+
+ if (nvc[Name] == null)
+ {
+ nvc.Add(Name, Value);
+ }
+ }
+
+ // add some extra values that are not in the AssemblyInfo, but nice to have
+ // codebase
+ try
+ {
+ nvc.Add("CodeBase", a.CodeBase.Replace("file:///", ""));
+ }
+ catch (NotSupportedException)
+ {
+ nvc.Add("CodeBase", "(not supported)");
+ }
+ // build date
+ DateTime dt = AssemblyBuildDate(a, false);
+ if (dt == DateTime.MaxValue)
+ {
+ nvc.Add("BuildDate", "(unknown)");
+ }
+ else
+ {
+ nvc.Add("BuildDate", dt.ToString("yyyy-MM-dd hh:mm tt"));
+ }
+ // location
+ try
+ {
+ nvc.Add("Location", a.Location);
+ }
+ catch (NotSupportedException)
+ {
+ nvc.Add("Location", "(not supported)");
+ }
+ // version
+ try
+ {
+ if (a.GetName().Version.Major == 0 && a.GetName().Version.Minor == 0)
+ {
+ nvc.Add("Version", "(unknown)");
+ }
+ else
+ {
+ nvc.Add("Version", a.GetName().Version.ToString());
+ }
+ }
+ catch (Exception)
+ {
+ nvc.Add("Version", "(unknown)");
+ }
+
+ nvc.Add("FullName", a.FullName);
+
+ return nvc;
+ }
+
+ //
+ // reads an HKLM Windows Registry key value
+ //
+ private string RegistryHklmValue(string KeyName, string SubKeyRef)
+ {
+ RegistryKey rk;
+ try
+ {
+ rk = Registry.LocalMachine.OpenSubKey(KeyName);
+ return (string)rk.GetValue(SubKeyRef, "");
+ }
+ catch (Exception)
+ {
+ return "";
+ }
+ }
+
+ //
+ // launch the MSInfo "system information" application (works on XP, 2003, and Vista)
+ //
+ private void ShowSysInfo()
+ {
+ string strSysInfoPath = "";
+
+ strSysInfoPath = RegistryHklmValue(@"SOFTWARE\Microsoft\Shared Tools Location", "MSINFO");
+ if (strSysInfoPath == "")
+ {
+ strSysInfoPath = RegistryHklmValue(@"SOFTWARE\Microsoft\Shared Tools\MSINFO", "PATH");
+ }
+
+ if (strSysInfoPath == "")
+ {
+ MessageBox.Show("System Information is unavailable at this time." +
+ Environment.NewLine +
+ Environment.NewLine +
+ "(couldn't find path for Microsoft System Information Tool in the registry.)",
+ Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ return;
+ }
+
+ try
+ {
+ System.Diagnostics.Process.Start(strSysInfoPath);
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("System Information is unavailable at this time." +
+ Environment.NewLine +
+ Environment.NewLine +
+ "(couldn't launch '" + strSysInfoPath + "')",
+ Text, MessageBoxButtons.OK, MessageBoxIcon.Stop);
+ }
+
+ }
+
+ //
+ // populate a listview with the specified key and value strings
+ //
+ private void Populate(ListView lvw, string Key, string Value)
+ {
+ if (Value == "")
+ return;
+ ListViewItem lvi = new ListViewItem();
+ lvi.Text = Key;
+ lvi.SubItems.Add(Value);
+ lvw.Items.Add(lvi);
+ }
+
+ //
+ // populates the Application Information listview
+ //
+ private void PopulateAppInfo()
+ {
+ AppDomain d = System.AppDomain.CurrentDomain;
+ Populate(AppInfoListView, "Application Name", d.SetupInformation.ApplicationName);
+ Populate(AppInfoListView, "Application Base", d.SetupInformation.ApplicationBase);
+ Populate(AppInfoListView, "Cache Path", d.SetupInformation.CachePath);
+ Populate(AppInfoListView, "Configuration File", d.SetupInformation.ConfigurationFile);
+ Populate(AppInfoListView, "Dynamic Base", d.SetupInformation.DynamicBase);
+ Populate(AppInfoListView, "Friendly Name", d.FriendlyName);
+ Populate(AppInfoListView, "License File", d.SetupInformation.LicenseFile);
+ Populate(AppInfoListView, "private Bin Path", d.SetupInformation.PrivateBinPath);
+ Populate(AppInfoListView, "Shadow Copy Directories", d.SetupInformation.ShadowCopyDirectories);
+ Populate(AppInfoListView, " ", " ");
+ Populate(AppInfoListView, "Entry Assembly", _EntryAssemblyName);
+ Populate(AppInfoListView, "Executing Assembly", _ExecutingAssemblyName);
+ Populate(AppInfoListView, "Calling Assembly", _CallingAssemblyName);
+ }
+
+ //
+ // populate Assembly Information listview with ALL assemblies
+ //
+ private void PopulateAssemblies()
+ {
+ foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
+ {
+ PopulateAssemblySummary(a);
+ }
+ AssemblyNamesComboBox.SelectedIndex = AssemblyNamesComboBox.FindStringExact(_EntryAssemblyName);
+ }
+
+ //
+ // populate Assembly Information listview with summary view for a specific assembly
+ //
+ private void PopulateAssemblySummary(Assembly a)
+ {
+ NameValueCollection nvc = AssemblyAttribs(a);
+
+ string strAssemblyName = a.GetName().Name;
+
+ ListViewItem lvi = new ListViewItem();
+ lvi.Text = strAssemblyName;
+ lvi.Tag = strAssemblyName;
+ if (strAssemblyName == _CallingAssemblyName)
+ {
+ lvi.Text += " (calling)";
+ }
+ if (strAssemblyName == _ExecutingAssemblyName)
+ {
+ lvi.Text += " (executing)";
+ }
+ if (strAssemblyName == _EntryAssemblyName)
+ {
+ lvi.Text += " (entry)";
+ }
+ lvi.SubItems.Add(nvc["version"]);
+ lvi.SubItems.Add(nvc["builddate"]);
+ lvi.SubItems.Add(nvc["codebase"]);
+ //lvi.SubItems.Add(AssemblyVersion(a))
+ //lvi.SubItems.Add(AssemblyBuildDatestring(a, true))
+ //lvi.SubItems.Add(AssemblyCodeBase(a))
+ AssemblyInfoListView.Items.Add(lvi);
+ AssemblyNamesComboBox.Items.Add(strAssemblyName);
+ }
+
+ //
+ // retrieves a cached value from the entry assembly attribute lookup collection
+ //
+ private string EntryAssemblyAttrib(string strName)
+ {
+ if (_EntryAssemblyAttribCollection[strName] == null)
+ {
+ return "";
+ }
+ else
+ {
+ return _EntryAssemblyAttribCollection[strName].ToString();
+ }
+ }
+
+ //
+ // Populate all the form labels with tokenized text
+ //
+ private void PopulateLabels()
+ {
+ // get entry assembly attribs
+ _EntryAssemblyAttribCollection = AssemblyAttribs(_EntryAssembly);
+
+ // set icon from parent, if present
+ if (Owner == null)
+ {
+ //ImagePictureBox.Visible = false;
+ //AppTitleLabel.Left = AppCopyrightLabel.Left;
+ //AppDescriptionLabel.Left = AppCopyrightLabel.Left;
+ }
+ else
+ {
+ Icon = Owner.Icon;
+ ImagePictureBox.Image = Icon.ToBitmap();
+ }
+ // replace all labels and window title
+ Text = ReplaceTokens(Text);
+ AppTitleLabel.Text = ReplaceTokens(AppTitleLabel.Text);
+ if (AppDescriptionLabel.Visible)
+ {
+ AppDescriptionLabel.Text = ReplaceTokens(AppDescriptionLabel.Text);
+ }
+ if (AppCopyrightLabel.Visible)
+ {
+ AppCopyrightLabel.Text = ReplaceTokens(AppCopyrightLabel.Text);
+ }
+ if (AppVersionLabel.Visible)
+ {
+ AppVersionLabel.Text = ReplaceTokens(AppVersionLabel.Text);
+ }
+ if (AppDateLabel.Visible)
+ {
+ AppDateLabel.Text = ReplaceTokens(AppDateLabel.Text);
+ }
+ if (MoreRichTextBox.Visible)
+ {
+ MoreRichTextBox.Text = ReplaceTokens(MoreRichTextBox.Text);
+ }
+ }
+
+ //
+ // perform assemblyinfo to string replacements on labels
+ //
+ private string ReplaceTokens(string s)
+ {
+ s = s.Replace("%title%", EntryAssemblyAttrib("title"));
+ s = s.Replace("%copyright%", EntryAssemblyAttrib("copyright"));
+ s = s.Replace("%description%", EntryAssemblyAttrib("description"));
+ s = s.Replace("%company%", EntryAssemblyAttrib("company"));
+ s = s.Replace("%product%", EntryAssemblyAttrib("product"));
+ s = s.Replace("%trademark%", EntryAssemblyAttrib("trademark"));
+ s = s.Replace("%year%", DateTime.Now.Year.ToString());
+ s = s.Replace("%version%", EntryAssemblyAttrib("version"));
+ s = s.Replace("%builddate%", EntryAssemblyAttrib("builddate"));
+ return s;
+ }
+
+ //
+ // populate details for a single assembly
+ //
+ private void PopulateAssemblyDetails(Assembly a, ListView lvw)
+ {
+ lvw.Items.Clear();
+
+ // this assembly property is only available in framework versions 1.1+
+ Populate(lvw, "Image Runtime Version", a.ImageRuntimeVersion);
+ Populate(lvw, "Loaded from GAC", a.GlobalAssemblyCache.ToString());
+
+ NameValueCollection nvc = AssemblyAttribs(a);
+ foreach (string strKey in nvc)
+ {
+ Populate(lvw, strKey, nvc[strKey]);
+ }
+ }
+
+ //
+ // matches assembly by Assembly.GetName.Name; returns nothing if no match
+ //
+ private Assembly MatchAssemblyByName(string AssemblyName)
+ {
+ foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
+ {
+ if (a.GetName().Name == AssemblyName)
+ {
+ return a;
+ }
+ }
+ return null;
+ }
+
+ //
+ // things to do when form is loaded
+ //
+ private void AboutBox_Load(object sender, EventArgs e)
+ {
+ // if the user didn't provide an assembly, try to guess which one is the entry assembly
+ if (_EntryAssembly == null)
+ {
+ _EntryAssembly = Assembly.GetEntryAssembly();
+ }
+ if (_EntryAssembly == null)
+ {
+ _EntryAssembly = Assembly.GetExecutingAssembly();
+ }
+
+ _ExecutingAssemblyName = Assembly.GetExecutingAssembly().GetName().Name;
+ _CallingAssemblyName = Assembly.GetCallingAssembly().GetName().Name;
+ try
+ {
+ // for web hosted apps, GetEntryAssembly = nothing
+ _EntryAssemblyName = Assembly.GetEntryAssembly().GetName().Name;
+ }
+ catch (Exception)
+ {
+ }
+
+ _MinWindowHeight = AppCopyrightLabel.Top + AppCopyrightLabel.Height + buttonOk.Height + 30;
+
+ TabPanelDetails.Visible = false;
+ if (!MoreRichTextBox.Visible)
+ {
+ Height = Height - MoreRichTextBox.Height;
+ }
+ }
+
+ //
+ // things to do when form is FIRST painted
+ //
+ private void AboutBox_Paint(object sender, PaintEventArgs e)
+ {
+ if (!_IsPainted)
+ {
+ _IsPainted = true;
+ Application.DoEvents();
+ Cursor.Current = Cursors.WaitCursor;
+ PopulateLabels();
+ Cursor.Current = Cursors.Default;
+ }
+ }
+
+ //
+ // expand about dialog to show additional advanced details
+ //
+ private void DetailsButton_Click(object sender, EventArgs e)
+ {
+ Cursor.Current = Cursors.WaitCursor;
+ buttonDetails.Visible = false;
+ SuspendLayout();
+ MaximizeBox = true;
+ FormBorderStyle = FormBorderStyle.Sizable;
+ TabPanelDetails.Dock = DockStyle.Fill;
+ tableLayoutPanel1.Dock = DockStyle.Fill;
+ this.AutoSize = false;
+ SizeGripStyle = SizeGripStyle.Show;
+ Size = new Size(580, Size.Height);
+ MoreRichTextBox.Visible = false;
+ TabPanelDetails.Visible = true;
+ buttonSystemInfo.Visible = true;
+ PopulateAssemblies();
+ PopulateAppInfo();
+ CenterToParent();
+ ResumeLayout();
+ Cursor.Current = Cursors.Default;
+ }
+
+ //
+ // for detailed system info, launch the external Microsoft system info app
+ //
+ private void SysInfoButton_Click(object sender, EventArgs e)
+ {
+ ShowSysInfo();
+ }
+
+ //
+ // if an assembly is double-clicked, go to the detail page for that assembly
+ //
+ private void AssemblyInfoListView_DoubleClick(object sender, EventArgs e)
+ {
+ string strAssemblyName;
+ if (AssemblyInfoListView.SelectedItems.Count > 0)
+ {
+ strAssemblyName = Convert.ToString(AssemblyInfoListView.SelectedItems[0].Tag);
+ AssemblyNamesComboBox.SelectedIndex = AssemblyNamesComboBox.FindStringExact(strAssemblyName);
+ TabPanelDetails.SelectedTab = TabPageAssemblyDetails;
+ }
+ }
+
+ //
+ // if a new assembly is selected from the combo box, show details for that assembly
+ //
+ private void AssemblyNamesComboBox_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ string strAssemblyName = Convert.ToString(AssemblyNamesComboBox.SelectedItem);
+ PopulateAssemblyDetails(MatchAssemblyByName(strAssemblyName), AssemblyDetailsListView);
+ }
+
+ //
+ // sort the assembly list by column
+ //
+ private void AssemblyInfoListView_ColumnClick(object sender, ColumnClickEventArgs e)
+ {
+ int intTargetCol = e.Column + 1;
+
+ if (AssemblyInfoListView.Tag != null)
+ {
+ if (Math.Abs(Convert.ToInt32(AssemblyInfoListView.Tag)) == intTargetCol)
+ {
+ intTargetCol = -Convert.ToInt32(AssemblyInfoListView.Tag);
+ }
+ }
+ AssemblyInfoListView.Tag = intTargetCol;
+ AssemblyInfoListView.ListViewItemSorter = new ListViewItemComparer(intTargetCol, true);
+ }
+
+ //
+ // launch any http:// or mailto: links clicked in the body of the rich text box
+ //
+ private void MoreRichTextBox_LinkClicked(object sender, LinkClickedEventArgs e)
+ {
+ try
+ {
+ System.Diagnostics.Process.Start(e.LinkText);
+ }
+ catch (Exception)
+ {
+ }
+ }
+
+ //
+ // things to do when the selected tab is changed
+ //
+ class ListViewItemComparer : System.Collections.IComparer
+ {
+ private int _intCol;
+ private bool _IsAscending = true;
+
+ public ListViewItemComparer()
+ {
+ _intCol = 0;
+ _IsAscending = true;
+ }
+
+ public ListViewItemComparer(int column, bool ascending)
+ {
+ if (column < 0)
+ {
+ _IsAscending = false;
+ }
+ else
+ {
+ _IsAscending = ascending;
+ }
+ _intCol = Math.Abs(column) - 1;
+ }
+
+ public int Compare(object x, object y)
+ {
+ int intResult =
+ string.Compare(((ListViewItem)x).SubItems[_intCol].Text, ((ListViewItem)y).SubItems[_intCol].Text);
+
+ if (_IsAscending)
+ {
+ return intResult;
+ }
+ else
+ {
+ return -intResult;
+ }
+ }
+ }
+
+ private void TabPanelDetails_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (TabPanelDetails.SelectedTab == TabPageAssemblyDetails)
+ AssemblyNamesComboBox.Focus();
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/Controls/AboutBox.resx b/Controls/AboutBox.resx
new file mode 100644
index 0000000..a04fa62
--- /dev/null
+++ b/Controls/AboutBox.resx
@@ -0,0 +1,377 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAAAwMAAAAQAgAKglAABGFQAAKAAAABAA
+ AAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAJAAAAcwEB
+ AXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsAAABzAAAACQAAAAEAAAABAAAACQAA
+ AHMBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AAAAcwAAAAkAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAACQAAAHUAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAdQAA
+ AAkAAAABAAAAAQAAAAkAAABzAAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAA
+ AHMAAAAJAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAkAAABzAQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEB
+ AXsBAQF7AQEBewAAAHMAAAAJAAAAAQAAAAEAAAAJAAAAcwEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEB
+ AXsBAQF7AQEBewEBAXsAAABzAAAACQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAHwAAANkBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AAAA2QAAAB8AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAfAAAA2QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUAAADZAAAAHwAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAAAAIQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAA
+ ACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAA
+ ACUAAAAhAAAABQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEBARsAAAC5AAAA0QAAANEAAADRAAAA0QAA
+ ANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAA
+ ANEAAADRAAAA0QAAALkBAQEbAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAQEBGwEBAbkAAADRAAAA0QAA
+ ANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAA
+ ANEAAADRAAAA0QAAANEAAADRAQEBuQEBARsAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAQEBIQEB
+ ASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEB
+ ASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQEhAAAABQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAfAAAA2QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUAAADZAAAAHwAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAB8AAADZAQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QAAANkAAAAfAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEA
+ IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUAAABdAQEBcQAA
+ AHEBAQFxAQEBcQAAAHEBAQFxAQEBcQAAAHEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEB
+ AXEAAABxAAAAcQEBAXEAAABxAQEBcQAAAHEBAQFxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQAA
+ AHEAAABxAQEBcQEBAV0AAAAVAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEB
+ AS8AAADTAAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAA
+ AP8AAAD/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8BAQH/AAAA/wEBAf8AAAD/AAAA/wEB
+ Af8BAQH/AAAA/wEBAf8BAQH/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQEBAS8AAADTAAAA/wEBAf8AAAD/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AQEB/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAAAP8AAAD/AAAA/wEB
+ Af8AAAD/AAAA/wEBAf8BAQH/AAAA/wEBAf8BAQH/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUAAABdAQEBcQEBAXEBAQFxAQEBcQEBAXEBAQFxAQEBcQEB
+ AXEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEAAABxAAAAcQEBAXEAAABxAQEBcQAA
+ AHEBAQFxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQEBAV0AAAAVAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAABcAAABhAQEBdwAAAHcBAQF3AAAAdwEBAXcBAQF3AAAAdwEBAXcAAAB3AAAAdwEB
+ AXcAAAB3AQEBdwAAAHcAAAB3AAAAdwEBAXcBAQF3AAAAdwAAAHcAAAB3AQEBdwAAAHcBAQF3AQEBdwAA
+ AHcBAQF3AQEBdwAAAHcBAQF3AQEBdwAAAHcBAQF3AQEBdwAAAGEAAAAXAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8AAADPAQEB+QEBAfkAAAD5AAAA+QEBAfkBAQH5AAAA+QAA
+ APkAAAD5AAAA+QAAAPkAAAD5AAAA+QEBAfkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkBAQH5AAAA+QAA
+ APkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QEBAc8AAAAvAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8AAADPAAAA+QAAAPkAAAD5AQEB+QAA
+ APkAAAD5AQEB+QEBAfkAAAD5AQEB+QAAAPkAAAD5AAAA+QEBAfkAAAD5AAAA+QEBAfkBAQH5AAAA+QEB
+ AfkBAQH5AAAA+QEBAfkAAAD5AAAA+QEBAfkAAAD5AAAA+QEBAfkBAQH5AQEB+QAAAPkBAQH5AQEB+QAA
+ AM8AAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEBARcAAABhAQEBdQEB
+ AXUBAQF1AAAAdQEBAXUBAQF1AAAAdQEBAXUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAA
+ AHUAAAB1AQEBdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAA
+ AHUAAAB1AAAAdQEBAWEBAQEXAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUBAQFdAQEBcQAAAHEBAQFxAQEBcQAA
+ AHEAAABxAQEBcQEBAXEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEBAQFxAAAAcQEB
+ AXEAAABxAQEBcQAAAHEBAQFxAAAAcQAAAHEBAQFxAQEBcQEBAXEBAQFxAQEBcQEBAXEAAABxAAAAcQEB
+ AV0AAAAVAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8BAQHTAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AC8AAADTAQEB/wAAAP8AAAD/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAdMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAABUBAQFdAQEBcQAAAHEBAQFxAQEBcQAAAHEAAABxAQEBcQEBAXEBAQFxAAAAcQAA
+ AHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEBAQFxAAAAcQEBAXEAAABxAQEBcQAAAHEBAQFxAAAAcQAA
+ AHEBAQFxAQEBcQEBAXEBAQFxAQEBcQEBAXEAAABxAAAAcQEBAV0AAAAVAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+
+
+
\ No newline at end of file
diff --git a/Controls/AppContextMenu.cs b/Controls/AppContextMenu.cs
new file mode 100644
index 0000000..369c74b
--- /dev/null
+++ b/Controls/AppContextMenu.cs
@@ -0,0 +1,258 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Drawing.Imaging;
+using System.Globalization;
+using System.Linq;
+using System.Reflection;
+using System.Windows.Forms;
+
+namespace SystemTrayMenu.Controls
+{
+ class AppContextMenu
+ {
+ public event EventHandler ClickedChangeFolder;
+ public event EventHandler ClickedOpenLog;
+ public event EventHandler ClickedRestart;
+ public event EventHandler ClickedExit;
+
+ public ContextMenuStrip Create()
+ {
+ ContextMenuStrip menu = new ContextMenuStrip();
+ menu.BackColor = SystemColors.Control;
+ ToolStripMenuItem changeFolder = new ToolStripMenuItem();
+ changeFolder.Text = Program.Translate("Folder");
+ changeFolder.Click += ChangeFolder_Click;
+ void ChangeFolder_Click(object sender, EventArgs e)
+ {
+ ClickedChangeFolder.Invoke();
+ }
+ menu.Items.Add(changeFolder);
+
+ ToolStripMenuItem changeLanguage = new ToolStripMenuItem()
+ {
+ Name = "changeLanguage",
+ Text = Program.Translate("Language")
+ };
+ foreach (CultureInfo cultureInfo in
+ GetCultureList(CultureTypes.AllCultures))
+ {
+ if (Program.Languages.Contains(cultureInfo.Name))
+ {
+ ToolStripItem language = changeLanguage.DropDownItems.
+ Add(Program.Translate(cultureInfo.EnglishName));
+ language.Click += Language_Click;
+ void Language_Click(object sender, EventArgs e)
+ {
+ string twoLetter = cultureInfo.Name.Substring(0, 2);
+ Properties.Settings.Default.CurrentCultureInfoName =
+ twoLetter;
+ Properties.Settings.Default.Save();
+ ClickedRestart.Invoke();
+ }
+ if (cultureInfo.Name == Properties.Settings.Default.
+ CurrentCultureInfoName)
+ {
+ language.Image = Properties.Resources.Selected;
+ language.ImageScaling = ToolStripItemImageScaling.None;
+ language.Image = ResizeImage(language.Image);
+ }
+ }
+ }
+ menu.Items.Add(changeLanguage);
+
+ ToolStripMenuItem autostart = new ToolStripMenuItem();
+ autostart.Text = Program.Translate("Autostart");
+ //autostart.Image.HorizontalResolution.wi.c.sc.Select .ImageScaling = ToolStripItemImageScaling.None;
+ if (Properties.Settings.Default.IsAutostartActivated)
+ {
+ autostart.Image = Properties.Resources.Selected;
+ }
+ else
+ {
+ autostart.Image = Properties.Resources.NotSelected;
+ }
+ autostart.ImageScaling = ToolStripItemImageScaling.None;
+ autostart.Image = ResizeImage(autostart.Image);
+ autostart.Click += Autostart_Click;
+ void Autostart_Click(object sender, EventArgs e)
+ {
+ if (Properties.Settings.Default.IsAutostartActivated)
+ {
+ Microsoft.Win32.RegistryKey key =
+ Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
+ @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
+ true);
+ key.DeleteValue("SystemTrayMenu", false);
+ Properties.Settings.Default.IsAutostartActivated = false;
+ }
+ else
+ {
+ Microsoft.Win32.RegistryKey key =
+ Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
+ @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
+ true);
+ key.SetValue(
+ Assembly.GetExecutingAssembly().GetName().Name,
+ Assembly.GetEntryAssembly().Location);
+ Properties.Settings.Default.IsAutostartActivated = true;
+ }
+ Properties.Settings.Default.Save();
+ ClickedRestart.Invoke();
+ }
+ menu.Items.Add(autostart);
+
+ ToolStripMenuItem hotKey = new ToolStripMenuItem();
+ string hotKeyText =
+ $"{Program.Translate("CTRL")} + " +
+ $"{Program.Translate("ALT")} + ";
+
+ hotKey.ImageScaling = ToolStripItemImageScaling.SizeToFit;
+ if (string.IsNullOrEmpty(Properties.Settings.Default.HotKey))
+ {
+ hotKey.Image = Properties.Resources.NotSelected;
+ hotKey.Text = hotKeyText + "? ";
+ }
+ else
+ {
+ hotKey.Image = Properties.Resources.Selected;
+ hotKey.Text = hotKeyText +
+ $"{Properties.Settings.Default.HotKey}";
+ }
+ hotKey.ImageScaling = ToolStripItemImageScaling.None;
+ hotKey.Image = ResizeImage(hotKey.Image);
+ hotKey.Click += HotKey_Click;
+ void HotKey_Click(object sender, EventArgs e)
+ {
+ AskHotKeyForm askHotKey = new AskHotKeyForm();
+ if (askHotKey.ShowDialog() == DialogResult.OK)
+ {
+ Properties.Settings.Default.HotKey = askHotKey.NewHotKey;
+ Properties.Settings.Default.Save();
+ ClickedRestart?.Invoke();
+ }
+ }
+ menu.Items.Add(hotKey);
+
+ ToolStripSeparator seperator = new ToolStripSeparator();
+ seperator.BackColor = SystemColors.Control;
+ menu.Items.Add(seperator);
+
+ ToolStripMenuItem openLog = new ToolStripMenuItem();
+ openLog.Text = Program.Translate("Log File");
+ openLog.Click += OpenLog_Click;
+ void OpenLog_Click(object sender, EventArgs e)
+ {
+ ClickedOpenLog.Invoke();
+ }
+ menu.Items.Add(openLog);
+
+ menu.Items.Add(new ToolStripSeparator());
+
+ ToolStripMenuItem about = new ToolStripMenuItem();
+ about.Text = Program.Translate("About");
+ about.Click += About_Click;
+ void About_Click(object sender, EventArgs e)
+ {
+ FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(
+ Assembly.GetEntryAssembly().Location);
+ AboutBox ab = new AboutBox();
+ ab.AppTitle = versionInfo.ProductName;
+ ab.AppDescription = versionInfo.FileDescription;
+ ab.AppVersion = $"Version {versionInfo.FileVersion}";
+ ab.AppCopyright = versionInfo.LegalCopyright;
+ ab.AppMoreInfo = "SystemTrayMenu - An improved Windows Toolbar";
+ ab.AppMoreInfo += Environment.NewLine;
+ ab.AppMoreInfo += "Code from © 2019, TAMAHO, All Rights Reserved.";
+ ab.AppMoreInfo += Environment.NewLine;
+ ab.AppMoreInfo += "Developer:";
+ ab.AppMoreInfo += Environment.NewLine;
+ ab.AppMoreInfo += "Markus Hofknecht (mailto:Markus@Hofknecht.eu)";
+ ab.AppMoreInfo += Environment.NewLine;
+ ab.AppMoreInfo += "Tanja Kauth (Tanja@Hofknecht.eu)";
+ ab.AppMoreInfo += Environment.NewLine;
+ ab.AppMoreInfo += Environment.NewLine;
+ ab.AppMoreInfo += "http://www.hofknecht.eu/systemtraymenu/" + Environment.NewLine;
+ ab.AppDetailsButton = true;
+ ab.ShowDialog();
+ }
+ menu.Items.Add(about);
+
+ menu.Items.Add(new ToolStripSeparator());
+
+ ToolStripMenuItem restart = new ToolStripMenuItem();
+ restart.Text = Program.Translate("Restart");
+ restart.Click += Restart_Click;
+ void Restart_Click(object sender, EventArgs e)
+ {
+ ClickedRestart.Invoke();
+ }
+ menu.Items.Add(restart);
+
+ ToolStripMenuItem exit = new ToolStripMenuItem();
+ exit.Text = Program.Translate("Exit");
+ exit.Click += Exit_Click;
+ void Exit_Click(object sender, EventArgs e)
+ {
+ ClickedExit.Invoke();
+ }
+ menu.Items.Add(exit);
+
+ return menu;
+ }
+
+ ///
+ /// https://www.codeproject.com/Tips/744914/
+ /// Sorted-list-of-available-cultures-in-NET
+ ///
+ public IEnumerable GetCultureList(
+ CultureTypes cultureType = CultureTypes.SpecificCultures)
+ {
+ var cultureList = CultureInfo.GetCultures(cultureType).ToList();
+ cultureList.Sort((p1, p2) => string.Compare(
+ p1.NativeName, p2.NativeName, true));
+ return cultureList;
+ }
+
+ ///
+ /// Resize the image to the specified width and height.
+ ///
+ /// The image to resize.
+ /// The width to resize to.
+ /// The height to resize to.
+ /// The resized image.
+ public static Bitmap ResizeImage(Image image)
+ {
+ int length = (int)Math.Round(
+ 16 * Program.ScalingFactor, 0,
+ MidpointRounding.AwayFromZero);
+ return ResizeImage(image, length, length);
+ }
+ public static Bitmap ResizeImage(Image image, int width, int height)
+ {
+ var destRect = new Rectangle(0, 0, width, height);
+ var destImage = new Bitmap(width, height);
+
+ destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
+
+ using (var graphics = Graphics.FromImage(destImage))
+ {
+ graphics.CompositingMode = CompositingMode.SourceCopy;
+ graphics.CompositingQuality = CompositingQuality.HighQuality;
+ graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
+ graphics.SmoothingMode = SmoothingMode.HighQuality;
+ graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
+
+ using (var wrapMode = new ImageAttributes())
+ {
+ wrapMode.SetWrapMode(WrapMode.TileFlipXY);
+ graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
+ }
+ }
+
+ return destImage;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Controls/AppNotifyIcon.cs b/Controls/AppNotifyIcon.cs
new file mode 100644
index 0000000..b450968
--- /dev/null
+++ b/Controls/AppNotifyIcon.cs
@@ -0,0 +1,126 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using SystemTrayMenu.Controls;
+using R = SystemTrayMenu.Properties.Resources;
+using Timer = System.Windows.Forms.Timer;
+
+namespace SystemTrayMenu
+{
+ class MenuNotifyIcon : IDisposable
+ {
+ public event EventHandler HandleClick;
+ public event EventHandler ChangeFolder;
+ public event EventHandler OpenLog;
+ public event EventHandler Restart;
+ public event EventHandler Exit;
+
+ NotifyIcon notifyIcon = new NotifyIcon();
+ private DateTime timeLoadingStart;
+ int threadsLoading = 0;
+ Timer load = new Timer();
+ int loadCount = 0, indexLoad = 0;
+ List bitmapsLoading = new List() { R.L010, R.L020, R.L030,
+ R.L040, R.L050, R.L060, R.L070, R.L080, R.L090, R.L100, R.L110, R.L120,
+ R.L130, R.L140, R.L150, R.L160, R.L170, R.L180};
+
+ public MenuNotifyIcon()
+ {
+ indexLoad = bitmapsLoading.Count;
+ notifyIcon.Icon = bitmapsLoading.First();
+ load.Tick += Load_Tick;
+ load.Interval = MenuDefines.IntervalLoad;
+
+ notifyIcon.Text = "SystemTrayMenu";
+ notifyIcon.Visible = true;
+ notifyIcon.Icon = R.SystemTrayMenu;
+ AppContextMenu contextMenus = new AppContextMenu();
+ contextMenus.ClickedChangeFolder += ClickedChangeFolder;
+ void ClickedChangeFolder()
+ {
+ ChangeFolder.Invoke();
+ }
+
+ contextMenus.ClickedOpenLog += ClickedOpenLog;
+ void ClickedOpenLog()
+ {
+ OpenLog.Invoke();
+ }
+
+ contextMenus.ClickedRestart += ClickedRestart;
+ void ClickedRestart()
+ {
+ Restart.Invoke();
+ }
+
+ contextMenus.ClickedExit += ClickedExit;
+ void ClickedExit()
+ {
+ Exit.Invoke();
+ }
+
+ notifyIcon.ContextMenuStrip = contextMenus.Create();
+ notifyIcon.MouseClick += NotifyIcon_MouseClick;
+ void NotifyIcon_MouseClick(object sender, MouseEventArgs e)
+ {
+ if (e.Button == MouseButtons.Left)
+ {
+ HandleClick();
+ }
+ }
+
+ notifyIcon.MouseDoubleClick += NotifyIcon_MouseDoubleClick;
+ void NotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
+ {
+ if (e.Button == MouseButtons.Left)
+ {
+ HandleClick();
+ }
+ }
+ }
+
+ public void Dispose()
+ {
+ notifyIcon.Icon = null;
+ notifyIcon.Dispose();
+ }
+
+ public void LoadingStart()
+ {
+ timeLoadingStart = DateTime.Now;
+ threadsLoading++;
+ load.Start();
+ }
+
+ public void LoadingStop()
+ {
+ threadsLoading--;
+ }
+ public void LoadWait()
+ {
+ notifyIcon.Icon = bitmapsLoading[loadCount++ % indexLoad];
+ }
+ public void LoadStop()
+ {
+ notifyIcon.Icon = R.SystemTrayMenu;
+ }
+
+ private void Load_Tick(object sender, EventArgs e)
+ {
+ if (threadsLoading > 0)
+ {
+ if (DateTime.Now - timeLoadingStart > new TimeSpan(0, 0, 0, 0, 500))
+ {
+ notifyIcon.Icon = bitmapsLoading[loadCount++ % indexLoad];
+ }
+ }
+ else
+ {
+ notifyIcon.Icon = R.SystemTrayMenu;
+ load.Stop();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Controls/AskHotKeyForm.Designer.cs b/Controls/AskHotKeyForm.Designer.cs
new file mode 100644
index 0000000..c76199f
--- /dev/null
+++ b/Controls/AskHotKeyForm.Designer.cs
@@ -0,0 +1,139 @@
+namespace SystemTrayMenu.Controls
+{
+ partial class AskHotKeyForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AskHotKeyForm));
+ this.tableLayoutPanelMain = new System.Windows.Forms.TableLayoutPanel();
+ this.labelText = new System.Windows.Forms.Label();
+ this.tableLayoutPanelBottom = new System.Windows.Forms.TableLayoutPanel();
+ this.buttonOk = new System.Windows.Forms.Button();
+ this.labelCaption = new System.Windows.Forms.Label();
+ this.tableLayoutPanelMain.SuspendLayout();
+ this.tableLayoutPanelBottom.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // tableLayoutPanelMain
+ //
+ this.tableLayoutPanelMain.AutoSize = true;
+ this.tableLayoutPanelMain.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.tableLayoutPanelMain.ColumnCount = 1;
+ this.tableLayoutPanelMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanelMain.Controls.Add(this.labelText, 0, 1);
+ this.tableLayoutPanelMain.Controls.Add(this.tableLayoutPanelBottom, 0, 2);
+ this.tableLayoutPanelMain.Controls.Add(this.labelCaption, 0, 0);
+ this.tableLayoutPanelMain.Location = new System.Drawing.Point(12, 12);
+ this.tableLayoutPanelMain.Name = "tableLayoutPanelMain";
+ this.tableLayoutPanelMain.RowCount = 3;
+ this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanelMain.Size = new System.Drawing.Size(121, 77);
+ this.tableLayoutPanelMain.TabIndex = 0;
+ //
+ // labelText
+ //
+ this.labelText.AutoSize = true;
+ this.labelText.Location = new System.Drawing.Point(3, 21);
+ this.labelText.Margin = new System.Windows.Forms.Padding(3, 8, 3, 8);
+ this.labelText.Name = "labelText";
+ this.labelText.Size = new System.Drawing.Size(67, 13);
+ this.labelText.TabIndex = 1;
+ this.labelText.Text = "Ctrl + Alt + ?)";
+ //
+ // tableLayoutPanelBottom
+ //
+ this.tableLayoutPanelBottom.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+ this.tableLayoutPanelBottom.AutoSize = true;
+ this.tableLayoutPanelBottom.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.tableLayoutPanelBottom.ColumnCount = 3;
+ this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanelBottom.Controls.Add(this.buttonOk, 1, 0);
+ this.tableLayoutPanelBottom.Location = new System.Drawing.Point(3, 45);
+ this.tableLayoutPanelBottom.Name = "tableLayoutPanelBottom";
+ this.tableLayoutPanelBottom.RowCount = 1;
+ this.tableLayoutPanelBottom.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanelBottom.Size = new System.Drawing.Size(115, 29);
+ this.tableLayoutPanelBottom.TabIndex = 1;
+ //
+ // buttonOk
+ //
+ this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.buttonOk.Location = new System.Drawing.Point(20, 3);
+ this.buttonOk.Name = "buttonOk";
+ this.buttonOk.Size = new System.Drawing.Size(75, 23);
+ this.buttonOk.TabIndex = 2;
+ this.buttonOk.Text = "OK";
+ this.buttonOk.UseVisualStyleBackColor = true;
+ this.buttonOk.Click += new System.EventHandler(this.ButtonOk_Click);
+ //
+ // labelCaption
+ //
+ this.labelCaption.AutoSize = true;
+ this.labelCaption.Location = new System.Drawing.Point(3, 0);
+ this.labelCaption.MaximumSize = new System.Drawing.Size(217, 0);
+ this.labelCaption.Name = "labelCaption";
+ this.labelCaption.Size = new System.Drawing.Size(115, 13);
+ this.labelCaption.TabIndex = 0;
+ this.labelCaption.Text = "Shortcut key (e.g. F12)";
+ //
+ // AskHotKeyForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
+ this.AutoSize = true;
+ this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.ClientSize = new System.Drawing.Size(302, 221);
+ this.Controls.Add(this.tableLayoutPanelMain);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "AskHotKeyForm";
+ this.Padding = new System.Windows.Forms.Padding(0, 0, 10, 0);
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "AskHotKeyForm";
+ this.tableLayoutPanelMain.ResumeLayout(false);
+ this.tableLayoutPanelMain.PerformLayout();
+ this.tableLayoutPanelBottom.ResumeLayout(false);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanelMain;
+ private System.Windows.Forms.Button buttonOk;
+ private System.Windows.Forms.Label labelCaption;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBottom;
+ private System.Windows.Forms.Label labelText;
+ }
+}
\ No newline at end of file
diff --git a/Controls/AskHotKeyForm.cs b/Controls/AskHotKeyForm.cs
new file mode 100644
index 0000000..cc9d246
--- /dev/null
+++ b/Controls/AskHotKeyForm.cs
@@ -0,0 +1,121 @@
+using System;
+using System.Windows.Forms;
+
+namespace SystemTrayMenu.Controls
+{
+ public partial class AskHotKeyForm : Form
+ {
+ public string NewHotKey;
+
+ public AskHotKeyForm()
+ {
+ InitializeComponent();
+ this.Text = Program.Translate("Shortcut key");
+ this.labelCaption.Text = $"{Program.Translate("Shortcut key")} " +
+ $"{Program.Translate("(e.g. F12)")}";
+ this.labelText.Text =
+ Program.Translate("CTRL") + " + " +
+ Program.Translate("ALT") + " + ?";
+
+ this.buttonOk.Text = Program.Translate("buttonOk");
+ }
+
+ private void ButtonOk_Click(object sender, EventArgs e)
+ {
+ this.DialogResult = DialogResult.None;
+ this.Close();
+ }
+
+ protected override bool ProcessCmdKey(ref Message msg, Keys keys)
+ {
+ switch (keys)
+ {
+ case Keys.Space:
+ case Keys.D0:
+ case Keys.D1:
+ case Keys.D2:
+ case Keys.D3:
+ case Keys.D4:
+ case Keys.D5:
+ case Keys.D6:
+ case Keys.D7:
+ case Keys.D8:
+ case Keys.D9:
+ case Keys.A:
+ case Keys.B:
+ case Keys.C:
+ case Keys.D:
+ case Keys.E:
+ case Keys.F:
+ case Keys.G:
+ case Keys.H:
+ case Keys.I:
+ case Keys.J:
+ case Keys.K:
+ case Keys.L:
+ case Keys.M:
+ case Keys.N:
+ case Keys.O:
+ case Keys.P:
+ case Keys.Q:
+ case Keys.R:
+ case Keys.S:
+ case Keys.T:
+ case Keys.U:
+ case Keys.V:
+ case Keys.W:
+ case Keys.X:
+ case Keys.Y:
+ case Keys.Z:
+ case Keys.NumPad0:
+ case Keys.NumPad1:
+ case Keys.NumPad2:
+ case Keys.NumPad3:
+ case Keys.NumPad4:
+ case Keys.NumPad5:
+ case Keys.NumPad6:
+ case Keys.NumPad7:
+ case Keys.NumPad8:
+ case Keys.NumPad9:
+ case Keys.F1:
+ case Keys.F2:
+ case Keys.F3:
+ case Keys.F4:
+ case Keys.F5:
+ case Keys.F6:
+ case Keys.F7:
+ case Keys.F8:
+ case Keys.F9:
+ case Keys.F10:
+ case Keys.F11:
+ case Keys.F12:
+ case Keys.F13:
+ case Keys.F14:
+ case Keys.F15:
+ case Keys.F16:
+ case Keys.F17:
+ case Keys.F18:
+ case Keys.F19:
+ case Keys.F20:
+ case Keys.F21:
+ case Keys.F22:
+ case Keys.F23:
+ case Keys.F24:
+ NewHotKey = keys.ToString();
+ this.DialogResult = DialogResult.OK;
+ this.Close();
+ break;
+ case Keys.Back:
+ case Keys.Delete:
+ NewHotKey = string.Empty;
+ this.DialogResult = DialogResult.OK;
+ this.Close();
+ break;
+ default:
+ break;
+ }
+
+ return base.ProcessCmdKey(ref msg, keys);
+ }
+ }
+}
diff --git a/Controls/AskHotKeyForm.resx b/Controls/AskHotKeyForm.resx
new file mode 100644
index 0000000..a04fa62
--- /dev/null
+++ b/Controls/AskHotKeyForm.resx
@@ -0,0 +1,377 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAAAwMAAAAQAgAKglAABGFQAAKAAAABAA
+ AAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAJAAAAcwEB
+ AXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsAAABzAAAACQAAAAEAAAABAAAACQAA
+ AHMBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AAAAcwAAAAkAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAACQAAAHUAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAdQAA
+ AAkAAAABAAAAAQAAAAkAAABzAAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAA
+ AHMAAAAJAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAkAAABzAQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEB
+ AXsBAQF7AQEBewAAAHMAAAAJAAAAAQAAAAEAAAAJAAAAcwEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEB
+ AXsBAQF7AQEBewEBAXsAAABzAAAACQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAHwAAANkBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AAAA2QAAAB8AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAfAAAA2QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUAAADZAAAAHwAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAAAAIQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAA
+ ACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAA
+ ACUAAAAhAAAABQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEBARsAAAC5AAAA0QAAANEAAADRAAAA0QAA
+ ANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAA
+ ANEAAADRAAAA0QAAALkBAQEbAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAQEBGwEBAbkAAADRAAAA0QAA
+ ANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAA
+ ANEAAADRAAAA0QAAANEAAADRAQEBuQEBARsAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAQEBIQEB
+ ASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEB
+ ASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQEhAAAABQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAfAAAA2QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUAAADZAAAAHwAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAB8AAADZAQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QAAANkAAAAfAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEA
+ IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUAAABdAQEBcQAA
+ AHEBAQFxAQEBcQAAAHEBAQFxAQEBcQAAAHEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEB
+ AXEAAABxAAAAcQEBAXEAAABxAQEBcQAAAHEBAQFxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQAA
+ AHEAAABxAQEBcQEBAV0AAAAVAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEB
+ AS8AAADTAAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAA
+ AP8AAAD/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8BAQH/AAAA/wEBAf8AAAD/AAAA/wEB
+ Af8BAQH/AAAA/wEBAf8BAQH/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQEBAS8AAADTAAAA/wEBAf8AAAD/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AQEB/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAAAP8AAAD/AAAA/wEB
+ Af8AAAD/AAAA/wEBAf8BAQH/AAAA/wEBAf8BAQH/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUAAABdAQEBcQEBAXEBAQFxAQEBcQEBAXEBAQFxAQEBcQEB
+ AXEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEAAABxAAAAcQEBAXEAAABxAQEBcQAA
+ AHEBAQFxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQEBAV0AAAAVAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAABcAAABhAQEBdwAAAHcBAQF3AAAAdwEBAXcBAQF3AAAAdwEBAXcAAAB3AAAAdwEB
+ AXcAAAB3AQEBdwAAAHcAAAB3AAAAdwEBAXcBAQF3AAAAdwAAAHcAAAB3AQEBdwAAAHcBAQF3AQEBdwAA
+ AHcBAQF3AQEBdwAAAHcBAQF3AQEBdwAAAHcBAQF3AQEBdwAAAGEAAAAXAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8AAADPAQEB+QEBAfkAAAD5AAAA+QEBAfkBAQH5AAAA+QAA
+ APkAAAD5AAAA+QAAAPkAAAD5AAAA+QEBAfkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkBAQH5AAAA+QAA
+ APkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QEBAc8AAAAvAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8AAADPAAAA+QAAAPkAAAD5AQEB+QAA
+ APkAAAD5AQEB+QEBAfkAAAD5AQEB+QAAAPkAAAD5AAAA+QEBAfkAAAD5AAAA+QEBAfkBAQH5AAAA+QEB
+ AfkBAQH5AAAA+QEBAfkAAAD5AAAA+QEBAfkAAAD5AAAA+QEBAfkBAQH5AQEB+QAAAPkBAQH5AQEB+QAA
+ AM8AAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEBARcAAABhAQEBdQEB
+ AXUBAQF1AAAAdQEBAXUBAQF1AAAAdQEBAXUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAA
+ AHUAAAB1AQEBdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAA
+ AHUAAAB1AAAAdQEBAWEBAQEXAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUBAQFdAQEBcQAAAHEBAQFxAQEBcQAA
+ AHEAAABxAQEBcQEBAXEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEBAQFxAAAAcQEB
+ AXEAAABxAQEBcQAAAHEBAQFxAAAAcQAAAHEBAQFxAQEBcQEBAXEBAQFxAQEBcQEBAXEAAABxAAAAcQEB
+ AV0AAAAVAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8BAQHTAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AC8AAADTAQEB/wAAAP8AAAD/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAdMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAABUBAQFdAQEBcQAAAHEBAQFxAQEBcQAAAHEAAABxAQEBcQEBAXEBAQFxAAAAcQAA
+ AHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEBAQFxAAAAcQEBAXEAAABxAQEBcQAAAHEBAQFxAAAAcQAA
+ AHEBAQFxAQEBcQEBAXEBAQFxAQEBcQEBAXEAAABxAAAAcQEBAV0AAAAVAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+
+
+
\ No newline at end of file
diff --git a/Controls/DragDropHintForm.Designer.cs b/Controls/DragDropHintForm.Designer.cs
new file mode 100644
index 0000000..66b48f3
--- /dev/null
+++ b/Controls/DragDropHintForm.Designer.cs
@@ -0,0 +1,140 @@
+namespace SystemTrayMenu.Controls
+{
+ partial class DragDropHintForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DragDropHintForm));
+ this.tableLayoutPanelMain = new System.Windows.Forms.TableLayoutPanel();
+ this.tableLayoutPanelBottom = new System.Windows.Forms.TableLayoutPanel();
+ this.buttonOk = new System.Windows.Forms.Button();
+ this.labelHint = new System.Windows.Forms.Label();
+ this.pictureBoxHint = new System.Windows.Forms.PictureBox();
+ this.tableLayoutPanelMain.SuspendLayout();
+ this.tableLayoutPanelBottom.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBoxHint)).BeginInit();
+ this.SuspendLayout();
+ //
+ // tableLayoutPanelMain
+ //
+ this.tableLayoutPanelMain.AutoSize = true;
+ this.tableLayoutPanelMain.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.tableLayoutPanelMain.ColumnCount = 1;
+ this.tableLayoutPanelMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanelMain.Controls.Add(this.tableLayoutPanelBottom, 0, 2);
+ this.tableLayoutPanelMain.Controls.Add(this.labelHint, 0, 0);
+ this.tableLayoutPanelMain.Controls.Add(this.pictureBoxHint, 0, 1);
+ this.tableLayoutPanelMain.Location = new System.Drawing.Point(12, 12);
+ this.tableLayoutPanelMain.Name = "tableLayoutPanelMain";
+ this.tableLayoutPanelMain.RowCount = 3;
+ this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanelMain.Size = new System.Drawing.Size(223, 149);
+ this.tableLayoutPanelMain.TabIndex = 0;
+ //
+ // tableLayoutPanelBottom
+ //
+ this.tableLayoutPanelBottom.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+ this.tableLayoutPanelBottom.AutoSize = true;
+ this.tableLayoutPanelBottom.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.tableLayoutPanelBottom.ColumnCount = 3;
+ this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanelBottom.Controls.Add(this.buttonOk, 1, 0);
+ this.tableLayoutPanelBottom.Location = new System.Drawing.Point(3, 117);
+ this.tableLayoutPanelBottom.Name = "tableLayoutPanelBottom";
+ this.tableLayoutPanelBottom.RowCount = 1;
+ this.tableLayoutPanelBottom.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanelBottom.Size = new System.Drawing.Size(217, 29);
+ this.tableLayoutPanelBottom.TabIndex = 1;
+ //
+ // buttonOk
+ //
+ this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.buttonOk.Location = new System.Drawing.Point(71, 3);
+ this.buttonOk.Name = "buttonOk";
+ this.buttonOk.Size = new System.Drawing.Size(75, 23);
+ this.buttonOk.TabIndex = 2;
+ this.buttonOk.Text = "OK";
+ this.buttonOk.UseVisualStyleBackColor = true;
+ this.buttonOk.Click += new System.EventHandler(this.ButtonOk_Click);
+ //
+ // labelHint
+ //
+ this.labelHint.AutoSize = true;
+ this.labelHint.Location = new System.Drawing.Point(3, 0);
+ this.labelHint.MaximumSize = new System.Drawing.Size(217, 0);
+ this.labelHint.Name = "labelHint";
+ this.labelHint.Size = new System.Drawing.Size(41, 13);
+ this.labelHint.TabIndex = 0;
+ this.labelHint.Text = "Hint: ...";
+ //
+ // pictureBoxHint
+ //
+ this.pictureBoxHint.Image = global::SystemTrayMenu.Properties.Resources.hintDragDrop;
+ this.pictureBoxHint.Location = new System.Drawing.Point(3, 16);
+ this.pictureBoxHint.Name = "pictureBoxHint";
+ this.pictureBoxHint.Size = new System.Drawing.Size(217, 95);
+ this.pictureBoxHint.TabIndex = 1;
+ this.pictureBoxHint.TabStop = false;
+ //
+ // DragDropHintForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
+ this.AutoSize = true;
+ this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.ClientSize = new System.Drawing.Size(302, 221);
+ this.Controls.Add(this.tableLayoutPanelMain);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "DragDropHintForm";
+ this.Padding = new System.Windows.Forms.Padding(0, 0, 10, 0);
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "DragDropHintForm";
+ this.tableLayoutPanelMain.ResumeLayout(false);
+ this.tableLayoutPanelMain.PerformLayout();
+ this.tableLayoutPanelBottom.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBoxHint)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanelMain;
+ private System.Windows.Forms.Button buttonOk;
+ private System.Windows.Forms.Label labelHint;
+ private System.Windows.Forms.PictureBox pictureBoxHint;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBottom;
+ }
+}
\ No newline at end of file
diff --git a/Controls/DragDropHintForm.cs b/Controls/DragDropHintForm.cs
new file mode 100644
index 0000000..75ffd14
--- /dev/null
+++ b/Controls/DragDropHintForm.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace SystemTrayMenu.Controls
+{
+ public partial class DragDropHintForm : Form
+ {
+ public DragDropHintForm(string hintTitle, string hintText,
+ string buttonOk)
+ {
+ InitializeComponent();
+ this.Text = hintTitle;
+ this.labelHint.Text = hintText;
+ this.buttonOk.Text = buttonOk;
+ }
+
+ private void ButtonOk_Click(object sender, EventArgs e)
+ {
+ this.Close();
+ }
+ }
+}
diff --git a/Controls/DragDropHintForm.resx b/Controls/DragDropHintForm.resx
new file mode 100644
index 0000000..a04fa62
--- /dev/null
+++ b/Controls/DragDropHintForm.resx
@@ -0,0 +1,377 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAAAwMAAAAQAgAKglAABGFQAAKAAAABAA
+ AAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAJAAAAcwEB
+ AXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsAAABzAAAACQAAAAEAAAABAAAACQAA
+ AHMBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AAAAcwAAAAkAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAACQAAAHUAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAdQAA
+ AAkAAAABAAAAAQAAAAkAAABzAAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAA
+ AHMAAAAJAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAkAAABzAQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEB
+ AXsBAQF7AQEBewAAAHMAAAAJAAAAAQAAAAEAAAAJAAAAcwEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEB
+ AXsBAQF7AQEBewEBAXsAAABzAAAACQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAHwAAANkBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AAAA2QAAAB8AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAfAAAA2QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUAAADZAAAAHwAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAAAAIQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAA
+ ACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAA
+ ACUAAAAhAAAABQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEBARsAAAC5AAAA0QAAANEAAADRAAAA0QAA
+ ANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAA
+ ANEAAADRAAAA0QAAALkBAQEbAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAQEBGwEBAbkAAADRAAAA0QAA
+ ANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAA
+ ANEAAADRAAAA0QAAANEAAADRAQEBuQEBARsAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAQEBIQEB
+ ASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEB
+ ASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQEhAAAABQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAfAAAA2QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUAAADZAAAAHwAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAB8AAADZAQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
+ AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QAAANkAAAAfAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEA
+ IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUAAABdAQEBcQAA
+ AHEBAQFxAQEBcQAAAHEBAQFxAQEBcQAAAHEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEB
+ AXEAAABxAAAAcQEBAXEAAABxAQEBcQAAAHEBAQFxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQAA
+ AHEAAABxAQEBcQEBAV0AAAAVAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEB
+ AS8AAADTAAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAA
+ AP8AAAD/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8BAQH/AAAA/wEBAf8AAAD/AAAA/wEB
+ Af8BAQH/AAAA/wEBAf8BAQH/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQEBAS8AAADTAAAA/wEBAf8AAAD/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AQEB/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAAAP8AAAD/AAAA/wEB
+ Af8AAAD/AAAA/wEBAf8BAQH/AAAA/wEBAf8BAQH/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUAAABdAQEBcQEBAXEBAQFxAQEBcQEBAXEBAQFxAQEBcQEB
+ AXEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEAAABxAAAAcQEBAXEAAABxAQEBcQAA
+ AHEBAQFxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQEBAV0AAAAVAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAABcAAABhAQEBdwAAAHcBAQF3AAAAdwEBAXcBAQF3AAAAdwEBAXcAAAB3AAAAdwEB
+ AXcAAAB3AQEBdwAAAHcAAAB3AAAAdwEBAXcBAQF3AAAAdwAAAHcAAAB3AQEBdwAAAHcBAQF3AQEBdwAA
+ AHcBAQF3AQEBdwAAAHcBAQF3AQEBdwAAAHcBAQF3AQEBdwAAAGEAAAAXAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8AAADPAQEB+QEBAfkAAAD5AAAA+QEBAfkBAQH5AAAA+QAA
+ APkAAAD5AAAA+QAAAPkAAAD5AAAA+QEBAfkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkBAQH5AAAA+QAA
+ APkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QEBAc8AAAAvAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8AAADPAAAA+QAAAPkAAAD5AQEB+QAA
+ APkAAAD5AQEB+QEBAfkAAAD5AQEB+QAAAPkAAAD5AAAA+QEBAfkAAAD5AAAA+QEBAfkBAQH5AAAA+QEB
+ AfkBAQH5AAAA+QEBAfkAAAD5AAAA+QEBAfkAAAD5AAAA+QEBAfkBAQH5AQEB+QAAAPkBAQH5AQEB+QAA
+ AM8AAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEBARcAAABhAQEBdQEB
+ AXUBAQF1AAAAdQEBAXUBAQF1AAAAdQEBAXUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAA
+ AHUAAAB1AQEBdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAA
+ AHUAAAB1AAAAdQEBAWEBAQEXAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUBAQFdAQEBcQAAAHEBAQFxAQEBcQAA
+ AHEAAABxAQEBcQEBAXEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEBAQFxAAAAcQEB
+ AXEAAABxAQEBcQAAAHEBAQFxAAAAcQAAAHEBAQFxAQEBcQEBAXEBAQFxAQEBcQEBAXEAAABxAAAAcQEB
+ AV0AAAAVAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8BAQHTAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AC8AAADTAQEB/wAAAP8AAAD/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAdMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAABUBAQFdAQEBcQAAAHEBAQFxAQEBcQAAAHEAAABxAQEBcQEBAXEBAQFxAAAAcQAA
+ AHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEBAQFxAAAAcQEBAXEAAABxAQEBcQAAAHEBAQFxAAAAcQAA
+ AHEBAQFxAQEBcQEBAXEBAQFxAQEBcQEBAXEAAABxAAAAcQEBAV0AAAAVAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+
+
+
\ No newline at end of file
diff --git a/Controls/Menu.Designer.cs b/Controls/Menu.Designer.cs
new file mode 100644
index 0000000..3c27043
--- /dev/null
+++ b/Controls/Menu.Designer.cs
@@ -0,0 +1,183 @@
+using SystemTrayMenu.Controls;
+
+namespace SystemTrayMenu
+{
+ partial class Menu
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ FadeForm.Dispose();
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
+ this.labelTitle = new System.Windows.Forms.Label();
+ this.dgv = new System.Windows.Forms.DataGridView();
+ this.ColumnIcon = new System.Windows.Forms.DataGridViewImageColumn();
+ this.ColumnText = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
+ ((System.ComponentModel.ISupportInitialize)(this.dgv)).BeginInit();
+ this.tableLayoutPanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // labelTitle
+ //
+ this.labelTitle.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+ this.labelTitle.AutoSize = true;
+ this.labelTitle.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(229)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
+ this.labelTitle.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.labelTitle.ForeColor = System.Drawing.Color.Black;
+ this.labelTitle.Location = new System.Drawing.Point(0, 0);
+ this.labelTitle.Margin = new System.Windows.Forms.Padding(0);
+ this.labelTitle.Name = "labelTitle";
+ this.labelTitle.Padding = new System.Windows.Forms.Padding(3, 0, 0, 1);
+ this.labelTitle.Size = new System.Drawing.Size(361, 14);
+ this.labelTitle.TabIndex = 2;
+ this.labelTitle.Text = "STM";
+ this.labelTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.labelTitle.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.LabelTitle_MouseDoubleClick);
+ this.labelTitle.MouseEnter += new System.EventHandler(this.LabelTitle_MouseEnter);
+ this.labelTitle.MouseLeave += new System.EventHandler(this.LabelTitle_MouseLeave);
+ this.labelTitle.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.dgv_MouseWheel);
+ //
+ // dgv
+ //
+ this.dgv.AllowUserToAddRows = false;
+ this.dgv.AllowUserToDeleteRows = false;
+ this.dgv.AllowUserToResizeColumns = false;
+ this.dgv.AllowUserToResizeRows = false;
+ this.dgv.BackgroundColor = System.Drawing.Color.White;
+ this.dgv.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.dgv.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
+ this.dgv.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.Disable;
+ this.dgv.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
+ this.dgv.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
+ this.dgv.ColumnHeadersVisible = false;
+ this.dgv.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+ this.ColumnIcon,
+ this.ColumnText});
+ this.dgv.Location = new System.Drawing.Point(0, 14);
+ this.dgv.Margin = new System.Windows.Forms.Padding(0);
+ this.dgv.Name = "dgv";
+ this.dgv.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
+ this.dgv.RowHeadersVisible = false;
+ this.dgv.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
+ dataGridViewCellStyle3.Font = new System.Drawing.Font("Segoe UI", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel, ((byte)(0)));
+ this.dgv.RowsDefaultCellStyle = dataGridViewCellStyle3;
+ this.dgv.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.dgv.RowTemplate.Height = 20;
+ this.dgv.RowTemplate.ReadOnly = true;
+ this.dgv.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.dgv.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
+ this.dgv.ShowCellErrors = false;
+ this.dgv.ShowCellToolTips = false;
+ this.dgv.ShowEditingIcon = false;
+ this.dgv.ShowRowErrors = false;
+ this.dgv.Size = new System.Drawing.Size(361, 390);
+ this.dgv.TabIndex = 4;
+ this.dgv.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.dgv_MouseWheel);
+ //
+ // ColumnIcon
+ //
+ dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle1.NullValue = "System.Drawing.Icon";
+ dataGridViewCellStyle1.Padding = new System.Windows.Forms.Padding(3, 2, 6, 2);
+ this.ColumnIcon.DefaultCellStyle = dataGridViewCellStyle1;
+ this.ColumnIcon.Frozen = true;
+ this.ColumnIcon.HeaderText = "ColumnIcon";
+ this.ColumnIcon.ImageLayout = System.Windows.Forms.DataGridViewImageCellLayout.Zoom;
+ this.ColumnIcon.Name = "ColumnIcon";
+ this.ColumnIcon.ReadOnly = true;
+ this.ColumnIcon.Resizable = System.Windows.Forms.DataGridViewTriState.False;
+ this.ColumnIcon.Width = 25;
+ //
+ // ColumnText
+ //
+ dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+ dataGridViewCellStyle2.Padding = new System.Windows.Forms.Padding(0, 0, 3, 0);
+ this.ColumnText.DefaultCellStyle = dataGridViewCellStyle2;
+ this.ColumnText.Frozen = true;
+ this.ColumnText.HeaderText = "ColumnText";
+ this.ColumnText.MaxInputLength = 40;
+ this.ColumnText.Name = "ColumnText";
+ this.ColumnText.ReadOnly = true;
+ this.ColumnText.Resizable = System.Windows.Forms.DataGridViewTriState.False;
+ this.ColumnText.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic;
+ this.ColumnText.Width = 50;
+ //
+ // tableLayoutPanel
+ //
+ this.tableLayoutPanel.AutoScroll = true;
+ this.tableLayoutPanel.AutoSize = true;
+ this.tableLayoutPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.tableLayoutPanel.ColumnCount = 1;
+ this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.tableLayoutPanel.Controls.Add(this.dgv, 0, 1);
+ this.tableLayoutPanel.Controls.Add(this.labelTitle, 0, 0);
+ this.tableLayoutPanel.Location = new System.Drawing.Point(1, 1);
+ this.tableLayoutPanel.Margin = new System.Windows.Forms.Padding(0);
+ this.tableLayoutPanel.Name = "tableLayoutPanel";
+ this.tableLayoutPanel.RowCount = 2;
+ this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel.Size = new System.Drawing.Size(361, 404);
+ this.tableLayoutPanel.TabIndex = 3;
+ this.tableLayoutPanel.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.dgv_MouseWheel);
+ //
+ // Menu
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
+ this.AutoSize = true;
+ this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.BackColor = System.Drawing.Color.Black;
+ this.ClientSize = new System.Drawing.Size(707, 611);
+ this.Controls.Add(this.tableLayoutPanel);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+ this.Name = "Menu";
+ this.Opacity = 0.01D;
+ this.Padding = new System.Windows.Forms.Padding(1);
+ this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
+ this.Text = "SystemTrayMenu";
+ this.TopMost = true;
+ this.Deactivate += new System.EventHandler(this.Menu_Deactivate);
+ ((System.ComponentModel.ISupportInitialize)(this.dgv)).EndInit();
+ this.tableLayoutPanel.ResumeLayout(false);
+ this.tableLayoutPanel.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ private System.Windows.Forms.Label labelTitle;
+ private System.Windows.Forms.DataGridView dgv;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel;
+ private System.Windows.Forms.DataGridViewImageColumn ColumnIcon;
+ private System.Windows.Forms.DataGridViewTextBoxColumn ColumnText;
+ }
+}
\ No newline at end of file
diff --git a/Controls/Menu.cs b/Controls/Menu.cs
new file mode 100644
index 0000000..19ed52a
--- /dev/null
+++ b/Controls/Menu.cs
@@ -0,0 +1,313 @@
+using System;
+using System.Drawing;
+using System.Linq;
+using System.Reflection;
+using System.Windows.Forms;
+using SystemTrayMenu.Controls;
+
+namespace SystemTrayMenu
+{
+ public partial class Menu : Form, IDisposable
+ {
+ public new event EventHandler MouseWheel;
+ public event EventHandler Deactivated;
+ public event EventHandler UserClickedOpenFolder;
+
+ public event Action CmdKeyProcessed;
+
+ public enum Type
+ {
+ Main,
+ Sub,
+ Empty,
+ MaxReached
+ }
+
+ public bool IsFadingIn
+ {
+ get
+ {
+ return FadeForm.IsFadingIn;
+ }
+ }
+
+ public bool IsFadingOut
+ {
+ get
+ {
+ return FadeForm.IsFadingOut;
+ }
+ }
+
+ public int Level = 0;
+ FadeForm FadeForm = null;
+
+ public Menu()
+ {
+ FadeForm = new FadeForm(this);
+ InitializeComponent();
+ SetDoubleBuffer(dgv, true);
+
+ DataGridViewCellStyle dgvCellStyle = new DataGridViewCellStyle();
+ dgvCellStyle.SelectionBackColor = MenuDefines.FileHover;
+ dgvCellStyle.SelectionForeColor = Color.Black;
+ this.dgv.DefaultCellStyle = dgvCellStyle;
+ }
+
+ static void SetDoubleBuffer(Control ctl, bool DoubleBuffered)
+ {
+ typeof(Control).InvokeMember("DoubleBuffered",
+ BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty,
+ null, ctl, new object[] { DoubleBuffered });
+ }
+
+ public void SetTypeSub()
+ {
+ SetType(Type.Sub);
+ }
+ public void SetTypeEmpty()
+ {
+ SetType(Type.Empty);
+ }
+
+ public void SetType(Type type)
+ {
+ switch (type)
+ {
+ case Type.Sub:
+ if (!labelTitle.IsDisposed)
+ {
+ labelTitle.Dispose();
+ }
+ break;
+ case Type.Empty:
+ SetTitle(Program.Translate("Folder empty"));
+ labelTitle.BackColor = MenuDefines.Background;
+ break;
+ case Type.MaxReached:
+ SetTitle($"Max {MenuDefines.MenusMax - 1} Menus");
+ labelTitle.BackColor = MenuDefines.Background;
+ break;
+ case Type.Main:
+ break;
+ default:
+ break;
+ }
+ }
+
+ public bool IsVisible()
+ {
+ return Visible;
+ }
+
+ public bool IsActive(Form activeForm)
+ {
+ bool isActive = (this == activeForm);
+ return isActive;
+ }
+
+ public bool IsMouseOn(Point mousePosition)
+ {
+ bool isMouseOn = Visible && Opacity >= MenuDefines.OpacityHalfValue
+ && ClientRectangle.Contains(
+ PointToClient(mousePosition));
+ return isMouseOn;
+ }
+
+ public DataGridView GetDataGridView()
+ {
+ return dgv;
+ }
+
+ public void SetTitle(string title)
+ {
+ if (title.Length > MenuDefines.LengthMax)
+ {
+ title = $"{title.Substring(0, MenuDefines.LengthMax)}...";
+ }
+ labelTitle.Text = title;
+ }
+
+ public void FadeIn()
+ {
+ FadeForm.FadeIn();
+ }
+
+ public void FadeHalf()
+ {
+ FadeForm.FadeHalf();
+ }
+
+ public void FadeOut()
+ {
+ FadeForm.FadeOut();
+ }
+
+ public void AdjustLocationAndSize(Screen screen)
+ {
+ DataGridViewElementStates states = DataGridViewElementStates.None;
+ dgv.AutoResizeRows();
+ int height = (int)(dgv.Rows.GetRowsHeight(states));
+ int heightMax = screen.Bounds.Height -
+ new Taskbar().Size.Height -
+ labelTitle.Height;
+ if (height > heightMax)
+ {
+ height = heightMax;
+ }
+ dgv.Height = height;
+ AdjustDataGridViewSize();
+ int x = screen.Bounds.Right - Width;
+ int y = heightMax - Height + labelTitle.Height;
+
+ Location = new Point(x, y);
+ }
+
+ public void AdjustLocationAndSize(int heightMax, int widthPredecessors,
+ Menu menuPredecessor)
+ {
+ DataGridViewElementStates states = DataGridViewElementStates.None;
+ this.dgv.AutoResizeRows();
+ int height = this.dgv.Rows.GetRowsHeight(states);
+ if (height > heightMax)
+ {
+ height = heightMax;
+ }
+ this.dgv.Height = height;
+
+ AdjustDataGridViewSize();
+ int x = menuPredecessor.Location.X - Width +
+ (int)Math.Round(Program.ScalingFactor, 0,
+ MidpointRounding.AwayFromZero);
+
+ RowData trigger = (RowData)Tag;
+ DataGridView dgv = menuPredecessor.GetDataGridView();
+ if (dgv.Rows.Count > trigger.RowIndex)
+ {
+ var cellRectangle = dgv.GetCellDisplayRectangle(
+ 0, trigger.RowIndex, false);
+ int y = menuPredecessor.Location.Y +
+ menuPredecessor.dgv.Location.Y +
+ cellRectangle.Top;
+ if ((y + Height) > heightMax)
+ {
+ y = heightMax - Height;
+ }
+
+ Location = new Point(x, y);
+ }
+ }
+
+ private void AdjustDataGridViewSize()
+ {
+ dgv.AutoResizeColumns();
+ bool scrollbarShown = false;
+ foreach (var scroll in dgv.Controls.OfType())
+ {
+ if (scroll.Visible)
+ {
+ scroll.Width = 120;
+ scrollbarShown = true;
+ }
+ }
+ int newWidth = dgv.Columns[0].Width + dgv.Columns[1].Width;
+ if (scrollbarShown)
+ {
+ newWidth += SystemInformation.VerticalScrollBarWidth;
+ }
+ dgv.Width = newWidth;
+ }
+
+ private void dgv_MouseWheel(object sender, MouseEventArgs e)
+ {
+ ((HandledMouseEventArgs)e).Handled = true;
+ int scrollspeed = MenuDefines.Scrollspeed;
+ if (e.Delta < 0)
+ {
+ if (dgv.FirstDisplayedScrollingRowIndex < dgv.Rows.Count - scrollspeed)
+ {
+ dgv.FirstDisplayedScrollingRowIndex += scrollspeed;
+ }
+ else
+ {
+ dgv.FirstDisplayedScrollingRowIndex = dgv.Rows.Count - 1;
+ }
+ }
+ else
+ {
+ if (dgv.FirstDisplayedScrollingRowIndex > 0 + scrollspeed)
+ {
+ dgv.FirstDisplayedScrollingRowIndex -= scrollspeed;
+ }
+ else
+ {
+ dgv.FirstDisplayedScrollingRowIndex = 0;
+ }
+ }
+
+ dgv.PerformLayout();
+ MouseWheel.Invoke();
+ }
+
+ private void Menu_Deactivate(object sender, EventArgs e)
+ {
+ Deactivated?.Invoke();
+ }
+
+ public void SetTitleColorDeactive()
+ {
+ this.labelTitle.ForeColor = Color.LightGray;
+ }
+
+ public void SetTitleColorActive()
+ {
+ this.labelTitle.ForeColor = Color.Black;
+ }
+
+ private void LabelTitle_MouseDoubleClick(object sender, MouseEventArgs e)
+ {
+ if (e.Button == MouseButtons.Left)
+ {
+ UserClickedOpenFolder?.Invoke();
+ }
+ }
+
+ private void LabelTitle_MouseEnter(object sender, EventArgs e)
+ {
+ this.labelTitle.BackColor = MenuDefines.FileHover;
+ }
+
+ private void LabelTitle_MouseLeave(object sender, EventArgs e)
+ {
+ this.labelTitle.BackColor = MenuDefines.Background;
+ }
+
+ protected override CreateParams CreateParams
+ {
+ get
+ {
+ var Params = base.CreateParams;
+ Params.ExStyle |= 0x80;
+ return Params;
+ }
+ }
+
+ protected override bool ProcessCmdKey(ref Message msg, Keys keys)
+ {
+ switch (keys)
+ {
+ case Keys.Enter:
+ case Keys.Up:
+ case Keys.Down:
+ case Keys.Left:
+ case Keys.Right:
+ case Keys.Escape:
+ CmdKeyProcessed.Invoke(keys);
+ return true;
+ default:
+ break;
+ }
+ return base.ProcessCmdKey(ref msg, keys);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Controls/Menu.resx b/Controls/Menu.resx
new file mode 100644
index 0000000..b1c3d17
--- /dev/null
+++ b/Controls/Menu.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ True
+
+
+ True
+
+
\ No newline at end of file
diff --git a/Controls/MenuData.cs b/Controls/MenuData.cs
new file mode 100644
index 0000000..543dd38
--- /dev/null
+++ b/Controls/MenuData.cs
@@ -0,0 +1,24 @@
+using Clearcove.Logging;
+using IWshRuntimeLibrary;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Windows.Forms;
+using SystemTrayMenu.Helper;
+using TAFactory.IconPack;
+
+namespace SystemTrayMenu.Controls
+{
+ public struct MenuData
+ {
+ public List RowDatas;
+ public bool Valid;
+ public int Level;
+ };
+}
\ No newline at end of file
diff --git a/Controls/RowData.cs b/Controls/RowData.cs
new file mode 100644
index 0000000..b2918b8
--- /dev/null
+++ b/Controls/RowData.cs
@@ -0,0 +1,480 @@
+using Clearcove.Logging;
+using IWshRuntimeLibrary;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Windows.Forms;
+using SystemTrayMenu.Helper;
+using TAFactory.IconPack;
+
+namespace SystemTrayMenu.Controls
+{
+ public class RowData : IDisposable
+ {
+ public FileInfo FileInfo;
+ public Icon Icon;
+ public bool ContainsMenu;
+ public bool IsContextMenuOpen;
+ public bool ResolvedFileNotFound;
+ public string WorkingDirectory;
+ public string Arguments;
+
+ public bool IsResolvedLnk;
+ public string TargetFilePath;
+ public string Text;
+
+
+ public Menu SubMenu;
+ public int RowIndex;
+
+ public bool IsSelected;
+ public bool IsSelectedByKeyboard;
+
+ public bool ReadIcon(bool isDirectory, bool isResolvedLnk, ref string resolvedLnkPath)
+ {
+ bool isLnkDirectory = false;
+
+ Logger log = new Logger(nameof(RowData));
+
+ if (isResolvedLnk)
+ {
+ if (Icon == null)
+ {
+ Icon = IconReader.GetFolderIcon(TargetFilePath,
+ IconReader.FolderType.Open, true);
+ }
+ }
+ else if (isDirectory)
+ {
+ Icon = IconReader.GetFolderIcon(TargetFilePath,
+ IconReader.FolderType.Closed, false);
+ }
+ else if (!string.IsNullOrEmpty(TargetFilePath))
+ {
+ bool handled = false;
+ string fileExtension = Path.GetExtension(TargetFilePath);
+
+ if (fileExtension == ".lnk")
+ {
+ handled = SetLnk(log, ref isLnkDirectory,
+ ref resolvedLnkPath);
+ }
+ else if (fileExtension == ".url")
+ {
+ handled = SetUrl(log);
+ }
+ else if (fileExtension == ".sln")
+ {
+ handled = SetSln(log);
+ }
+
+ if (!handled)
+ {
+ try
+ {
+ Icon = IconReader.GetFileIcon(TargetFilePath, false);
+
+ // other project -> fails sometimes
+ //icon = IconHelper.ExtractIcon(TargetFilePath, 0);
+
+ // standard way -> fails sometimes
+ //icon = Icon.ExtractAssociatedIcon(filePath);
+
+ // API Code Pack -> fails sometimes
+ //ShellFile shellFile = ShellFile.FromFilePath(filePath);
+ //Bitmap shellThumb = shellFile.Thumbnail.ExtraLargeBitmap;
+ }
+ catch (Exception ex)
+ {
+ log.Info($"TargetFilePath:'{TargetFilePath}'");
+ log.Error($"{ex.ToString()}");
+ }
+ }
+ }
+
+ return isLnkDirectory;
+ }
+
+ private bool SetLnk(Logger log, ref bool isLnkDirectory,
+ ref string resolvedLnkPath)
+ {
+ bool handled = false;
+ resolvedLnkPath = LnkHelper.ResolveShortcut(TargetFilePath);
+ if (LnkHelper.IsDirectory(resolvedLnkPath))
+ {
+ Icon = IconReader.GetFolderIcon(TargetFilePath,
+ IconReader.FolderType.Open, true);
+ handled = true;
+ isLnkDirectory = true;
+ }
+ else if (string.IsNullOrEmpty(resolvedLnkPath))
+ {
+ ResolvedFileNotFound = true;
+ log.Info($"Resolve '{TargetFilePath}' not possible => no icon");
+ }
+ else
+ {
+ IWshShell shell = new WshShell();
+ var lnk = shell.CreateShortcut(TargetFilePath)
+ as IWshShortcut;
+ Arguments = lnk.Arguments;
+ WorkingDirectory = lnk.WorkingDirectory;
+ string iconLocation = lnk.IconLocation;
+ if (iconLocation.Length > 2)
+ {
+ iconLocation = iconLocation.Substring(0,
+ iconLocation.Length - 2);
+ if (System.IO.File.Exists(iconLocation))
+ {
+ try
+ {
+ Icon = Icon.ExtractAssociatedIcon(iconLocation);
+ handled = true;
+ }
+ catch (Exception ex)
+ {
+ log.Info($"iconLocation:'{iconLocation}'");
+ log.Error($"{ex.ToString()}");
+ }
+ }
+ }
+
+ TargetFilePath = resolvedLnkPath;
+ }
+
+ SetText($"{FileInfo.Name.Substring(0, FileInfo.Name.Length - 4)}");
+
+ return handled;
+ }
+
+ private bool SetUrl(Logger log)
+ {
+ bool handled = false;
+ string iconFile = string.Empty;
+ try
+ {
+ FileIni file = new FileIni(TargetFilePath);
+ iconFile = file.Value("IconFile", string.Empty);
+ if (string.IsNullOrEmpty(iconFile))
+ {
+ string browserPath = FileUrl.GetDefaultBrowserPath();
+ if (string.IsNullOrEmpty(browserPath))
+ {
+ log.Info($"No default browser found!");
+ }
+ else
+ {
+ Icon = IconReader.GetFileIcon(browserPath, false);
+ handled = true;
+ }
+ }
+ else if (System.IO.File.Exists(iconFile))
+ {
+ Icon = Icon.ExtractAssociatedIcon(iconFile);
+ handled = true;
+ }
+ else
+ {
+ log.Info($"Resolve '{TargetFilePath}' not possible => no icon");
+ }
+ }
+ catch (Exception ex)
+ {
+ log.Info($"TargetFilePath:'{TargetFilePath}', " +
+ $"iconFile:'{iconFile}'");
+ log.Error($"{ex.ToString()}");
+ }
+
+ SetText($"{FileInfo.Name.Substring(0, FileInfo.Name.Length - 4)}");
+
+ return handled;
+ }
+
+ [DllImport("shell32.dll")]
+ static extern int FindExecutable(string lpFile, string lpDirectory, [Out] StringBuilder lpResult);
+ private bool SetSln(Logger log)
+ {
+ bool handled = false;
+ var executable = new StringBuilder(1024);
+ try
+ {
+ FindExecutable(TargetFilePath, string.Empty, executable);
+ // icon = IconReader.GetFileIcon(executable, false);
+ // e.g. VS 2019 icon, need another icom in imagelist
+ List extractedIcons = IconHelper.ExtractAllIcons(
+ executable.ToString());
+ Icon = extractedIcons.Last();
+ handled = true;
+ }
+ catch (Exception ex)
+ {
+ log.Info($"TargetFilePath:'{TargetFilePath}', " +
+ $"executable:'{executable.ToString()}'");
+ log.Error($"{ex.ToString()}");
+ }
+
+ return handled;
+ }
+
+ public void SetText(string text)
+ {
+ //text = $" {text}";
+ if (text.Length > MenuDefines.LengthMax)
+ {
+ text = $"{text.Substring(0, MenuDefines.LengthMax)}...";
+ }
+ Text = text;
+ }
+
+
+#warning sort this class and check for duplicated
+
+ public event Action