commit 4aa234faa3d7f2ccdaea89a56283672eff44c135 Author: josch Date: Thu Jun 26 17:13:46 2014 +0200 initial commit diff --git a/Alarm/Alarm.MainForm.resources b/Alarm/Alarm.MainForm.resources new file mode 100644 index 0000000..ada3f01 Binary files /dev/null and b/Alarm/Alarm.MainForm.resources differ diff --git a/Alarm/Alarm.application b/Alarm/Alarm.application new file mode 100644 index 0000000..0752c17 --- /dev/null +++ b/Alarm/Alarm.application @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + anBwsko0O/0865JOOhsYdRcq3XA= + + + +8aw2mUV8V2TZYRwohKMBHJfxfxA=u01dmcnpoqyV/4+AOK9ZTo0XYUY=fUVr2zj6UituWlNq9q9XzmwHuWxsbI0KNXEy8Sm8wUbFlJLHei3J1kBRyVdf+TuEIMch0MvByrpCfrjRVt/SwhAo+uMw1dALD4m74EIWqUClq2Gdv81FrD6QsG+LXM/SfLCo5DzJqt8i7B6owpx63bORWiPTGZjttj59zfGGq10=1enwyAwyEDkeZerbUZkykbuudA/7JuHiWjTVU1rEhzajyNeK2kpvE6Aj4dqz5dcdpU2l8s/EWjcjhGY5WurDzvUNwIM9ppEvKJdc8G1voAV5Ei4c+hgzjTRdZPOP9A/bXtofZW5xow7c1AuAd3mfPG7ShzUE6qUnNoBVdGpBfss=AQABCN=JOSCH\JohannesAK7/2rU5vEQDqQWoMGeF/kfb0Y4=kNgY84B1BhOLqArQyfBkUFAoEdZyg73es4p0QnD7bro+Bb8v70HV5aZq5ql0spCPFad4ktGERznyPYSMvzcm2xI9fUjhvLAJQFyun8m1ogok/CT2ySqeeHmQomT6FWG6T9V8IaVO0Nrz4ijIS3I77n+vsw9Ixs2fIUSOsl9zuD8=1enwyAwyEDkeZerbUZkykbuudA/7JuHiWjTVU1rEhzajyNeK2kpvE6Aj4dqz5dcdpU2l8s/EWjcjhGY5WurDzvUNwIM9ppEvKJdc8G1voAV5Ei4c+hgzjTRdZPOP9A/bXtofZW5xow7c1AuAd3mfPG7ShzUE6qUnNoBVdGpBfss=AQABMIIByDCCATWgAwIBAgIPkfW6s5NHgUS/2MKUwgu7MAkGBSsOAwIdBQAwJzElMCMGA1UEAx4cAEoATwBTAEMASABcAEoAbwBoAGEAbgBuAGUAczAeFw0wNTA2MTMwNTEyMTBaFw0wNjA2MTMxMTEyMTBaMCcxJTAjBgNVBAMeHABKAE8AUwBDAEgAXABKAG8AaABhAG4AbgBlAHMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANXp8MgMMhA5HmXq21GZMpG7rnQP+ybh4lo01VNaxIc2o8jXitpKbxOgI+Has+XXHaVNpfLPxFo3I4RmOVrqw871DcCDPaaRLyiXXPBtb6AFeRIuHPoYM400XWTzj/QP217aH2VucaMO3NQLgHd5nzxu0oc1BOqlJzaAVXRqQX7LAgMBAAEwCQYFKw4DAh0FAAOBgQAOzqcUn7hKBv22lxwYlsNpyEHEK4aAbrJPNTjSVNVdWp7bBDAzVS/BeDwAKQuY6EoiFNxea51NgdrqQGvVvRbIWPIzTCWmTVho3/rOXJBOwXpThPRhVufuDY8pDl8IrzqtQoiEQKF0mxbEGfIMgx9N/QB63K5S5T4Ly31WHLwh2w== \ No newline at end of file diff --git a/Alarm/Alarm.cmbx b/Alarm/Alarm.cmbx new file mode 100644 index 0000000..5e2909d --- /dev/null +++ b/Alarm/Alarm.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Alarm/Alarm.prjx b/Alarm/Alarm.prjx new file mode 100644 index 0000000..5e004a3 --- /dev/null +++ b/Alarm/Alarm.prjx @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Alarm/Alarm1/Alarm.sln b/Alarm/Alarm1/Alarm.sln new file mode 100644 index 0000000..8a9f125 --- /dev/null +++ b/Alarm/Alarm1/Alarm.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Alarm", "Alarm1\Alarm.csproj", "{37718BC4-94E0-4794-97EB-A9C405EBB2F4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {37718BC4-94E0-4794-97EB-A9C405EBB2F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {37718BC4-94E0-4794-97EB-A9C405EBB2F4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {37718BC4-94E0-4794-97EB-A9C405EBB2F4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {37718BC4-94E0-4794-97EB-A9C405EBB2F4}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Alarm/Alarm1/Alarm.suo b/Alarm/Alarm1/Alarm.suo new file mode 100644 index 0000000..08b9deb Binary files /dev/null and b/Alarm/Alarm1/Alarm.suo differ diff --git a/Alarm/Alarm1/Alarm1/Alarm.csproj b/Alarm/Alarm1/Alarm1/Alarm.csproj new file mode 100644 index 0000000..e4df046 --- /dev/null +++ b/Alarm/Alarm1/Alarm1/Alarm.csproj @@ -0,0 +1,100 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {37718BC4-94E0-4794-97EB-A9C405EBB2F4} + WinExe + Properties + Alarm + Alarm + true + true + 569AACBBB3CC69D6F9BAE101989E2E2CD7D8FE21 + Alarm1_TemporaryKey.pfx + false + E:\Quelltexte\Alarm\ + true + Disk + false + Foreground + 7 + Days + false + false + true + de-DE + Alarm + Johannes Schauer + false + false + true + 1.0.0.* + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + False + .NET Framework 2.0 Beta + true + + + + \ No newline at end of file diff --git a/Alarm/Alarm1/Alarm1/Alarm.csproj.user b/Alarm/Alarm1/Alarm1/Alarm.csproj.user new file mode 100644 index 0000000..404bec9 --- /dev/null +++ b/Alarm/Alarm1/Alarm1/Alarm.csproj.user @@ -0,0 +1,17 @@ + + + 8.0.50215 + E:\Quelltexte\Alarm\ + + + + + + + + + 2 + en-US + true + + \ No newline at end of file diff --git a/Alarm/Alarm1/Alarm1/Form1.Designer.cs b/Alarm/Alarm1/Alarm1/Form1.Designer.cs new file mode 100644 index 0000000..f48341f --- /dev/null +++ b/Alarm/Alarm1/Alarm1/Form1.Designer.cs @@ -0,0 +1,141 @@ +namespace Alarm +{ + partial class Alarm + { + /// + /// 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() + { + this.components = new System.ComponentModel.Container(); + this.btnStop = new System.Windows.Forms.Button(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.tbWeckzeit = new System.Windows.Forms.TextBox(); + this.cbAktivieren = new System.Windows.Forms.CheckBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.lUhrzeit = new System.Windows.Forms.Label(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // btnStop + // + this.btnStop.BackColor = System.Drawing.SystemColors.Control; + this.btnStop.Dock = System.Windows.Forms.DockStyle.Bottom; + this.btnStop.Enabled = false; + this.btnStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnStop.Font = new System.Drawing.Font("Verdana", 20.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnStop.Location = new System.Drawing.Point(0, 131); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(341, 40); + this.btnStop.TabIndex = 0; + this.btnStop.Text = "STOP"; + this.btnStop.UseVisualStyleBackColor = false; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // timer1 + // + this.timer1.Enabled = true; + this.timer1.Interval = 1000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // tbWeckzeit + // + this.tbWeckzeit.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbWeckzeit.Font = new System.Drawing.Font("Verdana", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.tbWeckzeit.Location = new System.Drawing.Point(180, 4); + this.tbWeckzeit.Name = "tbWeckzeit"; + this.tbWeckzeit.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.tbWeckzeit.Size = new System.Drawing.Size(75, 33); + this.tbWeckzeit.TabIndex = 2; + this.tbWeckzeit.Text = "6:00"; + this.tbWeckzeit.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.tbWeckzeit.TextChanged += new System.EventHandler(this.tbWeckzeit_TextChanged); + // + // cbAktivieren + // + this.cbAktivieren.AutoSize = true; + this.cbAktivieren.BackColor = System.Drawing.SystemColors.Control; + this.cbAktivieren.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbAktivieren.Font = new System.Drawing.Font("Verdana", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbAktivieren.Location = new System.Drawing.Point(85, 12); + this.cbAktivieren.Name = "cbAktivieren"; + this.cbAktivieren.Size = new System.Drawing.Size(89, 20); + this.cbAktivieren.TabIndex = 3; + this.cbAktivieren.Text = "Aktivieren"; + this.cbAktivieren.UseVisualStyleBackColor = false; + // + // panel1 + // + this.panel1.Controls.Add(this.cbAktivieren); + this.panel1.Controls.Add(this.tbWeckzeit); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(341, 40); + this.panel1.TabIndex = 5; + // + // lUhrzeit + // + this.lUhrzeit.Dock = System.Windows.Forms.DockStyle.Fill; + this.lUhrzeit.Font = new System.Drawing.Font("Verdana", 48F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lUhrzeit.Location = new System.Drawing.Point(0, 40); + this.lUhrzeit.Name = "lUhrzeit"; + this.lUhrzeit.Size = new System.Drawing.Size(341, 91); + this.lUhrzeit.TabIndex = 6; + this.lUhrzeit.Text = "00:00:00"; + this.lUhrzeit.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // Alarm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Control; + this.ClientSize = new System.Drawing.Size(341, 171); + this.Controls.Add(this.lUhrzeit); + this.Controls.Add(this.panel1); + this.Controls.Add(this.btnStop); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Location = new System.Drawing.Point(1300, 0); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Alarm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Text = "Alarm"; + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button btnStop; + private System.Windows.Forms.Timer timer1; + private System.Windows.Forms.TextBox tbWeckzeit; + private System.Windows.Forms.CheckBox cbAktivieren; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label lUhrzeit; + } +} + diff --git a/Alarm/Alarm1/Alarm1/Form1.cs b/Alarm/Alarm1/Alarm1/Form1.cs new file mode 100644 index 0000000..137ad69 --- /dev/null +++ b/Alarm/Alarm1/Alarm1/Form1.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Media; + +namespace Alarm +{ + public partial class Alarm : Form + { + private SoundPlayer sp = null; + + public Alarm() + { + InitializeComponent(); + sp = new SoundPlayer("c:\\Windows\\Media\\ringin.wav"); + } + + private void btnStop_Click(object sender, EventArgs e) + { + sp.Stop(); + btnStop.Enabled = false; + } + + private void timer1_Tick(object sender, EventArgs e) + { + lUhrzeit.Text = DateTime.Now.ToLongTimeString(); + if (cbAktivieren.Checked) + { + if (DateTime.Parse(lUhrzeit.Text) == DateTime.Parse(tbWeckzeit.Text)) + { + sp.PlayLooping(); + btnStop.Enabled = true; + } + } + } + + private void tbWeckzeit_TextChanged(object sender, EventArgs e) + { + cbAktivieren.Checked = false; + } + } +} \ No newline at end of file diff --git a/Alarm/Alarm1/Alarm1/Form1.resx b/Alarm/Alarm1/Alarm1/Form1.resx new file mode 100644 index 0000000..93f75a9 --- /dev/null +++ b/Alarm/Alarm1/Alarm1/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Alarm/Alarm1/Alarm1/Properties/AssemblyInfo.cs b/Alarm/Alarm1/Alarm1/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e0dbae4 --- /dev/null +++ b/Alarm/Alarm1/Alarm1/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Alarm")] +[assembly: AssemblyDescription("Ein doller Wecker")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Alarm")] +[assembly: AssemblyCopyright("Copyright 2005 Johannes Schauer")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3b8d7539-133e-4454-901d-aa79a75ebc92")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Alarm/Alarm1/Alarm1/Properties/Resources.Designer.cs b/Alarm/Alarm1/Alarm1/Properties/Resources.Designer.cs new file mode 100644 index 0000000..053e5b2 --- /dev/null +++ b/Alarm/Alarm1/Alarm1/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Alarm.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Alarm.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Alarm.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace Alarm.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Alarm.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Alarm/Alarm1/Alarm1/Properties/Resources.resx b/Alarm/Alarm1/Alarm1/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/Alarm/Alarm1/Alarm1/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Alarm/Alarm1/Alarm1/Properties/Settings.Designer.cs b/Alarm/Alarm1/Alarm1/Properties/Settings.Designer.cs new file mode 100644 index 0000000..59e5fed --- /dev/null +++ b/Alarm/Alarm1/Alarm1/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Alarm.Properties.Settings.get_Default():Alarm.Properties.Settings")] + +namespace Alarm.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Alarm/Alarm1/Alarm1/Properties/Settings.settings b/Alarm/Alarm1/Alarm1/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/Alarm/Alarm1/Alarm1/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Alarm/Alarm1/Alarm1/program.cs b/Alarm/Alarm1/Alarm1/program.cs new file mode 100644 index 0000000..72d1fe7 --- /dev/null +++ b/Alarm/Alarm1/Alarm1/program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Alarm +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Alarm()); + } + } +} \ No newline at end of file diff --git a/Alarm/Alarm1/Alarm1/publish/Alarm.application b/Alarm/Alarm1/Alarm1/publish/Alarm.application new file mode 100644 index 0000000..0752c17 --- /dev/null +++ b/Alarm/Alarm1/Alarm1/publish/Alarm.application @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + anBwsko0O/0865JOOhsYdRcq3XA= + + + +8aw2mUV8V2TZYRwohKMBHJfxfxA=u01dmcnpoqyV/4+AOK9ZTo0XYUY=fUVr2zj6UituWlNq9q9XzmwHuWxsbI0KNXEy8Sm8wUbFlJLHei3J1kBRyVdf+TuEIMch0MvByrpCfrjRVt/SwhAo+uMw1dALD4m74EIWqUClq2Gdv81FrD6QsG+LXM/SfLCo5DzJqt8i7B6owpx63bORWiPTGZjttj59zfGGq10=1enwyAwyEDkeZerbUZkykbuudA/7JuHiWjTVU1rEhzajyNeK2kpvE6Aj4dqz5dcdpU2l8s/EWjcjhGY5WurDzvUNwIM9ppEvKJdc8G1voAV5Ei4c+hgzjTRdZPOP9A/bXtofZW5xow7c1AuAd3mfPG7ShzUE6qUnNoBVdGpBfss=AQABCN=JOSCH\JohannesAK7/2rU5vEQDqQWoMGeF/kfb0Y4=kNgY84B1BhOLqArQyfBkUFAoEdZyg73es4p0QnD7bro+Bb8v70HV5aZq5ql0spCPFad4ktGERznyPYSMvzcm2xI9fUjhvLAJQFyun8m1ogok/CT2ySqeeHmQomT6FWG6T9V8IaVO0Nrz4ijIS3I77n+vsw9Ixs2fIUSOsl9zuD8=1enwyAwyEDkeZerbUZkykbuudA/7JuHiWjTVU1rEhzajyNeK2kpvE6Aj4dqz5dcdpU2l8s/EWjcjhGY5WurDzvUNwIM9ppEvKJdc8G1voAV5Ei4c+hgzjTRdZPOP9A/bXtofZW5xow7c1AuAd3mfPG7ShzUE6qUnNoBVdGpBfss=AQABMIIByDCCATWgAwIBAgIPkfW6s5NHgUS/2MKUwgu7MAkGBSsOAwIdBQAwJzElMCMGA1UEAx4cAEoATwBTAEMASABcAEoAbwBoAGEAbgBuAGUAczAeFw0wNTA2MTMwNTEyMTBaFw0wNjA2MTMxMTEyMTBaMCcxJTAjBgNVBAMeHABKAE8AUwBDAEgAXABKAG8AaABhAG4AbgBlAHMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANXp8MgMMhA5HmXq21GZMpG7rnQP+ybh4lo01VNaxIc2o8jXitpKbxOgI+Has+XXHaVNpfLPxFo3I4RmOVrqw871DcCDPaaRLyiXXPBtb6AFeRIuHPoYM400XWTzj/QP217aH2VucaMO3NQLgHd5nzxu0oc1BOqlJzaAVXRqQX7LAgMBAAEwCQYFKw4DAh0FAAOBgQAOzqcUn7hKBv22lxwYlsNpyEHEK4aAbrJPNTjSVNVdWp7bBDAzVS/BeDwAKQuY6EoiFNxea51NgdrqQGvVvRbIWPIzTCWmTVho3/rOXJBOwXpThPRhVufuDY8pDl8IrzqtQoiEQKF0mxbEGfIMgx9N/QB63K5S5T4Ly31WHLwh2w== \ No newline at end of file diff --git a/Alarm/Alarm1/Alarm1/publish/Alarm_1_0_0_1/Alarm.exe.deploy b/Alarm/Alarm1/Alarm1/publish/Alarm_1_0_0_1/Alarm.exe.deploy new file mode 100644 index 0000000..4a27ea3 Binary files /dev/null and b/Alarm/Alarm1/Alarm1/publish/Alarm_1_0_0_1/Alarm.exe.deploy differ diff --git a/Alarm/Alarm1/Alarm1/publish/Alarm_1_0_0_1/Alarm.exe.manifest b/Alarm/Alarm1/Alarm1/publish/Alarm_1_0_0_1/Alarm.exe.manifest new file mode 100644 index 0000000..0814c9e --- /dev/null +++ b/Alarm/Alarm1/Alarm1/publish/Alarm_1_0_0_1/Alarm.exe.manifest @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + zM+O0bCNAVt4OinNklbbMEzPNj4= + + + +LJI8Dc2QpFBEgvXtV742wxMbalA=nOcrao6FcsiG68ovNbjy6+IeDm8=iWvicaG4pbkpvP6qFzDgJbly4vKUVVJ0OjQsY/0OdzOIVXn6Rm7z8Mg6J4u5Gn8FuoEjbnyF7Ld6Aq0Tf52OJqVsII/MZQehBza3Tqt4s+N46F88+AtN4KYangHHcE9loTEmP7UWZ5sBihrane8l3h65MToJCUMP7sGhlfHuoa4=1enwyAwyEDkeZerbUZkykbuudA/7JuHiWjTVU1rEhzajyNeK2kpvE6Aj4dqz5dcdpU2l8s/EWjcjhGY5WurDzvUNwIM9ppEvKJdc8G1voAV5Ei4c+hgzjTRdZPOP9A/bXtofZW5xow7c1AuAd3mfPG7ShzUE6qUnNoBVdGpBfss=AQABCN=JOSCH\JohanneszdgXXObILvdfcpJj7oVd8JSkf90=UUuVn9lBSI51qKv7pFU7w94r6dV0YcflimAg9Ako9yH/bonby7OORC35FItSvqgXITbyYi1bsa5SrHMyMSlpOvFMvYDjqEoFoOuR14MnldkjgbEfPWUKkORs95pxy4dpBZJ+XoDq2qjdvA4WpZwHwOgTgcBC3015cS9cOqKrRXA=1enwyAwyEDkeZerbUZkykbuudA/7JuHiWjTVU1rEhzajyNeK2kpvE6Aj4dqz5dcdpU2l8s/EWjcjhGY5WurDzvUNwIM9ppEvKJdc8G1voAV5Ei4c+hgzjTRdZPOP9A/bXtofZW5xow7c1AuAd3mfPG7ShzUE6qUnNoBVdGpBfss=AQABMIIByDCCATWgAwIBAgIPkfW6s5NHgUS/2MKUwgu7MAkGBSsOAwIdBQAwJzElMCMGA1UEAx4cAEoATwBTAEMASABcAEoAbwBoAGEAbgBuAGUAczAeFw0wNTA2MTMwNTEyMTBaFw0wNjA2MTMxMTEyMTBaMCcxJTAjBgNVBAMeHABKAE8AUwBDAEgAXABKAG8AaABhAG4AbgBlAHMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANXp8MgMMhA5HmXq21GZMpG7rnQP+ybh4lo01VNaxIc2o8jXitpKbxOgI+Has+XXHaVNpfLPxFo3I4RmOVrqw871DcCDPaaRLyiXXPBtb6AFeRIuHPoYM400XWTzj/QP217aH2VucaMO3NQLgHd5nzxu0oc1BOqlJzaAVXRqQX7LAgMBAAEwCQYFKw4DAh0FAAOBgQAOzqcUn7hKBv22lxwYlsNpyEHEK4aAbrJPNTjSVNVdWp7bBDAzVS/BeDwAKQuY6EoiFNxea51NgdrqQGvVvRbIWPIzTCWmTVho3/rOXJBOwXpThPRhVufuDY8pDl8IrzqtQoiEQKF0mxbEGfIMgx9N/QB63K5S5T4Ly31WHLwh2w== \ No newline at end of file diff --git a/Alarm/Alarm1/Alarm1/publish/setup.exe b/Alarm/Alarm1/Alarm1/publish/setup.exe new file mode 100644 index 0000000..4148a6c Binary files /dev/null and b/Alarm/Alarm1/Alarm1/publish/setup.exe differ diff --git a/Alarm/Alarm_1_0_0_1.application b/Alarm/Alarm_1_0_0_1.application new file mode 100644 index 0000000..0752c17 --- /dev/null +++ b/Alarm/Alarm_1_0_0_1.application @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + anBwsko0O/0865JOOhsYdRcq3XA= + + + +8aw2mUV8V2TZYRwohKMBHJfxfxA=u01dmcnpoqyV/4+AOK9ZTo0XYUY=fUVr2zj6UituWlNq9q9XzmwHuWxsbI0KNXEy8Sm8wUbFlJLHei3J1kBRyVdf+TuEIMch0MvByrpCfrjRVt/SwhAo+uMw1dALD4m74EIWqUClq2Gdv81FrD6QsG+LXM/SfLCo5DzJqt8i7B6owpx63bORWiPTGZjttj59zfGGq10=1enwyAwyEDkeZerbUZkykbuudA/7JuHiWjTVU1rEhzajyNeK2kpvE6Aj4dqz5dcdpU2l8s/EWjcjhGY5WurDzvUNwIM9ppEvKJdc8G1voAV5Ei4c+hgzjTRdZPOP9A/bXtofZW5xow7c1AuAd3mfPG7ShzUE6qUnNoBVdGpBfss=AQABCN=JOSCH\JohannesAK7/2rU5vEQDqQWoMGeF/kfb0Y4=kNgY84B1BhOLqArQyfBkUFAoEdZyg73es4p0QnD7bro+Bb8v70HV5aZq5ql0spCPFad4ktGERznyPYSMvzcm2xI9fUjhvLAJQFyun8m1ogok/CT2ySqeeHmQomT6FWG6T9V8IaVO0Nrz4ijIS3I77n+vsw9Ixs2fIUSOsl9zuD8=1enwyAwyEDkeZerbUZkykbuudA/7JuHiWjTVU1rEhzajyNeK2kpvE6Aj4dqz5dcdpU2l8s/EWjcjhGY5WurDzvUNwIM9ppEvKJdc8G1voAV5Ei4c+hgzjTRdZPOP9A/bXtofZW5xow7c1AuAd3mfPG7ShzUE6qUnNoBVdGpBfss=AQABMIIByDCCATWgAwIBAgIPkfW6s5NHgUS/2MKUwgu7MAkGBSsOAwIdBQAwJzElMCMGA1UEAx4cAEoATwBTAEMASABcAEoAbwBoAGEAbgBuAGUAczAeFw0wNTA2MTMwNTEyMTBaFw0wNjA2MTMxMTEyMTBaMCcxJTAjBgNVBAMeHABKAE8AUwBDAEgAXABKAG8AaABhAG4AbgBlAHMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANXp8MgMMhA5HmXq21GZMpG7rnQP+ybh4lo01VNaxIc2o8jXitpKbxOgI+Has+XXHaVNpfLPxFo3I4RmOVrqw871DcCDPaaRLyiXXPBtb6AFeRIuHPoYM400XWTzj/QP217aH2VucaMO3NQLgHd5nzxu0oc1BOqlJzaAVXRqQX7LAgMBAAEwCQYFKw4DAh0FAAOBgQAOzqcUn7hKBv22lxwYlsNpyEHEK4aAbrJPNTjSVNVdWp7bBDAzVS/BeDwAKQuY6EoiFNxea51NgdrqQGvVvRbIWPIzTCWmTVho3/rOXJBOwXpThPRhVufuDY8pDl8IrzqtQoiEQKF0mxbEGfIMgx9N/QB63K5S5T4Ly31WHLwh2w== \ No newline at end of file diff --git a/Alarm/Alarm_1_0_0_1/Alarm.exe.deploy b/Alarm/Alarm_1_0_0_1/Alarm.exe.deploy new file mode 100644 index 0000000..4a27ea3 Binary files /dev/null and b/Alarm/Alarm_1_0_0_1/Alarm.exe.deploy differ diff --git a/Alarm/Alarm_1_0_0_1/Alarm.exe.manifest b/Alarm/Alarm_1_0_0_1/Alarm.exe.manifest new file mode 100644 index 0000000..0814c9e --- /dev/null +++ b/Alarm/Alarm_1_0_0_1/Alarm.exe.manifest @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + zM+O0bCNAVt4OinNklbbMEzPNj4= + + + +LJI8Dc2QpFBEgvXtV742wxMbalA=nOcrao6FcsiG68ovNbjy6+IeDm8=iWvicaG4pbkpvP6qFzDgJbly4vKUVVJ0OjQsY/0OdzOIVXn6Rm7z8Mg6J4u5Gn8FuoEjbnyF7Ld6Aq0Tf52OJqVsII/MZQehBza3Tqt4s+N46F88+AtN4KYangHHcE9loTEmP7UWZ5sBihrane8l3h65MToJCUMP7sGhlfHuoa4=1enwyAwyEDkeZerbUZkykbuudA/7JuHiWjTVU1rEhzajyNeK2kpvE6Aj4dqz5dcdpU2l8s/EWjcjhGY5WurDzvUNwIM9ppEvKJdc8G1voAV5Ei4c+hgzjTRdZPOP9A/bXtofZW5xow7c1AuAd3mfPG7ShzUE6qUnNoBVdGpBfss=AQABCN=JOSCH\JohanneszdgXXObILvdfcpJj7oVd8JSkf90=UUuVn9lBSI51qKv7pFU7w94r6dV0YcflimAg9Ako9yH/bonby7OORC35FItSvqgXITbyYi1bsa5SrHMyMSlpOvFMvYDjqEoFoOuR14MnldkjgbEfPWUKkORs95pxy4dpBZJ+XoDq2qjdvA4WpZwHwOgTgcBC3015cS9cOqKrRXA=1enwyAwyEDkeZerbUZkykbuudA/7JuHiWjTVU1rEhzajyNeK2kpvE6Aj4dqz5dcdpU2l8s/EWjcjhGY5WurDzvUNwIM9ppEvKJdc8G1voAV5Ei4c+hgzjTRdZPOP9A/bXtofZW5xow7c1AuAd3mfPG7ShzUE6qUnNoBVdGpBfss=AQABMIIByDCCATWgAwIBAgIPkfW6s5NHgUS/2MKUwgu7MAkGBSsOAwIdBQAwJzElMCMGA1UEAx4cAEoATwBTAEMASABcAEoAbwBoAGEAbgBuAGUAczAeFw0wNTA2MTMwNTEyMTBaFw0wNjA2MTMxMTEyMTBaMCcxJTAjBgNVBAMeHABKAE8AUwBDAEgAXABKAG8AaABhAG4AbgBlAHMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANXp8MgMMhA5HmXq21GZMpG7rnQP+ybh4lo01VNaxIc2o8jXitpKbxOgI+Has+XXHaVNpfLPxFo3I4RmOVrqw871DcCDPaaRLyiXXPBtb6AFeRIuHPoYM400XWTzj/QP217aH2VucaMO3NQLgHd5nzxu0oc1BOqlJzaAVXRqQX7LAgMBAAEwCQYFKw4DAh0FAAOBgQAOzqcUn7hKBv22lxwYlsNpyEHEK4aAbrJPNTjSVNVdWp7bBDAzVS/BeDwAKQuY6EoiFNxea51NgdrqQGvVvRbIWPIzTCWmTVho3/rOXJBOwXpThPRhVufuDY8pDl8IrzqtQoiEQKF0mxbEGfIMgx9N/QB63K5S5T4Ly31WHLwh2w== \ No newline at end of file diff --git a/Alarm/AssemblyInfo.cs b/Alarm/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/Alarm/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/Alarm/MainForm.cs b/Alarm/MainForm.cs new file mode 100644 index 0000000..65912ff --- /dev/null +++ b/Alarm/MainForm.cs @@ -0,0 +1,211 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using System.IO; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectSound; +using Buffer = Microsoft.DirectX.DirectSound.SecondaryBuffer; + +public class MainForm : Form +{ + private System.ComponentModel.Container components = null; + private Button btnSoundfile; + private Label lblFilename; + private CheckBox cbLoopCheck; + private Button btnPlay; + private Button btnStop; + private Button btnCancel; + + private SecondaryBuffer ApplicationBuffer = null; + private Device ApplicationDevice = null; + private string PathSoundFile = string.Empty; + + public static int Main(string[] Args) + { + Application.Run(new MainForm()); + return 0; + } + + protected override void Dispose( bool disposing ) + { + if(disposing) + { + if (null != components) + { + components.Dispose(); + } + } + base.Dispose(disposing); + } + public MainForm() + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + } + #region InitializeComponent code + private void InitializeComponent() + { + this.btnSoundfile = new System.Windows.Forms.Button(); + this.lblFilename = new System.Windows.Forms.Label(); + this.cbLoopCheck = new System.Windows.Forms.CheckBox(); + this.btnPlay = new System.Windows.Forms.Button(); + this.btnStop = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnSoundfile + // + this.btnSoundfile.Location = new System.Drawing.Point(10, 11); + this.btnSoundfile.Name = "btnSoundfile"; + this.btnSoundfile.Size = new System.Drawing.Size(69, 21); + this.btnSoundfile.TabIndex = 0; + this.btnSoundfile.Text = "Sound &file..."; + this.btnSoundfile.Click += new System.EventHandler(this.btnSoundfile_Click); + // + // lblFilename + // + this.lblFilename.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.lblFilename.Location = new System.Drawing.Point(94, 11); + this.lblFilename.Name = "lblFilename"; + this.lblFilename.Size = new System.Drawing.Size(345, 21); + this.lblFilename.TabIndex = 1; + this.lblFilename.Text = "No file loaded."; + this.lblFilename.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // cbLoopCheck + // + this.cbLoopCheck.Enabled = false; + this.cbLoopCheck.Location = new System.Drawing.Point(9, 44); + this.cbLoopCheck.Name = "cbLoopCheck"; + this.cbLoopCheck.Size = new System.Drawing.Size(87, 16); + this.cbLoopCheck.TabIndex = 2; + this.cbLoopCheck.Text = "&Loop sound"; + // + // btnPlay + // + this.btnPlay.Enabled = false; + this.btnPlay.Location = new System.Drawing.Point(104, 48); + this.btnPlay.Name = "btnPlay"; + this.btnPlay.TabIndex = 3; + this.btnPlay.Text = "&Play"; + this.btnPlay.Click += new System.EventHandler(this.btnPlay_Click); + // + // btnStop + // + this.btnStop.Enabled = false; + this.btnStop.Location = new System.Drawing.Point(176, 48); + this.btnStop.Name = "btnStop"; + this.btnStop.TabIndex = 4; + this.btnStop.Text = "&Stop"; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // btnCancel + // + this.btnCancel.Location = new System.Drawing.Point(364, 48); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.TabIndex = 5; + this.btnCancel.Text = "E&xit"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // MainForm + // + this.AcceptButton = this.btnSoundfile; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(450, 77); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.btnSoundfile, + this.lblFilename, + this.cbLoopCheck, + this.btnPlay, + this.btnStop, + this.btnCancel}); + this.Name = "MainForm"; + this.Text = "PlaySound"; + this.Load += new System.EventHandler(this.MainForm_Load); + this.ResumeLayout(false); + + } + #endregion + + private void btnCancel_Click(object sender, System.EventArgs e) + { + Close(); + } + + private void btnStop_Click(object sender, System.EventArgs e) + { + if(null != ApplicationBuffer) + ApplicationBuffer.Stop(); + } + + private void btnSoundfile_Click(object sender, System.EventArgs e) + { + OpenFileDialog ofd = new OpenFileDialog(); + +// if(string.Empty == PathSoundFile) +// PathSoundFile = DXUtil.SdkMediaPath; + + ofd.InitialDirectory = PathSoundFile; + ofd.Filter= "Wave files(*.wav)|*.wav"; + + if( DialogResult.Cancel == ofd.ShowDialog() ) + return; + + if(LoadSoundFile(ofd.FileName)) + { + PathSoundFile = Path.GetDirectoryName(ofd.FileName); + lblFilename.Text = Path.GetFileName(ofd.FileName); + EnablePlayUI(true); + } + else + { + lblFilename.Text = "No file loaded."; + EnablePlayUI(false); + } + } + + private bool LoadSoundFile(string name) + { + try + { + ApplicationBuffer = new SecondaryBuffer(name, ApplicationDevice); + } + catch(SoundException) + { + return false; + } + return true; + } + + private void EnablePlayUI(bool enable) + { + if (enable) + { + cbLoopCheck.Enabled = true; + btnCancel.Enabled = true; + btnPlay.Enabled = true; + btnStop.Enabled = true; + } + else + { + cbLoopCheck.Enabled = false; + btnCancel.Enabled = false; + btnPlay.Enabled = false; + btnStop.Enabled = false; + } + } + + private void MainForm_Load(object sender, System.EventArgs e) + { + ApplicationDevice = new Device(); + ApplicationDevice.SetCooperativeLevel(this, CooperativeLevel.Priority); + } + + private void btnPlay_Click(object sender, System.EventArgs e) + { + if(null != ApplicationBuffer) + ApplicationBuffer.Play(0, (cbLoopCheck.Checked ? BufferPlayFlags.Looping : BufferPlayFlags.Default)); + } +} diff --git a/Alarm/MainForm.resources b/Alarm/MainForm.resources new file mode 100644 index 0000000..bf8d7ca Binary files /dev/null and b/Alarm/MainForm.resources differ diff --git a/Alarm/setup.exe b/Alarm/setup.exe new file mode 100644 index 0000000..4148a6c Binary files /dev/null and b/Alarm/setup.exe differ diff --git a/BitrateCalc/AssemblyInfo.cs b/BitrateCalc/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/BitrateCalc/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/BitrateCalc/BitrateCalc.MainForm.resources b/BitrateCalc/BitrateCalc.MainForm.resources new file mode 100644 index 0000000..717e002 Binary files /dev/null and b/BitrateCalc/BitrateCalc.MainForm.resources differ diff --git a/BitrateCalc/BitrateCalc.cmbx b/BitrateCalc/BitrateCalc.cmbx new file mode 100644 index 0000000..76bf869 --- /dev/null +++ b/BitrateCalc/BitrateCalc.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BitrateCalc/BitrateCalc.prjx b/BitrateCalc/BitrateCalc.prjx new file mode 100644 index 0000000..8c517a8 --- /dev/null +++ b/BitrateCalc/BitrateCalc.prjx @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BitrateCalc/MainForm.cs b/BitrateCalc/MainForm.cs new file mode 100644 index 0000000..9e2c190 --- /dev/null +++ b/BitrateCalc/MainForm.cs @@ -0,0 +1,289 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 28.03.2005 + * Time: 13:40 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace BitrateCalc +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox tbAudioBitratekBits; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label lVideoBitratekBits; + private System.Windows.Forms.Label lAudioSizeMB; + private System.Windows.Forms.TextBox tbLenghtmin; + private System.Windows.Forms.Label lLenghtsec; + private System.Windows.Forms.TextBox tbFilesizeMB; + private System.Windows.Forms.Label lVideoSizeMB; + private System.Windows.Forms.Label lFilesizeByte; + public MainForm() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.lFilesizeByte = new System.Windows.Forms.Label(); + this.lVideoSizeMB = new System.Windows.Forms.Label(); + this.tbFilesizeMB = new System.Windows.Forms.TextBox(); + this.lLenghtsec = new System.Windows.Forms.Label(); + this.tbLenghtmin = new System.Windows.Forms.TextBox(); + this.lAudioSizeMB = new System.Windows.Forms.Label(); + this.lVideoBitratekBits = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.tbAudioBitratekBits = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lFilesizeByte + // + this.lFilesizeByte.Location = new System.Drawing.Point(304, 40); + this.lFilesizeByte.Name = "lFilesizeByte"; + this.lFilesizeByte.Size = new System.Drawing.Size(136, 23); + this.lFilesizeByte.TabIndex = 10; + this.lFilesizeByte.Text = "(- byte)"; + this.lFilesizeByte.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lVideoSizeMB + // + this.lVideoSizeMB.Location = new System.Drawing.Point(192, 144); + this.lVideoSizeMB.Name = "lVideoSizeMB"; + this.lVideoSizeMB.Size = new System.Drawing.Size(152, 24); + this.lVideoSizeMB.TabIndex = 12; + this.lVideoSizeMB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // tbFilesizeMB + // + this.tbFilesizeMB.Location = new System.Drawing.Point(192, 40); + this.tbFilesizeMB.Name = "tbFilesizeMB"; + this.tbFilesizeMB.TabIndex = 3; + this.tbFilesizeMB.Text = ""; + this.tbFilesizeMB.TextChanged += new System.EventHandler(this.TbFilesizeTextChanged); + // + // lLenghtsec + // + this.lLenghtsec.Location = new System.Drawing.Point(304, 8); + this.lLenghtsec.Name = "lLenghtsec"; + this.lLenghtsec.Size = new System.Drawing.Size(136, 23); + this.lLenghtsec.TabIndex = 9; + this.lLenghtsec.Text = "(- sek)"; + this.lLenghtsec.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // tbLenghtmin + // + this.tbLenghtmin.Location = new System.Drawing.Point(192, 8); + this.tbLenghtmin.Name = "tbLenghtmin"; + this.tbLenghtmin.TabIndex = 1; + this.tbLenghtmin.Text = ""; + this.tbLenghtmin.TextChanged += new System.EventHandler(this.TbLenghtminTextChanged); + // + // lAudioSizeMB + // + this.lAudioSizeMB.Location = new System.Drawing.Point(192, 112); + this.lAudioSizeMB.Name = "lAudioSizeMB"; + this.lAudioSizeMB.Size = new System.Drawing.Size(152, 24); + this.lAudioSizeMB.TabIndex = 11; + this.lAudioSizeMB.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lVideoBitratekBits + // + this.lVideoBitratekBits.Location = new System.Drawing.Point(192, 176); + this.lVideoBitratekBits.Name = "lVideoBitratekBits"; + this.lVideoBitratekBits.Size = new System.Drawing.Size(152, 24); + this.lVideoBitratekBits.TabIndex = 13; + this.lVideoBitratekBits.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(8, 72); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(184, 24); + this.label3.TabIndex = 4; + this.label3.Text = "Bitrate des Audiostreams in kBit/s:"; + this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // tbAudioBitratekBits + // + this.tbAudioBitratekBits.Location = new System.Drawing.Point(192, 72); + this.tbAudioBitratekBits.Name = "tbAudioBitratekBits"; + this.tbAudioBitratekBits.TabIndex = 5; + this.tbAudioBitratekBits.Text = "128"; + this.tbAudioBitratekBits.TextChanged += new System.EventHandler(this.TbAudioBitratekBitsTextChanged); + // + // label5 + // + this.label5.Location = new System.Drawing.Point(8, 144); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(184, 24); + this.label5.TabIndex = 7; + this.label5.Text = "Größe des Videostreams in MB:"; + this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // label6 + // + this.label6.Location = new System.Drawing.Point(8, 176); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(184, 24); + this.label6.TabIndex = 8; + this.label6.Text = "Bitrate des Videostreams in kBit/s:"; + this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(48, 8); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(144, 24); + this.label1.TabIndex = 0; + this.label1.Text = "Länge des Films in Minuten:"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(56, 40); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(136, 24); + this.label2.TabIndex = 2; + this.label2.Text = "Zielgröße in MB:"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // label4 + // + this.label4.Location = new System.Drawing.Point(8, 112); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(184, 24); + this.label4.TabIndex = 6; + this.label4.Text = "Größe des Audiostreams in MB:"; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // BitrateCalc + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(448, 205); + this.Controls.Add(this.lVideoBitratekBits); + this.Controls.Add(this.lVideoSizeMB); + this.Controls.Add(this.lAudioSizeMB); + this.Controls.Add(this.lFilesizeByte); + this.Controls.Add(this.lLenghtsec); + this.Controls.Add(this.label6); + this.Controls.Add(this.label5); + this.Controls.Add(this.label4); + this.Controls.Add(this.tbAudioBitratekBits); + this.Controls.Add(this.label3); + this.Controls.Add(this.tbFilesizeMB); + this.Controls.Add(this.label2); + this.Controls.Add(this.tbLenghtmin); + this.Controls.Add(this.label1); + this.Name = "BitrateCalc"; + this.Text = "BitrateCalc"; + this.ResumeLayout(false); + } + #endregion + + void TbLenghtminTextChanged(object sender, System.EventArgs e) + { + if(tbLenghtmin.Text!="") + { + lLenghtsec.Text = "("+Convert.ToString(Convert.ToDecimal(tbLenghtmin.Text)*60)+" sek)"; + CalculateAudioStream(); + CalculateVideoStream(); + CalculateVideoBitrate(); + } else { + lLenghtsec.Text = "(- sek)"; + lAudioSizeMB.Text = ""; + lVideoSizeMB.Text = ""; + lVideoBitratekBits.Text = ""; + } + } + + void TbFilesizeTextChanged(object sender, System.EventArgs e) + { + if(tbFilesizeMB.Text!="") + { + lFilesizeByte.Text = "("+Convert.ToString(Convert.ToDecimal(tbFilesizeMB.Text)*1048576)+" byte)"; + CalculateAudioStream(); + CalculateVideoStream(); + CalculateVideoBitrate(); + } else { + lFilesizeByte.Text = "(- byte)"; + lAudioSizeMB.Text = ""; + lVideoSizeMB.Text = ""; + lVideoBitratekBits.Text = ""; + } + } + + void TbAudioBitratekBitsTextChanged(object sender, System.EventArgs e) + { + if(tbAudioBitratekBits.Text!="") + { + CalculateAudioStream(); + CalculateVideoStream(); + CalculateVideoBitrate(); + } else { + lAudioSizeMB.Text = ""; + lVideoSizeMB.Text = ""; + lVideoBitratekBits.Text = ""; + } + } + + void CalculateAudioStream() + { + if(tbAudioBitratekBits.Text!=""&&tbLenghtmin.Text!="") + { + lAudioSizeMB.Text = Convert.ToString(Math.Round(Convert.ToDouble(tbLenghtmin.Text)*Convert.ToDouble(tbAudioBitratekBits.Text)*0.007152557373046875, 2))+" ("+Convert.ToString(Math.Round(Convert.ToDouble(tbLenghtmin.Text)*Convert.ToDouble(tbAudioBitratekBits.Text)*7500))+" byte)"; + } + } + + void CalculateVideoStream() + { + if(tbAudioBitratekBits.Text!=""&&tbLenghtmin.Text!=""&&tbFilesizeMB.Text!="") + { + lVideoSizeMB.Text = Convert.ToString(Math.Round(Convert.ToDouble(tbFilesizeMB.Text)-Convert.ToDouble(tbLenghtmin.Text)*Convert.ToDouble(tbAudioBitratekBits.Text)*0.007152557373046875, 2))+" ("+Convert.ToString(Math.Round(Convert.ToDouble(tbFilesizeMB.Text)*1048576-Convert.ToDouble(tbLenghtmin.Text)*Convert.ToDouble(tbAudioBitratekBits.Text)*7500))+" byte)"; + } + } + + void CalculateVideoBitrate() + { + if(tbAudioBitratekBits.Text!=""&&tbLenghtmin.Text!=""&&tbFilesizeMB.Text!="") + { + lVideoBitratekBits.Text = Convert.ToString(Math.Round((Convert.ToDouble(tbFilesizeMB.Text)*8388.608-Convert.ToDouble(tbLenghtmin.Text)*Convert.ToDouble(tbAudioBitratekBits.Text)*60)/(Convert.ToDouble(tbLenghtmin.Text)*60))); + } + } + } +} diff --git a/C# Viewer/AssemblyInfo.cs b/C# Viewer/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/C# Viewer/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/C# Viewer/C# Viewer.cmbx b/C# Viewer/C# Viewer.cmbx new file mode 100644 index 0000000..31c96e8 --- /dev/null +++ b/C# Viewer/C# Viewer.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/C# Viewer/C# Viewer.prjx b/C# Viewer/C# Viewer.prjx new file mode 100644 index 0000000..bbf439a --- /dev/null +++ b/C# Viewer/C# Viewer.prjx @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/C# Viewer/C__Viewer.MainForm.resources b/C# Viewer/C__Viewer.MainForm.resources new file mode 100644 index 0000000..71fe4c1 Binary files /dev/null and b/C# Viewer/C__Viewer.MainForm.resources differ diff --git a/C# Viewer/MainForm.cs b/C# Viewer/MainForm.cs new file mode 100644 index 0000000..e21c07a --- /dev/null +++ b/C# Viewer/MainForm.cs @@ -0,0 +1,124 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 01.06.2005 + * Time: 10:40 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.IO; +using System.Drawing; +using System.Text.RegularExpressions; +using System.Windows.Forms; + +namespace C__Viewer +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + private System.Windows.Forms.RichTextBox richTextBox1; + private System.Windows.Forms.MainMenu mainMenu1; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.MenuItem menuItem2; + private System.Windows.Forms.MenuItem menuItem1; + public static string path; + public MainForm(string[] args) + { + + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm(args)); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.menuItem1 = new System.Windows.Forms.MenuItem(); + this.menuItem2 = new System.Windows.Forms.MenuItem(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.mainMenu1 = new System.Windows.Forms.MainMenu(); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.SuspendLayout(); + // + // menuItem1 + // + this.menuItem1.Index = 0; + this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.menuItem2}); + this.menuItem1.Text = "Datei"; + // + // menuItem2 + // + this.menuItem2.Index = 0; + this.menuItem2.Text = "Öffnen..."; + this.menuItem2.Click += new System.EventHandler(this.MenuItem2Click); + // + // openFileDialog1 + // + this.openFileDialog1.Filter = "C# Dateien|*.cs|Alle Dateien|*.*"; + // + // mainMenu1 + // + this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.menuItem1}); + // + // richTextBox1 + // + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(544, 421); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = ""; + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(544, 421); + this.Controls.Add(this.richTextBox1); + this.Menu = this.mainMenu1; + this.Name = "MainForm"; + this.Text = "MainForm"; + this.ResumeLayout(false); + } + #endregion + + void MenuItem2Click(object sender, System.EventArgs e) + { + if(openFileDialog1.ShowDialog() == DialogResult.OK) + { + using (StreamReader sr = new StreamReader(openFileDialog1.FileName)) + { + String line; + while ((line = sr.ReadLine()) != null) + { + richTextBox1.Text += line+"\n"; + } + + richTextBox1.Find("public", RichTextBoxFinds.WholeWord); + richTextBox1.SelectionColor = Color.Blue; + } + } + } + + } +} diff --git a/Chat 3/AssemblyInfo.cs b/Chat 3/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/Chat 3/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/Chat 3/Chat 3.cmbx b/Chat 3/Chat 3.cmbx new file mode 100644 index 0000000..0395509 --- /dev/null +++ b/Chat 3/Chat 3.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chat 3/Chat 3.prjx b/Chat 3/Chat 3.prjx new file mode 100644 index 0000000..5d8caa0 --- /dev/null +++ b/Chat 3/Chat 3.prjx @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chat 3/Chat_3.EinstellungenForm.resources b/Chat 3/Chat_3.EinstellungenForm.resources new file mode 100644 index 0000000..fc9e647 Binary files /dev/null and b/Chat 3/Chat_3.EinstellungenForm.resources differ diff --git a/Chat 3/Chat_3.MainForm.resources b/Chat 3/Chat_3.MainForm.resources new file mode 100644 index 0000000..9d7dd93 Binary files /dev/null and b/Chat 3/Chat_3.MainForm.resources differ diff --git a/Chat 3/Chat_3.ÜberForm.resources b/Chat 3/Chat_3.ÜberForm.resources new file mode 100644 index 0000000..d4ab2e3 Binary files /dev/null and b/Chat 3/Chat_3.ÜberForm.resources differ diff --git a/Chat 3/EinstellungenForm.cs b/Chat 3/EinstellungenForm.cs new file mode 100644 index 0000000..eb83784 --- /dev/null +++ b/Chat 3/EinstellungenForm.cs @@ -0,0 +1,194 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 02.06.2005 + * Time: 21:07 + */ + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace Chat_3 +{ + /// + /// Description of EinstellungenForm. + /// + public class EinstellungenForm : System.Windows.Forms.Form + { + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnSchriftart; + private System.Windows.Forms.FontDialog fontDialog1; + private System.Windows.Forms.CheckBox cbVordergrund; + private System.Windows.Forms.RichTextBox txtTest; + private System.Windows.Forms.Button btnAbbrechen; + private System.Windows.Forms.TextBox txtBenutzer; + + public Font font; + public Color color; + public string benutzer; + public bool vordergrund; + + public EinstellungenForm(Font f, Color c, string b, bool v) + { + InitializeComponent(); + fontDialog1.Font = f; + fontDialog1.Color = c; + txtBenutzer.Text = b; + cbVordergrund.Checked = v; + Aktualisiere(); + + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.txtBenutzer = new System.Windows.Forms.TextBox(); + this.btnAbbrechen = new System.Windows.Forms.Button(); + this.txtTest = new System.Windows.Forms.RichTextBox(); + this.cbVordergrund = new System.Windows.Forms.CheckBox(); + this.fontDialog1 = new System.Windows.Forms.FontDialog(); + this.btnSchriftart = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // txtBenutzer + // + this.txtBenutzer.Location = new System.Drawing.Point(120, 16); + this.txtBenutzer.Name = "txtBenutzer"; + this.txtBenutzer.Size = new System.Drawing.Size(120, 20); + this.txtBenutzer.TabIndex = 2; + this.txtBenutzer.Text = "JoSch"; + this.txtBenutzer.TextChanged += new System.EventHandler(this.TxtBenutzerTextChanged); + // + // btnAbbrechen + // + this.btnAbbrechen.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnAbbrechen.Location = new System.Drawing.Point(136, 192); + this.btnAbbrechen.Name = "btnAbbrechen"; + this.btnAbbrechen.TabIndex = 1; + this.btnAbbrechen.Text = "A&bbrechen"; + // + // txtTest + // + this.txtTest.Location = new System.Drawing.Point(16, 88); + this.txtTest.Name = "txtTest"; + this.txtTest.ReadOnly = true; + this.txtTest.Size = new System.Drawing.Size(192, 40); + this.txtTest.TabIndex = 7; + this.txtTest.Text = ""; + // + // cbVordergrund + // + this.cbVordergrund.Location = new System.Drawing.Point(40, 136); + this.cbVordergrund.Name = "cbVordergrund"; + this.cbVordergrund.Size = new System.Drawing.Size(168, 24); + this.cbVordergrund.TabIndex = 10; + this.cbVordergrund.Text = "Immer im Vordergrund"; + // + // fontDialog1 + // + this.fontDialog1.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.fontDialog1.ShowColor = true; + // + // btnSchriftart + // + this.btnSchriftart.Location = new System.Drawing.Point(224, 96); + this.btnSchriftart.Name = "btnSchriftart"; + this.btnSchriftart.TabIndex = 8; + this.btnSchriftart.Text = "Schriftart"; + this.btnSchriftart.Click += new System.EventHandler(this.BtnSchriftartClick); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(24, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(88, 24); + this.label1.TabIndex = 3; + this.label1.Text = "Benutzername:"; + this.label1.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 48); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(272, 40); + this.label2.TabIndex = 9; + this.label2.Text = "Die eingestellte Farbe ist für alle sichtbar, die ausgewählte Schriftart erschein" + +"t nur bei dir."; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(224, 192); + this.btnOK.Name = "btnOK"; + this.btnOK.TabIndex = 0; + this.btnOK.Text = "&OK"; + this.btnOK.Click += new System.EventHandler(this.BtnOKClick); + // + // EinstellungenForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnAbbrechen; + this.ClientSize = new System.Drawing.Size(314, 231); + this.Controls.Add(this.cbVordergrund); + this.Controls.Add(this.label2); + this.Controls.Add(this.btnSchriftart); + this.Controls.Add(this.txtTest); + this.Controls.Add(this.label1); + this.Controls.Add(this.txtBenutzer); + this.Controls.Add(this.btnAbbrechen); + this.Controls.Add(this.btnOK); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.KeyPreview = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "EinstellungenForm"; + this.Text = "Einstellungen"; + this.ResumeLayout(false); + } + #endregion + + void BtnOKClick(object sender, System.EventArgs e) + { + this.DialogResult = DialogResult.OK; + font = fontDialog1.Font; + color = fontDialog1.Color; + benutzer = txtBenutzer.Text; + vordergrund = cbVordergrund.Checked; + this.Close(); + } + + void TxtBenutzerTextChanged(object sender, System.EventArgs e) + { + Aktualisiere(); + } + + void Aktualisiere() + { + txtTest.Text = ""; + txtTest.SelectionFont = fontDialog1.Font; + txtTest.SelectionColor = fontDialog1.Color; + txtTest.SelectedText = txtBenutzer.Text; + txtTest.SelectionFont = new Font("Tahoma", 10, FontStyle.Bold); + txtTest.SelectionColor = System.Drawing.Color.FromArgb(0, 0, 0); + txtTest.SelectedText = " (13:24:06): hiho!"; + } + + void BtnSchriftartClick(object sender, System.EventArgs e) + { + if(fontDialog1.ShowDialog()==DialogResult.OK) + { + Aktualisiere(); + } + } + } +} diff --git a/Chat 3/MainForm.cs b/Chat 3/MainForm.cs new file mode 100644 index 0000000..c5ab143 --- /dev/null +++ b/Chat 3/MainForm.cs @@ -0,0 +1,423 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 01.06.2005 + * Time: 19:10 + */ +using System; +using System.Drawing; +using System.Windows.Forms; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; + +namespace Chat_3 +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + private System.ComponentModel.IContainer components; + private System.Windows.Forms.MenuItem menuItem5; + private System.Windows.Forms.MenuItem menuItem4; + private System.Windows.Forms.Button btnSend; + private System.Windows.Forms.Button btnMenü; + private System.Windows.Forms.NotifyIcon notifyIcon1; + private System.Windows.Forms.ImageList Bilder; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.RichTextBox txtSend; + private System.Windows.Forms.ListView lstUser; + private System.Windows.Forms.RichTextBox txtmsg; + private System.Windows.Forms.ContextMenu Taskleiste; + private System.Windows.Forms.MenuItem menuItem3; + private System.Windows.Forms.MenuItem menuItem2; + private System.Windows.Forms.MenuItem menuItem1; + + private Thread t1 = null; + private Thread t2 = null; + private Socket s = null; + + private Font font; + private Color color; + private string benutzer; + private bool vordergrund; + private string status; + + public MainForm() + { + InitializeComponent(); + + font = new Font("Tahoma", 10, FontStyle.Bold); + color = System.Drawing.Color.FromArgb(255, 0, 0); + benutzer = "JoSch"; + vordergrund = false; + status = "Online"; + + t1 = new Thread(new ThreadStart(Identifizieren)); + t1.Start(); + t2 = new Thread(new ThreadStart(Empfangen)); + t2.Start(); + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(MainForm)); + this.menuItem1 = new System.Windows.Forms.MenuItem(); + this.menuItem2 = new System.Windows.Forms.MenuItem(); + this.menuItem3 = new System.Windows.Forms.MenuItem(); + this.Taskleiste = new System.Windows.Forms.ContextMenu(); + this.txtmsg = new System.Windows.Forms.RichTextBox(); + this.lstUser = new System.Windows.Forms.ListView(); + this.txtSend = new System.Windows.Forms.RichTextBox(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.Bilder = new System.Windows.Forms.ImageList(this.components); + this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); + this.btnMenü = new System.Windows.Forms.Button(); + this.btnSend = new System.Windows.Forms.Button(); + this.menuItem4 = new System.Windows.Forms.MenuItem(); + this.menuItem5 = new System.Windows.Forms.MenuItem(); + this.SuspendLayout(); + // + // menuItem1 + // + this.menuItem1.Index = 0; + this.menuItem1.Text = "Chat 3 minimieren"; + this.menuItem1.Click += new System.EventHandler(this.Minimieren); + // + // menuItem2 + // + this.menuItem2.Index = 1; + this.menuItem2.Text = "Einstellungen"; + this.menuItem2.Click += new System.EventHandler(this.EinstellungenÖffnen); + // + // menuItem3 + // + this.menuItem3.Index = 2; + this.menuItem3.Text = "Chat 3 beenden"; + this.menuItem3.Click += new System.EventHandler(this.Beenden); + // + // Taskleiste + // + this.Taskleiste.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.menuItem1, + this.menuItem2, + this.menuItem3, + this.menuItem4, + this.menuItem5}); + // + // txtmsg + // + this.txtmsg.Location = new System.Drawing.Point(8, 8); + this.txtmsg.Name = "txtmsg"; + this.txtmsg.ReadOnly = true; + this.txtmsg.Size = new System.Drawing.Size(384, 352); + this.txtmsg.TabIndex = 4; + this.txtmsg.Text = ""; + // + // lstUser + // + this.lstUser.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1, + this.columnHeader2}); + this.lstUser.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.lstUser.Location = new System.Drawing.Point(400, 8); + this.lstUser.Name = "lstUser"; + this.lstUser.Size = new System.Drawing.Size(144, 416); + this.lstUser.SmallImageList = this.Bilder; + this.lstUser.TabIndex = 7; + this.lstUser.View = System.Windows.Forms.View.Details; + // + // txtSend + // + this.txtSend.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.txtSend.Location = new System.Drawing.Point(8, 368); + this.txtSend.Name = "txtSend"; + this.txtSend.Size = new System.Drawing.Size(296, 64); + this.txtSend.TabIndex = 0; + this.txtSend.Text = ""; + this.txtSend.TextChanged += new System.EventHandler(this.TxtSendTextChanged); + // + // columnHeader2 + // + this.columnHeader2.Text = "Status"; + // + // columnHeader1 + // + this.columnHeader1.Text = "Benutzer"; + this.columnHeader1.Width = 80; + // + // Bilder + // + this.Bilder.ImageSize = new System.Drawing.Size(16, 16); + this.Bilder.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("Bilder.ImageStream"))); + this.Bilder.TransparentColor = System.Drawing.Color.Transparent; + // + // notifyIcon1 + // + this.notifyIcon1.ContextMenu = this.Taskleiste; + this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); + this.notifyIcon1.Text = "Chat 3"; + this.notifyIcon1.Visible = true; + // + // btnMenü + // + this.btnMenü.Location = new System.Drawing.Point(312, 408); + this.btnMenü.Name = "btnMenü"; + this.btnMenü.Size = new System.Drawing.Size(80, 24); + this.btnMenü.TabIndex = 5; + this.btnMenü.Text = "Menü öffnen"; + this.btnMenü.Click += new System.EventHandler(this.BtnMenüClick); + // + // btnSend + // + this.btnSend.Enabled = false; + this.btnSend.Location = new System.Drawing.Point(312, 368); + this.btnSend.Name = "btnSend"; + this.btnSend.Size = new System.Drawing.Size(80, 24); + this.btnSend.TabIndex = 1; + this.btnSend.Text = "Senden"; + this.btnSend.Click += new System.EventHandler(this.BtnSendClick); + // + // menuItem4 + // + this.menuItem4.Index = 3; + this.menuItem4.Text = "In den Vordergrund"; + this.menuItem4.Click += new System.EventHandler(this.Vordergrund); + // + // menuItem5 + // + this.menuItem5.Index = 4; + this.menuItem5.Text = "Über..."; + this.menuItem5.Click += new System.EventHandler(this.ÜberÖffnen); + // + // MainForm + // + this.AcceptButton = this.btnSend; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(552, 437); + this.Controls.Add(this.lstUser); + this.Controls.Add(this.txtSend); + this.Controls.Add(this.btnMenü); + this.Controls.Add(this.txtmsg); + this.Controls.Add(this.btnSend); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "MainForm"; + this.ShowInTaskbar = false; + this.Text = "Chat 3"; + this.Closed += new System.EventHandler(this.MainFormClosed); + this.ResumeLayout(false); + } + #endregion + + #region Network Functions + void Empfangen() + { + s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); + s.Bind(new IPEndPoint(IPAddress.Any, 4378)); + + string temp = ""; + + while(true) + { + byte[] buffer = new byte[256]; + s.Receive(buffer); + string received = Encoding.Unicode.GetString(buffer); + buffer = null; + + string[] token = received.Split(new char[] {'‼'}); + if(token[0] == "Nachricht") + { + if(token[2]!=temp) + { + txtmsg.SelectionFont = font; + txtmsg.SelectionColor = System.Drawing.Color.FromArgb(int.Parse(token[4]), + int.Parse(token[5]), + int.Parse(token[6])); + + txtmsg.SelectedText = token[1]; + txtmsg.ScrollToCaret(); + + txtmsg.SelectionFont = font; + txtmsg.SelectionColor = System.Drawing.Color.FromArgb(0, 0, 0); + txtmsg.SelectedText = " ("+token[2]+"): "+token[3]; + txtmsg.SelectedText = "\r\n"; + txtmsg.ScrollToCaret(); + temp = token[2]; + } + } + else if(token[0] == "Status") + { + bool isfound = false; + foreach(ListViewItem i in lstUser.Items) + { + TimeSpan timeout = DateTime.Now - DateTime.Parse(i.SubItems[2].Text); + + if(timeout.TotalMilliseconds < 10000) + { + if(token[1]==i.Text) + { + i.SubItems[1].Text = token[3]; + i.SubItems[2].Text = token[2]; + isfound = true; + } + } + else + { + i.Remove(); + } + } + + if(!isfound) + { + int count = lstUser.Items.Add(token[1]).Index; + lstUser.Items[count].SubItems.Add(token[3]); + lstUser.Items[count].SubItems.Add(token[2]); + lstUser.Items[count].ImageIndex = 0; + } + } + } + } + + void Senden() + { + UdpClient client = new UdpClient(); + IPEndPoint ipepbc = new IPEndPoint(IPAddress.Broadcast, 4378); + byte[] msg = Encoding.Unicode.GetBytes("Nachricht"+"‼"+benutzer+"‼"+DateTime.Now.ToLongTimeString() + +"‼"+txtSend.Text+"‼"+color.R.ToString() + +"‼"+color.G.ToString()+"‼"+color.B.ToString()); + if(msg.Length < 256) + { + client.Send(msg, msg.Length, ipepbc); + txtSend.Text = ""; + } + else + { + MessageBox.Show("Nachricht zu lang!"); + } + client.Close(); + } + + void Identifizieren() + { + UdpClient client = new UdpClient(); + IPEndPoint ipepbc = new IPEndPoint(IPAddress.Broadcast, 4378); + + while(true) + { + byte[] msg = Encoding.Unicode.GetBytes("Status"+"‼"+benutzer+"‼" + +DateTime.Now.ToLongTimeString() + +"‼"+status); + client.Send(msg, msg.Length, ipepbc); + Thread.Sleep(2000); + } + } + #endregion + + #region Eventhandler Functions + void MainFormClosed(object sender, System.EventArgs e) + { + if(s != null) + { + s.Close(); + } + if(t1!=null) + { + t1.Abort(); + } + if(t2!=null) + { + t2.Abort(); + } + notifyIcon1.Dispose(); + } + + void TxtSendTextChanged(object sender, System.EventArgs e) + { + btnSend.Enabled = (txtSend.Text.Length > 0); + status = "Schreibt"; + } + + void BtnSendClick(object sender, System.EventArgs e) + { + Senden(); + status = "Online"; + } + + void BtnMenüClick(object sender, System.EventArgs e) + { + Taskleiste.Show(btnMenü, new System.Drawing.Point(0, btnMenü.Height)); + } + #endregion + + #region Menu Functions + void Minimieren(object sender, System.EventArgs e) + { + if(this.WindowState == FormWindowState.Minimized) + { + this.Visible = true; + this.WindowState = FormWindowState.Normal; + this.menuItem1.Text = "Chat 3 minimieren"; + } + else if(this.WindowState == FormWindowState.Normal) + { + this.WindowState = FormWindowState.Minimized; + this.Visible = false; + this.menuItem1.Text = "Chat 3 wiederherstellen"; + } + else + { + MessageBox.Show(this.WindowState.ToString()); + } + } + + void ÜberÖffnen(object sender, System.EventArgs e) + { + ÜberForm über = new ÜberForm(); + über.TopMost = this.TopMost; + über.ShowDialog(); + über.Dispose(); + } + + void EinstellungenÖffnen(object sender, System.EventArgs e) + { + EinstellungenForm einst = new EinstellungenForm(font, color, benutzer, vordergrund); + einst.TopMost = this.TopMost; + if(einst.ShowDialog()==DialogResult.OK) + { + font = einst.font; + color = einst.color; + benutzer = einst.benutzer; + vordergrund = einst.vordergrund; + } + einst.Dispose(); + + this.TopMost = vordergrund; + } + + void Vordergrund(object sender, System.EventArgs e) + { + this.BringToFront(); + } + + void Beenden(object sender, System.EventArgs e) + { + this.Close(); + } + #endregion + + + } +} diff --git a/Chat 3/ÜberForm.cs b/Chat 3/ÜberForm.cs new file mode 100644 index 0000000..e987cc4 --- /dev/null +++ b/Chat 3/ÜberForm.cs @@ -0,0 +1,116 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 03.06.2005 + * Time: 07:02 + */ + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace Chat_3 +{ + /// + /// Description of ÜberForm. + /// + public class ÜberForm : System.Windows.Forms.Form + { + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + public ÜberForm() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label3 + // + this.label3.Location = new System.Drawing.Point(64, 72); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(160, 16); + this.label3.TabIndex = 3; + this.label3.Text = "a.k.a. JoSch"; + // + // label4 + // + this.label4.Location = new System.Drawing.Point(8, 104); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(304, 16); + this.label4.TabIndex = 4; + this.label4.Text = "Für meine liebste Angelika"; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(120, 136); + this.button1.Name = "button1"; + this.button1.TabIndex = 0; + this.button1.Text = "OK"; + this.button1.Click += new System.EventHandler(this.Button1Click); + // + // label1 + // + this.label1.Font = new System.Drawing.Font("Lucida Calligraphy", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.label1.Location = new System.Drawing.Point(40, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 56); + this.label1.TabIndex = 1; + this.label1.Text = "Chat 3"; + // + // label2 + // + this.label2.BackColor = System.Drawing.Color.Transparent; + this.label2.Location = new System.Drawing.Point(56, 56); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(248, 16); + this.label2.TabIndex = 2; + this.label2.Text = "von Johannes Schauer (J.Schauer@web.de)"; + // + // ÜberForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); + this.ClientSize = new System.Drawing.Size(314, 167); + this.Controls.Add(this.label4); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.button1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ÜberForm"; + this.Text = "Über..."; + this.ResumeLayout(false); + } + #endregion + void Button1Click(object sender, System.EventArgs e) + { + this.Dispose(); + } + + } +} diff --git a/Chat/AssemblyInfo.cs b/Chat/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/Chat/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/Chat/Chat.MainForm.resources b/Chat/Chat.MainForm.resources new file mode 100644 index 0000000..dea351c Binary files /dev/null and b/Chat/Chat.MainForm.resources differ diff --git a/Chat/Chat.cmbx b/Chat/Chat.cmbx new file mode 100644 index 0000000..e194145 --- /dev/null +++ b/Chat/Chat.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chat/Chat.prjx b/Chat/Chat.prjx new file mode 100644 index 0000000..cb0acbd --- /dev/null +++ b/Chat/Chat.prjx @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chat/ChatPeerSample.ChatPeer.resources b/Chat/ChatPeerSample.ChatPeer.resources new file mode 100644 index 0000000..04989e3 Binary files /dev/null and b/Chat/ChatPeerSample.ChatPeer.resources differ diff --git a/Chat/CreateJoinForm.resources b/Chat/CreateJoinForm.resources new file mode 100644 index 0000000..7ec40ff Binary files /dev/null and b/Chat/CreateJoinForm.resources differ diff --git a/Chat/DPlayConnect.cs b/Chat/DPlayConnect.cs new file mode 100644 index 0000000..797e09d --- /dev/null +++ b/Chat/DPlayConnect.cs @@ -0,0 +1,272 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; +using System.Runtime.InteropServices; + + + + +/// +/// The connection wizard will allow our users to pick a service provider, +/// and then connect to an existing application, or create a new one as the host. +/// +public class ConnectWizard +{ + private Peer peerObject; + private Address deviceAddress; + + private ChooseServiceProviderForm serviceProviderForm; + private CreateJoinForm createJoinForm; + + private Guid serviceProviderGuid; + private string username; + private string samplename; + private bool isInSession = false; + private bool isHost = false; + private int port = 0; + + private Guid applicationGuid; + + + + + /// + /// Constructor + /// + /// + /// + /// + public ConnectWizard(Peer peer, Guid application, string sampleName) + { + peerObject = peer; + applicationGuid = application; + samplename = sampleName; + } + + + + + /// + /// The guid for the current service provider + /// + public Guid ServiceProvider + { + get + { return serviceProviderGuid; } + set + { serviceProviderGuid = value; } + } + + + + + /// + /// The game's default port number + /// + public int DefaultPort + { + get + { return port; } + set + { port = value; } + } + + + + + /// + /// Am I the host + /// + public bool IsHost + { + get + { return isHost; } + set + { isHost = value; } + } + + + + + /// + /// The username + /// + public string Username + { + get + { return username; } + set + { username = value; } + } + + + + + /// + /// The sample name + /// + public string SampleName + { + get + { return samplename; } + } + + + + + /// + /// The applications guid + /// + public Guid ApplicationGuid + { + get + { return applicationGuid; } + } + + + + + /// + /// Are we in a session + /// + public bool InSession + { + get { return isInSession; } + set { isInSession = value; } + } + + + + + /// + /// Returns true if the given provider requires a port component + /// + /// ServiceProvider Guid + /// + static public bool ProviderRequiresPort(Guid provider) + { + return (provider != Address.ServiceProviderSerial && + provider != Address.ServiceProviderModem && + provider != Address.ServiceProviderBlueTooth); + } + + + + + /// + /// Handler for when our form is disposed + /// + public void FormDisposed(object sender, EventArgs e) + { + if (sender == createJoinForm) + createJoinForm = null; + + if (sender == serviceProviderForm) + serviceProviderForm = null; + } + + + + + /// + /// Set the user information + /// + public void SetUserInfo() + { + //Before we call host, let's actually call SetPeerInformation + PlayerInformation myinformation = new PlayerInformation(); + myinformation.Name = username; + + peerObject.SetPeerInformation(myinformation, SyncFlags.PeerInformation); + } + + + + + /// + /// Show the service providers form + /// + /// True if a service provider was picked, false otherwise + public bool DoShowServiceProviders() + { + if (serviceProviderForm == null) + { + username = null; + serviceProviderForm = new ChooseServiceProviderForm(peerObject,this); + serviceProviderForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (serviceProviderForm.ShowDialog() == DialogResult.OK) + return true; + + // The didn't hit ok + return false; + } + + + + + /// + /// Show the create or join screen + /// + /// True if we will be in a session, false otherwise + public bool DoCreateJoinGame() + { + if (deviceAddress != null) + deviceAddress.Dispose(); + + deviceAddress = new Address(); + + if (createJoinForm != null) + createJoinForm.Dispose(); + + createJoinForm = new CreateJoinForm(peerObject, deviceAddress, this); + createJoinForm.Disposed += new System.EventHandler(this.FormDisposed); + + //Set the address's service provider (this will be the device address) + deviceAddress.ServiceProvider = serviceProviderGuid; + DialogResult drCreateJoin = createJoinForm.ShowDialog(); + if (drCreateJoin == DialogResult.Cancel) + return false; + + this.isHost = (drCreateJoin == DialogResult.Yes); + return true; + + } + + + + + /// + /// Start the wizard + /// + /// True if we are in a session, false otherwise + public bool StartWizard() + { + isInSession = false; + + while (this.DoShowServiceProviders()) + { + //Now let's create a game or join a session + if (this.DoCreateJoinGame()) + { + // A game has been created or joined now, set our flag + isInSession = true; + break; + } + } + return isInSession; + } +} + + diff --git a/Chat/DPlayConnect_AddressForm.cs b/Chat/DPlayConnect_AddressForm.cs new file mode 100644 index 0000000..bbb7a41 --- /dev/null +++ b/Chat/DPlayConnect_AddressForm.cs @@ -0,0 +1,220 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_AddressForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// Summary description for AddressForm. +/// +public class AddressForm : System.Windows.Forms.Form +{ + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox hostnameTextBox; + private System.Windows.Forms.TextBox portTextBox; + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + /// + /// Constructor + /// + public AddressForm( int defaultPort ) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set default port value + Port = defaultPort; + } + + + + + /// + /// The remote port on which to connect + /// + public int Port + { + get + { + int port = 0; + + try + { + port = int.Parse(portTextBox.Text); + } + catch {} + + return port; + } + set + { + if( value > 0 ) + portTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Remote hostname + /// + public string Hostname + { + get + { return hostnameTextBox.Text; } + set + { hostnameTextBox.Text = value; } + } + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if(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() + { + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.hostnameTextBox = new System.Windows.Forms.TextBox(); + this.portTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 48); + this.label1.TabIndex = 0; + this.label1.Text = "Please enter the optional components of the remote session address. If set blank," + + " DirectPlay will attempt to search the local network."; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(104, 144); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(72, 24); + this.okButton.TabIndex = 1; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(184, 144); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(72, 24); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 16); + this.label2.TabIndex = 3; + this.label2.Text = "Hostname"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(160, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 16); + this.label3.TabIndex = 4; + this.label3.Text = "Port"; + // + // hostnameTextBox + // + this.hostnameTextBox.Location = new System.Drawing.Point(32, 96); + this.hostnameTextBox.Name = "hostnameTextBox"; + this.hostnameTextBox.Size = new System.Drawing.Size(120, 20); + this.hostnameTextBox.TabIndex = 5; + this.hostnameTextBox.Text = ""; + // + // portTextBox + // + this.portTextBox.Location = new System.Drawing.Point(160, 96); + this.portTextBox.Name = "portTextBox"; + this.portTextBox.Size = new System.Drawing.Size(56, 20); + this.portTextBox.TabIndex = 6; + this.portTextBox.Text = ""; + // + // AddressForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(264, 176); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.portTextBox, + this.hostnameTextBox, + this.label3, + this.label2, + this.cancelButton, + this.okButton, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AddressForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Remote Address"; + this.ResumeLayout(false); + + } + #endregion + + private void okButton_Click(object sender, System.EventArgs e) + { + DialogResult = DialogResult.OK; + } + + private void cancelButton_Click(object sender, System.EventArgs e) + { + DialogResult = DialogResult.Cancel; + } +} diff --git a/Chat/DPlayConnect_CreateForm.cs b/Chat/DPlayConnect_CreateForm.cs new file mode 100644 index 0000000..b614ede --- /dev/null +++ b/Chat/DPlayConnect_CreateForm.cs @@ -0,0 +1,363 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_CreateForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will allow you to create a new session, and set certain properties +/// of the session. +/// +public class CreateSessionForm : System.Windows.Forms.Form +{ + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton notSignedRadio; + private System.Windows.Forms.RadioButton fullSignedRadio; + private System.Windows.Forms.RadioButton fastSignedRadio; + private System.Windows.Forms.CheckBox migrateHostCheckBox; + private System.Windows.Forms.CheckBox useDPNSVRCheckBox; + private System.Windows.Forms.TextBox localPortTextBox; + private System.Windows.Forms.Label localPortLabel; + private System.Windows.Forms.Button btnCancel; + + + + /// + /// Constructor + /// + public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peer = peerObject; + this.connectionWizard = connectionWizard; + deviceAddress = addressObject; + txtSession.Text = null; + this.Text = connectionWizard.SampleName + " - " + this.Text; + //Get the default session from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) + { + // Get session name + txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null); + + // Get host migration option + if (regKey.GetValue("DirectPlayMigrateHost",null) != null) + { + migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1); + } + + + // Get session signing option + if (regKey.GetValue("DirectPlaySessionSigning",null) != null) + { + if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fullSignedRadio.Checked = true; + else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fastSignedRadio.Checked = true; + else + notSignedRadio.Checked = true; + } + + regKey.Close(); + } + + // Set default port value and hide port UI if provider doesn't use them + Port = connectionWizard.DefaultPort; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + { + localPortTextBox.Hide(); + localPortLabel.Hide(); + } + } + + + + /// + /// The port on which to host + /// + public int Port + { + get + { + int port = 0; + + try + { + port = int.Parse(localPortTextBox.Text); + } + catch {} + + return port; + } + set + { + if( value > 0 ) + localPortTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) + { + 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() + { + this.txtSession = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fullSignedRadio = new System.Windows.Forms.RadioButton(); + this.fastSignedRadio = new System.Windows.Forms.RadioButton(); + this.notSignedRadio = new System.Windows.Forms.RadioButton(); + this.migrateHostCheckBox = new System.Windows.Forms.CheckBox(); + this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox(); + this.localPortLabel = new System.Windows.Forms.Label(); + this.localPortTextBox = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSession + // + this.txtSession.Location = new System.Drawing.Point(96, 24); + this.txtSession.Name = "txtSession"; + this.txtSession.Size = new System.Drawing.Size(176, 20); + this.txtSession.TabIndex = 3; + this.txtSession.Text = ""; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(288, 12); + this.label1.TabIndex = 2; + this.label1.Text = "Session Name:"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(128, 168); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(208, 168); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + // + // groupBox1 + // + this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] { + this.fullSignedRadio, + this.fastSignedRadio, + this.notSignedRadio}); + this.groupBox1.Location = new System.Drawing.Point(16, 64); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(112, 88); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Session Signing"; + // + // fullSignedRadio + // + this.fullSignedRadio.Location = new System.Drawing.Point(18, 22); + this.fullSignedRadio.Name = "fullSignedRadio"; + this.fullSignedRadio.Size = new System.Drawing.Size(80, 16); + this.fullSignedRadio.TabIndex = 9; + this.fullSignedRadio.Text = "Full signed"; + // + // fastSignedRadio + // + this.fastSignedRadio.Checked = true; + this.fastSignedRadio.Location = new System.Drawing.Point(18, 41); + this.fastSignedRadio.Name = "fastSignedRadio"; + this.fastSignedRadio.Size = new System.Drawing.Size(88, 16); + this.fastSignedRadio.TabIndex = 8; + this.fastSignedRadio.TabStop = true; + this.fastSignedRadio.Text = "Fast signed"; + // + // notSignedRadio + // + this.notSignedRadio.Location = new System.Drawing.Point(18, 55); + this.notSignedRadio.Name = "notSignedRadio"; + this.notSignedRadio.Size = new System.Drawing.Size(72, 24); + this.notSignedRadio.TabIndex = 10; + this.notSignedRadio.Text = "Disabled"; + // + // migrateHostCheckBox + // + this.migrateHostCheckBox.Checked = true; + this.migrateHostCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64); + this.migrateHostCheckBox.Name = "migrateHostCheckBox"; + this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24); + this.migrateHostCheckBox.TabIndex = 11; + this.migrateHostCheckBox.Text = "Enable Host Migration"; + // + // useDPNSVRCheckBox + // + this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84); + this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox"; + this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24); + this.useDPNSVRCheckBox.TabIndex = 12; + this.useDPNSVRCheckBox.Text = "Use DPNSVR"; + // + // localPortLabel + // + this.localPortLabel.Location = new System.Drawing.Point(152, 122); + this.localPortLabel.Name = "localPortLabel"; + this.localPortLabel.Size = new System.Drawing.Size(64, 17); + this.localPortLabel.TabIndex = 13; + this.localPortLabel.Text = "Local Port:"; + // + // localPortTextBox + // + this.localPortTextBox.Location = new System.Drawing.Point(216, 120); + this.localPortTextBox.Name = "localPortTextBox"; + this.localPortTextBox.Size = new System.Drawing.Size(56, 20); + this.localPortTextBox.TabIndex = 14; + this.localPortTextBox.Text = ""; + // + // CreateSessionForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(290, 200); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.localPortTextBox, + this.localPortLabel, + this.useDPNSVRCheckBox, + this.migrateHostCheckBox, + this.txtSession, + this.label1, + this.groupBox1, + this.btnOK, + this.btnCancel}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.HelpButton = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateSessionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create a Session"; + this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } +#endregion + + + + + /// + /// We are ready to create a session. Ensure the data is valid + /// then create the session + /// + private void btnOK_Click(object sender, System.EventArgs e) + { + ApplicationDescription dpApp; + if ((txtSession.Text == null) || (txtSession.Text == "")) + { + MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) + { + regKey.SetValue("DirectPlaySessionName", txtSession.Text); + if (migrateHostCheckBox.Checked) + regKey.SetValue("DirectPlayMigrateHost",1); + else + regKey.SetValue("DirectPlayMigrateHost",0); + + if (fastSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Fast"); + else if (fullSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Full"); + else + regKey.SetValue("DirectPlaySessionSigning","Disabled"); + regKey.Close(); + } + + dpApp = new ApplicationDescription(); + dpApp.GuidApplication = connectionWizard.ApplicationGuid; + dpApp.SessionName = txtSession.Text; + dpApp.Flags = 0; + + if (migrateHostCheckBox.Checked) + dpApp.Flags |= SessionFlags.MigrateHost; + + if (!useDPNSVRCheckBox.Checked) + dpApp.Flags |= SessionFlags.NoDpnServer; + + if (fastSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FastSigned; + else if (fullSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FullSigned; + + // Specify the port number if available + if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + { + if (Port > 0) + deviceAddress.AddComponent(Address.KeyPort, Port); + } + + connectionWizard.SetUserInfo(); + // Host a game on deviceAddress as described by dpApp + // HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user + // using a dialog box for any device address information that is missing + peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing); + this.DialogResult = DialogResult.OK; + } + + private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent) + { + + } +} diff --git a/Chat/DPlayConnect_JoinForm.cs b/Chat/DPlayConnect_JoinForm.cs new file mode 100644 index 0000000..495d45e --- /dev/null +++ b/Chat/DPlayConnect_JoinForm.cs @@ -0,0 +1,516 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_JoinForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will search for existing running samples and allow you to join them or will +/// allow you to create your own session as a host +/// +public class CreateJoinForm : System.Windows.Forms.Form +{ + private System.Windows.Forms.Button btnJoin; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnCreate; + private System.Windows.Forms.ListBox lstSession; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSearch; + private const int EnumExpireThreshold = 2000; + private bool amJoining = false; + + + + + /// + /// Hold our information of hosts we found + /// + private struct FindHostsResponseInformation + { + public int LastFoundTime; + public ApplicationDescription ApplicationDesc; + public int RoundTripLatencyMs; + public Address sender; + public Address device; + public override string ToString() + { + if (ApplicationDesc.MaxPlayers > 0) + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + "/" + ApplicationDesc.MaxPlayers + ") (" + RoundTripLatencyMs + "ms)"; + else + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + ") (" + RoundTripLatencyMs + "ms)"; + } + }; + + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + private Address hostAddress = null; + private bool isSearching = false; + private int findHostHandle = 0; + private CreateSessionForm createSessionForm = null; + private ResultCode resultCode; + private ArrayList foundHosts = new ArrayList(); + private bool isConnected = false; + private ManualResetEvent connectEvent = null; + private System.Timers.Timer updateListTimer = null; + private System.Timers.Timer connectTimer = null; + + + + + + /// + /// Constructor + /// + public CreateJoinForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + deviceAddress = addressObject; + + //Set up the event handlers + peer.FindHostResponse += new FindHostResponseEventHandler(FindHostResponseMessage); + peer.ConnectComplete += new ConnectCompleteEventHandler(ConnectResult); + peer.AsyncOperationComplete += new AsyncOperationCompleteEventHandler(CancelAsync); + + //Set up our timer + updateListTimer = new System.Timers.Timer(300); // A 300 ms interval + updateListTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.UpdateTimer); + updateListTimer.SynchronizingObject = this; + updateListTimer.Start(); + //Set up our connect timer + connectTimer = new System.Timers.Timer(100); // A 100ms interval + connectTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.ConnectTimer); + connectTimer.SynchronizingObject = this; + // Set up our connect event + connectEvent = new ManualResetEvent(false); + + } + + + + + /// + /// An asynchronous operation was cancelled + /// + private void CancelAsync(object sender, AsyncOperationCompleteEventArgs e) + { + if (e.Message.AsyncOperationHandle == findHostHandle) + { + findHostHandle = 0; + btnSearch.Text = "Start Search"; + isSearching = false; + btnCreate.Enabled = true; + btnSearch.Enabled = true; + } + } + + + + + /// + /// A host was found and responded to our query + /// + private void FindHostResponseMessage(object sender, FindHostResponseEventArgs dpMessage) + { + // Now we need to add this to our list of available sessions + SessionAdd(dpMessage.Message); + } + + + + + /// + /// Add this session to our list + /// + /// + private void SessionAdd(FindHostsResponseMessage dpMessage) + { + FindHostsResponseInformation dpInfo = new FindHostsResponseInformation(); + + dpInfo.ApplicationDesc = dpMessage.ApplicationDescription; + dpInfo.device = dpMessage.AddressDevice; + dpInfo.sender = dpMessage.AddressSender; + dpInfo.RoundTripLatencyMs = dpMessage.RoundTripLatencyMs; + dpInfo.LastFoundTime = Environment.TickCount; + + // Let's check the items first and see if this one already exists + bool isFound = false; + + lock (foundHosts) + { + for (int i = 0; i < lstSession.Items.Count; i++) + { + if (dpInfo.ApplicationDesc.GuidInstance == ((FindHostsResponseInformation)lstSession.Items[i]).ApplicationDesc.GuidInstance) + { + foundHosts[i] = dpInfo; + lstSession.Items[i] = dpInfo; + isFound = true; + } + } + if (!isFound) + { + lstSession.Items.Add(dpInfo); + foundHosts.Add(dpInfo); + } + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) + { + base.Dispose(Disposing); + + if (isSearching) + { + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + isSearching = !isSearching; + } + if (connectTimer != null) + connectTimer.Dispose(); + + if (updateListTimer != null) + updateListTimer.Dispose(); + } + + + + + #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() { + this.btnSearch = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.lstSession = new System.Windows.Forms.ListBox(); + this.btnCreate = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.btnJoin = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnSearch + // + this.btnSearch.Location = new System.Drawing.Point(319, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(86, 27); + this.btnSearch.TabIndex = 2; + this.btnSearch.Text = "Start Search"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(333, 227); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + // + // lstSession + // + this.lstSession.Location = new System.Drawing.Point(5, 37); + this.lstSession.Name = "lstSession"; + this.lstSession.Size = new System.Drawing.Size(400, 186); + this.lstSession.TabIndex = 1; + this.lstSession.DoubleClick += new System.EventHandler(this.btnJoin_Click); + this.lstSession.SelectedValueChanged += new System.EventHandler(this.SelectedChange); + // + // btnCreate + // + this.btnCreate.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.btnCreate.Location = new System.Drawing.Point(84, 227); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(74, 27); + this.btnCreate.TabIndex = 2; + this.btnCreate.Text = "Create"; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(5, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(312, 16); + this.label1.TabIndex = 0; + this.label1.Text = "Select session to join, or click Create to start a new session."; + // + // btnJoin + // + this.btnJoin.Enabled = false; + this.btnJoin.Location = new System.Drawing.Point(7, 227); + this.btnJoin.Name = "btnJoin"; + this.btnJoin.Size = new System.Drawing.Size(74, 27); + this.btnJoin.TabIndex = 2; + this.btnJoin.Text = "Join"; + this.btnJoin.Click += new System.EventHandler(this.btnJoin_Click); + // + // CreateJoinForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(411, 264); + this.ControlBox = false; + this.Controls.Add(this.btnCreate); + this.Controls.Add(this.btnJoin); + this.Controls.Add(this.btnSearch); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.lstSession); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateJoinForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Join or create a session"; + this.ResumeLayout(false); + } + #endregion + + + + + /// + /// The selected session was changed. + /// + private void SelectedChange(object sender, System.EventArgs e) + { + if (amJoining) + return; // Do nothing if we are already joining a session + + btnJoin.Enabled = (lstSession.SelectedItem != null); + } + + + + + /// + /// We either want to start or stop searching + /// + private void btnSearch_Click(object sender, System.EventArgs e) + { + if (!isSearching) + { + if( hostAddress != null ) + hostAddress.Dispose(); + + hostAddress = new Address(); + hostAddress.ServiceProvider = deviceAddress.ServiceProvider; + + // See if we should prompt the user for the remote address + if (ConnectWizard.ProviderRequiresPort(hostAddress.ServiceProvider)) + { + AddressForm addressDialog = new AddressForm(connectionWizard.DefaultPort); + addressDialog.ShowDialog(this); + + // If the user cancelled the address form, abort the search + if (addressDialog.DialogResult != DialogResult.OK) + return; + + // If a port was specified, add the component + if (addressDialog.Hostname != "") + hostAddress.AddComponent(Address.KeyHostname, addressDialog.Hostname); + + // If a hostname was specified, add the component + if (addressDialog.Port > 0) + hostAddress.AddComponent(Address.KeyPort, addressDialog.Port); + } + + //Time to enum our hosts + ApplicationDescription desc = new ApplicationDescription(); + desc.GuidApplication = connectionWizard.ApplicationGuid; + + // If the user was not already asked for address information, DirectPlay + // should prompt with native UI + FindHostsFlags flags = 0; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + flags = FindHostsFlags.OkToQueryForAddressing; + + peer.FindHosts(desc,hostAddress,deviceAddress,null,Timeout.Infinite,0,Timeout.Infinite, flags, out findHostHandle); + isSearching = true; + btnCreate.Enabled = false; + btnSearch.Text = "Stop Search"; + } + else + { + btnSearch.Text = "Stopping..."; + btnSearch.Enabled = false; + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + } + } + + + + + /// + /// A form was disposed + /// + /// + /// + public void FormDisposed(object sender, EventArgs e) + { + if (sender == createSessionForm) + createSessionForm = null; + } + + + + + /// + /// We should create a new session. Display a dialog allowing the user to set + /// certain options + /// + private void btnCreate_Click(object sender, System.EventArgs e) + { + this.DialogResult = DialogResult.None; + ((Button)sender).DialogResult = DialogResult.None; + if (createSessionForm == null) + { + createSessionForm = new CreateSessionForm(peer,deviceAddress,connectionWizard); + createSessionForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (createSessionForm.ShowDialog(this) != DialogResult.Cancel) + { + ((Button)sender).DialogResult = DialogResult.Yes; + this.DialogResult = DialogResult.Yes; + } + } + + + + + /// + /// Determine if we need to expire any of our currently listed servers + /// + private void UpdateTimer(object sender, System.Timers.ElapsedEventArgs e) + { + lock (foundHosts) + { + for (int i = 0; i< foundHosts.Count; i++) + { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)foundHosts[i]).LastFoundTime > EnumExpireThreshold) + { + foundHosts.RemoveAt(i); + break; + } + } + for (int i = 0; i< lstSession.Items.Count; i++) + { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)lstSession.Items[i]).LastFoundTime > EnumExpireThreshold) + { + lstSession.Items.RemoveAt(i); + break; + } + } + } + } + + + + + /// + /// Wait for a connect to complete + /// + private void ConnectTimer(object sender, System.Timers.ElapsedEventArgs e) + { + if (connectEvent.WaitOne(0,false)) // Wait for the Connect event to be fired + { + if (isConnected) // Are we connected? + { + // Get rid of the timer + if (updateListTimer != null) + updateListTimer.Stop(); + + if (connectTimer != null) + connectTimer.Stop(); + + this.DialogResult = DialogResult.OK; + this.Close(); + return; + } + else + { + MessageBox.Show(this,"Failed to connect. The error code was: \n" + resultCode.ToString() ,"Failed to connect",MessageBoxButtons.OK,MessageBoxIcon.Information); + // Restart our timer + updateListTimer.Start(); + } + } + } + + + + + /// + /// Fired when a connect complete message is received from DirectPlay. Fire + /// our event to notify the sample we've connected + /// + private void ConnectResult(object sender, ConnectCompleteEventArgs e) + { + if (e.Message.ResultCode == 0) + { + isConnected = true; + } + else + isConnected = false; + + resultCode = e.Message.ResultCode; + // Notify the timer that we've connected. + connectEvent.Set(); + } + + + + + /// + /// Join an existing session + /// + private void btnJoin_Click(object sender, System.EventArgs e) + { + FindHostsResponseInformation dpInfo; + if (lstSession.SelectedItem == null) + { + MessageBox.Show(this,"Please select a session before clicking join.","No session",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + // Turn off all buttons + btnCreate.Enabled = false; + btnCancel.Enabled = false; + btnJoin.Enabled = false; + btnSearch.Enabled = false; + amJoining = true; + // Stop our secondary timer + updateListTimer.Stop(); + dpInfo = ((FindHostsResponseInformation)lstSession.SelectedItem); + connectionWizard.SetUserInfo(); + peer.Connect(dpInfo.ApplicationDesc,dpInfo.sender, dpInfo.device,null,ConnectFlags.OkToQueryForAddressing); + // Now start our 'Connect' timer + connectTimer.Start(); + } +} diff --git a/Chat/DPlayConnect_ServiceProviderForm.cs b/Chat/DPlayConnect_ServiceProviderForm.cs new file mode 100644 index 0000000..3318d2f --- /dev/null +++ b/Chat/DPlayConnect_ServiceProviderForm.cs @@ -0,0 +1,242 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_ServiceProviderForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +/// +/// This form allows you to choose a service provider and username for your +/// sample +/// +public class ChooseServiceProviderForm : System.Windows.Forms.Form +{ + private Peer peer; + private ConnectWizard connectionWizard; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox lstSP; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUser; + private System.Windows.Forms.Button btnCancel; + + + + + /// + /// Constructor + /// + public ChooseServiceProviderForm(Peer peerObject, ConnectWizard connectionWizard) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + // Fill up our listbox with the service providers + ServiceProviderInformation[] serviceProviders = peer.GetServiceProviders(false); + foreach (ServiceProviderInformation info in serviceProviders) + lstSP.Items.Add(info); + + txtUser.Text = null; + //Get the default username from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) + { + try + { + txtUser.Text = (string)regKey.GetValue("DirectPlayUserName", null); + lstSP.SelectedIndex = (int)regKey.GetValue("DirectPlaySPIndex", 0); + regKey.Close(); + } + catch + { + txtUser.Text = null; + lstSP.SelectedIndex = 0; + } + } + else + lstSP.SelectedIndex = 0; + + if ((txtUser.Text == null) || (txtUser.Text == "")) + { + txtUser.Text = SystemInformation.UserName; + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) + { + 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() + { + this.lstSP = new System.Windows.Forms.ListBox(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstSP + // + this.lstSP.Location = new System.Drawing.Point(12, 63); + this.lstSP.Name = "lstSP"; + this.lstSP.Size = new System.Drawing.Size(324, 147); + this.lstSP.TabIndex = 1; + this.lstSP.DoubleClick += new System.EventHandler(this.lstSP_DoubleClick); + // + // txtUser + // + this.txtUser.Location = new System.Drawing.Point(13, 20); + this.txtUser.MaxLength = 30; + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(326, 20); + this.txtUser.TabIndex = 5; + this.txtUser.Text = ""; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(181, 215); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(260, 215); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(376, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Please pick your service provider:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(10, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(327, 12); + this.label2.TabIndex = 4; + this.label2.Text = "User Name:"; + // + // ChooseServiceProviderForm + // + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(343, 246); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.txtUser, + this.label2, + this.btnCancel, + this.btnOK, + this.lstSP, + this.label1}); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseServiceProviderForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Choose Service Provider"; + this.ResumeLayout(false); + + } +#endregion + + + + + /// + /// They don't want to run this sample + /// + private void btnCancel_Click(object sender, System.EventArgs e) + { + this.Dispose(); + } + + + + + /// + /// Same as clicking ok + /// + private void lstSP_DoubleClick(object sender, System.EventArgs e) + { + // Call the ok button click handler + object[] parameters = new object[] { sender, e }; + this.BeginInvoke(new System.EventHandler(btnOK_Click), parameters); + } + + + + + /// + /// Select this username and service provider if valid, then continue the wizard + /// + private void btnOK_Click(object sender, System.EventArgs e) + { + + if ((txtUser.Text == null) || (txtUser.Text == "")) + { + MessageBox.Show(this,"Please enter a username before clicking OK.","No Username",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + try + { + connectionWizard.ServiceProvider = ((ServiceProviderInformation)lstSP.SelectedItem).Guid; + connectionWizard.Username = txtUser.Text; + } + catch // We assume if we got here there was no selected item. + { + MessageBox.Show(this,"Please select a service provider before clicking OK.","No Service Provider",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) + { + regKey.SetValue("DirectPlayUserName", txtUser.Text); + regKey.SetValue("DirectPlaySPIndex", lstSP.SelectedIndex); + regKey.Close(); + } + this.Dispose(); + } +} diff --git a/Chat/MainForm.cs b/Chat/MainForm.cs new file mode 100644 index 0000000..edd85fa --- /dev/null +++ b/Chat/MainForm.cs @@ -0,0 +1,443 @@ +//---------------------------------------------------------------------------- +// File: ChatPeer.cs +// +// Desc: The main game file for the ChatPeer sample. It connects +// players together with dialog boxes to prompt users on the +// connection settings to join or create a session. After the user +// connects to a session, the sample displays the chat dialog. +// +// After a new game has started the sample begins a very simplistic +// chat session where users can send text to each other. +// +// This sample Interops with the C++ and VB.NET version of the +// sample as well. +// +// Copyright (c) Microsoft Corp. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + +namespace ChatPeerSample +{ + /// + /// Summary description for ChatPeer. + /// + public class ChatPeer : System.Windows.Forms.Form + { + private System.Windows.Forms.Button btnExit; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label lblUsers; + private System.Windows.Forms.Button btnSend; + private System.Windows.Forms.TextBox txtChat; + private System.Windows.Forms.TextBox txtSend; + private delegate void PeerCloseCallback(); // This delegate will be called when the session terminated event is fired. + + + /// + /// Our players structure + /// + public struct Players + { + public int playerId; + public string Name; + public Players(int id, string n) + { playerId = id; Name = n; } + } + + private const int MaxChatStringLength = 508; + private const byte ChatMessageId = 1; + private const int DefaultPort = 2502; + + // Local variables for this app + public Peer peerObject = null; // Main DPlay object + private ConnectWizard connectWizard = null; // The wizard to create/join a DPlay Session + private ArrayList playerList = new ArrayList(); + private int localPlayerId; + + // This GUID allows DirectPlay to find other instances of the same game on + // the network. So it must be unique for every game, and the same for + // every instance of that game. // {876A3036-FFD7-46bc-9209-B42F617B9BE7} + // However, we are using the same guid the C++ and VB.NET version of the + // samples use so they can all communicate together. + public Guid localApplicationGuid = new Guid(0x876a3036, 0xffd7, 0x46bc, 0x92, 0x9, 0xb4, 0x2f, 0x61, 0x7b, 0x9b, 0xe7); + + + /// + /// Constuctor + /// + public ChatPeer() + { + try + { + // Load the icon from our resources + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(this.GetType()); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + } + catch + { + // It's no big deal if we can't load our icons, but try to load the embedded one + try { this.Icon = new System.Drawing.Icon(this.GetType(), "directx.ico"); } + catch {} + } + + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peerObject = new Peer(); + // First set up our event handlers (We only need events for the ones we care about) + peerObject.PlayerCreated += new PlayerCreatedEventHandler(this.PlayerCreated); + peerObject.PlayerDestroyed += new PlayerDestroyedEventHandler(this.PlayerDestroyed); + peerObject.HostMigrated += new HostMigratedEventHandler(this.HostMigrated); + peerObject.Receive += new ReceiveEventHandler(this.DataReceived); + peerObject.SessionTerminated += new SessionTerminatedEventHandler(this.SessionTerminated); + connectWizard = new ConnectWizard(peerObject, localApplicationGuid, "Chat Peer"); + + connectWizard.DefaultPort = DefaultPort; + if (connectWizard.StartWizard()) + { + // Great we've connected (or joined).. Now we can start the sample + // Are we the host? + if (connectWizard.IsHost) + this.Text += " (HOST)"; + } + else + // We obviously didn't want to start a session + this.Dispose(); + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool disposing) + { + this.Hide(); + base.Dispose(disposing); + + // Cleanup DPlay + if (peerObject != null) + peerObject.Dispose(); + + peerObject = null; + } + + #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() { + this.txtSend = new System.Windows.Forms.TextBox(); + this.txtChat = new System.Windows.Forms.TextBox(); + this.btnSend = new System.Windows.Forms.Button(); + this.lblUsers = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnExit = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSend + // + this.txtSend.Location = new System.Drawing.Point(14, 205); + this.txtSend.MaxLength = 508; + this.txtSend.Name = "txtSend"; + this.txtSend.Size = new System.Drawing.Size(280, 21); + this.txtSend.TabIndex = 5; + this.txtSend.Text = ""; + this.txtSend.TextChanged += new System.EventHandler(this.SendTextChanged); + // + // txtChat + // + this.txtChat.Location = new System.Drawing.Point(15, 45); + this.txtChat.Multiline = true; + this.txtChat.Name = "txtChat"; + this.txtChat.ReadOnly = true; + this.txtChat.Size = new System.Drawing.Size(354, 152); + this.txtChat.TabIndex = 3; + this.txtChat.Text = ""; + // + // btnSend + // + this.btnSend.Enabled = false; + this.btnSend.Location = new System.Drawing.Point(297, 204); + this.btnSend.Name = "btnSend"; + this.btnSend.Size = new System.Drawing.Size(72, 22); + this.btnSend.TabIndex = 4; + this.btnSend.Text = "&Send"; + this.btnSend.Click += new System.EventHandler(this.btnSend_Click); + // + // lblUsers + // + this.lblUsers.Location = new System.Drawing.Point(198, 18); + this.lblUsers.Name = "lblUsers"; + this.lblUsers.Size = new System.Drawing.Size(37, 14); + this.lblUsers.TabIndex = 1; + this.lblUsers.Text = "0"; + this.lblUsers.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.txtSend); + this.groupBox1.Controls.Add(this.btnSend); + this.groupBox1.Controls.Add(this.txtChat); + this.groupBox1.Controls.Add(this.btnExit); + this.groupBox1.Controls.Add(this.lblUsers); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Location = new System.Drawing.Point(9, 6); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(377, 235); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 18); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(183, 14); + this.label1.TabIndex = 0; + this.label1.Text = "Number of people in conversation: "; + // + // btnExit + // + this.btnExit.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnExit.Location = new System.Drawing.Point(294, 16); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(72, 22); + this.btnExit.TabIndex = 2; + this.btnExit.Text = "E&xit"; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // ChatPeer + // + this.AcceptButton = this.btnSend; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); + this.CancelButton = this.btnExit; + this.ClientSize = new System.Drawing.Size(394, 253); + this.Controls.Add(this.groupBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChatPeer"; + this.Text = "C# Chat Peer Sample"; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + } + #endregion + #region DirectPlayEvents + + + /// + /// A player was created + /// + private void PlayerCreated(object sender, PlayerCreatedEventArgs e) + { + // Get the PlayerInformation and store it + PlayerInformation peerInfo = peerObject.GetPeerInformation(e.Message.PlayerID); + Players oPlayer = new Players(e.Message.PlayerID,peerInfo.Name); + // We lock the data here since it is shared across multiple threads. + lock (playerList) + { + playerList.Add(oPlayer); + // Update our number of players and our button + lblUsers.Text = playerList.Count.ToString(); + } + // Save this player id if it's ourselves + if (peerInfo.Local) + localPlayerId = e.Message.PlayerID; + + } + + + /// + /// A player was destroyed + /// + private void PlayerDestroyed(object sender, PlayerDestroyedEventArgs e) + { + // Remove this player from our list + // We lock the data here since it is shared across multiple threads. + lock (playerList) + { + foreach (Players player in playerList) + { + if (e.Message.PlayerID == player.playerId) + { + playerList.Remove(player); + break; + } + } + // Update our number of players and our button + lblUsers.Text = playerList.Count.ToString(); + } + } + + + + /// + /// The host was migrated, see if you're the new host + /// + private void HostMigrated(object sender, HostMigratedEventArgs e) + { + if (localPlayerId == e.Message.NewHostID) + { + // I'm the new host, update my UI + this.Text += " (HOST)"; + } + } + + + + /// + /// We've received data, parse it + /// + private void DataReceived(object sender, ReceiveEventArgs e) + { + if ((byte)e.Message.ReceiveData.Read(typeof(byte)) == ChatMessageId) // We've received text chat + { + // We won't be using the helper functions here since we want to + // interop with the c++ version of the app. It packages it's messages + // up with the first byte being the msg id (ChatMessageId), and + // the next xxx bytes as an ANSI string. + + // Get the default ASCII decoder + System.Text.Decoder dec = System.Text.Encoding.ASCII.GetDecoder(); + int length = (int)e.Message.ReceiveData.Length - 1; + // Create a char array of the right length + byte[] data = (byte[])e.Message.ReceiveData.Read(typeof(byte), length); + char[] c = new char[dec.GetCharCount(data, 0, length)]; + // Get the actual decoded characters + dec.GetChars(data, 0, length, c, 0); + // Now we can use the string builder to actually build our string + System.Text.StringBuilder sb = new System.Text.StringBuilder(c.Length); + sb.Insert(0, c, 0, dec.GetCharCount(data, 0, length)); + + string sChatText = sb.ToString(); // The actual chat text + // Now build the string we will be displaying to the user: + string sChatString = "<" + GetPlayerName(e.Message.SenderID) + "> " + sChatText; + // Now update our text + lock(txtChat) + { + if (txtChat.Text.Length > (txtChat.MaxLength * 0.95)) + txtChat.Text = txtChat.Text.Remove(0, (int)(txtChat.MaxLength / 2)); + + txtChat.AppendText(sChatString); + txtChat.AppendText("\r\n"); + txtChat.SelectionStart = txtChat.Text.Length; + txtChat.ScrollToCaret(); + } + } + e.Message.ReceiveData.Dispose(); // We no longer need the data, Dispose the buffer + } + + + + /// + /// The session was terminated + /// + private void SessionTerminated(object sender, SessionTerminatedEventArgs e) + { + // Well, this session is being terminated, let the user know + if (e.Message.ResultCode == ResultCode.HostTerminatedSession) + MessageBox.Show("The Host has terminated this session. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + else + MessageBox.Show("The session has been lost. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + + // This will post a message on the main thread to shut down our form + this.BeginInvoke(new PeerCloseCallback(this.PeerClose)); + } + #endregion + + + + /// + /// Exit the application + /// + private void btnExit_Click(object sender, System.EventArgs e) + { + // Exit the application + this.Dispose(); + } + + /// + /// This will return a players name based on the ID of that player + /// + private string GetPlayerName(int idPlayer) + { + lock (playerList) + { + foreach (Players p in playerList) + { + if (p.playerId == idPlayer) + return p.Name; + } + } + return null; + } + + + /// + /// Fired when the text to send has been changed + /// + private void SendTextChanged(object sender, System.EventArgs e) + { + btnSend.Enabled = (((TextBox)sender).Text.Length > 0); + } + + + + /// + /// We want to send our chat message + /// + private void btnSend_Click(object sender, System.EventArgs e) + { + // Ok, we need to package up the text into a format + // that the c++ version of the sample expects since + // we are interop'ing with it. + int strlen = System.Text.Encoding.ASCII.GetByteCount(txtSend.Text); + NetworkPacket data = new NetworkPacket(); + byte[] stringdata = new byte[strlen]; // Create our buffer + data.Write(ChatMessageId); // Set the msg type + //Now fill up the rest of the byte array with the ASCII chars of the string + System.Text.Encoding.ASCII.GetBytes(txtSend.Text, 0, strlen, stringdata, 0); + data.Write(stringdata); + // Now we've got the data setup, send it off. + peerObject.SendTo((int)PlayerID.AllPlayers, data, 0, SendFlags.Guaranteed); + // Now that we've sent out the text, clear it + txtSend.Text = null; + } + + + + /// + /// Shut down the sample + /// + public void PeerClose() + { + // The session was terminated, go ahead and shut down + this.Dispose(); + } + + /// + /// The main entry point for the application. + /// + static void Main() + { + using (ChatPeer wfData = new ChatPeer()) + { + try + { + Application.Run(wfData); + } + catch{} + } + } + } +} diff --git a/Chat2/Chat2.sln b/Chat2/Chat2.sln new file mode 100644 index 0000000..a263111 --- /dev/null +++ b/Chat2/Chat2.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Chat2", "Chat2\Chat2.csproj", "{A17F9B44-A98F-4779-8C88-E75074567C07}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A17F9B44-A98F-4779-8C88-E75074567C07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A17F9B44-A98F-4779-8C88-E75074567C07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A17F9B44-A98F-4779-8C88-E75074567C07}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A17F9B44-A98F-4779-8C88-E75074567C07}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chat2/Chat2.suo b/Chat2/Chat2.suo new file mode 100644 index 0000000..e698fc0 Binary files /dev/null and b/Chat2/Chat2.suo differ diff --git a/Chat2/Chat2/Chat2.csproj b/Chat2/Chat2/Chat2.csproj new file mode 100644 index 0000000..2fafeef --- /dev/null +++ b/Chat2/Chat2/Chat2.csproj @@ -0,0 +1,121 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {A17F9B44-A98F-4779-8C88-E75074567C07} + WinExe + Properties + Chat + Chat2 + true + http://localhost/Chat2/ + true + Web + true + Foreground + 7 + Days + false + false + true + 1.0.0.* + true + TextFile.ico + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Hilfe.cs + + + Form + + + Main.cs + + + Form + + + PrivateChat.cs + + + + + Hilfe.cs + + + Main.cs + + + PrivateChat.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + False + .NET Framework 2.0 Beta + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chat2/Chat2/Chat2.csproj.user b/Chat2/Chat2/Chat2.csproj.user new file mode 100644 index 0000000..88919bf --- /dev/null +++ b/Chat2/Chat2/Chat2.csproj.user @@ -0,0 +1,17 @@ + + + 8.0.50215 + http://localhost/Chat2/ + + + + + + + + + 0 + en-US + true + + \ No newline at end of file diff --git a/Chat2/Chat2/Hilfe.Designer.cs b/Chat2/Chat2/Hilfe.Designer.cs new file mode 100644 index 0000000..cbf0b8c --- /dev/null +++ b/Chat2/Chat2/Hilfe.Designer.cs @@ -0,0 +1,61 @@ +namespace Chat +{ + partial class Hilfe + { + /// + /// 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(Hilfe)); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.SuspendLayout(); + // + // richTextBox1 + // + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.ReadOnly = true; + this.richTextBox1.Size = new System.Drawing.Size(527, 330); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = resources.GetString("richTextBox1.Text"); + // + // Hilfe + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(527, 330); + this.Controls.Add(this.richTextBox1); + this.Name = "Hilfe"; + this.Text = "Hilfe"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RichTextBox richTextBox1; + } +} \ No newline at end of file diff --git a/Chat2/Chat2/Hilfe.cs b/Chat2/Chat2/Hilfe.cs new file mode 100644 index 0000000..9691750 --- /dev/null +++ b/Chat2/Chat2/Hilfe.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace Chat +{ + public partial class Hilfe : Form + { + public Hilfe() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/Chat2/Chat2/Hilfe.resx b/Chat2/Chat2/Hilfe.resx new file mode 100644 index 0000000..9ac982a --- /dev/null +++ b/Chat2/Chat2/Hilfe.resx @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Willkommen bei der Chat 2.1 Hilfe! + +1. Erste Schritte + +Um eine einfache Kommunikation mit anderen Teilnehmern zu gewährleisten stellen Sie bitte einen eindeutigen Benutzernamen und eine gut erkennbare Farbe für ihre Nachrichten ein. Ihre Einstellungen werden nach Beenden des Programms gespeichert und sind beim nächsten Start sofort wieder verfügbar. + +Alle von ihnen eingegebenen Nachrichten werden durch Bestätigung mit der Eingabetaste oder einen Klick auf "Senden" ausnahmslos an alle aktiven Benutzer gesendet. + +Eine alle fünf Sekunden aktualisierte Übersicht aller aktiven Benutzer erhalten Sie an der rechten Seite. + +2. Private Nachrichten + +Sollen Nachrichten nur an bestimmte Benutzer gesendet werden, so tun sie dies indem sie vor ihre Nachricht ein "PRIV Benutzername" setzen, wobei sie für Benutzername die Zielperson eintragen. +Beispiel: "PRIV JoSch Hallo!" +Wollen sie Nachrichten an mehrere Benutzer schicken, so geben sie diese durch Pluszeichen voneinander getrennt an. +Beispiel: "PRIV JoSch+Law Hallo Leute!" +Wollen Sie nicht ständig "PRIV" gefolgt von den Benutzernamen eintippen, so können Sie diese Arbeit automatisieren indem sie in der Liste der aktiven Benutzer am rechten Rand alle Benutzer mit einem Häkchen versehen, an die Sie senden wollen und danach auf "PRIV" klicken. Das Programm wird dann automatisch den entsprechenden Nachrichtenanfang für Sie generieren. + +Jeder Benutzer dem Sie eine private Nachricht schreiben erhält genau die von Ihnen eingetippte Zeile. Er kann also erkennen, dass diese Nachricht nur er liest oder ablesen wer ebenfalls die selbe Nachricht bekommen hat. +Beispiel: "JoSch (20:12:56): PRIV Law+Taires+HC Zocken?" +Diese Nachricht werden alle angegebenen Benutzer erhalten und somit sehen können von wem sie ist und wer sie ebenfalls erhalten hat. + +3. Akustische Bemerkungen + +Ist ein als aktiv angezeigter Benutzer anscheinend nicht erreichbar, so können Sie diesen durch eine akustische Nachricht auf sich aufmerksam machen. + +4. L33T + + \ No newline at end of file diff --git a/Chat2/Chat2/Main.Designer.cs b/Chat2/Chat2/Main.Designer.cs new file mode 100644 index 0000000..ba397ed --- /dev/null +++ b/Chat2/Chat2/Main.Designer.cs @@ -0,0 +1,425 @@ +namespace Chat +{ + partial class Chat22 + { + /// + /// 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() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Chat22)); + this.Sendbtn = new System.Windows.Forms.Button(); + this.InputTextBox = new System.Windows.Forms.TextBox(); + this.tbUsername = new System.Windows.Forms.TextBox(); + this.btnColor = new System.Windows.Forms.Button(); + this.cbL33T = new System.Windows.Forms.CheckBox(); + this.ColorDlg = new System.Windows.Forms.ColorDialog(); + this.lvOnline = new System.Windows.Forms.ListView(); + this.Sendstatus = new System.Windows.Forms.Timer(this.components); + this.CheckTimeouts = new System.Windows.Forms.Timer(this.components); + this.pColor = new System.Windows.Forms.Panel(); + this.btnPRIV = new System.Windows.Forms.Button(); + this.btnWAKE = new System.Windows.Forms.Button(); + this.llHilfe = new System.Windows.Forms.LinkLabel(); + this.btnClear = new System.Windows.Forms.Button(); + this.btnSave = new System.Windows.Forms.Button(); + this.cbSilent = new System.Windows.Forms.CheckBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.lOpazitt = new System.Windows.Forms.Label(); + this.nUDOpacity = new System.Windows.Forms.NumericUpDown(); + this.cbAlwaysOnTop = new System.Windows.Forms.CheckBox(); + this.OutputTextBox = new System.Windows.Forms.RichTextBox(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.silentToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.hauptfensteranzeigenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.chatbeendenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nUDOpacity)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // Sendbtn + // + this.Sendbtn.Dock = System.Windows.Forms.DockStyle.Fill; + this.Sendbtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.Sendbtn.Location = new System.Drawing.Point(0, 0); + this.Sendbtn.Name = "Sendbtn"; + this.Sendbtn.Size = new System.Drawing.Size(569, 69); + this.Sendbtn.TabIndex = 0; + this.Sendbtn.Text = "senden"; + this.Sendbtn.Click += new System.EventHandler(this.Sendbtn_Click); + // + // InputTextBox + // + this.InputTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.InputTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.InputTextBox.Location = new System.Drawing.Point(0, 0); + this.InputTextBox.Multiline = true; + this.InputTextBox.Name = "InputTextBox"; + this.InputTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.InputTextBox.Size = new System.Drawing.Size(569, 69); + this.InputTextBox.TabIndex = 0; + // + // tbUsername + // + this.tbUsername.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbUsername.Location = new System.Drawing.Point(3, 29); + this.tbUsername.Name = "tbUsername"; + this.tbUsername.Size = new System.Drawing.Size(146, 20); + this.tbUsername.TabIndex = 3; + // + // btnColor + // + this.btnColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnColor.Location = new System.Drawing.Point(74, 57); + this.btnColor.Name = "btnColor"; + this.btnColor.Size = new System.Drawing.Size(75, 20); + this.btnColor.TabIndex = 4; + this.btnColor.Text = "Farbe"; + this.btnColor.Click += new System.EventHandler(this.btnColor_Click); + // + // cbL33T + // + this.cbL33T.AutoSize = true; + this.cbL33T.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbL33T.Location = new System.Drawing.Point(3, 83); + this.cbL33T.Name = "cbL33T"; + this.cbL33T.Size = new System.Drawing.Size(44, 17); + this.cbL33T.TabIndex = 5; + this.cbL33T.Text = "L33T"; + // + // ColorDlg + // + this.ColorDlg.AnyColor = true; + this.ColorDlg.FullOpen = true; + // + // lvOnline + // + this.lvOnline.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lvOnline.CheckBoxes = true; + this.lvOnline.FullRowSelect = true; + this.lvOnline.Location = new System.Drawing.Point(3, 107); + this.lvOnline.MultiSelect = false; + this.lvOnline.Name = "lvOnline"; + this.lvOnline.Size = new System.Drawing.Size(146, 284); + this.lvOnline.TabIndex = 6; + this.lvOnline.View = System.Windows.Forms.View.List; + this.lvOnline.DoubleClick += new System.EventHandler(this.lvOnline_DoubleClick); + // + // Sendstatus + // + this.Sendstatus.Enabled = true; + this.Sendstatus.Interval = 5000; + this.Sendstatus.Tick += new System.EventHandler(this.Sendstatus_Tick); + // + // CheckTimeouts + // + this.CheckTimeouts.Enabled = true; + this.CheckTimeouts.Interval = 15000; + this.CheckTimeouts.Tick += new System.EventHandler(this.CheckTimeouts_Tick); + // + // pColor + // + this.pColor.Location = new System.Drawing.Point(3, 56); + this.pColor.Name = "pColor"; + this.pColor.Size = new System.Drawing.Size(65, 21); + this.pColor.TabIndex = 9; + // + // btnPRIV + // + this.btnPRIV.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnPRIV.Location = new System.Drawing.Point(3, 397); + this.btnPRIV.Name = "btnPRIV"; + this.btnPRIV.Size = new System.Drawing.Size(66, 20); + this.btnPRIV.TabIndex = 10; + this.btnPRIV.Text = "PRIV"; + this.btnPRIV.Click += new System.EventHandler(this.btnPRIV_Click); + // + // btnWAKE + // + this.btnWAKE.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnWAKE.Location = new System.Drawing.Point(88, 397); + this.btnWAKE.Name = "btnWAKE"; + this.btnWAKE.Size = new System.Drawing.Size(61, 20); + this.btnWAKE.TabIndex = 11; + this.btnWAKE.Text = "WAKE"; + this.btnWAKE.Click += new System.EventHandler(this.btnWAKE_Click); + // + // llHilfe + // + this.llHilfe.AutoSize = true; + this.llHilfe.Location = new System.Drawing.Point(125, 85); + this.llHilfe.Name = "llHilfe"; + this.llHilfe.Size = new System.Drawing.Size(24, 13); + this.llHilfe.TabIndex = 12; + this.llHilfe.TabStop = true; + this.llHilfe.Text = "Hilfe"; + this.llHilfe.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llHilfe_LinkClicked); + // + // btnClear + // + this.btnClear.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnClear.Location = new System.Drawing.Point(3, 3); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(65, 20); + this.btnClear.TabIndex = 13; + this.btnClear.Text = "Clear"; + // + // btnSave + // + this.btnSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSave.Location = new System.Drawing.Point(74, 3); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(75, 20); + this.btnSave.TabIndex = 14; + this.btnSave.Text = "Save"; + // + // cbSilent + // + this.cbSilent.AutoSize = true; + this.cbSilent.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbSilent.Location = new System.Drawing.Point(61, 84); + this.cbSilent.Name = "cbSilent"; + this.cbSilent.Size = new System.Drawing.Size(45, 17); + this.cbSilent.TabIndex = 15; + this.cbSilent.Text = "Silent"; + this.cbSilent.CheckedChanged += new System.EventHandler(this.cbSilent_CheckedChanged); + // + // panel1 + // + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.lOpazitt); + this.panel1.Controls.Add(this.nUDOpacity); + this.panel1.Controls.Add(this.cbAlwaysOnTop); + this.panel1.Controls.Add(this.btnClear); + this.panel1.Controls.Add(this.cbSilent); + this.panel1.Controls.Add(this.tbUsername); + this.panel1.Controls.Add(this.btnColor); + this.panel1.Controls.Add(this.btnSave); + this.panel1.Controls.Add(this.cbL33T); + this.panel1.Controls.Add(this.llHilfe); + this.panel1.Controls.Add(this.lvOnline); + this.panel1.Controls.Add(this.btnWAKE); + this.panel1.Controls.Add(this.pColor); + this.panel1.Controls.Add(this.btnPRIV); + this.panel1.Dock = System.Windows.Forms.DockStyle.Right; + this.panel1.Location = new System.Drawing.Point(571, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(152, 468); + this.panel1.TabIndex = 16; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(110, 446); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(11, 13); + this.label1.TabIndex = 19; + this.label1.Text = "%"; + // + // lOpazitt + // + this.lOpazitt.AutoSize = true; + this.lOpazitt.Location = new System.Drawing.Point(6, 446); + this.lOpazitt.Name = "lOpazitt"; + this.lOpazitt.Size = new System.Drawing.Size(45, 13); + this.lOpazitt.TabIndex = 18; + this.lOpazitt.Text = "Opazitt:"; + // + // nUDOpacity + // + this.nUDOpacity.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nUDOpacity.Increment = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.nUDOpacity.Location = new System.Drawing.Point(57, 446); + this.nUDOpacity.Minimum = new decimal(new int[] { + 15, + 0, + 0, + 0}); + this.nUDOpacity.Name = "nUDOpacity"; + this.nUDOpacity.Size = new System.Drawing.Size(47, 20); + this.nUDOpacity.TabIndex = 17; + this.nUDOpacity.Value = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.nUDOpacity.ValueChanged += new System.EventHandler(this.nUDOpacity_ValueChanged); + // + // cbAlwaysOnTop + // + this.cbAlwaysOnTop.AutoSize = true; + this.cbAlwaysOnTop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbAlwaysOnTop.Location = new System.Drawing.Point(3, 423); + this.cbAlwaysOnTop.Name = "cbAlwaysOnTop"; + this.cbAlwaysOnTop.Size = new System.Drawing.Size(85, 17); + this.cbAlwaysOnTop.TabIndex = 16; + this.cbAlwaysOnTop.Text = "Always on top"; + this.cbAlwaysOnTop.CheckedChanged += new System.EventHandler(this.cbAlwaysOnTop_CheckedChanged); + // + // OutputTextBox + // + this.OutputTextBox.BackColor = System.Drawing.SystemColors.Window; + this.OutputTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.OutputTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.OutputTextBox.Location = new System.Drawing.Point(0, 0); + this.OutputTextBox.Name = "OutputTextBox"; + this.OutputTextBox.ReadOnly = true; + this.OutputTextBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedVertical; + this.OutputTextBox.Size = new System.Drawing.Size(569, 391); + this.OutputTextBox.TabIndex = 18; + this.OutputTextBox.Text = ""; + // + // splitContainer1 + // + this.splitContainer1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.OutputTextBox); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.InputTextBox); + this.splitContainer1.Panel2.Controls.Add(this.Sendbtn); + this.splitContainer1.Size = new System.Drawing.Size(571, 468); + this.splitContainer1.SplitterDistance = 393; + this.splitContainer1.TabIndex = 19; + this.splitContainer1.Text = "splitContainer1"; + // + // notifyIcon1 + // + this.notifyIcon1.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info; + this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1; + this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); + this.notifyIcon1.Text = "Chat 2.2"; + this.notifyIcon1.Visible = true; + this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick); + this.notifyIcon1.BalloonTipClicked += new System.EventHandler(this.notifyIcon1_BalloonTipClicked); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Enabled = true; + this.contextMenuStrip1.GripMargin = new System.Windows.Forms.Padding(2); + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.silentToolStripMenuItem, + this.hauptfensteranzeigenToolStripMenuItem, + this.chatbeendenToolStripMenuItem}); + this.contextMenuStrip1.Location = new System.Drawing.Point(79, 59); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.contextMenuStrip1.Size = new System.Drawing.Size(174, 70); + // + // silentToolStripMenuItem + // + this.silentToolStripMenuItem.CheckOnClick = true; + this.silentToolStripMenuItem.Name = "silentToolStripMenuItem"; + this.silentToolStripMenuItem.Text = "Silent"; + this.silentToolStripMenuItem.CheckedChanged += new System.EventHandler(this.silentToolStripMenuItem_CheckedChanged); + // + // hauptfensteranzeigenToolStripMenuItem + // + this.hauptfensteranzeigenToolStripMenuItem.Name = "hauptfensteranzeigenToolStripMenuItem"; + this.hauptfensteranzeigenToolStripMenuItem.Text = "Hauptfenster anzeigen"; + this.hauptfensteranzeigenToolStripMenuItem.Click += new System.EventHandler(this.hauptfensteranzeigenToolStripMenuItem_Click); + // + // chatbeendenToolStripMenuItem + // + this.chatbeendenToolStripMenuItem.Name = "chatbeendenToolStripMenuItem"; + this.chatbeendenToolStripMenuItem.Text = "Chat beenden"; + this.chatbeendenToolStripMenuItem.Click += new System.EventHandler(this.chatbeendenToolStripMenuItem_Click); + // + // Chat22 + // + this.AcceptButton = this.Sendbtn; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(723, 468); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Chat22"; + this.Text = "Chat 2.2.1"; + this.Shown += new System.EventHandler(this.Chat21_Shown); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Chat_FormClosing); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nUDOpacity)).EndInit(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.Panel2.PerformLayout(); + this.splitContainer1.ResumeLayout(false); + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button Sendbtn; + private System.Windows.Forms.TextBox InputTextBox; + private System.Windows.Forms.TextBox tbUsername; + private System.Windows.Forms.Button btnColor; + private System.Windows.Forms.CheckBox cbL33T; + private System.Windows.Forms.ColorDialog ColorDlg; + private System.Windows.Forms.ListView lvOnline; + private System.Windows.Forms.Timer Sendstatus; + private System.Windows.Forms.Timer CheckTimeouts; + private System.Windows.Forms.Panel pColor; + private System.Windows.Forms.Button btnPRIV; + private System.Windows.Forms.Button btnWAKE; + private System.Windows.Forms.LinkLabel llHilfe; + private System.Windows.Forms.Button btnClear; + private System.Windows.Forms.Button btnSave; + private System.Windows.Forms.CheckBox cbSilent; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.RichTextBox OutputTextBox; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.NotifyIcon notifyIcon1; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem chatbeendenToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem hauptfensteranzeigenToolStripMenuItem; + private System.Windows.Forms.CheckBox cbAlwaysOnTop; + private System.Windows.Forms.Label lOpazitt; + private System.Windows.Forms.NumericUpDown nUDOpacity; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ToolStripMenuItem silentToolStripMenuItem; + } +} + diff --git a/Chat2/Chat2/Main.cs b/Chat2/Chat2/Main.cs new file mode 100644 index 0000000..730a5b2 Binary files /dev/null and b/Chat2/Chat2/Main.cs differ diff --git a/Chat2/Chat2/Main.resx b/Chat2/Chat2/Main.resx new file mode 100644 index 0000000..e86db39 --- /dev/null +++ b/Chat2/Chat2/Main.resx @@ -0,0 +1,5843 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 110, 17 + + + 216, 17 + + + 343, 17 + + + 450, 17 + + + + + AAABAAwAEBAAAAEACABoBQAAxgAAABgYAAABAAgAyAYAAC4GAAAgIAAAAQAIAKgIAAD2DAAAMDAAAAEA + CACoDgAAnhUAABAQAAABACAAaAQAAEYkAAAYGAAAAQAgAIgJAACuKAAAICAAAAEAIACoEAAANjIAADAw + AAABACAAqCUAAN5CAABAQAAAAQAgAChCAACGaAAASEgAAAEAIACIVAAArqoAAGBgAAABACAAqJQAADb/ + AACAgAAAAQAgACgIAQDekwEAKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAAA + AABjUkgAY1VMAHhWQgB7eHYAeXl5AH19fQCZblUAmntnAIN+ewCqfGEAl4Z8AICAgACHgoAAioqKAJ6Q + hwCRkZEAlpaWAJuUkACampoAnJycALWaigCzo5oAv6iaAKGhoQClpaUAqqmpALCwsAC2trUAubm5AL29 + vQDEv7wAwsLCAMbGxgDJyckAzs7OANDQ0ADW1tYA2dnZAN3d3QDg3t0A4ODgAOXm5gDs6OUA6enpAOzs + 7ADz8O4A8vLyAPb29gD5+fkA/v7+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJAwAAAAAAAAAAAAAAAAAETIyIgwAAAAAAAAAAAAAACoiITIy + IQYAAAAAAAAAAAwyMB4RHDAyHAwAAAAAAAAiKiQyMiIUGyonAAAAAAAGMiwcESEyMiciGwAAAAAAGTAs + MjIhFBwsMAAAAAAADDAsGxQkMjInJBwAAAAAABEyJzIwHhQeLDIAAAAAAAAnMh4RITIyJiIiAAAAAAAO + FhkwMCoyMjIyGQAAAAAAAAoEFxIuJzIyKgAAAAAAAAACAAcJFQ8rHhkAAAAAAAAAAAAMAAMACAsAAAAA + AAAAAAAAAAAAAAIAAAAAAAAA//8AAPj/AAD4PwAA+A8AAPADAADwAwAA4AMAAOAHAADABwAAwA8AAMAP + AACADwAAwB8AANAfAAD1PwAA/38AACgAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAAAAAAAAAAAAEAAAAB + AAAAAAAASTUoAE1BOQBgRDQAZkk4AHNSPwBaUEoAXlVQAHddTgBxYVcAaGloAG1tbQBwcHAAdXV1AHt3 + cwB5eXkAfn5+AIFcRwCBXkkAhGNRAJNqUQCacFcAm3VdAKF1WgCleV4AlXZkAIB8eQCSfnIAnIFxAJiB + dQCxg2UAtolrAIKCggCFhYUAioqKAI2NjQCRkZEAlZWVAJiYmACenp4ApqKfAKGhoQClpaUAq6imAKmp + qQCurq4AsbGxALSzswC1tbUAurq6AL69vQDCta4AwcHBAMXFxQDJxMEAysrJAM7OzgDQ0NAA1tbWANnZ + 2QDe3t4A4NvYAODf4ADm5uYA6efmAOnp6QDt7e0A8O7tAPHx8QD19fUA+Pf3APn5+QD+/v4AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEA8AAAAAAAAAAAAAAAAAAAAAAAAA + AAALSDoQEAAAAAAAAAAAAAAAAAAAAAAAAAAtSEhIOQ8AAAAAAAAAAAAAAAAAAAAAAAtFSEhISEg1DwAA + AAAAAAAAAAAAAAAAACRINSIwQkhISDELAAAAAAAAAAAAAAAACz9ISDkiIS0/SEhIMAsAAAAAAAAAAAAA + EEhISEhIOykhKT9ISEYtAAAAAAAAAAAQNUgxMD9ISEhCMBAkNUgxAAAAAAAAAAALSEg6JyEpO0hISEU1 + J0UnAAAAAAAAAAApSEhISD8wISc5RUhISDsAAAAAAAAAAAtFSDVCSEhIRTUkIjBCSCcAAAAAAAAAACJI + SCkhJzpISEhIOyk5QgAAAAAAAAAADztISEhCNSIiMUVISEhILQAAAAAAAAAAD0hINUJISEg6KSEpP0hI + AAAAAAAAAAAAMUhFKSEpOkhISEIxJEg1AAAAAAAAAAALQjZISEI1IjpISEhISEgkAAAAAAAAAAAkMwE5 + SD9ISEhISEhISD4AAAAAAAAAAAAAFhEwPQM5SEZISEhISCkAAAAAAAAAAAAAFAkAGRcuRQgxSEhIRQAA + AAAAAAAAAAAAAgAAERMAHB4rSBs1LQAAAAAAAAAAAAAAAAAAAgAABRUAHR8oAAAAAAAAAAAAAAAAAAAA + AAAABhoABBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAABw4AAAAAAAAAAAAA////AP8f/wD/B/8A/wP/AP4A + /wD+AD8A/AAPAPwABwD4AAcA+AAHAPgADwDwAA8A8AAfAOAAHwDgAD8A4AA/AMAAPwDAAH8A4AB/AOQA + /wDsgP8A/ZH/AP+T/wD/8/8AKAAAACAAAABAAAAAAQAIAAAAAAAABAAAAAAAAAAAAAAAAQAAAAEAAAAA + AAAvKSUANCwnAD4sIQBCNS4ASTQoAE03KQBOOS0AUDkrAFA5LQBIPjkASkA7AGNGNQBlSjkAYEo/AGlL + OQBqTDoAb089AFpaWgBfXFoAXV1dAGdRRQB0U0AAdlVBAHtYQwB9WkYAbGJcAGFhYQBkZGQAaWlpAG1t + bQBybmoAcHBwAHR0cwB1dXUAe3Z0AHh4eAB+fn4AgFtFAIZgSgCLZU0Ai2tXAJZsUwCSa1UAlXNeAJF7 + bQCIgH0AjIJ8AKqAZgCtgmQAtIJkAL2JaQCliHQAxI5tAMaQbwDIkXAAgYGBAISCgQCGhoYAiYmJAI6O + jgCQiocAmI2HAJKQjwCQkJAAlJSUAJmZmQCdnZ0ArpKBAK2VhwC5ppsAoaGhAKSkpACpqakAra2tALGw + sAC2trYAubm5AL29vQDKua8A0MS9AMHBwQDFxcUAysrKAM3NzQDSzswA0dHRANTT1ADU1NQA19jXANnZ + 2QDb3NsA3d3dAODg3wDh4eEA5ebmAOro5gDq6ekA7OvqAO3t7QDv8PAA8fHxAPX19QD5+fkA/v7+AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAASWDgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVoaFslHAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAcVmhoaGhYIR4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxoaGhoaGho + Vh4eAAAAAAAAAAAAAAAAAAAAAAAAAAAhSmhoVmJoaGhoaFEeIQAAAAAAAAAAAAAAAAAAAAAAABJoaFsl + OEpdaGhoaGhMHCEAAAAAAAAAAAAAAAAAAAAAPGhoaFhCJThHW2hoaGhoShwlAAAAAAAAAAAAAAAAABJd + aGhoaGhdSjglQlhoaGhoaEceAAAAAAAAAAAAAAAAJWhoZmhoaGhoZk08JTxRaGhoaF0AAAAAAAAAAAAA + ABxRaGg8QVFoaGhoaGhWQSU4Sl1oSgAAAAAAAAAAAAAAHGhoaE08JThNZmhoaGhoW0c4WGgAAAAAAAAA + AAAAACFHaGhoaGhYQjg4Sl1oaGhoaGRoTQAAAAAAAAAAAAAAEmhoaGhoaGhoXUw4OEJYaGhoaGhBAAAA + AAAAAAAAAAA4aGhWTGJoaGhoaGZRQSU8TGZoWwAAAAAAAAAAAAAAHF1oaEw4JUdbaGhoaGhoWEclWGhC + AAAAAAAAAAAAAAAeaGhoaGJNPCU8TWZoaGhoaGJoZgAAAAAAAAAAAAAAHk1oaGhoaGhoVkI4JUpbaGho + aGhKAAAAAAAAAAAAAAASaGhoSlZoaGhoaGJMODhBVmZoaEEAAAAAAAAAAAAAJUJoaGI8JThMYmhoaGho + VkElWGhRAAAAAAAAAAAAAAASZmhoaGhbSjglR2hoaGhoaF1oaEEAAAAAAAAAAAAAADhiLT9oaGhoZlFR + aGhoaGhoaGhbAAAAAAAAAAAAAAAATFYYAWJoYGJoaGhoaGhoaGhoaEIAAAAAAAAAAAAAAAA9KjcLYmgp + AWhoaGhoaGhoaGhmAAAAAAAAAAAAAAAAAD4nNhI4TzEJYmhQLmhoaGhoaEoAAAAAAAAAAAAAAAAALhAN + AAAXNg5HZEQGWGhoYmhoQQAAAAAAAAAAAAAAAAAACgAAABcyHwArMRhbaEYGW1EAAAAAAAAAAAAAAAAA + AAAAAAAAAwQAABAzFQBENChYQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQwAABAxGUIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAACSsaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjCwAAAAAAAAAA + AAAAAAAA///////3////4f///+B////AH///wAf//4AB//+AAH//gAAf/wAAD/8AAA/+AAAP/gAAH/wA + AB/8AAAf/AAAP/gAAD/4AAB/8AAAf/AAAH/gAAD/4AAA/+AAAf/gAAH/4AAD/+AAA//jAAP/9xAH//8x + B///8w////8f////P/8oAAAAMAAAAGAAAAABAAgAAAAAAAAJAAAAAAAAAAAAAAABAAAAAQAAAAAAAB8V + DwAaFBAAJRoUADUlHAA2KSEAPSsgAD8sIQBALCEARTAkAEkzJwBFMygASjQoAE02KQBROi0AVDwtAEM6 + NgBJOzMATjswAFQ+MQBQQDcAW0EyAFpCNABiRjYAaEo5AG1OOwBvUD0AclE+AElEQQBMRUAATUdEAFFM + SQBUTkoAV1FOAFFRUQBWVlYAXFVRAFlZWQBdXV0AdVRAAHpXQgB7WEMAflpFAGZaVABhW1kAYl5dAHlh + UwBhYWEAZWVlAGhkYgBsZ2UAbmpnAGhoaABtbW0AcWxrAHx0bwBxcXEAdXJxAHZ2dgB5dXMAeXl4AHx7 + fAB+fn4AgFxHAIliSwCLZE0AjmZOAJBnTwCSaFEAkGtUAJltUwCccVcAn3RZAJt0XQCidFoAqHldAIZv + YACPdmYAgHNrAIRyaACVdmMAlHprAJl7aACHe3MAjH51AIB+fQCjfWUArHxgALF/YgCOhX8AkoB3AJqG + egCvhGgAtIJkALmFZwC5iWkAvoprAKOKfADAimsAxI1tAMCUcwDIknAAz5Z0AMyadwDVm3gA1516ANii + fQCBgYEAhYWFAIeIhwCIiYgAjY2NAJGRkQCVlZUAmJeWAJeYlwCZmZkAnZ2dAKeRhAC2mIUArZyRAKKi + ogClpaUAqqmqAKyrqgCtra0AsbGxALW1tQC/tbAAubm5AL29vQDDt68Ax724AL/AvwDLw78AwcHBAMTC + wgDExMQAzMPAAMnJyQDNzc0A0snDANTPywDS0M8A0dHRANXW1QDZ2dkA29zbAN3d3QDh4eEA5eXlAOnp + 6QDt6ukA7e3tAO/w7wDx8fEA9fX1APj49wD6+voA/v7+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOiY1AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIotvIjUAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MJ+fl2siNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAmfZ+fn5+UayI6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ADoin5+fn5+fn5Q6JjoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBwn5+fn5+fn5+f + izoiOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKVn5+fn5+fn5+fn5+JNSY6AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTqfn5+amp+fn5+fn5+fn4IwJjwAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAIoufn599a3qLmp+fn5+fn5+agiYwPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6 + Jp+fn5pvPGtrdIuan5+fn5+fn5p9JjA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmfZ+fn5+Xf288az5w + gpefn5+fn5+fn3omMAAAAAAAAAAAAAAAAAAAAAAAAAAAADwil5+fn5+fn5qJcD48a3CCl5+fn5+fn5+X + dCYwAAAAAAAAAAAAAAAAAAAAAAAAADBvn5+fn5+fn5+fmpB0azw+bX+Vn5+fn5+fn5dwMAAAAAAAAAAA + AAAAAAAAAAAAACKUn5+fn5+fn5+fn5+flX1rPGtrepSfn5+fn5+flwAAAAAAAAAAAAAAAAAAAAAANTqf + n5+afZCan5+fn5+fn5+Xgm88azx0i5ean5+ffwAAAAAAAAAAAAAAAAAAAAAAIomfn5+Lazxwgpefn5+f + n5+fn5qLcj4+Pm99l5+fawAAAAAAAAAAAAAAAAAAAAA6Jp+fn5+QdGs8a2t/lJ+fn5+fn5+fn5R6azxv + lZ+LAAAAAAAAAAAAAAAAAAAAAAAmdJ+fn5+fn5R6a2s8a3qUn5+fn5+fn5+fl3+Cn59vAAAAAAAAAAAA + AAAAAAAAADwil5+fn5+fn5+fl39vPGs8cJCfn5+fn5+fn5+fn5UAAAAAAAAAAAAAAAAAAAAAADBvn5+f + n5+fn5+fn5+akHRrazxvf5efn5+fn5+fn3QAAAAAAAAAAAAAAAAAAAAAACKQn5+fl5+fn5+fn5+fn5+U + fWs8a2t9kJqfn5+fn28AAAAAAAAAAAAAAAAAAAAANTWfn5+fdHCCmp+fn5+fn5+fn5eJbzxra3CJn5+f + fwAAAAAAAAAAAAAAAAAAAAAAJoKfn5+XbzxrPH2Un5+fn5+fn5+fn5B0azxrl5+fawAAAAAAAAAAAAAA + AAAAAAA6Ip+fn5+flYJvazw8cIuan5+fn5+fn5+flX+Cn5+LAAAAAAAAAAAAAAAAAAAAAAAwdJ+fn5+f + n5+akHRrazxvfZSfn5+fn5+fn5+fn59wAAAAAAAAAAAAAAAAAAAAADwilZ+fn5+fn5+fn5+Vf288PDxw + i5+fn5+fn5+fn5UAAAAAAAAAAAAAAAAAAAAAADA+n5+fn5qfn5+fn5+fn5qLdGtra29/l5+fn5+fn3oA + AAAAAAAAAAAAAAAAAAAAACKQn5+fn2twiZ+fn5+fn5+fn5R9azxra3qUn5+fn2sAAAAAAAAAAAAAAAAA + AAAANTWfn5+flGtrPFV9lZ+fn5+fn5+fmolwazxrl5+fggAAAAAAAAAAAAAAAAAAAAAAJn+fn5+fn5V/ + bz4+PHOLmp+fn5+fn5+flHp/n5+fawAAAAAAAAAAAAAAAAAAAAA8Ipqfn5+fn5+fmot0a2s8dJ+fn5+f + n5+fn5+fn5+QAAAAAAAAAAAAAAAAAAAAAAAwcJ+GWnCan5+fn5+fl39viZ+fn5+fn5+fn5+fn59wAAAA + AAAAAAAAAAAAAAAAAAA1lZpRGgGCn5+fn5+fn5+an5+fn5+fn5+fn5+fn5cAAAAAAAAAAAAAAAAAAAAA + AABri5pRPwFwnZ+fjo+fn5+fn5+fn5+fn5+fn5+fn3oAAAAAAAAAAAAAAAAAAAAAAAAAN1JJZgR0n5+E + QAN/n5+fn5+fn5+fn5+fn5+fn2sAAAAAAAAAAAAAAAAAAAAAAAAAT0FYZgVrkJ+ARgQ8n5+fnZefn5+f + n5+fn5+fiQAAAAAAAAAAAAAAAAAAAAAAAAAATD9eXRwAN3dbZRtVn5+adhR9n5+fn5+fn5+fbwAAAAAA + AAAAAAAAAAAAAAAAAAAALhlLFQAAWUMbaRs8lJ+XRQ8fn5+fn5+fn5+QAAAAAAAAAAAAAAAAAAAAAAAA + AAAAKwYGHAAAVBtAaRMAAHaDXEohn5+fjU+Jn590AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8zAAAAUydD + Vx8AAEcZZ0ssmp+aUBccn5dvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0IBQAAAEAYaUA1AHiK + Vl8cn30AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEcAAAAABcoXxMAAEUPZF8kmm8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsJCjoAAD8PakotAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAcNQAAAA0oYxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAABEJDTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ + MAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD//4////8AAP//g////wAA//8A//// + AAD//wA///8AAP/+AA///wAA//4AA///AAD//gAA//8AAP/8AAA//wAA//wAAA//AAD/+AAAA/8AAP/4 + AAAB/wAA//AAAAB/AAD/8AAAAD8AAP/wAAAAPwAA/+AAAAA/AAD/4AAAAD8AAP/AAAAAfwAA/8AAAAB/ + AAD/gAAAAP8AAP+AAAAA/wAA/4AAAAD/AAD/AAAAAf8AAP8AAAAB/wAA/gAAAAP/AAD+AAAAA/8AAPwA + AAAH/wAA/AAAAAf/AAD8AAAAB/8AAPgAAAAP/wAA+AAAAA//AADwAAAAH/8AAPAAAAAf/wAA8AAAAD// + AADwAAAAP/8AAPgAAAA//wAA+AAAAH//AAD4IAAAf/8AAPhgAAD//wAA+GDAAP//AAD84MAA//8AAP/x + wQH//wAA//PDAf//AAD//8MH//8AAP//5w///wAA////D///AAD///+f//8AACgAAAAQAAAAIAAAAAEA + IAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAs7OzAQAAADUAAABWIyMjHJ+f + nwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwaGhqRzs7O809P + T7YAAABWAAAAFwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzgoKC1v// + ///+/v7/yMjI8ERERK0AAABRAAAAFAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBgYGdOfn + 5/rIyMj/xsbG//f39//+/v7/vb297Dg4OKQAAABKAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIFpa + WsD+/v7/9PT0/7+/v/+Tk5P/vLy8//Pz8//+/v7/sbGx6C4uLpkHBwceAAAAAAAAAAAAAAAAAAAAAgAA + AFnGxsbx4ODg/9bW1v/9/f3/+/v7/8/Pz/+cnJz/sLCw/+Li4v/d3d3wEBAQJgAAAAAAAAAAAAAAAAAA + ABMzMzOn/v7+/+3t7f+2trX/l5eX/8jIyP/4+Pj//v7+/+Dg4P/Q0ND/dXV1pnNzcwgAAAAAAAAAAAAA + AAAAAABCn5+f4/Ly8v/p6en///////j4+P/Kysr/m5ub/7a2tv/p6en/9fX1+xISEkQAAAAAAAAAAAAA + AABfX18KFBQUiff39/3s7Oz/qqqq/6Ghof/S0tL/+/v7//7+/v/d3d3/0NDQ/5ubm8UAAAAPAAAAAAAA + AAAAAAAABwcHLnh4eNH+/v7/3d3d//7+/v/z8/P/wsLC/5mZmf+8vLz/8PDw//7+/v8vLy9mAAAAAQAA + AAAAAAAAi4uLBAMDA23g4OD4+vr6/7q6uv+ampr/w8PD/////v/9/f3/2dnZ/83Nzf/CwsLgAAAAGwAA + AAAAAAAAAAAAAF9fXwxFRUWgs6Oa/qupqP75+fj+9/f3/uLh4v/////////////////+/v7/VVVViwAA + AAQAAAAAAAAAAAAAAACzs7MBMysnTap8Yf5fW1jRv6ia/ZuUkP7z8O7+4N7d/v//////////4+Tk8wQE + BC4AAAAAAAAAAAAAAAAAAAAAAAAAAJGMiTU/LSLOGBENQ5luVf9AODSltZqK/Z6Qh/3s6OX+xL+8/nx8 + fKwAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAQ0cEw+GAwIBFHdVQf0dFRB6mnpm/Yt4 + beQXFxdEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBQMyAAAABUgz + J9gMCAY6AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAA8H8AAPAfAADwBwAA4AMAAOABAADAAQAAwAEAAMAD + AACAAwAAgAMAAAAHAAAABwAAAA8AAIAPAADgHwAA/B8AACgAAAAYAAAAMAAAAAEAIAAAAAAAYAkAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ0NDBwAAADEAAABCAAAAH1BQ + UAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAwMDHQAAAIFSUlLFBQUFiAAAAEwBAQEbQEBABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAQzw8 + PL7+/v7/1dXV9lZWVscBAQGAAAAARAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAdKioqOr///////////7+/v/Nzc30S0tLwQIC + An0AAABCAAAAFwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAA0HR0dqvf39/77+/v/+vr6/v7+/v/+/v7+/v7+/sLBwvE/Pz+8AAAAdgAAADsAAAATAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABigYGB3P7+/v7Jycn/i4uL/ra2 + tv/u7u7+/v7+/v7+/v79/f3+t7e37TQ0NLUAAABwAAAAOAAAABFycnICAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAACUICAiW5OTk+v/////5+fn/ysrK/5OTk/+Dg4P/rq6u/+fn5//+/v7///////7+ + /v+rrKvqLCwssAAAAGkAAAAgkZGRAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAE9ZWVnM/v7+/v7+ + /v7//////v7+/v39/f/Y2Nj+oaGh/oKCgv6mpqb/39/f/v7+/v7/////+fn5/qCgoOACAgJGf39/AwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAIHFxcXz/v7+/rq6uv60tLT/6enp/v7+/v/+/v7+/v7+/unp + 6f6ysrL/hISE/piYmP7FxcX/+fn5/ri4uN8AAAAto6OjAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAAQDMz + M7r+/v7////+/9jY2P+fn5//gYGB/6SkpP/e3t7//f39////////////9fX1/8PDw/+dnp3/9/f3/0tK + S5EYGBgPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAb56enuf//////v7+/v7+/v7+/v7/5+fn/rKy + sv+Ghob+mJiY/s7Ozv75+fn//v7+/v7+/v7+/v7/2dnZ8AQEBEB4eHgDAAAAAAAAAAAAAAAAAAAAAD8/ + PwEAAAAvFRUVpPPz8/3+/v7/xcXF/+vr6//////////////////19fX/x8fH/5GRkf+Kior/tra2/+3t + 7f//////cnJyrwAAABgAAAAAAAAAAAAAAAAAAAAAAAAAACkpKQoAAABed3d32P7+/v76+vr/qKio/oKC + gv6goKD/1dXV/vv7+//+/v7+/v7+/v7+/v7a2tr/pKSk/svLy/7x8fH6EhISWAAAAAYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAACIFBQWR3d3d+f7+/v7//////v7+/vDw8P6/v7//jo6O/oyMjP+7u7v+8PDw/v7+ + /v7//////v7+/v7+/v6YmJjKAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbBgAAAExPT0/I/v7+/v7+ + /v7CwsL/7u7u/v7+/v7/////+/v7/tbW1v+ioqL+g4OD/qmoqf7e3t7//v7+/v7+/v4sLCx3AAAACgAA + AAAAAAAAAAAAAAAAAAAAAAAABQUFFwAAAH28vLzx//////X19f+kpKT/gYGB/6Kiov/X19f//Pz8//// + ///+////7ezt/7q5uf+Wlpb/+fn5/76+vuMAAAAwAAAAAQAAAAAAAAAAAAAAAAAAAACVlZUCAAAANykq + KbLw7u3+ycTB/vz8/P7+/v7/7+/v/sDAwP6QkJD/1tbW/v/////+/v7+/v7+/v7+/v79/f3//v7+/lJS + UpcAAAARAAAAAAAAAAAAAAAAAAAAAAAAAACPj48DAAAAOXl5ecnCta79STUo/tDQ0P7+/v3+6efm/v7+ + /v78/Pz//f39/v/////+/v7+/v7+/v7+/v7/////397f8wYGBkQAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAADQ0NDiIYE2ybdFz9f1xH+7Kysu/g29j9YEQ0/srKyf7/////+fn5/v7+/v////////////// + ////////eHh4swAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBRSG+TalH/SjUoxxYQ + DGOVdWP9oXVa/rGwsPX49/f+dlxN/b69vP7+/v7+/v7+/v7+/v709PT7FxcXXgAAAAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5KRz8rHhbXBwQDOSUaFFOBXEf/e1hE7QUFBU+bf2/7sYNl/qqn + pfz7+/v+kn1x/cLAwP6fn5/PAAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAYEAx4xIhnbEAsIYQYEAx1zUj//mW5V+wYFBWOXgHP7tolr/qWhnvszMzN5AAAACwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMrHhfGGxMOjQQCAhlmSTj+pXhd/Q4NDF4AAAAbAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEoHBW+HRUPlAAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+D/8A/gP/APwA/wD8AD8A+AAPAPgA + AwD4AAEA8AABAPAAAQDgAAMA4AADAMAABwDAAAcAwAAPAIAADwCAAA8AAAAfAAAAHwCAAD8AwAA/AMAA + fwD4AH8A/wB/AP+h/wAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAsAAAANgAAACAPDw8Kf39/AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPT08DAAAAKgAAAHMAAACSAAAAcQAA + AEQAAAAfDw8PCX9/fwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAABOCAgIqdPT + 0/loaGjWBAQEngAAAG8AAAA/AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAIQAA + AHVjY2PW/v7+//7+/v/c3Nz5W1tb0QEBAZcAAABoAAAAOwAAABoAAAAHAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAkAAABBAAAAms/Pz/f////////////////+/v7/09PT91FRUMsAAACTAAAAZgAAADoAAAAZAAAABgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAGQAAAGg6OjrH/v7+/////////////////////////////v7+/8rKyvVFRUXIAAAAkQAA + AGMAAAA0AAAAFAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAUAAAA1AAAAjqenp+3//////fz9/8zMzP/t7e3//f39//////////////////7+ + /v++vr7yOTk5wgAAAIoAAABcAAAAMQAAABMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAFkaGhq2+vr6/v/////a2tr/fn5+/4ODg/+pqan/4uLi//39 + /f/////////////////+/v7/s7Oz7y8vL70AAACIAAAAWgAAAC8AAAASPz8/AwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAApAAAAf39/f+D+/v7///////39/f/V1dX/nJyc/35+ + fv+AgID/oaGh/9vb2//9/f3//////////////////v7+/6enp+wlJSW5AAAAhQAAAFIAAAAfHx8fBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAEoEBASl5ubm/P////////////////// + //////7/4+Pj/6urq/+BgYH/fn9//5mZmf/U1NT//Pz8/////////////v7+//v7+/6bm5voHR0dpgAA + AEkAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAfAAAAcllZWdL+/v7///////b2 + 9v/+/v7///////////////////////Dw8P+7u7v/iYmJ/35+fv+QkJD/x8fH//j4+P/+/v7///////7+ + /v/o6Oj7BAMEVQAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAD4AAACXxMTE9f// + ///9/f3/j4+P/5SUlP/Gx8b/9/f3///+//////////////7////6+vr/zc3N/5WVlv9+fn7/hYWF/6qq + qv/j4+P//v7+/46OjskAAAAyPz8/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAZDEx + McP+/v7///////v7+/++vr7/i4uL/35+fv+IiIj/urq6//Hx8f///////////////////////v7+/97e + 3v+lpaX/f39//9TU1P/9/f3+IyMjfAAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA + ADEAAACKnZ2d6v/////////////////////7+/v/0tLS/5ubm/9+fn7/goKC/62urf/m5ub///////// + ///////////////////v8PD//v7+/7S0tOEAAAA+Hx8fBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAQAAAAVRMTE7H29vf+///////////////////////////////////+/+Xl5f+wsLD/g4OD/35+ + fv+cnZz/1NPU//z8/P/////////////////+/v7/SEhImQAAAB9/f38BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAACYAAAB8dXV13f7+/v//////zMzM/7i4uP/u7u7///////////////////////// + ///19fX/w8PD/4+Pj/9+fn7/ioqK/7a2tv/z8/P//////9nZ2fIBAQFNAAAADAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAKAAAARwICAqHg4N/6//////////+1tbX/gICA/35+fv+ioqL/2NjY//79 + /v///////////////////v///f39/9fY1/+hoaH/fn5+/9jY2P/+/v7/bm5utQAAACgAAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAj4+PAQAAAB0AAABuUFBQz/7+/v/////////////////v7+//vLy8/4qL + i/9+fn7/jY2N/7+/v//w8PD//////////////////////////v/t7e3//v7+//Ly8vwODg5kAAAAEQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHx8HAAAAOwAAAJS5ubny//////////////////////// + ///+/////Pz8/9TT1P+fn5//f39//39/f/+oqKj/4ODg///////////////////////+/v7/lZWVzQAA + ADMAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAABhKCgov/7+/v///////f39/6io + qP/Pz8///Pz8/////////////////////v/q6ur/tra2/4eHh/9+fn7/lZWV/8rKyv/5+fn///////7+ + /v8pKSmBAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPT08EAAAALgAAAIeUlJTn/v7+//// + ///u7u7/kJCQ/35+fv+Ghob/tra2/+3t7f/////////////////+////+fn5/87Ozv+amZn/fn5+/9TU + 1P//////urq65QAAAEAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAABRDQ0NrfHx + 8f79/f3//v7+///+///9/f3/29zb/6qqqv+Dg4P/fX19/6Wlpf////7///////////////////////// + /v/m5+f//f39//7+/v9PT0+fAAAAIQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAA + AG1sbGzX6+rp/pF7bf6SkI/+/f39//////////////////T09P/FxcX/xMTE//////////////////// + ////////////////////////39/f9QICAlIAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAXAAAAWqmoqOPSzsz8gFtF/y8pJf7v7+///v7+/+ro5v7q6un+/v7+///+//////////////// + //////////////////////////////7+/v91dXW5AAAAKwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAA8PDwcAAAAhJxwWg5VyXf3IkXD/SkA6/evr6v/+/v7/i2pW/TQsJ/76+vr///////// + ////////////////////////////////////////9fX1/RISEmkAAAASAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9fXwJGMiaNhmBK/8SObf8QCwiqODUzncq5r/2qf2X8Tjkt/vDw + 8P7+/v7/0MS9/YiAfP36+vr+//////////////////////////+cnJzSAAAANQAAAAUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0rIZZpSzn/ZEg3/AIBATArHxhsdFNA/8aQ + b/9UPTHtkJCQze7t7PyukoH9TTcp/9jY2P3//////Pz8/uzr6v7+/v7//v7+/y8vL4YAAAAZAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwcFQCMYEtQMCAZoAAAAADEj + G292VUH/tIJk/xoSDZwCAQE+kWpT/KmBZv57WEP+2dnZ+/7+/v+5ppv9STQo/t7e3v7BwcHpAAAAQgAA + AAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAACwgGNT0rIP0uIBjmAgEBGgoHBSlvTz3/vYlp/1Y9L+QGBgZgrJOF+qSHc/yLZU3/0tHR/VdX + V6EAAAAiAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAwICJQEBABAAAAAAAgEBD002KfpjRjX/EQwJewUEAypqTDr/rYJk/3tY + RPtUVFSZBQUFQQAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgGVRALCHUAAAADAwIBE1A5 + K/6WbFP/LiAYswAAABUAAAAMAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAGRENkiIXEdEDAgEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP/A////gD///4AP//8AA///AAH//wAAf/4AAB/+AAAH/AAAA/wAAAP4AAAD+AAAA/gA + AAfwAAAH8AAAB+AAAA/gAAAPwAAAH8AAAB/AAAA/gAAAP4AAAD+AAAB/gAAAf4AAAP/AAAD/4AAA/+IA + Af/+AAH//yAD///wA////x//KAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAYAAAAUAAAAJQAAACsAAAAhAAAAEwAAAAdfX18BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAgAAABIAAAAzAAAAVwAAAGUAAABYAAAAPQAAACQAAAASCwsLB1tbWwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAADw8PBgAAACQAAABWAAAAiAECAaMAAACTAAAAeQAAAFgAAAA7AAAAIgAA + ABAHBwcGY2NjAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADwAAADoAAAB3AQEBrcfHx/mBgYHkFxcXuQAA + AJYAAAB5AAAAWQAAADkAAAAgAAAADwAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHQAAAFMAAACQRERE0v7+ + /v/+/v7/5ubl+3Fxcd8SEhK0AAAAkwAAAHMAAABSAAAANQAAAB0AAAAOAAAABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAALwAA + AG0BAQGnqqqq8P7+/v7+/v7+/v7+/v7+/v7a29r6a2tr3AQEBKwAAACNAAAAbwAAAE4AAAAyAAAAHAAA + AAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAAYAAAASAAAAIgnJyfF9fX1/v///////////v7+/v/////+/v7//v7+/tvb2/pfX1/YCQkJrAAA + AI0AAABvAAAAUAAAADIAAAAcAAAADQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAkAAAAqAAAAYgAAAJ+IiIjn/v7+/v///////////v7+/v///////////v7+/v7+ + /v/8/Pz+z8/P91NTU9MICAiqAAAAiwAAAGwAAABNAAAAMQAAABkAAAALAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABMAAAA/AAAAfRAQELnh4eH7/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v39/f7Dw8P1R0dH0QAAAKQAAACJAAAAaQAAAEcAAAArAAAAFgAA + AAkAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACMAAABaAAAAlmRkZN3+/v7//v7+/v// + ///w8PD/8PDw/vr6+v/+/v7//v7+/v///////////v7+/v/////+/v7//v7+/r6+vvVAQUHOAgICpQAA + AIUAAABlAAAARgAAACoAAAAWAAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADgAAADcAAAB0AQEBrMrK + yvn+/v7//v7+/v7+/v+rqqv/iIiI/qampv/Nzs3/8PDw/v39/f///////v7+/v///////////v7+/v7+ + /v/39/f+s7Oz8TQ0NMcCAgKfAAAAggAAAGIAAABEAAAAKgAAABUAAAAJAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGwAA + AE8AAACNOTk5zv7+/v///////v7+/vLy8v+IiIj/fn9//n9+fv+BgoL/mJiY/srKyv/x8fH//f39/v// + /////////v7+/v///////////v7+//b39/6mpqbtKSkpxAAAAJsAAACAAAAAYQAAAEEAAAAmAAAAEwAA + AAZDQ0MBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAALAAAALgAAAGsBAQGlpKSk7v7+/v7+/v7+/v7+/v7+/v7p6en+s7Oz/oeHh/5+fn7+fn9//n5+ + fv6QkJD+v7+//u7t7f79/f3+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/f39/pqamuwoKCjCAAAAnQAA + AH8AAABeAAAAPAAAAB0AAAAKR0dHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAMAAAAXAAAARQAAAIUgICDB7+/v/f///////////v7+/v///////////v7+/u/w + 7//BwcH/kJCQ/n9/f/9+f37/f39//o2Njf+5ubn/6urq/v39/f////////////7+/v7///////////7+ + /v7u7u79lJSU6RwcHLwAAACXAAAAcQAAAEAAAAAZAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAnAAAAXgAAAJx8fHzk/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+9/f3/s7Ozv6YmJj+fn5+/n9/f/5+fn7+h4aH/rGxsf7o6Oj+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/urq6vyFhYXjExMTpAAAAFwAAAAmAAAABwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABIAAAA9AAAAew0NDbfe3t76/v7+/v// + ///+/////v7+/v///////////v7+/v///////////v7+/v/////9/f3/39/f/qioqP+EhIT/fn5+/n5+ + fv+AgID/o6Oj/9zc3P77+/v///////7+/v7///////////7+/v7+/v7/6urq/QgICHAAAAAnAAAABwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAACEAAABXAAAAk1hY + WNn9/P3//v7+/v/////y8vL/rq6u/tPT0//w8PD//f39/v///////////v7+/v///////////v7+/v39 + /f/s7Oz/u7u7/oyMjP9/f3//fn5+/4CAgP6ZmZn/y8vL/+rq6v719fX//f39//7+/v7+/v7/pqam3wAA + AFAAAAAcDAwMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAA + ADUAAAByAAAAqcHBwff+/v7+/v7+/v7+/v7Ly8v+fn5+/n5+fv6Ojo7+urq6/u7u7v7+/f3+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/vX19f7Kysr+lJSU/n19ff5+f37+fn5+/oqKiv6srKz+6Ojo/v7+ + /v75+fn+QkJCoAAAADgAAAAQg4ODAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAEAAAAGgAAAE8AAACMMTExzP7+/v7//////v7+/v/////S0tL/lpeX/n9/fv9/fn//fn5+/oSE + hP+urq7/4eHh/v39/f///////v7+/v///////////v7+/v///////////v3+/9vb2/6kpKT/goKC/35+ + fv6Hh4f/5OTk//7+/v7GxsbsAwMDYgAAACITExMGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAKAAAALAAAAGkAAACjm5ub7P7+/v7//////v7+/v//////////+fn5/trZ + 2v+lpaX/hISE/n5+fv9+f37/goKC/qOjo//a2tr/+vr6/v///////////v7+/v////////////////7+ + /v78/Pz/5+fn/7Kysv6/wL///f39//7+/v5hYWG2AAAAQQAAABNPT08CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAVAAAAQgAAAIMZGRm+6urq/f7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+6enp/ra2tv6HiIf+fn5+/n9/f/5/f3/+l5eX/s3Nzf75+fn+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/uHh4fcTExN0AAAAKwAAAAkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAlAAAAXQAAAJt3d3fi/v7+//7+ + /v7//////v7+/v///////////v7+/v///////////v7+/v///v/39/f/zc3N/pmZmf+AgID/fn5+/n5+ + fv+IiIj/ubm5/uvr6//+/v7///////7+/v7///////////7+/v7//////v7+/4WFhcsAAABKAAAAGScn + JwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEAAAA7AAAAdwkJ + CbTV1tX5//7///7+/v7/////7+/v/vj4+P///////v7+/v///////////v7+/v///////////v7+/vr6 + +v/e397/q6ur/oWFhf9+fn7/fn5+/oSEhP+np6f/2NjY//T09P79/f3///////7+/v7/////+vr6/h8f + H4cAAAAxAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA + AB8AAABTAAAAkE1NTdX7+/v+/v7+/v7+/v78/Pz+np6e/o+Pj/69vb3+8vLy/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/uzs7P69vb7+i4uL/n59fv5+f3/+fn5+/o+Pj/7BwcH++fn5/v7+ + /v7+/v7+r6+v5AAAAFIAAAAeAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAADAAAADMAAABvAAAAp7y8u/X+/v7///////7+/v7t7e3/hYWE/n5+fv9+fn7/fX19/qio + qP/b3Nv//Pz8/v/+/////////v7+/v///////////v7+/v///////v//+/v7/tHR0f+enp7/gICA/35+ + fv6Ghob/7u7u//7+/v76+vr+REREogAAADcAAAAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAnJycDAAAAGAAAAEsAAACJJycnx/z8/P////////////7+/v79/f3/5+fn/ra2 + tv+MjIz/f39//n9/fv9/f3//k5OT/sjIyP/y8vL//v7+/v///////////v7+/v///////////v7+/v// + ///7+/v/4+Pj/66urf67u7v//v7+//7+/v7Nzc3uBgYGZQAAACMAAAAGAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAKgAAAGYAAACgkZGR6f7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v709PT+zs7O/pmZmf5/f37+f39//n19ff6Hh4f+qqqq/uDg4P79/f3+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f3+/v7+/v7+/v5oaGi7AAAAQwAAABQAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEdHRwIAAAAUAAAAQQAAAIIWFha85ubm/f// + //////////////7+/v7//////v7+/v///////////v7+/v7+/v/l5eX/srKy/omJif9+fn7/f39//nx7 + fP+UlJT/y8vL/vf39////////v7+/v////////////////7+/v7//////////+Xl5fgUFBR1AAAAKwAA + AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAkAAAAWwAA + AJpra2ve/v7+/v////////////////Dw8P77+/v//v7+/v///////////v7+/v///////////v7+/vLx + 8f/IyMj/l5iX/oGBgf9/f3//fn5+/ouLi/+5ubn/6urq/v39/f////////////7+/v7//////v7+/42N + jc8AAABMAAAAGQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAe3t7AQAA + ABAAAAA5AAAAdgUFBbHOzs73/v7+/v7+/v7+/v7++/v7/oiIiP6UlJT+xMTE/vn5+f7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7++/v7/tzc3P6rq6v+g4OD/n9/f/5+fn7+gYGB/qSkpP7a2tr+/f39/v7+ + /v7+/v7+/v7+/iUlJY0AAAAzAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAFxcXBAAAAB4AAABSAAAAkEhISNP7+/v+/v7+/v//////////3Nzc/39/f/5/f3//fX19/n9+ + fv+tra3/4ODg/v7+/v///////v7+/v///////////v7+/v7/////////8/Pz/sLCwv+UlJT/f39//n9/ + f/+Dg4P/6+vr//7+/v7+/v7/srKy5gAAAFQAAAAfAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAADEAAABsAAAApbCwsPL+/v7//v7+/v//////////+/v7/+Li + 4v6wsLD/iouK/oCAgP9/f3//fn5+/pWVlf/Kysr/8/Pz/v///v///////v7+/v///////////v7+/v// + ///4+Pj/2tra/qWlpf+ysrL//v7+//7+/v77+/v+S0tLqAAAADoAAAARAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3NzcCAAAAFgAAAEcAAACGHR0dw/r6+v7+/v7//Pz8/v39 + /f////////////7+/v7+/v7/8vLy/svLy/+bm5v/gICA/oGBgf99fX3/lZWU/v///////////v7+/v// + /////////v7+/v///////////v7+/v7+/v/7+/v///////7+/v7U1NTxCAgIaQAAACUAAAAHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHx8FAAAAIgAAAFwAAACaioqK5v39 + /f7Lw7/9koB2/ZiXlv309PT+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+6Ojo/rS0tP6NjY3+xcXF/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v5sbGy9AAAARAAA + ABQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHx8HAAAAJAAA + AF4UFBSj4OHg+/b39/+PdWX9b1A9/hoUEP64uLj+/f39//7+/v7//////v7+/v7+/v///////v7+/v7+ + /v/19PX/+fn5/v///////////v7+/v///////////v7+/v///////////v7+/v///////////////+jo + 6PoZGRl7AAAALQAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAfHx8FAAAAGwAAAEcpKSmVx8bG8PDx8v+TeGn7flpF/h8VD/+TkpL9+Pj4//7+/v77+/r+1M/L/dLQ + z/39/f3//v7+/v///////////v7+/v///////////v7+/v///////////v7+/v///////////v7+/v// + /////////v7+/5WVldQAAABOAAAAGwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA3NzcCAAAACwAAACIAAAA/MCMboZh5Zvubc1z9z5Z0/jQlHP6dnZ3+9vb2/v7+ + /v7Hvbj9imNL/iUaFP6ysrH9/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/f39/ikpKZAAAAA0AAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzc3AgAAAAkAAAAWVz8wuotkTf+xf2L/z5Z0/isf + GPJlZWXP0dHR8/v7+/6+tK/7mW1T/jYmHP97eXj+/v7+/v/////+/v7/+Pj3/u/u7v79/f3//v7+/v// + /////////v7+/v///////////v7+/v/////+/v7/u7u76gAAAFYAAAAgAAAABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMTEKak07zn5b + Rv+5hWf/tIJk/hMNCsQAAABMHBYSlraXhPyYhHj6yJJw/nJRPv9/fXz9/f39/v/////29fX+o4p7/U8/ + Nv2sq6r+/v7+/v///////////v7+/v///////////v7+/v/////8/Pz+U1NTrAAAADsAAAASAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACCgYENYkY22W1OO/6oeV7+W0Ey/gUDAlwAAAAZOysgkpJpUf5yUj/+1516/nVUQP5qaGfi3t7e+P7+ + /v7t6un+kGpT/VQ8Lf5PS0n8/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7W1tbyCQkJawAA + ACUAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACAf38ENCUcwD0rIP8/LCH/GRENxQAAAAUAAAADTjgrpXJSP/6QZ0//1pt4/lA5 + LPgCAQFoEBAQdaSNgPbDtq77r4Rn/Z90Wf9VT0z8/v7+/v/////9/f3/0snD/YByav3EwsL9/v7+/v7+ + /v91dXXCAAAARQAAABUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwUDOBwTDr8VDgqgAgEBHAAAAAAAAAAARzMnpXNS + P/6OZk7/rHxg/hoSDcAAAAAgBAMCP5xxV/5oSjn/zJp3/qh5Xf9cVlT39/f3/v7+/v/z8vL+lXVi/WNG + Nv9IQ0D9/v7+/uzs7PwcHByAAAAALwAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAGBENbk83Kv5ALCH+MiIa+AQDAjoAAAADDwoIPYhiS/5oSjn+1Jt4/otkTf4HBQSVDg4OfauZ + jvfMw7/7onxk/LmJaf5LQz78/v7+/pubm9UAAABPAAAAHAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAQEAChcQDKQdFA/JCQYEVAAAAAAAAAAACgcFNGJGNv97WEP/wIpr/kMv + JPACAQE6AgIBQZJoUf5ROy7+wJRz/r6Ka/9XT0v28vLy/DIyMo0AAAAyAAAADgAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEADD4r + IPVFMCT/STMn/hEMCZMAAAAGCgcFOIBcR/9SOi3/2KJ9/qJ0Wv8RDAqoJycncgAAADoAAAAZAAAABQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAwJBlofFRDKFA0KmgAAAAcAAAAABgQDJ0w2Kf56V0L+xI1t/lU8LvcDAgFAAAAAHAAA + ABIAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAQAAAAAAAAAAAAAABDMjGuNGMSX/SjQo/hUP + C54AAAAHAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkG + BEIfFRDWFQ8LpAEAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/+Af///wAA//wAf///AAD//AAf//8AAP/4 + AAf//wAA//gAA///AAD/+AAA//8AAP/wAAA//wAA//AAAA//AAD/4AAAA/8AAP/gAAAA/wAA/8AAAAA/ + AAD/wAAAAA8AAP/AAAAABwAA/4AAAAAHAAD/gAAAAAcAAP8AAAAABwAA/wAAAAAHAAD/AAAAAAcAAP4A + AAAADwAA/gAAAAAPAAD8AAAAAB8AAPwAAAAAHwAA+AAAAAA/AAD4AAAAAD8AAPgAAAAAPwAA8AAAAAB/ + AADwAAAAAH8AAOAAAAAA/wAA4AAAAAD/AADAAAAAAf8AAMAAAAAB/wAAwAAAAAH/AACAAAAAA/8AAIAA + AAAD/wAAgAAAAAf/AACAAAAAB/8AAIAAAAAP/wAAwAAAAA//AADwAAAAD/8AAPAAAAAf/wAA8AAAAB// + AAD4YAAAP/8AAP/gAAA//wAA/+GAAD//AAD//4AAf/8AAP//wgB//wAA///mAf//AAD///8P//8AACgA + AABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAQAAAAMAAAAFwAAACEAAAAkAAAAIAAAABYAAAAMAAAABT8/PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD8/PwEAAAAKAAAAGwAAADIAAABGAAAATgAAAEcAAAA4AAAAJgAAABcAAAAMAAAABT8/ + PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAC8AAABTAAAAcQAAAH4AAAB5AAAAZgAA + AE8AAAA5AAAAJQAAABcAAAAMAAAABT8/PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAACAAAABFAAAAcgAA + AJUDAwOuAAAAowAAAJMAAAB+AAAAZgAAAE4AAAA3AAAAJAAAABUAAAALAAAABD8/PwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + ABEAAAAvAAAAWwAAAIsAAACutbW195ubm+8ZGBnGAAAApgAAAJMAAAB9AAAAZAAAAEwAAAA1AAAAIQAA + ABMAAAAJAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAcAAAAbAAAAQAAAAHAAAACdIiIizv7+/v/+/v7/+vr6/42Nje0SEhLCAAAApQAA + AJIAAAB6AAAAYAAAAEcAAAAxAAAAHwAAABIAAAAJAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAANAAAAKQAAAFMAAACEAAAAq5GQke7+/v7///////// + ///9/v3/9PT0/oCAgOkMDAy/AAAAowAAAI4AAAB2AAAAXAAAAEUAAAAvAAAAHgAAABEAAAAIAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAADkAAABoAAAAlwkJ + CcHy8vH+//////////////////////7+/v/9/v3/7u7u/nR1dOUHBwe6AAAAoAAAAIsAAAB0AAAAXAAA + AEQAAAAvAAAAHgAAABEAAAAIAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACwAA + ACMAAABMAAAAfQAAAKZqamri/v7+//////////////////////////////////7+/v/+/v7/5+fn/mlp + aeEEBAS2AAAAngAAAIoAAABzAAAAWwAAAEMAAAAuAAAAHQAAABEAAAAIAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAABMAAAAzAAAAYQAAAJABAQG21dXV/P7+/v////////////////////////////// + //////////////7+/v/+/v7/39/f/WBgX94CAgKzAAAAnQAAAIkAAAByAAAAWQAAAEIAAAAtAAAAHAAA + AA8AAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAfAAAARQAAAHYAAAChQEBA2P7+/v////////////// + //////////////////////////////////////////////7+/v/+/v7/2NjY/FRUVNsBAQGxAAAAnAAA + AIgAAABwAAAAWAAAAD8AAAAqAAAAGQAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAQAAAALQAAAFoAAACKAAAAr6qq + qvX+/v7///////////////////////////////////////////////////////////////////////7+ + /v/+/v7/zMzM+khHSNgAAACvAAAAnAAAAIYAAABtAAAAUwAAADsAAAAnAAAAGAAAAA0AAAAFAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAGwAA + AD8AAABvAAAAmxoaGsz+/v7///////////////////7///r6+v/+/v7//v7+//////////////////// + //////////////////////////////7+/v/+/v7/wMDA+Ds8O9QAAACsAAAAmQAAAIIAAABpAAAAUAAA + ADkAAAAmAAAAFwAAAAwAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAADQAAACgAAABSAAAAgwAAAKqGhobr/v7+//////////////////f39/+Li4v/ra2t/9DQ + 0P/n5+f/+fn5///+//////////////////////////////////////////////79/v/+/v7/tbW19jAw + MM8AAACpAAAAlQAAAH8AAABoAAAATwAAADkAAAAmAAAAFwAAAAwAAAAFAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABYAAAA4AAAAZgAAAJUGBga+7Ozs/v7+/v////////////// + ///MzMz/fX19/35+fv9/f3//kZGR/7q6uf/i4uL/+Pj4//7+/v////////////////////////////// + //////////////7+/v/+/v7/qqqq9CYmJsoAAACnAAAAlAAAAH8AAABnAAAATgAAADgAAAAlAAAAFgAA + AAsAAAAFPz8/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAoAAAAiAAAASgAAAHsAAAClYmJi4P7+ + /v//////////////////////np6e/319ff9/f3//f39//39/f/9+fn7/jIyL/7OztP/g4N//9/f3//7+ + /v////////////////////////////////////////////7+/v/+/v7/oKCg8R0dHccAAACmAAAAkwAA + AH0AAABlAAAATQAAADYAAAAjAAAAFAAAAAkAAAADPz8/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAASAAAAMQAA + AF4AAACOAAAAtMrKyvv+/v7///////////////////////f49//Jycn/kJGR/318ff9/fn//f39//39/ + f/99fX3/hoaG/6qrqv/c3Nz/9/f3//7+/v////////////////////////////////////////////7+ + /v/8/Pz/lJSU7hUVFcQAAAClAAAAkgAAAHwAAABjAAAASQAAADAAAAAcAAAADQAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAIAAAAHQAAAEMAAABzAAAAnzQ0NNT+/f7///////////////////////////////////////39 + /f/Y2Nj/nZ2d/35+fv9+fn7/f39//39/f/9+fn7/goKB/6Kiov/X19b/+Pj4//7+/v////////////// + //////////////////////////////7+/v/39/f/h4eH6g4ODsEAAACkAAAAkAAAAHYAAABXAAAAOAAA + ABwAAAALAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAADwAAACsAAABXAAAAhwAAAK2hoaHz/v7+//////////////////// + ///////////////////////////+///////k5OT/rKys/4KCgv99fn3/f39//39/f/9+fn7/fn9//5mZ + mf/R0dH/+fn4//7+/v///////////////////////////////////////v7+//3+/f/x8fH+e3t75wkJ + CbwAAACcAAAAfQAAAFYAAAAuAAAAEgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABkAAAA8AAAAbAAAAJkTExPI/Pz8//// + ///////////////////////////////////////////////////////////////////v7+//vLy8/4mJ + if99fX3/f39//39/f/9+fn//fX19/5CRkf/IyMf/9vb2//////////////////////////////////// + /////////v7+//7+/v/q6ur+cHBw4AcHB58AAABpAAAAOQAAABgAAAAFAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAwAAAAmAAAAUAAA + AIEAAACpfHx86P7+/v////////////////////////////////////////////////////////////// + ///////////////////49/j/zMzM/5SVlP99fX3/fn5+/39/f/9/f3//fX19/4iIiP+6urr/8PDw//// + /////////////////////////////////////////v7+//7+/v/n5+f9Dw8PhgAAADsAAAAYAAAABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAQAAAAVAAAANgAAAGQAAACTAwMDu+bm5v7+/v7/////////////////8fHx/+np6f/9/f3//f39//// + ///////////////////////////////////////////////////+/v7/39/f/6eoqP+AgID/fn5+/39/ + f/9/f3//fX59/4KCgv+tra3/5eXl//39/f/9/f3//v7+///////////////////////+/v7/vr6+8QAA + AGMAAAAyAAAAEgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAKAAAAIQAAAEkAAAB5AAAApFZWVt3+/v7//////////////////////7m5 + uf98fX3/lJSU/7+/v//p6en/+/v7//////////////////////////////////////////////////7/ + ////////7u7u/7m5uf+Hh4f/fX19/39/f/9/f3//fn5+/35+fv+ZmZn/w8PD/97e3v/v7+///f39//// + /////////v7+/1NTU7cAAABPAAAAJQAAAAs/Pz8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAEQAAADAAAABdAAAAjQAAALK+vr76/v7+//// + //////////////r6+v+Kior/f39//39/f/99fX3/hoaG/7CwsP/j4+P//Pv7///+//////////////// + ////////////////////////////////////////+Pj4/8nJyf+RkZH/fX19/39/f/9/f3//f35//319 + ff+Kion/tLS0/+7u7v///////v7+/+Tk5PwEBAR0AAAAPAAAABkAAAAFAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAB0AAABCAAAAcgAA + AJ4qKirR/v7+///////////////////////w7/D/mZmY/31+fv9+fn7/f39//39/f/99fn7/gYGB/6Ki + ov/a2tr/+/v7//7+/v///////////////////////////////////////////////////////f39/9ra + 2v+goKD/fn5+/35+fv9/f37/fn9+/5OTk//w8PD//v/+//7+/v95eXnNAAAAVgAAACsAAAAOPz8/AgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AA4AAAArAAAAVgAAAIYAAACtmpma8P7+/v/////////////////////////+///////k5OT/rayt/4KD + gv99fX3/f39//39/f/9/f37/fX19/5aWlv/Q0ND/+vr6//////////////////////////////////// + ///////////////////+/////////+jo6P+wsLD/g4OD/3x8fP/Q0ND//Pz8///////4+Pj+ExMTjAAA + AEIAAAAdAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAUAAAAYAAAAOwAAAGsAAACYDQ0Nxff39/////////////////////////////// + ///////////////////y8vL/wcHB/4yMjP98fXz/f39//39/f/9/f3//fHx8/4yMjP/CwsL/9PX0//// + //////////////////////////////////////////////////////////////T09P/Nzs7//v7+//// + ///+/v7/oaGh4wAAAF0AAAAwAAAAEQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALAAAAJQAAAE4AAAB/AAAAp3Nyc+X+/v7///////// + ///////////////////////////////////////////////////7+/v/1dXV/5ycnP9+fn7/fn5+/39/ + f/9/f3//fX19/4ODg/+xsbL/6enp//////////////////////////////////////////////////// + /////////////////////////v7+/zIyMqQAAABJAAAAIQAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADQAAABiAAAAkQIC + Arjg4OD9/v7+//////////////////////////////////////////////////////////////////// + /v//////5ubm/7Kysv+FhYX/fX19/39/f/9/f3//fn5+/319fv+fn5//2NjZ//38/f////////////// + /////////////////////////////////////////v7+/8XFxfQAAABnAAAANgAAABUAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAA + ACAAAABGAAAAdwAAAKJLS0va/v7+//////////////////////////////////////////////////// + ////////////////////////////////////////9vb2/8jHx/+RkpH/fX19/39/f/9/f3//f39//3x8 + fP+Ojo7/xcXF//b29v/+//7///////////////////////////////////////7+/v9bW1u7AAAATwAA + ACYAAAAMPz8/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAABEAAAAuAAAAWwAAAIoAAACwtLS0+P3+/f//////////////////////v7+//93d + 3f///////////////////////////////////////////////////////////////////////f39/9zc + 3P+jo6P/f39//35+fv9/f3//f39//319ff+Cg4L/qamp/9XV1f/z8/P//f39//////////////////7+ + /v/o6Oj9BgYGeAAAADwAAAAZAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAbAAAAQAAAAHAAAACcIiIizv7+/v////////////// + ////////8fHx/4GBgf95eXn/jIyM/8TExP/39/f///////////////////////////////////////// + /////////////////////////////+zs7P+4uLj/h4eH/319ff9/f3//f39//35+fv99fX3/kpKS/9LS + 0v/+/v7////////////+/v7/gYCA0AAAAFcAAAArAAAADwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAANAAAAKQAAAFMAAACEAAAAq5CQ + kO7+/v7//////////////////////8DAwP99fX3/f39//39/f/98fHz/fn5+/6ysrP/m5ub////+//// + /////////////////////////////////////////////////////v////////j4+P/Mzcz/lZWV/319 + ff9+fn7/f39//39/f/+SkpL//f39////////////+/v7/xgYGJAAAABCAAAAHQAAAAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAA + ADkAAABoAAAAlwkJCcHx8vH+///////////////////////////o6Oj/sbGw/4WEhf99fX3/f39//39/ + f/9/f3//eXl5/5SUlP/Pz8//+/r7//////////////////////////////////////////////////// + //////////////7+/v/g4OD/qKio/4GBgf97e3v/1NTU/////////////v7+/6ampuYAAABeAAAAMAAA + ABEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA/Pz8BAAAACwAAACMAAABMAAAAfQAAAKZqamri/v7+//////////////////////////////////// + ///29vb/ycnJ/5SUlP99fX3/f39+/39/f/+Af3//e3p7/4ODg/+1trb/7e3t//////////////////// + ///////////////////////////////////////////+///////w8PD/xsbG//z8/P////////////7+ + /v85OTmoAAAASQAAACIAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABMAAAAzAAAAYQAAAJABAQG21NTU/P7+/v////////////// + ///////////////////////////////////+/v7/4ODg/6qqq/+DgoL/fn5+/39/f/9/gID/fn5+/3p6 + ev+VlZX/zc3N//j4+P////////////////////////////////////////////////////////////// + //////////////7+/v/MzMz2AQEBaQAAADcAAAAWAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAfAAAARQAAAHYAAAChPz8/2P7+ + /v////////////////////////////////////////////////////////////7/////////8/Pz/8TE + w/+QkJD/fX19/39/f/9/f3//f4B//3p6ev+Dg4P/uLm4//Hw8f////////////////////////////// + ///////////////////////////////////+/v7/Y2NjvgAAAFAAAAAmAAAADAAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAQAAAALQAA + AFoAAACKAAAAr6qqqvX+/v7///////////////////////////////////////////////////////// + /////////////////////////fz8/9vb2/+lpaX/gYCB/35+fv9/f3//gIB//319ff98fHz/pKSk/+Hh + 4f/////////////////////////////////////////////////+/v7/7Ozs/QgICHsAAAA9AAAAGQAA + AAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAGAAAAGwAAAD8AAABvAAAAmxoaGsv+/v7////////////////////////////IyMj/3t7e//// + //////////////////////////////////////////////////////7//////+/v7/+9vr7/jIyM/319 + ff9/f3//f39//39/f/96eXr/kJCQ/8nJyf/5+fn//////////////////////////////////v7+/4iH + iNUAAABYAAAALAAAAA8AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA/Pz8BAAAADQAAACgAAABSAAAAgwAAAKqGhobr/v7+//////////////////// + ///4+Pj/hoaG/3V1df+EhIT/vLy8//X19f////////////////////////////////////////////// + /////v////////v7+//W1tb/n5+f/39/f/9+f3//f39//4CAgP98e3z/gICA/7Gxsf/p6en////+//// + //////////////7+/v8dHR2VAAAARAAAAB4AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABYAAAA4AAAAZgAAAJUGBga+7Ozs/v7+ + /v//////////////////////zc3N/3x8fP9/f4D/gICA/3t7e/93d3f/oaGh/97e3v///v////////// + /////////////////////////////////////////v/////////q6ur/uLi4/4mIif9+fX3/f39//39/ + f/9/f3//ioqK//39/f////////////7+/v+srKzqAAAAYAAAADMAAAATAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf39/AQAAAAoAAAAiAAAASgAA + AHsAAAClYmJi4P7+/v///////////////////////////+7u7v+6urr/i4qK/35+fv+AgID/gICA/4CA + gP92dnb/h4eH/8DAwP/29vb///////////////////////////////////////////////////////// + ///5+fn/z9DQ/5qamv9+fn7/fX19/8nJyf/////////////////+/v7/QEBArQAAAEwAAAAjAAAACwAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAASAAAAMQAAAF4AAACOAAAAtMrKyvv+/v7//////////////////////////////v////////n5 + +f/T09P/np6e/4GBgf9/f3//gICA/4GBgf98fHz/eXl5/6Sjo//f39/////+//////////////////// + /////////////////////////////////v//////5ubm/7e4uP/6+vr////////////+/v7/09PT+AEB + AW0AAAA4AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAHAAAAHAAAAEIAAAByAAAAnzQ0NNT+/f7///////z8/P/7+vr//Pz8//// + /////////////////////////v/////////s7Oz/vr69/42Njf9/f37/gYGB/4GBgf+BgYH/kZKR//// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+/2pqasMAAABTAAAAKAAAAA0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/f38BAAAACwAAACYAAABRAAAAgwAAAKuhoaHz/v7+//j4 + +P+5sq38lomC/qqqqf3z8/P////////////////////////////////////////////7+/v/2dnZ/6Sk + pP+CgoL/fn1+/9PT1P////////////////////////////////////////////////////////////// + //////////////////////////////Dw8P4KCgqAAAAAPwAAABsAAAAHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf39/AQAAAA4AAAArAAAAWAAA + AIkUFBTA/Pz8//z8/P+7tbL8i2JL/2xNO/8SDAn+lpaW/ff39/////////////////////////////// + ////////////////////////7+/v/8bFxv/7+/v///////////////////////////////////////// + //////////////////////////////////////////////7+/v+Ojo7ZAAAAWgAAAC4AAAAQAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/ + fwEAAAAOAAAAKAAAAFEAAAB9gYGB3v7+/v/4+Pj/q6Sg+5BmTv9cQjL/HRQO/0A+Pf3o6Oj//v7+//// + //////////////7+/v/+/v7////////////////////////+//////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v7/IiIjmQAA + AEUAAAAfAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAB/f38BAAAACgAAAB0AAAA8AAAAYGBgYL7Dw8L09PX1/7CppfmValH/flpF/ygc + Ff85NjT92dnZ//39/f///////v7+/+/u7f6+ta/8sa+t/Pv7+//+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v7/s7Oz7QAAAGEAAAAzAAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAPAAAAIgAAADoAAABSOCkftpd3 + ZfqNdmn8tIFj/82Vc/86KR7/SkhH/dXV1P/8/Pz///////////+Te2z8iWFK/yYZEf9gXl78/v7+//// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+/0dHR7EAAABMAAAAIwAAAAsAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz8BAAAABgAA + AA4AAAAbAAAAKWVIONurfGD/hF5I/9GXdf/PlnT/PCkf/2dmZfrd3N3//f39//7+/v/9/v7/gWVU+49n + T/8vIBj/HRgV/e3t7v////////////////////////////////////////////////////////////// + /////////////////////////////////////////v7+/9ra2voCAgJvAAAAOQAAABcAAAAFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAABwEBARaBXUf6dVRB/4tkTf/UmXb/yJFw/yoeFv8CAQGILCwsppCP + jtzv7Ov9/P3+/4ptXfmygWP/XkMz/x8YFP7c3Nv+/////////////////v3+/97b2f24tLL87Ozs/v7+ + /f////////////////////////////////////////////////////////////7+/v9wcHDGAAAAUwAA + ACkAAAANAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCAYkiWNM/35bRv+YbVT/1Jp3/6Bz + Wf8WDwvpAAAAOgAAAEwkGROlsIJn/Y15bfqMaVT73qR//5huVf8iGxj95+fo/////////////v7+/9TQ + zf2OZ1D+SjMm/zQvLP3u7u7+//////////////////////////////////////////////////////// + ///z8/P+Dg4OhAAAAD8AAAAbAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwsIN39b + Rv95VkL/hV9J/9CWdP9LNSj/CQYEjQAAABcAAAAjSjUpsrGAY/9ZQDH/o3db/96jfv+ZblX/KiQi9+rq + 6v7+/v7//v7+//////+3rqn8l2tR/1c9L/8WDgn/tbW1/P////////////////////////////////// + ///////////////////+/v7/lpaW3QAAAFsAAAAuAAAAEAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAYEAyVfQzP/Vz4v/1E5K/9ZPzD/HhUP9AAAABgAAAAFAAAAC2RIN9GEX0n/QS4j/8GM + bP/Wm3j/gV1H/woHBb4IBwh/UlJSucK9u/T6+fj+vbOt/Kx8Xv+pe1//HxQO/66urfv///////////// + ///9/f3/9vX0/sjFw/zq6ur+/v7+/////////////v7+/ygoKJ0AAABGAAAAHwAAAAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKRwV2i8hGP8wIhn/JhoT/gYEA1wAAAAAAAAAAAAA + AAFrTTvheldD/3hWQv+8iGj/0ph1/0cyJv8EAgJ0AAAAQAAAAFaIYEn6rIRs+oZsXfvQn3v/zJRz/yoc + FP+8vLz7////////////////9PTz/pZ5aP1hRDP/KSEe/d7d3f3//////v7+/7q6uvAAAABjAAAANAAA + ABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCASUVDwulFg8LrgUE + A0cAAAAAAAAAAAAAAAAAAAAAXEEy2m1OPP96V0P/s4Fk/49nT/8cEw7oAAAAFwAAABsHBQRGlWtT/3xZ + Rf9tTTv/4qyF/8qScf8sHhf+qqqq8v7+/v///////v7+/8jFxPuRZ07/fFlE/x4TDf+fnp38//////7+ + /v9PT0+1AAAATgAAACUAAAALAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcbFaReQzP/QCwh/1A4Kv8vIRj/CAUEZwAA + AAMAAAAGFA4KUJFoUP9UPC7/lGtS/+GlgP+2g2X/GREN7QAAAGUZGRmXpZqU9OXg3fvGwb75pHZa/9ih + fP8xIRj/npyb/P7+/v/h4eH7AwMDcgAAADsAAAAYAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAMyKh0W9y4g + F/8qHRb/EAsImwAAAAAAAAAAAAAAABQOClCFYEr/Ujos/6Z3XP/ZnXn/fVpF/w0IBqcAAAA2AAAAUIZf + Sf2fdFr+W0k++suceP/epH//RC8i/62sq/r+/v7/eHd4yAAAAFEAAAApAAAADgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAMCASQMCAZyBgQDQgAAAAAAAAAAAAAAAAAAAAAIBgQ2Ujos/29PPP90Uj//qXpe/zAi + Gf4DAgFAAAAAFQgFBEaOZk//Ujst/1o/MP/ks4r/1Jl2/zknHf9zc3PT29vb+hQUFHgAAAA3AAAAGQAA + AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABzMj + G+5BLiL/Oige/zQkG/8SDAmrAAAAAQAAAAQOCghJi2RN/zwrIf+RaFD/566H/8CKa/8hFxHxAAAASgIC + AkwAAAA1AAAAHwAAAA0AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAALBwVRJRoT9ygcFf4WDwu5AAAADQAAAAAAAAAACQYFO1lAMP9ONyr/onRZ/9ue + e/98WUT/DgoHowAAACEAAAAgAAAAGAAAAA0AAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA0CAQEcAAAAAAAAAAAAAAAAAAAAAAIC + ARI6KB78YEQz/1xBMf+BXUf/Kx4W/AIBATAAAAAKAAAACQAAAAcAAAADAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAHBMOpjcmHP8zIxr/LR8X/w0JB38AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAgSDAmdHBMO3QsHBWsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///wA////////+AA//////// + 4AA////////gAA///////8AAA///////wAAA//////+AAAB//////4AAAB//////AAAAB/////8AAAAB + /////wAAAAB////+AAAAAB////4AAAAAB////AAAAAAB///8AAAAAAB///gAAAAAAB//+AAAAAAAH//4 + AAAAAAAP//AAAAAAAA//8AAAAAAAD//gAAAAAAAP/+AAAAAAAA//4AAAAAAAD//AAAAAAAAf/8AAAAAA + AB//gAAAAAAAP/+AAAAAAAA//wAAAAAAAH//AAAAAAAAf/8AAAAAAAB//gAAAAAAAP/+AAAAAAAA//wA + AAAAAAH//AAAAAAAAf/4AAAAAAAB//gAAAAAAAP/+AAAAAAAA//wAAAAAAAH//AAAAAAAAf/4AAAAAAA + D//gAAAAAAAP/8AAAAAAAA//wAAAAAAAH//AAAAAAAAf/4AAAAAAAD//gAAAAAAAP/+AAAAAAAB//4AA + AAAAAH//wAAAAAAAf//AAAAAAAD///AAAAAAAP///AAAAAAB///8AAAAAAH///wAAAAAA////AwAAAAD + ///+HgAAAAP////+AAAAB/////4OAAAH/////x4AAA///////gAAD///////BgAf//////+eAB////// + //8H/////////w////8oAAAASAAAAJAAAAABACAAAAAAAGBUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEdHRwEAAAAGAAAADgAAABgAAAAgAAAAIwAAACAAAAAYAAAADwAA + AAgAAAADdHR0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAAOAAAAHQAAADAAAABAAAAARgAAAEIAAAA2AAAAKAAAABoAAAAPAAAACBUV + FQNwcHABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX19fAQAA + AAgAAAAZAAAAMgAAAE8AAABmAAAAcAAAAG0AAABeAAAASwAAADgAAAAmAAAAGQAAAA8AAAAIGxsbA2xs + bAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMjAwAAAA8AAAAnAAAASAAA + AGwAAACIAAAAmAAAAJUAAACHAAAAdAAAAF8AAABJAAAANgAAACYAAAAYAAAADQAAAAcRERECAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAABcAAAA2AAAAXQAAAIUAAACjSEhI1jEx + McwBAQGsAAAAmwAAAIkAAAB0AAAAXgAAAEkAAAA2AAAAIwAAABYAAAAMAAAABQAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAADAAAACMAAABHAAAAcgAAAJkEBAS73Nvc/fPz8/2fn5/wMzMzzQAA + AK0AAACaAAAAiAAAAHMAAABeAAAARgAAADIAAAAiAAAAFQAAAAwAAAAFAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAFAAAAFAAAADAAAABYAAAAgwAAAKZKSkrb/v7+/v7+/v/9/f3/5+fn/JOTk+0rKivIAgICrAAA + AJkAAACGAAAAbgAAAFgAAABDAAAAMAAAACAAAAAUAAAACwAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKAAAAHgAA + AD8AAABqAAAAkwgICLarq6v0/v7+/v///////////v7+//39/f7g4OD8hIWE6CAgIMUCAgKpAAAAlAAA + AIEAAABrAAAAVQAAAEAAAAAuAAAAHwAAABMAAAALAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAARAAAAKgAAAFAAAAB9AAAAoSkp + Kc709PT+/v7+/v7+/v7+/v7+/v7+/v7+/v79/v3+/f39/uLi4vx8fXznCQkJvQAAAKQAAACSAAAAfwAA + AGkAAABTAAAAPwAAAC0AAAAeAAAAEgAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgAAAAbAAAAOgAAAGQAAACOAQEBsZKSkuz+/v7//v7+/v// + //////////////7+/v7///////////7+/v/+/v7/5+fn/XNzc+QUFBS/AAAApAAAAJMAAACAAAAAagAA + AFUAAABBAAAALgAAAB8AAAATAAAACgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAA8AAAAnAAAASgAAAHYAAACeIiIix9nZ2fv+/v7//v7+/v////////////////7+ + /v7////////////////+/v7//v7+/vr6+v7X19f5bGxs4hMTE7wAAACjAAAAkQAAAH4AAABpAAAAUwAA + AD8AAAAtAAAAHgAAABIAAAAJAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAA + ABcAAAA1AAAAXAAAAIgAAACrZ2dn4/z8/P///////v7+/v////////////////7+/v7///////////// + /////////v7+/v7+/v/+/v7//Pz8/s7OzvdZWVndEhISugAAAKIAAACQAAAAfAAAAGcAAABRAAAAPQAA + ACoAAAAbAAAAEAAAAAgAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADAAAACIAAABEAAAAbgAA + AJcJCQm+x8fH9////////////v7+/v////////////////7+/v7//////////////////////v7+/v// + //////////////7+/v78/Pz/wMDA9lBRUNoJCQm1AAAAoAAAAI8AAAB7AAAAZQAAAE0AAAA4AAAAJwAA + ABkAAAAOAAAABwAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFAAAADAAAABXAAAAgQAAAKZNTU3Z9PT0/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/vz7/P7BwcH5RkZG1wMDA7MAAACgAAAAjQAAAHgAAABgAAAASgAAADcAAAAmAAAAGAAA + AA4AAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAJAAAAHwAAAEAAAABpAAAAkgAAALOtra31/v7+/////////////v7+/v7+ + /v/e3t7/4+Pj//X19f74+fn//f39//7//v///////v7+/v////////////////7+/v7///////////7+ + /v/9/f3+9/f3/re3t/ZGRkbVBAQEswAAAJ0AAACKAAAAdQAAAF8AAABKAAAANgAAACYAAAAZAAAADgAA + AAcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAAQAAAAKwAAAFAAAAB7AAAAoCUlJc/w8PD9/v7+/////////////v7+/vPz8/+YmJj/iIiI/6Cg + oP6/v7//2NnY//Dw8P/8+/z//v7+/v////////////////7+/v7////////////////+/v7+/v7+//7+ + /v/u7u79ra2t8jo6Os8FBQWvAAAAmgAAAIgAAAB0AAAAXQAAAEkAAAA2AAAAJQAAABgAAAAOAAAABwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAYAAAAOQAA + AGIAAACLAQEBroODg+r9/f3//v7+/////////////v7+/tbW1v+DgoP/f39//35+fv6CgYL/kpKR/7Ky + sv/X19b/8fHx/vz8+//+/v7///////7+/v7////////////////+/v7+///////////+/v7//v7+/+7u + 7v6dnJ3tLy8vywUFBa0AAACZAAAAhgAAAHIAAABcAAAASAAAADQAAAAkAAAAFwAAAA0AAAAGIiIiAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA0AAAAjAAAASQAAAHQAAACaDw8PwOPj + 4/3+/v7//////////////////v7+/rKysv98fHz/fn5+/35/f/5/f3//fn5+/39/f/+Kior/rq6u/tfX + 1//x8fH//Pz8//7+/v7////////////////+/v7+//////////////////////7+/v7+/v7/8PDw/piY + mO0dHR3IAAAAqAAAAJgAAACFAAAAcQAAAFoAAABFAAAAMQAAACEAAAAUAAAACgAAAAQUFBQBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABYAAAAxAAAAXAAAAIYAAACpX19f4f3+/f7+/v7+/v7+/v7+ + /v7+/v7+/v7+/vn6+f7U1NP+oaGh/oCAgP59fX3+f35+/n9/f/5+fn/+fX19/oSEhP6hoaH+zc3N/u7u + 7v77+/v+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v77+/z+i4uL7SEh + IcgAAACqAAAAmQAAAIYAAABwAAAAWgAAAEMAAAAuAAAAGwAAAA4AAAAFEBAQAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAACwAAACAAAABBAAAAbgAAAJYODg67ubm59v79/v7//////////////////////v7+/v// + ///+/v7/+Pj4/97e3v6tra3/iYmJ/35+fv9+fn7/fn9//n9+fv9+f3//hISE/52dnP7IyMj/6+vq//v7 + +//+/v7+//////////////////////7+/v7////////////////+/v7+/f39/+Pj4/uDg4PpIyMjxgAA + AKkAAACWAAAAggAAAGoAAABQAAAANAAAAB0AAAANAgICBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAEwAA + AC0AAABTAAAAgAAAAKQ+Pj7V9vb2/v7+/v7//////////////////////v7+/v////////////////7+ + /v77+/v/5OXk/7i4uP+Pj4//f4B//n5+fv9/f3//f39//35+fv6Cg4P/mJiY/8LCwv/q6ur+/Pz7//7+ + /v////////////7+/v7////////////////+/v7+//////7+/v/7/Pv/2dnZ+nZ2duUbGxvAAQEBpgAA + AI4AAAByAAAATwAAAC4AAAAWAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAJAAAAHAAAADwAAABlAAAAkQIC + ArOhoaHv/v7+//7+/v7//////////////////////v7+/v////////////////7+/v7///////////7+ + /v/u7u7/w8PD/pSUlP+AgID/fn5+/39+fv5/f3//fn5+/39/f/+QkJD+vr6//+vr6v/8/Pz///7///7+ + /v7////////////////+/v7+///////////+/v7//v7+//39/f7S0tL6aWho4BAQELMAAACMAAAAZAAA + ADwAAAAeAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAPAAAAKAAAAE0AAAB4AAAAoCsrK8vh4eH8/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/vj4 + +P7U1NT+oaGh/oCBgf59fX3+fn9//n9+f/5/fn7+fX19/oiIiP6wsLD+4uLh/v39/f7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/tbW1vpramvSBQUFeQAAAEMAAAAhAAAACwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAcAAAAZAAAANwAAAGAAAACKAAAArXt7e+n9/f3///////7+/v7///////////7/ + /////////v7+/v////////////////7+/v7//////////////////////v7+/v/////+/v7/+vr6/+Hi + 4f6zs7P/jIyM/35+fv9+fn7+f39//35+fv9+fn7/g4OD/6Ojo/7X19f/9/f3///////+/v7+//////// + //////////////7+/v7///////7///7+/v/s7Oz9Dg4OggAAAD8AAAAeAAAACQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AA0AAAAkAAAASAAAAHIAAACZDg8OwtjY2Pn+/v7///////7+/v7//////v7+/9XV1f/Hx8f/6Ojo/vT0 + 9P/8/Pz//v7+//7+/v7//////////////////////v7+/v////////////////7+/v77+/v/6+vr/8TE + xP+Xl5f+gYCB/35+fv9+f3//fn5+/35+fv6Dg4P/nZyd/8nJyf/r6+v+9vb2//j5+P/8/Pz//v7+//7+ + /v7///////////39/f+VlZXeAAAAXwAAADUAAAAXAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABUAAAAyAAAAWQAA + AIMAAACnXFxc3vf39/7+/v7///////7+/v7/////9vb2/56env99fX7/ioqK/qenp//Ozs7/7e3t//v7 + +/7+/v7//////////////////v7+/v////////////////7+/v7+//////////7+/v/z8/P+z8/P/56e + nv+EhIT/fn5+/35+fv5/f3//fn5+/39/f/+Pj4/+sbGx/83Nzf/i4uL/9fX1//7+/v7//////v7+/+/v + 7/s6OjqmAAAATQAAACkAAAAQCwsLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAAAB8AAABCAAAAbAAAAJQAAAC0u7u7+f7+ + /v////////////7+/v7/////3t/e/4SEhP9/f3//f39//n19ff+BgYH/mJiY/8fHx/7w8PD//Pz8///+ + /////////v7+/v////////////////7+/v7////////////////+/v7+//////v7+//d3d3/rKus/4KC + gv59fX3/f39//39/f/9+fn7+fX19/4WFhf+hoqL/2NjY//v7+/7//////v7+/76+vuwDAwNwAAAAPQAA + AB0AAAAJYGBgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAEAAAAEgAAAC0AAABVAAAAfwAAAKMsLCzT/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+1NTU/o+Pj/59fX3+fn5+/n9/f/5/f3/+fn5+/nx8fP6MjIz+t7e3/uTk5P77/Pv+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/u/v7/69vb3+kJCP/n1+ + ff5+fn7+fn5+/n5+fv6EhIT+0NDQ/vv7+/7+/v7++Pf4/lNTU7YAAABVAAAALAAAABIUFBQEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAAJAAAAGwAAADwAAABnAAAAjwQEBLKXl5fu/v7+/v////////////////7+/v7///7//f38//Ly + 8v/Ozs//nZ2d/oODg/9+fX7/f39//39/f/5+fn7/f39//4mJif+rq6v/3t7e/vj4+P////////////7+ + /v7////////////////+/v7+//////////////////////7+/v79/f3/8fHx/8zMzP+dnZ3+gYGB/319 + ff+np6f/8fHx//7+/v7+/v7/y8vL8BQUFIMAAABDAAAAHwAAAAsvLy8CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAPAAAAJwAA + AE0AAAB5AAAAnh8fH8fm5ub9/v7+/v////////////////7+/v7/////////////////////9vb2/tra + 2v+srKz/ioqK/39+f/5+fn7/f39//35/fv9+fn7/hoaF/qalpv/U1dT/9PT0//7+/v7///////////// + ///+/v7+//////////////////////7+/v7///////////7+/v/29fX+19fX/6ysrP/h4uH//v7+//7+ + /v7+/v7/dnZ2ywAAAF0AAAAzAAAAFQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAYAAAANQAAAF4AAACJAAAArG1t + beX+/v7//v7+/v////////////////7+/v7//////////////////////v7+/v/////9/f3/5+fn/7u7 + u/6Ojo7/f39//35+fv9+f3//f39//n5+fv+AgID/mJiY/8rKyv709PT//f39///////+/v7+//////// + //////////////7+/v7////////////////+/v7+//////7+/v/+/v7///////7+/v7l5eX7JycnkQAA + AEoAAAAmAAAADTExMQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAwAAAAiAAAARQAAAHAAAACZExMTv8fHx/j+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v729vb+z8/P/p6e + nv6AgID+fn1+/n9/f/5+f3/+fn9+/nx8fP6Li4z+ubm5/ujo6P7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v6Yl5jaBAQEaAAAADkAAAAaAAAAB09P + TwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABQAAABQAAAAwAAAAVgAAAIIAAACnUlJS3Pz8/P7//////v7+/v////////////////7+ + /v7//////////////////////v7+/v////////////////7+/v7//////v7+//r6+v/k5OT/srKy/oyM + i/9+fn7/fn5+/39+fv5/f37/fn5+/4OEg/+jo6P+2NjY//f39/////////////7+/v7///////////// + ///+/v7+//////////////////////r6+v4xMTGjAAAATwAAACoAAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAA + AB8AAAA/AAAAaAAAAJMEBAS3srOy8/7+/v///////v7+/v///////////Pz8//z8/P7///////////// + /////////v7+/v////////////////7+/v7//////////////////////Pz8/uvr6//ExMT/mZiZ/4KB + gf5+fn7/f39//39+f/9+fn3+goKC/5qamv/IyMj/6+vr//r6+v79/f3//v7+///////+/v7+//////// + /////////v7+/7q6uu4ICAhuAAAAPQAAAB0AAAAJWlpaAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEQAAACsAAABQAAAAewAA + AKE1NTXR6enp/f7+/v///////v7+/v/////+/v7/1dXV/6enp/7e3t7/9/f3//7+/v///////v7+/v// + //////////////7+/v7//////////////////////v7+/v/////+/v7/9PT0/9TU1P6ioqL/hYaG/39+ + f/9+fn7+f39//35+fv9+f37/jYyN/6ytrP7S0tL/7+/v//39/f/+/v7+///////////+/v7/+vr6/l1d + XbsAAABVAAAALgAAABMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAGwAAADoAAABiAAAAjAAAAK2JiYnu/v7+//// + /////////v7+/v/////5+fn/pqam/3x8fP58e3z/lZWV/8fIx//39/f//v7+/v////////////////7+ + /v7//////////////////////v7+/v////////////////7+/v78/Pz/4+Pj/7S1tf+Ih4f+fHx8/39/ + fv9/f3//f39+/319ff6AgYH/nZ2d/9nZ2f/+/v7+////////////////4eHh+AsLC4EAAABDAAAAIQAA + AAwAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAANAAAAJwAAAEsAAAB1AAAAnBEREcbu7e38/v7+/v7+/v7+/v7+/v7+/v7+ + /v7j4+P+g4SD/n9/f/5/f3/+f39//np6ev5/f3/+sLCw/uHh4f78/Pz+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v729vb+yMnI/pmZmf5/gH/+fX19/n5+ + fv5+fn7+fX19/qOjo/79/f3+/v7+/v7+/v79/f3+e3t70AAAAFsAAAAyAAAAFgAAAAYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAYAAAAWAAAANQAAAF0AAACHAAAAqmtsa+P7+/v+/////////////////v7+/v/////t7e3/srKy/42M + jP5/fn7/fn5+/39/f/9/fn//fX19/oCBgP+bm5v/zc3N//Lx8f7+/v7//////////////////v7+/v// + //////////////7+/v7////////////////+/v7+/v7+//b29v/a2tr/q6ur/4iIiP59fn3/hYWF/9vb + 2//+/v7+//////7+/v/j4+P4KioqlwAAAEkAAAAkAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiYmAgAAAAwAAAAhAAAARQAA + AG8AAACXCgoKusfHx/r+/v7//////////////////v7+/v///////////Pz8/+vr6/7DxMP/mZmZ/4OD + g/9+fn7/f39//n9/f/99fX3/fn5+/46Ojv66u7v/5+fn//r6+v///////v7+/v////////////////7+ + /v7////////////////+/v7+//////////////7/+/v7/+Xl5f64uLj/srKz//n5+f/+/v7+//////7+ + /v+hoaHgAgICaAAAADgAAAAZAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABMAAAAuAAAAVwAAAIEAAAClPDw82P7+ + /v7//////////////////////v7+/v////////////////7+/v7/////9vb2/9jY2P+pqan/hYWF/n9/ + f/9/f3//f39//39/f/57e3v/g4OD/6Ojo//Q0ND/9vb2/vz8/P////////////7+/v7///////////// + ///+/v7+//////////////////////7+/v7+/v7/+/v7///////+/v7+//////T09P5ERESpAAAAUAAA + ACoAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABXV1cBAAAACQAAAB4AAAA9AAAAagAAAJIGBga2pqam8f7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+6+vr/sDAwP6Tk5P+fn5+/n5+ + fv5/f3/+f39//n5+fv55eXn+iIiI/re3t/7p6en+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/r29veoNDQ14AAAAPwAAAB0AAAAJAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAJCQkEAAAAEQAAACoAAABPAAAAfAAAAKEtLS3N7e3t/v7+/v7//////////////////////v7+/v// + //////////////7+/v7//////////////////////v7+/v7+/v/39/f/2NjY/6ioqP6Gh4b/fn5+/39/ + f/9/f3//f39//n19ff+AgYD/pKOk/9nZ2f76+vr////////////+/v7+//////////////////////7+ + /v7////////////////+/v7+/v7+/1tbW70AAABWAAAALwAAABMAAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/fwEAAAAIAAAAGgAA + ADkAAABhAAAAjgAAAK+EhITq/v7+//7+/v7//////////////////////Pz8/v7+/v////////////7+ + /v7//////////////////////v7+/v////////////7+//n5+f7m5eX/u7u7/5SUlP+BgYH/fn5+/n9/ + f/9/f3//fX19/3+Af/6ZmZn/ysrK/+7u7v/+/v7+//////////////////////7+/v7///////////// + ///+/v7+19fX+BgYGIIAAABEAAAAIgAAAAsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcnJwIAAAAOAAAAJgAAAEkAAABzAAAAnBoa + GsXU1NT5/v7+//7+/v7/////////////////////ubm5/r29vf/q6ur/+vr6//7+/v7///////////// + /////////v7+/v////////////////7+/v7//////v7+//Dw8P/Q0dD/n56f/oWFhf9/f3//f39//4B/ + gP5+fn7/fX19/4yMjP+0tLT+5+jo//r6+v////////////7+/v7////////////////+/v7+g4OD0QIC + AmEAAAA1AAAAFwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAWAAAAMwAAAFsAAACEAAAAqVxcXOD7+/v+/v7+/v7+ + /v7+/v7+/v7+/v7+/v729vb+hoaG/nh4eP57e3v+nJyc/tfW1/79/f3+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7++/v7/uHh4f60tLT+iYmJ/n19ff5/f3/+f39//n9/ + gP58e3z+f39//qGhof7W1tb++/v6/v7+/v7+/v7+/v7+/v7+/v79/v3+HR0dmAAAAEsAAAAnAAAADwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAANTU1AQAAAAsAAAAiAAAARAAAAG0AAACVBAQEu8jIyPf+/v7///////7+/v7///////////7+ + /v/Jycn/fHx8/n9/f/+AgID/f39//3RzdP6FhYX/urq6/+np6f///v///v7+/v////////////////7+ + /v7//////////////////////v7+/v7/////////9vb2/87Nzv6dnZ3/goKC/35+fv9/f3/+f39//39/ + f/9+fn7/2NjY//7+/v7///////////7+/v+mpqbpAAAAYgAAADoAAAAbAAAACAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA + ABIAAAAuAAAAVAAAAH8AAACjRkZG1/Ly8v7+/v7///////7+/v7///////////7+/v/h4eH/p6in/omJ + if9/f3//f39//4CAgP5/f3//fHx8/35+fv+enp7/1NXU/vX19f////////////7+/v7///////////// + /////////v7+/v////////////////7+/v74+Pj/39/f/7Kzs/+Ojo7+fn9//35+fv+enp7/9/f3//7+ + /v7//////v7+//Ly8v1ISEiwAAAAUAAAACsAAAASAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjY2MBAAAACAAAABwAAAA9AAAAZgAA + AI8AAACwoaGh8/7+/v////////////7+/v7//////////////////v//+vr6/uTk5P+8vLz/lZaV/4OD + g/5/f3//gICA/4CAgP98fXz/fHx8/o+Pj/++vb7/6Ojo//v7+/7//////////////////////v7+/v// + //////////////7+/v7////////+//z8/P/s7Oz+xMTE/5ubm//T09P///////7+/v7//////v7+/8nJ + ye8ICAh5AAAAPwAAAB8AAAALAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFxcDAAAADgAAACcAAABNAAAAeAAAAJ4TExPJ9vX2/v7+ + /v/+/v7//v7+//7+/v7+/v7//////////////////v7+/v/////+/v7/8/Pz/9TV1P6mpqb/h4eH/4CA + gP+AgID/gYGB/oCAgP96enr/gICA/9fX1/7//////////////////////v7+/v////////////////7+ + /v7////////////////+/v7+//////j4+P/8/Pz///////7+/v7//////f39/mpqasUAAABZAAAAMAAA + ABQAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAGAAAAFgAAADQAAABeAAAAiAEBAax6enrn/v7+/v39/f729vf+4uHh/ufm + 5v719vX+/f39/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+7Ozs/sPDw/6Wlpb+f39//oCA + gP6AgID+i4uL/vHx8f7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+19fX9R4eHowAAABHAAAAIgAAAAwAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAIAAAAHAAAAD0AAABqAAAAkxUVFbzU1dT7/f39/+zr6/6ikYf8gWRU/Us/OPyJiIf96urq/v7+ + /v///////v7+/v////////////////7+/v7///////////7+/v/5+fn/29vb/q6urv+MjIz/tra2//7+ + /v7//////////////////////v7+/v////////////////7+/v7////////////////+/v7+//////// + //////////////7+/v7+/v7/h4eH1AAAAGIAAAA2AAAAFwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAHQAA + AD8AAABrAAAAk1VVVdf9/f3+/Pz8/8rFw/2HZFD9hmBK/zEiGf4dGRb+rq2t/vf39////////v7+/v// + //////////////7+/v7//////////////////////v7+/vr6+v/s6+z/8vLy//7+/v7///////////// + /////////v7+/v////////////////7+/v7////////////////+/v7+//////////////////////7+ + /v7t7e39MTExmwAAAE0AAAAoAAAADgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAGgAAADgAAABgCwsLkLW0 + te3+/v7++Pj4/8O/vfyIZVD9g15I/y0fF/4UDQn/d3d2/evr6//+/v7//v7+/v/////+/v7//v7+//7+ + /v7+/v7//v7+/////////////v7+/v////////////////7+/v7//////////////////////v7+/v// + //////////////7+/v7////////////////+/v7+//////////////////////7+/v6rqqvjCQkJbwAA + ADwAAAAcAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEwAAACsAAABKDAwMdGZmZsLAv7709fX2/sTA + vvuNaVP8lmtT/k84Kv4ZEAz+b25t/eDg4f79/f3+/v7+/v7+/v739vb+xr+7/KmhnPzKycn8/Pz8/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v5GRUayAAAAUwAAAC0AAAASAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAACgAAABgAAAAtAAAAQgAAAFk8LCK9l3hm+ZJ+c/udcln90Zd1/49m + T/4eFRH+e3p6/d3d3P/9/f3//v7+/v////+0p5/8i2RM/l9CMf4bFBH+paSk/f7+/v///////v7+/v// + //////////////7+/v7//////////////////////v7+/v////////////////7+/v7///////////// + ///+/v7+/////////////////v7+/8rKyvYJCgl0AAAAQAAAAB8AAAAKAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABkZGQBAAAABAAAAAsAAAAXAAAAJAUDAj9lSDjZqntf/4JeSP+3hGb/1Zp3/5huVf4hGRX8l5aW/eHh + 4f/9/f3//v7+/v7+/v+aioH7kmhP/2FFNf4cEg3/V1VT/fb29////////v7+/v////////////////7+ + /v7//////////////////////v7+/v////////////////7+/v7////////////////+/v7+//////// + ////////+/v7/m5ubsUAAABZAAAAMQAAABUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZWVlARcX + FwMAAAAIAAAADg0JBzR+W0b1iGJM/39bRv/Gj2//05h2/4VgSf4WDwzlLi4urnx8fNfS0tHy+Pf2/v39 + /v+hkor5mm5U/4VfSf4qHBX/SEVD/erq6f7//////v7+/v/////+/v7/+vr6/+jm5f3p6Oj++/v7//7+ + /v///////v7+/v////////////////7+/v7////////////////+/v7+///////////+/v7/6Ojo+RYW + FowAAABGAAAAIwAAAA0AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpaWkBDAwMAxgR + DUCHYUv+elhE/45mTv/HkG//0Zd1/2JGNf4MCAa5AAAAVAAAAGQlHhqzu5+O/MO5s/mZhnv4toNl/86W + dP5EMCT/TEhG/erq6v7//////v7+/v7+/v/49/f+vK6n/YFlVfxJQDz9rq2s/fz8/P///////v7+/v// + //////////////7+/v7////////////////+/v7+///////////9/v7/kpKS3QAAAGAAAAA2AAAAGAAA + AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIYElSIYkv+eVdD/otj + TP7Lk3H+t4Rm/i0gGP4DAgFkAAAAKgAAADtALiOzvIho/n1aRf58Wkb+0px5/tKYdv5QOCr+X1ta+/X1 + 9f7+/v7+/v7+/v7+/v7l4uD9iGZS/IZgSv4qHRX+NTEv/d/f3/7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7r6+v7OTk5ogAAAEwAAAAnAAAADwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0VD1tzUj/+dFM//2pLOf+xgGP/XkMz/xUP + C9cAAAAWAAAAEQMCASVeQzPFmW5V/ks2Kf+JY0z/26J9/8+Vc/5GMSX/ODU11qCfn9/e3t77/v7+/v7+ + /v/k4d/+iWZR/ZxxVv4/LCH/JyAd/c3Nzfz//////v7+/v/////+/v7//v7+//7+/v7//////v7+//7+ + /v/+/v7+//////7+/v+0tLTmBAQEbwAAADsAAAAbAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0JBjxROiz9STQn/z8sIf9JMyf/KBwU+QYEA2EAAAACAAAABAcF + AxxtTjzchWBK/lI7Lf+jdlr/2J15/8OMbf4wIhr7AwIBfgUFBW0gICCNlIZ+8OHWz/zUzsr7k21X/dii + ff55V0P/LCQf/c7Ozfz//////v7+/v/////9/f3/7+7t/r2xqv2PiYb81NPT/f7+/v/+/v7+/v7+//j4 + +P5SUlK0AAAAVAAAACwAAAARAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAIBARMjGBLGLR8X/y4gGP8nGxT4DwoHnAAAAAYAAAAAAAAAAAgFBBlwUD3ldlVB/nNS + P/+md1z/1Jl2/5FoUP4ZEQ3YAQAAQwAAADwBAABTiGFK+7SGav19Y1P8p3xg/uauh/6TalL/Ny8q/djY + 2Pz//////v7+/v/////39/f+r52T/Y9nT/42Jhz/Qjw6/eDg4P7+/v7+/v7+/8jIyPAWFhaBAAAAQwAA + AB8AAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAADAgElEw0KlxUOC6kJBgVhAAAACQAAAAAAAAAAAAAAAAUDAxZgRTTeb089/nxYQ/6SaVH+vYhp/kIv + I/4LBwWMAAAAFQAAABwJBgVLk2pS/odhS/5VPC7+w5Jx/t6jfv6RaFD+Ni4r+Lu7u/X+/v7+/v7+/v7+ + /v7q6ej9i29f/KByWP5MNin+IhoV/cPCwf3+/v7+/v7+/nR0dMsAAABdAAAAMwAAABUAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAksHxeyYEQ0/kcyJv9LNCf/RC8j/xwTDuIBAAAXAAAABAAA + AAcWDwtYkWhQ/mRIN/9tTjz/1J15/9ebeP5yUj//DQkHxQEBAW0fHx+ep56Y9OTe2vvl4+L8kXFf+9Sf + e/6VbFP/KR8Z/cLBwP3+/v7+6Ojo/B4eHooAAABIAAAAJQAAAA0AAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAMCAZRMCEZ+TAhGP8vIBj/IhcR6QYEA00AAAABAAAAAAAAAAAXEAxaiWJM/lc+ + L/+MZU3/z5Zz/8uTcf5DLyT+BgQDegAAAEAAAABWfFlF+q+Daf1yYVj5lG5X/em2jf6vfmL/Nioj/cnJ + yPz+/v7+lJSU1wQEBGIAAAA2AAAAGQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACCwcFXxcQDLkUDgqlBgQDQAAAAAAAAAAAAAAAAAAAAAANCQdJYUU0/mBENP9+WkX/uoZo/4pj + TP4fFRDfAgEBNQAAAB8GBANLjGRO/nhWQv85KB7/roFj/+q0jP6re1//OC0n+Li4uO/y8vL9MjIylwAA + AEUAAAAmAAAAEAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgEbPiwh+1U8Lf9JMyb/YEQ0/zYlHP4MCAaEAAAACQAA + AAoOCghQjGVN/lg/Mf9TOy3/zp16/+Clf/6TalH/GRIN1xUVFXpISEiVAQEBSwAAAC0AAAAXAAAACQAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAHRMPrDIjGv4xIhn+LR8X/hcQDMYAAAANAAAAAAAAAAEOCQdPelhD/j4s + If6EX0j+1p15/tabeP5eQzP+CwcFmAAAADMAAAAxAAAAJgAAABcAAAALAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAgEBExEMCYwZEQ22EAsIjAEBABMAAAAAAAAAAAAAAAAHBQQyRjEl/lg+L/+FX0n/uIVn/51x + V/4pHBXuAwIBPgAAABYAAAAVAAAAEAAAAAkAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAALAAAAAgAAAAAAAAAAAAAAAAAAAAABAQAKMiIa7U83Kf9MNSj/XUIy/z4sIf4QCwiWAAAADAAA + AAYAAAAGAAAABAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAFA4KgDEhGfcyIhn/Lh8X/RsSDsoCAQEcAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABg0JBncaEg3UEgwJoQIBARsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///8AD//////AAAA///8AA//////AAAA///4AAP/ + ////AAAA///4AAH/////AAAA///4AAB/////AAAA///wAAAf////AAAA///wAAAH////AAAA///gAAAB + ////AAAA///gAAAAf///AAAA///AAAAAH///AAAA///AAAAAB///AAAA///AAAAAAf//AAAA//+AAAAA + AH//AAAA//+AAAAAAD//AAAA//8AAAAAAA//AAAA//8AAAAAAAP/AAAA//4AAAAAAAD/AAAA//4AAAAA + AAA/AAAA//4AAAAAAAAfAAAA//wAAAAAAAAfAAAA//wAAAAAAAAfAAAA//gAAAAAAAAfAAAA//gAAAAA + AAAfAAAA//gAAAAAAAAfAAAA//AAAAAAAAAfAAAA//AAAAAAAAAfAAAA/+AAAAAAAAAfAAAA/+AAAAAA + AAA/AAAA/8AAAAAAAAA/AAAA/8AAAAAAAAB/AAAA/8AAAAAAAAB/AAAA/4AAAAAAAAB/AAAA/4AAAAAA + AAD/AAAA/wAAAAAAAAD/AAAA/wAAAAAAAAH/AAAA/gAAAAAAAAH/AAAA/gAAAAAAAAP/AAAA/gAAAAAA + AAP/AAAA/AAAAAAAAAf/AAAA/AAAAAAAAAf/AAAA+AAAAAAAAAf/AAAA+AAAAAAAAA//AAAA8AAAAAAA + AA//AAAA8AAAAAAAAB//AAAA8AAAAAAAAB//AAAA4AAAAAAAAD//AAAA4AAAAAAAAD//AAAAwAAAAAAA + AD//AAAAwAAAAAAAAH//AAAAwAAAAAAAAH//AAAAwAAAAAAAAH//AAAAwAAAAAAAAP//AAAAwAAAAAAA + AP//AAAAwAAAAAAAAf//AAAAwAAAAAAAAf//AAAAwAAAAAAAA///AAAA4AAAAAAAA///AAAA+AAAAAAA + B///AAAA/gAAAAAAB///AAAA/gAAAAAAB///AAAA/gAAAAAAD///AAAA/gMAAAAAD///AAAA/wcAAAAA + H///AAAA//8AAAAAH///AAAA//+AwAAAP///AAAA//+DwAAAP///AAAA////wAAAP///AAAA////4EAA + f///AAAA////4OAAf///AAAA////8eAA////AAAA//////A/////AAAA//////B/////AAAAKAAAAGAA + AADAAAAAAQAgAAAAAACAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAACwAAABIAAAAZAAAAHgAA + ACAAAAAfAAAAGwAAABQAAAAOAAAACQAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AQAA + AAUAAAALAAAAFAAAACEAAAArAAAAMwAAADcAAAA1AAAAMAAAACcAAAAeAAAAFQAAAA0AAAAIAAAABB8f + HwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAADw8PAgAAAAkAAAATAAAAIAAAADIAAABCAAAATgAAAFMAAABSAAAATAAA + AD8AAAAzAAAAKAAAABwAAAATAAAADQAAAAcAAAAELy8vAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/f38BAAAABQAAAA8AAAAeAAAAMAAA + AEoAAABfAAAAbwAAAHgAAAB4AAAAcQAAAGIAAABUAAAARgAAADYAAAAqAAAAHwAAABUAAAAOAAAACQAA + AAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA/Pz8CAAAACAAAABYAAAAoAAAAPwAAAF4AAAB2AAAAhwAAAJMAAACUAAAAjgAAAIAAAAByAAAAZAAA + AFEAAABCAAAANQAAACcAAAAdAAAAFQAAAAwAAAAHAAAABB8fHwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAB0AAAAzAAAATQAAAHAAAACJAAAAnAMD + A7IEBQS0AAAApgAAAJoAAACOAAAAgQAAAG4AAABfAAAAUAAAAD8AAAAyAAAAJgAAABkAAAASAAAACwAA + AAYAAAACLy8vAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAAEgAA + ACgAAABBAAAAXwAAAIMAAACcAAAAr3p6eu/IyMj7WFhY4BIREr4AAACsAAAAoAAAAJEAAACDAAAAdAAA + AGEAAABSAAAAQwAAADIAAAAmAAAAGwAAABEAAAALAAAABwAAAAMAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAMAAAALAAAAGQAAADIAAABNAAAAbAAAAI8AAACmBwcHw97e3v3+/v7++/z7/6Gh + ofNRUVHaCwsLvgAAAKcAAACcAAAAkAAAAH8AAABvAAAAYAAAAE0AAAA9AAAAMAAAACIAAAAYAAAAEQAA + AAoAAAAFAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAQAAAAIAAAAD0AAABaAAAAeQAA + AJoAAACvRkZG4f7+/v79/f3+///+//z8/P7n5+f9tbW08ycnJ9UBAQG0AAAApwAAAJkAAACMAAAAfQAA + AGkAAABZAAAASgAAADkAAAAsAAAAIAAAABYAAAAPAAAACQAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAoAAAAXAAAAKwAAAEoAAABpAAAAhwAAAKULCwvDwL/A9P7+/v/////////////////+/v7//v7+//f3 + 9/6lpaX2QEFA1wkJCboAAACpAAAAnAAAAIwAAAB9AAAAbQAAAFoAAABKAAAAPAAAAC0AAAAiAAAAGQAA + AA8AAAAKAAAABgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA4AAAAfAAAANQAAAFcAAAB2AAAAkwAAAK5FRUXZ4uLh/P7+ + /v7+/v7+//////7+/v7+/v7+/v7+//39/f79/f3+6uvq/omJiew5OTnSBAQEtgAAAKMAAACXAAAAiQAA + AHcAAABnAAAAWQAAAEcAAAA5AAAALQAAACAAAAAXAAAAEAAAAAkAAAAFAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAABUAAAAoAAAAQQAA + AGUAAACDAAAAngcHB7yHh4fs+/v7///////////////////////////////////////+/v7//v7+//n5 + +f/b29v7k5ST7xEREckAAACtAAAAogAAAJMAAACFAAAAdwAAAGUAAABVAAAARwAAADYAAAAqAAAAIAAA + ABUAAAAOAAAACQAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAEAAAADAAAAB4AAAA0AAAATwAAAHQAAACRAAAAqTAwMNDZ2dn9/v3+//7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/+3s7f6EhITvLy8vzAMDA7IAAACjAAAAlwAA + AIgAAAB5AAAAagAAAFgAAABJAAAAOwAAACwAAAAhAAAAGAAAAA8AAAAKAAAABgAAAAIAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAEQAAACYAAAA/AAAAXQAAAIEAAACcAAAAsW1t + bez+/v7+/v7+//7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+//7+ + /v7+/v7+1dXV/XZ2duQjIyPJAQEBrwAAAKAAAACUAAAAhgAAAHUAAABmAAAAVwAAAEUAAAA3AAAAKwAA + AB8AAAAWAAAADwAAAAgAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAKAAAAGAAA + ADAAAABLAAAAagAAAI0AAAClAgICv9jY2P3+/v7+///+//7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+//f39/7R0dH4cXFw6AYGBr4AAACqAAAAoAAA + AJEAAACDAAAAdAAAAGIAAABTAAAARAAAADQAAAAoAAAAHQAAABMAAAAMAAAABwAAAAMAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAYAAAAQAAAAIQAAAD0AAABbAAAAegAAAJsAAACwR0dH4v7+/v/+/v7///////// + //////////////////////////////////////////////////////////////////////////////7+ + /v/+/v7//v7+/+Li4v1mZmbnICAgxwAAAK8AAAChAAAAlQAAAIUAAAB2AAAAZwAAAFUAAABFAAAANwAA + ACgAAAAdAAAAFAAAAAwAAAAHAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAXAAAAKQAAAEkAAABoAAAAhgAA + AKQHBwfAq6yr8v7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+//7+/v77+/v+vr6++WJiYt4TExPDAAAArQAA + AJ8AAACSAAAAhAAAAHMAAABjAAAAUgAAAEAAAAAyAAAAJgAAABoAAAASAAAADAAAAAYAAAADAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA + AA4AAAAeAAAANAAAAFYAAAB1AAAAkgAAAK04OTjV29vb/P39/f7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+/f39/u/v7/68vLz1TU1N4QEBAbgAAACpAAAAngAAAI8AAACAAAAAcAAAAFwAAABMAAAAPQAA + AC4AAAAiAAAAGQAAABAAAAAKAAAABgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABwAAABYAAAApAAAAQgAAAGYAAACEAAAAnggICL2PkI/t/v7+//// + //////////////////////////7///z8/P/+/v7//v////7+/v////////////////////////////// + //////////////////////////////////////////////7+/v/+/f7//v7+/7+/v/pMTEzeFBQUwgAA + AKsAAACeAAAAkQAAAIAAAABwAAAAYAAAAE0AAAA/AAAAMQAAACQAAAAaAAAAEgAAAAsAAAAGAAAAAwAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACwAAAB0AAAAzAAAATgAA + AHMAAACQAAAApykpKc7Pz8/7/v7+//7+/v7+/v7+//////7+/v7+/v7+/v7+/8fHx/7W1tb+7u7u//T0 + 9P739/f++/z7//7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v// + ///+/v7+/f39/v7+/v/v7+/+p6in9EdISNYICAi7AAAAqAAAAJkAAACLAAAAfQAAAGsAAABbAAAATQAA + ADwAAAAvAAAAJAAAABkAAAARAAAACwAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAAGAAAAEAAAACUAAAA9AAAAWwAAAH8AAACaAAAAsFtbW+j6+vr+/v7+//7+/v7+/v7+//////7+ + /v7+/v7+7u3u/4WEhf6IiIj+nZ2d/7y9vf7T09P+4eLh//T09P78/Pz+//7///7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v7+/v/9/f3+/f39/uPj4/yioqLxLi4u1gAA + AK8AAACkAAAAmAAAAIgAAAB5AAAAagAAAFgAAABJAAAAOwAAACwAAAAhAAAAGAAAAA8AAAAKAAAABQAA + AAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAKAAAAGAAAADEAAABLAAAAagAAAI4AAACmBAQEv9XW + 1f7+/v7//v7+///////////////////////9/f3/vr2+/3t7e/9/f3//fn1+/31+ff+JiYn/oKCg/8HB + wf/a2tr/7u7u//r6+v/+/v7///////////////////////////////////////////////////////// + //////////////7+/f/+/v7//////5mZmfU4ODjTCwsLuQAAAKUAAACZAAAAjAAAAHwAAABtAAAAXgAA + AEwAAAA9AAAAMAAAACMAAAAaAAAAEgAAAAoAAAAGAAAAAy8vLwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAPAAAAHwAA + ADsAAABYAAAAdwAAAJkAAACtOjo63f7+/v/+/v7+//////7+/v7+/v7+//////7+/v7u7u7+mZmZ/359 + fv5+f3/+f39//39+fv5+fX7+f39//4uLi/6goKD+vb28/93d3f7v7+/++fn5//7+/v7+/v7+//////7+ + /v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+/v/h4eH9lpaW7S4u + Ls8CAgK0AAAApAAAAJcAAACJAAAAewAAAGkAAABZAAAASwAAADoAAAAtAAAAIgAAABYAAAAPAAAACgAA + AAUAAAACX19fAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAgAAAAVAAAAJwAAAEYAAABlAAAAgwAAAKIDAwO8qamp8P/////+/v7+//////7+ + /v7+/v7+//////7+/v7d3d3+jIyM/3t7e/5+fn7+f39//35+f/5/fn7+f39//35+fv5/f3/+hYaF/56e + nv6+v7/+3d3c//Lx8v76+vr+/v7+//7+/v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v7+/v/+/v7+/v7+/tbW1vqJiYnrGRkZywAAAKwAAAChAAAAlgAAAIYAAAB3AAAAaAAA + AFUAAABGAAAAOAAAACkAAAAeAAAAFQAAAAwAAAAGAAAAAw8PDwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA4AAAAeAAAAMwAAAFUAAAB0AAAAkQAA + AK06OjrX3Nzc/P3+/f/////////////////////////////////+//7/7+/v/7u7u/+WlpX/g4OD/359 + fv9+fn7/f39//39/f/9/f3//f39//319ff9/f3//kI+Q/7O0s//U1NT/6uvq//n5+f/9/f3//v7+//// + //////////////////////////////////////////////////////////////3+/f/+/v7/+vr7/3R1 + dO4qKirLBQUFtQAAAKQAAACYAAAAiwAAAHkAAABqAAAAWgAAAEYAAAA3AAAAKQAAABsAAAARAAAACQAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAA + ABQAAAAmAAAAPwAAAGIAAACBAAAAnAUFBbqBgYHq+fj5/v/////+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////z8/P7q6ur+ysrK/5ycnP6EhIT+fXx9/35+fv5+f3/+f39//35/fv5+fn7+fX19/4GB + gf6RkZH+rK2s/9TU1P7s7Oz++fn5/v3+/f/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/vz8/P/Pz8/7gICA5xoaGsgAAACvAAAAowAAAJQAAACGAAAAdwAA + AGMAAABRAAAAQAAAACwAAAAdAAAAEgAAAAgAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAACwAAABsAAAAwAAAASwAAAHAAAACNAAAApSIiIsnDw8P6/f39/v// + ///+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/f39/+7u7v7S09L+pKWk/4CA + gP57fHv+fn9+/35+f/5/fn7+f39//35+f/5+fn7+gICA/42Njf6rq6v+0dHQ/vPz8//7+/v+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+/v/+/v7++fn5/sXF + xfdlZmXlCwsLwgAAAKoAAACfAAAAkwAAAH8AAABsAAAAWAAAAD8AAAAsAAAAGwAAAA0AAAAFAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAEAAAACUAAAA9AAAAWgAA + AH8AAACaAAAAr2BgYOj+/v7///////////////////////////////////////////////////////// + /////////////////v///////////+Dg4P+0tLT/kZGR/4CBgP9+fn7/fn5+/39/f/9/f3//f39//35+ + fv98fHz/gICB/6CgoP/Hx8f/6Ofo//r6+f/+/v7///////////////////////////////////////// + /////////////////////////v7+//3+/f/+/v7/4eHh/lZWVuQcHBzEAgICrwAAAJwAAACKAAAAdAAA + AFgAAAA+AAAAJwAAABQAAAAJAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAAKAAAAFwAAAC4AAABJAAAAZwAAAIsAAACkAgICvMjIx/z+/v7+/v7+/v/////+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v76+vr+5eXl/7y8 + vP6YmJj+goKC/3x8fP5+fn7+f39//39/fv5+f3/+fn5+/n19ff+EhIT+m5qa/sXFxf/n5+b++/v7/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+/v/9/f3+/f39/vb2 + 9v64uLj2ZmVl4AwMDLsAAACcAAAAhgAAAGYAAABKAAAAMAAAABkAAAALAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAOAAAAHgAAADkAAABVAAAAdAAAAJYAAACsKSkp2fz9 + /P/+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////n6+f7r6+v+ysrK/5eXl/5/f3/+fHx8/35+f/5/fn7+f39+/n9/ + f/9+fn7+fn5+/oODhP+VlZX+u7y7/uzs7P/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v7+/v/+/v7+7+/v/rO0tPJHR0fTBQUFmgAAAHEAAABRAAAANQAA + ABsAAAAMAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAkAAAAVAAAAKAAA + AEcAAABlAAAAhAAAAKMFBQW8paWl8f7+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////n5 + +f/Z2dn/r6+v/4qKiv+AgID/fX59/35+fv9/f3//f39//39/f/99fn7/e3t7/4mIiP+tra3/2dra//X1 + 9f/+/v7//////////////////////////////////////////////////////////////////v3+//// + ////////ycnJ+hISEpUAAABTAAAANgAAABsAAAAMAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAA4AAAAdAAAAMgAAAFQAAABzAAAAkAAAAKwwMDDT19fX+v39/f/+/v7+/v7+/v// + ///+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7++Pn4/9vb2/66urr+l5eX/n9/f/98fXz+fn5+/n9/ + f/9+fn7+fn5+/n59fv99fX3+iIiI/qusq//R0tL+8fHx/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v7+/v/+/v7+5OTk/RAQEIkAAABOAAAAMgAAABgAAAAKAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAABMAAAAlAAAAPgAAAGEAAAB/AAAAmgIC + Arh4eHjm+Pj4/v7+/v////////////////////////////T19f/R0dH/6Ojn//z8/P/7+/v//f39//// + //////////////////////////////////////////////////////////////////////////////7+ + /v/5+fn/7Ozs/8bHxv+YmJj/fn5+/318ff9/f3//f39//39/f/9+fn7/fn5+/39/f/+Ghob/nZ2d/8/P + z//z8/P//f39//z8/P/8/Pz//v7+///////////////////////////////////////+/v7/h4eH4gAA + AGcAAABHAAAALAAAABQAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACwAA + ABsAAAAxAAAATAAAAHEAAACOAAAApiMjI8rExMT7/f39/v/////+/v7+/v7+/v/////+/v7+/////9jY + 2P6CgoL+fn5+/5qamv68vLz+1tbW/+3t7f75+fn+/f39//7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////6+vr+3d7d/qioqP+Li4v+gICA/n59 + fv9+fn7+fn5//n9/f/9+fn7+fX19/nx8fP+MjIz+r6+v/tHR0f/d3t3+5ufm/vPz8v/6+vr+/v7+/v// + ///+/v7+/v7+/v7+/v/g4OD7MzMzogAAAFcAAAA6AAAAIgAAAA4AAAAFLy8vAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAFAAAAEAAAACQAAAA8AAAAWQAAAH4AAACZAAAArlZWVuT5+fn+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/////7CwsP59fX3+fn5+/3x8fP5/gH/+jY2N/6+vr/7Q0ND+6+vr//r6 + +v79/f3+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v// + ///+/v7+/v7+/vn4+f/e3t7+urq6/pCQkP9/fn/+fX19/n9/f/9+fn7+fn5+/n5+fv99fX3+fn1+/ouL + i/+foKD+uLm4/tbW1v/q6ur++fn5/v/////+/v7+/v7+/v7+/v+enp7hDw8PgAAAAEsAAAAwAAAAGwAA + AAoAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAAFQAAAC0AAABIAAAAZgAA + AIoAAACjAAAAuba2tvv+/v7//v/+////////////////////////////9PX0/4qLiv9+fn7/f39//39/ + f/9/f3//fn5+/4CAgP+JiYn/pKSk/9LS0v/w8PD/+/v7///+//////////////////////////////// + ////////////////////////////////////////////////////////+vr6/+bm5v/CwcL/lJSU/3x8 + fP99fX3/f39//39/f/9/f3//f35//35+fv9/f3//hISE/52dnv/MzM3/8vHx/////////////v7+/+vr + 6/1ZWVm6AQEBZAAAAD8AAAAmAAAAFAAAAAZfX18BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAUAAAAPAAAAHwAAADoAAABXAAAAdgAAAJcAAACtKioq2f/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+4ODg/4uLiv6BgYH+fX5+/35+fv5/f3/+f39//39/f/5+f3/+fHx8/39/f/6Wlpb+vLy8/+bl + 5v719vX+/f39//7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7++/r7/tHS0f+lpaX+iomK/n5/fv99fX3+fn5+/n9/fv9+fn7+fn5+/oSE + hP/CwsL+8/Pz/v7//v/+/v7+/v7+/rq6uukODg6IAAAAUgAAADIAAAAcAAAADBAQEAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAkAAAAVAAAAJwAAAEYAAABkAAAAgwAAAKICAgK6lpaW7v7+ + /v/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7++/v7/+Li4v7AwMD+nJyc/4GBgP58fHz+fn5+/39/ + fv5+f3/+f39//35+fv58fHz+gIB//5aWlv64uLj+29vb//n4+f7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7////29vb+29vb/rCv + r/+Ojo7+fn5+/n19ff9+fn7+fX19/pydnP/i4uL++fn5/v/////+/v7+/v7+/mNjY8sAAABnAAAARgAA + ACcAAAAVAAAACT8/PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAwAAAAcAAAAMQAA + AFIAAABxAAAAjgAAAKslJCXQ0dHR+v7+/v////////////////////////////////////////////// + ///7+/v/7u7u/83Mzf+fnp//gYGB/3x8fP9/fn//f39//39/f/9/f3//f39+/35+fv+AgID/i4uL/7Oz + s//f39//+/v7//////////////////////////////////////////////////////////////////// + //////////////////////////////f39//k4+P/vb29/4uLi/98e3z/fHx8/83Nzf/4+Pj//v7+//// + //////7/8PDw/hEQEZIAAABXAAAAOgAAAB8AAAAPAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABgAAABMAAAAmAAAAPgAAAGIAAACAAAAAmwMDA7h8fHzn+fn5/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+//////7+/v79/f3+5OXk/7Gxsf6QkZD+goGC/319 + ff5+fn7+f39//39/fv5+f3/+f39//3t8e/6AgID+nZ2d/9HS0f7u7u7+/Pz8//7+/v7+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/vX1 + 9f/LzMz+t7i4/v7+/f/+/v7+/v7+/v7+/v/+/v7+g4OD4QAAAGYAAABHAAAALQAAABUAAAAJAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACgAAABoAAAAvAAAASgAAAG8AAACMAAAApB0d + Hci5ubn4/f39/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////v7+/7k5OT+xMTE/5iZmf6Dg4P+fH18/35+fv5+f3/+f39//39/fv5+fn7+fHx8/4OD + g/6cnJz+wsLC/+rq6v78/Pz+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7++/v7/v/////+/v7+/v7+/v7+/v/m5ub8Ojo6qAAA + AFkAAAA8AAAAJAAAABAAAAAFX19fAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADgAA + ACIAAAA6AAAAVgAAAHwAAACXAAAArUlISd/19fX+/v7+//////////////////////////////////// + /////////////////////////////////////////////////////////Pz8/+zt7P/R0dH/o6Sj/4CA + gf98fHz/fn9+/39/f/9/f3//f39//35+f/99fn3/gYGB/5OTlP+5urr/6Ojo//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+jo6PlEhISgwAAAEwAAAAxAAAAGwAAAAsAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAJAAAAFQAAAC0AAABHAAAAZgAAAIoAAACjAQEBubm5ufv9/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+/////+Li4v64uLj+lZWV/4KCgv5+fX7+fn5+/39/f/5+f3/+f39//35+ + fv56e3v+f39//qiop//V1dX+7+/v/v39/f/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/unp6fxUVFS2AAAAYwAAAD4AAAAlAAAAEwAA + AAYfHx8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAANAAAAHQAAADcAAABUAAAAcgAA + AJUAAACrIiIi1f7+/v/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v78/Pz+6urq/8XF + xf6hoaD+hoaF/3x8fP5+fn7+f39//39/fv5/f3/+fn5+/nx8fP+Dg4P+m5yc/sfIx//o6Oj+/Pz8/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/sLC + wuwVFhWOAAAAVAAAADIAAAAdAAAADgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAcAAAATAAAAJQAAAEMAAABhAAAAfwAAAKABAQG3iYmJ7P/////+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////z8/P/w8PD/2dnZ/6Wmpf+EhIT/fHx7/39+f/9/f3//f39//39/ + f/9+fn7/fX59/4KCgv+SkpL/tra2/+zs7P/+/v7//v/+//////////////////////////////////// + ///////////////////+/v7//v7+/3FxcdIBAQFoAAAARwAAACgAAAAVAAAACS8vLwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA0AAAAcAAAAMAAAAFIAAABwAAAAjgAAAKolJSXQ0dHR+v39 + /f/+/v7+/v7+/v/////+/v7+/v7+/v/////v7+/+0M/Q/urq6v/6+vr+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////39 + /f7r6+v+wcHB/5SUlP6Dg4P+fn5+/n5+fv9+fn/+fn5//n9/f/9+fn7+e3t7/oCBgP+fn5/+xsbG/uPk + 4//v7+/++fn5/v7+/v/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+7u7u/Q0NDY4AAABVAAAAOQAA + AB4AAAAOAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAABMAAAAkAAAAPAAA + AF8AAAB9AAAAmAICArZubm7k9PT0/v7+/v/+/v7+/v7+/v/////+/v7+/v7+/v39/v/Nzc3+gYGA/pCQ + kP+zs7P+2NjY//r6+v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/////+rq6v7Kysr+pqam/oWFhf98fH3+fX1+/n9/ + f/9+f3/+fn9//n5+fv98fHz+gH+A/pKSkv+urq7+0dHR/vX19f/+/v7+/v7+/v/////+/v7+/v7+/v7+ + /v/+/v7+kJCQ5QAAAGgAAABJAAAALgAAABYAAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADAAAACQAAABkAAAAtAAAARwAAAGwAAACKAAAAoxcXF8Wtrq33/v7+//////////////////// + //////////////b29v+tra3/fn9+/319ff99fH3/goGB/6Ghof/S09L/+fn5//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///9/f3/8/Pz/9nY2f+traz/h4eH/3x7fP9+fn7/f39//39/f/9/f3//fn9+/35+fv9/gID/iYmJ/7a1 + tv/r6ur//v7+///////////////////////t7e3+QUFBrgAAAFoAAAA9AAAAJAAAABAAAAAGAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAADgAAACIAAAA6AAAAVgAAAHsAAACXAAAArU9P + T9/7+vr+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/uDg4P+Jion+fX59/n9/f/9/f3/+gICA/3t8 + e/51dXX+hYWF/729vf7j4uP+9vb2//7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+8PDw/r+/v/+ZmZn+hIWF/n1+ + ff9+fn7+fn5+/n9/f/9+fn7+fn5+/oGBgf/Ly8v+/f39/v/////+/v7+/v7+/v39/f+fn5/kEBAQgQAA + AEoAAAAvAAAAGwAAAAoAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAA + ACsAAABFAAAAZAAAAIgAAAChAAAAt6enp/j+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/tXW + 1f+Njo3+fn5+/n19ff9/fn/+f39//39/f/5/f3/+fXx9/3l4ef6Hh4f+p6en/9LT0v7z8/P+/v/+//7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v// + ///+/v7+/v7+/v39/f/u7u7+0NDQ/qWlpf+IiIj+fX19/n1+ff9+fn7+fX19/p2dnf/w8PD+/v7+/v// + ///+/v7+/v7+/u3t7f1eXl68AQEBZgAAAD4AAAAmAAAAEwAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAANAAAAGwAAADYAAABSAAAAcQAAAJQAAACqFRUV0PX19f/+/v7///////// + //////////////////////////////f39//i4uL/v7+//46Ojv99fX3/fX19/39/f/9/f3//f39//39/ + f/99fn3/fHx8/4GBgf+VlpX/wsLC//b29v////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//Lz8//d3d3/s7Sz/4aG + hv97fHv/enp6/8vLy//+/v7//////////////////v7+/8zMzO8aGhqSAAAAVQAAADMAAAAdAAAADQAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy8vAQAAAAgAAAAUAAAAJgAAAEQAAABiAAAAgAAA + AKABAQG3iIeI7f7+/v/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/vj4 + +P/U1dT+qqqq/4qKif6AgID+fn5+/35+fv5/f3/+f39//4B/f/5+fn7+dnV2/4CAgP6rq6v+2drZ//Pz + 8/79/f3+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v///v/+/v7+/v7+/vDw8P/GxcX+rKys/vr6+v/+/v7+/v7+/v/////+/v7+/v7+/mtr + a84AAABmAAAARQAAACcAAAAVAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + AAwAAAAbAAAALwAAAFAAAABvAAAAjAAAAKkdHR3Nzs7O+P7+/v/+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7++fn5/9vb2/66urr+mJiY/4CAgP59fH3+f39+/39/ + f/5/f3/+gH+A/319ff55eXn+gICA/6Ghof7CwsL+4uLi//z8/P7+/f3+/v7+//7+/v7+/v7+//////7+ + /v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7++Pj4/v// + ///+/v7+/v7+/v/////+/v7+7+/v/hYWFpYAAABXAAAAOgAAAB8AAAAPAAAABQAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABIAAAAjAAAAOgAAAF0AAAB8AAAAlwAAALRnZ2fh8vLy/v7+ + /v////////////////////////////////////////////////////////////////////////////7+ + /v/6+vr/7e3t/8nJyf+enZ7/gYGB/3x9fP9/f3//gH9//3+Af/9/f4D/f35//3x8fP9+fX3/hoaG/62s + rf/b2tr/+vr6//////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+/v7/nJyc7AAAAGwAAABKAAAAMAAA + ABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACQAAABkAAAAuAAAASQAA + AG0AAACLAAAApBcXF8aurq73/f39/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+/v////7+/v78/Pz+5ubm/7Ozs/6Tk5P+g4OD/35+ + fv5+fn7+f39//39/f/5/f3/+f4B//3l4ef53d3f+kZCR/8nKyf7r6+v++/r7//7+/v7+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+ + /v/s7e39PT4+qgAAAFkAAAA8AAAAJAAAAA8AAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9f + XwEAAAAFAAAADgAAACEAAAA5AAAAVQAAAHoAAACWAAAArENDQ9vv7+/+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////z8/P7o6Oj+ycnJ/5+gn/6Ghob+fX19/35+fv5/f3/+f39//39/f/5/f3/+enp6/3x8 + fP6RkZH+tra2/+Lj4v77+vv+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v7+/v+pqarnFRUVhAAAAEwAAAAxAAAAHAAAAAoAAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACsAAABFAAAAYwAAAIcAAACgAAAAtJWV + lfb+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/f39//Dw8P7Z2dn+r6+v/4WF + hf58fHz+fn9+/39/f/5/f3/+gIB//39/f/59fX3+fX19/4eHh/6pqar+3dzc/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/vHx8f5naGfBAgICaAAA + AEAAAAAnAAAAFAAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAANAAAAHAAA + ADcAAABUAAAAcgAAAJUAAACrFxgX0P/////+/v7//////////////////////////////////////+bm + 5v/c3Nz/8vLy//////////////////////////////////////////////////////////////////// + /////////////////v///////////+7u7v/Gxsb/np6e/4WFhf9/f3//fn5+/39/f/9/f3//f39//4CA + gP96enr/dnZ2/5OUk//Gxsb/5+fn//r6+v////////////////////////////////////////////// + /////////v7+/8XFxe4XFxeSAAAAVAAAADMAAAAdAAAADQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPz8/AQAAAAcAAAATAAAAJQAAAEIAAABgAAAAfwAAAJ4AAAC1eHh46v7+/v/+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/qSkpP97e3v+mpqa/sXFxf/o6Oj+/Pz8/v/////+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+8/Pz/9DQ + 0P6urq7+j4+P/35+fv5+fX7+f39//39/f/5/f3/+f39//nt7e/97env+jIyM/rS1tf/Z2dn++Pj4/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/nl5edMBAQFrAAAASAAAACkAAAAWAAAACQAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw8PAgAAAAsAAAAZAAAALgAAAE8AAABtAAAAiwAA + AKgTExPKw8PD9/7+/v/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+8PDw/oaGhv99fX3+enp6/nl5 + ef+DgoP+qKio/unp6f/+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v719fX+5ubm/7q6uv6RkZH+fX59/31+fv5/f3/+f39//n+A + gP9/f3/+fX19/n19ff+EhIT+m5yb/tXV1f/4+Pj+/v7+/v/////+/v7+/v7+/v/////+/v7+/f79/hsb + G54AAABZAAAAPAAAACAAAAAQAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfX18BAAAABQAA + ABIAAAAjAAAAOwAAAF0AAAB8AAAAmAEBAbRmZmbh8fHx/v7+/v////////////////////////////// + ///9/f3/wMDA/3t7e/9/gH//f3+A/4CBgP+AgID/dXV1/3FxcP+TkpP/yMjI/+rq6v/6+vr///7///// + ///////////////////////////////////////////////////////////////////+//////////// + ///4+Pj/2NjY/6empv+MjIz/gYGB/39+fv9/f3//f39//39/f/+AgH//fX19/3p6ev/Hx8f//f39//// + ///////////////////+/v7/mJiY6gAAAGkAAABLAAAAMAAAABcAAAAKAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABgAAAAsAAAARgAAAGoAAACJAAAAohMTE8Kmpqb0/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////6+vr+urq6/oWFhf99fn3+fn5+/oCAgP9/f3/+gICA/n9/ + f/94eHj+dXZ1/4yMjP6wsLD+19fX//r6+v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////f39/7e3t7+vb29/pWVlf+BgoH+fX19/n9/ + f/9/f3/+f39//pWVlf/o6Oj+/v7+/v/////+/v7+/v7+/v7+/v/u7u79RUVFswAAAFwAAAA+AAAAJgAA + ABEAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAB8AAAA2AAAAUgAA + AHcAAACTAAAAqz09Pdbv7+/+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+8/Pz/tra + 2v+wsLD+i4uL/nx8fP9+fn7+f4B//oCAgP+AgID+gICA/3x8fP56enr+e3x7/5mZmf7Ozs3++Pj4//7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7++vr6/unp6f/MzMv+oKCg/n+Af/98fHz+e3t7/r29vf/8/Pz+/v7+/v/////+/v7+/v7+/v7+ + /v+wsLDtGBgYigAAAE8AAAAzAAAAHQAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAHAAAAFAAAACoAAABDAAAAYgAAAIYAAACgAAAAtpeWl/f+/v7//v7+//////////////////// + //////////////////////////7/////////////8vLy/8bGxv+hoqH/ioqK/4CAgP9/f3//gICA/4CA + gP+BgID/goKC/3t8e/9wcHD/fHx8/7W1tf/e3d3/8/Pz/////v////////////////////////////// + /////////////////////////////////////////////////v///////////+Li4v+2trb/nZ2d//T0 + 9P///////////////////////v7+//Hx8f1lZWW/AQEBaAAAAEAAAAAnAAAAFQAAAAcAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAMAAAAGgAAADQAAABQAAAAbgAAAJIAAACpERERzPDv + 8P7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v3+ + /v/y8vL+2tra/rW1tf+Vlpb+g4OC/35+fv6AgH/+gYGA/4GBgf6BgYH+fn1+/3Z2dv5+fn7+qqqq//7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v// + ///+/v7+/v7+/v/////7+/v+8fHx/v/////+/v7+/v7+/v/////+/v7+/v7+/s/Pz/AfHx+XAAAAVwAA + ADUAAAAeAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAARAAAAIQAA + AD4AAABcAAAAewAAAJwAAACxZWVl5/7+/v79/f3+/v7+/vv7+//5+fn++Pj4/vr7+v/9/f3+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v7////+/v7+/v7+/vj4+P/q6ur+z8/O/5ycnP6CgoL+fn59/4CA + gP6BgYD+gYGB/4GBgf58fHz+rq+u//7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/oeGh9kCAgJuAAAASgAAACoAAAAXAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPz8/AQAAAAgAAAAWAAAAKQAAAEkAAABpAAAAhwAAAKYVFRXJysrK9/7+/v/9/f3/+Pj4/9fU + 0/67tLD+q6Wh/sTDw/7k5OT++Pj4//////////////////////////////////////////////////// + //////////////z8/P/m5ub/vr2+/5WVlf+Ghob/gICA/39/f/+Ojo7/4+Pk//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////8/Tz/hcXF5sAAABZAAAAPAAAACAAAAAQAAAABgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AQAAAAsAAAAZAAAALgAAAFAAAABwAAAAjQAA + AK1cXFzc7Ozs/v39/f76+vr+0M7M/YxzY/yAX0z9Ykk7/jMvLPyGhIT94ODg/vv7+//+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+/v7+/+rq6v7Nzc3+q6ur/4uK + i/6vr6/+9fX1//7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/+///+/v7+pKWk7gAA + AG4AAABMAAAAMQAAABgAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AgAA + AAwAAAAaAAAAMAAAAFEAAABxAAAAjg4ODrWbm5vw/f39//39/f709PX+mo6H+4tiSv+KY0z+XUIz/hQN + Cf8mIyH9q6ur/vLy8v/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+//////7+ + /v7+/v7+//////7+/v79/f3+9fT1/+Hh4f7o6Oj+/v7+//7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////29vb+Tk5OugAAAF0AAABAAAAAJwAAABEAAAAHAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPz8/AgAAAAwAAAAZAAAALQAAAEwAAABqAAAAhUJCQsbs7Oz+//////v7 + +v/u7u//in94+o5kTP+KZE3/TDYp/x0UDv8RDAn/X15e/OXl5f/6+vr///////////////////////// + ///+/v7////////////+/v7///////////////////////////////////7///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7+/v+urq7sFxcXhwAAAE0AAAAyAAAAHAAA + AAsAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AQAAAAoAAAAWAAAAJwAA + AEIAAABcAAAAdX5+fuT+/v7+//////n5+P7q6uv+k4mE95BmTf+JYkz+TTcq/iQZEv8SCwf+T05N+9na + 2f/09PT+/v7+/v/////+/v7+/v7+/v7+/v/+/v7+/v7+/v7+/v/+/v7+/v7+//7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/vPz + 8/5tbG3EAgICawAAAEEAAAAoAAAAFQAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPz8/AQAAAAcAAAARAAAAHgAAADUAAABKAAAAYCgoKJpkZGTNu7m49fb3+P7o6uv+louD9pNo + Tv+eclj+gV1H/i8hGf8WDgr+UU9O/NHS0v/w8PD+/v7+/v/////+/v7+/f39/vPy8f65sqz7nI2E+4WA + ffvGxcX8/Pz8//39/f7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/tLS0vIlJSWdAAAAWAAAADYAAAAfAAAADwAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAKAAAAEwAAACIAAAAyAAAAQgAA + AFUAAABoSjYq1Jh7avifkIn5jXZo+qJ0WP/PlnT/yJFx/0YxJf8aEg7+X11d/M7Ozv/u7u7//f79//// + /////////////6OUivyKZE3+hV5G/y0eFP8gGhj9np2d/f/////+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////4GCgdYAAABsAAAASQAA + ACkAAAAWAAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAGAAAACwAAABUAAAAgAAAAKwAAADoJBwVmbk884qh4XP6CXkn+gl9K/rqGZ//XnHj+z5Z0/lI6 + LP8dFxP9e3p6/c7Ozv/u7u7+/f39/v/////+/v7+/v7+/nxlV/qQZk3+imNN/jQkHP8TCwj+NDIx+/r6 + +v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7++Pj4/iIiIqMAAABaAAAAPQAAACAAAAAQAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAsAAAASAAAAGQAAACMeFhF2gFxH8LWD + Zf6KZE3+i2NM/s6Vc//Vm3j+zpVz/ks1KP8fGRb5hoaF/Nva2//09PT+/f39/v7+/v/+/v7+/P39/nxn + W/iTaU/+i2RN/jYlHP8cEgz+IR4b/d3d3v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v7+/v/+/v7+srKy9AEBAXEAAABNAAAAMgAAABgAAAALAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AQAA + AAMAAAAGAAAACgAAABI2Jx6HimNM/IVgSv9mSTj/lWtS/9Wad//UmXb/xY5u/zcnHf8NCAbTAwMDizEy + MbiJiYncysrJ8vTy8f7+/f3/+/z9/4ZxZveZbVP/rHtf/2JGNf8lGRL/IRwZ/czNzP7+/f3///////// + //////////////7+/v/7+vr/6ujm/tza2P3j4+L++fn5//39/f/+/v7///////////////////////// + ///////////////////////////////////////////////////////////////////09PT+SEhItgAA + AFwAAAA+AAAAJgAAABEAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz8BAAAAAwMCARBFMSaYimNM/n1bRv55V0P+nXFW/tOY + dv/Vmnf+r35h/icbFP0IBQSrAAAAVwAAAGIBAQF0MSklx7yjlPzNwLn619XU+4hxY/aqel3+1515/p9z + WP8zIxr+Ix4b/dDQ0P79/Pz+//////7+/v7+/v7+/v7+//j49/7Px8L9nIN1/GZTSPtXUU78qqmo/f7+ + /v79/f3+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v7+/v+2trbuGxsbiwAAAE8AAAAzAAAAHQAAAAwAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYE + AxNROiylimRM/35bRv6FX0n+nnFX/tWbeP/Rl3X+fVlE/hkSDfAEAgF5AAAANgAAAEQAAABSPy0iy7SD + Zf6cdVz8fWZY/YRjUPzBjm3+3qN+/rSCZf9ALCH+KCMh++Pj4/78/Pz+//////7+/v7+/v7+/v7+/+Th + 3/2Rd2f7k2lP/mBENP4eFA7+Lion/dva2/7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/vb29v52d3fJBAQEbgAAAEIAAAApAAAAFgAA + AAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgFBBtVPC61gFxH/25PPP94VkL/mW5V/9abeP+oeV3/QC0i/xAL + CMgAAAApAAAAHAAAACUFAwJFZEc317aDZf+bcVf/WD8w/5BnT//UnXr/2Z16/7SCZf89Kh//NzMx9urp + 6v79/Pz//////////////////////9rW0/6CYlD9mGxT/2dJOP8oHBX/DwcE/5STk/v///////////// + /////////////////////////////////////////////////////////////////////////v7+/8/P + z/IjIyObAAAAVwAAADUAAAAfAAAADwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEAxpHMiazbk88/3ZU + QP5YPi/+hF9I/q5+Yf9fRDT+JhoT/gYEAncAAAAJAAAADQAAABQQCwhMdlRB35ZsU/9jRzb+PCsg/qV4 + XP/boX3+1Zp3/q5+Yf81JRz+GxkX0GxsbMWjo6Pm3d3d/P7+/v7+/v7+/v7+/9zX1f2EZFL8onVZ/4hi + S/45KB7+FQwH/4eGhfn+/v7+//////7+/v7+/v7+//////7+/v79/f3+/v7+//7+/v7+/v7+/v7+/v7+ + /v/+/v7+/v7+/v/////+/v7+/v7+/o6OjtoCAwJwAAAASgAAACoAAAAXAAAACgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAIBARAsHxegX0Mz/1c+L/47KR/+UDkr/lA5K/8wIRn+Fg8L5wAAABEAAAACAAAABAAA + AAgbEw9afltF6YhiTP9WPi/+Vj4v/rWDZf/an3v+1Zp3/pxwV/8oHBX9BQMClQICAmwRERGGMDAwoo+J + hurf2db7+/r6/t7Z1v2KaFT7vo1s/8mUc/5hRTX+GQ8J/4eGhvn+/v7+//////7+/v7+/v7+//////39 + /f79/f3+7Ovp/rKsqvuysK777+/v/v7+/v/+/v7+/v7+/v/////+/v7+/v7+/iopKqoAAABbAAAAPgAA + ACEAAAAQAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERDAltNSUb9DIjGv8wIhn/MSIZ/yod + Fv8bEw3nBAMCSgAAAAAAAAAAAAAAAAAAAAEhFxJjgFtG8IRfSf9mSjn/gl1I/7KAY//Vmnf/05l2/2ZJ + OP8WDwvlAgEBXAAAAEMAAABPAAAAXWhINve9i239noJw95SDefiXb1j936yG/9WbeP9/W0b/HREL/5eW + lvn///////////////////////////r7+v/NxcH9lHZl/XJQO/8qHBT/PTc1++bm5v7///////////// + ///+/v7/rq2u8gAAAG4AAABMAAAAMQAAABgAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAADAgEeFw8LpycbFP4qHRb+KBwU/hoSDdsIBQRhAAAACgAAAAAAAAAAAAAAAAAAAAAeFRBiflpF8HVU + QP9mSTj+hmBK/qp6Xv/Wm3f+soFj/jUlHP4OCQerAAAALwAAACkAAAAyAwMBVIdiS/3Ai2v+kWhP/2JG + Nf6me1/+57OK/9CWdP6EX0n+IBUP/7W1tfv+/v7+/v7+//7+/v7+/v7+/////+zs6/6ei3/8lGlR/n5a + Rf4yIxr+EwoF/oeGhfv+/v7+/v7+/v/////19fX+U1NTvwAAAF4AAABAAAAAJwAAABIAAAAHAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEBHAwIBmsRCwmXDQkHegMCAS4AAAAHAAAAAAAA + AAAAAAAAAAAAAAAAAAAUDgtYbk4863NSP/9/W0X+aUo4/p9zWf/Ai2v+aEo4/h8VEO8GBANoAAAAEQAA + ABYAAAAcDgkHWpBoUP6ZblX+Uzwu/1k/MP69jW3+5ayF/86Vc/5/W0b+IBcS/np5eubh4eH8/v7+//7+ + /v7+/v7+/v7+/+Ph4PyLc2X6mGxT/5VqUv5FMSX+GQ8J/m1ra/v+/v7+/v7+/v7+/v++vr7zICAgkQAA + AFEAAAA1AAAAHwAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBAMuPCog1mZJN/9dQjL/Pywh/1k/ + L/9QOSv/Lh8X/w8KB6sAAAANAAAABAAAAAcAAAAKHBQPcJJpUf+FX0r/PSsh/31ZRP/OmXb/3qF9/8mR + b/9lSDj/Ew0K7QAAAGcGBgaFMzMzt66qp/br5eL89PLx/uPg3/yOdGT5qnpe/9+mgP9+WkX/IhUO/2xq + aPz//////v7+//f39/51dXXHAgICbAAAAEIAAAApAAAAFgAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAABAAAJHRQPqT8sIf85Jx3+MyMa/jQkG/8tHxf+HBMO5gIBAS8AAAAAAAAAAAAAAAEAAAADIRcSeY9n + T/55V0P+SzYp/5puVf7PlnT+2Jx5/7qGZ/5FMSX+CwcFtwAAAEkAAABWAAAAZF1FN/C2j3j6sZuO/Kmh + nfeLa1r6x5Z0/+uziv6ccFb+KRsS/nVzcvr+/v7+/v7+/tXV1fMsLCyeAAAAWAAAADYAAAAgAAAADwAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQCKyMYEu4rHhb+LR8X/iodFv8cEw7hBwQDVQAA + AAAAAAAAAAAAAAAAAAAAAAAAHBQPdoZgSv5XPi/+YUU1/51wVv7Fjm7+2Jx5/45mTv4pHBX7BgQDcAAA + AC8AAAA5AQEAVntYRP22gmX+h2JL/kQ0KvyKZE3+4bSL/+Gngv6kdlv+LR0U/oiHhvj+/v7+/v7+/pyb + nN0EBARuAAAASAAAACsAAAAYAAAACwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIB + AR4NCQeHEgwJrQsIBXoCAQEbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwoHW1k/MP9TOy3/fFlE/3JR + Pv+xf2L/soBj/0AtIv8VDgrIAQEBMQAAABcAAAAeCgcFWYpjTP+LZE3/QS4k/zooH/+pfWD/7b2S/9eb + d/+ab1b/JxkS/4GAgOLa2tr18PDw/SoqKpsAAABNAAAANgAAAB4AAAAQAAAABgAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAABgQDKj4rIP1UPC3+WkAw/0o0Jv5qTDr+VDst/yQZE/QKBwV4AAAACwAAAAoAAAAOEw0KZItk + Tf6BXUf+MSMa/15DM/7Dk3L+7LSL/9KXdP6GYEr+IRcR+w0NDYA2NjaWZGRkrQMCA1UAAAA5AAAAJwAA + ABUAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABScbFdo9KyD+Oyke/zYlHP42Jhz+LyAY/xUO + CsQBAAAcAAAAAQAAAAMAAAAEFQ8Ma4liS/5sTTz+LiEY/4tjTf7RnHn+4aaA/8qRcP5mSTj+Fg8L4wAA + AEMAAABDAQEBQwAAADQAAAAmAAAAGQAAAA0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkG + BEMiGBLeKh0W/SseFv8nGxT4GBAMzgEBAB0AAAAAAAAAAAAAAAAAAAAAEAoIX2ZJOP9CLiP/Uzst/6Bz + WP/LknD/2p16/6R3W/83Jx39CQYEiAAAACQAAAAmAAAAIwAAABwAAAAUAAAADQAAAAcAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUHBQNDEQwJjxQOCp8NCQd8AwIBJgAAAAAAAAAAAAAAAAAA + AAAAAAAACQYEPUIvI/5HMib+dVM//4BbRv6sfGD+wYts/1pAMf4eFA/iBAICQwAAABMAAAATAAAAEgAA + AA8AAAAKAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQEB + AA8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAEjMjGvhLNSj+XEEx/083Kf5pSzn+YUU1/ywf + F/0PCgeXAAAAEgAAAAgAAAAHAAAABwAAAAYAAAADAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkR + DJs1JRz8OScd/zUlG/8zIxr/LR8X/xcQDL8CAQElAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUDAigcEw66Kh0V+iseFv4nGxT8GhINzAQCAjoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgEkDwoHjxcQ + DNAQCgiWBAMCMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //wAD/////////////gAA/////////////gAAP////////////AAAD////////////AAAA////////// + //AAAAP//////////+AAAAD//////////+AAAAA//////////8AAAAAf/////////8AAAAAD//////// + /8AAAAAB/////////4AAAAAAf////////4AAAAAAD////////wAAAAAAB////////wAAAAAAAf////// + /wAAAAAAAH///////gAAAAAAAB///////gAAAAAAAAf//////AAAAAAAAAH//////AAAAAAAAAB///// + +AAAAAAAAAAf////+AAAAAAAAAAH////8AAAAAAAAAAB////8AAAAAAAAAAA////8AAAAAAAAAAAf/// + 4AAAAAAAAAAAf///4AAAAAAAAAAAP///wAAAAAAAAAAAP///wAAAAAAAAAAAP///wAAAAAAAAAAAP/// + gAAAAAAAAAAAP///gAAAAAAAAAAAP///AAAAAAAAAAAAP///AAAAAAAAAAAAP//+AAAAAAAAAAAAf//+ + AAAAAAAAAAAAf//+AAAAAAAAAAAA///8AAAAAAAAAAAA///8AAAAAAAAAAAB///4AAAAAAAAAAAB///4 + AAAAAAAAAAAB///wAAAAAAAAAAAD///wAAAAAAAAAAAD///wAAAAAAAAAAAH///gAAAAAAAAAAAH///g + AAAAAAAAAAAP///AAAAAAAAAAAAP///AAAAAAAAAAAAP///AAAAAAAAAAAAf//+AAAAAAAAAAAAf//+A + AAAAAAAAAAA///8AAAAAAAAAAAA///8AAAAAAAAAAAA///8AAAAAAAAAAAB///4AAAAAAAAAAAB///wA + AAAAAAAAAAD///wAAAAAAAAAAAD///wAAAAAAAAAAAH///gAAAAAAAAAAAH///gAAAAAAAAAAAP///AA + AAAAAAAAAAP///AAAAAAAAAAAAP///AAAAAAAAAAAAf//+AAAAAAAAAAAAf//+AAAAAAAAAAAA///+AA + AAAAAAAAAA///8AAAAAAAAAAAB///8AAAAAAAAAAAB///8AAAAAAAAAAAB///8AAAAAAAAAAAD///8AA + AAAAAAAAAD///8AAAAAAAAAAAH///+AAAAAAAAAAAH///+AAAAAAAAAAAH////AAAAAAAAAAAP////gA + AAAAAAAAAP////4AAAAAAAAAAf////+AAAAAAAAAAf////+AAAAAAAAAA/////+AAAAAAAAAA/////+A + AAAAAAAAB/////+AOAAAAAAAB//////APAAAAAAAB//////gfAAAAAAAD////////AAAAAAAD/////// + /AGAAAAAH////////gPgAAAAH////////wfgAAAAH//////////gAAAAP//////////gAAAAP/////// + ///wHgAAf//////////wPgAA///////////8fgAA/////////////wDf/////////////wH///////// + /////wP//////ygAAACAAAAAAAEAAAEAIAAAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAHAAAACwAAAA8AAAAUAAAAGQAA + ABsAAAAdAAAAHAAAABoAAAAWAAAAEgAAAA4AAAAKAAAABwAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAADAAAABwAAAAwAAAASAAAAGQAAACAAAAAmAAAAKwAAAC0AAAAtAAAAKgAAACYAAAAgAAAAGgAA + ABQAAAAOAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAKAAAAEgAAABoAAAAlAAAALwAA + ADgAAAA+AAAAQgAAAEIAAAA+AAAAOQAAADIAAAAqAAAAIgAAABoAAAAUAAAADgAAAAoAAAAGAAAABAAA + AAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAADAAAACQAAABAAAAAaAAAAJgAAADMAAABCAAAATQAAAFYAAABaAAAAWgAAAFcAAABRAAAARwAA + AD4AAAAzAAAAKgAAACIAAAAaAAAAEwAAAA4AAAAKAAAABgAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAMAAAAFgAAACIAAAAyAAAAQgAA + AFQAAABiAAAAbQAAAHIAAAB0AAAAcQAAAGoAAABfAAAAVAAAAEkAAAA+AAAAMwAAACoAAAAhAAAAGgAA + ABMAAAAOAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADAAAACAAAABEAAAAdAAAALAAAAD4AAABSAAAAZgAAAHYAAACCAAAAiQAAAIsAAACJAAAAggAA + AHgAAABtAAAAYQAAAFUAAABJAAAAPgAAADIAAAAqAAAAIQAAABoAAAATAAAADgAAAAoAAAAGAAAABAAA + AAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAALAAAAFgAAACQAAAA2AAAASgAA + AGEAAAB2AAAAhwAAAJQAAACcAAAAnwAAAJ4AAACXAAAAjgAAAIQAAAB5AAAAbQAAAGAAAABUAAAASAAA + AD0AAAAyAAAAKQAAACAAAAAZAAAAEgAAAA0AAAAJAAAABgAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAABwAAAA8AAAAbAAAALAAAAEAAAABWAAAAbgAAAIQAAACWAAAAowEBAbUNDg3JAAAArgAA + AKoAAACiAAAAmgAAAI8AAACEAAAAeAAAAGwAAABgAAAAUwAAAEcAAAA8AAAAMgAAACgAAAAfAAAAFwAA + ABIAAAAMAAAACAAAAAUAAAACAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAKAAAAFAAAACIAAAA0AAAASgAA + AGIAAAB7AAAAkQAAAKIAAACwMDAw5P////9ubm71CQkJywAAALIAAACrAAAAogAAAJoAAACPAAAAhAAA + AHgAAABrAAAAXwAAAFIAAABGAAAAOwAAADAAAAAmAAAAHgAAABYAAAAQAAAACwAAAAcAAAAFAAAAAgAA + AAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAABgAAAA4AAAAZAAAAKQAAAD0AAABVAAAAbgAAAIYAAACbAAAArAAAALyop6j8//////// + ///3+Pf/Xl1e8wYGBsgAAACyAAAAqgAAAKIAAACZAAAAjgAAAIMAAAB3AAAAagAAAF4AAABRAAAARQAA + ADkAAAAuAAAAJQAAABwAAAAWAAAADwAAAAsAAAAHAAAABQAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAJAAAAEgAAAB8AAAAxAAAARgAA + AF8AAAB4AAAAjwAAAKMAAACyExMT2f///////////f38////////////8PDw/1BQUPAEBATGAAAAsgAA + AKoAAACiAAAAmAAAAI4AAACCAAAAdgAAAGkAAABcAAAATgAAAEIAAAA3AAAALQAAACMAAAAbAAAAFQAA + AA8AAAAKAAAABwAAAAUAAAACAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAABQAAAAwAAAAXAAAAJgAAADoAAABQAAAAagAAAIIAAACYAAAAqgAAALh2dnb3//////39 + /f////////////39/f///////////+Pj4v9FRUXsAwMDwgAAALIAAACqAAAAoQAAAJcAAACMAAAAgAAA + AHMAAABmAAAAWQAAAE0AAABBAAAANgAAACsAAAAiAAAAGwAAABUAAAAPAAAACgAAAAcAAAAEAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAAEAAAAB0AAAAuAAAAQgAA + AFoAAAB0AAAAiwAAAKAAAACwBwcHzfb19v/////////////////////////////////8/fz///////// + ///Y19j+ODg46QEBAcAAAACxAAAAqQAAAKAAAACWAAAAigAAAH4AAABxAAAAZAAAAFcAAABLAAAAPwAA + ADUAAAArAAAAIgAAABoAAAAUAAAADgAAAAoAAAAHAAAABAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABAAAAAoAAAAVAAAAIwAAADYAAABNAAAAZQAAAH4AAACVAAAApwAAALZISEju//////39 + /f/////////////////////////////////9/f3//f39////////////ysvK/jAwMOUBAQG9AAAAsAAA + AKcAAACeAAAAkwAAAIgAAAB8AAAAbwAAAGIAAABWAAAASgAAAD4AAAA0AAAAKgAAACIAAAAaAAAAFAAA + AA4AAAAKAAAABgAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADgAAABoAAAArAAAAPwAA + AFYAAABwAAAAiAAAAJ0AAACuAQEBws3NzP7///////////////////////////////////////////// + /////////f39//z9/P///////////729vf0mJybhAAAAugAAAK4AAACmAAAAnAAAAJIAAACGAAAAegAA + AG4AAABiAAAAVgAAAEoAAAA+AAAANAAAACoAAAAiAAAAGgAAABQAAAAOAAAACgAAAAYAAAAEAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAwAAAAoAAAATAAAAIQAAADMAAABJAAAAYgAAAHoAAACSAAAApQAAALQlJSXj//////39 + /f////////////////////////////////////////////////////////////39/f/9/f3///////// + //+trq39Hx8f3QAAALcAAACtAAAApQAAAJsAAACRAAAAhgAAAHoAAABuAAAAYgAAAFUAAABKAAAAPgAA + ADMAAAAqAAAAIgAAABoAAAATAAAADgAAAAoAAAAGAAAABAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADQAAABkAAAAoAAAAPAAA + AFMAAABsAAAAhAAAAJoAAACsAAAAu5ycnPv//////fz9//////////////////////////////////// + ///////////////////////////////////9/f3/////////////////oJ+g+xgYGNkAAAC0AAAArAAA + AKQAAACaAAAAkAAAAIYAAAB6AAAAbgAAAGEAAABVAAAASQAAAD4AAAAzAAAAKgAAACEAAAAaAAAAEwAA + AA4AAAAKAAAABgAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAwAAAAgAAAASAAAAHgAAADAAAABGAAAAXgAAAHYAAACOAAAAogAAALIPDw/W//////// + //////////////////////////////////////////////////////////////////////////////// + /////////f39/////////////////4+Pj/oSEhLVAAAAswAAAKwAAACjAAAAmgAAAJAAAACFAAAAeQAA + AG0AAABhAAAAVAAAAEgAAAA9AAAAMgAAACkAAAAhAAAAGgAAABMAAAAOAAAACgAAAAYAAAADAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADAAAABYAAAAmAAAAOQAA + AE8AAABpAAAAgQAAAJcAAACqAAAAt2pqavb//////f38//////////////////////////////////// + //////////////////////////////////////////////////////////////38/f////////////// + //+BgYH4Dg4O0QAAALIAAACrAAAAowAAAJoAAACPAAAAhAAAAHkAAABsAAAAYAAAAFQAAABIAAAAPQAA + ADIAAAApAAAAIAAAABkAAAASAAAADQAAAAkAAAAGAAAAAwAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAcAAAAQAAAAHQAAAC4AAABCAAAAWgAAAHMAAACLAAAAnwAAALAFBQXK7Ozs//// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////9/f3/////////////////c3Ny9gsLC80AAACyAAAAqwAA + AKMAAACaAAAAjwAAAIQAAAB4AAAAbAAAAF8AAABTAAAARwAAADwAAAAyAAAAKAAAAB8AAAAXAAAAEQAA + AAwAAAAIAAAABQAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACgAAABUAAAAjAAAANgAA + AEwAAABlAAAAfgAAAJQAAACnAAAAtj49Puz//////fz9//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////fz9/////////////////2RkZPQHBwfLAAAAsgAAAKsAAACiAAAAmQAAAI4AAACDAAAAdwAA + AGsAAABeAAAAUgAAAEYAAAA6AAAAMAAAACYAAAAeAAAAFgAAABAAAAALAAAABwAAAAUAAAACAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAYAAAAOAAAAGgAAACoAAAA/AAAAVgAAAG8AAACHAAAAnQAAAK4BAQHAwcLB/v// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////39/f////////////Pz + 8/9XV1fxBQUFxwAAALIAAACqAAAAogAAAJkAAACOAAAAgwAAAHYAAABqAAAAXgAAAFEAAABEAAAAOQAA + AC4AAAAlAAAAHAAAABUAAAAPAAAACgAAAAcAAAAFAAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAACgAAABMAAAAhAAAAMgAA + AEkAAABhAAAAegAAAJEAAACkAAAAtB0eHd////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////9/P3////////////p6un/SkpK7gMDA8QAAACyAAAAqgAA + AKIAAACYAAAAjgAAAIIAAAB2AAAAaQAAAFsAAABOAAAAQgAAADYAAAAsAAAAIwAAABsAAAAVAAAADwAA + AAoAAAAHAAAABAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAYAAAANAAAAGAAAACgAAAA8AAAAUwAAAGwAAACEAAAAmgAAAKsAAAC6jo6O+v// + ///9/f3///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////f39////////////3t3e/z8/P+sCAgLBAAAAsgAAAKoAAAChAAAAlwAAAIwAAACAAAAAcwAA + AGYAAABZAAAATAAAAEAAAAA1AAAAKwAAACIAAAAbAAAAFAAAAA8AAAAKAAAABwAAAAQAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACAAAABIAAAAeAAAAMAAA + AEUAAABeAAAAdgAAAI4AAACiAAAAsgwMDNT///////////////////////////////////////////// + /////v////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////38/f///////////9HR + 0f40NDTnAQEBvwAAALEAAACpAAAAnwAAAJUAAACKAAAAfgAAAHEAAABkAAAAVwAAAEoAAAA/AAAANAAA + ACoAAAAiAAAAGgAAABQAAAAOAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAUAAAALAAAAFgAAACYAAAA4AAAATwAAAGgAAACBAAAAlgAAAKkAAAC3Xl9e8/// + ///9/f3////////////////////////////////////////////x8fH/+/z7///////9/v7//fz9//7/ + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////39/f/9/f3////////////ExMT+Kisq5AAAALsAAACvAAAApwAA + AJ4AAACTAAAAhwAAAHsAAABvAAAAYgAAAFYAAABKAAAAPgAAADQAAAAqAAAAIgAAABoAAAAUAAAADgAA + AAoAAAAGAAAABAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAAAA8AAAAcAAAALQAA + AEIAAABaAAAAcgAAAIoAAACfAAAArwMDA8jj4uP///////////////////////////////////////// + /////////v3+/52enf+Yl5j/ycnI/+bm5v/r7Ov/7e3u//T19P/6+vr//v/+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///9/f3//fz9////////////tLW1/SMjI98AAAC5AAAArgAAAKYAAACcAAAAkgAAAIYAAAB6AAAAbgAA + AGIAAABWAAAASgAAAD4AAAA0AAAAKgAAACIAAAAaAAAAEwAAAA4AAAAKAAAABgAAAAQAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAQAAAAKAAAAFAAAACIAAAA1AAAASwAAAGQAAAB9AAAAkwAAAKYAAAC2NDQ06f// + ///9/f3////////////////////////////////////////////h4eH/f35//3p7ev98e3z/i4yL/6en + p//BwsH/09LT/9zd3P/u7u7/+fn5///+//////////////////////////////////////////////// + /////////////////////////////////////////////////////////f39//39/f///////////6em + p/wbGxvbAAAAtgAAAK0AAACkAAAAmwAAAJEAAACGAAAAegAAAG4AAABhAAAAVQAAAEkAAAA+AAAAMwAA + ACoAAAAhAAAAGgAAABMAAAAOAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAA4AAAAaAAAAKgAA + AD4AAABVAAAAbgAAAIYAAACcAAAArQAAAL61trX9//////39/f////////////////////////////// + /////////////7Oys/95enn/f39//39/f/99fH3/e3x7/4SDhP+YmJj/sbGx/8vLyv/c3Nz/7e3t//j4 + +P/+/v7///////////////////////////////////////////////////////////////////////// + //////////////////////////////39/P////////////////+YmJj7FRUV1wAAALQAAACsAAAApAAA + AJoAAACQAAAAhQAAAHoAAABtAAAAYQAAAFUAAABJAAAAPgAAADIAAAAqAAAAIQAAABoAAAATAAAADgAA + AAoAAAAGAAAABAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAMAAAAJAAAAEgAAACAAAAAyAAAARwAAAF8AAAB5AAAAkAAAAKMAAACzGRkZ3P// + ///////////////////////////////////////////////////08/T/jIyM/318ff9/gH//f3+A/39/ + f/+Af3//fn5+/318ff+AgYD/k5OT/66urv/Kycr/3N3c/+3s7f/3+Pf//v7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///9/f3/////////////////iYiJ+RAQENIAAACzAAAArAAAAKMAAACaAAAAkAAAAIUAAAB5AAAAbQAA + AGAAAABUAAAASAAAAD0AAAAyAAAAKQAAACAAAAAZAAAAEgAAAA0AAAAJAAAABgAAAAMAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABQAAAAwAAAAXAAAAJgAA + ADoAAABRAAAAagAAAIIAAACZAAAAqgAAALiDg4P5//////39/f////////////////////////////// + /////////////8nJyf95eXn/f39//39/f/9/f3//f39//39/f/9/f3//f39//39+f/98fXz/fn5+/42N + jf+qqan/xsfG/93c3f/s7Ov/9/b3//3+/f////////////////////////////////////////////// + /////////////////////////////////////////////////////////P39/////////////////3h5 + ePcLCwvQAAAAsgAAAKsAAACjAAAAmgAAAI8AAACEAAAAeAAAAGwAAABgAAAAUwAAAEcAAAA8AAAAMgAA + ACgAAAAfAAAAFwAAABIAAAAMAAAACAAAAAUAAAACAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAHAAAAEAAAAB0AAAAuAAAAQwAAAFsAAAB0AAAAjAAAAKAAAACxCQkJ0P// + ////////////////////////////////////////////////////////ubm5/35+fv96enr/fX59/4B/ + gP9/gH//f3+A/39/f/+Af3//f4B//39/gP9/f3//fX19/3x9fP+JiIn/o6Sk/8LCwv/c3Nv/7Ovs//b2 + 9v/9/f3///////////////////////////////////////////////////////////////////////// + //////////////////////////////39/f////////////////9tbW31CQkJzAAAALIAAACrAAAAogAA + AJoAAACPAAAAhAAAAHgAAABrAAAAXwAAAFIAAABGAAAAOgAAADAAAAAmAAAAHgAAABYAAAAPAAAACgAA + AAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAoAAAAWAAAAJAAA + ADYAAABNAAAAZgAAAH4AAACVAAAAqAAAALZSU1Lx//////z9/P////////////////////////////// + ///////////////////+//7/4+Pj/7CwsP+Ih4f/eXp5/3x8fP9/f3//f39//39/f/9/f3//f39//39/ + f/9/f3//f39//319ff98e3z/g4SD/52cnf+7vLv/2tra/+zt7P/29vb//Pz8//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///8/fz////////////39/j/XV5d8wYGBsgAAACyAAAAqgAAAKIAAACZAAAAjgAAAIMAAAB3AAAAagAA + AF4AAABRAAAARAAAADgAAAAtAAAAIwAAABoAAAASAAAADAAAAAcAAAAEAAAAAgAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAGAAAADgAAABsAAAArAAAAQAAAAFcAAABwAAAAiAAAAJ4AAACuAwMDxdjX + 2P7//////////////////////////////////////////////////////////////////////////+7v + 7v++vr//kJGQ/3t6e/97e3v/f35//39/f/+Af3//f4B//39/gP9/f3//f39//3+Af/9+fn7/e3x8/4CA + gP+Wlpb/uLe4/9fY1//t7O3/9/f2//z8/P////////////////////////////////////////////// + /////////////////////////////////////////////////////////f39////////////8PDw/1BQ + UPAEBATGAAAAsgAAAKoAAACiAAAAmAAAAI4AAACCAAAAdgAAAGkAAABbAAAATgAAAEAAAAAzAAAAJwAA + AB0AAAAUAAAADQAAAAcAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAoAAAATAAAAIgAA + ADMAAABKAAAAYgAAAHoAAACSAAAApQAAALQsKyzm//////38/f////////////////////////////// + ///////////////////////////////////////////////////49/j/ycrK/5ubm/9+fn7/enp6/31+ + fv9/f3//f39//39/f/9/f3//f39//39/f/9/f3//fn9+/3x8fP99fX3/j4+P/7Gxsf/T09T/7e3s//j3 + 9//7/Pv///////////////////////////////////////////////////////////////////////// + //////////////////////////////z9/P///////////+Pi4/9FRUXsAwMDwgAAALIAAACqAAAAoQAA + AJcAAACMAAAAgAAAAHIAAABkAAAAVQAAAEYAAAA3AAAAKgAAAB0AAAATAAAADAAAAAYAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAGAAAADgAAABkAAAApAAAAPAAAAFQAAABtAAAAhQAAAJoAAACsAAAAvaeo + p/z//////f39//////////////////////////////////////////////////////////////////// + /////////////////////////v/+/9fX1/+mp6b/hIOE/3l6ef99fX3/f4B//39/gP9/f3//gH9//3+A + f/9/f4D/f39//39/f/99fXz/fHx8/4mJif+qqqr/z8/O/+3t7f/5+fn//Pz8//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///9/f3////////////X2Nf+ODg46QEBAcAAAACxAAAAqQAAAKAAAACWAAAAiQAAAHoAAABqAAAAWgAA + AEgAAAA3AAAAJwAAABoAAAARAAAACQAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAkAAAASAAAAHwAA + ADEAAABGAAAAXgAAAHcAAACOAAAAogAAALITExPZ//////////////////////////////////////// + /////////////////////////////////////////////////////////////////v////////////// + ///i4+L/s7Kz/4qLiv96eXr/e3x7/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//fX19/3p7 + e/+EhIT/oqKi/8nJyf/s7Oz/+/v7//39/P////////////////////////////////////////////// + ///////////////////////////////////////////////////9/f3//P38////////////ysrK/jAw + MOUBAQG9AAAAsAAAAKcAAACcAAAAjgAAAH4AAABsAAAAWgAAAEYAAAAyAAAAIgAAABYAAAAMAAAABgAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAFAAAADAAAABcAAAAmAAAAOQAAAFAAAABpAAAAggAAAJcAAACqAAAAuHZ1 + dff//////f39//////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////7u3u/7/Av/+VlJT/fHx8/3t7 + e/9+f37/gH9//3+Af/9/f3//f39//4B/f/9/gH//f3+A/35+fv97e3v/f4B//5uam//ExMT/6+rr//3+ + /f/+/v7///////////////////////////////////////////////////////////////////////// + /////////////////////////f39//39/f///////////729vf0nJyfhAAAAuQAAAKsAAACeAAAAjgAA + AHwAAABnAAAAUgAAADsAAAApAAAAGgAAAA8AAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAcAAAAQAAAAHQAA + AC4AAABCAAAAWgAAAHMAAACLAAAAoAAAALAHBwfM9fb1//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////X29f/My8z/np+e/4CAgP95enn/fX1+/39/f/9/f3//f39//39/ + f/9/f3//f39//39/f/9+fn//e3t7/318fP+RkpH/vLu8/+bm5f/+/v7////////+//////////////// + //////////////////////////////////////////////////////////////////////////////39 + /f/9/f3///////////+ura39ICAg2wAAAK0AAACaAAAAhwAAAHIAAABaAAAAQgAAAC4AAAAeAAAAEQAA + AAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAEAAAACgAAABUAAAAjAAAANgAAAEwAAABlAAAAfgAAAJQAAACnAAAAtkdH + R+7//////f39//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///9/P3/2NjY/6qqqv+Ghob/enl6/3x9fP9/f4D/f39//4B/f/9/gH//f3+A/39/f/+Af3//f39//3x8 + ff96e3v/ioqK/7Kzsv/f39///f39//////////////////////////////////////////////////// + ///////////////////////////////////////////////////9/f3/////////////////oqOj+h0d + HcwAAACRAAAAeQAAAGAAAABGAAAAMQAAAB8AAAASAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAAAAGgAA + ACsAAAA/AAAAVgAAAHAAAACIAAAAnQAAAK4BAQHCzczN/v////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+Pi4/+2t7b/j46P/3p7 + ev97e3v/fn9+/39/f/9/f3//f39//39/f/9/f3//f39//39/f/98fX3/enl6/4SEg/+npqb/1dbV//r6 + +/////////////////////////////////////////////////////////////////////////////// + /////////////////////////fz9/////////////////6CfoPcTExOhAAAAYQAAAEcAAAAxAAAAHwAA + ABIAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAADAAAACgAAABMAAAAhAAAAMwAAAEkAAABiAAAAegAAAJIAAAClAAAAtCUl + JeL//////f39//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////u7+7/xMTE/5qbmv9+fn7/enp6/359fv9/gH//f39//39/ + f/9/f3//f39//39/f/9/f3//fn1+/3p7ev9/f3//nJyc/8zMzP/29/b///////////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v///////////ywrLLgAAABeAAAARQAAAC8AAAAeAAAAEQAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAANAAAAGQAA + ACgAAAA8AAAAUwAAAGwAAACEAAAAmgAAAKwAAAC7m5ub+//////9/f3///////////////////////// + //////////////7///////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////Pv8/9fX1/+op6j/hIWE/3l5ef98fXz/f39//39/f/9/f3//f39//39/f/9/f3//f39//35+ + fv97e3v/e3x7/5KSk//BwcH/8PDw//////////////////////////////////////////////////// + /////////////////////////////////////////v7+//////+5uLn6AQEBegAAAFkAAABAAAAAKwAA + ABoAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAADAAAACAAAABIAAAAeAAAAMAAAAEYAAABeAAAAdgAAAI4AAACiAAAAsg4P + Dtb//////////////////////////////////////////////////////////8nJyf+7u7v/7e3s//z8 + /P/6+/r/+vn6//3+/f////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////q6ur/uLm5/4yM + jP96enr/fHt8/39/f/+Af3//f4B//39/gP9/f3//f39//3+Af/9/f3//fHx8/3p6ev+Kior/tLS0/+Pj + 4//8+/z//f39//v7+//7/Pv//fz9//7//v////////////////////////////////////////////// + ///+/v7//////0JCQs4AAABqAAAAUQAAADoAAAAmAAAAFgAAAAwAAAAFAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAMAAAAFgAA + ACYAAAA5AAAATwAAAGkAAACBAAAAlwAAAKoAAAC3aWhp9f/////9/P3///////////////////////// + ///////////////////6+vr/k5OT/3R1dP+CgoL/nJyc/8LCwv/e3t7/7Ovs//X19f/7+/v///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+////////////////////8/Tz/8jIyP+Wl5b/fHx8/3p6ev9+fn7/f39//39/ + f/9/f3//f39//39/f/9/f3//f39//318ff95enn/g4KD/6Giof/Kysr/4+Pj/+jo6P/p6un/7+/v//j4 + 9//8/Pz////////////////////////////////////////////f4N/+BgYGjQAAAGAAAABIAAAAMgAA + ACAAAAASAAAACQAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAABwAAABAAAAAdAAAALgAAAEIAAABaAAAAcwAAAIoAAACfAAAAsAUF + Bcrs7Oz//////////////////////////////////////////////////////9ra2v99fX3/f3+A/35+ + fv97enr/ent6/4qKiv+pqan/zs7O/+jo5//19fX/+vv6//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////z7/P/X19f/o6Oj/4GBgf96eXr/fX19/39/gP9/f3//f39//39/f/9/f3//f39//39/ + f/9+fn7/e3t7/35+fv+TkpP/sbKx/8rKy//W19b/397f/+rr6v/5+Pn///////////////////////// + ///+/v7//////2ppauUAAABvAAAAVgAAAD4AAAAqAAAAGgAAAA4AAAAGAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAKAAAAFQAA + ACMAAAA2AAAATAAAAGUAAAB+AAAAlAAAAKcAAAC2PT097P/////8/fz///////////////////////// + ////////////////////////qquq/3p6ev9/f3//f39//3+Af/9/f3//fH18/3l5ef+Dg4P/oJ+g/8bG + xv/m5ub/9fX1//r6+v////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////5OTk/7Gx + sf+Ih4j/eXl5/3x8fP9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f35//3x8fP98fH3/iYmJ/6am + pv/ExMT/397f/+rq6v/6+vr/////////////////////////////////ERIRowAAAGQAAABMAAAANgAA + ACMAAAAVAAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAA4AAAAaAAAAKgAAAD8AAABWAAAAbwAAAIcAAACdAAAArgEB + AcC/v7/+/////////////////////////////////////////////////////+zt7P+Hh4f/fX59/4B/ + gP9/gH//gH+A/3+Af/+Af4D/gICA/35+fv95enn/fn5+/5iYmP+9vb3/4uLi//f29//7+/r///7///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+/v7//BwMH/kZGR/3t7e/97e3v/f35//3+A + f/9/f3//f39//39/f/9/f3//f39//39/f/9+fX3/e3x7/4WFhv+pqqr/4N/g//b29f////////////// + ///+/v7//////5WVlfMAAAByAAAAWgAAAEIAAAAtAAAAHAAAABAAAAAHAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAKAAAAEwAA + ACEAAAAyAAAASQAAAGEAAAB6AAAAkQAAAKQAAAC0HR0d3/////////////////////////////////// + ////////////////////////zMvM/3d3dv97env/fn9+/39/f/9/f3//f39//39/f/9/f3//f39//4B/ + gP9+f37/e3p7/3t7e/+Pjo7/sbKx/9va2//29vb/+/v7//3+/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////49/j/z9DP/52cnf9+fn7/enl6/31+ff9/f3//fn9//39+f/9/f37/f39//35/ + f/9/f3//enp6/5WVlf/i4+L/9/f3//7//v//////////////////////JiYmuwAAAGgAAABPAAAAOQAA + ACYAAAAWAAAACwAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAA0AAAAYAAAAKAAAADwAAABTAAAAbAAAAIQAAACaAAAAqwAA + ALqOjo76//////39/f/////////////////////////////////////////////////29vb/0tLS/6Ch + oP+AgIH/eXp6/359ff9/gH//gH+A/39/f/+Af3//f4B//39/gP9/gH//gH9//3x9fP95eHn/hYaF/6in + qP/S09L/9fX1//z8/P/+/f7///////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v/+/97e + 3v+qq6r/hYSE/3l6ef99fH3/f39//39/f/9/f3//f39//35/fv9+fn7/wcLB/+zs7P/7+/v///////// + ///+/v7//////8HAwfsBAQGAAAAAXgAAAEUAAAAwAAAAHgAAABIAAAAIAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAIAAAAEgAA + AB4AAAAwAAAARQAAAF4AAAB2AAAAjgAAAKIAAACyCwsL0v////////////////////////////////// + ///////////////////////////+/////////////////+Lj4v+xsLH/iImI/3p5ev97fHv/f39//39/ + f/9/f3//f39//39/f/9/f3//f39//3+Af/9+fX3/eXl5/39/f/+cnJz/yMfI//Hx8f/+/f7//v7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7////////////////////q6ur/ubm5/4yMjP96enr/e3t7/39+ + f/9/f3//fHt7/5eYl//l5OX/9vb2///+/v////////////7+/f//////SEhI1AAAAGwAAABTAAAAOwAA + ACgAAAAYAAAADQAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAsAAAAWAAAAJgAAADgAAABPAAAAaAAAAIEAAACWAAAAqQAA + ALdfXl/z//////39/f////////////////////////////////////////////////////////////// + ///////////////////x8PH/wcHB/5WUlf98fXz/e3p7/35+fv+Af4D/f4B//4B/gP9/gH//gH+A/3+A + f/+AgID/fn9+/3t6ev97fHv/k5OT/76/vv/s7Oz///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////9fT0/8fHx/+Xl5f/fHx8/3p5ev99fn3/zs7O//n5+f/+/v7///////// + /////////////+bm5v4HBgeRAAAAYQAAAEkAAAAyAAAAIQAAABMAAAAKAAAAAwAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAADwAA + ABwAAAAtAAAAQgAAAFoAAAByAAAAigAAAJ8AAACvAwMDx+Li4v////////////////////////////// + ////////////////////////////////////////////////////////////////////////+vv6/9LS + 0v+ioqL/goKC/3l6ef99fH3/f39//39/f/9/f3//f39//39/f/9/f3//f4B//39/f/97fHv/eXh5/4qK + iv+0s7T/4+Tj//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////v8 + +//X19f/np+f/6Skpf/9/fz///////////////////////7+/v//////cnJy6AAAAG8AAABWAAAAPgAA + ACoAAAAaAAAADgAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAoAAAAUAAAAIgAAADUAAABLAAAAZAAAAH0AAACTAAAApgAA + ALY0NDTp//////39/f////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////i4+L/srKy/4uLi/96enr/e3x7/39/ + f/9/gH//gH9//3+Af/9/f4D/f39//4B/f/9/gH//fX19/3h5eP+BgYH/paWl/9jY2P/9/v3///////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////9vf3//////////////////// + //////////////////8UFBSnAAAAZQAAAEwAAAA2AAAAIwAAABUAAAAKAAAABAAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADgAA + ABoAAAAqAAAAPgAAAFUAAABuAAAAhgAAAJwAAACtAAAAvrS0tP3//////f39//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////8fHx/8LDw/+Yl5j/fX19/3p6ev99fn3/f3+A/39/f/9/f3//f39//39/ + f/9/f3//gH+A/35+fv95eXn/e3x7/5iXl//LzMv/9/b3//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7+/v//////nZ2d9QAAAHUAAABaAAAAQgAA + AC4AAAAdAAAAEAAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAkAAAASAAAAIAAAADIAAABHAAAAXwAAAHkAAACQAAAAowAA + ALMZGBnc//////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////z9 + /P/V1NX/paal/4SEhf95enn/fXx9/3+Af/+Af4D/f4B//4B/gP9/gH//f3+A/3+Af/9/f3//e3t7/3l4 + ef+MjY3/vLy8/+3t7f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8tLC2/AAAAaAAAAE8AAAA5AAAAJgAAABYAAAAMAAAABQAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAADAAA + ABcAAAAmAAAAOgAAAFEAAABqAAAAggAAAJkAAACqAAAAuIODg/n//////P39//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////7/////////////////5eXl/7a2tv+Oj47/e3p7/3t7 + e/9/fn//f39//39/f/9/f3//f39//39/f/9/f3//f39//3x8fP93eHj/g4KD/6urqv/f3t////////// + //////////7///////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////x8bH/AECAYAAAABeAAAARgAA + ADAAAAAeAAAAEgAAAAgAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAcAAAAQAAAAHQAAAC4AAABDAAAAWwAAAHQAAACMAAAAoAAA + ALEJCQnQ//////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////b29v/MzMz/nJyc/39/fv96enr/fX59/4B/gP9/gH//f3+A/39/ + f/+Af3//f4B//4B/gP99fn7/eXl5/3x9fP+ZmJn/zM3N//f39/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+//////9PUE/YAAAAbAAAAFMAAAA8AAAAKAAAABkAAAANAAAABgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACgAA + ABYAAAAkAAAANgAAAE0AAABmAAAAfgAAAJUAAACoAAAAtlNSU/H//////fz9//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v7/397f/62trP+Hhob/eXp5/3x8fP9/f3//f39//39/f/9/f3//f39//39/f/9/gH//f35//3p7 + ev94eHj/i4yL/7q6uv/s7Oz///////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////6+vr/wkJCZQAAABhAAAASQAA + ADMAAAAhAAAAEwAAAAoAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAAAAGwAAACsAAABAAAAAVwAAAHAAAACIAAAAngAA + AK4DAwPF19jX/v////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+3t7f/AwMD/kZKR/3x7 + fP97e3r/f35//3+Af/+Af3//f4B//39/gP9/f3//gH9//3+Af/99fH3/d3h4/4OCg/+pqan/3t7e//39 + /f///////v/+//////////////////////////////////////////////////////////////////// + /////////v7+//////96enrrAAAAbwAAAFYAAAA/AAAAKgAAABoAAAAOAAAABgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACgAA + ABMAAAAiAAAAMwAAAEoAAABiAAAAegAAAJIAAAClAAAAtCssK+b//////P38//////////////////// + //////////////////////////////Dw8P/p6On///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////4+Pj/0tLS/6CgoP+AgID/enl6/319ff9/f3//f39//39/ + f/9/f3//f39//39/f/+Af4D/fX59/3l5ef97fHv/lpWW/8LDwv/m5ub/9vf2//j4+P/5+fn//v7+//// + /////////////////////////////////////////////////////////////xgYGKsAAABlAAAATAAA + ADYAAAAjAAAAFQAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAAAAGQAAACkAAAA8AAAAVAAAAG0AAACFAAAAmgAA + AKwAAAC9qKeo/P/////9/f3/////////////////////////////////////////////////s7Oz/3Fy + cf+enp7/2NnY//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+Pi4/+xsrH/iYmJ/3l6ev98e3z/f39//39/gP9/f3//gH9//3+Af/9/f4D/f4B//39/ + f/97fHv/eXh5/4aGhv+ioqL/xsbG/+Tk5P/y8/P/+vr6//7//v////////////////////////////// + /////////v7+//////+lpaX3AAAAdgAAAFoAAABCAAAALgAAAB0AAAAQAAAABwAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAACQAA + ABIAAAAfAAAAMQAAAEYAAABeAAAAdwAAAI4AAACiAAAAshMTE9n///////////////////////////// + //////////////////////////////X19v+Pj47/fHt8/3V1df9xcHH/iIiH/7+/v//y8vL///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////w8PD/xMTE/5SV + lf98fHz/enp6/35+fv9/f3//f39//39/f/9/f3//f39//39/f/9/f3//fX19/3l6ef99fH3/lZaV/76+ + vv/r6+v////////////////////////////////////////////+/v7//////zIyMsMAAABpAAAAUAAA + ADkAAAAmAAAAFgAAAAwAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAUAAAAMAAAAFwAAACYAAAA5AAAAUAAAAGkAAACCAAAAlwAA + AKoAAAC4dXZ19//////9/f3/////////////////////////////////////////////////0dHR/3t7 + e/9/gH//gICB/4CAgP97env/b29v/3p6ev+nqKf/4eHh//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////+/r7/9bX1v+lpKT/goKC/3p5ev99fX3/gH9//3+A + f/9/f4D/f39//4B/f/9/gH//gH+A/35/f/97e3v/e3x7/5WUlf/MzMz//fz8//////////////////// + ///////////////////R0ND9AgIChAAAAF4AAABGAAAAMAAAAB4AAAASAAAACAAAAAMAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAA + ABAAAAAdAAAALgAAAEIAAABaAAAAcwAAAIsAAACgAAAAsAcHB8z29fX///////////////////////// + //////////////////////////////////+ioqL/ent6/39/f/9/f3//f39//3+Af/+BgIH/fX59/3Nz + c/9ycnL/kJCQ/8vLy//5+Pn///////////////7///////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////+ + ///////////////////m5ub/tba1/4yLi/95enr/e3t7/35/fv9/f3//f39//39/f/9/f3//f39//39/ + f/9/f3//d3h3/4+Ojv/4+fj////////////////////////////9/v3//////1dXV9wAAABsAAAAUwAA + ADwAAAAoAAAAGQAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAKAAAAFQAAACMAAAA2AAAATAAAAGUAAAB+AAAAlAAA + AKcAAAC2R0dH7v/////9/f3/////////////////////////////////////////////////5OTk/35+ + ff98fHz/f4B//4B/gP9/gH//gH+A/3+Af/+Af4D/gIGA/4B/gP95eXn/b25v/39/f/+ysrL/6enp//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////8/Tz/8nJ + yf+YmZj/fX19/3p6ev9+fn7/f39//39/f/9/f3//f39//39/f/97env/ycrJ//////////////////// + ///////////////////x8fH/CgoKlwAAAGIAAABJAAAAMwAAACEAAAATAAAACgAAAAMAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAA + AA4AAAAaAAAAKwAAAD8AAABWAAAAcAAAAIgAAACdAAAArgEBAcLMzcz+//////////////////////// + ///////////////////////////////////w8fD/s7Oz/4uMi/97enr/e3t7/39+f/9/f3//gH9//3+A + f/9/f4D/f39//4B/gP+AgYD/fXx9/3Fycf91dXX/mJmY/9PT0//9/v3//////////////v////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////38/P/a29v/qKio/4SEhP95eXn/fH18/39/ + f/9/f3//fHt8/5OTk//5+Pn////////////////////////////+/v7//////4GBge4AAABwAAAAVwAA + AD8AAAArAAAAGgAAAA4AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAKAAAAEwAAACEAAAAzAAAASQAAAGIAAAB6AAAAkgAA + AKUAAAC0JSUl4v/////9/f3///////////////////////////////////////////////////////// + ////////8/Pz/8vLy/+cm5z/f39//3t6ev99fn3/gH+A/3+Af/+Af4D/f4B//4B/gP9/gH//gYGB/39/ + f/93d3f/b3Bv/4aFhv+8vLv/8O/w//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////6urq/7q7uv+Pjo//ent6/3t7e/95enn/yMjI//////////////////// + ////////////////////////GxsbrgAAAGUAAABNAAAANgAAACMAAAAVAAAACgAAAAQAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAA + AA0AAAAZAAAAKAAAADwAAABTAAAAbAAAAIQAAACaAAAArAAAALubm5v7//////39/f////////////// + //////////////////////////////////////////////////////////////7+/v/f39//rq+u/4mI + if96enn/fHt8/39/f/+Af4D/f39//4B/f/9/gH//f3+A/4CAf/+BgIH/e3x7/3BvcP94eHj/oqKi/9vc + 3P////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////+//////////////////X2 + 9f/Ozc3/mZmZ/5STlP/29vb////////////////////////////+/v7//////62trPkAAAB5AAAAWgAA + AEIAAAAuAAAAHQAAABAAAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAIAAAAEgAAAB4AAAAwAAAARgAAAF4AAAB2AAAAjgAA + AKIAAACyDw4P1v////////////////////////////////////////////////////////////////// + ////////////////////////////////////////8PDw/8XFxf+XmJf/fn1+/3p7ev9+fn7/f4B//4B/ + gP9/gH//gH+A/3+Af/+Af4D/gYGB/39+f/90dXT/cnFy/4uMi//Gxcb/8/Py//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////8/Pz/7/Dw//////////////////// + //////////////7+/v//////ODg4yAAAAGkAAABQAAAAOgAAACYAAAAXAAAADAAAAAUAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAA + AAwAAAAWAAAAJgAAADkAAABPAAAAaQAAAIEAAACXAAAAqgAAALdoaWj1//////39/f////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////z7/P/a2tr/qqqq/4WGhv96eXr/fHx8/4B/f/9/gH//gH+A/3+Af/+Af4D/f4B//4GA + gf+AgID/enp6/29wb/96eXr/oKCf/9LS0v/4+fj//v3+//39/P////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////9bV1v4EBASGAAAAXgAA + AEYAAAAxAAAAHwAAABIAAAAJAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAAEAAAAB0AAAAuAAAAQgAAAFoAAABzAAAAigAA + AJ8AAACwBQUFyuzs7P////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////7Ozs/7/A + wP+Uk5T/fH18/3t7e/9+f37/gICA/4CAf/+AgID/f4CA/4B/gP+AgID/gYGB/35+fv90c3T/cXFx/4iH + iP+3t7f/6Ojo//7+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v//////Xl5e3wAAAG0AAABUAAAAPQAAACkAAAAZAAAADgAAAAYAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA + AAoAAAAVAAAAIwAAADYAAABMAAAAZQAAAH4AAACUAAAApwAAALY9PT3s//////38/f////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v////////////////////n5+f/W1db/paWk/4SDhP95enr/fXx9/39/ + f/+Af4D/f4B//4B/gP9/gH//gH+A/4CBgP+AgID/eXl5/3BvcP96enr/paWl/9vc2/////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////b39v8NDQ2bAAAAYgAA + AEoAAAAzAAAAIgAAABMAAAAKAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADgAAABoAAAAqAAAAPwAAAFYAAABvAAAAhwAA + AJ0AAACuAQEBwL+/v/7///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////6Ono/7u6u/+PkJD/fHt8/3t8e/9/f3//gICA/4B/gP+AgH//gICA/3+A + f/+AgID/gYGB/359fv9ycnL/dHR0/5SVlP/My8z/+vr6//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v//////ioqL8AAAAHAAAABXAAAAQAAAACsAAAAbAAAADgAAAAYAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAA + AAoAAAATAAAAIQAAADIAAABJAAAAYQAAAHoAAACRAAAApAAAALQdHR3f//////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////f2 + 9v/Q0dD/oKCg/4GBgf96enr/fX19/4B/gP9/gH//gH+A/3+Af/+Af4D/f4B//4GBgf9/gH//d3Z3/3Bx + cP+EhIT/ubq5//Dv8P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8gICCyAAAAZgAA + AE0AAAA2AAAAJAAAABYAAAALAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADQAAABgAAAAoAAAAPAAAAFMAAABsAAAAhAAA + AJoAAACrAAAAuo6Ojvr//////f39//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////5eTk/7W1tf+NjI3/e3t7/3x8 + fP9/gH//gICA/4CAgP+AgID/gIB//4CAgP+AgYD/gYCB/3t8e/9wcHD/eXp6/6emp//g4N////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v//////tLW0+gEBAXoAAABbAAAAQwAAAC4AAAAdAAAAEAAAAAcAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + AAgAAAASAAAAHgAAADAAAABFAAAAXgAAAHYAAACOAAAAogAAALILCwvS//////////////////////// + ////////////////////////////////////////+Pn4//Tz9P////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////+//////////////////Pz8//Ly8v/m5yb/39/f/96enr/fn1+/3+Af/+Af4D/f4B//4B/ + gP9/gH//gH+A/4GBgf9+fn7/dHR0/3Nyc/+Oj47/ycnJ//j4+P////////////////////////////// + /////////////////////////////////////////////////////////v3+//////8+Pj7NAAAAagAA + AFEAAAA6AAAAJgAAABcAAAAMAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAACwAAABYAAAAmAAAAOAAAAE8AAABoAAAAgQAA + AJYAAACpAAAAt15fXvP//////f39//////////////////////////////////////////////////// + ///Lysv/a2xr/56env/c3dz///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v//3+Df/7CvsP+Jion/e3p7/3x8fP+Af4D/gICA/4CAgP+AgID/gICA/4CAf/+BgYH/gICA/3p5 + ev9wcHD/f35//7CxsP/n5+f///////////////////////////////////////////////////////// + ////////////////////////3t3e/gUFBYwAAABfAAAARwAAADIAAAAgAAAAEgAAAAkAAAADAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAcAAAAPAAAAHAAAAC0AAABCAAAAWgAAAHIAAACKAAAAnwAAAK8DAwPH4uLi//////////////////// + /////////////////////////////////////////////5+gn/95eXn/bW1t/2ZmZv99fX3/tra2/+/v + 7v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////7///////////////////Dw8P/Gxsb/mJiY/31+ + ff97env/fn5+/4CAgP9/gID/gH+A/3+Af/+Af4D/f4CA/4GBgf99fX3/cnJy/3R1df+Xl5f/0tPS//38 + /f///////////////v///////////////////////////////////////v79//////9lZWXjAAAAbgAA + AFUAAAA+AAAAKgAAABoAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACgAAABQAAAAiAAAANQAAAEsAAABkAAAAfQAA + AJMAAACmAAAAtjQ0NOn//////f39//////////////////////////////////////////////////// + ///l5eX/goGC/39/f/+CgoL/gYGB/3h4eP9mZmb/bGts/5iYmP/Z2Nn///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////8/Pz/29vc/6urq/+Hhof/ent6/319ff9/gID/gICA/4CA + gP+AgID/gICA/4B/gP+BgYH/gH+A/3d4d/9xcHH/hIWE/7u7u//t7u3///////////////////////// + /////////////////////////f79/xAPEKAAAABkAAAASwAAADUAAAAiAAAAFAAAAAoAAAAEAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAYAAAAOAAAAGgAAACoAAAA+AAAAVQAAAG4AAACGAAAAnAAAAK0AAAC+tLS0/f/////9/f3///////// + /////////////////////////////////////////////7i3uP96enr/gICA/3+AgP+Af4D/gIGA/4OC + g/9+f37/bm1u/2ZmZf+Af4D/vr6+//T09P///////////////////v////////////////////////// + /////////////////////////////////////////////////////////////////////////v////// + /////////////+zs7P/BwMH/lJST/318ff97e3v/f35//4CAf/+Af4D/f4B//4B/gP9/gH//gICA/4CB + gP98e3z/bW5t/4uKi//3+Pf//////////////////////////////////v7+//////+RkZHyAAAAcgAA + AFoAAABCAAAALQAAABwAAAAPAAAABwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAACQAAABIAAAAgAAAAMgAAAEcAAABfAAAAeQAA + AJAAAACjAAAAsxgZGNz///////////////////////////////////////////////////////////// + ///08/T/iouK/3p5ev9/gH//gICA/4CAgP+AgID/gICA/4CAgP+CgoL/goGC/3d4d/9nZmf/bm9u/5+e + n//c3dz///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////6+fr/1tfW/6am + pv+EhIT/e3p6/319ff+AgID/gICA/4B/gP+AgH//gICA/4CAgP98e3z/tre2//////////////////// + /////////////////////////////yQkJLgAAABoAAAATwAAADgAAAAmAAAAFgAAAAsAAAAFAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAUAAAAMAAAAFwAAACYAAAA6AAAAUQAAAGoAAACCAAAAmQAAAKoAAAC4g4OD+f/////9/f3///////// + //////////////////////////////////////////////n5+P/Dw8P/lpeW/35+fv97e3r/f35+/4CA + gP+AgID/gICA/4CAgP+AgID/gYCB/4ODgv9+fn7/bW5t/2dmZ/+BgYD/v7+///T09P////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+no6f+6u7v/kJCQ/3t8e/98e3v/fn9//4B/ + gP9/gH//fn5+/4aHhv/t7O3//////////////////////////////////v7+//////+8vLz7AQEBfwAA + AF4AAABFAAAAMAAAAB4AAAASAAAACAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAAABAAAAAdAAAALgAAAEMAAABbAAAAdAAA + AIwAAACgAAAAsQkJCdD///////////////////////////////////////////////////////////// + ///////////////////8+/z/2drZ/6uqq/+HiIf/e3t7/319ff+AgID/gIGA/4GAgf+AgYD/gYCB/4CB + gP+DgoP/gYKC/3h4eP9mZ2b/b29v/56fnv/e3d3///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////29/b/0tHR/6Ghof+CgoL/ent6/359fv96enr/tbS1//////////////////// + ///////////////////+/v7//////0RERNEAAABrAAAAUgAAADsAAAAoAAAAGAAAAA0AAAAGAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAQAAAAKAAAAFgAAACQAAAA2AAAATQAAAGYAAAB+AAAAlQAAAKgAAAC2U1NT8f/////8/f3///////// + //////////////////////////////////////////////////////////7//////////////////+no + 6f++vr7/l5eX/35/fv97e3v/fn5+/4GAgf+AgYD/gYCB/4CBgP+BgIH/gYGB/4ODg/9+f37/bm1u/2do + Z/+Eg4T/wsLC//b19f///////////////v////////////////////////////////////////////// + ///////////////////////////////////////////////////////////+/////////////////+Tl + 5P+2tbb/iouL/4SEhf/r6+v////////////////////////////////////////////k4+T+BgYGjwAA + AGEAAABJAAAAMgAAACEAAAATAAAACgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAA4AAAAaAAAAKwAAAD8AAABXAAAAcAAA + AIgAAACeAAAArgICAsXY19j+//////////////////////////////////////////////////////// + ///////////////////////////////////////////////////4+fj/1dXW/6usq/+Kior/e3x7/319 + ff+AgID/gYGB/4GBgP+BgYH/gYGB/4GBgf+Dg4P/goKC/3h4eP9oZ2j/cXFw/6Khov/e397///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////x8fH/3+Df//////////////////// + ///////////////////+/v7//////21ubecAAABvAAAAVgAAAD4AAAAqAAAAGgAAAA4AAAAGAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAMAAAAKAAAAEwAAACEAAAAzAAAASQAAAGIAAAB6AAAAkgAAAKUAAAC0Kysr5v/////9/P3///////// + /////////////////v////////////////////////////////////////////////////////////// + /////////v///////////////////+/v7//Fxcb/mpua/4GAgP97fHv/f35//4GBgP+BgYH/gYGB/4GB + gf+BgYD/goGC/4OEg/9/fn//aWlp/46Ojv////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////EhISpQAA + AGQAAABMAAAANgAAACMAAAAVAAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAwAAAAYAAAAJwAAADsAAABSAAAAawAA + AIQAAACaAAAAqwAAALympqb8//////39/f////////////v7+//5+vr/9/b3//f39//5+fn/+vv6//// + //////////////////////////////////////////////////////////////////////////////// + ///+/f7/4ODf/7Gxsf+LjIz/fXx8/31+ff+BgIH/gYKB/4KBgf+BgoH/gYGC/4GBgf9/f3//0dLR//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/v7//////5mYmfQAAAB0AAAAWgAAAEIAAAAtAAAAHAAAABAAAAAHAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAGAAAADwAAABwAAAAtAAAAQgAAAFsAAAB1AAAAjAAAAKEAAACxExMT2f////////////////z9 + /P/6+fr/8vPz/+bm5v++vLr+xsTE/+fn5//u7u7/9fX1//39/f////////////////////////////// + //////////////////////////////////////////////////////////////Lx8v/Ky8v/nZyd/4GB + gf98fHz/fn9//4GBgf+BgYH/fn5+/5OUlP/4+Pn///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////KSkpvQAA + AGgAAABPAAAAOQAAACYAAAAWAAAADAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAASAAAAIAAAADIAAABIAAAAYgAA + AHsAAACSAAAApgAAALV1dXX3//////39/f//////+/r7/+/x8f+Wjon6eGJV+3teT/5bST79Qj8++ZSU + k/3o5+j/9fX1//////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7/4uHi/7S1tP+OjY7/fH18/359fv97e3v/w8PE//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8PEw/wBAQGAAAAAXgAAAEYAAAAwAAAAHgAAABIAAAAIAAAAAwAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADAAAACQAAABMAAAAiAAAANQAAAEsAAABmAAAAfgAAAJUAAACoBwcHyPX29f////////////z7 + /P/09vb/mZCM+otlTf+IX0f/hmBJ/1U7Lf8NBgH/GhYV/oODgvzo6Oj/9vb2//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////Pz8//NzM3/nZ2d/4+Pj//w8PD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////79/v//////S0tL1QAA + AGwAAABTAAAAPAAAACgAAAAYAAAADQAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAKAAAAFAAAACIAAAA1AAAASwAA + AGUAAAB+AAAAkwAAAKZLS0vr//////39/f//////+fn5/+3u7/91Ylf6jGFJ/41mT/+LZE3/TTcq/xsS + Dv8JBAD/KCcm/MjIyP/t7O3//f39//////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/f7/7u7u//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+np6f8ICAiTAAAAYQAAAEkAAAAzAAAAIQAAABMAAAAKAAAAAwAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAAoAAAATAAAAIgAAADMAAABIAAAAYQAAAHgAAACNAgICqc7Ozv7///////////3+ + /f/29fb/6Orq/2lYT/qNY0r/kWhR/4ZhSv88KiD/HhUP/xcPC/8NCwn/gYCB/OLi4v/4+Pj///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7+/f//////dXV16QAA + AG8AAABWAAAAPwAAACoAAAAaAAAADgAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACQAAABIAAAAeAAAALgAA + AEIAAABZAAAAbgAAAII3NjfS//////7+/v///////fz8//Hy8f/m5+n/dWhg9o9kS/+Ua1L/flpG/zMk + G/8jGBL/HBQO/wcDAP9ra2v72NjY//Dw7//+/v7///////////////////////////////////////39 + /f////////////39/f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8WFhepAAAAZQAAAEwAAAA2AAAAIwAAABUAAAAKAAAABAAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAHAAAADwAAABoAAAAoAAAAOQAAAE0AAABgAAAAcnBwcOb///////////// + ///7/Pv/8O/w/+Lk5f99b2f0j2VL/5dsVP9+W0X/STMn/yoeFv8fFRD/CAMA/2VkZPvP0M//6ejp//z8 + /P///////////////////////f39//39/f/////////////////////////////////9/f3///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7+/v//////oJ+g9gAA + AHUAAABaAAAAQgAAAC4AAAAdAAAAEAAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAMAAAAFAAA + ACAAAAAuAAAAPgAAAE8AAABgAQEBdBAQEKBRUVHawL68+vn5+v/v8fL/4+Tm/35tYvSQZUz/oXRZ/6p6 + X/+IYkv/OSce/x8WEP8PCQf/aWlo/MrKyv/k5eX//Pv8///////////////////////9/f3//////8K9 + uf2DdGr4eWRX+1ZNSPpzcnH58/Lz///////9/f3///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//////8vLy/BAAAAaQAAAE8AAAA5AAAAJgAAABYAAAAMAAAABQAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAgAAAAOAAAAFwAAACIAAAAvAAAAPQAAAEsAAABYAAAAZAAA + AHFXQTTxlXtr+JqNh/K6uLf9hGtc95FnTf/DjG3/15x5/8KMbf9POCr/HhQP/xUQDf9ycXL8x8jH/+Pi + 4v/6+/r///////////////////////////+7tbH8iGhU/opgR/+CW0T/NiQY/wsDAP9APTz65eXm//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////ysvK/QIC + AoMAAABeAAAARgAAADAAAAAeAAAAEgAAAAgAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAABgAA + AAoAAAAQAAAAGAAAACIAAAAsAAAANgAAAEIAAABMBgUEeYNeR/+kdFj/imJK/3JWRv6FYk3/onRZ/9yg + fP/SmHb/zJRz/2NGNv8bEgz/HBgW/YeIiP3IyMj/4uPi//v6+////////////////////////////39u + ZfmNYkj/kmlS/4hiTP8+LCL/GhIN/wUAAP9ZWVj5//////39/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//////9SUlLZAAAAbAAAAFMAAAA8AAAAKAAAABkAAAANAAAABgAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADAAAABgAAAAoAAAAPAAAAFgAAAB4AAAAmAAAALgAA + ADYfFxKelmxT/72Kav+WbFT/eVdC/4piTP+6h2j/4aN//86Wc//SmHb/aEs5/xgOCv8nJCL6rKus/8fH + x//j4uP/+/v6///////////////////////9/v//bV5U+ZBkTP+VbFL/h2FL/zopH/8gFRD/DwgE/ywq + Kvzz8/P//v7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////7+/v/woK + CpcAAABiAAAASQAAADMAAAAhAAAAEwAAAAoAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAADAAAABgAAAAkAAAANAAAAEgAAABcAAAAeAAAAI0gzKNGXbVT/v4pr/5xyWP97WET/k2pR/8+V + dP/an3v/0Zd1/8yUcv9ZPzH/Fw4J/yckJPGlpqX/2tna//Dw8P/+/v7//v7+//7+/v////////////v9 + /f94bGX2kGZM/5ltVP+IYkv/PSoh/yUaE/8XDgn/JCIg/cjIyf/+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//////99fX3sAAAAcAAAAFYAAAA/AAAAKwAAABoAAAAOAAAABgAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAABAAAAAYAAAAJAAAADQAA + ABEAAAAYZ0o575VrU/+XbVT/XkM0/2tNO/+gc1n/15x4/9SZd//TmXb/w41u/0YyJf8ZEQ3/AwIBuAUF + BY0sLSzFhISE8ujo6P/////////////////+/v7/+vv9/4F1bvWRZUz/nXJX/6FzWf9gRTT/LiAY/xkQ + Cv8kIB/9vb69/v38/P///////////////////////////////////////fz9//////////////////// + /////////fz9//39/P////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////xoa + Gq0AAABlAAAATAAAADYAAAAjAAAAFQAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAGAAAACAcFBCp5VkP7kWlQ/4ZhS/9cQjP/flpG/6Z4 + XP/TmHb/1Jp2/9aaeP+3hWb/NyYd/xUPC/8AAAB7AAAAYAAAAGwAAAB3CAgImFFOS9zGvbj5+fj3//// + ///6/f7/hndw85FmTP+ygGP/2p96/6p7X/9ALiL/GhAL/yUiH/27u7v+/Pz7//////////////////// + //////////////39/f//////5ePj/5iNhvl4bGb5bWln+be2tv3///////////39/f////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//////+oqKj3AAAAdwAAAFoAAABCAAAALgAAAB0AAAAQAAAABwAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAIAAAACEw0KPYNfSP+NZU7/gl9J/3pYRP+QaFD/o3Va/9OZdv/UmXf/15x4/41lTv8lGhP/DwkH8gAA + AEMAAABJAAAAUwAAAF4AAABnMB8X4qV3XP+ohnL5lYd+8r+6ufuEcmbzlGdO/9Ocef/kp4L/ypNx/15D + NP8YDwn/KSUk/MjJyf/7+vv////////////////////////////9/f3//////9PPzf6GbFz8j2NK/2xL + N/8cDwn/HxoW/4F/f/r//////fz9//////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////9/v7//////zU1 + NcYAAABpAAAAUAAAADkAAAAmAAAAFgAAAAwAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcFA9SimNN/4tlTf99Wkb/gl5I/4pi + TP+ld1z/15x5/9Wbd//LknL/VDwt/x4VEP8GBQO0AAAAKgAAADMAAAA8AAAARQAAAFVhRjX2uIVn/7yI + Z/98V0H/Zkw8/3lZR/6hc1j/67KK/9meev/PlnX/bE47/xgOCf8wLSv64uLi//r6+v////////////// + ////////////////////////gnNp+I9iSP+XbVP/dlVC/ysfF/8UCwb/HRoY/sC/wP7///////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////S09P9BAQEhgAAAF4AAABGAAAAMAAAAB8AAAASAAAACQAA + AAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACEXEmmLZE3/g15J/2BFNf+OZk7/bk88/6p6X//YnHn/2Jx5/5RrUv8uIBj/GBEM/wEB + AEsAAAAbAAAAIgAAACgAAAAvBgUDXH5aRv65hmf/xpBw/4VhSv9WPS//fVlD/7aFZ//us4v/05d2/86W + dP9oSjn/FQwG/0ZCQffw8PD/+/r6//7+/v////////////////////////////3///9xXVL7k2hN/5ht + Vf93VUH/Lh8Y/yAXEP8IAQD/dXV1+v////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/f7//////1pa + Wt0AAABtAAAAUwAAADwAAAApAAAAGQAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRUPdIdhS/9qTDr/dFNA/4Jd + R/9QOCv/rX1g/9yffP+2hGX/SDIn/yMZEv8OCQffAAAACwAAAA8AAAATAAAAGQAAAB4WEAxwj2dP/6J0 + Wv+leFz/VT0w/zYnHf+OZU7/zZt3/+erhf/Rl3T/0JZ1/15EM/8VDAj/Ozk56MHAwf3///////////// + /////////v7+/////////////////3JgVfqUaE7/nnJX/4FcR/83Jx3/JBkT/w4HAv9iYWH4//////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////19PX/DA0MmgAAAGIAAABKAAAAMwAAACIAAAATAAAACgAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAASDApcZkk3/25OPf+BXUf/Ujos/0AtIf+FX0n/nHFX/1g+MP8qHRX/HRMP/wMC + AVsAAAAFAAAABwAAAAoAAAANAAAAESoeFpSXbFP/kGhQ/3dVQv8cEw7/RjIm/51xV//eo3//2597/9OY + dv/JknD/TTYq/xgRDP8AAACaAgICgh4dHrRycnLp09PT/v////////////////7+/v//////eWVa+ZNn + Tf+ygWP/t4Zn/2NGNv8oHBT/EQgE/1xbWvj///////////////////////////////////////////39 + /f/9/fz////////////////////////////9/f3////////////////////////////+/v3//////4SE + hO4AAABwAAAAVwAAAD8AAAArAAAAGwAAAA4AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgGBDpGMSb/YkY1/1Y9 + L/82Jhz/OSce/0k0J/9CLiP/LyEY/yYaFP8NCgfVAAAAAAAAAAEAAAACAAAAAwAAAAYAAAAIOykhspdt + U/+MZU7/flxH/zcnHv9tTzz/q3tf/+Cjfv/Vmnf/1pt4/7mFaP83Jx3/Ew0K/AAAAGYAAABeAAAAaQAA + AHMDBASLT0hF3byxqvft6ef+//////////+AaVz5l2lP/9WhfP/orYb/o3Zb/zQkHP8RCgT/YWBf+P// + ///////////////////////////////////9/f3//f39///////e3Nn+oJeU+oN/fPquraz8//////// + ///9/f3/////////////////////////////////Hx4fsQAAAGYAAABNAAAANgAAACQAAAAVAAAACgAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAACSoeFvFBLSL/NiYc/zAhGf8zJBr/MyMa/y4gGP8pHBX/FhAL+wEA + ACcAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAJCMCTElWpS/4pjTP9+W0f/VT4v/45lTv+qel7/1pt4/9Sa + dv/Xm3n/i2RN/yUZE/8LCAfhAAAAPAAAAEYAAABQAAAAWgAAAGJELiHysn5g/8CWevuWhXvyq6Wg9YZp + WPujc1f/8LyT/+Ckf/+5hmj/QS4j/xEIBP9ubW33//////////////////////////////////////z9 + /P//////rqah+4xtW/2EXUX/Mh8V/x8XEv9bWFj5///////////////////////////+/v7//////7Cv + sPkAAAB5AAAAWwAAAEMAAAAuAAAAHQAAABAAAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwoIeSod + Fv8sHhf/LSAX/y8hGf8tIBf/KRwV/xoSDf0EAwJRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMv + JcWUa1L/imNN/1Y+L/9oSjn/l21U/55xV//Umnb/15t4/8iRcP9ROSz/HhUP/wUDAooAAAApAAAAMQAA + ADkAAABBAQEAXG9PPfu7iGn/1pp3/4VeRv9jRjX/hF5J/7qKa//2w5f/15t4/8KNbf9IMyf/DwcC/4eG + hvj//////////////////////////////////////////9fW1P6Kalj9lWhN/49mT/9BLyP/HhMO/wwF + Af97eXn6//////////////////////7+/v//////PDw8ywAAAGoAAABRAAAAOgAAACYAAAAXAAAADAAA + AAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwoHlyAXEf4oGxX/JxsU/yMYEv8UDgriAwICOgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCgew5RqUv94V0L/TTYq/5BoT/99WUX/mG5U/9qd + ev/Wm3j/hmBK/y0gF/8WDwz6AAAAKgAAABoAAAAfAAAAJgAAACwJBwVghGBJ/6t7X//IkXD/dlVC/0g0 + J/+OZE3/z6B7//C3jv/TmHX/xI1u/0UxJP8YEA3/tLSz/P///////////v7+//////////////////// + ////////l5GO+YRcRP+ccFf/lGtS/0gyJ/8lGhP/EQgE/0RDQfr//////////////////////////9nZ + 2f4FBQWKAAAAXwAAAEYAAAAxAAAAHwAAABIAAAAJAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAABAMCKAoHBXALBwZ5BQQDQQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAkGRSqgFxG/3JRP/+AXEb/i2NM/1M7LP+MZU7/zpZ0/6R2W/8+LCH/JBgT/woHBasAAAAKAAAADgAA + ABIAAAAWAAAAGxYPDHOQZ1D/l21U/4hhTP8qHhf/Qi4k/55xV//nsor/5KmC/9SZd/++imv/PSog/xYQ + Df1GRUbXsbGx+f/////////////////////+/v7///////////+OiIT2h15G/59yWP+ufGD/aEs5/y4g + GP8VDAb/Ozc3+/////////////////7+/v//////YWFh4QAAAG4AAABVAAAAPgAAACoAAAAaAAAADgAA + AAYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEMCXBUOy3/bE47/3hVQv9WPS7/PSog/19E + M/9yUT7/RTEk/ysdFv8YEQz7AAAAIQAAAAQAAAAGAAAACQAAAAsAAAAOJBkTjZNqUf+RaFH/elhE/yQZ + E/9kRzb/rX5h/+21jP/bnXr/1pt3/6p6X/8vIRn/DQgH8QAAAGoAAAB6EhISp1VVVd2+vbz7//////// + /////////////5GIg/WLYkj/rXxg/+ithf+ufWH/Piwh/xcMB/85NzT7//////////////////////v7 + +/8PDw+eAAAAYwAAAEoAAAA1AAAAIgAAABQAAAAKAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAABQMDJjUlHP5NNin/STQn/zknHv81JRv/Oygf/zUlG/8tHxf/IhgS/wgFBIAAAAAAAAAAAQAA + AAIAAAACAAAABAAAAAYsIBigk2lS/41mTv96WET/OCkf/4VeSf+7iWn/6KmD/9Sad//ZnHn/gV1H/yMY + Ev8IBQTIAAAAUgAAAF4AAABoAAAAcTUoIeGjh3b4v66j89jV0/z/////jH9585JlTP/Jl3X/+sOX/9KX + df9cQjP/FgwG/0E9PPr///////////7+/v//////jY6N8QAAAHEAAABYAAAAQQAAACwAAAAcAAAADwAA + AAcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRENuTMkG/8zIxr/MCEY/zEi + Gf8wIhn/Lh8Y/yUaE/8OCQe+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAi0fGKGPaE//jGRO/1M8 + Lf9NNyr/mW5U/7+Jav/eoXz/1Zp3/8+WdP9YPjD/HBMO/wIBAXgAAAA8AAAARgAAAE8AAABdVj0u+Kp3 + Wv/PlHD/fV9O/nFnYfJyXVH5nW5T/+W0jP/ut43/1Jh2/29QPf8WDAb/T01L9/////////////////// + //8kIySzAAAAZAAAAEwAAAA2AAAAJAAAABYAAAALAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAACAgAQGxIO4SgcFf8sHhf/LR8X/yseF/8iGBL/DgkHsAAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAJBoTnYpjTf9xUT7/LyAZ/3pYQ/+Wa1P/rHxf/9qdev/ZnXn/nnJY/zEi + Gf8XDwz3AAAAMQAAACkAAAAwAAAAOAICAV92VEL+pHZb/8WOb/9uTzv/JhgR/2ZINv+ygGP/+M6f/+Sp + hP/Umnf/dlRB/xYMBv9nZWT1//////7+/v//////vLu8+gEBAXQAAABWAAAAQAAAAC0AAAAdAAAAEQAA + AAgAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJDQgHiBcR + DOAZEQ3pEg0JwgYEA0kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXEAyHZkk3/084 + K/9SOyz/kmhR/3FQPf+dcFf/2597/8GLbP9UPC3/JBgS/woIBrIAAAAUAAAAGQAAAB4AAAAlCwgGZ4Zg + Sv+XbFT/hmFK/zEiG/8ZEQ3/hF1I/8OTcf/7zZ//2p15/9SZd/9pTDr/EwkF/4WEg/P///////////// + //9JSUnHAAAAWwAAAEcAAAA1AAAAJAAAABYAAAAMAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwJBlRELyT/Tzkq/2tMOv9tTjv/SzQn/3lXQv+neF3/YkY1/y4g + GP8cFA/+AgEAMgAAAAoAAAAOAAAAEgAAABYWDwx4i2NN/5FpUf93VUL/HBQP/zMkG/+ZbFP/3q6H//W+ + k//XmXf/zZVz/1M7Lf8WDwr/Dw8PoDs7O7yhoaHyz8/P+wkICXQAAABKAAAAOQAAACoAAAAbAAAAEQAA + AAkAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAICHjAi + GftIMif/Ujor/0UwJP86KR7/SDIm/0QwJP8yIhr/JxsU/w0IB68AAAACAAAABAAAAAYAAAAIAAAACh0V + EIqKY0z/kGhQ/21PPf8bEw7/X0Q0/6d3XP/uvpP/56mD/9abd/+9iGr/Piwh/xMNCvcAAABbAAAAVgAA + AFYICAhmAAAARQAAADgAAAArAAAAHgAAABQAAAAMAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBMPwDgnHf86KB7/NiYc/zQkG/8zJBr/MSEZ/yse + Fv8XEAzwAAAAEAAAAAAAAAABAAAAAgAAAAIAAAAEHRQQjohhS/+KZE3/Qy8l/yccFP+JYUv/t4Zn//C1 + jf/annr/2p16/5RrUv8qHRb/DAgG0QAAADsAAAA+AAAAPQAAADkAAAAyAAAAKAAAAB4AAAAVAAAADgAA + AAcAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAEAwIgJBgT9y8hGP8uIBj/LiAY/y4gGP8qHRb/GhIO+AMCATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEXDwyHdVRA/2NHNv8jGBL/VTwu/5xwVv+8h2j/5KV//9ebef/Ql3T/XUIy/x8WEP8EAgJ2AAAAKAAA + ACoAAAAqAAAAJgAAACIAAAAaAAAAFAAAAA4AAAAJAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBAIvGBEN3yIYEv8mGhT/IRcR/RMN + Cs0CAgEjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABALCGdNNin/Qi8j/zwqIP+FYEn/lmtT/5xw + Vv/bnnv/2J15/5JpUf8xIhn/GBAN9QAAACMAAAAZAAAAGgAAABoAAAAYAAAAFQAAABAAAAAMAAAACAAA + AAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAABQMCNAYFA0gDAgIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAACQYFPTgoHf9EMCT/W0Ex/4FbRv9lSDb/eFVC/8ONbf+hdFr/Qi8j/yYaFP8KBwWZAAAADAAA + AA4AAAAOAAAADgAAAA0AAAALAAAACQAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgANKx0W9EIuI/9TOiz/Uzss/0Mv + I/9QOSv/YEQ0/0IvI/8tHxf/GhIN9gAAABYAAAAFAAAABgAAAAYAAAAGAAAABgAAAAUAAAADAAAAAgAA + AAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAWDwufNyYd/zwqH/88KR//OCcd/zclHP8zJBr/LyAY/yMZEv8HBQRkAAAAAQAA + AAEAAAABAAAAAQAAAAIAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBABAiGBLtMyMb/zMj + Gv8xIhn/LyEY/y4gGP8lGhP/DQgHnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCAiMZEQ3aJRkT/ycbFP8mGhT/HRQP9woHBXwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AA0MCQaOFA0KxxALCK8FAwM6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//////8AAB/////////////////+AAAH/////////////////gAAAf////////////////wA + AAB////////////////8AAAAH////////////////AAAAAf///////////////gAAAAB//////////// + ///4AAAAAH//////////////8AAAAAAf//////////////AAAAAAB//////////////gAAAAAAH///// + ////////4AAAAAAA/////////////+AAAAAAAD/////////////AAAAAAAAP////////////wAAAAAAA + A////////////4AAAAAAAAD///////////+AAAAAAAAAP///////////AAAAAAAAAA///////////wAA + AAAAAAAD//////////8AAAAAAAAAAP/////////+AAAAAAAAAAA//////////gAAAAAAAAAAD/////// + //wAAAAAAAAAAAP////////8AAAAAAAAAAAB/////////AAAAAAAAAAAAH////////gAAAAAAAAAAAAf + ///////4AAAAAAAAAAAAB///////8AAAAAAAAAAAAAH///////AAAAAAAAAAAAAAf//////gAAAAAAAA + AAAAAB//////4AAAAAAAAAAAAAAH/////+AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAH/////wAAA + AAAAAAAAAAAB/////4AAAAAAAAAAAAAAAP////+AAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAA//// + /wAAAAAAAAAAAAAAAP////8AAAAAAAAAAAAAAAD////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAA + AP////wAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAP////gAAAAAAAAA + AAAAAAD////4AAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAP////gAAAA + AAAAAAAAAAAD////4AAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH//// + wAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAA + H////wAAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAP////gAAAAAAAAAA + AAAAAH////wAAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAP////gAAAAA + AAAAAAAAAAD////4AAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAP////g + AAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH + ////wAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////AAAAAAAAAAAA + AAAAH////wAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAP////gAAAAAA + AAAAAAAAAH////wAAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAP////gA + AAAAAAAAAAAAAAH////4AAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAP/ + ///gAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAAf////gAAAAAAAAAAAA + AAAH////4AAAAAAAAAAAAAAAD////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAf////4AAAAAAA + AAAAAAAAH////+AAAAAAAAAAAAAAAD/////gAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAP////+AA + AAAAAAAAAAAAAH/////wAAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAP// + ////AAAAAAAAAAAAAAH//////8AAAAAAAAAAAAAB///////4AAAAAAAAAAAAAf//////+AAAAAAAAAAA + AAP///////gAAAAAAAAAAAAD///////4AAAAAAAAAAAAB///////+ACAAAAAAAAAAAf///////gA4AAA + AAAAAAAP///////8AfwAAAAAAAAAD////////gP8AAAAAAAAAA////////8H/AAAAAAAAAAf//////// + //wAAAAAAAAAH//////////8AEAAAAAAAD///////////gD4AAAAAAA///////////4A/gAAAAAAf/// + ////////A/4AAAAAAH/////////////+AAAAAAB//////////////gAAAAAA//////////////8AIAAA + AP//////////////AHwAAAH//////////////4D+AAAB///////////////j/gAAA/////////////// + //4AAAf/////////////////AAA//////////////////wB///////////////////+A//////////// + ////////wf////////8= + + + + + AAABAAwAEBAAAAEACABoBQAAxgAAABgYAAABAAgAyAYAAC4GAAAgIAAAAQAIAKgIAAD2DAAAMDAAAAEA + CACoDgAAnhUAABAQAAABACAAaAQAAEYkAAAYGAAAAQAgAIgJAACuKAAAICAAAAEAIACoEAAANjIAADAw + AAABACAAqCUAAN5CAABAQAAAAQAgAChCAACGaAAASEgAAAEAIACIVAAArqoAAGBgAAABACAAqJQAADb/ + AACAgAAAAQAgACgIAQDekwEAKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAAA + AABjUkgAY1VMAHhWQgB7eHYAeXl5AH19fQCZblUAmntnAIN+ewCqfGEAl4Z8AICAgACHgoAAioqKAJ6Q + hwCRkZEAlpaWAJuUkACampoAnJycALWaigCzo5oAv6iaAKGhoQClpaUAqqmpALCwsAC2trUAubm5AL29 + vQDEv7wAwsLCAMbGxgDJyckAzs7OANDQ0ADW1tYA2dnZAN3d3QDg3t0A4ODgAOXm5gDs6OUA6enpAOzs + 7ADz8O4A8vLyAPb29gD5+fkA/v7+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJAwAAAAAAAAAAAAAAAAAETIyIgwAAAAAAAAAAAAAACoiITIy + IQYAAAAAAAAAAAwyMB4RHDAyHAwAAAAAAAAiKiQyMiIUGyonAAAAAAAGMiwcESEyMiciGwAAAAAAGTAs + MjIhFBwsMAAAAAAADDAsGxQkMjInJBwAAAAAABEyJzIwHhQeLDIAAAAAAAAnMh4RITIyJiIiAAAAAAAO + FhkwMCoyMjIyGQAAAAAAAAoEFxIuJzIyKgAAAAAAAAACAAcJFQ8rHhkAAAAAAAAAAAAMAAMACAsAAAAA + AAAAAAAAAAAAAAIAAAAAAAAA//8AAPj/AAD4PwAA+A8AAPADAADwAwAA4AMAAOAHAADABwAAwA8AAMAP + AACADwAAwB8AANAfAAD1PwAA/38AACgAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAAAAAAAAAAAAEAAAAB + AAAAAAAASTUoAE1BOQBgRDQAZkk4AHNSPwBaUEoAXlVQAHddTgBxYVcAaGloAG1tbQBwcHAAdXV1AHt3 + cwB5eXkAfn5+AIFcRwCBXkkAhGNRAJNqUQCacFcAm3VdAKF1WgCleV4AlXZkAIB8eQCSfnIAnIFxAJiB + dQCxg2UAtolrAIKCggCFhYUAioqKAI2NjQCRkZEAlZWVAJiYmACenp4ApqKfAKGhoQClpaUAq6imAKmp + qQCurq4AsbGxALSzswC1tbUAurq6AL69vQDCta4AwcHBAMXFxQDJxMEAysrJAM7OzgDQ0NAA1tbWANnZ + 2QDe3t4A4NvYAODf4ADm5uYA6efmAOnp6QDt7e0A8O7tAPHx8QD19fUA+Pf3APn5+QD+/v4AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEA8AAAAAAAAAAAAAAAAAAAAAAAAA + AAALSDoQEAAAAAAAAAAAAAAAAAAAAAAAAAAtSEhIOQ8AAAAAAAAAAAAAAAAAAAAAAAtFSEhISEg1DwAA + AAAAAAAAAAAAAAAAACRINSIwQkhISDELAAAAAAAAAAAAAAAACz9ISDkiIS0/SEhIMAsAAAAAAAAAAAAA + EEhISEhIOykhKT9ISEYtAAAAAAAAAAAQNUgxMD9ISEhCMBAkNUgxAAAAAAAAAAALSEg6JyEpO0hISEU1 + J0UnAAAAAAAAAAApSEhISD8wISc5RUhISDsAAAAAAAAAAAtFSDVCSEhIRTUkIjBCSCcAAAAAAAAAACJI + SCkhJzpISEhIOyk5QgAAAAAAAAAADztISEhCNSIiMUVISEhILQAAAAAAAAAAD0hINUJISEg6KSEpP0hI + AAAAAAAAAAAAMUhFKSEpOkhISEIxJEg1AAAAAAAAAAALQjZISEI1IjpISEhISEgkAAAAAAAAAAAkMwE5 + SD9ISEhISEhISD4AAAAAAAAAAAAAFhEwPQM5SEZISEhISCkAAAAAAAAAAAAAFAkAGRcuRQgxSEhIRQAA + AAAAAAAAAAAAAgAAERMAHB4rSBs1LQAAAAAAAAAAAAAAAAAAAgAABRUAHR8oAAAAAAAAAAAAAAAAAAAA + AAAABhoABBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAABw4AAAAAAAAAAAAA////AP8f/wD/B/8A/wP/AP4A + /wD+AD8A/AAPAPwABwD4AAcA+AAHAPgADwDwAA8A8AAfAOAAHwDgAD8A4AA/AMAAPwDAAH8A4AB/AOQA + /wDsgP8A/ZH/AP+T/wD/8/8AKAAAACAAAABAAAAAAQAIAAAAAAAABAAAAAAAAAAAAAAAAQAAAAEAAAAA + AAAvKSUANCwnAD4sIQBCNS4ASTQoAE03KQBOOS0AUDkrAFA5LQBIPjkASkA7AGNGNQBlSjkAYEo/AGlL + OQBqTDoAb089AFpaWgBfXFoAXV1dAGdRRQB0U0AAdlVBAHtYQwB9WkYAbGJcAGFhYQBkZGQAaWlpAG1t + bQBybmoAcHBwAHR0cwB1dXUAe3Z0AHh4eAB+fn4AgFtFAIZgSgCLZU0Ai2tXAJZsUwCSa1UAlXNeAJF7 + bQCIgH0AjIJ8AKqAZgCtgmQAtIJkAL2JaQCliHQAxI5tAMaQbwDIkXAAgYGBAISCgQCGhoYAiYmJAI6O + jgCQiocAmI2HAJKQjwCQkJAAlJSUAJmZmQCdnZ0ArpKBAK2VhwC5ppsAoaGhAKSkpACpqakAra2tALGw + sAC2trYAubm5AL29vQDKua8A0MS9AMHBwQDFxcUAysrKAM3NzQDSzswA0dHRANTT1ADU1NQA19jXANnZ + 2QDb3NsA3d3dAODg3wDh4eEA5ebmAOro5gDq6ekA7OvqAO3t7QDv8PAA8fHxAPX19QD5+fkA/v7+AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAASWDgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVoaFslHAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAcVmhoaGhYIR4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxoaGhoaGho + Vh4eAAAAAAAAAAAAAAAAAAAAAAAAAAAhSmhoVmJoaGhoaFEeIQAAAAAAAAAAAAAAAAAAAAAAABJoaFsl + OEpdaGhoaGhMHCEAAAAAAAAAAAAAAAAAAAAAPGhoaFhCJThHW2hoaGhoShwlAAAAAAAAAAAAAAAAABJd + aGhoaGhdSjglQlhoaGhoaEceAAAAAAAAAAAAAAAAJWhoZmhoaGhoZk08JTxRaGhoaF0AAAAAAAAAAAAA + ABxRaGg8QVFoaGhoaGhWQSU4Sl1oSgAAAAAAAAAAAAAAHGhoaE08JThNZmhoaGhoW0c4WGgAAAAAAAAA + AAAAACFHaGhoaGhYQjg4Sl1oaGhoaGRoTQAAAAAAAAAAAAAAEmhoaGhoaGhoXUw4OEJYaGhoaGhBAAAA + AAAAAAAAAAA4aGhWTGJoaGhoaGZRQSU8TGZoWwAAAAAAAAAAAAAAHF1oaEw4JUdbaGhoaGhoWEclWGhC + AAAAAAAAAAAAAAAeaGhoaGJNPCU8TWZoaGhoaGJoZgAAAAAAAAAAAAAAHk1oaGhoaGhoVkI4JUpbaGho + aGhKAAAAAAAAAAAAAAASaGhoSlZoaGhoaGJMODhBVmZoaEEAAAAAAAAAAAAAJUJoaGI8JThMYmhoaGho + VkElWGhRAAAAAAAAAAAAAAASZmhoaGhbSjglR2hoaGhoaF1oaEEAAAAAAAAAAAAAADhiLT9oaGhoZlFR + aGhoaGhoaGhbAAAAAAAAAAAAAAAATFYYAWJoYGJoaGhoaGhoaGhoaEIAAAAAAAAAAAAAAAA9KjcLYmgp + AWhoaGhoaGhoaGhmAAAAAAAAAAAAAAAAAD4nNhI4TzEJYmhQLmhoaGhoaEoAAAAAAAAAAAAAAAAALhAN + AAAXNg5HZEQGWGhoYmhoQQAAAAAAAAAAAAAAAAAACgAAABcyHwArMRhbaEYGW1EAAAAAAAAAAAAAAAAA + AAAAAAAAAwQAABAzFQBENChYQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQwAABAxGUIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAACSsaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjCwAAAAAAAAAA + AAAAAAAA///////3////4f///+B////AH///wAf//4AB//+AAH//gAAf/wAAD/8AAA/+AAAP/gAAH/wA + AB/8AAAf/AAAP/gAAD/4AAB/8AAAf/AAAH/gAAD/4AAA/+AAAf/gAAH/4AAD/+AAA//jAAP/9xAH//8x + B///8w////8f////P/8oAAAAMAAAAGAAAAABAAgAAAAAAAAJAAAAAAAAAAAAAAABAAAAAQAAAAAAAB8V + DwAaFBAAJRoUADUlHAA2KSEAPSsgAD8sIQBALCEARTAkAEkzJwBFMygASjQoAE02KQBROi0AVDwtAEM6 + NgBJOzMATjswAFQ+MQBQQDcAW0EyAFpCNABiRjYAaEo5AG1OOwBvUD0AclE+AElEQQBMRUAATUdEAFFM + SQBUTkoAV1FOAFFRUQBWVlYAXFVRAFlZWQBdXV0AdVRAAHpXQgB7WEMAflpFAGZaVABhW1kAYl5dAHlh + UwBhYWEAZWVlAGhkYgBsZ2UAbmpnAGhoaABtbW0AcWxrAHx0bwBxcXEAdXJxAHZ2dgB5dXMAeXl4AHx7 + fAB+fn4AgFxHAIliSwCLZE0AjmZOAJBnTwCSaFEAkGtUAJltUwCccVcAn3RZAJt0XQCidFoAqHldAIZv + YACPdmYAgHNrAIRyaACVdmMAlHprAJl7aACHe3MAjH51AIB+fQCjfWUArHxgALF/YgCOhX8AkoB3AJqG + egCvhGgAtIJkALmFZwC5iWkAvoprAKOKfADAimsAxI1tAMCUcwDIknAAz5Z0AMyadwDVm3gA1516ANii + fQCBgYEAhYWFAIeIhwCIiYgAjY2NAJGRkQCVlZUAmJeWAJeYlwCZmZkAnZ2dAKeRhAC2mIUArZyRAKKi + ogClpaUAqqmqAKyrqgCtra0AsbGxALW1tQC/tbAAubm5AL29vQDDt68Ax724AL/AvwDLw78AwcHBAMTC + wgDExMQAzMPAAMnJyQDNzc0A0snDANTPywDS0M8A0dHRANXW1QDZ2dkA29zbAN3d3QDh4eEA5eXlAOnp + 6QDt6ukA7e3tAO/w7wDx8fEA9fX1APj49wD6+voA/v7+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOiY1AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIotvIjUAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MJ+fl2siNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAmfZ+fn5+UayI6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ADoin5+fn5+fn5Q6JjoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBwn5+fn5+fn5+f + izoiOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKVn5+fn5+fn5+fn5+JNSY6AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTqfn5+amp+fn5+fn5+fn4IwJjwAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAIoufn599a3qLmp+fn5+fn5+agiYwPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6 + Jp+fn5pvPGtrdIuan5+fn5+fn5p9JjA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmfZ+fn5+Xf288az5w + gpefn5+fn5+fn3omMAAAAAAAAAAAAAAAAAAAAAAAAAAAADwil5+fn5+fn5qJcD48a3CCl5+fn5+fn5+X + dCYwAAAAAAAAAAAAAAAAAAAAAAAAADBvn5+fn5+fn5+fmpB0azw+bX+Vn5+fn5+fn5dwMAAAAAAAAAAA + AAAAAAAAAAAAACKUn5+fn5+fn5+fn5+flX1rPGtrepSfn5+fn5+flwAAAAAAAAAAAAAAAAAAAAAANTqf + n5+afZCan5+fn5+fn5+Xgm88azx0i5ean5+ffwAAAAAAAAAAAAAAAAAAAAAAIomfn5+Lazxwgpefn5+f + n5+fn5qLcj4+Pm99l5+fawAAAAAAAAAAAAAAAAAAAAA6Jp+fn5+QdGs8a2t/lJ+fn5+fn5+fn5R6azxv + lZ+LAAAAAAAAAAAAAAAAAAAAAAAmdJ+fn5+fn5R6a2s8a3qUn5+fn5+fn5+fl3+Cn59vAAAAAAAAAAAA + AAAAAAAAADwil5+fn5+fn5+fl39vPGs8cJCfn5+fn5+fn5+fn5UAAAAAAAAAAAAAAAAAAAAAADBvn5+f + n5+fn5+fn5+akHRrazxvf5efn5+fn5+fn3QAAAAAAAAAAAAAAAAAAAAAACKQn5+fl5+fn5+fn5+fn5+U + fWs8a2t9kJqfn5+fn28AAAAAAAAAAAAAAAAAAAAANTWfn5+fdHCCmp+fn5+fn5+fn5eJbzxra3CJn5+f + fwAAAAAAAAAAAAAAAAAAAAAAJoKfn5+XbzxrPH2Un5+fn5+fn5+fn5B0azxrl5+fawAAAAAAAAAAAAAA + AAAAAAA6Ip+fn5+flYJvazw8cIuan5+fn5+fn5+flX+Cn5+LAAAAAAAAAAAAAAAAAAAAAAAwdJ+fn5+f + n5+akHRrazxvfZSfn5+fn5+fn5+fn59wAAAAAAAAAAAAAAAAAAAAADwilZ+fn5+fn5+fn5+Vf288PDxw + i5+fn5+fn5+fn5UAAAAAAAAAAAAAAAAAAAAAADA+n5+fn5qfn5+fn5+fn5qLdGtra29/l5+fn5+fn3oA + AAAAAAAAAAAAAAAAAAAAACKQn5+fn2twiZ+fn5+fn5+fn5R9azxra3qUn5+fn2sAAAAAAAAAAAAAAAAA + AAAANTWfn5+flGtrPFV9lZ+fn5+fn5+fmolwazxrl5+fggAAAAAAAAAAAAAAAAAAAAAAJn+fn5+fn5V/ + bz4+PHOLmp+fn5+fn5+flHp/n5+fawAAAAAAAAAAAAAAAAAAAAA8Ipqfn5+fn5+fmot0a2s8dJ+fn5+f + n5+fn5+fn5+QAAAAAAAAAAAAAAAAAAAAAAAwcJ+GWnCan5+fn5+fl39viZ+fn5+fn5+fn5+fn59wAAAA + AAAAAAAAAAAAAAAAAAA1lZpRGgGCn5+fn5+fn5+an5+fn5+fn5+fn5+fn5cAAAAAAAAAAAAAAAAAAAAA + AABri5pRPwFwnZ+fjo+fn5+fn5+fn5+fn5+fn5+fn3oAAAAAAAAAAAAAAAAAAAAAAAAAN1JJZgR0n5+E + QAN/n5+fn5+fn5+fn5+fn5+fn2sAAAAAAAAAAAAAAAAAAAAAAAAAT0FYZgVrkJ+ARgQ8n5+fnZefn5+f + n5+fn5+fiQAAAAAAAAAAAAAAAAAAAAAAAAAATD9eXRwAN3dbZRtVn5+adhR9n5+fn5+fn5+fbwAAAAAA + AAAAAAAAAAAAAAAAAAAALhlLFQAAWUMbaRs8lJ+XRQ8fn5+fn5+fn5+QAAAAAAAAAAAAAAAAAAAAAAAA + AAAAKwYGHAAAVBtAaRMAAHaDXEohn5+fjU+Jn590AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8zAAAAUydD + Vx8AAEcZZ0ssmp+aUBccn5dvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0IBQAAAEAYaUA1AHiK + Vl8cn30AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEcAAAAABcoXxMAAEUPZF8kmm8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsJCjoAAD8PakotAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAcNQAAAA0oYxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAABEJDTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ + MAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD//4////8AAP//g////wAA//8A//// + AAD//wA///8AAP/+AA///wAA//4AA///AAD//gAA//8AAP/8AAA//wAA//wAAA//AAD/+AAAA/8AAP/4 + AAAB/wAA//AAAAB/AAD/8AAAAD8AAP/wAAAAPwAA/+AAAAA/AAD/4AAAAD8AAP/AAAAAfwAA/8AAAAB/ + AAD/gAAAAP8AAP+AAAAA/wAA/4AAAAD/AAD/AAAAAf8AAP8AAAAB/wAA/gAAAAP/AAD+AAAAA/8AAPwA + AAAH/wAA/AAAAAf/AAD8AAAAB/8AAPgAAAAP/wAA+AAAAA//AADwAAAAH/8AAPAAAAAf/wAA8AAAAD// + AADwAAAAP/8AAPgAAAA//wAA+AAAAH//AAD4IAAAf/8AAPhgAAD//wAA+GDAAP//AAD84MAA//8AAP/x + wQH//wAA//PDAf//AAD//8MH//8AAP//5w///wAA////D///AAD///+f//8AACgAAAAQAAAAIAAAAAEA + IAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAs7OzAQAAADUAAABWIyMjHJ+f + nwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwaGhqRzs7O809P + T7YAAABWAAAAFwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzgoKC1v// + ///+/v7/yMjI8ERERK0AAABRAAAAFAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBgYGdOfn + 5/rIyMj/xsbG//f39//+/v7/vb297Dg4OKQAAABKAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIFpa + WsD+/v7/9PT0/7+/v/+Tk5P/vLy8//Pz8//+/v7/sbGx6C4uLpkHBwceAAAAAAAAAAAAAAAAAAAAAgAA + AFnGxsbx4ODg/9bW1v/9/f3/+/v7/8/Pz/+cnJz/sLCw/+Li4v/d3d3wEBAQJgAAAAAAAAAAAAAAAAAA + ABMzMzOn/v7+/+3t7f+2trX/l5eX/8jIyP/4+Pj//v7+/+Dg4P/Q0ND/dXV1pnNzcwgAAAAAAAAAAAAA + AAAAAABCn5+f4/Ly8v/p6en///////j4+P/Kysr/m5ub/7a2tv/p6en/9fX1+xISEkQAAAAAAAAAAAAA + AABfX18KFBQUiff39/3s7Oz/qqqq/6Ghof/S0tL/+/v7//7+/v/d3d3/0NDQ/5ubm8UAAAAPAAAAAAAA + AAAAAAAABwcHLnh4eNH+/v7/3d3d//7+/v/z8/P/wsLC/5mZmf+8vLz/8PDw//7+/v8vLy9mAAAAAQAA + AAAAAAAAi4uLBAMDA23g4OD4+vr6/7q6uv+ampr/w8PD/////v/9/f3/2dnZ/83Nzf/CwsLgAAAAGwAA + AAAAAAAAAAAAAF9fXwxFRUWgs6Oa/qupqP75+fj+9/f3/uLh4v/////////////////+/v7/VVVViwAA + AAQAAAAAAAAAAAAAAACzs7MBMysnTap8Yf5fW1jRv6ia/ZuUkP7z8O7+4N7d/v//////////4+Tk8wQE + BC4AAAAAAAAAAAAAAAAAAAAAAAAAAJGMiTU/LSLOGBENQ5luVf9AODSltZqK/Z6Qh/3s6OX+xL+8/nx8 + fKwAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAQ0cEw+GAwIBFHdVQf0dFRB6mnpm/Yt4 + beQXFxdEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBQMyAAAABUgz + J9gMCAY6AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAA8H8AAPAfAADwBwAA4AMAAOABAADAAQAAwAEAAMAD + AACAAwAAgAMAAAAHAAAABwAAAA8AAIAPAADgHwAA/B8AACgAAAAYAAAAMAAAAAEAIAAAAAAAYAkAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ0NDBwAAADEAAABCAAAAH1BQ + UAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAwMDHQAAAIFSUlLFBQUFiAAAAEwBAQEbQEBABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAQzw8 + PL7+/v7/1dXV9lZWVscBAQGAAAAARAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAdKioqOr///////////7+/v/Nzc30S0tLwQIC + An0AAABCAAAAFwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAA0HR0dqvf39/77+/v/+vr6/v7+/v/+/v7+/v7+/sLBwvE/Pz+8AAAAdgAAADsAAAATAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABigYGB3P7+/v7Jycn/i4uL/ra2 + tv/u7u7+/v7+/v7+/v79/f3+t7e37TQ0NLUAAABwAAAAOAAAABFycnICAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAACUICAiW5OTk+v/////5+fn/ysrK/5OTk/+Dg4P/rq6u/+fn5//+/v7///////7+ + /v+rrKvqLCwssAAAAGkAAAAgkZGRAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAE9ZWVnM/v7+/v7+ + /v7//////v7+/v39/f/Y2Nj+oaGh/oKCgv6mpqb/39/f/v7+/v7/////+fn5/qCgoOACAgJGf39/AwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAIHFxcXz/v7+/rq6uv60tLT/6enp/v7+/v/+/v7+/v7+/unp + 6f6ysrL/hISE/piYmP7FxcX/+fn5/ri4uN8AAAAto6OjAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAAQDMz + M7r+/v7////+/9jY2P+fn5//gYGB/6SkpP/e3t7//f39////////////9fX1/8PDw/+dnp3/9/f3/0tK + S5EYGBgPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAb56enuf//////v7+/v7+/v7+/v7/5+fn/rKy + sv+Ghob+mJiY/s7Ozv75+fn//v7+/v7+/v7+/v7/2dnZ8AQEBEB4eHgDAAAAAAAAAAAAAAAAAAAAAD8/ + PwEAAAAvFRUVpPPz8/3+/v7/xcXF/+vr6//////////////////19fX/x8fH/5GRkf+Kior/tra2/+3t + 7f//////cnJyrwAAABgAAAAAAAAAAAAAAAAAAAAAAAAAACkpKQoAAABed3d32P7+/v76+vr/qKio/oKC + gv6goKD/1dXV/vv7+//+/v7+/v7+/v7+/v7a2tr/pKSk/svLy/7x8fH6EhISWAAAAAYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAACIFBQWR3d3d+f7+/v7//////v7+/vDw8P6/v7//jo6O/oyMjP+7u7v+8PDw/v7+ + /v7//////v7+/v7+/v6YmJjKAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbBgAAAExPT0/I/v7+/v7+ + /v7CwsL/7u7u/v7+/v7/////+/v7/tbW1v+ioqL+g4OD/qmoqf7e3t7//v7+/v7+/v4sLCx3AAAACgAA + AAAAAAAAAAAAAAAAAAAAAAAABQUFFwAAAH28vLzx//////X19f+kpKT/gYGB/6Kiov/X19f//Pz8//// + ///+////7ezt/7q5uf+Wlpb/+fn5/76+vuMAAAAwAAAAAQAAAAAAAAAAAAAAAAAAAACVlZUCAAAANykq + KbLw7u3+ycTB/vz8/P7+/v7/7+/v/sDAwP6QkJD/1tbW/v/////+/v7+/v7+/v7+/v79/f3//v7+/lJS + UpcAAAARAAAAAAAAAAAAAAAAAAAAAAAAAACPj48DAAAAOXl5ecnCta79STUo/tDQ0P7+/v3+6efm/v7+ + /v78/Pz//f39/v/////+/v7+/v7+/v7+/v7/////397f8wYGBkQAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAADQ0NDiIYE2ybdFz9f1xH+7Kysu/g29j9YEQ0/srKyf7/////+fn5/v7+/v////////////// + ////////eHh4swAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBRSG+TalH/SjUoxxYQ + DGOVdWP9oXVa/rGwsPX49/f+dlxN/b69vP7+/v7+/v7+/v7+/v709PT7FxcXXgAAAAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5KRz8rHhbXBwQDOSUaFFOBXEf/e1hE7QUFBU+bf2/7sYNl/qqn + pfz7+/v+kn1x/cLAwP6fn5/PAAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAYEAx4xIhnbEAsIYQYEAx1zUj//mW5V+wYFBWOXgHP7tolr/qWhnvszMzN5AAAACwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMrHhfGGxMOjQQCAhlmSTj+pXhd/Q4NDF4AAAAbAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEoHBW+HRUPlAAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+D/8A/gP/APwA/wD8AD8A+AAPAPgA + AwD4AAEA8AABAPAAAQDgAAMA4AADAMAABwDAAAcAwAAPAIAADwCAAA8AAAAfAAAAHwCAAD8AwAA/AMAA + fwD4AH8A/wB/AP+h/wAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAsAAAANgAAACAPDw8Kf39/AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPT08DAAAAKgAAAHMAAACSAAAAcQAA + AEQAAAAfDw8PCX9/fwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAABOCAgIqdPT + 0/loaGjWBAQEngAAAG8AAAA/AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAIQAA + AHVjY2PW/v7+//7+/v/c3Nz5W1tb0QEBAZcAAABoAAAAOwAAABoAAAAHAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAkAAABBAAAAms/Pz/f////////////////+/v7/09PT91FRUMsAAACTAAAAZgAAADoAAAAZAAAABgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAGQAAAGg6OjrH/v7+/////////////////////////////v7+/8rKyvVFRUXIAAAAkQAA + AGMAAAA0AAAAFAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAUAAAA1AAAAjqenp+3//////fz9/8zMzP/t7e3//f39//////////////////7+ + /v++vr7yOTk5wgAAAIoAAABcAAAAMQAAABMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAFkaGhq2+vr6/v/////a2tr/fn5+/4ODg/+pqan/4uLi//39 + /f/////////////////+/v7/s7Oz7y8vL70AAACIAAAAWgAAAC8AAAASPz8/AwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAApAAAAf39/f+D+/v7///////39/f/V1dX/nJyc/35+ + fv+AgID/oaGh/9vb2//9/f3//////////////////v7+/6enp+wlJSW5AAAAhQAAAFIAAAAfHx8fBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAEoEBASl5ubm/P////////////////// + //////7/4+Pj/6urq/+BgYH/fn9//5mZmf/U1NT//Pz8/////////////v7+//v7+/6bm5voHR0dpgAA + AEkAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAfAAAAcllZWdL+/v7///////b2 + 9v/+/v7///////////////////////Dw8P+7u7v/iYmJ/35+fv+QkJD/x8fH//j4+P/+/v7///////7+ + /v/o6Oj7BAMEVQAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAD4AAACXxMTE9f// + ///9/f3/j4+P/5SUlP/Gx8b/9/f3///+//////////////7////6+vr/zc3N/5WVlv9+fn7/hYWF/6qq + qv/j4+P//v7+/46OjskAAAAyPz8/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAZDEx + McP+/v7///////v7+/++vr7/i4uL/35+fv+IiIj/urq6//Hx8f///////////////////////v7+/97e + 3v+lpaX/f39//9TU1P/9/f3+IyMjfAAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA + ADEAAACKnZ2d6v/////////////////////7+/v/0tLS/5ubm/9+fn7/goKC/62urf/m5ub///////// + ///////////////////v8PD//v7+/7S0tOEAAAA+Hx8fBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAQAAAAVRMTE7H29vf+///////////////////////////////////+/+Xl5f+wsLD/g4OD/35+ + fv+cnZz/1NPU//z8/P/////////////////+/v7/SEhImQAAAB9/f38BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAACYAAAB8dXV13f7+/v//////zMzM/7i4uP/u7u7///////////////////////// + ///19fX/w8PD/4+Pj/9+fn7/ioqK/7a2tv/z8/P//////9nZ2fIBAQFNAAAADAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAKAAAARwICAqHg4N/6//////////+1tbX/gICA/35+fv+ioqL/2NjY//79 + /v///////////////////v///f39/9fY1/+hoaH/fn5+/9jY2P/+/v7/bm5utQAAACgAAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAj4+PAQAAAB0AAABuUFBQz/7+/v/////////////////v7+//vLy8/4qL + i/9+fn7/jY2N/7+/v//w8PD//////////////////////////v/t7e3//v7+//Ly8vwODg5kAAAAEQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHx8HAAAAOwAAAJS5ubny//////////////////////// + ///+/////Pz8/9TT1P+fn5//f39//39/f/+oqKj/4ODg///////////////////////+/v7/lZWVzQAA + ADMAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAABhKCgov/7+/v///////f39/6io + qP/Pz8///Pz8/////////////////////v/q6ur/tra2/4eHh/9+fn7/lZWV/8rKyv/5+fn///////7+ + /v8pKSmBAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPT08EAAAALgAAAIeUlJTn/v7+//// + ///u7u7/kJCQ/35+fv+Ghob/tra2/+3t7f/////////////////+////+fn5/87Ozv+amZn/fn5+/9TU + 1P//////urq65QAAAEAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAABRDQ0NrfHx + 8f79/f3//v7+///+///9/f3/29zb/6qqqv+Dg4P/fX19/6Wlpf////7///////////////////////// + /v/m5+f//f39//7+/v9PT0+fAAAAIQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAA + AG1sbGzX6+rp/pF7bf6SkI/+/f39//////////////////T09P/FxcX/xMTE//////////////////// + ////////////////////////39/f9QICAlIAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAXAAAAWqmoqOPSzsz8gFtF/y8pJf7v7+///v7+/+ro5v7q6un+/v7+///+//////////////// + //////////////////////////////7+/v91dXW5AAAAKwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAA8PDwcAAAAhJxwWg5VyXf3IkXD/SkA6/evr6v/+/v7/i2pW/TQsJ/76+vr///////// + ////////////////////////////////////////9fX1/RISEmkAAAASAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9fXwJGMiaNhmBK/8SObf8QCwiqODUzncq5r/2qf2X8Tjkt/vDw + 8P7+/v7/0MS9/YiAfP36+vr+//////////////////////////+cnJzSAAAANQAAAAUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0rIZZpSzn/ZEg3/AIBATArHxhsdFNA/8aQ + b/9UPTHtkJCQze7t7PyukoH9TTcp/9jY2P3//////Pz8/uzr6v7+/v7//v7+/y8vL4YAAAAZAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwcFQCMYEtQMCAZoAAAAADEj + G292VUH/tIJk/xoSDZwCAQE+kWpT/KmBZv57WEP+2dnZ+/7+/v+5ppv9STQo/t7e3v7BwcHpAAAAQgAA + AAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAACwgGNT0rIP0uIBjmAgEBGgoHBSlvTz3/vYlp/1Y9L+QGBgZgrJOF+qSHc/yLZU3/0tHR/VdX + V6EAAAAiAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAwICJQEBABAAAAAAAgEBD002KfpjRjX/EQwJewUEAypqTDr/rYJk/3tY + RPtUVFSZBQUFQQAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgGVRALCHUAAAADAwIBE1A5 + K/6WbFP/LiAYswAAABUAAAAMAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAGRENkiIXEdEDAgEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP/A////gD///4AP//8AA///AAH//wAAf/4AAB/+AAAH/AAAA/wAAAP4AAAD+AAAA/gA + AAfwAAAH8AAAB+AAAA/gAAAPwAAAH8AAAB/AAAA/gAAAP4AAAD+AAAB/gAAAf4AAAP/AAAD/4AAA/+IA + Af/+AAH//yAD///wA////x//KAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAYAAAAUAAAAJQAAACsAAAAhAAAAEwAAAAdfX18BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAgAAABIAAAAzAAAAVwAAAGUAAABYAAAAPQAAACQAAAASCwsLB1tbWwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAADw8PBgAAACQAAABWAAAAiAECAaMAAACTAAAAeQAAAFgAAAA7AAAAIgAA + ABAHBwcGY2NjAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADwAAADoAAAB3AQEBrcfHx/mBgYHkFxcXuQAA + AJYAAAB5AAAAWQAAADkAAAAgAAAADwAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHQAAAFMAAACQRERE0v7+ + /v/+/v7/5ubl+3Fxcd8SEhK0AAAAkwAAAHMAAABSAAAANQAAAB0AAAAOAAAABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAALwAA + AG0BAQGnqqqq8P7+/v7+/v7+/v7+/v7+/v7a29r6a2tr3AQEBKwAAACNAAAAbwAAAE4AAAAyAAAAHAAA + AAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAAYAAAASAAAAIgnJyfF9fX1/v///////////v7+/v/////+/v7//v7+/tvb2/pfX1/YCQkJrAAA + AI0AAABvAAAAUAAAADIAAAAcAAAADQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAkAAAAqAAAAYgAAAJ+IiIjn/v7+/v///////////v7+/v///////////v7+/v7+ + /v/8/Pz+z8/P91NTU9MICAiqAAAAiwAAAGwAAABNAAAAMQAAABkAAAALAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABMAAAA/AAAAfRAQELnh4eH7/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v39/f7Dw8P1R0dH0QAAAKQAAACJAAAAaQAAAEcAAAArAAAAFgAA + AAkAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACMAAABaAAAAlmRkZN3+/v7//v7+/v// + ///w8PD/8PDw/vr6+v/+/v7//v7+/v///////////v7+/v/////+/v7//v7+/r6+vvVAQUHOAgICpQAA + AIUAAABlAAAARgAAACoAAAAWAAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADgAAADcAAAB0AQEBrMrK + yvn+/v7//v7+/v7+/v+rqqv/iIiI/qampv/Nzs3/8PDw/v39/f///////v7+/v///////////v7+/v7+ + /v/39/f+s7Oz8TQ0NMcCAgKfAAAAggAAAGIAAABEAAAAKgAAABUAAAAJAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGwAA + AE8AAACNOTk5zv7+/v///////v7+/vLy8v+IiIj/fn9//n9+fv+BgoL/mJiY/srKyv/x8fH//f39/v// + /////////v7+/v///////////v7+//b39/6mpqbtKSkpxAAAAJsAAACAAAAAYQAAAEEAAAAmAAAAEwAA + AAZDQ0MBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAALAAAALgAAAGsBAQGlpKSk7v7+/v7+/v7+/v7+/v7+/v7p6en+s7Oz/oeHh/5+fn7+fn9//n5+ + fv6QkJD+v7+//u7t7f79/f3+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/f39/pqamuwoKCjCAAAAnQAA + AH8AAABeAAAAPAAAAB0AAAAKR0dHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAMAAAAXAAAARQAAAIUgICDB7+/v/f///////////v7+/v///////////v7+/u/w + 7//BwcH/kJCQ/n9/f/9+f37/f39//o2Njf+5ubn/6urq/v39/f////////////7+/v7///////////7+ + /v7u7u79lJSU6RwcHLwAAACXAAAAcQAAAEAAAAAZAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAnAAAAXgAAAJx8fHzk/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+9/f3/s7Ozv6YmJj+fn5+/n9/f/5+fn7+h4aH/rGxsf7o6Oj+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/urq6vyFhYXjExMTpAAAAFwAAAAmAAAABwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABIAAAA9AAAAew0NDbfe3t76/v7+/v// + ///+/////v7+/v///////////v7+/v///////////v7+/v/////9/f3/39/f/qioqP+EhIT/fn5+/n5+ + fv+AgID/o6Oj/9zc3P77+/v///////7+/v7///////////7+/v7+/v7/6urq/QgICHAAAAAnAAAABwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAACEAAABXAAAAk1hY + WNn9/P3//v7+/v/////y8vL/rq6u/tPT0//w8PD//f39/v///////////v7+/v///////////v7+/v39 + /f/s7Oz/u7u7/oyMjP9/f3//fn5+/4CAgP6ZmZn/y8vL/+rq6v719fX//f39//7+/v7+/v7/pqam3wAA + AFAAAAAcDAwMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAA + ADUAAAByAAAAqcHBwff+/v7+/v7+/v7+/v7Ly8v+fn5+/n5+fv6Ojo7+urq6/u7u7v7+/f3+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/vX19f7Kysr+lJSU/n19ff5+f37+fn5+/oqKiv6srKz+6Ojo/v7+ + /v75+fn+QkJCoAAAADgAAAAQg4ODAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAEAAAAGgAAAE8AAACMMTExzP7+/v7//////v7+/v/////S0tL/lpeX/n9/fv9/fn//fn5+/oSE + hP+urq7/4eHh/v39/f///////v7+/v///////////v7+/v///////////v3+/9vb2/6kpKT/goKC/35+ + fv6Hh4f/5OTk//7+/v7GxsbsAwMDYgAAACITExMGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAKAAAALAAAAGkAAACjm5ub7P7+/v7//////v7+/v//////////+fn5/trZ + 2v+lpaX/hISE/n5+fv9+f37/goKC/qOjo//a2tr/+vr6/v///////////v7+/v////////////////7+ + /v78/Pz/5+fn/7Kysv6/wL///f39//7+/v5hYWG2AAAAQQAAABNPT08CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAVAAAAQgAAAIMZGRm+6urq/f7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+6enp/ra2tv6HiIf+fn5+/n9/f/5/f3/+l5eX/s3Nzf75+fn+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/uHh4fcTExN0AAAAKwAAAAkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAlAAAAXQAAAJt3d3fi/v7+//7+ + /v7//////v7+/v///////////v7+/v///////////v7+/v///v/39/f/zc3N/pmZmf+AgID/fn5+/n5+ + fv+IiIj/ubm5/uvr6//+/v7///////7+/v7///////////7+/v7//////v7+/4WFhcsAAABKAAAAGScn + JwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABEAAAA7AAAAdwkJ + CbTV1tX5//7///7+/v7/////7+/v/vj4+P///////v7+/v///////////v7+/v///////////v7+/vr6 + +v/e397/q6ur/oWFhf9+fn7/fn5+/oSEhP+np6f/2NjY//T09P79/f3///////7+/v7/////+vr6/h8f + H4cAAAAxAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA + AB8AAABTAAAAkE1NTdX7+/v+/v7+/v7+/v78/Pz+np6e/o+Pj/69vb3+8vLy/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/uzs7P69vb7+i4uL/n59fv5+f3/+fn5+/o+Pj/7BwcH++fn5/v7+ + /v7+/v7+r6+v5AAAAFIAAAAeAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAADAAAADMAAABvAAAAp7y8u/X+/v7///////7+/v7t7e3/hYWE/n5+fv9+fn7/fX19/qio + qP/b3Nv//Pz8/v/+/////////v7+/v///////////v7+/v///////v//+/v7/tHR0f+enp7/gICA/35+ + fv6Ghob/7u7u//7+/v76+vr+REREogAAADcAAAAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAnJycDAAAAGAAAAEsAAACJJycnx/z8/P////////////7+/v79/f3/5+fn/ra2 + tv+MjIz/f39//n9/fv9/f3//k5OT/sjIyP/y8vL//v7+/v///////////v7+/v///////////v7+/v// + ///7+/v/4+Pj/66urf67u7v//v7+//7+/v7Nzc3uBgYGZQAAACMAAAAGAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAKgAAAGYAAACgkZGR6f7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v709PT+zs7O/pmZmf5/f37+f39//n19ff6Hh4f+qqqq/uDg4P79/f3+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v79/f3+/v7+/v7+/v5oaGi7AAAAQwAAABQAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEdHRwIAAAAUAAAAQQAAAIIWFha85ubm/f// + //////////////7+/v7//////v7+/v///////////v7+/v7+/v/l5eX/srKy/omJif9+fn7/f39//nx7 + fP+UlJT/y8vL/vf39////////v7+/v////////////////7+/v7//////////+Xl5fgUFBR1AAAAKwAA + AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAkAAAAWwAA + AJpra2ve/v7+/v////////////////Dw8P77+/v//v7+/v///////////v7+/v///////////v7+/vLx + 8f/IyMj/l5iX/oGBgf9/f3//fn5+/ouLi/+5ubn/6urq/v39/f////////////7+/v7//////v7+/42N + jc8AAABMAAAAGQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAe3t7AQAA + ABAAAAA5AAAAdgUFBbHOzs73/v7+/v7+/v7+/v7++/v7/oiIiP6UlJT+xMTE/vn5+f7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7++/v7/tzc3P6rq6v+g4OD/n9/f/5+fn7+gYGB/qSkpP7a2tr+/f39/v7+ + /v7+/v7+/v7+/iUlJY0AAAAzAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAFxcXBAAAAB4AAABSAAAAkEhISNP7+/v+/v7+/v//////////3Nzc/39/f/5/f3//fX19/n9+ + fv+tra3/4ODg/v7+/v///////v7+/v///////////v7+/v7/////////8/Pz/sLCwv+UlJT/f39//n9/ + f/+Dg4P/6+vr//7+/v7+/v7/srKy5gAAAFQAAAAfAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAADEAAABsAAAApbCwsPL+/v7//v7+/v//////////+/v7/+Li + 4v6wsLD/iouK/oCAgP9/f3//fn5+/pWVlf/Kysr/8/Pz/v///v///////v7+/v///////////v7+/v// + ///4+Pj/2tra/qWlpf+ysrL//v7+//7+/v77+/v+S0tLqAAAADoAAAARAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3NzcCAAAAFgAAAEcAAACGHR0dw/r6+v7+/v7//Pz8/v39 + /f////////////7+/v7+/v7/8vLy/svLy/+bm5v/gICA/oGBgf99fX3/lZWU/v///////////v7+/v// + /////////v7+/v///////////v7+/v7+/v/7+/v///////7+/v7U1NTxCAgIaQAAACUAAAAHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHx8FAAAAIgAAAFwAAACaioqK5v39 + /f7Lw7/9koB2/ZiXlv309PT+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+6Ojo/rS0tP6NjY3+xcXF/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v5sbGy9AAAARAAA + ABQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHx8HAAAAJAAA + AF4UFBSj4OHg+/b39/+PdWX9b1A9/hoUEP64uLj+/f39//7+/v7//////v7+/v7+/v///////v7+/v7+ + /v/19PX/+fn5/v///////////v7+/v///////////v7+/v///////////v7+/v///////////////+jo + 6PoZGRl7AAAALQAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAfHx8FAAAAGwAAAEcpKSmVx8bG8PDx8v+TeGn7flpF/h8VD/+TkpL9+Pj4//7+/v77+/r+1M/L/dLQ + z/39/f3//v7+/v///////////v7+/v///////////v7+/v///////////v7+/v///////////v7+/v// + /////////v7+/5WVldQAAABOAAAAGwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA3NzcCAAAACwAAACIAAAA/MCMboZh5Zvubc1z9z5Z0/jQlHP6dnZ3+9vb2/v7+ + /v7Hvbj9imNL/iUaFP6ysrH9/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/f39/ikpKZAAAAA0AAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzc3AgAAAAkAAAAWVz8wuotkTf+xf2L/z5Z0/isf + GPJlZWXP0dHR8/v7+/6+tK/7mW1T/jYmHP97eXj+/v7+/v/////+/v7/+Pj3/u/u7v79/f3//v7+/v// + /////////v7+/v///////////v7+/v/////+/v7/u7u76gAAAFYAAAAgAAAABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMTEKak07zn5b + Rv+5hWf/tIJk/hMNCsQAAABMHBYSlraXhPyYhHj6yJJw/nJRPv9/fXz9/f39/v/////29fX+o4p7/U8/ + Nv2sq6r+/v7+/v///////////v7+/v///////////v7+/v/////8/Pz+U1NTrAAAADsAAAASAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACCgYENYkY22W1OO/6oeV7+W0Ey/gUDAlwAAAAZOysgkpJpUf5yUj/+1516/nVUQP5qaGfi3t7e+P7+ + /v7t6un+kGpT/VQ8Lf5PS0n8/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7W1tbyCQkJawAA + ACUAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACAf38ENCUcwD0rIP8/LCH/GRENxQAAAAUAAAADTjgrpXJSP/6QZ0//1pt4/lA5 + LPgCAQFoEBAQdaSNgPbDtq77r4Rn/Z90Wf9VT0z8/v7+/v/////9/f3/0snD/YByav3EwsL9/v7+/v7+ + /v91dXXCAAAARQAAABUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwUDOBwTDr8VDgqgAgEBHAAAAAAAAAAARzMnpXNS + P/6OZk7/rHxg/hoSDcAAAAAgBAMCP5xxV/5oSjn/zJp3/qh5Xf9cVlT39/f3/v7+/v/z8vL+lXVi/WNG + Nv9IQ0D9/v7+/uzs7PwcHByAAAAALwAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAGBENbk83Kv5ALCH+MiIa+AQDAjoAAAADDwoIPYhiS/5oSjn+1Jt4/otkTf4HBQSVDg4OfauZ + jvfMw7/7onxk/LmJaf5LQz78/v7+/pubm9UAAABPAAAAHAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAQEAChcQDKQdFA/JCQYEVAAAAAAAAAAACgcFNGJGNv97WEP/wIpr/kMv + JPACAQE6AgIBQZJoUf5ROy7+wJRz/r6Ka/9XT0v28vLy/DIyMo0AAAAyAAAADgAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEADD4r + IPVFMCT/STMn/hEMCZMAAAAGCgcFOIBcR/9SOi3/2KJ9/qJ0Wv8RDAqoJycncgAAADoAAAAZAAAABQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAwJBlofFRDKFA0KmgAAAAcAAAAABgQDJ0w2Kf56V0L+xI1t/lU8LvcDAgFAAAAAHAAA + ABIAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAQAAAAAAAAAAAAAABDMjGuNGMSX/SjQo/hUP + C54AAAAHAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkG + BEIfFRDWFQ8LpAEAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/+Af///wAA//wAf///AAD//AAf//8AAP/4 + AAf//wAA//gAA///AAD/+AAA//8AAP/wAAA//wAA//AAAA//AAD/4AAAA/8AAP/gAAAA/wAA/8AAAAA/ + AAD/wAAAAA8AAP/AAAAABwAA/4AAAAAHAAD/gAAAAAcAAP8AAAAABwAA/wAAAAAHAAD/AAAAAAcAAP4A + AAAADwAA/gAAAAAPAAD8AAAAAB8AAPwAAAAAHwAA+AAAAAA/AAD4AAAAAD8AAPgAAAAAPwAA8AAAAAB/ + AADwAAAAAH8AAOAAAAAA/wAA4AAAAAD/AADAAAAAAf8AAMAAAAAB/wAAwAAAAAH/AACAAAAAA/8AAIAA + AAAD/wAAgAAAAAf/AACAAAAAB/8AAIAAAAAP/wAAwAAAAA//AADwAAAAD/8AAPAAAAAf/wAA8AAAAB// + AAD4YAAAP/8AAP/gAAA//wAA/+GAAD//AAD//4AAf/8AAP//wgB//wAA///mAf//AAD///8P//8AACgA + AABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAQAAAAMAAAAFwAAACEAAAAkAAAAIAAAABYAAAAMAAAABT8/PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD8/PwEAAAAKAAAAGwAAADIAAABGAAAATgAAAEcAAAA4AAAAJgAAABcAAAAMAAAABT8/ + PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAC8AAABTAAAAcQAAAH4AAAB5AAAAZgAA + AE8AAAA5AAAAJQAAABcAAAAMAAAABT8/PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAACAAAABFAAAAcgAA + AJUDAwOuAAAAowAAAJMAAAB+AAAAZgAAAE4AAAA3AAAAJAAAABUAAAALAAAABD8/PwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + ABEAAAAvAAAAWwAAAIsAAACutbW195ubm+8ZGBnGAAAApgAAAJMAAAB9AAAAZAAAAEwAAAA1AAAAIQAA + ABMAAAAJAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAcAAAAbAAAAQAAAAHAAAACdIiIizv7+/v/+/v7/+vr6/42Nje0SEhLCAAAApQAA + AJIAAAB6AAAAYAAAAEcAAAAxAAAAHwAAABIAAAAJAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAANAAAAKQAAAFMAAACEAAAAq5GQke7+/v7///////// + ///9/v3/9PT0/oCAgOkMDAy/AAAAowAAAI4AAAB2AAAAXAAAAEUAAAAvAAAAHgAAABEAAAAIAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAADkAAABoAAAAlwkJ + CcHy8vH+//////////////////////7+/v/9/v3/7u7u/nR1dOUHBwe6AAAAoAAAAIsAAAB0AAAAXAAA + AEQAAAAvAAAAHgAAABEAAAAIAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACwAA + ACMAAABMAAAAfQAAAKZqamri/v7+//////////////////////////////////7+/v/+/v7/5+fn/mlp + aeEEBAS2AAAAngAAAIoAAABzAAAAWwAAAEMAAAAuAAAAHQAAABEAAAAIAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAABMAAAAzAAAAYQAAAJABAQG21dXV/P7+/v////////////////////////////// + //////////////7+/v/+/v7/39/f/WBgX94CAgKzAAAAnQAAAIkAAAByAAAAWQAAAEIAAAAtAAAAHAAA + AA8AAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAfAAAARQAAAHYAAAChQEBA2P7+/v////////////// + //////////////////////////////////////////////7+/v/+/v7/2NjY/FRUVNsBAQGxAAAAnAAA + AIgAAABwAAAAWAAAAD8AAAAqAAAAGQAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAQAAAALQAAAFoAAACKAAAAr6qq + qvX+/v7///////////////////////////////////////////////////////////////////////7+ + /v/+/v7/zMzM+khHSNgAAACvAAAAnAAAAIYAAABtAAAAUwAAADsAAAAnAAAAGAAAAA0AAAAFAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAGwAA + AD8AAABvAAAAmxoaGsz+/v7///////////////////7///r6+v/+/v7//v7+//////////////////// + //////////////////////////////7+/v/+/v7/wMDA+Ds8O9QAAACsAAAAmQAAAIIAAABpAAAAUAAA + ADkAAAAmAAAAFwAAAAwAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAADQAAACgAAABSAAAAgwAAAKqGhobr/v7+//////////////////f39/+Li4v/ra2t/9DQ + 0P/n5+f/+fn5///+//////////////////////////////////////////////79/v/+/v7/tbW19jAw + MM8AAACpAAAAlQAAAH8AAABoAAAATwAAADkAAAAmAAAAFwAAAAwAAAAFAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABYAAAA4AAAAZgAAAJUGBga+7Ozs/v7+/v////////////// + ///MzMz/fX19/35+fv9/f3//kZGR/7q6uf/i4uL/+Pj4//7+/v////////////////////////////// + //////////////7+/v/+/v7/qqqq9CYmJsoAAACnAAAAlAAAAH8AAABnAAAATgAAADgAAAAlAAAAFgAA + AAsAAAAFPz8/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAoAAAAiAAAASgAAAHsAAAClYmJi4P7+ + /v//////////////////////np6e/319ff9/f3//f39//39/f/9+fn7/jIyL/7OztP/g4N//9/f3//7+ + /v////////////////////////////////////////////7+/v/+/v7/oKCg8R0dHccAAACmAAAAkwAA + AH0AAABlAAAATQAAADYAAAAjAAAAFAAAAAkAAAADPz8/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAASAAAAMQAA + AF4AAACOAAAAtMrKyvv+/v7///////////////////////f49//Jycn/kJGR/318ff9/fn//f39//39/ + f/99fX3/hoaG/6qrqv/c3Nz/9/f3//7+/v////////////////////////////////////////////7+ + /v/8/Pz/lJSU7hUVFcQAAAClAAAAkgAAAHwAAABjAAAASQAAADAAAAAcAAAADQAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAIAAAAHQAAAEMAAABzAAAAnzQ0NNT+/f7///////////////////////////////////////39 + /f/Y2Nj/nZ2d/35+fv9+fn7/f39//39/f/9+fn7/goKB/6Kiov/X19b/+Pj4//7+/v////////////// + //////////////////////////////7+/v/39/f/h4eH6g4ODsEAAACkAAAAkAAAAHYAAABXAAAAOAAA + ABwAAAALAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAADwAAACsAAABXAAAAhwAAAK2hoaHz/v7+//////////////////// + ///////////////////////////+///////k5OT/rKys/4KCgv99fn3/f39//39/f/9+fn7/fn9//5mZ + mf/R0dH/+fn4//7+/v///////////////////////////////////////v7+//3+/f/x8fH+e3t75wkJ + CbwAAACcAAAAfQAAAFYAAAAuAAAAEgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABkAAAA8AAAAbAAAAJkTExPI/Pz8//// + ///////////////////////////////////////////////////////////////////v7+//vLy8/4mJ + if99fX3/f39//39/f/9+fn//fX19/5CRkf/IyMf/9vb2//////////////////////////////////// + /////////v7+//7+/v/q6ur+cHBw4AcHB58AAABpAAAAOQAAABgAAAAFAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAwAAAAmAAAAUAAA + AIEAAACpfHx86P7+/v////////////////////////////////////////////////////////////// + ///////////////////49/j/zMzM/5SVlP99fX3/fn5+/39/f/9/f3//fX19/4iIiP+6urr/8PDw//// + /////////////////////////////////////////v7+//7+/v/n5+f9Dw8PhgAAADsAAAAYAAAABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAQAAAAVAAAANgAAAGQAAACTAwMDu+bm5v7+/v7/////////////////8fHx/+np6f/9/f3//f39//// + ///////////////////////////////////////////////////+/v7/39/f/6eoqP+AgID/fn5+/39/ + f/9/f3//fX59/4KCgv+tra3/5eXl//39/f/9/f3//v7+///////////////////////+/v7/vr6+8QAA + AGMAAAAyAAAAEgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAKAAAAIQAAAEkAAAB5AAAApFZWVt3+/v7//////////////////////7m5 + uf98fX3/lJSU/7+/v//p6en/+/v7//////////////////////////////////////////////////7/ + ////////7u7u/7m5uf+Hh4f/fX19/39/f/9/f3//fn5+/35+fv+ZmZn/w8PD/97e3v/v7+///f39//// + /////////v7+/1NTU7cAAABPAAAAJQAAAAs/Pz8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAEQAAADAAAABdAAAAjQAAALK+vr76/v7+//// + //////////////r6+v+Kior/f39//39/f/99fX3/hoaG/7CwsP/j4+P//Pv7///+//////////////// + ////////////////////////////////////////+Pj4/8nJyf+RkZH/fX19/39/f/9/f3//f35//319 + ff+Kion/tLS0/+7u7v///////v7+/+Tk5PwEBAR0AAAAPAAAABkAAAAFAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAB0AAABCAAAAcgAA + AJ4qKirR/v7+///////////////////////w7/D/mZmY/31+fv9+fn7/f39//39/f/99fn7/gYGB/6Ki + ov/a2tr/+/v7//7+/v///////////////////////////////////////////////////////f39/9ra + 2v+goKD/fn5+/35+fv9/f37/fn9+/5OTk//w8PD//v/+//7+/v95eXnNAAAAVgAAACsAAAAOPz8/AgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AA4AAAArAAAAVgAAAIYAAACtmpma8P7+/v/////////////////////////+///////k5OT/rayt/4KD + gv99fX3/f39//39/f/9/f37/fX19/5aWlv/Q0ND/+vr6//////////////////////////////////// + ///////////////////+/////////+jo6P+wsLD/g4OD/3x8fP/Q0ND//Pz8///////4+Pj+ExMTjAAA + AEIAAAAdAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAUAAAAYAAAAOwAAAGsAAACYDQ0Nxff39/////////////////////////////// + ///////////////////y8vL/wcHB/4yMjP98fXz/f39//39/f/9/f3//fHx8/4yMjP/CwsL/9PX0//// + //////////////////////////////////////////////////////////////T09P/Nzs7//v7+//// + ///+/v7/oaGh4wAAAF0AAAAwAAAAEQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALAAAAJQAAAE4AAAB/AAAAp3Nyc+X+/v7///////// + ///////////////////////////////////////////////////7+/v/1dXV/5ycnP9+fn7/fn5+/39/ + f/9/f3//fX19/4ODg/+xsbL/6enp//////////////////////////////////////////////////// + /////////////////////////v7+/zIyMqQAAABJAAAAIQAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADQAAABiAAAAkQIC + Arjg4OD9/v7+//////////////////////////////////////////////////////////////////// + /v//////5ubm/7Kysv+FhYX/fX19/39/f/9/f3//fn5+/319fv+fn5//2NjZ//38/f////////////// + /////////////////////////////////////////v7+/8XFxfQAAABnAAAANgAAABUAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAA + ACAAAABGAAAAdwAAAKJLS0va/v7+//////////////////////////////////////////////////// + ////////////////////////////////////////9vb2/8jHx/+RkpH/fX19/39/f/9/f3//f39//3x8 + fP+Ojo7/xcXF//b29v/+//7///////////////////////////////////////7+/v9bW1u7AAAATwAA + ACYAAAAMPz8/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAABEAAAAuAAAAWwAAAIoAAACwtLS0+P3+/f//////////////////////v7+//93d + 3f///////////////////////////////////////////////////////////////////////f39/9zc + 3P+jo6P/f39//35+fv9/f3//f39//319ff+Cg4L/qamp/9XV1f/z8/P//f39//////////////////7+ + /v/o6Oj9BgYGeAAAADwAAAAZAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAbAAAAQAAAAHAAAACcIiIizv7+/v////////////// + ////////8fHx/4GBgf95eXn/jIyM/8TExP/39/f///////////////////////////////////////// + /////////////////////////////+zs7P+4uLj/h4eH/319ff9/f3//f39//35+fv99fX3/kpKS/9LS + 0v/+/v7////////////+/v7/gYCA0AAAAFcAAAArAAAADwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAANAAAAKQAAAFMAAACEAAAAq5CQ + kO7+/v7//////////////////////8DAwP99fX3/f39//39/f/98fHz/fn5+/6ysrP/m5ub////+//// + /////////////////////////////////////////////////////v////////j4+P/Mzcz/lZWV/319 + ff9+fn7/f39//39/f/+SkpL//f39////////////+/v7/xgYGJAAAABCAAAAHQAAAAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAA + ADkAAABoAAAAlwkJCcHx8vH+///////////////////////////o6Oj/sbGw/4WEhf99fX3/f39//39/ + f/9/f3//eXl5/5SUlP/Pz8//+/r7//////////////////////////////////////////////////// + //////////////7+/v/g4OD/qKio/4GBgf97e3v/1NTU/////////////v7+/6ampuYAAABeAAAAMAAA + ABEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA/Pz8BAAAACwAAACMAAABMAAAAfQAAAKZqamri/v7+//////////////////////////////////// + ///29vb/ycnJ/5SUlP99fX3/f39+/39/f/+Af3//e3p7/4ODg/+1trb/7e3t//////////////////// + ///////////////////////////////////////////+///////w8PD/xsbG//z8/P////////////7+ + /v85OTmoAAAASQAAACIAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABMAAAAzAAAAYQAAAJABAQG21NTU/P7+/v////////////// + ///////////////////////////////////+/v7/4ODg/6qqq/+DgoL/fn5+/39/f/9/gID/fn5+/3p6 + ev+VlZX/zc3N//j4+P////////////////////////////////////////////////////////////// + //////////////7+/v/MzMz2AQEBaQAAADcAAAAWAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAfAAAARQAAAHYAAAChPz8/2P7+ + /v////////////////////////////////////////////////////////////7/////////8/Pz/8TE + w/+QkJD/fX19/39/f/9/f3//f4B//3p6ev+Dg4P/uLm4//Hw8f////////////////////////////// + ///////////////////////////////////+/v7/Y2NjvgAAAFAAAAAmAAAADAAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAQAAAALQAA + AFoAAACKAAAAr6qqqvX+/v7///////////////////////////////////////////////////////// + /////////////////////////fz8/9vb2/+lpaX/gYCB/35+fv9/f3//gIB//319ff98fHz/pKSk/+Hh + 4f/////////////////////////////////////////////////+/v7/7Ozs/QgICHsAAAA9AAAAGQAA + AAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAGAAAAGwAAAD8AAABvAAAAmxoaGsv+/v7////////////////////////////IyMj/3t7e//// + //////////////////////////////////////////////////////7//////+/v7/+9vr7/jIyM/319 + ff9/f3//f39//39/f/96eXr/kJCQ/8nJyf/5+fn//////////////////////////////////v7+/4iH + iNUAAABYAAAALAAAAA8AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA/Pz8BAAAADQAAACgAAABSAAAAgwAAAKqGhobr/v7+//////////////////// + ///4+Pj/hoaG/3V1df+EhIT/vLy8//X19f////////////////////////////////////////////// + /////v////////v7+//W1tb/n5+f/39/f/9+f3//f39//4CAgP98e3z/gICA/7Gxsf/p6en////+//// + //////////////7+/v8dHR2VAAAARAAAAB4AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABYAAAA4AAAAZgAAAJUGBga+7Ozs/v7+ + /v//////////////////////zc3N/3x8fP9/f4D/gICA/3t7e/93d3f/oaGh/97e3v///v////////// + /////////////////////////////////////////v/////////q6ur/uLi4/4mIif9+fX3/f39//39/ + f/9/f3//ioqK//39/f////////////7+/v+srKzqAAAAYAAAADMAAAATAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf39/AQAAAAoAAAAiAAAASgAA + AHsAAAClYmJi4P7+/v///////////////////////////+7u7v+6urr/i4qK/35+fv+AgID/gICA/4CA + gP92dnb/h4eH/8DAwP/29vb///////////////////////////////////////////////////////// + ///5+fn/z9DQ/5qamv9+fn7/fX19/8nJyf/////////////////+/v7/QEBArQAAAEwAAAAjAAAACwAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAASAAAAMQAAAF4AAACOAAAAtMrKyvv+/v7//////////////////////////////v////////n5 + +f/T09P/np6e/4GBgf9/f3//gICA/4GBgf98fHz/eXl5/6Sjo//f39/////+//////////////////// + /////////////////////////////////v//////5ubm/7e4uP/6+vr////////////+/v7/09PT+AEB + AW0AAAA4AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAHAAAAHAAAAEIAAAByAAAAnzQ0NNT+/f7///////z8/P/7+vr//Pz8//// + /////////////////////////v/////////s7Oz/vr69/42Njf9/f37/gYGB/4GBgf+BgYH/kZKR//// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+/2pqasMAAABTAAAAKAAAAA0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/f38BAAAACwAAACYAAABRAAAAgwAAAKuhoaHz/v7+//j4 + +P+5sq38lomC/qqqqf3z8/P////////////////////////////////////////////7+/v/2dnZ/6Sk + pP+CgoL/fn1+/9PT1P////////////////////////////////////////////////////////////// + //////////////////////////////Dw8P4KCgqAAAAAPwAAABsAAAAHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf39/AQAAAA4AAAArAAAAWAAA + AIkUFBTA/Pz8//z8/P+7tbL8i2JL/2xNO/8SDAn+lpaW/ff39/////////////////////////////// + ////////////////////////7+/v/8bFxv/7+/v///////////////////////////////////////// + //////////////////////////////////////////////7+/v+Ojo7ZAAAAWgAAAC4AAAAQAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/ + fwEAAAAOAAAAKAAAAFEAAAB9gYGB3v7+/v/4+Pj/q6Sg+5BmTv9cQjL/HRQO/0A+Pf3o6Oj//v7+//// + //////////////7+/v/+/v7////////////////////////+//////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v7/IiIjmQAA + AEUAAAAfAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAB/f38BAAAACgAAAB0AAAA8AAAAYGBgYL7Dw8L09PX1/7CppfmValH/flpF/ygc + Ff85NjT92dnZ//39/f///////v7+/+/u7f6+ta/8sa+t/Pv7+//+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v7/s7Oz7QAAAGEAAAAzAAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAPAAAAIgAAADoAAABSOCkftpd3 + ZfqNdmn8tIFj/82Vc/86KR7/SkhH/dXV1P/8/Pz///////////+Te2z8iWFK/yYZEf9gXl78/v7+//// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+/0dHR7EAAABMAAAAIwAAAAsAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz8BAAAABgAA + AA4AAAAbAAAAKWVIONurfGD/hF5I/9GXdf/PlnT/PCkf/2dmZfrd3N3//f39//7+/v/9/v7/gWVU+49n + T/8vIBj/HRgV/e3t7v////////////////////////////////////////////////////////////// + /////////////////////////////////////////v7+/9ra2voCAgJvAAAAOQAAABcAAAAFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAABwEBARaBXUf6dVRB/4tkTf/UmXb/yJFw/yoeFv8CAQGILCwsppCP + jtzv7Ov9/P3+/4ptXfmygWP/XkMz/x8YFP7c3Nv+/////////////////v3+/97b2f24tLL87Ozs/v7+ + /f////////////////////////////////////////////////////////////7+/v9wcHDGAAAAUwAA + ACkAAAANAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCAYkiWNM/35bRv+YbVT/1Jp3/6Bz + Wf8WDwvpAAAAOgAAAEwkGROlsIJn/Y15bfqMaVT73qR//5huVf8iGxj95+fo/////////////v7+/9TQ + zf2OZ1D+SjMm/zQvLP3u7u7+//////////////////////////////////////////////////////// + ///z8/P+Dg4OhAAAAD8AAAAbAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwsIN39b + Rv95VkL/hV9J/9CWdP9LNSj/CQYEjQAAABcAAAAjSjUpsrGAY/9ZQDH/o3db/96jfv+ZblX/KiQi9+rq + 6v7+/v7//v7+//////+3rqn8l2tR/1c9L/8WDgn/tbW1/P////////////////////////////////// + ///////////////////+/v7/lpaW3QAAAFsAAAAuAAAAEAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAYEAyVfQzP/Vz4v/1E5K/9ZPzD/HhUP9AAAABgAAAAFAAAAC2RIN9GEX0n/QS4j/8GM + bP/Wm3j/gV1H/woHBb4IBwh/UlJSucK9u/T6+fj+vbOt/Kx8Xv+pe1//HxQO/66urfv///////////// + ///9/f3/9vX0/sjFw/zq6ur+/v7+/////////////v7+/ygoKJ0AAABGAAAAHwAAAAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKRwV2i8hGP8wIhn/JhoT/gYEA1wAAAAAAAAAAAAA + AAFrTTvheldD/3hWQv+8iGj/0ph1/0cyJv8EAgJ0AAAAQAAAAFaIYEn6rIRs+oZsXfvQn3v/zJRz/yoc + FP+8vLz7////////////////9PTz/pZ5aP1hRDP/KSEe/d7d3f3//////v7+/7q6uvAAAABjAAAANAAA + ABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCASUVDwulFg8LrgUE + A0cAAAAAAAAAAAAAAAAAAAAAXEEy2m1OPP96V0P/s4Fk/49nT/8cEw7oAAAAFwAAABsHBQRGlWtT/3xZ + Rf9tTTv/4qyF/8qScf8sHhf+qqqq8v7+/v///////v7+/8jFxPuRZ07/fFlE/x4TDf+fnp38//////7+ + /v9PT0+1AAAATgAAACUAAAALAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcbFaReQzP/QCwh/1A4Kv8vIRj/CAUEZwAA + AAMAAAAGFA4KUJFoUP9UPC7/lGtS/+GlgP+2g2X/GREN7QAAAGUZGRmXpZqU9OXg3fvGwb75pHZa/9ih + fP8xIRj/npyb/P7+/v/h4eH7AwMDcgAAADsAAAAYAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAMyKh0W9y4g + F/8qHRb/EAsImwAAAAAAAAAAAAAAABQOClCFYEr/Ujos/6Z3XP/ZnXn/fVpF/w0IBqcAAAA2AAAAUIZf + Sf2fdFr+W0k++suceP/epH//RC8i/62sq/r+/v7/eHd4yAAAAFEAAAApAAAADgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAMCASQMCAZyBgQDQgAAAAAAAAAAAAAAAAAAAAAIBgQ2Ujos/29PPP90Uj//qXpe/zAi + Gf4DAgFAAAAAFQgFBEaOZk//Ujst/1o/MP/ks4r/1Jl2/zknHf9zc3PT29vb+hQUFHgAAAA3AAAAGQAA + AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABzMj + G+5BLiL/Oige/zQkG/8SDAmrAAAAAQAAAAQOCghJi2RN/zwrIf+RaFD/566H/8CKa/8hFxHxAAAASgIC + AkwAAAA1AAAAHwAAAA0AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAALBwVRJRoT9ygcFf4WDwu5AAAADQAAAAAAAAAACQYFO1lAMP9ONyr/onRZ/9ue + e/98WUT/DgoHowAAACEAAAAgAAAAGAAAAA0AAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA0CAQEcAAAAAAAAAAAAAAAAAAAAAAIC + ARI6KB78YEQz/1xBMf+BXUf/Kx4W/AIBATAAAAAKAAAACQAAAAcAAAADAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAHBMOpjcmHP8zIxr/LR8X/w0JB38AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAgSDAmdHBMO3QsHBWsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///wA////////+AA//////// + 4AA////////gAA///////8AAA///////wAAA//////+AAAB//////4AAAB//////AAAAB/////8AAAAB + /////wAAAAB////+AAAAAB////4AAAAAB////AAAAAAB///8AAAAAAB///gAAAAAAB//+AAAAAAAH//4 + AAAAAAAP//AAAAAAAA//8AAAAAAAD//gAAAAAAAP/+AAAAAAAA//4AAAAAAAD//AAAAAAAAf/8AAAAAA + AB//gAAAAAAAP/+AAAAAAAA//wAAAAAAAH//AAAAAAAAf/8AAAAAAAB//gAAAAAAAP/+AAAAAAAA//wA + AAAAAAH//AAAAAAAAf/4AAAAAAAB//gAAAAAAAP/+AAAAAAAA//wAAAAAAAH//AAAAAAAAf/4AAAAAAA + D//gAAAAAAAP/8AAAAAAAA//wAAAAAAAH//AAAAAAAAf/4AAAAAAAD//gAAAAAAAP/+AAAAAAAB//4AA + AAAAAH//wAAAAAAAf//AAAAAAAD///AAAAAAAP///AAAAAAB///8AAAAAAH///wAAAAAA////AwAAAAD + ///+HgAAAAP////+AAAAB/////4OAAAH/////x4AAA///////gAAD///////BgAf//////+eAB////// + //8H/////////w////8oAAAASAAAAJAAAAABACAAAAAAAGBUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEdHRwEAAAAGAAAADgAAABgAAAAgAAAAIwAAACAAAAAYAAAADwAA + AAgAAAADdHR0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAAOAAAAHQAAADAAAABAAAAARgAAAEIAAAA2AAAAKAAAABoAAAAPAAAACBUV + FQNwcHABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX19fAQAA + AAgAAAAZAAAAMgAAAE8AAABmAAAAcAAAAG0AAABeAAAASwAAADgAAAAmAAAAGQAAAA8AAAAIGxsbA2xs + bAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMjAwAAAA8AAAAnAAAASAAA + AGwAAACIAAAAmAAAAJUAAACHAAAAdAAAAF8AAABJAAAANgAAACYAAAAYAAAADQAAAAcRERECAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAABcAAAA2AAAAXQAAAIUAAACjSEhI1jEx + McwBAQGsAAAAmwAAAIkAAAB0AAAAXgAAAEkAAAA2AAAAIwAAABYAAAAMAAAABQAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAADAAAACMAAABHAAAAcgAAAJkEBAS73Nvc/fPz8/2fn5/wMzMzzQAA + AK0AAACaAAAAiAAAAHMAAABeAAAARgAAADIAAAAiAAAAFQAAAAwAAAAFAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAFAAAAFAAAADAAAABYAAAAgwAAAKZKSkrb/v7+/v7+/v/9/f3/5+fn/JOTk+0rKivIAgICrAAA + AJkAAACGAAAAbgAAAFgAAABDAAAAMAAAACAAAAAUAAAACwAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKAAAAHgAA + AD8AAABqAAAAkwgICLarq6v0/v7+/v///////////v7+//39/f7g4OD8hIWE6CAgIMUCAgKpAAAAlAAA + AIEAAABrAAAAVQAAAEAAAAAuAAAAHwAAABMAAAALAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAARAAAAKgAAAFAAAAB9AAAAoSkp + Kc709PT+/v7+/v7+/v7+/v7+/v7+/v7+/v79/v3+/f39/uLi4vx8fXznCQkJvQAAAKQAAACSAAAAfwAA + AGkAAABTAAAAPwAAAC0AAAAeAAAAEgAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgAAAAbAAAAOgAAAGQAAACOAQEBsZKSkuz+/v7//v7+/v// + //////////////7+/v7///////////7+/v/+/v7/5+fn/XNzc+QUFBS/AAAApAAAAJMAAACAAAAAagAA + AFUAAABBAAAALgAAAB8AAAATAAAACgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAA8AAAAnAAAASgAAAHYAAACeIiIix9nZ2fv+/v7//v7+/v////////////////7+ + /v7////////////////+/v7//v7+/vr6+v7X19f5bGxs4hMTE7wAAACjAAAAkQAAAH4AAABpAAAAUwAA + AD8AAAAtAAAAHgAAABIAAAAJAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAA + ABcAAAA1AAAAXAAAAIgAAACrZ2dn4/z8/P///////v7+/v////////////////7+/v7///////////// + /////////v7+/v7+/v/+/v7//Pz8/s7OzvdZWVndEhISugAAAKIAAACQAAAAfAAAAGcAAABRAAAAPQAA + ACoAAAAbAAAAEAAAAAgAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADAAAACIAAABEAAAAbgAA + AJcJCQm+x8fH9////////////v7+/v////////////////7+/v7//////////////////////v7+/v// + //////////////7+/v78/Pz/wMDA9lBRUNoJCQm1AAAAoAAAAI8AAAB7AAAAZQAAAE0AAAA4AAAAJwAA + ABkAAAAOAAAABwAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFAAAADAAAABXAAAAgQAAAKZNTU3Z9PT0/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/vz7/P7BwcH5RkZG1wMDA7MAAACgAAAAjQAAAHgAAABgAAAASgAAADcAAAAmAAAAGAAA + AA4AAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAJAAAAHwAAAEAAAABpAAAAkgAAALOtra31/v7+/////////////v7+/v7+ + /v/e3t7/4+Pj//X19f74+fn//f39//7//v///////v7+/v////////////////7+/v7///////////7+ + /v/9/f3+9/f3/re3t/ZGRkbVBAQEswAAAJ0AAACKAAAAdQAAAF8AAABKAAAANgAAACYAAAAZAAAADgAA + AAcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAAQAAAAKwAAAFAAAAB7AAAAoCUlJc/w8PD9/v7+/////////////v7+/vPz8/+YmJj/iIiI/6Cg + oP6/v7//2NnY//Dw8P/8+/z//v7+/v////////////////7+/v7////////////////+/v7+/v7+//7+ + /v/u7u79ra2t8jo6Os8FBQWvAAAAmgAAAIgAAAB0AAAAXQAAAEkAAAA2AAAAJQAAABgAAAAOAAAABwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAYAAAAOQAA + AGIAAACLAQEBroODg+r9/f3//v7+/////////////v7+/tbW1v+DgoP/f39//35+fv6CgYL/kpKR/7Ky + sv/X19b/8fHx/vz8+//+/v7///////7+/v7////////////////+/v7+///////////+/v7//v7+/+7u + 7v6dnJ3tLy8vywUFBa0AAACZAAAAhgAAAHIAAABcAAAASAAAADQAAAAkAAAAFwAAAA0AAAAGIiIiAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA0AAAAjAAAASQAAAHQAAACaDw8PwOPj + 4/3+/v7//////////////////v7+/rKysv98fHz/fn5+/35/f/5/f3//fn5+/39/f/+Kior/rq6u/tfX + 1//x8fH//Pz8//7+/v7////////////////+/v7+//////////////////////7+/v7+/v7/8PDw/piY + mO0dHR3IAAAAqAAAAJgAAACFAAAAcQAAAFoAAABFAAAAMQAAACEAAAAUAAAACgAAAAQUFBQBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABYAAAAxAAAAXAAAAIYAAACpX19f4f3+/f7+/v7+/v7+/v7+ + /v7+/v7+/v7+/vn6+f7U1NP+oaGh/oCAgP59fX3+f35+/n9/f/5+fn/+fX19/oSEhP6hoaH+zc3N/u7u + 7v77+/v+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v77+/z+i4uL7SEh + IcgAAACqAAAAmQAAAIYAAABwAAAAWgAAAEMAAAAuAAAAGwAAAA4AAAAFEBAQAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAACwAAACAAAABBAAAAbgAAAJYODg67ubm59v79/v7//////////////////////v7+/v// + ///+/v7/+Pj4/97e3v6tra3/iYmJ/35+fv9+fn7/fn9//n9+fv9+f3//hISE/52dnP7IyMj/6+vq//v7 + +//+/v7+//////////////////////7+/v7////////////////+/v7+/f39/+Pj4/uDg4PpIyMjxgAA + AKkAAACWAAAAggAAAGoAAABQAAAANAAAAB0AAAANAgICBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAEwAA + AC0AAABTAAAAgAAAAKQ+Pj7V9vb2/v7+/v7//////////////////////v7+/v////////////////7+ + /v77+/v/5OXk/7i4uP+Pj4//f4B//n5+fv9/f3//f39//35+fv6Cg4P/mJiY/8LCwv/q6ur+/Pz7//7+ + /v////////////7+/v7////////////////+/v7+//////7+/v/7/Pv/2dnZ+nZ2duUbGxvAAQEBpgAA + AI4AAAByAAAATwAAAC4AAAAWAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAJAAAAHAAAADwAAABlAAAAkQIC + ArOhoaHv/v7+//7+/v7//////////////////////v7+/v////////////////7+/v7///////////7+ + /v/u7u7/w8PD/pSUlP+AgID/fn5+/39+fv5/f3//fn5+/39/f/+QkJD+vr6//+vr6v/8/Pz///7///7+ + /v7////////////////+/v7+///////////+/v7//v7+//39/f7S0tL6aWho4BAQELMAAACMAAAAZAAA + ADwAAAAeAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAPAAAAKAAAAE0AAAB4AAAAoCsrK8vh4eH8/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/vj4 + +P7U1NT+oaGh/oCBgf59fX3+fn9//n9+f/5/fn7+fX19/oiIiP6wsLD+4uLh/v39/f7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/tbW1vpramvSBQUFeQAAAEMAAAAhAAAACwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAcAAAAZAAAANwAAAGAAAACKAAAArXt7e+n9/f3///////7+/v7///////////7/ + /////////v7+/v////////////////7+/v7//////////////////////v7+/v/////+/v7/+vr6/+Hi + 4f6zs7P/jIyM/35+fv9+fn7+f39//35+fv9+fn7/g4OD/6Ojo/7X19f/9/f3///////+/v7+//////// + //////////////7+/v7///////7///7+/v/s7Oz9Dg4OggAAAD8AAAAeAAAACQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AA0AAAAkAAAASAAAAHIAAACZDg8OwtjY2Pn+/v7///////7+/v7//////v7+/9XV1f/Hx8f/6Ojo/vT0 + 9P/8/Pz//v7+//7+/v7//////////////////////v7+/v////////////////7+/v77+/v/6+vr/8TE + xP+Xl5f+gYCB/35+fv9+f3//fn5+/35+fv6Dg4P/nZyd/8nJyf/r6+v+9vb2//j5+P/8/Pz//v7+//7+ + /v7///////////39/f+VlZXeAAAAXwAAADUAAAAXAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABUAAAAyAAAAWQAA + AIMAAACnXFxc3vf39/7+/v7///////7+/v7/////9vb2/56env99fX7/ioqK/qenp//Ozs7/7e3t//v7 + +/7+/v7//////////////////v7+/v////////////////7+/v7+//////////7+/v/z8/P+z8/P/56e + nv+EhIT/fn5+/35+fv5/f3//fn5+/39/f/+Pj4/+sbGx/83Nzf/i4uL/9fX1//7+/v7//////v7+/+/v + 7/s6OjqmAAAATQAAACkAAAAQCwsLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAAAB8AAABCAAAAbAAAAJQAAAC0u7u7+f7+ + /v////////////7+/v7/////3t/e/4SEhP9/f3//f39//n19ff+BgYH/mJiY/8fHx/7w8PD//Pz8///+ + /////////v7+/v////////////////7+/v7////////////////+/v7+//////v7+//d3d3/rKus/4KC + gv59fX3/f39//39/f/9+fn7+fX19/4WFhf+hoqL/2NjY//v7+/7//////v7+/76+vuwDAwNwAAAAPQAA + AB0AAAAJYGBgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAEAAAAEgAAAC0AAABVAAAAfwAAAKMsLCzT/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+1NTU/o+Pj/59fX3+fn5+/n9/f/5/f3/+fn5+/nx8fP6MjIz+t7e3/uTk5P77/Pv+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/u/v7/69vb3+kJCP/n1+ + ff5+fn7+fn5+/n5+fv6EhIT+0NDQ/vv7+/7+/v7++Pf4/lNTU7YAAABVAAAALAAAABIUFBQEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAAJAAAAGwAAADwAAABnAAAAjwQEBLKXl5fu/v7+/v////////////////7+/v7///7//f38//Ly + 8v/Ozs//nZ2d/oODg/9+fX7/f39//39/f/5+fn7/f39//4mJif+rq6v/3t7e/vj4+P////////////7+ + /v7////////////////+/v7+//////////////////////7+/v79/f3/8fHx/8zMzP+dnZ3+gYGB/319 + ff+np6f/8fHx//7+/v7+/v7/y8vL8BQUFIMAAABDAAAAHwAAAAsvLy8CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAPAAAAJwAA + AE0AAAB5AAAAnh8fH8fm5ub9/v7+/v////////////////7+/v7/////////////////////9vb2/tra + 2v+srKz/ioqK/39+f/5+fn7/f39//35/fv9+fn7/hoaF/qalpv/U1dT/9PT0//7+/v7///////////// + ///+/v7+//////////////////////7+/v7///////////7+/v/29fX+19fX/6ysrP/h4uH//v7+//7+ + /v7+/v7/dnZ2ywAAAF0AAAAzAAAAFQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAYAAAANQAAAF4AAACJAAAArG1t + beX+/v7//v7+/v////////////////7+/v7//////////////////////v7+/v/////9/f3/5+fn/7u7 + u/6Ojo7/f39//35+fv9+f3//f39//n5+fv+AgID/mJiY/8rKyv709PT//f39///////+/v7+//////// + //////////////7+/v7////////////////+/v7+//////7+/v/+/v7///////7+/v7l5eX7JycnkQAA + AEoAAAAmAAAADTExMQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAwAAAAiAAAARQAAAHAAAACZExMTv8fHx/j+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v729vb+z8/P/p6e + nv6AgID+fn1+/n9/f/5+f3/+fn9+/nx8fP6Li4z+ubm5/ujo6P7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v6Yl5jaBAQEaAAAADkAAAAaAAAAB09P + TwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABQAAABQAAAAwAAAAVgAAAIIAAACnUlJS3Pz8/P7//////v7+/v////////////////7+ + /v7//////////////////////v7+/v////////////////7+/v7//////v7+//r6+v/k5OT/srKy/oyM + i/9+fn7/fn5+/39+fv5/f37/fn5+/4OEg/+jo6P+2NjY//f39/////////////7+/v7///////////// + ///+/v7+//////////////////////r6+v4xMTGjAAAATwAAACoAAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAA + AB8AAAA/AAAAaAAAAJMEBAS3srOy8/7+/v///////v7+/v///////////Pz8//z8/P7///////////// + /////////v7+/v////////////////7+/v7//////////////////////Pz8/uvr6//ExMT/mZiZ/4KB + gf5+fn7/f39//39+f/9+fn3+goKC/5qamv/IyMj/6+vr//r6+v79/f3//v7+///////+/v7+//////// + /////////v7+/7q6uu4ICAhuAAAAPQAAAB0AAAAJWlpaAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEQAAACsAAABQAAAAewAA + AKE1NTXR6enp/f7+/v///////v7+/v/////+/v7/1dXV/6enp/7e3t7/9/f3//7+/v///////v7+/v// + //////////////7+/v7//////////////////////v7+/v/////+/v7/9PT0/9TU1P6ioqL/hYaG/39+ + f/9+fn7+f39//35+fv9+f37/jYyN/6ytrP7S0tL/7+/v//39/f/+/v7+///////////+/v7/+vr6/l1d + XbsAAABVAAAALgAAABMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAGwAAADoAAABiAAAAjAAAAK2JiYnu/v7+//// + /////////v7+/v/////5+fn/pqam/3x8fP58e3z/lZWV/8fIx//39/f//v7+/v////////////////7+ + /v7//////////////////////v7+/v////////////////7+/v78/Pz/4+Pj/7S1tf+Ih4f+fHx8/39/ + fv9/f3//f39+/319ff6AgYH/nZ2d/9nZ2f/+/v7+////////////////4eHh+AsLC4EAAABDAAAAIQAA + AAwAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAANAAAAJwAAAEsAAAB1AAAAnBEREcbu7e38/v7+/v7+/v7+/v7+/v7+/v7+ + /v7j4+P+g4SD/n9/f/5/f3/+f39//np6ev5/f3/+sLCw/uHh4f78/Pz+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v729vb+yMnI/pmZmf5/gH/+fX19/n5+ + fv5+fn7+fX19/qOjo/79/f3+/v7+/v7+/v79/f3+e3t70AAAAFsAAAAyAAAAFgAAAAYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAYAAAAWAAAANQAAAF0AAACHAAAAqmtsa+P7+/v+/////////////////v7+/v/////t7e3/srKy/42M + jP5/fn7/fn5+/39/f/9/fn//fX19/oCBgP+bm5v/zc3N//Lx8f7+/v7//////////////////v7+/v// + //////////////7+/v7////////////////+/v7+/v7+//b29v/a2tr/q6ur/4iIiP59fn3/hYWF/9vb + 2//+/v7+//////7+/v/j4+P4KioqlwAAAEkAAAAkAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiYmAgAAAAwAAAAhAAAARQAA + AG8AAACXCgoKusfHx/r+/v7//////////////////v7+/v///////////Pz8/+vr6/7DxMP/mZmZ/4OD + g/9+fn7/f39//n9/f/99fX3/fn5+/46Ojv66u7v/5+fn//r6+v///////v7+/v////////////////7+ + /v7////////////////+/v7+//////////////7/+/v7/+Xl5f64uLj/srKz//n5+f/+/v7+//////7+ + /v+hoaHgAgICaAAAADgAAAAZAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABMAAAAuAAAAVwAAAIEAAAClPDw82P7+ + /v7//////////////////////v7+/v////////////////7+/v7/////9vb2/9jY2P+pqan/hYWF/n9/ + f/9/f3//f39//39/f/57e3v/g4OD/6Ojo//Q0ND/9vb2/vz8/P////////////7+/v7///////////// + ///+/v7+//////////////////////7+/v7+/v7/+/v7///////+/v7+//////T09P5ERESpAAAAUAAA + ACoAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABXV1cBAAAACQAAAB4AAAA9AAAAagAAAJIGBga2pqam8f7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+6+vr/sDAwP6Tk5P+fn5+/n5+ + fv5/f3/+f39//n5+fv55eXn+iIiI/re3t/7p6en+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/r29veoNDQ14AAAAPwAAAB0AAAAJAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAJCQkEAAAAEQAAACoAAABPAAAAfAAAAKEtLS3N7e3t/v7+/v7//////////////////////v7+/v// + //////////////7+/v7//////////////////////v7+/v7+/v/39/f/2NjY/6ioqP6Gh4b/fn5+/39/ + f/9/f3//f39//n19ff+AgYD/pKOk/9nZ2f76+vr////////////+/v7+//////////////////////7+ + /v7////////////////+/v7+/v7+/1tbW70AAABWAAAALwAAABMAAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/fwEAAAAIAAAAGgAA + ADkAAABhAAAAjgAAAK+EhITq/v7+//7+/v7//////////////////////Pz8/v7+/v////////////7+ + /v7//////////////////////v7+/v////////////7+//n5+f7m5eX/u7u7/5SUlP+BgYH/fn5+/n9/ + f/9/f3//fX19/3+Af/6ZmZn/ysrK/+7u7v/+/v7+//////////////////////7+/v7///////////// + ///+/v7+19fX+BgYGIIAAABEAAAAIgAAAAsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcnJwIAAAAOAAAAJgAAAEkAAABzAAAAnBoa + GsXU1NT5/v7+//7+/v7/////////////////////ubm5/r29vf/q6ur/+vr6//7+/v7///////////// + /////////v7+/v////////////////7+/v7//////v7+//Dw8P/Q0dD/n56f/oWFhf9/f3//f39//4B/ + gP5+fn7/fX19/4yMjP+0tLT+5+jo//r6+v////////////7+/v7////////////////+/v7+g4OD0QIC + AmEAAAA1AAAAFwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAWAAAAMwAAAFsAAACEAAAAqVxcXOD7+/v+/v7+/v7+ + /v7+/v7+/v7+/v7+/v729vb+hoaG/nh4eP57e3v+nJyc/tfW1/79/f3+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7++/v7/uHh4f60tLT+iYmJ/n19ff5/f3/+f39//n9/ + gP58e3z+f39//qGhof7W1tb++/v6/v7+/v7+/v7+/v7+/v7+/v79/v3+HR0dmAAAAEsAAAAnAAAADwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAANTU1AQAAAAsAAAAiAAAARAAAAG0AAACVBAQEu8jIyPf+/v7///////7+/v7///////////7+ + /v/Jycn/fHx8/n9/f/+AgID/f39//3RzdP6FhYX/urq6/+np6f///v///v7+/v////////////////7+ + /v7//////////////////////v7+/v7/////////9vb2/87Nzv6dnZ3/goKC/35+fv9/f3/+f39//39/ + f/9+fn7/2NjY//7+/v7///////////7+/v+mpqbpAAAAYgAAADoAAAAbAAAACAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA + ABIAAAAuAAAAVAAAAH8AAACjRkZG1/Ly8v7+/v7///////7+/v7///////////7+/v/h4eH/p6in/omJ + if9/f3//f39//4CAgP5/f3//fHx8/35+fv+enp7/1NXU/vX19f////////////7+/v7///////////// + /////////v7+/v////////////////7+/v74+Pj/39/f/7Kzs/+Ojo7+fn9//35+fv+enp7/9/f3//7+ + /v7//////v7+//Ly8v1ISEiwAAAAUAAAACsAAAASAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjY2MBAAAACAAAABwAAAA9AAAAZgAA + AI8AAACwoaGh8/7+/v////////////7+/v7//////////////////v//+vr6/uTk5P+8vLz/lZaV/4OD + g/5/f3//gICA/4CAgP98fXz/fHx8/o+Pj/++vb7/6Ojo//v7+/7//////////////////////v7+/v// + //////////////7+/v7////////+//z8/P/s7Oz+xMTE/5ubm//T09P///////7+/v7//////v7+/8nJ + ye8ICAh5AAAAPwAAAB8AAAALAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFxcDAAAADgAAACcAAABNAAAAeAAAAJ4TExPJ9vX2/v7+ + /v/+/v7//v7+//7+/v7+/v7//////////////////v7+/v/////+/v7/8/Pz/9TV1P6mpqb/h4eH/4CA + gP+AgID/gYGB/oCAgP96enr/gICA/9fX1/7//////////////////////v7+/v////////////////7+ + /v7////////////////+/v7+//////j4+P/8/Pz///////7+/v7//////f39/mpqasUAAABZAAAAMAAA + ABQAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAGAAAAFgAAADQAAABeAAAAiAEBAax6enrn/v7+/v39/f729vf+4uHh/ufm + 5v719vX+/f39/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+7Ozs/sPDw/6Wlpb+f39//oCA + gP6AgID+i4uL/vHx8f7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+19fX9R4eHowAAABHAAAAIgAAAAwAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAIAAAAHAAAAD0AAABqAAAAkxUVFbzU1dT7/f39/+zr6/6ikYf8gWRU/Us/OPyJiIf96urq/v7+ + /v///////v7+/v////////////////7+/v7///////////7+/v/5+fn/29vb/q6urv+MjIz/tra2//7+ + /v7//////////////////////v7+/v////////////////7+/v7////////////////+/v7+//////// + //////////////7+/v7+/v7/h4eH1AAAAGIAAAA2AAAAFwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAHQAA + AD8AAABrAAAAk1VVVdf9/f3+/Pz8/8rFw/2HZFD9hmBK/zEiGf4dGRb+rq2t/vf39////////v7+/v// + //////////////7+/v7//////////////////////v7+/vr6+v/s6+z/8vLy//7+/v7///////////// + /////////v7+/v////////////////7+/v7////////////////+/v7+//////////////////////7+ + /v7t7e39MTExmwAAAE0AAAAoAAAADgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAGgAAADgAAABgCwsLkLW0 + te3+/v7++Pj4/8O/vfyIZVD9g15I/y0fF/4UDQn/d3d2/evr6//+/v7//v7+/v/////+/v7//v7+//7+ + /v7+/v7//v7+/////////////v7+/v////////////////7+/v7//////////////////////v7+/v// + //////////////7+/v7////////////////+/v7+//////////////////////7+/v6rqqvjCQkJbwAA + ADwAAAAcAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEwAAACsAAABKDAwMdGZmZsLAv7709fX2/sTA + vvuNaVP8lmtT/k84Kv4ZEAz+b25t/eDg4f79/f3+/v7+/v7+/v739vb+xr+7/KmhnPzKycn8/Pz8/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v5GRUayAAAAUwAAAC0AAAASAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAACgAAABgAAAAtAAAAQgAAAFk8LCK9l3hm+ZJ+c/udcln90Zd1/49m + T/4eFRH+e3p6/d3d3P/9/f3//v7+/v////+0p5/8i2RM/l9CMf4bFBH+paSk/f7+/v///////v7+/v// + //////////////7+/v7//////////////////////v7+/v////////////////7+/v7///////////// + ///+/v7+/////////////////v7+/8rKyvYJCgl0AAAAQAAAAB8AAAAKAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABkZGQBAAAABAAAAAsAAAAXAAAAJAUDAj9lSDjZqntf/4JeSP+3hGb/1Zp3/5huVf4hGRX8l5aW/eHh + 4f/9/f3//v7+/v7+/v+aioH7kmhP/2FFNf4cEg3/V1VT/fb29////////v7+/v////////////////7+ + /v7//////////////////////v7+/v////////////////7+/v7////////////////+/v7+//////// + ////////+/v7/m5ubsUAAABZAAAAMQAAABUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZWVlARcX + FwMAAAAIAAAADg0JBzR+W0b1iGJM/39bRv/Gj2//05h2/4VgSf4WDwzlLi4urnx8fNfS0tHy+Pf2/v39 + /v+hkor5mm5U/4VfSf4qHBX/SEVD/erq6f7//////v7+/v/////+/v7/+vr6/+jm5f3p6Oj++/v7//7+ + /v///////v7+/v////////////////7+/v7////////////////+/v7+///////////+/v7/6Ojo+RYW + FowAAABGAAAAIwAAAA0AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpaWkBDAwMAxgR + DUCHYUv+elhE/45mTv/HkG//0Zd1/2JGNf4MCAa5AAAAVAAAAGQlHhqzu5+O/MO5s/mZhnv4toNl/86W + dP5EMCT/TEhG/erq6v7//////v7+/v7+/v/49/f+vK6n/YFlVfxJQDz9rq2s/fz8/P///////v7+/v// + //////////////7+/v7////////////////+/v7+///////////9/v7/kpKS3QAAAGAAAAA2AAAAGAAA + AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIYElSIYkv+eVdD/otj + TP7Lk3H+t4Rm/i0gGP4DAgFkAAAAKgAAADtALiOzvIho/n1aRf58Wkb+0px5/tKYdv5QOCr+X1ta+/X1 + 9f7+/v7+/v7+/v7+/v7l4uD9iGZS/IZgSv4qHRX+NTEv/d/f3/7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+ + /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7r6+v7OTk5ogAAAEwAAAAnAAAADwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0VD1tzUj/+dFM//2pLOf+xgGP/XkMz/xUP + C9cAAAAWAAAAEQMCASVeQzPFmW5V/ks2Kf+JY0z/26J9/8+Vc/5GMSX/ODU11qCfn9/e3t77/v7+/v7+ + /v/k4d/+iWZR/ZxxVv4/LCH/JyAd/c3Nzfz//////v7+/v/////+/v7//v7+//7+/v7//////v7+//7+ + /v/+/v7+//////7+/v+0tLTmBAQEbwAAADsAAAAbAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0JBjxROiz9STQn/z8sIf9JMyf/KBwU+QYEA2EAAAACAAAABAcF + AxxtTjzchWBK/lI7Lf+jdlr/2J15/8OMbf4wIhr7AwIBfgUFBW0gICCNlIZ+8OHWz/zUzsr7k21X/dii + ff55V0P/LCQf/c7Ozfz//////v7+/v/////9/f3/7+7t/r2xqv2PiYb81NPT/f7+/v/+/v7+/v7+//j4 + +P5SUlK0AAAAVAAAACwAAAARAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAIBARMjGBLGLR8X/y4gGP8nGxT4DwoHnAAAAAYAAAAAAAAAAAgFBBlwUD3ldlVB/nNS + P/+md1z/1Jl2/5FoUP4ZEQ3YAQAAQwAAADwBAABTiGFK+7SGav19Y1P8p3xg/uauh/6TalL/Ny8q/djY + 2Pz//////v7+/v/////39/f+r52T/Y9nT/42Jhz/Qjw6/eDg4P7+/v7+/v7+/8jIyPAWFhaBAAAAQwAA + AB8AAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAADAgElEw0KlxUOC6kJBgVhAAAACQAAAAAAAAAAAAAAAAUDAxZgRTTeb089/nxYQ/6SaVH+vYhp/kIv + I/4LBwWMAAAAFQAAABwJBgVLk2pS/odhS/5VPC7+w5Jx/t6jfv6RaFD+Ni4r+Lu7u/X+/v7+/v7+/v7+ + /v7q6ej9i29f/KByWP5MNin+IhoV/cPCwf3+/v7+/v7+/nR0dMsAAABdAAAAMwAAABUAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAksHxeyYEQ0/kcyJv9LNCf/RC8j/xwTDuIBAAAXAAAABAAA + AAcWDwtYkWhQ/mRIN/9tTjz/1J15/9ebeP5yUj//DQkHxQEBAW0fHx+ep56Y9OTe2vvl4+L8kXFf+9Sf + e/6VbFP/KR8Z/cLBwP3+/v7+6Ojo/B4eHooAAABIAAAAJQAAAA0AAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAMCAZRMCEZ+TAhGP8vIBj/IhcR6QYEA00AAAABAAAAAAAAAAAXEAxaiWJM/lc+ + L/+MZU3/z5Zz/8uTcf5DLyT+BgQDegAAAEAAAABWfFlF+q+Daf1yYVj5lG5X/em2jf6vfmL/Nioj/cnJ + yPz+/v7+lJSU1wQEBGIAAAA2AAAAGQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACCwcFXxcQDLkUDgqlBgQDQAAAAAAAAAAAAAAAAAAAAAANCQdJYUU0/mBENP9+WkX/uoZo/4pj + TP4fFRDfAgEBNQAAAB8GBANLjGRO/nhWQv85KB7/roFj/+q0jP6re1//OC0n+Li4uO/y8vL9MjIylwAA + AEUAAAAmAAAAEAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgEbPiwh+1U8Lf9JMyb/YEQ0/zYlHP4MCAaEAAAACQAA + AAoOCghQjGVN/lg/Mf9TOy3/zp16/+Clf/6TalH/GRIN1xUVFXpISEiVAQEBSwAAAC0AAAAXAAAACQAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAHRMPrDIjGv4xIhn+LR8X/hcQDMYAAAANAAAAAAAAAAEOCQdPelhD/j4s + If6EX0j+1p15/tabeP5eQzP+CwcFmAAAADMAAAAxAAAAJgAAABcAAAALAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAgEBExEMCYwZEQ22EAsIjAEBABMAAAAAAAAAAAAAAAAHBQQyRjEl/lg+L/+FX0n/uIVn/51x + V/4pHBXuAwIBPgAAABYAAAAVAAAAEAAAAAkAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAALAAAAAgAAAAAAAAAAAAAAAAAAAAABAQAKMiIa7U83Kf9MNSj/XUIy/z4sIf4QCwiWAAAADAAA + AAYAAAAGAAAABAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAFA4KgDEhGfcyIhn/Lh8X/RsSDsoCAQEcAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABg0JBncaEg3UEgwJoQIBARsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///8AD//////AAAA///8AA//////AAAA///4AAP/ + ////AAAA///4AAH/////AAAA///4AAB/////AAAA///wAAAf////AAAA///wAAAH////AAAA///gAAAB + ////AAAA///gAAAAf///AAAA///AAAAAH///AAAA///AAAAAB///AAAA///AAAAAAf//AAAA//+AAAAA + AH//AAAA//+AAAAAAD//AAAA//8AAAAAAA//AAAA//8AAAAAAAP/AAAA//4AAAAAAAD/AAAA//4AAAAA + AAA/AAAA//4AAAAAAAAfAAAA//wAAAAAAAAfAAAA//wAAAAAAAAfAAAA//gAAAAAAAAfAAAA//gAAAAA + AAAfAAAA//gAAAAAAAAfAAAA//AAAAAAAAAfAAAA//AAAAAAAAAfAAAA/+AAAAAAAAAfAAAA/+AAAAAA + AAA/AAAA/8AAAAAAAAA/AAAA/8AAAAAAAAB/AAAA/8AAAAAAAAB/AAAA/4AAAAAAAAB/AAAA/4AAAAAA + AAD/AAAA/wAAAAAAAAD/AAAA/wAAAAAAAAH/AAAA/gAAAAAAAAH/AAAA/gAAAAAAAAP/AAAA/gAAAAAA + AAP/AAAA/AAAAAAAAAf/AAAA/AAAAAAAAAf/AAAA+AAAAAAAAAf/AAAA+AAAAAAAAA//AAAA8AAAAAAA + AA//AAAA8AAAAAAAAB//AAAA8AAAAAAAAB//AAAA4AAAAAAAAD//AAAA4AAAAAAAAD//AAAAwAAAAAAA + AD//AAAAwAAAAAAAAH//AAAAwAAAAAAAAH//AAAAwAAAAAAAAH//AAAAwAAAAAAAAP//AAAAwAAAAAAA + AP//AAAAwAAAAAAAAf//AAAAwAAAAAAAAf//AAAAwAAAAAAAA///AAAA4AAAAAAAA///AAAA+AAAAAAA + B///AAAA/gAAAAAAB///AAAA/gAAAAAAB///AAAA/gAAAAAAD///AAAA/gMAAAAAD///AAAA/wcAAAAA + H///AAAA//8AAAAAH///AAAA//+AwAAAP///AAAA//+DwAAAP///AAAA////wAAAP///AAAA////4EAA + f///AAAA////4OAAf///AAAA////8eAA////AAAA//////A/////AAAA//////B/////AAAAKAAAAGAA + AADAAAAAAQAgAAAAAACAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAACwAAABIAAAAZAAAAHgAA + ACAAAAAfAAAAGwAAABQAAAAOAAAACQAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AQAA + AAUAAAALAAAAFAAAACEAAAArAAAAMwAAADcAAAA1AAAAMAAAACcAAAAeAAAAFQAAAA0AAAAIAAAABB8f + HwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAADw8PAgAAAAkAAAATAAAAIAAAADIAAABCAAAATgAAAFMAAABSAAAATAAA + AD8AAAAzAAAAKAAAABwAAAATAAAADQAAAAcAAAAELy8vAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/f38BAAAABQAAAA8AAAAeAAAAMAAA + AEoAAABfAAAAbwAAAHgAAAB4AAAAcQAAAGIAAABUAAAARgAAADYAAAAqAAAAHwAAABUAAAAOAAAACQAA + AAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA/Pz8CAAAACAAAABYAAAAoAAAAPwAAAF4AAAB2AAAAhwAAAJMAAACUAAAAjgAAAIAAAAByAAAAZAAA + AFEAAABCAAAANQAAACcAAAAdAAAAFQAAAAwAAAAHAAAABB8fHwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAB0AAAAzAAAATQAAAHAAAACJAAAAnAMD + A7IEBQS0AAAApgAAAJoAAACOAAAAgQAAAG4AAABfAAAAUAAAAD8AAAAyAAAAJgAAABkAAAASAAAACwAA + AAYAAAACLy8vAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAAEgAA + ACgAAABBAAAAXwAAAIMAAACcAAAAr3p6eu/IyMj7WFhY4BIREr4AAACsAAAAoAAAAJEAAACDAAAAdAAA + AGEAAABSAAAAQwAAADIAAAAmAAAAGwAAABEAAAALAAAABwAAAAMAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAMAAAALAAAAGQAAADIAAABNAAAAbAAAAI8AAACmBwcHw97e3v3+/v7++/z7/6Gh + ofNRUVHaCwsLvgAAAKcAAACcAAAAkAAAAH8AAABvAAAAYAAAAE0AAAA9AAAAMAAAACIAAAAYAAAAEQAA + AAoAAAAFAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAQAAAAIAAAAD0AAABaAAAAeQAA + AJoAAACvRkZG4f7+/v79/f3+///+//z8/P7n5+f9tbW08ycnJ9UBAQG0AAAApwAAAJkAAACMAAAAfQAA + AGkAAABZAAAASgAAADkAAAAsAAAAIAAAABYAAAAPAAAACQAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAoAAAAXAAAAKwAAAEoAAABpAAAAhwAAAKULCwvDwL/A9P7+/v/////////////////+/v7//v7+//f3 + 9/6lpaX2QEFA1wkJCboAAACpAAAAnAAAAIwAAAB9AAAAbQAAAFoAAABKAAAAPAAAAC0AAAAiAAAAGQAA + AA8AAAAKAAAABgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA4AAAAfAAAANQAAAFcAAAB2AAAAkwAAAK5FRUXZ4uLh/P7+ + /v7+/v7+//////7+/v7+/v7+/v7+//39/f79/f3+6uvq/omJiew5OTnSBAQEtgAAAKMAAACXAAAAiQAA + AHcAAABnAAAAWQAAAEcAAAA5AAAALQAAACAAAAAXAAAAEAAAAAkAAAAFAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAABUAAAAoAAAAQQAA + AGUAAACDAAAAngcHB7yHh4fs+/v7///////////////////////////////////////+/v7//v7+//n5 + +f/b29v7k5ST7xEREckAAACtAAAAogAAAJMAAACFAAAAdwAAAGUAAABVAAAARwAAADYAAAAqAAAAIAAA + ABUAAAAOAAAACQAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAEAAAADAAAAB4AAAA0AAAATwAAAHQAAACRAAAAqTAwMNDZ2dn9/v3+//7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/+3s7f6EhITvLy8vzAMDA7IAAACjAAAAlwAA + AIgAAAB5AAAAagAAAFgAAABJAAAAOwAAACwAAAAhAAAAGAAAAA8AAAAKAAAABgAAAAIAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAEQAAACYAAAA/AAAAXQAAAIEAAACcAAAAsW1t + bez+/v7+/v7+//7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+//7+ + /v7+/v7+1dXV/XZ2duQjIyPJAQEBrwAAAKAAAACUAAAAhgAAAHUAAABmAAAAVwAAAEUAAAA3AAAAKwAA + AB8AAAAWAAAADwAAAAgAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAKAAAAGAAA + ADAAAABLAAAAagAAAI0AAAClAgICv9jY2P3+/v7+///+//7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+//f39/7R0dH4cXFw6AYGBr4AAACqAAAAoAAA + AJEAAACDAAAAdAAAAGIAAABTAAAARAAAADQAAAAoAAAAHQAAABMAAAAMAAAABwAAAAMAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAYAAAAQAAAAIQAAAD0AAABbAAAAegAAAJsAAACwR0dH4v7+/v/+/v7///////// + //////////////////////////////////////////////////////////////////////////////7+ + /v/+/v7//v7+/+Li4v1mZmbnICAgxwAAAK8AAAChAAAAlQAAAIUAAAB2AAAAZwAAAFUAAABFAAAANwAA + ACgAAAAdAAAAFAAAAAwAAAAHAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAXAAAAKQAAAEkAAABoAAAAhgAA + AKQHBwfAq6yr8v7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+//7+/v77+/v+vr6++WJiYt4TExPDAAAArQAA + AJ8AAACSAAAAhAAAAHMAAABjAAAAUgAAAEAAAAAyAAAAJgAAABoAAAASAAAADAAAAAYAAAADAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA + AA4AAAAeAAAANAAAAFYAAAB1AAAAkgAAAK04OTjV29vb/P39/f7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+/f39/u/v7/68vLz1TU1N4QEBAbgAAACpAAAAngAAAI8AAACAAAAAcAAAAFwAAABMAAAAPQAA + AC4AAAAiAAAAGQAAABAAAAAKAAAABgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABwAAABYAAAApAAAAQgAAAGYAAACEAAAAnggICL2PkI/t/v7+//// + //////////////////////////7///z8/P/+/v7//v////7+/v////////////////////////////// + //////////////////////////////////////////////7+/v/+/f7//v7+/7+/v/pMTEzeFBQUwgAA + AKsAAACeAAAAkQAAAIAAAABwAAAAYAAAAE0AAAA/AAAAMQAAACQAAAAaAAAAEgAAAAsAAAAGAAAAAwAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACwAAAB0AAAAzAAAATgAA + AHMAAACQAAAApykpKc7Pz8/7/v7+//7+/v7+/v7+//////7+/v7+/v7+/v7+/8fHx/7W1tb+7u7u//T0 + 9P739/f++/z7//7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v// + ///+/v7+/f39/v7+/v/v7+/+p6in9EdISNYICAi7AAAAqAAAAJkAAACLAAAAfQAAAGsAAABbAAAATQAA + ADwAAAAvAAAAJAAAABkAAAARAAAACwAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAAGAAAAEAAAACUAAAA9AAAAWwAAAH8AAACaAAAAsFtbW+j6+vr+/v7+//7+/v7+/v7+//////7+ + /v7+/v7+7u3u/4WEhf6IiIj+nZ2d/7y9vf7T09P+4eLh//T09P78/Pz+//7///7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v7+/v/9/f3+/f39/uPj4/yioqLxLi4u1gAA + AK8AAACkAAAAmAAAAIgAAAB5AAAAagAAAFgAAABJAAAAOwAAACwAAAAhAAAAGAAAAA8AAAAKAAAABQAA + AAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAKAAAAGAAAADEAAABLAAAAagAAAI4AAACmBAQEv9XW + 1f7+/v7//v7+///////////////////////9/f3/vr2+/3t7e/9/f3//fn1+/31+ff+JiYn/oKCg/8HB + wf/a2tr/7u7u//r6+v/+/v7///////////////////////////////////////////////////////// + //////////////7+/f/+/v7//////5mZmfU4ODjTCwsLuQAAAKUAAACZAAAAjAAAAHwAAABtAAAAXgAA + AEwAAAA9AAAAMAAAACMAAAAaAAAAEgAAAAoAAAAGAAAAAy8vLwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAPAAAAHwAA + ADsAAABYAAAAdwAAAJkAAACtOjo63f7+/v/+/v7+//////7+/v7+/v7+//////7+/v7u7u7+mZmZ/359 + fv5+f3/+f39//39+fv5+fX7+f39//4uLi/6goKD+vb28/93d3f7v7+/++fn5//7+/v7+/v7+//////7+ + /v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+/v/h4eH9lpaW7S4u + Ls8CAgK0AAAApAAAAJcAAACJAAAAewAAAGkAAABZAAAASwAAADoAAAAtAAAAIgAAABYAAAAPAAAACgAA + AAUAAAACX19fAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAgAAAAVAAAAJwAAAEYAAABlAAAAgwAAAKIDAwO8qamp8P/////+/v7+//////7+ + /v7+/v7+//////7+/v7d3d3+jIyM/3t7e/5+fn7+f39//35+f/5/fn7+f39//35+fv5/f3/+hYaF/56e + nv6+v7/+3d3c//Lx8v76+vr+/v7+//7+/v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v7+/v/+/v7+/v7+/tbW1vqJiYnrGRkZywAAAKwAAAChAAAAlgAAAIYAAAB3AAAAaAAA + AFUAAABGAAAAOAAAACkAAAAeAAAAFQAAAAwAAAAGAAAAAw8PDwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA4AAAAeAAAAMwAAAFUAAAB0AAAAkQAA + AK06OjrX3Nzc/P3+/f/////////////////////////////////+//7/7+/v/7u7u/+WlpX/g4OD/359 + fv9+fn7/f39//39/f/9/f3//f39//319ff9/f3//kI+Q/7O0s//U1NT/6uvq//n5+f/9/f3//v7+//// + //////////////////////////////////////////////////////////////3+/f/+/v7/+vr7/3R1 + dO4qKirLBQUFtQAAAKQAAACYAAAAiwAAAHkAAABqAAAAWgAAAEYAAAA3AAAAKQAAABsAAAARAAAACQAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAA + ABQAAAAmAAAAPwAAAGIAAACBAAAAnAUFBbqBgYHq+fj5/v/////+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////z8/P7q6ur+ysrK/5ycnP6EhIT+fXx9/35+fv5+f3/+f39//35/fv5+fn7+fX19/4GB + gf6RkZH+rK2s/9TU1P7s7Oz++fn5/v3+/f/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/vz8/P/Pz8/7gICA5xoaGsgAAACvAAAAowAAAJQAAACGAAAAdwAA + AGMAAABRAAAAQAAAACwAAAAdAAAAEgAAAAgAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAACwAAABsAAAAwAAAASwAAAHAAAACNAAAApSIiIsnDw8P6/f39/v// + ///+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/f39/+7u7v7S09L+pKWk/4CA + gP57fHv+fn9+/35+f/5/fn7+f39//35+f/5+fn7+gICA/42Njf6rq6v+0dHQ/vPz8//7+/v+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+/v/+/v7++fn5/sXF + xfdlZmXlCwsLwgAAAKoAAACfAAAAkwAAAH8AAABsAAAAWAAAAD8AAAAsAAAAGwAAAA0AAAAFAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAEAAAACUAAAA9AAAAWgAA + AH8AAACaAAAAr2BgYOj+/v7///////////////////////////////////////////////////////// + /////////////////v///////////+Dg4P+0tLT/kZGR/4CBgP9+fn7/fn5+/39/f/9/f3//f39//35+ + fv98fHz/gICB/6CgoP/Hx8f/6Ofo//r6+f/+/v7///////////////////////////////////////// + /////////////////////////v7+//3+/f/+/v7/4eHh/lZWVuQcHBzEAgICrwAAAJwAAACKAAAAdAAA + AFgAAAA+AAAAJwAAABQAAAAJAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAAKAAAAFwAAAC4AAABJAAAAZwAAAIsAAACkAgICvMjIx/z+/v7+/v7+/v/////+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v76+vr+5eXl/7y8 + vP6YmJj+goKC/3x8fP5+fn7+f39//39/fv5+f3/+fn5+/n19ff+EhIT+m5qa/sXFxf/n5+b++/v7/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+/v/9/f3+/f39/vb2 + 9v64uLj2ZmVl4AwMDLsAAACcAAAAhgAAAGYAAABKAAAAMAAAABkAAAALAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAOAAAAHgAAADkAAABVAAAAdAAAAJYAAACsKSkp2fz9 + /P/+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////n6+f7r6+v+ysrK/5eXl/5/f3/+fHx8/35+f/5/fn7+f39+/n9/ + f/9+fn7+fn5+/oODhP+VlZX+u7y7/uzs7P/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v7+/v/+/v7+7+/v/rO0tPJHR0fTBQUFmgAAAHEAAABRAAAANQAA + ABsAAAAMAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAkAAAAVAAAAKAAA + AEcAAABlAAAAhAAAAKMFBQW8paWl8f7+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////n5 + +f/Z2dn/r6+v/4qKiv+AgID/fX59/35+fv9/f3//f39//39/f/99fn7/e3t7/4mIiP+tra3/2dra//X1 + 9f/+/v7//////////////////////////////////////////////////////////////////v3+//// + ////////ycnJ+hISEpUAAABTAAAANgAAABsAAAAMAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAA4AAAAdAAAAMgAAAFQAAABzAAAAkAAAAKwwMDDT19fX+v39/f/+/v7+/v7+/v// + ///+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7++Pn4/9vb2/66urr+l5eX/n9/f/98fXz+fn5+/n9/ + f/9+fn7+fn5+/n59fv99fX3+iIiI/qusq//R0tL+8fHx/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v7+/v/+/v7+5OTk/RAQEIkAAABOAAAAMgAAABgAAAAKAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAABMAAAAlAAAAPgAAAGEAAAB/AAAAmgIC + Arh4eHjm+Pj4/v7+/v////////////////////////////T19f/R0dH/6Ojn//z8/P/7+/v//f39//// + //////////////////////////////////////////////////////////////////////////////7+ + /v/5+fn/7Ozs/8bHxv+YmJj/fn5+/318ff9/f3//f39//39/f/9+fn7/fn5+/39/f/+Ghob/nZ2d/8/P + z//z8/P//f39//z8/P/8/Pz//v7+///////////////////////////////////////+/v7/h4eH4gAA + AGcAAABHAAAALAAAABQAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACwAA + ABsAAAAxAAAATAAAAHEAAACOAAAApiMjI8rExMT7/f39/v/////+/v7+/v7+/v/////+/v7+/////9jY + 2P6CgoL+fn5+/5qamv68vLz+1tbW/+3t7f75+fn+/f39//7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////6+vr+3d7d/qioqP+Li4v+gICA/n59 + fv9+fn7+fn5//n9/f/9+fn7+fX19/nx8fP+MjIz+r6+v/tHR0f/d3t3+5ufm/vPz8v/6+vr+/v7+/v// + ///+/v7+/v7+/v7+/v/g4OD7MzMzogAAAFcAAAA6AAAAIgAAAA4AAAAFLy8vAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAFAAAAEAAAACQAAAA8AAAAWQAAAH4AAACZAAAArlZWVuT5+fn+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/////7CwsP59fX3+fn5+/3x8fP5/gH/+jY2N/6+vr/7Q0ND+6+vr//r6 + +v79/f3+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v// + ///+/v7+/v7+/vn4+f/e3t7+urq6/pCQkP9/fn/+fX19/n9/f/9+fn7+fn5+/n5+fv99fX3+fn1+/ouL + i/+foKD+uLm4/tbW1v/q6ur++fn5/v/////+/v7+/v7+/v7+/v+enp7hDw8PgAAAAEsAAAAwAAAAGwAA + AAoAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAAFQAAAC0AAABIAAAAZgAA + AIoAAACjAAAAuba2tvv+/v7//v/+////////////////////////////9PX0/4qLiv9+fn7/f39//39/ + f/9/f3//fn5+/4CAgP+JiYn/pKSk/9LS0v/w8PD/+/v7///+//////////////////////////////// + ////////////////////////////////////////////////////////+vr6/+bm5v/CwcL/lJSU/3x8 + fP99fX3/f39//39/f/9/f3//f35//35+fv9/f3//hISE/52dnv/MzM3/8vHx/////////////v7+/+vr + 6/1ZWVm6AQEBZAAAAD8AAAAmAAAAFAAAAAZfX18BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAUAAAAPAAAAHwAAADoAAABXAAAAdgAAAJcAAACtKioq2f/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+4ODg/4uLiv6BgYH+fX5+/35+fv5/f3/+f39//39/f/5+f3/+fHx8/39/f/6Wlpb+vLy8/+bl + 5v719vX+/f39//7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7++/r7/tHS0f+lpaX+iomK/n5/fv99fX3+fn5+/n9/fv9+fn7+fn5+/oSE + hP/CwsL+8/Pz/v7//v/+/v7+/v7+/rq6uukODg6IAAAAUgAAADIAAAAcAAAADBAQEAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAkAAAAVAAAAJwAAAEYAAABkAAAAgwAAAKICAgK6lpaW7v7+ + /v/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7++/v7/+Li4v7AwMD+nJyc/4GBgP58fHz+fn5+/39/ + fv5+f3/+f39//35+fv58fHz+gIB//5aWlv64uLj+29vb//n4+f7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7////29vb+29vb/rCv + r/+Ojo7+fn5+/n19ff9+fn7+fX19/pydnP/i4uL++fn5/v/////+/v7+/v7+/mNjY8sAAABnAAAARgAA + ACcAAAAVAAAACT8/PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAwAAAAcAAAAMQAA + AFIAAABxAAAAjgAAAKslJCXQ0dHR+v7+/v////////////////////////////////////////////// + ///7+/v/7u7u/83Mzf+fnp//gYGB/3x8fP9/fn//f39//39/f/9/f3//f39+/35+fv+AgID/i4uL/7Oz + s//f39//+/v7//////////////////////////////////////////////////////////////////// + //////////////////////////////f39//k4+P/vb29/4uLi/98e3z/fHx8/83Nzf/4+Pj//v7+//// + //////7/8PDw/hEQEZIAAABXAAAAOgAAAB8AAAAPAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABgAAABMAAAAmAAAAPgAAAGIAAACAAAAAmwMDA7h8fHzn+fn5/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+//////7+/v79/f3+5OXk/7Gxsf6QkZD+goGC/319 + ff5+fn7+f39//39/fv5+f3/+f39//3t8e/6AgID+nZ2d/9HS0f7u7u7+/Pz8//7+/v7+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/vX1 + 9f/LzMz+t7i4/v7+/f/+/v7+/v7+/v7+/v/+/v7+g4OD4QAAAGYAAABHAAAALQAAABUAAAAJAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACgAAABoAAAAvAAAASgAAAG8AAACMAAAApB0d + Hci5ubn4/f39/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////v7+/7k5OT+xMTE/5iZmf6Dg4P+fH18/35+fv5+f3/+f39//39/fv5+fn7+fHx8/4OD + g/6cnJz+wsLC/+rq6v78/Pz+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7++/v7/v/////+/v7+/v7+/v7+/v/m5ub8Ojo6qAAA + AFkAAAA8AAAAJAAAABAAAAAFX19fAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADgAA + ACIAAAA6AAAAVgAAAHwAAACXAAAArUlISd/19fX+/v7+//////////////////////////////////// + /////////////////////////////////////////////////////////Pz8/+zt7P/R0dH/o6Sj/4CA + gf98fHz/fn9+/39/f/9/f3//f39//35+f/99fn3/gYGB/5OTlP+5urr/6Ojo//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+jo6PlEhISgwAAAEwAAAAxAAAAGwAAAAsAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAJAAAAFQAAAC0AAABHAAAAZgAAAIoAAACjAQEBubm5ufv9/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+/////+Li4v64uLj+lZWV/4KCgv5+fX7+fn5+/39/f/5+f3/+f39//35+ + fv56e3v+f39//qiop//V1dX+7+/v/v39/f/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/unp6fxUVFS2AAAAYwAAAD4AAAAlAAAAEwAA + AAYfHx8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAANAAAAHQAAADcAAABUAAAAcgAA + AJUAAACrIiIi1f7+/v/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v78/Pz+6urq/8XF + xf6hoaD+hoaF/3x8fP5+fn7+f39//39/fv5/f3/+fn5+/nx8fP+Dg4P+m5yc/sfIx//o6Oj+/Pz8/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/sLC + wuwVFhWOAAAAVAAAADIAAAAdAAAADgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAcAAAATAAAAJQAAAEMAAABhAAAAfwAAAKABAQG3iYmJ7P/////+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////z8/P/w8PD/2dnZ/6Wmpf+EhIT/fHx7/39+f/9/f3//f39//39/ + f/9+fn7/fX59/4KCgv+SkpL/tra2/+zs7P/+/v7//v/+//////////////////////////////////// + ///////////////////+/v7//v7+/3FxcdIBAQFoAAAARwAAACgAAAAVAAAACS8vLwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA0AAAAcAAAAMAAAAFIAAABwAAAAjgAAAKolJSXQ0dHR+v39 + /f/+/v7+/v7+/v/////+/v7+/v7+/v/////v7+/+0M/Q/urq6v/6+vr+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////39 + /f7r6+v+wcHB/5SUlP6Dg4P+fn5+/n5+fv9+fn/+fn5//n9/f/9+fn7+e3t7/oCBgP+fn5/+xsbG/uPk + 4//v7+/++fn5/v7+/v/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+7u7u/Q0NDY4AAABVAAAAOQAA + AB4AAAAOAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAABMAAAAkAAAAPAAA + AF8AAAB9AAAAmAICArZubm7k9PT0/v7+/v/+/v7+/v7+/v/////+/v7+/v7+/v39/v/Nzc3+gYGA/pCQ + kP+zs7P+2NjY//r6+v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/////+rq6v7Kysr+pqam/oWFhf98fH3+fX1+/n9/ + f/9+f3/+fn9//n5+fv98fHz+gH+A/pKSkv+urq7+0dHR/vX19f/+/v7+/v7+/v/////+/v7+/v7+/v7+ + /v/+/v7+kJCQ5QAAAGgAAABJAAAALgAAABYAAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADAAAACQAAABkAAAAtAAAARwAAAGwAAACKAAAAoxcXF8Wtrq33/v7+//////////////////// + //////////////b29v+tra3/fn9+/319ff99fH3/goGB/6Ghof/S09L/+fn5//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///9/f3/8/Pz/9nY2f+traz/h4eH/3x7fP9+fn7/f39//39/f/9/f3//fn9+/35+fv9/gID/iYmJ/7a1 + tv/r6ur//v7+///////////////////////t7e3+QUFBrgAAAFoAAAA9AAAAJAAAABAAAAAGAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAADgAAACIAAAA6AAAAVgAAAHsAAACXAAAArU9P + T9/7+vr+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/uDg4P+Jion+fX59/n9/f/9/f3/+gICA/3t8 + e/51dXX+hYWF/729vf7j4uP+9vb2//7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+8PDw/r+/v/+ZmZn+hIWF/n1+ + ff9+fn7+fn5+/n9/f/9+fn7+fn5+/oGBgf/Ly8v+/f39/v/////+/v7+/v7+/v39/f+fn5/kEBAQgQAA + AEoAAAAvAAAAGwAAAAoAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAA + ACsAAABFAAAAZAAAAIgAAAChAAAAt6enp/j+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/tXW + 1f+Njo3+fn5+/n19ff9/fn/+f39//39/f/5/f3/+fXx9/3l4ef6Hh4f+p6en/9LT0v7z8/P+/v/+//7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v// + ///+/v7+/v7+/v39/f/u7u7+0NDQ/qWlpf+IiIj+fX19/n1+ff9+fn7+fX19/p2dnf/w8PD+/v7+/v// + ///+/v7+/v7+/u3t7f1eXl68AQEBZgAAAD4AAAAmAAAAEwAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAANAAAAGwAAADYAAABSAAAAcQAAAJQAAACqFRUV0PX19f/+/v7///////// + //////////////////////////////f39//i4uL/v7+//46Ojv99fX3/fX19/39/f/9/f3//f39//39/ + f/99fn3/fHx8/4GBgf+VlpX/wsLC//b29v////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//Lz8//d3d3/s7Sz/4aG + hv97fHv/enp6/8vLy//+/v7//////////////////v7+/8zMzO8aGhqSAAAAVQAAADMAAAAdAAAADQAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy8vAQAAAAgAAAAUAAAAJgAAAEQAAABiAAAAgAAA + AKABAQG3iIeI7f7+/v/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/vj4 + +P/U1dT+qqqq/4qKif6AgID+fn5+/35+fv5/f3/+f39//4B/f/5+fn7+dnV2/4CAgP6rq6v+2drZ//Pz + 8/79/f3+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v///v/+/v7+/v7+/vDw8P/GxcX+rKys/vr6+v/+/v7+/v7+/v/////+/v7+/v7+/mtr + a84AAABmAAAARQAAACcAAAAVAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + AAwAAAAbAAAALwAAAFAAAABvAAAAjAAAAKkdHR3Nzs7O+P7+/v/+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7++fn5/9vb2/66urr+mJiY/4CAgP59fH3+f39+/39/ + f/5/f3/+gH+A/319ff55eXn+gICA/6Ghof7CwsL+4uLi//z8/P7+/f3+/v7+//7+/v7+/v7+//////7+ + /v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7++Pj4/v// + ///+/v7+/v7+/v/////+/v7+7+/v/hYWFpYAAABXAAAAOgAAAB8AAAAPAAAABQAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABIAAAAjAAAAOgAAAF0AAAB8AAAAlwAAALRnZ2fh8vLy/v7+ + /v////////////////////////////////////////////////////////////////////////////7+ + /v/6+vr/7e3t/8nJyf+enZ7/gYGB/3x9fP9/f3//gH9//3+Af/9/f4D/f35//3x8fP9+fX3/hoaG/62s + rf/b2tr/+vr6//////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+/v7/nJyc7AAAAGwAAABKAAAAMAAA + ABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACQAAABkAAAAuAAAASQAA + AG0AAACLAAAApBcXF8aurq73/f39/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+/v////7+/v78/Pz+5ubm/7Ozs/6Tk5P+g4OD/35+ + fv5+fn7+f39//39/f/5/f3/+f4B//3l4ef53d3f+kZCR/8nKyf7r6+v++/r7//7+/v7+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v7+ + /v/s7e39PT4+qgAAAFkAAAA8AAAAJAAAAA8AAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9f + XwEAAAAFAAAADgAAACEAAAA5AAAAVQAAAHoAAACWAAAArENDQ9vv7+/+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////z8/P7o6Oj+ycnJ/5+gn/6Ghob+fX19/35+fv5/f3/+f39//39/f/5/f3/+enp6/3x8 + fP6RkZH+tra2/+Lj4v77+vv+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v7+/v+pqarnFRUVhAAAAEwAAAAxAAAAHAAAAAoAAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACsAAABFAAAAYwAAAIcAAACgAAAAtJWV + lfb+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/f39//Dw8P7Z2dn+r6+v/4WF + hf58fHz+fn9+/39/f/5/f3/+gIB//39/f/59fX3+fX19/4eHh/6pqar+3dzc/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/vHx8f5naGfBAgICaAAA + AEAAAAAnAAAAFAAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAANAAAAHAAA + ADcAAABUAAAAcgAAAJUAAACrFxgX0P/////+/v7//////////////////////////////////////+bm + 5v/c3Nz/8vLy//////////////////////////////////////////////////////////////////// + /////////////////v///////////+7u7v/Gxsb/np6e/4WFhf9/f3//fn5+/39/f/9/f3//f39//4CA + gP96enr/dnZ2/5OUk//Gxsb/5+fn//r6+v////////////////////////////////////////////// + /////////v7+/8XFxe4XFxeSAAAAVAAAADMAAAAdAAAADQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPz8/AQAAAAcAAAATAAAAJQAAAEIAAABgAAAAfwAAAJ4AAAC1eHh46v7+/v/+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/qSkpP97e3v+mpqa/sXFxf/o6Oj+/Pz8/v/////+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+8/Pz/9DQ + 0P6urq7+j4+P/35+fv5+fX7+f39//39/f/5/f3/+f39//nt7e/97env+jIyM/rS1tf/Z2dn++Pj4/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/nl5edMBAQFrAAAASAAAACkAAAAWAAAACQAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw8PAgAAAAsAAAAZAAAALgAAAE8AAABtAAAAiwAA + AKgTExPKw8PD9/7+/v/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+8PDw/oaGhv99fX3+enp6/nl5 + ef+DgoP+qKio/unp6f/+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v719fX+5ubm/7q6uv6RkZH+fX59/31+fv5/f3/+f39//n+A + gP9/f3/+fX19/n19ff+EhIT+m5yb/tXV1f/4+Pj+/v7+/v/////+/v7+/v7+/v/////+/v7+/f79/hsb + G54AAABZAAAAPAAAACAAAAAQAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfX18BAAAABQAA + ABIAAAAjAAAAOwAAAF0AAAB8AAAAmAEBAbRmZmbh8fHx/v7+/v////////////////////////////// + ///9/f3/wMDA/3t7e/9/gH//f3+A/4CBgP+AgID/dXV1/3FxcP+TkpP/yMjI/+rq6v/6+vr///7///// + ///////////////////////////////////////////////////////////////////+//////////// + ///4+Pj/2NjY/6empv+MjIz/gYGB/39+fv9/f3//f39//39/f/+AgH//fX19/3p6ev/Hx8f//f39//// + ///////////////////+/v7/mJiY6gAAAGkAAABLAAAAMAAAABcAAAAKAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABgAAAAsAAAARgAAAGoAAACJAAAAohMTE8Kmpqb0/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////6+vr+urq6/oWFhf99fn3+fn5+/oCAgP9/f3/+gICA/n9/ + f/94eHj+dXZ1/4yMjP6wsLD+19fX//r6+v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////f39/7e3t7+vb29/pWVlf+BgoH+fX19/n9/ + f/9/f3/+f39//pWVlf/o6Oj+/v7+/v/////+/v7+/v7+/v7+/v/u7u79RUVFswAAAFwAAAA+AAAAJgAA + ABEAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAB8AAAA2AAAAUgAA + AHcAAACTAAAAqz09Pdbv7+/+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+8/Pz/tra + 2v+wsLD+i4uL/nx8fP9+fn7+f4B//oCAgP+AgID+gICA/3x8fP56enr+e3x7/5mZmf7Ozs3++Pj4//7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7++vr6/unp6f/MzMv+oKCg/n+Af/98fHz+e3t7/r29vf/8/Pz+/v7+/v/////+/v7+/v7+/v7+ + /v+wsLDtGBgYigAAAE8AAAAzAAAAHQAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAHAAAAFAAAACoAAABDAAAAYgAAAIYAAACgAAAAtpeWl/f+/v7//v7+//////////////////// + //////////////////////////7/////////////8vLy/8bGxv+hoqH/ioqK/4CAgP9/f3//gICA/4CA + gP+BgID/goKC/3t8e/9wcHD/fHx8/7W1tf/e3d3/8/Pz/////v////////////////////////////// + /////////////////////////////////////////////////v///////////+Li4v+2trb/nZ2d//T0 + 9P///////////////////////v7+//Hx8f1lZWW/AQEBaAAAAEAAAAAnAAAAFQAAAAcAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAMAAAAGgAAADQAAABQAAAAbgAAAJIAAACpERERzPDv + 8P7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v3+ + /v/y8vL+2tra/rW1tf+Vlpb+g4OC/35+fv6AgH/+gYGA/4GBgf6BgYH+fn1+/3Z2dv5+fn7+qqqq//7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v// + ///+/v7+/v7+/v/////7+/v+8fHx/v/////+/v7+/v7+/v/////+/v7+/v7+/s/Pz/AfHx+XAAAAVwAA + ADUAAAAeAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAARAAAAIQAA + AD4AAABcAAAAewAAAJwAAACxZWVl5/7+/v79/f3+/v7+/vv7+//5+fn++Pj4/vr7+v/9/f3+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v7////+/v7+/v7+/vj4+P/q6ur+z8/O/5ycnP6CgoL+fn59/4CA + gP6BgYD+gYGB/4GBgf58fHz+rq+u//7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/oeGh9kCAgJuAAAASgAAACoAAAAXAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPz8/AQAAAAgAAAAWAAAAKQAAAEkAAABpAAAAhwAAAKYVFRXJysrK9/7+/v/9/f3/+Pj4/9fU + 0/67tLD+q6Wh/sTDw/7k5OT++Pj4//////////////////////////////////////////////////// + //////////////z8/P/m5ub/vr2+/5WVlf+Ghob/gICA/39/f/+Ojo7/4+Pk//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////8/Tz/hcXF5sAAABZAAAAPAAAACAAAAAQAAAABgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AQAAAAsAAAAZAAAALgAAAFAAAABwAAAAjQAA + AK1cXFzc7Ozs/v39/f76+vr+0M7M/YxzY/yAX0z9Ykk7/jMvLPyGhIT94ODg/vv7+//+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+//////7+/v7+/v7+/v7+/+rq6v7Nzc3+q6ur/4uK + i/6vr6/+9fX1//7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/+///+/v7+pKWk7gAA + AG4AAABMAAAAMQAAABgAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AgAA + AAwAAAAaAAAAMAAAAFEAAABxAAAAjg4ODrWbm5vw/f39//39/f709PX+mo6H+4tiSv+KY0z+XUIz/hQN + Cf8mIyH9q6ur/vLy8v/+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+//////7+ + /v7+/v7+//////7+/v79/f3+9fT1/+Hh4f7o6Oj+/v7+//7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////29vb+Tk5OugAAAF0AAABAAAAAJwAAABEAAAAHAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAPz8/AgAAAAwAAAAZAAAALQAAAEwAAABqAAAAhUJCQsbs7Oz+//////v7 + +v/u7u//in94+o5kTP+KZE3/TDYp/x0UDv8RDAn/X15e/OXl5f/6+vr///////////////////////// + ///+/v7////////////+/v7///////////////////////////////////7///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7+/v+urq7sFxcXhwAAAE0AAAAyAAAAHAAA + AAsAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AQAAAAoAAAAWAAAAJwAA + AEIAAABcAAAAdX5+fuT+/v7+//////n5+P7q6uv+k4mE95BmTf+JYkz+TTcq/iQZEv8SCwf+T05N+9na + 2f/09PT+/v7+/v/////+/v7+/v7+/v7+/v/+/v7+/v7+/v7+/v/+/v7+/v7+//7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/vPz + 8/5tbG3EAgICawAAAEEAAAAoAAAAFQAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAPz8/AQAAAAcAAAARAAAAHgAAADUAAABKAAAAYCgoKJpkZGTNu7m49fb3+P7o6uv+louD9pNo + Tv+eclj+gV1H/i8hGf8WDgr+UU9O/NHS0v/w8PD+/v7+/v/////+/v7+/f39/vPy8f65sqz7nI2E+4WA + ffvGxcX8/Pz8//39/f7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/tLS0vIlJSWdAAAAWAAAADYAAAAfAAAADwAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAKAAAAEwAAACIAAAAyAAAAQgAA + AFUAAABoSjYq1Jh7avifkIn5jXZo+qJ0WP/PlnT/yJFx/0YxJf8aEg7+X11d/M7Ozv/u7u7//f79//// + /////////////6OUivyKZE3+hV5G/y0eFP8gGhj9np2d/f/////+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////4GCgdYAAABsAAAASQAA + ACkAAAAWAAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAGAAAACwAAABUAAAAgAAAAKwAAADoJBwVmbk884qh4XP6CXkn+gl9K/rqGZ//XnHj+z5Z0/lI6 + LP8dFxP9e3p6/c7Ozv/u7u7+/f39/v/////+/v7+/v7+/nxlV/qQZk3+imNN/jQkHP8TCwj+NDIx+/r6 + +v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7++Pj4/iIiIqMAAABaAAAAPQAAACAAAAAQAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAsAAAASAAAAGQAAACMeFhF2gFxH8LWD + Zf6KZE3+i2NM/s6Vc//Vm3j+zpVz/ks1KP8fGRb5hoaF/Nva2//09PT+/f39/v7+/v/+/v7+/P39/nxn + W/iTaU/+i2RN/jYlHP8cEgz+IR4b/d3d3v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v// + ///+/v7+/v7+/v/////+/v7+/v7+/v7+/v/+/v7+srKy9AEBAXEAAABNAAAAMgAAABgAAAALAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AQAA + AAMAAAAGAAAACgAAABI2Jx6HimNM/IVgSv9mSTj/lWtS/9Wad//UmXb/xY5u/zcnHf8NCAbTAwMDizEy + MbiJiYncysrJ8vTy8f7+/f3/+/z9/4ZxZveZbVP/rHtf/2JGNf8lGRL/IRwZ/czNzP7+/f3///////// + //////////////7+/v/7+vr/6ujm/tza2P3j4+L++fn5//39/f/+/v7///////////////////////// + ///////////////////////////////////////////////////////////////////09PT+SEhItgAA + AFwAAAA+AAAAJgAAABEAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz8BAAAAAwMCARBFMSaYimNM/n1bRv55V0P+nXFW/tOY + dv/Vmnf+r35h/icbFP0IBQSrAAAAVwAAAGIBAQF0MSklx7yjlPzNwLn619XU+4hxY/aqel3+1515/p9z + WP8zIxr+Ix4b/dDQ0P79/Pz+//////7+/v7+/v7+/v7+//j49/7Px8L9nIN1/GZTSPtXUU78qqmo/f7+ + /v79/f3+//////7+/v7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+/v7+/v/////+/v7+/v7+/v// + ///+/v7+/v7+/v7+/v+2trbuGxsbiwAAAE8AAAAzAAAAHQAAAAwAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYE + AxNROiylimRM/35bRv6FX0n+nnFX/tWbeP/Rl3X+fVlE/hkSDfAEAgF5AAAANgAAAEQAAABSPy0iy7SD + Zf6cdVz8fWZY/YRjUPzBjm3+3qN+/rSCZf9ALCH+KCMh++Pj4/78/Pz+//////7+/v7+/v7+/v7+/+Th + 3/2Rd2f7k2lP/mBENP4eFA7+Lion/dva2/7+/v7+//////7+/v7+/v7+//////7+/v7+/v7+//////7+ + /v7+/v7+/v7+/v/////+/v7+/v7+/v/////+/v7+/v7+/vb29v52d3fJBAQEbgAAAEIAAAApAAAAFgAA + AAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgFBBtVPC61gFxH/25PPP94VkL/mW5V/9abeP+oeV3/QC0i/xAL + CMgAAAApAAAAHAAAACUFAwJFZEc317aDZf+bcVf/WD8w/5BnT//UnXr/2Z16/7SCZf89Kh//NzMx9urp + 6v79/Pz//////////////////////9rW0/6CYlD9mGxT/2dJOP8oHBX/DwcE/5STk/v///////////// + /////////////////////////////////////////////////////////////////////////v7+/8/P + z/IjIyObAAAAVwAAADUAAAAfAAAADwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEAxpHMiazbk88/3ZU + QP5YPi/+hF9I/q5+Yf9fRDT+JhoT/gYEAncAAAAJAAAADQAAABQQCwhMdlRB35ZsU/9jRzb+PCsg/qV4 + XP/boX3+1Zp3/q5+Yf81JRz+GxkX0GxsbMWjo6Pm3d3d/P7+/v7+/v7+/v7+/9zX1f2EZFL8onVZ/4hi + S/45KB7+FQwH/4eGhfn+/v7+//////7+/v7+/v7+//////7+/v79/f3+/v7+//7+/v7+/v7+/v7+/v7+ + /v/+/v7+/v7+/v/////+/v7+/v7+/o6OjtoCAwJwAAAASgAAACoAAAAXAAAACgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAIBARAsHxegX0Mz/1c+L/47KR/+UDkr/lA5K/8wIRn+Fg8L5wAAABEAAAACAAAABAAA + AAgbEw9afltF6YhiTP9WPi/+Vj4v/rWDZf/an3v+1Zp3/pxwV/8oHBX9BQMClQICAmwRERGGMDAwoo+J + hurf2db7+/r6/t7Z1v2KaFT7vo1s/8mUc/5hRTX+GQ8J/4eGhvn+/v7+//////7+/v7+/v7+//////39 + /f79/f3+7Ovp/rKsqvuysK777+/v/v7+/v/+/v7+/v7+/v/////+/v7+/v7+/iopKqoAAABbAAAAPgAA + ACEAAAAQAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERDAltNSUb9DIjGv8wIhn/MSIZ/yod + Fv8bEw3nBAMCSgAAAAAAAAAAAAAAAAAAAAEhFxJjgFtG8IRfSf9mSjn/gl1I/7KAY//Vmnf/05l2/2ZJ + OP8WDwvlAgEBXAAAAEMAAABPAAAAXWhINve9i239noJw95SDefiXb1j936yG/9WbeP9/W0b/HREL/5eW + lvn///////////////////////////r7+v/NxcH9lHZl/XJQO/8qHBT/PTc1++bm5v7///////////// + ///+/v7/rq2u8gAAAG4AAABMAAAAMQAAABgAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAADAgEeFw8LpycbFP4qHRb+KBwU/hoSDdsIBQRhAAAACgAAAAAAAAAAAAAAAAAAAAAeFRBiflpF8HVU + QP9mSTj+hmBK/qp6Xv/Wm3f+soFj/jUlHP4OCQerAAAALwAAACkAAAAyAwMBVIdiS/3Ai2v+kWhP/2JG + Nf6me1/+57OK/9CWdP6EX0n+IBUP/7W1tfv+/v7+/v7+//7+/v7+/v7+/////+zs6/6ei3/8lGlR/n5a + Rf4yIxr+EwoF/oeGhfv+/v7+/v7+/v/////19fX+U1NTvwAAAF4AAABAAAAAJwAAABIAAAAHAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEBHAwIBmsRCwmXDQkHegMCAS4AAAAHAAAAAAAA + AAAAAAAAAAAAAAAAAAAUDgtYbk4863NSP/9/W0X+aUo4/p9zWf/Ai2v+aEo4/h8VEO8GBANoAAAAEQAA + ABYAAAAcDgkHWpBoUP6ZblX+Uzwu/1k/MP69jW3+5ayF/86Vc/5/W0b+IBcS/np5eubh4eH8/v7+//7+ + /v7+/v7+/v7+/+Ph4PyLc2X6mGxT/5VqUv5FMSX+GQ8J/m1ra/v+/v7+/v7+/v7+/v++vr7zICAgkQAA + AFEAAAA1AAAAHwAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBAMuPCog1mZJN/9dQjL/Pywh/1k/ + L/9QOSv/Lh8X/w8KB6sAAAANAAAABAAAAAcAAAAKHBQPcJJpUf+FX0r/PSsh/31ZRP/OmXb/3qF9/8mR + b/9lSDj/Ew0K7QAAAGcGBgaFMzMzt66qp/br5eL89PLx/uPg3/yOdGT5qnpe/9+mgP9+WkX/IhUO/2xq + aPz//////v7+//f39/51dXXHAgICbAAAAEIAAAApAAAAFgAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAABAAAJHRQPqT8sIf85Jx3+MyMa/jQkG/8tHxf+HBMO5gIBAS8AAAAAAAAAAAAAAAEAAAADIRcSeY9n + T/55V0P+SzYp/5puVf7PlnT+2Jx5/7qGZ/5FMSX+CwcFtwAAAEkAAABWAAAAZF1FN/C2j3j6sZuO/Kmh + nfeLa1r6x5Z0/+uziv6ccFb+KRsS/nVzcvr+/v7+/v7+/tXV1fMsLCyeAAAAWAAAADYAAAAgAAAADwAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQCKyMYEu4rHhb+LR8X/iodFv8cEw7hBwQDVQAA + AAAAAAAAAAAAAAAAAAAAAAAAHBQPdoZgSv5XPi/+YUU1/51wVv7Fjm7+2Jx5/45mTv4pHBX7BgQDcAAA + AC8AAAA5AQEAVntYRP22gmX+h2JL/kQ0KvyKZE3+4bSL/+Gngv6kdlv+LR0U/oiHhvj+/v7+/v7+/pyb + nN0EBARuAAAASAAAACsAAAAYAAAACwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIB + AR4NCQeHEgwJrQsIBXoCAQEbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwoHW1k/MP9TOy3/fFlE/3JR + Pv+xf2L/soBj/0AtIv8VDgrIAQEBMQAAABcAAAAeCgcFWYpjTP+LZE3/QS4k/zooH/+pfWD/7b2S/9eb + d/+ab1b/JxkS/4GAgOLa2tr18PDw/SoqKpsAAABNAAAANgAAAB4AAAAQAAAABgAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAABgQDKj4rIP1UPC3+WkAw/0o0Jv5qTDr+VDst/yQZE/QKBwV4AAAACwAAAAoAAAAOEw0KZItk + Tf6BXUf+MSMa/15DM/7Dk3L+7LSL/9KXdP6GYEr+IRcR+w0NDYA2NjaWZGRkrQMCA1UAAAA5AAAAJwAA + ABUAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABScbFdo9KyD+Oyke/zYlHP42Jhz+LyAY/xUO + CsQBAAAcAAAAAQAAAAMAAAAEFQ8Ma4liS/5sTTz+LiEY/4tjTf7RnHn+4aaA/8qRcP5mSTj+Fg8L4wAA + AEMAAABDAQEBQwAAADQAAAAmAAAAGQAAAA0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkG + BEMiGBLeKh0W/SseFv8nGxT4GBAMzgEBAB0AAAAAAAAAAAAAAAAAAAAAEAoIX2ZJOP9CLiP/Uzst/6Bz + WP/LknD/2p16/6R3W/83Jx39CQYEiAAAACQAAAAmAAAAIwAAABwAAAAUAAAADQAAAAcAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUHBQNDEQwJjxQOCp8NCQd8AwIBJgAAAAAAAAAAAAAAAAAA + AAAAAAAACQYEPUIvI/5HMib+dVM//4BbRv6sfGD+wYts/1pAMf4eFA/iBAICQwAAABMAAAATAAAAEgAA + AA8AAAAKAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQEB + AA8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAEjMjGvhLNSj+XEEx/083Kf5pSzn+YUU1/ywf + F/0PCgeXAAAAEgAAAAgAAAAHAAAABwAAAAYAAAADAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkR + DJs1JRz8OScd/zUlG/8zIxr/LR8X/xcQDL8CAQElAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUDAigcEw66Kh0V+iseFv4nGxT8GhINzAQCAjoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgEkDwoHjxcQ + DNAQCgiWBAMCMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //wAD/////////////gAA/////////////gAAP////////////AAAD////////////AAAA////////// + //AAAAP//////////+AAAAD//////////+AAAAA//////////8AAAAAf/////////8AAAAAD//////// + /8AAAAAB/////////4AAAAAAf////////4AAAAAAD////////wAAAAAAB////////wAAAAAAAf////// + /wAAAAAAAH///////gAAAAAAAB///////gAAAAAAAAf//////AAAAAAAAAH//////AAAAAAAAAB///// + +AAAAAAAAAAf////+AAAAAAAAAAH////8AAAAAAAAAAB////8AAAAAAAAAAA////8AAAAAAAAAAAf/// + 4AAAAAAAAAAAf///4AAAAAAAAAAAP///wAAAAAAAAAAAP///wAAAAAAAAAAAP///wAAAAAAAAAAAP/// + gAAAAAAAAAAAP///gAAAAAAAAAAAP///AAAAAAAAAAAAP///AAAAAAAAAAAAP//+AAAAAAAAAAAAf//+ + AAAAAAAAAAAAf//+AAAAAAAAAAAA///8AAAAAAAAAAAA///8AAAAAAAAAAAB///4AAAAAAAAAAAB///4 + AAAAAAAAAAAB///wAAAAAAAAAAAD///wAAAAAAAAAAAD///wAAAAAAAAAAAH///gAAAAAAAAAAAH///g + AAAAAAAAAAAP///AAAAAAAAAAAAP///AAAAAAAAAAAAP///AAAAAAAAAAAAf//+AAAAAAAAAAAAf//+A + AAAAAAAAAAA///8AAAAAAAAAAAA///8AAAAAAAAAAAA///8AAAAAAAAAAAB///4AAAAAAAAAAAB///wA + AAAAAAAAAAD///wAAAAAAAAAAAD///wAAAAAAAAAAAH///gAAAAAAAAAAAH///gAAAAAAAAAAAP///AA + AAAAAAAAAAP///AAAAAAAAAAAAP///AAAAAAAAAAAAf//+AAAAAAAAAAAAf//+AAAAAAAAAAAA///+AA + AAAAAAAAAA///8AAAAAAAAAAAB///8AAAAAAAAAAAB///8AAAAAAAAAAAB///8AAAAAAAAAAAD///8AA + AAAAAAAAAD///8AAAAAAAAAAAH///+AAAAAAAAAAAH///+AAAAAAAAAAAH////AAAAAAAAAAAP////gA + AAAAAAAAAP////4AAAAAAAAAAf////+AAAAAAAAAAf////+AAAAAAAAAA/////+AAAAAAAAAA/////+A + AAAAAAAAB/////+AOAAAAAAAB//////APAAAAAAAB//////gfAAAAAAAD////////AAAAAAAD/////// + /AGAAAAAH////////gPgAAAAH////////wfgAAAAH//////////gAAAAP//////////gAAAAP/////// + ///wHgAAf//////////wPgAA///////////8fgAA/////////////wDf/////////////wH///////// + /////wP//////ygAAACAAAAAAAEAAAEAIAAAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAHAAAACwAAAA8AAAAUAAAAGQAA + ABsAAAAdAAAAHAAAABoAAAAWAAAAEgAAAA4AAAAKAAAABwAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAADAAAABwAAAAwAAAASAAAAGQAAACAAAAAmAAAAKwAAAC0AAAAtAAAAKgAAACYAAAAgAAAAGgAA + ABQAAAAOAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAKAAAAEgAAABoAAAAlAAAALwAA + ADgAAAA+AAAAQgAAAEIAAAA+AAAAOQAAADIAAAAqAAAAIgAAABoAAAAUAAAADgAAAAoAAAAGAAAABAAA + AAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAADAAAACQAAABAAAAAaAAAAJgAAADMAAABCAAAATQAAAFYAAABaAAAAWgAAAFcAAABRAAAARwAA + AD4AAAAzAAAAKgAAACIAAAAaAAAAEwAAAA4AAAAKAAAABgAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAMAAAAFgAAACIAAAAyAAAAQgAA + AFQAAABiAAAAbQAAAHIAAAB0AAAAcQAAAGoAAABfAAAAVAAAAEkAAAA+AAAAMwAAACoAAAAhAAAAGgAA + ABMAAAAOAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADAAAACAAAABEAAAAdAAAALAAAAD4AAABSAAAAZgAAAHYAAACCAAAAiQAAAIsAAACJAAAAggAA + AHgAAABtAAAAYQAAAFUAAABJAAAAPgAAADIAAAAqAAAAIQAAABoAAAATAAAADgAAAAoAAAAGAAAABAAA + AAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAALAAAAFgAAACQAAAA2AAAASgAA + AGEAAAB2AAAAhwAAAJQAAACcAAAAnwAAAJ4AAACXAAAAjgAAAIQAAAB5AAAAbQAAAGAAAABUAAAASAAA + AD0AAAAyAAAAKQAAACAAAAAZAAAAEgAAAA0AAAAJAAAABgAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAABwAAAA8AAAAbAAAALAAAAEAAAABWAAAAbgAAAIQAAACWAAAAowEBAbUNDg3JAAAArgAA + AKoAAACiAAAAmgAAAI8AAACEAAAAeAAAAGwAAABgAAAAUwAAAEcAAAA8AAAAMgAAACgAAAAfAAAAFwAA + ABIAAAAMAAAACAAAAAUAAAACAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAKAAAAFAAAACIAAAA0AAAASgAA + AGIAAAB7AAAAkQAAAKIAAACwMDAw5P////9ubm71CQkJywAAALIAAACrAAAAogAAAJoAAACPAAAAhAAA + AHgAAABrAAAAXwAAAFIAAABGAAAAOwAAADAAAAAmAAAAHgAAABYAAAAQAAAACwAAAAcAAAAFAAAAAgAA + AAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAABgAAAA4AAAAZAAAAKQAAAD0AAABVAAAAbgAAAIYAAACbAAAArAAAALyop6j8//////// + ///3+Pf/Xl1e8wYGBsgAAACyAAAAqgAAAKIAAACZAAAAjgAAAIMAAAB3AAAAagAAAF4AAABRAAAARQAA + ADkAAAAuAAAAJQAAABwAAAAWAAAADwAAAAsAAAAHAAAABQAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAJAAAAEgAAAB8AAAAxAAAARgAA + AF8AAAB4AAAAjwAAAKMAAACyExMT2f///////////f38////////////8PDw/1BQUPAEBATGAAAAsgAA + AKoAAACiAAAAmAAAAI4AAACCAAAAdgAAAGkAAABcAAAATgAAAEIAAAA3AAAALQAAACMAAAAbAAAAFQAA + AA8AAAAKAAAABwAAAAUAAAACAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAABQAAAAwAAAAXAAAAJgAAADoAAABQAAAAagAAAIIAAACYAAAAqgAAALh2dnb3//////39 + /f////////////39/f///////////+Pj4v9FRUXsAwMDwgAAALIAAACqAAAAoQAAAJcAAACMAAAAgAAA + AHMAAABmAAAAWQAAAE0AAABBAAAANgAAACsAAAAiAAAAGwAAABUAAAAPAAAACgAAAAcAAAAEAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAAEAAAAB0AAAAuAAAAQgAA + AFoAAAB0AAAAiwAAAKAAAACwBwcHzfb19v/////////////////////////////////8/fz///////// + ///Y19j+ODg46QEBAcAAAACxAAAAqQAAAKAAAACWAAAAigAAAH4AAABxAAAAZAAAAFcAAABLAAAAPwAA + ADUAAAArAAAAIgAAABoAAAAUAAAADgAAAAoAAAAHAAAABAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABAAAAAoAAAAVAAAAIwAAADYAAABNAAAAZQAAAH4AAACVAAAApwAAALZISEju//////39 + /f/////////////////////////////////9/f3//f39////////////ysvK/jAwMOUBAQG9AAAAsAAA + AKcAAACeAAAAkwAAAIgAAAB8AAAAbwAAAGIAAABWAAAASgAAAD4AAAA0AAAAKgAAACIAAAAaAAAAFAAA + AA4AAAAKAAAABgAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADgAAABoAAAArAAAAPwAA + AFYAAABwAAAAiAAAAJ0AAACuAQEBws3NzP7///////////////////////////////////////////// + /////////f39//z9/P///////////729vf0mJybhAAAAugAAAK4AAACmAAAAnAAAAJIAAACGAAAAegAA + AG4AAABiAAAAVgAAAEoAAAA+AAAANAAAACoAAAAiAAAAGgAAABQAAAAOAAAACgAAAAYAAAAEAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAwAAAAoAAAATAAAAIQAAADMAAABJAAAAYgAAAHoAAACSAAAApQAAALQlJSXj//////39 + /f////////////////////////////////////////////////////////////39/f/9/f3///////// + //+trq39Hx8f3QAAALcAAACtAAAApQAAAJsAAACRAAAAhgAAAHoAAABuAAAAYgAAAFUAAABKAAAAPgAA + ADMAAAAqAAAAIgAAABoAAAATAAAADgAAAAoAAAAGAAAABAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADQAAABkAAAAoAAAAPAAA + AFMAAABsAAAAhAAAAJoAAACsAAAAu5ycnPv//////fz9//////////////////////////////////// + ///////////////////////////////////9/f3/////////////////oJ+g+xgYGNkAAAC0AAAArAAA + AKQAAACaAAAAkAAAAIYAAAB6AAAAbgAAAGEAAABVAAAASQAAAD4AAAAzAAAAKgAAACEAAAAaAAAAEwAA + AA4AAAAKAAAABgAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAwAAAAgAAAASAAAAHgAAADAAAABGAAAAXgAAAHYAAACOAAAAogAAALIPDw/W//////// + //////////////////////////////////////////////////////////////////////////////// + /////////f39/////////////////4+Pj/oSEhLVAAAAswAAAKwAAACjAAAAmgAAAJAAAACFAAAAeQAA + AG0AAABhAAAAVAAAAEgAAAA9AAAAMgAAACkAAAAhAAAAGgAAABMAAAAOAAAACgAAAAYAAAADAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADAAAABYAAAAmAAAAOQAA + AE8AAABpAAAAgQAAAJcAAACqAAAAt2pqavb//////f38//////////////////////////////////// + //////////////////////////////////////////////////////////////38/f////////////// + //+BgYH4Dg4O0QAAALIAAACrAAAAowAAAJoAAACPAAAAhAAAAHkAAABsAAAAYAAAAFQAAABIAAAAPQAA + ADIAAAApAAAAIAAAABkAAAASAAAADQAAAAkAAAAGAAAAAwAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAcAAAAQAAAAHQAAAC4AAABCAAAAWgAAAHMAAACLAAAAnwAAALAFBQXK7Ozs//// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////9/f3/////////////////c3Ny9gsLC80AAACyAAAAqwAA + AKMAAACaAAAAjwAAAIQAAAB4AAAAbAAAAF8AAABTAAAARwAAADwAAAAyAAAAKAAAAB8AAAAXAAAAEQAA + AAwAAAAIAAAABQAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACgAAABUAAAAjAAAANgAA + AEwAAABlAAAAfgAAAJQAAACnAAAAtj49Puz//////fz9//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////fz9/////////////////2RkZPQHBwfLAAAAsgAAAKsAAACiAAAAmQAAAI4AAACDAAAAdwAA + AGsAAABeAAAAUgAAAEYAAAA6AAAAMAAAACYAAAAeAAAAFgAAABAAAAALAAAABwAAAAUAAAACAAAAAgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAYAAAAOAAAAGgAAACoAAAA/AAAAVgAAAG8AAACHAAAAnQAAAK4BAQHAwcLB/v// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////39/f////////////Pz + 8/9XV1fxBQUFxwAAALIAAACqAAAAogAAAJkAAACOAAAAgwAAAHYAAABqAAAAXgAAAFEAAABEAAAAOQAA + AC4AAAAlAAAAHAAAABUAAAAPAAAACgAAAAcAAAAFAAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAACgAAABMAAAAhAAAAMgAA + AEkAAABhAAAAegAAAJEAAACkAAAAtB0eHd////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////9/P3////////////p6un/SkpK7gMDA8QAAACyAAAAqgAA + AKIAAACYAAAAjgAAAIIAAAB2AAAAaQAAAFsAAABOAAAAQgAAADYAAAAsAAAAIwAAABsAAAAVAAAADwAA + AAoAAAAHAAAABAAAAAIAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAYAAAANAAAAGAAAACgAAAA8AAAAUwAAAGwAAACEAAAAmgAAAKsAAAC6jo6O+v// + ///9/f3///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////f39////////////3t3e/z8/P+sCAgLBAAAAsgAAAKoAAAChAAAAlwAAAIwAAACAAAAAcwAA + AGYAAABZAAAATAAAAEAAAAA1AAAAKwAAACIAAAAbAAAAFAAAAA8AAAAKAAAABwAAAAQAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACAAAABIAAAAeAAAAMAAA + AEUAAABeAAAAdgAAAI4AAACiAAAAsgwMDNT///////////////////////////////////////////// + /////v////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////38/f///////////9HR + 0f40NDTnAQEBvwAAALEAAACpAAAAnwAAAJUAAACKAAAAfgAAAHEAAABkAAAAVwAAAEoAAAA/AAAANAAA + ACoAAAAiAAAAGgAAABQAAAAOAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAUAAAALAAAAFgAAACYAAAA4AAAATwAAAGgAAACBAAAAlgAAAKkAAAC3Xl9e8/// + ///9/f3////////////////////////////////////////////x8fH/+/z7///////9/v7//fz9//7/ + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////39/f/9/f3////////////ExMT+Kisq5AAAALsAAACvAAAApwAA + AJ4AAACTAAAAhwAAAHsAAABvAAAAYgAAAFYAAABKAAAAPgAAADQAAAAqAAAAIgAAABoAAAAUAAAADgAA + AAoAAAAGAAAABAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAAAA8AAAAcAAAALQAA + AEIAAABaAAAAcgAAAIoAAACfAAAArwMDA8jj4uP///////////////////////////////////////// + /////////v3+/52enf+Yl5j/ycnI/+bm5v/r7Ov/7e3u//T19P/6+vr//v/+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///9/f3//fz9////////////tLW1/SMjI98AAAC5AAAArgAAAKYAAACcAAAAkgAAAIYAAAB6AAAAbgAA + AGIAAABWAAAASgAAAD4AAAA0AAAAKgAAACIAAAAaAAAAEwAAAA4AAAAKAAAABgAAAAQAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAQAAAAKAAAAFAAAACIAAAA1AAAASwAAAGQAAAB9AAAAkwAAAKYAAAC2NDQ06f// + ///9/f3////////////////////////////////////////////h4eH/f35//3p7ev98e3z/i4yL/6en + p//BwsH/09LT/9zd3P/u7u7/+fn5///+//////////////////////////////////////////////// + /////////////////////////////////////////////////////////f39//39/f///////////6em + p/wbGxvbAAAAtgAAAK0AAACkAAAAmwAAAJEAAACGAAAAegAAAG4AAABhAAAAVQAAAEkAAAA+AAAAMwAA + ACoAAAAhAAAAGgAAABMAAAAOAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAA4AAAAaAAAAKgAA + AD4AAABVAAAAbgAAAIYAAACcAAAArQAAAL61trX9//////39/f////////////////////////////// + /////////////7Oys/95enn/f39//39/f/99fH3/e3x7/4SDhP+YmJj/sbGx/8vLyv/c3Nz/7e3t//j4 + +P/+/v7///////////////////////////////////////////////////////////////////////// + //////////////////////////////39/P////////////////+YmJj7FRUV1wAAALQAAACsAAAApAAA + AJoAAACQAAAAhQAAAHoAAABtAAAAYQAAAFUAAABJAAAAPgAAADIAAAAqAAAAIQAAABoAAAATAAAADgAA + AAoAAAAGAAAABAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAMAAAAJAAAAEgAAACAAAAAyAAAARwAAAF8AAAB5AAAAkAAAAKMAAACzGRkZ3P// + ///////////////////////////////////////////////////08/T/jIyM/318ff9/gH//f3+A/39/ + f/+Af3//fn5+/318ff+AgYD/k5OT/66urv/Kycr/3N3c/+3s7f/3+Pf//v7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///9/f3/////////////////iYiJ+RAQENIAAACzAAAArAAAAKMAAACaAAAAkAAAAIUAAAB5AAAAbQAA + AGAAAABUAAAASAAAAD0AAAAyAAAAKQAAACAAAAAZAAAAEgAAAA0AAAAJAAAABgAAAAMAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABQAAAAwAAAAXAAAAJgAA + ADoAAABRAAAAagAAAIIAAACZAAAAqgAAALiDg4P5//////39/f////////////////////////////// + /////////////8nJyf95eXn/f39//39/f/9/f3//f39//39/f/9/f3//f39//39+f/98fXz/fn5+/42N + jf+qqan/xsfG/93c3f/s7Ov/9/b3//3+/f////////////////////////////////////////////// + /////////////////////////////////////////////////////////P39/////////////////3h5 + ePcLCwvQAAAAsgAAAKsAAACjAAAAmgAAAI8AAACEAAAAeAAAAGwAAABgAAAAUwAAAEcAAAA8AAAAMgAA + ACgAAAAfAAAAFwAAABIAAAAMAAAACAAAAAUAAAACAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAHAAAAEAAAAB0AAAAuAAAAQwAAAFsAAAB0AAAAjAAAAKAAAACxCQkJ0P// + ////////////////////////////////////////////////////////ubm5/35+fv96enr/fX59/4B/ + gP9/gH//f3+A/39/f/+Af3//f4B//39/gP9/f3//fX19/3x9fP+JiIn/o6Sk/8LCwv/c3Nv/7Ovs//b2 + 9v/9/f3///////////////////////////////////////////////////////////////////////// + //////////////////////////////39/f////////////////9tbW31CQkJzAAAALIAAACrAAAAogAA + AJoAAACPAAAAhAAAAHgAAABrAAAAXwAAAFIAAABGAAAAOgAAADAAAAAmAAAAHgAAABYAAAAPAAAACgAA + AAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAoAAAAWAAAAJAAA + ADYAAABNAAAAZgAAAH4AAACVAAAAqAAAALZSU1Lx//////z9/P////////////////////////////// + ///////////////////+//7/4+Pj/7CwsP+Ih4f/eXp5/3x8fP9/f3//f39//39/f/9/f3//f39//39/ + f/9/f3//f39//319ff98e3z/g4SD/52cnf+7vLv/2tra/+zt7P/29vb//Pz8//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///8/fz////////////39/j/XV5d8wYGBsgAAACyAAAAqgAAAKIAAACZAAAAjgAAAIMAAAB3AAAAagAA + AF4AAABRAAAARAAAADgAAAAtAAAAIwAAABoAAAASAAAADAAAAAcAAAAEAAAAAgAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAGAAAADgAAABsAAAArAAAAQAAAAFcAAABwAAAAiAAAAJ4AAACuAwMDxdjX + 2P7//////////////////////////////////////////////////////////////////////////+7v + 7v++vr//kJGQ/3t6e/97e3v/f35//39/f/+Af3//f4B//39/gP9/f3//f39//3+Af/9+fn7/e3x8/4CA + gP+Wlpb/uLe4/9fY1//t7O3/9/f2//z8/P////////////////////////////////////////////// + /////////////////////////////////////////////////////////f39////////////8PDw/1BQ + UPAEBATGAAAAsgAAAKoAAACiAAAAmAAAAI4AAACCAAAAdgAAAGkAAABbAAAATgAAAEAAAAAzAAAAJwAA + AB0AAAAUAAAADQAAAAcAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAoAAAATAAAAIgAA + ADMAAABKAAAAYgAAAHoAAACSAAAApQAAALQsKyzm//////38/f////////////////////////////// + ///////////////////////////////////////////////////49/j/ycrK/5ubm/9+fn7/enp6/31+ + fv9/f3//f39//39/f/9/f3//f39//39/f/9/f3//fn9+/3x8fP99fX3/j4+P/7Gxsf/T09T/7e3s//j3 + 9//7/Pv///////////////////////////////////////////////////////////////////////// + //////////////////////////////z9/P///////////+Pi4/9FRUXsAwMDwgAAALIAAACqAAAAoQAA + AJcAAACMAAAAgAAAAHIAAABkAAAAVQAAAEYAAAA3AAAAKgAAAB0AAAATAAAADAAAAAYAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAGAAAADgAAABkAAAApAAAAPAAAAFQAAABtAAAAhQAAAJoAAACsAAAAvaeo + p/z//////f39//////////////////////////////////////////////////////////////////// + /////////////////////////v/+/9fX1/+mp6b/hIOE/3l6ef99fX3/f4B//39/gP9/f3//gH9//3+A + f/9/f4D/f39//39/f/99fXz/fHx8/4mJif+qqqr/z8/O/+3t7f/5+fn//Pz8//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///9/f3////////////X2Nf+ODg46QEBAcAAAACxAAAAqQAAAKAAAACWAAAAiQAAAHoAAABqAAAAWgAA + AEgAAAA3AAAAJwAAABoAAAARAAAACQAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAkAAAASAAAAHwAA + ADEAAABGAAAAXgAAAHcAAACOAAAAogAAALITExPZ//////////////////////////////////////// + /////////////////////////////////////////////////////////////////v////////////// + ///i4+L/s7Kz/4qLiv96eXr/e3x7/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//fX19/3p7 + e/+EhIT/oqKi/8nJyf/s7Oz/+/v7//39/P////////////////////////////////////////////// + ///////////////////////////////////////////////////9/f3//P38////////////ysrK/jAw + MOUBAQG9AAAAsAAAAKcAAACcAAAAjgAAAH4AAABsAAAAWgAAAEYAAAAyAAAAIgAAABYAAAAMAAAABgAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAFAAAADAAAABcAAAAmAAAAOQAAAFAAAABpAAAAggAAAJcAAACqAAAAuHZ1 + dff//////f39//////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////7u3u/7/Av/+VlJT/fHx8/3t7 + e/9+f37/gH9//3+Af/9/f3//f39//4B/f/9/gH//f3+A/35+fv97e3v/f4B//5uam//ExMT/6+rr//3+ + /f/+/v7///////////////////////////////////////////////////////////////////////// + /////////////////////////f39//39/f///////////729vf0nJyfhAAAAuQAAAKsAAACeAAAAjgAA + AHwAAABnAAAAUgAAADsAAAApAAAAGgAAAA8AAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAcAAAAQAAAAHQAA + AC4AAABCAAAAWgAAAHMAAACLAAAAoAAAALAHBwfM9fb1//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////X29f/My8z/np+e/4CAgP95enn/fX1+/39/f/9/f3//f39//39/ + f/9/f3//f39//39/f/9+fn//e3t7/318fP+RkpH/vLu8/+bm5f/+/v7////////+//////////////// + //////////////////////////////////////////////////////////////////////////////39 + /f/9/f3///////////+ura39ICAg2wAAAK0AAACaAAAAhwAAAHIAAABaAAAAQgAAAC4AAAAeAAAAEQAA + AAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAEAAAACgAAABUAAAAjAAAANgAAAEwAAABlAAAAfgAAAJQAAACnAAAAtkdH + R+7//////f39//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///9/P3/2NjY/6qqqv+Ghob/enl6/3x9fP9/f4D/f39//4B/f/9/gH//f3+A/39/f/+Af3//f39//3x8 + ff96e3v/ioqK/7Kzsv/f39///f39//////////////////////////////////////////////////// + ///////////////////////////////////////////////////9/f3/////////////////oqOj+h0d + HcwAAACRAAAAeQAAAGAAAABGAAAAMQAAAB8AAAASAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAAAAGgAA + ACsAAAA/AAAAVgAAAHAAAACIAAAAnQAAAK4BAQHCzczN/v////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+Pi4/+2t7b/j46P/3p7 + ev97e3v/fn9+/39/f/9/f3//f39//39/f/9/f3//f39//39/f/98fX3/enl6/4SEg/+npqb/1dbV//r6 + +/////////////////////////////////////////////////////////////////////////////// + /////////////////////////fz9/////////////////6CfoPcTExOhAAAAYQAAAEcAAAAxAAAAHwAA + ABIAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAADAAAACgAAABMAAAAhAAAAMwAAAEkAAABiAAAAegAAAJIAAAClAAAAtCUl + JeL//////f39//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////u7+7/xMTE/5qbmv9+fn7/enp6/359fv9/gH//f39//39/ + f/9/f3//f39//39/f/9/f3//fn1+/3p7ev9/f3//nJyc/8zMzP/29/b///////////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v///////////ywrLLgAAABeAAAARQAAAC8AAAAeAAAAEQAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAANAAAAGQAA + ACgAAAA8AAAAUwAAAGwAAACEAAAAmgAAAKwAAAC7m5ub+//////9/f3///////////////////////// + //////////////7///////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////Pv8/9fX1/+op6j/hIWE/3l5ef98fXz/f39//39/f/9/f3//f39//39/f/9/f3//f39//35+ + fv97e3v/e3x7/5KSk//BwcH/8PDw//////////////////////////////////////////////////// + /////////////////////////////////////////v7+//////+5uLn6AQEBegAAAFkAAABAAAAAKwAA + ABoAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAADAAAACAAAABIAAAAeAAAAMAAAAEYAAABeAAAAdgAAAI4AAACiAAAAsg4P + Dtb//////////////////////////////////////////////////////////8nJyf+7u7v/7e3s//z8 + /P/6+/r/+vn6//3+/f////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////q6ur/uLm5/4yM + jP96enr/fHt8/39/f/+Af3//f4B//39/gP9/f3//f39//3+Af/9/f3//fHx8/3p6ev+Kior/tLS0/+Pj + 4//8+/z//f39//v7+//7/Pv//fz9//7//v////////////////////////////////////////////// + ///+/v7//////0JCQs4AAABqAAAAUQAAADoAAAAmAAAAFgAAAAwAAAAFAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAMAAAAFgAA + ACYAAAA5AAAATwAAAGkAAACBAAAAlwAAAKoAAAC3aWhp9f/////9/P3///////////////////////// + ///////////////////6+vr/k5OT/3R1dP+CgoL/nJyc/8LCwv/e3t7/7Ovs//X19f/7+/v///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+////////////////////8/Tz/8jIyP+Wl5b/fHx8/3p6ev9+fn7/f39//39/ + f/9/f3//f39//39/f/9/f3//f39//318ff95enn/g4KD/6Giof/Kysr/4+Pj/+jo6P/p6un/7+/v//j4 + 9//8/Pz////////////////////////////////////////////f4N/+BgYGjQAAAGAAAABIAAAAMgAA + ACAAAAASAAAACQAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAABwAAABAAAAAdAAAALgAAAEIAAABaAAAAcwAAAIoAAACfAAAAsAUF + Bcrs7Oz//////////////////////////////////////////////////////9ra2v99fX3/f3+A/35+ + fv97enr/ent6/4qKiv+pqan/zs7O/+jo5//19fX/+vv6//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////z7/P/X19f/o6Oj/4GBgf96eXr/fX19/39/gP9/f3//f39//39/f/9/f3//f39//39/ + f/9+fn7/e3t7/35+fv+TkpP/sbKx/8rKy//W19b/397f/+rr6v/5+Pn///////////////////////// + ///+/v7//////2ppauUAAABvAAAAVgAAAD4AAAAqAAAAGgAAAA4AAAAGAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAKAAAAFQAA + ACMAAAA2AAAATAAAAGUAAAB+AAAAlAAAAKcAAAC2PT097P/////8/fz///////////////////////// + ////////////////////////qquq/3p6ev9/f3//f39//3+Af/9/f3//fH18/3l5ef+Dg4P/oJ+g/8bG + xv/m5ub/9fX1//r6+v////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////5OTk/7Gx + sf+Ih4j/eXl5/3x8fP9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f35//3x8fP98fH3/iYmJ/6am + pv/ExMT/397f/+rq6v/6+vr/////////////////////////////////ERIRowAAAGQAAABMAAAANgAA + ACMAAAAVAAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAA4AAAAaAAAAKgAAAD8AAABWAAAAbwAAAIcAAACdAAAArgEB + AcC/v7/+/////////////////////////////////////////////////////+zt7P+Hh4f/fX59/4B/ + gP9/gH//gH+A/3+Af/+Af4D/gICA/35+fv95enn/fn5+/5iYmP+9vb3/4uLi//f29//7+/r///7///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+/v7//BwMH/kZGR/3t7e/97e3v/f35//3+A + f/9/f3//f39//39/f/9/f3//f39//39/f/9+fX3/e3x7/4WFhv+pqqr/4N/g//b29f////////////// + ///+/v7//////5WVlfMAAAByAAAAWgAAAEIAAAAtAAAAHAAAABAAAAAHAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAKAAAAEwAA + ACEAAAAyAAAASQAAAGEAAAB6AAAAkQAAAKQAAAC0HR0d3/////////////////////////////////// + ////////////////////////zMvM/3d3dv97env/fn9+/39/f/9/f3//f39//39/f/9/f3//f39//4B/ + gP9+f37/e3p7/3t7e/+Pjo7/sbKx/9va2//29vb/+/v7//3+/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////49/j/z9DP/52cnf9+fn7/enl6/31+ff9/f3//fn9//39+f/9/f37/f39//35/ + f/9/f3//enp6/5WVlf/i4+L/9/f3//7//v//////////////////////JiYmuwAAAGgAAABPAAAAOQAA + ACYAAAAWAAAACwAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAA0AAAAYAAAAKAAAADwAAABTAAAAbAAAAIQAAACaAAAAqwAA + ALqOjo76//////39/f/////////////////////////////////////////////////29vb/0tLS/6Ch + oP+AgIH/eXp6/359ff9/gH//gH+A/39/f/+Af3//f4B//39/gP9/gH//gH9//3x9fP95eHn/hYaF/6in + qP/S09L/9fX1//z8/P/+/f7///////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v/+/97e + 3v+qq6r/hYSE/3l6ef99fH3/f39//39/f/9/f3//f39//35/fv9+fn7/wcLB/+zs7P/7+/v///////// + ///+/v7//////8HAwfsBAQGAAAAAXgAAAEUAAAAwAAAAHgAAABIAAAAIAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAIAAAAEgAA + AB4AAAAwAAAARQAAAF4AAAB2AAAAjgAAAKIAAACyCwsL0v////////////////////////////////// + ///////////////////////////+/////////////////+Lj4v+xsLH/iImI/3p5ev97fHv/f39//39/ + f/9/f3//f39//39/f/9/f3//f39//3+Af/9+fX3/eXl5/39/f/+cnJz/yMfI//Hx8f/+/f7//v7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7////////////////////q6ur/ubm5/4yMjP96enr/e3t7/39+ + f/9/f3//fHt7/5eYl//l5OX/9vb2///+/v////////////7+/f//////SEhI1AAAAGwAAABTAAAAOwAA + ACgAAAAYAAAADQAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAsAAAAWAAAAJgAAADgAAABPAAAAaAAAAIEAAACWAAAAqQAA + ALdfXl/z//////39/f////////////////////////////////////////////////////////////// + ///////////////////x8PH/wcHB/5WUlf98fXz/e3p7/35+fv+Af4D/f4B//4B/gP9/gH//gH+A/3+A + f/+AgID/fn9+/3t6ev97fHv/k5OT/76/vv/s7Oz///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////9fT0/8fHx/+Xl5f/fHx8/3p5ev99fn3/zs7O//n5+f/+/v7///////// + /////////////+bm5v4HBgeRAAAAYQAAAEkAAAAyAAAAIQAAABMAAAAKAAAAAwAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAADwAA + ABwAAAAtAAAAQgAAAFoAAAByAAAAigAAAJ8AAACvAwMDx+Li4v////////////////////////////// + ////////////////////////////////////////////////////////////////////////+vv6/9LS + 0v+ioqL/goKC/3l6ef99fH3/f39//39/f/9/f3//f39//39/f/9/f3//f4B//39/f/97fHv/eXh5/4qK + iv+0s7T/4+Tj//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////v8 + +//X19f/np+f/6Skpf/9/fz///////////////////////7+/v//////cnJy6AAAAG8AAABWAAAAPgAA + ACoAAAAaAAAADgAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAoAAAAUAAAAIgAAADUAAABLAAAAZAAAAH0AAACTAAAApgAA + ALY0NDTp//////39/f////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////i4+L/srKy/4uLi/96enr/e3x7/39/ + f/9/gH//gH9//3+Af/9/f4D/f39//4B/f/9/gH//fX19/3h5eP+BgYH/paWl/9jY2P/9/v3///////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////9vf3//////////////////// + //////////////////8UFBSnAAAAZQAAAEwAAAA2AAAAIwAAABUAAAAKAAAABAAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADgAA + ABoAAAAqAAAAPgAAAFUAAABuAAAAhgAAAJwAAACtAAAAvrS0tP3//////f39//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////8fHx/8LDw/+Yl5j/fX19/3p6ev99fn3/f3+A/39/f/9/f3//f39//39/ + f/9/f3//gH+A/35+fv95eXn/e3x7/5iXl//LzMv/9/b3//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7+/v//////nZ2d9QAAAHUAAABaAAAAQgAA + AC4AAAAdAAAAEAAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAkAAAASAAAAIAAAADIAAABHAAAAXwAAAHkAAACQAAAAowAA + ALMZGBnc//////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////z9 + /P/V1NX/paal/4SEhf95enn/fXx9/3+Af/+Af4D/f4B//4B/gP9/gH//f3+A/3+Af/9/f3//e3t7/3l4 + ef+MjY3/vLy8/+3t7f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8tLC2/AAAAaAAAAE8AAAA5AAAAJgAAABYAAAAMAAAABQAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAADAAA + ABcAAAAmAAAAOgAAAFEAAABqAAAAggAAAJkAAACqAAAAuIODg/n//////P39//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////7/////////////////5eXl/7a2tv+Oj47/e3p7/3t7 + e/9/fn//f39//39/f/9/f3//f39//39/f/9/f3//f39//3x8fP93eHj/g4KD/6urqv/f3t////////// + //////////7///////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////x8bH/AECAYAAAABeAAAARgAA + ADAAAAAeAAAAEgAAAAgAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAcAAAAQAAAAHQAAAC4AAABDAAAAWwAAAHQAAACMAAAAoAAA + ALEJCQnQ//////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////b29v/MzMz/nJyc/39/fv96enr/fX59/4B/gP9/gH//f3+A/39/ + f/+Af3//f4B//4B/gP99fn7/eXl5/3x9fP+ZmJn/zM3N//f39/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+//////9PUE/YAAAAbAAAAFMAAAA8AAAAKAAAABkAAAANAAAABgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACgAA + ABYAAAAkAAAANgAAAE0AAABmAAAAfgAAAJUAAACoAAAAtlNSU/H//////fz9//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v7/397f/62trP+Hhob/eXp5/3x8fP9/f3//f39//39/f/9/f3//f39//39/f/9/gH//f35//3p7 + ev94eHj/i4yL/7q6uv/s7Oz///////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////6+vr/wkJCZQAAABhAAAASQAA + ADMAAAAhAAAAEwAAAAoAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAAAAGwAAACsAAABAAAAAVwAAAHAAAACIAAAAngAA + AK4DAwPF19jX/v////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////+3t7f/AwMD/kZKR/3x7 + fP97e3r/f35//3+Af/+Af3//f4B//39/gP9/f3//gH9//3+Af/99fH3/d3h4/4OCg/+pqan/3t7e//39 + /f///////v/+//////////////////////////////////////////////////////////////////// + /////////v7+//////96enrrAAAAbwAAAFYAAAA/AAAAKgAAABoAAAAOAAAABgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACgAA + ABMAAAAiAAAAMwAAAEoAAABiAAAAegAAAJIAAAClAAAAtCssK+b//////P38//////////////////// + //////////////////////////////Dw8P/p6On///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////4+Pj/0tLS/6CgoP+AgID/enl6/319ff9/f3//f39//39/ + f/9/f3//f39//39/f/+Af4D/fX59/3l5ef97fHv/lpWW/8LDwv/m5ub/9vf2//j4+P/5+fn//v7+//// + /////////////////////////////////////////////////////////////xgYGKsAAABlAAAATAAA + ADYAAAAjAAAAFQAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAAAAGQAAACkAAAA8AAAAVAAAAG0AAACFAAAAmgAA + AKwAAAC9qKeo/P/////9/f3/////////////////////////////////////////////////s7Oz/3Fy + cf+enp7/2NnY//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+Pi4/+xsrH/iYmJ/3l6ev98e3z/f39//39/gP9/f3//gH9//3+Af/9/f4D/f4B//39/ + f/97fHv/eXh5/4aGhv+ioqL/xsbG/+Tk5P/y8/P/+vr6//7//v////////////////////////////// + /////////v7+//////+lpaX3AAAAdgAAAFoAAABCAAAALgAAAB0AAAAQAAAABwAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAACQAA + ABIAAAAfAAAAMQAAAEYAAABeAAAAdwAAAI4AAACiAAAAshMTE9n///////////////////////////// + //////////////////////////////X19v+Pj47/fHt8/3V1df9xcHH/iIiH/7+/v//y8vL///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////w8PD/xMTE/5SV + lf98fHz/enp6/35+fv9/f3//f39//39/f/9/f3//f39//39/f/9/f3//fX19/3l6ef99fH3/lZaV/76+ + vv/r6+v////////////////////////////////////////////+/v7//////zIyMsMAAABpAAAAUAAA + ADkAAAAmAAAAFgAAAAwAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAUAAAAMAAAAFwAAACYAAAA5AAAAUAAAAGkAAACCAAAAlwAA + AKoAAAC4dXZ19//////9/f3/////////////////////////////////////////////////0dHR/3t7 + e/9/gH//gICB/4CAgP97env/b29v/3p6ev+nqKf/4eHh//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////+/r7/9bX1v+lpKT/goKC/3p5ev99fX3/gH9//3+A + f/9/f4D/f39//4B/f/9/gH//gH+A/35/f/97e3v/e3x7/5WUlf/MzMz//fz8//////////////////// + ///////////////////R0ND9AgIChAAAAF4AAABGAAAAMAAAAB4AAAASAAAACAAAAAMAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAA + ABAAAAAdAAAALgAAAEIAAABaAAAAcwAAAIsAAACgAAAAsAcHB8z29fX///////////////////////// + //////////////////////////////////+ioqL/ent6/39/f/9/f3//f39//3+Af/+BgIH/fX59/3Nz + c/9ycnL/kJCQ/8vLy//5+Pn///////////////7///////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////+ + ///////////////////m5ub/tba1/4yLi/95enr/e3t7/35/fv9/f3//f39//39/f/9/f3//f39//39/ + f/9/f3//d3h3/4+Ojv/4+fj////////////////////////////9/v3//////1dXV9wAAABsAAAAUwAA + ADwAAAAoAAAAGQAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAKAAAAFQAAACMAAAA2AAAATAAAAGUAAAB+AAAAlAAA + AKcAAAC2R0dH7v/////9/f3/////////////////////////////////////////////////5OTk/35+ + ff98fHz/f4B//4B/gP9/gH//gH+A/3+Af/+Af4D/gIGA/4B/gP95eXn/b25v/39/f/+ysrL/6enp//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////8/Tz/8nJ + yf+YmZj/fX19/3p6ev9+fn7/f39//39/f/9/f3//f39//39/f/97env/ycrJ//////////////////// + ///////////////////x8fH/CgoKlwAAAGIAAABJAAAAMwAAACEAAAATAAAACgAAAAMAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAA + AA4AAAAaAAAAKwAAAD8AAABWAAAAcAAAAIgAAACdAAAArgEBAcLMzcz+//////////////////////// + ///////////////////////////////////w8fD/s7Oz/4uMi/97enr/e3t7/39+f/9/f3//gH9//3+A + f/9/f4D/f39//4B/gP+AgYD/fXx9/3Fycf91dXX/mJmY/9PT0//9/v3//////////////v////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////38/P/a29v/qKio/4SEhP95eXn/fH18/39/ + f/9/f3//fHt8/5OTk//5+Pn////////////////////////////+/v7//////4GBge4AAABwAAAAVwAA + AD8AAAArAAAAGgAAAA4AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAKAAAAEwAAACEAAAAzAAAASQAAAGIAAAB6AAAAkgAA + AKUAAAC0JSUl4v/////9/f3///////////////////////////////////////////////////////// + ////////8/Pz/8vLy/+cm5z/f39//3t6ev99fn3/gH+A/3+Af/+Af4D/f4B//4B/gP9/gH//gYGB/39/ + f/93d3f/b3Bv/4aFhv+8vLv/8O/w//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////6urq/7q7uv+Pjo//ent6/3t7e/95enn/yMjI//////////////////// + ////////////////////////GxsbrgAAAGUAAABNAAAANgAAACMAAAAVAAAACgAAAAQAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAA + AA0AAAAZAAAAKAAAADwAAABTAAAAbAAAAIQAAACaAAAArAAAALubm5v7//////39/f////////////// + //////////////////////////////////////////////////////////////7+/v/f39//rq+u/4mI + if96enn/fHt8/39/f/+Af4D/f39//4B/f/9/gH//f3+A/4CAf/+BgIH/e3x7/3BvcP94eHj/oqKi/9vc + 3P////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////+//////////////////X2 + 9f/Ozc3/mZmZ/5STlP/29vb////////////////////////////+/v7//////62trPkAAAB5AAAAWgAA + AEIAAAAuAAAAHQAAABAAAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAIAAAAEgAAAB4AAAAwAAAARgAAAF4AAAB2AAAAjgAA + AKIAAACyDw4P1v////////////////////////////////////////////////////////////////// + ////////////////////////////////////////8PDw/8XFxf+XmJf/fn1+/3p7ev9+fn7/f4B//4B/ + gP9/gH//gH+A/3+Af/+Af4D/gYGB/39+f/90dXT/cnFy/4uMi//Gxcb/8/Py//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////8/Pz/7/Dw//////////////////// + //////////////7+/v//////ODg4yAAAAGkAAABQAAAAOgAAACYAAAAXAAAADAAAAAUAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAA + AAwAAAAWAAAAJgAAADkAAABPAAAAaQAAAIEAAACXAAAAqgAAALdoaWj1//////39/f////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////z7/P/a2tr/qqqq/4WGhv96eXr/fHx8/4B/f/9/gH//gH+A/3+Af/+Af4D/f4B//4GA + gf+AgID/enp6/29wb/96eXr/oKCf/9LS0v/4+fj//v3+//39/P////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////9bV1v4EBASGAAAAXgAA + AEYAAAAxAAAAHwAAABIAAAAJAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAAEAAAAB0AAAAuAAAAQgAAAFoAAABzAAAAigAA + AJ8AAACwBQUFyuzs7P////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////7Ozs/7/A + wP+Uk5T/fH18/3t7e/9+f37/gICA/4CAf/+AgID/f4CA/4B/gP+AgID/gYGB/35+fv90c3T/cXFx/4iH + iP+3t7f/6Ojo//7+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v//////Xl5e3wAAAG0AAABUAAAAPQAAACkAAAAZAAAADgAAAAYAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA + AAoAAAAVAAAAIwAAADYAAABMAAAAZQAAAH4AAACUAAAApwAAALY9PT3s//////38/f////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v////////////////////n5+f/W1db/paWk/4SDhP95enr/fXx9/39/ + f/+Af4D/f4B//4B/gP9/gH//gH+A/4CBgP+AgID/eXl5/3BvcP96enr/paWl/9vc2/////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////b39v8NDQ2bAAAAYgAA + AEoAAAAzAAAAIgAAABMAAAAKAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADgAAABoAAAAqAAAAPwAAAFYAAABvAAAAhwAA + AJ0AAACuAQEBwL+/v/7///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////6Ono/7u6u/+PkJD/fHt8/3t8e/9/f3//gICA/4B/gP+AgH//gICA/3+A + f/+AgID/gYGB/359fv9ycnL/dHR0/5SVlP/My8z/+vr6//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v//////ioqL8AAAAHAAAABXAAAAQAAAACsAAAAbAAAADgAAAAYAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAA + AAoAAAATAAAAIQAAADIAAABJAAAAYQAAAHoAAACRAAAApAAAALQdHR3f//////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////f2 + 9v/Q0dD/oKCg/4GBgf96enr/fX19/4B/gP9/gH//gH+A/3+Af/+Af4D/f4B//4GBgf9/gH//d3Z3/3Bx + cP+EhIT/ubq5//Dv8P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8gICCyAAAAZgAA + AE0AAAA2AAAAJAAAABYAAAALAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADQAAABgAAAAoAAAAPAAAAFMAAABsAAAAhAAA + AJoAAACrAAAAuo6Ojvr//////f39//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////5eTk/7W1tf+NjI3/e3t7/3x8 + fP9/gH//gICA/4CAgP+AgID/gIB//4CAgP+AgYD/gYCB/3t8e/9wcHD/eXp6/6emp//g4N////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v//////tLW0+gEBAXoAAABbAAAAQwAAAC4AAAAdAAAAEAAAAAcAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + AAgAAAASAAAAHgAAADAAAABFAAAAXgAAAHYAAACOAAAAogAAALILCwvS//////////////////////// + ////////////////////////////////////////+Pn4//Tz9P////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////+//////////////////Pz8//Ly8v/m5yb/39/f/96enr/fn1+/3+Af/+Af4D/f4B//4B/ + gP9/gH//gH+A/4GBgf9+fn7/dHR0/3Nyc/+Oj47/ycnJ//j4+P////////////////////////////// + /////////////////////////////////////////////////////////v3+//////8+Pj7NAAAAagAA + AFEAAAA6AAAAJgAAABcAAAAMAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAACwAAABYAAAAmAAAAOAAAAE8AAABoAAAAgQAA + AJYAAACpAAAAt15fXvP//////f39//////////////////////////////////////////////////// + ///Lysv/a2xr/56env/c3dz///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v//3+Df/7CvsP+Jion/e3p7/3x8fP+Af4D/gICA/4CAgP+AgID/gICA/4CAf/+BgYH/gICA/3p5 + ev9wcHD/f35//7CxsP/n5+f///////////////////////////////////////////////////////// + ////////////////////////3t3e/gUFBYwAAABfAAAARwAAADIAAAAgAAAAEgAAAAkAAAADAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAcAAAAPAAAAHAAAAC0AAABCAAAAWgAAAHIAAACKAAAAnwAAAK8DAwPH4uLi//////////////////// + /////////////////////////////////////////////5+gn/95eXn/bW1t/2ZmZv99fX3/tra2/+/v + 7v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////7///////////////////Dw8P/Gxsb/mJiY/31+ + ff97env/fn5+/4CAgP9/gID/gH+A/3+Af/+Af4D/f4CA/4GBgf99fX3/cnJy/3R1df+Xl5f/0tPS//38 + /f///////////////v///////////////////////////////////////v79//////9lZWXjAAAAbgAA + AFUAAAA+AAAAKgAAABoAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACgAAABQAAAAiAAAANQAAAEsAAABkAAAAfQAA + AJMAAACmAAAAtjQ0NOn//////f39//////////////////////////////////////////////////// + ///l5eX/goGC/39/f/+CgoL/gYGB/3h4eP9mZmb/bGts/5iYmP/Z2Nn///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////8/Pz/29vc/6urq/+Hhof/ent6/319ff9/gID/gICA/4CA + gP+AgID/gICA/4B/gP+BgYH/gH+A/3d4d/9xcHH/hIWE/7u7u//t7u3///////////////////////// + /////////////////////////f79/xAPEKAAAABkAAAASwAAADUAAAAiAAAAFAAAAAoAAAAEAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAYAAAAOAAAAGgAAACoAAAA+AAAAVQAAAG4AAACGAAAAnAAAAK0AAAC+tLS0/f/////9/f3///////// + /////////////////////////////////////////////7i3uP96enr/gICA/3+AgP+Af4D/gIGA/4OC + g/9+f37/bm1u/2ZmZf+Af4D/vr6+//T09P///////////////////v////////////////////////// + /////////////////////////////////////////////////////////////////////////v////// + /////////////+zs7P/BwMH/lJST/318ff97e3v/f35//4CAf/+Af4D/f4B//4B/gP9/gH//gICA/4CB + gP98e3z/bW5t/4uKi//3+Pf//////////////////////////////////v7+//////+RkZHyAAAAcgAA + AFoAAABCAAAALQAAABwAAAAPAAAABwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAACQAAABIAAAAgAAAAMgAAAEcAAABfAAAAeQAA + AJAAAACjAAAAsxgZGNz///////////////////////////////////////////////////////////// + ///08/T/iouK/3p5ev9/gH//gICA/4CAgP+AgID/gICA/4CAgP+CgoL/goGC/3d4d/9nZmf/bm9u/5+e + n//c3dz///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////6+fr/1tfW/6am + pv+EhIT/e3p6/319ff+AgID/gICA/4B/gP+AgH//gICA/4CAgP98e3z/tre2//////////////////// + /////////////////////////////yQkJLgAAABoAAAATwAAADgAAAAmAAAAFgAAAAsAAAAFAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAUAAAAMAAAAFwAAACYAAAA6AAAAUQAAAGoAAACCAAAAmQAAAKoAAAC4g4OD+f/////9/f3///////// + //////////////////////////////////////////////n5+P/Dw8P/lpeW/35+fv97e3r/f35+/4CA + gP+AgID/gICA/4CAgP+AgID/gYCB/4ODgv9+fn7/bW5t/2dmZ/+BgYD/v7+///T09P////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+no6f+6u7v/kJCQ/3t8e/98e3v/fn9//4B/ + gP9/gH//fn5+/4aHhv/t7O3//////////////////////////////////v7+//////+8vLz7AQEBfwAA + AF4AAABFAAAAMAAAAB4AAAASAAAACAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAAABAAAAAdAAAALgAAAEMAAABbAAAAdAAA + AIwAAACgAAAAsQkJCdD///////////////////////////////////////////////////////////// + ///////////////////8+/z/2drZ/6uqq/+HiIf/e3t7/319ff+AgID/gIGA/4GAgf+AgYD/gYCB/4CB + gP+DgoP/gYKC/3h4eP9mZ2b/b29v/56fnv/e3d3///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////29/b/0tHR/6Ghof+CgoL/ent6/359fv96enr/tbS1//////////////////// + ///////////////////+/v7//////0RERNEAAABrAAAAUgAAADsAAAAoAAAAGAAAAA0AAAAGAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAQAAAAKAAAAFgAAACQAAAA2AAAATQAAAGYAAAB+AAAAlQAAAKgAAAC2U1NT8f/////8/f3///////// + //////////////////////////////////////////////////////////7//////////////////+no + 6f++vr7/l5eX/35/fv97e3v/fn5+/4GAgf+AgYD/gYCB/4CBgP+BgIH/gYGB/4ODg/9+f37/bm1u/2do + Z/+Eg4T/wsLC//b19f///////////////v////////////////////////////////////////////// + ///////////////////////////////////////////////////////////+/////////////////+Tl + 5P+2tbb/iouL/4SEhf/r6+v////////////////////////////////////////////k4+T+BgYGjwAA + AGEAAABJAAAAMgAAACEAAAATAAAACgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAA4AAAAaAAAAKwAAAD8AAABXAAAAcAAA + AIgAAACeAAAArgICAsXY19j+//////////////////////////////////////////////////////// + ///////////////////////////////////////////////////4+fj/1dXW/6usq/+Kior/e3x7/319 + ff+AgID/gYGB/4GBgP+BgYH/gYGB/4GBgf+Dg4P/goKC/3h4eP9oZ2j/cXFw/6Khov/e397///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////x8fH/3+Df//////////////////// + ///////////////////+/v7//////21ubecAAABvAAAAVgAAAD4AAAAqAAAAGgAAAA4AAAAGAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAMAAAAKAAAAEwAAACEAAAAzAAAASQAAAGIAAAB6AAAAkgAAAKUAAAC0Kysr5v/////9/P3///////// + /////////////////v////////////////////////////////////////////////////////////// + /////////v///////////////////+/v7//Fxcb/mpua/4GAgP97fHv/f35//4GBgP+BgYH/gYGB/4GB + gf+BgYD/goGC/4OEg/9/fn//aWlp/46Ojv////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////EhISpQAA + AGQAAABMAAAANgAAACMAAAAVAAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAwAAAAYAAAAJwAAADsAAABSAAAAawAA + AIQAAACaAAAAqwAAALympqb8//////39/f////////////v7+//5+vr/9/b3//f39//5+fn/+vv6//// + //////////////////////////////////////////////////////////////////////////////// + ///+/f7/4ODf/7Gxsf+LjIz/fXx8/31+ff+BgIH/gYKB/4KBgf+BgoH/gYGC/4GBgf9/f3//0dLR//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/v7//////5mYmfQAAAB0AAAAWgAAAEIAAAAtAAAAHAAAABAAAAAHAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAGAAAADwAAABwAAAAtAAAAQgAAAFsAAAB1AAAAjAAAAKEAAACxExMT2f////////////////z9 + /P/6+fr/8vPz/+bm5v++vLr+xsTE/+fn5//u7u7/9fX1//39/f////////////////////////////// + //////////////////////////////////////////////////////////////Lx8v/Ky8v/nZyd/4GB + gf98fHz/fn9//4GBgf+BgYH/fn5+/5OUlP/4+Pn///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////KSkpvQAA + AGgAAABPAAAAOQAAACYAAAAWAAAADAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAASAAAAIAAAADIAAABIAAAAYgAA + AHsAAACSAAAApgAAALV1dXX3//////39/f//////+/r7/+/x8f+Wjon6eGJV+3teT/5bST79Qj8++ZSU + k/3o5+j/9fX1//////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7/4uHi/7S1tP+OjY7/fH18/359fv97e3v/w8PE//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8PEw/wBAQGAAAAAXgAAAEYAAAAwAAAAHgAAABIAAAAIAAAAAwAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADAAAACQAAABMAAAAiAAAANQAAAEsAAABmAAAAfgAAAJUAAACoBwcHyPX29f////////////z7 + /P/09vb/mZCM+otlTf+IX0f/hmBJ/1U7Lf8NBgH/GhYV/oODgvzo6Oj/9vb2//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////Pz8//NzM3/nZ2d/4+Pj//w8PD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////79/v//////S0tL1QAA + AGwAAABTAAAAPAAAACgAAAAYAAAADQAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAKAAAAFAAAACIAAAA1AAAASwAA + AGUAAAB+AAAAkwAAAKZLS0vr//////39/f//////+fn5/+3u7/91Ylf6jGFJ/41mT/+LZE3/TTcq/xsS + Dv8JBAD/KCcm/MjIyP/t7O3//f39//////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/f7/7u7u//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+np6f8ICAiTAAAAYQAAAEkAAAAzAAAAIQAAABMAAAAKAAAAAwAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAAoAAAATAAAAIgAAADMAAABIAAAAYQAAAHgAAACNAgICqc7Ozv7///////////3+ + /f/29fb/6Orq/2lYT/qNY0r/kWhR/4ZhSv88KiD/HhUP/xcPC/8NCwn/gYCB/OLi4v/4+Pj///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7+/f//////dXV16QAA + AG8AAABWAAAAPwAAACoAAAAaAAAADgAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACQAAABIAAAAeAAAALgAA + AEIAAABZAAAAbgAAAII3NjfS//////7+/v///////fz8//Hy8f/m5+n/dWhg9o9kS/+Ua1L/flpG/zMk + G/8jGBL/HBQO/wcDAP9ra2v72NjY//Dw7//+/v7///////////////////////////////////////39 + /f////////////39/f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8WFhepAAAAZQAAAEwAAAA2AAAAIwAAABUAAAAKAAAABAAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAHAAAADwAAABoAAAAoAAAAOQAAAE0AAABgAAAAcnBwcOb///////////// + ///7/Pv/8O/w/+Lk5f99b2f0j2VL/5dsVP9+W0X/STMn/yoeFv8fFRD/CAMA/2VkZPvP0M//6ejp//z8 + /P///////////////////////f39//39/f/////////////////////////////////9/f3///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7+/v//////oJ+g9gAA + AHUAAABaAAAAQgAAAC4AAAAdAAAAEAAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAMAAAAFAAA + ACAAAAAuAAAAPgAAAE8AAABgAQEBdBAQEKBRUVHawL68+vn5+v/v8fL/4+Tm/35tYvSQZUz/oXRZ/6p6 + X/+IYkv/OSce/x8WEP8PCQf/aWlo/MrKyv/k5eX//Pv8///////////////////////9/f3//////8K9 + uf2DdGr4eWRX+1ZNSPpzcnH58/Lz///////9/f3///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//////8vLy/BAAAAaQAAAE8AAAA5AAAAJgAAABYAAAAMAAAABQAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAgAAAAOAAAAFwAAACIAAAAvAAAAPQAAAEsAAABYAAAAZAAA + AHFXQTTxlXtr+JqNh/K6uLf9hGtc95FnTf/DjG3/15x5/8KMbf9POCr/HhQP/xUQDf9ycXL8x8jH/+Pi + 4v/6+/r///////////////////////////+7tbH8iGhU/opgR/+CW0T/NiQY/wsDAP9APTz65eXm//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////ysvK/QIC + AoMAAABeAAAARgAAADAAAAAeAAAAEgAAAAgAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAABgAA + AAoAAAAQAAAAGAAAACIAAAAsAAAANgAAAEIAAABMBgUEeYNeR/+kdFj/imJK/3JWRv6FYk3/onRZ/9yg + fP/SmHb/zJRz/2NGNv8bEgz/HBgW/YeIiP3IyMj/4uPi//v6+////////////////////////////39u + ZfmNYkj/kmlS/4hiTP8+LCL/GhIN/wUAAP9ZWVj5//////39/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//////9SUlLZAAAAbAAAAFMAAAA8AAAAKAAAABkAAAANAAAABgAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADAAAABgAAAAoAAAAPAAAAFgAAAB4AAAAmAAAALgAA + ADYfFxKelmxT/72Kav+WbFT/eVdC/4piTP+6h2j/4aN//86Wc//SmHb/aEs5/xgOCv8nJCL6rKus/8fH + x//j4uP/+/v6///////////////////////9/v//bV5U+ZBkTP+VbFL/h2FL/zopH/8gFRD/DwgE/ywq + Kvzz8/P//v7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////7+/v/woK + CpcAAABiAAAASQAAADMAAAAhAAAAEwAAAAoAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAADAAAABgAAAAkAAAANAAAAEgAAABcAAAAeAAAAI0gzKNGXbVT/v4pr/5xyWP97WET/k2pR/8+V + dP/an3v/0Zd1/8yUcv9ZPzH/Fw4J/yckJPGlpqX/2tna//Dw8P/+/v7//v7+//7+/v////////////v9 + /f94bGX2kGZM/5ltVP+IYkv/PSoh/yUaE/8XDgn/JCIg/cjIyf/+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//////99fX3sAAAAcAAAAFYAAAA/AAAAKwAAABoAAAAOAAAABgAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAABAAAAAYAAAAJAAAADQAA + ABEAAAAYZ0o575VrU/+XbVT/XkM0/2tNO/+gc1n/15x4/9SZd//TmXb/w41u/0YyJf8ZEQ3/AwIBuAUF + BY0sLSzFhISE8ujo6P/////////////////+/v7/+vv9/4F1bvWRZUz/nXJX/6FzWf9gRTT/LiAY/xkQ + Cv8kIB/9vb69/v38/P///////////////////////////////////////fz9//////////////////// + /////////fz9//39/P////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////xoa + Gq0AAABlAAAATAAAADYAAAAjAAAAFQAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAGAAAACAcFBCp5VkP7kWlQ/4ZhS/9cQjP/flpG/6Z4 + XP/TmHb/1Jp2/9aaeP+3hWb/NyYd/xUPC/8AAAB7AAAAYAAAAGwAAAB3CAgImFFOS9zGvbj5+fj3//// + ///6/f7/hndw85FmTP+ygGP/2p96/6p7X/9ALiL/GhAL/yUiH/27u7v+/Pz7//////////////////// + //////////////39/f//////5ePj/5iNhvl4bGb5bWln+be2tv3///////////39/f////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//////+oqKj3AAAAdwAAAFoAAABCAAAALgAAAB0AAAAQAAAABwAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAIAAAACEw0KPYNfSP+NZU7/gl9J/3pYRP+QaFD/o3Va/9OZdv/UmXf/15x4/41lTv8lGhP/DwkH8gAA + AEMAAABJAAAAUwAAAF4AAABnMB8X4qV3XP+ohnL5lYd+8r+6ufuEcmbzlGdO/9Ocef/kp4L/ypNx/15D + NP8YDwn/KSUk/MjJyf/7+vv////////////////////////////9/f3//////9PPzf6GbFz8j2NK/2xL + N/8cDwn/HxoW/4F/f/r//////fz9//////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////9/v7//////zU1 + NcYAAABpAAAAUAAAADkAAAAmAAAAFgAAAAwAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcFA9SimNN/4tlTf99Wkb/gl5I/4pi + TP+ld1z/15x5/9Wbd//LknL/VDwt/x4VEP8GBQO0AAAAKgAAADMAAAA8AAAARQAAAFVhRjX2uIVn/7yI + Z/98V0H/Zkw8/3lZR/6hc1j/67KK/9meev/PlnX/bE47/xgOCf8wLSv64uLi//r6+v////////////// + ////////////////////////gnNp+I9iSP+XbVP/dlVC/ysfF/8UCwb/HRoY/sC/wP7///////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////S09P9BAQEhgAAAF4AAABGAAAAMAAAAB8AAAASAAAACQAA + AAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACEXEmmLZE3/g15J/2BFNf+OZk7/bk88/6p6X//YnHn/2Jx5/5RrUv8uIBj/GBEM/wEB + AEsAAAAbAAAAIgAAACgAAAAvBgUDXH5aRv65hmf/xpBw/4VhSv9WPS//fVlD/7aFZ//us4v/05d2/86W + dP9oSjn/FQwG/0ZCQffw8PD/+/r6//7+/v////////////////////////////3///9xXVL7k2hN/5ht + Vf93VUH/Lh8Y/yAXEP8IAQD/dXV1+v////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/f7//////1pa + Wt0AAABtAAAAUwAAADwAAAApAAAAGQAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRUPdIdhS/9qTDr/dFNA/4Jd + R/9QOCv/rX1g/9yffP+2hGX/SDIn/yMZEv8OCQffAAAACwAAAA8AAAATAAAAGQAAAB4WEAxwj2dP/6J0 + Wv+leFz/VT0w/zYnHf+OZU7/zZt3/+erhf/Rl3T/0JZ1/15EM/8VDAj/Ozk56MHAwf3///////////// + /////////v7+/////////////////3JgVfqUaE7/nnJX/4FcR/83Jx3/JBkT/w4HAv9iYWH4//////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////19PX/DA0MmgAAAGIAAABKAAAAMwAAACIAAAATAAAACgAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAASDApcZkk3/25OPf+BXUf/Ujos/0AtIf+FX0n/nHFX/1g+MP8qHRX/HRMP/wMC + AVsAAAAFAAAABwAAAAoAAAANAAAAESoeFpSXbFP/kGhQ/3dVQv8cEw7/RjIm/51xV//eo3//2597/9OY + dv/JknD/TTYq/xgRDP8AAACaAgICgh4dHrRycnLp09PT/v////////////////7+/v//////eWVa+ZNn + Tf+ygWP/t4Zn/2NGNv8oHBT/EQgE/1xbWvj///////////////////////////////////////////39 + /f/9/fz////////////////////////////9/f3////////////////////////////+/v3//////4SE + hO4AAABwAAAAVwAAAD8AAAArAAAAGwAAAA4AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgGBDpGMSb/YkY1/1Y9 + L/82Jhz/OSce/0k0J/9CLiP/LyEY/yYaFP8NCgfVAAAAAAAAAAEAAAACAAAAAwAAAAYAAAAIOykhspdt + U/+MZU7/flxH/zcnHv9tTzz/q3tf/+Cjfv/Vmnf/1pt4/7mFaP83Jx3/Ew0K/AAAAGYAAABeAAAAaQAA + AHMDBASLT0hF3byxqvft6ef+//////////+AaVz5l2lP/9WhfP/orYb/o3Zb/zQkHP8RCgT/YWBf+P// + ///////////////////////////////////9/f3//f39///////e3Nn+oJeU+oN/fPquraz8//////// + ///9/f3/////////////////////////////////Hx4fsQAAAGYAAABNAAAANgAAACQAAAAVAAAACgAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAACSoeFvFBLSL/NiYc/zAhGf8zJBr/MyMa/y4gGP8pHBX/FhAL+wEA + ACcAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAJCMCTElWpS/4pjTP9+W0f/VT4v/45lTv+qel7/1pt4/9Sa + dv/Xm3n/i2RN/yUZE/8LCAfhAAAAPAAAAEYAAABQAAAAWgAAAGJELiHysn5g/8CWevuWhXvyq6Wg9YZp + WPujc1f/8LyT/+Ckf/+5hmj/QS4j/xEIBP9ubW33//////////////////////////////////////z9 + /P//////rqah+4xtW/2EXUX/Mh8V/x8XEv9bWFj5///////////////////////////+/v7//////7Cv + sPkAAAB5AAAAWwAAAEMAAAAuAAAAHQAAABAAAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwoIeSod + Fv8sHhf/LSAX/y8hGf8tIBf/KRwV/xoSDf0EAwJRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMv + JcWUa1L/imNN/1Y+L/9oSjn/l21U/55xV//Umnb/15t4/8iRcP9ROSz/HhUP/wUDAooAAAApAAAAMQAA + ADkAAABBAQEAXG9PPfu7iGn/1pp3/4VeRv9jRjX/hF5J/7qKa//2w5f/15t4/8KNbf9IMyf/DwcC/4eG + hvj//////////////////////////////////////////9fW1P6Kalj9lWhN/49mT/9BLyP/HhMO/wwF + Af97eXn6//////////////////////7+/v//////PDw8ywAAAGoAAABRAAAAOgAAACYAAAAXAAAADAAA + AAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwoHlyAXEf4oGxX/JxsU/yMYEv8UDgriAwICOgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCgew5RqUv94V0L/TTYq/5BoT/99WUX/mG5U/9qd + ev/Wm3j/hmBK/y0gF/8WDwz6AAAAKgAAABoAAAAfAAAAJgAAACwJBwVghGBJ/6t7X//IkXD/dlVC/0g0 + J/+OZE3/z6B7//C3jv/TmHX/xI1u/0UxJP8YEA3/tLSz/P///////////v7+//////////////////// + ////////l5GO+YRcRP+ccFf/lGtS/0gyJ/8lGhP/EQgE/0RDQfr//////////////////////////9nZ + 2f4FBQWKAAAAXwAAAEYAAAAxAAAAHwAAABIAAAAJAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAABAMCKAoHBXALBwZ5BQQDQQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAkGRSqgFxG/3JRP/+AXEb/i2NM/1M7LP+MZU7/zpZ0/6R2W/8+LCH/JBgT/woHBasAAAAKAAAADgAA + ABIAAAAWAAAAGxYPDHOQZ1D/l21U/4hhTP8qHhf/Qi4k/55xV//nsor/5KmC/9SZd/++imv/PSog/xYQ + Df1GRUbXsbGx+f/////////////////////+/v7///////////+OiIT2h15G/59yWP+ufGD/aEs5/y4g + GP8VDAb/Ozc3+/////////////////7+/v//////YWFh4QAAAG4AAABVAAAAPgAAACoAAAAaAAAADgAA + AAYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEMCXBUOy3/bE47/3hVQv9WPS7/PSog/19E + M/9yUT7/RTEk/ysdFv8YEQz7AAAAIQAAAAQAAAAGAAAACQAAAAsAAAAOJBkTjZNqUf+RaFH/elhE/yQZ + E/9kRzb/rX5h/+21jP/bnXr/1pt3/6p6X/8vIRn/DQgH8QAAAGoAAAB6EhISp1VVVd2+vbz7//////// + /////////////5GIg/WLYkj/rXxg/+ithf+ufWH/Piwh/xcMB/85NzT7//////////////////////v7 + +/8PDw+eAAAAYwAAAEoAAAA1AAAAIgAAABQAAAAKAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAABQMDJjUlHP5NNin/STQn/zknHv81JRv/Oygf/zUlG/8tHxf/IhgS/wgFBIAAAAAAAAAAAQAA + AAIAAAACAAAABAAAAAYsIBigk2lS/41mTv96WET/OCkf/4VeSf+7iWn/6KmD/9Sad//ZnHn/gV1H/yMY + Ev8IBQTIAAAAUgAAAF4AAABoAAAAcTUoIeGjh3b4v66j89jV0/z/////jH9585JlTP/Jl3X/+sOX/9KX + df9cQjP/FgwG/0E9PPr///////////7+/v//////jY6N8QAAAHEAAABYAAAAQQAAACwAAAAcAAAADwAA + AAcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRENuTMkG/8zIxr/MCEY/zEi + Gf8wIhn/Lh8Y/yUaE/8OCQe+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAi0fGKGPaE//jGRO/1M8 + Lf9NNyr/mW5U/7+Jav/eoXz/1Zp3/8+WdP9YPjD/HBMO/wIBAXgAAAA8AAAARgAAAE8AAABdVj0u+Kp3 + Wv/PlHD/fV9O/nFnYfJyXVH5nW5T/+W0jP/ut43/1Jh2/29QPf8WDAb/T01L9/////////////////// + //8kIySzAAAAZAAAAEwAAAA2AAAAJAAAABYAAAALAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAACAgAQGxIO4SgcFf8sHhf/LR8X/yseF/8iGBL/DgkHsAAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAJBoTnYpjTf9xUT7/LyAZ/3pYQ/+Wa1P/rHxf/9qdev/ZnXn/nnJY/zEi + Gf8XDwz3AAAAMQAAACkAAAAwAAAAOAICAV92VEL+pHZb/8WOb/9uTzv/JhgR/2ZINv+ygGP/+M6f/+Sp + hP/Umnf/dlRB/xYMBv9nZWT1//////7+/v//////vLu8+gEBAXQAAABWAAAAQAAAAC0AAAAdAAAAEQAA + AAgAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJDQgHiBcR + DOAZEQ3pEg0JwgYEA0kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXEAyHZkk3/084 + K/9SOyz/kmhR/3FQPf+dcFf/2597/8GLbP9UPC3/JBgS/woIBrIAAAAUAAAAGQAAAB4AAAAlCwgGZ4Zg + Sv+XbFT/hmFK/zEiG/8ZEQ3/hF1I/8OTcf/7zZ//2p15/9SZd/9pTDr/EwkF/4WEg/P///////////// + //9JSUnHAAAAWwAAAEcAAAA1AAAAJAAAABYAAAAMAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwJBlRELyT/Tzkq/2tMOv9tTjv/SzQn/3lXQv+neF3/YkY1/y4g + GP8cFA/+AgEAMgAAAAoAAAAOAAAAEgAAABYWDwx4i2NN/5FpUf93VUL/HBQP/zMkG/+ZbFP/3q6H//W+ + k//XmXf/zZVz/1M7Lf8WDwr/Dw8PoDs7O7yhoaHyz8/P+wkICXQAAABKAAAAOQAAACoAAAAbAAAAEQAA + AAkAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAICHjAi + GftIMif/Ujor/0UwJP86KR7/SDIm/0QwJP8yIhr/JxsU/w0IB68AAAACAAAABAAAAAYAAAAIAAAACh0V + EIqKY0z/kGhQ/21PPf8bEw7/X0Q0/6d3XP/uvpP/56mD/9abd/+9iGr/Piwh/xMNCvcAAABbAAAAVgAA + AFYICAhmAAAARQAAADgAAAArAAAAHgAAABQAAAAMAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBMPwDgnHf86KB7/NiYc/zQkG/8zJBr/MSEZ/yse + Fv8XEAzwAAAAEAAAAAAAAAABAAAAAgAAAAIAAAAEHRQQjohhS/+KZE3/Qy8l/yccFP+JYUv/t4Zn//C1 + jf/annr/2p16/5RrUv8qHRb/DAgG0QAAADsAAAA+AAAAPQAAADkAAAAyAAAAKAAAAB4AAAAVAAAADgAA + AAcAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAEAwIgJBgT9y8hGP8uIBj/LiAY/y4gGP8qHRb/GhIO+AMCATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEXDwyHdVRA/2NHNv8jGBL/VTwu/5xwVv+8h2j/5KV//9ebef/Ql3T/XUIy/x8WEP8EAgJ2AAAAKAAA + ACoAAAAqAAAAJgAAACIAAAAaAAAAFAAAAA4AAAAJAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBAIvGBEN3yIYEv8mGhT/IRcR/RMN + Cs0CAgEjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABALCGdNNin/Qi8j/zwqIP+FYEn/lmtT/5xw + Vv/bnnv/2J15/5JpUf8xIhn/GBAN9QAAACMAAAAZAAAAGgAAABoAAAAYAAAAFQAAABAAAAAMAAAACAAA + AAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAABQMCNAYFA0gDAgIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAACQYFPTgoHf9EMCT/W0Ex/4FbRv9lSDb/eFVC/8ONbf+hdFr/Qi8j/yYaFP8KBwWZAAAADAAA + AA4AAAAOAAAADgAAAA0AAAALAAAACQAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgANKx0W9EIuI/9TOiz/Uzss/0Mv + I/9QOSv/YEQ0/0IvI/8tHxf/GhIN9gAAABYAAAAFAAAABgAAAAYAAAAGAAAABgAAAAUAAAADAAAAAgAA + AAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAWDwufNyYd/zwqH/88KR//OCcd/zclHP8zJBr/LyAY/yMZEv8HBQRkAAAAAQAA + AAEAAAABAAAAAQAAAAIAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBABAiGBLtMyMb/zMj + Gv8xIhn/LyEY/y4gGP8lGhP/DQgHnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCAiMZEQ3aJRkT/ycbFP8mGhT/HRQP9woHBXwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AA0MCQaOFA0KxxALCK8FAwM6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//////8AAB/////////////////+AAAH/////////////////gAAAf////////////////wA + AAB////////////////8AAAAH////////////////AAAAAf///////////////gAAAAB//////////// + ///4AAAAAH//////////////8AAAAAAf//////////////AAAAAAB//////////////gAAAAAAH///// + ////////4AAAAAAA/////////////+AAAAAAAD/////////////AAAAAAAAP////////////wAAAAAAA + A////////////4AAAAAAAAD///////////+AAAAAAAAAP///////////AAAAAAAAAA///////////wAA + AAAAAAAD//////////8AAAAAAAAAAP/////////+AAAAAAAAAAA//////////gAAAAAAAAAAD/////// + //wAAAAAAAAAAAP////////8AAAAAAAAAAAB/////////AAAAAAAAAAAAH////////gAAAAAAAAAAAAf + ///////4AAAAAAAAAAAAB///////8AAAAAAAAAAAAAH///////AAAAAAAAAAAAAAf//////gAAAAAAAA + AAAAAB//////4AAAAAAAAAAAAAAH/////+AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAH/////wAAA + AAAAAAAAAAAB/////4AAAAAAAAAAAAAAAP////+AAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAA//// + /wAAAAAAAAAAAAAAAP////8AAAAAAAAAAAAAAAD////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAA + AP////wAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAP////gAAAAAAAAA + AAAAAAD////4AAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAP////gAAAA + AAAAAAAAAAAD////4AAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH//// + wAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAA + H////wAAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAP////gAAAAAAAAAA + AAAAAH////wAAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAP////gAAAAA + AAAAAAAAAAD////4AAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAP////g + AAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH + ////wAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////AAAAAAAAAAAA + AAAAH////wAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAP////gAAAAAA + AAAAAAAAAH////wAAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAP////gA + AAAAAAAAAAAAAAH////4AAAAAAAAAAAAAAAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAP/ + ///gAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAAf////gAAAAAAAAAAAA + AAAH////4AAAAAAAAAAAAAAAD////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAf////4AAAAAAA + AAAAAAAAH////+AAAAAAAAAAAAAAAD/////gAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAP////+AA + AAAAAAAAAAAAAH/////wAAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAP// + ////AAAAAAAAAAAAAAH//////8AAAAAAAAAAAAAB///////4AAAAAAAAAAAAAf//////+AAAAAAAAAAA + AAP///////gAAAAAAAAAAAAD///////4AAAAAAAAAAAAB///////+ACAAAAAAAAAAAf///////gA4AAA + AAAAAAAP///////8AfwAAAAAAAAAD////////gP8AAAAAAAAAA////////8H/AAAAAAAAAAf//////// + //wAAAAAAAAAH//////////8AEAAAAAAAD///////////gD4AAAAAAA///////////4A/gAAAAAAf/// + ////////A/4AAAAAAH/////////////+AAAAAAB//////////////gAAAAAA//////////////8AIAAA + AP//////////////AHwAAAH//////////////4D+AAAB///////////////j/gAAA/////////////// + //4AAAf/////////////////AAA//////////////////wB///////////////////+A//////////// + ////////wf////////8= + + + \ No newline at end of file diff --git a/Chat2/Chat2/PrivateChat.Designer.cs b/Chat2/Chat2/PrivateChat.Designer.cs new file mode 100644 index 0000000..de0fd8d --- /dev/null +++ b/Chat2/Chat2/PrivateChat.Designer.cs @@ -0,0 +1,116 @@ +namespace Chat +{ + partial class PrivateChat + { + /// + /// 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() + { + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.bSenden = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.richTextBox1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.textBox1); + this.splitContainer1.Panel2.Controls.Add(this.bSenden); + this.splitContainer1.Size = new System.Drawing.Size(475, 472); + this.splitContainer1.SplitterDistance = 397; + this.splitContainer1.TabIndex = 0; + this.splitContainer1.Text = "splitContainer1"; + // + // richTextBox1 + // + this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedVertical; + this.richTextBox1.Size = new System.Drawing.Size(473, 395); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = ""; + // + // bSenden + // + this.bSenden.Location = new System.Drawing.Point(364, 43); + this.bSenden.Name = "bSenden"; + this.bSenden.Size = new System.Drawing.Size(8, 8); + this.bSenden.TabIndex = 0; + this.bSenden.Text = "button1"; + this.bSenden.Click += new System.EventHandler(this.bSenden_Click); + // + // textBox1 + // + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox1.Location = new System.Drawing.Point(0, 0); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox1.Size = new System.Drawing.Size(473, 69); + this.textBox1.TabIndex = 1; + // + // PrivateChat + // + this.AcceptButton = this.bSenden; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(475, 472); + this.Controls.Add(this.splitContainer1); + this.Name = "PrivateChat"; + this.Text = "PrivateChat"; + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.Panel2.PerformLayout(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.RichTextBox richTextBox1; + private System.Windows.Forms.Button bSenden; + private System.Windows.Forms.TextBox textBox1; + } +} \ No newline at end of file diff --git a/Chat2/Chat2/PrivateChat.cs b/Chat2/Chat2/PrivateChat.cs new file mode 100644 index 0000000..1fa3574 --- /dev/null +++ b/Chat2/Chat2/PrivateChat.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace Chat +{ + public partial class PrivateChat : Form + { + public PrivateChat() + { + InitializeComponent(); + } + + private void bSenden_Click(object sender, EventArgs e) + { + + } + } +} \ No newline at end of file diff --git a/Chat2/Chat2/PrivateChat.resx b/Chat2/Chat2/PrivateChat.resx new file mode 100644 index 0000000..8f95d66 --- /dev/null +++ b/Chat2/Chat2/PrivateChat.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chat2/Chat2/Properties/AssemblyInfo.cs b/Chat2/Chat2/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..377c8e8 --- /dev/null +++ b/Chat2/Chat2/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Chat")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Chat")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("facf2ae1-0036-4bb2-bcfc-0686c24db7e0")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Chat2/Chat2/Properties/Resources.Designer.cs b/Chat2/Chat2/Properties/Resources.Designer.cs new file mode 100644 index 0000000..06b6cb4 --- /dev/null +++ b/Chat2/Chat2/Properties/Resources.Designer.cs @@ -0,0 +1,77 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="Chat.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="Chat.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="Chat.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace Chat.Properties { + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if ((resourceMan == null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Chat.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.IO.UnmanagedMemoryStream notify { + get { + return ResourceManager.GetStream("notify", resourceCulture); + } + } + + internal static System.IO.UnmanagedMemoryStream transmission { + get { + return ResourceManager.GetStream("transmission", resourceCulture); + } + } + } +} diff --git a/Chat2/Chat2/Properties/Resources.resx b/Chat2/Chat2/Properties/Resources.resx new file mode 100644 index 0000000..fb13549 --- /dev/null +++ b/Chat2/Chat2/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\notify.wav;System.IO.MemoryStream, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\transmission.wav;System.IO.MemoryStream, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chat2/Chat2/Properties/Settings.Designer.cs b/Chat2/Chat2/Properties/Settings.Designer.cs new file mode 100644 index 0000000..5cba5cf --- /dev/null +++ b/Chat2/Chat2/Properties/Settings.Designer.cs @@ -0,0 +1,51 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="Chat.Properties.Settings.get_Default():Chat.Properties.Settings")] + +namespace Chat.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Black")] + public global::System.Drawing.Color color { + get { + return ((global::System.Drawing.Color)(this["color"])); + } + set { + this["color"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("JoSch")] + public string username { + get { + return ((string)(this["username"])); + } + set { + this["username"] = value; + } + } + } +} diff --git a/Chat2/Chat2/Properties/Settings.settings b/Chat2/Chat2/Properties/Settings.settings new file mode 100644 index 0000000..6a1e366 --- /dev/null +++ b/Chat2/Chat2/Properties/Settings.settings @@ -0,0 +1,14 @@ + + + + + + + + Black + + + JoSch + + + \ No newline at end of file diff --git a/Chat2/Chat2/Resources/notify.wav b/Chat2/Chat2/Resources/notify.wav new file mode 100644 index 0000000..726bc0d Binary files /dev/null and b/Chat2/Chat2/Resources/notify.wav differ diff --git a/Chat2/Chat2/Resources/transmission.wav b/Chat2/Chat2/Resources/transmission.wav new file mode 100644 index 0000000..2d2610d Binary files /dev/null and b/Chat2/Chat2/Resources/transmission.wav differ diff --git a/Chat2/Chat2/Settings.cs b/Chat2/Chat2/Settings.cs new file mode 100644 index 0000000..ba0598e --- /dev/null +++ b/Chat2/Chat2/Settings.cs @@ -0,0 +1,28 @@ +namespace Chat.Properties { + + + // This class allows you to handle specific events on the settings class: + // The SettingChanging event is raised before a setting's value is changed. + // The PropertyChanged event is raised after a setting's value is changed. + // The SettingsLoaded event is raised after the setting values are loaded. + // The SettingsSaving event is raised before the setting values are saved. + internal sealed partial class Settings { + + public Settings() { + // // To add event handlers for saving and changing settings, uncomment the lines below: + // + // this.SettingChanging += this.SettingChangingEventHandler; + // + // this.SettingsSaving += this.SettingsSavingEventHandler; + // + } + + private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { + // Add code to handle the SettingChangingEvent event here. + } + + private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { + // Add code to handle the SettingsSaving event here. + } + } +} diff --git a/Chat2/Chat2/TextFile.ico b/Chat2/Chat2/TextFile.ico new file mode 100644 index 0000000..16344ea Binary files /dev/null and b/Chat2/Chat2/TextFile.ico differ diff --git a/Chat2/Chat2/app.config b/Chat2/Chat2/app.config new file mode 100644 index 0000000..b6844d8 --- /dev/null +++ b/Chat2/Chat2/app.config @@ -0,0 +1,24 @@ + + + + +
+ + +
+ + + + + + Black + + + JoSch + + + + + + + \ No newline at end of file diff --git a/Chat2/Chat2/program.cs b/Chat2/Chat2/program.cs new file mode 100644 index 0000000..9ad9952 --- /dev/null +++ b/Chat2/Chat2/program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Chat +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Chat22()); + } + } +} \ No newline at end of file diff --git a/CheckMail/AssemblyInfo.cs b/CheckMail/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/CheckMail/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/CheckMail/CheckMail.MainForm.resources b/CheckMail/CheckMail.MainForm.resources new file mode 100644 index 0000000..3026a14 Binary files /dev/null and b/CheckMail/CheckMail.MainForm.resources differ diff --git a/CheckMail/CheckMail.cmbx b/CheckMail/CheckMail.cmbx new file mode 100644 index 0000000..a2ba0b6 --- /dev/null +++ b/CheckMail/CheckMail.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CheckMail/CheckMail.prjx b/CheckMail/CheckMail.prjx new file mode 100644 index 0000000..71bc617 --- /dev/null +++ b/CheckMail/CheckMail.prjx @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CheckMail/HansBlomme.Windows.Forms.NotifyIcon.dll b/CheckMail/HansBlomme.Windows.Forms.NotifyIcon.dll new file mode 100644 index 0000000..68685fa Binary files /dev/null and b/CheckMail/HansBlomme.Windows.Forms.NotifyIcon.dll differ diff --git a/CheckMail/MainForm.cs b/CheckMail/MainForm.cs new file mode 100644 index 0000000..6268e5b --- /dev/null +++ b/CheckMail/MainForm.cs @@ -0,0 +1,333 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 10.06.2005 + * Time: 12:55 + */ +using System; +using System.Drawing; +using System.Windows.Forms; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; + +namespace CheckMail +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + private System.ComponentModel.IContainer components; + private System.Windows.Forms.ListBox lbMsgDetails; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnLogin; + private System.Windows.Forms.ListBox lbFolders; + private System.Windows.Forms.Button btnGetFolderList; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.NotifyIcon notifyIcon1; + private System.Windows.Forms.Button btnLogout; + + private TcpClient cl = null; + private NetworkStream str = null; + private int neueEmails = 0; + + public MainForm() + { + InitializeComponent(); + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + private void DoStuff() + { + + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(MainForm)); + this.btnLogout = new System.Windows.Forms.Button(); + this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); + this.btnOK = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.btnGetFolderList = new System.Windows.Forms.Button(); + this.lbFolders = new System.Windows.Forms.ListBox(); + this.btnLogin = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.button2 = new System.Windows.Forms.Button(); + this.lbMsgDetails = new System.Windows.Forms.ListBox(); + this.SuspendLayout(); + // + // btnLogout + // + this.btnLogout.Location = new System.Drawing.Point(176, 8); + this.btnLogout.Name = "btnLogout"; + this.btnLogout.TabIndex = 4; + this.btnLogout.Text = "Logout"; + this.btnLogout.Click += new System.EventHandler(this.BtnLogoutClick); + // + // notifyIcon1 + // + this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); + this.notifyIcon1.Text = "notifyIcon1"; + this.notifyIcon1.Visible = true; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(568, 536); + this.btnOK.Name = "btnOK"; + this.btnOK.TabIndex = 7; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.BtnOKClick); + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(24, 40); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(304, 376); + this.textBox1.TabIndex = 1; + this.textBox1.Text = ""; + // + // btnGetFolderList + // + this.btnGetFolderList.Location = new System.Drawing.Point(528, 8); + this.btnGetFolderList.Name = "btnGetFolderList"; + this.btnGetFolderList.Size = new System.Drawing.Size(104, 23); + this.btnGetFolderList.TabIndex = 5; + this.btnGetFolderList.Text = "Get Folder List"; + this.btnGetFolderList.Click += new System.EventHandler(this.BtnGetFolderListClick); + // + // lbFolders + // + this.lbFolders.Location = new System.Drawing.Point(368, 48); + this.lbFolders.Name = "lbFolders"; + this.lbFolders.Size = new System.Drawing.Size(296, 368); + this.lbFolders.TabIndex = 2; + // + // btnLogin + // + this.btnLogin.Location = new System.Drawing.Point(24, 8); + this.btnLogin.Name = "btnLogin"; + this.btnLogin.TabIndex = 0; + this.btnLogin.Text = "Login"; + this.btnLogin.Click += new System.EventHandler(this.BtnLoginClick); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(24, 536); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(208, 24); + this.label1.TabIndex = 8; + this.label1.Text = "Neue Emails:"; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(400, 8); + this.button2.Name = "button2"; + this.button2.TabIndex = 3; + this.button2.Text = "Angelika"; + this.button2.Click += new System.EventHandler(this.Button2Click); + // + // lbMsgDetails + // + this.lbMsgDetails.Location = new System.Drawing.Point(24, 432); + this.lbMsgDetails.Name = "lbMsgDetails"; + this.lbMsgDetails.Size = new System.Drawing.Size(640, 95); + this.lbMsgDetails.TabIndex = 6; + // + // MainForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(712, 567); + this.ControlBox = false; + this.Controls.Add(this.label1); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.lbMsgDetails); + this.Controls.Add(this.btnGetFolderList); + this.Controls.Add(this.btnLogout); + this.Controls.Add(this.button2); + this.Controls.Add(this.lbFolders); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.btnLogin); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Name = "MainForm"; + this.Text = "MainForm"; + this.Closed += new System.EventHandler(this.MainFormClosed); + this.ResumeLayout(false); + } + #endregion + + void BtnLoginClick(object sender, System.EventArgs e) + { + textBox1.Text += Connect(); + textBox1.Text += SendCommand("? LOGIN J.Schauer porenta\r\n"); + } + + string SendCommand(string command) + { + byte[] send = Encoding.ASCII.GetBytes(command); + str.Write(send, 0, send.Length); + + byte[] receive = new byte[4096]; + int k = str.Read(receive, 0, receive.Length); + + string msg = ""; + for(int i = 0; i 34) + { + response = response.Remove(0,9); + response = response.Remove(response.Length-25, 25); + string[] collection = response.Split(' '); + int[] IDs = new int[collection.Length]; + if(collection.Length>0) + { + for(int i=0; i\\S+)", RegexOptions.IgnoreCase); + Match m1 = re1.Match(sender); + sender = m1.Groups["sender"].Value; + + string subject = SendCommand("? FETCH "+IDs[i]+" (FLAGS BODY[HEADER.FIELDS (SUBJECT)])\r\n"); + Regex re2 = new Regex("Subject: (?\\S+)", RegexOptions.IgnoreCase); + Match m2 = re2.Match(subject); + subject = m2.Groups["subject"].Value; + + SendCommand("? STORE "+IDs[i]+" -FLAGS (\\SEEN)\r\n"); + lbMsgDetails.Items.Add(sender+" "+subject); + } + } + void BtnLogoutClick(object sender, System.EventArgs e) + { + textBox1.Text += SendCommand("? LOGOUT\r\n"); + str.Close(); + cl.Close(); + } + + void BtnGetFolderListClick(object sender, System.EventArgs e) + { + Thread t = new Thread(new ThreadStart(GetFolderList)); + t.Start(); + } + void BtnOKClick(object sender, System.EventArgs e) + { + this.Close(); + } + } +} diff --git a/CheckMail/NotifyIcon.cs b/CheckMail/NotifyIcon.cs new file mode 100644 index 0000000..593aa14 --- /dev/null +++ b/CheckMail/NotifyIcon.cs @@ -0,0 +1,109 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 11.06.2005 + * Time: 09:50 + */ + +using System; +using System.Runtime.InteropServices; + +namespace CheckMail +{ + /// + /// Description of NotifyIcon. + /// + public class NotifyIcon + { + [StructLayout(LayoutKind.Sequential)] + public struct NotifyIconData + { + public System.UInt32 cbSize; // DWORD + public System.IntPtr hWnd; // HWND + public System.UInt32 uID; // UINT + public NotifyFlags uFlags; // UINT + public System.UInt32 uCallbackMessage; // UINT + public System.IntPtr hIcon; // HICON + [MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)] + public System.String szTip; // char[128] + public System.UInt32 dwState; // DWORD + public System.UInt32 dwStateMask; // DWORD + [MarshalAs(UnmanagedType.ByValTStr, SizeConst=256)] + public System.String szInfo; // char[256] + public System.UInt32 uTimeoutOrVersion; // UINT + [MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)] + public System.String szInfoTitle; // char[64] + public System.UInt32 dwInfoFlags; // DWORD + //GUID guidItem; > IE 6 + } + + public enum NotifyCommand {Add = 0, Modify = 1, Delete = 2, SetFocus = 3, + SetVersion = 4} + public enum NotifyFlags {Message = 1, Icon = 2, Tip = 4, State = 8, Info = 16, + Guid = 32} + + [DllImport("shell32.Dll")] + public static extern System.Int32 Shell_NotifyIcon(NotifyCommand cmd, + ref NotifyIconData data); + + [DllImport("Kernel32.Dll")] + public static extern System.UInt32 GetCurrentThreadId(); + + public delegate System.Int32 EnumThreadWndProc(System.IntPtr hWnd, + System.UInt32 lParam); + + [DllImport("user32.Dll")] + public static extern System.Int32 EnumThreadWindows(System.UInt32 threadId, + EnumThreadWndProc callback, + System.UInt32 param); + + [DllImport("user32.Dll")] + public static extern System.Int32 GetClassName(System.IntPtr hWnd, + System.Text.StringBuilder className, + System.Int32 maxCount); + + private System.IntPtr m_notifyWindow; + private bool m_foundNotifyWindow; + + // Win32 Callback Function + private System.Int32 FindNotifyWindowCallback(System.IntPtr hWnd, + System.UInt32 lParam) + { + System.Text.StringBuilder buffer = new System.Text.StringBuilder(256); + GetClassName(hWnd, buffer, buffer.Capacity); + + // but what if this changes? - anybody got a better idea? + if(buffer.ToString() == "WindowsForms10.Window.0.app1") + { + m_notifyWindow = hWnd; + m_foundNotifyWindow = true; + return 0; // stop searching + } + return 1; + } + + public void ShowBalloon(uint iconId, string title, string text, uint timeout) + { + // find notify window + uint threadId = GetCurrentThreadId(); + EnumThreadWndProc cb = new EnumThreadWndProc(FindNotifyWindowCallback); + m_foundNotifyWindow = false; + EnumThreadWindows(threadId, cb, 0); + if(m_foundNotifyWindow) + { + // show the balloon + NotifyIconData data = new NotifyIconData(); + data.cbSize = (System.UInt32) + System.Runtime.InteropServices.Marshal.SizeOf( + typeof(NotifyIconData)); + data.hWnd = m_notifyWindow; + data.uID = iconId; + data.uFlags = NotifyFlags.Info; + data.uTimeoutOrVersion = 15000; + data.szInfo = text; + data.szInfoTitle = title; + Shell_NotifyIcon(NotifyCommand.Modify, ref data); + } + } + } +} diff --git a/CheckMail/test.cs b/CheckMail/test.cs new file mode 100644 index 0000000..e43eb24 --- /dev/null +++ b/CheckMail/test.cs @@ -0,0 +1,94 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 11.06.2005 + * Time: 10:04 + */ + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace CheckMail +{ + /// + /// Description of test. + /// + public class test : System.Windows.Forms.Form + { + private System.Windows.Forms.NotifyIcon notifyIcon1; + private System.Windows.Forms.Button button1; + private System.ComponentModel.IContainer components; + + public test() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if (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() + { + this.components = new System.ComponentModel.Container(); + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(MainForm)); + this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); + this.button1 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // notifyIcon1 + // + this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); + this.notifyIcon1.Text = "notifyIcon1"; + this.notifyIcon1.Visible = true; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(72, 56); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(88, 23); + this.button1.TabIndex = 0; + this.button1.Text = "Show Balloon"; + this.button1.Click += new System.EventHandler(this.OnShowBalloon); + // + // Form1 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(240, 142); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.button1}); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + + } + #endregion + + + private void OnShowBalloon(object sender, System.EventArgs e) + { + CheckMail.NotifyIcon notifyIcon = new CheckMail.NotifyIcon(); + notifyIcon.ShowBalloon(1, "My Title", "My Text", 15000); + } + } +} diff --git a/CheckMail2/CheckMail.application b/CheckMail2/CheckMail.application new file mode 100644 index 0000000..35ce245 --- /dev/null +++ b/CheckMail2/CheckMail.application @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + QIINJDl5CGPQc+KssJZCJh77VU4= + + + +GIVMHoBlUVkdBdM5x8lxxpEdnps=su5U5Nh3Jww+ZI2gSIoSWs8Z0OA=fhrKqUE48TgTw74s8oUGdCnoxlsloy5jj02DiunH/nvIqtEtsLtX+6U8lSx9mh8YrmfxJU85RTIdtGEITXDNgBbZnarjxTX96f/5LuEwEktgj45ALyUdqVDUcyy0Dq1h0ap6kwCViYrHKrH2sSLFWBMmCL1mfzeaGZ2VziQDBuo=xHIZyznsihMfToKiA1FUq5U3jSvBxsRRlZCypIl+2nLjeN8eBgcW24NWbwWz7F9PHiijG3N+ndvPJo4hKIyc5y85ptqLK10ARy7nIo1QWKFqLklhvb4yap2hIhaWUZEgQDC68BydQuwk4joQIn04LS6qzknaG8PFNIDMGnODUD0=AQABCN=JOSCH\Johannes1wLQ5QjD477HG05Dp1Lk3VQnQSA=U1yxmYYpvGlgTrZ6E5B8MpTm4a8mLnmhrH40rDpWTegf/UVlVD1fBljlYsDrxs1lR4pXf0DakTG5v/x5KzOyqJGCH7Tp5eloqIcgFv+fbNPMdy8ZfMhH+D160e/lDnQJUrgzzxZS6IC91SXTHpfWxRmuE4ajoChWEZrecz7V0jI=xHIZyznsihMfToKiA1FUq5U3jSvBxsRRlZCypIl+2nLjeN8eBgcW24NWbwWz7F9PHiijG3N+ndvPJo4hKIyc5y85ptqLK10ARy7nIo1QWKFqLklhvb4yap2hIhaWUZEgQDC68BydQuwk4joQIn04LS6qzknaG8PFNIDMGnODUD0=AQABMIIByTCCATagAwIBAgIQh9SthCpWXpdMLgXvuNaBtzAJBgUrDgMCHQUAMCcxJTAjBgNVBAMeHABKAE8AUwBDAEgAXABKAG8AaABhAG4AbgBlAHMwHhcNMDUwNjExMTExNDUzWhcNMDYwNjExMTcxNDUzWjAnMSUwIwYDVQQDHhwASgBPAFMAQwBIAFwASgBvAGgAYQBuAG4AZQBzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEchnLOeyKEx9OgqIDUVSrlTeNK8HGxFGVkLKkiX7acuN43x4GBxbbg1ZvBbPsX08eKKMbc36d288mjiEojJznLzmm2osrXQBHLucijVBYoWouSWG9vjJqnaEiFpZRkSBAMLrwHJ1C7CTiOhAifTgtLqrOSdobw8U0gMwac4NQPQIDAQABMAkGBSsOAwIdBQADgYEAcr9aTBqIwCSFVSvwkdG28Sn7/U3xjdbbggv8HzsVmpmeu/xzUOhQKQuxbPn8qy+s7BCFgrJj/ZFGru5qKrvh9hoY1cbzQYkFjbQrZItPAhecfWwvAYO+f4BTEdCbWGcW/3VYYHTLWlnqCbh2F00iZx2lZN4D7n83j6y7Vb+8O7k= \ No newline at end of file diff --git a/CheckMail2/CheckMail/CheckMail.sln b/CheckMail2/CheckMail/CheckMail.sln new file mode 100644 index 0000000..e57cb1d --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CheckMail", "CheckMail\CheckMail.csproj", "{924E3D26-0DF0-41E8-B8B5-E70CB0842EB5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {924E3D26-0DF0-41E8-B8B5-E70CB0842EB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {924E3D26-0DF0-41E8-B8B5-E70CB0842EB5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {924E3D26-0DF0-41E8-B8B5-E70CB0842EB5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {924E3D26-0DF0-41E8-B8B5-E70CB0842EB5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/CheckMail2/CheckMail/CheckMail.suo b/CheckMail2/CheckMail/CheckMail.suo new file mode 100644 index 0000000..47e1eae Binary files /dev/null and b/CheckMail2/CheckMail/CheckMail.suo differ diff --git a/CheckMail2/CheckMail/CheckMail/CheckMail.csproj b/CheckMail2/CheckMail/CheckMail/CheckMail.csproj new file mode 100644 index 0000000..e331ef9 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/CheckMail.csproj @@ -0,0 +1,115 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {924E3D26-0DF0-41E8-B8B5-E70CB0842EB5} + WinExe + Properties + CheckMail + CheckMail + true + true + 8C5CB58138AEB531D4AFA0B0F5BA208CF9F2B10E + CheckMail_TemporaryKey.pfx + false + mail.ico + E:\Quelltexte\CheckMail2\ + true + Disk + false + Foreground + 7 + Days + false + false + true + de + CheckMail + Johannes Schauer + false + false + true + 1.1.0.* + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + + MainForm.cs + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + Über.cs + + + True + Resources.resx + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + Form + + + Über.cs + + + + + False + .NET Framework 2.0 Beta + true + + + + + + + \ No newline at end of file diff --git a/CheckMail2/CheckMail/CheckMail/CheckMail.csproj.user b/CheckMail2/CheckMail/CheckMail/CheckMail.csproj.user new file mode 100644 index 0000000..31e9b70 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/CheckMail.csproj.user @@ -0,0 +1,16 @@ + + + 8.0.50215 + E:\Quelltexte\CheckMail2\ + + + http://www.johannes-schauer.de + + + + + 4 + en-US + true + + \ No newline at end of file diff --git a/CheckMail2/CheckMail/CheckMail/CheckMail_TemporaryKey.pfx b/CheckMail2/CheckMail/CheckMail/CheckMail_TemporaryKey.pfx new file mode 100644 index 0000000..1d0fef3 Binary files /dev/null and b/CheckMail2/CheckMail/CheckMail/CheckMail_TemporaryKey.pfx differ diff --git a/CheckMail2/CheckMail/CheckMail/MainForm.cs b/CheckMail2/CheckMail/CheckMail/MainForm.cs new file mode 100644 index 0000000..98dbb66 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/MainForm.cs @@ -0,0 +1,862 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 10.06.2005 + * Time: 12:55 + */ +using System; +using System.Drawing; +using System.Windows.Forms; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Configuration; +using CheckMail.Properties; + +namespace CheckMail +{ + /// + /// Description of MainForm. + /// + public class CheckMail : System.Windows.Forms.Form + { + private System.ComponentModel.IContainer components; + private System.Windows.Forms.ListBox lbMsgDetails; + private System.Windows.Forms.Label lNeueEmails; + private System.Windows.Forms.ListBox lbFolders; + private System.Windows.Forms.Button btnCheckNow; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.NotifyIcon notifyIcon1; + + private TcpClient cl = null; //Globaler TcpClient + private NetworkStream str = null; //Globaler Netzwerkstream + private int neueEmails = 0; //Anzahl der neuen Emails + private TextBox tbUser; //Textbox Benutzername + private TextBox tbPass; //Textbox Passwort + private string GlobalSenders = ""; //String Liste aller Sender neuer Emails + private string user = ""; //Benutzername + private CheckBox cbAutoCheck; //Checkbox AutoCheck ja/nein + private NumericUpDown nUDIntervall; //Periode mit der geprft wird + private Label label1; + private System.Windows.Forms.Timer timer1; + private ContextMenuStrip contextMenuStrip1; + private ToolStripMenuItem BeendenToolStripMenuItem; + private ToolStripMenuItem minimierenToolStripMenuItem; + private ToolStripMenuItem tothefrontToolStripMenuItem; + private string pass = ""; //Passwort + private Thread t = null; + private Button btnBeenden; + private ToolStripMenuItem berToolStripMenuItem; + private StatusStrip statusStrip1; + private ToolStripStatusLabel toolStripStatusLabel1; + private Button bProxy; + private Settings sett = new Settings(); + + private delegate void ClearFolderListHandler(); + private delegate void AddFolderListItemHandler(string text); + private delegate void ClearMsgDetailsListHandler(); + private delegate void AddMsgDetailsListItemHandler(string text); + private delegate void SetNeueEmailLabelHandler(string text); + private delegate void SetNotifyIconTextHandler(string text); + private delegate void SetBtnCheckNowEnabledHandler(bool enabled); + private delegate void SetSchlieenToolStripMenuItemEnabledHandler(bool enabled); + private delegate void SetBtnBeendenEnabledHandler(bool enabled); + + + public CheckMail() + { + InitializeComponent(); + tbUser.Text = sett.user; + tbPass.Text = sett.pass; + toolStripStatusLabel1.Text = "Fertig"; + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new CheckMail()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CheckMail)); + this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.berToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.minimierenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tothefrontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.BeendenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCheckNow = new System.Windows.Forms.Button(); + this.lbFolders = new System.Windows.Forms.ListBox(); + this.lNeueEmails = new System.Windows.Forms.Label(); + this.lbMsgDetails = new System.Windows.Forms.ListBox(); + this.tbUser = new System.Windows.Forms.TextBox(); + this.tbPass = new System.Windows.Forms.TextBox(); + this.cbAutoCheck = new System.Windows.Forms.CheckBox(); + this.nUDIntervall = new System.Windows.Forms.NumericUpDown(); + this.label1 = new System.Windows.Forms.Label(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.btnBeenden = new System.Windows.Forms.Button(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.bProxy = new System.Windows.Forms.Button(); + this.contextMenuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nUDIntervall)).BeginInit(); + this.statusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // notifyIcon1 + // + this.notifyIcon1.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info; + this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1; + this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); + this.notifyIcon1.Text = "0 neue Emails"; + this.notifyIcon1.Visible = true; + this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Enabled = true; + this.contextMenuStrip1.GripMargin = new System.Windows.Forms.Padding(2); + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.berToolStripMenuItem, + this.minimierenToolStripMenuItem, + this.tothefrontToolStripMenuItem, + this.BeendenToolStripMenuItem}); + this.contextMenuStrip1.Location = new System.Drawing.Point(78, 0); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.contextMenuStrip1.Size = new System.Drawing.Size(158, 92); + // + // berToolStripMenuItem + // + this.berToolStripMenuItem.Name = "berToolStripMenuItem"; + this.berToolStripMenuItem.Text = "ber..."; + this.berToolStripMenuItem.Click += new System.EventHandler(this.berToolStripMenuItem_Click); + // + // minimierenToolStripMenuItem + // + this.minimierenToolStripMenuItem.Name = "minimierenToolStripMenuItem"; + this.minimierenToolStripMenuItem.Text = "Minimieren"; + this.minimierenToolStripMenuItem.Click += new System.EventHandler(this.minimierenToolStripMenuItem_Click); + // + // tothefrontToolStripMenuItem + // + this.tothefrontToolStripMenuItem.Name = "tothefrontToolStripMenuItem"; + this.tothefrontToolStripMenuItem.Text = "In den Vordergrund"; + this.tothefrontToolStripMenuItem.Click += new System.EventHandler(this.tothefrontToolStripMenuItem_Click); + // + // BeendenToolStripMenuItem + // + this.BeendenToolStripMenuItem.Name = "BeendenToolStripMenuItem"; + this.BeendenToolStripMenuItem.Text = "Beenden"; + this.BeendenToolStripMenuItem.Click += new System.EventHandler(this.BeendenToolStripMenuItem_Click); + // + // btnOK + // + this.btnOK.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnOK.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.btnOK.Location = new System.Drawing.Point(408, 410); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(136, 23); + this.btnOK.TabIndex = 6; + this.btnOK.Text = "&Minimize to Tray"; + this.btnOK.Click += new System.EventHandler(this.BtnOKClick); + // + // btnCheckNow + // + this.btnCheckNow.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnCheckNow.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.btnCheckNow.Location = new System.Drawing.Point(228, 10); + this.btnCheckNow.Name = "btnCheckNow"; + this.btnCheckNow.Size = new System.Drawing.Size(104, 23); + this.btnCheckNow.TabIndex = 3; + this.btnCheckNow.Text = "Check &Now"; + this.btnCheckNow.Click += new System.EventHandler(this.BtnCheckNowClick); + // + // lbFolders + // + this.lbFolders.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lbFolders.FormattingEnabled = true; + this.lbFolders.HorizontalScrollbar = true; + this.lbFolders.Location = new System.Drawing.Point(12, 38); + this.lbFolders.Name = "lbFolders"; + this.lbFolders.SelectionMode = System.Windows.Forms.SelectionMode.None; + this.lbFolders.Size = new System.Drawing.Size(137, 366); + this.lbFolders.TabIndex = 2; + this.lbFolders.TabStop = false; + // + // lNeueEmails + // + this.lNeueEmails.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.lNeueEmails.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.lNeueEmails.Location = new System.Drawing.Point(14, 410); + this.lNeueEmails.Name = "lNeueEmails"; + this.lNeueEmails.Size = new System.Drawing.Size(208, 21); + this.lNeueEmails.TabIndex = 11; + this.lNeueEmails.Text = "Neue Emails:"; + this.lNeueEmails.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lbMsgDetails + // + this.lbMsgDetails.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lbMsgDetails.FormattingEnabled = true; + this.lbMsgDetails.HorizontalScrollbar = true; + this.lbMsgDetails.Location = new System.Drawing.Point(157, 38); + this.lbMsgDetails.Name = "lbMsgDetails"; + this.lbMsgDetails.SelectionMode = System.Windows.Forms.SelectionMode.None; + this.lbMsgDetails.Size = new System.Drawing.Size(387, 366); + this.lbMsgDetails.TabIndex = 12; + this.lbMsgDetails.TabStop = false; + // + // tbUser + // + this.tbUser.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbUser.Location = new System.Drawing.Point(12, 12); + this.tbUser.Name = "tbUser"; + this.tbUser.Size = new System.Drawing.Size(102, 20); + this.tbUser.TabIndex = 1; + this.tbUser.Text = "J.Schauer"; + this.tbUser.TextChanged += new System.EventHandler(this.tbUser_TextChanged); + // + // tbPass + // + this.tbPass.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbPass.Location = new System.Drawing.Point(120, 12); + this.tbPass.Name = "tbPass"; + this.tbPass.PasswordChar = '*'; + this.tbPass.Size = new System.Drawing.Size(102, 20); + this.tbPass.TabIndex = 2; + this.tbPass.Text = "porenta"; + this.tbPass.TextChanged += new System.EventHandler(this.tbPass_TextChanged); + // + // cbAutoCheck + // + this.cbAutoCheck.AutoSize = true; + this.cbAutoCheck.Checked = true; + this.cbAutoCheck.CheckState = System.Windows.Forms.CheckState.Checked; + this.cbAutoCheck.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbAutoCheck.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.cbAutoCheck.Location = new System.Drawing.Point(338, 13); + this.cbAutoCheck.Name = "cbAutoCheck"; + this.cbAutoCheck.Size = new System.Drawing.Size(94, 17); + this.cbAutoCheck.TabIndex = 4; + this.cbAutoCheck.Text = "Auto Check alle"; + this.cbAutoCheck.CheckedChanged += new System.EventHandler(this.cbAutoCheck_CheckedChanged); + // + // nUDIntervall + // + this.nUDIntervall.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nUDIntervall.Location = new System.Drawing.Point(438, 12); + this.nUDIntervall.Maximum = new decimal(new int[] { + 60, + 0, + 0, + 0}); + this.nUDIntervall.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nUDIntervall.Name = "nUDIntervall"; + this.nUDIntervall.Size = new System.Drawing.Size(51, 20); + this.nUDIntervall.TabIndex = 5; + this.nUDIntervall.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.nUDIntervall.ValueChanged += new System.EventHandler(this.nUDIntervall_ValueChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label1.Location = new System.Drawing.Point(495, 15); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(41, 13); + this.label1.TabIndex = 13; + this.label1.Text = "Minuten"; + // + // timer1 + // + this.timer1.Enabled = true; + this.timer1.Interval = 300000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // btnBeenden + // + this.btnBeenden.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnBeenden.Location = new System.Drawing.Point(321, 410); + this.btnBeenden.Name = "btnBeenden"; + this.btnBeenden.Size = new System.Drawing.Size(81, 23); + this.btnBeenden.TabIndex = 14; + this.btnBeenden.Text = "&Beenden"; + this.btnBeenden.Click += new System.EventHandler(this.btnBeenden_Click); + // + // statusStrip1 + // + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel1}); + this.statusStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Table; + this.statusStrip1.Location = new System.Drawing.Point(0, 439); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(556, 22); + this.statusStrip1.SizingGrip = false; + this.statusStrip1.TabIndex = 15; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Spring = true; + this.toolStripStatusLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // bProxy + // + this.bProxy.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bProxy.Location = new System.Drawing.Point(157, 410); + this.bProxy.Name = "bProxy"; + this.bProxy.Size = new System.Drawing.Size(71, 23); + this.bProxy.TabIndex = 16; + this.bProxy.Text = "Proxy"; + // + // CheckMail + // + this.AcceptButton = this.btnCheckNow; + this.ClientSize = new System.Drawing.Size(556, 461); + this.ControlBox = false; + this.Controls.Add(this.bProxy); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.btnBeenden); + this.Controls.Add(this.tbPass); + this.Controls.Add(this.nUDIntervall); + this.Controls.Add(this.label1); + this.Controls.Add(this.tbUser); + this.Controls.Add(this.lbMsgDetails); + this.Controls.Add(this.lNeueEmails); + this.Controls.Add(this.cbAutoCheck); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.btnCheckNow); + this.Controls.Add(this.lbFolders); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "CheckMail"; + this.ShowInTaskbar = false; + this.Text = "CheckMail"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.CheckMail_FormClosed); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.CheckMail_FormClosing); + this.contextMenuStrip1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.nUDIntervall)).EndInit(); + this.statusStrip1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + #endregion + + #region CORE-Functions + /* + * SendCommand + * + * Schreibt einen bergebenen String in den Netzwerstream und gibt die Antwort + * Des Servers zurck + */ + + string SendCommand(string command) + { + try + { + byte[] send = Encoding.ASCII.GetBytes(command); + str.Write(send, 0, send.Length); + + byte[] receive = new byte[4096]; + + int k = str.Read(receive, 0, receive.Length); + + string msg = ""; + for (int i = 0; i < k; i++) + { + msg += Convert.ToChar(receive[i]).ToString(); + } + + return msg; + } + catch (Exception e) + { + toolStripStatusLabel1.Text = e.Message; + return ""; + } + } + + /* + * Login + * + * Erstellt einen neuen TcpClient und Netzwerkstream mit imap.web.de:143 und + * sendet die Login Daten + */ + + string Login() + { + try + { + cl = new TcpClient("imap.web.de", 143); + cl.ReceiveTimeout = 30000; + cl.SendTimeout = 30000; + + str = cl.GetStream(); + str.ReadTimeout = 45000; + str.WriteTimeout = 45000; + byte[] buffer = new byte[4096]; + + int k = str.Read(buffer, 0, buffer.Length); + + string msg = ""; + for (int i = 0; i < k; i++) + { + msg += Convert.ToChar(buffer[i]).ToString(); + } + + SendCommand("? LOGIN " + user + " " + pass + "\r\n"); + + return msg; + } + catch (Exception e) + { + toolStripStatusLabel1.Text = e.Message; + return ""; + } + } + + /* + * GetUnreadIDs + * + * Nach bergabe eines Ordners wird dieser selectet und nach ungelesenen Nachrichten durchsucht. + * Der zurckgegebene String wird auf die Nummern gekrzt und diese durch ein Split + * in ein int-Array geschrieben welches zurck gegeben wird + */ + + int[] GetUnreadIDs(string folder) + { + SendCommand("? SELECT "+folder+"\r\n"); + string response = SendCommand("? SEARCH UNSEEN\r\n"); + if(response.Length > 34) + { + response = response.Remove(0,9); + response = response.Remove(response.Length-25, 25); + string[] collection = response.Split(' '); + int[] IDs = new int[collection.Length]; + if(collection.Length>0) + { + for(int i=0; i 0) + { + notifyIcon1.ShowBalloonTip(1000, neueEmails.ToString() + " neue Emails", GlobalSenders, ToolTipIcon.Info); + } + + this.Invoke(new SetNotifyIconTextHandler(SetNotifyIconText), new object[] { neueEmails.ToString() + " neue Emails" }); + + Logout(); + } + catch (Exception e) + { + toolStripStatusLabel1.Text = e.Message; + } + } + + this.Invoke(new SetBtnCheckNowEnabledHandler(SetBtnCheckNowEnabled), new object[] { true }); + this.Invoke(new SetSchlieenToolStripMenuItemEnabledHandler(SetSchlieenToolStripMenuItemEnabled), new object[] { true }); + this.Invoke(new SetBtnBeendenEnabledHandler(SetBtnBeendenEnabled), new object[] { true }); + } + + /* + * UpdateUnreadMsgDetails + * + * Nachdem ein neuer berpunkt in der MsgDetails Liste mit dem entsprechenden Ordner als berschrift angelegt + * wurde, wird der bergebene Ordner auf dem Server selectet und eine schleife arbeitet alle + * durch ein int-Array als ungelesen bergebenen Emails ab. Dabei werden die von FETCH zurck + * gegebenen Strings fr SENDER und SUBJECT durch eine Regular Expression von ihrem Drumherum + * befreit und nachdem das getan ist die Email wieder auf ungelesen gesetzt. + * Die MsgDetails Liste wird um den entsprechenden Eintrag mit Absender und Betreff erweitert und + * die Liste mit allen Absendern um den entsprechenden string erweitert. + */ + + void UpdateUnreadMsgDetails(string folder, int[] IDs) + { + this.Invoke(new AddMsgDetailsListItemHandler(AddMsgDetailsListItem), new object[] { "Neu in Ordner: " + folder }); + SendCommand("? SELECT " + folder + "\r\n"); + + for(int i = 0; i[^\n\r]+)", RegexOptions.IgnoreCase); + Match m1 = re1.Match(sender); + sender = m1.Groups["sender"].Value; + + string subject = SendCommand("? FETCH "+IDs[i]+" (FLAGS BODY[HEADER.FIELDS (SUBJECT)])\r\n"); + Regex re2 = new Regex("Subject: (?[^\n\r]+)", RegexOptions.IgnoreCase); + Match m2 = re2.Match(subject); + subject = m2.Groups["subject"].Value; + + SendCommand("? STORE "+IDs[i]+" -FLAGS (\\SEEN)\r\n"); + this.Invoke(new AddMsgDetailsListItemHandler(AddMsgDetailsListItem), new object[] { " > "+sender + " - " + subject}); + + GlobalSenders += sender + " "; + } + } + + /* + * Logout + * + * Ein LOGOUT wird gesendet und danach der Stream und der TcpClient geschlossen. + */ + + void Logout() + { + SendCommand("? LOGOUT\r\n"); + str.Close(); + cl.Close(); + } + #endregion + + #region delgates + void AddFolderListItem(string text) + { + lbFolders.Items.Add(text); + } + + void AddMsgDetailsListItem(string text) + { + lbMsgDetails.Items.Add(text); + } + + void ClearFolderList() + { + lbFolders.Items.Clear(); + } + + void ClearMsgDetailsList() + { + lbMsgDetails.Items.Clear(); + } + + void SetNeueEmailLabel(string text) + { + lNeueEmails.Text = "Neue Emails: " + text; + } + + void SetNotifyIconText(string text) + { + notifyIcon1.Text = text; + } + + void SetBtnCheckNowEnabled(bool enabled) + { + btnCheckNow.Enabled = enabled; + } + + void SetSchlieenToolStripMenuItemEnabled(bool enabled) + { + BeendenToolStripMenuItem.Enabled = enabled; + } + + void SetBtnBeendenEnabled(bool enabled) + { + btnBeenden.Enabled = enabled; + } + #endregion + + #region form events + + /* + * BtnCheckNowClick + * + * Benutzername und Passwort werden aus den Textboxen geholt und ein neuer Thread + * fr das aktualisieren gestartet, wenn der Button nicht deaktiviert sein sollte, + * was nur der Fall ist, wenn schon eine berprfung luft. + */ + + void BtnCheckNowClick(object sender, EventArgs e) + { + user = tbUser.Text; + pass = tbPass.Text; + if (btnCheckNow.Enabled) + { + Thread t = new Thread(new ThreadStart(GetFolderList)); + t.Start(); + } + } + + /* + * timer1_Tick + * + * wird bei jedem Tick von timer1 ausgefhrt - wie BtnCheckNowClick + */ + + private void timer1_Tick(object sender, EventArgs e) + { + user = tbUser.Text; + pass = tbPass.Text; + if (btnCheckNow.Enabled) + { + t = new Thread(new ThreadStart(GetFolderList)); + t.Start(); + } + } + + /* + * BtnOKClick + * + * Die Anwendung wird in das TrayIcon minimiert + */ + + void BtnOKClick(object sender, System.EventArgs e) + { + this.WindowState = FormWindowState.Minimized; + this.Visible = false; + } + + /* + * cbAutoCheck_CheckedChanged + * + * je nachdem ob checked oder nicht wird die IntervallNumericUpDown zusammen + * mit dem Timer an und aus gestellt wenn sich checked ndert. + */ + + private void cbAutoCheck_CheckedChanged(object sender, EventArgs e) + { + nUDIntervall.Enabled = cbAutoCheck.Checked; + timer1.Enabled = cbAutoCheck.Checked; + } + + /* + * nUDIntervall_ValueChanged + * + * Wird der Wert des numericUPDown gndert so wird dieser von Minuten in Millisekunden + * umgerechnet sofort in den Interval Wert von timer1 bertragen + */ + + private void nUDIntervall_ValueChanged(object sender, EventArgs e) + { + timer1.Interval = Convert.ToInt32(nUDIntervall.Value) * 60000; + } + + /* + * btnBeenden_Click + * + * Beendet das Programm + */ + + private void btnBeenden_Click(object sender, EventArgs e) + { + this.Close(); + } + + #region notifyIcon related + /* + * notifyIcon1_DoubleClick + * + * Holt das Programm egal aus welchem WindowState in den Vordergrund + */ + + private void notifyIcon1_DoubleClick(object sender, EventArgs e) + { + this.Visible = true; + this.WindowState = FormWindowState.Normal; + this.BringToFront(); + } + + /* + * minimierenToolStripMenuItem_Click + * + * berprft den WindowState und ndert diesen zusammen mit der Sichtbarkeit + * und dem ToolStripMenuItem-Text dementsprechend + */ + + private void minimierenToolStripMenuItem_Click(object sender, EventArgs e) + { + if (this.WindowState == FormWindowState.Normal) + { + this.WindowState = FormWindowState.Minimized; + this.Visible = false; + this.minimierenToolStripMenuItem.Text = "Wiederherstellen"; + } + else + { + this.Visible = true; + this.WindowState = FormWindowState.Normal; + this.minimierenToolStripMenuItem.Text = "Minimieren"; + } + } + + /* + * tothefrontToolStripMenuItem_Click + * + * Holt das Programm egal aus welchem WindowState in den Vordergrund + */ + + private void tothefrontToolStripMenuItem_Click(object sender, EventArgs e) + { + this.Visible = true; + this.WindowState = FormWindowState.Normal; + this.BringToFront(); + } + + /* + * berToolStripMenuItem_Click + * + * ffnet den ber... Dialog + */ + + private void berToolStripMenuItem_Click(object sender, EventArgs e) + { + ber ber = new ber(); + ber.ShowDialog(); + } + + /* + * toolStripMenuItem1_Click + * + * Beendet das Programm + */ + + private void BeendenToolStripMenuItem_Click(object sender, EventArgs e) + { + this.Close(); + } + #endregion + + /* + * CheckMail_FormClosed + * + * Wenn die Form geschlossen ist + */ + + private void CheckMail_FormClosed(object sender, FormClosedEventArgs e) + { + notifyIcon1.Dispose(); + + if (str != null) + { + str.Close(); + } + if (cl != null) + { + cl.Close(); + } + } + + /* + * CheckMail_FormClosing + * + * Bevor die Form geschlossen ist. Speichert Benutzerdaten. + */ + + private void CheckMail_FormClosing(object sender, FormClosingEventArgs e) + { + if (t != null) + { + t.Abort(); + } + sett.user = tbUser.Text; + sett.pass = tbPass.Text; + sett.Save(); + } + + /* + * Damit kein automatisches Checken erfolgt, whrend Werte gendert werden + */ + + private void tbUser_TextChanged(object sender, EventArgs e) + { + cbAutoCheck.Checked = false; + } + + private void tbPass_TextChanged(object sender, EventArgs e) + { + cbAutoCheck.Checked = false; + } + + #endregion + + + } +} diff --git a/CheckMail2/CheckMail/CheckMail/MainForm.de.resx b/CheckMail2/CheckMail/CheckMail/MainForm.de.resx new file mode 100644 index 0000000..a592d81 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/MainForm.de.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 96, 0 + + + + AAABAAIAEBAAAAAAAABoBQAAJgAAABAQAAAAAAAAaAQAAI4FAAAoAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAg2BZAGZmZgChd3MAo3p2ALuLigDDkpEAQHaZAE15mQBzg5kAmYyZAMyZ + mQDOm5kAz5yZANCdmQDWo5kA26iZAN2qmQDotZkA6reZAM+dmgDfr5sAz5+cAPLDnAD1xZwA9cedANan + ngDvwZ4As5mfAMmdnwDJn58Az5+fAP/ToADftaIA1qyjAM6mpQDWrKUA/9ilACt5pgDBoaYA2bOmADiB + pwDQp6cA1qynAP/apwDRqakA7MqqAN++qwDOrKwA/9+sAN+/rQDy060A5sqwAPLWsADcubEA37+xAP/k + sQA9jLMAP4yzAECMswC+prMAv62zANmzswDfv7YA37+3AP/qtwBQlrkAVpy5ALaluQC8s7kA3Lm5AN+/ + ugD867sA8uO9AP/wvQD16b8A//K/AP/2wwD/+MUAy8PGAP/5xgDy5scA8ubKAP/8ygCAs8wA///MAOzZ + zgD//88A8ubQAP//0ACPvNIArsPSANvR0gD//9MA/PnUAPz51QBeuNkArNPZAP//2QDy5t0A9ezeAP// + 3wD//+AA///iAHDC5gCk2OYAv9nmAP//6ACi4+wAm8ryAN/s8gDQ7/IA2/DyAIvO+QDa+fkA/Pn5AAAA + AACLxP8Akcz/AJPP/wCV2f8AluL/AJfs/wDi//8A5v//AOj//wDs//8A7///APP//wD0//8A+f//APz/ + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNzAQEBAXNzc3Nzc3Nzc3NzIgoOCgQBAQEBAQFzc3NzcyIMFB8W + EQ8LBQIAAQEBc3MiGhMtNzAkHxcSEA0KAwFzIjQyFUpNS0A3MCQYCwoBcyJITzMjXVxYUk1HGRAKAXMi + UFxWJz9qZmReISArCgFzIldlUSMKRmJjKi5MSQoBcylVNR5bb048CiYxVlQKAXMsCkRygoB+fHpxLzZh + CgFzHQlBg4ODgX99e24bPgoBc3MdOm1pWVM5OCUGCAoKAXNzcygHQl9ncHZ1dEMKAXNzc3NzHR1reXh3 + bDsBAXNzc3Nzc3MdHWBoWhwBAXNzc3Nzc3Nzc3M9PUUBc3Nzc3PD/wAAgA8AAIABAACAAAAAgAAAAIAA + AACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAADgAQAA8AMAAPgHAAD+HwAAKAAAABAAAAAgAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2hoWcoXVx23JNRuVGKh7dOh8TzUAkGL1LLiOpTzEmiksu + JWJDJh1GSi4jOlI0Jy9TNSoiTC8mFkQzIgwAAAAAwpGQzsyZmf/Wo5n/zJmZ/7qKif2WbGj4c1BI708x + Jt84HxLNPSIWwUksIK9OMieVTzEnc0MmHUZEKRstAAAAAMKRkM7PnJn/36+b///ToP/yw5z/6LWZ/9uo + mf/Om5n/w5KR/p90cPp8V1DyY0E45jofE9E5HxK6RikfjQAAAADCkZDO78Ge/8+dmv/syqr//+Sx///f + rP//2KX//9Og//XFnP/qt5n/3aqZ/9Cdmf/MmZn/oHVx9jcdEbMAAAAAwpGQzvLWsP/y063/z5+c//Xp + v///+MX///K////qt///5LH//9+s///Ypf/1x53/zpuZ/8yZmf80Gw69AAAAAMKRkM7y473///nG/+bK + sP/WrKX//PnU////0////9D///zK///4xf/867v/1qee/92qmf/MmZn/MxoNvwAAAADCkZDO8ubH//// + 0////8//2bOm/9+/t////+j////i////3//8+dX/1qyj/9+1ov//2qf/zJmZ/zMaDb8AAAAAwpGQzvLm + 0P///+D/8ubK/9aspf/MmZn/37+6//Lm3f/17N7/1qyn/9++q///9sP///C9/8yZmf8zGg2/AAAAAMSS + kc3s2c7/3Lmx/8+fn//b0dL/2/Dy/8vDxv+/rbP/zJmZ/8Ghpv/fv63////P////zP/MmZn/MxoNvwAA + AADFk5PKzJmZ/7yzuf/8+fn//P////T////v////6P///+L////a+fn/zqys/9+/sf///9n/zJmZ/zQb + Dr0AAAAAxJKSmZmMmf9Qlrn/////////////////+f////P////s////5v///9Dv8v+zmZ//37+2/8yZ + mf84HRGyAAAAAE0zMwidiZKqQIyz/9/s8v+/2eb/j7zS/4CzzP8/jLP/PYyz/yt5pv9Adpn/c4OZ/8yZ + mf/MmZn/TC4kiAAAAACAAAACRi4XCRFoltVNeZn/Vpy5/1642f9wwub/i875/5PP//+RzP//i8T//7al + uf/MmZn/pHh1u0wuJjYAAAAAAAAAAIAAAAJGLi4JwI+Ojcmfn/+i4+z/l+z//5bi//+V2f//m8ry/76m + s//BkI/zjGVfgE8zJSxVNSsTAAAAAAAAAAAAAAAAgAAAAk0zMwi8i4pwyZ+f/6zT2f+k2Ob/rsPS/8md + n/+oe3jOaUg/Uk83KyJLPC0OZjMzBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMyZmVDMmZm/zJmZv8yZ + ma/MmZlAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAEBgABzc4AAc3OAAHNzgAAKDoAAAQGAAAEBgABzc4AA + DBSAABEPgAACAIAAAXOAABoTwAAwJOAAEhD8HwMB + + + \ No newline at end of file diff --git a/CheckMail2/CheckMail/CheckMail/MainForm.resx b/CheckMail2/CheckMail/CheckMail/MainForm.resx new file mode 100644 index 0000000..f66d4a2 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/MainForm.resx @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 230, 16 + + + + + AAABAAIAEBAAAAAAAABoBQAAJgAAABAQAAAAAAAAaAQAAI4FAAAoAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAg2BZAGZmZgChd3MAo3p2ALuLigDDkpEAQHaZAE15mQBzg5kAmYyZAMyZ + mQDOm5kAz5yZANCdmQDWo5kA26iZAN2qmQDotZkA6reZAM+dmgDfr5sAz5+cAPLDnAD1xZwA9cedANan + ngDvwZ4As5mfAMmdnwDJn58Az5+fAP/ToADftaIA1qyjAM6mpQDWrKUA/9ilACt5pgDBoaYA2bOmADiB + pwDQp6cA1qynAP/apwDRqakA7MqqAN++qwDOrKwA/9+sAN+/rQDy060A5sqwAPLWsADcubEA37+xAP/k + sQA9jLMAP4yzAECMswC+prMAv62zANmzswDfv7YA37+3AP/qtwBQlrkAVpy5ALaluQC8s7kA3Lm5AN+/ + ugD867sA8uO9AP/wvQD16b8A//K/AP/2wwD/+MUAy8PGAP/5xgDy5scA8ubKAP/8ygCAs8wA///MAOzZ + zgD//88A8ubQAP//0ACPvNIArsPSANvR0gD//9MA/PnUAPz51QBeuNkArNPZAP//2QDy5t0A9ezeAP// + 3wD//+AA///iAHDC5gCk2OYAv9nmAP//6ACi4+wAm8ryAN/s8gDQ7/IA2/DyAIvO+QDa+fkA/Pn5AAAA + AACLxP8Akcz/AJPP/wCV2f8AluL/AJfs/wDi//8A5v//AOj//wDs//8A7///APP//wD0//8A+f//APz/ + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNzAQEBAXNzc3Nzc3Nzc3NzIgoOCgQBAQEBAQFzc3NzcyIMFB8W + EQ8LBQIAAQEBc3MiGhMtNzAkHxcSEA0KAwFzIjQyFUpNS0A3MCQYCwoBcyJITzMjXVxYUk1HGRAKAXMi + UFxWJz9qZmReISArCgFzIldlUSMKRmJjKi5MSQoBcylVNR5bb048CiYxVlQKAXMsCkRygoB+fHpxLzZh + CgFzHQlBg4ODgX99e24bPgoBc3MdOm1pWVM5OCUGCAoKAXNzcygHQl9ncHZ1dEMKAXNzc3NzHR1reXh3 + bDsBAXNzc3Nzc3MdHWBoWhwBAXNzc3Nzc3Nzc3M9PUUBc3Nzc3PD/wAAgA8AAIABAACAAAAAgAAAAIAA + AACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAADgAQAA8AMAAPgHAAD+HwAAKAAAABAAAAAgAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2hoWcoXVx23JNRuVGKh7dOh8TzUAkGL1LLiOpTzEmiksu + JWJDJh1GSi4jOlI0Jy9TNSoiTC8mFkQzIgwAAAAAwpGQzsyZmf/Wo5n/zJmZ/7qKif2WbGj4c1BI708x + Jt84HxLNPSIWwUksIK9OMieVTzEnc0MmHUZEKRstAAAAAMKRkM7PnJn/36+b///ToP/yw5z/6LWZ/9uo + mf/Om5n/w5KR/p90cPp8V1DyY0E45jofE9E5HxK6RikfjQAAAADCkZDO78Ge/8+dmv/syqr//+Sx///f + rP//2KX//9Og//XFnP/qt5n/3aqZ/9Cdmf/MmZn/oHVx9jcdEbMAAAAAwpGQzvLWsP/y063/z5+c//Xp + v///+MX///K////qt///5LH//9+s///Ypf/1x53/zpuZ/8yZmf80Gw69AAAAAMKRkM7y473///nG/+bK + sP/WrKX//PnU////0////9D///zK///4xf/867v/1qee/92qmf/MmZn/MxoNvwAAAADCkZDO8ubH//// + 0////8//2bOm/9+/t////+j////i////3//8+dX/1qyj/9+1ov//2qf/zJmZ/zMaDb8AAAAAwpGQzvLm + 0P///+D/8ubK/9aspf/MmZn/37+6//Lm3f/17N7/1qyn/9++q///9sP///C9/8yZmf8zGg2/AAAAAMSS + kc3s2c7/3Lmx/8+fn//b0dL/2/Dy/8vDxv+/rbP/zJmZ/8Ghpv/fv63////P////zP/MmZn/MxoNvwAA + AADFk5PKzJmZ/7yzuf/8+fn//P////T////v////6P///+L////a+fn/zqys/9+/sf///9n/zJmZ/zQb + Dr0AAAAAxJKSmZmMmf9Qlrn/////////////////+f////P////s////5v///9Dv8v+zmZ//37+2/8yZ + mf84HRGyAAAAAE0zMwidiZKqQIyz/9/s8v+/2eb/j7zS/4CzzP8/jLP/PYyz/yt5pv9Adpn/c4OZ/8yZ + mf/MmZn/TC4kiAAAAACAAAACRi4XCRFoltVNeZn/Vpy5/1642f9wwub/i875/5PP//+RzP//i8T//7al + uf/MmZn/pHh1u0wuJjYAAAAAAAAAAIAAAAJGLi4JwI+Ojcmfn/+i4+z/l+z//5bi//+V2f//m8ry/76m + s//BkI/zjGVfgE8zJSxVNSsTAAAAAAAAAAAAAAAAgAAAAk0zMwi8i4pwyZ+f/6zT2f+k2Ob/rsPS/8md + n/+oe3jOaUg/Uk83KyJLPC0OZjMzBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMyZmVDMmZm/zJmZv8yZ + ma/MmZlAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAEBgABzc4AAc3OAAHNzgAAKDoAAAQGAAAEBgABzc4AA + DBSAABEPgAACAIAAAXOAABoTwAAwJOAAEhD8HwMB + + + + 124, 17 + + + 375, 16 + + + 50 + + + + AAABAAIAEBAAAAAAAABoBQAAJgAAABAQAAAAAAAAaAQAAI4FAAAoAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAg2BZAGZmZgChd3MAo3p2ALuLigDDkpEAQHaZAE15mQBzg5kAmYyZAMyZ + mQDOm5kAz5yZANCdmQDWo5kA26iZAN2qmQDotZkA6reZAM+dmgDfr5sAz5+cAPLDnAD1xZwA9cedANan + ngDvwZ4As5mfAMmdnwDJn58Az5+fAP/ToADftaIA1qyjAM6mpQDWrKUA/9ilACt5pgDBoaYA2bOmADiB + pwDQp6cA1qynAP/apwDRqakA7MqqAN++qwDOrKwA/9+sAN+/rQDy060A5sqwAPLWsADcubEA37+xAP/k + sQA9jLMAP4yzAECMswC+prMAv62zANmzswDfv7YA37+3AP/qtwBQlrkAVpy5ALaluQC8s7kA3Lm5AN+/ + ugD867sA8uO9AP/wvQD16b8A//K/AP/2wwD/+MUAy8PGAP/5xgDy5scA8ubKAP/8ygCAs8wA///MAOzZ + zgD//88A8ubQAP//0ACPvNIArsPSANvR0gD//9MA/PnUAPz51QBeuNkArNPZAP//2QDy5t0A9ezeAP// + 3wD//+AA///iAHDC5gCk2OYAv9nmAP//6ACi4+wAm8ryAN/s8gDQ7/IA2/DyAIvO+QDa+fkA/Pn5AAAA + AACLxP8Akcz/AJPP/wCV2f8AluL/AJfs/wDi//8A5v//AOj//wDs//8A7///APP//wD0//8A+f//APz/ + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNzAQEBAXNzc3Nzc3Nzc3NzIgoOCgQBAQEBAQFzc3NzcyIMFB8W + EQ8LBQIAAQEBc3MiGhMtNzAkHxcSEA0KAwFzIjQyFUpNS0A3MCQYCwoBcyJITzMjXVxYUk1HGRAKAXMi + UFxWJz9qZmReISArCgFzIldlUSMKRmJjKi5MSQoBcylVNR5bb048CiYxVlQKAXMsCkRygoB+fHpxLzZh + CgFzHQlBg4ODgX99e24bPgoBc3MdOm1pWVM5OCUGCAoKAXNzcygHQl9ncHZ1dEMKAXNzc3NzHR1reXh3 + bDsBAXNzc3Nzc3MdHWBoWhwBAXNzc3Nzc3Nzc3M9PUUBc3Nzc3PD/wAAgA8AAIABAACAAAAAgAAAAIAA + AACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAADgAQAA8AMAAPgHAAD+HwAAKAAAABAAAAAgAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2hoWcoXVx23JNRuVGKh7dOh8TzUAkGL1LLiOpTzEmiksu + JWJDJh1GSi4jOlI0Jy9TNSoiTC8mFkQzIgwAAAAAwpGQzsyZmf/Wo5n/zJmZ/7qKif2WbGj4c1BI708x + Jt84HxLNPSIWwUksIK9OMieVTzEnc0MmHUZEKRstAAAAAMKRkM7PnJn/36+b///ToP/yw5z/6LWZ/9uo + mf/Om5n/w5KR/p90cPp8V1DyY0E45jofE9E5HxK6RikfjQAAAADCkZDO78Ge/8+dmv/syqr//+Sx///f + rP//2KX//9Og//XFnP/qt5n/3aqZ/9Cdmf/MmZn/oHVx9jcdEbMAAAAAwpGQzvLWsP/y063/z5+c//Xp + v///+MX///K////qt///5LH//9+s///Ypf/1x53/zpuZ/8yZmf80Gw69AAAAAMKRkM7y473///nG/+bK + sP/WrKX//PnU////0////9D///zK///4xf/867v/1qee/92qmf/MmZn/MxoNvwAAAADCkZDO8ubH//// + 0////8//2bOm/9+/t////+j////i////3//8+dX/1qyj/9+1ov//2qf/zJmZ/zMaDb8AAAAAwpGQzvLm + 0P///+D/8ubK/9aspf/MmZn/37+6//Lm3f/17N7/1qyn/9++q///9sP///C9/8yZmf8zGg2/AAAAAMSS + kc3s2c7/3Lmx/8+fn//b0dL/2/Dy/8vDxv+/rbP/zJmZ/8Ghpv/fv63////P////zP/MmZn/MxoNvwAA + AADFk5PKzJmZ/7yzuf/8+fn//P////T////v////6P///+L////a+fn/zqys/9+/sf///9n/zJmZ/zQb + Dr0AAAAAxJKSmZmMmf9Qlrn/////////////////+f////P////s////5v///9Dv8v+zmZ//37+2/8yZ + mf84HRGyAAAAAE0zMwidiZKqQIyz/9/s8v+/2eb/j7zS/4CzzP8/jLP/PYyz/yt5pv9Adpn/c4OZ/8yZ + mf/MmZn/TC4kiAAAAACAAAACRi4XCRFoltVNeZn/Vpy5/1642f9wwub/i875/5PP//+RzP//i8T//7al + uf/MmZn/pHh1u0wuJjYAAAAAAAAAAIAAAAJGLi4JwI+Ojcmfn/+i4+z/l+z//5bi//+V2f//m8ry/76m + s//BkI/zjGVfgE8zJSxVNSsTAAAAAAAAAAAAAAAAgAAAAk0zMwi8i4pwyZ+f/6zT2f+k2Ob/rsPS/8md + n/+oe3jOaUg/Uk83KyJLPC0OZjMzBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMyZmVDMmZm/zJmZv8yZ + ma/MmZlAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAEBgABzc4AAc3OAAHNzgAAKDoAAAQGAAAEBgABzc4AA + DBSAABEPgAACAIAAAXOAABoTwAAwJOAAEhD8HwMB + + + \ No newline at end of file diff --git a/CheckMail2/CheckMail/CheckMail/Properties/AssemblyInfo.cs b/CheckMail2/CheckMail/CheckMail/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..950c587 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/Properties/AssemblyInfo.cs @@ -0,0 +1,34 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CheckMail")] +[assembly: AssemblyDescription("Noch ein Programm, welches ich meinem Schatz gewidmet habe, aber diesmal hoffentlich auch ein fr sie persnlich sinnvolles. :-) Einfach Web.de Benutzername und Passwort einstellen, Intervall des berprfens festlegen, alles minimieren und wie gewohnt weiterarbeiten. Im gewhlten zeitlichen Abstand erscheint am Trayicon des Programms ein Balloon-Tooltip der die Anzahl der eventuell neuen Mails und deren Absender anzeigt.")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Fr meine liebste Angelika")] +[assembly: AssemblyProduct("CheckMail")] +[assembly: AssemblyCopyright("Copyright 2005 by Johannes Schauer")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8b5e833c-fac2-4f03-a850-9023fd2b3439")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.1.0.3")] +[assembly: AssemblyFileVersion("1.1.0.3")] +[assembly: System.Resources.NeutralResourcesLanguage("de-DE")] diff --git a/CheckMail2/CheckMail/CheckMail/Properties/Resources.Designer.cs b/CheckMail2/CheckMail/CheckMail/Properties/Resources.Designer.cs new file mode 100644 index 0000000..9651bb7 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "CheckMail.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "CheckMail.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "CheckMail.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace CheckMail.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CheckMail.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/CheckMail2/CheckMail/CheckMail/Properties/Resources.resx b/CheckMail2/CheckMail/CheckMail/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CheckMail2/CheckMail/CheckMail/Properties/Settings.Designer.cs b/CheckMail2/CheckMail/CheckMail/Properties/Settings.Designer.cs new file mode 100644 index 0000000..a4f6815 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/Properties/Settings.Designer.cs @@ -0,0 +1,51 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="CheckMail.Properties.Settings.get_Default():CheckMail.Properties.Settings")] + +namespace CheckMail.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("J.Schauer")] + public string user { + get { + return ((string)(this["user"])); + } + set { + this["user"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("porenta")] + public string pass { + get { + return ((string)(this["pass"])); + } + set { + this["pass"] = value; + } + } + } +} diff --git a/CheckMail2/CheckMail/CheckMail/Properties/Settings.settings b/CheckMail2/CheckMail/CheckMail/Properties/Settings.settings new file mode 100644 index 0000000..580770b --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/Properties/Settings.settings @@ -0,0 +1,14 @@ + + + + + + + + J.Schauer + + + porenta + + + \ No newline at end of file diff --git a/CheckMail2/CheckMail/CheckMail/Settings.cs b/CheckMail2/CheckMail/CheckMail/Settings.cs new file mode 100644 index 0000000..6ff8792 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/Settings.cs @@ -0,0 +1,28 @@ +namespace CheckMail.Properties { + + + // This class allows you to handle specific events on the settings class: + // The SettingChanging event is raised before a setting's value is changed. + // The PropertyChanged event is raised after a setting's value is changed. + // The SettingsLoaded event is raised after the setting values are loaded. + // The SettingsSaving event is raised before the setting values are saved. + internal sealed partial class Settings { + + public Settings() { + // // To add event handlers for saving and changing settings, uncomment the lines below: + // + // this.SettingChanging += this.SettingChangingEventHandler; + // + // this.SettingsSaving += this.SettingsSavingEventHandler; + // + } + + private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { + // Add code to handle the SettingChangingEvent event here. + } + + private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { + // Add code to handle the SettingsSaving event here. + } + } +} diff --git a/CheckMail2/CheckMail/CheckMail/app.config b/CheckMail2/CheckMail/CheckMail/app.config new file mode 100644 index 0000000..57410f0 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/app.config @@ -0,0 +1,24 @@ + + + + +
+ + +
+ + + + + + J.Schauer + + + porenta + + + + + + + \ No newline at end of file diff --git a/CheckMail2/CheckMail/CheckMail/mail.ico b/CheckMail2/CheckMail/CheckMail/mail.ico new file mode 100644 index 0000000..54291e6 Binary files /dev/null and b/CheckMail2/CheckMail/CheckMail/mail.ico differ diff --git a/CheckMail2/CheckMail/CheckMail/publish/CheckMail.application b/CheckMail2/CheckMail/CheckMail/publish/CheckMail.application new file mode 100644 index 0000000..35ce245 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/publish/CheckMail.application @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + QIINJDl5CGPQc+KssJZCJh77VU4= + + + +GIVMHoBlUVkdBdM5x8lxxpEdnps=su5U5Nh3Jww+ZI2gSIoSWs8Z0OA=fhrKqUE48TgTw74s8oUGdCnoxlsloy5jj02DiunH/nvIqtEtsLtX+6U8lSx9mh8YrmfxJU85RTIdtGEITXDNgBbZnarjxTX96f/5LuEwEktgj45ALyUdqVDUcyy0Dq1h0ap6kwCViYrHKrH2sSLFWBMmCL1mfzeaGZ2VziQDBuo=xHIZyznsihMfToKiA1FUq5U3jSvBxsRRlZCypIl+2nLjeN8eBgcW24NWbwWz7F9PHiijG3N+ndvPJo4hKIyc5y85ptqLK10ARy7nIo1QWKFqLklhvb4yap2hIhaWUZEgQDC68BydQuwk4joQIn04LS6qzknaG8PFNIDMGnODUD0=AQABCN=JOSCH\Johannes1wLQ5QjD477HG05Dp1Lk3VQnQSA=U1yxmYYpvGlgTrZ6E5B8MpTm4a8mLnmhrH40rDpWTegf/UVlVD1fBljlYsDrxs1lR4pXf0DakTG5v/x5KzOyqJGCH7Tp5eloqIcgFv+fbNPMdy8ZfMhH+D160e/lDnQJUrgzzxZS6IC91SXTHpfWxRmuE4ajoChWEZrecz7V0jI=xHIZyznsihMfToKiA1FUq5U3jSvBxsRRlZCypIl+2nLjeN8eBgcW24NWbwWz7F9PHiijG3N+ndvPJo4hKIyc5y85ptqLK10ARy7nIo1QWKFqLklhvb4yap2hIhaWUZEgQDC68BydQuwk4joQIn04LS6qzknaG8PFNIDMGnODUD0=AQABMIIByTCCATagAwIBAgIQh9SthCpWXpdMLgXvuNaBtzAJBgUrDgMCHQUAMCcxJTAjBgNVBAMeHABKAE8AUwBDAEgAXABKAG8AaABhAG4AbgBlAHMwHhcNMDUwNjExMTExNDUzWhcNMDYwNjExMTcxNDUzWjAnMSUwIwYDVQQDHhwASgBPAFMAQwBIAFwASgBvAGgAYQBuAG4AZQBzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEchnLOeyKEx9OgqIDUVSrlTeNK8HGxFGVkLKkiX7acuN43x4GBxbbg1ZvBbPsX08eKKMbc36d288mjiEojJznLzmm2osrXQBHLucijVBYoWouSWG9vjJqnaEiFpZRkSBAMLrwHJ1C7CTiOhAifTgtLqrOSdobw8U0gMwac4NQPQIDAQABMAkGBSsOAwIdBQADgYEAcr9aTBqIwCSFVSvwkdG28Sn7/U3xjdbbggv8HzsVmpmeu/xzUOhQKQuxbPn8qy+s7BCFgrJj/ZFGru5qKrvh9hoY1cbzQYkFjbQrZItPAhecfWwvAYO+f4BTEdCbWGcW/3VYYHTLWlnqCbh2F00iZx2lZN4D7n83j6y7Vb+8O7k= \ No newline at end of file diff --git a/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/CheckMail.exe.config.deploy b/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/CheckMail.exe.config.deploy new file mode 100644 index 0000000..57410f0 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/CheckMail.exe.config.deploy @@ -0,0 +1,24 @@ + + + + +
+ + +
+ + + + + + J.Schauer + + + porenta + + + + + + + \ No newline at end of file diff --git a/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/CheckMail.exe.deploy b/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/CheckMail.exe.deploy new file mode 100644 index 0000000..b97ec66 Binary files /dev/null and b/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/CheckMail.exe.deploy differ diff --git a/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/CheckMail.exe.manifest b/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/CheckMail.exe.manifest new file mode 100644 index 0000000..b47b5e8 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/CheckMail.exe.manifest @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + otd9kdzq9r9Dn1kFIuvnUrmTgEE= + + + + + + + + + + + + Gb6X3sSKlKvI5HTX0L5WdDRxGws= + + + + + + + + + + nWSh2PShrxGp3uPgHApdDng+tN4= + + + + + + + + + 9/d9xwiHCxvhyB391mnYEFYrBYo= + + +LrSHOIHTPRJCW0JFw1C6n1BAjI8=1K72rjYSk+h2wDOcvU8Uage8arY=unggQOM9aCVSAdSQvytctHiHzKdd+v7crru1Exn4/STO4PCBf2rMi/Vj+sXReHnhyRvma9RGbz3pWryk5KccrjifFL+fn/Sa814H6pTMKCmOcImbLVwFFN93Ica3GmwzOBLdx0ac3r2v+ol3NNYsvy6r+r8kh15Hpz5zxIfVUkI=xHIZyznsihMfToKiA1FUq5U3jSvBxsRRlZCypIl+2nLjeN8eBgcW24NWbwWz7F9PHiijG3N+ndvPJo4hKIyc5y85ptqLK10ARy7nIo1QWKFqLklhvb4yap2hIhaWUZEgQDC68BydQuwk4joQIn04LS6qzknaG8PFNIDMGnODUD0=AQABCN=JOSCH\Johannes1rgqK3s3kIqCA2BnPE8cMKPJTTk=j6sfqTf25qOfbKsNU4C27WOSqLvnb7pK0IYvSvv8qbZYH7Tgm2ZBZ06rK1rq1VG5q6KUQbE3gmVfWEqLaiT++GX+qtwUQRC5Mz2IGI9pcqa0NOJa2Kb1jJOQQyif7Cy7OLy0FZGTZfH8c+JpaPCELXnX3J07qDfteugynUtSOhU=xHIZyznsihMfToKiA1FUq5U3jSvBxsRRlZCypIl+2nLjeN8eBgcW24NWbwWz7F9PHiijG3N+ndvPJo4hKIyc5y85ptqLK10ARy7nIo1QWKFqLklhvb4yap2hIhaWUZEgQDC68BydQuwk4joQIn04LS6qzknaG8PFNIDMGnODUD0=AQABMIIByTCCATagAwIBAgIQh9SthCpWXpdMLgXvuNaBtzAJBgUrDgMCHQUAMCcxJTAjBgNVBAMeHABKAE8AUwBDAEgAXABKAG8AaABhAG4AbgBlAHMwHhcNMDUwNjExMTExNDUzWhcNMDYwNjExMTcxNDUzWjAnMSUwIwYDVQQDHhwASgBPAFMAQwBIAFwASgBvAGgAYQBuAG4AZQBzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEchnLOeyKEx9OgqIDUVSrlTeNK8HGxFGVkLKkiX7acuN43x4GBxbbg1ZvBbPsX08eKKMbc36d288mjiEojJznLzmm2osrXQBHLucijVBYoWouSWG9vjJqnaEiFpZRkSBAMLrwHJ1C7CTiOhAifTgtLqrOSdobw8U0gMwac4NQPQIDAQABMAkGBSsOAwIdBQADgYEAcr9aTBqIwCSFVSvwkdG28Sn7/U3xjdbbggv8HzsVmpmeu/xzUOhQKQuxbPn8qy+s7BCFgrJj/ZFGru5qKrvh9hoY1cbzQYkFjbQrZItPAhecfWwvAYO+f4BTEdCbWGcW/3VYYHTLWlnqCbh2F00iZx2lZN4D7n83j6y7Vb+8O7k= \ No newline at end of file diff --git a/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/de/CheckMail.resources.dll.deploy b/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/de/CheckMail.resources.dll.deploy new file mode 100644 index 0000000..3917559 Binary files /dev/null and b/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/de/CheckMail.resources.dll.deploy differ diff --git a/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/mail.ico.deploy b/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/mail.ico.deploy new file mode 100644 index 0000000..54291e6 Binary files /dev/null and b/CheckMail2/CheckMail/CheckMail/publish/CheckMail_1_1_0_3/mail.ico.deploy differ diff --git a/CheckMail2/CheckMail/CheckMail/publish/setup.exe b/CheckMail2/CheckMail/CheckMail/publish/setup.exe new file mode 100644 index 0000000..ece7a05 Binary files /dev/null and b/CheckMail2/CheckMail/CheckMail/publish/setup.exe differ diff --git a/CheckMail2/CheckMail/CheckMail/Über.Designer.cs b/CheckMail2/CheckMail/CheckMail/Über.Designer.cs new file mode 100644 index 0000000..bfb557c --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/Über.Designer.cs @@ -0,0 +1,183 @@ +namespace CheckMail +{ + partial class Über + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + 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(Über)); + this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.logoPictureBox = new System.Windows.Forms.PictureBox(); + this.labelProductName = new System.Windows.Forms.Label(); + this.labelVersion = new System.Windows.Forms.Label(); + this.labelCopyright = new System.Windows.Forms.Label(); + this.labelCompanyName = new System.Windows.Forms.Label(); + this.textBoxDescription = new System.Windows.Forms.TextBox(); + this.okButton = new System.Windows.Forms.Button(); + this.tableLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); + this.SuspendLayout(); + // + // tableLayoutPanel + // + this.tableLayoutPanel.ColumnCount = 2; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F)); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67F)); + this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0); + this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0); + this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1); + this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2); + this.tableLayoutPanel.Controls.Add(this.labelCompanyName, 1, 3); + this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4); + this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5); + this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel.Location = new System.Drawing.Point(9, 9); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.RowCount = 6; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.Size = new System.Drawing.Size(417, 265); + this.tableLayoutPanel.TabIndex = 0; + // + // logoPictureBox + // + this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image"))); + this.logoPictureBox.Location = new System.Drawing.Point(3, 3); + this.logoPictureBox.Name = "logoPictureBox"; + this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6); + this.logoPictureBox.Size = new System.Drawing.Size(131, 259); + this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.logoPictureBox.TabIndex = 12; + this.logoPictureBox.TabStop = false; + // + // labelProductName + // + this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelProductName.Location = new System.Drawing.Point(143, 0); + this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelProductName.MaximumSize = new System.Drawing.Size(0, 17); + this.labelProductName.Name = "labelProductName"; + this.labelProductName.Size = new System.Drawing.Size(271, 17); + this.labelProductName.TabIndex = 19; + this.labelProductName.Text = "CheckMail"; + this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelVersion + // + this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelVersion.Location = new System.Drawing.Point(143, 26); + this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17); + this.labelVersion.Name = "labelVersion"; + this.labelVersion.Size = new System.Drawing.Size(271, 17); + this.labelVersion.TabIndex = 0; + this.labelVersion.Text = "Version 1.1"; + this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelCopyright + // + this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelCopyright.Location = new System.Drawing.Point(143, 52); + this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17); + this.labelCopyright.Name = "labelCopyright"; + this.labelCopyright.Size = new System.Drawing.Size(271, 17); + this.labelCopyright.TabIndex = 21; + this.labelCopyright.Text = "Copyright Johannes Schauer"; + this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelCompanyName + // + this.labelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelCompanyName.Location = new System.Drawing.Point(143, 78); + this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 17); + this.labelCompanyName.Name = "labelCompanyName"; + this.labelCompanyName.Size = new System.Drawing.Size(271, 17); + this.labelCompanyName.TabIndex = 22; + this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // textBoxDescription + // + this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBoxDescription.Location = new System.Drawing.Point(143, 107); + this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); + this.textBoxDescription.Multiline = true; + this.textBoxDescription.Name = "textBoxDescription"; + this.textBoxDescription.ReadOnly = true; + this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBoxDescription.Size = new System.Drawing.Size(271, 126); + this.textBoxDescription.TabIndex = 23; + this.textBoxDescription.TabStop = false; + // + // okButton + // + this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.okButton.Location = new System.Drawing.Point(339, 239); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(75, 23); + this.okButton.TabIndex = 24; + this.okButton.Text = "&OK"; + // + // Über + // + this.AcceptButton = this.okButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(435, 283); + this.Controls.Add(this.tableLayoutPanel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Über"; + this.Padding = new System.Windows.Forms.Padding(9); + this.ShowIcon = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Über..."; + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + private System.Windows.Forms.PictureBox logoPictureBox; + private System.Windows.Forms.Label labelProductName; + private System.Windows.Forms.Label labelVersion; + private System.Windows.Forms.Label labelCopyright; + private System.Windows.Forms.Label labelCompanyName; + private System.Windows.Forms.TextBox textBoxDescription; + private System.Windows.Forms.Button okButton; + } +} diff --git a/CheckMail2/CheckMail/CheckMail/Über.cs b/CheckMail2/CheckMail/CheckMail/Über.cs new file mode 100644 index 0000000..7ef5c84 --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/Über.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using System.Reflection; + +namespace CheckMail +{ + partial class Über : Form + { + public Über() + { + InitializeComponent(); + + // Initialize the AboutBox to display the product information from the assembly information. + // Change assembly information settings for your application through either: + // - Project->Properties->Application->Assembly Information + // - AssemblyInfo.cs + this.Text = String.Format("About {0}", AssemblyTitle); + this.labelProductName.Text = AssemblyProduct; + this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion); + this.labelCopyright.Text = AssemblyCopyright; + this.labelCompanyName.Text = AssemblyCompany; + this.textBoxDescription.Text = AssemblyDescription; + } + + #region Assembly Attibute Accessors + + public string AssemblyTitle + { + get + { + // Get all Title attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); + // If there is at least one Title attribute + if (attributes.Length > 0) + { + // Select the first one + AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; + // If it is not an empty string, return it + if (titleAttribute.Title != "") + return titleAttribute.Title; + } + // If there was no Title attribute, or if the Title attribute was the empty string, return the .exe name + return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); + } + } + + public string AssemblyVersion + { + get + { + return Assembly.GetExecutingAssembly().GetName().Version.ToString(); + } + } + + public string AssemblyDescription + { + get + { + // Get all Description attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); + // If there aren't any Description attributes, return an empty string + if (attributes.Length == 0) + return ""; + // If there is a Description attribute, return its value + return ((AssemblyDescriptionAttribute)attributes[0]).Description; + } + } + + public string AssemblyProduct + { + get + { + // Get all Product attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); + // If there aren't any Product attributes, return an empty string + if (attributes.Length == 0) + return ""; + // If there is a Product attribute, return its value + return ((AssemblyProductAttribute)attributes[0]).Product; + } + } + + public string AssemblyCopyright + { + get + { + // Get all Copyright attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); + // If there aren't any Copyright attributes, return an empty string + if (attributes.Length == 0) + return ""; + // If there is a Copyright attribute, return its value + return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; + } + } + + public string AssemblyCompany + { + get + { + // Get all Company attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); + // If there aren't any Company attributes, return an empty string + if (attributes.Length == 0) + return ""; + // If there is a Company attribute, return its value + return ((AssemblyCompanyAttribute)attributes[0]).Company; + } + } + #endregion + } +} diff --git a/CheckMail2/CheckMail/CheckMail/Über.resx b/CheckMail2/CheckMail/CheckMail/Über.resx new file mode 100644 index 0000000..cbf3d3c --- /dev/null +++ b/CheckMail2/CheckMail/CheckMail/Über.resx @@ -0,0 +1,607 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAAHgAAAEGCAIAAAAhWcaAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAcQNJREFUeF7tfQdc + lFfa/ez/K/tlExUVmN7ovQ1D74Kg2BWs2CvYEVEEG0VALHTpAip2xd57jzHGmF5MsokxdbPV/XY13//c + 9xleX2YAMTGJZnfy/PiNiATOnDn3POXe+xtZpew3v/mNCP/9v9/85j9+g4+i/xDhyf/7z//HnvzXb0T/ + yf7InuOvfiNij/8TiR6KRN+L/u/h/7EnDwTPv2fP2Sf/T/T9599///r3D28/nDFsRp8+fezt7f8f98D/ + zuiBb8l+hl/3A0DLK+WKKoWyWqmsUapqVeqNanW9WrNJo23SardptTu1VnusrA9YWx+2tj5qbXPCxuYU + Fydt8Nz6GPd5/G2ztdUuK6vtVlZbray2WFk1WllttLKqs9LkalSjVXJ3eW5u7htvvPHnP//5r3/96/37 + 9//3f//3H//4xz//+c8HDx48fPjwe+7xf7/ehwgoy6sMQKtqVAzoWrWmTqOp12gbtNpGrdVmDrhtVlY7 + raz3Wlvvs7Y+aG19xJpBzEcL1ta7ra12tMJaW6vV1mjV2WrlcKXMSVZSUvLJJ5/8C8LNgCY6M5RrWlCu + 02g3alnUa60aOHpusmKIN7UgvodDHEQ+xIGOANZ4AfDJvdZ4SYS8ZlhXa7VVWvVStXKQUmYl27x58x// + +Md/KbhFQFlRbQAaXFbXMTo/QrneyooPHnEQHPpAHOcRB8oIQE9YQ0bwBS0aYsC6Uqut0KrmqxSRiqSk + pBMnTvBw//3vf/91i4lIUalQVilV1RydazjR2GgA+hHERnAbIQ5d3sWpSjOHMgVhjb/CmwDvho1WBqwr + tNoNWm2JVjVFJfeRr1q16t133xXCDeE20u5fh26LFGUKRQXDmqFcq0Fo67QsNmrbBtqU4CQp4PgOK2i0 + AXGADugh2bQ8GmFdrtWWaTWZGuUwpcxW1tTU9Ic//AFw/+Uvf/nb3/4Gdv/61kmRYo1CuV6pKlWpylXq + SrWmWqOpYVgzzyAMIakfS3BICiEOYeGXR7we9QJel2m1pRy156oUYYrFixffuHEDcP/pT39qz5Y819QW + KXIVijyFMk+pWqNSF6o1pRpNuUYLMa1ibgH+rFOIQ0xMFRz2A5ICoKEhvBVpaI11iVZbrNXkaZQjmSdp + bGz85ptvvvvuO4JbKNzPuwUUKbIVyhylapVKladSr1YjNGs12vWMa0xMgTgMA2xDbec4bgQ3RAPSAROC + ANb88lhnxb4t9Bq8xv+oSKsp1KjmqRThiiVLlty+ffvbb7/llcR0kXweqS1SZCqUWUpVjgpYq3PV6jy1 + Jl+jKeACiBdyb3AB4p3iuBBukm/ATSFIZ1phXajVrNeoc9TKOKXMTrZ79+6vv/66TSV5TqktUq5QqjJV + qiwVcgr8nppVGuRyDGsebkK8iGMfONh5gpvCDUYT1rwVEfAapMb/SLNGo0pUyf3lq1ev/uyzz6Ak5Emw + SD7X1OaAXqlSZ6pZZKk1ORoWBHceB/fqFoKv0QALI0l5DMGNtJvYTcFjXdOiIRDr9Qas1UvUiliFVCa9 + dOnSV199ZUrt5y5xFwFlHmhNlsYQ2QK4TQm+joMbBG9R8CeDm/Id0hDe9pFe81hz2oUiicxRtm3bti++ + +OJ5pzYD+hGdeaDpCcHdHsGhJ8VPoidG7AbKIDVhTbYPLxuwxsIIXuPdQ1hDRvzk69evv3fvnpDapl77 + GV8hRYqpClU6w/oRnY3gxh87hru1fD+e3aicUPEEKFOYYr3uEdbqRWpFFDPab7311pdffskbEr4E+FzI + iCggIEBqJ5UHyxXDFKqZqo7gFuqJkXzz7O6MmAipTaVBfDTFGgsjmZ8CDRYP5WClVCk9f/48qA1DAq9t + tEI+425E1NDQUFRUlJKSMmLECD8/P7mnXBmrVE1WaZa26LURwTtgN2k30mvAjSUO1tso32kvpQTKFJTO + 8BoiwNog2fayffv2ff7558+djIi2b9++c+fOXdwD7rWgoGD69OlRUVFyN7myjxKlH82KthA3hbuFfcyZ + kPXujBEkC0hKgsATI702wnoy6yEggYTzwwpJMkIp+zNeihLt37//wIEDBw8ePHToEJ7gAco0NzeD5jNn + zmSIe8lRRFbNMlEVXklMrfcaY9/dKWoT4o/FeiYr+5WVlX366aeQEXIjqEaZSvYztTyKUBQ+efLkKe6B + J8ePHz927NiRI0cId4AOjk+cOFGmkSlCFaqxJpLSgXCTkoDaXNnkMUk8L9yENZVVSUOQNLaYEIMVmaeS + B8rXrFmDZk3Hkv3sYC26zD2uXLmCj8gOLly4cO7cuTNnzgB3vAY86DCzqEIMGDCAEXyYUr1A4FKMXKAw + q/wB1CYxwccOsVYvVOOFz87O/vjjj4WSLUwgn6nlUfTaa6/dunULH2/evPnqq6++8sor169fv3r1KnAH + 6FjlATqYDsSPHj0Kmq9bt27s2LEyZ5myvxIVzlYJTnuOW0ht0/qUUQGWqE3BY13Kqk6teL1ao05TKyIU + K1as+Oijj+7evQvnxyeQvMt+drAWocHxXsvj7bfffvPNN9GrBvTAHQXil19+GaCD6UD87NmzoDm0BYhX + V1djzZTZy5hFmcPBDV53RrV5Q9JBvbs9rJHI8EsungDrdDW6YkuXLr1z5w6/PPIlVn55fBZa7KLftzyg + d3gb4if+8MMPgfw777zDgw6mg+bXrl0DzXnEwXGs/rNmzWJw91Oq56kfYd0etcmQtFSmOlohQXOCG0+I + 1/hX4LUQaxRh8jXqDJbOZGRk4Cen5ZG3IsLs8RfHWgSThDcdbCme4KeE3oEaAJ9A/+CDDwA6Mf3111/n + ESeOQ1Wg45s2bUKnVeYiUw5Rqhe3lKWMsOZrgbyMtGn+2uzjcNxnyymwLtFqkDTyvOaxjlQsW7YMFMFP + zlsRah08I7wWQdeQZcEh4SOewy0BdEDPgw6mQwSJ5oQ4hIUQxxJ68eJFLJ6QlNra2smTJ8u95aoxnJII + jbZRWYrSSOQ1cCOPlWyCnpvFeYQ1b645oBmvoSERiszMTDBDiDVs3zOCtQgvO/9AUguBMwKdmE40FyIO + KccSCh2HpBDBT58+XVxcHB8fj0aJaoaqI6x5N9KmZLfHa+rLcE10VrkmXvNYY20MVeTl5QFr3vaRxX4W + sBbRD4EHyup4DtsPhwTo8fPxoEP1UF4gmhPipCpYSIWSAoKTnqxcuZIJ9yAlysqstE0ZjUmBm7VvqNb6 + WJdNpOZnFvBuQJGPN9c81ilqeYC8sLDw/ffff9awFqH0RQ+MweHRJuhgOtGcEOc5TjoOSUFdDY0+GBXS + E/hCpPUzZsxAo4SVTdrHGotbq+Wx49a7EGtKZHixJvOer4HjlOvlVVVVHWBNnu9nzmVEtBzTAz8BHm2C + TjQXIg4pB8FhYIng+MWg4KQnPNww3TJrmXKgEhraHq+fAOuWl4EpO/QdkyG8CWkhNcN6hgqFmq1btxph + LVwbf36sRUYvrBB0nulCmgNxXlWweBLB4VVgraDg0BMjuFFFgQVUBHKq3Y6GPDHWEGtK0GH4eBPCY52n + UU1UocN7+PBhHmsqifyCWBsDLcTdlOY84pByIcHxa5CCG8FNYgL3jYIJmlKqESqDWJs2JGH7hBa7PQ0R + kpo3fPzC2CIg6Hbi/4X6NXTsGcG6I6B50NtEnBZPnuCk4KQnQrih3fCCyDBRLUHuruijYF6bB1rY/O0M + 1oIXwDDMBxOCTiMtjAJS43+hHKCcO3culmve8+EnpLyRGup8a+Zn0OtOAW2KOOm4EcHJpeCX4dlN2o2l + EskOqihwgampqTAGqiSO2tSmEWLNr41GPkRo+EyxhgnhF0Ye61yNeoVa0UuRlZVlijVfe/rZsH4yoAlx + IcF5rwKOkJ4Q3CQm0G5aKskI0jqJ8qbMTaYap2JAt4c19NeoQcNjLVQVEmujhZFePHxnYL1AjeI1TAhe + bORceKthRaHaE2FNWw5+hgT9hwAtJLjQqJAZ5+GGmABu/GJwJjCC+D2xTkJJkOOgf8bcSJzyEdBCXqMk + Qv5aOIfWDqlZxkiVED6LEZCabeyYppI5yNDfwP+dak9U54OD4vsyP4MJ+VFAGxGc1xOCm8wJORPKdGBL + YLqJ2ugqjB8/HrVWvMENAiKYjTLkMlyObpiyNEoXOyPWHKkZ1lgYpVJoF2GNFx5rCXhAfRkqhvzUWD8F + oNuDm18qeeGGkiBhA7VRGgS1kdfMnj1b0VvBEkgjsaYcHeLL1Z4Y1qZ5ecdiTd+QMtJVGizC6enpWCog + Yni98ZPg5Rcavp9arJ8a0DzcJCb8Ugm4SbhJSYyoDf+HgQ3URtSpJlij9kSdMH56uAOsTZ01CUgLqfH9 + 5b7yyspKvMB4V0HKhEW+n8GEPGWghXCbKgkYBCXB25anNt7LYBm6JIoghSpZ1cZwJbCG/rZH6pYaiKEM + wjtrcnutSa2aqsLuApTRkb7y5poMn9HC+FO4vZ8EaKEz4eEmJcESBGqTasMDkCHBb45diMz2zeew5scq + ARYMHxZGXqz5bkBbJsTgrKnkRGUQntRcvUU5VIk0Fb4e64TQhPwMC+NPBbSRcJOS8Iskr9pkSGiFRPbI + ilDAGkALRlgNE8PV3DiOsPPSHtbk9ig1JwFpUWr1crUiRAF/idWYNyH8wkiFzJ9IrH9aoNtUEl61hTKC + 5A1Wl2ENXkNDhKQmseYFRNhRNMVa2B/gBYSUmiM1pibh9jC4gvYF1mSjhZEX66de3vs5gBYqCU9tkhFK + bSAjlNeAZfn5+YpgBQYbW/VhKWMkZ82T2khGhGUQ6g/w6aKA1GhHYFwCnWWkTrQwUuXaSKyfutv7mYBu + k9qU2pCMIK+B0QbWYBmmNZgPQWWVLzfD7VGXAAICQPnZD+re8u0uozoqantUb+JXRY7U6mVqrL1r165F + 6kTZOVaLnzqL+VmBJmrzJW8IolBG8KtSUoPlERMEimgFGybmsebdHjkQfn6sTax5AUG9SbgqUgsih0sX + bWQYyIK/FGYx5Kx/CgH5uYFuT0Yoh8S6xC+PycnJKL8JSW0oW1dyqyI/HUljTSa8NjgQvjnAr4oc0ExA + +ivnz5+PsiJlMbyzFrq9pyggvwDQRjJCboR3fuSy8WuDa9OmTcOZCK1I3ZIuGkhNA6hCsTZKFyHrqIEI + V8UWUrMUxkteU1OD1JycNdYJKjn9FG7vFwPaSEaEzo9cNrBGqxe1J7RLDFgDL6yKcCC0KgJffti3Lawf + FazJVpuQGntkRo8ejeYAnDU8D5Wc8Er/FALySwJtKtlUisLvyWMNHyZzl7GpM37rI+3koFWRDrfged2m + gMBWC1dFWL0W9cBmdNhq5EoQELi9n1RAfmGgO4M15vzkQXKDCeFJTbYaukGbM4yw5gWEXxWFuSJ5aih1 + tobl5RqWl8PtGQkIPxDyVFKYXx5ofnkUJutGvMYIErYdMlIDaH53KU9qfseRcGE0stVYFXmrJyR1tgb2 + BoUtoYBgQeZre8LmwI+pgTwTQJtaEdg+IdZQT0yJQFJp47Rh9wZPauHurvYcCHUGeKsnJPUsFcZ9MIhi + 5EAohXlaBetnBeiOsYYPwdAwjj9QzVYxoGlJ5KrVTKlpyyICMtIxqakAQolii3pgUhDTsHPmzMEcIRwI + 1ZtoVUT9i59QoI7XDyb1MwS0Kdb82kj+ur6+nmXnyGLQL8eSyCflEGja/Ny+WBvmQIxITZOYWRrMHGO0 + Hic9YRic6k1UA0F5gGz1j+/CPFtAt4c1mAWswTLMQaPUyYBGRs63BSAXRtueeQERrooogJS3DDeZknqg + MjExEU2fjlfFH0zqZw5o07URvEYGgTwCOTrKQMxZJ6kMQHOlaqYeEA06T4s/psIE61akJk8tUA91MiM1 + Rusx7sPbatNV8Qfnis8i0EZYU95IOToyNwzVwe3h/W7Y+M8viXQqCLCmcxNMV0Wa+gWpTZWa27SKjB+k + RpZEqyJf2KNcka9W/zBSP6NAm+aNhDWcAJJGtFlV8SoGdMvOUcOSKDx7RYi10OpRUk6JIu/zOKCZUjvI + tmzZgkEfKuyZ5oo/uF/+7AItxJrqIVRTxQIFbwBE8GZnQHM7B1iZCchyJ5UZzl5p04EQqYWeGvaDy1xo + exn2PmGKDHsYMF0vzBWFBZAfZj+eaaCNsKaaKrDGwoh0EXuEHm09p9IHAY3zm/jz9tpTaiqfUkeRlJoD + GscO4KDJPXv2mFo9vgDyw0j9rAPNY02tGeHCiNoeysqM0ZBpjCSg0AHvwZ12yLDmD8oywtqU1AKggTXG + 9dLS0mDbyerxBZAfSernAGgjrHmxxqwTmrlgJe2nM3gPOlaSP2yvPaXGP6HqB+/zWtQDWxRwCDP2sMLq + GeUvP4bUzwfQhDUVQ3ixRjkC1FMlqOjEISbTSAuhHnR+Jx0iSYejtklqlPRQOTFZEkFqvH5oXT5dUj9P + QFMPjBpgqIQgi4HnlXvIkSsaJsdIpun4ZToclU7rbFOpN7ROXlpkmin1CNXIkSOfLqmfG6DbE2t0ctGF + eQQ0J9OG81GBNU/q1qVqw7Av+TwT9UAPHskLdk4SqU3txw/w1M8T0EKsKYuBaGK9QrFJvVJtmEQgoOmw + ZQQEpD1SY34MyQtfO229JCr7Mp8HUsN+8J6aTxSF1Y9OlpmeM6B5sRYKCPRUGa80AM3l4uwIWqC8nxOQ + DkgNcRcuiUL1mMYmfXG8AHlqPlGkpiL1BJ7I5z2XQPPTqnB7SBfx1sY7HV6YOTxKW7Ae0hH5wLo9UpPP + w5JIWSIVTlu8B1sSfdlpkth9TYkiNRWNSnqdT16eP6CNBIRSGCg12gKGdi0BjQOs6ZB23PJApDapfjCl + xpLIlz5aA40y4bhx49DlouoH6lnUKUdti+rU1HzpZJnpuQTaVEBQ24T90K7lrn4g40FA0y0PROo2fR5a + t3yWSOl4y6lo2ISLdiI6L9jjDntDozaoU/PzY9R86SSpn2OgeQGhFIZ56ikqQ2GaHB7drgGs93Gkxmtg + SmosiSh98OohAJpliYHsxAScBQNSU52ab74YJS+PXRKfV6BNSY2TQzCJypZE3koD6KPcHSZ4AlKjfMod + QSac1aONRoatzlShFsg0aoSjRo3C5BhOEjDNyJ9oSXy+gTZaFXFgiCpFZQz0cY7XUGpUP0yTF1oSeUPd + 2uSxwqlGhqMBTX2esMvVGfV4joE2XRXR9EOblc5gZ9IBdT7GrkKyBtYHudth2lsSST0oc2mtHkjHoR5Y + EuHz+CWRpk+fSD2eb6CBNZ+XY2nC749GF7yaodxBQOOqqVM2TEPgqWlJbFM9KHOhqqnglFB4D+ysxv59 + 4ZJIE5HoQnS+8/LcA01zwHyxCexD+c1wZwakGUDjWq8z3LVeB7gl0bTLRerBZy5GMj2TZS7YD4olkVq3 + 1HkxyhIfqx7PPdDCVRGkBu8wZG69jbt9hwf6HMOaKTWWxDbVA96DMpc21cNTjoNHkCWi9MFniW0a6g68 + x68EaCGpUXjD9OIjoE/b2JznAqSGz2tPPZC5UNXURKZxGC6OacXhipQlokcuNNS8enScufwagDYiNY6v + RZGaJd+4MA3ScdrG9ryt/Xl7RupDLephtLMc6lHJHRbZlkzjfIB+/fqhz8Aban6aiUb0qMbUsXqwo34e + a7af/S8QKjXe3ShTMOOBVAVAn7GxO2/ndMEJcDNP3Z56GJk8gZvGyLpMy7rjP0Y9fiVAE6mprwh+IcuA + S2OifJwBDTq7XnQF1mB3R+rBm7zW6yEVmHJyckg9aMLmSdVDBGV59gnbmZ+QSE3lU6xd2CdAJtrmnA0g + 9rjk4X7RnZGa1ENo8gSncrYr0/2U6AWTeph6D34+rwP1YED/OtSDPDX5PJQmMA7JLm6FieaA9rzk6X3Z + 2/mCs0E92qx7VAlkunXaoprAOrbYfiBUDxTzTDOX9sBk5979aoCmBi5NJfTt2xclUGgF/AZ0Ayj7XfED + 3GxJRDrenskT5uKCtEWdopaqpDgWijIXTK2js4MtkZS5UCuAr5q2+f4TUUW1M+/NZ/9rhEsiinlAh1ZC + t4tuvld8g64GAWvoNUvHjUwerx5CmW59iwSumcAOaqgHqldQD9NWAFVN21MIUQd/9+wja/oT8qQG+5A9 + QzeALATa/6p/2MthoddCATrUgw00mcg0OzUIbprSFpP1EIM18+bNw1n81AowrZp2bPIY0L8y9aAlEe9r + tAJsDjOB9rrkBTr3ut4r8nokqM28xx5rVp42OaeJuWkUPdpKW1RxKtygApnmq6ZooWHi1DRFbFOKRU/U + j3kuOM4viUOGDLEtt4VA6y/rweU+1/v0e6UfnjDvgRSxTZmGm6at+ib5IcbPwsLCMJbHmzz0XIxkmu/Y + mgIleqJ+zHMBNK8emO61WWRDugE6D7gxYMirQ6KvRwN6ZvIg08KGCy/TtB6ijNfaeOBcRKyHuB6XN3k0 + MCbs2HYg0+z86I6Xy+cCXOEPyRtqgKIdoYXfgG4AX6A8/LXhg24MgnowmW7PTXewHrqx69F+mEyLOlkT + eb7gJvWAMVD5qwAr5KLvK33jbsYl3EoA1vgjZJoNjD12PWxtPODNYWaEMk3zHiTTwj6AqUyL+JoIfrJf + maHGG1kql/ru9o14OQK6MfrW6Em3J417fRzEGp6P9QG4m9CM+wBYD1HGI+PRGmi0b9At27t3Ly/TnXfT + Ijpn71e2JPIyjeaIvkQPZIfdHDbh9oTENxOnvzl96KtDmclDHwDrocm5hWgCMONBhWlBaYkNP45WDR48 + GDeKkZumaTHTokebqYmImoy/viWR1GP58uVeaV6g86hbo6a9OW3+2/MRY18fy2T6cDvrIZoAMB7k8IyA + nq4KCQnB7W1ouPBumm+4CJE0TVtEP2zu5tmXbCrm4RBUt3FuoPP418fPfmv24ncXp72XBlKHvxyOehPr + i3dgPEwcHu6NcnV13bFjB2Sab9di2AOHBfHnT7SXtoh+2NzNcwE0EjG0rh16O4DOU96YkvJOyor3V2R+ + kJn8djIMNbJzlh+2CTS1tUwcHho3aP7iLJX20hZ+PTTNAUWoPwmPAun8MNkzjjWZPBR9tG7acTfHzXxz + Jric+2FuwZ2CjPcy4ECwHrZtPHA3Bjk8U6BRmHZjt84ZrYfY54KjxvhBU1rwjJyFqM1hsl9HmYlkGteO + JhxPAIvB5fUfrS/9uDT3Tu7E2xNZ2gLjYeTwKG3hKx6tcxbadYGDtbAe4u4CmqqhJgBfxiO7bLoeivjD + yH7MTphnk90k04MGDUrYlpD+Xjq4XPn7ytrPaks+Lpn15izk5SwRN3J4BDSGxPjSkpGVjlBgQB3roTA/ + 5Cd66eQJ2g9gRFYR706Ei+avQ0DI5OEswZFlI3M+zCn7pGzT3U3b722v+6wu7d00pC0sEW/T4cFKtwM0 + WWmMmArzQ+GkB2/hjIGmRZM6BeSpf8AGjWeW0QAa7/S47Lh1H60Dvrvu7Trw5YEd93YAdyTlaMG0a6Xb + y1nilMOHDyfjQd0WzIl1xniI+BP2nu7xFM8I9KBVSUnJwAUDK35fsfXzrYe/Onzym5MHvzxY+FHh4FcH + M4eH0lIHOYtJcohBBoweYOyRNx40UkNtLd5WmBafRXREp/DUt18TqQE0Skt9J/et/6x+35f7Tn97+vJ3 + l/Gx5tMaZOSs4tEm0LXcIG9bWTjmzXr16gWgYTz4tlZnCtPsztmf4niKZ4TRkGnU6SPiIyAXx78+DpQp + wO7Jtyej/8JyFpOD1jE0zYZp2gQ6SYUr69G+ERamaSdzxw5PhD7YT3po0y+LOIBGIzWwTyDk4uIfLvJA + g90wHuhysWJpW0CzmUdk4SbSoZ6r9vLywpkhvMOjIbE2G7VCKy1Sqdzw+gg3Pf+aVkX8qrAE3kHeJBp8 + QKlT30nF9AFLDk2vDkDzsD2gF6pdXFwIaGGj9rGlJZGr63SUuPCyGB3aROXTZ62qB+Ae+zBqAiCVcPVy + FaKM52D38veXY6SGTae3CTT6LFRXau2jcXWznZ0dgG7TSguHpo1yFlFQUKODQxxuVjI6uPonOgtViALe + OlhGMPuDsTZMJuLSWNwWglcdKQYWHH9/f3d3d3t7e41Go1QqZdwDT/BHfBJ/hS+IiIgYOHAg/glO7oeN + Q/sDF+Ci3AMrhd8ZKyEe+L/YOdpd+sMlYQBrpOMY82BZeFuXYbDNFm0BrVmq0Wq1WGDbrOHxzo3vafG/ + L4De5OdXaGPTCyk87cUVnvr2tI6NxPeBB4IlwvWZOEw4Li4OMLk5OfYODUoYMmD+5HE5C+ZsyFq6rajg + aF355R2Ntw/tunP64L3LJ//4yvn7r1/9x5vXH779CgJP8Ed8En+FL7jd3HS5ofxoce62zEUbkqdnTx41 + L67fmMjg3t4ebnbWSL7xP8LEbY+ePfI25TVcaDjxyYmL31xk8e3FNR+u0V/UM0bzJ4kJdgK0C/QKjUql + AtDt5SxGxdJWQANrnW65Wu2FoiK1DExPvufvlOrk4oZWJN4i4BcOUIPDt7HSRoUETRsVvypl7ua1ueea + agHTP958+ft3bvzYuH3p+1dOPbx08OHpnQ+PbX64v+bhzpKHm1f/vXr5B7mzz6aMbZwwYG6A0/hgt1AX + rUohjhgUMW7BuKUblqY0p+hP6bXbufMnEEZXcGHzYZuMztTI5XIAbVosBUFpG0CbySEYvZmLTR4e8xQK + Wwh8myffd+aEPbyYGJcCZ6dMmWKt1faLjFgwZUJl9vIzm2s/u3DsxwLawUvy1svf3zz3/bVjD883Pzy+ + 9eHB2oe7GNYPalc+qEh7UJx8d1H8/VXj72eO/nDBgKMTwksG6mcFO0Y4y83Ev+0S2aXnqJ7ShVJVsYqu + dGYb6Gqt2C5PsneZXAiUGgoGrTNNDoVbEPmqtJDRTUFBWwhuF5fJuL8K8078NSWPPfkeSxPc4YYNGzBs + 6exgP3JAP3B2X2Xxh6cO/oTImoL+9vXvb138/vqJhxcPMGofrn+4p/zh1rUP6nMeVC29u2zc/TXTOKxH + 3V867G9LBv4tNfZP8yOujnOtitXM9RNH2He1sPzvLmFdzMeayzJkOA0LPlqdp1ZnqzUrW7AmxFGS5oCm + 5JCfeQQ72yz/PwI6OHhrUNAjrB0dR2FFavPke+E1JVgq8f/Azhz8X/tHRiyfk7i3fP1HZw7/rOAawf3m + te9fO9+C9Q6GdXPFwx1FDzfl381Nul82//66xPt5k+5nj7m/LP5v6YP/lNL73hzfuzM8705xvTvJ6XK8 + bWmUYqrOXG/14n+a/Uf3vt3FE8XKJezONBYrWTDQVzLpgCTCE1MWThtb2gOat9IiAC3Aeou/f5W9/WAc + 88uffE8rKRVRQXB8d7TcHexsxw0bVLpiybXdm39JcAlrQAw6v3oWKH9/5cjDC/sNen2g9mHzhgfbCz9f + l3K/Jv3+hpT7hbPvF0xl1F458i/pA+8lh9yd5XN3Oof1RMdPJjjcGe/w/lj7plj1Qj/LSNuu3Xv+d7eQ + bpajLZWLlLgshyG+VI3FEAc+Amg+C8emWqNyh2lDC0BvE2DNqO3nV2JnF4v7q1CUotMMgTXakVjW7Gxt + xg8bUpm97PWDux68xZzAT44yFkzG05MGBM/ueXh6x8MTWx8e28Li6KaHRxsfHmlg/EUc2vjwYN1Dhm/V + w70bHu4qfbij+J9Na+6tT7m/cfn9qsX3y5PvF81mMpI74S8rR3yRFnUXWM/2vztDd3eKG3jNsB7n8G6C + /dtj7N8cZbc7VrPYTxxl07V79/82CzcTjxfDR8Nf4jharIfIWfi5Ayp3dFBXEqGra4J1k4/PWhubKJzJ + jj4CblMXi8WDo6NWL06G8frra5f/fht+6+V/tliup4D1q2fZOgbUgE5TwYO6TLaIlSQ/WDvrwerpD3In + P8ie8CBz7IOVCQ9WjGaxfBT3ZMyDzIQHWeMe5ExgX5M39UFBIvsn6+c8KJrH/nnpwgfli/5RmnovawqD + uHT+/eK59wtn3V834/7qKX/JSfhiWb/PFwPrMIZ1kv7uNI+7k5w/neAIXr+XYP/WKLvbI+1ujbB9dbjt + 5hjVHG8Lf+1L//nSf1haWq5atQq7dOHwKDmkdI8vd9AhE0YFPFFY2P42sXZzy7K01Fur1bPGjd66Pv/T + c0e/uHzy25fP/OnVC3+7deV/fwTWzIqBdI25D0pTHuROebBsxD8XDfzn3N7/nBXxv4mhf5ke8sdpwd9M + DfpqatC9KUH3JgfenRT42aTATycF/n4iCzzBHxGfTw7E3345JejrqUF/mBaMf/XXGSF/Twz5Z1LoP2dH + sG+4IBbf+f7CQV8kRd5fFnd/xYj7WWPu5yTczxmL+EvWyHvLYj9Pi/48NfJucujdOQF3Z/owrKe4fDbR + 8aOxDh+MMWD92gjbG8NtX463vRZnWxQmG2PT01NhiWIp3uJ8+Z8f8MC7n59LF7ZoRRERxzisdxOvAwO3 + eHvXubiUuziXujhlaJSBq1PnvXVkN1wEsP7yyqk/XD/755sXeaxJQDrWEMbW7YWMX1njOEwjAQdwAUbA + 6+OJAXfGB7w/zv/dsf5vj/V/c6z/Gwn+txP8X0/wuzXG77UxfjfbCnwef4uvQeCL8a8Q+OfvjfP/YLz/ + nQkB+Lb45nglPh/v+0Gc03fT/f6a6P+3pKC/zQn/W3LU3xb2/VNqn88Xht5dEMYYPT/k7twgxmtgzSTb + 7e4Ep0/GMazfHW1PvAbWAPrKEJsrsbbHBriuDLDpaycLDw9PSUnBukXlf3J4lLPwDS1aDwH0SQ7rA4GB + O3S6OgeHYne3Ch/vmiC/BoTeM8taHZKfMvfto3vunD702XmG9XfXzz0Ga6B/bPODmmUPciYyZGeG/3l6 + CMEKCIApAQqAhFC+Otrvxwf/qtDLgNfs5nCvKwMc3hzr/e54/QcT9B9P9Lk72ffLKX5fT9PfneIE/jIW + Q6MhHRR4znjNsP79WMc7CQ7AGnptwHqozbX+dreGe96M97gR71ka7pDgprKRWi5YsADlaagH5vDoKHWs + h8JzlwD06dDQoz4+u11cNuo8N/rp64P9N7VEY7B/o94zx1Ybnj1v5jtH93505tDdC8e+unqasEY2TBpC + vH5wZjeT1+wJeM/+IzEUb2e864XI4jfnGfrjMe3kd7gy1P1Mf/vro7wQN0brbo7RvZ6ge2Os9xtjPV4Z + Y3trjN2bY+zfG2sPXYZiYD28O9mFoTzZ7e5El7vjnT4bx7B+fzSTkddH2r06zPbVQQ5vDPd8nWHt+epw + r1fiPRuinWforD3UMpSM0BpHmQX5Id2aw9/FIPLzO+TpsdNXvyckcH9Y0N7QwB3B/puNsPbV5dtZRWck + TXn3WDOw/vzicSHWf99T8fd1s/938eB/zAwDuJBOgIu38FucCPDgdhKXp/5lFwe5nhngeG2kF8XLo1gA + 9CujXE8Ptz4XZ30x3ubKcJvrI21vjrJ7A1qRYP/hOAfoxqfjHIEygnj9wWj7tyEjcXa3Bzu9M9LrzRFe + r4/wwtvlRjyw9ro+XLc91m2ur63eSgHtxvLIV+Xo5i2Rn8+BsOBjvcKOR4QeDQ85FB7cHBq4MyRgS2u4 + N/npC+1tBiRPTHi1eSth/WVjwbdZk7+b1+eP04IYuOMBrh8Dd+wvD67w1To/wPncIGceaP7JhREux+Ot + jg21OjHU6uRQqzPDrM9zoF8bYXt9hO2tkbZvjLKDaABfoIz4cAzD+p14+3fjXO6M9npvlO7tUbrbI3S3 + Rni9Olz3ynDdy8O9rw333tnfY66fvY+1EudpwfNBrOFAQG1Rr7BTXJzsFXYiIvRYeMjh8OB9YUG7QwKa + jLAO8K10shs+pW/EmdlxH86I+ni8/7vjfN9I8Hl9tM/N0b43mcL63mDhh3jqxPzB3/BsP8cLQ1xMgT43 + 3PnYMKtjQ1piqNVxDvHTQ63PDrO+MNTmSpwNnAa8HRQDugHQWcTZ3xnu+kmC7s4Y3fujvYH1W6N0r4/U + 3RzhfWOEN8N6hP7KCP22fh4zfe3ctYri4mIkIpARHmjC+iSwjgg9Eh4MGQHW2zisOSXxawjWVQd7bHBR + DZN16VnTy/F8nO5CnPfFeO9Lw70vj9BfG+lzbaTv9VG+r7B4hrA+1df+4jA3U6DPDndqBTSP+BCr40Os + Tg62OjXY+uxg6wuwGcNs4DeAONbD20Ps7gx3+zRB9/sE748T9B+O8X5vjPfbo73fGKW/NUp/Y6T+5RH6 + qyP0l4frL43Qb+zjPlFnZ6uSw3QLgeapDRk5Eh5ykJPsnSG+DcFeVcHuZUFupYFupQGupS6aCXIzzQp/ + qyODvU4O052J051ncON/AKx9TLEmjvPBvRIs8JUvj2RxdaTvlRE+l0f4XBzO4jwiXo84F68/G6c/Iwj8 + EYHP0xfgK/H1l7h/i++AVxrfDd+25Wdgb6/j0TaX4z2ujvRCCOE+M9yhbaAHWx0dxOLYIKvjgxjip4WI + D7B5O97tzmjdR2O8P0nQf5zgfSdB/0GC/t0xPm+N5t7co3yuj9RfYz+Snn6XwkjXoW7WAPo0Jx30USgj + R8P994Z5bwn13BjkXhXgVh7gWubvWkrhbjNXbe6Z5K48MNDz+BDd6WG6c/Fgt/7KcIY1Ufv6KL9XRvsJ + McXnAQf97wHW6Tj9iTjvY8O8Dw/VHRis28/FvsFewmge5GUURl9A/wr//NAQ3dGh7LudjPPGa4OXgb1s + 8boDUVYXh3teGuF5eYTnFS4I9JPx9keHCqSjhdFHCeiBhgDcPOJnBluf62uFMXashO+M8oJ03Bnj/VGC + /qOxPh+O9Xl/rO/bCb63x/i+NtoHvzVwwMt/gSMNfk0CunWEnuoVcKiXT3OE984w3fYQz81BHhsD3asD + 3Db4uZb7uZZxUertsMJG0iveTlId6XR0iO4UqB3vfSFefwlwM51iFLs8whd0I1hPxemFmAIvQnBvS+wZ + 6LWbi12dCPpK/BME/x3oG9IrQejv7efWFGF1ZKj7sWHuJ+Pcz8R7nBvucXEEw/14nM2RIdojg7VHh1hR + kF4bAS1EHAQ/Ea29OsTtRpzHa/Geb4wE3N7vj/H+MMHnzljfO+N8Pxjn926C31sJvrfG+N5gWPsS1vj1 + WwMNiP0P9/LZF6FvDvcGnfeEee8K0e0I9moK8mwI9Kjzd6v0bw23o2qErKt8hb81ZOTEUC/AfWoowhsf + jw9lVD04xGvfIF0z98sTrAQooblzgOeOAZ7bBbGtvyfFVpPg/wpPhP8E3wGBb0Xfk14AQn9rtFNDhNWu + ga6IPQPdmge7HRzifnSo+4k49+YhVvsGaQ4M0h4arD08WID4YKsjAkbzQLMn/a2OR1tfHup+daj7y3Es + YXlthNcbI73fGe39XoLPh+N8Pxzn9+E4ZKdwX36vj2HuAFIGrEG1Fo02hhgoI5pDdXtDdbtDvHaEeG0P + 8twU6FEf4F4jgJsR3M16jtpcN9FZ3hDjuneAx66BHrA47NfGc/bL4wnCaycHKwFkwLGf59anGNzLw78A + BH19L7uNkbbbBrhuH8hiB4c4YsdA54b+qi2xqu391Lv6q5sHavYN1BwcxCE+SHtkIMKKohXQ/axOxNhe + GuIOrK8M87g2zON6vOdNOLyR3m+O0r+bAPVgQH843h/Z7zssjWD1A6gosOaAJqHQ7+VYzCIUoWNAU/Bw + c9RuBLUfwe0GrMu9nXJtZP0tXuqxUK9t6OPaGOu2ua/75lj3LbHum/t5NPXzYB9jPZv6sXia4Hbw3bg3 + RGWIVV1v+839XZoQA1wRWznQN/W3r+6rrIlR1sYo6/ooN/VVbY1liO8doNk3QHNwgPbQAO0RCiHisVan + +tgxoBnWHleGelyN83w53uvGCN1rI/W3R+nfGuP77li/98f5od7yPuwvV2lAMgysRb18m3sxiKESLAhi + PhjKLRGi2xOi2xXMqN0U6NEQ4F7n51bj51bl61rp41qBcNYmKXp6xNlJ80MdqqJda2LcNsa4NfRxb+zr + vqmvx+ZYjy2xBrh/Hqzxohb6yOtiHBtiXRr7uWzq5wLEt3Cg18XabIhRVvRWVkYrq6JbI95XvStWvaef + Zl8/zcH+2sNCuPtYnY51aAX0MM+rcV4vI2EZ4X2TOTyfN8ZgSfR7lwmIgdfAGoUXUbj3rjDv3YhQoKyj + aIV1C9D7Qr0RzYA7WLczyGtbgOcWf48GP8DtXuvrVu0LxN2qdE4F1rLBFi9JprmpKnu7Vke71sW41ce4 + NzK4GdaIn43ajTGuJQEqoCwMQryyr7Y0WlEWpSjvrdzQ24B4NRCPVtT0Vm6MVqIAvb2PGoX/5n6aA/0N + BD8crT3T3+niEHdOPTygHleHeV6L87oWz9LCV0bqXx2ph+WA8Xgzwe/tsX5gNOCGhgBrUahue6j3Tggx + F62wDtHtRTxiNFD23hesQ+wN8tod6Lkj0HObv8dmP/dGX7eNvm6A2xCuNgvVlkGRavNUH2tQuzYa1HZv + k9o/qZLURTqWh2iNgKY/lkari3srSiIV6BMieMQreyuqohTVXNRGKRujVU0xql191XtiGcEPRGnODnC+ + MNgNQF8a6nF5mOcVDuiX43XXh3tfH6G/Mcrn1VEsT4bruD3Gj4OblSoRomCvLSHwcLodobpdPNacSjCU + DeHdDHCDdfgIlPcHGaI50Gt3gOeOAAb3Fj/3TX7uDb5u9RzoG31caxzUU2TdXQbbSDID7Wqi3UypDSXZ + HOtZHOWWFeacEuAwTW8/ysNmgItVLweNv63K00rlpFbYKOVquUyBHrBUisAT/BGfxF/hC/Bl+GL8E/xD + /HN8E3yrkii3LZx2V4XZVobbmAJdH+tcHK0silQU9WJRHPkI8XJwPFJREamojFRUI6IUNVHK+mjllhjV + jhj1nnD1qQEu5wa5XRhiwPpKHJMOMJqAfmWkz42RPjAbwPq10b5UpwWdUQISYWWDnQj22gZrAaxD4DEY + yoZg5NXtCfJiwT1vDtLtA9DB3gcQHOIM7kCvnRzcTRzBgXgjhbdzka1ipKSbdoSDLC/EAdReHea80N9h + ks5ugIs20FbloFI4OztjaikmJgZTRRMnTsRw16JFi9A/w7HvGBHBIANua6qrq8NwDx5o1uEyicrKSoyX + Yw42KysLnWJsKsEkCcZ0cLxPYGAghhAdVYogO3WoovsYN+XCQNuCXg5CuGv62hf1VvBAE9wIEJxFL3lZ + L3l5L8WGXgzuqha463opt4ZrD/dzOTHA9cwgt/OD3S8SqQE0V1HigYaDfnUUwxqWgy+Li+CLA9xr4SWC + PbdioQvR7eSw3h1swHc3oRzIRRDDGsFjfTDYG0GI7w302tVCcCAOBd/McPfY4uaQp5IO6fI7qaKnmaWF + OTaf4iSNqVOnoteOOTRs2wN2GzduBIiAEp18PFAcwAPjE+iB0gNzhaYPtKLxMP18eXl5cnKyhcQCc0k+ + 4T4WEnN3rSTGSTlRp80ItlsfZdUm0AzuCEVxhBxYl0TIyyJawx2maAiz2tnHaV+s85H+ricHuZ1lWHte + jvO6Gq8D1gD6+kgfRmoOaPAahTBgTc0gEXI8+LMA92p45CDPLaB2kNeOIK9dUGEKjrAGoNvB+lCwN4IQ + J4Lv8vXY7u2+1dOtyc21yd19u5fXThcXbAsZZWFhN3ToUOwcrqioqKqqAsRgKyBGA59HFsABPkyoYBoI + D/RAMVGIB7rO9MAQeJsP/gvwxajB+/fyz67PRmTVZc3JmTN69ujecb09AjwU8hf1Ni8Nde0+39eysIXO + Bl5HKIrC5YhiLgB3aQvcFSGKhnCbbTGOO2Kcd/d1PtDP9dhAt9ODPc4zrHVXh7PSHQN6FAOaYc0BTVgj + CGgEsupKf/daf49NAZ5bsdAFee0EXlwQ1o/gbuE1ZIQ05FCI/jAi2Puwv+6Q3nO/p3uzp2ezTrdfrz/g + 53cwIOCQvz+LgIDDXl4bbG0nisUumALFwSUgMlhM/AW+ABewEpSYmkAvDt1PPDDsgH4zHujK0wN9fqMH + /1f0lTihNG5q3Oqtq1c3rc7fkp+3OQ9zjrmNuasaVmlSNWZDzV4MePF/bP7HRvFCpH3Xad7m+WEyjtEM + ZRZhLAhrA7sDFQ297JqiHZFtbu/jtLOvy95+LocHup0c7HF2qNeleO8rwJqRGksiAxoVY2FpV+TrUuzr + WuLrUuqDcC33davxd28M8NgCzYUOtId1C7UZ1kHeB/y8Dvh4HfLyPKzTnfD1PR0QcCY4+GxQ0GlEYODJ + wMDjiIAA9hERFHTCx2eTg8MchSIgMjISJ0JBPQAxcRb4EqxowWEOCPNQeGASF9O9aOzjgV4RHjhR0ehB + n6evwRf7+vqmrEkp3FO4fvf6dbvWrdu5bu2OtQXbC+bWz5XlysSpYvFcsXi2uOeInl0jur7g/IJK9j8R + dl2neZkXhD4C+hHcQNxP3hDpsKm34+Zop60xwNoZWO+OdT0wwP3YYM8zQ71QMb4ynJWLoR6M11xpHs9h + BFETF/m4FOudi31cSvSGKOMc8UbIaztYP6K2v9devcceT/e9XgDa5yiH74Xg4EshIZe5uBQcfDE4+Hxw + 8LngYPwVC0IfT0JCzgQGHnZ3z7KyGmxhocJFHHTYGXgKZAlWQInD9TFzhS3dOJgLQ4HYqYouET2w+4Z/ + 8J/EF+DLsH56+XuVHypHlB0sKz1QiijZX1LcXDy0dqg0VypNk0oWSCTzuZgrYYiP6tk1tOsLdi/YSl/o + Z2+W7GNJKBsiRF4eqK6PcmiIIqydt8Y4b+vrsjPWdXc/t+b+HkcGe6K8g3IxKtGokV4f5QNDcn6gy9He + 1qdiHS8MchfpnYsQ3s7FCD1AZ3CX6l0qYIrhH2AkADdMhZDaAV67fTx2e7nvdnPdBX3w8zsSGHgiMPAU + ByLQPA+IQ0KuhGLLJIurXDDcEaGhF1riYmgo4lJY2BVf33onp3kqVQgRnC6pAl6EJgau0MzHEDAeGJ/A + hhGMBmJgxeiBT+KBv8XXwLcMmzSs7kxd3em62lO1NSdrqk9WV5+orjxWGVATIM+XY5JRtlgmXSSVpkql + KVJJMgf3DLHlRMsesT1e0r3Upft/+ahfGufWIz9EBqwLA+Ubgq3qIh02Rjo29HZsjHbaEuO8tY/L9ljX + nf3c9vR3R5Hn4GDPE0N1UJITA5yP9rE/GmN7pr/zxSEwf74IAF3ozQJYs2jBGnCX+bgi36sXUtvfc5e3 + xy4Pt12QYOivvz9YfAxBmsCpBOAGWxnWwDcMZ82FvRIefoP7iLiOwCfDcYyDICIiXunV60Z4+BW9foOj + 4wyl0h9GDasZ5BuoAT403zDchsEJjLliPzAeGOLGA+19/kGfwV4SPLBnIL04velq05YrW7Zc3rL58ubG + i40YRK86W2VfZ69Yo5CvlMuXyuUZclk6Q1y2SCZNlkoSJeLJYsx9iceKLUZYmIWaveDwgq3shcGO3dO9 + xJWhNrW9HDZGOdZHMaAbo50Z1n1dd8S67ezvDiVpirLfFG7dFKZtjnY41t/9/FDvS3E+V+J9rsb7MKBt + FcO8nddzYQr3I2r7uDfp3La6uW7T6Zp9fbG+AWIKBjRhDfHlgikD5AJYh4VdBbIREa9GRLwWEXGrVy8+ + XouMvBkZiY+PIirqVlTU6717v9mr13U/v1onp8kaTTBOQEtKSoJrxuQ1htswGosH5lRwNhceGJjHFhWj + BwRdF6ADvrtf273r5q6dN3fufHXnjhs7tl3ftvDkQnWDWrlWqVilUGQpFJkKxQqFfDlH8FSZdKZUmiiV + TJZIJkrEEwyI9+jb4yWXl2Qv/vcwB1mmvw2yTWDd0JsBDWpv7GVXG25TFaypCdY0hNtu7e20K9Zz3wCv + o4N0p4Z4nxumvxjnc5nDWtT9f16wksZ4OqxqC24m3F7OZe7Olc5OtZ6e23x9m/39mYsICDjCBQM6MJBn + NEh9Ijj4ZHDwKU6Fz0EcoAyEda9er0dGvhEV9VZU1NsUvXtTvMUFnrwTHf1uTAzivZiYDyIjryECAzd5 + ei61sxuhVHrGxsZCWOALId/oeGKiEGNBeGDOHoNY9BEP3FGWMCvhwDsH9r+zf9/b+1i8tW/vG3v33t47 + 6OggVb1KWaRUrlYq85XKPKVylVKZo1SsVMjT5LJ5MtlMmXS6VDpVKp3CIT5JIpkgsYyyRFaFoSRrcc9B + ttIMb9WGYG1ZgKrET7khSFMTZtsQ6dTUx2NbH4/tsZ47Yz139/Pc28/r0EDvE4O9zw7VX4jzAbVFWUF2 + fa0sVRYBrjapLVgb2O3pVOTqWORgX+TqWqnT1ev1W319d/r5AWuIBsM6MPAohzLRmWf0yZCQU1ycDgk5 + GxZ2Pjz8UkTENYgD+AvCEqDR0e8DTUSfPh9ycYeLj7j4uE+fT3r3vt279xsxMW/FxLzTp8970dE3Q0K2 + +/hku7pOsLYOlkhkMHDQYqSOWD8hLJgPwgOTK0gR8xrzjn549Oido/h45IMjiEPvHTr47kHvQ97qjWpV + qUpVqFKtU6nWqhjiq5WKHIV8iVy+QC6fK5fPkgNuWaJMNl0mmSKxmGDRzbMbdmIh4XzxxRe7d+8p7fJi + fyvLlb5Wdb2c6qNcGqNdG6PdtsS4M6z7eu4wYO21p7/uwADv44O9zwDrYXpRYbjzmjDH4fYyqZmjo2Yq + Ye3ltN7VYZ2D/ToXlzJPzypM43GxUa/f7Ou7zc9vj7///oCAg4GBwPpYUBCCoRwcTHQ2AB0aihmo02Fh + hPXFiIgr0ISoqFeBYHT02zEx73PIftK37+/79v20b9+7sbF3+/VDfN6v3z0Eod+378f9+n3cv//HAwf+ + fvDg38fFfTpixKejRn02dOjF2NimiIhVfn7T3dxira3d9Xo9Bg8HDBjghSzr9u6D7x089MGhIx8eYXAj + PjqadytPc1ADoNXlanWJWlWkUhYqFesUstUyaZbUcpGlxTyLnjN7dp/Wvdvkbi+Nf+nFhBd/N/p3L45+ + 6X/kv/Pw8O/TZ/jIkYnTp6ePHTs3LKyfg1Q8xkVTGAoNcd0U47Ypxn1LH/etfT2B9XbA3c9rd3+G9b4B + uqODvCEjotJeLoURDOupbirLLlIb+TBXh7WO9mtdXIo9PDbodOBylU5Xg2iBu8HHZ6uf305//2YO68NB + QUeDg49zAYgpThHKBHR4OOJcePiFiIhLkZFXo6Je6d37tejoNyERQLNv3084iO/17/9l//5fDxjw9cCB + Xw8ahI+fDRp0d8iQz4cO/Twu7t7w4fdGjvxizJgvxo37YsKELyZP/nLGjC9nzfpq/vyvUlO/Sku7t2DB + zVmzjvj4jBiXPHnfOweb3zmw9619e95s3nV7987Xd+64tSPqYNRL1S+9uPrFF3NefDGTxUsrX+qyskuX + ZV26LurWdW7XrrPMzBJ7dE/s2WOmhXmSpUWSRDxTZjFc2r27eVJSRmLisqSk5bNmZc6dmz1/fu7kyQsj + Ivrr1fIkL9v6aAb05j7A2gNYb4313B7rBax3cXA399cdHugtquztUhbJsF4b5jTaRfXb//xPS8tejo4r + vbwqEC1AM6y9vWv1+jq9Hryu9/Fp9PPb5u+/OzBwf1DQ4eDgoyEhx0NCToSGngwNBcqnwsIA8RkKDuiz + ERHnIiLOR0Rc7NXrclTUNcAdHf1aTMybkIXY2DuxsZ9yWDOIhwz5Ji7um/j4L4YP/2LUKID7ZULCl+PH + fzVp0tdTpnw9Y8bXSUlfz579TXLyN4sWfZOR8c2KFd+uWvWHgoI/5Od/IldZlx2qOfHp+RO/P3fi03Mn + Pzt38u65U1x4ndartmmV1VplhVZZzkJRqlGUaOTr1PJstWypSpamlC1USlOU0gVK6XwFQjJPYREpCQqK + Abhz5uTMm5ezYMHqhQsLFi1au2RJ8bJlZSjYhIT0jbZTLwtw3NzHA8GwjvVC8Fhvi/Fs6uUlQm0eWOeG + Og1z1drIxBC4/v37S6V6e/s5Xl6VFCC1tzfCgLWPz0Yfn3pfX2C9JSBgZ2Bgc3DwwZCQI8AaQIeFEcqn + w8MBsRBlAH2uV6/zXFyMjLzcwu6bMTFv9Onzbt++d/r1+7R//y8GDvwGWMfHfzV69FcJCd9MmPDN5Mnf + Tp36bVLSt3Pnfpec/F1q6ndpad8tW/bHrKw/5uX9ae3aP5WU/Lmy8i9z5mwZMCbu1N0Lpz6/cPrehTP3 + Lp794uJZfLx3ceVbOepjVqrNLUAD6w0c1iUaxTqNPEstX66Spatki1WyRSpZqopHvKeHOC5u6oIFeSkp + q1NT1y5eXJieXrJsWXlmZlVOzsa8vMaCgi0TJiTbymQJ7jblka5b+no0QUBivTZFe9ZHeG4M86wL9agP + dRehTDzfzz7YRgnviZIjrgzAFiDszerZU21lNdzDYz1HagPWen2NXl/r41MHrDmgEZv8/bHdCOPVGLI+ + HBqKCeAT4eGnwsMZ0BERIDIFQ5kHOjLyAhcM7qioK717v9y7942YmNf79Hm7b98PYmM/6d//cwjIsGHf + jBz57dixf5g8+Q/Tpn03e/Yfk5P/uGjRH9PT/7hixZ9WrfrTmjV/Li7+S0XFX2pr/7ply99iYqZl1uSd + /eLS2S8vnfvq8nkuzuH5l5cGXBui3melarRS1Vqpqrio1CIYqdcQ0Gr5kpZIMyAunarsKRODzosWrU9L + K8rIAIvLV6yozsmpy8/ftGbN1vXrdxYV7Sktbc7Orhk2bFKItTrZ27E23KM6hEVViHt1sFttCMJVNNrD + 2kYhw04sXECwdu1aeKO8vDxsHcCCHh0drVCEOjkt9Pau5BhdpddXA2sfn1pf3zqkc35+Df7+AHpzQMAW + jFcHB+8NCTkQiimn8OPh4Ri7Ph0RQViDyBRE50fRgji0G4hf7d37enT0q4R4bOwH/fr9HgQfNAjs/jYh + gcGdlPTdvHkMa9A5O5sBXVr6l6qqvzY0/DU7+2xgVMSh908wlL80oExY7/v8oPM5d/VOK1U9B3Q1Fwxr + K2WpVpGvUWSpFSvU8gwu0rngQJcMUISGxi5ZUgQWL11atnx5ZXZ2bW5uQ0FBU2HhzpKSZlieysojWVmH + Z8w4MGTIAU/PTPOXJIOstPm+zpVBrlXBhqgB0Dh8GiX20tJSJAXYkI1aOxDHA5UHfH7ChAmWljY2NqO9 + vAr1egBd5eMDoGt8fWv9/Db6+dX7+zOsOaAR2Gu0IySkOTT0YFjY0fDwExERp3r1OtOr11ku2oUb0Lfm + OEO8heNvgeP9+oHj9yApcXGM4FOmfDdz5ncLFjBqA+61a/9cVvaXwYPT5+Sknrl36UxrRgPoWbfnqY9Z + q5qsVHVWqhouOKyZWBdpFasAtEaxQqNYSvEIcUu9bPToWRyLKzIzQeSN+fmNa9ZsKyjYnZ6+b/r0g3Fx + h2NioJmHoZ/+/jvw/gZQKtVwvUQ+39WuMsilKtilMph9FKFbgQeyABhSPFAyx6OMewB9PNDsgGdSqUJd + XFJ8fKp9fYEyCz+/OmAdEFAfENAQEACssSUUG0OBNfbTEdwHwsOPcjsKTOE2prYJzaEql6AqLTSHjt8W + 0Pwe0RygT53KJGXKlFccPfT1F3ee/OzSqbuXTn1+6TSP+JeXAy+FqputVJtMgMaSuE6ryOWAXq5RLBPE + Uo1shspCLsW6l55ekZxcPWNG7ZgxdYMHN8bEbAsN3QUXEBCwJyAAT2DA4As2A2UoKvemr7C1naXoJh5l + qwXKFCIUuvCgNgdq8PQRZWL+I30SO+UlEitb23idLh/5McLfv44LhnVgYENgYGNg4GbwugXrbSEhO0JD + 92LTRlgYExMO8dMt1O4IaB50Ac0fgd7C9Df79mV2pV+/zyAvrq7ZCfNmHv7o0pGPLh39+NLRTy4d+/2l + 459eOvHppZVvrJYfsZFuspJWa2WVWlkFCzk+lmtkRRrpKo00SyNdrpFmqCXpLMRL1JZpaovFarMouZ3d + wJCQ4oCAUhRhdDoKJqEQT2CKJYpk09/fEPgMFBV/i7e+i8tKqTSmt0qVo3dkQBOg1EZC9Z36RsIGB3oc + KBbjgYYIenoqlY+z83Q/vyp//9qAAKDMB4Mbh1JgWzlH7S20fTE4eDt2IoWF7QsPP4zNMq3hbkO1TXW8 + TdxbNB2r6CuhoYfVNi4lBxoOfnj+4IcXDrG4aIg7F0NPDejRpO1RoelRrOlRqOlRpOlZyKLHGk33HI1Z + htosTW2WojZboO6WrBKE8gVbsZXVNDe3bDe3HC7yPDxWe3mt9/Yu9fau4MQTQAPibQEB2wMCdnAfEU2g + tq8vsg2YtA1q9WhvsSzFzU4EiNGjQ3cODQ7qbqCvgdI7dTGo+o6PeOCPqBdjwUQvytq6t4dHakBAHRcb + AwOBMgWjNoe1QUla4CaCN4Pg4eFHIiJ+CMHbW0sdHOYPT5x88IOzBz84Z4gPzx3kovB2rXy/Q/dalVmJ + ymy9ymydymwti25rlN1ylV2XKbqmKbouVHSdTyHn46U46W9/a+7ktMTZOd3FZamr6wp39xwPj3xPz3Xe + 3uV6faWv70Z//ybgC+kICtoTFLQXXoB7Ar+7HX/FsRtpR5WtbaKVmVjEQ4zuEZpGQBPVL7QqUHHHA0Vh + VNxRTafSOz6DKhr+Fvtq5XIre/shOt1KgjswEHC3hziEu0mA+C4O8YOcgrMF80klRYg4fk+VtXNhcy0H + tHHEnI4z26o026AwK1SYrVeYrVOYrWXRbbW8W5a8a5qsa6qs6wJZ1/nG8TtfsUzW18lpcQvQmW5uqzw9 + C3S6IkgwpxubAgO3cb52H9IILpM4wHnc/cHBe+DBOGoj26jGO8DRcb4ImkAsBmfR10BTA4Ci3I6N5Ci0 + 46wlqrLjI0rD+CPK8KjH4wUA5RcuXKhUOmOfvl6f28JuHnQjgpOe8HBDUsBxJikCxJ9YxIG4nd2cUbOm + tolyzVvb1QeczTYqzUo5oFtQNluj6JYr77aMA3phGyh3mSL9rdTc2nqak1Oas3OGi8tyV9csd3fQGbpR + BpLC1+KosMBAbDreFxICiJFAHOHiMAc02A1eY7M3pLxcp1vn5ZUnQo8OgoDuEXgK2gJi4AtYsV0f9XUU + 0VFZRyEYDzzBZ/B54A7QCXEoODy4SuXu5DRGr88LCIBwUzwR4jsFqsLrOHxh2+6bZzRoZePiWXa4sU2g + B59N6L5dZVapMCsyoXO2vOsSjs4pbQD9Ym+JuXmQk9MiSAd0w8VlBejMCXQhZBdrHdZAQd5wGF4WEHNx + ICQEAgLVRipX7eeHL4agF+p0a0QgJrQCmgB9QMcIrSBACXxx5CDK6lT2xQP7FPEcJXaU2wlxVCZBcBAf + /xCraGJiokrl4eg4xtt7lQDuxyMuVBWsnKGhewQ0N5Jy48XT2nrqpEVz2kR549s7tQddzeqVZmVt0Xl5 + u3SGjPyPnYVaPapFN5a5upJurNHpijl1RuoAMdwJC0sulsN3D+0+RgGd87vQFphgiAwcC4AuEEEu0KAj + IgM7QIwWBiAGuCii49wIqvPSA1sVUWgH4oAbHOfhBrshJpjN4OB2cXCAC1zRGm4DzVtLeXsrJxOW1qBj + /RQynaU/eBd7BYfUX9zVLp13tEPnHHnXdFnXRW3T+aXBUjMzL6KzszPoDN3IdnfP45ZBoMb8BvIGZGdc + ggaZRgWCFn/QHJ9vxLsZlszPDy9JuY9PCYDW69eJoMiACVKAjhyoCgQJYsCKQ3qx1RYndWCzHB54gk2K + 2OgM9PEF4DixG308iAleJ7xa+G5YXTGjhVOD7O0HeHgsbAtuIeimUm5kV8gjQtAhL3DlpOkMd6Vy2PzV + S9tEufLNJqbObdI5T95tRQudk9vQjRc8LeXygRyd01xcYDkA9EpYDk/PfJ1urbc3FsNSIAgcIQ6cu6Uc + gn4R/BHCUu3vj7+tQLRgXSTCex+KDLDAUCgDGkLAERADVuyOw2ZE7GmmB3Yl4o+EOODGAeD4YvwTdPDw + PsDrBNmB+EC4ofXwMChR4Q5Aa+twHK3n67uufcSZvAgcC35uY6a3XkUZ7o6OyVHDBu175+SBD87wcfCD + M1ycjTk9rPt2ZbeKttS5YzqPlPy2W08YMvgE/C8cHVOcnFKdnRe7uqa7uy/z8MjR6VaDoRAEDmusijX+ + /jWCXw3PWXBY428Z3L6+G3x9y0QgIxQAckEHoIDIoC3t98Secdpeiwee0IOHG1+GvhGJCaQGmk5KgjcH + CTcUCQssqlToOUG+cbqep2dah3C3Ky8t3txgz/F7yjW2OZvWH/jgtGmsfq1Uvs/OrE7erUzWbb2s21pD + dC2Qdc2VdV0h65Im7ZIq7ZIs7TKfQtJlniF+52cuFofa2U23s0u0t5+JKR/A7ey80NV1iZvbcg+PLPgH + b+81Pj7AuoTDugLkBawcvrwR4LE2UBtYs4O6oQDQAUBGR/qAyHSGI38yGN0mjwdd6oq/whfgKDt8MbiP + 14ZXErwt8ObAdAAZQQg3wY0kHnqCyVsrqxBn5wne3tmdQLxN98JyIo1mxNj50w98cKrNCD4ebbZF1q1C + 2q1I2m2dtNtaabc1LLqulnbNknZZIumySNJlwSNweZRfGiv+rUV3fHNb26nA2t4eWM92dJzr7LzA1XWx + m9tSd3f0Q1ZhZdPr13NAb+CAJpSFQOMnN6a2CCiDktABkgvauEwQA1n+PhE6qJJOzSeswXdSEug4ryS0 + TvLCbQQ3TCQqghhKQrJjYxPp4jLVxKLwpGj3ibNzil9kRMPlnQfeP2UaC64tNd+rMquVdSuRdlsvRFnS + dZWk63JJl8XiLgvFXeaLu8wzjhcCe1pY+NvYTLK1nUxYOzgkcUCnuLgwoMFonQ6MXtuiHgDalM7Cn9xA + bZ0uWwSU6cw1Xi5MUebPFCOshdRuU0lIuI3gpvQSCRHcJHJ9tBdw1zEQt7aOAMdxwmFnOI7f0EKqzqhY + 1SbK+KTrYV+zTdJu5dJuha3pnCfpminpkibukirusqANlF8ab/lbiZlKNdTGZqKNDYCeBkY7OMzCCJWL + C6QDGr3C05M0GnQuhuxydEbNx0g3HgGNXwq/GlYp/JoiXpSN5IIo3OYVmEZwg9q8kuAF412gEG6ICWk3 + lko4E+TxsJWooiAvBeI4XBSqotH4Qcfd3ef5+KxpD3S8r0fPndIeysPPT+i+S2ZWzYmGkM75HJ2XdUjn + oJ7m5n7W1kB5oq3tFE46QOc50A0Xl0UcnTO9vHIh0BydSTd4Oj/SDfzw+BXwi+DXwS+F6XocUYNaP7sr + SyjKQrno4HRMI6zpkmgoCb4VucA24aalEs6EjCCyJMg3CI7sH2UsdBtwjihGBhQKG0i5o+NID4/5Pj4F + POggV3Cf6PZEY/2tCtV+B7MGabey1nQukHbNlXRd2YJym3Qea0TnqRydZ3J0TsFK6O6+nKNzPhyxXs/T + 2QA0fkj8qPiB8WPjh+/duzfKnJgB52vOqNyJsKYJD0rp/O3VvGoLlaQDuPkcB5knDCV8N1ZL0hMiOBSc + CoRw4mhd4mhIuEO5XKXR+MKS29kNV9vYZTesaY/OgcejzLZKu1WarIGgc7akS4a4yyJxl5Q2RANi/YI/ + 1DlAQGfoBug828kpmaNzBkfnVd7ehmXQ2zvf3X2hs/Mke/v++PHwQ2I8E+9LOFq0SoSVZyRxVBw13NBp + tPR18qRXfFmbcJNwG7EbppuWShhB8t1UMyGCkz+BggsRR6kLlXE01ebMmePk5JS4IrH5nebmd/fve/fg + vvcO73/v6P73ju1//8SB909OvJTUfY/crEbarZQTDZgNg9OQMDrza2ByG0C/OMrit+ZmGk18izpjGZxB + dKZl0MVlnqPjNEfHBBubQVptuFLpLpOpgoKCsEEEd4+gA4VKPV/TJ2QJXNoRQsV9drnvD0ZZuEi2t07y + cMN0w9uQEYTv5ldLnuC8ggsRh6qA48jsR88aferzU4gTn5049vtjRz46cujOoQMfHNj33r7Cm0WafVZd + Npp1KTXrsq5HlzU9u64x71pggeiSa9El07LLEssuqZZdUixbOw38kcX/6MzMzfVqNdp1fVWqKKUSa1eg + TKaXSt0lEjtLSyV6pjqdDpzFLAYmLqEJoK1wUwi/74bfbkPg8rsXwBh2Lzgdz9bm0td5aneS3ZTBU5pD + JSoiONw3FBy5JSQFiPMch6pg61X00OhtL28788WZM/dYnL53+lF8fjrqYpS0WWpZb2m+wbxnSc8ehT3M + 1pmZrTXrmt+1S3aXlzJeejH1xd8t+N3v5v7ud7Nbx5zfvTDwhf966b9w/re1tTXeNJ6enjh1GvOMWCpg + iiBfmAbAQYt4V6FzjT4q7bvhd4RQNV+46Ybft0D7Qmi0Hsu+iET5x6PcMbt5Z0K+m9IcwA09QWmFEEey + Y4o49M470LtkX8nZL84iGNZ8cKBPvTlVcVwh3y6XbZTJqmWySpmsQibbIJOWSaXFUmmBVJIlkayQSJZK + JOksxOniR5Em7qnviZ132CIGTGfMmIHVGDKFHV3AF2dQwRFh+AKrNE7sQQsbnVVADP6SJhBnhchSc4oH + l3aE0L4F0dNFuQO4yZnACPIFE75ERYjzksIjjp/Sxt4mszrz3Ffnzn3J4uyXZ1lwoCPWvrvW6bSTYrdC + 3iiX18rlVfJHQJdKpeukkhwJA3q5AWXCmg+LIRbQBOgspAkQo7COsWC4MezLw0H2QBn1A6AMoQCR8ZIT + xLTdBnV8PIiz1PYDbYEsHvymENoOQpsWGNBPpA9P9MVGSyWfVdJqCcNDJSoQHArOSwohDu0GBMn5yee/ + Ps/iq/MMbgoO9MOfHw68GKg8oFQ0KRR1CkWNAkDLK+XyCrmsXCYrkrEx0WypFM3oZVJphnFIZkl6OveE + 7GILKVgMiHFIILYZYK8YGnWwPfyOUhAZSxz1VAlcIIvFg9/FRJuXQFtq+MFKEbh8iwpphOiJgPthX8zD + bZRV8gSnBZMkhUd8yZIl09OmX/jmAouvWRgQ50BHDH55sPqYWrVDpWxQKmuVimqFokqhqFTIN8jlpXL5 + WrksRybDAdfLZbKlMulSqSFaEMd4OW2ZgVDggbYc/o+40AFLAkSZJzKGA+hEf0AMfEFbUgMsHli0+S1M + wr02sFIwVPxeEGz4wHv05wC6PT0Rlk1IUnjEwSZM7WO62XD3wTcXDYi3gJ50O8nqjJV6t1q1WaWqU6lq + VcpqpbJKqaxUKsoVikKFPE8uz5Fjr4psmYzF0lYhGS8xV5lDLkBhyDH8LxQZRg2zcNjMi3UPs0TQCnSO + 0KujnjXhC84SYbFi0xYm1HOwhgNZ0JZ22WClIXBpCwhWILxHf1agCfE2Cc4XqoA4fsm4yXF7X9976dtL + CNwwYQi6cOKbiznv57icc9Hs06ib1NiTQkCrqlkAaGWJUrlGqchVKLINW1Tky+TCwNYgsa8YxVuoBPAF + iwExzgPEq4sLRmAtMFEEraDD5QExNBfkBb6kBgSrcPMS31lFtZnfWQNw4axgZ7ECQRV/AaDbJDifXuI3 + HDhmIMzco2tTOLh50Os/rfe97Ks9qNVs12gauQn+WrW6hoWqUqUqV6nWq9jmlBylMlOJvUAslrcKyUAJ + 5jcBLpY74AsWA2LSClgLpMuQY7oKixrWuAQK+AJcLBsgLLEVrpRgJc4iFyNksaoDWQIXzgp2Fms+VPGX + BNoUcahhvxH9Nl3YdPkPlxFGt9Tgj7hYrNe1XlbHrbQ7tZotOJpco9mo0dSyUFer1RVqdbFatVqlylUp + s5XKFW2EfIpcbCuGYkCIYSogFOTe8DaCQabjt2HRqJUKiCG4IC/wRTES4PJSQFuVaIcSYEUuxiOLlQbg + YtWhLiDWfKjiMwE0IQ4excbHNpxrIJSNgkAfdGOQ9Slrqz1W2iattlGrrddqN2q1dVqGdaVGXapWrVGp + 8lWqVSpVlkq10jhwOYI0UIorNoEvHhAK1NUw1AmtICLzt/ZCKIjFaBsBX9JZkgIeU9qbRLAKkcVKQ+BS + /48aVc8K0EixwOWG8w1Gl1oJ4R5za4z1WWurfVbaba1QZrfiVWs05RpcQqherVbnsms91JmtQpXJQJcP + lOOqeowm40EQQytAZBhk/i5ImgmgsQtIBA0EkBTwsFLPmm9bt4ks3wXEmo/HMwE0ftVBCYOYYgguaDN6 + PvWNqbhg2nq/NbsYDzfy0n3e3HVAWtxNj3uPizS4KJZdnpJjjDKBrpyklFpLYZChxQQxEZncG13WC0WG + naDrleAZwGLwl6QW4JIOEFuFhCXOGiHLV5Ao9/7lgcavHT8lHttaO0B5zltzHC84Wh/kUMZ1vHTHNI9y + pZZdBNTOdbx0KZB6gVrmI8PwMSDGMDidaoOFl64X41GGY4NLo0usoL901TfwpZI91ZOFmFLnmjhLbVW6 + CY0vbDy6h+WH5SBP5V/hF8CKNHbO2OY3mjtAGTfUszu8ceMxLhAzRblKq8XF9Dh0ha62yja+GI+AlkfL + sTEHEFPJgmZo6aJNpCEwcMiV+Qs0aSAAQkG3HRPEPKAdw9pepv2LMRrLCzKFxIzEYx8d6wDlRe8uMkYZ + okFcxr1W1Vp2K/1aJhptXkxPKCvjlVKplI5nosIQncNCt2wCZSR4dEcvz2WgTK1quhNBWEmmPOBJa0S/ + DNBY0B1cHFLXpHYAMf4KKLtddLM+LOCyKcq4hZdEw+RWekJZNUUlc5DBLPMVZEKZv5BQqMvCa++e7r2Z + vwDQcKn+4f659bkdo2xQDKCMux2bOF1uWQANXC7nruDtWJrnqeV6OeoY/BFZUAxCGYk1qkKoBMEs89cb + w8DxV07T4ia8S+XHCObPCjTegFiL+o/qX3mksmOUsfo9UozWKOPuQaYYG7TawsctgBlqRYQCtWYeZVr9 + 6IY8lN9Qu4BfRrECNQrhhd104URnbhbsPPQ/H9DIrFDnnZQyae+tvR2jPO2NacxjCFc/3swBZc7Msct3 + icsm18Lydw8q+7Fb6fl9UKjD0fV4VIcjaTa6QZruqnm6okEvxs8ENOoGOn9dRkkGsruOUU64lYBbpJmT + 4z3GD0JZFa+SKqXIrYXSDJtBtx+jPI/EBEWiNi8UfLqi8TMBDclDsot8ZMOhDR1DfOKbE4NfHYxL0Q1Z + CTm59lBu857Slns0VWNVMjvDAgigycwJpRnVZKR/dMcuakPI/R57RWbnVaLNr/xpGY23J9zFnMw5OJSk + Y5Qb7zZGXo+0OW1jvU+QlbR4DKbLQsXo0DKrpqnkrnKUQIULoJE0wzUb3RqNksVPJBoGRm8oXfFTRG52 + 8tDBvcP7h+Y0ZJ387HjHsex2uvspV9k+sXSzWFJnKam0lFRYSsotJWUsxCUW4kIL8VoL8SoLy5XmlsvN + LZeaWy4xt0xrI8wn9uju1DUyMiBh9MCxYwaOGzt4wrghkycOmzIpfsa0EbOSxsydPT5l/qRFC6dlLElc + sXR2Tub8/FULCvJT169JK1qfXlKYUVq0tKx4WXnJ8qcLy0/CaJQO3HRu87LnPZbIoDkMBi5Ctz5ibb3b + 2mqrSR2DshJ+9euQy2qYOX85+iY8l/kFEBkgSTNcM6SZbpunSVq6Q+xpXczdnsKIhK9bRdlKisryzJbI + qtqAyEZUVyByqitzaipXIWqrcg1RnVfHIn9jTX56WlJ0dPDAhP7rd609dfeEcXx+4pQgDn66v//lWOVx + uWynVNYokdVJZFUSWaVEViGRbWAhLRNLi8XSdWJpnliSJZasFEuWiyUZYkm6WEqR8SgksyzNfXr2iek1 + d87UeXOnzZ83IyU5KXXhrCVpc5dmLMhcsSg3J31NwcriotyK8jV1NUWbN23YvrV6z676/c1bDh/cfuzo + rhPH95w+2Xzm9IFzZw5cOHfowrnDF88fuXjhyKULRy9dPHb50vEriMsnrl4+ee3KqWtXT7189fTL185c + f/nsKy+fe+X6uRuvnH/1lQuv3rh488bF11699NrNy7duXrn12pXXb119/da1p8Zo1G3RrYgcGJlVm4VG + aseKjL8t/bgUJ9+1Icp8tYjPsPmspH0np16kVoQrMFrImzksgHyeTbkJFkDMsvKuGQUNFD+NpPlppSem + vH4KjF6dt3jUiP6u3s4zVyRuv7G1DSLz1G6h85QbkxxO2smaJbImiXSjRFrTQmSey6ViaZFYulYsybWU + ZFkauJzOuEwhZLRknqV5YM+IiOC5s6fMnQ06T0+en7hwQVLaojnpS5JXLFuYk52Wn7e8cH1WWUl+deW6 + ho2lTZsrdu2o27u74eD+piOHth/n6Xxq/9kzB86fPfhsMRqVARQ5PXw8Zi6fufXa1seyGF+w9fOtA24M + sDlvw5wycmsTUWYGA1xG5RM1OaoW0UXogivQhc/Vi9WKXoqEhAQUjHjLTGYOSwWfAZLNoKuhhQUNvmzU + yXnlH2zyfiCjczKTRw7vZ+9iO37+2MpjGzpisUCpZ91Mcj3tLN8vlW2VSOvF0hqxtFIirZBIOUVmUS6R + loilhWLparEkm+PyCkvJMkueyEaMlsxlXA4PC5g9a/Kc2VOhzkyaFyQuSoU0z1uWkZKVuTgvd+m6NStL + inIrNxTUQpoby7cxad64b++mQwe2Hj28A3Q+eXzPqVPNZ07tgzqfO3vwmWA0SjDoH/sE+cxeOXvLpS2d + YTG+BjYZRLY9b4vE2uAuNrfOR/iyJwwGVfE7rHyyWn4K02VMJROXhYkJVTNoUoBKoEKb8VPnJm0nLJ10 + HUXrMhKnjw4P8/Pv5Ts7a2bjpfpTd4+3hIm7aO03JrwyjinyPk6RDUQWSyvE0g1iKSiMgMGAKMNgrBVL + c2EwIMqWkuWWkqXgMsUjdTY8T7Q01/eIjAyZPXMy0Xn+3OkLkmcsTJkJaV4Gm7EydVV2+prVKwrXZ28o + y6+pWt9YX9K0uXLndibNB/ZtPnJo29HD208cY3SG2Th9qvns6f2/JKPhOtGWt7W3RcMpf1P+yd+f7CSL + 8WWrPlzFrMXZ1oosTKxRwheK8roWUW6/V8JKzDNV8MuY/xR6DJpAJC6jZkQNQPzwKIFSnk1b/IQ2g6qg + nd/k8IMFmhWV2mP0soyZSK78fT38wn2mp08pP1J68u5xYXTM6JL3iqIvRqmOKWS7JbItsBZiaTUUuYXI + jMssJLxTNhZlnsvGjBaPs+jp0j02NnJm0iTQmbMZUxfMn56aMnPxotkZ6fNXLIfNWLI6f+n6tbAZeVWV + a+s3FsM179hWvXvnxv3Nmzmnse3YkZ2g86kTe06d2At1PnN638/KaJQNYSQgfAERAdMWTSveW3z23tnO + UxhfuevertG3RrPOyDFr6+aWwgX1rQWtawOR0fEra6ksI+vLa7dRYmiXjGV1DMwkGnEZHsOIy1TOB5dR + aCbLTNtVhd2pn4fLj2od2ZnzUAeI7Rvm5mrvG+o9bl5C3uZV+99pNhQoWhOZJ7Upo7d93DTq2gjIMfMV + 2yTSRrG0ViytEhCZYzEjcqmlpMRSsl4sKWjtLh6JchuMthxg3kNlFh/Xf2bSxFkzJ0Ga586Zkjxv+sKU + RMblJfNWLk/Jzlycn7d03drM0uJVlVwGuKmhbFtT1c4ddc17IM1IArfCOB87suPk8d2I0yf3smzwZ2A0 + NsJ5+HrETYpLK0zbeGbjY+vFbbJ77xd7J92epLussznJFTlRSoZBFvqKlnzvUVO1vKV4/zinzAxGhhpV + fNSX0foT1jEo9yO/TAOfNCpnxGXTTuvPyWUDo1GUaH5rT0fVtQ4ZXfF++ZArgxxO2Mn2S2TbxYzFda1Z + 3CLHBiIXg8iWkgJLsdAmZxjxt9UfxTMszf17BAbop0waxXF54pxZk+cxLk9buCBxcSq4PHfFMuJyxlpY + 5uKcivKC2ur1jSwDrIQ0t7hmRmc4jeNHeXWG3/i5GP1E+iv84oI7BZiEY509aDGKyB2yuJUiUxeqE0Sm + Hja6q3zfjzbqoPWHphS1Syj3w9gnHTzSJpf5ytxT3Bn1pA5E9NhisZHZ2PHRtmmvTPE56y0/KpXuFku3 + iKX1ltJaS6bFZI0pWuSYERlyDCKvs5SsBpEtxJkW4hWWYuR7HRIZ9tkCoqwxGzQwOmnG+KTE8QYuz52S + PH86ShmLU2cxLi9Nyc5q4XJRzoay1bXVqGaUbNm8YXtT1a6dTJoP7t986ACchoHOYDTUmfMbzySj8+7k + DX11qMclD5tTzBezBG8bNzoER8FbY4EWG+QYnREqXNAABqxFh7ULwwQXsr5oBaZeeFGmm5747TqoL2Ns + ATU5dLJpyIg/eER4JMazwGWDRj+W0flv5Q7DxcGnXGRHJIzCTWJJvSX6INIqS2mFpXQDF+WI1iwmX1Fo + KVljKcmzZCxeCSJbiJdZiDMsxEssERKEIfFr9cRytHlPt+4RYQHTpiYkzRhn4PLsSfPAZYPHmJWRPo/p + ctai/NwMrpSRXVEOLq+tryvewgrNVbt21DbvbtjfvAl0PnyQjDMzG/DOXDb4bDD6zLdnVt9ZDTvsf8Wf + VdqOClTYlMKtWfxIjuErULXAVBw/F9DOMBFfjWPuYrBSZivDoDjvlIWijMEXMhjUxkZ9mT9zi06DotzP + dJrrSSe4nlSCH/v1rTS69L3i6TemRpwPtT9hKzvcwt8GS0mtpaS6pZW3gevmMQpzUdbyBIwu4+S4iJPj + fF6OLcTLLcRLwWJhtMFoy/HmPb17BAR4j00YNmN6QuL0sTOZLk+YM3vy/DlTFyQj90tasnj20vR5K1cs + XJW9eHUecr8VJUWrKjasrmG6DC7DMleCy3t31+/b23CA0RlOo+noYVbWOH4UhTrmN34ZRpd9Ujb3rbnw + D75XfNkA8nFrpr97uYwOXrhN/oLC7bEYtbeSljoyZXooJbcz4dmKyEOVmJDDcUBEZOE2YMr6+IMQ6axJ + MhiYMKJZcTpzy/R4l6e+L/ixzG23Zyg7LJbuEUthgdGBJvJWCcjbwl9isSG45jTjMp6UWhi0eC2nxQZT + 0cLidCMi8398xGjLBPOeuu5+vl6jRw6ePm0MuAxdnpk0fs6siVziNy1lwYzFqTOXpM1ZvjQ5c+XCVTlp + BfnLCtdxud+G/NoqA5e3bqnYuZ1Z5uY9aANuOrBv0+EDTVweuJXU+RdmdBvMpYqEaXDDsnywPgg5ChQr + YI1JizvNYiooI9+T2cjopj1TItO5qej4wSnTHjQ6CBGz4uhhYyKfihg0yGx65tZPuin4SaktkoCzbdLW + hMI0ZcGVKSwkRRaSdRaSAjZrwRwFAkJMjqJdFgvYnWZpMbhnD0ez4CCfcQnDGJGnjeFEedxsiPIsZjAW + zJ+WujAxbREzGCuXL8jOhMFIX1uwvGh9ZlkJ2iXMLzfWF29phC6jAQguo9BMBQ20TrYgjjA6Q50NfuOX + ZnSb5DVVYeqAEIVhJ3gh5h1F+209o3Yfkj1FiALnNGAzpZG14O/p5ImM8gV/bip/ECJEuTMnmz0p6X7S + rxe1El9iMTG3JdigULGFuIibFVptIc4xF2dyAVNMdqIzFOYsh+Vk854h3buLu8VEh06dMmra1NHgciJE + OXHcrMTxs2dOnDdncvL8qakpMxalzkyHKC9LzlqxMJeJcgZnMJD45VZXFtTVol1CHqNiJ6sy13BchjQz + OpNxZt75GWW0qQTTZEUFy+vYMDKvwjQs2wk78chXzOPk2F6GPX7Yd8bLsfA8dlgLOiycTrIWHgAsPDe1 + Y1F+pnRZ+BYRteJvqaWBvDTrlm9hucrcMtOcTbytMBcvNxcvMxdnmIvTzcVp5q19cXvuwsIy0dy8d4/u + Vt0CA71HjhwwdTKIPGr61NEzpo9J4pwyRHnunEnJ86YsTJ6+aGFSetrs5UvhlBesyl6Un7dkbcEyTpRz + KpjBQOJXuKmhuGlz+fat8BhI/2ogzc170DdBEth4YF8jV9Zg3vnZYzSJL09eWAjoL/Xu+NIE2eHH5XVG + WoxJOOUApcxZhjNzsLuPWCy8nJo/ZATJHgbjcEIDv72dTrLmiUzlC6NzU5/KaVA/qS63YrR4nYUY5iHP + wjKHYy5HXjaxSUObGeaW6YahTcZiYbTK9Fox2mJiz57h3buru/n7ecUN6ztl0oipk0dOmzJqBog8LSFx + BucuZk2YByLPn7pwwfRFqSDyrGUZczOXp+Rkpebnpq0pWFq4bmVpcVZFWW5V5eqNNej7FW5uQBubcXnH + tiroMknzvj1IAuvBZU6dmUA/o4w2MJfMAy++IO/j0rk2R4dUk1WYG5JZyXAAKXrnbbIYdWT0RIR3N/AX + C9D2a9rhzh9NKyQybakUdq+fWVE2eq+IGG155raQt83R4w4YbTnb3HxAj+7u3RwcrCPC/MeMHDR50nCe + yFDkRCjyjLGzZ46bM3vivLmTFoDIKTPSQOQls5dlcIqctTAvJ23t6qXr1y0vKcoqL82pgihXr9lYC7Nc + tKWxdOuW8u1N4DJKGQabwei8t37/XqgzzMazz+gfxFyezhivV/ZlQoxrnnDsE09hOrCMv+GFDtQiFtOt + AuiJ0GkjGCOioxroHAHyyGQt+NoFT2S0SJ6d8sUT6buoTfI+ltEWU3v27NO9u2u3bt26BAV6DxvaZ9L4 + +MkT4idPHDFl8ohpU0bCWsyYNjpxxphZSePmzBo/b/ak+XOnLFwwbdHCGUsWJ2UsYdYia0XyqmxekZcX + F2aWl6J8kVdTVVBXs7YRotxY0rSJuIypjMpd25k079lFrhk1DczPPUeMbmdKs00JhpHAbidFoEKmYefI + 4igiYWpHFKZ7oCDE8MX8PUX8PTp0szpqb5hTFsoxqha0yZ0/R0B4JPvzS2Se9Z1itMXEHoy/7t3MLLt6 + eTpHRwWPGTVw4vi4iRPiJk2IY3I8eThYPGMaY3FSYsKspLGzZ42fO3vi/LmTU5KnpKZMX7KIM8gZc1cu + n5+dmZKbvWh13pJ1azIK1yHfA5FzKjesqq5YXVe9pmHj+s0NRVs2FYPL25qIyxXg8q4dVXsYnVFrRvyK + GK1OVavGqZR9lHJPOXp3dA4ynckJ/SUJ5o+SpTMjicL8yXB0chnm7FE+RiuEtBiFNzIVqL1h3z3JMfkK + tEXoKIE297k/kSA+g1/citEWST3Nh3fvGWEG8TUTd3VysgkM0PXvFzF+7JAJ44ZOHD904oRhkybGTWmh + 8PSpjMUQ4pkzwGJOi+dMTJ43KSV56qKF09NSEzl3PHvl8nlZK5Hppa7OXbxmdfq6NUuL168oLc6sKAOR + c2sqV9fVrKmv40SZ4/LWzdDlsu1N5eDyTtB5R9Vu5jSqn29Gwzao4pj5ZcxVSR97DjJ/LCfPX8rroMLo + SROF6XA4OryMvw0KrRA6+cmIxXQJCX9DhtGBDc8gN3/YjySytVZ7ejiFhuj79wtPGDVwPLcxz0Be8HcC + +BsPCZ46efj0qSOmc14iCRROTIApxp69eXMmcBRmjmJxKuco0mcuXzoHLM5mLF64OndRQX4aJ8fLS4tW + lpdkbSjDHi9Yi3yOyOsaN8IpF25phFkuAZe3NTEub99aDi7v3A6nAeP8q2A06md0ayR/wjR/fSR/Wq/w + HGQ69pRO5qTDDenkSFJhnsK8EMMXo1JBh2uRNeav0hG6Y35O+XnJ9J6U16KJE4ZOmjAMe0snM/GNnzqJ + kXfaFJCX09/p4O9ojr9j58waN2/O+OR5ExfMIy8xLS11evriRFAYQrxi2dyslfNzshbk5izMz11csDpt + XUFG0bplJUWQ45UbSjF3AV+RV1sFRS6or2WivKl+/SaIcmNR02ZwmdGZuLxjK5zGhl8bo5GzQW07fw4y + HXuKiU3iL2psdP4emni8CmO+gg405C/covO1yFHwV+n86lncqno3Y9rIxOmIUTNxunsSErmEObPGzp09 + bh7pL6tLTF64APydmrZo+pLFM9KXJC1Ln7Vi6ZxM5iXm5WQlrwKFV6UW5IHCS9avzShav7S4cHlpCViM + 2hvkGNts2b7auurVIHJD3dqGjevA5c2NnC4zj1GydUvpNhYGdf51Mhpu94nOQUaNGEUJHPJE50eSBJOR + 4I/gEx4VKRTiX6uj6Ixei+bPhW2YsGD+xJTkSakLJi9aOGXxwhbypiUuTZ+1fOmsFctmZy6fmw3+ZoK/ + KXmrmJdYw1Q4bf2a9MJ18MXLSgpXlBGLyxmLq9l+cShy3sYaVJMLGurWwF1sqmdc3tSwnuNyURPSP1Ln + fwVGP+k5yMKjeukISTo/kr+TT6jC/8oUNq5HL12SuCwjaXnGzBVLZ61chiwO4suRF+KbvSA3OyU/d+Hq + vNQ1+YvWrl7MqfAS7DksXr+0tGh5WTF88coNZVmV5YgcdvZBRW4NTj2AItfk19fCXTAuI4jLmxsQqMmR + Ov+LMfpJz0EW6q/QRfAdvH8pL9EZdTbMR+OomLyc5LxVC3AQy+rchQV58A+pHHmhv0yCib/FhcvKikHh + FeXsxBqc6YEDPcBi7hwPw/EdhlM7DFyuM3C5cSOKGLDM//KMplt7O38OstGxp8IDTzv/8v4LfqVoHaNt + WuHaJYiidenF6zOKuXOFuGAsxulCTIhL6ViarMoNWZwWG86hYUfRCE6gYR6jFn65oP7fjDY6geZJz0H+ + xUfnn9N3g6ikcCmCKMyRlwU2iLecr0SHKzFf0Zkzlf7N6HbPVGrveOlfaxXtl3pDiHgKC1j8w08J+zej + f/JTwn4ppjwv/98feKZSe+fe/ZvR/2b0L0z9fzP65zrd4Bd+of9l/vf/ZvS/Gf3rIvu/Gf1vRv+6GP3/ + AZ+4Ui+mkTlKAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/CheckMail2/CheckMail_1_1_0_3.application b/CheckMail2/CheckMail_1_1_0_3.application new file mode 100644 index 0000000..35ce245 --- /dev/null +++ b/CheckMail2/CheckMail_1_1_0_3.application @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + QIINJDl5CGPQc+KssJZCJh77VU4= + + + +GIVMHoBlUVkdBdM5x8lxxpEdnps=su5U5Nh3Jww+ZI2gSIoSWs8Z0OA=fhrKqUE48TgTw74s8oUGdCnoxlsloy5jj02DiunH/nvIqtEtsLtX+6U8lSx9mh8YrmfxJU85RTIdtGEITXDNgBbZnarjxTX96f/5LuEwEktgj45ALyUdqVDUcyy0Dq1h0ap6kwCViYrHKrH2sSLFWBMmCL1mfzeaGZ2VziQDBuo=xHIZyznsihMfToKiA1FUq5U3jSvBxsRRlZCypIl+2nLjeN8eBgcW24NWbwWz7F9PHiijG3N+ndvPJo4hKIyc5y85ptqLK10ARy7nIo1QWKFqLklhvb4yap2hIhaWUZEgQDC68BydQuwk4joQIn04LS6qzknaG8PFNIDMGnODUD0=AQABCN=JOSCH\Johannes1wLQ5QjD477HG05Dp1Lk3VQnQSA=U1yxmYYpvGlgTrZ6E5B8MpTm4a8mLnmhrH40rDpWTegf/UVlVD1fBljlYsDrxs1lR4pXf0DakTG5v/x5KzOyqJGCH7Tp5eloqIcgFv+fbNPMdy8ZfMhH+D160e/lDnQJUrgzzxZS6IC91SXTHpfWxRmuE4ajoChWEZrecz7V0jI=xHIZyznsihMfToKiA1FUq5U3jSvBxsRRlZCypIl+2nLjeN8eBgcW24NWbwWz7F9PHiijG3N+ndvPJo4hKIyc5y85ptqLK10ARy7nIo1QWKFqLklhvb4yap2hIhaWUZEgQDC68BydQuwk4joQIn04LS6qzknaG8PFNIDMGnODUD0=AQABMIIByTCCATagAwIBAgIQh9SthCpWXpdMLgXvuNaBtzAJBgUrDgMCHQUAMCcxJTAjBgNVBAMeHABKAE8AUwBDAEgAXABKAG8AaABhAG4AbgBlAHMwHhcNMDUwNjExMTExNDUzWhcNMDYwNjExMTcxNDUzWjAnMSUwIwYDVQQDHhwASgBPAFMAQwBIAFwASgBvAGgAYQBuAG4AZQBzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEchnLOeyKEx9OgqIDUVSrlTeNK8HGxFGVkLKkiX7acuN43x4GBxbbg1ZvBbPsX08eKKMbc36d288mjiEojJznLzmm2osrXQBHLucijVBYoWouSWG9vjJqnaEiFpZRkSBAMLrwHJ1C7CTiOhAifTgtLqrOSdobw8U0gMwac4NQPQIDAQABMAkGBSsOAwIdBQADgYEAcr9aTBqIwCSFVSvwkdG28Sn7/U3xjdbbggv8HzsVmpmeu/xzUOhQKQuxbPn8qy+s7BCFgrJj/ZFGru5qKrvh9hoY1cbzQYkFjbQrZItPAhecfWwvAYO+f4BTEdCbWGcW/3VYYHTLWlnqCbh2F00iZx2lZN4D7n83j6y7Vb+8O7k= \ No newline at end of file diff --git a/CheckMail2/CheckMail_1_1_0_3/CheckMail.exe.config.deploy b/CheckMail2/CheckMail_1_1_0_3/CheckMail.exe.config.deploy new file mode 100644 index 0000000..57410f0 --- /dev/null +++ b/CheckMail2/CheckMail_1_1_0_3/CheckMail.exe.config.deploy @@ -0,0 +1,24 @@ + + + + +
+ + +
+ + + + + + J.Schauer + + + porenta + + + + + + + \ No newline at end of file diff --git a/CheckMail2/CheckMail_1_1_0_3/CheckMail.exe.deploy b/CheckMail2/CheckMail_1_1_0_3/CheckMail.exe.deploy new file mode 100644 index 0000000..b97ec66 Binary files /dev/null and b/CheckMail2/CheckMail_1_1_0_3/CheckMail.exe.deploy differ diff --git a/CheckMail2/CheckMail_1_1_0_3/CheckMail.exe.manifest b/CheckMail2/CheckMail_1_1_0_3/CheckMail.exe.manifest new file mode 100644 index 0000000..b47b5e8 --- /dev/null +++ b/CheckMail2/CheckMail_1_1_0_3/CheckMail.exe.manifest @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + otd9kdzq9r9Dn1kFIuvnUrmTgEE= + + + + + + + + + + + + Gb6X3sSKlKvI5HTX0L5WdDRxGws= + + + + + + + + + + nWSh2PShrxGp3uPgHApdDng+tN4= + + + + + + + + + 9/d9xwiHCxvhyB391mnYEFYrBYo= + + +LrSHOIHTPRJCW0JFw1C6n1BAjI8=1K72rjYSk+h2wDOcvU8Uage8arY=unggQOM9aCVSAdSQvytctHiHzKdd+v7crru1Exn4/STO4PCBf2rMi/Vj+sXReHnhyRvma9RGbz3pWryk5KccrjifFL+fn/Sa814H6pTMKCmOcImbLVwFFN93Ica3GmwzOBLdx0ac3r2v+ol3NNYsvy6r+r8kh15Hpz5zxIfVUkI=xHIZyznsihMfToKiA1FUq5U3jSvBxsRRlZCypIl+2nLjeN8eBgcW24NWbwWz7F9PHiijG3N+ndvPJo4hKIyc5y85ptqLK10ARy7nIo1QWKFqLklhvb4yap2hIhaWUZEgQDC68BydQuwk4joQIn04LS6qzknaG8PFNIDMGnODUD0=AQABCN=JOSCH\Johannes1rgqK3s3kIqCA2BnPE8cMKPJTTk=j6sfqTf25qOfbKsNU4C27WOSqLvnb7pK0IYvSvv8qbZYH7Tgm2ZBZ06rK1rq1VG5q6KUQbE3gmVfWEqLaiT++GX+qtwUQRC5Mz2IGI9pcqa0NOJa2Kb1jJOQQyif7Cy7OLy0FZGTZfH8c+JpaPCELXnX3J07qDfteugynUtSOhU=xHIZyznsihMfToKiA1FUq5U3jSvBxsRRlZCypIl+2nLjeN8eBgcW24NWbwWz7F9PHiijG3N+ndvPJo4hKIyc5y85ptqLK10ARy7nIo1QWKFqLklhvb4yap2hIhaWUZEgQDC68BydQuwk4joQIn04LS6qzknaG8PFNIDMGnODUD0=AQABMIIByTCCATagAwIBAgIQh9SthCpWXpdMLgXvuNaBtzAJBgUrDgMCHQUAMCcxJTAjBgNVBAMeHABKAE8AUwBDAEgAXABKAG8AaABhAG4AbgBlAHMwHhcNMDUwNjExMTExNDUzWhcNMDYwNjExMTcxNDUzWjAnMSUwIwYDVQQDHhwASgBPAFMAQwBIAFwASgBvAGgAYQBuAG4AZQBzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEchnLOeyKEx9OgqIDUVSrlTeNK8HGxFGVkLKkiX7acuN43x4GBxbbg1ZvBbPsX08eKKMbc36d288mjiEojJznLzmm2osrXQBHLucijVBYoWouSWG9vjJqnaEiFpZRkSBAMLrwHJ1C7CTiOhAifTgtLqrOSdobw8U0gMwac4NQPQIDAQABMAkGBSsOAwIdBQADgYEAcr9aTBqIwCSFVSvwkdG28Sn7/U3xjdbbggv8HzsVmpmeu/xzUOhQKQuxbPn8qy+s7BCFgrJj/ZFGru5qKrvh9hoY1cbzQYkFjbQrZItPAhecfWwvAYO+f4BTEdCbWGcW/3VYYHTLWlnqCbh2F00iZx2lZN4D7n83j6y7Vb+8O7k= \ No newline at end of file diff --git a/CheckMail2/CheckMail_1_1_0_3/de/CheckMail.resources.dll.deploy b/CheckMail2/CheckMail_1_1_0_3/de/CheckMail.resources.dll.deploy new file mode 100644 index 0000000..3917559 Binary files /dev/null and b/CheckMail2/CheckMail_1_1_0_3/de/CheckMail.resources.dll.deploy differ diff --git a/CheckMail2/CheckMail_1_1_0_3/mail.ico.deploy b/CheckMail2/CheckMail_1_1_0_3/mail.ico.deploy new file mode 100644 index 0000000..54291e6 Binary files /dev/null and b/CheckMail2/CheckMail_1_1_0_3/mail.ico.deploy differ diff --git a/CheckMail2/setup.exe b/CheckMail2/setup.exe new file mode 100644 index 0000000..ece7a05 Binary files /dev/null and b/CheckMail2/setup.exe differ diff --git a/ClientSocket1/AssemblyInfo.cs b/ClientSocket1/AssemblyInfo.cs new file mode 100644 index 0000000..dbacda1 --- /dev/null +++ b/ClientSocket1/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/ClientSocket1/ClientSocket1.cmbx b/ClientSocket1/ClientSocket1.cmbx new file mode 100644 index 0000000..e325479 --- /dev/null +++ b/ClientSocket1/ClientSocket1.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ClientSocket1/ClientSocket1.prjx b/ClientSocket1/ClientSocket1.prjx new file mode 100644 index 0000000..0a5b667 --- /dev/null +++ b/ClientSocket1/ClientSocket1.prjx @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ClientSocket1/Main.cs b/ClientSocket1/Main.cs new file mode 100644 index 0000000..bd4cffe --- /dev/null +++ b/ClientSocket1/Main.cs @@ -0,0 +1,77 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 18.11.2004 + * Time: 17:07 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Net.Sockets; +using System.IO; + +namespace ClientSocket1 +{ + class MainClass + { + public static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + + TcpClient socketForServer ; + bool status = true ; + + try + { + socketForServer = new TcpClient("localhost",8100) ; + Console.WriteLine("Connected to Server") ; + } + + catch + { + Console.WriteLine("Failed to Connect to server{0}:999","localhost") ; + return ; + } + + NetworkStream networkStream = socketForServer.GetStream() ; + StreamReader streamreader = new StreamReader(networkStream) ; + StreamWriter streamwriter = new StreamWriter(networkStream) ; + + try + { + string clientmessage="" ; + string servermessage="" ; + + while(status) + { + Console.Write("Client:") ; + clientmessage = Console.ReadLine() ; + + if((clientmessage=="bye") || (clientmessage=="BYE")) + { + status = false ; + streamwriter.WriteLine("bye") ; + streamwriter.Flush() ; + } + + if((clientmessage!="bye") && (clientmessage!="BYE")) + { + streamwriter.WriteLine(clientmessage) ; + streamwriter.Flush() ; + servermessage = streamreader.ReadLine() ; + Console.WriteLine("Server:"+servermessage) ; + } + } + } + + catch + { + Console.WriteLine("Exception reading from the server") ; + } + + streamreader.Close() ; + networkStream.Close() ; + streamwriter.Close() ; + } + } +} diff --git a/ColorChooser/ColorChooser.csproj b/ColorChooser/ColorChooser.csproj new file mode 100644 index 0000000..6669541 --- /dev/null +++ b/ColorChooser/ColorChooser.csproj @@ -0,0 +1,102 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {543580A5-3DEE-46D2-8BF2-6F355AF2A27D} + WinExe + Properties + ColorChooser + ColorChooser + false + true + true + 2855FF1A1410CF073D484C8F0EA05CDB16D8C602 + ColorChooser_TemporaryKey.pfx + E:\Quelltexte\ColorChooser\Publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + ColorChooser + Johannes Schauer + false + + + false + true + 1.0.0.* + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + False + .NET Framework 2.0 Beta + true + + + + \ No newline at end of file diff --git a/ColorChooser/ColorChooser.csproj.user b/ColorChooser/ColorChooser.csproj.user new file mode 100644 index 0000000..7986c40 --- /dev/null +++ b/ColorChooser/ColorChooser.csproj.user @@ -0,0 +1,18 @@ + + + 8.0.50215 + ProjectFiles + E:\Quelltexte\ColorChooser\Publish\|http://localhost/ColorChooser/ + + + + + + + + + 1 + en-US + true + + \ No newline at end of file diff --git a/ColorChooser/ColorChooser.sln b/ColorChooser/ColorChooser.sln new file mode 100644 index 0000000..8d22d86 --- /dev/null +++ b/ColorChooser/ColorChooser.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColorChooser", "ColorChooser.csproj", "{543580A5-3DEE-46D2-8BF2-6F355AF2A27D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {543580A5-3DEE-46D2-8BF2-6F355AF2A27D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {543580A5-3DEE-46D2-8BF2-6F355AF2A27D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {543580A5-3DEE-46D2-8BF2-6F355AF2A27D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {543580A5-3DEE-46D2-8BF2-6F355AF2A27D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ColorChooser/ColorChooser.suo b/ColorChooser/ColorChooser.suo new file mode 100644 index 0000000..c282fde Binary files /dev/null and b/ColorChooser/ColorChooser.suo differ diff --git a/ColorChooser/ColorChooser_TemporaryKey.pfx b/ColorChooser/ColorChooser_TemporaryKey.pfx new file mode 100644 index 0000000..af80781 Binary files /dev/null and b/ColorChooser/ColorChooser_TemporaryKey.pfx differ diff --git a/ColorChooser/Form1.Designer.cs b/ColorChooser/Form1.Designer.cs new file mode 100644 index 0000000..745413f --- /dev/null +++ b/ColorChooser/Form1.Designer.cs @@ -0,0 +1,135 @@ +namespace ColorChooser +{ + partial class Form1 + { + /// + /// 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() + { + this.panel1 = new System.Windows.Forms.Panel(); + this.tbRot = new System.Windows.Forms.TrackBar(); + this.tbGrn = new System.Windows.Forms.TrackBar(); + this.tbBlau = new System.Windows.Forms.TrackBar(); + this.tbFarbe1 = new System.Windows.Forms.TextBox(); + this.panel2 = new System.Windows.Forms.Panel(); + this.tbFarbe2 = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.tbRot)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.tbGrn)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.tbBlau)).BeginInit(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Location = new System.Drawing.Point(304, 12); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(219, 190); + this.panel1.TabIndex = 0; + // + // tbRot + // + this.tbRot.Location = new System.Drawing.Point(12, 12); + this.tbRot.Maximum = 255; + this.tbRot.Name = "tbRot"; + this.tbRot.Size = new System.Drawing.Size(286, 42); + this.tbRot.TabIndex = 1; + this.tbRot.TickFrequency = 10; + this.tbRot.Scroll += new System.EventHandler(this.tbRot_Scroll); + // + // tbGrn + // + this.tbGrn.Location = new System.Drawing.Point(12, 60); + this.tbGrn.Maximum = 255; + this.tbGrn.Name = "tbGrn"; + this.tbGrn.Size = new System.Drawing.Size(286, 42); + this.tbGrn.TabIndex = 2; + this.tbGrn.TickFrequency = 10; + this.tbGrn.Scroll += new System.EventHandler(this.tbGrn_Scroll); + // + // tbBlau + // + this.tbBlau.Location = new System.Drawing.Point(12, 108); + this.tbBlau.Maximum = 255; + this.tbBlau.Name = "tbBlau"; + this.tbBlau.Size = new System.Drawing.Size(286, 42); + this.tbBlau.TabIndex = 3; + this.tbBlau.TickFrequency = 10; + this.tbBlau.Scroll += new System.EventHandler(this.tbBlau_Scroll); + // + // tbFarbe1 + // + this.tbFarbe1.Location = new System.Drawing.Point(12, 156); + this.tbFarbe1.Name = "tbFarbe1"; + this.tbFarbe1.Size = new System.Drawing.Size(286, 20); + this.tbFarbe1.TabIndex = 4; + // + // panel2 + // + this.panel2.Location = new System.Drawing.Point(529, 12); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(208, 190); + this.panel2.TabIndex = 5; + // + // tbFarbe2 + // + this.tbFarbe2.Location = new System.Drawing.Point(12, 182); + this.tbFarbe2.Name = "tbFarbe2"; + this.tbFarbe2.Size = new System.Drawing.Size(286, 20); + this.tbFarbe2.TabIndex = 6; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(747, 212); + this.Controls.Add(this.tbFarbe2); + this.Controls.Add(this.panel2); + this.Controls.Add(this.tbFarbe1); + this.Controls.Add(this.tbBlau); + this.Controls.Add(this.tbGrn); + this.Controls.Add(this.tbRot); + this.Controls.Add(this.panel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "Form1"; + this.Text = "ColorChooser"; + ((System.ComponentModel.ISupportInitialize)(this.tbRot)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.tbGrn)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.tbBlau)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.TrackBar tbRot; + private System.Windows.Forms.TrackBar tbGrn; + private System.Windows.Forms.TrackBar tbBlau; + private System.Windows.Forms.TextBox tbFarbe1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.TextBox tbFarbe2; + } +} + diff --git a/ColorChooser/Form1.cs b/ColorChooser/Form1.cs new file mode 100644 index 0000000..285ccdf --- /dev/null +++ b/ColorChooser/Form1.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace ColorChooser +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private void tbRot_Scroll(object sender, EventArgs e) + { + UpdatePanels(); + } + + private void tbGrn_Scroll(object sender, EventArgs e) + { + UpdatePanels(); + } + + private void tbBlau_Scroll(object sender, EventArgs e) + { + UpdatePanels(); + } + + void UpdatePanels() + { + panel1.BackColor = Color.FromArgb(tbRot.Value, tbGrn.Value, tbBlau.Value); + panel2.BackColor = Color.FromArgb(255-tbRot.Value, 255-tbGrn.Value, 255-tbBlau.Value); + tbFarbe1.Text = "R: " + tbRot.Value.ToString() + " G: " + tbGrn.Value.ToString() + + " B: " + tbBlau.Value.ToString() + " #" + String.Format("{0:x2}", tbRot.Value).ToUpper() + + String.Format("{0:x2}", tbGrn.Value).ToUpper() + String.Format("{0:x2}", tbBlau.Value).ToUpper(); + tbFarbe2.Text = "R: " + (255-tbRot.Value).ToString() + " G: " + (255-tbGrn.Value).ToString() + + " B: " + (255-tbBlau.Value).ToString() + " #" + String.Format("{0:x2}", 255-tbRot.Value).ToUpper() + + String.Format("{0:x2}", 255-tbGrn.Value).ToUpper() + String.Format("{0:x2}", 255-tbBlau.Value).ToUpper(); + } + } +} \ No newline at end of file diff --git a/ColorChooser/Form1.resx b/ColorChooser/Form1.resx new file mode 100644 index 0000000..8f95d66 --- /dev/null +++ b/ColorChooser/Form1.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ColorChooser/Program.cs b/ColorChooser/Program.cs new file mode 100644 index 0000000..fcd61d9 --- /dev/null +++ b/ColorChooser/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace ColorChooser +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/ColorChooser/Properties/AssemblyInfo.cs b/ColorChooser/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c558e75 --- /dev/null +++ b/ColorChooser/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ColorChooser")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ColorChooser")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b1c67c35-db98-4e46-baae-c38bf5a40fb3")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ColorChooser/Properties/Resources.Designer.cs b/ColorChooser/Properties/Resources.Designer.cs new file mode 100644 index 0000000..6b491e6 --- /dev/null +++ b/ColorChooser/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "ColorChooser.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "ColorChooser.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "ColorChooser.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace ColorChooser.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ColorChooser.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/ColorChooser/Properties/Resources.resx b/ColorChooser/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/ColorChooser/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ColorChooser/Properties/Settings.Designer.cs b/ColorChooser/Properties/Settings.Designer.cs new file mode 100644 index 0000000..0c695cc --- /dev/null +++ b/ColorChooser/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "ColorChooser.Properties.Settings.get_Default():ColorChooser.Properties.Settings")] + +namespace ColorChooser.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/ColorChooser/Properties/Settings.settings b/ColorChooser/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/ColorChooser/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Countdown/Countdown.sln b/Countdown/Countdown.sln new file mode 100644 index 0000000..db25935 --- /dev/null +++ b/Countdown/Countdown.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Countdown", "Countdown\Countdown.csproj", "{E9317950-D5C0-4268-849E-2F3FC1FA1E91}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E9317950-D5C0-4268-849E-2F3FC1FA1E91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9317950-D5C0-4268-849E-2F3FC1FA1E91}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9317950-D5C0-4268-849E-2F3FC1FA1E91}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9317950-D5C0-4268-849E-2F3FC1FA1E91}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Countdown/Countdown.suo b/Countdown/Countdown.suo new file mode 100644 index 0000000..50ccea6 Binary files /dev/null and b/Countdown/Countdown.suo differ diff --git a/Countdown/Countdown/Countdown.csproj b/Countdown/Countdown/Countdown.csproj new file mode 100644 index 0000000..94311ac --- /dev/null +++ b/Countdown/Countdown/Countdown.csproj @@ -0,0 +1,74 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {E9317950-D5C0-4268-849E-2F3FC1FA1E91} + WinExe + Properties + Countdown + Countdown + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + + Designer + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Countdown/Countdown/MainForm.cs b/Countdown/Countdown/MainForm.cs new file mode 100644 index 0000000..e63cd30 --- /dev/null +++ b/Countdown/Countdown/MainForm.cs @@ -0,0 +1,105 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace Countdown +{ + public class MainForm : System.Windows.Forms.Form + { + private System.ComponentModel.IContainer components; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label DauerLabel; + private System.Windows.Forms.Timer timer1; + + DateTime Date = DateTime.Parse("25.2.2006 13:54"); + TimeSpan Dauer; + + public MainForm() + { + InitializeComponent(); + + label1.Text = "So viel Zeit vergeht noch bis ich meine Liebste am " + Date.ToLongDateString() + " um " + Date.ToLongTimeString() + " endlich wiedersehe..."; + + Dauer = Date - DateTime.Now; + + DauerLabel.Text = Dauer.Days.ToString() + + " d " + + Dauer.Hours.ToString() + + " h " + + Dauer.Minutes.ToString() + + " min " + + Dauer.Seconds.ToString() + + " s"; + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.DauerLabel = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // timer1 + // + this.timer1.Enabled = true; + this.timer1.Interval = 1000; + this.timer1.Tick += new System.EventHandler(this.Timer1Tick); + // + // DauerLabel + // + this.DauerLabel.Location = new System.Drawing.Point(72, 48); + this.DauerLabel.Name = "DauerLabel"; + this.DauerLabel.Size = new System.Drawing.Size(168, 16); + this.DauerLabel.TabIndex = 0; + this.DauerLabel.Text = "Dauer"; + this.DauerLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(0, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(304, 40); + this.label1.TabIndex = 4; + this.label1.Text = "So viel Zeit vergeht noch bis ich meine Liebste am Sonntag dem 6. März 2005 21:00" + + " endlich wiedersehe..."; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(304, 77); + this.Controls.Add(this.label1); + this.Controls.Add(this.DauerLabel); + this.Name = "MainForm"; + this.Text = "Zähler für Anja :-)"; + this.ResumeLayout(false); + + } + #endregion + void Timer1Tick(object sender, System.EventArgs e) + { + Dauer = Date - DateTime.Now; + + DauerLabel.Text = Dauer.Days.ToString() + + " d " + + Dauer.Hours.ToString() + + " h " + + Dauer.Minutes.ToString() + + " min " + + Dauer.Seconds.ToString() + + " s"; + } + } +} diff --git a/Countdown/Countdown/MainForm.resx b/Countdown/Countdown/MainForm.resx new file mode 100644 index 0000000..93f75a9 --- /dev/null +++ b/Countdown/Countdown/MainForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Countdown/Countdown/Properties/AssemblyInfo.cs b/Countdown/Countdown/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..b6019cf --- /dev/null +++ b/Countdown/Countdown/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Countdown")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Countdown")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d20f4ae3-3f5d-4736-b1ca-0bc440b6b914")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Countdown/Countdown/Properties/Resources.Designer.cs b/Countdown/Countdown/Properties/Resources.Designer.cs new file mode 100644 index 0000000..303bb2f --- /dev/null +++ b/Countdown/Countdown/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Countdown.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Countdown.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Countdown/Countdown/Properties/Resources.resx b/Countdown/Countdown/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/Countdown/Countdown/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Countdown/Countdown/Properties/Settings.Designer.cs b/Countdown/Countdown/Properties/Settings.Designer.cs new file mode 100644 index 0000000..ae47227 --- /dev/null +++ b/Countdown/Countdown/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Countdown.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Countdown/Countdown/Properties/Settings.settings b/Countdown/Countdown/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/Countdown/Countdown/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/DirectX Samples/Rotating Triangle.cs b/DirectX Samples/Rotating Triangle.cs new file mode 100644 index 0000000..0849d07 --- /dev/null +++ b/DirectX Samples/Rotating Triangle.cs @@ -0,0 +1,243 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace Solar_System +{ + public class MainForm : System.Windows.Forms.Form + { + private System.Windows.Forms.ToolBar toolBar1; + private System.Windows.Forms.MainMenu mainMenu1; + private System.Windows.Forms.StatusBarPanel statusBarPanel1; + private System.Windows.Forms.StatusBar statusBar1; + private System.Windows.Forms.ToolBarButton toolBarButton1; + private System.Windows.Forms.MenuItem menuItem1; + + private Device m_Device = null; + private VertexBuffer m_VertexBuffer = null; + + public MainForm() + { + InitializeComponent(); + } + + public void InitGfx() + { + try + { + PresentParameters pp = new PresentParameters(); + pp.Windowed = true; + pp.SwapEffect = SwapEffect.Discard; + pp.EnableAutoDepthStencil = true; + pp.AutoDepthStencilFormat = DepthFormat.D16; + + m_Device = new Device(Manager.Adapters.Default.Adapter, + DeviceType.Hardware, + this, + CreateFlags.HardwareVertexProcessing, + pp); + m_Device.DeviceReset += new System.EventHandler(this.OnResetDevice); + m_Device.VertexFormat = CustomVertex.PositionNormalColored.Format; + this.OnCreateDevice(m_Device, null); + this.OnResetDevice(m_Device, null); + } + catch(DirectXException e) + { + MessageBox.Show(e.Message); + } + } + + public void OnCreateDevice(object sender, EventArgs e) + { + Device dev = (Device)sender; + + m_VertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionNormalColored), + 100, dev, 0, + CustomVertex.PositionNormalColored.Format, + Pool.Managed); + m_VertexBuffer.Created += new System.EventHandler(this.OnCreateVertexBuffer); + this.OnCreateVertexBuffer(m_VertexBuffer, null); + } + + public void OnResetDevice(object sender, EventArgs e) + { + Device dev = (Device)sender; + dev.RenderState.CullMode = Cull.None; + dev.RenderState.ZBufferEnable = true; + dev.RenderState.Lighting = true; + } + + public void OnCreateVertexBuffer(object sender, EventArgs e) + { + VertexBuffer vb = (VertexBuffer)sender; + + CustomVertex.PositionNormalColored[] verts = (CustomVertex.PositionNormalColored[])vb.Lock(0,0); + +// verts[0] = new CustomVertex.PositionNormalColored(-1.0f,-1.0f,0.0f,Color.Yellow.ToArgb()); +// verts[1] = new CustomVertex.PositionNormalColored(1.0f,-1.0f,0.0f,Color.Green.ToArgb()); +// verts[2] = new CustomVertex.PositionNormalColored(0.0f,1.0f,0.0f,Color.Red.ToArgb()); + + for (int i = 0; i < 50; i++) + { + float theta = (float)(2 * Math.PI * i) / 49; + verts[2 * i].SetPosition(new Vector3((float)Math.Sin(theta),-1, + (float)Math.Cos(theta))); + verts[2 * i].SetNormal(new Vector3((float)Math.Sin(theta),0, + (float)Math.Cos(theta))); + verts[2 * i + 1].SetPosition(new Vector3((float)Math.Sin(theta),1, + (float)Math.Cos(theta)); + verts[2 * i + 1].SetNormal(new Vector3((float)Math.Sin(theta),0, + (float)Math.Cos(theta))); + } + + vb.Unlock(); + } + + public void Render() + { + + m_Device.Clear(ClearFlags.Target, Color.Blue, 0.0f, 0); + m_Device.BeginScene(); + SetupLights(); + SetupMatrices(); + m_Device.SetStreamSource(0,m_VertexBuffer,0); + m_Device.DrawPrimitives(PrimitiveType.TriangleList,0,1); + m_Device.EndScene(); + m_Device.Present(); + } + + public void SetupMatrices() + { + int iTime = Environment.TickCount % 1000; + float fAngle = iTime * (2.0f * (float)Math.PI) / 1000.0f; + m_Device.Transform.World = Matrix.Rotation(fAngle); + + m_Device.Transform.View = Matrix.LookAtLH(new Vector3(0.0f,3.0f,-5.0f), + new Vector3(0.0f,0.0f,0.0f), + new Vector3(0.0f,1.0f,0.0f)); + m_Device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI/4, + 1.0f,1.0f,100.0f); + } + + public void SetupLights() + { + m_Device.Lights[0].Diffuse = Color.White; + m_Device.Lights[0].Type = LightType.Directional; + m_Device.Lights[0].Direction = new Vector3(-1, -1, 3); + m_Device.Lights[0].Commit(); + m_Device.Lights[0].Enabled = true; + + m_Device.RenderState.Ambient = Color.FromArgb(0x40, 0x40, 0x40); + } + + public void Shutdown() + { + m_Device.Dispose(); + } + + [STAThread] + public static void Main(string[] args) + { + MainForm mf = new MainForm(); + mf.InitGfx(); + mf.Show(); + + DateTime begin; + DateTime end; + TimeSpan period; + + while(mf.Created) + { + begin = DateTime.Now; + mf.Render(); + Application.DoEvents(); + end = DateTime.Now; + period = end - begin; + if(period.Milliseconds!=0) + { + mf.statusBarPanel1.Text = Convert.ToString(1.0f/period.Milliseconds); + } + } + + mf.Shutdown(); + } + + private void InitializeComponent() { + this.menuItem1 = new System.Windows.Forms.MenuItem(); + this.toolBarButton1 = new System.Windows.Forms.ToolBarButton(); + this.statusBar1 = new System.Windows.Forms.StatusBar(); + this.statusBarPanel1 = new System.Windows.Forms.StatusBarPanel(); + this.mainMenu1 = new System.Windows.Forms.MainMenu(); + this.toolBar1 = new System.Windows.Forms.ToolBar(); + ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).BeginInit(); + this.SuspendLayout(); + // + // menuItem1 + // + this.menuItem1.Index = 0; + this.menuItem1.Text = "Datei"; + // + // statusBar1 + // + this.statusBar1.Location = new System.Drawing.Point(0, 439); + this.statusBar1.Name = "statusBar1"; + this.statusBar1.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] { + this.statusBarPanel1}); + this.statusBar1.ShowPanels = true; + this.statusBar1.Size = new System.Drawing.Size(664, 22); + this.statusBar1.TabIndex = 1; + this.statusBar1.Text = "statusBar1"; + // + // statusBarPanel1 + // + this.statusBarPanel1.Text = "statusBarPanel1"; + this.statusBarPanel1.Width = 200; + // + // mainMenu1 + // + this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.menuItem1}); + // + // toolBar1 + // + this.toolBar1.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] { + this.toolBarButton1}); + this.toolBar1.DropDownArrows = true; + this.toolBar1.Location = new System.Drawing.Point(0, 0); + this.toolBar1.Name = "toolBar1"; + this.toolBar1.ShowToolTips = true; + this.toolBar1.Size = new System.Drawing.Size(664, 28); + this.toolBar1.TabIndex = 3; + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(664, 461); + this.Controls.Add(this.toolBar1); + this.Controls.Add(this.statusBar1); + this.Menu = this.mainMenu1; + this.Name = "MainForm"; + this.Text = "MainForm"; + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.MainFormKeyPress); + ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).EndInit(); + this.ResumeLayout(false); + } + + protected void MainFormKeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) + { + if((int)e.KeyChar == (int)Keys.Escape) + { + this.Close(); + } + } + + protected void OnPaint(object sender, System.Windows.Forms.PaintEventArgs e) + { + this.Render(); + } + + } +} diff --git a/Dispatcher/Dispatcher.aspx b/Dispatcher/Dispatcher.aspx new file mode 100644 index 0000000..c437715 --- /dev/null +++ b/Dispatcher/Dispatcher.aspx @@ -0,0 +1,195 @@ +<%@ Page Language="C#" %> +<%@ import Namespace="System.Data" %> +<%@ import Namespace="System.Data.SqlClient" %> + + + + + +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ First Name + + +
+ LastName + + +
+ Street + + +
+ City + + +
+ Alias + + +
+ Password + + +
+ +
+
+ zurück zum Hauptmenü +
+
+
+ + diff --git a/Dispatcher/Global.asax b/Dispatcher/Global.asax new file mode 100644 index 0000000..055309c --- /dev/null +++ b/Dispatcher/Global.asax @@ -0,0 +1,7 @@ +<%@ Application language="C#" %> + + diff --git a/Dispatcher/Login.aspx b/Dispatcher/Login.aspx new file mode 100644 index 0000000..135b71c --- /dev/null +++ b/Dispatcher/Login.aspx @@ -0,0 +1,47 @@ +<%@ Page Language="C#" %> +<%@ import Namespace="System.Data" %> +<%@ import Namespace="System.Data.SqlClient" %> + + + + + +
+

+ Alias  +
+ Password  +
+ +
+

+
+ + diff --git a/Dispatcher/Reporter.aspx b/Dispatcher/Reporter.aspx new file mode 100644 index 0000000..7897d42 --- /dev/null +++ b/Dispatcher/Reporter.aspx @@ -0,0 +1,16 @@ +<%@ Page Language="C#" %> + + + + + +
+ +
+ + diff --git a/Dispatcher/Trains.aspx b/Dispatcher/Trains.aspx new file mode 100644 index 0000000..578771a --- /dev/null +++ b/Dispatcher/Trains.aspx @@ -0,0 +1,180 @@ +<%@ Page Language="C#" %> +<%@ import Namespace="System.Data" %> +<%@ import Namespace="System.Data.SqlClient" %> + + + + + +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Departure + + +
+ Departure Station + + +
+ Arrival + + +
+ Arrival Station + + +
+ Available + + +
+ Planned + + +
+ +
+
+ zurück zum Hauptmenü +
+
+
+ + diff --git a/Dispatcher/default.aspx b/Dispatcher/default.aspx new file mode 100644 index 0000000..f2a7333 --- /dev/null +++ b/Dispatcher/default.aspx @@ -0,0 +1,31 @@ +<%@ Page Language="C#" %> + + + + + +
+

+ Manage Dispatcher +
+ Manage Reporter +

+

+
+ Manage Trains +

+

+
+ +

+
+ + diff --git a/Dispatcher/web.config b/Dispatcher/web.config new file mode 100644 index 0000000..4708d4f --- /dev/null +++ b/Dispatcher/web.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/Editor/Editor.csproj b/Editor/Editor.csproj new file mode 100644 index 0000000..5a8525a --- /dev/null +++ b/Editor/Editor.csproj @@ -0,0 +1,70 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {199A710E-F29F-4505-A7BF-248D2120F194} + WinExe + Properties + Editor + Editor + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + \ No newline at end of file diff --git a/Editor/Editor.csproj.user b/Editor/Editor.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/Editor/Editor.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/Editor/Editor.sln b/Editor/Editor.sln new file mode 100644 index 0000000..960143a --- /dev/null +++ b/Editor/Editor.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Editor", "Editor.csproj", "{199A710E-F29F-4505-A7BF-248D2120F194}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {199A710E-F29F-4505-A7BF-248D2120F194}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {199A710E-F29F-4505-A7BF-248D2120F194}.Debug|Any CPU.Build.0 = Debug|Any CPU + {199A710E-F29F-4505-A7BF-248D2120F194}.Release|Any CPU.ActiveCfg = Release|Any CPU + {199A710E-F29F-4505-A7BF-248D2120F194}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Editor/Editor.suo b/Editor/Editor.suo new file mode 100644 index 0000000..a4ccfc1 Binary files /dev/null and b/Editor/Editor.suo differ diff --git a/Editor/Form1.Designer.cs b/Editor/Form1.Designer.cs new file mode 100644 index 0000000..05c1396 --- /dev/null +++ b/Editor/Form1.Designer.cs @@ -0,0 +1,111 @@ +namespace Editor +{ + partial class Form1 + { + /// + /// 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() + { + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.dateiToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusStrip1.SuspendLayout(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // richTextBox1 + // + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Location = new System.Drawing.Point(0, 24); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(292, 227); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = ""; + this.richTextBox1.KeyUp += new System.Windows.Forms.KeyEventHandler(this.richTextBox1_KeyUp); + this.richTextBox1.TextChanged += new System.EventHandler(this.richTextBox1_TextChanged); + this.richTextBox1.Click += new System.EventHandler(this.richTextBox1_Click); + // + // statusStrip1 + // + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel1}); + this.statusStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Table; + this.statusStrip1.Location = new System.Drawing.Point(0, 251); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(292, 22); + this.statusStrip1.SizingGrip = false; + this.statusStrip1.TabIndex = 1; + this.statusStrip1.Text = "statusStrip1"; + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.dateiToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(292, 24); + this.menuStrip1.TabIndex = 2; + this.menuStrip1.Text = "menuStrip1"; + // + // dateiToolStripMenuItem + // + this.dateiToolStripMenuItem.Name = "dateiToolStripMenuItem"; + this.dateiToolStripMenuItem.Text = "Datei"; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Text = "Zeile:"; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(292, 273); + this.Controls.Add(this.richTextBox1); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.menuStrip1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "Form1"; + this.Text = "Form1"; + this.statusStrip1.ResumeLayout(false); + this.menuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.RichTextBox richTextBox1; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem dateiToolStripMenuItem; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + } +} + diff --git a/Editor/Form1.cs b/Editor/Form1.cs new file mode 100644 index 0000000..b44dd3d --- /dev/null +++ b/Editor/Form1.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Text.RegularExpressions; + +namespace Editor +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private void richTextBox1_TextChanged(object sender, EventArgs e) + { + int firstCharIndexOfCurrentLine = richTextBox1.GetFirstCharIndexOfCurrentLine(); + int currentLine = richTextBox1.GetLineFromCharIndex(firstCharIndexOfCurrentLine); + int firstCharIndexOfNextLine = richTextBox1.GetFirstCharIndexFromLine(currentLine + 1); + int lastCharIndexOfCurrentLine = firstCharIndexOfNextLine - 1; + if (firstCharIndexOfNextLine == -1) + { + lastCharIndexOfCurrentLine = richTextBox1.Text.Length; + } + + string line = richTextBox1.Text.Substring(firstCharIndexOfCurrentLine, lastCharIndexOfCurrentLine - firstCharIndexOfCurrentLine); + + Regex r = new Regex("([ \\t{}();])"); + string[] tokens = r.Split(line); + int index = firstCharIndexOfCurrentLine; + foreach (string token in tokens) + { + richTextBox1.SelectionStart = index; + richTextBox1.SelectionLength = token.Length; + richTextBox1.SelectionBackColor = Color.White; + if (token == "blah") + { + richTextBox1.SelectionBackColor = Color.Red; + } + index += token.Length; + } + } + + private void richTextBox1_Click(object sender, EventArgs e) + { + //toolStripStatusLabel1.Text = richTextBox1.GetLineFromCharIndex(richTextBox1.GetFirstCharIndexOfCurrentLine()).ToString(); + } + + private void richTextBox1_KeyUp(object sender, KeyEventArgs e) + { + //toolStripStatusLabel1.Text = richTextBox1.GetLineFromCharIndex(richTextBox1.GetFirstCharIndexOfCurrentLine()).ToString(); + } + } +} \ No newline at end of file diff --git a/Editor/Form1.resx b/Editor/Form1.resx new file mode 100644 index 0000000..cb58f10 --- /dev/null +++ b/Editor/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 127, 17 + + \ No newline at end of file diff --git a/Editor/Program.cs b/Editor/Program.cs new file mode 100644 index 0000000..3d295d0 --- /dev/null +++ b/Editor/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Editor +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Editor/Properties/AssemblyInfo.cs b/Editor/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9046e7d --- /dev/null +++ b/Editor/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Editor")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Editor")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e81d58b1-aa2f-4353-841c-b6d33d56225e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Editor/Properties/Resources.Designer.cs b/Editor/Properties/Resources.Designer.cs new file mode 100644 index 0000000..9a17954 --- /dev/null +++ b/Editor/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Editor.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Editor.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Editor.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace Editor.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Editor.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Editor/Properties/Resources.resx b/Editor/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/Editor/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Editor/Properties/Settings.Designer.cs b/Editor/Properties/Settings.Designer.cs new file mode 100644 index 0000000..bba3a70 --- /dev/null +++ b/Editor/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Editor.Properties.Settings.get_Default():Editor.Properties.Settings")] + +namespace Editor.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Editor/Properties/Settings.settings b/Editor/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/Editor/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Explorer/Backup.cs b/Explorer/Backup.cs new file mode 100644 index 0000000..2e4802d --- /dev/null +++ b/Explorer/Backup.cs @@ -0,0 +1,552 @@ +/* +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Management; +using System.Collections; +using System.Threading; +using System.IO; + +namespace Explorer +{ + public partial class Explorer : Form + { + private LogicalDiskInfoCollection ldic = new LogicalDiskInfoCollection(); + private bool firstlyactualized = false; + private Thread t; + + private delegate void RefreshlvMainHandler(); + + public Explorer() + { + InitializeComponent(); + + string[] drives = Directory.GetLogicalDrives(); + foreach (string drive in drives) + { + lvArbeitsplatz.Items.Add(drive.Substring(0, 2)); + lvArbeitsplatz.Items[lvArbeitsplatz.Items.Count - 1].SubItems.Add("Bitte warten..."); + lvArbeitsplatz.Items[lvArbeitsplatz.Items.Count - 1].SubItems.Add("Bitte warten..."); + lvArbeitsplatz.Items[lvArbeitsplatz.Items.Count - 1].SubItems.Add("Bitte warten..."); + + tsddbArbeitsplatz.DropDownItems.Add(drive); + } + + t = new Thread(new ThreadStart(FillLogicalDiskInfoCollection)); + t.Start(); + } + + void FillLogicalDiskInfoCollection() + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk"); + + ManagementObjectCollection moc = mos.Get(); + + foreach (ManagementBaseObject mo in moc) + { + LogicalDiskInfo ldi = new LogicalDiskInfo(); + ldi.Name = mo["Name"] != null ? mo["Name"].ToString() : ""; + ldi.Size = mo["Size"] != null ? UInt64.Parse(mo["Size"].ToString()) : 0; + ldi.Freespace = mo["FreeSpace"] != null ? UInt64.Parse(mo["FreeSpace"].ToString()) : 0; + ldi.Description = mo["Description"] != null ? mo["Description"].ToString() : ""; + ldi.VolumeName = mo["VolumeName"] != null ? mo["VolumeName"].ToString() : ""; + + bool exists = false; + + foreach (LogicalDiskInfo ldi2 in ldic) + { + if (ldi.Name == ldi2.Name) + { + exists = true; + break; + } + } + + if (exists) + { + LogicalDiskInfo ldi3 = ldic.Item(ldi.Name); + ldi3.VolumeName = ldi.VolumeName; + ldi3.Size = ldi.Size; + ldi3.Freespace = ldi.Freespace; + ldi3.Description = ldi.Description; + } + else + { + ldic.Add(ldi); + } + } + + if (!firstlyactualized) + { + if (this != null) + { + this.Invoke(new RefreshlvMainHandler(RefreshlvMain)); + firstlyactualized = true; + } + } + } + + private void lvMain_ColumnClick(object sender, ColumnClickEventArgs e) + { + lvArbeitsplatz.ListViewItemSorter = new ListViewItemComparer(e.Column); + } + + class ListViewItemComparer : IComparer + { + private int col; + public ListViewItemComparer(int column) + { + col = column; + } + public int Compare(object x, object y) + { + switch (col) + { + case 0: + return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text); + case 1: + string[] tokenA = ((ListViewItem)x).SubItems[col].Text.Split(' '); + decimal sizeA = 0; + switch (tokenA[1]) + { + case "kB": + sizeA = decimal.Parse(tokenA[0]) * 1024; + break; + case "MB": + sizeA = decimal.Parse(tokenA[0]) * 1048576; + break; + case "GB": + sizeA = decimal.Parse(tokenA[0]) * 1073741824; + break; + default: + sizeA = decimal.Parse(tokenA[0]); + break; + } + + string[] tokenB = ((ListViewItem)y).SubItems[col].Text.Split(' '); + decimal sizeB = 0; + switch (tokenB[1]) + { + case "kB": + sizeB = decimal.Parse(tokenB[0]) * 1024; + break; + case "MB": + sizeB = decimal.Parse(tokenB[0]) * 1048576; + break; + case "GB": + sizeB = decimal.Parse(tokenB[0]) * 1073741824; + break; + default: + sizeB = decimal.Parse(tokenB[0]); + break; + } + return Math.Sign(sizeA - sizeB); + case 2: + goto case 1; + case 3: + goto case 0; + default: + return 0; + } + } + } + + private void lvMain_SelectedIndexChanged(object sender, EventArgs e) + { + switch (lvArbeitsplatz.SelectedItems.Count) + { + case 0: + lProperties.Text = "Keine Elemente ausgewhlt"; + break; + case 1: + LogicalDiskInfo ldi = ldic.Item(lvArbeitsplatz.SelectedItems[0].SubItems[0].Text.Substring(0, 2)); + if (ldi != null) + { + string text = "Name: " + ldi.Name + "\n" + + "Size: " + ldi.Size + "\r\n" + + "Bezeichnung: " + ldi.VolumeName + "\r\n"; + lProperties.Text = text; + } + else + { + lProperties.Text = "wat?\"" + lvArbeitsplatz.SelectedItems[0].SubItems[0].Text.Substring(0, 2) + "\""; + } + break; + default: + lProperties.Text = lvArbeitsplatz.SelectedItems.Count.ToString() + " Elemente ausgewhlt"; + break; + } + } + + void RefreshlvMain() + { + foreach (LogicalDiskInfo ldi in ldic) + { + bool lviisfound = false; + foreach (ListViewItem lvi in lvArbeitsplatz.Items) + { + if (ldi.Name == lvi.SubItems[0].Text.Substring(0, 2)) + { + switch (ldi.Description) + { + case "Lokale Festplatte": + lvi.ImageIndex = 2; + break; + case "CD": + lvi.ImageIndex = 3; + break; + } + lvi.SubItems[0].Text = ldi.Name + " (" + ldi.VolumeName + ")"; + lvi.SubItems[1].Text = ConvertToUsableWithUnit(ldi.Size); + lvi.SubItems[2].Text = ConvertToUsableWithUnit(ldi.Freespace); + lvi.SubItems[3].Text = ldi.Description; + lviisfound = true; + break; + } + } + + if (lviisfound == false) + { + switch (ldi.Description) + { + case "Lokale Festplatte": + lvArbeitsplatz.Items.Add(ldi.Name + " (" + ldi.VolumeName + ")", 2); + break; + case "CD": + lvArbeitsplatz.Items.Add(ldi.Name + " (" + ldi.VolumeName + ")", 3); + break; + default: + lvArbeitsplatz.Items.Add(ldi.Name + " (" + ldi.VolumeName + ")"); + break; + } + lvArbeitsplatz.Items[lvArbeitsplatz.Items.Count - 1].SubItems.Add(ConvertToUsableWithUnit(ldi.Size)); + lvArbeitsplatz.Items[lvArbeitsplatz.Items.Count - 1].SubItems.Add(ConvertToUsableWithUnit(ldi.Freespace)); + lvArbeitsplatz.Items[lvArbeitsplatz.Items.Count - 1].SubItems.Add(ldi.Description); + } + + bool tsiisfound = false; + + foreach (ToolStripItem tsi in tsddbArbeitsplatz.DropDownItems) + { + if (tsi.Name != "toolStripSeparator8") + { + if (ldi.Name == tsi.Text.Substring(0, 2)) + { + switch (ldi.Description) + { + case "Lokale Festplatte": + tsi.Image = FileSystemIcons.Images[2]; + break; + case "CD": + tsi.Image = FileSystemIcons.Images[3]; + break; + } + tsiisfound = true; + break; + } + } + } + + if (tsiisfound == false) + { + switch (ldi.Description) + { + case "Lokale Festplatte": + tsddbArbeitsplatz.DropDownItems.Add(ldi.Name + "\\", FileSystemIcons.Images[2]); + break; + case "CD": + tsddbArbeitsplatz.DropDownItems.Add(ldi.Name + "\\", FileSystemIcons.Images[3]); + break; + default: + tsddbArbeitsplatz.DropDownItems.Add(ldi.Name + "\\"); + break; + } + } + } + } + + private void tsbAktualisieren_Click(object sender, EventArgs e) + { + RefreshlvMain(); + } + + private void GlobalTimer_Tick(object sender, EventArgs e) + { + Thread t = new Thread(new ThreadStart(FillLogicalDiskInfoCollection)); + t.Start(); + } + + string ConvertToUsableWithUnit(UInt64 number) + { + if (number < 1024) + { + return number.ToString() + " Bytes"; + } + else if (number >= 1024 && number < 1048576) + { + return Math.Round(Convert.ToDecimal(number) / 1024, 2).ToString() + " kB"; + } + else if (number >= 1048576 && number < 1073741824) + { + return Math.Round(Convert.ToDecimal(number) / 1048576, 2).ToString() + " MB"; + } + else if (number >= 1073741824) + { + return Math.Round(Convert.ToDecimal(number) / 1073741824, 2).ToString() + " GB"; + } + return ""; + } + + private void tsbWechselnZu_Click(object sender, EventArgs e) + { + string[] blah = Directory.GetLogicalDrives(); + string text = ""; + foreach (string b in blah) + { + text += b; + } + MessageBox.Show(text); + } + + /* + * lvArbeitsplatz_ItemActivate + * + * Wird ausgefhrt, wenn im Arbeitsplatz ListView ein Item Aktiviert wird + * ein Click auf ein + * + private void lvArbeitsplatz_ItemActivate(object sender, EventArgs e) + { + //Angewhltes Laufwerk bestimmen + string drive = lvArbeitsplatz.SelectedItems[0].SubItems[0].Text.Substring(0, 2) + "\\"; + + //Ein Click Event auf den Arbeitsplatz Dropdownbutton ausfhren, bei dem das im + //Listview angewhlte Laufwerk bergeben wird + + //Toolstripitem des entsprechenden Laufwerksbuchstaben bestimmen + ToolStripItem toolstripitem = null; + foreach (ToolStripItem tsi in tsddbArbeitsplatz.DropDownItems) + { + if (tsi.Text == drive) + { + toolstripitem = tsi; + break; + } + } + //Das Click Event Argument erstellen + ToolStripItemClickedEventArgs b = new ToolStripItemClickedEventArgs(toolstripitem); + //und ausfhren + tsddbArbeitsplatz_DropDownItemClicked(new object(), b); + //In den Vordergrund bringen + lvFolder.BringToFront(); + } + + /* + * tsddbArbeitsplatz_DropDownItemClicked + * + * Wird ausgefhrt, wenn ein Element des Arbeitsplatz Dropdown Mens angeklickt wurde + * und wenn aus dem Listview ein Element aktiviert wurde + * + private void tsddbArbeitsplatz_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + //angeklicktes Item holen + ToolStripItem tsi = e.ClickedItem; + //Button nach dem angewhlten Element benennen + tsddbArbeitsplatz.Text = tsi.Text; + //alle eventuellen dropdownitems nach dem Arbeitsplatz dropdownitem lschen + while (tsFolders.Items.Count - 1 > 0) + { + tsFolders.Items.RemoveAt(tsFolders.Items.Count - 1); + } + + //berprfen ob der Eintrag Arbeitsplatz angewhlt wurde + if (tsi.Text != "Arbeitsplatz") + { + //die Folder Liste von Eintrgen befreien + lvFolder.Items.Clear(); + + //Alle Ordner des angewhlten Laufwerks holen + DirectoryInfo di = new DirectoryInfo(tsi.Text); + DirectoryInfo[] dirs = di.GetDirectories(); + FileInfo[] files = di.GetFiles(); + + if (dirs.Length > 0) + { + //wenn nicht, dann neuen Dropdownbutton erstellen und ihm ein Clickevent zuweisen + ToolStripDropDownButton tsddbNeu = new ToolStripDropDownButton("Bitte Auswhlen..."); + tsddbNeu.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsddbNeu_DropDownItemClicked); + + //jeden Ordner dem neuen Dropdownmen und dem Folder Listview hinzufgen + foreach (DirectoryInfo dir in dirs) + { + tsddbNeu.DropDownItems.Add(dir.Name + "\\"); + ListViewItem lvi = new ListViewItem(dir.Name, 0); + lvFolder.Items.Add(lvi); + } + + //das dropdownmen dem Toolstrip hinzufgen + tsFolders.Items.Add(tsddbNeu); + } + + foreach (FileInfo fi in files) + { + ListViewItem lvi = new ListViewItem(fi.Name, 1); + lvFolder.Items.Add(lvi); + } + + + //die Adressleiste Aktualisieren + tscbAdresse.Text = tsi.Text; + lvFolder.BringToFront(); + } + else + { + //die Adressleiste aktualisieren + tscbAdresse.Text = "Arbeitsplatz"; + lvArbeitsplatz.BringToFront(); + } + + tsddbArbeitsplatz.Image = e.ClickedItem.Image; + } + + private void tsddbNeu_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + string path = ""; + bool found = false; + int lastfolderitemindex = 0; + + foreach (ToolStripItem folderitem in tsFolders.Items) + { + ToolStripDropDownButton dropdownitem = (ToolStripDropDownButton)folderitem; + foreach (ToolStripItem toolstripitem in dropdownitem.DropDownItems) + { + if (toolstripitem == e.ClickedItem) + { + path += toolstripitem.Text; + folderitem.Text = toolstripitem.Text; + found = true; + break; + } + } + if (found) + { + break; + } + else + { + path += folderitem.Text; + lastfolderitemindex++; + } + } + while (tsFolders.Items.Count - 1 > lastfolderitemindex) + { + tsFolders.Items.RemoveAt(tsFolders.Items.Count - 1); + } + + DirectoryInfo di = new DirectoryInfo(path); + DirectoryInfo[] dirs = di.GetDirectories(); + FileInfo[] files = di.GetFiles(); + + lvFolder.Items.Clear(); + + if (dirs.Length > 0) + { + ToolStripDropDownButton tsddbNeu = new ToolStripDropDownButton("Bitte Auswhlen..."); + tsddbNeu.DropDownItemClicked += new ToolStripItemClickedEventHandler(tsddbNeu_DropDownItemClicked); + + foreach (DirectoryInfo dir in dirs) + { + tsddbNeu.DropDownItems.Add(dir.Name + "\\"); + ListViewItem lvi = new ListViewItem(dir.Name, 0); + lvFolder.Items.Add(lvi); + } + + tsFolders.Items.Add(tsddbNeu); + } + + foreach (FileInfo fi in files) + { + ListViewItem lvi = new ListViewItem(fi.Name, 1); + lvFolder.Items.Add(lvi); + } + + tscbAdresse.Text = path; + } + + private void Explorer_FormClosed(object sender, FormClosedEventArgs e) + { + if (t.ThreadState == ThreadState.Running) + { + t.Abort(); + } + } + + private void lvFolder_ItemActivate(object sender, EventArgs e) + { + string folder = lvFolder.SelectedItems[0].SubItems[0].Text + "\\"; + + ToolStripItem toolstripitem = null; + ToolStripDropDownButton dropdownbutton = (ToolStripDropDownButton)tsFolders.Items[tsFolders.Items.Count - 1]; + foreach (ToolStripItem tsi in dropdownbutton.DropDownItems) + { + if (tsi.Text == folder) + { + toolstripitem = tsi; + break; + } + } + tsddbNeu_DropDownItemClicked(new object(), new ToolStripItemClickedEventArgs(toolstripitem)); + } + + private void tsbAufwrts_Click(object sender, EventArgs e) + { + if (tsFolders.Items[tsFolders.Items.Count - 1].Text == "Bitte Auswhlen...") + { + if (tsFolders.Items.Count == 2) + { + tsddbArbeitsplatz_DropDownItemClicked(new object(), new ToolStripItemClickedEventArgs(tsmiArbeitsplatz)); + } + else if (tsFolders.Items.Count == 3) + { + ToolStripItem toolstripitem = null; + foreach (ToolStripItem tsi in tsddbArbeitsplatz.DropDownItems) + { + if (tsi.Text == tsddbArbeitsplatz.Text) + { + toolstripitem = tsi; + break; + } + } + tsddbArbeitsplatz_DropDownItemClicked(new object(), new ToolStripItemClickedEventArgs(toolstripitem)); + } + else if (tsFolders.Items.Count > 3) + { + ToolStripItem toolstripitem = null; + ToolStripDropDownButton dropdownbutton = (ToolStripDropDownButton)tsFolders.Items[tsFolders.Items.Count - 3]; + foreach (ToolStripItem tsi in dropdownbutton.DropDownItems) + { + if (tsi.Text == dropdownbutton.Text) + { + toolstripitem = tsi; + break; + } + } + tsddbNeu_DropDownItemClicked(new object(), new ToolStripItemClickedEventArgs(toolstripitem)); + } + } + } + + private void tscbAdresse_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Return) + { + MessageBox.Show(tscbAdresse.Text); + e.Handled = true; + } + } + } +} +*/ \ No newline at end of file diff --git a/Explorer/Explorer.csproj b/Explorer/Explorer.csproj new file mode 100644 index 0000000..6808727 --- /dev/null +++ b/Explorer/Explorer.csproj @@ -0,0 +1,92 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {EBCD7FE4-DFF5-4819-84A3-0522BF15AAF8} + WinExe + Properties + Explorer + Explorer + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + Form + + + Explorer.cs + + + + + + + Explorer.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + {80CC9F66-E7D8-4DDD-85B6-D9E6CD0E93E2} + 8 + 0 + 0 + primary + False + + + + + + + + + + \ No newline at end of file diff --git a/Explorer/Explorer.csproj.user b/Explorer/Explorer.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/Explorer/Explorer.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/Explorer/Explorer.sln b/Explorer/Explorer.sln new file mode 100644 index 0000000..183ac78 --- /dev/null +++ b/Explorer/Explorer.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Explorer", "Explorer.csproj", "{EBCD7FE4-DFF5-4819-84A3-0522BF15AAF8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EBCD7FE4-DFF5-4819-84A3-0522BF15AAF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EBCD7FE4-DFF5-4819-84A3-0522BF15AAF8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EBCD7FE4-DFF5-4819-84A3-0522BF15AAF8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EBCD7FE4-DFF5-4819-84A3-0522BF15AAF8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Explorer/Explorer.suo b/Explorer/Explorer.suo new file mode 100644 index 0000000..caeeb51 Binary files /dev/null and b/Explorer/Explorer.suo differ diff --git a/Explorer/Icons/Abbrechen.bmp b/Explorer/Icons/Abbrechen.bmp new file mode 100644 index 0000000..53c87dd Binary files /dev/null and b/Explorer/Icons/Abbrechen.bmp differ diff --git a/Explorer/Icons/Aktualisieren.bmp b/Explorer/Icons/Aktualisieren.bmp new file mode 100644 index 0000000..2ac7d50 Binary files /dev/null and b/Explorer/Icons/Aktualisieren.bmp differ diff --git a/Explorer/Icons/App.ico b/Explorer/Icons/App.ico new file mode 100644 index 0000000..64c203f Binary files /dev/null and b/Explorer/Icons/App.ico differ diff --git a/Explorer/Icons/Arbeitsplatz.bmp b/Explorer/Icons/Arbeitsplatz.bmp new file mode 100644 index 0000000..c7bb5f1 Binary files /dev/null and b/Explorer/Icons/Arbeitsplatz.bmp differ diff --git a/Explorer/Icons/Aufwärts.bmp b/Explorer/Icons/Aufwärts.bmp new file mode 100644 index 0000000..51a65cf Binary files /dev/null and b/Explorer/Icons/Aufwärts.bmp differ diff --git a/Explorer/Icons/Ausschneiden.png b/Explorer/Icons/Ausschneiden.png new file mode 100644 index 0000000..a8e75ce Binary files /dev/null and b/Explorer/Icons/Ausschneiden.png differ diff --git a/Explorer/Icons/CD.bmp b/Explorer/Icons/CD.bmp new file mode 100644 index 0000000..c1b4414 Binary files /dev/null and b/Explorer/Icons/CD.bmp differ diff --git a/Explorer/Icons/DefaultFile.bmp b/Explorer/Icons/DefaultFile.bmp new file mode 100644 index 0000000..05ac125 Binary files /dev/null and b/Explorer/Icons/DefaultFile.bmp differ diff --git a/Explorer/Icons/Einfügen.png b/Explorer/Icons/Einfügen.png new file mode 100644 index 0000000..0dd1645 Binary files /dev/null and b/Explorer/Icons/Einfügen.png differ diff --git a/Explorer/Icons/Folder.bmp b/Explorer/Icons/Folder.bmp new file mode 100644 index 0000000..9331367 Binary files /dev/null and b/Explorer/Icons/Folder.bmp differ diff --git a/Explorer/Icons/Google.ico b/Explorer/Icons/Google.ico new file mode 100644 index 0000000..ce6123e Binary files /dev/null and b/Explorer/Icons/Google.ico differ diff --git a/Explorer/Icons/HD.bmp b/Explorer/Icons/HD.bmp new file mode 100644 index 0000000..254c931 Binary files /dev/null and b/Explorer/Icons/HD.bmp differ diff --git a/Explorer/Icons/Kopieren.png b/Explorer/Icons/Kopieren.png new file mode 100644 index 0000000..a5db593 Binary files /dev/null and b/Explorer/Icons/Kopieren.png differ diff --git a/Explorer/Icons/Play.bmp b/Explorer/Icons/Play.bmp new file mode 100644 index 0000000..d77e39a Binary files /dev/null and b/Explorer/Icons/Play.bmp differ diff --git a/Explorer/Icons/Rückgängig.png b/Explorer/Icons/Rückgängig.png new file mode 100644 index 0000000..7d683dc Binary files /dev/null and b/Explorer/Icons/Rückgängig.png differ diff --git a/Explorer/Icons/Suchen.png b/Explorer/Icons/Suchen.png new file mode 100644 index 0000000..9d0b238 Binary files /dev/null and b/Explorer/Icons/Suchen.png differ diff --git a/Explorer/Icons/Vorwärts.bmp b/Explorer/Icons/Vorwärts.bmp new file mode 100644 index 0000000..7ae49ff Binary files /dev/null and b/Explorer/Icons/Vorwärts.bmp differ diff --git a/Explorer/Icons/Wechseln zu.bmp b/Explorer/Icons/Wechseln zu.bmp new file mode 100644 index 0000000..e8ade89 Binary files /dev/null and b/Explorer/Icons/Wechseln zu.bmp differ diff --git a/Explorer/Icons/Wiederholen.png b/Explorer/Icons/Wiederholen.png new file mode 100644 index 0000000..59884ae Binary files /dev/null and b/Explorer/Icons/Wiederholen.png differ diff --git a/Explorer/Icons/Zurück.bmp b/Explorer/Icons/Zurück.bmp new file mode 100644 index 0000000..8fae17c Binary files /dev/null and b/Explorer/Icons/Zurück.bmp differ diff --git a/Explorer/LogicalDiskInfo.cs b/Explorer/LogicalDiskInfo.cs new file mode 100644 index 0000000..b0d1f6a --- /dev/null +++ b/Explorer/LogicalDiskInfo.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Explorer +{ + class LogicalDiskInfo + { + public string Name; + public UInt64 Size; + public UInt64 Freespace; + public string Description; + public string VolumeName; + + public LogicalDiskInfo(string name, UInt64 size, UInt64 freespace, string description) + { + Name = name; + Size = size; + Freespace = freespace; + Description = description; + } + + public LogicalDiskInfo() + { + Name = ""; + Size = 0; + Freespace = 0; + Description = ""; + VolumeName = ""; + } + } +} diff --git a/Explorer/LogicalDiskInfoCollection.cs b/Explorer/LogicalDiskInfoCollection.cs new file mode 100644 index 0000000..0649967 --- /dev/null +++ b/Explorer/LogicalDiskInfoCollection.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Explorer +{ + class LogicalDiskInfoCollection : System.Collections.CollectionBase + { + public void Add(LogicalDiskInfo ldi) + { + List.Add(ldi); + } + + public void Remove(int index) + { + if (index > 0 || index < Count - 1) + { + List.RemoveAt(index); + } + } + + public LogicalDiskInfo Item(int index) + { + if (index > 0 || index < Count - 1) + { + return (LogicalDiskInfo)List[index]; + } + else + { + return null; + } + } + + public LogicalDiskInfo Item(string name) + { + foreach (LogicalDiskInfo ldi in List) + { + if (ldi.Name == name) + { + return ldi; + } + } + return null; + } + } +} diff --git a/Explorer/MainWindow/Explorer.Designer.cs b/Explorer/MainWindow/Explorer.Designer.cs new file mode 100644 index 0000000..d42f179 --- /dev/null +++ b/Explorer/MainWindow/Explorer.Designer.cs @@ -0,0 +1,756 @@ +namespace Explorer +{ + partial class Explorer + { + /// + /// 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() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Explorer)); + this.StatusZeile = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.tsbPlayPause = new System.Windows.Forms.ToolStripButton(); + this.toolStripProgressBar1 = new System.Windows.Forms.ToolStripProgressBar(); + this.MenLeiste = new System.Windows.Forms.MenuStrip(); + this.dateiToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.neuesFensterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.fensterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ordnerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.bitmapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.textdokumentToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.archivToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.speichernunterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.druckenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.schlieenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bearbeitenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.rckgngigToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); + this.ausschneidenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.kopierenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.einfgenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.allesMarkierenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.markierungumkehrenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.suchenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ansichtToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripTextBox1 = new System.Windows.Forms.ToolStripTextBox(); + this.tsmiGehe = new System.Windows.Forms.ToolStripMenuItem(); + this.zurckToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.vorwrtsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.aufwrtsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); + this.extrasToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.hilfeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.berToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Werkzeugleiste = new System.Windows.Forms.ToolStrip(); + this.tssbZurck = new System.Windows.Forms.ToolStripSplitButton(); + this.tssbVorwrts = new System.Windows.Forms.ToolStripSplitButton(); + this.tsbAufwrts = new System.Windows.Forms.ToolStripButton(); + this.tsbAbbrechen = new System.Windows.Forms.ToolStripButton(); + this.tsbAktualisieren = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.tslAdresse = new System.Windows.Forms.ToolStripLabel(); + this.tscbAdresse = new System.Windows.Forms.ToolStripComboBox(); + this.tsbWechselnZu = new System.Windows.Forms.ToolStripButton(); + this.toolStripTextBox2 = new System.Windows.Forms.ToolStripTextBox(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.lProperties = new System.Windows.Forms.Label(); + this.lvArbeitsplatz = new System.Windows.Forms.ListView(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.FileSystemIcons = new System.Windows.Forms.ImageList(this.components); + this.tsFolders = new System.Windows.Forms.ToolStrip(); + this.tssbArbeitsplatz = new System.Windows.Forms.ToolStripSplitButton(); + this.tsmiArbeitsplatz = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); + this.lvFolder = new System.Windows.Forms.ListView(); + this.columnHeader5 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader6 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader7 = new System.Windows.Forms.ColumnHeader(); + this.GlobalTimer = new System.Windows.Forms.Timer(this.components); + this.process1 = new System.Diagnostics.Process(); + this.StatusZeile.SuspendLayout(); + this.MenLeiste.SuspendLayout(); + this.Werkzeugleiste.SuspendLayout(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.tsFolders.SuspendLayout(); + this.SuspendLayout(); + // + // StatusZeile + // + this.StatusZeile.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel1, + this.tsbPlayPause, + this.toolStripProgressBar1}); + this.StatusZeile.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Table; + this.StatusZeile.Location = new System.Drawing.Point(0, 458); + this.StatusZeile.Name = "StatusZeile"; + this.StatusZeile.RenderMode = System.Windows.Forms.ToolStripRenderMode.ManagerRenderMode; + this.StatusZeile.Size = new System.Drawing.Size(816, 27); + this.StatusZeile.SizingGrip = false; + this.StatusZeile.TabIndex = 0; + this.StatusZeile.Text = "statusStrip1"; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Spring = true; + this.toolStripStatusLabel1.Text = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // tsbPlayPause + // + this.tsbPlayPause.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbPlayPause.Enabled = false; + this.tsbPlayPause.Image = ((System.Drawing.Image)(resources.GetObject("tsbPlayPause.Image"))); + this.tsbPlayPause.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbPlayPause.Name = "tsbPlayPause"; + this.tsbPlayPause.Click += new System.EventHandler(this.tsbPlayPause_Click); + // + // toolStripProgressBar1 + // + this.toolStripProgressBar1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.ImageAndText; + this.toolStripProgressBar1.Name = "toolStripProgressBar1"; + this.toolStripProgressBar1.Size = new System.Drawing.Size(100, 20); + this.toolStripProgressBar1.Text = "toolStripProgressBar1"; + // + // MenLeiste + // + this.MenLeiste.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.dateiToolStripMenuItem, + this.bearbeitenToolStripMenuItem, + this.ansichtToolStripMenuItem, + this.toolStripTextBox1, + this.tsmiGehe, + this.extrasToolStripMenuItem, + this.hilfeToolStripMenuItem}); + this.MenLeiste.Location = new System.Drawing.Point(0, 0); + this.MenLeiste.Name = "MenLeiste"; + this.MenLeiste.Size = new System.Drawing.Size(816, 25); + this.MenLeiste.TabIndex = 1; + // + // dateiToolStripMenuItem + // + this.dateiToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.neuesFensterToolStripMenuItem, + this.speichernunterToolStripMenuItem, + this.toolStripSeparator4, + this.druckenToolStripMenuItem, + this.toolStripSeparator5, + this.schlieenToolStripMenuItem}); + this.dateiToolStripMenuItem.Name = "dateiToolStripMenuItem"; + this.dateiToolStripMenuItem.Text = "Datei"; + // + // neuesFensterToolStripMenuItem + // + this.neuesFensterToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fensterToolStripMenuItem, + this.ordnerToolStripMenuItem, + this.toolStripSeparator6, + this.bitmapToolStripMenuItem, + this.textdokumentToolStripMenuItem, + this.archivToolStripMenuItem}); + this.neuesFensterToolStripMenuItem.Name = "neuesFensterToolStripMenuItem"; + this.neuesFensterToolStripMenuItem.Text = "Neu"; + // + // fensterToolStripMenuItem + // + this.fensterToolStripMenuItem.Name = "fensterToolStripMenuItem"; + this.fensterToolStripMenuItem.Text = "Fenster"; + // + // ordnerToolStripMenuItem + // + this.ordnerToolStripMenuItem.Name = "ordnerToolStripMenuItem"; + this.ordnerToolStripMenuItem.Text = "Ordner"; + // + // toolStripSeparator6 + // + this.toolStripSeparator6.Name = "toolStripSeparator6"; + // + // bitmapToolStripMenuItem + // + this.bitmapToolStripMenuItem.Name = "bitmapToolStripMenuItem"; + this.bitmapToolStripMenuItem.Text = "Bitmap"; + // + // textdokumentToolStripMenuItem + // + this.textdokumentToolStripMenuItem.Name = "textdokumentToolStripMenuItem"; + this.textdokumentToolStripMenuItem.Text = "Textdokument"; + // + // archivToolStripMenuItem + // + this.archivToolStripMenuItem.Name = "archivToolStripMenuItem"; + this.archivToolStripMenuItem.Text = "Archiv"; + // + // speichernunterToolStripMenuItem + // + this.speichernunterToolStripMenuItem.Name = "speichernunterToolStripMenuItem"; + this.speichernunterToolStripMenuItem.Text = "Speichern unter..."; + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + // + // druckenToolStripMenuItem + // + this.druckenToolStripMenuItem.Name = "druckenToolStripMenuItem"; + this.druckenToolStripMenuItem.Text = "Drucken..."; + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + // + // schlieenToolStripMenuItem + // + this.schlieenToolStripMenuItem.Name = "schlieenToolStripMenuItem"; + this.schlieenToolStripMenuItem.Text = "Schlieen"; + // + // bearbeitenToolStripMenuItem + // + this.bearbeitenToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.rckgngigToolStripMenuItem, + this.toolStripSeparator7, + this.ausschneidenToolStripMenuItem, + this.kopierenToolStripMenuItem, + this.einfgenToolStripMenuItem, + this.toolStripSeparator2, + this.allesMarkierenToolStripMenuItem, + this.markierungumkehrenToolStripMenuItem, + this.toolStripSeparator3, + this.suchenToolStripMenuItem}); + this.bearbeitenToolStripMenuItem.Name = "bearbeitenToolStripMenuItem"; + this.bearbeitenToolStripMenuItem.Text = "Bearbeiten"; + // + // rckgngigToolStripMenuItem + // + this.rckgngigToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("rckgngigToolStripMenuItem.Image"))); + this.rckgngigToolStripMenuItem.Name = "rckgngigToolStripMenuItem"; + this.rckgngigToolStripMenuItem.Text = "Rckgngig"; + // + // toolStripSeparator7 + // + this.toolStripSeparator7.Name = "toolStripSeparator7"; + // + // ausschneidenToolStripMenuItem + // + this.ausschneidenToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("ausschneidenToolStripMenuItem.Image"))); + this.ausschneidenToolStripMenuItem.Name = "ausschneidenToolStripMenuItem"; + this.ausschneidenToolStripMenuItem.Text = "Ausschneiden"; + // + // kopierenToolStripMenuItem + // + this.kopierenToolStripMenuItem.Name = "kopierenToolStripMenuItem"; + this.kopierenToolStripMenuItem.Text = "Kopieren"; + // + // einfgenToolStripMenuItem + // + this.einfgenToolStripMenuItem.Name = "einfgenToolStripMenuItem"; + this.einfgenToolStripMenuItem.Text = "Einfgen"; + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + // + // allesMarkierenToolStripMenuItem + // + this.allesMarkierenToolStripMenuItem.Name = "allesMarkierenToolStripMenuItem"; + this.allesMarkierenToolStripMenuItem.Text = "Alles Markieren"; + // + // markierungumkehrenToolStripMenuItem + // + this.markierungumkehrenToolStripMenuItem.Name = "markierungumkehrenToolStripMenuItem"; + this.markierungumkehrenToolStripMenuItem.Text = "Markierung umkehren"; + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + // + // suchenToolStripMenuItem + // + this.suchenToolStripMenuItem.Name = "suchenToolStripMenuItem"; + this.suchenToolStripMenuItem.Text = "Suchen"; + // + // ansichtToolStripMenuItem + // + this.ansichtToolStripMenuItem.Name = "ansichtToolStripMenuItem"; + this.ansichtToolStripMenuItem.Text = "Ansicht"; + // + // toolStripTextBox1 + // + this.toolStripTextBox1.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.toolStripTextBox1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.ImageAndText; + this.toolStripTextBox1.Name = "toolStripTextBox1"; + this.toolStripTextBox1.Size = new System.Drawing.Size(100, 21); + this.toolStripTextBox1.Text = "Google Suche"; + // + // tsmiGehe + // + this.tsmiGehe.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.zurckToolStripMenuItem, + this.vorwrtsToolStripMenuItem, + this.aufwrtsToolStripMenuItem, + this.toolStripSeparator9}); + this.tsmiGehe.Name = "tsmiGehe"; + this.tsmiGehe.Text = "Gehe"; + // + // zurckToolStripMenuItem + // + this.zurckToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("zurckToolStripMenuItem.Image"))); + this.zurckToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.zurckToolStripMenuItem.Name = "zurckToolStripMenuItem"; + this.zurckToolStripMenuItem.Text = "Zurck"; + // + // vorwrtsToolStripMenuItem + // + this.vorwrtsToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("vorwrtsToolStripMenuItem.Image"))); + this.vorwrtsToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.vorwrtsToolStripMenuItem.Name = "vorwrtsToolStripMenuItem"; + this.vorwrtsToolStripMenuItem.Text = "Vorwrts"; + // + // aufwrtsToolStripMenuItem + // + this.aufwrtsToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("aufwrtsToolStripMenuItem.Image"))); + this.aufwrtsToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.aufwrtsToolStripMenuItem.Name = "aufwrtsToolStripMenuItem"; + this.aufwrtsToolStripMenuItem.Text = "Aufwrts"; + // + // toolStripSeparator9 + // + this.toolStripSeparator9.Name = "toolStripSeparator9"; + // + // extrasToolStripMenuItem + // + this.extrasToolStripMenuItem.Name = "extrasToolStripMenuItem"; + this.extrasToolStripMenuItem.Text = "Extras"; + // + // hilfeToolStripMenuItem + // + this.hilfeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.berToolStripMenuItem}); + this.hilfeToolStripMenuItem.Name = "hilfeToolStripMenuItem"; + this.hilfeToolStripMenuItem.Text = "Hilfe"; + // + // berToolStripMenuItem + // + this.berToolStripMenuItem.Name = "berToolStripMenuItem"; + this.berToolStripMenuItem.Text = "ber..."; + // + // Werkzeugleiste + // + this.Werkzeugleiste.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.Werkzeugleiste.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tssbZurck, + this.tssbVorwrts, + this.tsbAufwrts, + this.tsbAbbrechen, + this.tsbAktualisieren, + this.toolStripSeparator1, + this.tslAdresse, + this.tscbAdresse, + this.tsbWechselnZu, + this.toolStripTextBox2}); + this.Werkzeugleiste.Location = new System.Drawing.Point(0, 25); + this.Werkzeugleiste.Name = "Werkzeugleiste"; + this.Werkzeugleiste.Size = new System.Drawing.Size(816, 25); + this.Werkzeugleiste.TabIndex = 2; + this.Werkzeugleiste.Text = "toolStrip1"; + // + // tssbZurck + // + this.tssbZurck.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tssbZurck.Enabled = false; + this.tssbZurck.Image = ((System.Drawing.Image)(resources.GetObject("tssbZurck.Image"))); + this.tssbZurck.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tssbZurck.Name = "tssbZurck"; + this.tssbZurck.ButtonClick += new System.EventHandler(this.tssbZurck_ButtonClick); + this.tssbZurck.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.tssbZurck_DropDownItemClicked); + // + // tssbVorwrts + // + this.tssbVorwrts.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tssbVorwrts.Enabled = false; + this.tssbVorwrts.Image = ((System.Drawing.Image)(resources.GetObject("tssbVorwrts.Image"))); + this.tssbVorwrts.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tssbVorwrts.Name = "tssbVorwrts"; + this.tssbVorwrts.Text = "toolStripSplitButton1"; + // + // tsbAufwrts + // + this.tsbAufwrts.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbAufwrts.Image = ((System.Drawing.Image)(resources.GetObject("tsbAufwrts.Image"))); + this.tsbAufwrts.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbAufwrts.Name = "tsbAufwrts"; + this.tsbAufwrts.Text = "toolStripButton2"; + this.tsbAufwrts.Click += new System.EventHandler(this.tsbAufwrts_Click); + // + // tsbAbbrechen + // + this.tsbAbbrechen.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbAbbrechen.Enabled = false; + this.tsbAbbrechen.Image = ((System.Drawing.Image)(resources.GetObject("tsbAbbrechen.Image"))); + this.tsbAbbrechen.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbAbbrechen.Name = "tsbAbbrechen"; + this.tsbAbbrechen.Text = "toolStripButton1"; + // + // tsbAktualisieren + // + this.tsbAktualisieren.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbAktualisieren.Image = ((System.Drawing.Image)(resources.GetObject("tsbAktualisieren.Image"))); + this.tsbAktualisieren.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbAktualisieren.Name = "tsbAktualisieren"; + this.tsbAktualisieren.Text = "toolStripButton2"; + this.tsbAktualisieren.Click += new System.EventHandler(this.tsbAktualisieren_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + // + // tslAdresse + // + this.tslAdresse.Name = "tslAdresse"; + this.tslAdresse.Text = "Adresse:"; + // + // tscbAdresse + // + this.tscbAdresse.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.tscbAdresse.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories; + this.tscbAdresse.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.ImageAndText; + this.tscbAdresse.Name = "tscbAdresse"; + this.tscbAdresse.Size = new System.Drawing.Size(421, 25); + this.tscbAdresse.Text = "Arbeitsplatz"; + // + // tsbWechselnZu + // + this.tsbWechselnZu.Image = ((System.Drawing.Image)(resources.GetObject("tsbWechselnZu.Image"))); + this.tsbWechselnZu.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbWechselnZu.Name = "tsbWechselnZu"; + this.tsbWechselnZu.Text = "Wechseln zu"; + this.tsbWechselnZu.Click += new System.EventHandler(this.tsbWechselnZu_Click); + // + // toolStripTextBox2 + // + this.toolStripTextBox2.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.toolStripTextBox2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.ImageAndText; + this.toolStripTextBox2.Name = "toolStripTextBox2"; + this.toolStripTextBox2.Size = new System.Drawing.Size(100, 25); + this.toolStripTextBox2.Text = "Dateifilter"; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 50); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.panel1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.lvArbeitsplatz); + this.splitContainer1.Panel2.Controls.Add(this.tsFolders); + this.splitContainer1.Panel2.Controls.Add(this.lvFolder); + this.splitContainer1.Size = new System.Drawing.Size(816, 408); + this.splitContainer1.SplitterDistance = 202; + this.splitContainer1.TabIndex = 3; + this.splitContainer1.TabStop = false; + this.splitContainer1.Text = "splitContainer1"; + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.panel2); + this.panel1.Controls.Add(this.lProperties); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(202, 408); + this.panel1.TabIndex = 0; + // + // panel2 + // + this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel2.Location = new System.Drawing.Point(0, 380); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(202, 28); + this.panel2.TabIndex = 3; + // + // lProperties + // + this.lProperties.AutoSize = true; + this.lProperties.Location = new System.Drawing.Point(28, 87); + this.lProperties.Name = "lProperties"; + this.lProperties.Size = new System.Drawing.Size(0, 0); + this.lProperties.TabIndex = 0; + // + // lvArbeitsplatz + // + this.lvArbeitsplatz.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.lvArbeitsplatz.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1, + this.columnHeader2, + this.columnHeader4, + this.columnHeader3}); + this.lvArbeitsplatz.Dock = System.Windows.Forms.DockStyle.Fill; + this.lvArbeitsplatz.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lvArbeitsplatz.Location = new System.Drawing.Point(0, 23); + this.lvArbeitsplatz.Name = "lvArbeitsplatz"; + this.lvArbeitsplatz.Size = new System.Drawing.Size(610, 385); + this.lvArbeitsplatz.SmallImageList = this.FileSystemIcons; + this.lvArbeitsplatz.TabIndex = 2; + this.lvArbeitsplatz.View = System.Windows.Forms.View.Details; + this.lvArbeitsplatz.ItemActivate += new System.EventHandler(this.lvArbeitsplatz_ItemActivate); + this.lvArbeitsplatz.SelectedIndexChanged += new System.EventHandler(this.lvArbeitsplatz_SelectedIndexChanged); + this.lvArbeitsplatz.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvArbeitsplatz_ColumnClick); + // + // columnHeader1 + // + this.columnHeader1.Text = "Name"; + this.columnHeader1.Width = 232; + // + // columnHeader2 + // + this.columnHeader2.Text = "Gesamtgre"; + this.columnHeader2.Width = 105; + // + // columnHeader4 + // + this.columnHeader4.Text = "Freier Speicher"; + this.columnHeader4.Width = 94; + // + // columnHeader3 + // + this.columnHeader3.Text = "Typ"; + this.columnHeader3.Width = 108; + // + // FileSystemIcons + // + this.FileSystemIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("FileSystemIcons.ImageStream"))); + this.FileSystemIcons.Images.SetKeyName(0, "Folder.bmp"); + this.FileSystemIcons.Images.SetKeyName(1, "DefaultFile.bmp"); + this.FileSystemIcons.Images.SetKeyName(2, "HD.bmp"); + this.FileSystemIcons.Images.SetKeyName(3, "CD.bmp"); + // + // tsFolders + // + this.tsFolders.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tssbArbeitsplatz}); + this.tsFolders.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow; + this.tsFolders.Location = new System.Drawing.Point(0, 0); + this.tsFolders.Name = "tsFolders"; + this.tsFolders.Size = new System.Drawing.Size(610, 23); + this.tsFolders.TabIndex = 0; + this.tsFolders.Text = "toolStrip1"; + // + // tssbArbeitsplatz + // + this.tssbArbeitsplatz.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmiArbeitsplatz, + this.toolStripSeparator8}); + this.tssbArbeitsplatz.Image = ((System.Drawing.Image)(resources.GetObject("tssbArbeitsplatz.Image"))); + this.tssbArbeitsplatz.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tssbArbeitsplatz.Name = "tssbArbeitsplatz"; + this.tssbArbeitsplatz.Text = "Arbeitsplatz"; + this.tssbArbeitsplatz.ButtonClick += new System.EventHandler(this.tssbArbeitsplatz_ButtonClick); + this.tssbArbeitsplatz.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.tssbArbeitsplatz_DropDownItemClicked); + // + // tsmiArbeitsplatz + // + this.tsmiArbeitsplatz.Image = ((System.Drawing.Image)(resources.GetObject("tsmiArbeitsplatz.Image"))); + this.tsmiArbeitsplatz.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsmiArbeitsplatz.Name = "tsmiArbeitsplatz"; + this.tsmiArbeitsplatz.Text = "Arbeitsplatz"; + // + // toolStripSeparator8 + // + this.toolStripSeparator8.Name = "toolStripSeparator8"; + // + // lvFolder + // + this.lvFolder.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.lvFolder.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader5, + this.columnHeader6, + this.columnHeader7}); + this.lvFolder.Dock = System.Windows.Forms.DockStyle.Fill; + this.lvFolder.Location = new System.Drawing.Point(0, 0); + this.lvFolder.Name = "lvFolder"; + this.lvFolder.Size = new System.Drawing.Size(610, 408); + this.lvFolder.SmallImageList = this.FileSystemIcons; + this.lvFolder.TabIndex = 2; + this.lvFolder.View = System.Windows.Forms.View.Details; + this.lvFolder.ItemActivate += new System.EventHandler(this.lvFolder_ItemActivate); + this.lvFolder.SelectedIndexChanged += new System.EventHandler(this.lvFolder_SelectedIndexChanged); + // + // columnHeader5 + // + this.columnHeader5.Text = "Name"; + this.columnHeader5.Width = 204; + // + // columnHeader6 + // + this.columnHeader6.Text = "Gre"; + this.columnHeader6.Width = 167; + // + // columnHeader7 + // + this.columnHeader7.Text = "Typ"; + this.columnHeader7.Width = 151; + // + // GlobalTimer + // + this.GlobalTimer.Enabled = true; + this.GlobalTimer.Interval = 20000; + this.GlobalTimer.Tick += new System.EventHandler(this.GlobalTimer_Tick); + // + // process1 + // + this.process1.StartInfo.Domain = ""; + this.process1.StartInfo.LoadUserProfile = false; + this.process1.StartInfo.Password = null; + this.process1.StartInfo.StandardErrorEncoding = null; + this.process1.StartInfo.StandardOutputEncoding = null; + this.process1.StartInfo.UserName = ""; + this.process1.SynchronizingObject = this; + // + // Explorer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(816, 485); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.StatusZeile); + this.Controls.Add(this.Werkzeugleiste); + this.Controls.Add(this.MenLeiste); + this.DoubleBuffered = true; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MainMenuStrip = this.MenLeiste; + this.Name = "Explorer"; + this.Text = "Explorer"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Explorer_FormClosed); + this.StatusZeile.ResumeLayout(false); + this.MenLeiste.ResumeLayout(false); + this.MenLeiste.PerformLayout(); + this.Werkzeugleiste.ResumeLayout(false); + this.Werkzeugleiste.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.Panel2.PerformLayout(); + this.splitContainer1.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.tsFolders.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.StatusStrip StatusZeile; + private System.Windows.Forms.MenuStrip MenLeiste; + private System.Windows.Forms.ToolStripMenuItem dateiToolStripMenuItem; + private System.Windows.Forms.ToolStrip Werkzeugleiste; + private System.Windows.Forms.ToolStripLabel tslAdresse; + private System.Windows.Forms.ToolStripComboBox tscbAdresse; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem bearbeitenToolStripMenuItem; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1; + private System.Windows.Forms.ToolStripMenuItem ansichtToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem kopierenToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem einfgenToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem allesMarkierenToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem suchenToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem neuesFensterToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem speichernunterToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripMenuItem druckenToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripMenuItem schlieenToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem fensterToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ordnerToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + private System.Windows.Forms.ToolStripMenuItem bitmapToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem textdokumentToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem archivToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem markierungumkehrenToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.ToolStrip tsFolders; + private System.Windows.Forms.ListView lvArbeitsplatz; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.ColumnHeader columnHeader3; + private System.Windows.Forms.Label lProperties; + private System.Windows.Forms.ColumnHeader columnHeader4; + private System.Windows.Forms.Timer GlobalTimer; + private System.Windows.Forms.ListView lvFolder; + private System.Windows.Forms.ColumnHeader columnHeader5; + private System.Windows.Forms.ColumnHeader columnHeader6; + private System.Windows.Forms.ColumnHeader columnHeader7; + private System.Windows.Forms.ToolStripTextBox toolStripTextBox1; + private System.Windows.Forms.ToolStripTextBox toolStripTextBox2; + private System.Windows.Forms.ImageList FileSystemIcons; + private System.Diagnostics.Process process1; + private System.Windows.Forms.ToolStripMenuItem tsmiGehe; + private System.Windows.Forms.ToolStripMenuItem extrasToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator9; + private System.Windows.Forms.ToolStripMenuItem hilfeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem berToolStripMenuItem; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.ToolStripButton tsbPlayPause; + private System.Windows.Forms.ToolStripMenuItem rckgngigToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ausschneidenToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem zurckToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem vorwrtsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem aufwrtsToolStripMenuItem; + private System.Windows.Forms.ToolStripSplitButton tssbZurck; + private System.Windows.Forms.ToolStripSplitButton tssbVorwrts; + private System.Windows.Forms.ToolStripButton tsbAufwrts; + private System.Windows.Forms.ToolStripButton tsbAbbrechen; + private System.Windows.Forms.ToolStripButton tsbAktualisieren; + private System.Windows.Forms.ToolStripButton tsbWechselnZu; + private System.Windows.Forms.ToolStripSplitButton tssbArbeitsplatz; + private System.Windows.Forms.ToolStripMenuItem tsmiArbeitsplatz; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; + } +} + diff --git a/Explorer/MainWindow/Explorer.cs b/Explorer/MainWindow/Explorer.cs new file mode 100644 index 0000000..970007b --- /dev/null +++ b/Explorer/MainWindow/Explorer.cs @@ -0,0 +1,700 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Management; +using System.Collections; +using System.Threading; +using System.IO; +using System.Media; + +namespace Explorer +{ + public partial class Explorer : Form + { + private LogicalDiskInfoCollection ldic = new LogicalDiskInfoCollection(); + private bool firstlyactualized = false; + private Thread t; + private string[] History = new string[10]; + private string[] Future = new string[10]; + private string[] Past = new string[10]; + private SoundPlayer sp = null; + + private delegate void RefreshlvMainHandler(); + + public Explorer() + { + InitializeComponent(); + + string[] drives = Directory.GetLogicalDrives(); + foreach (string drive in drives) + { + ListViewItem lvi = new ListViewItem(); + lvi.Name = drive; + lvi.Text = drive.Substring(0, 2); + lvi.SubItems.Add("Bitte warten..."); + lvi.SubItems.Add("Bitte warten..."); + lvi.SubItems.Add("Bitte warten..."); + lvArbeitsplatz.Items.Add(lvi); + + ToolStripMenuItem tsmi = new ToolStripMenuItem(); + tsmi.Name = drive; + tsmi.Text = drive; + tssbArbeitsplatz.DropDownItems.Add(tsmi); + } + + t = new Thread(new ThreadStart(FillLogicalDiskInfoCollection)); + t.Start(); + } + + void FillLogicalDiskInfoCollection() + { + ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk"); + + ManagementObjectCollection moc = mos.Get(); + + foreach (ManagementBaseObject mo in moc) + { + LogicalDiskInfo ldi = new LogicalDiskInfo(); + ldi.Name = mo["Name"] != null ? mo["Name"].ToString() : ""; + ldi.Size = mo["Size"] != null ? UInt64.Parse(mo["Size"].ToString()) : 0; + ldi.Freespace = mo["FreeSpace"] != null ? UInt64.Parse(mo["FreeSpace"].ToString()) : 0; + ldi.Description = mo["Description"] != null ? mo["Description"].ToString() : ""; + ldi.VolumeName = mo["VolumeName"] != null ? mo["VolumeName"].ToString() : ""; + + bool exists = false; + + foreach (LogicalDiskInfo ldi2 in ldic) + { + if (ldi.Name == ldi2.Name) + { + exists = true; + break; + } + } + + if (exists) + { + LogicalDiskInfo ldi3 = ldic.Item(ldi.Name); + ldi3.VolumeName = ldi.VolumeName; + ldi3.Size = ldi.Size; + ldi3.Freespace = ldi.Freespace; + ldi3.Description = ldi.Description; + } + else + { + ldic.Add(ldi); + } + } + + if(!firstlyactualized) + { + if (this != null) + { + this.Invoke(new RefreshlvMainHandler(RefreshlvArbeitsplatz)); + firstlyactualized = true; + } + } + } + + class ListViewItemComparer : IComparer + { + private int col; + public ListViewItemComparer(int column) + { + col = column; + } + public int Compare(object x, object y) + { + switch (col) + { + case 0: + return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text); + case 1: + string[] tokenA = ((ListViewItem)x).SubItems[col].Text.Split(' '); + decimal sizeA = 0; + switch(tokenA[1]) + { + case "kB": + sizeA = decimal.Parse(tokenA[0])*1024; + break; + case "MB": + sizeA = decimal.Parse(tokenA[0]) * 1048576; + break; + case "GB": + sizeA = decimal.Parse(tokenA[0]) * 1073741824; + break; + default: + sizeA = decimal.Parse(tokenA[0]); + break; + } + + string[] tokenB = ((ListViewItem)y).SubItems[col].Text.Split(' '); + decimal sizeB = 0; + switch (tokenB[1]) + { + case "kB": + sizeB = decimal.Parse(tokenB[0]) * 1024; + break; + case "MB": + sizeB = decimal.Parse(tokenB[0]) * 1048576; + break; + case "GB": + sizeB = decimal.Parse(tokenB[0]) * 1073741824; + break; + default: + sizeB = decimal.Parse(tokenB[0]); + break; + } + return Math.Sign(sizeA - sizeB); + case 2: + goto case 1; + case 3: + goto case 0; + default: + return 0; + } + } + } + + void RefreshlvArbeitsplatz() + { + foreach (LogicalDiskInfo ldi in ldic) + { + bool lviisfound = false; + foreach (ListViewItem lvi in lvArbeitsplatz.Items) + { + if (ldi.Name == lvi.SubItems[0].Text.Substring(0, 2)) + { + switch (ldi.Description) + { + case "Lokale Festplatte": + lvi.ImageIndex = 2; + break; + case "CD": + lvi.ImageIndex = 3; + break; + } + lvi.SubItems[0].Text = ldi.Name + " (" + ldi.VolumeName + ")"; + lvi.SubItems[1].Text = ConvertToUsableWithUnit(ldi.Size); + lvi.SubItems[2].Text = ConvertToUsableWithUnit(ldi.Freespace); + lvi.SubItems[3].Text = ldi.Description; + lviisfound = true; + break; + } + } + + if(lviisfound == false) + { + switch (ldi.Description) + { + case "Lokale Festplatte": + lvArbeitsplatz.Items.Add(ldi.Name + " (" + ldi.VolumeName + ")", 2); + break; + case "CD": + lvArbeitsplatz.Items.Add(ldi.Name + " (" + ldi.VolumeName + ")", 3); + break; + default: + lvArbeitsplatz.Items.Add(ldi.Name + " (" + ldi.VolumeName + ")"); + break; + } + lvArbeitsplatz.Items[lvArbeitsplatz.Items.Count - 1].SubItems.Add(ConvertToUsableWithUnit(ldi.Size)); + lvArbeitsplatz.Items[lvArbeitsplatz.Items.Count - 1].SubItems.Add(ConvertToUsableWithUnit(ldi.Freespace)); + lvArbeitsplatz.Items[lvArbeitsplatz.Items.Count - 1].SubItems.Add(ldi.Description); + } + + bool tsiisfound = false; + + foreach (ToolStripItem tsi in tssbArbeitsplatz.DropDownItems) + { + if (tsi.Name != "toolStripSeparator8") + { + if (ldi.Name == tsi.Text.Substring(0, 2)) + { + switch (ldi.Description) + { + case "Lokale Festplatte": + tsi.Image = FileSystemIcons.Images[2]; + break; + case "CD": + tsi.Image = FileSystemIcons.Images[3]; + break; + } + tsiisfound = true; + break; + } + } + } + + if (tsiisfound == false) + { + switch (ldi.Description) + { + case "Lokale Festplatte": + tssbArbeitsplatz.DropDownItems.Add(ldi.Name + "\\", FileSystemIcons.Images[2]); + break; + case "CD": + tssbArbeitsplatz.DropDownItems.Add(ldi.Name + "\\", FileSystemIcons.Images[3]); + break; + default: + tssbArbeitsplatz.DropDownItems.Add(ldi.Name + "\\"); + break; + } + } + } + } + + private void tsbAktualisieren_Click(object sender, EventArgs e) + { + RefreshlvArbeitsplatz(); + } + + private void GlobalTimer_Tick(object sender, EventArgs e) + { + Thread t = new Thread(new ThreadStart(FillLogicalDiskInfoCollection)); + t.Start(); + } + + string ConvertToUsableWithUnit(UInt64 number) + { + if (number < 1024) + { + return number.ToString() + " Bytes"; + } + else if (number >= 1024 && number < 1048576) + { + return Math.Round(Convert.ToDecimal(number) / 1024, 2).ToString() + " kB"; + } + else if (number >= 1048576 && number < 1073741824) + { + return Math.Round(Convert.ToDecimal(number) / 1048576, 2).ToString() + " MB"; + } + else if (number >= 1073741824) + { + return Math.Round(Convert.ToDecimal(number) / 1073741824, 2).ToString() + " GB"; + } + return ""; + } + + private void Explorer_FormClosed(object sender, FormClosedEventArgs e) + { + if (t.ThreadState == ThreadState.Running) + { + t.Abort(); + } + } + + private void lvArbeitsplatz_ColumnClick(object sender, ColumnClickEventArgs e) + { + lvArbeitsplatz.ListViewItemSorter = new ListViewItemComparer(e.Column); + } + + private void lvArbeitsplatz_SelectedIndexChanged(object sender, EventArgs e) + { + switch (lvArbeitsplatz.SelectedItems.Count) + { + case 0: + lProperties.Text = "Keine Elemente ausgewhlt"; + break; + case 1: + LogicalDiskInfo ldi = ldic.Item(lvArbeitsplatz.SelectedItems[0].SubItems[0].Text.Substring(0, 2)); + if (ldi != null) + { + string text = "Name: " + ldi.Name + "\n" + + "Size: " + ldi.Size + "\r\n" + + "Bezeichnung: " + ldi.VolumeName + "\r\n"; + lProperties.Text = text; + } + else + { + lProperties.Text = "wat?\"" + lvArbeitsplatz.SelectedItems[0].SubItems[0].Text.Substring(0, 2) + "\""; + } + break; + default: + lProperties.Text = lvArbeitsplatz.SelectedItems.Count.ToString() + " Elemente ausgewhlt"; + break; + } + } + + private void tssbArbeitsplatz_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + ToolStripItem clickeditem = e.ClickedItem; + + if (clickeditem.Name == "tsmiArbeitsplatz") + { + lvArbeitsplatz.BringToFront(); + CleartsFolders(); + tssbArbeitsplatz.Text = "Arbeitsplatz"; + tscbAdresse.Text = "Arbeitsplatz"; + UpdateHistory("Arbeitsplatz"); + BuildHistoryItems(); + } + else + { + DisplayFolder(clickeditem.Name); + BuildtsFoldersFromPath(clickeditem.Name); + tscbAdresse.Text = clickeditem.Name; + UpdateHistory(clickeditem.Name); + BuildHistoryItems(); + } + } + + void DisplayFolder(string path) + { + DirectoryInfo di = new DirectoryInfo(path); + if (di.Exists) + { + DirectoryInfo[] dirs = di.GetDirectories(); + FileInfo[] files = di.GetFiles(); + + lvFolder.Items.Clear(); + + foreach (DirectoryInfo directory in dirs) + { + ListViewItem item = new ListViewItem(); + item.Name = path + directory.Name + "\\"; + item.Text = directory.Name; + item.ImageIndex = 0; + lvFolder.Items.Add(item); + } + + foreach (FileInfo file in files) + { + ListViewItem item = new ListViewItem(); + item.Name = path + file.Name; + item.Text = file.Name; + item.ImageIndex = 1; + lvFolder.Items.Add(item); + } + + lvFolder.BringToFront(); + } + else + { + MessageBox.Show("Pfad existiert nicht: " + path); + } + } + + void CleartsFolders() + { + while(tsFolders.Items.Count > 1) + { + tsFolders.Items.RemoveAt(tsFolders.Items.Count - 1); + } + } + + void AddtsFoldersItem(string path, DirectoryInfo[] dirs, string text) + { + if (text != "") + { + ToolStripSplitButton dropdown = new ToolStripSplitButton(); + dropdown.Name = path; + dropdown.Text = text; + dropdown.DropDownItemClicked += new ToolStripItemClickedEventHandler(dropdown_DropDownItemClicked); + dropdown.ButtonClick += new EventHandler(dropdown_ButtonClick); + + foreach (DirectoryInfo dir in dirs) + { + ToolStripMenuItem item = new ToolStripMenuItem(); + item.Name = path + dir.Name + "\\"; + item.Text = dir.Name; + dropdown.DropDownItems.Add(item); + } + + tsFolders.Items.Add(dropdown); + } + else + { + ToolStripDropDownButton dropdown = new ToolStripDropDownButton(); + dropdown.Name = path; + dropdown.Text = "Bitte Auswhlen..."; + dropdown.DropDownItemClicked += new ToolStripItemClickedEventHandler(dropdown_DropDownItemClicked); + + foreach (DirectoryInfo dir in dirs) + { + ToolStripMenuItem item = new ToolStripMenuItem(); + item.Name = path + dir.Name + "\\"; + item.Text = dir.Name; + dropdown.DropDownItems.Add(item); + } + + tsFolders.Items.Add(dropdown); + } + } + + private void lvFolder_ItemActivate(object sender, EventArgs e) + { + if (lvFolder.SelectedItems.Count == 1) + { + ListViewItem activated = lvFolder.SelectedItems[0]; + DisplayFolder(activated.Name); + BuildtsFoldersFromPath(activated.Name); + tscbAdresse.Text = activated.Name; + UpdateHistory(activated.Name); + BuildHistoryItems(); + } + } + + private void lvArbeitsplatz_ItemActivate(object sender, EventArgs e) + { + if (lvArbeitsplatz.SelectedItems.Count == 1) + { + ListViewItem activated = lvArbeitsplatz.SelectedItems[0]; + DisplayFolder(activated.Name); + BuildtsFoldersFromPath(activated.Name); + tscbAdresse.Text = activated.Name; + UpdateHistory(activated.Name); + BuildHistoryItems(); + } + } + + void dropdown_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + ToolStripItem clickeditem = e.ClickedItem; + DisplayFolder(clickeditem.Name); + BuildtsFoldersFromPath(clickeditem.Name); + tscbAdresse.Text = clickeditem.Name; + UpdateHistory(clickeditem.Name); + BuildHistoryItems(); + } + + void dropdown_ButtonClick(object sender, EventArgs e) + { + ToolStripItem item = (ToolStripItem)sender; + DisplayFolder(item.Name + item.Text + "\\"); + BuildtsFoldersFromPath(item.Name + item.Text + "\\"); + tscbAdresse.Text = item.Name + item.Text + "\\"; + UpdateHistory(item.Name + item.Text + "\\"); + BuildHistoryItems(); + } + + void BuildtsFoldersFromPath(string path) + { + CleartsFolders(); + string[] tokens = path.Split('\\'); + + string actualpath = tokens[0] + "\\"; + + tssbArbeitsplatz.Text = actualpath; + + for(int i = 1; i 0) + { + if (actualpath != path) + { + AddtsFoldersItem(actualpath, dirs, tokens[i]); + actualpath += tokens[i] + "\\"; + } + else + { + AddtsFoldersItem(actualpath, dirs, ""); + } + } + } + } + } + + private void tssbArbeitsplatz_ButtonClick(object sender, EventArgs e) + { + if (tssbArbeitsplatz.Text == "Arbeitsplatz") + { + lvArbeitsplatz.BringToFront(); + CleartsFolders(); + tscbAdresse.Text = "Arbeitsplatz"; + UpdateHistory("Arbeitsplatz"); + BuildHistoryItems(); + } + else + { + DisplayFolder(tssbArbeitsplatz.Text); + BuildtsFoldersFromPath(tssbArbeitsplatz.Text); + tscbAdresse.Text = tssbArbeitsplatz.Text; + UpdateHistory(tssbArbeitsplatz.Text); + BuildHistoryItems(); + } + } + + private void tsbWechselnZu_Click(object sender, EventArgs e) + { + DisplayFolder(tscbAdresse.Text + "\\"); + BuildtsFoldersFromPath(tscbAdresse.Text + "\\"); + UpdateHistory(tscbAdresse.Text + "\\"); + BuildHistoryItems(); + } + + void UpdateHistory(string item) + { + if (string.Compare(item, History[0], true) != 0) + { + for (int i = 8; i >= 0; i--) + { + History[i + 1] = History[i]; + } + + History[0] = item; + } + } + + void BuildHistoryItems() + { + UpdatetsmiGehe(); + UpdatetssbZurck(); + } + + void UpdatetsmiGehe() + { + CleartsmiGehe(); + foreach (string path in History) + { + if (path != null) + { + ToolStripMenuItem button = new ToolStripMenuItem(); + button.Name = path; + string[] tokens = path.Split('\\'); + if (tokens.Length >= 2) + { + button.Text = tokens[tokens.Length - 2]; + } + button.Click += new EventHandler(Historybutton_Click); + tsmiGehe.DropDownItems.Add(button); + } + } + } + + void CleartsmiGehe() + { + while (tsmiGehe.DropDownItems.Count > 4) + { + tsmiGehe.DropDownItems.RemoveAt(tsmiGehe.DropDownItems.Count - 1); + } + } + + void Historybutton_Click(object sender, EventArgs e) + { + ToolStripMenuItem clicked = (ToolStripMenuItem)sender; + DisplayFolder(clicked.Name); + BuildtsFoldersFromPath(clicked.Name); + tscbAdresse.Text = clicked.Name; + UpdateHistory(clicked.Name); + BuildHistoryItems(); + } + + void UpdatetssbZurck() + { + CleartssbZurck(); + foreach (string path in History) + { + if (path != null) + { + ToolStripMenuItem button = new ToolStripMenuItem(); + button.Name = path; + string[] tokens = path.Split('\\'); + if (tokens.Length >= 2) + { + button.Text = tokens[tokens.Length - 2]; + } + tssbZurck.DropDownItems.Add(button); + } + } + tssbZurck.Enabled = History.Length > 0; + } + + void CleartssbZurck() + { + tssbZurck.DropDownItems.Clear(); + } + + private void tssbZurck_ButtonClick(object sender, EventArgs e) + { + DisplayFolder(History[1]); + BuildtsFoldersFromPath(History[1]); + tscbAdresse.Text = History[1]; + UpdateHistory(History[1]); + BuildHistoryItems(); + } + + private void tsbAufwrts_Click(object sender, EventArgs e) + { + string[] tokens = History[0].Split('\\'); + string path = tokens[0] + "\\"; + if (tokens.Length > 2) + { + for (int i = 1; i < tokens.Length - 2; i++) + { + path += tokens[i] + "\\"; + } + DisplayFolder(path); + BuildtsFoldersFromPath(path); + tscbAdresse.Text = path; + UpdateHistory(path); + BuildHistoryItems(); + } + else + { + lvArbeitsplatz.BringToFront(); + CleartsFolders(); + tssbArbeitsplatz.Text = "Arbeitsplatz"; + tscbAdresse.Text = "Arbeitsplatz"; + UpdateHistory("Arbeitsplatz"); + BuildHistoryItems(); + } + } + + private void tssbZurck_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + ToolStripItem clicked = e.ClickedItem; + DisplayFolder(clicked.Name); + BuildtsFoldersFromPath(clicked.Name); + tscbAdresse.Text = clicked.Name; + UpdateHistory(clicked.Name); + BuildHistoryItems(); + } + + private void lvFolder_SelectedIndexChanged(object sender, EventArgs e) + { + switch (lvFolder.SelectedItems.Count) + { + case 0: + lProperties.Text = "Kein Objekt ausgewhlt"; + break; + case 1: + DirectoryInfo di = new DirectoryInfo(lvFolder.SelectedItems[0].Name); + if (di.Exists) + { + lProperties.Text = "directory"; + } + else + { + FileInfo fi = new FileInfo(lvFolder.SelectedItems[0].Name); + if (fi.Exists) + { + lProperties.Text = "file"; + tsbPlayPause.Enabled = true; + } + } + break; + default: + lProperties.Text = lvFolder.SelectedItems.Count.ToString() + " Elemente auswhlt"; + break; + } + } + + private void tsbPlayPause_Click(object sender, EventArgs e) + { + + if (lvFolder.SelectedItems.Count == 1) + { + sp = new SoundPlayer(lvFolder.SelectedItems[0].Name); + sp.Play(); + } + } + } +} \ No newline at end of file diff --git a/Explorer/MainWindow/Explorer.resx b/Explorer/MainWindow/Explorer.resx new file mode 100644 index 0000000..87de0de --- /dev/null +++ b/Explorer/MainWindow/Explorer.resx @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGhJREFUOE/Fk1ES + ABAIRHMyZ3cyhpFJEumDz7X7asYKIJ0EWdQjBFGfxF24mrS7dqka+pitD8M3oGUQFRBwAo0Mp3GABmrZ + W4AEegJQ0B8ALY1pA7WxrmdEsqtI2HNXlfkmll+6eA1tLIOUrYLauoDAAAAAAElFTkSuQmCC + + + + 123, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAZlJREFUOE+1ktsr + w2EYx/0p7sidnIkWlmMsSQxzlrkxhxySOV4oM9qSHG+ctuVsLCmxG+5QcoOUhZxP++324zdKDit+ylvP + 3fP5vM/zfl8vr/88RqsL45LA6JrA1KaAWSyLXeBXd+rnBdzVNSvQanLSPO5kZPVN4FHSZblicvvN7oZ6 + FlyUGO6I1WwTUWIjJN9KXP0xAzYPArexdfyS0Q2BZpNA76ILle4CuWaLqLI1gnKnia1YJixviozOOybE + vm9rVA9cUD74TOWwkyzdI+FFVkIL5kXY/NqsaLLhnzmGvO6Qlgnnd0Gh/pykthuyu5+pHb7BN8lAYI7p + vdFbpiWq3I689ogWswdBWvsZwdUnJLRdvU5SoDtFO3b7WaC2k6g9p92TILregazqgHD1FoF5K/grZ/BN + 7nsXBKvmiFRvoui4RtPv+DnKr1H5JBrE8Q8pNd7TLcb7q7/wsSm0eJ30zgcytDvSYJX+HlnFLqkdD6Q0 + 7OOnGJImiG90iPAT8TV7BCgt0mD3Ckox1piaA4JyZqXDkh/qL8ALl3QQwQeUb4QAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAaNJREFUOE+V07tL + W2EcxnH/AgcHJ6GjWifxVrR4K81gokdOYpoSpcHEYGuJCDFqFNEajdeUGgmIWomCkMugB4cWiqVLK95A + xU1EBC+oOGq3rzkRnOTw+s6/5/Pw3lJSBBaJJTD2MBJRfjOzpDwG1PDh8Sndg1NiSHAuznhoEe/gdDJw + e/efmPILx2evGKCGJmciBGdjajlnF9c4W3tIT0sVByIra4wGw6xv7fLn7w7mDy3PA8LRH4xNLTARCtPR + H8AgW8Xb1S2MfAvj7gtgd/VS1/ARnV5+HqAiNpcPs60Nk3MIyeYTB6zDN1hGrjANHKP3bGDo2KbGu4+h + fRNdy09tyOK/5P34Dca+Q0qs3ymQA+hca0jdB7xNhIvr57UBs/8c89ApFc7lZLhAnkDv3kDqOqCyWSHf + +FUbqPOdIPcfUdmkkFc7lgRqE+3Vndu8soTIKf+kDRi/HCF59ii1x8k1PByc3v2P0sYo2a/tZLzI1gZq + unYpa4wl2kfJLHyXfDxljjgvS2xkFlnIk/zawJvmVQpNk2QVN5Bb1SN+dcJf9YnBe5GF6RjGCzzaAAAA + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAn1JREFUOE+Vk29I + U1EYxu8a2prOamqttgnN/2SzttTKlhFNLIIo+7AQZ1RmaVBSNotapjGScrBAXFKQTZRwm3NtU666a2oz + 0iyStETJKKKvRQnlhyd3p9dtWtALLxzuOc/vfe7DOSxiiSKHbbBNO4ihX68I4vfsARBEEjue2MPLIo7t + OMNaSkN/G3jdhfw+FfYP5sAwfhNNE3dgGClBxeBBHKekyGgTQPE4HRaPaRYZVF5xWo8MN8bKYZkywjim + gW44DxefZeJsbyrTBd3JiL0fDUt/ECS/V4Wq0Ut4OF4J/ZsiXHmuRON4BaZnvsM8WR0AKaRSEGcQY2Co + y+eEfGmDwi1D7dsLqBzKRWl/Okzvr2G+3J8bAwAlvVJkNQtxuaXUByimTuKURwnNwG76oL/40493KPPs + ZABFTzchj0qAyh0HuT7ZB8holeNc39ZFYq8D73Tnxzq626ZqYf5wF4e7JcgmxYiq4MwBzHJafP3FPsb2 + vxZKUoTMDgFENWFzgCYfINj+z5lv9ERvmyb1eDRZgwcTt5HWHo3NLj5Wl4f6AGqLCgWdyQykwS9A6osZ + OZ1i7CWF2N6xBltckdjoXIUYexgkZSIfoKGnDtsaBTRgPqTaUQ3zFy1T9ZC5opA6O1XyJBxiOxeRdaE4 + dPXAwoXadS8dR9rjcNQdz4R0a+Q8DXF/dSLRsZKeuq6NgwgrG/wiHkjKtgAgPTZsqI5CtkuM+ZC8dnP7 + FJC2CyGyrwC/NQRcCwuhp1nQ1WsXX2er2wRpVRJijTw6pARHBG13rW05wq3LwDGwwD/BW1rs/zR0zVqk + lCWCW8wGp5CNkAIWYtTrodaqAm3/9Vn+x8YfvgX00Owml5UAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAmBJREFUOE+Vk29I + U2EUxu9tuNZ0Vktp1SY053RkM1zOSMwIFIkg+kOsxC0yW2kQYjaLGKaxEkoaFFvRh8KYRW5ua86Yutm0 + 7YObZTUXYtHfb33SEKoPT7t3em0zoQ688F7OeX7nued9X5JICs+YHfZZFxH68YIgfsaSIIg8Vg6xi1dG + HN1+ikyuZ76DLwdQPazC7tFKGCcvwzJ1DcbX9WgZ3YtjPjmKHQKUPlLCGuiMIZOCEhcNFeJStBnWD2aY + ozoYxqpw9nkJTvsLmKUZlCH7biasI0mQar8KbRPncG+yFR2vtIyg96MpAUDBan35kBhFCIYG4k48YTtK + vYW4FWlEa+gAGkaUtGj8mxdUfP7+NgFS75ejrGsDzj9uiAPqfMdxIlAOXXBnQuGV8CHM/ppOgGifbUaV + TwqVVwJFhywOKO5R4Mzw1kVWKRfd79ppABWfZqJ0zf5BMSo8ImS0cOYA3Qo6cWO8hileavN+JoJyjxAl + TwUQXk+dA1j+HeD++hBFfZnY4uZjdTM7DlBbVdD0y5hfqOwXgVpHvFKYJnSMGccXCy3e1LsKWc5UiJuE + ccD9IRO2PRDQgPkhUYCbsWOdD0pcEOsqfpIGkZOLNSY29l3cs3ChdtxW4mCfBIe9OcyQpqbf0HpKnOta + SXdd5+Ag3cYCX8uDx2dfAHgCdmxsz0CFW8QMqTGsxtXIBbqr0LkC/J4UcK0k2CdJGO7oF19nm7cT8rY8 + ZJt59JCkrnTa7lr7cqTZloFjJMGv4f1d/OfTMHTpkd+UC24dC5xaFlI0JLLU66HWqxJtL/ks/zPxGz+r + 9G11LIhjAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhFJREFUOE+Nk3FI + U1EUxh0UWRo1WElbIQyaBVGEWggimYIEQ5D+0KggSRBCIsGYs2EMqaiG+8PERoELLYg0C/+w1lOsbKas + xmyFmrGweMUYDIaDhNGv957tgWwtL3xcOPd83z3fOfdmZWVYp7vrOGQvxDPxhEx5ac/cIz1kW9ax4/Zm + tlm20trXvHaRyWmBXa0Gdrq3UDRsoHLESIFTx542E4Ojff8XkkvXOXIU8rHR3dRO7KPRV0TpvXyyz6/n + 3J2GVJEvQ8UkoWnUkGvdgNa2kYpBo0JuCpRgaNErMRmrfMvEyJyLxLKfaFxQheR4gUOnkC/OH1UamrZh + ciK/JwHXX4xJe0CCl+22XIV8+ZuZ4nZTBoFfD2C5axVk4cNtOQq5ZbaKame5Wl2KBcLdJL7biH1sQHxV + SchTKtnqpdxRxpXwcU6MleAUrklVxZh9UZ/aAz5fZ/FZBdHQIynph4Q5xYLRnkfn0ilMN/WExCFiYj8z + 4zdSBRLBDha9zRJpQO1FKHKVA7fyOfPmCPVd+6XLHzLvMacfYXi8lnj4pZTkUGEfqJKmYOCg3UD06yXi + ISszQnt6AVGogaW38LNDhfbCJmo69yIGzhLxVrMwXEjwvfAPgSkriG5YsBDznUQUynh+V4vPpeGdW4// + sTnVe3IUKw+pl0/381YI/Sb8T+sUQnB6DT8x+YQ/vO5JX2KGv/wHlFGxawEY65sAAAAASUVORK5CYII= + + + + 230, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAn1JREFUOE+Vk29I + U1EYxu8a2prOamqttgnN/2SzttTKlhFNLIIo+7AQZ1RmaVBSNotapjGScrBAXFKQTZRwm3NtU666a2oz + 0iyStETJKKKvRQnlhyd3p9dtWtALLxzuOc/vfe7DOSxiiSKHbbBNO4ihX68I4vfsARBEEjue2MPLIo7t + OMNaSkN/G3jdhfw+FfYP5sAwfhNNE3dgGClBxeBBHKekyGgTQPE4HRaPaRYZVF5xWo8MN8bKYZkywjim + gW44DxefZeJsbyrTBd3JiL0fDUt/ECS/V4Wq0Ut4OF4J/ZsiXHmuRON4BaZnvsM8WR0AKaRSEGcQY2Co + y+eEfGmDwi1D7dsLqBzKRWl/Okzvr2G+3J8bAwAlvVJkNQtxuaXUByimTuKURwnNwG76oL/40493KPPs + ZABFTzchj0qAyh0HuT7ZB8holeNc39ZFYq8D73Tnxzq626ZqYf5wF4e7JcgmxYiq4MwBzHJafP3FPsb2 + vxZKUoTMDgFENWFzgCYfINj+z5lv9ERvmyb1eDRZgwcTt5HWHo3NLj5Wl4f6AGqLCgWdyQykwS9A6osZ + OZ1i7CWF2N6xBltckdjoXIUYexgkZSIfoKGnDtsaBTRgPqTaUQ3zFy1T9ZC5opA6O1XyJBxiOxeRdaE4 + dPXAwoXadS8dR9rjcNQdz4R0a+Q8DXF/dSLRsZKeuq6NgwgrG/wiHkjKtgAgPTZsqI5CtkuM+ZC8dnP7 + FJC2CyGyrwC/NQRcCwuhp1nQ1WsXX2er2wRpVRJijTw6pARHBG13rW05wq3LwDGwwD/BW1rs/zR0zVqk + lCWCW8wGp5CNkAIWYtTrodaqAm3/9Vn+x8YfvgX00Owml5UAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAmBJREFUOE+Vk29I + U2EUxu9tuNZ0Vktp1SY053RkM1zOSMwIFIkg+kOsxC0yW2kQYjaLGKaxEkoaFFvRh8KYRW5ua86Yutm0 + 7YObZTUXYtHfb33SEKoPT7t3em0zoQ688F7OeX7nued9X5JICs+YHfZZFxH68YIgfsaSIIg8Vg6xi1dG + HN1+ikyuZ76DLwdQPazC7tFKGCcvwzJ1DcbX9WgZ3YtjPjmKHQKUPlLCGuiMIZOCEhcNFeJStBnWD2aY + ozoYxqpw9nkJTvsLmKUZlCH7biasI0mQar8KbRPncG+yFR2vtIyg96MpAUDBan35kBhFCIYG4k48YTtK + vYW4FWlEa+gAGkaUtGj8mxdUfP7+NgFS75ejrGsDzj9uiAPqfMdxIlAOXXBnQuGV8CHM/ppOgGifbUaV + TwqVVwJFhywOKO5R4Mzw1kVWKRfd79ppABWfZqJ0zf5BMSo8ImS0cOYA3Qo6cWO8hileavN+JoJyjxAl + TwUQXk+dA1j+HeD++hBFfZnY4uZjdTM7DlBbVdD0y5hfqOwXgVpHvFKYJnSMGccXCy3e1LsKWc5UiJuE + ccD9IRO2PRDQgPkhUYCbsWOdD0pcEOsqfpIGkZOLNSY29l3cs3ChdtxW4mCfBIe9OcyQpqbf0HpKnOta + SXdd5+Ag3cYCX8uDx2dfAHgCdmxsz0CFW8QMqTGsxtXIBbqr0LkC/J4UcK0k2CdJGO7oF19nm7cT8rY8 + ZJt59JCkrnTa7lr7cqTZloFjJMGv4f1d/OfTMHTpkd+UC24dC5xaFlI0JLLU66HWqxJtL/ks/zPxGz+r + 9G11LIhjAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhFJREFUOE+Nk3FI + U1EUxh0UWRo1WElbIQyaBVGEWggimYIEQ5D+0KggSRBCIsGYs2EMqaiG+8PERoELLYg0C/+w1lOsbKas + xmyFmrGweMUYDIaDhNGv957tgWwtL3xcOPd83z3fOfdmZWVYp7vrOGQvxDPxhEx5ac/cIz1kW9ax4/Zm + tlm20trXvHaRyWmBXa0Gdrq3UDRsoHLESIFTx542E4Ojff8XkkvXOXIU8rHR3dRO7KPRV0TpvXyyz6/n + 3J2GVJEvQ8UkoWnUkGvdgNa2kYpBo0JuCpRgaNErMRmrfMvEyJyLxLKfaFxQheR4gUOnkC/OH1UamrZh + ciK/JwHXX4xJe0CCl+22XIV8+ZuZ4nZTBoFfD2C5axVk4cNtOQq5ZbaKame5Wl2KBcLdJL7biH1sQHxV + SchTKtnqpdxRxpXwcU6MleAUrklVxZh9UZ/aAz5fZ/FZBdHQIynph4Q5xYLRnkfn0ilMN/WExCFiYj8z + 4zdSBRLBDha9zRJpQO1FKHKVA7fyOfPmCPVd+6XLHzLvMacfYXi8lnj4pZTkUGEfqJKmYOCg3UD06yXi + ISszQnt6AVGogaW38LNDhfbCJmo69yIGzhLxVrMwXEjwvfAPgSkriG5YsBDznUQUynh+V4vPpeGdW4// + sTnVe3IUKw+pl0/381YI/Sb8T+sUQnB6DT8x+YQ/vO5JX2KGv/wHlFGxawEY65sAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAeRJREFUOE+tkW9L + U2EYxu0j7CP0EQa+r/e9TepVNCqkQopcNmSVkSCGaNqfFwZBLk0r1sFCIo2hopjBdIeY20rXmK652s62 + djpsbrt67nt71p4MIuiBH+O8uH73dd9rafkf764vj76pT3/F2TONNf8q9s0cmTMgX7lcRqlUgmVZME0T + uVweqXQW65FdkGDkaUBI3qmS4dcpVKtVpvnR148S8L0I6DGTBW1P0hjy/NZi6OUOKpUKI19zOGUC/q0C + CyTKGgPeaCO4JxzW7AtkvxpIFoBEwkD8/RrC34CFFUDTgM5rmrrCrckwKMjhFR/QegB7x+34EomieMyO + ymEbQoEo/AnRRHDJ7VUFfY90FMSeRNYSe7sdLJFkXA4OLsdrXOh+rgp6H6xykJC1aSoJyodsWP9ocHD+ + s1gjBnRcmVQFN+4tclCGqTaFi0cO8m+hzY6loIHZTTDnneOq4PrgHLbzYOhgNF3WTnU5kD9qh0838CoM + 5uzFMVVwtX8GmxkwdG15MKpNlWVY2xD/gqC946Eq6L6pcZDQk7VLyzBVpqkUnPpQ48y5UVXg6nnGwT+F + ZyK/wo91wCM41X5fFXS5JxqCQL3Bkqj/dgt4IxpMhwBvEBivC06evqMKLrs8+BdOOG43BD8Bbmx/u/wK + Fy4AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAcRJREFUOE+tkVsr + RFEUx/kC4tWbT8BX8CG8ipCQ3JnkMqJEcqdQbpPb0JiQZEi5hYfBkFuM3MfUdJiZY8z176w99nT2eJCy + 6tc5++H/W2uvHRPzH9W74UTzzPWvlGsXcGg+wI+e3WsSeAUCAfh8Png8HsiyjPd3J+yONxxdvYIE3fpj + RbIvSrpW7AiFQgx10enDB7i8gOVOZoK0KQc6dFFTdCw+IRgMMnipw3YZMFvdTMARrtFmuAWNzqt4pwSx + A7GM0Yt59j22AZt7gNEIlNUZxSu0Tl/C7/ezvDrMJVxAEvMzUFpjEAXNYxZ4vV4miR9JYF1tbkS6c8He + I7D7ABRVz4mCpqEDOOWwgIKc6Al2lPDmHVBYNS0KGvq2ILk+I6gl2w8SCOq+bgVMN0BB+YQoqG9fg03y + MNRd6Z+Cq1YJCxfKAs+BpUsgr3hcFNS2LOPRITO4IG44AbqzQyZIHE+KCEiSWzgsCqobjbh5dTOiJ6Bz + sj6VCWZOw+TkD4oCjXYWVy8uBn97es4UJZhuasDkqQTDGaCzhMnK7RcFlTWTOLl3MuitTbcSaOO0tFVl + adSdBBPfgozsHlFQodHhL6RndkYEX+dmWNUdPTytAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABBlJREFUOE+l1etP + W2UcwHEuGXNCYIO2cIQCdsAsg21c6hqGDQiUOx0wbnM6ycJlgYxQkEXIssW4OATcwoCyLlwq7Wm5OBgb + KlmmiTHGaMyWxVdmiTEmxjj9A8xavp5zlqXUaNT4JCfnzZPPeX635wQFSevRLz/h9T7mX62tv97166Of + kS0Fe/jbQ/o3+2lda6VxqZEasYbyhXKK5osocZRQ8n4JZoeZ/JmXMNgN5NpzyZ7OIn1CT/JYMobLBh78 + +ADZCpK/d/bOWa58eYWJrya4+NlFBu4M0PNRD6dvn6ZjvYOOmx20rbfRstJIw2I9FvEoFa4KCuYLyJnO + IWU4hazzWUqUCti+3o7taxv2b+wMfz7M0N0h+jb7OPPhGU7fktF2Xl99jeblJuo8R6lxV1PprKTYUYzR + bkQ/okfTrVFyoYAtKy0KNPbFGBc+vYD1Yytdt7tou9nGyRsn2fhuQ9lct1hLlViJecFM4XwhR2aOYLhm + YP/ofoQewQ/We+oZvDvIuU/OYd200nmrk9YbrZxYfpVmT3NAFYqdxZgcJoyzRnLsOWTZssgcyyTRmugH + 5SLIOevd7KVro4tTq6d4ZfkEjZ4Gat21VEshbl8Gx4scmD1IxvVMMm0HyHzvT6DxulHKTZ2Uo2aOLx+n + eamZes8xCTtKtVhNuShVXCwKQPc59KTOp7J3bi+6CR2x1jj/CeVKVbmqpAo20LTUpLSOnIYat4UKsQKz + aKbAXYDRbQxAta5EtA4t2qkEYvq3FSVjMkPpN4sE/NcluARip2OJ7t/tP+H/AkUBjQy+8TegHOqxxWNS + i9RR45Emxl1OqacU01IhuSu5AQEIKwKCGIfaFsvugW1g2tU0TLMmZdwsooVaTy0Wj4UqdxVlnjLpKaVg + yRSAxa/FE7sai8qtYo9tD+HWcH/ISZeTOHz9sDK7Fc4KpbKVUgOXi2WY3SUUeQoDsOSbSQjrAjFrMUQu + RhIxFcHO3p1+UBgVOGg7qHR+kaOI0oVSzE4zchO/7CoIwFKXU9F+oEWzpiFqNYpnF8MJmwwjtCfUD6rf + VSOHnT2dTd5MHqY5E6Z5E/nz+eQ58nB+61Q2v7Ag3S6u5xEWBaKXoolYjiDMJWHjoYR0h/jBqLej0I5q + 0Y/rOTR1iNzpXGVGs69lk2XPVj6Ubk9HN6Pjubl4VA4VkWIkzzh3EToTSvBwMMGdwU9An8+H/pIe1XkV + CW8loHtHR9qlNPYN7yN1OJWUkRTl0Y3sRbgah2pcTdSkFOpkODvGdxAyIoFDwST3JT8B5Zv2/g/30Q/p + ieyIJLo7mpjuGNTdajRd0rtHQ5xVIL4/Hs2balSDUlUHotjVJ52uVwK7JKw/mXvf3yPg1v6nCfFtbeHb + 8vK77zE+rxevz8vTv4Ec5VPsD8lBIAnX2jP6AAAAAElFTkSuQmCC + + + + 567, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADo + CwAAAk1TRnQBSQFMAgEBBAEAAQkBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8AFgAOEhUA + AfQB8wHwAe8B7AGSAbwB8gH0BAAB8wHxC7wB8QHzAQAB7Ay8ARITAAH0AfIBvAHsARIB+AETARQB6gHs + Ae8B8QHzAfQB8wEHAfgLbQH4AQcBAAHsDP8BEggAAfMB8gHzAfQGAAHyAQcB+AHrAewBbQKSAewB6gET + ARIBbQGSAbwB8QJSAUwKKgETAfgBAAHsAf8KDgH/ARIFAAH0AfMB8AH3AewBkgG8AfIB9AMAAfMC7AG8 + AfABvAH4AewB9wHuAfAB9wHsARIBEwHsAVIBegFSAaAIegFSAaABKgFtAQAB7AH/AewIGwEOAf8BEgMA + AfQB8gG8AewBbQHsARMBFAHqAewBBwHxAfMBAAH3AQcB8AMHAe8C7AH4Ae0BBwHxAfAB6wH4AVIBegFS + AaAIegFSAaABKgFtAQAB7AH/AewC/wEBAv8CAgEbAQ4B/wESAgAB8gEHAfgB6wHsAfcB6wEVARQBEgET + ARIBbQH3AfAB7wIHAbwB8gHzAfIDBwHtAewC7QHqAe0BUgF6AVIJoAFYAaABKgFtAQAB7AH/AewB/wEB + AfkB/wH8Af4B/AEbAQ4B/wESAQAB8wLsAbwB9wLsAfgBEwHrAfgB6wFtAhMB6wEHAfIC9AHxAe8B7gEH + AfcBBwLwAQcB+AHsAfIBUgF6AVIJoAF6AaABKgFtAQAB7AH/AewB/wH7AQEC/wH8Af8BGwEOAf8BEgEA + AfcB7wGSAewB9wEHAfAB7AH4AW0B7AFtAUMB9wH4AW0B8gLxAbwB7wHdARkB9AH1AbwB7wGSAQcBvAH0 + AQABUgF6AVIJoAF6AaABKgFtAQAB7AH/AewH/wEbAQ4B/wESAQACkgHvAQcC8gHwAfEB8AEHAZIB+AEU + AewB6wH4AwAB7wPdARkC/wHvARIB7wHzAgABUgF6AVIJ/wGaAf8BKgHsAQAB7AH/AewIhQEOAf8BEgEA + Ae8B8AHxAQcB8gHxAfQB/wHzAfEB9AHzAbwC7AHxAgAB9AEHARkB3QLeAv8B9AHqAe0B8wIAAVIBoAGa + DFIB8QEAAewB/wHsAYUBWQaFAQ4B/wESAQAC8QEHAfgBbQEHAfQB/wHzAfEB9AG8AgcB9AMAAfAB3QEZ + AfQB7wHrAfUC3QHrAewB8wIAAVIGoAX/ASoB7AHwAgAB7AH/CewBDgG8ARIEAAHyAfABBwHwAfIBvAHw + AbwB9AYAAfIBBwHdAfMB7gH4AfUB3QEZAewB9wHzAgABUgH/BKAB/wVSAUwB8QHzAgAB7An/AZIDEhQA + AQcB9QH/AfUB3gHzAt0B+AG8AfQDAAFSBP8BUgEHAfMIAAHsCf8BkgH/ARIVAAEHAfQB/wH1AfMBGQHd + AQcBkgHzBQAEUgHxAfMJAAHsCRsBkgESFwABBwHzAfUB9AHzAbwB9wHzFQAK7AGSGQABvAEHAbwB7wG8 + AfQFAAFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEBAQABAQYAAQEWAAP/gQAC/wGAAQEC/wHwAQcBgAEA + AYABAQL/AcADAAGAAQEB/gEfAYADAAGAAQEB8AEHBAABgAEBAcABAQQAAYABAQGABQABgAEBBgABgAEB + AwABAQIAAYABAQIAAeABAwIAAYABAQIAAcABAwIAAYABAQEAAQEBwAEDAQABAQGAAQEB4AEPAcABAwEA + AQEBgAEBAv8B4AEDAYABfwGAAQMC/wHgAQcBwAH/AYABBwL/AfABDwL/AYABDwL/AfgBHws= + + + + 357, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAApBJREFUOE91k99L + k1EYx1/vq6uu+ge8qatuiu69iQpBNNAIFpk50ExIhdRsJi2TKZI605zmMCi1qfNnTp3FmE59TecPtPlj + Njd/TPdOMwX99L4Outk8cPhyHs73w3me8zxRQoQVCEhsb+8IR4cnwvFJlCAFjgQpeCR4PJJw5fJFITr6 + knD+wrmoMKsoikxNzTA87JD3JM3NVuqbBqlrH6XWukhpr4u8bAP2HyJBaY8wwMTET3QGE2U9Ig2iG0vw + EPsxWI+geRcq1uBJ6nu624YI7ErhALtdpHp8kzcu+OCFFtnUEYRWWQ0+eLsE6Wkf+dLYhX97NxzgGHXS + 5PDyfDZ0ueo31KyHtGQZ8uR4usZCvb6ZrU1/OGDG6aLd5iZ1HLKnoWAeNAshzXGCWo4nv7JRWlSHd30z + HKAUpqXFQfwwqOzweCxkUvTBCCR8h6R3bl5mleP1bIQDlKr2dE8T3+rnpgVihyBOhimqnO90HaLWzpGZ + XMSaez0yYHBgjvtNXq62wXUz3OiEjG97aD8tk5vTiSqhmNwM3dkAcWKFR40erplOyLf+wdjiIi2tj5iY + BlR38ynR1GDtH4ncB0oKoriCrmqCjo5FjMZJKivtsll/utUptZg+90f+AcU8P+/B7/ezsrKDJEmyrsog + Jw8fGomN1VNQYKasxMyc8xcHB38jdeIiPp/v1Ly1tYXLtYTVOotO10tioh6Nxoy2qB1jrYnNjQh9MDfr + ZmzMyerqKktLy8zMLGCxTGEwDMh1qJdB/ahVxVSUNEbug/29ffq6R6iuaOVr67D8fLs8UDaqqwcofNFE + yr1CnqVqz54FpQ7KkNisY5S/biAlMZek25kk3nqKKi4Lbb4eS49Nfv72//z/Ae3NN4SGWM50AAAAAElF + TkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAApBJREFUOE91k99L + k1EYx1/vq6uu+ge8qatuiu69iQpBNNAIFpk50ExIhdRsJi2TKZI605zmMCi1qfNnTp3FmE59TecPtPlj + Njd/TPdOMwX99L4Outk8cPhyHs73w3me8zxRQoQVCEhsb+8IR4cnwvFJlCAFjgQpeCR4PJJw5fJFITr6 + knD+wrmoMKsoikxNzTA87JD3JM3NVuqbBqlrH6XWukhpr4u8bAP2HyJBaY8wwMTET3QGE2U9Ig2iG0vw + EPsxWI+geRcq1uBJ6nu624YI7ErhALtdpHp8kzcu+OCFFtnUEYRWWQ0+eLsE6Wkf+dLYhX97NxzgGHXS + 5PDyfDZ0ueo31KyHtGQZ8uR4usZCvb6ZrU1/OGDG6aLd5iZ1HLKnoWAeNAshzXGCWo4nv7JRWlSHd30z + HKAUpqXFQfwwqOzweCxkUvTBCCR8h6R3bl5mleP1bIQDlKr2dE8T3+rnpgVihyBOhimqnO90HaLWzpGZ + XMSaez0yYHBgjvtNXq62wXUz3OiEjG97aD8tk5vTiSqhmNwM3dkAcWKFR40erplOyLf+wdjiIi2tj5iY + BlR38ynR1GDtH4ncB0oKoriCrmqCjo5FjMZJKivtsll/utUptZg+90f+AcU8P+/B7/ezsrKDJEmyrsog + Jw8fGomN1VNQYKasxMyc8xcHB38jdeIiPp/v1Ly1tYXLtYTVOotO10tioh6Nxoy2qB1jrYnNjQh9MDfr + ZmzMyerqKktLy8zMLGCxTGEwDMh1qJdB/ahVxVSUNEbug/29ffq6R6iuaOVr67D8fLs8UDaqqwcofNFE + yr1CnqVqz54FpQ7KkNisY5S/biAlMZek25kk3nqKKi4Lbb4eS49Nfv72//z/Ae3NN4SGWM50AAAAAElF + TkSuQmCC + + + + 456, 17 + + + 698, 17 + + + + AAABAAYAICAQAAAAAADoAgAAZgAAABAQEAAAAAAAKAEAAE4DAAAgIAAAAQAIAKgIAAB2BAAAEBAAAAEA + CABoBQAAHg0AACAgAAABACAAqBAAAIYSAAAQEAAAAQAgAGgEAAAuIwAAKAAAACAAAABAAAAAAQAEAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAIAAgAD/AAAAgAAAAP//AACAgAAAAP8AAACA + AAAA//8AAICAAAAA/wAAAIAAwMDAAICAgAAiIiAAAAAAAAAAAAAAAiIiIiIv/////////////wIiIiIi + Iu7u7u7v7+//AAAiIiIiIiIiIv7u7v7/8CIiIiIiIiIiIiIv7u/v/wIiIiIiIgAAAAAAAAAAAAAAAAAA + AAD////////////////////w/u7u7u7u7u7u7u7u6J7u4P7u7u7u7u7u7u7u7u7u7uD+53d3d3d3d3d3 + d3d3d37g/uVERERERERERERERER+4P7lREREREREREREREREfuD+5URERERERERERERERH7g/uVERERE + RERERERERER+4P7lREREREREREREREREfuD+5URERERERERERERERH7g/uVERERERERERERERER+4P7l + REREREREREREREREfuD+5URERERERERERERERH7g/uVERERERERERERERER+4P7lRERERERERERERERE + fuD+5URERERERERERERERH7g/uVERERERERERERERER+4P7lREREREREREREREREfuD+5URERERERERE + RERERH7g/uVERERERERERERERER+4P7lREREREREREREREREfuD+5VVVVVVVVVVVVVVVVV7g/u7u7u7u + 7u7u7u7u7u7u4P7u7u7u7u7u7u7u7u7u7uD////////////////////wIiIiIiIiIiIiIiIiIiIiIvgA + AB/4AAAf/AAAP//AA///4Af/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/////KAAAABAAAAAgAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAIAA + gAD/AAAAgAAAAP//AACAgAAAAP8AAACAAAAA//8AAICAAAAA/wAAAIAAwMDAAICAgAAiIAAAAAACIiIi + /+7vACIiIiIi/vAiIiIAAAAAAAAAAP///////4nw/u7u7u7u7uD+RERERERE4P5URERERETg/lRERERE + ROD+VERERERE4P5URERERETg/lREREREROD+VERERERE4P5VVVVVVVTg/u7u7u7u7uD//////////+AH + 7u7wD+7u/D/u7gAA7uAAAHd3AAB3dwAAd3cAAH7gAABERAAAREQAAEREAAB+4AAAREQAAEREAABERAAA + fuAoAAAAIAAAAEAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA + AACAAIAAgIAAAICAgADA3MAA8MqmAKo/KgD/PyoAAF8qAFVfKgCqXyoA/18qAAB/KgBVfyoAqn8qAP9/ + KgAAnyoAVZ8qAKqfKgD/nyoAAL8qAFW/KgCqvyoA/78qAADfKgBV3yoAqt8qAP/fKgAA/yoAVf8qAKr/ + KgD//yoAAABVAFUAVQCqAFUA/wBVAAAfVQBVH1UAqh9VAP8fVQAAP1UAVT9VAKo/VQD/P1UAAF9VAFVf + VQCqX1UA/19VAAB/VQBVf1UAqn9VAP9/VQAAn1UAVZ9VAKqfVQD/n1UAAL9VAFW/VQCqv1UA/79VAADf + VQBV31UAqt9VAP/fVQAA/1UAVf9VAKr/VQD//1UAAAB/AFUAfwCqAH8A/wB/AAAffwBVH38Aqh9/AP8f + fwAAP38AVT9/AKo/fwD/P38AAF9/AFVffwCqX38A/19/AAB/fwBVf38Aqn9/AP9/fwAAn38AVZ9/AKqf + fwD/n38AAL9/AFW/fwCqv38A/79/AADffwBV338Aqt9/AP/ffwAA/38AVf9/AKr/fwD//38AAACqAFUA + qgCqAKoA/wCqAAAfqgBVH6oAqh+qAP8fqgAAP6oAVT+qAKo/qgD/P6oAAF+qAFVfqgCqX6oA/1+qAAB/ + qgBVf6oAqn+qAP9/qgAAn6oAVZ+qAKqfqgD/n6oAAL+qAFW/qgCqv6oA/7+qAADfqgBV36oAqt+qAP/f + qgAA/6oAVf+qAKr/qgD//6oAAADUAFUA1ACqANQA/wDUAAAf1ABVH9QAqh/UAP8f1AAAP9QAVT/UAKo/ + 1AD/P9QAAF/UAFVf1ACqX9QA/1/UAAB/1ABVf9QAqn/UAP9/1AAAn9QAVZ/UAKqf1AD/n9QAAL/UAFW/ + 1ACqv9QA/7/UAADf1ABV39QAqt/UAP/f1AAA/9QAVf/UAKr/1AD//9QAVQD/AKoA/wAAH/8AVR//AKof + /wD/H/8AAD//AFU//wCqP/8A/z//AABf/wBVX/8Aql//AP9f/wAAf/8AVX//AKp//wD/f/8AAJ//AFWf + /wCqn/8A/5//AAC//wBVv/8Aqr//AP+//wAA3/8AVd//AKrf/wD/3/8AVf//AKr//wD/zMwA/8z/AP// + MwD//2YA//+ZAP//zAAAfwAAVX8AAKp/AAD/fwAAAJ8AAFWfAACqnwAA/58AAAC/AABVvwAAqr8AAP+/ + AAAA3wAAVd8AAKrfAAD/3wAAVf8AAKr/AAAAACoAVQAqAKoAKgD/ACoAAB8qAFUfKgCqHyoA/x8qAAA/ + KgBVPyoA8Pv/AKSgoACAgIAAAAD/AAD/AAAA//8A/wAAAAAAAAD//wAA////AP39/f39hgmGXveCgoKC + 91peWloHNjYHMgc2Mf39/f39/f39/f2CCNHR9q/UCAjUhgiCCYaCXl5eWl42/f39/f39/f39/f0ICQgJ + gv+vrwirCQmCWjIxXlo2B/39/f39/f39/f39/f39/f1ahv/2rwgICII2MTL9/f39/f39/f39/f39/f39 + /f39/f0H915eWlo2BzIx/f39/f39/f39/f1eWloHWgcyBwc2MTYyMjEyMTIxMjH1DQ0N9S319fX19Vqv + CNQI1AgJhoIJgoKCXl6CXl5aWl5aWjYHNjYHNjb1Wvav9q8IqwirCaoJhgmCCV5eXl5eWlpaWvrfB1o2 + B/Ve1AjUCNQICQiGCYIJgoaCgoL39173XvdeXlpeWlpa9V7UhtQIqwivCNQICAjU1K/UCK/Ur6/UCNQI + qwjUCF71Xq8HO187Ozc3Ozc3NzYTMg43DjIODg4OLg4ODg6vWvVerwdfO187Ozs3Nzc2NzY2Nw4yDg4O + Mg4ODjIOCghaDfevNl9fO187Nzs3Ozc3NxMyEzITMg4ODg4OCg4O1F71Xq8HX19fO187Ozc3Ozc2NzY3 + EjIOMw4OMg4OMg7UWg33r1pfY19fOztfOzs3Nzc3NxIzEjMSMg4ODg4OCghe9V6vB2NfX187XztfNzs3 + Ozc2NzY3DjIONg4yDg4O1Fox9/ZaY19jX19fOztfOzc3Ozc3NxI3EjMODg4ODjIIXvVer15fh19jX19f + OztfOzc3Ozc2NzYyEjMyDjIODtReMYL2WodjY19jX19fXzs7Ozs3Nzc3NxM3EjIPDjIO1F4NgrNaY2Nf + h19fX187O187Wzs3Ozc2NzYyDxIyDg7UXjGC/1qHh2NjY19jX19fOzs7Nzs3Nzc2NxM2Mg43Dgj3Ml72 + XmOHh1+HY19jX19fXzs7Nzs3Ozc2NxM3DjIO1F4xgv9ah4djh2NfY19fY187XztfNzs3Nzc3Njc2EzLU + XjGG/16HY4djY4djX2NfX187Xzs7Xzc3OzY3NhMyDwiCMoL/XoeHh4eHY4NjX2NfX187Xzs3Ozc3Nzc3 + NzY2CYIxhv9eh4eHY4eHY4djX2NfX187Xzs7Ozs3NzY3EzbU9zKC/16Hh4eHh2OHY2ODY19jX19fO183 + Ozc7Nzc2NwgJMYb/94eHh4eHh4djh2NjY19fXztfOzs7Ozc3Nzc31IIxCf9e915eXl5aXlpeWloHNgcH + BzYHBzIyBzIxMjGCCTKC/////////7P//6/2r6/Rr6+vCNQICAgJCAmGCYKGMYYJhoaChoKGgoJegl73 + Xl5eXlpeWlpaWgc2BzYHNgcy/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f34AAAf+AAAH/wA + AD//wAP//+AH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////ygA + AAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAA + gACAgAAAgICAAMDcwADwyqYAqj8qAP8/KgAAXyoAVV8qAKpfKgD/XyoAAH8qAFV/KgCqfyoA/38qAACf + KgBVnyoAqp8qAP+fKgAAvyoAVb8qAKq/KgD/vyoAAN8qAFXfKgCq3yoA/98qAAD/KgBV/yoAqv8qAP// + KgAAAFUAVQBVAKoAVQD/AFUAAB9VAFUfVQCqH1UA/x9VAAA/VQBVP1UAqj9VAP8/VQAAX1UAVV9VAKpf + VQD/X1UAAH9VAFV/VQCqf1UA/39VAACfVQBVn1UAqp9VAP+fVQAAv1UAVb9VAKq/VQD/v1UAAN9VAFXf + VQCq31UA/99VAAD/VQBV/1UAqv9VAP//VQAAAH8AVQB/AKoAfwD/AH8AAB9/AFUffwCqH38A/x9/AAA/ + fwBVP38Aqj9/AP8/fwAAX38AVV9/AKpffwD/X38AAH9/AFV/fwCqf38A/39/AACffwBVn38Aqp9/AP+f + fwAAv38AVb9/AKq/fwD/v38AAN9/AFXffwCq338A/99/AAD/fwBV/38Aqv9/AP//fwAAAKoAVQCqAKoA + qgD/AKoAAB+qAFUfqgCqH6oA/x+qAAA/qgBVP6oAqj+qAP8/qgAAX6oAVV+qAKpfqgD/X6oAAH+qAFV/ + qgCqf6oA/3+qAACfqgBVn6oAqp+qAP+fqgAAv6oAVb+qAKq/qgD/v6oAAN+qAFXfqgCq36oA/9+qAAD/ + qgBV/6oAqv+qAP//qgAAANQAVQDUAKoA1AD/ANQAAB/UAFUf1ACqH9QA/x/UAAA/1ABVP9QAqj/UAP8/ + 1AAAX9QAVV/UAKpf1AD/X9QAAH/UAFV/1ACqf9QA/3/UAACf1ABVn9QAqp/UAP+f1AAAv9QAVb/UAKq/ + 1AD/v9QAAN/UAFXf1ACq39QA/9/UAAD/1ABV/9QAqv/UAP//1ABVAP8AqgD/AAAf/wBVH/8Aqh//AP8f + /wAAP/8AVT//AKo//wD/P/8AAF//AFVf/wCqX/8A/1//AAB//wBVf/8Aqn//AP9//wAAn/8AVZ//AKqf + /wD/n/8AAL//AFW//wCqv/8A/7//AADf/wBV3/8Aqt//AP/f/wBV//8Aqv//AP/MzAD/zP8A//8zAP// + ZgD//5kA///MAAB/AABVfwAAqn8AAP9/AAAAnwAAVZ8AAKqfAAD/nwAAAL8AAFW/AACqvwAA/78AAADf + AABV3wAAqt8AAP/fAABV/wAAqv8AAAAAKgBVACoAqgAqAP8AKgAAHyoAVR8qAKofKgD/HyoAAD8qAFU/ + KgDw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8A/f39goJeXloHNjYxMf39/f39 + /f0Ihq8ICYJaWv39/f39/f39/f1eWlox/f39/f39XgcHNgcyMjEyMQ719fX19VqvrwirCAiGhoKC9/rf + WvVe9gjUCNQIr68I1AjUCK/1XtE3Ozc3Ew4ODw4KDgrUDV7/O187Ozc3NxIyDg4KCPX3/19fXzs3OzY3 + EjIOCq/1XvZfY19fOzc3NzcOMg7UMYL/Y2NfXztfOzc2NxMO1A2G/19jX19fOzs3Ozc2Dq8xgvYJh4dj + Y19fOzc3Nw7UMQn/X2NjX19fOzs7NzcP1DGG////////r9GvrwjUCAgyhgmChoKCXvdeXlpaWgc2B+AH + CNTwDwgJ/D8JggAAhoIAAPf3AABe9wAAWl4AAFr1AACG1AAACK8AAAgIAADUrwAAr9QAANQIAACrCAAA + XvUoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADGubGUz8W//8OyqP+6qZ7/u6qh/76to/+9rKL/uqqd/7ajmP+ynZD/rZeK/62Xiv+qkoT/noZ4/5V9 + bf+SeWj/j3Zl/4xyYf+Jb17/g2tZ/5N4Zf98YU2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMi5sf/Vxbz/8u3q//Lt6v/s5eL/6+Le/+HUzv/e0Mr/2cvD/9XFu//QvrX/0L61/8y5 + r//ItKj/w66i/76onP+4oZT/s52P/6+Ziv+pkoP/rJaI/5N4Zf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAz8W/QNfIwLnWyMD/18jA/9vMxf+9rKL/9/Ty//by8v/v6OX/5NnU/9jI + wP/YyMD/zLiu/8Krn/+hiHj/iG5c/4JoVf+ojXz/o4d2/5N4ZdmTeGWda1A7QAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlX1sQJV9bP/Mw7z/+vj4//Tw + 7f/p4N3/3tDJ/97Qyf/RwLb/xrCk/5V9bP91XUn/dV1J9nVdSUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlX1sQJV9 + bP+rnJD/qJiL/6SRhf+ein3/nop9/5mEdP+UfGz/gmpY/3VdSeN1XUlAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKGLev+fiHj/m4V0/5mCcv+Wf27/lHxr/5F6aP+Od2X/jHRi/4lx + X/+Hblz/hGxZ/4FoVv+AZ1P/fWNR/3phTv94X0v/dV1J/3NaRv9yWET/cFVC/25TP/9sUj3/a1A7/2lO + Ov9nTDj/Zks2/2RJNf9jSDP/Y0gz/2NIM/9jSDP/o419/+ri3v/m3dj/49jS/9/SzP/czcb/18e//9TD + uf/RvbP/zLiu/8m0qf/GsKT/wqug/7+om/+9pJb/uJ+R/7WbjP+xl4f/rpOD/6qQf/+njHv/pIl4/6GF + dP+eg3H/m4Bu/5l+bP+XfGr/lXto/5V6Z/+Vemf/lXpn/2NIM/+mj3//9O/s//Dq5//t5uL/6eHc/+bc + 1v/i1tH/39HK/9rLxf/Xxr7/08G4/8+8sv/Lt6z/yLKn/8Wuov/Cqp7/v6ea/7yilP+4nZD/s5mL/7CV + hv+tkoL/qo9+/6aLev+jiHf/DP8A/y6bAP+bgG3/mX5r/5d8af+Vemf/Y0gz/6eSgv/i1tD/4NLM/93P + yP/bzcT/2MnB/9bGvf/Uwrr/0sC2/9C9sv/Nuq//y7es/8mzqf/Hsab/xa6j/8OsoP/Bqp3/v6ib/72l + mP+7o5X/uZ+S/7adj/+1m4v/s5iJ/7CWhv+uk4T/rJGB/6qPfv+njX3/pot6/6SJeP9jSDP/qpSE/+TZ + 0//Ftav/4dTP/+HUz//h1M//4dTP/+HUz//h1M//4dTP/+HUz//h1M//4dTP/+HUzv/h1M7/4dTO/+HU + zv/h1M7/4dTP/+HUz//h1M//4dTP/+HUz//h1M//4dTP/+HUz//h1M//4tXQ/+LW0P/i1tH/pop6/2NJ + M/+slob/5dvW/5J7af//oW7//51p//+ZZf//lWH//JJd//iPWv/1i1f/74dU/+qDUP/kf03/3XpK/9d3 + R//QckT/yW5C/8NqP/+9Zjz/t2M6/7JfOP+tXTb/qlo1/6ZYM/+mWDP/plgz/6ZYM/+mWDP/plgz/+LV + z/+njHz/ZUo0/62Yif/o3tn/lH1r//+jc///oG3//51p//+ZZP//lmD//ZJd//mOWf/0i1f/74dU/+qD + UP/kf03/3XpK/9Z3R//QckT/yW5B/8NqP/+9Zjz/tmM6/7JfOP+tXTb/qlo0/6ZYM/+mWDP/plgz/6ZY + M/+mWDP/4dTO/6qOfv9mSzb/sJqL/+rh3P+Wf27//6d3//+jcv//oG3//51p//+ZZP//lWH//JJd//mP + Wv/0i1b/7odT/+mCUP/jfk3/3HpK/9Z2R//QcUT/yW5B/8NqP/+8Zj3/tmM6/7JgOP+tXTb/qVo0/6ZY + M/+mWDP/plgz/6ZYM//g0sz/q5CA/2ZMN/+xnI3/6+Tg/5iBcf//qnz//6d3//+kcv//oGz//5xp//+Z + ZP//lWH//JJd//iOWf/0i1b/7oZT/+mDUP/ifk3/3HpK/9V2R//PcUT/yG1C/8JqP/+8ZTz/t2I6/7Ff + OP+sXDb/qVk1/6ZYM/+mWDP/plgz/97Qyv+tkoL/Z005/7Sfj//u5uP/moNz//+ugf//qnv//6Z3//+j + cf//oGz//5xo//+ZZP//lWD/+5Fd//iOWf/0ilb/7oZT/+mCUP/ifU3/3HpK/9V1Rv/OckT/yG5B/8Fp + P/+7ZTz/tmI5/7FfOP+tXDb/qVk0/6ZYM/+mWDP/3s/I/66UhP9pTjv/tqCS/+/p5v+chXX//7CF//+t + gP//qnv//6Z2//+jcf//n23//5xo//+YY//+lV///JFd//iOWf/zilb/7oZS/+iCT//hfUz/23pJ/9R1 + R//OcUT/x21B/8FpPv+8ZTv/tmE6/7FeOP+sXDb/qFk0/6ZYM//dz8j/sJaG/2pQO/+4opT/8evo/5+I + eP//s4v//7CF//+tgP//qnv//6Z2//+jcf//n2z//5tn//+YY///lGD/+5Fc//eOWf/yilb/7YVS/+iC + T//hfkz/23lJ/9V1Rv/OcUT/yGxB/8FoPv+7ZTz/tWE5/7BfOP+sXDb/qFo0/93Ox/+ymIn/bFI+/7ml + l//y7ev/oYp6//+2j///s4r//7CF//+tgP//qnr//6Z2//+icf//n2z//5xo//+YY//+lGD/+5Fc//eN + WP/yilb/7YVT/+eBT//hfUz/23hJ/9R1Rv/OcUP/x2xA/8BoPv+7ZDv/tWE6/7BeN/+sWzb/3c7I/7Wa + i/9tUz//u6eZ//Tw7v+ijXz//7mT//+2jv//s4n//7CF//+tgP//qXr//6V1//+icP//nmv//5tn//+Y + Y//+lV//+5Fc//aNWf/yilX/7YVS/+eBT//hfUz/2nlJ/9R1Rv/NcEP/xmxA/8BpPv+6ZDz/tGE5/7Be + OP/dzsf/tpyN/29VQf+9qJr/9vLw/6WPf///u5f//7iT//+2jv//s4n//7CE//+tf///qXr//6Z1//+i + cP//n2z//5tn//+YY//+lF//+pBc//aNWf/yilX/7IVS/+eBTv/gfEz/2nhJ/9N0Rv/NcEP/xmxA/79o + Pv+6ZDv/tWE5/93Ox/+4n5H/cVdD/7+qnf/39PL/ppCB//++mv//u5b//7iS//+2jf//s4n//7CE//+s + f///qHr//6Z1//+hcP//n2v//5pm//+XYv/+lF//+5Bb//eMWP/xiVX/7IRS/+aBT//gfEv/2XlI/9N0 + Rf/Mb0L/xmxA/8BoPf+5ZDv/3c7H/7qgk/9zWEX/wKye//n29f+pk4P//7+d//+9m///u5f//7iS//+2 + jv//s4n//7CD//+sf///qXr//6V0//+hb///n2v//5tm//+XYv/+lF//+pBb//aMWP/yiVX/64VS/+WA + T//gfEv/2XhI/9N0Rf/Lb0P/xmxA/79oPv/dzsf/vKOW/3RbR//CrqD/+vj3/6uVhv//waH//7+e//+9 + mv//upb//7iS//+1jv//soj//6+D//+sfv//qXn//6V0//+hb///nmr//5pm//+WYv/9lF7/+pBb//aM + V//xiVT/7IRS/+aATv/ffEv/2XhI/9J0Rf/LcEL/xWs//93Ox/++ppn/dl1J/8Ovof/8+vn/rZeI///C + ov//wKD//7+d//+8mv//upb//7eR//+1jf//soj//6+D//+rfv//qHn//6V0//+hb///nmr//5pm//+W + Yv/9k1//+pBb//aMWP/wiVT/64RR/+WATv/efEv/2HdI/9FzRf/Lb0L/3c7H/8Com/93X0v/xbGk//z7 + +/+vmYr//8Ki///Cov//waD//7+d//+9mf//upX//7eS//+1jf//sYj//66D//+sff//qHj//6V0//+h + b///nWr//5pl//+WYv/9k17/+Y9b//aMWP/xiFT/64RQ/+SATv/ffEv/13hH/9FzRf/dzsf/waqd/3pg + Tf/GsqX//v38/7GbjP//wqL//8Ki///Cov//wKD//76d//+9mf//upX//7eR//+0jP//soj//66C//+r + ff//p3n//6Vz//+hbv//nmn//5pl//+WYf/9k13/+Y9a//WMWP/wiFT/64NR/+V/Tf/ee0v/13dI/93O + x//Cq6D/fGNP/8ezp/////7/sp2O///Cov//wqL//8Ki///Cov//wZ///7+d//+9mf//upX//7eR//+0 + jP//sYf//66C//+rff//p3f//6Ry//+hbv//nWr//5ll//+WYf/9k13/+Y9a//WLV//wiFP/6YRQ/+R/ + Tv/de0r/3c7H/8Wuov9+ZFH/yLSo//////+0n5H//8Ki///Cov//wqL//8Ki///Cov//wJ///76d//+8 + mP//upX//7eR//+0jP//sof//66C//+qff//p3f//6Rz//+gbv//nWn//5ll//+WYf/8k17/+Y9a//SL + Vv/vh1T/6YNQ/+N+Tv/czsf/xrGk/39nVP/Jtan//////7ahk/+0oJH/sp2O/7CbjP+umYn/rJeI/6qU + hf+okoL/ppCA/6OOff+hi3v/n4l4/52Gdv+bhHP/mIJx/5d/bf+UfGv/kXpo/494Zv+OdmT/inNh/4lx + Xv+Gb1z/hGxa/4JqV/+AaFX/fmVS/8Kwpv/Isqf/gmlW/8q3qv///////////////////f3//f38//z6 + +v/6+Pf/+Pb0//f08v/18fD/9O/s//Hs6v/w6eb/7ebj/+vj3//p4Nz/593Y/+Xa1f/i19H/4NTN/97R + yv/czcb/2srC/9fHv//UxLv/08G3/9C9tP/Ou7H/zLit/8q0qv+Ea1n/y7ir/8q2qv/Jtqn/yLSn/8ay + pf/EsaP/wq+h/8CtoP+/q53/vaib/7ummP+5pJb/tqGT/7Sgkf+ynY7/r5qL/62Yif+qlYX/qJKC/6aP + f/+jjX3/oIp6/56Hd/+ahHP/mIFx/5V+bv+Te2r/kHln/412ZP+Lc2H/iXBe/4ZuW/8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgA + AB/4AAAf+AAAH/+AAf//wAP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/////KAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCt + oP+6ppf/sp2O/6qUhP+ginn/l4Bv/452ZP+FbVn/fGNQ/3RaR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADAraBAyb+32cq6sf/p4d7/4tXP/9G9s//Cq5//o4d2/6OHdtl0WkdAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADAraBAopKF/6iWiv+gjH7/dV1J/3RaR0AAAAAAAAAAAAAAAAAAAAAAAAAAAKOM + fP+chnX/l4Bv/5F6aP+Mc2H/hm5b/4FoVf97Yk//dlxI/3FXQ/9tUz//aU86/2ZLNv9jSTT/Y0gz/2NI + M/+nkoL/7Ofk/93Z2P/a1dP/18/L/9HIxP/PxL//yru2/8Wzrv/Brab/vqSf/6mjkf8M/wD/LpsA/7qK + h/9jSDP/rJeH//Pu6//h1M//4dTP/+HUz//h1M//4dTP/+HUz//h1M//4dTP/+HUz//h1M//4dTP/+HU + z//h1M//Y0gz/7GcjP/18O7/+YxN//+SV///iEz/94FG/+p3P//bbjj/zmYx/79dK/+xUyb/pk0i/6BJ + IP+VNAX/4dTP/2VKNf+1oZH/9vPy//eeaf//o3D//5pn//6UXv/1jFj/6oNR/958TP/Rc0X/w2tA/7hk + O/+vXjn/n0cf/+HUz/9nTTj/uaWW//j29f/3pHL//6h4//+fbf//mWT//JJd//OKVv/pg1D/23pJ/89y + RP/DaT//uGQ8/6VLIf/h1M//alA7/72om//6+Pf/96p8//+vgf//pnb//55s//+YY//8kVz/84tW/+eC + UP/bekn/zXFE/8FrQP+uUST/4dTP/21TP//ArJ///Pr6//evhf//tYv//62A//+ndv//n2v//5hj//yS + XP/zilb/6IJO/9t6Sf/PckT/u1kq/+HUz/9xV0P/xLCj//38/P/4tI3//7qU//+yif//rH7//6V0//+e + bP//l2P//JFb//OJVP/ngU7/2npJ/8hiL//h1M//dVtI/8e0pv/+/f7/+LmU///Anf//uZP//7SK//+t + f///p3b//6Bt//+ZY//8kVz/9ItV/+mEUP/ZbDf/4dTP/3lgTf/Jtqn///////GthP/4upT/+LOM//it + hf/4qXr/+KJv//icZv/4lVv/+Y1S//iGS//ygEb/5Ggp/+HUz/9+ZVH/y7ir///////+/v///fz7//r5 + +P/49fP/9PHv//Lt6v/u6OX/6+Pf/+fe2f/k2tT/4dXP/93Ryv/azcX/gmlW/8u4q//LuKv/ybWo/8ay + pP/BraD/vamb/7mklv+0n5H/r5mK/6qThP+kjX7/nod3/5iBcP+Semr/jHRj/4dvXP/gB4L/4AfQ//gf + zP8AAMj/AADE/wAAwf8AAL3/AAC6/wAAtv8AALL/AACv/wAArP8AAKn/AACm/wAAo/8AAKD/ + + + \ No newline at end of file diff --git a/Explorer/Properties/AssemblyInfo.cs b/Explorer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d432dbc --- /dev/null +++ b/Explorer/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Explorer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Explorer")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c26b59dc-3fea-4397-89d6-6233f6a8ccd6")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Explorer/Properties/Resources.Designer.cs b/Explorer/Properties/Resources.Designer.cs new file mode 100644 index 0000000..137a855 --- /dev/null +++ b/Explorer/Properties/Resources.Designer.cs @@ -0,0 +1,66 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="Explorer.Properties.Resources.get_ResourceManager():System.Resources.ResourceMana" + + "ger")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="Explorer.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="Explorer.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace Explorer.Properties { + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if ((resourceMan == null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Explorer.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Explorer/Properties/Resources.resx b/Explorer/Properties/Resources.resx new file mode 100644 index 0000000..11e04b0 --- /dev/null +++ b/Explorer/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Explorer/Properties/Settings.Designer.cs b/Explorer/Properties/Settings.Designer.cs new file mode 100644 index 0000000..f580974 --- /dev/null +++ b/Explorer/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Explorer.Properties.Settings.get_Default():Explorer.Properties.Settings")] + +namespace Explorer.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Explorer/Properties/Settings.settings b/Explorer/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/Explorer/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Explorer/program.cs b/Explorer/program.cs new file mode 100644 index 0000000..86159c7 --- /dev/null +++ b/Explorer/program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Explorer +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Explorer()); + } + } +} \ No newline at end of file diff --git a/FITWorks/FITWorks.sln b/FITWorks/FITWorks.sln new file mode 100644 index 0000000..146259f --- /dev/null +++ b/FITWorks/FITWorks.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FITWorks", "FITWorks\FITWorks.csproj", "{C9825DEC-B6B1-41BA-9DA0-59C99DF070BF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C9825DEC-B6B1-41BA-9DA0-59C99DF070BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C9825DEC-B6B1-41BA-9DA0-59C99DF070BF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C9825DEC-B6B1-41BA-9DA0-59C99DF070BF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C9825DEC-B6B1-41BA-9DA0-59C99DF070BF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/FITWorks/FITWorks.suo b/FITWorks/FITWorks.suo new file mode 100644 index 0000000..0b68949 Binary files /dev/null and b/FITWorks/FITWorks.suo differ diff --git a/FITWorks/FITWorks/FITDisplay.Designer.cs b/FITWorks/FITWorks/FITDisplay.Designer.cs new file mode 100644 index 0000000..8af851d Binary files /dev/null and b/FITWorks/FITWorks/FITDisplay.Designer.cs differ diff --git a/FITWorks/FITWorks/FITDisplay.cs b/FITWorks/FITWorks/FITDisplay.cs new file mode 100644 index 0000000..d40ee99 --- /dev/null +++ b/FITWorks/FITWorks/FITDisplay.cs @@ -0,0 +1,288 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Imaging; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.IO; +using System.Threading; + +namespace FITWorks +{ + public partial class FITDisplay : UserControl + { + public string kind = ""; + + private Point fixpunkt; + public Point Fixpunkt + { + get { return fixpunkt; } + set { fixpunkt = value; } + } + public int[,] FIT16BitGreyScale = new int[512, 512]; + + private Bitmap BMP8BitGreyScale = new Bitmap(512, 512); + private Bitmap BMPRect = new Bitmap(128, 128); + + private int minvalue = 65536; + public int Lmin + { + get { return minvalue; } + set { minvalue = value; } + } + private int maxvalue = 0; + private Thread t; + + + public FITDisplay() + { + InitializeComponent(); + } + + public FITDisplay(string Kind) + { + InitializeComponent(); + kind = Kind; + if (kind == "result") + { + bLoad.Enabled = false; + bSaveFIT.Enabled = true; + lFilename.Visible = false; + } + if (kind == "plus" || kind=="minus" || kind=="divide" || kind=="dividespecial") + { + bLoad.Enabled = true; + bSaveFIT.Enabled = false; + lFilename.Visible = true; + } + } + + + private void DrawBMPfromFITArray() + { + int Grey8Bit = 0; + double dGrey8Bit = 0; + int trimstart = int.Parse(tbTrimStart.Text); + int trimend = int.Parse(tbTrimEnd.Text); + float trimmultipler = 65536.0f / (65536.0f - ((float)trimstart + (65536.0f - (float)trimend))); + + if (rbLinear.Checked) + { + if (!cbTrimValues.Checked) + { + for (int row = 0; row < 512; row++) + { + for (int col = 0; col < 512; col++) + { + Grey8Bit = FIT16BitGreyScale[col, row] / 0x100; + if (Grey8Bit > 255) + { + Grey8Bit = 255; + } + if (Grey8Bit < 0) + { + Grey8Bit = 0; + } + BMP8BitGreyScale.SetPixel(col, row, Color.FromArgb(Grey8Bit, Grey8Bit, Grey8Bit)); + } + } + } + else + { + for (int row = 0; row < 512; row++) + { + for (int col = 0; col < 512; col++) + { + Grey8Bit = ((FIT16BitGreyScale[col, row] - trimstart) * (int)trimmultipler) / 0x100; //minvalue ist falsch da gehrt trimstart hin + if (Grey8Bit > 255) + { + Grey8Bit = 255; + } + if (Grey8Bit < 0) + { + Grey8Bit = 0; + } + BMP8BitGreyScale.SetPixel(col, row, Color.FromArgb(Grey8Bit, Grey8Bit, Grey8Bit)); + } + } + } + } + else if (rbExponentiell.Checked) + { + if (!cbTrimValues.Checked) + { + for (int row = 0; row < 512; row++) + { + for (int col = 0; col < 512; col++) + { + dGrey8Bit = Math.Pow(float.Parse(tbBase.Text), FIT16BitGreyScale[col, row]) / 0x100; + if (Grey8Bit > 255) + { + Grey8Bit = 255; + } + if (Grey8Bit < 0) + { + Grey8Bit = 0; + } + BMP8BitGreyScale.SetPixel(col, row, Color.FromArgb((int)dGrey8Bit, (int)dGrey8Bit, (int)dGrey8Bit)); + } + } + } + else + { + for (int row = 0; row < 512; row++) + { + for (int col = 0; col < 512; col++) + { + dGrey8Bit = Math.Pow(float.Parse(tbBase.Text), (FIT16BitGreyScale[col, row] - minvalue) * (int)trimmultipler) / 0x100; + if (Grey8Bit > 255) + { + Grey8Bit = 255; + } + if (Grey8Bit < 0) + { + Grey8Bit = 0; + } + BMP8BitGreyScale.SetPixel(col, row, Color.FromArgb((int)dGrey8Bit, (int)dGrey8Bit, (int)dGrey8Bit)); + } + } + } + } + pbMain.Image = BMP8BitGreyScale; + } + + private void bLoad_Click(object sender, EventArgs e) + { + if (openFITFileDialog.ShowDialog() == DialogResult.OK) + { + parseFITintoArray(openFITFileDialog.FileName); + + lFilename.Text = openFITFileDialog.FileName.Split('\\')[openFITFileDialog.FileName.Split('\\').Length - 1]; + + t = new Thread(new ThreadStart(DrawBMPfromFITArray)); + t.Start(); + } + } + + private void pbMain_MouseMove(object sender, MouseEventArgs e) + { + try + { + lx.Text = "x = " + e.X; + ly.Text = "y = " + e.Y; + lL.Text = "L = " + FIT16BitGreyScale[e.X, e.Y]; + int X = e.X; + int Y = e.Y; + if (X < 64 / int.Parse(cbZoomFactor.Text)) + X = 64 / int.Parse(cbZoomFactor.Text); + if (Y < 64 / int.Parse(cbZoomFactor.Text)) + Y = 64 / int.Parse(cbZoomFactor.Text); + if (X > 512 - 64 / int.Parse(cbZoomFactor.Text)) + X = 512 - 64 / int.Parse(cbZoomFactor.Text); + if (Y > 512 - 64 / int.Parse(cbZoomFactor.Text)) + Y = 512 - 64 / int.Parse(cbZoomFactor.Text); + pbZoom.Image = BMP8BitGreyScale.Clone(new Rectangle(X - 64 / int.Parse(cbZoomFactor.Text), Y - 64 / int.Parse(cbZoomFactor.Text), 128 / int.Parse(cbZoomFactor.Text), 128 / int.Parse(cbZoomFactor.Text)), PixelFormat.Format32bppArgb); + } + catch { }; + } + + + private void bAktualisieren_Click(object sender, EventArgs e) + { + DrawBMPfromFITArray(); + } + + private void pbMain_MouseClick(object sender, MouseEventArgs e) + { + fixpunkt.X = e.X; + fixpunkt.Y = e.Y; + lxf.Text = "xf = " + e.X; + lyf.Text = "yf = " + e.Y; + } + + private void bSaveFIT_Click(object sender, EventArgs e) + { + if (saveFITFileDialog.ShowDialog() == DialogResult.OK) + { + string header = "SIMPLE = T / file does conform to FITS standard BITPIX = 16 / number of bits per data pixel NAXIS = 2 / number of data axes NAXIS1 = 512 / length of data axis 1 NAXIS2 = 512 / length of data axis 2 EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format defined in Astronomy andCOMMENT Astrophysics Supplement Series v44/p363, v44/p371, v73/p359, v73/p365.COMMENT Contact the NASA Science Office of Standards and Technology for the COMMENT FITS Definition document #100 and other FITS information. BZERO = 32768. / DATA ZERO BSCALE = 1. / DATA SCALE EXPOSURE= 0. / EXPOSURE IN SECONDS HBIN = 2 / HORIZONTAL BIN FACTOR VBIN = 2 / VERTICAL BIN FACTOR DATE = '2004-12-14T22:28:48' / file creation date (YYYY-MM-DDThh:mm:ss UTC) END"; + FileStream FITStream = new FileStream(saveFITFileDialog.FileName, FileMode.Create); + byte[] FITFile = new byte[529920]; + byte[] bheader = Encoding.ASCII.GetBytes(header); + bheader.CopyTo(FITFile, 0); + for (int i = 2880; i < 527168; i += 2) + { + int Row = ((i - 2880) / 2) / 512; + int Col = ((i - 2880) / 2) - Row * 512; + int Grey16Bit = FIT16BitGreyScale[Col, 511 - Row]; + if (Grey16Bit > 65535) + Grey16Bit = 65535; + if (Grey16Bit < 0) + Grey16Bit = 0; + if (Grey16Bit >= 32768) + { + Grey16Bit = Grey16Bit - 32768; + } + else + { + Grey16Bit = Grey16Bit + 32768; + } + int Grey16BitFirstByte = Grey16Bit / 0x100; + int Grey16BitSecondByte = Grey16Bit - Grey16BitFirstByte*0x100; + FITFile[i] = (byte)Grey16BitFirstByte; + FITFile[i + 1] = (byte)Grey16BitSecondByte; + } + FITStream.Write(FITFile, 0, FITFile.Length); + FITStream.Close(); + } + } + + private void parseFITintoArray(string path) + { + minvalue = 65536; + maxvalue = 0; + + FileStream FITStream = new FileStream(path, FileMode.Open); + byte[] FITFile = new byte[FITStream.Length]; + FITStream.Read(FITFile, 0, FITFile.Length); + FITStream.Close(); + + for (int i = 2880; i < 527168; i += 2) + { + int Grey16Bit = (FITFile[i] * 0x100) + FITFile[i + 1]; + if (Grey16Bit >= 32768) + { + Grey16Bit = Grey16Bit - 32768; + } + else + { + Grey16Bit = Grey16Bit + 32768; + } + + int Row = ((i - 2880) / 2) / 512; + int Col = ((i - 2880) / 2) - Row * 512; + FIT16BitGreyScale[Col, 511 - Row] = Grey16Bit; + if (Grey16Bit < minvalue) + { + minvalue = Grey16Bit; + } + if (Grey16Bit > maxvalue) + { + maxvalue = Grey16Bit; + } + } + + lLmax.Text = "L max = " + maxvalue; + lLmin.Text = "L min = " + minvalue; + } + + private void bSaveBMP_Click(object sender, EventArgs e) + { + if (saveBMPFileDialog.ShowDialog() == DialogResult.OK) + { + BMP8BitGreyScale.Save(saveBMPFileDialog.FileName, ImageFormat.Bmp); + } + } + } +} diff --git a/FITWorks/FITWorks/FITDisplay.resx b/FITWorks/FITWorks/FITDisplay.resx new file mode 100644 index 0000000..d4fcac0 --- /dev/null +++ b/FITWorks/FITWorks/FITDisplay.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 127, 17 + + + 268, 17 + + + 407, 17 + + \ No newline at end of file diff --git a/FITWorks/FITWorks/FITWorks.csproj b/FITWorks/FITWorks/FITWorks.csproj new file mode 100644 index 0000000..76893d6 --- /dev/null +++ b/FITWorks/FITWorks/FITWorks.csproj @@ -0,0 +1,79 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {C9825DEC-B6B1-41BA-9DA0-59C99DF070BF} + WinExe + Properties + FITWorks + FITWorks + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + UserControl + + + FITDisplay.cs + + + Form + + + Main.cs + + + + + FITDisplay.cs + + + Main.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + \ No newline at end of file diff --git a/FITWorks/FITWorks/FITWorks.csproj.user b/FITWorks/FITWorks/FITWorks.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/FITWorks/FITWorks/FITWorks.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/FITWorks/FITWorks/Main.Designer.cs b/FITWorks/FITWorks/Main.Designer.cs new file mode 100644 index 0000000..1de987c Binary files /dev/null and b/FITWorks/FITWorks/Main.Designer.cs differ diff --git a/FITWorks/FITWorks/Main.cs b/FITWorks/FITWorks/Main.cs new file mode 100644 index 0000000..ab66767 --- /dev/null +++ b/FITWorks/FITWorks/Main.cs @@ -0,0 +1,175 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace FITWorks +{ + public partial class Main : Form + { + public Main() + { + InitializeComponent(); + } + + private void bNewResultTab_Click(object sender, EventArgs e) + { + TabPage tp = new TabPage("=TabPage "+(TabContainer.TabPages.Count + 1).ToString()); + FITDisplay fd = new FITDisplay("result"); + fd.Dock = DockStyle.Fill; + tp.Controls.Add(fd); + TabContainer.TabPages.Add(tp); + } + + private void bDeleteTab_Click(object sender, EventArgs e) + { + if (TabContainer.SelectedTab.Text != "Result") + { + TabContainer.SelectedTab.Dispose(); + } + } + + private void bDeleteAllTabs_Click(object sender, EventArgs e) + { + while (TabContainer.TabCount > 1) + { + TabContainer.TabPages[TabContainer.TabCount - 1].Dispose(); + } + } + + private void bNewPlusTab_Click(object sender, EventArgs e) + { + TabPage tp = new TabPage("+TabPage " + (TabContainer.TabPages.Count).ToString()); + FITDisplay fd = new FITDisplay("plus"); + fd.Dock = DockStyle.Fill; + tp.Controls.Add(fd); + TabContainer.TabPages.Add(tp); + } + + private void bNewMinusTab_Click(object sender, EventArgs e) + { + if (TabContainer.TabCount < 3) + { + TabPage tp = new TabPage("-TabPage " + (TabContainer.TabPages.Count).ToString()); + FITDisplay fd = new FITDisplay("minus"); + fd.Dock = DockStyle.Fill; + tp.Controls.Add(fd); + TabContainer.TabPages.Add(tp); + } + } + + private void bNewDivideTab_Click(object sender, EventArgs e) + { + if (TabContainer.TabCount < 3) + { + TabPage tp = new TabPage("/TabPage " + (TabContainer.TabPages.Count).ToString()); + FITDisplay fd = new FITDisplay("divide"); + fd.Dock = DockStyle.Fill; + tp.Controls.Add(fd); + TabContainer.TabPages.Add(tp); + } + } + + private void nNewDivideSpecialTab_Click(object sender, EventArgs e) + { + if (TabContainer.TabCount < 3) + { + TabPage tp = new TabPage("/SpecialTabPage " + (TabContainer.TabPages.Count).ToString()); + FITDisplay fd = new FITDisplay("dividespecial"); + fd.Dock = DockStyle.Fill; + tp.Controls.Add(fd); + TabContainer.TabPages.Add(tp); + } + } + + private void bErgebnis_Click(object sender, EventArgs e) + { + int minx = 512; + int miny = 512; + int minx2 = 512; + int miny2 = 512; + int pluscount = 0; + + for (int i = 0; i < 512; i++) + for (int j = 0; j < 512; j++) + ResultDisplay.FIT16BitGreyScale[i, j]=0; + + for (int i = 1; i < TabContainer.TabCount; i++) + { + FITDisplay fd = (FITDisplay)TabContainer.TabPages[i].Controls[0]; + if (fd.Fixpunkt.X < minx) + minx = fd.Fixpunkt.X; + if (fd.Fixpunkt.Y < miny) + miny = fd.Fixpunkt.Y; + if (512 - fd.Fixpunkt.X < minx2) + minx2 = 512 - fd.Fixpunkt.X; + if (512 - fd.Fixpunkt.Y < miny2) + miny2 = 512 - fd.Fixpunkt.Y; + if (fd.kind == "plus") + pluscount++; + } + + + + for(int k = 1; k + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/FITWorks/FITWorks/Properties/AssemblyInfo.cs b/FITWorks/FITWorks/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0e706a9 --- /dev/null +++ b/FITWorks/FITWorks/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FITWorks")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FITWorks")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("2f143f3e-207b-4b70-af3c-70a6cf23fe69")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/FITWorks/FITWorks/Properties/Resources.Designer.cs b/FITWorks/FITWorks/Properties/Resources.Designer.cs new file mode 100644 index 0000000..b20b234 --- /dev/null +++ b/FITWorks/FITWorks/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "FITWorks.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "FITWorks.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "FITWorks.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace FITWorks.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FITWorks.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/FITWorks/FITWorks/Properties/Resources.resx b/FITWorks/FITWorks/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/FITWorks/FITWorks/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FITWorks/FITWorks/Properties/Settings.Designer.cs b/FITWorks/FITWorks/Properties/Settings.Designer.cs new file mode 100644 index 0000000..1995700 --- /dev/null +++ b/FITWorks/FITWorks/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "FITWorks.Properties.Settings.get_Default():FITWorks.Properties.Settings")] + +namespace FITWorks.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/FITWorks/FITWorks/Properties/Settings.settings b/FITWorks/FITWorks/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/FITWorks/FITWorks/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/FITWorks/FITWorks/program.cs b/FITWorks/FITWorks/program.cs new file mode 100644 index 0000000..23a7a5f --- /dev/null +++ b/FITWorks/FITWorks/program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace FITWorks +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Main()); + } + } +} \ No newline at end of file diff --git a/FITWorks/dark_100ms_001.fit b/FITWorks/dark_100ms_001.fit new file mode 100644 index 0000000..5269073 --- /dev/null +++ b/FITWorks/dark_100ms_001.fit @@ -0,0 +1,70 @@ +SIMPLE = T / file does conform to FITS standard BITPIX = 16 / number of bits per data pixel NAXIS = 2 / number of data axes NAXIS1 = 512 / length of data axis 1 NAXIS2 = 512 / length of data axis 2 EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format defined in Astronomy andCOMMENT Astrophysics Supplement Series v44/p363, v44/p371, v73/p359, v73/p365.COMMENT Contact the NASA Science Office of Standards and Technology for the COMMENT FITS Definition document #100 and other FITS information. BZERO = 32768. / DATA ZERO BSCALE = 1. / DATA SCALE EXPOSURE= -1.588187E-023 / EXPOSURE IN SECONDS HBIN = 2 / HORIZONTAL BIN FACTOR VBIN = 2 / VERTICAL BIN FACTOR DATE = '2004-12-15T21:35:43' / file creation date (YYYY-MM-DDThh:mm:ss UTC) END   ! !! #$$ " "!!"!#!$ $!!   >! !! "% & !.&         +  !    +     &#  " !  !"U    o         ~   %    $ #        " !C  $! ,!    +   ,  +     +    +  #      +   % +"%% %        +O' $'l       l  +    ! +    !  #   #     H!"  + # "        !     &! '$    % d  "     a# !   +# "!  !  +m #"        !#  #     " " + #C '    +   *   !   %      ! $  #    + !  !" "  ! ' " a"!#    g !   "   k          +  +"  " !#   )$ <) "   ! "  0" +!      +&  !      + +  !#  !# #! $!V!! d    +   v               &  !%  +!'  !F$!$-  (   +!!  +% ! #               "!" % "$! i#!" h    !% "f       +    +  +  # $     #   %"  B $ $' ".# # $    0 &  +    + + + )!       "# !"" "## '$!_ !  + m"  !  ! #  #&  h  !!   +  ! !!  #        '!!# !%!"% "  9  #"& ,"! "  )    +    !#  +   "" "!$+"##  ! "_""      m   "!  t (%   !!       !"!   ! $ % -  =(%  ! !% ) 3 & ! "    +(   ! "     '(!%$$% !# !c"!   "p   !!$ +!$! ! #p       #!! !      +! ,&"!    !#$ &>! !'"# 2  & #!  (  "  $          ## #' "!" $&$"  # !##]!!!!!!k "!"     +   #m     +'  "!& #%   + $ " ( ($#!#! $$ $!" J%# % #  "!!"2  %! $         """    !   !"   #$ #! $   Z" ## #$" ! "h !!$! "# +!   ! p  #!! #'  &       +   # !$"! %$"%$!D  %&##  )#"! 3!$&"     $       !  " !(! $ " $" !$!  a " "o" $!  " ! v(  $%     ## !  $ ""#'D""!!!##1 $ ! #  %" %" + !  #$ + # "% #%   %*  ( %" "!\"$  ! $p" $! +&$!   %$$%p  ) "  " !%! ! & !"%$ "& "$#!$!# !#! !"&  !" !%#? % #   ( "" "%  #  *       !)   #  ! #!!  #"$# '$"! &  R%!!!%!o$!$!!#"U      !""x! !"%   $" #  + "!!  !!""!$!!! &    #! " K $!! ! %!$!ƺ%    ##"'  "%( ! ! +!   ! ""  #$#'#% *  + "" #"% "" ! !%#!Z"!!  #)"k  %$$ !!Ⱥ$$   " "("!" n%  " &! !  $  ! +     %$"!"  "!!'"%! &"" ! #" $$D #  $ !! "  !   !ʺ ""  ) "   ! % !  "!)!! " +   % !"#!'" &! $! %#!M%''& "# #!" &k!!! "$ Һ ! " $ v  ' "  !% "      #   #  $ !" ("!  !!"!! "# !<' #&! " + %#! " +! ˺   $!#   %   ) ## +     +  $! %      +  $"!  ! % !" ($%%!!"%" !%  $!  $ &$#Y""! $!,! o! !"պ !"&"!! $s$#"" & #  # !!"$ " !     $* !!!#!$)%!$!"%$" $"!! >$ ! $" !  %' !"!%& $#! !!$#, #!" !!"!!"  #!$!'    !!#(#  #  %  !$'"$"# +!##&& #%T# !!   !  !#"j  ""  "º"(!! # y +$ $ ' """##$! +  ! +!!$%$"!#!"%!! !) #  $$#(C %#%!$"' " "'  " $ĺ%!!#!!%  %! !   '!$! ! ##$ ! +! !  !(! !!  $$#'&"!"!$'"#" "!!"!%##"#U%$   !$" $#$ !o%!!!  º  !""     " !)$ "#$m#!# % "' ""   '"  !$!!!  !% +  % !$ )""(",!#$('!""%$%#& "$"    "!I$ $& ,%* κ(* " !# # $+ &!## !#"%   !#   $ !## "$!#"% !%!!!#!!#& ! !" ("%!" #&$#!!#'+$! "L!" "" "(" " !!)" r"$" # ź#" " #( !   #!'! "x!  !#  !"###   !" %""% & &#%"!"( %#($!""!"#$'! %  #'#%" !"D   " #%! !$ *&(!# !"!!Ǻ!    %  ! !!## (!# "!  (!   # #$,% #$%&%%*'   "$$%$#'!$!# "%& ! 'Y  #(!" ')#!$!!$""% e&%$  # ! ! ""&"#! #"  m#!" &!     !! !    "  $( !!!$ ( #!"'! #!!# "'"!  %%%$0$ !! " #!#"  N#!!%'#"!&!   !)#""!" Ϻ $#"#  /$#!$( #!& $!&" !#  ! !$ %!'!" %&! !# #""%!' %#&"&& g!$!!$&# ) ! !p&  #!(  "%(Ǻ%$!'#! ! #,$' s " % %%$! ! "&!"!!    &"! %( )  $!#"$ ##(&" $ ! % #!!# E+"! (   '$$"% ! "##&"!  !#ƺ!#  ( '! %$ !'  ! !  %    ! #!  ' ""!$!  !$""%"!!!!! ' $# +"!!,$$&'% $!!!"#"$#""  % (&" % $f#  !%#  "'!t##!"#  !"""! "  """ &%! #$q + $"  "% " ' $!!$#" % #   $!&#(!&($!* $  !)"&#$!!" $,#" +) % '(>!&#$"#!$$"#!$ ! -$ )#$# ɺ & " +!"!" !'! !" #!!!  (  ""!& ! $  !# $"" (%#"# "! !*!$&" '#*'$$%"%#) $!"#"! $ ' %"($ ]) #!!(!#!"#"!"' p "%#& #$%&Ӻ#!   !!!!" &# "$!# %$$r #&## (!"  ! ! &#! %!!'! !!$ $%#!" ""!%(%"&"" !! "($ #$$%!%# '! !%#$#% !&!"N"") !%%! $+ !!!!!#"!$! ### $ !%ʺ!" # % "!"$ !!(  $  #!  #!  !!"#"&  !!!""!%!$##!"'" "#$$#% ! "!"$%!&%# '!#' #(  !% ,\ % $'  !$ !!%" $l$  "!  º&! !! %%" &"! !%%!"%c$ !!!#  !$(  $"$! $!"(  #"$ #!&%! "!")#"' !$ &)((,"#"!' ! &' !$!!!"! $ % % """H&$! ! *!&  )&" """!!ĺ$!## ""!%!%! ($2 "' "  !" !"!#$% " "  !""* #""!#!!! !$ #$#$ !($# "'!!#&#! #" &"!e"%$#! #"$!! $(!" !!" !!p "! +"$!$(Ӻ" ($" #$''! x#!+" $ $ $# ! ) -$! " "!"!! $!##!' "&$"!$"'"'"(#!# "$#*  &'"%(!"'!$ '"&'!(!"$# % ## ! (    T! ! !# !!* $  !"# !&"'")!5"(&&" &$$"$("ֺ& "$$ !#!$ ! !  "!   $!*"$ !  & " %"!"  "!&  "!"#!    +("!(%#$#!$! & &" &$!"% $%"$ &*' !$ !( ""$#'#!$)%%"!!!"! "&"#!%$&),"L (,!%!"$!$"%!'%! "#" " o'  ""  1 ʺ $$%$$!&$!#&!$# #! "t"  %!"!#(" '!"!" !'#  $"! &$$   !$"'$ ) !$- "$#%( !#!(%$'  $$ #-"(* '#$'% && $&&!G$$, $#"" ! " ! !) #!"$%'' "$ "$"(!"Ӻ !!!&!#""  $ #& $*   $#% ! " !#!# #!   "%$ ! #"$%#%%!&&"!!+!""'' &#!'(!%,%$#$" (!& * ""!"#""$%'!(d!  $# #!&##"" ! # p$ !)!!  #%) ƺ $"%#  (#!" &"&!!%!"$ %}"!"!" # $&"#&!##%% %#$#'   ! # *   !"&%!",*!%!"!$,%& #&"&-$# +  $"%&! !!$$$  #   . %#D$"!""#*  #% '$"!%  & )$) (!!&# $κ! !""#!! "$%"!!! "!'!)"!"!!  )   !  $!$!  " " & "  "#  &(!!+#$*#!*&, %!%#$!"# ! !$ & %#!# ! # '""  % -%"%  #%'&!i#&%# !$!!!$'!) "##)u$! #& ! && (Ⱥ# !"#$!  &!#  "!&%!!!$ # $ ! ###$$&" !  '!% !$ !!' (!!$#!&!   ! !"!!" !+$$(""$!"! *$ & #!%$#&""#,# #&%%&$!#!##"!# #!(#&'"E  '%" !! #&!$% $$%$"!$%! #$'" $ " (""!%!!!$!(*$  + !!& %#"  "  !"#"!!("# )'!%#"%"%!" '!"$!$' $($%)) %%# $"%  !#( !("%!$"!$"' !#$#$'!' Y&!&   '" #  "%(! "s!")"%$&! " ̺" $ %$$%)    "( $!$ # #s" !$&( "#   !$!#""%"!$$## ! " )'!##""!!!#$ "%!$$$#$#!#!#% , !##$ !$ # $)!$!#! &#&!$))!#! %"!"+$$ &"&!&I  ! ( $!$#&$'%'* !)&%" (#  ! & "")!˺! $"$!#&!(  !%""%""!#"!( %)-!"$"! !!!!!!!   *! " #(!!(#*" ! &&!  ""!!$$"! (%$#'" $)$ %#()-'! !!!!(#!#*#&%#"!!$&  #"!!+,&(* "&)( !# !$&#"" X"#!  &$%$&'$!""!#) "#)!! ! w(' "#$%"! "%&) º% "$!" &"  !!"$ )! )$ '! "#"n#%"!%!##$  * $#%!!  "!  "!&""  ! !$$%%* !#%$%!)" %#'% " & + %!%%", %&" '$#&(#&%&%,#" #"' &#!"J&! $#,% !""+(# '$!$!,!!%$ " $%(!  "&#! &$̺$$%!"" & $ + !$#!"&%% "" %%$(""!"!  %")!$ %% !")!!#! !#!  !#!!"""+"#" "!%#%#"!-*"!# % "#!%! !#'%&& #$+, #'#&$%  # (#$""!#&a$$")") %%$"$$ #!#"%!* "!#i%%"#&%"!#"'$& " ( (ɺ"$'&" "!%##$! !$#&!"$" !$v"& $#'!  ' ! $! "!"%%! ""  ( (   #,"'$ %  %# &"(*&*%!'#% """ )%$%!(#+%#,"&%" %!(&!& "$((%& #"$$"""!# &&%!(% $I" %#"!!' !($%'$%" "# ("!!&  #'#0*   ""#!! !#%#Ժ !!!*! &!$ # ! $! ,! $ !  " *!$   ! $"! !$!&!!# $ #! ! !)"$$' ' #&!%$$!%%"% ! $!! $ $!"'$#&)% -&'")$$!!"!$!"$"#1&!' & )& ##")!$%#$"%"$$)!` !#!%+$%"!% ' !% !!!"" "% " $s##  !#()!$$ ##  $º%"""" !!% #!$"!(!$"!'" ("##) $ $#!!$&(!" # !#%$!# !%!"$  "!!"! &!!%! %!  !!$$$%&'("%'!!#+" " ""$*(%$*&!##"!%("")&&"$ (%% !'&&%)%$!!%*$* "#!/%!  $'!$/D%( &'("  (%!%$!$ #"%!(" '- "%1'*%!#"%("!"$*!'%# #(ʺ 1 $!#%! !'#%# $" %*"'#&#& $!$.  '(!# !"#"! "#"!!!   #" &"%"!#!"(&( $$ $  !" "(!#""!#!*!#.$$%# $- # "%#&"+$!"!"(+ .(+)+!#/"!#( (&%("!&"!.!&'+!$!!#"! $!)%! !d"!"!! $$ $  $+"$ !%%(!  v&$'! !  &% $%(!%%$'+κ&' !! $&  #"&# !!(#!-%*$"!' "#!# !,z  ($%"  # ($$#""( "!# !!%!  %"% !%"!#% "  !""!$("$& !#" !''!"! %!$!*!$%!" !*%-% ( "' '(%")!##$$( '(1*%(# "%$!$'#"!$!$#"&#!/"$##' '#!!(% #"$H $'$$"!$!## ','%!!(,$&!$" '$'!+")"!!!# !##%(! $!$$( Ժ!&!% %""#"## $ %#!&%"$#""( &( )$)"&! & !!* "'!( ##)&(#! %!!")  &! !!"!#%   " ( !!!!$!$# $!""$$$&!$"! !$'!! %%*)%')$"((!(!&0$ $%% *!&#+% #"#!" #&%#"(# %$-$! .!#&$%Q% !" #!# $#%!%$!"#""#$!% (" % $ q!$ #!!($!"!  )#% %&$˺(' "&!%%!#$)### !&#!&$!%$""""#&!#)j!#!!"  "$! $$" # !##  ! !'$!!!(($  " #$$#$"(!$#'$! !&!$##& "%' $#$'!$!*#!!!(* !%'%'"!(!"( (!&$)&"(&! " #!&F(%(!"'! '""!!$!$%%$ % "!"$"& ) -%%' + !*# !"$)ٺ !#"!!#" #$ #*)"% # $$'" ')%#! $ ! ' (#'  # "!&"#" "!"$& )$#' "!!(! $(  )!#   " ! !" $% !%# &$'"$#&'%% ($$&#%&!$&%' '*& #,$)"$%#$!$ $ " $$"' !$"$$#!  !"!'"! q+"!'"("# +" &$& !! " ##*%#&%  $&!# &| "#"" "( #$##!$$%κ '$ (&!$ #!%$"() "%! !$#$#!# ""!%% !%!w! $$!"$!& & $#!"$!!$%!%* !"%#($ ! )!$ !"!$ $ #"&&!""$# (" !&# " "# #$' $ %+&'"&#!.*% $)#)'$%&*&!$"#'!#!$)"(('( !'(#+"&#%$$"" $!"#"#$"&!") (!%&$)V &-!%#('"" (!%"($$!($!% $"$("#&"$%!'/!($'"!,# % %%#%!#$!$ ""ͺ !% )!! $ "%! #""! !#+ $!)# "!.#$%&% )(( "(%%  $$!#'$%!   !"% % &   ) $% %!  "#&#! #!!( #(!+&%! "'(!#(%)*"!$*! $')##$$%'("$,*&+ ,!$ ()("%(&$ ! &"+#$&(#%  ! $$%#!'%)$!U#%&*'""!$!!."#"",&#% (!$%& !(!$",(!p%'*%#!"%%$%$&+$ !!"" $ &ɺ&!%"#"%!!!%!#(  "%"!$#&!!#&(&!"{") ! # "" !# $# &(&&'&!%"$  ##)$#!  #  #"% !"! "!"  !"!!"'#",&" %""!!""$""'"&)"'. &$!'$#$$$)%%",(#$!$)$&"%"+"#&#'"# ,( ""!% %$$%!,!&('!"))&#)"(!!!*"$'(&"#H*(&&# )+&!% &!(%"&!#$" $ /(&"&# $!#" (&)%$ ,$#& % ú%"$#%&(#.!#""% $ "."!!!#  #  $ 0#!!"%% $% ##&%#  !! "!!  !'! #%#!"" !& ! % "#!)" &!!!))'!!*"'""" (($&1&$$ $)'$$&#$+(&(!)$$&**3%$&")&+%%'#("(  "$"&#$ %'!%(($! #$ &, ( $g '$! !&/ '-)!#%%%"!# $!" #%$s#"!# $!&(!%#"($$ ""'ʺ "& "!-(!!#(!%"&&($#!!"&%!"(' $u"$ "! %"&""%!%"""+$*! #"$"!"   # !#&"! $#""$!$"#)   "  " #" "$!#"' !'!!&!!%%'!" $*( $% %!'$" )&$)( %!)+(,!*!)*' !&#$#" -% !*&*#%"%$$"!$"%''&&! %$%&" $,$#$%)"!H %!""%"&&)"# %-#"!%!,&$! "$"$ %% #)$ "!&#!""## #% Ǻ(! %!$* &$#!) !" %'!*"!"!!+"$&"!$ "#" !#$, #!# "$ '$# "##"( "!+#!%$" !! ! !$$$ #&!"! & "%"#(&!!!$%# $#%(#' %!& $"$%%#*)$$!$%$(%#!*"&)+!& !$!""  )"#&$& (( *%$-)#((#(%$ $+# $!%!$!)(#&"%"%%#e%$ "$&""'%$!$#( "$!!()$% $%!&#&$ p%$ &###%'") %#(&"!к$$ +' )## $''"$&"!" $$ #!"!!$ $$$"s' %"!!!! +!!# ! "$!#$(!%&#"! "! $ $$*() "!$%!( $ ! !*"#%%$#%  ")! &$#$', -%'"(*-%"(( )& ''($$!*$,,,($%"$--!$ $#!&)# '$#-#+%$'#$#& &"#'&#$%(,$)!D!' !'$ (( $ #!" ) ( ) %#!%('("$2 $(% &"$!)%!"%#! &ֺ- #%##&" !)!!)!!#(!%#$)'$!$"'%  !$#  # %!"" !&"( #!( $ $!$"$"!%! $"% !""#!+' !$#!#'!"" #!#"%)#%%" #'%(%('#!!-$+%$  ,*,#%,""#( !# (#$%(! )$!$( %#2$!#&%$&(%("!%(#"("$"$!!($&"/!& &!%)&"*%'(U"# #!"'# -% %#)$!# !'"$$&" + *)%!",({/" " ""'"#& $!"#$ɺ'(!'&""! (2!%%#'""&)""&# ! " !$ "#""'"!# }"( !!" $$ ( $& '"$! !(%"($$""  !"#$!$"!# &$!$$! %# ""$"% !$ '##)!)()$%&,%#(*$0)"$ %)(#%%(*"& &$' #'%%0$ &) ' )(&%((&""+$""#,(*"&!!!!,%( $( #,$ &' #%"& ##&*&&K-"!)%!"!$'%!! $ % $)$!!#$ #"!!%&#!" %'/& !"& !*,%(!!#%&%''!"' '))& $˺*'&$%#$ %!%""(%  !! "!'%!(!*'%$$) !$ 1#!('"%"#"#&) &"!!#!!)($#!" !$! (%%!$! " & #%#%! "&!%%$ $ " $!$("!&%*$&"##"#%$*% (",#$&'$"2 (%$#+)$. +# )%")$-*$ !&&%%$!(#%% $ !(#*"''$)'"#.!!)!$!,# #'#y#, &$"#"!!(!&#$0&"%$(%' &#%"&$&$)+!$)({*%+& #-! ' !! !%"&(%"%!ֺ!$!"",*#% +,("!!+ ""&%/ +&"!!# % &$"#&  "$#(#p * !&$#$(" $'"%"#%)%$" %$""%"$! #$"!% '! )!& $(!")!)   %   # -!! '$" (",$" &#$(.$ *$#!  $",)+#$&("& -%" '$'!"+%(#!($#"$'*!*!(#$!&$%'! $"*)$$ /#$$(%%#%'X$!!#!'+ %&("% !$!" $!#"!' "!$ (,&$3(#% * + ""#")&#%!Ǻ* $!#$-(#"" %""%&&&##" !$(% ' !"!& #  $!)'!!(% %,&%%"& "(""$$%!# .( )#&$!%  #!##""&$$!'  $"!#!!$#&$ $$(,!##' -&$+(% $(#("%'"%'&&(#( %% (!)!!#!) %$$(%"*&-*"2% % $*%# (+!&$*+*#%$ "!' !"*!&" *$& -!$"%%%'!& a!$%.#$"&"&!&")!)&!) % !#!("  % $"'-#&(% '%($()"" &!%!$# " ׺%!!%(!%,()##)$ &%$"'(!0 !! ) &,(!&# !! "!%)"z! +'"!!$!##'# !)" $"!!%"# ##%!) ")$#$" &&!!(#$!!""!"! %  !   %'"&(#"*"+%% # %*)$%(!('"'%('"("$"$)#(#%%$()"$#$#$( "+" +'"&",-$,,)$%"(%%"& .$""%'!!&!%+1/#)#+"%!!! '!#! N#2%"!!#(-#!*(( '!&!($ ""%! !)!"*$!!" "%%(2*(#"$ !$"$%) !$!% "к,!$') ! $ ##'&)*%!+$$!$$"'!) !"#!$%! %'"'$ .# !!(  -!!)&#(#$'"$!'$* !$!$ &""#!(! "!#("%#!"& # $&   !")'"$!! # %)%%"&#!#-("!$ . '*)!'%&& $$&$"-#'(&(-"(&$+(,"( (#(#&+&-&#,(&)%" )#%) (,%$!+##!($)-#&&*$%'('$+$$###$!")i)#  !# %" % %"+!! ),($#""'(!#$! & &' '!"!%w .'&&' $ $""( !!%#$"(!$("!$ "!)$"$""%'"# % &$"#!"!(!#( #!+("" %!!" $%(")-#$$ !%)##""& $"$#%$&% $$%!&*"! &%$%#$"!!"$#" %"%$'# $"$"! !"#$% $" "#&$%!'#"%"!#* %!!),)$(!%%!)(('%& + (%!! !!-#$$"%#!,!& &$& )"&!%"%#%/%!$,,(%$"' )($(%+%)&$%(& &" '$%L( "$# $"!*" "" )"$!0 %$"!#!)1(," -$%)"(%$" )$#&+%,  #!!"'"$!!!%$%!$ʺ &(!!(& '!)#""#&!(#"#&"",!& $!$ !)$$$&"$!!#,  $#"%"#$!"&-%&###&) !!$$#" !"$ $! $#!# "!""% !%$"!#"$"  $ !## ""%%(!&"""'"& #"!"' $ ($-$!!#. )#)&!,$"-%.%!"% -!'$#'*#(#$)$!%"##( #(!(" %!&##%"!!)&&!!!' '%%#-($ '%"1))-$!)/!($# %^+'!0#&%)$+%! )&# (,!$(%&*$$ %%(#)!#!r !"""!(% &!! (!&!!!$ !%##&&"Ǻ! " "$%!'"%%# (*&!!! ("!(#"!#'%#&"*%" &#*"( #, z#$ ( "&!# "# "'$$%!#-"$  &!!! ""$ )")&!"# $!$!)$ %'#!)!"#!!"%# &$"!)"""""  ""! )&"'$. )&$##(##+$#!-*+(!(((" %+#!!#'$!$ (/*'')++&)&$'"#* +'"!) $'")0*%* &%!&()!+("%#$("!,"#0#%"!! (#$ "()#")H'%!!&#$(&")#' ," !$# $"(!##($&) !(*$ !%!.%%%( )%" $!"#*!! #$"Ӻ&$&!"" $ !!# !+*$#'# ##!&"""$$ #$  #"$#) #"" / !! %!&) (%# !  "(!"#%"!+ % !#& (%%"$ &! "!%$'%!!$!!&% (%)  !#"$# %$"!!!$"#/'% # ##  ($!%%$$%!#( ($,%(-)%'# "#%/%,"!(+#"*&%(%$&$),$#%"# & #($#!$* 5 % #(,(("%$/!-&)%!" "%&!,$#$#$.-S'*"&$"& #!)%!! &%*!($.('" $&$( *"&##$"~$!&$.".$(&(&!) $!%) $)# $ ! κ%&!!" !*% $!$% !),"#"""%$%#!)%("(!$$" !"" $"#-"')!p#"*  %(% "$#%% *(!'  %$!!%%&"$# $#"% $%#%3#"(#)#!"& * # % )!"'##" ! 0&*$ ( ""!&%"(*&# &$'$(-1$$$% !+*($+$! $-%('' #%&)'&,+,!'%"!! ")$%($(+&!'%7+$(#)((#"(')'($)'& +$ $)&P#$$'$(!%$$"'()$$$$!&((("  # #%! +'(#($! !%"' $%!#(#(,#)&+#%#&' պ"#)!%!%&")""!"*"(#()$","%  # !%!(1 #($#  !$&#$  !$ &&#"!"#$$#" &% !"!!$""$$  "(#%(!,'(""#! )$%%$$#!"$ ()!  % "'&!"#! !$  $!!! # $% !"#!$!%# "# $  %$#"&)&%"1("( "#($#!$((%%*-%*$,#$ ( %("*!!( $ &-$& "%#0'%.&&&( %($(,"("&(!!#% %!a&%'(%$###)+))&$$*&'%&* ! '!#-# $$%"*#t!"# *"/) ($$%)*(%'# !""%#Ӻ!#)$"&'("$$#&#'(-# - !$#$!% $)%#"!$!"|!'%$! !$"( !"$! $! &$ $ $)#!##$ %& " ("#%$($" #""$"% !#!$&& #$""%(("*& &%$&&"!$""!&",%%'$#(*1,1!$)'+(),&%,%.!%- ,%)'%%#,&&.#!+'  (+())%)*($''#!&-#!'&"&.&.#*,%&""!"&%!+)"$"& #' 1R! (!))!"(%%&&%#$&("&&"" 2, #'' "**& "!-!!'+&)(&$(!!(&%$%) &%!#%%"%%"պ) $" "'&%"#"$#$ # " )-$!*)+(!!'"# )$ !! % +-$#$&&% &"%!"$.$ ""!! %$$$ #'# #"% ' "$"' !"'$!'! ""*!!! &%,!!%$ " ""!"*!!)  # & ##!$!$%!! $#&,"$"!)#%%((()*$")&(#)&*""!-&$./ "#$'&*"+/(&$#")($$(-.$' ("'# )" !"-)*$+&###$!"$#%%"('(*(%($"#/$*"."%*!#($!$`(&!!(%!.$!+*#(/.)) ! 1 )%&""!#!%$(" , #$"$+'$('|$#$!!( "%&! .!!%%#$"% )%% %'()+ $%%%! %#!#'&"&!"!"!! !!"$(! " "'# "%"&%"! % &%#%"#!$$"#(""$# $"%")!" # )!"""$) !# *""#&! "%#$! %"!$!&%($# *!(# $!"$ #&%!)"&#!" $ #""$""# *#$'("%(& "-&# &" 1,)((3*' $/*$) !,!"!$+$+'#*((**&-$$%#-%$%(+*)*!(&)'(%)$)+)0"!'2%#(%'!'"*!,&$("( $#%%)(&$%$ %"Q**#!)$ ,2+$'#"(-)'$!"' &#,","&!#!''&"#"$""$-)+)((#1)$&($'#" %*%)")(' (""! !! %$'к)!% !'%" +"! !%!&*#%")%$ -'/ "%" 3$#! ##"#!"%!("'$""(# !.($# $"#*(((#!%#)!!!$% &$'  &((+$$% #%(! $&" "$"&)#'()$% )"-(#$ " "!# %&#"!$%')!$!&*%(  "' ('!-"").!$$"%$!!#&"'!&$$,%.1)(!++1#.#%)$,%)&&'&#%(--' )%&/%%)!-#),!!'$)#')$- &!$%!'$$(#("%&$(-'$!%*'#%)%""#))% )!%* & !!%%s!"%#)( 4+(!((&&'(. ($/&0" ')&&!%(')'##"&$/)'!m 2%","(%*,!,$%/",#$%!& .%% "(%!"Ժ&( !"#-$$ ($!(! )!%)!!#!"")$! ($%!!!"+# $!%#&%$#!# "y'$""!% $"&"' #$$'&&"$'"#&'$!# ,'"%#(" )#'!&#""$'#$(*#!!#"%!%!!$*#% !!$%%&&! #'!!""#!&#%$"$&"$" $$(&0)0"+&+# "(!%%-)("%!( $%# (+(),%,$%)#$("(!!('#(#('1$(#!/*!#)'+ ."!+&)% (&&&(%+%%$!'$%#&#&-&U)$"!($$.#"$(#$ $$+#&#"%&%)"($&!#')$( '& ""#%2"!%$)#!% *""' !#%$( -&( #""ĺ!$"$$*&"+!! *)!& !!&($$(#)*%%$ !%%%"!(" "$ %% !&$+(#)!!"" & $##"$!$' # #", !!$-#'%* *" !&( )!#( #((%(!%$$( $$!%!!$)!! "&$!1%" #"#("'! "$!$!"!&$% $$ ""&#$%%(!)$&*,1#$($#!((*$ + ,,$ '$'!+'(+*'& " #!$,(%"0")')'$!,$&)"'+"$$(+0"*$%%&)$)-0%(%!%!!!!#.!!"$%!#!#$ "#i-,$%0)(! "$)!""&# #$ ('"%$!,%!%!) '#! )$%$. & .!(' y (%,!!%".%('#! +$)$%)! +$$'"('غ!#'$&(!'$!($"(#' *$!!("(%& &! " $&""&!&! "!&(&"!'"!'#)"v$#$"%%%& % &')"!"%")&%+"$"$"" #!%&) $"" *"&!# ("+# %! $#*#" $$"!!#&%)"!!%! $(%"!!$" %!$"!# (%%"*+%%*)#"+!%(,#,+", %(%#%,'')"+*&%!)&)&))"!*3"-$(( +', #+ (%"&%#)+('"$%,(!#."& "-')%$)%%/$&*)%'())&!,$!"%+ ("%'(M("('!)!$+)!0*%, (#*#$(($%$$%#"$#!(' *&#$)$!$2$$!.$%$" &$$! #$ (#$!-"%("%1պ&%"*' &#&(&%($%-)( '&%"$&(+%'$"+ ("!("!$ ("!!)-$"! %%#"!1)'%! " ) )  & -'&% %%'!*#" &"( !($!/"&%!##"0%$"%$! '$!&$!&$" !#&+""!""' "" $$'! )"#!)"(!"#)-'".()$& $ #%&'" #)$"-#&%(%!"*-$( (+&.!1*!(+'$&"&,!#)*4"## " !! 1(& $))$"',#!%!,)$*"(%,!(+&(-&'%# )!&,$("-(+#*($$-+#%"'$'! o$(#&('""$(&%% %#%%,%$*!#+!%'!!''),"#+' "$ 3!'z&&$"!%(%#')"'! $"". !'$!,(,)"%%(Һ#%+0$!"*!%# ,'$$ "&#$)'" &()###(&!$+(#&"$%(# $$ )"" ( &")!!$  y"#'!%(+!)"""$%##'$!%$%!$&&%"+"!" !'  $!($$$!%+ &""#&#!$)*#  %!$%)$,!#$ ''#!$! '! #%""! % -#! %%$%'-)")!$!('!.&& +.1*+()#.)$$ '")#*$*'!(" %0#$)+%.,(&2#"),.$*)*- *".'!$""&)%($$$$,%#%#'($,&*,*0"% (&%+'&$)'*%#-!"J%(),))!0)$$*(!$%'-"&!%(,."&%"0!"&' &!!&%)! %'!$5$"* $,&!! $(!&%& )$!*#&%%"%% +('$ʺ% #*$%#%"#'+($'"$*!#)!% $&$'$+#))%$ !#!("""$ %'&#!!"#$!!-*!%$'"$& $!#$'%(%%# %&$&#! !(!#$ "+#%!!&!"&$!!"! #*$.&"""*'##!%%" #$ .$ )!$ #&! " (&$&  "! $"!%# ' *+$$) (!% (&#/$,%&%#%2.,"-!(+)&$%()*$(($()&"$%+(-.%/$,$'$-*&(('#.-'#/$$&)#!!#'%'#(("-'(# &(!-('*- *(%#&#%#- )'6((!' $$-b&+$(%$"( %()(#%$(& )$#!* %$' .% )% &((#('"#''r-)'#*"%()"'((&&)%& &&(%& )Ⱥ($""$$%"!%!'!#%(%+$')" "&&%&% %"%!)$'*!"!#!$%($%.'#()" u!!$)  (!"#) #$ &$(,# ($# %%(! ,!(%!!$) ("%!'!%% " "(&"!%!!$ $' # #$%")" #(# $! ( !%""#&$ $ "&%"#&% & ""!! &%$,#&/,-%+ "($*$"#*&%&$*('+2&2&&""( (!0"$%$(&-$ '1&%%'.' ,'-$)$-$0(5!""(!$&$&&)0'(#+#(*.+&(!%$"+* (&%$#$"%0)*- *)""&*%S* ' &"' ,$%."'&"3!%1 - "&$% "%#$$"%0) '( *) %&8&!%- "!(((  %""&'%!-)"'к(- % ""&* #$&"% #/!$%,#%)+$ +"&'(#%+") $ %&" ("%!$!(!','%1!",)'$(#(&"$(.$*##"(*!& %'&))"$ &%%#& ,$ #$!$"$'!"$(##+% %%%$'&($&$&!. $$!"" %!" &&  !!'$"!'"")$%!*$- !%($"&'"" (',/#('(!$)/'(,((&!-',"%*($*) %'"!%("+,!3(&)'$)$'.+)%&%(-2!(%()%*-!) %$+("&# )!+$!( $,"("-"++$$i'% +-! "&/''+$#)!,%(,)##$/-$!", ''" "%+&&#)"+(l ("!*!# %!&($" &&+(  %,$*!#"!$ƺ#!$& (%'$#%$ #$!*$!* %)*$$)(( #(""# $$$#%%" $$$#&"")!$$& ("'& !('#" !&$,$)$&((%&&%$( %( #(&)!%&$"&$ !!%)$) !%"#, $(%#( $( %%(*' !!# !!#!' 0 &#!!! !!"!"!!'$!# !&$$+& &)$%$'("&!%,%/'(%$!,!)".,'!!/!%(/'*"(!()((%,##&!!**)#1)))&& $&%#-&,!$&(+$,!""$#5(+*%%%$!*&%"( $,$(!*!",$-H., "%',!!(%&,"$#!)$',',$"+$(!# *'((!#&,#+(!3* !  "* $"&)% #! !$!+$&%),#% &%(#!$ !̺!$!&)$$$ ##$"))!&%%%#!(!$$% '%/&$"'$"("## #&)"&#"( &'$"! &!%'("#& $*# (.$""#$"#%!"!&*$ ))1!!# #"'!%$!'$(%&!"!"%!((&!$"&$ ))"&%!)##%$! %#(&#%%*%'% %!$+ !$$!(%%!"$$# ( !($$#)*($+1% '$+%,($!&,&'&+(+* )(*&0'%(3),/%$-#%00(%(%#0).)))+(%('%.$*%)"(((%)&#(2&-.&0$($,'$ )!%"(%$/"'#$$ .%'+(/&(#*.*#&$&.b&&"$(+%!+$*)"!-!#!()!*"'% $&&!%#$*%.#("*,$).!"#)('*,"$ "%#&%$"',"$$&'$* ($!#%(!%+)&# (!̺$(&(# "!),)(-!)$%,&#!%#$!!!!(.-$"))!")(%.#" $%(!)%%# $%'$$#''&$%&%t&#"# &!  "!'%$&&)$!,('$$ !$, ,%."(&! ##'&"!' #!#%&'#,#!%!#%$$##$!# '$'$'- * %!"#( "$&( (#$$%##'"! &"% ' %$$)*$$+++,'*-+*+"%,%8#!%(4%*0((+')$'5(0'"!''#-#'3"'#"((*+"$&+**.#(&)&*#$*$*$%'$"( -!!.,$+!#/)!$#*$%)'$'%&*$&%P&%"-*$(4)% ,(! /$-.+*#&,#!%'+ &0%!%'%* "& 2"$(+(#&8( &$$)%-*#"*"')&&%'!-% %&*!%"$$%κ!*"$"&'%$#%"$$(%' '#.!%"#(! #% $! $'%%&$"##"( &(( (&"&$") " '$$%*$$)/'' !""!,$#!$' !( !$%+!$ '',""%"(# ,#$"%%% +!%)#%&&("!'%&! !!$& "$!)#  $&!"% (&!*(% '!"'!#    %&# #$!!#%$! +!$$$!%%!! ")&#)"')!#&,#)$%".-(,%*#*%.''$$ (%..*( ((+&"')-*'" +#(*)%#$*-%%%),%(#$$$. /,)(('"%$ ((! &( (.#!"!&&#* %!$&%,"(# #'(,-j#!(."%"$)",'"%"%+'.&*&& ('(*/#$$%%,$#"%/+,.())!#!+~$*($ '#!")(*& $%###!#",$)%!)+!$&"$#*Ѻ # %$'/%+%).$! #/'!#*%$&$('.# %)'!*$$"#"%%)!#""##"$# )$#%!x$ $ '+(% %#'()!$(($%+ "# !% )"+"#'$,#)) !#"%+"$&$&&#$!'&"&!((&$&!$ !&%%( # % !!+" $(( "*% & "& "% $%%*$)$$ #("$'&)%! )&*,% -"%6 )")-$&&-&)&-,'($+ -#)!!'."("%*)0,+/*%%*"!+).(!&) (%)!-+,"+((%&* *#.*()')*#,$&.""+#$.$,& $$ !',#Q *"-%('"+*#*)%$$(%$&($*$&"&)$)$"&," '&% & $#&)""%!",/!$ !$#** &%$ %" '%!( &(/$ )$ #"%%ɺ$(( ! $*)!+&%#"((+#!*%$#!''"0((&) (-# !+%"& %,'"%)*!%$"'!$$"$$% &'#,((! "-(()%!!$("&-%%%!(#!!($%&"!# +##%! (%"$""$"'!#,, +$ (!$$#""$ + %#%%'$ " $$"&& !%!(&%# "!#!$#  #!+&%()&()","'$#*%&"%2 %!+"!, 01#,!%&!&*&!2"$(%(,*$$&-/)0&#)$&-!!%)/')$%-(.(($0+&#(!%$'*2$(%!#%&0%"*!$#'#'*#%2$% %&+* -&&'&,%--!* $&b, %&$#/&'!$&1'$'&*(( '!(%(*&$'#'&#"(##%(&&,!%*,/%|()) "'!! &'&#&%%$-!%()%$& #$(((.%")պ(, ,$$#&)!#!($*" $!!*(&$&!"%("'"(#&$#(,$$'&"$%+$'$%!$& %$"+,$!%# )&'-&$"" %#"! &')) &(!($!'&'&$($"%"$'%'*%%("# $!"$("!%(# #) %#!%#-"6 $!%## %$!$,!# "! )#%&&*# ,*# ('$$$$!"  # )#%! !+##&($"#($"%(!.+()*)) !,/".*('1+)(+ *+%#'"*.++%6)()-/#-*('&,+++ )%,*0(%%++(0,#"*+,*((+%%%"+'$$,!(%% - $#%')#' ('%"+' & )#N(#$-#(*$ -($+%/%($)))&' !!&((%%%"#'!$"$(&*!$%"'*0% 6,$#+#%#'&')$#%#($"%#$"!)(&!'))$-%&'' ˺$($'!")%$%!") %')&&'&#-&($#".!&((($$,$% '%)!,(' ( '%* "#!#%"( #( ##&%++.("%&(& " )"!() $#"!"'%(, ##!$!&$(&$#".$"#$ &#)" +")$$!,%+"'& $ +/+%&%(%( ")$!# #"(,#!'$&"(#)!!)&&# (*$/%$&$%()$%#&(!)*()#&*%+%+1%)#+"2-$+.1#,#$!&-&&*',(-)&%/$,$#*-*,.'**)*(%+# '/%%)"+)%))+!*)*%)+%#&'".%),0)#-"!!(+ !*'/'-)&(' &(c"'$%")+,)!1#!,*+2)1 ($!,$*#$.+0.+$&%8#$* )&0$$-%p%$ %#, !&$# &))%)($!+#&&'$$($!#*'$#ܺ"/$.%/ $,#%!!!' +!%.)%*!#$&!&" $&#$/#(,(-"! %($'$&&$)&%&! $'$(!!**!%)! %( !$"%("($"'"%(& (&()"&%#,(!! #!%%$$ %('!&% '$!!$)%$!!%+)%%&!%"%!&!!*!&%)%% ""')"!*)&$%'!! "'$%*" $!#$#"& %#,$(()"'!#!%#'!%)% %(% 0(%!+3&)'-*&0($+//*%$*(($'),$2'&"*!4(0,(&)%"'!()'.$0'&$&&5 1$%%)'. &)+!(#(.+*%&"+'",+*,$%('%"(*!("&("&(,$(* !%O.$"# "&#-,-!)+($, ()).0"'('(&(&,-$*#!#/#,(%(#%",(3),""%',#-%&$'$!%(&* !*"#&%)%"%$Ѻ$"$" *$$!',"!)*+-!!,$&$"$" % #.+%!" $"#(!$),#.(%()&) -&'%&.! #)-%!& !$!%$"%(%&,(#!-+"%)!!%%&"'$ )*'"$#%!('" %"#(& (#!%!+) $#!"((*. &$ )"!'% $#!!&$ !!&%%!*&.$(%$$("&#&"&"#$"$+'"'))(!")(%%%)& &'+!&+*&03"$)*,#'#*-,&.$,)'%(*"(!((0$),))"*$)++$%--##"(.',/)-/&&'))!&% !( )(!$'##"&,!.*)&($)%*'0'$$a0%&*)$&%"(%!2!$"-%"%--"$%'!%')# ""%+*($"%* &$$ $##*)&(*u.#.&,%%-"&$"$!, (($ ,!'! ,&&$$"$%$!Ժ$"'-# (''())0)"%'' %! !&% &&$#&!%+ %"""&%#""&!!!&.",$'-&%*"#*#$"$!(#y%'$%'$!&$&!%+" $!$'&+ #&!"( ',#(#'' '+&,)"%"#  %!)) #!"& )!#0#$ %%."!-""0$ $$$"+)$",)0$ !!"$& !$-&&$% & #!!%%"  %7*$!$"#)-&1%#!(!!-.-#'&#-#+)'),+*))+,*%*)*$(#4(!%,(('4.1,!.1%'('&*#(-'-$-(&(%%+%-'-#)$#%(-",*-%$(#&$&$2 ,-(%)()##( $(.'$(("(+$-(/ L/%'%$'$#' $)$0%&&%!#%!1# -.(*+$#!)%!-(%%!)'#%%!('.+ '2&"0$+('%%!($+#',(!*(#)/%$ ()()"&%غ#(,'),*!)) -$&!($-& ' *$#0*#1('!$$!()!&!&')#$!$"(+ %'#-(7"$"("%#"%*"%#()(!"#&+#!" - !(,!""!%$&  !%!$$&#! ")#($$$"*)# ! ,#$&!#%)"% #")&*'!(#*-&*%&$&"'#%! '"!%!%")(#'#(&&-')!(!,"! ' !$$%!$(#%#%'#(%"!%!((,%''$$'#)-&(-,&(%(&%**-()"+)(&/$*&)(/,+3#$#(%**, ***!+&*+(0.(&)$))&-.)$10%")"%$./)%('(%0$'*%,!''+**$/$&#$!(2"')&*U,$))3&'!%''4.,(./-+$$(%(&"$(!!-%,&"#( & ")'+)"+(&(&"-'-0,,)'-*&%( !$ )!%!$%% '%$-!Ϻ&)%%!-$$'$/0#%$ "&%%&+%'%$($*%!(.##'-###""!&,!&$"- )$%(&(''"'"!(%!)#&&(!"/)!("($, """ !&! $"" %" $$$ #($*"#' (/!!"("% (($#( &%%# &%!%)"""- %$))"$!.*$#""!&$)!#,%&#"+$',$&!)! $$ )!  '"%%('!# )''))#"' $+!"$#+,)$*'-(()(''1(,0&*-&%%(%%%''&%1-%,)+,#((+!(* !(#+(5#/%#++&2#&$%)'&-%.+",!)!(#$(*&"+0*$,($(-%)$&,$$!%*1%,(,U**,+%',%*$*(/$,*%)$'% ( ..*%$*#"(($%&/(',$%,!)'$,%1/% 1&'()%% &, "!*,%4$(-!&'+ %$(-$($ Ժ-!% $$')$''"%$$!"$($%)&#'(&!%#-!"#'%($(##("* #")(""$(!' $'( & +& #"3!,'$%%'(!"'$$")! ( ))$%"  $(*""$%('%%#)'" )% $!$)!!"$'&'' *$%,$*,%+(# )$.($#&(" "(! )"%+% # #!&"" ! &  &+("$(#$%$%!#  ! #%$"1 &%('$()*"#$",*%$%$"$ (4%"$!*$.#%),*/ &"!**.%&* #0)'.&*/)"% , ))*)!!().'*-$$"5,#!%)((+3)((%/0.),#"0$&*#-# %(1"$*)%$$"*$## '!/"$])%%)*($*',%/7 4'*!#&!%,-," -#$#)*0"!%)!%,+$#% .))'($'v#.!(&(& !$%%$+()%.$%)&#*)((!(0$ ٺ"#$!&$"*$,&#!( 1#+(!"%(&( 1 ,$!"*$"'( # -(%"&&&#+!$###"('$(!)"  &"*%& $%%%)* $ *##&#$!!! )"!$!%')* %%)(! ###*%#$%$$)!)!( $,&'#"/"#$  (%)+#%0&"""(%&#%(.$ $ (%)"('#$$ ##'! $!($%"!)''"$*$#%'(),++)&0,+',.&+($6-* #",$,!,-()-(*'.#-,%)$"&(%"'(.+&',"3")0$)(-&---,*(<".(+%$!8)(.)$*''+((-'$#%+!!..+ #'!(.)%%"$R, $($)+(#)())(&!'!)&'(-'',(("%""&-% *,$&#(,$%'& *,$*#,6''1 #!%($)( $ &&($)$,$+)"."#* +),#&'.޺$#'/*+,(*&+!'",)"(&#$($) ,%(&*$)%*'.&$ )#%%!!%,!")'!$($)&" $('0%!' (*,%(, #!#"##% ())# "(#%%'($) #.!)&"#'(#, "#))+!+&*# -%!$ &$#,#"/$" #"!)$%%!-$$& %!"( -&$#&"(# (#%"$*%! '%!%%#"(""+$""%%&'4(! %,-($*&%% ,#)$&%2&*4!1/%*))."(%$2,0++%+!(*&)++-' &1$$+"("+&!3(.+!%,%%--%(&%.,(!0!+")&*.%&&$( +)% -&,&'*,/!(,)'*,'-:&*$)$,)(%X#$(*"+(+.#%'&+"$(#($$&((&#*-(!+()%**%((#%) %(3!#!"*&t&$&(('-*&"'%+/#% (0('(*/%-'."%*(,!!/ ''ݺ ""(,!% %%&*#-**($()"!).+%-&%*))%,$-)( !,(( %! +"'''' "("('$&% % " *' !! , $ "#$"((&(( ".#%('$%"$*&&$"!$%# &(!#&!* ($%! '%$%(&-'%*"!#"%&&#%($!/(" $)' &,* %$$#%$!!-!!% % "($#,#,#" "! #%!$# ($! !%$(!  "% ))+$$$'(!&"(%($'-(.$'2,&(1(-!**#*!4*,)*0&(/----)-,++/'!'(#3- ,('#*'6'',(.!,"&4"!&4-%+% #'0&#,#,))$*)+*.#,+2&'%('&5*#"$"'()"&)(/ 5/2#W))$'/!(&%)%'- -)/"'$."(#('!+!&-''($$(!#)#&-).!/#+,2'#$8'"'$%+!,*"! ")-$%$&%%))%$!%'$!&($")Ժ+("!+0# "%%.'+) !"%%)",!)#.%-#'# $#,!%,' "()!(&"#*'-$%&+ ,#(! +$% %($) $%!" '(.!!&!"'(((,%")((%&..$1)1""*%$#1)$$(&'*)"#$%'" $/"&'%(&) %(("')"")&!"%."")&&"$" &-,%$#,(&$ &&%#$"$#$ %#!% '#$$&$!# #%(%0# ,7%( .*$&,&(-,#.)%1 ,/&,*4($'(%%((.(-&,%*0,*$-0$2'0&"%+#,&,3&*$--/)-'"*(()*(%*'*(&$*%!(-"/* 4)2 ++&#($$(0&,)*#-(,(%$$%!!)/%,))0c$)&-*.!%&- (-(10!*(!()#%%1%)!0!$++++%$&'%)!*&'%''#,# #s&*" *"*&!$+*+#) **2'+&%%!%.(#!!!-"*)Ѻ)&$%+ '*-,*,(#$()!(##"#&$!$%(&##2)."#$,)-%'%$!$%&(*" '((((*!#$*#)&,&#'!&$%'#"*())!, ,$($#"$%!+&('&#$!)$ ) &$ #&$3!$'(),%*&"'%%""! #$ !"#%)$)$#'%&#"!"!%'*'&"#$&'$%$$'&#&+"*)!# "%""%$*)$%!($( (#&"0*!" &'-$*5 -",%*')*0(+-,)'*&2!*,+2(3$,(.!-&!'))/".&00."%,$(%!)%#,% -$5!&/)-($,(*($.1(-"4'%#((2$3+'!%%+,+1%%,-'/%4),&))"%5#-&%)#!S(/.!,$.#%)$%"!((+( )*)-% /#'+%-*)%*'&&)%%"&&$!(,%.&$+1)-,(*)"03,#)''.'(#$,',",!*& ($(%+#)!Ѻ%%%,%.%%&% &+*%+%$##!()*+'2$,*%,''7%4"'(!-%-)&!#&"$)(%%$!+&,!%!%*$.$%/!!1 $$.&%"(%'( (#$#'$!"'!+# &#!"#. '/( &!+"&&"+ +)#),! !'(& ( ,%&$+$ *(!%""/# & ',+"( !!(-,#!"!(!$!%")((#'%$%'!) ! &&("% $#(!"!1)-,-&((-&($"(($'$'.,"%+)#% 0,).%*-*'$$).)"&!0,)*)+1(,)$('(.%5,()!%)0",$()*'%)#$&-"+$2%"&%$"(#+/+$('5$*$,,$( 0*")%'*$))(((1,#,--$I &,'#-%*)10$.*))%()+ 3))*$0*$ +#(!,)*(&$-&&-%8)%,!$()q#"&& %5$()$'#"0&'#)!&(0)#(!&+%)!$к&'(+$$%-#.&,,("!-!0 %$)"0(!#&$*)&'*+( '%( ,)#'($"&)#%%#%&%+(!-,! %"(#)(!*##x&')&,&",)(&#!' %"!$!'!*# )"'!&","")$&#"($%!!!1'($#'#&-(%#$#$'% (%% &$!&#!&)%#%$(&'&$'"''%!!%%*!#'(!$$!+&! "$#"!!%"$&#" (0.&'%!%.3+)% +"-(( (1+,(1(",#0('1$&#-*'/3(.,.$-1.3$+2'&,*((0$%. )(".1,1(&+%)0*61#%*&*/!,%"0'*%&-))"'&0*#/+$($*--*$*,%(+*)+& (&&('1Y$"#( )('!"(((2 ,"(!!(# .-)%$$/)*)%-%%-*$#0$0('#$,&#$<#&1$#%+)!+$1*!("/%"&3&.%#($")%"(%&,%((""2"#%%!%$#"$&''.(+('(+*#*/;$-*#(+)$%$, *,'&"!("( $&$.%("",$'8#%") !'()##"&!,% $$+#)& $!)!$&"!%#&('*!$, .!%#!- (%*"%!&#/'! &&"!'!$%%*'"($%!!"%#$,%"!.")"!)&)(%"+2"+$&(!(%$,#!!  *"$! ! &%")"")!,*)"!#*%(+ $/-- ,+/)("%/'$#*$#2/#,+$()%'4+!+/4!*'-4*$((-)2*,-$(&!+-*)'&, +,2&$% *% /+ #"&."$.$,'.,+("*4%**.,.$'#(,$-.%$-$%*$'b.,-0$($)+-$--)$($#$,##'"&!!2!1*-&&+,(-$#&&.&)''&)%( &u($+"(%2* (!,$-'2%+-*1+%"&,,#/ '!!$!(.Ժ*%" )$#(,$"$'&'%##**"%($,!,' ###&%$ !, "&$$%2(#$*$&%()% $#*'&( *'% !$!%&)z%!!)"($+!'!"%)'%)$ --$)'$(%%!&/$!)&,!"*$!'!+%)%("& $%$% !$,!#$()' !# ,#& !#$!(+"$&#$%)%!%!$ 1 &#& $*'( (%!) "$ $!0%# !#$#$"$#  +$")")"!&"$%,!%/("4**!+&1")*(')',(.%-%. &.,$)'+(%+40'()&/*-)*1#-(+6&,/ <)/1.((+/*,-%.)(3("$!'#()!%+(%*)",%,--&%#.,,.$(*#2(+(3+0$,$1,),'$+!)&"*#(L+ %*"'/&)!%1 1 *-))%(& "!+%-&-&-()&&%,)&%+$- 0$1$)!('-.#)%-,),. $&%*+1#&,(%#(,),!$ 1(&"(*,$((/Ժ-$'13%)((%!+' $) &), (,%+ ,($%)0(&#(-'$&)+#($'!,1 ()&)$%%$(!!*'))&++#,* %!# ")-,-$'')) !' # /)" %""&'"")#)&!%(!()!')%%) /$" ("*',('&%".-$-.'%#$,!*&! * #&1"(%&$!*!"$ $%"))#$ *$,%( #! $ ($$# %!#% '$ !# ! !"$" $#'("*"*! "!&)($(*% ,%%-%*(*!#*%)+/&%$*,)'+&+(0/#2$*+$-)-),0,"+,,-&$'()-/.-%'-%!7%()'(#.4*$(6($$(&/1()2'*0($5)-"#$"&,&&$').+-#,(*1/"((/$v"&%*5#$&)'%+1'%%*&$)''(,'())#!&*'+()-# &#--"&*'!/"5&)'(.+$v!+"(%!1"&+"0&!" +')%!$-* $.*"%%'$%(&!#ݺ%%#*. &,)'$"'$$)*,'(&&$("$")"* &#",'$'%%,, ,'*(' ()$""!()'$($()$#"$& *!)#.%( /{-""-($%,&+"$").#. '""&%'$& *(%(!'!',&"%%#1(! ('&*$***'$$$ $"('"'+& %'"&*%-(&%(#)$"&&)%*",$&*+&%)(#-&$ ''#%##&#($ #)! # &!  !(',()*/ ,&+(*+ #)0(+(2(!-)(.!14)%&+**%*/!0!+-.#4$2)+**.-'$,/,++%+*'"%/4$+-%0(*(.'.,-&.#1$6&+"0$(- +,%&"+%&# *0#,#%&'$#/), +,-.&/!$$/Z(3+*."-$!+1&"$#)-"""&)-,&8)(&"'$$&$*+&()'+'&!"+$%&-&()$($)+0,&!,#2!%+$($,,!"0',*+'!()$Ӻ""(),&*$( 3$(",'')$(!, &"'%(!)() )+&.'!%''$")$,%%),$-#"$$$$$)'%#',,,#*# /'"3+ !/# %$#$&( #(#)%& 0&(#*&&&*',%(+ %#'$$*&$,(!!$!+%$!$$"&#%,)% )!%$!)("'" %$$!&$ )($0(&!$(&$%""'!!'! %$#$#)"!##'(&"%*-*+())"(%(%%%+'))())"/+)&2)/%.().+,&,'&"-"+.**,5#&1 5-..%+0%*,'.+.#%-.5$'*$*!'')((8*, )()((%&&($,)("."( //$%.(',$$3)"+,.,)!%('"!&!&X$$+/(!$+&*()1%*.)(%3%$%$5+$*2(&#!5+.%+$$',% $,'$ '()'#&, ,|#','((/$3'(!!/)'&,)!%#'&*2+%#, %&,(')+ܺ,+%+* ,%-'#%(((+&"'$)".$$!*!"*!,$#!!)#"/$(!+('$("-")+'(#$#% !&"'-* !0%&-%%$x". "#$'%( (+,(%,$'!+%%!%"$) -!'!+!) ( % !((&$(2&'($+ +(&$$) - #*!, ") $$ $$"$*'("-&)$ )+(" (*#+- ,$&4,&0$,+!&%%."'$ &&$ !!"' &""# '&,).&%/)+"%'&"($"&,%%)('-(14.'-%(1*--+4(%+,'42%&)+(*'$2$)*%(+0(/4!**2)+)2,4+))3(.(2-)3*+)(%$%,%*(-)0%%())'/(#&$%*,+)02*.'-*&+"&",!"-Y/)&-"0").+,(,),)(-",),&!%'$,&$-%0'().$()-'8#%0*,(%'(,)#3(-)&$"),%&!%-#2'+&"",/$ &+%&+%/'%#!,#3Ϻ+!$"$$'$-&"%(*$((%,(""),#+%'%*$$ )"'.*++'# %!&)$#,/#4%#'($# $+($ !$$#$*!+ (%$"&0!*(('#%)"$'#&%+& &(!&*%(&&.,$!*$(%!##%#$((.$+ ('(!!")(%'*,"(%!($($!#**( $',)!"!$+"$'#%$ $)%"($($(*%("-""%"" &&!' ""& '$!(!'!$$!"!%$"%#*!$$#$&%%(*3,&&'((%.&)1% **"-)0)'$/ ,*%8%2)+(')%))/!0#,)4&41/2'-&&351("/**&%..322(*-"(*'*.$2)!,0',,0"())00',( 8&#'&$5*&$9$(%'((),-)%("4),.d'(.-+%2)&0-((,/&'& !"!&,)))$ 6(&"*"%, ")#)$"./(#"0%*+0w./%$(*(+-'/-+%(1' %!$2-,%,0! -(%"%##$"/%)ʺ)1+)**(%#*7&-*+*'.$(&(*,"##*4$(&&$#1)!$$)&($)&$#-)+./&(#,)'-"( /#! '"2&&#%' *u%""&&" $%( ").((#,!$&(',#( $* (%""#"%$"# #'##(  $!%-% (""*!'+'+)*-'-)('$,(#(&%,,((#& -%"(%'"%)++&#)"' +)%+$($')%.&"1*"*"") ) )"#!# *$!*!#*&- "').%'*+2"$*!-#(%+((%''."2#$+(3%(+).4#0,(0#*%&$,,-&++2%/(+,/,%'.*(-*)'&,*/.,5/.*%-0+#.1-" %.$*0!.#5*,,+)*,!2((+5&'4''*2'( !!'&**,),$+"M.".,2!% )((-, '0*(((/)---**, /%.(.*3 ,!- *"$$0($-%&&,%!+)-1$&$#&,))*%&-#%&,,","*&)&.%+,*(,+#$##''(1!ݺ+)'1()""(.")!#%("43)%-+ ',+&%"''*&%#'#),)+*&($-%"-(& "*!!'$"('''"*%#+!%(&"$&):'!,",$&)(-!('-$$!%$( !$($%%'!!#()&()&*$1&#()' &'1%*%%"*%#$*(!,#)!$,!,)!' ' #. ).! ,$(#"$**!!%!$ #$ (!#+&/"*-$&)'-%-!*"* !!&" "%!"!&,)""'-#&!%,$-). .(()#$4,&+-,(0%%--*-(-*-3'$04(,&$,2$&30*+.%, .(-*-&1*)1018(04(&'. '-(3,&/%(.#,$+-+'./&+%'*(--!#++$%%.$2-$'((,,$.(&,'+" *')$p5-('/'++'.(0/,#%")()("(%).,&(#**%4$-&!.1(+&'(! " *)$!%)*!)**%&!)&"!,*#%*.!!'!*$)4$(*4$'$((#%'ݺ$"'-$(#%(((/$%+((('$)"#%*%$'*"0'(()&$' !$'!*,%-*'- &'(*'#-.)3%%-#'%2& &#"!#}#1 "!(%(*'# (-%,' &$'.')!%#&*"$$%(",0%%&1((',$)--&,%(- (*"&",(,-' !!##%%"',)*&!)*&-'&$#&,  +,$%! *#!'&"$!%#+!&+$(/%")%))%"$"($$ % )$)'#$#$##$$)'*.)"%(+, (2"#&)#(%#*.(&+33 -&'&!4")6*--(,+*-)* 520,-)("221)&'',58%2(3-*-"&&#'*'$-/),(1,,5(&'.#4)''*(,(&3%-)!*2)(,$,(02$)-,&,#&-,.,,(%.W("%/(%"%,)0%80"-$#,"$!#,"0*%))$*(#2,$"&($(%"('#&())&*()*!00#")/#(-((-),)%,"$"$%$ 1 . '*()%,!2*'( !!!*.&"**$%),"& $,$-,!%"$*&+$$ )%*$,$(('&&#*.)$$&%&""("'$(+&%(!)(%'("!*,(+ &"&5!.")1- '!"($%!&!& #!!+'($%%'$ %$ ,$#$((!. %)'-"""&'02*#($.+!$#""*!"'&#$'/,#%(-$),$$"'%$')!.+%#'()%($)'$%"%"##%&!+(#$ % !%'*$!!$!"#(!!"#! !!'&*#%!&$($' )%+,$+(,#3*'')#&%#.%%)''**.))+6'*.0 -0",7*6* "*3+,((3+(--+((3*&21-(-'&'+.+%(0'$,$//* *0-$'/,*..&%*#*)&).-% 0'.)*%$*$&6#(-+$5.)+,*..u0.-)2.$&(""**,(#'& *("+&3$*(+&(&"&-()"%'-+!$#)1'-$%*".*&,x)'$&&-( )($'2++$'+..-&,))$"$.# &$$-)3,$Ӻ-)'!3((-##$)+)$$.!&(0,,(%"-!"($ )$*'1&//"+!%"- &#"*%/(,!()$$*%("($$0$$ %($'#*%((-y&**"-,*#!-$')$$%'$#1!$$&'%(*!$(%%*'$,("!)!&(*)#'%--0(1!*1$-! 4$( (!"&* $(&(!'+$*,#) $+1(+#+#&!/( %(!%%$!'%%%$"(,%&$),)$&#$"#!!$"$(#% -*"*(#+-%1&)"- .$+#0%*#$*3+ ,.'*-0,/$*,4,(+),4,,":.%2/'+.'/+&((+$,-)*.%)3(+&7(*0&2$<+.2(.$#**(.%2($)**"(+'.6/$,) "*#&'*+(*)*2,%)*)$+"P%0! -+!,*)&/!)*+)(3(%!%* .-',*$..4'&*+*-2#&$-%!).)1. ,:0'($"(*$+"(&)&#!%','-% ))#$%*$)(-%()&غ*+**%"% '$!)(*($)(()''$*&,)*()"($#""","$*+(%) ( #(!(,'!")&%(%%!($"&()$+)"#-,)"" $/!**(". $'(-$%(#%)& %($"'**%!/.&'')"% )!! *$*%$(,#"- $,($'%'1%%&-$)$$'),*4$$%$)'+!"0%$.($#&%"$$%$'"'%,%("+  ()!$'2&*# !&-"%&"$''!(! (!&!#!%+-+,$+(.'*-&!)%,#"($%&-1,&,!))&7*-/,%&1-.$6**&3-,.$2/6$*"*")-+,-7,/&)(&*),()#'#/3%,+#(,)&1*+.+$10,%%!)(-.-"(0'(5,&(#4!,!&+10!,-,%'()*(!&,)**`0!'%)"$/,"),(+!2(($-. 0*$$1'#$*23#(#(!,('&+$*')'&%)$"%(+u)(1$(#('01"!2+( "#,+!' -))0 &%**/'((&/"պ-"&"0)))(#%-,$!,(!$!!().(+(,)%&,-#,*%,!)!)&)$-*#%%$$'%#*#./$)#)'-%%'*+'-*5$-(%-&#"%+- $-#,!'$,)*/)(2!%(%(!!)!!+*&($!*$(*(!" &+&%1$*$&))$+)+((%#)""$(-%"&""&!$-"-)"#%"*$ (-%&%&%+,*)$ '-&&$&!)!-)*." "& $"%"!  '("!% %))(.,&,'+ .,-(##+%"))1'2-+(1+++4!%.)&,&.+,*)%.*&1/%5$20+2$+*4*--0'6*,*.(&&,')!)01(0$+%&"'(-(0(18&0(1*''"&!%,*1%+1$&'/%-$"+- )$,%3%-.%'(,]")-!'%+%0)..-%'2)4(6) (!"'/!%0)($%)#,)*-#"/)%(+).#(9,%-)';!%,1(, ((-$&(#!-%,$'#0!(.$$(+'6',,'.*. *ƺ&('%' /!(0%#+ ,-("!#+*+$))%'!4#4,!* %(, 0,*'#'$) ')#)**%")%&"(, %,"!%,"'$$#! ' 25$"%('&. 0&)$!%*'('%$(%%%#+ &+!$"+'(%($**+'(%,%)$"()$"'%&$$$) $#,( !(+$$%$"''3)( "&)*$ ,"$ "(" '% ! &" %", #*$!$$%%!&+ "# $""## '" ,))')+*("#0%)+)$#%&-!.4.&2*&'3*)82,),&!+0%1&/+/&6+&"&.,/3+,8+%%--)*4/1%(,)2.).+,0%5*,:5*/**(-,(1//43$32-'#,((1,..* 4**# "+&,&/0)',!*'()-!y.26,+)'-!+,1'09#$'+%)*,4-)$*3$&)"(1/,-$$)/$!+%-)+/!'(''%-/)(&%-$$,,#.+&-!)!$''%&!*)-+(#%,*&$$ (#&*+պ(%).& )"5*.+/$*,"&%.". )--&)*,'(()(0%(("&!"($,!+,**#+"$).-+ $!#&")(-&**$%()+!)z!,&/!#' (*&%#%!,)"(.%%$*(&/("$), #% *&$("$&-2&*+%'$%#*!.%'*  %%( )%,"*!$%'#$#&$$#) $!"()*(&(*&&!&)'$*$#"((%0,($ %-**)!"'!!+*$)'+&!!& !$#&!"""#.4&)#*,(.#*'0)#,',(*'$0,#' ,/.'(1%-% <2&,$1,1+/ 1)!5$0*(().0,, -),2")*+,+$3+-()(!2-,$*4-,%,/-/!)&%).-=&/&)%"'(,*.'%*(/5)++%7!$+(-&%''7. &.1#['(,)*)&!'.0(((*3$)"0&!()%-( -$&')#$(*&- -$&&()#.,(",($*"%+2%)$,((51&)*1$'&),$,'.&,$ $$$,''")")#$)&Ϻ ."*)++/+0'#/$!(!+!$-2'-.()1**(&)(!1.",&,&+/$-, !1"(!,(%),&.#1%(#-$&$- )'')#)$&' 8'%"+*(#*'".4( ) &+!)#%)$%(!'*'!$ ,*,"(&.#!(" %%*%$'%'$&%#(*),'*$1&)&,'+$*"( #,%%$!&)'&$&"$'*%!+"%%#&&%&$!#&"&*(* #'.!'& &$!#& #)"#%$*''*"%)(,-+#/1,%##-(&)%-(%-(.+(*$&$-*,11"+$0,.,&-2((($0&(4$#1(,*%-,*')/(%2')1,%*4-3###-**1+*.,.'))(6-.*#'#(",,1$)+$/(-1-#3)+)- 1-,%4*,, /,('$(*(-+g./31%)+-/'+)0''+/,)'1./-'!/$&62%&$$/)#$$.$,/+)(0)&,(6")1"0$})-(,)$,"(#)2(%%0'$)4&()(-#$%&,$-!*+&,(Һ). +(((!+'%,*%+#$.-%").%#&,((-&')#.)(((& )+',((+++('"+"#,'%("(&'-$!$!(%&#*(($}$ ,(%*(% *+'!+*)(&2(%/+'")"-,'$*(,"(*($#*!&%(%(&%-+(!".(."$.,($(*,$'$)$,"'0(!(&*%+(*(&$!(&&(&$1, $)&%2)"!* *-*!')(,$"% *!$$'*#$&  "*$!!!$,#"#%' *   $)-!#+#%,%"&&)*'%,')05+#3*-**)(',2-1)+(*,#.&')+,(,+4,0*+(.:*5*(6"1!%*-0+)13* /1$4*.0-/(4((',"*33$#3.+1-01-10)1,%'*02&*+ (04*,(**3%(/.3.((/$4X)1#()(6.+$%,,-3$11"'*%-%)&&*%$,-,)(+!'&2,))-.("&-&0+%(-)",:#+1'$%(,%,0.*('$#.1+3$/'%)+.#)/#&($,$-#պ),$*.'!"%0(((*+&%+((!,$)!+(-(,+,+%!!%$(.#.+!"& (. **(!"%*,#(+&+1*#+($-$+)!#5( ),-+$(1*-#)$.%#"$)'+&'-, '%).$!+#,1&&),"$$"&$))(2)&, ,-(-!"-(*), ($$$*&*/$%$( #,2(!&!(%$#''((*&$0/,$.&)$+(" $!-$)"# #(#0-%&"+"((-"(#$&'!" #%! '$ .#!$'$#,,&&0/-),$4, (&0%/&(+(,%-)0)'"-&)1,*-0-6++%$,*2)*.+/)$,-#0-02",3(*30'.))&222&0)-14,(3/2)4$+%))+(,)*(!3-(5'*3'4$&)(%$- /-+4++/*-#,&*'$(/*((2'._(2((+#0#)*('-+'3,/-!%((+$,&(.*---$,*"$(-&$/$(%.$)3/#-% !+$%s'/.!)+ -!%+.,)--(')'--".(*-,,,%).!*&.)+#غ."/%(()+3&%$.%.-+20!3&3&(,'!-(++,'&,",-(*.( ,)'))&$))- "-)%( !'$)/"-)2,0$#**  $!0,++$($)" &'#&$&(%,!$ *,&'.0#&,'%'"*!,!!(#.#'+%*. #("(*(" (.!0!"-""* ,.!#& (#$/(!*1$"%)%'$#$$%(+(#%)'*$'# !." $!$!)$%"*.,$*!(&*!!!&&&#-) )' ,%3.*.&,".%)%*++,$*,$.(&-&5.-&71,$.'-,-+8%-4./4$/'%,&0#0$--$-(1,"-!4#.*44(,*$8'*$+2$/+'(0+&-)//14/1,),,)4+ /#2(-+$'$(.)'$'+*#,+0,+&-$*3&(*%*V+&-%)-,.+"0*0-(%,%*(0",*&-(%+%-*(*,,"+-*''+6'120"-$).)('&&1"+.%#1,+'102&0&'*(,'()%$,#(((,-*-("#+ %&&&/(,&4-)!/*$+'&((,.+'%$+'(*$,)&$,"0(0*"#*##""**!+%*#)+%'&&,/%(",2+ %(,!'--!'1), ("0&-#$*+)!"&!.)#&")!!/#&$)*( "!-$)+*$. '$3&"$4"%'),%,(%&'.#,&*())($'#$($#%&$(-!" #".! 4%$$*)"%++% ($(/&%''%$%&&&,'&%'""$%"*%%' (,#"*"*$"* "(+! $'$ #" %&)((, '&"!(-'.$)1-&'*1(/-* 653-2%-7(-9&-4-&"4/,).)(7(2-54-,3*,%&&-60,,-/#5+4,.&()8)1 -4/%**$-%/*(7-6()&,'0,)*.3)1).(*)+$+.'1%&60,/-0$-(3+0$'e-.,,*-1$(&.%.$-# '+2+"#-+*(!.5"+)!).-4%)))5#!!.%,-&0+$(%*4*z*+-.'3%+")$-))#2#"2(1,*(+.(%/$"""6-!$..$2Һ)-,/)( .$0!%% )*2),-1""-""$5) )2'-$(%*.$(&%&, 4$($.-# %.,*%$-& "-/-"($+))(''/&$")#((-&{#,!.!5'*'!+%$,",$"/"(&#+)$.#!4)%&),#&%0!-%,%,4"(1*+(),+,'#*4&.&(, ($! 5) 2# '('.(&'&%!+$'" +2!&&.'/!/")%))#!(&&-'#$&'*/+"#*#%()'!%"&%%"*! &)#+"%!',/#.'%(%)'5/#1,$+&($0(,4$0.+%5).,.((,././'(0,5)0-11%7+$-(%*.,-*2)*(0((+%15)-.**'/'%-#5',.-$11),0+-)-#0'5(#/***($%)(+*,(*"(/*)!#)&."!()15&*,Z,13%2%')0()!%&1*+)&,',0)2,;'*.(--0!$6,+'!(,) *.(+")-&&%($&:(($$-/*) )0$/2, *-(,(1$&$)*'$'./.2&,,,!,/&**%"'),'(*$%&!* $&)$$)1,&&$+$(,**2&& &%.)'$0,)-$)$,'( -/)(.)#$"%($0*)(',+$)'*((%8$ *%*-!')*+,"'2,#&,) '-!(%(2&('.!&(())+!!% ()&"(#+,(-+&+$#**,(.%#"&(4)"/"!%%)#)0$$$&$)"$-%*2.'*( ($%(&,*)"'!$+%"!))&! ,-*(&"(("#*')(#" %#$!#($ #!"#(%$,.('$-'-(/"%&+1& '2&(*+$"((*),/*(,$/ ,-.2)++).+.,,(/&3+(1)04*).) -01.*-8+)*2.9+!04(,%/0,$0((.**')(,&*&0'(,+/2#+)&,)&&)$5,&+4-0)/!!&203)++q'(%.(#%*2$35+(',,$0%.+&+*1".%,%5$&-!#,+(%()1'-%),1$01*(+,)|--%&&,)/,! +#'2**-*)-)%,.&41$&.*&&#)+4!-$Ӻ(/%')/(""% *)%&&(!0)+)'+,($,**-+%2((($)&#!-)-, ,*!1%1'(#%#*(3"+7 &%$$&+1$(,%%(&,!,($+1(* ,'%',$$,,,!( '(& (%%&1 & " $$$(*0+%"(%'("%#*+&&$-)$#("#&)&%-!#*(((( -(($/#&*0"1,+&,1(+1!.%')&(((&.##%%'*$(,-*%%!'",(&"!*2##"!!$'! ""# $)!&''.1('%((0((1(++&+)$0++1&*!+%)./1!31()+(-$*).%0.,*.7%1(1.:%&$/13036(/1*.+*+)(.8.5,0-.,/ )%)*1.(-+12.2*$)48,'.,,-/+*,(/*0"-*<+%0&( *,0%%&2*(*V,%.'*(+-",$54-.')(.+,+)*05%/$$/)&$,,,/*/$(%0-,!*,(-")%%%1&.%7'")%-$ ",2$&1.$&(-(&(())%%(0+&+,'"*4',1%պ$/)".5-&%-,)"%6"%2)'.).(+-&4&(-'--(-.-'(, *+ &+/#'%+!0($&&&( ')4."()%'$))% !-$#,'%6#($')*&)' -,+**,&!%$.&+%%)1,'$'/-&'*$*&#.& +!!,!)'!*%$,!%,#%)+%/&(#$ (,$$&)"&(%%*!.(+#%*!'')"*$$! & *)5 ,-,%(%)#,%!#"'&"%$-)&$%!$$,%#'"+%$'&$(%$*# #'!$#!#1!&+./#%&+.&+(-+(4+!%2/+--1!,1*5-(%8-3*0/2"3.,)1+4--(-20*(1*+.%,(38.,6(.)51'-/-,1-0--8/3(-&*(2)3,,.*0-+5+,/%+3,2-"."0/-/!/'23.)-,%+)11$-!- (}/10(/,1+"5*,1(16.3&-+,)$.1(/-)$;#,,4/%-,&0/,2)-5.)%.(6+(5$)t*/()&1-#.&,,%02%(*53&,1%;/%*,*.#!'('+1$*.%'&.)3,&(!(.$*",)!(' /1'./--"+"1#.0%,*!-(2 ($$&!(%,%'%%)+( ,(%$"$$",/,+$*2!*1*(&/'~*&('+%*$$##((' ,-)*#0$"%$-0 **#(#$& *#-/!'(&%(!$! +5(&()*&("*)"#%)!("1 %$+#!'+.&-3&*'+(""()-'#*$&#%(( & (%+"'"&%)"+))&,"*)")'$(-($,#'&%$!)&!!"$ ") !$+/'(-+(,"(&,'('-*)%+),/#,'+-(--.+&+-8*(23)71,14)2'(8'1%**-4416/*8-&(,"0'8).8(//*+0",.+1/+/)3/-)-/30+*%1%5/#!&&1(-*4**0(:)%0,%,.3-$(%)&('('%-+V$)0*)&22%%'(1#--!%4%9-0,(&--%1.((+/%*(1.8-.0$#%&*(,/%%&'+',C,.('*!$*)+,(', #")0%($(#).12*&4(%%/-)+,+ݺ(,()-,%-.%,.)1.%-&*(- (!)&*)4-0 ()(%+%&,*,-!.'+ *))."(((+-)./$##(2*(!+ %'8*)#%,%+"&-'$,-+$#!)/"!*' )*)(-'.+)($1$&#)'0( (,/&!.%(&+#"'$&*'%-+0(*-&!'* .+.1,%',*#!,0') %, %- ","#,+($)$%/*0)),("+$#$*!"+.!+ '& 1 $%)"*#(("%!""("&##',%$" $$ &$"$,%-2$6*$+,,,!,()'"+-,)%&,)%+0)-1,%-&(3'1*)(0)21248(42'/-)1*3(1+' ,610,0*(,0-,213%.)'%1%81-+-/%(+,/16%--21*)'/9.+$13/#4$,'7)3/-1')** *&,((,/,Y()2,0%*2*(./0'-$+, '+)'+2&--(3#&(*6,$'+,*!. 2*(1)((/()1,0(+$-#(+&($$0*)4!+$.&'%.,//8#)(,'!02(*,(+.κ+*(&%400 (%4.*%%!$.,+*')+ %5"#**&%%-#),$,$%#!(.)(,(&%$%,$$%-(''%&2&,,%10!&$ &$,'/ %'-#-),%!()*&'-+*#*(-$'-$-(-%-'1#+*2)&*'))+#(*."1$'$)+")'0**+( /+%'-#)*,")"'#"%!))"'&%%"!+%+#2)&%&))!(%)- '!++%%((""/ '#/&""+&)!))-)'5 $))')#!$"$#!&&&"'*(!!!)! 5"**41/1)%**&.$,',)%)+'6''+/"1)20210-0$8/1/+535,.!+*'5./5$3'8+-06(?'&0:()'4++2*-+/(/.07/ $33 -.1*,/0202)6-)-4-14+&.-.&&,%1$'.(*)'*2-'),&())Y+!(.$&%,'((1*,+))%-,-./++(0%*%)/,%&&*0'(/)"'+$&#+.(2-.)$-.-='*. )*.$,%(***(-)*2,("'-+-1++%%)'/-,)2$*/1$/$+"&/%.%5%8.)2$$ .',$)%/!3&,!.'2(%4(1.*-",!)!+&(,,*((*+%$(-!('/%'/#')'+&*-(+) %%%+3#)%%#&0&*%#!)#*%.,(!-"#-(-%'&%#.%,*(&$2-+,,) 1)'-(-,!)(%-3-/.)-%('!&#/$(-&$/&*&"&+)##) % ."(&),(#,)!*#&*-,()&)!(#)(%"!%!3-%)-""#&'%$/&$%!) $, "$ *(1%!&"-)(*#/(%6/-05,(.,/",$6)$)-%(,/0/',1")1(/0)1+*+3+*$-0'8+)++%-,,"1..&',2+29)-/"(,2(404,,-*10*/(4(--.6,-/,(%$6,')/*4#8-+/0.&<.//&..%%,1,6%)-%-%-.%+#x(.$)2+0-,50+94*1)(+(4./',.(++2*0((+%,)(!,4)","14-1%)&/32)*,|*0/%0)(!'#,/$$--5&-,",*,03/,**$#)"-(*(#,/Ժ*/0-(-&)+*'#/ (1*(.$.(*)!,%"-6$-.!!#(# #%"-/"*(&(+'((-()')*',))+#'('-!0',!'%-)$,$/u(,"!!,  ('$)!#.,/$*!&$)$)*$*& $#(/#+ %2&%(,*& '"(*%)0%%##%*"#(,.$&$!(%)%'//$/,!!%$ %+#%*!%*!&(,*&,(**(%)"&!0*,*!$)&"%%,"! "++#+(!(%'&,'"'"*"$'"$(#(##$$""'((--%,,+)$01,$-%-%/0(.-%1((.%0+,+))$4)25)-<,(+--2382,.+311,.1,42)*22011,.-/.,(1&11-;/--,/*,(0)')-0--$+,5,)8)-/!1-,-*.(*.35%-6:-<'1-.)-,,*!-+2-@V/52(!-$*+(4./,*,&%*-.3*."&&%*1%)(-$/3!:--4(4+-++"0,)1"'&8)!)--3.().$',:,)',4+(#"3-+"-+*7)$',-*, ,-,Ӻ',%'22+0.+'"$*,(),&/%,,(3'#(%/$**%3+2$%01-(+)*#*)'/$"!%+*+ /+/-,* &%0(!.*!0("$/#* 0*'+%*#$$($(0'$,%)- )$)($()0(&(!'#"'/(''%+0)'&*!1%.'(-'(#)+(5(&%)'(*&.+*/*$#(,"' ')',*$+%*(% &4).$$*!0,$&(#)1+**4$%3+!)(%($$&)/-&#$'%$# $#!"%!( %(&# &"")!%)%.$#,-&'%/',(+*/%(''/,(+/40*.((-%4-+45&.0(0 30,401.3+-"())63...2*05%8+1./%4.0*.**2--).3$(,/,24,&'$.-'-)1&+2810)002%+&,,*020.(5$,+,.*-%%+))..-,Z/,.7*(#-$0,(6+0/*(+%2/)'2*-*)%,1)3'',(&(/.*)+./,*)*#&%&2.,++).,11#*))#"2)*,-&$ 0().(1/.(+-0!"$.&*&'*$&'(() 2!6#(-+&/,,.)& &!-.(.,3)&16$*2*#-& ,$$,(+%&,%))0&'*&$,,(.+$&!"&**.-'(.-#*"4$.'(#().$%&&)$+!,,&%"&)$,0-)*!..%).* ,+2+*3$&)( (-!-$1"26)&&((%2)) !*$&$%*&)%-,)*)&%,(,$,(/& (+,$'%)!#.$&%&+ &$%%&$"$)!-*,2)/$%($1) *,)2) #&% '%& && " $&$&!!,*(()0(.**()*)5%+$'#2+'5--',(',01*+*+(/(!.-)&)--)6#24")00$.41-),).0)440*(4'*20!+%+#.2*(5,'610($1*1,2*$,,&,*/.()1/2,'&/-1&00)-//7+'2)).(-(-1)%,V-&(00%)%6'.%7/026(0,-04();.-#&$2+)*%-,-,*%)1,&#+2-,4'(.$-,/-/.%:(5'+++(()%%*$)%$,%./$8%'")+0''4.0)2$(*4غ+&-&-+.(,#)(,*$0)'&'&))(.+*-"(%.!%($2*-)!' %/"4').)%"*5.)+..$-%/%%)$%.$,'('%&-*(%#,&!0+%+(-&)),#.#+"( 0& ')/!*.1$*($,'%6$#"$*(*-'#$*!%/*$&/"1%,.+!(.(*("")$&$.#'##**$($("2($ (4!',())(1 &,'0(-#.(+,,#$&%*"/$1(#, 1-$%#,+)'%!&")%!"!''! ($ &%"""$!")+(-+%*+,+(0%1)1.-'(9(,(2(4%1(.%12/)/$,8*,616.3&2,4&,&2*,'/,.15)%,**5.11(3"/.+41-1(0**-.**-2)5,(,&.0.+)1"1+8",-+,40/+$/$5%2(-+.3+".++%$.#10)5)2S&(1*!/(11(**;4($*2%54' (4$0$14(1.$)$0((#%3*32,&),!.%-!.%'0&z133-)-%-&#/!,24&,.5'%&+(,&-%+(--0+')',2%Ѻ((3#+/-.%+**!*!$/('22:((.**6+%,& 2,%$8,,-!2%'-)*(%-$(*"!(,3!')"%( .)*'()%$'/'(1%-'%#&+-'&$"%+")!)!.*-)+("5,'0+,6(!00!",''()'(#-+*#*$(-'!.$5*)$0%/,*%(*#) %(!)&,(%#)0*&.(*.#)",+0$%%+&+%("&%#' 3)!!""/)/!,$,%$$-$+($(('%$-!+*+$(#00!!#&($)#)(&$%!!!%3*&)*0%,*-4)$$*#'40+ .)%+$.-*"-052-24,,),/,./.,.,-4/2-4-(=#47.(/40*++.*--32&.&+,)-)1,--7*2,,7*.!-,*&3&%!3.0,-.%*0.,+*8.,,&.0..8.&&*4%12&++(*/^#*/*4"%(('*6(.$-))0%&/)5$,3**)3%,2>1/,/((4$')%0)*%*)&/.*---@*-$,'# 0&1"'1%/-#0+'$1/%+%$((&'3)-)1.+(-Ѻ/)13*%)1)('+,#+%#6,/'!#1&%#'&.*,-&$,'.%1'#$ *&$+%$'-(')").!**(&!-$)/(2($,%+"("+,,*(%220'/&)$-'%$,()5(.(''+&%&*,(+ $$,'('*(%))*-*-,()$(&&$*"1%1$*(#(+' .)#(+,((0) ('++$&2)"$ #$)'&*"*-#/&.("02$)%%*),&. *)''*+)$!(#(.,,+)'(& )(!)&&+$ %%#&%##&#$"%!"&$&2,0&1++0-))#),(.'(++0)%0.(#2*0-2#13%$-5%70,-7027)8+(),-.&-41/):-10,4)1!,&-$1611)1.*3&006.843.*)232,#3,846<+',-$;A.()0%)-%2%(,5+).(1/*/,.*'3-i-,'1+3&,3(#.$%-$5)&.,1,)*8'%##)0*)!231*,.&+,..,*%"131&+&*4}5.-+0&.&),1)%&4%6$&)')**+*3/&/*(*,+',4*+ٺ.3&*'/&)*/((*/0,#.-./(%3(+,$*$,&#('-)2.)*8/# -1-(+"4.!0'*%#$%*)"*#+%.#(452&+*(%+()(%,.){)*1.($).%(%+)%-20%))'))1%%(3+.!(/-"'. ,--)*#'-&00*)'-)*+/,1,*(()'$(%))%6&%"4,!$)' %4#,,*"0%0($'#-,'-2'-,%)#'(4#,-'+%%&(%0!&,,"'#)'(+%(&()&%($')*##($&# !'&$)""!$('(&+%$,'%+40!*,-(.'&6),3/-5)*(1%.(+&0.2(/443-.+61.(2-2/8,-'712'0,051,).%1,$*>71%0'3-6-041*(2--8;**4.*1*79)-+ ,7)009/0,(#'%(,4.*08)9+(/+,+/)4-(*c+)20*)0'!'/$*%/,%+&-"))+(&*%,'4.()(,),*()/6'2&'-0*$'+3#%-$56-,'7,(((6)$.((.)%,%$(+0.0'(*0&%&.10*%)-0"%ݺ,+&)&,#$)0+(.0)!)&/!,$*$ .)!(4*)$-(/*%"(%))0!+,(,+$2+(#',.$(+-$&-.#:$,1-)+,#,*#/ .3%)*)6)#*%$&,,&&-$/%%. '$*#&,"1%*,#-*,"+)*)(-(& !5(%(*&$ +(&2!3*1",%$(,3&*"")'(($2**"$$!-&15,*"')$,0+++.-$!.($(4#%")+5$($!)6&1 3$'"##)**%,!%)"!'/*"!$ &#)(,&)$&&$%!#() )1,"$,$&0)"-,2"05(,)4*%1(+/-,7',1$9,0%)5,5,469)8(10/.0-')+02,,* :*./1,25/235/80,2):,)+15,$'5)!6%3-0(5,,43/'745*%)(1)(-,0,:&23/0))///.!(-2./$+)i),2-3($8,1.-0.3%,1&(%-04(%-4.+(*44(1.11,).$*,5,))* "%0/&+,4"3'(-.(-8)/#(//-$+(.)(,,...',,-,!%2((+-0(غ'(5/%1)!1$+,'0#1,#$/#-+&)$.&0/&*-!+-"),0 '&!+')*,$.&)-((()$&&,2,2*+-",+)+%,%!2$#'.$('.'**$#'*)#-$$1-,'+3$-#.!($$+,2$%')),&$1)%$/$)%%,0%)$)"*(#&%-)'!3!$#-0*#)#$(*,'-(,&.(" %(%'*-' ,&&#/)!!$-2.&,,.-.."($'(*3%#%%,1#%%$!!*+- #$%#+"(' ,&&(!")$ $%&*&%" (/$(0*+3 .$03(&((%0,.*/#0/*.1&0-/<-1.)602.+-#(/'2&*(/*.#2-4-220,.6)*20)/2%-3,,(,(!+-&,*241+*5./6/0('-.4:,/*(-2)2.,,.*$*-(*)13,/761,,*)&"+7"-1.*S21(#5.*"'/!.1)+.-*-(&(1:,2#'((&-/-4(-$)1)*-)*+.%,3)$"/4)7&,5)"0-&+0$"10 3*1,0(%*2+)(%((**(+++')%"+9%#׺*-'*)*&0(((("1'4''+)%'/(-$%")(0")3)$14+&1+(%0#)-,)&-)&((%-(('#+!+2*()(&.%/),'('$4++(*)1,)(-"*-!*%'2,-''%(+%,,(-'!-!&($),1,(,,('!%&$#2$!2#$$),&,%"%-(&'"*))/)**%)#%'2*$2&$(-+'0#)-"'$)(#"$&+"$+(3$. %(-###%)-.!-(*$.$#0%%$ %(%'''! $$"$'$%)(%"%&!3--0(&..(()-()($&(.7$)(*/052)(2,18-)154/)283401/'(/&6,2"8/)10*=1/<,)(-3..-4-',904*(,($..0/-3908%/.+.3)/0-2.(-21'0/5*)6(.(<'54 )2$-%2-*30)&-*/+y&.)+7&8))1*)21)0%8&1+**()102%.,.!1'))+,)%4'-*&),$/($4#2%1/-+{#4 (0!/((),'1$+0,(-)-,0-2(*-(/(0)"&+1-*2&,ۺ%+&*(2$0-(()-1+,+%.*)/&'(+#%%!1('&(",)!', #(",)/(#'-3(&(( *+&0-*1''&#+*-.&&-2+,-(%.,$(-(2$$&&*(')*',$-(.*(%)%%',%. #.$%!(3'-&*%,"*((",2&%$%+%%-+,). $-)'4!))%$(%"$-($"%'%)$(-%%&3%+&"0'%!$,+.&'$"*&* -%1,)'*%3!-+.%,(!*&# +$.*%%.%&+ #.)'#('$""%%&%"$#$!$+/3+)) 5(&&/(5-+,%)+!(*+)4.)*52-06.,+27&0-),+#5$*'50*349/).,20(.42,2),(5(5)(*"/*$2251(1(8&>#(03(&8203),/(40$>'*,2-04(0)22)42//&.1--2&.00-%*/6,-V,24)20+-+#'2,(*).,0'1))./--,11*14+-,,1-**0,-!40(-'!+)1,)1%///,-(-,0+/);6&5),-(.-(*,(.+++,),(,,("*.*30-0Һ,'3(/*5:$/*(-2)%3+%( &,))6)/),)-#-.'22#),+.#4$14$-,)1+,*3,<+$0%+*,---+(!,%%,*8&1"2( 1 /%-(4%#..!%6")'+%)!")+ 1.*5(+.0(41,2+$&%.(,-)#-%.#(#$&%*.&,++&'0/#!(#'-)+$($*$,-(+-)-* ,%,,*"#% $/$&(6&""($*"*",/)!!%,"()%"0,&-"/+*"$-!#$$).*) )$!0!)%"!#%%& #*%,""($ $1,)'.-/,$140**)',/21,-,$0**--/))*63-)/,(,480.-01+')231416...(5,82-)&4<4-3/1(-+42&&0,(-7*605*+-9#-81.5'(-47+$3)1#8,1)(/(),1105..00'-1'822.4,03c*-,+%./),#,1(-,("3,,.00&//0)'2&5/)(23.'*)4*4 .7+3+,/(+,-0",*),8%+%)!'#,04*"+$$1(1()/'-2()2,)./$*4/3,)(*,0,)00)*",=+"0$0(3+1%*))(#-03+$0.)2"2*/+%,-)*-$(%-0&/)+&+,+&)#( 0'*)()(-*'3)!,&")11,'%#+)$;+4#1"*,()$+!',))))($/!'(-,(,$(0+)+&&((*(,%0"-),(11$&+%*),(,$.-$$,*-0%)&).$/&*'0$('&(-)&'+&"# &(--('2+)$1"+%-%)&6%$.'*!-(%-+*,)-$-))("-*!'$($,3#!""(*&+' +)!#!4-'8$')8**/1',&-*,!%#3()$5%8(-..384+*,.4&'44.2%+.3-+%568440./*2&1)8351)&1,*%22.10%8((.0043.53./,70(5+-/7/'=)43''../+14,+!-)*8&1(!*-5*(-)',)10+X41,'1*)+01-(2*0.!',(.).6"0(1,3(.$./$),*)1,+'(&3'-,*%,,-)#+9.&03(4,1(*+-1.&"(2%'1#(33'3&3)(2(+('4.-,*&غ$(,).,*5.)*%)&&,.*$30-*1(/!,*((+(/)3-'0-''-1(8$1(&./-(4($&3,*-%3)+1('!'/(+*."&0'8(!#2&(,!'*7''1%4"&"0))*('-!')),,$,&5")") (/#,',%&4'.+%(#(*&(+*%-$((/*&* ((&%*(-,.1&(-#$+%5)#(+),-+(%)*$&-'(%$%+%"2*2#$% )'"&+ ),&$,0(%"$+&(**"%%()'##)($&$"% !$$%&+!&%% !"),5$$/$-%$#%'"1,",8$&(-0.21$.-*4*02((9:3+1,2,*)2(954,+001*232002(.*.-4-92,8&7800./0,*113#-0.'5/;()-0.-/%4!+.45.2.,,415'((,)01+%25%,3-7#+051&1.(-e12+)2+1040/$01$-(26,.2%-+-(41+8'0+(+1%2*,)+-3(#*)5(,63)4!(-38'/),3%+*.,1+0,--.,*2***/.')&)%"(%0)$,0., ۺ'+#+-,7"&0-)(,4'%$(,)./++3(-2#-)&),($/4),).+!3-(*4'.#'$& --$%+'&2!/!5',.('&-)%1&+)|,6)00'"&$,(-&&1)'%()12)$ !$)*&*.!&5-,5(6()(+/3-)$*,''' ,*(*$$*%+,,'*%#*&&.',)+$$.11 3%*+))(0-+&#(1")#.%&$&-0.&$$.,!'% 2! %/($(( %-&+"$)! 0(#$(("! ),$& +$&)&(! !! "(('.+$.%,(+.*,''+,0&2,)2.+8(--)3'0,(8+0,,=&.7%-012*.6.5;4024+*;/4*0*/5)/(832,8,(&1,569)*420,1-20/-1+*41/4(&/.-0297(0.00-212'41-4+'64)3*60,$%01)1R7#)$3$4.,*(,2+,%(-7!5%*2#*,3,)335'-*.,* ,-.*#3,:4(*%-+-)0.<%-'%.*+-+#/**1 *+35$/+2)%,+&(4(/3,22&.')ߺ-,3(*%.,-+,$5(#))/((+%.+,/*$+0'.(.*(5+(*'()'&3* ).)%-/$*2$,/&0)-**,(*.-.1()$1'&'(),-0%0'7-$1 /(,%+ 4(&&6 3($%3,$' ''&(%,+%/+%..)(."$,)-$%%*(- -%(+!(#.+*+*$5-,%&/$('(++%*,-%$('$ ('%.1').$))++%"&+$))$"-&$5%#-)5%,($+!*%%-)$)*$)#$'%&((1'*)% )!%#'")(#& )$!&)'% %!)'5"6(/(-242*-)((4--./7*.,).-('*-1'),42!1+/-46'3)*)6741))0<.415-54,9 18007./(456-&.2 /10-'+(/)*-1%).01+'*461*-.85-50.,+4&4+c%0*,12.-$-(3(110/*8+),+2,5&,)+,).#/,/1+%1!,.)2(*0**1+0,(,64|//,01$1)(('(-2,4"6*&+.-17)()7*5*(2-208)+ *,,,,0-(--,'")((-10(+$-+)2-#,&*.)*+810%)%(4),'3$&%%(./(($/*,.),(-'%.-1&(# ,1)((*2.'(()1*,.("+-)-0((0#6*)1+)$,*+.$1*,$%.%0,%%''5-(*)--*%#*,1"-%1+0-")(,*0*)1&$/+.%(+,0*)(//'.') %(-**-,"& (/$5%$)%('()+"&3'1+,,*,,&)-$)!-,+**)('$0*,&#)(#,$"(+#&%!(#&( '!%'- %/./&41$,&/(#()/,)'$'/2/<494024-.11=**23133.541,)2/)323.51..<711/6514):53*3)2.%-.23,(%3/+-/&0.-5.0-1%-7,,(26,40'/'011.57*4-1203..&10.-e)8.&1,0,0-..3,,0. ,1#*012//&*.2'*3.-3(#1,1-++--!14 -'-4+-)<+m3,/06%,+*-1+1)4*'+)(1&($,!+*7) .$5))1*30*)غ+17'.%/1.+,,'!1(*2))-5,12**!#8/)+$&'+2$*)%$.3)/(*)(."/!&*+!*-*,$+/,'*.+)&$(,0)2,((/(11%6(-(1."-)'+*+-,!*1+(--(#(43&+0)'1.%,)-+'(/1&*)+,&%(()*5)$"&(4.1)(,+)1#1&*,%&+)%.(%4$*)",-,($6(4)2*1)$0'1#"/3+#7'%)-*'),!(&-$,-(*!,'),'/#)&)*#0$# ("#%$!) "#"$%&*!)./6,%%,-/*12/(*%---)03*-/1303),,$+6:2++;,(03,12/5,-(64+<09+1*7%+(.)520'$,00(2,4-210//1,/+1)+-1'0443"/+.-,1*#%3-33#&,--/-00-(..(0.#42*,-0*2%87[)@'0..'--'.40:1%/,)$+/)-+,,.8,%&-)*,/*(,4-#(*/,($56%-%+)**);+24)6+)2.%3-),%:,*,,(1.%/1)%.-2()) 3%0)"-޺*)(.*0/4,',8:"2*32)2()0*+0#)+- %--+(*.1%"1&5,&,0*)(*#4.#,*(-))%!,$)#))*1&,&,)#)12((7-)1$$/#-"/#2!,,(+',/)5%+ '-)/(#-(..'$,&&),13*(-"(((-'0.$!*')#4!%$,,.(),)- +,,-!%0&2/0,$)1)&$#.,%#).)%,'$)*-%*&'&%2/)*&(*-$#&,.+1()"!&0((( "+"%"'(,0))'$), 2(#! 0$!/-),,-."3(/()0.-02;+/1)2',03.521)10&0/.2-.;4)/;0/04.%2*./1<4)6*.,4172+.77345(..-226-*-.15(/030+25,2+./,1*.)0*8*,2..1(4*17+20/-0/-,33$*1-(/3t3-44/+(5&()$9(2421(533%*1.-01(5-0*(4-(,,,6/()1+*10./1*,,)&3+{)10(+(/.*.3-7('.:)0-,.)+!:) /-5'+0,,1'$(غ6205,04(3*,*-+600*,1%2-,2)'.((1$!)(--,)!72(1&*-'"*&.),,0,()*'-!1.0('./1%0,-,(+,*&0%),#}%!''%)(%'-,-'%'!*(200$')+(1%!**"4.2 "-(,'/!,(0%54+&$-'+'2,()3)&1*0%'0,/$0(&)*,-2+"&*+$%%)&+2%6 #*&46,)+)*!+,$))+..!-*&+,'-2,(()*,-($%&%(/-.  #$.6!%!$"'!("(%,#0#'(!%%,3+(0-4#%,-,0.*4()&+)+3700/..+15,2*@28+1038.)+.11.3,69*&)8&9-6>1,281*.,137')2084561+31%+/3/),2.0%//0;.0213-&,.-,,.3400%-&/-34%4261&+4)+--/1.1./1$3$T33/15102,08/0,/%,)((4,,/"6(,-,,3-831+.&)98.,-/,00(-)$5(++)/,5,/./,-)((/0+/$6*45. '-3%0-.!,),,1*&88**&'ۺ#,$3',,)-%.(*%).)43.-,"",",--+))!-,(+(/3+4%<+($(,/1('+$)*,$(2 --010!(*0&-05)+&-)0,*",)%5",(+..*./+&.$+#0-*$/,)3'$(3+()$#-5)"!(,'(((+!&+((($+,%..'''(.$5).(01/"-*&.#('"*&0(2,*+-$$")2)-)+(,&-+#*%'+-'$1& 5()1 (%!*#)-$""*&)#)",!/($!(-)' !(%.$)((%"# !%!#%)'##-,'+1(3!0+34+/+6/(2%%34*61&<,.048.-68285.2(,5),1/0)<)1E-52=+*4:3*8477/-708%,102-4+-2-=1%-*,5(6:3/07++*'-'02*)--4,55/(5/-,00.;.+3/,,-1341.$:10(7f-1+.30'60(/.863.,',+03,,+/;+5.2)--%52-,(8),31.4(+..*1/)$***)(),%1&*1.50,,(0&1+*-<+,*2+)&&&0)/,*,%5-(73--1)*/001+(*1*:+%4(-)-(+-$ -00,+'2)1*$/.21#)5&-006%+%)0-/+"*.$'-'+)(/.3%%(*6*.,4/%!.%,$)+6)4-0&)4*(7*&&, /%6()2'%03))'*+(/,,3*2))+,(%)%,(3")!$&)3-+).).+**(*,#.%$%-#-&)%/05&)%).-&#/'13$))*4/-&*+-.+(,+"-%2*&)+-**(+2+%$/0"$)-!#)''/!&% '$"*!'&((%&%*+"""%&)&$#-42*/)-),8.21'(%%7*16(2,'46/84(-+&-,05.48/5938,.)56>=47549(<.5.50<004+;*3*5.4%57018/736-;2+1+,6--3.6(,3*.7>310)+0)4!)42)24%10-3!-:,22/80-4+,5,,S42'4/*,)20*4<)34,$/(4'220/0!*+)1$;4+0/45"6,1/,04%4--,0%40(29*,,*6/,*)+./(2/)-0')()+-1*,15+/-)13*)5'-*(޺6!,45#,($**/,4--,+('--�"-.*.,(0*%($(,16.,,(3',%/%2&8,(&1%('.8(%)-5-+"-"))0%2*'2%).0/(+=.-3*!2($,!+)#+&(/(.1."-(-"-*,.+*!*(%)4,!:&(+%()(*.3&),"))#$$(+,15,,!#!*/113/*)2)")$+,*,* )$- (*3%1'.3#()(),/#%%! /,+04,2%(,$((/ (*-0'( '+'+-,&%/-(,&0$!-)$! !##)(&-!$- %-).&)12,6)-)4-01.2(1"(**10,0>55)22:,8-4;02'43=3)6)7,0-0*1;+7.40)/1-(7,,607'/58.2<<508/)8)/84.(0,*1093+3,,,-01<1.385)&'5102,)+(0&-(-(4*,01(*/85u)B5','1)2041/ *,"20((,2'..()+86!+-(321)3)"-5),1520$)/1))#14*z-381%,#),)$(1,..'/2.1/4,()14+.5()%,(+20-,޺-'0*( (11(*+$0+/-$'%(;$0&&"0-2-,*4.*)+,-.**)#('.($(472&-.)&+6/,,*..+01'*'1$)0,,&-*(%4)-/~( (!4+0*33(+,5*$,3%!/,&-*"#).$/()1*+24'#0+ 0.$#+'&-&'$-.*'#7%-- /''+-* -'4*'/*'%'*,')/)2& .,,.-,)()$&(0,'-%,-''+*&+.1*..*(.*&%0 $,()/+(6,%))*'**))$#(*&! *+! (%$)("%"'! '#/),/!14&)0,*(8,(,6-4)7271.18..11-84/+1/06)/.1,,93*27.;)*3,./5/1$4;6-0-84/.,655*,1.(0//5.*8501-)-+/:03)6,07'/0;322-3$*4-23+272'63-8'2332:,+41%2].2,640 ,'1-.4/*"72.311/)4&..++(100-.+.2--)6.(-41(B33!&2/0.,4/46.+1/315(1--4-0.+..-8,1*-*1%*/4*0%4*(.*-8ۺ1-&,4,.2(3,0,0*+4(.+<2,),0/)9+)/.-,'2$-)*((*)%)/(+1/,/'4$+-('"./5'..5'+'7531(,)'&0(%304)7)''/%*%-((8)."1 +-3#/.4",#'%$2!4),'+,(#&+.4$&-,%)-14$(+%(.$)''%!/'$+ (*'9*.,#$0')-*-14(0+&.,$-,01-,3$(()*"+(+%4.)--(*'#1,$ $( $.0/.*)4$$&/$,$"/$.&&((!,$)*+$% '&& ,+%%-'.-#.50.$1).1304-0/00,-21,2591'8(880<24-):.:/2/-71/38-15%4..21,/3125,7-7/-28.(0/+0222,22+9700"=*.9(66%(80523-0*83<,66..,*37038&-0140((1$4,3-./k20834)2,1,)*)32,%44++21#42743!*-14&)1)7=(4,"-6-'(+-10'04)0+,{+)1"+00823'6)-0!6+4(<-1)/0*/(24.-2*%.+5.$(ں,*(*5).*1*$)%4%&44.01)4,))2(''*+5)1/',.%)&%,(&$(%.(0(8/4/ ;5'14) 0(1&"(/+0%0,%)/,-+,)(-/}4))'',+'*9431#.)/$()!2,"$5-/$.$.*,,."-/&,'%,0*,52'&((,+/+#!('..(1-)'0 6"+)4. ,",/1*4(*1(,)+%&%,(%"%.-/($)&1'..!*,$ (,%+ '(-.*5' 0&$-/0'%&,!+,'(,,1," -.+&. )&' $%/#''"$22'333*5+*/+4)'<)1.2%,4%-0---3(/<55,0*3+@.058+:51484*51;*20(-./11.62'1-1).-+8(204:60(0.66+22(')=2112-1+,8(543-7 2*93&905,/4440:(.%<+,)3142,.-X6(//)36(4*(*0,-.3/+3-/3,+)92-*7+);(2,*-00),(#17.(10)++,300,-@/.*/2:',4',0/84+(,3*:,542+.312-,3)!2-,&0+-('(-()-&2%$)%'5!3..(/2&+-8)#$1/%/7-)+);,7,)+$')0)4802+%")+/&* ,*,"./0,(-()(),0'#,'0.*(,*6+,-+5*102(-0&1)',/%+%+7$$.1.*0%*-4)+2"(),(.+1)'10/(1)2+$-(.*1(/&+,$-*(.!/+&10,%+#*4,$$,(#),%*#),13!*+%./-(2$/( &.+%00&''(0/-, +-%'(#*+40&-$(2++/7.&'"*'#&%&)$)((,+%)*)450107*55"$)-/,40)71*3/1317129538=-7099-/13,..563-,/919)2.32.190#1/+.3/.'7*)202)146.)--1.2/0/+.-71(1-4,)0-1,-7>1,20.2+204/+55-)080/7,,+6+42-8o+../<4,-/1+:+4--&)2-25%/. 83),1,7*42'/3016-23/7050-%,*2*'5-3,310+0)1)6**,2+;%&7.784..+12&2304-,/0*++%*պ0'&)%0,--,*.0%+13+(26.)/3-7/2%119&&222(1*1,,"%/'--.&,-,-')(-$%<-$4*,)4-,('5,-*-+!++*&(,*,)5)#%02-0*-2*3)-'0)**'$/#()(3&$.+4-++--.!),-*-'#/).+$#$-./1#,((05+#*-(''*(.%-(0.&+!1/")+/*21!.3,0+,$,/!,'1,,(1)(#)&*$,(3(""-0(5(#,)(6,,("(%2))".(%/ ) #"!%((# () "'$$'&#!('100/)-!',1-'2*.(.,+/-,+0.4.4*4-4*4131./428,52666,---351':/..'-8,)2,5432<3*8*354,54,17/7-3;()+-8.0)1.5&48--,+4/,031-3,:.*.,82*715(//50359'16::4[.B2,/51>&3&,4/)$(,,*10,/*+0*+(&+.3,-7.'12*/9)12-2(/*.+-1,0/3>)+,2&4-.1,3:5)20+.,,.4#5,.'-)80$9*/3)7)2-,ߺ++$(&.),3-14./2127)&0/-,,+--%/,3(,8(&+.0-,*%%/("#"2-2-+1%'(05,-,0&&-"(**'*,%),*2),+,)/(4/ =+0,-)(-%$.,($/'(&08'5.(.2.)*(5&,0-0*/$)./5)&/(('.+$".(,,""**+,1(*-$+(3*'1%)1(&).,!#,(-1(('&(-*/".1&-1.((-.$2/%8)//%7!3 *0((2,5 )*.)$#%-3(0%$()-'0"+&(,("%'$/$+/)*"#*$/+($174,+&3'(1/,.'0-&0577)0:5(-2.;35740143516,;..44(02.<54+5222362&8)+;61-/153-.509*<4/.'++4%6103;+11,53&(%@,*..233,992#-12./2"+3'401)(.=)82+.i*3+.,..2/2)@&.-)220+/').+(14.0696A:02.. '>%/<..('<-.230,4&(13+)&634%.270-1042+..)'(34,)&.!,+,*5'2.5(14+0&0+*-*,2-14/.#.--/"50'%&61,,0)(1%0%-5-.+%,(5*80+/,,9/5,4#01*(,,0*&.0*$)&&%)+,$(%)+4t* /%)1)*"$&$-.-02('(/&.+%$5'-',+!./3(5-61.('-*/--34-+#,&%.,#!:$#++)**'!*&++,&/"&!+0)()1&1!1%().(&*/0 5+"#$,1#0,0+$!.'(6($$,(- (+*-**&&)9(,,&","0*),* '(&&/%** &&%"!)('1'1,*)1(/-41,+4-5)<%6-*4-0#2004+/.4 3255522>1.2524024-9<7)6423/.-/!46@6/8<40,10040600;2--#90://,')/52,.90/45---%1017*60:+,,(4-4,-/-.*2#064,*./-+,c(=)/8*0(@--839'5/292372,4.40<)31.,$-3+;02$-,*(0//-.$14,,(:-*(=/-**+2%..-*-,/4-/(0+)$, 4)/*-4-&2,$)0ں&+5+,*3),-))20-"<$14+.0(1)*0),5%.5-4/-1.&14*$'.+232+)20$((*,-1)*,))*'0-2.)0*1,!%!1()&,.&;,$$.()-*.&/+,12-)$(*(401',&-'2-:".(4*1-(41."0.',/0'%$-(.&(*#6),%2%.5#+-#,,1&)3..-(3,!'++++%*(#'+)$,-!(/17'')!)1!/&*#&'/#*4(-%,.)%$"%(&/*,'):$2").+.''%+' (%1"&+!+$$#,%($ 1.-0(/05-0.%725)+162*:2,-.(4'6/5;5.5<692019134;6*368+2.3.2*<)12261$-1:(%.,2<<12*2+25;,5-853;*'>'4.615(0827++#871<"-733+.-69.4&0/-4*0,5,.1*-3%06|14%4&)47(15,9-,+&-1(/&5(57(2)./7212;50/)+21,,86-.,8-4.)->426*=(1,1+32*3%8!(-0*.0*//17.5)0,/+:,-(.)2-,)ں,/ :)+,38,+,/68*6)64*&*!5/3,/4-*5/4343,*5(-",,()4)5--,'131+4*)+(47.1.-#61)-$/&2,'#,*,$z(-5$-**+/*.02+,+4115.(9(+(+'.&.)#&0$).).) &(%/)&4.*.0,6/++3&4"./,.'(---$5)7#5%-).,8#+20.++/1-9(!*2-"-/(4&'+.%2.,.%,*')3+15*.,*14(&,43)$,/-6.,*/*#.,,&%#)&"$)2!%))(" .%!.*+84+524/**611.22,2-17+2--010)6$39984B.(1704/661.4/,,038068-61<()(853464A.11/=:./10080?4+*-3,,-,*3.038717/15>374600-7105245'08544311,5,4,.8/49+4[00$2)-1-(25-15*,.-3-.0,,)/0%*4+3,+*(",0.,,3,/1%)0+/-%-09*0150.$+334,4&7.2100&1(*(%5)5:-*52(.34-+$(1&8-2ں(/+0(,.3(0-7,,-9-'//4(4*-/&/20*4&2,%/1.-,'75,.8+5-')8),*-)0+5%..4(,,)',5,0+53.1(-3$5+"-7$!-'0-(0,9,$$9(/.&1&:#,(-0"11/4+/(6(5()/-/1)+-((2-$)1!/43-)+,,('$*"/&5#(()(&(*(-3)0,-0$-)5,*,8%$),+4)(0&)00))$1,/,/"1, ,1-41 %$&6,-!*00'!,**.))3*)%.,%))"."/&#&-$%). #"%-,3&'-,,$611)8*'*11/.54+-,4.)23/274)3(19;8.330>/02<637+81)25@277457.-;092%-446:1(.11<=23,0,/+<71054521->)4290(32:1295.&';0,1657(8&,+01065-&+*6+3,l9..,07!8.0+,@-,2112,+9513(2(41,%*+,,('-(31/&,).,9*(2/--0)/,//(655,()%0#8-3)0.0(.0 .+/(+/014.3171.0'$*0ٺ#/.),4(.&10/(8/,011)1../*0-6/-4-,%'"(/**.9;*3(4"+4+2#,47(3),0,$.,-*83+1,*&2,,',-+(2&1)$*!)-04.4+,+)*$,(&00.;%$.+-%+(&,*')*2-)/-23,(0)))3+,/20'.0/'1+,*08*)1"3,/&$+)2,-2)/*%+)(2,&,'/1/,1!%),/&1-,1(#4$*,2&()0--5,,,2#'--*0-,*),$,/!#&4 '& " "-+ !/$&&# #!!&2-3*4(0+(29(7/+108*(39,<:(:2/32.@670/6931=0115*-).4/8-,351,&/48%!2432/'/43-0)52(1-4)243,0&25../7ݺ14,)+/(4).02&./+3-/((07)25:.8,4/(='*-(,2,5() *.51,,3-+#)+-"./1+*'3-'4")..3#4,(-,(%4#-&8&=1+,-(*+(3.*4(134&&2-)-(63,0,6().,+))25/0-/&/)1.4(&.(3,('*/,'1(,&57!* (.&(&&2$)100(&",.*$1(+,$-./!,*,&#'.$,++24,5(&$,.''&$$)#82-0--(()'$**+42'-)*(4('((,-3%#'+)$(!$#'""3$&(.))0(/125---'('38.06,04412/,427819=79/--@-9<.6.8(0)1=;5-01458/53?7.1.;68,1,:1+<.0588(02115202)-3:)38.433)2'2578,40/9"/&4,0+505.7,*8.21,2(411=0-n+1*'3101:&*):16),331&5/200--<86.2-73/2)--11/."35112/0'2.,.--.0-,'3&*155-*+961(.-0/.",,84.,-(10**-902(&ܺ2)15,.*1.75-6*1+3-.803(/5,%6*311(4/.)($+2%-$1(4,/4,,$3-42))1(%4*//,*)$:)120-,*.&/,21&..~)(/.%24+,(,1)2#0$+/)((/1'11/#0-(5(1(31!,5(%*'')#*$21-,!(-$<)2.0$8 22(,0/0(+,%$&*(.06310,- (.'04/0'*/%,2()*+2(1)(16(1$04),'* 0()0*1)0$+*$-*.+.$1.+(5&.")'"!## *%%'%((,/)$"4'+5,2-14,8, 24-9-1(&10,-;6<3245*38>-/9+81*:842.7,-480619.61=152-409/3:3//24<;2270.48./9(:,1-1-/415,4(9(50/<1-249+1304&52-+1;:90-/5.1.-35132..4*R1-*5/5/172344,=%)1:5/6576)8-5..)>.+0<246.'309,-.)152)(31320%E-1+41.,+)44*7)$01<"-.'-0+,,055.$07+2414*.4Ѻ3410/-),:2+-9&).65+#8.,)14-(/((*(*5*48.02)5/.+%*)340/8,2,*1*(-28-,%,"2$4'0&=.) .,,*&8)/:8+)>%2(1(-)54).()&+:(((,,*!1+,%)0&&/,&$,*0).)1.%%*)0..-,'+-5-,0-&*)*10%-,%4014-0//)",$(*/&05%(1),-0'/($**)/+-$+030()2)1320".())&-.%)'31(%$("%0%)--(5'".&"&$!#,'$&)#)# %%)-'420-,(2504/1.,,,.(,405%44040-(4,6462438-:70.53119*30.3,8;/5/8)>2:28307/16.79985)597848.:85=)3)4<2',<'836.1/*(1?&)+90=+8-4%8-&))-0/-6-'1242;+q8/2,/(0>-4(3:022,2-)4+5320.0/2%+*/312)415/202'$08)1#,3724$-4%.-+0.0-!+4*.&)2,0<78!+4-,290/%&./)(),)+,$׺1*/.2+#,,*0+#;,15,*)*15*(/'5&0.0-++.&8/./,+'006.--(($,-1.2,*'($0#-1,"0*,-11),(*/") )10%+&,2--)%$+,%4*.!*)+/%2.8.("("-'$+,0,*,//4/(00-,11()1$+-(*+."- ,%4. 4%.*'0-'-*%'5',+.'0=*,1,#.-2'3(',/(./$$$,,*+/)",)(/.*(:%$(4&.'("0(/-14***2*,#/ '*8*%&%$*&("((',!%$#!/"(#'%/1),6-:0*,,5,4))3/*+/44520/6=321451:;30424824,165(-'.83:6:50=18:.225+822-+:0<=*8-4+9-;/70038,9'3.626250-52.31+6)8;7%4<3.3/)0140.5).01205)4004X/06&2*7)-,7.>390*6312/0)86-&7#(++(*.-2.3,1)1..62.102<-/'/'-255,.8/$*2+011/.$-./'4/33)*.)-0,/&44:-,*17*5ߺ1.1-941/-*9.(5900,.%2)01(-'(8*.2/$5(.,,480'/)-*%.)'./*(,-7*-(0-()=.2"70-/28,&<-04-64',*/<.-*2-8&=%0+0.00&15*613%/1'./3#2&.-+.*8()10)(,.+--(%+&-.-:-1-,113**,+8(1,($+.+.),/0,2,,,,,%.*,+/+)137(1(/,1'/&"/-43-)()&(-()#+.+1)2-0-!1-*)(.".+4) 3!*/&*0$'$3&4*!%"$,)")#1/,-05&70-044,%)413)12))1-0<15/19+5?1914?(726,;534.4=08-4;(339:4:85344:531-3:2.33<(4/026/4:.4+4+6,9224(25-05.@420;-981//5029/12.*.113216<;46241y-22-42*-,24+6481;'%++((4<31(0/*23,.-2:2;2*$5:01,2289*2,24)-0t3*-504//-50&28+?*6307-1%3(4*36.,(32104);(-ں.21,5'-4.+.64+432657540+.2)%4.&5-(.2/-30+2(+8(,-33&3.50--)+11.51*)/3(0-1.,(%1-&-3)61'2+4*3)+1.'&-+).(%'()7(,,(408)3-/9+,((%+/,()*2,.-+((($'),,&2.2.&/0%.;))3&/0!-).*1#)),3,"(50(31(,(0&2()*&%%.$,)-+%3++,-,/+'),+'80(1)(*-+,,('-$2!'+03.(*3,&,%+!($%''()))++,&2$- /0+*4,=4253+)00.0/,&,,4,+*3./38.95(:255>3590,805:52///9@1287=*1@/+:2412.63,31287:80*911+,6;28.10,/8<,+3/2692<10..90,0+<(:1.434583-83=0257/7*3-$`1/118//,/-3566,.5,<,B005.8.2/"/09-,-304605,6-03+04/55;'-/-.1>+342(.(71:'6./-3,20-9)53+0/8*32+023.7+111,,/4,6534(3)+315)031-)63-,0(.%-00701+0)+,7+%6(,62=4)13&,,.0.1(+-(.,-'0(7%/.,1*-(/*4-,646C-'-*-,0,++'$*'&(+-+(7*#10+/16&3-03.-3)18(/#*,1/21(92,,7%,+&(1(*04#(8-0&1/!2+&2(1&"5,0203'..1/1*++',,'/'%,&3.0)-'1)(3>"*+(&5)$/.,-)7$(($)'*,(5).%,.4,)(4*)(),!*(,)"'(+)&&''''$)0.06,.2/-9:0*.),/+..2.8894304<)2/78:6.(47*,6708-=<104-364/1372<(14(462..593=816041782,32'1/-865164486,5725?-,/536--9.4A0/+-58590)<5/-,5'1&*194<^/251.));.+;?422249.673*6(4,5310"30:3))3--1>;/6:4/.18,6,,.%(*}26.,+0%4/;1745)>.)9)),3--65)6-(0..<33/30(+ۺ11$0E9,1-00,+/+64&-'1*-$4*042/6#23/.!*&6/3+-, <3*74,-*2,(,791-1..54'*&2**%.&,,,+,/%-+),1}*3*325())')),4/+3-(-'5,7,#;,,4%4%,!41)1,0,2/'*6+7)0%1-()2'0/)&0%)-++44*1---1.6&))//).,4&.*,)-.*5-1,!+,%/4)-3&(,)'4/,0+*()%#6!+.).'++&1&'%/%*&+++*(*#'1 .*#%#,0$'()*!&6&$&*))202+-*8;-3=2240,.2)-%142(.61:-,-;6:4+5%1@43/>//)297549.3;3>-04/1A)6-+02/47:,572/108+//:464436+71476+(/67$1.41.9+.3/4018-7/2734-9-137843-4)4842,c;/<805/;)0853-005+05.09.2,2.%+111,9/6124+72*501*-/(4917'(58/@6304223,*$511!4+%..2'+5:#44*22-(5-,?0+/.2&ں2/27*6-;-453,4?24-7640665210:9-38668,209:6+-#:0:1;*)29534/20)2202+;21&18.?.4,14414'/<(-80,-40-8&45n5)2:86(.8*80D.7-,82(127/4/+4/0806*3-,32(,7.5,12,30*-<7-70,0%,/22..3/3;1006-3'+2'44-5$E906,-*/-5..62.08ݺ0,.<1440.7(/4-&10:0*20*2))*4),1658/('.-)02/13(,.)&(3#-...-*3);-741,-'0+4*1"--)'/)-(+.(:)//')')*)8,9+2)9'3,*,.-44.*20(1(1-55.1&-0(50*'4162$/%$2*%3,3/$+3'3(!%03+,-(-%*&#,.-(()((++0,,/-.(4-$+.(&(2#1$&44-,-!0.,$,4*,1,)2+2:*($%-+(1'5(--,-$"-#*%%!.,%)#(+)'0*# #!%+"+4561/1.,.3<+*.%,3,,(4,14..<216<:46:483.>49-4<.03/,8.4<6509712:...86606<48/85566509:5)7?/4444,.0966>*8=121/.C3<*5105<71281.4-;-,,02(327.4123.41`,2405+2608(9<,351.3/-:-2,,1:08.<<130;2(*(265340815"23(1.+)8,@2%533:,,1-3-&1-.*716,012,//532-,,3(4)#8'6,ۺ41.)$4*.8*,5)/7*5/-2,-,14(0'.1-/((3*1-*2166(%--+3)00$&-2,011.5/$8-36-,-2-4(/%3#-1(,"*4+$<+802,,84 .,..+$+02%(,)1"),65,$,/(:"(-(000!/+$%,&& /4,)4')0.-110*3;,)(-,(.16,+/1*4+:,1.5.3 .+*0',)5)-**1/0(1*0/.*(,25%(,33)15((.21-,205*2$0.,,'$/*3*&$+0$(!$('#*-(,")" ,(/!+17+224)-5+(:436&113,/23.62/.5816368@+(*44:4;82.41@194600.66@8550005;7)866-22586-512894365-9)4/58-@40828/1(167.8/=0//.042.)::>126486=1+-3/9:1?1x1-21,4426=/(C/0()).2940-*1$3$9(61*.94,$0=41/*3(4,:3+17,.2.&4.:1880)#8-08*;136,.142/450,.17,0/28-31-*5,Ժ43)-1:51/0-,)*4/-446,/-304&&=0,/).8*4)(1*/'1-,.*,-2'+3,*,-21/2+,34,1,-/-1-/(((54,7/.3,%-+.',.6!1/++)$*2*(&-*..,)0+2+./+(,.*+,:.(,.,'($8#2( /,*/,+3%(5/('.*(.(/!6,&2&/0+0+,21/(*-*.6,-'-0!+)$;-#)&-)$3/-*,,+.).'*.)(/1%(,()3++(1102'05(11'2/*))&-*3")#'*#*($!'"#,,,$$+/2058/2/50(#300-+92480>/-/56*4,23=99;3,36',,406-:*008,2251-,@1-8<825982<76401<:8.6047,:2482(91-4/35-7,;5=80982572:.401,88718-%0**006643+6--1-5\..7/3<,00,,038019;)14/46).A-,?2,&4*1>147062%)/,)*615%0;8;,45D*4)8$30*-0/ 52(.+16.370.4*-)0/00-*2,4+7781ܺ+4.0/.2.626/4741,:--1,)<+/)-11+/2+/3()3(/4)0(421.' 73,,85%,//-($1-.5#1)(')3%/-+7,*4+,,)'<8&2)(0066--0,30+,(252/,-0)),**).,(04'.+",5*/+)5+(2//1/-.,+100%,4$=196)*/231$+6//13213-9-.#0(,-)3**-,)(,,1222()-2/+(10(&,(,,0&1*/)'((/0.,+91/(,,.*3,))+(%-)-+)%,"%-*)% &--,"-1'(*3,1>'15*,2-14.2/0$51):5.5.58D2241100588>15/6:8)<8088>,9:52124=735:-+=)9,1;00336+:-4/>;:(468522+/-5:,:;/5--5,6432+315.33440-0-:58),0.3201=24b::05,038+/)/12--40(,,553-24106-+-.1/1++/2,*.21/65/066536.6.72/0&4 52,,/+,2**9);8-3,136#/-89/221.00*0*.3**73)3/,,-4,,-*)//;*644+12%&).8#*28-/)3,,23)53)/6$5&,-4%*4)3(8:/%7((-%61,3&9-0/./.04",*(//(.$)42'-.-*(/&:,,/1&(,1#1(5+1*!0-0*-2-)0-1(5+*,,2#)/1-+-(%2'21323',/+-**%1%*, -/2,&1+,(64.2(443&14--1$+*5)2*/,+0&2.15%,(20.02//,/,"0)-%&4$(-(.2)%+&)(/$*. 1'",&'%-$)1.31/**33,:,,.572)1$--6/451,-925250:081.926=26*85<4087:65=8>4937588@3552=53:12H032/3,2344>::,93=;46(3(1138235<0725-4(3004,88371-6)998.41103588,/%7]:,+8/3-31/(1<224+<6%6-,2.2:2'7904-0/)-.*87++1427342=-.4/(40,D3.,;:0-,"8.9364*.;.<,<59/06+8#35118<,.@-)-Ѻ0-62+5:.,2.2.1020.6+06(,1,..0&(=,,13+10,4&&952@.4/5.253;1=*8;:16565445.1.8g8:1;7*65:12-=5256,:24:6390/9726544,/?/1*03(*21.1/3-4&4-2(*+0)5.308,4,10*1,-5),;'6,+<)2-8'401.2232,*70,޺.27.*3/,+5--75/22-0-*0/*5%514%-9$-.,%32603*+811+6<2+0483*(0.0,"..!111(13'/4,3'-05*/.5=-518663.1/6284486-<.7125968557<:>4-85=216-878.884-2<946:15>,<:98578877)83/538353;5.6/,5,1935,?<<-59/<8+.-594B+/+8@.+A1)/a/5301+4766/4:,33+-6-10;%06801-/1219/5.14>9-458332*.-6148.)5)B-+=0<13*125:1.9;*8,3100,4.,80*-10).1.+3/+1Ѻ/29131)/80+*6+9-05--62435.2)2/'6+2,.)-.915,1(.1/(471*48)02)-1(4)(5-92($&,/1#(+40-1%&4(507+%1*-52 0*3..47.)74,3:12,/45-+.,%8+(3#'5)234',-(,>.52././6*/2.,'7304-!0)..*0*6$,&.-(),(.5*,(***3-2%0*31.*.1/0+++'2-40(,502/)1(/...)31(-),)/'5 3))0+5/4!-++(.#*&,!,($').2(&/%,"*+5,&31-(4&8-07-:)18)8031C120*;4/58:/47:)A85<63430+,48>465.33:-.>77-736:74<4/2>,7(448%.5=206;9?84847/1?50==26,4;.16:19/70:497D1<:-.=0558%;/7946-+<=758<979.3,,7991244-127,8+<5.83<2,?6C0,8/1/a4;1?97235:0,8?56;0-05(711+.3*5312/35/15(34.55/5+1369;3323..1B0,4-7,9<1@3-70502;07)292)5/+2.4(.-3&1-/-47غ4,1+=.:43/;6*$4/*54,88&31/8-,4*./4/+=5(4---.4-'...-')*1(/)--*15181+12;..422/3-.673-.!&2.*21038&5+)5-//122.+/3,,-12,6(,-$40./,(*0.(0-(,++0,*8//.-0-.16#&475/.00-16224,)/-.7,0#./&,)'6,2(-024-0())-2",.),,64%(03*1)+35*0*0%,+3(,31-%3/*0&2((*2#+*1+1+$(&+*%%-1)11#(%&32)4&3-0/0/63,+22.0.&42=)88+9%*40G94,73?94-5.5+14>3-=188401367,;68D;792+6683;20,45<-097/10-27==558=88646(@0847@17+355:7<,054/,4;1033>631553665-c/2%,2*+1901568>A0-563.,:?(/&)-/2044-5/06.174246<;1/;3&@1)>4-80(3$&52:;,44<-?+5141/4&5-//27%,7/530&0+=46,.53.-)309.58(*<'37&4/75(/01((.29&,..8,-418'-/,10.+0),0)8/.01+4+.,2-)53.,,4-534$.*2141).:.5+:04,4-.4"(.5+*)2.(+,-5614()(-/3,,2),4..36<6+--23-6).-4).)=.,39-3+,11.+90))&8 0,2,,&))*4/&0(+.(10*,3*)!-+3215/(-)'2,*.-*4*2/(0/2,,./:+)+6/2%(),.%"-%'-!.)!-(#2#.,+'-%+#'5,52*+)4)7(8115=,'0(,,<638>-8873444724(51:6428(.259;9@@2:30@.459@7(6818:60*:@81284-553--46))8*3,27-8=8,101-34-6@295,08-.82458.9,85:7<17866.75*./00625472:1<8<8:8./=44,538.(40-;70/+.344/0--4*07034,#=26,&0-2/6(2(.81+5.(-&2-,),8+5,+04/.4436.(51+2023/.;-3,01*,044+*(-$40;02<,,0(-/ ++-83-()8)"-/$47:-330<:;-1<53:1)23&=1:/-E3163)/1-02<4%!-01303/,639',)'&%//3&.261,3'-)8&*,4/*4,380(3544)0&*.230/)'+?&6-1.4,2*41,0)&51-)"+2*4'50,1-+>01-/-54-5802(7,)438.-0;..-,5).*7'3++.)$1-..*982'-41).,4(1)00)',0$.*24+)3+*,$/)-,.0(3,,,0/33'/4&5)*2:.)5+2$07&5)4*11-')3(!//5)4(%#(($-&1-)&,%,,57->8=;8664:7A7+,85<53.B.@5663913<08>035=11:1580<1=3.-;:881)9@1?1884-89+574/12>8.:*:4:;?8.51-0<04/:5*968.81<4519u;73,92<7./-3B6)@06-0586825:44,41240..58585(68.1.-;*5180,=07)9'*5.32142.-+/451)40.<4$8-2082;+>,'&64/3(2309(4>2245.23216(;*445)(+(1)716..11,/(9'*-0''---151)/2915630.042.46*1406/3.0/!82,+2894(0-3+9,+8.13*2.&$.,-682,0-0.2'-.98,4)+0.(,5.15,6809"5,2(.12-.2%*1:0,)--'4*00-/0',*/:)*1,2*)2.<-0(.1/+34+61&-.,19+*0,5,1#/5--0$*%*+8!+-0,)//).(/10+)5'.".,">+*"0&&,&/,#6++."++)&*)4:61%14-3.1/5.3&5105+42<084840;31:;;:.14/@4038<:34=:4;/-<;4<5@+2;+6-?3>.D56508464<108524027438B:6.438873(5174':;/4./28387*217=-854/16131.221/4Y05+=*7/1:-3/@435684;*3*99-30/0269'2824(.69.2/-2,935<),4+1-07/+-9(1-4./&4*@-=535921481-548.4-0(167207+4+κ3135+.18)60(744=2%),02*6-7,+,10<-1-2132(34:2 -)/)11-1+6,-0(284./..10/07+11,/18,*3%2-+(45:.52*1&523,1.(.3,9"-+41)3(#0010-3*54.1),.%+,8'*,6(+,).+/#+.)-)-+$,9.-.&0*,'-(((%/&$%2,..,2,-60,)*,-.)1:/1/2'10%:2)/-,(,4&3*3-1/5)115,2)(223))$/+!-20 "$+*-%-$).!)/&*'%#/*)-.",1)$26.4-3:=250,,0,/*31290:-46911672=,A?6878887:4=429;5,68<:14+;2,245<:,9440B1;5=B;A584=;10;,426:42>58,,9>.9,5.20;06398;71:6A2=0028<279872773811,772+001(84:215+390602;1116,>(.1381<,-10<.(5&461=062->(6+54.+09761(2;52-*9/3/5.)8,82-62134<-15)9)7(,5.'3-6>.6/-),.*9.406,0"9/*1535((3'4';8/+0.,.,)(/652')15!,+21%2,0234-6$15)--)44.':51+1&-.0,1,6)566<8'0,+).961/54)&2-*.1)$%3'1%1-".&,)*).--0+11)4,')',22)6,),*/2070*18()*)11*&18.6'2/6/((,*/%*&8-..(/+1./-2(6--1-*'00+4(.,*9.)(1&1(29.,(#41-(+)5'(-'2(3(#-'),*#$.*,%'&-&+)5,-8(2@/56*)24=-1'5+10@*7-97)=75<374=5/24>217=85.29/7:43:5K?;2>4-443943@05-4:7.79209-881:-:264<,,?271:@584688/;724?442-4724:09,74/81;252;=/<+8_;88-683=58(2;0+%<14.418470:)1274=17.58390:0;/4/93/664128-675<783:204--.4749;/53061,4=%7549.733'*44./.,//6458-2-)35+/-81-2/8<03106.554,,94+;513'-7-:"1"+222222)-1+446)2/$6:.1544*8*.1/,1/4--,>293<7,,04.4&6-7055-+,,8#(14.1-6134(/5,,4(30,1.,)+1(3/..0%,0,04.434)6-4;19):&2,)8&1)+'1/10)*3)(:%,-.,3*0)/&2)('5-0*%-+)"=211((221+5/4/21,1*#6,#2,2)0+,1+8$20%*,'.(&*1'(-)+*4))%(.)!(16.364.5.43/40-4;)60930<9441;>:80.97.5-<&52136F1<,=:83)12-F09:293?384522>5:A71<<3@A868)C/681845,8<-126/974691890//4B:248=1332440862346:::.+4A+}51:?6<4.564,5,=5582<366-5='4/172/3.00)18165534)?955<11-85.09720.15+542.12,1961>6/6.2+-,35/-12B3,0A220319-,-3.-)0:&+42150)3)-11822)-9)12)(-357..201$,04:&46244229;2-)0#/'23-,7(-2&324/2./2%3-,/51%20+1%1**2)8,444;.4:4965=18651897I84:4:165272=>845/957<481@087-?:>044=+6=8@8/851.470+:A-88<4<;-1949)585//4239.=:1<.167619/8;c;0892<4<144258./>39283*1)8(78>881.4=60024<33/24:6361447.D-24F=163170119<59-/.40-1/1)/408345*3'=52-011<8ܺ1716,6=4<.+1<(7+0.:,34/,0.02-04(:9-4-,730/-0!4-.,35>3-14=,00+9(.;+77///-24&7056,&.0/1,46<5/3)5),,1+.564/-7/#,821-4000-.+39,(0*0,54/.-0(*41604.562+0.-0)4(7'*-/-+-0'04+7,1(2(/,+35-&%8.1$0400)101/&7:(8,/2-,(4,)3+'060*/2-015/2(&(),-7&43.0)-:/-20(1,*&*$-0()'"8'",*!%-++82%2**530805.:/=(/,-*,153161?0>8.89+26.95:;<5064894:1:8@7/09D968<45642<859>5@9118=)6@2=31/5,;4B688C814@1)36/67063845(-36;0:877<>4631-41;105-::p2835-485901.@,)3+412901:);0.0-2355/6.15),*)3596:48*?27;-5.+1046+4:-8*4+1:6&00,228---(43316,.+0(34912<1ں:213-6,=36*7-;*88933<)564*5,78-,105516,1/68("6130:514)7221.71/45:0&3:5+*250%6+0-)55081+7}3/2/&125&)-1)9158154.0-6,4,4-10,9(32.420+,/211,-.28212333:821(42/1/--/1/1++(2#.4,/410-.,-0.-/1)70.&2:)4>1.-5.135)10/0258-&-3,56)**()5)8.+/*,210&5*2:1-%%-%)).'$$-)("!4&'(+%8&&402,9),422.;266(>*(-332+13<383;748/578789//=>=2<87612<6-F:9898518-87;170;24:199:9:9:8(38/28147>;<7955<832.5:5+469.=<3:64275;2;5231488938@31536-8b74260:75.6,31C6593@:;)>6:477058+851,B3/;42t;*8408.49=63@-1>.4;+5<+;-160*2-37<2;43(8+80-/28584<;-=<38/522782306:2-29:1;,-48.842:1-=71<-<1/*,./507-=/5-51.4-04,067'4*-%2=-.*48.3*71,)0)724.7,08,157$7151-4-00,/,4213.92/1=4>23.-411+0,055147((<1+23839-'3..-39091+-50063411)0+.68*,).+&,,*251-2*4+'<),*52)35(-)55)652+0"+40,7)0..4(:;0+2*/2,3-86&15/) /06*-%)%803,20/ +6.0110*0::-+$01$,-,,(-%,4$1)$+'-.21$%0%!)31&(+8%%5/'-84;9.4448..69.1-28130.=:3571985.?-@8;;>95646:8D5,11:/=73<5878?55B0255@04/022<1C/215679;4)8/282>85:64,;D;5:43434<0361/,<3><803824702:;/84522\:1>./67<9-8*;4-8167,719112200/8570-44.(335450482/15/338/(4<4F4-?<,7&-84/,002,138;177//+,61--6=705590982/,8&5555:*-*8568<06,)23821045./-<,,44<4:.2+8'-,..:/-(+'#94)71(2=833&3)*6..0009/0)2311,+2H229)07'=1749-3/-4*116283)237/'341910%1/244')105(&,)1,$,/'8--?7.325/)31-+*)%/(0&6&/$015.013/0.3+(/6*1*40-..+-./,2-77-/-,)8+.-*+4&.100-/-8((:840,.4/1/.*)&2"1-4-+.0&+-(')/*-%"+$ 9/;.50)-80<:04/<8159$15/93453:85:@1+;084@;@2A7B699750=2?<@>/<4406:<2:<7=>//6658594936<@5=338770>>*8;8868/A514<683414/58A/:14-?00:D891.5A9;:06A5y84:7421<&61B<3();)42562108/(30@-065437*1713141;03/./2../458-34(<)4)10,-8-210=*1+1321574-5638,4281265,0ں57)95:,2<:10,946+/8;,;5484-009-228501,01,.5-%51./56..+5.;&50;*,@4144075,,-6-.3620,+26-/4r.*3456(15,45,..*+)05,+70/57'5,938//1/%249&0@-)&018-0,6(**52312,50)0-+4.4//2*092/-3,-1;34,3/&*.,4.-2.208&1*3(,5-,.422+)4,29.3(%+*.%.,&53+.-*4-%,3,%.4"(.'./"*%)+%0*0-. 6()#*)'%(-7*5984<=3524,4)7-+05<4./)<;1.<88705>*80<6,0E=:A22:65>2@>;>94?;5,>5<+1>4.:98/84;544723>&697<4>:2,082::@31;28G,=2==8155D0/48(10<;*51-286291;870<[,=<4;-:=102,521.37491-601>*68107:,08580617,53480=//-.2==606,4.63820)7.48.,.004,5064->44'129/141/'-8/+051,16,/6444(,/186>;,/6%64!+-2+236<1.9-00300.4'-38.4/316<(583(4208.6-.441(452/@453.6)-.2'/<-,0*9=1+3203)4-(4/1--5,12-.4,28+55:0,(.0,4)319.41%/*5(120>0+/"28(.+8(*&27%73,3(+-1%,/5+--(4&(3#(21*7.90..-.&.(7$1-21),41(2(2/+41+1&0,.8,./42*%&42/)$)-)&(5"*(//( /"&"22"2-39::25%12-9185(=4-4855.)45?;:;136B45:;918<68<5/:6.?499<54=>9D895=:4895@;<68<544(<744)39(6=:<;3226>:>0156<.@7<36)h723,>-.14,.,A6@/34/,3,312337918<3284,)8188614;,43:853125//;7.19-59-385:547<7=1/--&@0853;2./;.85645340@10)3.*682-4.+7.671A2<-,<(452++:04:)-14128+?5&0%/482551::1*50205./&/*702+-;0-+0483/5(981)2#331457%**53;,&+-,.,1*6&+0+.2/+48.&52$)-%"4,1'.,%+:/.6*>,,45234/8+46'3,0/(,.=24.;/5")24213,03-1,'7112.=%0',>,1;)+(/22101.9*-.84./(.0050(2-*8502-5./10-,).-5&-%)1*(4+')&$)"4$"&3':55<23&646(05.5-8.84#9?45584>33.=7;<417.;7=:?805):953;?<86186=@5<>6;;A22:B6=194+/7;><473@0789;3.1,<8@442=60755444278204253,18468=3>;.490--G08=0<06@444;4@191,+1<5,564<375/1-@3404109<314733.A-;86;5)D,78@1;+6425,*:2,49>33:3*51,:/97*=26/5302663-<25.8,:+)58=1/84;242@151>)-,+$7820,4;04++2<9.68,,"42(82*90/5-7%+/)+2*./-3.,0;20,03.34,0)72.1%27145+?%3(04(,*353-7(63(0351127,#75-4+,,"5-50,./3*74*/8202.4:.>+7*3.,53/-8('8(9&5,/29%5.,1-.**+3/.4*.&920(,';2,-+)%2/)2,*/-+)+%'+,2,1*,/8*.-&1#2&1431>6013)8-)765.,51:53=39+:5;52>8,84;305@465<:=28->8<2979:4972624-4;8:7-<7=72<=3;9>859C85-8574443:55:4>8;=,@8772=1<555>4>4:88,2A,0/51::76;;-l>-1@8074+498:B1876>448023,745;31144-37=+473/-7079682-9+49+//586<*445/5726:/6.6:56-:3510850604<>24:5:67<210<.12141271.-/3+330,821,7))4.28-04*4..0.5)1/+52(216004.2-3544-.628+673)0)120;230.6),0/35-1/9/+2(.81/27<-853.,;55,1..(13/.75,056,*5,1%90*404*1,654-+.4+'.*153),05*,*3*:/-82)5,3231/4+*08-24+)+1--)6(-1,C)29)<(/%,.1#00/.,,*.9)()10*813#+(0)/',*(*24.2(31*3/+*8#,!,1<.<4123/=++102453-,3139488)<8.3306@81B=54781;@.;==A=:=38.495;2<82?2.7887613483<<9>96@24+>971848<;544,23270:=6=3<72=8455-5<2<09.58/<(769864847<6h7:37-8124049492.0>632/A,54559?/.@10689(148<:663=43=7714=-.634+><66@.:3)92-(-/5B%9+*55.3<'-/:1)62*46.69=-2/052,0+5%83-(4&06/,2-4.1164345,*(08-/./23-*/$-&,*.*1,7)6:-7,)0:756248/.=+46-271,-&004-/-&.,3+0334,-41/,53-,*5.6.,2/)82(84+4*650-13$5%0*-4-,=+$*+*.,&)1-((,+1(0+0(3244-<-9*74494639/:1(+,11514,1<831461A?;5:9G7:;<:3;@7D88=;38?67;=:86-48186=06G4=>:8=98A3;><<2865623<91;9B63=(=4,;@=<91A6:=@0247A5>/689>A3%;6=6<-i40F/<4=3755<4-./,3<2878//74)67117A1)7.1-,-8238,9/825:4,;6*<467.0961788853.:363@416365>2:79*.<13:=7;0447606*;5/4205/146*0543:)4-/-74<77,2,-594145,4!@1736-914/75)8450A0118474&07'302352=,-<59(2150/,57/'&2211,/)//:$46$;)22+04:*1)%5,4,)09,84(/+,61,./71-;(-+4:,6,&-030,1/3/,0+<02/+=0;=51,02:4+>&--81;+.*+:48+)31'/3-,6,*15.*953228;1(((.,)4/11.9/.0*()(&!4)3!6.'*(#*%&1-)*)-3380,7:50544195,?8.5,)<1.;86=7>387.3>431<:667596888:2)1:(2=A.A<<4A?F+0<376;.=4?-4?5<%2<52566<:885+29501617E149.+@-*=52:.8=>151.8?4<4,3::<;:1/5l/5D37=741-87H3?398)<.7+.93-)8/:064;76672(3482;2/530?B84>8343B9211(3.84:6<-61/1742043,:-12,419282985<:/23520:247"683;109960-,3752-%2+,3418((6.182363&7*:0/27,6+12,3$,5!6&-004;+.2-63/4+,)(1,8-,4H1/4:1/-.202,49.7-1,*311@-:3&/-)11(.6,)068'-2)$57+0-9-4*,-.(5,36:23,+6494,1/4+/15*(+/0*+65<+./'<4',-*,83)/...042.4,/0,-,4,-!*5(0,&3'00+*'7)8**.3/%.,0),)%+'/4.)(*7(#3&),$%1)%$)--462---149450'.+1;6,:.>2<40>2.=39/<962<6<84874;46;96<66G3@89*8;@4D7858-.8C7>:1<15-86A9@09543=80D10086;:<1@*62@8<2:4-98024:.:9286$+/3@t71859192788->31=545908570,54145-&42146/,;B:45-57/8/71410-=20:;76-3B;71857=65<.;/52@64/:09.1453,26F==;*/;836.510:/-98513.0<10;197241312@97-=+;,/5/.#4/5/091,5877677-(-339.,3);1.6'8.1;4/45@:*<38+94$+55,-011409-481A,9*551(,32*A8;+./2850408131-5+-3/633/5).25041*-40291-3*-)1...043424,17-02-(.*'-01+3,,)*1/<+/42628*.5.+(*1*,-.**0.1-5*-4--*1+1.3321&01*-,-!,..3,.,+-'+-&0 )2/@06-1.019262081:26A7C95*17>8@8D9<8F-?999289@54;=66;>1:8565796<754124?4279@61>=?A3/D307351<4A?B:<85<=-;/:6J:.291-82;<409528568-?<+?45%2=528/>:o19:18640:69<<3.32;:5?56$7(52A363563>12255:3:>,1-55,72;3:01//-7)38(2094--3<<221<6140>6259><4)1262.;)/-=*07135:;,4/02128003+<44(/.1,;,;22*742120%4=6+42/85/1(6:4644-4+;98:188)85;;;5/8268014661184,:32/5058)/7/6340=*10.=623A0,10-3(@.1(4,10,24-)/,,691//60'21-1.4.),0/3,*863,:011+5/*42(**-.'*604*82.**66*52505-..084=*01/32,,,4-7*)42/2 &!*51)++,3$&,-#3,)-%3 .)6-:00535G'0;4123545.6.8418<544;,<:9D2:59;439BAA9-9-<;<7E29>E:@?BD:648?A::605+:=:<3-:14A'7B8;5<6<2$:8%884:39=84>:8=:.:1954?19@:7269=6@>/z749;@8517@.7:663C9:66-586>8137A=4445/;.3703909276.856%=1-9.41*5/0:23727,7+03383517:324-=/<2314;<3*45702315;C551652:,>75:42..*04-=784056:.41<1605-/.*5668255:>562442+;243*47/115,4*-<765"/258.,.5061308(2(81+8,3(-/36*D,64206()6-@/.+30'62/78%/6222)2)4(/01/.84&49+;29164.+42)52,A4+-'39-,(.%:,745/-4-1,+6363.-34/.6$2<153)5156#33254.1808,87'24-2-6)4110-()*,0,+)*'&(7+-0%(,(94=8351=3184,8382:88,6-368D1?:7;;5:84>69=8<9;=896?<=6A45@79680989:@6?836>@8A8941@>1>@><5=2>*)219?6<39?;:=5=;4.<2;7>,>7=9/71594:1?32=:;>76921=4?`C4909.;;7883?768=4>86438378+911-9.9139621193;,-24/27307-4<8163,56,304.>,579-7*487*382-./7891,514A;791-4545/54-,A.B885,5/;/=9(=<1681395703:&1-,/0:1-)5-(853>.1576,,/.02362-:7*5.4;+=(//4154'6+66B25*7+..066309A-8/5(0(38)24.3:241698,32<60**,/.86/7-=8-20.16,,9*6),9*6(5145.951--4/.8'5(8)*5-/2,,91/9/,1/.02/->35545:1:,8;1,(-+28/)31,&8,/.5.025,.52)&**.)),0-,/2( ',)-.*+$ -')$27>21+)@+14.4;-&4@(-/<8/:05252558BD::.5<82=>5=@=7=8=6>>@=28/79>38@@84===132+=8>98<3;9C;;11:4=/59859;*>9;1,A,>32;t58E,7)3658>5;/.+8;2094A;3.63;,<;3014<39/=*071:,9<7=<94<;=343},1@=280/-2938+:4+4<*9404344*..05.;-4>=4895,5-92B4-732=335,:D5542.2*:60860/864&13.4<+4=.-44+6743:+6:+A=837(066*542+.!6044270.&4*9,(/-6.028-<,45714.502-0614<0-4),368,15:9/,*88226(465/.014-6008&2+/.6-280/9+).,.-1(*201*37188(2/&952212-3/-8121;,302,/8//4/5()15.4(3%618-#-,7-6)4-1).3*124&6!&../%$.8%%/#4,,(0&$(%:4=45895/:047;6:35/5=95234<7@5:222<3?668:66>0:4@591879-@AF>E1D65>497=8@74@2@7E49<<5<3801,E4:7<7D<.<2(;;8.8<02/:6<<7@..<7/80891864:=5525>*;2<,72`9=401670?:8486--:995IA<0A-4-,8-6<169;/98967634;4244;7<43@8)8F4/=/,964754;629,.3+3:129.'2/4;856)3,":575,.;3H-:6.*24121.9409*016-95)17*8620:+63&96,5*8237+9022233+./>2/-*3+.3-,314/25-5318/18548&*.()13*4,3.64518269,.3-..111-:#/625/0821-,0&4,+40+(7+1;06'61-$0+6,;).#*+*%'1),$-%%%0*%%22*.829:24:<02,;8245;0/,766@5/499<>6@D;9:=C58:91868=>98>=A4<63431K>=7@.=><24<::2@3A8486F@D6<1A;<84<=/2/::6@35:;4;3432@9D6788-5>9-1,5<584886<:B52<8:x35;5;858>31/J4;528101<657471<->53:0J363;4.932936579524,77991@7=<16(<(=-7551:2/7662/65054101753:2500/7612--31041)*2./047.74105495(*25416412.8<0905,92-84719B.;:82>A)=<39=3:4:3181:0A3;944+:;<5;201<@.;27A985.54E8<<2@,6=B*<,54527E/-4536.:349:6;5/=8080;.4+:3/<,024=447>51/6J1:-7-8415F3<4904/9-<:701-139&585.12.3,3?4940.38),=3754.11:8=458;5;72;221-5.2/6@&;3,499-<52B1><12,(4;80,3002,8.,422312(3'5/)40-85.8.75564-6/5216,4()+:)-58096$7-+=<.2*2.132,-1-,2,418*23,,(;05/8+).3,*6-3.2299.2-5;/2-1/2/51-',(+14&,20*+*1,,....%#46*))/(((()+6)*2.&82489<37<87?+40887(6=3<=>,@589>7A;9?=3J398A3,18=48<968A8@D;8:59@<=6-=0A<>06D;::8/@;:@0=71,53<1:7>>/CA;><4:6@68@5;697<4;4;;49:00;y4+134-847<5::5731,00:84589281>A734A/425=.BҺ(6914:4;3936/06@40@*;9-;.<->5-24820:25,8>1=4(;.-#2/85+83>4.5.=3.4D.821.0552*?46-,41)0378//,51.81<47198;4<35/85(3:(-8--/:<42*.(:24,9-551+'<203-610;6:3-.>,25.92,,2;*0+/,402)1//635:-21-445+244270(,15,+.,&//0+/5)#0-#),1716:547>1791-<011,5:8%1=95==B361A26@5:;:<<67L2<:35=54158;9198A:A>.71<1<5=1>;<==4=946<4:@=:/9:<7B97889;AE9@87455:775,9@;;2+A9B52:86.5@7<=95459B0l765575:3739:7A7,8=;491A.4=5:83.;6@894@:26647:;=6-7457+C-:213C6017>0-3?0-1:7/95846889746=21,45;<*;351181)57);50(86.5//2.<6?+84053>252645.99845,924/3*.A185873>+:20/,/;?A-1507(1.5%.734;1.<:225.14040/,33300642=315018#?857120)7254462//885(;32&.,/5208;5,95'*,4/.7.2)>8)/D-4-927-/11.*58,858/;0(//319/<+::5&+40610--,71$$5*'/-5,.35#)&,)(."4)4. */+---30<,@196,821:21754/;:;,B<2<:193>=6?6A60;/?=9:;@6<@8E<@776:5;><-;4E?:249-6@<13=298@@06244=:9=510:899F0=<96*9<=@8688769=2=-/=<8<1666:823C3<5584(5<257:4:148-39-124=@?3;3//:84379/504EF29';8)<5<8A011-/99:99299334842(/0497<-74.563@8%-4-29>:.96<9D;E83:;<<=?14C8;>6A6<99AB8:6226787A:8<=8;AA0=2A/1>66<>:223?C5A*4:284A859;?5705<16-(;/022>>8525>57<704)-;.92)58;޺61162E.21/1281;587/--492/C-8+;@C13-F892@F.08*B,*4:5-;139-27&8(-:2*58+64666847,/:,/*8266@D6-4:')40154//8-;50,.3<717(1:/33:,8585;:,16.*894/33/;-48/0.,-4&:258.4,050425;68;2;*2:18407);7/!:3.42287.4/356,)7-2+042-465-7-/:*60*8,,1.64,-::20.(/4/,>-*--"&04$-2+*&$.7)(6'01*-1:72:/146857='0275@1@74/1<40>.>6/<5<<7;6>8<79=:7;5?<;;8251<;C<6<47::>&<:<8:=<88;6A40:457.?1D7=1898->>/82=76@:5@@8;3581>8493+=,5-11:853;36:553E7;<759:(E6@(5952$21868652684<867-<@%>8/1;1863-46.2893836;4:77458225..4-4<4(96&9767<5128;;695608311<01:66+0405:53.-98+06,16+=0775153:544&?*D/7-0.2,-6427546=234/.2488,<3-70@4455-321857:/:62,::.:=.04/=-&).342,/0.85;6,606406/,4.;3@6+7.../2.8'5,/105+.=2$83B58:)155*400%4/82791<+6.7+1.-3/0-5)/40780417.5&.7-52;&+3(54'1+)"7*1-&/,./(---'-,+9504.,8*916;;25:.28=;57756+92.85?/@2D7=88?=94<:1=7B2=<6:C@9?-;@93A@@996=496/<9.74C=.@65A74>81424445;>;=8/3;:<;5G3:B;759=6<;6<4351877)5<4594665A06610=78742<62=5:>78,/08/@:9264)D6+2;7--0-86056:55058/57/26(721-64.2<38@;8:>88@;6>;@>3:863<88<55=:795.?745;,6B;B6=99:8;3803@34>:B58;=5=C6:5685:-,=G55<6;44:32,D<34@@7?74A875?7:95:3<;7:30=~372638=740=/?79A/9C>6:66;<66C64A865.585;8,13<8<.275:;;5E17<7-:0468.95<<8;488489':9<29-;@@23:(63+3;68/12$=051831;5380747;1/,0A67:501.6127:<6-45(<6*$4-1925:98556:.9--@-=:3.570.=09.10425<>8,479;34614B4)61401/7-=783+628140(4/4224825.315-.)3-2808049<0<35)*-2-1>!520246:1:49:44-0;4;)==*/246.0)@65%03(/,8/)&15/4/7/*9*2034.+&.("4-$1- .+#-10)4/1;6=345:14=/8:76;87:5:3<681EB868:7:;=858;9;:;?8<<9:O49JE;:>9F391<4=<3<3;-=@99>:1>?450B35;158>@3;==846:564A/E78<97;F5@6F9:12718>5=4@5;<8)*:Y/=9@:3?5716;E89<=261:<5?5(676616@>23929<517;898<@;@<55=9/@4:E2/>09361;:;2>529-75*7986723,3278354-001*/(C.C0=615'23,9.964-+(+.-607):@:<4-,,17830+,336<382-.(9,./567/82/24758019/')*<1/2,45/)6046*23-;.-61(,3128820/81211)0=/186(.91664:(5'4);.8810,257&*8.30,+3(++)459,$,2$-+#'7..(/.4)39/@9.44/72:86=9*698497A<>D>B9?D;@<;3D>8C;<3;A:9,3?4<8A=:>7==84A>8?9557:0;2::6;=@6657<@=5=5F.D8992<@4=43,=3=6>8<89D:8|6;296?3>3>=:===434<(6=<265A:87:3<=:F14@5877+:--;:75138);.4073==+?783;915400<0:5*2.4>0;?52<:65;*462)485;E)19.81=5968;.:=:,7175&;=*?734.4:/127038?52,-747691571549,69;24/(10;1==46015219.0(51*5:32<,/48<*23.,,70:=.,=5-<,-4572957306486=4=406086824575-)5854.787<5;8,$4/2$037,44/-5586803/200,//.32424,+280115395A):,324(10@.((%4%&8-51'()&3+=(-)(=51=72=.81461?1528*4=196-78581B;>=:;?;=5C649<=4@5A<<90>7B86=9578551D8=96;7;81*I<<69459A8;8919:794977/1C?A8:8;6?5B68@<>6747<:3==A=>99595?=3996:/_5>77:-D59427@>C42;<@52B4:4B24;5=8=43;128<81:@4D62487:;7-/;1;C1==<:5/,976:/:8944<7526<656;*5<6247-<.7-:/ߺ=1:?06612:3?45438=959899;C020<09@2;1>35:6;414.5583-51:7,36/+2*@558.1>3/*//655@25526857.@/64018,38,=7;8.49889.4./,<;<,/219)6/293:46/04,06*/5-01356:25>,7&4@26+1-6:56):/625.(8166/15-22+05.8845/4/.(37.2.8-8*6&1421%-421-<,2743-02,,;:.41;18:'..0/)%+(0('00 '#.,/'/*./%'03<228505<:64762=58///;0>;6,3>1:02@8767A;;4<9<<7B5CB=797B7>?8<:9A5;8DG44:E:<1=8/4-8559=415<740:84@:429B2C8@439/<8;4?E5y/01=309844F8A=5C5C<@1@78=2645892A.<985<59:2<31<87A850259;3=@45B3=29925:,5=499/?<,;2545<<65?&.9A27;70;/>:17;/3;4/44)5.5538.431C.8B8254+?2:579008625)B/8-/@64>?6<301;4721<3783,<6951,/1:,55/-61:@1,6515=;84,.1-<5:7/5,823-*.,:0:82116(-8112(=2814;9;:04<@1A0=6.=E89<6F>06:1??<>835B3A;1B==6:47<1>>B>@A:68B=?4<;B:;A;96FA=@>;37EF75BB@D9;5>9:<>999A51B6:9@97=32483B@48/8;?4Co<:2851A>62/;4F9=/@29/C28>484:7:-8=12A58659/C5<=4<,964>003/>0,=28561)>389%972534+<1:5583;8-;3:%34173316.52294>;8;.54:44;443<754<'/5;<4774715:58=@378,4,.1644;--643><46/4;?46E/,56+6034=91@';4:26057)6-0077+)2-=446'25+3056+7/5424,85;74010D221<2/*;41750337<3*@/75152;7273:208/138:236+(<1(48,.7(05440=-1,23-856-0,4+309/(/(35,,625,5B.#-7-#*)1-*3('43'+0(+(7606*=08G=@?4>94=B>:889EDD+@<<0A816y<9B;95988971=4<59;5:.684;4+8=;8.<=-:=<@;8>:8H;-<5:1A>B,;8998483<04/5@66;940<41:850A;5379:3;?42649?(418ܺ:C7.4817.48970;45864<.,6*13298;,;389/1,:/54@-54<9:/4712D8AA+4-7;<98=+;03.4@1A6,545#4652=27.8.950;1.544,0:440603-83.>6=26771<-7*4-A431;7/65:.884,4,60788.3*60.@-048-:<4:-20*9;.-;41522+6+,<,>884345892.:56,>10269+54-6)0=5443,10<8822+.9!.*5,0,<*75-5#2.**(7)+:3*01,3),/+1:5:945.D6204881878<<<9@??=808675B<4B359<;8C:BB3@69=:C@444;C2;-:L-54;:;7><385:A537B64<;B697-h?7?B;:94@=9:A<8*5F>=D?72459074>B;484E4;5&C-B41A@.@<4A9D>>?>6E(>788=25@7420@561:<3<6.888=9/531=/695,:3641:93182.0/4812:2@8);;-7<-5442F-1>2880B00=$=53.9A>70,/817=9950*1<4-602!9:2;;1<61-85,+9@08--5348@<&*7:5/>61763747&J335=64850893%*:+-.65301:+8094+422C)07(@55A98?7@=45=D8<:;A9B9;/.A8=.8;D8:*7?49=7<494?@6?3=:?9,57::>:5;140<0::88;=A71@=;=E<55;5N2=w==6:=0381:@4;8757<8C-D5;5/7,:8497588+6<686<3901,25H25%>>2*1:6B986/A2-=3<<713<4/147=;2.-86645.73<1/0:45;,4,*2-039<96E19+-5<6<68.>22/22!755/0846++8.,5>2108752-+8404,264,?45;7B0914*6;.3-%5)25+*<)6,/>+4.1/5465+-;5-6027846.(/2-3800595-8-7,=)246316-*54,-(+*17)-06$--/0.,-)4$'%5&6)74>1:637884-=:5<5A;.8=>7?>7C3D1@H67<76;==A6?;?;>7HF3D8=4:B7;696?-.;;+8>8@G92897486R>C6<4@708g9:A;9E0D3B5<::,80,:=84<33@4;9>0<3<>?4=5<035847<5:08;8=20558<.86A<57>-76:1:23<162,*6?9.+6/=84-/:2666.3;;3;+58.;42/-7;1578.,485A99+605838:2212,5824;264,<8:,829;8+7?2954-1124@&6*-3C692,81<7//5580-*876,,28;./:4;7+)606384,18;8.899355?$51<#-1=:0:.6+45.=-;59:95,0,+89'3/1,*1305+-01$<8:/(9034893065:*/2:.9+<3,0/4:-0.250,:,-.149'58261116.:3#07400",42+<./2.2<411.-,,/#9?<8,;<66;D7;5225186<988894B1?=;<:A=8F:=8297@7:@5@==@A<7=<<5A4<6EB8:B5D9>:;7AB6<9D>A8=4<;=4>-A78,9920548;=8>959?4@;489592:=88;79185C48<8?435=@7898<=098@125>.7(@837;:9:@39<5-<.1;7355-<148>@5.755;>(5941=4>D19/:160+572/80/780:,8.65-0762.:8;07/.52,1=(25.404566763-0:05-2<1?/1+2<*3*2/7820=/6<.:,466;8210615.=9-:04:8)02472>51?+-38101(142/;6486441059$;8',/(<8,.-6/.+)'+0.'2(-(7 /+2,((181561088;D804-A48988036-=H5<3B<99B9L>==A;@:2@B1:?4D><>:@>95I?1<@5A8@:A896@6;=69,D,=96:>:D606@3:B<317=9:8<@>6;A:>C6?6488:A@8A=::4A;,:f>A5E=C=6F<:8<46?1;84<:44=475377:8>B43?,:9F-@4<6A8=D3:@=?7=29H<:?=B88<+37/7547838>;5735533>70:38-81@041-58.8<;87<52621A&;.445-.2251<,6?4.15;88<64:1890>;8A@KI;C?BA=@>4D<8@4=6HG4<7=89;9<;?04=*8<8A686@;999@678<<9E05@20A.J8:;@3@t77D8>49,:==CAA;89=7?9/<95;<6=95;<1<+:017:?>885:.D515+809.9>6@84<533/=:=5:15E:5:9/47<>96295=52958132<484A<85A5>30A3@5476D7;89->.5<>877<>9A<90;:73:1/5,4-18<=<+009>/,<48-=05571549/:2-1688964;,569302538=074<1=51413@3+3604=;>6,;/7637/655069%71,7(/23618*17401<.9<+&6*83;20830)<.+.55=1&/71,0)53050-'1)4(23#(%*-))/3403+ /544A6;0@16=4::994<=,,7==>@=9<6;;<9A@<:@8B47AJ889407=L?6792@@<=@D8<744975:8B:A>:>9:8=07==4DA-761<8?8AA?8:3;788-?8;969046:>Ce<969,56;<0<<<-5978.5@>22772/2-44:80@9;:3L:8AC84.B4:@486:><5-@,78647916B6::=>9<4>:D225>A187:4<,>449>*6>21=231=2:8D2)5=25.;4<+/689569;,?55;:5,;345465675%4>05614G51480)052/335/49/14/,6)9+=4/5;<875..2/4,865-6<3352;,19(;0.4,-563.1=03812)388<.9231A013:415+12+23=2:'5)519:540-/11I5411<4E5,11,-6.5/11.1$.-12/9;1/749,5+01124-1'(-,!8).0-673#6"1997>@./740393=<8<:8500?95A<4C=8@=@FD9=>9=;<88=<;<<;B::<=;8AB@9>@<;A<>28635>@E:5C<;A;>17<238<9E@355@6A@<<8?.8<-569585<4828<05=42A58<65=88865<<5;4<53A4B@@622,9751>:.-E4=/82190/4>>59<;:5<3818<=76.:;292@:5-)?2?895:90<;3@;74?/2.<851088::03?,9.685==:8/40>6636638.1<<,>15:06<41;58,A,28-4449287-@8943<1=:17+03:;-099338*.+<914/<:@1,4=;8;174/341217/0<-5473),13225E7490-//562,4-4481-+77-9-104.3295:12=4>=,D93=84,7121=2/07;.+05-*1+-45..'*-0+/2+(-*21,+4/4!6*01@>413.?4)<8<<=/9942B8>/,=-A:98;8:6<<>=A@>@<<46?@:>:<9EF;=:>@C@89F?>6:9:=4;35;8>5<:=D<9;<46:7;6C93@6=C?7941E478=C;3,<38>C?:.@<==A;9@=8/0:59H<8D98>9768/@D44:=-3>:B794998=::;9829A;64-=218=453;=494;@/:910=1@58::@64@1+A;?7@;;6<)@7:.08.5=);681:>4K98?93<69<*;.:35;7=1;>9-0.486<=7096.,192:5-14<66;6,,:-/714265435+<0504<31.342=1518243+21812.41.;#74/0:73/!94<13(324-8//091=7.-1947+0,)*.%1,-01-(0*+64*+.&1744<63;6;39898*;49>844;@<3ECE5N2>;;2;;@@;3578B436:8<:@36;<:70288<1649A744;9?=76654:81,88>94@==6B)@985H>/76=>7J5@>;867691:69-1-*;620):3H<85;A94;01>82<2;8.6;089:2/<68-3?58B82876@<4596)9<261@2?5;.5:,8,)75<<032/<0;9835/,1?838666867:=4<10F1<24855,80:3,<-1:89722B>;/,:8<983<08/'5,0<-B)=06*,9:C66,0D)=24-5:.<22/4317-54@<1=+114:>,5,36431)28*:03-67(.2-.'%(2)-",7 -40,-+@:9184=@8<;B39803=?4/-8971<36?7=>91F;;8<@8C88A<93D38?;BB4B2H=7AE8@;<=@C19<:;@>F=;98H30,4A7=@+>9CA68H58E4DBD2:6->=C3>87D5D4.==I@E;58a4@67A508N8B=8=2:83874579B5<6=8=<9=/17=/98:<8B;6767>::5C4E=7774988<35:794;3<645==.:15;78>@J7=;6?5382޺50A95:66:13542020>939.8=8015<6;*3.5A-/045<947651>698+=<3215=/<-A/:5@:;2944176-2;45400-241,3357(93=;5997+5/0:1A78=6.8:0572@=9)0473*15E'0882:<596=*44'34,==-7;5@59517),911<24949:52155<21/9363-01<.881:/4109./12240+5*@8.>(517662241-6(050$.7+,)&/&<0.2+10++277;:2=89=,82451?2/345296@82C@I8?8=;:G2;9<8>@B=4@9;D9@C@FD<;=A47B98@:=<84:64:1C938<553D<@@D<381GH94@7+;EC8F0}7826<;C88?44P6C@=80<<8B:68>293A=2;<54=8E44:C9>>892:==51>7:8A;4:=6@=6A;0@8@79<;C0K;74;/=*@;00?95<06:5367(3.=5087=<04315646924186*5,5::54>83=.1141:5:?-81?.;<68*55.16705451<%5/2?5.85/86A+77;:62429-96619.3;:4;6<5/4$/+21*89362482=.<5-/,76;331:1.,87(4==1072;9847506-A+9@,95423*8D97044382)4:+3273)/34-6932=2,6*754432/0*,)6),+25-+%1.31+3+,-+/12,3+&--,.0+5526>5H=<>14>:==598,=>;0<<05A;<<8<95<<<<<9:3F4A4>9;==BI9C==8>:A584D4D68I38:@>B<>=>8D>48A:9;G;6;=;B>7h3613-9=89A@.=<=2689A4@CD)918:;8;<75=>8=68C8;6=8A:8/1E:/8H8<0=;8?:B49=4A826<87):>4F'477985187445/::;8$>87<:--95<871:<4117065D44<3;63=9:58<=4;395?+6;.=46,9-398;14,9/:7:.=91>@8,5+>/=,0947914-A27:5=678,<46D-688/>4789844<124176=/,5::=(4444@69.5?202:/49541;488::609/;<):481>38)<817>.=-1=659/4+=97.15'.;92:2411863764236=5<4AC=59@G3>AB>5A:6@B:=9E?7:=:<>=D69>4BF8<760?>;:5=;8983=4;>67G4:885:7:494<6=3<@6>(=5;9870>>34:<55;37A15890EEA0<0579<0;,/153-50?1683<06/69216'3811.6,82@4854;4*8=1+5:<::455*8/B=;23-752387@:D1;+29570-:55<578082459,668/21.9-5883145;5.406.569:4-46<6:580/41A-8)-*(<)-05211(9-804*2-/$0(,6,,*+(<5:<68:,<8=C6=:39246?55@>48D>5?:@>D=A@/8HC=?==4C;G25A@@<<<0?F?;:C:8D9:=DC/=G3:EC?A=D@-@N>2HBDD9BA=7<>.CC5A;*0=38:A75F:4>;44;1D@6AG2HAu=86?;=,750<@5B3436:6=8:A6?=65=49;>4;874555>+6B=2E@DD59.@348G;=5<823=65815.A38;935:866.;2=:1B8,087/869.@==1874>4:@;@5H6/168=?<6-35:8>64-42;9<,00A305918;15779345:.:5886<4<815440=45)8?663.84@5,61A;11744:22>8<9.6:62@4.63;:5;2A<<055)>2:4870051@0:46A0:2?1-9:1?<22?66138<2-78678,91;331<,)0:8*2=;3<407;3,>11<:84,964:%4318,A0;422)3>420.44./95'009/0"4+003&0-.)+--=$47=;@=2<6945D5898:5?D+@;9A69B?>J>C>=;3<=8CC>@65A@=72>::J==E9B6:5<65B:G:?F8=8<79><<86AA5:9<@45>J67C@:?;@A8934CH<<48<@<6505I9<6A=4D3;>555Dh>926>>CC6<;3D9D=<@*?:;;A8745=/+<5D<@773:<>9=<7380D=C/2@2;357=51,/C<3<2>55;3D)C874*76-2;2,E-3209::5136:406.+A38)1360,;-403245<;H;3?=-66::35(333+00:27850>2>5%*<521-/)1761,34.86)35;11/124-1)'36+&//)=(4*=?<522*34955:::B6/71;:583?=A@@5=<176@E=23@;F@:ABK4D:B;;?D6G<4;=;<;B9==3>;899>5>@56@1=8?>789AF:D9><9=<71:9>;44:B7<9DBA6@<21@<5:f9==1B?1;:?1>@HDAB46:=<37:596@@>/E$51:/6:33548B5>AB@C:4I=5=8;8F@535==5B:418:-@=7<;@-457:7>-:B75=);8->8;40F07463<;9.)3;348:3@043898734<2405,2E5;15<57618@292<20׺1,10>:D05/4409988/<0./>:08.952<5:/,38.*<8:1/452567<823*2-<5@3A628)49>13462+8,4,80+<1+5,+0795.42B0975084560-923686/8-871-4>339,9/2531.21%71,(#-62+--.,,0&+*0.9265>2;9,,A6/@5:979:618:57759>>;A81==;4EE6AG9>B:F=@<4<>B<6=BCAA=C>@>:I<2@@E:E<<<1<<=E89995FB:=<9A@A@@07=9C9=4;D?AL:8<}<;3=444=9:A?A;;A82@<94=8:;5>@:87I><9>8<789?3>;96>=5D87;>8?6<53=3=<5>84@:48D@288=9>73:ݺ7=8B6:<8=8669<*2>=9<9;3/9>;3078A<<011?3:33D9/858?7392930864333/5=9CA856787<22/%>9<65:27;\@9<88;561>9<00@5693098@89+3=>4=+F999=-:4//5:71/<54+1565<3@;64/8:5454586345/8=<94/587@5/:=/=2.2-0388964@235@78;3574297C36652B,-8;516,<@<06/:3<353)1,3.30A*89-968(42*3)*./-..3--39<1;>55:1981@4;2E0>=4?+B+4@H=F>;?8@A@6E>6;B;B>=AC8>:F8:8><164>>@<5CEAM6C>A46C5?8:A;87@5?/8D>4=:>=@8B86>J9@8<4@9;9;;:D84<>Ac4<98<<6;><@<>4@;::>5E?DBD=@6>,426<9851989<;34?9;/26>;8:FA;4=A1883:4B5848423<6B:<;/8,C936D4/;?05;45=58744B;27632969A1973163@2=/807:1@7A4=<7<2<0;231<:2=<º<8787<>85367667638<57;,860?.58755>:28349.:74818>56A1*A284616.,7?58569=366.@524<326*F828<6@949:6.3;7:<584530=.26A6625<>.;63<9460@19A61.03441/56896<959'6138,)4(/),/)91,6.#:250&28>=268<343B9=9696?08@:>85487;9A6ED89=:@I9DAEB?@?AA<<:==?8B1G=D>@469@E:B<8C=8L38A4?9@:A<=<5A6DF8>=72<7>K==64=4=7@D6?CG66AE=<;8D<=855=:2<;;5==@06B>4;<;/38Ժ005@>6<>7824<8;36=?1<:6581EB05?.@88>;448@+984:=7>0;>)6;65?5<,?68+84;.1:92@1.9>677=7::/49444054<:6=56-2A5<):6A83:8)=.641:8838>816-<834,<69,=83@64,A8,739>1045145,;<:..:02526<041:5.6>08,.8/:)=48.B.<9:1064424>62263:91/D755<151.8>39;;3:<10:(--)67;,-'534-.30/+,5-/(,6+5:4:5>=9;5<@8>:H84A;D7F=5A?=FJ8<:C>3D5BEC3Bg66B0::<<<:@:L@<@648)?80D<,9<-B4=<:59A4H>8;?8/::>B4C;C;9;6=C>=61H+;>-B8;81?/<;=48<5=+<85?.14=369;5B)71769<=B6<-:/71699;/411>54.27964.9:98145/40923=224@.=22;2:5<@;:1@5*9(D6BA;):639=-::04;6943:5:12=7@<1,-72261<36;5/<:?,77822;=-<91.:1@22:*655744<41-5);145350;069*248A18425172,98;26;;..14865517/<6408185.3;13-2>8543;:+@01,-;,224,-,%09-*6*-,,$-46.2/;=>5184984C5>>=:68A5:@4;86;:>86AB>97@49H;E?8@J>D>=:@@>F=@>94A89BH@=@@A<14>7>=/7:A:>:=5>G6=77?70;4H3>8=<58w28A6EB<<4@<16@853CA8=8>4486;-8985:71=9@85;883:87A7<92J::53=95>>1A1?896>=-,1<1<8E9757<,14=85A<50368@/,5F8>:6:79?1;0<>:,83=3:898577948758<*;;=;686Aú?*;23:=82121:33<>/9*:4?,<:73583A5>8?99.4<66<1)4;5=5C4213655:630;A09.4@238>03943;8/:7273:2-95<3168<55>4B8:;8<::;=?2>85;;8<>@=@;5B9BJ;<=:D;9:5@:;=C=9>FE>:F>=C4@I=14=74CA8<4:19.DAF:8>=@74;C7?9<==4>67<928=@E=C6<;=?43E;@CD<;7:8?D7<=3=3><73D>@?C>4@C<8@66@8@4=<==<:895:8535=9H;9>86=A35@988B2>==<5<498584=208B79E>4686.46=@59:?>>A3<:?135C388813.2@668<670<57=8568@I*@<0<6-(6465:-1-85<528A,7526<=/<87=/7=1*638<026=57/9:5<92?167515:2;0=164991=5/11:@23;>3>*424/77;409:8:5A7<81325<+20-3228=3;@628.1C56;:6<5/623/699-<.0860/,31,2(,):-54'5/-0*55:>48D8,7=5@=5B7;72;6;356>7<1=:@FFE?<6A>DL<9=@A5ECF8918?8:8I5BL=A8<7>=;?G9;>8>@AF>I@8DBG=A9;=98:>@?8=B9<@@=>4D=:F/9>4F44?39:96523D388344==;7@775C.9-=67:C9881/D=88<99#6627;B8:<443:49/;74<@86:5@3.@/6@;,18;<<88:2543-0@4685:=34<;164<54;=64,4;9==695=57=9961*;=6=:6<23=9@9508:=87/>344>465<:0:5231B:1855:97;>8951B1871958:8&<=<6:=618.;5D-?4,816<,A>.4.7+)99215*:0/916024/:+;,5()3:,4:451,3'...1:77=9/@74A8=0IE5>.1:68>>:>=F:9=BC6J;:AF68D@>EA@EAA@A@@0>;4B=>BE9D?@>=49<5=<@E2A>7>=77081A=F/AG@@EAE>@?I=39@>@CA8;<<864n9E<=E:8>3@:7F816D=9-8E85==84I?965;42<9;E6?>9@5G?3>HA7=9>4?57N625><12A:<;5;<>498;75843E:H2D956A7A=:*;=48:6B872-96@=61;<;3<8>E8:7384615=0@)B@54937@96=/>196254-,:6;::69-57-6/45?766=0408:068"5-46;:015*4&660:5(24&45/41.>/+(&/79>-9:5:;9>=,25;475<4E<636:FC:7B8<:@?:H9D::=A5B<;7@9@7;:=F55@78;?AB:0AE8AA>x64?9<9A<;;5=>;@E>6=9B@D=:>7E;5>>:D97>/=0>A>=<545G8@8B95197=7?3=5@58H69499A69:3A>5?6G<2:5:;787;@?3@7@479<2264=8@56>3=D<>8<8>6A:-AB>0377C<.9A:556:>=3997<111GD068::=C/:?<25:=?3=3F9)4;:69;6Һ59>9@4365>99;7+39<<412A567535<:8218?14=78.650;81=45;=.61:4/:7?<+>:=4:07=A9E666254;8<5374:;3=8:5;6<686?461535<1:6;90A9469;199;8<8/;@9=2418708@20670:2,0,/4+1)0/3&-21&+481+4,158*25=:3?;AB455B:637;69:87A<3=<9GDBC>=678JG>7@?4M?C;=DBAE;<@5C8A5=<=:==6@>7K57?::?8@BCA49J78<86>==6<>@kA?49F=8A:895CD4AA:>3=1?;5A>=@@?;6IB=7C=?<96TI===A85;8A@48B>5968A@A?8=65387<76>7?@ߺ7778:E5:1:9AC>4=:D71B1=@G659581:64>2555@:/@?$-826651604879>77>8;:3743D7=;4;119=,D<2107+<<:29+=7.5=50>/9<8=3>B.;550=;<299/<4850/=52:644821?)1358:3::5<:@D70861:12016993:+E0<8?'5;8@?2-6>@79=6:<97>5AEC@?:=BK@LA4>2>B?9A:@8@C6IA868A@C=<>C;BA=BG@<.@7C<@CC:CG6:9<864B6>6><=2);:5,69<91:D=@06D4A95;697?5A4;@.5A<76406189A<60+6?<58A749(=<8848,678>/A406;9>)9;863?45;5,.<-6<92941<091;1>=5,17@C37568828=52581967=9D5*:)82;5::09593:*2->9153;4?83694538=80*(6:59:6044,&55(-1/-1<.0+-343)4<.9==7>8D2N06=<285A@A/A4:@C?;=B?CD=?@FD:=C?7::H?>8DF<4>?ADH@D9E@ED5<><64D@@?=B:5A:=:6DB3><<;==4@>=6><>C<>>9:m@1:B@9B9B9:;89:=A>D@>1;(E@2F6?:9B7:/B;BDT<5C<8:0;=8D7:7H375::>3E<<8>A81HD;@6348;@2B::8963@8*@5E71@>0=-=88.055<<0124122=36/655@.8=A498/)4=444636.2?84?2=42=7@340<9-:78;764@/6.;.;9&9.;*8=8466?<@:4.453/14,:6495:<7*:10850/=595-92261.960:28--1.67-=:3935,+6.)3..4,23,5/4-)*4=4'97:C87-64B>38;B>8>/<:86:A>>BA@G5@:@?>=8A-EE<3FH;AFA7H;B<968@:787@11D;:BA<@9=<8F652@=D:A<@08>0>J:@7C59=@=5HAC9864;75:98C>6;9A2183=5<:7>.=B5=:9=92AD5.;6>832ۺ58<@G5<>98C=?B:83<=6387:6>5:8<=;=*>/A@:9<<3<2=4?6?83=2=8-3643@<86@8;@80662;4/414A;3;;=5.;45@>9:==7;@9>861?91584=;0:+670>;67936%16:8:6<9<:9<:2=-2285526=16-;;375=<6254>3=32>6067.63-9/./0:0//5+//0.0,4.-;*8)26$-12,-795?;=B37A;:2::098A@FD4@4@>:L9<7E=<8@>@D2:>6H56<9AG;>CJH@C?C=NIIAE=@;9G4B@;:A?@A;AC58@DFD<@9E;=9G=<9=@>:?;E;@A6@><8t:@8B7>:C4:F=@DC65:<>>@6=:53:G=D;F<:6D;D;;7B7:<:@@82B@9<<?-A;>8-0:=66<;;<85@15179<>@78,66;5>.358I000<::49.:;,66;=478774;5@16594<334=2/1865@D76819:604-697<8<;@70;;<7@6647:91,;9<887;;?6:4<@:,5?20F1525950@45596696/=;<595598868367.668776=02.72-484<.79/923=7B(95<:194.565.33--32.-6%4.7%0+01674>&84-338=5>83<<0B7N9BACL4D:>=A@7:?@<@9B868G:C>@DB7=ADH=D88><5:8D62?>@8<<33E4>3@H5C5@=;?=H;;:8BE@9>/;3=E=3;@=9C=969252>+4<8<9@45;7@2/815<1=3;49848=:,:4>@<4<87B3=4.0:8B2<;4A;8<9=65942<196=:8:8637<@4<;8464851;>?08=:435C5=<;-4>G57076646><*@B9.514;6<:34>7888+50,4-7?:7;9?<027=:35/-005.3?.092647115%1-8889*55.24830/D66>=<<6@@5268<=9;?83<86CBA@?FA:D@B=C?4L>3DCC@9;6DAA9-:BCB40B@<=E@<>CCK36@=A@8F8D@AG8MACD:@g@D@;9:6?@9;@=D>>E2C=;4C/2<899498>5A=<@D5<77C@<57<96<<9>7@2F>@=D99>91<<2:AA=4::=>7551<19;5444.:;63<096<191@/19679A3A?3B3ú0B5/B:44886B94=559@2?2>96>84*?6=3:>969.7.;551@7:379/<=:6;<4B==3/8/85:@:<1D3?>=93<:;650:5069:16.=67-5@A<2240A<6/@;96;19,9+589:84492595<58@3.4:,7572,=0.)3191):.02085)//88351;(/2;AHB0;D8:9;:9:=5D>>;6@H2>=F:=D85JM5E@EQ>>D@B:?D8EB8CDAB9@G;DCCCDNAB08:>;5A<9:=A8A>8CGBH8@F=BA4@<2?;EF1BDA1@-?B7<55.<;>;;=4>B9B6A::68?>8<;=A87<72<@:5EA8A7?26685>>:=@@776=<31E==6A798:HCA?3:84:8C546=?=@<8A85<@84395=:4:4<1=:7?4A:7@=6/68A:;4><4>9A5=7;486<<9-982864;E@9<.@8=B41@9:488C<6A<+==8768A@2<;E:A98;05.7;60:?2766285=494943=3<5(6:8:=:<5;830=65A59:(0:2,418<;<6?9<067842845958<06=648,>079310=,9D4/643+#;0978A,40-<0+2)9-(229+$-/+&1:8::;96E8979A06M@=A>J;=BA?:E<@?@?I;H:EEEHJN@7>H3=8D7=A>?88=?>F4E:8==8B@B>@?B?99;<84A8>AJ*<8K<@6J;9@@=4@78<2A7@4-EA4D2?==:@4>8:<5<:356>;);<5:>3:@=787=@B4<@55H<88:E2=:2<4::557433;<00D;8<5@2@86=8:7<;C=2=<@9<@7:;>67285@88;7C@<9@D285B*9595.4D::8;;1<<=97A=1@;565@1A4A-5;4:6A.5/752A:5-?6+?@8:56=341>86=:43:3794>4<74@83;)940@+7=4=,3=48:6546:8.A<72229-1994:9=@96<614191:D692740-;-'03-.20=2-.6)270>=9>A<;?87@1=><82=BGAJ@G?;DP7G;9A=EDD7?DC<5?FHD@ABH@@>8ADJJ;@IBHBGE=1:B497;>8=6=DAK>A7>E1C;MA29DAHAFCBI39/<<@9?;8<4E:>@5;A4>57<::D7>855:9683473574?8B8*@B3=/?=69D66=1A;=93+G;BA5;83B=;B1?=B5.E6A39888=:>;:89?A89A5<9A:;:176633/@/35:=C@=;88A5646@=8=5F=629@A;680=5=3=8=4=98.<4494537@9:6=5A63;256789;;87?23.@80293,:5?588+42@1-C=2358220962:10079+60978047=3,836-+-1338/9.=-/1,-71//9-5<@:58@==59;BBCJ==@@@G:>I5@9EF=:>?8EDD@?8<<9DJDEE67:<9>=2M9@;>6A.@@>3H>@8875M;i8@F;::@?@?6=HA5G?E==:<=<=;9:=AAA<6@5?97><=G0H8>@:=@775<::7=6442<<=E:A=6C;<>8:<;68>=;=A4D66?.@?5BJ=D:.A>:G<7=7556B98=<=977-C9?9.42:4929=2.@74<=:6:;=5;;B@4-99*A@;@24;=71.78;5?6789;E34>83>1=18<1:;A26F885;84<;20:F5>=1@;3<5<*51A83J6838;/86,:46AE31D147;=-5-7<:;-:2.1<+08+3!2,51..34>'5./7>@<965:8@8A<>(878=9789F8C<;1E>=8:8CD==B:6683;G8:J@8?;=@I<5C?@FE@E;74C8851>E@8>C;9>=5s<B=F;>699=4<8=:B7<8E;8??G>.<=855:896<5=7-@A7@5D8198D@F=<2F89?<5E=9<80@96.<8;889=C<6;1G39975=C?.6;374=;:A>44;1>==.9E/6E>;<841C@4936695936:62?9<8>8=>80@5;B.9?8741<81:=>@597>58;8>4154H/6;@93<;@<9=*56967<8:9<=8><6=<=5;445@7889E17=;C5436624488.45604<88C;;876.A3=@>4;5:96758><7;48953:>0A=<4110451,9/857;'13142'2:2*)-,9.=58395A=C;29@>3?::4<:A:H75:ED:@=@@:?HEAJ5E;E9>G6ACAE=?J:=E>4O==@4D9=@=@J@CDE8/<:8FLEA>G:B@7=D>C=9B=GAk?@@>86:GI>59EE@AKA=6=:;<7<;38DBD=@D8:?B@9:<7B47@8@=;3>6@8KDA;5@ABF<>:/4<,9D?@:85>=D7=><:2;::;6;AE@AE488B947:7A<59;66=9/:?5D/CB::9:H449C6=.;=:<34B<<=3@H605=3BD:<<5:73>::<2=?>A=21@@@=87@B,3;=6(3DF>:88907>278465;2;9?=3D94C:D:?0<66::D/69=A:8E68?5827?.5?57<66@:@84528>:9A39<4=5.=2787;6<<578<8,<3/8>C1;4=65;38=<,44)3956G6.4<>8:41857;4A983@41548140512).60/509-35.523@8=@096;AA759<:<:78<68D?B8A>6@AAA?I;9A4?KEBAFA2H9E9;B;E8@KDD;B=IIG<@?4EC5>B=@FA@<;EC?<@C;EA<>E@7>?K<<=DA85<@:;9:@CC7=@=CGE9F9@7A=<=BA>AD6;6AHA=9<:B=EE82.H@C@9@;A97==J;E8AH1IF<.:A836@<>@587<@=<88=>5;E9=<@77068389793C,G9;5;:@:4452=89>05224<<38726803;.4>-04:38943-384<*4)867@/3585@3@=L6D:8?:==;FAGD2>@C>HACE:A8J8<2<>;7:>8;AFCFECC?B=@@8<=@BAA77E@DE>BF=:HADEB8B>4F<>>9=FMD>ABa1@AB8E=?8@D:H9@6BD>I>28?CA<3@>>F8K=62>,8@=5=<,5=;>0=>;5=D@-B7A6;5967C984:B;>7*7::;D:8B@03;D<<48;A6988;?6AB=@@:<>E0?36@?1D;6<59D>-486)62C9;=6:D96;-1B03/1=9:3881*>32785=96;6AA0>05518(2;3-4/382848*8/04*,61515@<398@=@D>@KC=@;@3F95E=7;>8H=DE;AC<<=>:=?;LA=IJ1?=77H4B;D@FDKD=C?68;:B?A7I=@@4F>97FAC4?C>?<8HC=>BF:;3@;F==@B@A=;E6?A@N6<:>1=4=-84?8;@GD;A=EC==;E=;A6<<7=G3:7D:79>:=E:@190G=<<@1B>F03AB;5?>=O2>B<:50==8>35B77A85;65>8;=9C24@19>99>;A39<846?@39<;4;=C;=A15;::<2<8=;8?<;<<>2>;:6>2.=47<2D?6989C@.;<895/>81@306==7<99<=4@=585;88+6<;-5@=A,50462;515=528:=B3-24><).=C=768<,.24423=7D4:8:079/8B<044525+*562<3749)<455/7;::?<;59?:@CG:K4@;<0:<@5:IDA8G/EDF@9FB::;I7AAA>?DH9=>C<@F?;E;H=E:JCCB>@J6CCHBE;CA=LA:9Q9@CE?BA8E9FFDI?<>6;F:8GA;E9:8@ED8:9BA6:GE>>6@4=BC<=C3JB;7H9@5D==<649@9C88>:L9=@6B->E5A>6=AADD???4>AD6;5?A6<=?4@51<07<;22<@+?895;A:473>68=<9);?0415K;B;8:627=A<@;;:8B8187==6=C88>:8>:389B694>15/78=6=2;5A4DE749AC78E88=74547?03745-81<97<=,>=98,<(1>:/@:.9@65-5:>)7//65),1)-03<(-.,,361904/0+,(8A@753;;<865>9=5;4A@6A7=463KH;8JACA>?<:=?FD4B;DE;5D@>:;B:II>J=@?8>I;F?;CA=<<=1DA?=B:<74<:D;CCE2:5=8:=6>A<44-8E?4E:C.7D8==A8>B66@/0==>3B5:9'3=9<=6;5=D<7:AA;>1=:C4.B;5<8@;84<<7>6?;7>44D:HD<-69=8<<6D=@4;3><;496A<;F><>=;-6=<:B27G5?5<;9A8936696=46865086=0>49,<;26/?;87A1;609657@?5<<989@1,/;<1B<878;6.=;.>4F;9;5@5-8927455/B288206/@A<6A=J8AB?@<BDGAB;>CGD<4@:C@@HH@GF79>35=IEBFD5?BKEA;IB;@>H5DE?<8G7D>EBGA<@8DF>=@=<9;5;BB8@>7D;D86:@@;B@><;@K2E@AF:<:<>>2;@D8D?=;:H9;8-=A905AK>>6IC=59FEE9<@B7=7>J@<:4I>@=8:869390@6=BA=?B;B7=1:85@D49E5>;AD5E343;=5<=C<7:=F<=888<:98CG>4==-8:@86@A5A4:E5:D8<8:599:>:8..7D8<4@;.8A<:53D698:5<29;<916A74>95=2@.>:6>876?A97C84D81;-;=48=<4A2981@:@1;<=B5;H82:GA<3;8@ADH9;=BTDD:?HD@FA@=H@=E:8BF>=A:7A=B@DE@?AICBAAJL8EJF:IB<=AAI=FD;NC>CHDI;;5=J/@BFAHDL;CA?CI=8AHDGG@;B=>><;8@>B<8H7:7C@AA=5=4A4<<78586CD>6A;A@D:<97A6::?4C4A3;:?><,:;9:5=?*62H6=1;84J18<:D8<@=@;<0@0@=E:<9;5=:>;8;/@64595@?@8@87A:9@4<7:6<4>5@93=@<5:G14D8@@<5@1=?7H@;57?5<0;04=98:>;549:7>60;665>;H8@46B61=595<)?9<578898750C98>=::4:+<264:1:47&98<2507.920114&2-5,,75=9:=E5<78=4A@=I98:829?28@=A88FFDD+H>99@IE9E@CD=IACIB8EB8J>@@8B@I7D=AIBA5D>:6;?@FH@<@DKDA<7C4BB<3JAI@=58CD<6DE,D:E>BB=;6::>C8D?@88>/=6C17@8?ED>2>AG3AK8:=>;<;6G8=?:;AD458@;,BD?3F;<@?>9.8AE9=8;H==MJ5A@==8>1A>5B7B7E9:?<;,7<=6=5C8<3H>?4D5?4>:@60:=894<95A;:<5=1A5;D686A<72>;B-;AL;-@=4B12:;32:90213:B.<50*@><;57@972<7@713@>687471A<73=9<56*:8:=324===8>2<>851.6,,814835/=.154--6/34=86984;=5H92=?E:>.H3G-@:A@G:I@7|7?I?=;/4BA>7BL:AEB;<;<=CB@D>B7G@ED;7<:<;=95.AA;=@:==AC@BA<=8AF:@D5;<8A>EE@C3@5@8::;C8=C8@4>/A3D?5B190G/;:9:85A<>>9D:>9:>08D8:8I2?64A9@8::8A6<8<;678967;:+8A1=<+9A35<.=:+4;8D)1B;1?C,;C:77A>9==949K86<1=@176614<:6A;;8:@84;E=80<@-85=75<@9A3::@<7;@;>;9.;3:+'65:11;6<8<41(3>60*A8-/)7/0)59-=L>CA8A;-51=;=5<9?58EAA9=A=GEFDBK?N@>IDH@BFA4B>=7BE@<@E>EG:C98IM6B8FFA@BEL:A>B9CGHFAC=AFM:BH>05CC87=l<9=FE?F:A=>@9AB@84><8;B@A9CC=6H?=A57>=G<@B;3:A<49@AH?89CM8@:F:<5ID=D8G33@8C2=C4?F4@9D<5;D=9<<@A==:=5G<;6A8B663ABE;@;?.8;=:=@@4<;C;8EG?E?A<+68>3=4677;>65@>0ED@52<@=>?8:71::6:>:8=B:=@D/@>?7>5B;:<,:A7:0<826;8>49E48758A?@B92?=39@<@36:A567898:56371998D;1@80>1D<7=2;<@>@2@-:548:88B491;0A4?8-<@99<5>@<6;7@=9.>601I85?33<>319;18<5448-3/76*<+1526,7?-5.-835C:98=B.A<8A88>3DEBGCK;A7:HE@BLC@:==6;?<=@B5F<>>HIB5<<@P55H=B>9F>HA49@;=E?7@49<9CCA:C@}A88=BAE>DE1<7@3:E7I9<<@7=?D>?=:8G959<@A:>>@496>I516@=DE89>I:?8E9@:.H=:=:D<7=@=7?55<,><6C=8;B;A38?B35C6;:68@==;B<ʺ49@-@81769;;47-3:A;76@2+;<8-75@6<=0>85893BH=878:8>/>37F434,4E3B=195A4:59>6:664;25=B477,=62=857734@57768<18221@14@5B:4?>576?=@G>E;E<5B@<:BL:JBKF4D;G:>C@D=G8?FG9BGH9=CAAENCF>BF@8F:A>A=M?>@=8D>5HOHC6?<0<A?;8GDGHL>LAHABDB4T8C5E@?=b=@DB@B@@>@A:B8C;>9;9A;KD@@FD@:?89=EDA=9<:A@@B?D.F8=835CAC66@:BC?9=:@A<>?F5==FOAL:5827;7>==A@;?>:657B>>C,DC<62>6B<5<;DG>5F@Q73A6?86<08C@/1=E9:9-659@8CC7:A=A2E8G0BB@9;<>;A89@B>66=;+A@:;81=/=;;<726:;;@6;5=96:B-=F15@>88G8919@9@/B-95<>5@/4L4?71<;0,=7><8><7H:8>-=5826<3<461>988894B88382587948A:588>,82;8A263;8;42,0A85&44*/-6=04(<@@92D9D8==B;<-8C5;@DE=J;DP;J;B>E;LAGJDFHD=BLIAJBA;=@;3?H=E?GD@DED@:@=@=BDEI@EHE@@EBC??:IDAF=C?CJ=:AA>JF<;5D:DI@L=@D>=5:5>>@>;93>D>@ADICF7;6A8>J87;@7@C46;:AH9<º6F76>57?=,/8668@G<=,98:D68:<8AA@+74658:7A?05A9568?@;9/B=.?=4<;22*6<4B5;=8@>9>>4A49635278994@769,/35-15)+=763215501=5487:=;9:<@H8>@@8>8/IA>8?9?:ECC;?B@F:@=98TC=AO@@79HDA>1I7>>C?8BMLFG>ABCIX;F5B:ACABCDFH@HE4F9>>D?AADH>J?D==DC6@<8@A88AIBB@>HAIDB88DA@8B@A@;5=>9EA6=AE8J;;@7E99:=D;7AB<9;>BA@@>>LA9:=<+>AE====36<<>98:47<>@C6=:>DAAE7C6B88E8@<=175@<7F?5C>=4A==@2@88A=<;<:=3?5?<=FD41:>4E71=248C4>=<<585=<0=H>7D<3<69D=4@C>789C=(=8=3/E5.0<47<:-5,F?9B<4<66;5C;/7D:=586@<;4><@=6696<72>8*@568C:4@?/B<<8=8260@(507>:'97/5988/:.<-152/C=/29?899:@C7@5;:DDEEL>>BAAA>LEFHI99DC@>;K=D=?MAA<>8=6B=H>@LJB=NBJFLCI;@@H>;AH>::FDJ=C:D?AD894?HE@F:87;D<;:@>?@78D;HB:CD<===A4=;;>:>?88EF<=:@FI<7B7D>=FC3<4B8:<@J=:B48I8D8=97BA:<=:@1G;<<2=8B8C:=:5596A992<>@5:<1;=Bź498@89E8C=2B6C28>?/=5;91<3@=<8@:5<8<6;A=;4E<<6<::4C=8>6=1@=E:<>5B49<;?991;9<0AC8>=6E95;88*5<5=C9994?68:@9;8C:3<8599<54;9C-:'+54850311-34-0*6.*1-1.9<:A4=797+DE80@8@7C>8@?6CF867D@=>@A9H@=PGQAJA@BEH=J@K@88=N?CNDBRD>;DILDDG>F0;5@D4G6B@@DBDD>@C>F:@=@8<<7;:=@@H8:IF<@G<>.@4@HB=B:96=;=5D3BAD9BS=@;F<@>5@8AIA9B99@7C;?7C=B=<7@DD=;EA6/945B>=7>;98?;H=:=<8H7AC>A/D0CC274M?7>BA=;5>D=536?8=C;9C8=<.7959M<669:4B4<1@FC88=9@5;7<64I8.D5;5<9A4>=?7=93=-199@.;8?8<=<3;4@8D<5:08:B>6;685D=:6@-A48<.39934A:I9:<3>6A3F?42:;:1:1>4<=82623?5>69376,>38-5019,<-4,28814.231/-64-5FHC:=1.1:9=2=DEA<=;>@IEDHDDJ@F=IB@A@B=C@DF=?IBH:FAEBIA@LCAE8<:=4E@BB5;:CB6H>=@E9;HFB:6>E?B?EA@;;<67DA=AGB9@==@?<BG8CHF7G9HE4>K?F6D8495=8:6>:7AG42=8B5+?4<6?8EE9;6ID4252@AA::783=C1?8:=;@=6:8@69:<5;597<<>915=D;=6DD84;:>@7D@=5?4@?E<=7?-::=;747;=9<<::/599C<6?1D<<89;3?6>8:9?:=71=3<=;>8<AE:EHCD7D=8IH=B@F=@=JALAHFBF9GAC@I@;ICFDNFCBAAE>ECKDL@>D;>LABBAFAODG?FC?=9G@HDBxHA?HC9=:G?FEG6IA@A>BA:A;9;G9=?;@9H>9:ED?9=6>E7<8;@8A>;:=4@488=0=;;98>=86287@?@>,E591AE=581C<<;@.>:=94?.B6@?284?7@9;575,=7FD>28?298<2=<4A93=645;AA1/267,4,6;82/87&+4;5/,5/132:F39@8<3=FDH@BCDJ:LA=BGFI>8E@9F@ACFEMCEFB9ECEBC5@B@>=AIIDDBF37:8IH>?9<9B?DICF>8;E<@4=:<:=A>;@9<=@GE<>5=>BAD@HE4<@1;I>D8<0E8G;>5AH?@=>8BD78-A?39D>=7;;7@D5>:7>AA@=<8?2B:AG93=A=:=139.B85A9787>-3<5D=C8492.@2><1C68:7DE@9F7?66410<;4;5-77CA=::66E6?/9?@1=8/:A76@02541;9.;480<3806,1+950/016/5282E>05AD@E:2A0;7<9C;;7E;@DC6>L>PAAD@@R>J<>GDJ8L?C@ODAHHAD@@C>8EJF@F==?B<>B@DAB>8=ECA4=:CCB@AM=<:8>J8G=Q<5.B<5:@>A8F;D:>ED:GCDBBBA6AGD8:4D9A9<4D-:=A;798@;86>?48::@825:5=4A;AB=9:E;F9C4@:23=AB<:A5D<@>B@;=0D9B=1?:?>@>:5DBE96<591I8@0B>4;<4B97=>B<@C3329E@AF18;@;=C@@2?;2@;:6HB939?8=<>53?9:7646B692426E6<:?A5?9+9;D9?4@573D8:1-90-63;6629.8145+6-4<.418A7@9<99>4F>D;CA8DF@HDK19@E:@@CKD8>C:J;G9I>QEANFLB?E;GB=>IA:DBIBCL4I;@C?AF?B,9D=G?9?D?AEDKH>CB:?4@mHGAEC9<@>E7:SBD8EE@89CA@I=;=@=F;<4<;BA/889I:9@@CD:AGB>8@4?@@>B:8D<:A?=D5A5J@>58H?C=@A4?D>@:9D;;;D>=C<8A>?:8I@:956@@9C;;7>;1A7<;I<=º49?=8<6G5@0>=947<59;4$6D<;4@3;53:6?@9=>>84;H8B;:9?0:2::C;:A=9CF<2?365;8;:>7:9=->4::9FC;I936::;=38474<=186:4=>=0<9435:64-012/:/;E4/-082457608EC9;>@FIC:=D6==@@EB=6@=D@@CAAC==Q:@BILEI>=D>C@EBF@HJEC;9E=IDBL98HHAJ=F;GD@DBHH8?CGH@KN=;QGIJJF<@=?=L?DFJJAFJAE9Lk==BL@?I8DC@;C=HD=F=E8:L=/;H@@@?A@;CB==D>CFABA?:9@3AA>L1=;7:EA@;>FACI?;99DE6ABBCG75A<5;9C6;BC=;9J0D>AH@>;88A986DE@5C0AC:6:I87674Ⱥ:.>=@6=8;5<>C:068<9B<1E97D;9:@>;>0549:9?@869@;7:=<>.>B.D<;=A<4D?6:<9;@K9878B005977=1=>;<8:=;9713@:8@)>1?=@@95415/62440:-%430/196,/8=:>;9?BAC;@FEGQ;:BER@=AICHHCBDE<9@HL=<@>>@E;KH=HBEE=O=9@9<<=FE9=I=EF7;EEBGE@<>:@@E<@==::8G:@=>AD@FC<@8=<;?4FD?8DL9B=?=B:B@E7<>5CHC@<<5C6==@DB>56A9C>5:?:@5A;89>;;=8BE8<=;?@@<39>09@@:9?8D=::F9@:;.1@B:A<76BA@75:C:D84>4C8==888>B99BG8:D<-8=8C35;:6:0246;62926431,8364+41@,7>B8((4A7<@>4D>@BB7BA/C>?<76AG8=@:LHDE>FAED:R?=I=RHB>A8>J947CA4EBKEFH8>AA7E<<9AD8P<=DB=<>?D@;CFD4;Q>CK=8A6C>>IC?7<:?4޺==9=@8>>=:K@<=?D:;;K=A:HB?@;=6E><609D=79>JF;GDE7<6;DE5A=E?=4>7@7>9,=C?6;:<48?-C5787@9DB88>=F5>:D@@@?@=A@;C6<:4?A:9965A@5@87LA9@4@87BD<8@>;4@>57;D=?;D?8>;<488@:>=882D=;??2=8>@<2B.4570438)7?,>11)68-80.3844>64DB89?895=5F/Q9@<>F4=IEI@F72BALDEFFI=?AH:N78AD;>DK:>BCAMKB:JPBQRHGF=C9>>CDIDMEE8HED:EIH>AkG:?DIDC;A95:H4C>8:CL@AKHA=GBHF4DHD?H:D=66@K8F77B<91:FI<9A7:K:7;;F<6:?5C9897?@81@==D<>/8C,I;1@>;:>GF=:F894C2A5:7@@7>6>AA@@:3@>2:6=E>:6*<@5G@;04><89H6563@:<;;69:C9A292/@B:=@<9/;64788(1494-79;8<49,24I;B@@@@:@F@D>41;=8AF84GHD?CDIIEPABBEGEIFHJ>DBJL;@?EJFPHFB@FEGCE7C@@AEID7AJ@EEI?D<@GLGFJ8=?A?>DH@8E89L6;8B=@C>@>E>=;HD=C<=BL;BA=89@97C<=@CA<8BO=<:@DCD@AF<:@A=@=:DC@:@=D84<=E>8?;87D:==D8>;D=6=<99D6<988;5C0B7=C@>>5=C6H8?@:3D@=F77<8-8:67@><@2B0=;@B><@:6<;8E?D3B80=:<<81@<>;??=II@:?8<2,9(<:=F:99<8990=@::A387(08*7-8<4-5.;.2<0,,C9>2F7A@DB;89><@=@@@@?;5I5@DICJM>HAH@=@8@@H>EFG@DA@HJDIEBB@D=FAFBLFCAGD??IBCB?C@AAE?BA:H>CHD@>2@>E8=@H>I7H>EP=BGJEGQ9EHFBFDH<6;JD>NGIA@H=ADE9HCF>HBDDBK::FKA4J@FBBD<:HAAC=A<;DAI5<@48?DDC=;A<=A=;?F7FAA7@@<5:JB@4<5@?EDD<===:DI=:D5A5=2@>?>@C99H7=>C=;==<8A6D99E5I9@C@:6Ⱥ:7@59408=<=>:H>6G6:BA,:9H=G>65>D?<8CG@::8>C:<=DCD=79G58H9D9<<4:@6=7H5>5?A7@4==CB=<8=<8<9<9I854:A>;>??FC?0=<;85<>89)A:;4;D65>4H:4;953;<08<<=98=:9;<7577348:)234;02;+-8HC@JB=AB59<8FDICBDHBDHJHFC@ABD@;DDL>C:L?;EB:IH=CEE8KDAJJAC>@B@HEAF>@FGBC@CBOE??AAA@KC;=ALDD9AOCN>@KLAD=IE8GJ@BHhGJG;G;BF9C>29>GBB9.??ED===?J::@D;F5@A=:5C>9BA7:?8;B@C=CD5=FCEC>IB=<@CAH9A7BG@@>3F:9@5;4<8=<@5A7@9>;95;?AED7=;<>8:66@=69B7>=<3>2=A@G@68=E4A,;9E5429B7A;;6=664=C=F;:@6:7?@F97C?A<5=2B576<<88<58;6;84<;;008A0;(4/0'756.84.6/98(=9CE=I>@EGDCKDDC?LEHEHBA@=AB6FD>LD>AA>=5A:DDF9I;>;@C>9=<@E?@H?E:4@>C-789:=CDG7@?@;4B4H@G@AG>:@B>8>9483?7G@?8=>9D5C8@9AH5?AE:@DH<186=7DH795<>F@DC5A5@=4@;5B=6;BB<36>>8/9B7@=8;;<>58F8>Ⱥ<98:@E<2<82D::@4@6<5;A@>95B=;?9<2C:C8AB7:F:681;6:7?>9924:C=F@E=7;4C=A96;>:A2AA=;6AB:<7B;4>679=ICE@0C<@G@3=71=8>5;;73@.A878:?;B3B67?CEH<2>/A6B848/D7596<9:-96/8/>9<5<,61-/1414*<>J;B?5<=AF8E>4DD@6C@E9C4EB=FFEDG>J?K;A:MDH;DFQ;EGIBDB8LDFBAH@G7?@CM=KG>>=EJAGAADHL:IBEGFCBHDEE<:9?DDH@A@@IA><<>:FD>LlL<=E?CDI76FCGEG=G:DD@HAD?CCB;9DD=K5D9DDA=7EC>9:9=7FA79D>9@CA:A@KEB=B9:F<5C1:@B=:8@@6>4;>DE=9B94E:E7:<=9CF<9C:<89HA:58>AA=<=6<:5<@;8;8:DC=?2@E9C6:6D3:66E<<5465A:<<5;:A9B8=:B48C:589->;9@2D;5A6:;>,<;EMMHHJ@BB>DJ>DAG=EM=FH;LHGHLDD@AF|8EHF>AC8@F?<9>A@@L@=F<@4JBBGEIDHG@QA;E>HE?H:>>KA@A8E@@:L<23C<:AD:AEA?8@9DAHCE=;7;D@L:B<3CH3:3FAA@C>A<<8G<@@;?:;D2I87@9:;8A:5:F;6>=5F6<;@?<;2F938<=>BAB,D4:FA9ABDAAB5DB89A5995D@>>I4D>>EC>4@GA9<667<@C79A8G0@=<7>;=?8;<3B4FC18D398848>.@=192;:3799<=;1;B=14;4;7,6?67@6844C46.@55<6699;7CG>8:EFA@:PH8@@AA2;G?3IGA8@BD<=H>AAIFAC=HGELHIIMDOBB:DEDMEIJJMP8D:IAIQ2GAADBHCIB>JFEHBBHD>n>CC>AJIJ8<>JQ=K=>8KE?LCD8F0EE6FD@>I@LBTA@AKEDIK@=A>=@0DF@DBC:AE@?AC8=H<=C;8K?BDBBE=?AC6@9CJ6:AB?9A9DCD8@@6=5>8D><;DFDJ:K5@54@?8@8882<8I8C:=<@4D?<56D=;7E=88D>B9>85@;=K8E?D5;6=99D2E;7;<4@6A+>6BD=??@985EA:?:<=GB8;4@?5<;9H>@@::D@5<8<:>;A67.6:58<,55394<16,5//>8C@AI7=>8@DCC5B9II9@C@DIHHK>GFGFFHA@KEDDPF@BHAFBAIFDE>AEB>D>EI=BKFDGAAME=AHAC@CHFCC@5ODH:DLJEJ:?AC@CG=AICAD@:JM<:@=DIDHFL6EJ?C;>?:8B@@B;A@DB:>>=>=HL@CDL7@QCBGAD6D;=BA@GA<:1?E:A?=><<8>DDHB9=CI:A@@D8>=BAF<3>?99=<>8E;AJ=9=8A9@?AA7:A6D<4;EE>F8AE4;@><:ɺ89>;==EBAEB8<;CCC@;=<:;;AF=8E2=C0>9>;566<@E:D<8219DAE56=E8C9>@B=<54;>@A9B><@7A4;;@8<4B<256=<8<35/+4A012;?.5)9/9;?75D8AB5=M9?9H?7?;B;FF@<=F=?D@EN=BAIAEH:B@ODMHJED<=HCGFCFCHH@H==@BN@FB@D?CLD=<<;EHFLA4B@=@@A8DE@D@>K8@HAI7;I@HDD@FGAFIKC@=4=EM=N9I+@E@=8C=H@@8>A=:;?>F>0BG=D5A4:CDF74<>.AB6AACE<B8C::>2I865>28H857=:5D=;2<;F465<:<@H?:=9A=B9<65G<8:=@>@9>?;;7E3@@C8;>5=D7=?8>5<0?>2C8@9:;D;DC?<@C:@CHH@CBFHQFB?T>F@DHN?KCD>ML@DGI@=KDMA;EIDMDHDA>FD>LBB5FI?DBIFAJFME:G9<7CEJEE2KBH8HI>@G@H?=ECBB=89A?>@G6E@?8@2:C:;B:E;5ECFI2L:8CBA9A?@D8===A>=6D/8FI7;9=8B>8@=68AK;59ED?78D@@F99CCD;D3>@D56A:0@A?8?9:A8?79:6099@>4E@7;==70<08>5=5<58@;<.8.7177,.,,.959B;@AG5@4@?D;A@65;:AIBIB:HHEALHDJ=JD?MH?=K=DIP8=DCCRM;ELRCEAIBHFECIHJMDBCK:?M?CsC:<2M8DK@E@AS@@B=IO8EADD5:CH=E>B7?@B;CCCD@;CBDCFEPCHE@M?HBHC>8DB:DA@Q7ECADEM9CD<=>@EG:B?ABHCAD>DDEAA@8D1NJEH>65CFE?;=9;<@;4;:@C6>;>A:;B>@9EGB;63H9D<9@D9A8:B:84C8?A>?8DA@H6<;ED<=@=E;@:9;=:DHDA;F==<4E;=:>DF77E4=8B9A@A<@@:F?:A;58=>B79:;C<@<>6:1I4+<16@:352:<:A?6830260+3B5,A5-1642:.8>74E8HEE=IFCQ@=EEAJBE@@RODLHDDFCG?J>LE=HBLGDEAH?H:=E@@FIJGHGPDHHA>HGEII=>FGJ4WBAIDAC=E=JMA>D>SHC=DGAAH@I?F@=:=5=NB=5<><:=EAE@EJ;=:?AA@EJE:7=<J;@?C7EĺB3:;=6==A7FBC9?CD;G@EA8B8<;8ACAE@5=AB?A<:0I4D=BD;;:9@J<@BA@D>F?.;=64EEB974D<5F;D:84@A65:@8H9@74C589B@92F@>=9A987510544.44;3;48-4(AB=?E;IC=7J>IFE>;AB=98C:BH9H;N@JHGCG:GD>KIHBKLBFBBNLWAEE8DA7;?MECD@IHLHA@L@P:GHDINH9BCL?HM@GI9MKRE@5KOHB?HIR>BD=GBBDBJIJGADCID;=4CEE9MBDL8=F>@R<A>J:E6CD;A8<6=2B29BD3:CCI=@@>@6>?77>85DA@FG>6=C=AD;=>DBP:I5?@:D7?@@6I45E=D><><@<9;H8B@5<:6>18;<B:D>>=94;DBE=><.HB<@:D@/I:97<>A>?;;A=9;9<<:?<;>?;4AEA<==?@::8D88::7=<:=A>5A4C@81>0:<;@=488:::;:9<=4>8?;@3;A+084101:2;>414266CDC5BFAAEDEEB=FILBMBG>;D@9@BANH@EDHDMG9CHMBQIBEHBC==>KJAC@CFEKK@CGBHRGD>ALHAI?B8F@AHBHKA8BIKE@G?BEBI@@E>7@I=K<=<@DBE>HIEHIH=J8C8EC@;;D:?9>5<;H;F@9DH>BBACDE@;;CG7LAA>BE;@DC8EA;64:<@88@AAG<=I?>A>8<2:@>GA39<><@?>=@@CF?A8>ͺ@<@@;9>C:6>B@?E7DH:D<><>A?<:<8CD76@G?B8CFB0886,@<<@2B>@:,35@=A<8?CA6>E59@7=8@A=FF@A6@8@68>>@9@CG8B<2<=5@@AF7@@:8<8A@EEB>=0;:?<4:335794:=6983715)=8919&5@:3@1<.589<34D?=G8@KA@=5G8@FFHAIK9P:GOCFGHP=M=T@GI=AEN=DLK@5DICIE9LBO@E8<8=@;DDB>JE;?BIEH>7:>8HFHJ@@ACED@DD>B8E=F:R99:;>?>GEH@C:@KAII:A<@>AJ;DDDE8DHE7D@5BBAI=M>C?BAACCD9CCH=@=EC>JJDF@:;8=@BAC76@B<8@>A<1A@@D?B=?>B4DDDF:C=1=>;@:86:5=AD8<@AD67K9D<:Ǻ5A7==3DC9D83=9=>H@;IDA>=B@<@AB8A77B@@7<<:<6=>4@>>2B;7@>8<9<>8;B;=D;6H878;4=9F:77==9AD@E@9C758:;8+1;8318:4:579:C46+:9/952@BB?68@D6@=EBAD;F=>?@E0PFN@O>J@?A9HIAIC;RILELBFEDL8HNH6EGGDCFI@JPKCFRFF<@ABJ@@N<@ICFFGGHEAJKI?9AHANHCHH@FHF<>ECIYCCG@QJIBGJAIJBEIMD>MEHABHMA?6E;E:HFC9BHCEDB@E>@D:=BNA=<=FB>DG:6<@=@BE@EB9=KCHJ7O@E?@GC<@GH>A>H87DB56ECN>E>H:>=G>=LAD=D?9@?=?=;B2I=>@AFCAD>;<=>EA>M9=;A??>78B<8E==;:;A@G?=>6:G;9<@5B8@56H6<@@D8DA1<89:;>D@;<=@:;B=<:E<>AEABE=7458;@9=4'0B65:089337364<6-8/54<6:@DKJ:=AE3D>CE??=I516/E;8D2AEBKHSAH7G?EDIDAJ=JHADLHH>J;AONEFKGS@BLKFNCDHH@XFEBKAEDEIAEPEEIIBGGFDCIDEBEDQDBEK:@FDAOAB7LDC:B=B84AFE:=B:9CK<<@@@AA@9AEGIADBFC;H>9F>H9>ECB70DFDEC9A;A5=BEF6CIE>B<>@<@=D=GE>9FD=BDC@?18?DB>@E9<>6;<7==H2<==+CEK7;:==C8C@<:C@>F9<==CFC38IGF@8<795>B9A66H/C8A@;AD0@33=-<9=>5E4736<8=;=<<68KADQ>G:C<;>@@BC=C9G??98E>H;6?IAEEGI;B<>MBGFG?FF>JJEK==@CFHL>HCAFG@DC?CL8GF@>HCDCELE=KAE@AB9?EB>I>HJ;BKHMC6J4HHED@EF<@AEEMGG=DB?AA>H@DHF;HDBD;=:AA=>A@E@;@EAATCCC@6AIBD6BL7A;BL;HIG=E4?H;FOBGB@=@DE;AG;46AC>HECEH?>@?E=N9DF>@4I7E6E4J88?>;3?B6ͺ@?=9C<88?C@@<7:6A9?A9=68A:6DC<;8D@;7@<>;C?;E>@7B>C@9E2C@D;@4B5D;9<58B38/AF4@<7A9@A?HD546<51=2+>58C:C1;+616;975?:8554<:40=1D==6==B>E:@N:E@>5@@HD@@=AF?II<DKBJLBH:IMDP@FHKCPDILDGBGH@FO>=HHCJC?NCHJAD@AHKCHF?HAQD5G=@A=@FLIH<@ER;GD?>DAC@H@DF@@C:8>A@JFIGDC@@LBC=A@8>D>@D8=IA?9GC=:FAB?@@H=A67E9>KB;MBE=7E<@C>F:I:8@9?E=:3F7<<=3R;?@D8GB?BFJI;DAJA=9397C>D@?-<@@>=2D=>=@ED=E=3:B@7;@;A@E=B;@?=D@=G>9;M;C?M8AAE9:A@@K@FE>8D@A;:A>A8<<;@@B>=@2A8@?D7ACDG@:=:<9DD.:@=H=>@?71@?B?=9BG@@@D6M/8BIDAD@FE@KFAXBM=8G@KKIINE@HA=HEHBDIECBKBPAPIHBFAS@FHF?CM?KHPEJGIAEDEGDAA:EB>I@EA0?B>6BG>IF;9HH5=>GF@EB>IBAC=J:FGEFGHC;P9EH9I9J;=L?@L:IEC7>L=FH=@G6S6G?@8@4BK5@IC>@ABE@;=@F3:B=>;B@:>>=AC@>49E<@@A<;AAJ;@47A>8><9D:?F;7ADA:F9@=H:IF@==?BF8C5>H<=<;@8><=;D<@M7::@AB8C<68E>:=<@C<:=C<>@H6B@E=45::A@?4:@>=C5>4@CHC?5;97E744<6;1;==5A;=,<2:;5271*0;BE4GGF=ABB=;LFF@OICN=C@HP@HDL:GEHBRMEFCB8=CAAOKIJFCHD@JDD?JKED@MHDN@EHHE@BFBC@>HCEF@GAl?HCJ7EDFBL<4IEHDH>O?DIF==A4HBGBAF>DFMAL@CCEH>7AKAJH;A=>HIDDIBC;D>>GD@GE>CADGBD>@>>7BCLE:CB8AAGGF;9D:D6D:>JAC2E/@4@CLB;E>><>>AEA57=2=A::D7@8H=>AD;D@C6D<>=CF?@GA=B8FAEB@569DBA;A?5LD?D8B?AC;A7;8>D:<2?<9E96D9HA=@5@AEH@<=E<=8BG@F<:=J=J4>?86>J6H<@;?8;<@=C=HAD:.99<:D@;<86A69A@A;75DC9>F@9=>A@9;<7@+@8C5D82:8E:=*/5>45312359=96=??C3D@CEBCBEK@AHHJG9IADJ@LKLKA@KLDRHHBD;JHDFICH?F=BCACH@FGCL9C@AGAHF@@ANLE;@>DBJKDD@:?CHACA9ED7=>E@D76@FA?M=;A@@86BB@?<@9G9@:5;E5B:?A7?:A==9<8=5C>?=3=:HE;6;@C:A46>B9=A;B>;78D;LEEC66I6<9:886I5:;5;6<=8<=3:<<,F4B4+60/39D.)@3@;18562D@<;E9:=ECL4A9C3BA@C>8<>4BCCAB>FFT@CNHGEJ=OCPBFEMH>FiF@BKODLCCJF@OBD@8J6PABDCAF:?>DHH8ECF@KGIDGJEDNJJG@<@AB9ED@R9NBP;BAG<9;F>EAJAA>C8EEC?IA:>H68BB@AAG9BDE=;DCGD=6E>A@9=?BGD8@A=E0C5>8:@:;9BE@>?8E@@<@BA?;.=4;BC7EC>@>=8:8=D6B<4==A:4;?5=<9@B:37FI65H=8;C=;@?B>6A6525>9@<:?@:0;@;=(BDH@=FEA=@F16E@MAFKL=ADIDBFCFCDBGKDFHCHHBWIJD=PFLN?HHJIHT=JECGOBGDHCA>DGHIDEJF>LKDC@DFGBFLDKAEPC8JBCD<@A@@FKD9?>H6B?;;IFB:=F;A:H6E=H;IBA?DD=>=?7I@LG>FAEDAIACDMD=CFALB08GC>@MC:>GFC>=;D=>@DD2BH@;=>>>=CEA@:<7=?;>G<;?=J>D6@49@98?3F<8ACB<<=@;788;<7?485H41<3*C,>)672=6;4<3394:A;D@9FB=9EC@FDAMJCBIFKE=JAK:BFADDFILMIJA@D=BG?ID=IH8=DI>DEIBBDDIMBUAG@M;=BF:J;AF8yIJ:NQB>BIDDHNGDBFG@ON@EKAIF<@CD>JEDHAGGJCK>AJ̺A?9AHF@@CIJ@G?DD8J@;?H=CF<;7DKJ=@E>AA@DAKEID>:F>H4?=CGF7@@AAD:DD=C::;:6BED<A8G@>;=?@C0AAB=E?:AB:8><57@@@=>HAG;>CI=@>DC@HG<:=6@=IGC=C@;<:>6A>@F@96;A3=:CC8M8C>=6<';GE@I=J@9:E9>=C:FAA:DDD>6ED?===A<@<>@?D85/2C-66<79818;<7<.<45?;=D=:AC>KD@;DD;D6HI9>Q8JBN>IBLDDFNAMTD?QSGAHIFP9NFLGEQRPGNJLHJFGIBLHY>CB5@AADLAE=NBACAADDC=K<.EFCI@NDA=@>AEAD=>B@@BDI>:ABH:E==@A?JA@J==A<º;DA?FI;G=>@Q<3=<@EAC>B@7;>=>;?@@AC8@ADAE=B6F<7B@AA:9;@:<9=44;4>2E<<6O@DDEJJ=CEHM=CBIGM=HB@@MJAGIOHJDGKE=JAKC@ALK=AIsH@HH@EHEKFLERJ2ODAFE5AOJGG7MHF8=HBK@DLIAA=GNAH@>FD=HACB?<>CDú>FHACLDG@J>A<=@;DHJAU?/@5EFHG=:@C7G8B@5E@B?E>>8E=@;AAE>C9H=C7E2>=AC>CHAH@I@<7==@@K@@DBH;1;=ACA8DEH=@A@G7AK@@7<7>FI@28>?=CDE?;F<8;<=IGD7C8>D59>2:6>DB:CB=?:11<<77149A3;<:9469<3B/78ACCDH@ALQ<FJN=BBIDEMHG8FHHAEHKE>I@AFFHDE6>JHy;>=Bº@DIEH7FL8BCD8HFDI=DOL=EGBE=9N;6F@=5J58EH>?><9A47@B=>:;=8<94H;9<3>L=GBD4@@G=>6DAC?<;:A=A==3=F>=:93:75G97K3?<48@CD9C3@9,6@8=7BA<::D69DA=883@79;;@0I54:.3E?8FH;F6>D6DCHE=@;=DA@LNQH@HNF;GED@@FDD;<5JB>@GFDDH>B>E?CDDACFF:>BBADLA8=H;A@;FC?DCC;9CCJG<=FK<>DD;@@DABILFB>;EEF<>G7HCH@EIBGJB6??I;8GA:3@I99C=<@<:>4A4:BG@B@=85C@@I@D>A8EF<:@?92<6HD?;F<=A:F;BD@D;B@9H7AF9A699;:?42:29,438ABAEGB>HLDFGF?@FAAAO/EIJGLAHGFJFNAIBSOCHVC>QGDDLEDJAHMS@HEGFJDBO>Q6PIFDPLNLJMEMOFDLDAFAJIBTE@@>EMDULB<9GIJBJP>IzLIKKDB@OBFA@LACR?JAECE@DG=JEGG5KED=MIA@EEB@IH=DAEADGEBJAD>@JDBFEPGCC?A>L9;CI6LJA?BD=Q9DDA@BAGBMB=7ABL?<>7;G=4Q??LI=><=5?EGA===E79:I9>H?9BE79>4<6@AABCV=ED9F@;AADL7:;:??E?IIIF@I6AED=:A=BB>E=B<4CH@A<@F<7=IB7A?>89?G=HD8J;8B>D?;D=@C=A@59DEF@B;*5J?:<;H8FHH>8MHDDKLAQC9MDBJGJOHLLF@E@>QKGT>IKMAJODPHIIJMCFKMEJICGFRGHN@IPAHCCA=EMFINCJC=GHKEGFBFFEFKMC9FKKIH=E>E<@@G:CBLG>?LE@AI8HKFl=@OI>:L>JPHCVQDFL:FELFFM7D@OAJDEAD@:@MGTICH4CBG94C9OFN;=J?C<ECKG=7FBA>DG>E;FDKBI@AD6;?;O98?E?G;@=E=AA=@G8ʺF8FI;<7EIBCGBGJ>:AMEB@BAAE:I@B98C<1G;?AIBCB@4L3=A=JE8GG99@<@98>:?=5A6D@J;<>;FAB;:A4I:3=8>H@@G49@@C=9@@DE9=A8DA7<;D?67A?9>DB@E8HCGE>HHGCBB=BHAEHBR:??EC@F>CNHBHDH;EPBDEGE=?AJ;O@;JNKJ@:IH>ADDCCAC@RDD@HIILB@BK@JI6D?IA>ECDIAAKDFC>CECLDJBEGHBCML>Aͺ?BGI?@HI?AD?E>FDCIECDM>K@F>HACI>HGJ53?>E:E>K:@AF6<:BL?QBȺ4;<@DCA@<;?F:HD?BDHF@?IM=HEFI:C@:4@?;=;83>C@7<=EDAA;8H6@BC=CG@8:B=@@B9FD<6AAD?IJA??F?7J7>G?8D:8<5IA==E6D<<8JF:?2AJ@9G:5?;@<0DC4I3BDA87;KE>8=69D>55:148905957451;6>39?@DD@@HA<=M=BI=BEDD4@?K5H@HFICHICCHMEHJHPPTJ>LHFAAHFHIMKEG@MHHFAGJNIGBIMBHCADLLMM@PD=>DB=>KDKA>EFAH9ATCE;GRDEGK:A?@@IJ58FD?;N@A@7FHDH?7=ABB=@BIK@BD>IBIK<@HDCA=H?@D6BJSC@IW=CH?DDQ8AH<:N::6HE@A@@A2@DEJ?<:6H@IA9=BL>@=<;B=:AH=A:>@=F:IG:MDCC@>HMB;;>6K9@G>F9<1AK:B;D:GC5L4JA>C@?C7D@9@GHHDE=A:@998EBE==:AFBA/GE88K1<<:9@9D@D:7:@5@<;:@9178@:85<;88;7:>6249/9CBABE@?=A;9?F9GLA@IGDH@DHECLKHKLDGGHAF=EFC?AEJ=>FAD@CHAECE?UH?IFC4G?CJ8B9AJJEAAIAJBEMFL:M?QHJDBEIG;H>FDH=HHJ3JIACCC=LDIBMJH:CBMKCEDC<;MAJ8GD=@D@AL@9G>B@C@>@ENFFD;C=A8@H>DDA=;=F08GB?KDHHEE2LCAA:BFHEEEH68EAFFGFI@MS6:@:AGC:>=:G4;F3B=@:=<8=@BL8LI@:C=6D@@H@8?=<87BA=@@6@IQMDJPBBBTLDGIGIM=QFBGOB?ILDDLCAEDGIKHHFBIBRBFXP@D:JFAQJHIQDIKAJKSKMIHEFPIJEBNDH=MDLGEBJEIJGDIRAM@MJHCLDIHEGDI@IGMDDD@D?6C>EDM@HG@:HHNDBDG=?@DFIB@?IF>DGDOHCGLDKCLBFI@D:DEEH=@@HIICIBAEKĺEAL?DJ<59>LA=JEDAE?D;;:D?BF@E@@;DFE==:EB@@;ECIB0CDC;/96?ED?8>@;CBAHCE@A8@;@>>EMA96ADF@IDF@8;JFJE@:@:JAJ72=:HDE:A>DA;<;5;DP9A:B4FF>9C43C:,-7CB79/2<3>?<9@;688=>>@C@>BHD?D99GFEAHDE8JJ?KIG@HEA:HHSECQE@AHHBJMMDDODHFFAJDBNDH=FMLN9@BLIFJHDJ?EIPDF@FIJJBEDJAI=FN?HDNDITFCHCFDJHHLHKFBMKK=DBPCAIEEGEDAIGIGH>LELLKHM=A>FKHKFOEKJF@@>DMGCEQ=DH5ICBIALCE9EFEKNJBAIFBD?=HCE>DFE>JCG9JEECAA4>@ID=A=AL;CI4E<>8A@B?CFBC;<>8GH<@CDPD?HFEC=<@=CKL?BED:EHBB?@9@BCD@:1M<>?B@DB7EJ=HFB8=D<@I88F<@3=EA?3=2=1;6A8;==6<396-DC46<:C>@=EC;>D=AE?A@B8BE@DEFBC@LADPN@=K@CM9IHAEFFHDMIEM>IJMJICBNF>OOAFD>KGIDHGOIFJHFE?IDIM>TBL?OBCF:EEOIMBCDDBODoSNBQIBI=JPE>QCLELLKN>IBDDMHKGEDE;DA=>CLEI@@JG=@DDB=;>J9JDJ:P>KL3B;=>CI?KDC@BHEF@CN<;DA;MK>/LS@>>P?EPHEA@AJ@LD>9BBCC@?>FJBAE87CP?H4@EE5HDDBA@>CE?3I:@G<>>LAEG:9J=J;=698@7HC@5?<4IBIB?@GE=EG;J;AB?CCL=A@@@:FN@B:@I8?C@:EBE@GMD64C=HEEB@BD9@=BAE<;E;C6@3?J8:1;973936==;.8=/56;771C,@8BKAGFF>BB183ADCERK@?E=NCLTGGEKBEFLVEDJHDNKEB=GJ@ILMT=IHBJABFEIJC@@DPKIHJQ@FMHPHJHHCFAMOLHFEP@IJVEGHBHGLAJLFLJLFEFBD@N9N>>Q>L;L?MI:AGB>AHBJCAFCD?AM=HL>8DHEALH:AHLD=DFB@J9<@@?F:K@=;8KH?EDE7H@D@IQ:κ5=<@DJ@=;KBB;>7>?D@I@7C6G<>9@BC;DC6@I;A7I=@;F>CG8M<=>@E>9D9C?>8;;=-5095;;<4E:=HFDFB:JEDHHNIL@UEBHDRCLMCTHJBORHUKLBLEQEHDHJHGHLBIFGUGGAK@FCLL?RO=IBKLLBHRMJAALIIDJEIB=CGJEOKG@IBIDAIGCEHHNBCK?=@I@H=ALB9GAME>tHMFIAF5IBEAYD=EF?GEB:GIM9IA>JNH@?CFB7BHKGDQ;IDGCBJ@HGDEJ@LC@EFF>IDFD;FCIA@B;;QSF:9FEM;FEFBFATD=CGLDDC>9EIA9>9JOKAHHEK@2E@ADL?MKEE<:>5BF>MF<<@H?G@DF@@@=BIF>:E@CBE@D=A?I?D79ABBBAA7CH9H@=>>;FC?9GA<;@ADHBEKG8=@A>E=E<95@@8M:8@DJB:@8@=HCC>C?AE;?B9I28=@D=D>=4HBC@B>6@DJIDEECG@DPzODF=I>?HHBK@C>QD>GHQPGGHD>JDAEAGFHF?GGKEFBNAA@@HJA7J@AH@=NPIºCBGE@AFIEN8H=@@DHFJAG>CEB@D>EJINCA@FEM@HIHQCDMD@KFAD>M@@AC>C9>8@J:ND̺BM/?@::?9K@@D@B@JE38;6BEC;=:H>K@=BAGE2?=D=ADA@JFD=J:@>8BF@>AC@E;?C?DK4+8865;>=9?3;6?62::89@O;A=D=JNACAEK;7<)<9?C>>GBF>=LA=;=@=CB?DD>B=ADA4?6AB@F=J@=6B@ABFDA;H@EEE>9>7D6DA=<:D9BC;BCC4J3<@5B;F>D:HAC?@:6@8@<:<;BA4@=6>F;H=<>:K6<-46=1?9308<>;><@,E->2=?GAEDHKII@RD9@=C9ICAFFCF=FDDGLJOLLB:GLJPMKF9KILCAJL@MAFJAPJ?NKDPIIDB9GQFB=BSHEJF@F>FDGHHHLCDFEGEPT;DG;8CEE;KBDHKMJJ<>JR=ML?UFKD:HD@JMBAG>HLGGJLC5DE>@AHG8D@DCDD@?@G9BGG>6LHD7D<=E>>;=>8B@E=FACG:EE:NDF>QHBIBA7LAAAHMCCBE@CKADFDCF@L7H<<>GHEDEF;IFH@HAF7;BG:8>9E>?>8@LC<=JC9C7DD<>?=CMAK3=7>BAK>HCC=@BCHFB=FG?6HC=;:<9;AH:@=7CD?7CDD@O8;B0=2798H9;;?64=/7=C:138:4@<:D4/=IC8HEAF=6C=>>AFJ9D7>;HP=AI9CLILLBMADI?FMTCI?JHOJGLFGNLLAHLOELKMDGLEMTKEGCJLHCMMFGBIJL>FMNDN;JFLHOFQDIJEDUJO=MHCDKLFE>RQNDJ>>ALWAFITFNBHH8NHBDF}BEA;GAMXDCEBODI9ID@FHLCOTIN;FIRDH;AHDABDB=>CDF=EBMBE1HDFMJABJDA=II6>CAH@ʺB9LEHIILA>;@J=K@GABGJGMGBBG?BD@<;CA:@H@?FHCF:A@DM>@;?=K=JFC=LAAEB=B>FG=>=FCHDAE9@D9DJHC9H=B=D:CK@EB:@C@88=IAA@LFF>F>D>@DA=>56HA4=02F:164-60;:<4>,67@EB>CC=8MD@OHL;SHJPHNPFNGSKGFENFLICOFCAQREDA:MBHIMI?CLKHE@EELLSAIZAENEHE?EQDMAJHYQDINSFBLDDBAPFAD>AFCDODCMEBIEFLD??CT=AJDBJTIHE@KI@AOBLT8Q>DCJER7JQJGLźWMKD:HFBJIJHJBFC>GPG;IG@@DHIIE=BBJAPE:NK8QIGFHHEMEIBCAKHAGE=DK:ANAKBH@D@@KHLHE@BIA5=AG@6EDA9LNH9EID;IC>@H>>;>GKFκEGDAB>F==@JEBJ>F@E?8HFA@@EKFG?@3E>KAF3>K;@D?A98DG;G8DH@GDA@=C8A=;@H5E:>CE88E9::>N@B@6BAA=3F=>:;-768616<=E=GH8FITFP=UVGQHEBUIFHHLIHLE@D=AKBT@MIEBIGNCG:RCPJFDBDEGDlKLEKLDHIEDLBAAPMIFEITELC>BE=DB=IDFMELDJ@IEHHIDCKC@BJXDNC@D?DHIJDI:NLLID@@>DD>BAAF@:CS=<=IDCMAL@D@CDGDFCK9AEA;A>=CEBEB>>EJCBNFCL4A>E@?EHL?D?D5;G@@DE@=:RDD9DL95BH=;D?BDAG@A:<9?CF>CB?EFB2HE=JJEEGFK99E=DAN9DB?D>?GE9G8=C:A>6MC<;DAC;E>AA@:@B:DH?@AAIBB>64C=4:>6<8;C:B4@?GFH@AJBLE@6G9DDCD>NBED9@HDIH:EGHHEBAE5ICHAGCI@IK8AL@FC:G>=պDD9FAI=;A:EH>=F>E@=:7HFJE2B>EDEC8DMG@E>@B@IGC7A=B5@1A<@,8:B9@NMBC?8>C9ECF@M:FLLGLXSJIN:AVJCKMEBLHSQDFMHJB@ODXAMGBJKI?LMLSIOHEBLKRBJOLGA@PBHBILCFTBHN@M;GN>KCDEIHLAUBLKKAI@DJCPKCIOAEBLHF<@KRD8KBMH@E:QD>::D8DGAH8HB@G>=ECH@8EC?BG@E?HDKG9@C8BBBBBBG9BDCHAIF<=?4DEBH;:F7@:@B>@7GDC@GA@ED==9>LD84M4FE>>38E9HA=BIM>;ABA?@D?A=>8:2<0D5@B2=465D=BACD?HAEERLKMJNHGH;MLEJIS=HBML@T;NAIJI?LIHCDI=LBDGPQAFI@F=B=@FMJEAJJCM@Q>D@E>DB@EJIDD@E:MI=H=CCD4M@FG;F6GʺACB9A>T<@:GDDELNI=@<=8F@CPDE@>@LG;B><@BG;=G@EKDIGA@H?7C;?LN9AAOF@G@9D@BGB>=L:C>8@J:D;ID@B=6=D:AB8<<<8;8814F=>DDEC9;@HIMACHM@HIIHDLGLEKISHEMFKWLJHGJGYDECBUHKJMLHHWFGLRFMEQL@ENJEOLNLHIFSDCCG?DHDBHTHAMBJFEBCIE@DDDBP?LA@DIAFKBID=ABBFGF>=?EFPL>@FDIHA@LBIHAPFJ>BHHHDHGIANE=I@D>@IKLBBBMBGHCHGNANCCM<:IINLC=FCNGHBL@N@A@=<:=IF@JC@BK@NPB7CHFGC8:>@=DIA?:IEA<@CFBM=:=CEH=F8BIC?LBB=<@=>CBI73@=G@F?F@II3B?1@8F<:2D58;888692;598;08:7@E>AH9DCCAC@A8GIF;E=B:DPPCK@ĺMJBR@=CHFI@LCFSM>BB@LC@N<@HJK=HD?VEM@GLGLB@BԺLEABEBEDN@@:@H?>AJDAD=F>BE49BE:ADDD=EMSTFJTPIPDJIAEHHCI@JLN=MILDORDMK:CFCEIJGM@BJCGDCF=PKI?BI=B?IHBIFII?G<@>7AID7I=H>9OAA?@G88FEC>4غERED?A@F=AOKD@O;DH>?LHGJ4CD=:ELD=L?4KJBB>I>CAC=AII>=E:;@CF?6?F<@>@=A@D@=8:7=8=9?>66E?<=@<9<988:@;2C<8L:E=FHRK@HDGOESAITACJFDPBF@8BCFNE>D@FI?=O:>=C=@FBQEQIF0QAQC5GDFF?F@P@E=19KOA?JMGE=EIHBEEJH9JAQ=AB=E;DE>HAKK?E=JI=GQF?>IH@LJ=F>HCC@L=C@>8B<@J@G80?AN;LJBCEDB@A?E9AIC@9@@DA?FD=AE8G<@?5C>ADA7C?7@ED98E/L=?C>?394=7?;<<7<7?G=BA2=95FI>JA:LDAHAMAED>CFH=EIJDE@NNPIBPMHYJSCMMNELEMMGHQRV@IFJHRPFMMOIPFGLLQEIHQLJHPDKGHQLAKNKQGDLCXTIBCSKINKIGEMI@MFRGKJJAGLBLTL?R@ODMHLDDA>EEDSAFOHCNsCUFE@KEFDJAOPMAHGAIDAKPC??FUCE>JJNLGIIFJ:DOII@HIKFCFDDPALFFA=M@TPD;BADDLILN>@@H:APMBMGBBCOEK:D=?FBE@IML@TPIGDF=JOHEFGCJE=KLH@JGE=LHC;FGGEOBSFP=:AHH:HGEDA?C>H7@@D8GC<Ѻ@I>EIHBK88CDCPBFA=LB:K@F>EDJG=DC@AFDJEA6<:7ADHDIGI;H>DJEBE7H9N=FBBD?GAFO>9CEOK8A@BDIG;BHEH<8=O<:@LEFIB>9FDBG@A9=:;4=98A:88;35>A>G97B8:2DHDD9@FDIA?MCH==BMA=CHDGLEJELIIMLGLAKJRGHLHEIBBDSHO;FN=LEOBN=NBGBHĺLQIMDP9COHEEOBIDMEKEE;KO;DM@NFJ9H@HQ:EC@PB>EID=>?PQG@HHIIA@DDFIL<ALNNEIBDEEJDJC>KDAIA:E?FúCFDB?=ADIFHH?F9I>?=H>>>GG@IG@CC>I@?@C=EM<6F:PC5DLGAL@AA:?BELBOE6@K=>MCHAD;H9@9@D@?AHP><@DG5E8AA:E?=BDF:@8H@BDA?:I=98;4C879>@;6<4:9:86?>98ILEHGH@BLAIDL?LAGEMCI6DCEHKKBLJFPJQIENHRFNBTFJMDNRHQPMJHHEKGLJKWGLIANHQSTMTFOMNQDEF=HQLINHHFIHIHLJSMIH@GNGAOIP?QQLIMJB@KLK:INFEBMGKKFEOIMJG@;JzECEJEGHIIJFEUEHHMFFEHDTINHCNCUNOIRFMJDAHOHCPCBCȺHS?DLACIGHSB=HIA;>G=@FJ@IE?=JLPHOC=ICCIJCDQ@AR@>DADHEDGFB@ACJH@BEIAPBJO:MDKINJFDAE=C>DBLM@JKEIL@BDFJFDAA??<Ǻ@H=6FEBCFCHQCENBGCA>HED<GCCIB?H@CBB@BA=D;@ANFFEC<9B?6@EEOCA?D9?=A>8AE=H>:AIG@<4?B=J@673EAD5?<>B>6;9,@<<8?QDMHBEJFL?AIFHDAH;>L?8MDAIAXHAHNPA@UMMHMHKOHNRGPCDNOEACHONILCVNSPEPHOOPIEDPBKR@CI@EFOALNB>EMN>MIOAG=PLIIQDHHLDHMKHNMBLCAHE:FFBJARDA;HCEC@GHD8W=BDAI5DEHHABG9AD=HP@DBHIɺEDABF=DE@GCEGEFGABH>T@FB6DEA=HD@MEJ>AGA:FF=<@:KEFBDDDFLB;6>AME?HF?BFF5=F:?KAA5;7E23DC7484<72@7<@3;?8N<5DAA=BDAMJ2?DC7CJCNCMCEL@9EKHAEJHIOMPQHMGDMFFQLQOEQFKAEJLL9PGKDLQWIDCFJEMLHIFLDOVMQEDELGMNV?IJBCJJRXIKAMHHIEANUDHFCDNCKGIMFDO=ICRHDCH?D?IAEBDEAADOJJC@JGO2GA<9@F@OCE=>JFI:?NDIK=M8HEF;KBKFDFI=E;@I>?@?BC>@>HGDC@IGFDC:@F=CA@BED=EJI;ADFE4AH;7FIG>MNIFIFUDJJLCKJIE@R>FKMDGHOƺH9BKFCDAH?8HRAKMFAIHNNHHHGFJHL;IHLH@OHGMNB=JCJK=CH6@L9BKIHDATQGFBH:IFBCD>DQDJFKH=PBBGB3LEGHNHCJBGFAAEHHEBIMGEHEBCFLGAGNB=FB@GBB5?BG=@<<9EB;6E?E:?B5KCFHB7@B=F?H=@DB@D87BIEK?I6F8DDEDEBD@@CA>@C=6<<;3F=;B6.<658:3=9BGFA@>D@JDGFEIHULDDGM@IFBCMRLOIHGEHDGDLIE@LHL;IHJPSFFAND@JGDAEHAECC@IBELHNDHBGGDBEKFECLIHEHPC=DH?FN@IIBGBA=LUMHGLBF:IMHBCHJPB@L8ABCEBDH@JGM?CFAE@7ADKED?FD>C9HJG?@HEEOBDA8PLJ@CD>L?E:KC<=9FEFDH@FFK>=HDBDDHFDHABF>ACL>K?;DGDC;JB8HG;H@?8>1E1>:1@D7:;<>,B<@6=9LEFE>6HEH=F8DEAB@MDDHIGLQAHLOMJEMHKPEMPCF@EMKLSECMBYDQLMUFTMIAOLHRGODFDLL:9NHJAGJJE=LGGLEHNIMFPJBQEJJOEKACCH@LIMIHDBL@HEL?K@CGECBFBPP@HKAMGLHHK@:BGGD@NAFJEHJLGDMGIFBDSEILPMO;EF;@GH>?EBCM=E@ABIBLMA;@@@HJDGEFEBEM>H9G@DEH@@:DBE@I<@F>G@HHEC5HG@@8@5864;:5<05;<9<:9A0=4>EA>CFCQFQAA8JJMGDINPMLHNIHHRHFQLKHLRKHLLEJHHFLILMHQDZ=KEFIDPLGHM\IMTIVLIEMCRPJUYJJKCOLSHKBJKFM\CJJFNNKMASLTHMWBNNFARNJUIBAHILIF?IVENFQE=AKFGH=NMAQMHAHIFIDQNLHHAFNBHANDDI?@YQIDFGCGBIL@@I>ODJRCJDLMALHFDCY9LLFHJAFKCG@KHJL>?ADSJCICA@B;GEAMBHEFEWG@IHLIIHNFHHJJELKFB@DEJFNMEIDD?FJHMBJL8EHC=LEC@DE;ICABBBGMH?BFCHKHFHK8Iʺ?MHHILHB?A=LH>GSE@BKLA@GCADBANFAC><9EK;>F@8A@B8=A@EI@BGEJMFJIEE4@G<LIJFFF@C?G;EGAH?=BHLIAHL4HAEJAJ8FKG=FJH@L=8EIGBHB?958=@A8AEE@?BDC==@@ACTCHJNFM>W@IH>NEEGGFB>NFH@HACGLKDGGCIDMRHHJBDOCH:FEEGEFMGFHIEMIEN=QEAO=MDFH@KCE=HI?B=RGCHKPEFJQ;KJ=JC>HGAI>MF>@NCDEAGGNEJELLPDHE?LAHEHH=ES?A:EE=AGDIDDHEF@:IHB@FG>EFJ4;><==;LDDHFIFD:B=NGHKC8L@MBBDI@?=@@>@A@AA3D@D3?E@JDB.=:HG;GCBJ47@5==@=@5:;=D,H5<8J><;918RFHDIEHQ;GAIEAA>D@@ECNCNCNDOSHPLEWOHKPEHJSBAIVVAONAQNPMLL?KHFIQJQHRAHIMJJJBDQFLGXGJIURSDNTNHCHSAHHJHNNEICIIUHKOEL[OBHKFFSMMFNKQUBDMMCCDJFM=@HKEDILEAGHP@DKLBSLJIKTJCCEJTQQO>@NFFDIOINCBE@GJFSD=DCG>INEºIIHIAGHFHAFLECA@AMLLQ@BK=JNKR:HGFEHLA?DDGBE@AIHL;@I9FGDF>KHFD6=H-7EGKDD=>EH@83D@E=C<;I@=<:C74=C16=589@:D9;C@DE:8FM@CJIJIBFPEMF[LUFCJQHTLPTHDESCDEOEVQFHFQB GNMFE:MIBPLKLPFMIIJKIFLHRLKPMQMLMAQIDCGKEDKLHOGCKDOEDGEMI@MTºONJ@OBFMG?HEKNINACCFI%IEKHDDKMFJIPBDO?BGK@FE>L?;EEKEBUIFDA@O?CEEPEDFAFIE?JJHBH@II@9@K@DHAIEDGD;EDCJCJAHKM4ICDH?>DI?KH6DC@DLB@KIIJ>DBDA>BI=@CIDDEF<3CA;AA=>GAA@4H;B9;C49?5AI:=;=:8<:@;A4B=;94D@HAMHI@BCGEJ?GIIFTQKHFYERPHMKEEAMIFODDHNOBJIENQLRNRHISNOJRQINHDSMMMRQLNJIMNJGCWITJHDFIETIOIHSLIMLCQTITJPCQIMHMMLLQHDXGN=PKLM?BMIKGM>>RPELFQSQ?BRELCKK@IHHMIKJM?FAH=EAPQEXMD@AD@IIADHCHIEJLJIJQDGFAJCDEEHLOID@ICNBBBB[@FJLOIJKHMLQFLIOI?GIJPLBP@IAJEIPMDRPL9OH;FGC>CSAOI>BJE@MBCEHB:E@LC;C@H@DFHNBFIAK<@BIȺEE>9=AKKO@D=EDDHJABH@HENE=I=LGIEIDC?CA@BNF??@N4F5CLJQ@IAIGIGDCHH>HIG@LLI=SH=9H7@OLFFJAKEE?E?>LBE:=F>BM;CHCBBACAV@E@A9KDA>A3HNBDHD>B?N>8FDB?=;6@AJ@7@79?@:99A=86<5=FAAB=KQJJLHIHJFMHIHPM?YNPLCRSTRJ@QV@HKIOHRLFOIMMJVMAOLMFNCFMOMXI@LIRPKJPOEFEFLNJHH:LHMPNMCIDGIEQFFRHBPN=KCTXHEMH3IBCSTMNTARLH@TAPBXKHLAEFMGIMOPFHFHJEHDLAHJEAIHHQJ@FJQDIG>GKBI>FHECED:JJCKIHKIPLEB@G?R@IEK=OBDHSKFNMA>?BB=KHBB:@FJJK@EJJFCBDM9EMPIRHFJFBB@HDMCJAAMQDA@II>EFAALEH7GQ>VG@E>úAGG@?AJJJHNDBIDNGKDNG@=GB;IEDNMFDHNF;C;>>F@K>H=HH:PK>OENA=A>@BHHJGL@DNE5HHDEBLDIAJDD@A;JB@WKMDBPMKMQEHPHASMEEKBADJDFBBD@LºNBTHDIHPGJBOMHADPEKCNIDM?DEMD@B@G?JKJKDIGLFKFFF;MAH@SAHEMLPLJ@LFEJ=9@IHGBG@C@DHBHI=V>ɺMJGGFH@JAI@C;M:=@G@FJ@@CDKED<=C6G@J@HFCJILGGIRDHE:JEGEA8BIE=BDDDBF:CO@DK>SCD:FBS<=CAEF<8>NEI>@HCK?7>;AJL?GF7JCAE<=HGAG4@GD@B4>=<>B?E8>2=<8:DGJHKFHKLHHKBA@PEMQJ@:MKMPMGLLFLOAIHG@HNJJNOIUECZRJIGPGNLQNMMGJRHLGVABEIONEAPGFNKMJIWAAFRQJTBP\HCEILDTE@HQNPILNKRNTDFSFNM@NDAM>HHELIG?PEJPHITIMOIJIJIQNDWKNIHHNNLNXLI=ELMGKMCODGLEJFEBIJRLNECFRMDINGPJNQPLFĺJIAHQLBJRLDXEGBM@OCTMJHCCGDIJM=GNDLOFBDFBA=DFF=JJIDMJ;HEHJA=LNEDGDEQH;DAJFFFJHGMNQCHVE+J=GCC@QHFIQM>JEBDCKDDKEDLFKRCDA>BNBPMA>DD>CźA>9FC;A@GDILPDMH?H?FHG@BEAOF:FDCC>OQHADFGGEEDEM@DKEN3AGAIDA@@=@AF?C6G5ELDBH44>3=COICHADG<>@LICD?AID?I9KHJLIHDLMCHRAIJJPELONNLTHLMMIFYLQHPCKJCGTNPKIIUDGQP@TNNPIILIQOLJKMEYBCNLHKKINHM=PIFDILJIDFRLIRRHMQCINJLHP[DKLEVILMFL=LDBSJ+FSKHLELFNJIPRDLCFCLDDHQEJPEDGOKDFDKHɺJKCADHI@HJHHGEQDAHMC=TH=NIPKDPINBAEL?LIFAOJDABHEKGE8IIDCICDNFEM7IA=>HLHLP@J?>EL>EC=IBDCBRJFI@KDHO:JCDRȺR@=CLDIH?QCEJFCRMCJEHNJ9G@H<@AJI:@GJEAGAEHBBBAGMBA;I>MC@>@EGGDGLCGDCEDFEAEMJBIDAEEAM8=I@MO@DDBH9ELDDA@FCL@@FF;G?@CAGBS:=6;C2<<792JDNKJFDPJNAMKN@ICMI?IFOIKJ@PHRKMINJJGMJERMAABODVFFJBGJIDIACCGQCEIĺI;OJGIE@EL;MDEEPD@PI@GD>CKGL:CIMHGQM8LDLGB>EGIKNA@E>JAFJ7ID>KIBHE?B>?KNLFILBMP@OIMEML3:NOLDGAE@IHKAI@M:@@FNCISDQ@IFEDQJG:HHQJP@MB?I@CNLK@HBHFHDXLJIFCPDQB>B@A??9KM:HDHFO<>LFDIHHB?FAJAD?GKJE<9I@CDK>AM@=KAHQ9@NKA=OAAB9@CCHJCI=AFC:G=A4E;<56A==>A9:9.?:5D7@IEEHFEEIKR>BJATDBPJO@MSTDNGH=PLOLKEFHGHLTMRL@MJCHOENHDKLHI;EFPQFABKILPBRIDIJBDQF@FOLFH?BLLDIBX@9NHPHHEQKFLFH@RKC< +BHMLJFIIMJIBFILHGHG@AFHA?FDHEDDALLILMJHD@LJDCHHBABIFOGGHFDPGMNKOICDAHEACE?PDH;CMBCͺGLDCLGHFFJDJDJEEJDK=HBFEDIH6EC@BCJAFF6DB@GKND@MMCEDGAEFDEE@BIEFHA=AKBJ@H?@AGAIFF7I@FFMCEFAI7EC:JD:A@;68;>=9C@:89::9FABF@O=AKECRK4MPLEFGDLDNMCIDLDDQGCHMMJGOLQGHPXIFVKGLFHJIGPGFCUMTMHPKMHJOVCNSOPKUGMDIODMDHIEMI^KLHNUILQMFJJU@HDORUGIHHLOYMHPKNPGDSLOJJOGJJILAHCLJNHULQEOLGBTBR@JBOHGMDIKQNIK@JLBIOJGJPCMHLQ=GIHFFOKIMTFEGJL˺HLJK=9DELDKFHLIDHGLMBIIIEQLMKPOJJIDBDPDJIL@NMCJHFHIUJG\RGKQICEIHLBGDAEWEECI;JG=;BESE@I8?EAND=HHDHLKFFCBJKCJE9FD?=?ALA?;8FIK;KHEBAAǺCDHC?DDLN@GIIJ:DAEMACABHGIFBCGICCIB@D@MJ@OEJC3@:F?DHKJPLU=DI=J8FJECLFI?8FH;BKLJ?9EDG@<6=B:6F2AM@?H>FJUNS9EEGOIN?=CG@TRAKEF@DFFKUQRHDZIOVYBKBLANDJJCMQAEJRSROEHMHGHQNSBQLEEC;TLQJIGSMIGCH=NJKJHJHIKIB@LLJIEWCB>NAMJE=DźGB;KHCPMH@NNINI@IOFIJCI?LMGH9L@GGN<>D@>I@E5IFKFKK@NB>BUDB@ACIBJBBM;EC>EBG@BL7HHAL@=?BIDBEBLFCDHC@@B58<>DCF,>B;C=@:<@BF>G>G5/5KALQRFUDDYLFIMJGFKCFDYGIúFJQWENJLUBLN1EE@EF?=ABDKJOFDHIG>OIA>SBCKCNDF?@G>QúKG@BLBQ@GM=EIIAFHCKGKM=JJE?GBD@DOGHNDLJFCHBFE?CL8H:HALFFNLCDEHDAJACDFADFCH?>JEPHIGEIR?HG7LA@JDEMBJHFHHJMJAGIG?DDB>LF;=D=C=DGB?MGBL>N:MA@==E6T@GBF?IE??A?;A@C=58;5:8@5??3AFMID=EMLERS;FFI=JEFD=MMHGHMMLNHHSHK\W@UOOJIJMMNJONRJQIFKTIK\LGILSLUMIONLTIN_OEGMGQMLQQJJKUNMLNEBIMNXLMMZDNETINHIIGCMEKPPKMHTLVQFO8ISEAHHHFYLED\CVGW=NLSDLPXPONGOLHMNQFIJEIRKNEDSI]HQKHJCQHMOPHHSCEJSIOBIOQIEQKFKIENGSGOFHADLOFTEC\FNOOE?GJJPLC@HRCAMG=IDDATLKEPLXHFKJAPLEJFMTDIOEIKFHJNJ?SBBBJJA6HGL@HEGHDNFPEDNFJFRCEENDAFIDF@ALOKGEIGL;CCFɺFJADCFLDNM@QH@@GEAIBMAAKENMJ>GHBIHHBHBDFGEHF6OJE>=BJDO@@G@AFBEA=HDDHEKAFIKD?HKBLBDJCBD;4:7<8A5?A06=PMCIAFI@CLPL@FFER@KNM@DAJHBMNXOLEMLVLKNRP@MGS=VCMGIHQHRO\LHRLMINRTQJORHEFFL@IIPLJ]OCU@RJJKSFNQPHQFSHMPEIQKIIRTHRRKMLFHMIJOGOLSNPPMPMHHNJLKLRKHLNDPIFLPKCKMLLLGMQGHQDU@\JEFCNQHVANAJMJCIKPFQPIRDGTCBLF;UNJMǺKHHHEKNHMIMDBKPI@KDJIIDICMOJFGODLEACPGGJKLAEJED@PELDIACADJH>ILDIDQIKHMLVFKJQQHHMJIJFNC.QAKCMIRKMMJE?KKDCLJAHCFGU>LDMIJ8IJHID>DCHHKGMAAFNMJATDGEPKLHDHEG7HIFHEBAMFM>HOBDHPGGKK?AMJDCIC@BJIP@IJMHID@FILFAFMJL?HJGDI7GCMCJFBD@EH>0HBVDEPG:IH=PI=HFGBOJAIE@F8A:@BH46=>B98;7=?D<<@0@KHIHBI@:6KGED:FDJACS@EBIBEJJLKCGGETMLMO6MFLJMDDH@ALELNKACEQPDRSLRG8POHMLGEL:MEIILBIJBT>CBCJEHCHBHCMFCJILEO@IAFIJAHXCHDHBNJ[JELVGF@EJKE9KKD@NH@IDFIHDD;MBBJAHHGH@EICN8TNBPNA@6EBEBIPAF:JN@DOGMEHNCIQH?H>=EISCOJJB8H@AM=HBʺ=@JGFM:>DBCIMHDDFDKIEI9EJ8RJHFDADDE=LHSH=?HPAECHE7?IDBDFIKEG@BCEACF:CHD@?AKL;=MELIEBDCKK=8@==I@:MHB7/9=>>:>>B2D:=3@@A9=8CE>ILJALAMMKKBHBL?JD>RMEGJDKDEJPLJIKZXMMQPILNKGLPMBKMKDJVLIMWEUJHMGIKNJOTKLJGERQNMOQKCKRL@RXHNTXGHXWELVJK@QKHAFJIPCGHTHQGLVNLGDPPKEOOVJPIDJQLIEOJ!NPBIGAODMFKLZGHITQGMOLMMN@MKDCABEIB?JDFdKKOILJHMABRLGPJJGLBLĺIJOK8LJHNSICNGIIBH@GAXBRCUILAOSJFMNQIDJJKIGESDEJ@>KNJRMCL>=@KOL?DFS7JFINBEHCHK>9AGLEEE=H=<;D67DE>@7>9??AI:8;C=A/?:D9@CXFD=FDEFQGBHAANEAPERLUMMGOCSDRLAPLHUEDLIRPMLLSKTJMKLMGSLTYN[XJJOFEHRBGMNHXHJLKQPL[LGQDIPNAREULRMMMXFJNLPO;PSLGJRKMAMHGJOPQUEC=LNHKUZEIPJN8NLM?ENKHCSA@XNFSTDKJHQNLHPGVKNOHFDDKJOPENONI>QKNLEJ@BMFJJDHTPCFHJJWOLKDGHHIIFDDINSPITXELCMPHINHHFXMLLDLFHJ8GLDO=KNJMBHXDE?OFO9M@QAGLFIKEBDE>BGIPII>CJ5BHQDKINLJKAIMINDA>QAAFQMBPNEOIMTF@EAK>@BKJIKDGHCIK7UBIIH;KBEL:=HEPHNHBGBO=MAFAAKADAF=BE=@QAL?>=CBEL:?8CDE>FEQF:CINDB@;AMKGEI>@GHPDLLLQTHENELOXVLNXGIZQNGNUOH@AIZRHRJIPMKHPJTPLJKIEHIGMQHMQLLIHOOWOM@TRINJVMHSMQUHTR\MISOKNRJVTLPMJLLLLLCTENNDMPOHHCHNHMNHLLRIDJLHMOEVPFMSNLHTTHRFONCFFPIILBNMPO@ILJLSLQAHODEJICIBSHKMTJELGEHFIHIHTLDNKLLKNJMEHLJKEHHAUMIHHRGRHKLK=BFC?CJAJILG@GHXLQKPILPQQFKJKIBF:CIJQFTFLJ/:IDCHMG=OGIIHK>H@LKTMH;LAORQLP>JOEIDKBIKMMQCA>K@CE=CDHCEE@MH>BDPO:MGFFMJQGGCCFHECACQ>>EEL?=E=HBIPDCJC@CDLHHDLIHJEI>GIELIH=DAH=9FGCH=HGJB?BE=RF<4@JBCGODMD<=NJQFKFNHMGIGOKPNFXEJVHHLNNJTFGBUFOHO=HBOJPCVLFLHPINBZJRNNCJNLLPLDRENGJRQISNUDFLNILKHPKBLPIQGCKIQFTR=AINLPIBMBHVKKCDDP@ƺFIHWEKLRTIILSIJSHGCLO?KEORNA@RFHIAHHI=KGLEBHEHGCBLDGIDQ@FDEEFLFM?HDNELH6GPIOBEACTAIIXGEICIGI@G>FFU=LQDVMHIH>IMEMGHNºENGJ6BBDFBN?EOB6G@BMHIHJQJQ9JLHH=AE?;EBV;IC??GEO@AJELBFDHDGFIFK=DIF>BBHLTII@O=FHF;NK8MHFHFDEDIMGIDL7LFEK6AJB:ELEHLHEACH:J@ADG@BA@IFOIDCKGFQBOKBLNMVQK\ETSRS@RSDQYAQGPYMKSLVVMRLJSHJOLHQENUGLHWHSHO?FGGLCRQIFDMPMXWFXNINOGNQVFJHRIJGWGeMEWHMKFKMGHKRUN?FSMXCFVILDPKSGMQENMT_CHHPQKGGIFNRPLMNUS5FEPKQP@GNLHRTR@HMHQOIFOPJQJTLEºKHHLNLJDBFVHGOFKLIERCOJNIPYDRKH=HDSJMCLGJLOH@EMILNLHKPDRUJIDƺDCFGILGLKCGEEPIRFFFGDVLRCQJUH@MMLDJC=I9J=JJBICJJ=HFHDBF?FDNFECJADEL@JNL@ECLBDME

FGJHDKFJLP=KEDNOBQ8DCDRM@HHIAIJKDK>MHA:EDDGPFFKII@B>EIGIHECHBEHLB>8@B;?@=@:GB-BGH9==G>A4B?FD@ABBB>D>IBIIG=QI?M=MLHAL;LELKSGFHJSRHKLOLDJVLKSNTMEBBMN?EGHKAOFK@IHJTIDHODKOLDKEGNCSBDAOQPDHF9KPVFGN<>FBNSJLDNDCCOIJOL@SGDͺGODDH?@MDO>EAK>>ELBJBHCE>GJCGK@?CFD=O@KE::CG6C=BF<@A>D5>5G=A9588=JJCIBJJ@CSEHNEAGCLGI=G?HBHSLHGEOCSMKLNLYOMRIRKMDTMOQHLPMQ=NUNTLIRFFVLOERMLMLOHPQTVOHOFYFSFLGMKILTVA>USGMNXOIMQJOOSHUVKSHM=?PTTLTQK>JEFQIQSFCH]< WPEFEVMKH@U>?PBANJGGMALJMTECEAIEEJMEBXYN>GGBEORILEU@HMEKKDIK@GLQEMPHHDPEUSOGKIKRI=CHRHHK@GBGLRHA[ODJRAVHUID@G?KIHGMBHINFJQGHHLECGGLEJHBHMFFDKMECLH@HMCFAN<^KLF?R?FQALOBJPMEEDEKKLGDHHNIHL>HIECźILBFNAHOICODFAGLN@DPBMMLGINDORJMPHMEKDFK@G>OI=JHH?LMI8DHL?IOGATCQHGEAE8=AEECXILEAHGFG>QECFDC>E?ER@GEHHNDVAC;JG@GPEODG9EIJ9NFRA@H?F?F:KE;E@KA@;DECB?7:B7I>D;B>;8AE5@?EALIHIEIKFLKKMFHKJQFMI>ILHONGCIHTFIAI>SHDFBHCB9M@HEH;AANFAHEDBHGKHNHALBILIPAEI?CLENAEO>IIKPIED@AHGDHIQLGCCFFJHF@KEHIE?F@A7?@@D7I9?EA=8=>FEAA=@>>KEJHIHBA;P@FIPIEM@NDMLEEPKYKTJPEIHJIQIBFHECP@RINSGLIJQNJQNTFQAENGHLFKDGDPHJBDEFTW@I@HRIMRHPMJBDDFCRTSDJ:ETMPBEIEGQMIL>TKHMDQ=EEIH>RNLCLH?QALU@H@IMJAO=FJVCQBLDJJAƺI9GGFEQEBM>L@ESKJCDDJJMNSCRKCCJHCI@LF@DHCDKCFECIEFDPPADKBLGMAPRHNMLGB?HJIAE?FA?INP>CEDEHNIMED3LDHHJLBN:JAEARN>NIGG@BIBCCKFEJF=EFA?B6F>C;6=ED:I=CNGHFJ?7=5<<@BCAFBLIJEHLFIHFDCGBHMHKNMLGPJFIINKKVV^GNRKIRCNIJIFRPUMURMTHGQJRRGHJWT]LZUPTVCRMPXGEMORIXLSMITJDNSMQMLKMLTMSVKWHRRLMKCVPMZIQMOEOGSLTLJGQLQOKHKPLKFHNKULGTLN9EILAM@CJLAGN@E=@AEMH?HEP@JLQGB@EL@E>BA@HN:AHDLI<4D9BHA@:@B?H:8B?=?<@==3>FHFQJ=GGHXHCFGMB?:DP>VFGOOQS>RZLLHKMBIJHLOJELNRKKJRKDFQLIILC9MLFDIHQH?LRLLEIASQRJMEEBS@NIPHDM@FHJL@>GIQJM@PBDIOEFHHQGJNOLHLPPKCAEJFAKMJJIBGCKJFBPM?TG=JPNFHGJLHH@IKH@LHDEHO@?QC̺@EHEIDRO@MJJEKU@THPDN@HKTKOAJ@QBLIOBDEK?KILFLGNJJBFHEOII@M:JCB@?JLJGF@MEHLIB5:?73AA=:IC<3<>9G0E@EALHMDHGMCJDDCECI>MBLAUHDHA=SJUSPSIKKJOPPAHHS`INSVKRSNQLQVKNRLQQRVTQHMKBdRO]TKAZNNSXVTAJKISMFMPOKQMRJTFRWVPLWJKTNSISIQPFNVHMWKKKW>LDFIBEJCDHXJKMQLMJQAPHNMAWQLR>QJAZFQJAMBOIUQJ=MRXLD@=NHDGHLWROFCMCNKHWEGLFEHIPRELOEBQJLCRBSMGKNNAFJ_DLK@QTFBMVTHKDNGPIFIOQNMUOMANEOPAJOELXULLFKC>PJHEJFG@LODCHC:UKA?JL@FEFLER=H=HGQIHLIHHHJLOAILHGLL@GBLLI>ƺBHAEFJMHLHCDKL=MLKAHIHFBALOJEKJLJHLGFKBJBDDOMR=QQIECIHIMGJCTMHAKDCALBFEJH=IAQMXYDHKDCJKQMNBHHJ>TITQGNLCCQHEAGIODBJBEFGARAAEL>JJCFE@KFF@D6@@HF7B1CACDAECHC@B@EBEJDKL@NMITFNII\NMGNLORFX@MMLBHOFVQLBQKKLARIODQDN@PKHVOS=DQHONK>LNPNIIMEMKQKKAƺLHFJEL>HC;HL[IITQNKFO=MQTH>SIRGFRLEKGOLI@IHCBJHCL@SCIKIA>L>FI?KIPLHKHD=MFH@HAF>FDGBDONDE;DDF;=<:=D::H?J@E@E7C:FILMAAJGDHFOELDQGF@LHB@EPLNKPTSJIIQFRXIWRMUHGM^MVLZP>JMR\GLQGIOQFVLPTMIVETQOTQRSITNGNSRQPILTKRVEYKTFTIPVJQJLTOIQQTMHTTBOAOINHPPEMLFVCHJCLMNVO]IRITJOHLHJDLGGKPRGJFMJETKMGUSQPTKLQOCQKPJI@QOBTLLIMPPJFDIIOPNͺ>POQRLHFMDJGSFHJMMJJRFHVPDIPHHOPJJLJLHHBH@LUEĺIGREIQAOJALELRHGKEGHF5HAIJBF@KBJCHFI@MAHAIIIFDSNA;DANMF@@BHG>MGDC@ENF>HDJB;IFQB\CDHLIPFKFEJD=LKDJDDAH@C6>>9DIC@;9:8D<@7J==ABH5>CD@6B9HLOHIDABHIRIXDKCQLISLTF[DQLGOREQJAUKPOOUFHUHRCSIJMIQQNLIMTSCHSMUVHNIPTJMLSSWLTQJCRXQIMPHOISJHMNOQXSKJOOSIHODMIDSIKJQXMXFHOVQEKMKGJHJHLU@RTDSHHDZDEYZTJJVDITBIIFJBABOIKKQEHODLD[RGCOMUM@MICRAKHEEICKH@UPJTHIQLMPIIPMHMDIMQXMG=KIJ@LI?KEOALHUHEEQLTILJMHICFHJTMEJGHP@ܺEIFMCNHGOJEIGEOABR>CJEIDPGN?EDDLMLNBC>OCHBLIOE?ALPGKP=DBKHKE@K@@MEHG@FHPKJFFOCINNDKOKCFQIMDHENLHSIKMHKBPKG=CHKD?EKIKP@@H=AEIH>H??HLOFCO9DDNBFMGFQFZQ@IKFRWOPLPGMDETKLPQPKIIUMPKOMIHOQLNIPQJFLMPUFFZP=MMMLKFSAQPNJJ;GIGHLDHKAJLMNJJCFPDLFCDN9FYKMIGHNJFPLINLHJV@IACKGIJG,DNAEALDFTHFGLSLMFAJB?HQ@WRKFDBOHNIHSGBN;FO=:EH>;>K=EC=B==E=OD?HEIH=G=DJK@RXGDNAKJHSKEIPTNHQNTOGNYMNGHP[EMJYUHQIBUU@JMYDK[@LUYORJWNQOIYRMOTRMJIDELQPOLS@OBWENNIR[HOPNLKRW\UJRLPJLMYOQFTJPRIIUAQLPNCOQMPIJLTPXKDIHTQKRKLZGOTJYJMHFJMNLJKKHCKM@PLNRFMHYPHLDLVDMKKNSIOIFML6BDLDLEALKCCFKHTJKERKGP@JAEQNCAIJH>N@FN?BDHPJKJDIMR@H?IVDCBLISJKPDODHGAEFI9DJC@AE5G>AE@AB?@;EUIFMEIIKAPEMAMFQXGI\@MPLL8MMTYKECHK?AFLRYNRMDHG@HUQK;JEEDHI@FCN?IHJNHɺJQDLCH?IEEOKJLI=HBDAIA;IGHFJGGCA@RATHCEIB@H>A>E4EBE?G6DL=PQJRMCHDPEFIMVHJIFRKJEMLIFRQUFNOQL@RQLPFJPTRDSJXHIDZPPRLXQTK@USNSTIGOCSQL[X`F[SKOUXTP]X[ESNMIRRSOQCPTNBMRPJNPHBXKIRDHJXRSLHOHKSYNOFKGKJDRLXGNTJNVRIKUEOBUNNIQFULJE]JRLHFIGIOMSOJEEFRFRPPNP7CNNHGGMY?ESIH̺LNLLMRTXWLMIOIGOLBJPOXMVLEK@ANPONMOFGWNHQJKRFGMMQHJJ]CLFERSDHHBPJ?HIJCTAQEIGISII@JWIDGJIHU?OFPEHDIGESMDPHH=G>IJBRTHDFBLPFHOIGRHHEYĺMLFIQQRITLLDHQRCDJGAHLGDFDFEGLENHOEJHPGKLIEIFGMKOFOJN:LO?PFMAOKIHEIVHIMGNAMEKERTNDHEPKENHOEBCHDFGI=QOFPA=GHHGJMEHGEIGNBLEH@MFTACLG<@M9?;JA@AGIB:CJAQ8;>GC8HEHIIDC=JBLPCICLTQAHODMJDJO\JLZQSFRKEJIPXTZECZFNUELMTFIVLUWYWKCJOHIUGSM]DWNFNHXHISNIZMFGODXQTNNUKLPL]LR@T@JEHLUYTKLMMKOPDQIPKKRIJUTZKNGWOJUNQKLSMUNPNPILZRNTMMWJREQTQXTDKLVLQI^WSR@CKFKNPIMQANDNKISIALHJGOE̺FKTJOMP?PWDMMLGW?HVNHHO?EDHKBLDNL@UM@KPB=GVPFCEM@Q8HBFAITRMDLLF>HHAIK@LHPGBB@I8=;@>F;DH8?6@I@:9DDM>FAPFBJHGLLWDMIGKDJJRXDJWJPIUPCMYNTVURFUTYLMPNKTPQXTQM@XLSNKNCSYIHANLIORW]X[MUWRUHYPQRPDDSNEPWLNGMYHVXJHKMIOODQLRTMGMM\TNFTE]QDKOSLQSXGPJIJJF QITJTOQJULWV\GTMJPNMGMJLOOW>RCMIHSHIE\LCLNMBLHIMHXLBQPOEMFTHMHTFIJQTN@JHHLQNCKIIHEIMPOJENILMQOHLLBMGGPSJJFICBNHKARO?=TH?OLI=LAMKHJKEIMKLHBPHNMWAKKARIEMJIJPKJILQGRIIQEEKMOAPBIXLHFEU=DBP@GLDHFպ@MCKHDPAIHFJQNJJJIOEOG@II?MQ;GNFDKHAIHH?KFMSBEGADBCEEAMBII@=B@E:;J8:DH;B=?:E<@C6:GGLBN=IE\MRBG@GI@EFAGHFQHROHLQJDTYOLPOSSFETONWNESUKYIT^L\RQRXPWELHQNRITPUBZM?TXQKNGS]IHLNLV]X[_NPRMTSNR]F\OQWXFNHSXQNJENRILQNLNNJSGTZHFHNSPMSILPV@RQ]EGSKLS`SYIIHPFPYVMIPSDIR\SNRMBMFRHMLKKNRXAFLPFMDNREYJEOJESIMHIJQKALLEMEB:IQMKLICKPNLLFLKK@BPI?IRUDRCOJP@QFKNCKQPEETMGELFGN@KJLOGONLMEDLRMQLANKL6JHKDX@BRGILPS@HLEHA>LI>UGSHMFEIJIHIPOIL@DJF=PCDIAEFDLJMECFJHH<@CB>HFHIAJ;E:AB@G?=9G89EDCLKDHILIIF@MLGMBJQNDM@ICHIDNQGOMGTLVFPNV@MRFOQ[POHSORIXILVGUCWRPUOVHLNDJPAEONLFPLJJEHFLLMFISCLGJOKUGKOMEL??N@FAPLKCLGKPJP=IMQPHOPMKEI?FCDJLIDHRGKT8IIGANIJRENDF?GD@FIGME@K^JQFXMILRKNONTLLENSUQMORTKDR\LW]WRLX[TIWNTPITQIKOJHHP[YOHPRUF[[VLQMR\JCOSTIVCWDHLHJJUEMLXJMKXXJYKPSTITUJMEXPDNLIRGHIKJQQYMOOGJSNULRKUEHF\DOHHTI@AMMPFGMLTIIQ@PPXQPQULKJBXSGIGKKEYJSYJWNQQNDOHFTMIPMNLJCGNFIKPREQPJSLFNALSHJYNLLHTDHMJIMHJLIPCNIQSJP@LHLIALEHFKNNVILOGAHPQU:NBHCOGNOM@AHKHVGHFLFFIIJTFGBBLJD>KCLMͺGEUNSEMQDNDINFNEVKATGHNJLFJDQELSBQJMPKCDIRKSFDM8LJJEO;DLLHMJHPLLIIJNESNEILLSDGDEDEGLAQGF>BO@DGRVILLTHDKNDLEQPBGEEG>VCEIAK@JMIA@BKBGNGFEDEKIHMBIHLI?LOGJ:CI@6AE@<HJNSFNL@HJJHF@IFIMOO>JGOPDTPMFRQMQ?ZNL>MKTҺAIDHGFJAGXOHIGLMABSIJDGJNIALBSGFDNLASNEQLLDNBG@QQBR>HDALDHIEKDPMKIHMIGEYBBM;>GMGIIKRRIEJHFT>F@FHMQGAK9EPHKMDIBE=SILKCENGEHECPJICEDHQGMAIMIR@FDEEOIIAEK:9H@=E89GKB<8BFH>J@NNEBBRINPGIAEJIFNRLMOKHMRTEIAYJGPYLLULIQ[QLQHGKRC^XMOJOTSSHLLL]MHKR>KSNJSEOMLPJTKPMJ\LQTHKKJWGPHLHXIRMYLOWLQQIONLVNLMJLMSJUHRPK`NKTJO\ELPSOFNZN[JNXCTZNGT@ILSLTKKNIDFDLSMNLPMPNOJUKDPICANMIPZJKGKOTHMPOTKGQNHOKTKDKPJMINJNHA<;:AEILLDEKD>RICHDILMHL@GOGTLKMRHJELWHDTPQTJWHJ[]OXXIRSRXOLXSQTLZJMQUXNQYROVXWTNKXUMIKRLVXTVTMJTOQQIQKMIRUNMNBUNNIQPIHSSZLSYQXLLQIJEONRIONQTXOOMF@Q WNDISGRJSKMYTKNCUDXEJLESFITFGMQPMLOOLAIRLSMFMLNSPJPFIPTLRLCRFBYMTMEKNGNLO;NGHQMQHJN[HNKSOEKINUPMLTXNKIILLSPFIJMHLFMOR@MOIOKOISO9QHQIQGSMIOHLMFI;OO=]FAIRKCKLPBIDOHIGI>C=GTKJDLTJJMGRJMADLFQPELκMLLCPQLOIE?CQLQJLHHRLLDNMTCJHBJVDLQEHMOQPHRHEAXIMCFHDMHJLGCPGNMFLHFFJHRO@PE@GD@BRIRSLK=;KAJQNRCREBILLPKSDKHLLQTHHIQPSKJBXPJBJBNITAXٺLHEZ=Q4LFFHMJKHJM>FBKEMGHNMAFM=K@LHKOFDNEHRSHWKENI:LH;FDBE=EB@:;EHABD>@J@BA=D7AGMHJFHHRF?FLEH>OL@CDFLPANIDLSNHPQAPTQNLNPLOOJTLUKLJUNFRLXXWWMMOLVORUVISZAMQ^DHYSGILJ^RIHNNGPPJTUJLTIT_PGWJPMHTPQORLPSWYQPQV@HXHVQPKMIMTCJQMLNJTNMORLEXDRLLRHOPPQLHUJLPHJHDHNLQPHDKPNLINYMCJOMPOZNIMITFVNKNºJEFPBMPMJJNMNELHCUDKTJDTPOKTLQMSHCHHHKUFLGEJJUCFGHK>FGCQGMKHDIMLDNREHJHLJGDGJ=ILCLFIAQGRMEDC@D==;HIB7A?EHBEE7@=BMC@H9JGFLFJKCLTUOJWJ?GKKSHHNTMRNIHPMYJPQNPJJJRJQLMWKXJXYEMDRZONWNWYJVXTJPNLOH\TNHQSPHKMTKORDNF]GIMVPOHNLRZVNXMLMVJQLPY^NQTPKOOXJNSYSRP_HKBJTFMRNLSYJMNJQdCNVUMM@DHU\HGNV]LO@LROLMKNNELFSKGLFLSGFMLJUSOMVLRHLIMJOGEJȺQQOVIHHXMQKRMJLVPNLXLNPFRTHBELRXDQNMQCSIIIHPGRL[JHC\POKILKEOKRMRRFKLNHCNPINLPOKFFUHIJK0REK@YGPLRMVVHNLINDQ@NRDIRD@RGNTDJBLLTLHOIOEϺVHR=FOLETFQJJQJRFPNLN@NUOKNEME@SOFFFEKKLGQMAO?N>FG?LLKQILDTBMJLEUPTQ@CLCPHGOQOJINNH>LPGEO@NMNDNFPMEKKEGHDYKDNL=LDM?LULKOHQKDBCQPEKAECFLJAHHEEFGMGBPDLKKLBELTDI>IZHLNDJSN@MGPEQEKFUKMIRHBPJDLOMMA?UQBHTMHH3GEBIO?GE>JQFIOLDMHTNYICDSIDE=JJMGDHHIJDFKGLK;I6JFFHDDEEHIDALDJECJMHNLKERNHLLOGLDMFHFEPGPPLT>ILTMRRNZGDNJJQSWQTKMZL_SNSTR\IPXQ\YOHHJVLKTKVWDYLZLJOMY^RJLDRIWL[YGWGYRXSSLE`UNYEILRMLOYXTTHMNIVRFITOXISOSRMNOVOSP"EFJTLO\BQKHLZMQMVMOLMHWPEQPEKMJVVDLRSMRNONCU?ULKEIQANIIINHSRҺLFXLQPOISKKIHQNYPLOOOMAZMDSHJBPAQIEH@NFGJSSQOHJWJ\EEGQMIMJMKSFIH@NGLDEEQ8NO@IKOJMGLHLCJMEGCLNDCJFBIDGJFOJCPHJFJVKKHGEDNDIC@AADBG>@9A<=:ABF;BLODHQMTHTNRGM>TEKORSXDLIKTRUMXPUMKJPZH]HRUISMVISIPWXNQPXYHJLF[KTOTVGOTRRPIQVLNMQRWFUSLMLRSSJ]NWRO^FPKNTMYZKZOLTWGTGWHQUPKKSNRKLHRMMOQNV\KMKOFYXTQSYCYQOFJ\FIWPORMLQCNXORMFAQINEMMUOPOLPDQUTJRHLYJIHPĺHUQIPZHQHLHKULQWNDOMDXTIISFNMCHMNILDKFGTHMEUHMLBKHPNIRJCNQNLFEHROF>KI:LHANQPEJINKIELFBFAPALFLLLBUDIOEJFJRCMO8MKOKDODMGRK@NIMNQPMMQDHLFPQFDLLAEAGCHLAFGIG;FMHDKLPK@EE?PHO?FF;FFJ??=C@@CEACBAF@H@HGECLQJIRSBAMFLEDJJLRGROAKYSIAOTWLWIIHNgPOSL\KP\HIPOVYFLONXPWQX]NLT@`XLFQZSKXPVMLKCQRUUUUDSSMPRSUODOQTSJVMK[\TWWLXLTXPNUORKQJKJRU`KSLJNRULMURKSKI#QPUXMBSX\MGMNVQPRTNSRNRULLUBONRVWYGQNNSQQKNFLLRMQHTFHPVNLLJMúLOVJPRGLSQLCU@VGLVOSGUQJRVVMLULHQMNPINJYNNMLTH\KGVHJONBK>FETOIFFFIWLHLCSEIGGLFBN>E?=?FAE<9KHFGINDVQJK?R8OKTFSFCXMIMQQKWOPGERDKQTUXKHLILIHLEVKGQHNLK4TIBFEJKGVHLEMNJLNQGMYMPGD>MNKNLROJKFTNUK?JLպQJCMMMLKAAH@VCBHUQFMCCAHFK@SOJL@EMIFUQFN@UXGJJOELGVENKL7MNGAHAMHGM>GMJMFCTRE;OERJIQFOCECMEDYTQEDAQHOAWLSLFOLHIGFHHPHILIMHHHCQBHIOEEKKBEJLPAVGLJCOHIFFEH=R?EA=FG8D=OCC>8BI<@CEBGQMQHCKBXALNRLFVABTGABMRCMMOSLJOQQRROQHPV[QXNZVXXRXHM\KSNQURXTTPLXOLYQcJUOSUXXQMFQSZPVSK]_TUXKQVLRMPMXK\G\SSJSPLFQR[FXQUQNTMPMLRHNQLONHVLOIQJH[U(UPOTIRI]QIXWLYKC`LQDUa@OVUHRNTUTMMFYV[XJWPYGPPTNELLLOCXJPJPQȺMTJJTORP?IHPMNBMRVKNRPOKLTNLLIPUTOVUMFQCLJT@KLIMETPONMKNPLRNSRNPENNIAMJMGWFLPOPLOHPQEJFHBLVOJAC@I?LNDGMFLRNXTHFOPMMHS@FDJMGKFKKGLNAXAKECHI@>HHPKMANNQELGQQKHNCVNNJNCJPCMJTCT:HAFDLFCE>IKGDCAKMONHLDRQLPDL@IOHPUXIQNHFLSONOLMMLOLLRQHMQGD>TDSKKAAFFOPFHIORLJLWONPBGL]HHHAFROXIKRIBRBHBZLJPCRU@JOTFTBRIO@QJCFH̺ILMTKEQHLKURFGCEMHBQCFRCEMLTFMRJCEDNQHSSNJGLDUID@KTQPGKNNPIINUPKFNIEO[HLEQCOIIDB@=@E=C?@@7CE>@=?5AHEHDPQFP?ELCKXQHKCKIJCN:KCEMYLOWULURUVXNPPMSJZLYMKXVNXULTPQMPTZZSSNNZ^LPMGGWMNXQTLWROQZWNYQKXTQ[OdSN^XMURRQDJOTNPORTSUQSUXTMMWN[JMPRQMXNUQLJMSNJF$GIKIVI=HVDGTTNVHTLAWTJVZNTVNCQNNHdK;VERQCTJOLRRQMRMMIINKQJPJ˺EQMIULMFEHIOIUODLQNOMHLJQMQSVLETKXCPJP^MIH +TKQMMHLNFOBSSKELAHMQQKDKDPNMQCPGTODKURIMCSEN;LLLIPJENIIPNUOGFJEKFLQIWHNPQSIK@PLENLLDJVLIúAIICYG?NELBXNKOLLMK@NRS[TNPEI=FNFRFNHQ>MIBOQHQL5JGOQLONKEHMJGDQEFFIFBNRMQVJBI=IPEDFQJJALPHHNLEEMMJFTBD[GICNAUESQAOIHVGJLQE?KMJGJSFRTGPBENKHLJ?GGGEIHGNIEJM=CEGIBIEE:@BCMOQCQMDCQUIMPFJ\UPGVHHDMSBQESHHTTPHNIDPJSIJWKHBQDMEMHHDJNEFAORNQSHEQLVH\GMZEDJLEE>JAIGFIDPºGKMVJOBIIPRFFFEBVCPQGAUHLEQ=IBSJQQEIUTLIPHHHOLXFLFGFKEHLJDMMOQIDAHEYLJGJVQFQLGL;LLCLHPHDHQNLGWEUCKDQLHDKIDOHKODHCR@=N@L@CF>?L?DCBDD=JEL=E68H>K;DCKH:LC:CEF>NUMIERLCJPHILFHRFHOQONRLUONOINbVYQIIPSQKVQKUI]UTVEUHLJYMTYRJPVRTOQZUMYPPL^ZQYQZLSQRR^IQVNQMSUJhP]KPLXLPQKTYYK`OKXLSICNMFKSKM_MPJMUKPMOIHOTTL)[LITKXXNUNVJTMLQIGPVXCNKVI?XMKRPLF]XMVWFJVOJPRIGZQDRQUQFLMRWǺPLSJPNFRLNLHNSIHNRZLFBIKIJQPLENMKNLPBVKLKLSLMENGJHHLF\JQQLHRLJMQTNNZMDVDFTMEGILLMGKIHOJGELDSJYKQVJSNLFIͺOKYEIF>QQNFSNBLLSUEIW?LHKHR[SLSSOLNHTFGTHHXMXRMUJMESOCMXMLRKIRLSMYJMHJIJMFEHGFMKJJKGGIQEHCRJEMHDNVBHRN@NFOCQISIBNSHIHGPQL=UQGZ>VUAPKCJUJB=FFEQ@IS@J>HGFFLAD<:H=FAK>CDXEMEJFJMADKDKHRLJQPMNDTPIEJOHKI=NNNNEJQLPMWMQRLS8QMGOM\GN@MAHMFIGRN`FYMPQMLHPWDHIQHKD?EHHBHJ;F=JAABBEELA;G=8@=@;:KKGAH=QREFJIFHTHFFPPN=@J?DEARJI@LVCQJTACLLPRDHLRYORPLQRMN[YRPJSYUPPLTQV`WLQWIR^SOJLTPX[JLOMLLMWTLRJV]VQXRXGZQUTZYNHL^[QQOZMVUSU\PRETRXHSSTRNYK_OXQMXE[PRNSXVILWRM[UZPLQNIWGR]ORHSMOVUSWRSLYCQQPUVVMOIYI\SZHTKXKNKXMGTIGYHSNNLVLMDdRMIǺKS?AJKDT>TVSRNQXMJZFSQIXPJVKPXKOHIDLGG^HHLKK]HNNTDJVTPRXWXPQNKXQ@QSUMMHMQ^H^IGOEQIKGO?FQI:TKSRBQLLEROOJQSWNPEKQGHOLKI[KKLCLALEUDQJͺ`LPDTFEGJNNOHULMHLPJHNTHMVLG\OPMRMJMJELHHTKTKTPLLNLETHYXKBPFHDUJMRCJCRQKCQN@HMVPERISKFMQSM?HNEJLGWDPRMRUHPMIRIZJLAKQIHMGNHIFKOHNPENBHCBB>LHDL@PHMHBNN@CB=LNF=HF=?968EE?@BJD:D>EIQAKJRMHPMLIGRMHOQNGKHQXZRWGRLBI[SRXHXYYLWLVNTTVVVRWTOPXTQNMTX`XSUTQ[QXHQNVMVDNKJTQLYa^VTL^JTNPRWWaUTUSNNJPTPH_LZMLKXQMNWGMPMTRPTJUKXNIOQEZ^AQEQJ\OLUKQKOOJXSOXGOIWOPLPPYRPMHUIPTSVRQTYFIQPTMXQHKHFXMXJUNLPź[GURQQSQA@NKMHJUXMLTGYLDSHHYPSLVYRMGIMLDEJLMJLJJDM\ILWTLROPMMIVQMMQWKJQPRIGPGJJLMIHM[N?JJJHMDNQXLCIRLUIOOPJDFTNMIPOTRPJHOPWMBNFLIK̺G=QCKJJNGDUQIQQHOQNBLRHH>TPECLHKOOLFGSALEMSILJH=LKLV@MARPIKKKUGNLPHHHLVTJLGUSMIBVQ@U>HQJLHDJJTGLNOJQIAKFILGHLJRJHVQLVCMGMGEHEJ@FTQDUIPPTXQIRDMCDSLNJIOILEFPKNMEMGJ[=VKCVENPNCWKNQORITVSJXKWNKJS`CQQMP\JQTFRWMTUIMOOVLMMQKQMWR]POSYRTOTMOPKNKMTQYXQQQS\QQX[N\RIZKQ\ZRYXOSUUQTXPJPSPWMSPLMMVQKVURKHSTXKJOOPMWUUXPVMWWOZTTOWLTCJJONQLYLMFTNQWLPLPTQ=NLZEIIJMLQQQWPNPRPOźRGTIQVNUWDQVM[JRNFOIQSMMTSLPJRWUOQJULFMKUTJ^ODXORQSLQPR^EXLPWHPMPTHOKZVGQJIHLI\LMIGXET:SPSIOCOWSKNQIKLJLQESHHKGEQHIQIILIHJCINJMLRKͺUKGFXCJGMVLGIQC[LFJJYDSNNPQVQLX=QPROXUULaQKOKNFTKOJMJLDMJEQQSELJLAQLNHGDVIOCHIJTNGYMCMMAIFDMOWMGC?<>AJOKFTIPOHJFGSEBHIEPIHPQE@GPLTHWUTETXOPTZZS^TMKS\XVEMWTY]MXQYRZX\USSUO\JU_TXZTQTTMJVYYHQOWPSVTDNQU]JLOSICOIPPMXMaRVZSG_\TCI_YWNMIZQWMPEXKRGIHPOR!TDKMTN\TQLKOUNQRKROLLVYTDHMS[Q`PRSWXRKNJGSPRETLRSFTNKOU?[SPNʺROZNQRTTUQYWF@TLOMOJ\TLULITJYRLMVFKSRQZVNLMYVPGTNBMDHVDLEESLGLMQQYLVMPNHPIRLYJROX[POIKETVZKQQEBPEDOJKLVQJDCFJ@INVVRWILIMTZ;JCWKNVFкPLJPVHHMLSHHLTFQNJIEOOVPMYCUJHIPDNPPKYFRH^DZIHNJIEFVQOPITJQNQFOADTNPIXNNPPM@FQOR@LFXLLLDHMPHFJPHPF@EMPMHHEF=EM@ELKMHKHDEAADGGCDG>B;GPBBBDGMJKLSHDLTOMHHKOLDPHNJVRUR\SJNATXMSOOXTWPRZX[T`SLPMVYSTNQSZX^NaVQPPYYQ[SWMGWWUTLYPUSXVSXOJMXTIERMQVSVOA[VXKSTWZP\IVWSNFHPTMSHJKYORIWQPQMIXGZMLPT IONHXQLFRSQMXSNYJXINVQSLR[QJZJJLKQLUJNIMREOJXNMJNGVVSIOMMTUHQVRR?JAOEVRLFDNRNMQHNXEEOMTJTQQILKLJLGQZAKQFOMFRFNNFHMMJPIYDPJNEDPJWLNPIIEHENLUHRRWXMK=ITNUTOOMOMMNIIGH@WMBDMQPCNRMDWMUOZRJGZLFNV=ѺCHHLKKLGQJRJKIINOKOHUQKMIEFBPO[OMOKLIHNJOEHKJUIRPJNFEVQFKEHT=HOGLITEXPJJQLVHQAKIXIABXGTUMEDKMITEFIKTDOPLFGFFJFMGOGN@IQQGIL@MECJMC=JUJJKNEAMIKBHDFMACABGBC@IAD@@FAHE<=D:A@EH=><TEWTXO\PQMTQ`ZWUXNKFFPTILFVQeLMXVUTXTTXWIPbTVVMXXNTW\RHEVHWVJKPUUWYRRXPZOUSN]CKH]WVNSNQUTTXLIQQKLTQQTSKHMSRRQX[M\TPMVZTRWURHPHUS`MODVPU?YLOPOIPUNRUMSKPMNDDQWTTPGLQHNN]QTTRVXQHYºITUQTU=YEDPNMSKJRQJJRHYIYOSQMIRTIWKKMSWKFKNSHIVYJQKHQVJ[JSPQFGJFGYDRPHTKPVQKKOLIRHQDVRAXPKFIPOLPLRNIMGD?PSILWVINIJLKNWJJH]CSINHTMLԺBMOIVDEXQMNPDATMSKJQHCFHLLPLDILMQRPWLDPPHPXIHSSLGLJ_=GSANPMPBJJQKXBHKRDHDQRDJWMHRRJSQ_ING=HLLHOKPH=KJTRSHOFMMLVGCLBJSIIIWGERFHLFK:MHJOKIEHMMNJHESLHDNMDJANDHFJ8F?N@@=AC@CBB>RSFJONF`MQTDYHRR[LH?PDPTK^IXIHVKRXTRYXMOSRR_POMUV[LWTSVNJPSOXGQOXXRIPSJWNTR]QNLLMQQP\QRNYROPVRZ`D_OQPQKQSRKUQIRQOIZW^LXLSXXNLERTQTXQNOLO^XVRGU$AYR[QOMVNZLLU\PLVKITUQKVEXOVBUBHTMXMDSGSSHPUSQDMJNVVJPOMJSNQPRPNSNVVGQRRQI\=L^MSKIDPMQNISLOHTJZJPXSEOLISNRMTMLLPMLOJHYLO[GRNUMVNHVLLHVJLLNXKOJJTLYHTJTTINLKLJNFJGKPSQNFTLRQNRHPITJQLTFOQRKJKQKѺQLPKKDETGNQT[FSNMLJMNGUTRH^M=LHXOYVQUKJMNKF=PJTSLOLSIINTMNPTKJRJSRWAEIPAPIDJLGC@D>@B=`HQAZIHMSEVMMUDGQBFWPMWKBKPDCFOJCKMINKJPTJQPMNVaCYLLLNIVGPMDLIOTPdIMJU>PIKJ?MMFRXONKLGHKQGJTNF@LQKDYPIHWXMMPBSNIOQպJJRNLGZSIJEOPLKXIM=HMLEIKPMELLJJLONFPLNOJKKRGTMUGSLTDF\KLFNETKJOHLPRPUHM=UFGPHTAWKUKKHKGOPLNINKS`QMCMMMIKGOIGEKLKHSIMRJQHUI>SSOBLFJFLEMMRCHNCJOOKPKMJL>TRJNDA@H@CIJKDMBFHD7FK>EQDHGNFJPDCALNMMI\RIALPQPMVO]TNMQRMUC\QXHURLTLQZRQP]NR]GYSTUKTLPWQK]XQJUTSRMNITPKYOUJ\RYQ_URWPLXKWKPNTKJVOSTLZQP]MOXVRKTUV[]M\ZKUXIQMXTTJTSQLVON(NNTT]JTPIQLF[SPLQQVTQKTNYRFOGO[OK[MQTLQDXTEORQGNXUOFcKIUCORQNTMRZTTMUJICPUPIYLTLOPTFJSRH\\VMPNRHcG[LMGITTZTKT^KPELJONRSLMVIPS]INNLGYJIUUBNQHGLOSBO6WPILTQNSKPVVUUMPISMIOUQGLSGRBHYOHXDTOSMMUGLֺQJHMYLWTNQVJJLKIQSJTDRHHERJHQQDGSLFDYLWDQCINNTNQPLPJOVL@OMRDKP@EIYQLIIYAO@IFXERLFCWIJKMQIQLMCKYVJPHPJMKW?GJNNTHEQPILHMIBKEHLORDJHMQMJEDHSHTNHEIJLJODICJIHKKDAH>@AIMGEFMOQIUNNPRINYVMOXZHXLMUP]ORKWQ\MSJYMX`QROUR[QGTMZU\VQVR\_ZQPMQQITZPMVRSKKVQVRSNWORTUMQLONOT=URPNH[IORKUQQKTKLWXLERUI\UY\FNLSNYOGPEOX[U[JZQVVKQLMPMX[SPMLLPG`QQPOPXOHMLPQWSYPWMLSXRJOXJĺ_IF]SPZLMMIOQRMSRPOIHLLLYMISCWKMOHKOXMVKTELXPK]RHHXRLMJKUIQS\MOHSDQVF[IWQKTYJXPLINLJRM>TCLYOUQCQ@\=FSWQNMTPKMQOIMNNWEJPUEVOHULGQLb̺RFIKSTO8PJMNNEMYD>IAYJLMNGH=GMIEEPBTPFCPNMMNJHQVWFJIRQLKINWHMIGTMBELNHJFWMNGBKNGKHPTUBOJFIPPIMKBRWIEQFLJM@QHNWJJUGJPTFKPGMLKKHRHLYFDDQJOOFRQMXXMFULH?PHB:=DJHJBHIBSCFWL[OJKHHUTMMELORNHPLK\TSQHTZSLNUQLUTQS`UMKNR\YKRQTUPXLTGU[Y\QMPXZSV]VXSXVVZTLQZ^UYYTMVSXHMPVWOWHUDXHOKQLUTUQT[bXTTLQG^GIQN\MJVQMNNMM[J^TYZTHLXPJVQS\RP\TL^BIHXQLHTPMT\NTPKLNJSOQ]MPXTKDVVXQLMISPFK̺SSMNJURXNQPWCLJLMSGOQLLXRURQHLKR[S\BPKTPMNYURRNRLTMKOEKVGMULNLAW_KREFNQ;FVNYORQH[LRTHL8EMBRRBTHDETJSNNNRIFJPLMKMIRLQNMKHOMWNTOTMPKºLPUNHZIXIOMWLHQWSMONP[KbEITIS^KIWIIISOTUGVVAIXJTAPSTSGDLJQQQELPLDMJPKSKJNFDHRCRDTKMP@WD[UFRESR=DEOJXERNJMNHSOGEFQHJNIAKRLFGBDUM==G@BNLMKTKOIALJKKJMISAAHED@DRIDGJADM8FJJ@@CCC@DCDNJLNMRDHOXSOCJ8DIHKXQTBRIZSCQR`OZ[X\`YTNUK[VOTOTMMRNRUUYOVYY[PUSVLYZP[RXPOTZYNNTZLJZSNSQL\NVIHYOWTQYcSZOSPGXTQORIM]VNB]MbJU]TMQOUSNDMRPMRPQTUWMVFSXEJNRNLZLZRTGFPNRTZQWRXXKRTVHQQKdWMWLWQOILRTIOQLHTTRLTQQHYULMYRTNf\CWQW]S\IHTAT@SLPOLQIQTMD@VQQC[SMZUKKNMNOVIPJRNLTOWOHPLRJDTIMFRHNLMXMKTINS[>HYMMUGSIMHQSCQQSSDXKGQMFL=WSVQKTMMJSNRAETNM̺PMHAVRRQRFTHRKIMZSKEQMPRKWPMSJDO]RLJOIKOPHM_DRNMFIXMIAHRPMOBYPJLRLDHREONRQPENLQUFFJOIKULGQPTQMFAGWSUIJHMPEPXKTMOOSIHGKOFOLCUNEJOTGZWM9OFPLT=EHNQKLMKUJDIG:=KAHA@FAPADBHE<>H@M:HET?GCKJGLEINGVIJLJGMONMTPQHQPNQYFXcQZHV^LTYPTRWTZaHVSSXMVZYQTXZM^YRQWOYQFRNLMLT[VYRUETYUHXNJX[RTdX[V[NN]XMYERZXMGMXNPVXLQIORUMIYTPZKURLEVMP\UOVZTT\TNONTJ^SWNdFQMLMOGXHQFISLTVVQWFNOUPWPXXITTNPJMQQ^]OVPXRRRRQOWMRQSLaMTUPVRHUYVPTOLPIMPLUMTSMQSFRSOY IXWNCTAXLHIXJSRJOJROXYOWEQSNFYFVKSJRNUONPTNP9LPJWL[LMJOOJJBOLEQPZOWQDKGMPXINERTGMWQGKMGCȺQEEQMQHQIQMIIRNVUHINNLHOTHTRWNKJDZPTQHEIRSNMKQIQ?TWJSYUOMRGPONRCTOHCBQKLHPMVHHRBOZJICIIN@MPTGRIONSLIMMMMDMKMJVNLOKBQOHWOTCMOYHPRYPADBKBSRPNIBFDDLJL?HFLBG@@EAKI@EHDBDIKLASSUHGMQQUQRYVXV`UNSKNRMSIQ\QXZQZRPTXTaLI]HU\TYTGVNUP\QLPXLa^TQUXGRURJLXUTZWMVVV[WOVVLTKXTYHSWKNWKKSZIOMTNHSVRXFKYPYRPLTROTZRTRNVQVNJLUWPSNNQQK\JSXhHPHJTHXHH^JYWTISQNbHSLTVb[KULMEPVHIUSDXQFQNSPQS\DQQPENGSJY@@Q\ZQBO[PRMLQRQIRNJQSGFKIKNIVJDLE@TQLHNZQLK^PURSKJJ`PTSKOOTHUFWEVJMUJOJQNA\LNMFHOPTQHSRWPBTVJRQNLIGJJITNUVQźLQLIJRQRCPJIO@]RYHJQHFNELSSJJMQQHSFIBN\MLOJQHOLKNFLJNHLQROHFNQHXWLHGNGXNIMSHRQLKTKDFILIMKHKROPUJMJIKIONQVQTNOQLKLT@WAGREWRAX^MLHRPHTHIHTKRPJINKEDL@GPCJHWBVNK:@HK>EL@QAP?JFHNBGKIWOLUMDFSLWTJK@MQC?IILGSVIQTRN\W[QPRQPPLU^WWLWTeUOSSVFNUYWU[WMWUUSNR\RVHYUiRQXHSaTZURN[S_X\LO\XXHXG[YVXYRXYZSFUOYYLMdL]]PROWYWKB[KPUXXPKTM`QQZ TRPWNTPPQPNRTPLYIITSVMVFTaWHRXXOQLRNQURYSVIQORUMMSLRTQUDSOQQպVRHVSPNPO]NXOLGPPRXOVTTHMLTLJ\MQVMTRNMJHMLXTTLMSOMMKUPVWUN?GIWSWNMUIXVSPDKLHTASQOFTMMSG[NKNFZSQVKM\G[UQYMS[OQMSJBSMVNMNFFLQMDHHNUQٺMVXDTHMJGJOMLDOHQMVLMLIPMQLJVLDTTIQONHQFPEJQKPLSKPLKNKPQTJEHZUGXDIIMRKTJMBMLRGOWSEDYQNVMPJMMOEEVZKXNAZIEUCH\IRKIHBLRQDIVLVMIWILRRDDJGUINS^XHLELL=IVSBLJM?DNMLB=JQIBBLC9IDD@AGTAKDXDPBOHFLKGKTLPCMHHQNTR\NNBPRWRYPWVQPWOXV]RGSWOPWJQQZPRMAXU]CRZTN\XSZJRXa`YZQQQV_UPTSRVDX\RVVXKYTQTGOOWVTJZRKRMF\OTLUQOOQQQSMTS\UGSIKT\NPWZSKLTRRUUVS^`PRP\QFQESSP>NP[ZESNHNTXLRJRTNCOLJNDFPRMJU[PMPGWQKZTźGQPQTLONSEJQYTHPVUKMKOUZNTPIQOTTVHQJIHHNJLIUNLTPJANTMLORXGRPJNLSJEUKSMLFTPPMJVWOPJUJLN@PMMJLNPLIOQDTKOULM]EBMNMLERMPTPQJEXLFPNKWNIɺHQNCLRPLXROLHQZKMXTRHANPSJPWVILKERQKTVGKSIVKMRLLP@TIHULMQMIMQONEPKDRIIPQURREILIHQIQXNUXIIZLLQHPRMSXGKHHKLKZHLHQMUHKYOBHLAQJTFJSKPCLKWLPUFKGHQOMIJFJEFDSJPLEJMAP>FAS?FCOFJOIFTMULK`ELONQLOKWKNMQILTUMLLX^SQFRXSRTWNOORRUc\LXNYXPRQSMWKTZQO\YTTOXTPSSYPZ]VYdX^WVXLQ[MVU\NUTLYRV]`OJQKMQZNOPQL]MEMQ]WYTWVMPTUF]RGXVHSQVSKUKXZOVKKSGQ[YHVVPUKNQOZQQONWULRSMP_JNQOOHPZPLXYNVVEKILPRLQR׺YLRIMP^RRXMYNXM]RN[KEPXKSQURJQ\LOQLKIOMMBQOTDQN>PNFNM[QIPNOXROLXTUUXEXZSEKUIHBHNMM\NRT;MHFWYPPTKQPKHXIURTKIHPLWINQQV^XFRQOSLNJSDVRѺQJAOHOKKKSMVTLOPOTFIWQITNOHWLOLPVGRJLTXHOORRJPPQPPPOQMMPJNRSOVHORLINSZTFRONRTHFOPRLFPQHSHHMVKTPCNP_PHKUPRULELBJNOMONMNFXIIQSOJYUPLNQOHEQPSSHFRKCYF=NQMQMJOILFJHK8FGH@IHGDIPDND=ASGMSGMKBQJGMYFHNLTQON?OLWSRPZP]HRMXPSYYXNTKRLXXLYTVLRPLINZdKPVZSTbRMW\USWXYLSYKQJYQPKZNQUVPVEYM]^\VOSXLKTYUWTQTNZNY[UUYWVHOcR`U\QJRULIXLINQWXQTDOPKWPB^KSLVTRLLNWHXUTMYOKUHUGLZPScQ_QQL`BZ`DEQ_LLLOTWWVDUVۺXLSEQ`HS`JHXNPUEOQQQFOK[VIWUGMMVX@MOTOVULOMFLKWPTHNDRMLTTLNMPVOOXYLJQLEQRQSIMVWLHWSHRVHXVOKOPNLJENWKPLJTLLMOISSPJRIW]EUTSHSWQPDZRUҺJJNQVJNIUPGMTLJSURRIJHLELHNLSSNRXPMKTWLK[EKPOQIMLZKOIJULORPXIPN\FIVHLHSSGVEJNXIARSTQNK[TPI]NQFITLGFPAOZFLKVKIVWQILCUEHJVJIMTUGFOODUAFMDZPPNDSLQXHLFHLBLJG;@ACFF>@CAJ;BOQDFJJNJS[RDLQSQHIIKNNMITEPRJQVHIPUCNcKTMWAKUFNJRIPLOQIIEPLDIPEMNJKNJHYTHWNAILRWHQNIKBPLJJQYGNBOKPQIQVR?O@XKJLKD:NEMDKGHBHEJIT@GI@=IHDJDJFD@9JQQQQOOKD]HKPHQMLZ]XSMRRPTNLQMIPLUUYSVX]NR\[OSZU\RXVKPSS\\TMTPTLOYQTQXMSQUXMa\M\[X_]TNSTXR_TJWXGTKZYTZQS[QSZSTJNhYNbX[IYNSSYZXUUMI[WQXJWGRUMgTX`VVTSWXSYTY`LSUXHW]F[V]LVVTORJ]JWMFTNLNOPVTG[SQQOWS\RNT_ITdXSRQRQLFNUQYDRQPQOLRNGXKKLOXNLPTPSSXUMYTNFNXIUPTSPRJY[XWEYXEQLROMXQIVHPTEHKLSKPOPIXPRJ@ZJRTLMLMMUKPSVRQLRYOKNKWOMAOJ?OSZNMXPWKMQZQԺQMRZ\JHPTHNLMNNIMMPFTTTNTLTLKNFSFYJFOSOQOOTCIMALRKNNQSXVIPRRWLQQQJTEQPQQOHLIKRXHOXCURLTTM@JEQQXUEOKJUPHUKWDOMX[DSMLFXSKRSMOSIHVPZEJRRFKGNNISNQKCDGEROAMJJCEE@FK=M>CEK?M;FPEHIL6ZNMKFLGGNJHRQHVRUTHFDUXYC\CTEQOVKV]\XPIVWWXPSSTKRTVXRTIWKPVR]T]]HRKVY]W`QUQUNTSXUXVPLPYLZSc_Q]XQTQVLIPTNQMTMYEXWOPEIKTLLZVXTMUUFOUI\WVQQYM^[SRYZWOT`[ZVJ]QSQTVNZ\TQXPWOOTXM\B\QLVKW\aKMOSP[IWVVREH`UKLPURFFɺNVJUIMNKYQUMYIVM\PUWQNDMVQVTQPKJZJVQQSOPTR^RZSLRQJKSMVHSQDROW\J[OEYLONPPTTLXBZNQMRGXUJ@RRUPOIONOLSUTQWBQSOZHMZUFJPQJI>SPSRQVKIBMMT̺UFRLOSS[HRCRXQVRONINLTMELQPYWGPLQNJOMPPTPLIXLTQGFOTTGESUJOPYSPRILPRL=KUBJTOGLRIDQWODRETLTN=SOUQPOQFRRPIBSKIPIHMLMLN^TFERWXHWEUOMKITCLKOQGSIMBPOJLIMYIOLLIMAHED==O=BQ8OPASSLNJITPOEQL\FELWJOQIHJQHXKMcS[XYTUQMVSXXSMUXNV[MWWTMYIUX[WaRZZ]F\LYNUTQLT\R_OZ]WP\R]RLWS\]ZYWNNKZF`VQONU[`KQYMRXYTTXWKZ[LQOSJS[WZLUKANPWQRRP^ +YYZTTOHTJTNYQTKRaUHUNPLUOSbQRYRULPTLTZJRXNSXNFUW[LN[LRMNLQST˺XLVR`JLR`]RPMMFLXNSPCZLQTXJZQXRUSNNSJMMWTYOMHPOMVPUIJNJIRSOUMRRUUGMQUPONFIbMJQQLQZUSFJCQISDRMLTVSROQMUDLMMZMXLOPSSD`HRSONJLLJRRNQW׺SOUXMLLPHSLQNPFO[OYLSLWOQVT[TBMTSEPIBHHDQNONYKVOQJXTILQOMUOFKIKROPJLIHMTGLSFHTQOHZWLRSTOQRIVNHJYXSVSJSILROGNVIQMCWLRJ@PDMSLDQKLD`EWYEJQTTHOQVDOJQNWKKHIGHANDJDLCIE<=IIHFIPMPMMLPTQRLMHHE˺YMRIOL[XQSS_WXKVNNTERMVVTPUHNILQIMMQMRHPHKJWMDNRPGOFZPJNDNIRJJSPMRSUNQK\NLQMEPLOMPJGIUIHHNNVKRMNSJSRQWMVONMKNQMRPK>QJSLGPNMPISHIWOQMIN?TKMT@SIKMLJPCFFJIL@E@9HBF?ECJDMFOEMG@IMDHHKLNKDI@LQRITOWTFPMJGKIRHPHYTEPVYY[QMRRSVRC[RSTNPYYTZTPSKUQNRRZ^LTOU\RS]RSbSQRVXZXZRWRULOZ[YUR\E`JYWXVTOY^RWTBQVYP]VWSQ_SLYNKZPTNMRLVLdZONVETQXXXO\RNMYYYOVYXdSSD_GRXTJTMEL]RP]QUMIQVRQTQRVTRUTTMTVLQMX[\LĺVEIRWLUTHPJUGDR\IP]HFLTTMYH]IMWQDNPSPTTTVTTTUPNVPMVGLRKNOPRLYSSRLTHMTESMI[VJXTHSUPVMPTMSLWLSJUNDNQYHIVQOY[TUQTP]NPOPJJQMSEMTQKELXKȺMFJIOVQLPQIMMQM`MKJLKH\SFXOTKMUMPST[HVSOSNKPKRX[QTORMMGPTN\LNFGLNYHQMROSYJSSIO[MGUUIRPNWOMYOPWMMMGSIHMNNJPLOHNJYKNITMOHHKKKL]IRSNORMJMIPANRNIBTEFLJLNID?FJMUKGHIEERIFI;P5AQJBDAMTNOLHRHJJOGPOPTIQEXID]KKTSTVYVRF]OHXP\L]YM[N_KLNZM\TWVZ[RVKZVSP^QRNZYNPZKHZ^XV\X[XPPUWP\YNQ]QRUSTNRU^M^MOOTUGUQ_TNZHORNXWXQ[Sa\QTMUMLTSM\EOZW[+LL]QTT_QKVJVaT\OQCSRVMAQTQPPMWEMUJLTU[[VELOSKYGNXHeLQSNTPRPUغRSOTPKTTWWTYOLPUMLBSMPOXBQ\NJMNRRLXQNC[T\E MRTMXSQP`IQGbMJXMWZSM[TXQCSPP@PNQP:WMJN[K_SV;PZVIOTTSCVRNPOLXMTOLLMJIUSMJTPLMPJPHQHRNH[OѺUKPLPTLINRNPTJKMIRKQVPMLL]DSJZMLGMELXQHVOMRXWM\KVQKfLOXIHVENJMHLPYSUCVUGEKKHQQVNLOLTPTTOTCVTILLMK`@[LOSSTOIKGNHJEMLXLTIOXMKPONNTNNMEVQRPOKHHFPHRAOHP[INDNOD@FNE>O;JDL>BDIFTJGBAKJUALMAIS]MWPDDHOMNLGWMUMRTTXPY[bTWW^YMRP_`\LWO^[MbXXYT`TXX[XI[MN[YOTYXY]XTXWRcQWNMYLTZILW^STMXQ\MUXNQWY]SNP_YWTMN[]^UZUUZLTSaVNYS]N\M[VZTXKPVQXSNLXRULNMYVMJOMScOPVHNVTPaST\SRWVPMITWOPLZQ`VJULO^LQXSWVTTTɺVRYLKNTXWLIbHOTLSJE[NUSRVLNJQOSSSXLFNQRTTHWRMLOVNROUZLSNUQJKX[YZJNPMNGNUNUQTOVQS[\ONJXAVITZRdUMVOINRTKFPLQQMPSJUJY]QQUMXHTGUMUPMJORUGSTNKUPQ_LNLLHKQHKJ\YSKKLRSOTKSIMTTERPWLVPP[IKJVMQFKVMQPRXIWLGHLLRQW\UKSGLTNOKQMXKWLTKRFPMBPUTVTEPPOENPUQNFRJRUNJJRQNNRNTZSKJZDSQZILLJTPMQQLNHISIOMQ`DJLDOGFHLFA@KHTSIGPXALUQTTRGNPOTRUOP[TSJ]R]JZ\XZZUXZVTQUQXNJW[__ZEZ\[\ZTYH_XVZTYPTR\\USWS\^XQbRXZU[UK[PWM]ZJU[XX_XKaUQJ^MNSRUXaYVQ^[QY\EN\RZWKRMV^WYXRNU^LXUYQaPQ]XOSXPQSKMMWPWOOPXOH\OZUYTL^VTQSQSSTLUW\P\HNPYMHXWRHMMWYRYZZQNZGUO\IQRIXQMLUK\SBTOFSbQSLJEMLMZFOKVINYUQWMSHNW[RMWOMRUMHURRVLWNMQMLRUXUPLXTJKMDYQUKYRNJNI[YHSMJSNPMNU^E]LQEUDQRILKZWJMRIRTͺWUJTULWTJXOP[MWJHTJOOOTKNQDLQMSN]\IMLPLQDQOTKUN\LZRSZLHKTRGTQMTMTMEVWRRV^SJUSJNQMRSQMKMWSLYSHZJJKSNTKNNQ_NLFNMVREYOWRSNOP\KZNKOYURTSVHODXGQMPOMVNLNNJHGBDMDKKCLBHFJNAHDNMTOQTU\YVXKEMXQMTONMRVQOV]WRLJPUET^[ZPXQDfSSSUкWWLVMWMZITMPU_LHUQ`MORWPPTLWMTGKPVLLOO^JUM TRR\LPaEVQLYJNTSSRXFMIWSTRWTVROQVMTIPCMHTVKTJSMRK[KLQMRILLLRLLSX@N>N[NSRJXMHYJU=VSIUI@QOĺMHMOPSTY\H[KRRKTHXUNOELIVYFUODRMSTYORYJMTPMTVYIEGYHXPHMRMSD`JP^XMDPVQHWHSSJPOOTKDVNLYOQVJNNFHKMXMTMTLQPPSXLNSNPILIOHZUMCQCTPQIRKGOSL^BPYL@PQIVPMNKNLBRNHMTEAGGH@CG;E>MGNI?DGF@DTMMNHWGVIVOOEDSLPMQNKLNLPVQPMMWRWIZ]ZYSNaGPSQTUPMNWRMQTRSM[XQ[ZVMT[XaaOQR^VRZMTYZYWN^XQQHY[YY\_V\NZY\KS\X`UNMMI\Z[`LRA\KRbOUYSFOVQQTRWRM^PT]QNNQVNSRQRJUQI\QSZVU_ERZRYXVTZPUIZZUQKNM`RWGW\RT^QXUVTJ[RURLP]WĺZNNQQOOMTRTVTPJTLQPYYMVRQ[LYVMMJTVYOWRSOIPIRQaGRCQPSF]NVKVXRSKTKJEPLWLNIJLZVNZRLK[OKKXHUQWMGMFLXOXZRZXMGQSJQPIKUNT@SLFMKTMRQJUQRW\ѺTJLPEKJQPQ`UEXMQKKRJTWPNENXLNTRHVIJDONRLEOVM?PPLLFEMULUQKK^KLGSTRRRJQQJUO]TQTNILEJFQSPHIVSJQRQXPMMLIVHHRKVWNNGUMQSRQEUVPRQPPT]LPOXHIKMNIUMTJXJJVTGPC=FMDEINMKMM;QA=TJHZMPQEHRQUONESIMNMIT@KQRLQHLNRHPOL?KGD=GHEN?QJMMND>KQNDFCJLMNL[VMQOUGNONOIDKDOPQKRZXRTYTPfTXNfX\P^PWRLMIRbQaTPZbTVKN[UL]UTUOTU]TRYXPR\TTRVTKV\XPRUXQ[XY^XXYMSMQV^RVUW`SPK\[KRKJRVRMNY[STQTWPVLWQPT+QWMQTOIPZVSXQVLS\NbVYZHQSXPL\MRO^ZRPN[JYJPTTTNPRYONLUMOPXM[VXNWVSEQFOBQXOKYRQEMQJJH[YMW[NTPVOLJ`IY_KYNZRMTTTLQLOQSVRTNHPSPIXOKTXQXNNXOLTJHQIRWOSNPLMCWHRVMKJKUVOMWKTLQWORQZTLXI_SPXXRLNOQPBSUSƺTRXKKWQXDNKHNSHONNLTOILVQEHYIOTTZRPPQK_SPQBRNSMP[IXY\OKSTLXRXTRIEWYYUZMLMYYUKSQQODHMTTRTSMFYXNT]OXUYQISHYNKLOPSGRVQIPYTSTOVKQ\HJMNRCOSYDNSOQOORIUFRFLAYPMDF@OEV>EEHGDFDMRHOJBQEGTOTPMLMZMNJKQ@OENQYXPSOXWRRXWU`TWSIY]ZSc\\\Q[PLYSVQXZcMSY`UY]`TT[\aXT]UU\X[VPO\\ZVQc[ISN\VJR^TPSUUNVXTWY\`PMdPTSXXQVVMMQFSRRWUYPTVXPR[UU]OV]VQ*S^R]VVLOTJWPfMQJVULXaNTYV[UHYQOPLOYaPMHVT^LPGRMT^GUFNXWMWXYMպLPXWUSJYQONNMRRVMSWPLRNIOUVYPOXQRMWWNUPKPXMXSWHPRVRHQ\OXMLZLMLQX\GT[MS[QTWJW^KNVXXTMLN?KNUUVIMPXTJOVV]JUKQH\SR`O][POWQTMIMHTVQNTQNҺSGFQISKRL`RQ[GLQPGELTTOLDLQLNLRP\YPVI\MKQKRVGLMRSTUXENEQK\RJYOMYLMFMVTORSP[SXOETZKJUKPLHL[YFVMLUSWNJLTUQHQQQXLWXLYQFXFUMWRSVOKOMPLMKWFNOYKKPLQTZOMHMLTDNLFNTNDCBSG@DCLMFCHNQWBOAKNMRSLPKXFDRSSJESN>QIYJBRLUQBYWZSVWOKTMXQXa[VTL[bM[UPZRW_QVQXXWRJ^MYZUYO\B_]UYVUY[SYWOTPMX^KfOMUTTXPO`YYMY\\]SWTRWSHR`LQ]VQVj\ZKTJ_TOMWXIWTYUV TYTYOgP^TSTOeSSNIXYNPWVVQUTOLQX=SVJSRQLPQYV\UWWZODTGWV\WJRROϺOSDUQ`LYMYIYaOLSZQXTPWOUMSNTO`^ETK[SPYZTYH LOMGPQKOXSOSV`:SXQQPWP^MNXNJNPHLETYTNQLZRMMNEXIML\RLRGHQ\]GXUPQUUHOQMMIUUaVWY[KPRMG\QFSRʺOMQVPTMIUJ[NLRRLM_I]NDQJSJLPLMZJORRLLZLQKS^NXLQLYKGVGQLFILNILBUHOPLTSWMOTOTRUQKSKNOOSWFQMPO\XSTJRFWLULQ@SMKQTJVLQHWIRNTKDMKNMFYPNQYMXPQLRLSUFKRSMMGFOJZEID@FNG@DCIDFHLF>VAGR=DSHDIOV@[MMRIbHPTRNQGIOMTFYQ`XSXRVIXEZVaaYUd[TS]aYRYYWJM`WTcHQSPSYL]]TYXQXXS`SRWWO_O]_NUdSWWPcGaVV\ST\QTTMPTUV_UTZHN]]YcSN]HLT[UTQ^\\XU_VNKRXTZX\+UWVV[NPNYXUO\JXZQQ^SMRWEMPMZMLRYNUNUP]NTEYYS[^LUVUZZSXX\MTTOкVSTQSQLYNMN^NKVUIZWZNWK\XNL[KORXZSTVUAXTXKNNTJQIQIOTPQQYW^OZ]PSQKMQPVWUVGPLSTH`\QJMTXR?KH[XIQYQYTaNMMFVHPNPRFRQKNINJKKRQUPSQHOT\OQպPKUQ[FM`MFOOVPLSTPUQNPNTWHUTRSQSPPG\VPPRPJ\KXLFNTJMTQPUWPNUYWSOQHXRXPUWJMHINQPKQLVRPYTRR^INUIBTTVGUTGNILRLRP[MKOZXANUNXMPYKTLTSMKNITT^QQVHQQTME\PGOIUDNMPKAJLKDHHJEARFBIASBMTDCPCRRQSOYYXGXYHLVOMUVUVWQRVSLXKO[TTXOPeTLTaPTMP]NTNONRdFXMSLX\LUVXT[SYTYOYXa_WVNOHiXY^XVZ\UU`X[ReEVTQXUaYV`]Z[VUV`UQZZHRXUT`S\[VPYaOLNLQSXTXX\W[!WXT\^ULXYQ]SYSPZ[QNXMMEIJXXTST[YKU[GKHROPTORTT`THNPXYSTRRLST˺KTQQRPWOWMdNWRQJNMWRQOUYJWWZWSMWLU\NST[SKPQVOGITGMNPQQ]OQMK^VYQTGTPLRLTOVOPVJ[WMQXTPPWBKQ^NTMLZPNN]TSWPZMQCOO\PEVOLQFSHMP\OTT@LQIOݺLPJOLHPPGLJQMTYUJYNNQ\OSSVURSJYYUNLTLUQNNHLZERPOZYSQUIQHXMWU\NPIUXRUETVJQMMVKVNMQNXZNPQJXRWQWMERTNRTVSRRMDTTQYNWTTSNYSMO^RRODPUUXSMcUPTPORELJXWHXKQPNGBTQLBKDOIOJMHDCSAJLL?RHHLQRMKSJUVMUAVOXEQ;QQPGXVXSPRULOMU`R]OYaV[Y\Y\VRRT_JOPQVXbLL]WUQiLZ]U[][VN\P][`fX[YNVSPXOWNRQZPUXPZ]XQV]TWRVZPZ^VTOJ[RWQPTVHPZNVYHW\L^PK]IQ]NW`PONI[Q[I^\ZRPJ^bMWVXMMYZ_QWOSJUNQYXNQPTQQVLVXSU\YKTPdQRKMVX\YX̺XTPXUW\RMRZTQPGQZJM`NK\F\TLMXMOUJ\XNMOHXVTTVSTNSF]PWUYQQYLUSYNXESQcJTPTVPQONJIVKEVX\RHHYMRLKbKKMTOJOPPLXMSZPVPKVNDOO[HRUPQUKIVSOGGֺJNUKRNOKSHPQSTQUPROPOAHTH]VUONMPNPXNOHJX]WUNZPXUMT]QSPGOMHbROLWSNXGXSUJ_WQPQDKTMOUHOLeKBPHL\YDXTX^JLMSTVVTFQZXL]]QUCELIFOLOESYWPKOMJNJVQUNJWQPMLGLPPDTLRCGJJLGNIDTVFLK>JJMOPCFHJZEKMQWYNNE\HTPSNSSMXWVLLOUNWS\Y_RJQJ]Z[TYUiYIO^MV[XWOXVWRXNR^`Q^_TPS^\^PTQWYZSaUO\PYYW`YWaTWUT]Z]XM\UTTQQ\UYMeXIYDYRSZRYQULHXOU[XYRYRXXSPZ@TO[(TUX[\UQTSMTTeSSYM^PYTSHT\UVQTWQVNYT[TU[XXXTRUNPXUV[ROT[SO[Z[ϺNNWXLQFIUNP\KNWPQYXLSNLOMWQSUXSVEQ]G]RHOTYTAO\WIXSYXRTUI\JRW[TJSRGTWTLEUSRLIOVNOXNQMXSEKQQLLSSXMZPJMNWZNRTLSTK[UVOOMLZJRRQW[JRMIWLκXLRJ^UGQURQVPMXSOMTRVZUPVOJeIMTIROHSVSYHLYXOIIRZ\WLSOKHOZRMTMRSTXVJR__TMTZRIEQXMRS`FQNMLQONQP`QL]VSQYQKS\KRN]MQRHUNP]S`U?PNQQNJLPQM\FPXHZKDPQNMITPQGMEQLKEMOIAFMMGDMGHFJKKGEKQQGGMPPVKOPMULNHORRPUXL\XMXVISYXM\UaM^Y][[UVPZ[TZR_lWSZNWJWbV`TXV]XPVYWYV[LWW[LaU]ZYHSRPYaRWUWL\SWaVOWVRMXTWRTfR`Q]V\X\W]WQT_ZU_RYPOTT\NPPYDWZ)KTGS_ORW]OYW]ZNLUdTNORVTNMIPRULWXXY`OLFXQMT\XZT]NUO[QZWOPQZPϺWUPPVYPQSWDVSXXOVPRYFPRVYLPJWIaIVYVWSO^LTQb\VRURL_MPJO\PRDFT]_NHW[\PPOMRSJTLVYRYSTTRUX@QOKVUSQE[KFSWPLVIERFQ[CIXWP]F\LQ\SHN^TWNUHMֺSNXLRO\ISLPYSQPMMT`QKRWMJK[NQUJPNLWYHHSQQSQOUY]LSSCP[QRY\UHFSJKSUTV]YQKNW]YNT]V\NTMKKPMHPMSQVOQLQMOYNVIUMTP\RRUYNWH[KKJJX[KZKPRXTTSMPLMIZPWSVLQOHOGKTBRQMDHLJDTIGP=HIFNDMLG>LEFLITQNRJOVPNVHHMRNNKQYUQ\aPM[MGVTWXXXT]V]RRXPWMYVYS\RLYW`]TSWKP\SQXPRX\^UPPQTEXRW\V_^WYQYYXV[XOZ\^UR[P\_JcS[QQ`VX[W`\]QWbZU^XPUQ[XNKXHMaQXTZPRXU[RTZUJRPNSRQZZMVYTcOXVXYTRWULT]NXRVVP^ZXRXMZUORUQOIYFSKTRPUIҺHZMRPVNF[SVaLXTSMXPTYKYUQRWX^PTOW^URXXVUULRSRP_PPRaRQ[MPY`TNHQRHHOZMWFNVUMWOXOOTSVKVTRFUTPVSVLRKXZSMIKPLTRPHN\QWLRLZMVXLTbHTGRQLLKNLL[SLL]NTDVINX[ZZ\LXYPLUWHNO\JLTPXSUJ[`MWONMVPTERIXLLSWHWTOPQPNMLZLJIIMFDH\MTNKDYYQXOQZVRPKOVLFVTQbFXZLVFMOVLXPQVZE\ITIJ^Q@QJLUVTSJ>IRQMZQPKGFPKQIURGJJILQQA=SEPAFGGIINEHCOICNGSQHXGOKGLRSILOLQMM?RPT^NOXZ\ZWT`VaY^[YQVaV^M\RSQU\IXWR]ZYV\ZXhadT[XR]ZR\XRWOVOVV[X]RY\`YVEQYVWNjP]QWZ[Z[]PT]YUMNZVbX\YO_bf^^\MXPVI\WYUPSUYK[WU]TXOYNZVZQTQ[W[\Z\XYMM\UPXa[\ZTMJ[Y[ZO]MR[WUQKOQTURSVVLWVWWZ̺RU[WOPWUXYVZQN\Q[IXTO[BbRLYYNQZSZLWNUVOMK[QNZFLFM`XSLYPILVQKTXISILVRMVIIS]TMVMZV[`]HPUHJa\Q\LOYJMaWQMSORVLWK`QMMPOLZQHSXIULYOILIP\ƺXST[WOL`YVPSaVTFVJKUIQA]JSRUGWYM\JKLSNVXIOHYR^ORLQOWIV]TIO\YOSNVVKUKMQTTNPRUOSZWNUFPWXSNUMJRHLQRWOTHTSKMPMKKQRQWKPJTYXJPRLXQXEFHIaHQOITINLPDPLTGPJVJUMNJ?SBQLDKSIMIEVHHHGHI=LADOTNPOOOPLSQHMWLMTRTIXHPOVRSQNM^YbPVTVR\W\XW]\aW^SQXLY^U]TNSYW[UaYUZWO_SL[SUJh[UMU^dMVW^O^XcRVNRQlQSY\QPOQV_VYbLOhXTNS``eQUVZTZ_WKW^VP[PKX\Q]PYL(M\QVTQ`S]WVMeILN\XWWQQYZ[XXNTLZPPR^ZHSPVS]QVVQMTL]TRTU`ONWTJǺSMRKTI^QQQRLVUSOYSNZZ`U`PVQSQNY[SROTSNPMOR\\TbX[XJVTYVVUWPSNbKU\VPVW^X[VOUQbHVOT[HRPGVHWVYVHYLPWTIL_JRTQSPTLQWTSSRMTR[VBZ[LRPTVZWR׺eIUPUMNWMIWZNHXJQXcTUNPQXXY`LKRVTTPPRHTPXJXQSQZL]TVQLLYPKRVQXVZRXNNVaP[JdYMNUVQX\[SPXT`YM]KJUWRNUPQSUQW[KXNVOAJNEKLJ]QNOWLIR\ROLNWHTMRPQPTXVXKUBVHZWHDSFKKODRLHEJPFCEBFLHNULRINLNBLYERGO@@APRLVIOPIDROMXUIN^DSJRLOU`SPVN[UXYLU\ROSTY\XXPZZTcZWY\JPORS\VWZ^]^YdXTZO]W]UZTUUZZSSYQ\FO]M]]]PYVLQXVVTT\`WXP[U[PU]\QZX\VZ\XVRY\]RSN^URXOTUTKPTPXR]YPOLZJ`WXkXGILTOTOHUNT[ZPaPRQEQXXPIMT`UNUO\FIPZPQW^Z\HO]L[UQVVL\SRTYaO]JT]\SUPPTNJYQXXXSYUT[XRQaTQV RTYPNTQbIZPMRRVBeTDUNXW][VKT\OKSO\L[_RJ\\TS\ETSX\YMSQPOVHKQTMYZIRVPI\QIQPRTXK[LMTRZQKXJY޺UTBNOYURNXLNJHKYN`QX\TSTJDcFQPQUK_L[RXTTLQNQ\PIYUIPK`TOUORHYWPQJNSRWEPZTMZSU]]HUORPQUPLLTPSSMUYY]UTIONP`TQSEWRQRXVSPBTNPMTTHTRNRJZOV\GYMXPFNNSRSDLHLLINJVQGLCXJVBHSHNJ>KDLFJDBIXOITNSXQZOKNNFQJKOOL`TSUSMLRTOXSTOYU[UNYUZTZS`UTMNXYZN]LVHR`ZUXY`YU_Y^XN_Y`WPW]XFX]TSTQQdTRRT\SX\O[Za\dTQTTSZUcZSHMIWYdQZLYO`QXPVP]dXZWV^cPdT\]]XWVTTTXIQYNc[TQQWNXP\]PRXM[Y\RVYK[QTOWMTOTOWQQM[]QXQbTbVSWYʺYSQRYOVQMZNXQ^QOQLIVKXNI[QSQW^VVUPc\HVYPVPKQWZLKRRUU^RNVVQ\YTVD\MYRR]TPTQTVJSV^RINZRZRBLRQNMPMTTQNSXKUG[\SPbPUVWIYLJQXTIXPOQWTM\RTͺEYQTIN_TVQRR`LUMGXNHSXVRILSIOJE\URLRRU_LNE^XPTRNWXSSFTSQOPRTSZTPRUGRPP]YTEL\WFPYPW_ROOTGWRRXNZWLFR[S^TPTPWOc_POQWNNHSUXKTONPXZJRRIPSDPQJOOV@LQKPDKMZTMMHDFDEI?DGXHIJ>LDFLMWMJZLTUXHSNMR\^OLPWLP[NNPQEOMUZL]]eSR[[PRYTW_HQST\T[TUTXN\]S[SHTWSW\_P_YU]`fK[eWYY]J\WZ\YYU_c^[^SXUW]bK\Q\UQNV^[_SYZaT^Y\S`\YQMQ\ZUUILXPXYU\QX%WNPOP]SYQ^ZQhX\PWReSNUVTUMQTOa^^UWQ\QXQ^ZZTHHKTLW[SRVU`]IFW]ʺO_WSYWELMLNQaXXPTQ]WXXUXTXXW]Z[PYWPMHH\MTTOaPXVZXQWQZUJX]dTYTXH]FNZYUZK]MQXXTQ]\XQjPVYCQTUQQULURDUYWMNLLUVUSIVQVV\KSVSMORVMKXTTXXXںVUOTTY^XQUT^\SWOTSWTP^INJQLPWO\SP]RYRXTQ\PVLW[MRZXJV\TJSZ[UXgPTX\XMVSTIXHVREVROIMYUNKRQ`TUQMFZNPVUUPTRWFWWMRRQOV`QSDTRPUMMXTHNLVRIJQTDYNEORXOZEaPIXRLNMGPCRHESB7OTEDEQFDDKQDRJHRGSODXMSUMPQSSTLNIJXMJRXNSOeUVTd\\cR\]^eZ]^]ZVd]\XSiPXZ]U]T[VU\YUU_X`[YYT_]Xa[gIVaPSaXRV_MabVYX^RQT\QXKT[SLSTTb]_V]MVYS\]YW[XaMXaFT[WO\ReTYVRXO6Y`cUP[Z\ORTYk`ZWWHZSQU]Wa`QKU\b[`[Y]NVTZ_TZRZ^IZXXLYNVIMXS[ZϺIY`MUOVYPNLKIVKaPTQX\LNY^UO[W`JNVKUUUQRKQZUPaNNLIR\STQTWSKSPdWUPPJ]V\NM_PVOWVSPdMNLXIL=XQPRdHXRSIO@VYQHWWRTJG[OXPPTQ`VRSWUKTNSKHMVɺRTRTZTZ\N]OXMOTR\MQL\LOTM]]LKITITO[]OIQP_\MQSSMYNQZCXJLXHXNVHTFSQYQPPLNIQDNNVGTLJTSYGRUQXTUJOOLJVVPTZQSQh`KRUMMPT[OV`QQNPUSQQOIVLRO_MRWRVSMNKVX[QTKOQRFQDKBP_IESOGHMQHLHHIOMJKHMRCQRHMOITQZJOOGRHWPIYQKTXVKBRPQZTPOVRSYTW]c`UQTg\_aTSQ^YYPZ]U_YYZ`RSY]JR_GYbWUaVKSX\_\[K_bQ\daaRZS]VRdZXbR^Mea^a_Y^T\\^XQZXbVQMUUK`XV\[M`UVRV])QRKTNVJbXLNO`VVMRVX[Q\TO^SQXN]RLMSSO[NUXPQPXPYSJLWbPLUaULXTPӺTRY]XRWPW]QW\ZWJQRXNKR[XVN`KO\IWPOHXOVNMTVYUNVPXXP[PRS[]WYQVMTQTHYTTOLONTUXJXP^T\KUTLNNZFROSKWMIOHNIZXZNNXUUNROOTSQRTJQZQSWYNG[GO]ٺ\SRMLQNRNSSPXSSSPYBHYPD^TOYPMPYWONWNPXWTXW\G\KQOUOZCLTPWLTRRMUHMISHOfNN`TPNORPOLPYL[HQSXNULYHQTTP`SORXX_OXNSXSIQU[LW]PULOTRPKRWTONSNNREPPWTUQOLJPSNOKORDIPENOESIEITFRJDEMJHHCGJKSLRFTLGTPRJTHOKQPOFNIIRT`LPMW\^^XTZM`R\YV[ZXTdLWQSbOaYOT]WXYRXU\R\V]^S^ZQ_V`SaUZaWRV\SX]YRZVWYYTcWT\\WL]X\O\P]VQbNXRY[_Ya]\YS_XWYRWSW^W\]c[QZS!TT[PJUh][XP[YTaNWNURMOYP]TQQ[WXUXUOQZU\OP[bOXN\NUXXYZOYbPX\aӺ\NLWJWTSH[UQPSK\WQPUNLPSXNQP\`DYQ[UYVIa\YTQXWRMZYQTdV\TQNNSX\VTQQSRSQTMUPLTKTS[IUSZN\NFPPJOQXRLXP_OYXNYPVOeMS\WUQMSJTQTKaDXHMNKTNTͺZXQKFNLR[QNTJTDZRTQVTAOWWNSPXK[KJPZOQIQSEQWTQLK]UHU\OP\IPVHN[VQNISNTSXVRVX[UPTFHNURSMTPTIQKI[M^MS[WIVXW\UUOTEXNPWQSUPXHQ\MPQUINUVLTMYWIOR@WLXQIQLNYYXIPCJOIRIHJQEQTFLQAEENC=HOMQTVSNK]RNHZVE]VNQCTLLL\RULPZOZPLYRYZORS`SUUYVbQ]c[U_[U[PRUNaP[UV\Y`UZXZU_OeW[e[ZVQO^TRTYZTQPYYVQRRP^E^Y\U`TV`Q[VWPeS\YTYXURY\aSWVWV\R_`^\\RbN_T'XPUXNWURYRWVbMOT[RYNXUP`QNIWT`MQROWQKXT\MaTZQL\WRWI`XSTQ[Y[YպV[QXUXLZGX[WOSXTYPKR\SZPUUYUXSZOTSYXEWXTSPMY`MP[PTVVYWVWRZV\PK]HVRQQVY`QXNRLLQWXNUUYYBEWSR]JQO[QYLKNQSaTU[OSS_NNM[N\MURYSPKNUC[LQWҺQ]ZQJLRTXWLVIXZNVHHH\UN`LSUHWO]YTSUQOMRZYXM\OLGVUKUSXNHRYNKHQWR\PLVTSLWV[XLJXWQQP\TVYPXRTXHYKSMMW\RNTRSUY_NXWQSRUWJC\U\MXXKS^KQPRIQJSRRSZLVTVTCENURI`SKIFKMETDPEHMBIIHQAMPLHLFHSNOGKLCRPOSHSMOSKZOTHSWYMWKLaK\NaB_jX_X]IZX]TWRVd^[T\X`YQNVI`\USG`\\QZL[[X]Oaa[TJYX[SRMX[QMUVMb\NXTWXWYSOXY`YYa[ZV\W]XP[RKS^b[UQNU^UWQRZUXTTTUX$VWXUXRX]SYQQZ[]KZOPPQ\]LTMUT]QV^TTX_MTYQNb]XIRNMHNMVXZQTTT\PҺ`\\TTRVYSZYZVKXLQSP`XTTS[VYY`MNVOH\TTPTPNPbSSZRVPZ[SPPXEY`_QOd\OUVI[QQWJc[WWOUVVZMMOMZ=PSZOYTYaUUOMOQQSQ\HUNMVOQPNPNUEPTNUIYWPWRT[ߺMPIVQIUORO[QXRHKQWYHTUWTQXUUSNTURUOJYOLXLUXVPQ]FSXTTMONTMRRR^SCJYLYYQUNOVQUUZTYSLOUTWOMMVRRHQUb]VYHITEZ\XOTTURSE`JMK\UXS\SQQVOUTSU\SZTJVSYTIYUNNIXRQPOTIKISZLGSAWKCMOEHLMMKKEDAIMJQXUTSPSPOUDSNLMLUNPSVRQMG`OZSfPYPYUYRZSTRX\OTNQNYYWeUZTPROQ`]PXb]I[]URZXVV\eUaZbX\TUZYgY`^TXOYPTSZ\UWYPZLVKYXRkSYmR\VV\cL_`QX]SZ\UOKY_`VPTNV[Y]WOYVJ[QZN]WT[M]\QVQd\URfWYPXbZVTT\XQJ\ZQRXWbKVT\]dLMTHW\VкSZS[TVNLOXXVUaXWXSZUWTWTXNPdNRSSVYRNYKaMYQ KSITZVfP^VPYOPQZRHV\TPSNP^[ZRRUYXPQ\XQLVPKUP@IMR\_SLS[XQK\XVWLTlJJX]XZLRHLSO^ILSJ^dMUVUS׺MWMQP\W\UMO\NKNZTXN\\VHMIVQNRXXZY`XX[L\KTPYLXTHQKVKTZ\NRQLPUPaJZOROKRSUXVKQNQ\MOQQRVYDGGXQXQ\KZ\[[P[V\\SNHXRVIP\QQLTOHWU\UPR``MNUE]YMOQILUN@_MWPZKRMYPMLETPMKLCJDOOGPJMPLLEBJHLBGUTMKK\MMOOG\ITFNDPPKVWZHaIO[N[aaRV]WQdTZQ^R]TUXJMW^KTeW[X^\WJXZOMYTTS\WZXZYV\UTTYT_\RV[X`SS[YWVKX][TW\XXYaS^]TW\UYZT]O]VV\XZV]^\\RM[YU`XTXXNXVV_Y`ZWX_XUQa\XhV_X]_XWWR`^VWRZXXWTNYYFS_XTOSXUPR]]VX\YeUYH[ɺWM_^TVXN[XbTVTC]Z[VZRYWWOQNYTQZIZVWOUWRO[T YKS[ZPVSRWXURaOGSUOSXVT\bYTYQVEQTLQO[RR\R`Q[CHNQWZVS[PKXSPMR\[NaQOVUXQVQR\Z]KV[RLPNMQUOI׺ZQXKXV[VOZETWVQPUPcS^UXWVW\JVVTPSYOX]PUIEOVQN\MXWWMRZIRO`G[P^QNNXKGQSOTTQVGV]YTQQYZWHNWSSHUQKQVYIXVWUOYOJQKYVYWSRM\TL[KDQV[STQOKIMLTIVNQXLOLENU`LMHRUJRQHLLPRNNCPFJIKNLTGLGRLCEEJXLQMSZXYVIGSPXLIPNJ[SJWZaSZW[GVSXQ^aU`UcbUWR`VWQMbPQ_\Mg^TTVYTS[[YZYUKXRd[\VVTMcLPQUVPYhQ`WXaaU_Q\VU[V[XYaV^VSXWQMh[\ZSJY\NZVPZPVSfM]][JTJ\LY&[MQEaaTZQTORiXNY]XQ^L[ZLO\OQMZRT[TTRW\VNT_RbU[NY\MEI^ISY\YXTƺRVYVVQUXYbHWQQ`PMUaPQQRNN^S[PTROZUbSITUNPa\UONSRYMOY`\LSOTAQQYQH^TTaRfQXPTUR_XLRRNQ[WQDJUH`RVTKX\E[RVTUXMUOVSIQYIOXXVT[\N]JSLVW]VUۺUUSUMPRQJPSZdDQWTXRRJMEVT[Q^QRSI\YR]XJ\WRPYYTXLUNPHKFV`UVLUJLP]UPM]TOIhXRRRT^YPIcPZKMQ\UJOPUU\d]QPX\TTXYYYMVWPXYULONQVL_PRLaONWNbLRYTSZMIGTKWR[MULPX@LXINGPKODFBQKIJINJHEJMKCMAMQNWURUO`Q\VXQVTYMQUZTUVPRYQZQWXTRbXN_T]T]K[QTU\QYXXgTTQ^^aNS_XV`V\U^LVa_VWb[a[TXY[ba\T`[\aZ\PXTV\VUUX^S`TTUPU^\X[VVXWU_WGQ`bVRXNXVSZ`V`c_QM\XRaV^I]QaQ_IYQ\U]\]ZPXYU\TOPTZJW]J]T^SPXZPRP]WTI_WRWRYKXVQ\\UUպY^QZVVDP][QRLXQT[P^N[KZ]NY]aVUK`Q]MU]\WQOT`UMRMXVOFYB_PNTZRJWUUSXWRRZXXXLTNNJLRRSSQPUUEQVVDNTXTSQUR`SVUTKRMPU[QXTPSUOW]VVXOSMYRYWaW_QX\ZSVXKWTT^\VT]UZZTac]VWaZX[XT`\^^Oc\_TT^Mi\\STTT[SXa`QXY`PTNZPN`XZNXZDa^a\O_W[^aX[PVZ_QYPVbZNYP[^^NU^\dQMZbaXX\UZU[YWTT]OLbMROXeVXF_RYVZW\SM]ZXY[I_TIUHS]^RLSQ[OZ[QVSQWZVO\[YNYL\XOXZWUSU^PdJRYRXQKLQXQKXVQS`PQTMUU`Q]RMPK\QLQKU\YXYXLMGO]TYMQSXKQUHQNR\]RMRS\Z\SLNK]SYXHXJ]QQQXXRVN^PU^QO]IP\OUTIXFQIWVXIXN[S]PWQaUR[HQUJTOGULRQCX\QZPS\T[SL]LQRP`^WQPRT[JTULPKXQS`PQIYNPKROM\XPQZPX]YPQL]NRObRVMZabMaK^VQYTZWSHVYSNUQNM\TXWXLTX\W\V[MXRSURWXRNRPMINQQIVLOBPT@VGLGCMKGKQGFXJKNMMSTTR\MQL\MNKXRHLQMJQ^FcQQKT\a^eU\ZYVSSZXbUYfRUTYQQ[XZZZKYM]XXeYXQ\dVL\ZWRQR`\`X\VRTc]WaYMTWT^MncNUU]j[fgXc[XV^O^RRV]\Z^XYiRQXNXS`\XaXTWO_KMXNYURPVHSUYOTgRVbYQW]aYMZYTV]OVbLTYQTXUWLQI]aYTZRVYYMhSNU\LYLúLXX]TVRJPXSWXXVbPL^Y\OMMaQ^Q]VVYVNRYQU`PXX +V]UI\VX^T[]XVNJJfXXVYUNQZT[PUXWKQUWUY]SWW_^PEVaZUXXUWUMTZTNKQXMXM]SZPYQPL\cHIaRPWXXXJ[^XӺJTSRdLYUZUNQXVS]TLacJXUT\Q[UT_\WS\[NTPI`O\PTPPXXSR\]NN[POOJXPQX[XR[KXP[YWVTZ\TWWQXPRTVaYMSTYPRRLTRSOV`dVXRXMZWYQ\ZXYOVVROPS^\NXMUVKQR]\ZX\RL\YXKSQ]O\INQTTELLHHPFNKMOFQLAPANHBOYSZSUZTHMYWPV_HNLMPHPQM[Q[SV]bXVYS`XX\UbbcYV\bb\UX_Q_a\]PYX\UbQWT[^U\^X]Hcc\bNR]b_c^UTb_PR\P\WOXW\QSNT]L`^^]\\TS`WQ`\UUUTT\T]Y^R^]V[VbTUTRVVQWSL]XbZT^NZX\T\[KQZPYKPYQdQTZcXXQX\TUaQJcXYVXLYPMZ\[RPZZ\[TYO[ѺUWRVPT^ZXUWTYUZO^^XNXMSVYVTTV]NT\OUT\YN^XNO`L`RKJ\PK]PfYLTUOdXPcYQ[FQMNUQeJ\WQXXZK\VXTKTMTX[HNR`OIPQSWYOUW[^MUVVOBMPRSRZ`QXZ\_MWQWԺUIVS]XP]WLHW`USZMXV`XLXb\Q^\OKXQXTLOOX^J`NFLWWVXPYYRUVcaXPRPVUYQPPDZXQTPKOJX\R`V\XL[[XHR]XXRTTUWPSTIPTXaSUQZTYJVWZSWSY[VNXXYMLb\J[TVRVQSRYROPTWNWTNGRLVMLKXEIIBP]QKNKEJNXMHQXMIGYUVUOSSIRVSKWRTNRLMLR^VTLSJWVWeSSPRQTUR`V^_X^a^\SOZWK]]X_VTZ[LXVY_VKZbOSWH\e[QTU]VLX[T\bOY\SiQW\XU^RT^WcXZQZ\Ta`VQMXbXX]R^UQXWXI^Q_X^I`e`VRS\P ]Z[L`S^QX]RYk^YTKQLbRZ]QMVL]RZiVScTKbZVXN_RUJRVU\VMZTL^TU\Y]κNWWWIOW^\TGTKZ[Q]XHGXXVWUW]XQ\MTL_ZRQL\Z^T POVXI[[O`RIUKaRNSRPZXT^UUL^EXWJXNdQU]N\WTWYKQXRYRQSVLRUDSUTMTRZPTQRU\SJ\PaXPR^QQQMMXT^NRκ^V]MM\X]S^JMRNXVV`RSVNKNXXVTWMUVVUS^\RH\PVXRTTLJVQQNY^XUWfPQVZZIT^[PT]OWUN^KXU\OZVbQZPUQ\LQ[L^N^T[QTORYY\bMSX[WVLVVcTP]ZXLVNQaXQVSMUQ\YIT[XIYVQS\RNSGTRTILCRLLILKSLEJH8IPOOBQNTARLSVCRPF[O[NRPJYTUJZW\cM_Y`dVT`]RT]NR[\\[\a^\Zc\\Y^SZaeST^]R^]MQgZZe\T\WbTMY\[`RaQ[Y^[]aNZdXbXTdZX\W\V\RSXVZ]XZPa^[ZUW]RPZ]]RWSQVhK[Vn[TYUO][SaaaU^UY]]XX\\V\]WRUVaX^]T\XZ[PcZZRSTP`W[aRZ]`\`ZYTaL]XQQTWMRԺUYXOXVTXWXXM[L[YIRVT^RTVKWQaTB^UTY]^Q_IXW[ LQRT]R][OUVYQa]PWZ\^`W]W]PQP[dU\L\V`UTYI\T]TH\P`S^OYUVVLUVXLZaUZORORQ_QSWVO[DVYV`UQVMYZUԺYHYSYNVIXYYONRT^R\WHSYVh^S^UPQ\VTOXTUbFXW\Q[Y]TQZXTSXRZLOTONOVZYTW^\TZSOQST\^NWSXMUFRZX\USUMNJLP\[P[TLTSNaeOMTNZUQJMRYXYOROTTXOINTTYKaXTTJ\JUIUULFQPDSFMOLYG@LMJFYMW>VLN@HLLNYMKNTYOT[LIYOVNNWUQ[ZTZ^XRJYSYYURfUYdL\UV]faHVXc]RaR^`]R]]XZZ`XXLc]bUa]WQYT\Pc^fTf]Z^XbP]TTRjV^YRXaZOVNUZWUNT\^]XY\`Q\UbVTTY\UY^WTVaT`U\^^e\[c\Z]a`aVfGWNgeVXdQ\^SN`URYXP_TOQYZVT[aT\WVX]NRZOYYXRaLYZXV`V]S\QʺP^PZTY\X\KT\QRUW\ZSTR^XR\WX^_L[UVWWUQXQWXY \TJTVVVZTSaV[ZUWXPXMZXYSOXPd]XS[RXTU`NX^QYVaBXK[XXX\TXY[SPXZRWWW_QZVTRSQNS\TUMTTXWMKPYWUкXX\TOLaW[PX[`S\LPPSYNVQWLOSST^ZRYU\OSPXRRVTXTLVTTQU[OV_WOQX`]TGORE\TSRZ_LRKN]UNTNYMYX\ZQ`W[P\LXUXRLUYPVRWVTHbUVTQLMJN_ZOYVaaLRN]^Z`VRPVSZPS_X^OLVQ\SNMLVcTRPRKUKQOMMKM?QLXMGIJTKL^JTUNTSKTWOTVIUOQQHHR\USRTVWWVXUaXUZ`_\`YaL]XThY\\XU]\ha\^FJRXb\WaYaXQZk\XTWZ\OXXXY\^WUV`_]cR]\TVN\^OYY[_RV`a^ZR[YPObVRWRWZTYc]XOU\STYVS][_XZ\XY_RV]Q^Y\TeVWVTZX[SRV`ZTHYYWXWX\\ZQZdXRUZZTaNTJV[TTXPTZTXZºXTR^SUM[dXOVUfX^KS\RLZSUYLS\MRbNNPCNRW\XXRRbPPc\YSZKSULUJTQKQVHX\ZXU`TSPVTRQHW\NVGX[WNE]^T[V[KUWRRLYS_TYDRTYRUOYeNNXNS_\OSWVUXQ\LTҺTPWLRSSZTQHPDWXXXWT[ZTHLM[\\JKWRQ\ZXJUYUGOR\LUSL\TeUW\ZaM[YTNNZSQTYKNJTT`QQQOORYQPS\]K]PRTPZ[XQQKYQYTW\OOORGUV^PL`TQRVXXU]H[JSZKXRMRQ]RYOSOMTMXEZOUJ[PMGNMCEKKVHKKMLGLLJLVOKUBQWXXYPVUOYLKOTKWQTY`X\NU]UMTV\[\G\Z[QVULU[^TU]QUWTfV^]bUW]_\YVZS\YV]\__TYaTV`U_[S[]]RR`UWceQ`SXc[X]RVZRUY]a[kOaT\XS`Q^bWTXY^Z]_VQ\X\``E[Ob\UZhVQ0V\Q_Xa\RQU]XgZdVXX\SXYTQV]]TXZdQ[a`XWc[cIWWYTWXPM`UcRT\I]d]Vۺ\ZVaXZXQ_PSUY[Q_H\\YTRaZ_]Qa`YU_SVU^QWOT\\MVXVQ[WfP`]KRXTRRYQKSZYONPTTMXQVUZTVMPZW]HTVLHM\TSUSOXTUHUNSVTQXIQLQT]N\RTV\ZULNUVRXKKZXʺWXTVPQK^QeQLQRXTMXPXWSXZaT^QPdRSRQZTPNXZTWTWSTSU_XQOW\YYJWTU^RTRNILVf[SP[SOVW\QWU\TSZPR__]UYITaKT[XcN\PT]YZ`S\X]WPIPQRW_QTUcQ]SRSLbWOSGTgJ\YYNMPZPRWJ^MQTFCPPWDMMMDQJMLJKPQKHIDOSXQYJ`OXXQXQ]\\GOLTYRWWV^NZQ]XM_S\S]Qd^M\]R\N]h\Y\XbTVLV\\Y]dPX\UcaRYe\fZ^ZTSVWeZQbYQc^U[V][TcQ]WQ_RR\^ZRYXXTOWU[[bZ[YRZnSUVeP^ZSZUNHRX[LcVdXT!\ETRSWSS\TS[bXNVXVXMY\WQY\WPfGTS[S\LNReZR[ZMZT^TVcV__[[^WN`XϺ]T]SZNRQRVT_VQW]UWMYSSNSU\aMM\UTXZQ[SKUYMNXYT^YObVJ]R\^V\\XSYSQNWQS^OWO[TNL\WcY^cS]RSWHRTbZUZZ_XYSNXYPSaR\X[[OX\OPQTPVXVJTMVR]NV]QۺWTVUKQ\LTUNKYVSSOOWRXWXTZXJVZWTHPSP^\WVVXVQPZ][TPRMMR\_NL]RMTTOVPXRQSJZLQ[\QQPV[JHdY]JVXQ^RXE`V[[TTRZY^Z\PVLWRb\[SWVTRQVS[QKLUX\W_U\KL\J\YRQQ]LWNTVWU[NWTJUTPJWFSCVRHKMILJGMKLFVQQUMOPSXQVGVXNQVQTXTZOV[OKSR^Q\e\dY`[\\XQ[]X[XO^WbQdc^ZdY`gVe\SbXX^TVi]Ycde]_XZV]d`URYVWR\`WSa^SZW[`N[Y]fb_\Y^YZ[UfVRL[QeYZ^b\cRZ\^_^ZWUYcPaZ]YYVebVXQ[\aU]VWVYWY[TX\VR_]XWXW]RaL^]T[ZbTSO[\NTUX[PXTQWQOUZкJe_XY]SRTYXTYJYRYX^_`SRQQZN^S\UNZUJPXVURTQX]X`UbSTNSTRVYNXXYWaYXWbMKPXO_SN\PLWSIPYaVSaJVRVT^QUJaaaV`VUTMVVK\Q[^QLSSYXX^WPKSXMNTUZbٺPWUZaYYYQOUX_WYNVSOYTPZ\L[`LWPTORXU`YOVQNP`MZP]MUWSSR^UWQVOVPPOYQTT]YZOZQTYUQf`LLR`Y_Q`FX[S^VVVXRNVVXXJY^D`O`TPTVWWX`VTOWQ\LMQ\T\VTT]WXZ\RX\N[GQQWRRJQTL[[QSLPEPQETGUIVNQMLELFLOQSRRITXUFUdMRVEVNQJWYVN_JZMjTZP\`W[cVXL[R\QW^ZdQ`RVhXbT]ZS`\^X^]YViYOXiVV^D]X^TaTT[^P_ZdV[O[Z`c^bY]VYTdQOR\XYhYUVTSXZXR]_d]_a\`YYXYWOZ^S_[WYW[4\T\VYUW\b_U\XXWNYMXX^YdP^_YTKQMWUUP^\UVXU[RZVUR`U\QWShVL[YJ`κUMOVVdV[VP]XTUZXd^ZV`UXXeG]LWRXXYaOQXSXQRRbWXRZ]`QQVUQUX[`KHYRXOLSS\]TXR\LVZVTTQ`]YXWY;S[PNUP[S^b[XIQSSTVZWQ]RVQUVZTQM[RONPRX^MQXWYQ^OTNYUXMTT[TMPaROY]RRZZMVUVS\]XR[De_MRRULWZDXRVT]LUZRS_[KWUY_GWDXZ\SPZL]LWRNTNPWS][`XSeb_cUM^[PYTQ_VWVPYVPfXXVR`P[YUTJZ_QNLUVSI`YXHRZ^PLTWQHVRQ[PZXMK\PBVNHMKIOQHUVISOPJJGHNHSNMSYKPTOZSVMNGWXESYIXMRSPYX\e[jWQZ^UYUc]ZTOU[Z]]RdUhYXcNPVT\cbf`VXUWU`bXS^W\]`\RXd]WPTJcUj\beYUa_i[_^d\]ZXd\^bY[PY^R\TT[\RR`\fWVPV[XZ[YTMYYNZ^YXa\\]Y]OcV]]][TU[[cHVZ][[Q`[`^bYU\WXTRLP`QVUTUVQ\RYP\X[STOTҺLUX^YR]]RZV[N\IP\UIa^OQOM\WTV_\]OSVVVKaYRTX]\MfUOaXcP]Q^BVQU_OLZUUW\[^ULX\OPXT\^KbZYLRIZ^RQZZSXUJRYUW]]VbXZQVXQVTPYSSX[UVVJXVV\TUMܺTQTWb^XX[VX[]R]MOTQSJQS[VVPXTSYQX]MXVWd[QXZXNNYMPXXRKMZQUIeWNYYDYUX\TZT\UTPW\SUbRL[^XUQNXZQQQNNTaX^X]N_MZ^\LHT\RRTX[RQT]NQQXOX_W]OYWXVWVZTJ\ZaRSUXNMMTPcTXRMZDQIRIKKVIKRFKJRLGD \ No newline at end of file diff --git a/FITWorks/dark_5s_001.fit b/FITWorks/dark_5s_001.fit new file mode 100644 index 0000000..7bc92c5 --- /dev/null +++ b/FITWorks/dark_5s_001.fit @@ -0,0 +1,6 @@ +SIMPLE = T / file does conform to FITS standard BITPIX = 16 / number of bits per data pixel NAXIS = 2 / number of data axes NAXIS1 = 512 / length of data axis 1 NAXIS2 = 512 / length of data axis 2 EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format defined in Astronomy andCOMMENT Astrophysics Supplement Series v44/p363, v44/p371, v73/p359, v73/p365.COMMENT Contact the NASA Science Office of Standards and Technology for the COMMENT FITS Definition document #100 and other FITS information. BZERO = 32768. / DATA ZERO BSCALE = 1. / DATA SCALE EXPOSURE= 0. / EXPOSURE IN SECONDS HBIN = 2 / HORIZONTAL BIN FACTOR VBIN = 2 / VERTICAL BIN FACTOR DATE = '2004-12-15T22:31:59' / file creation date (YYYY-MM-DDThh:mm:ss UTC) END z~rlrmmf}sux}u}t|ynyxxkv~vxkkooul|~tpkq|pxoyxou}zmqnuohpoxmwip}x}pyqwn}skvbxfoywwtxsgztmttywlgxlo{vrs||umkzyjl}j}ytp{usnt}wz_itvu|h}usvq~tltmzxtxwtsxmehqttnarztzr|zyvyxn|jg~}pxw~z}kz|jr{fxmxekz~~tiqrxooj_q}q|`truwtnovoiqftquqq{Y{|vvdqk~ltsnsuoqtliijnlgunshouqrhufxflrqrtojxhrtejhqtfsdm|jqtwm|pumkgqtiwfhzhdteohgm`o`mkkdynncrcqkkka~pgoxndllrmfmghliijqgtgqpjwemhskpqiedl`ybylkbiernjoymo{nhh[`ywdf{j]jitslw_Zrtdotknqc_hukzikZp\mecdekkhd`ao_ldfhbvjjaoellllhidei]^hYgqg}ihgtro}xxnk}yxvmnovsr{~muynͺvmpp}rjrunt|t}{qhutxog~mk|fwuvpvoy|rxznxnpqoe|zidwruxbw{~s~tzytvfvljmuve{uzpwszyntxxnkti}lysuuimknpsxupdtmvmtzgtf~uthrv}umrhqptxwv}|rihsoolnzlhZ{uq|κrzuvyslztk}yrvop~lnuxvsl~xnzrxno~o|ktv}inonllZx_vetwnkmkgejlqrqpoeqhe{fvpljitsdskiqziuoldk_tgmflldvdcm|emhxvgfttlolaukllĺnqspp`urmejefnnlrYvkdh|bjthjhndeifumrtnkbahip_cefiggtgfshdtrgmnuldy\oYafctcptklrhmkgshfnudmsxtn`mdhlapn]dndia]hfnemahufuculx]ajrtm}eeqycqatqo]deihliqphday\b^_mnhvsu`akUc\dl~vusytyrm{x|setwnt|t`uwoihlwq]xivml|ltzunum{uw~vnz~kw~zpxvl}t}putr|nhhzywnrqlxjunyzgz{~}hptsosxvvwzgkqgy|~piinvts|pxgiv}vuve~uwqf`^|sqetxsudmpvtpfrdjixrspyjhxtuui~noquhpxvipqlohvnh|xpw|hxw}tq|ulkgr`xoxgkovlcr{ryeoqrduwr|nh}rl~^pt^l~owmoutxnyklsgrzgmsrpbiejdimusldrdsiihefnodllteiulphmmjuoruklxlifhhqqfamfgl|}Ychdrronfq]ngaso_rmnlt{wwstZpgqj\htb`jogmhj^capmaehvbhqkiphrrtj`nshletoh`qkfp^bnnirgxiemqkguahpsrpvezdprfevpUomblqelagi^rhtrdl\ti^sbxmkSgcm{]xj`idz`aflgYae]p^ZmhlXhoeg\ntd\\syrzy}y{{xys~temmk}zxlnxdt{{hhpnsww{rmznu|zndpxmt~xswtyhz|sgwxwxfq}mmpzzpjxlyynn}elxrzsxuxtym~ttr}\}l{mpx{uxqzjjwgbupkotns|nvsumfrnmoysj{nwuxmrxtmmqlr{rltupsvi||rnwk}}q}m|mkojntҺrilivmsxphzfslsplsmonsyruoqnwtvyvvxldwٺ|wnuliyzrtpigukmyrkxn}j|nqx}qhmul{mq`vnui|^{mdniimthoilxhikvbzlnbnaobxyiqunrr`kpohimʺtpqavtimmjoyrxgsrqo`qcuhZjselglftbpafwhksefiof^ibmskckl^jh\ana`fqgXtjhy[omcnfpkepqh`hhey_i`vfoekwmegc[xiajmntc`mgYhhjhanjmdnltiaflg`Xilr`qdmd_dlmbsqddvT_haeld\ffhqoaohThc\m]iu|t}zlyyt|lv~nr~lputvorsh|qky}qyvutr|tv}i|qzktpv|kvx|r{||oyu}btlktyt|vsytwvtyodgmjqmnyyq}|tslx~cxuhxpq~gd{xlls~{uuvczoxorsmqphqhucdu{q}sgjogvyupzuxmt{opqhymhrgwpn]y{polzilw{trostn|vkymporedskpplbxlw{mh}sqkluvfoulxnrmtuzmu~tlghdfu|gqsdxq{}rjzixphrqolvptjlwthlt_zitdwm`gko`ell|tyjmips|kijhhnkmoelqgrelpupqlkgrhgbjkrjtraqmnq\imukloxxuehhkepofmrdqvixwduhikcrequktpgiid^_vf{ldamhmn\ih[hitu{feojqnaiqmvekdVmtmi`jcmlelahh`i^rhmqbfkzipib`lmhtbplnlcytrn`mf^Zjkkqfbdjmelhjiflbigq\]]g_\pxuwrxkoufuvzmg~nxlpiun|yzzwlu|wxzntst}{hvxwot}uytzxmxpzotny`wzrzr|smxpmu{z{tr|}zuzopsmlx{{|ylcj{mrqpsvpmuozyxmgnu}ma~pktnhd}wyypxsletwvooxruitx]lruwsg}|jsxmvx~vti{vytvotylͺxpqhxnqlzrpr}lngwx|jrytkwltsq{rmjntudmpxrfxtn`sxrfnqsh|r{s}ivt{uxdrsorllsipophlo|gjvqkmijdupupihhvix`rrpdymkm`tudiljud~cmdslpȺnpbje}jiflhlmkctltkilrqdpmqrjueiqfwjoelerqggr}^jirhfii``dftjaqptkrkYgapqoidhre^i]`dawn[gfgfgm`hurkignfedimi]keqnnutgknnggjocdjhlpfkoah_wje`efqimr_kndmpbceZihcufnhpknXlh`e_fopdrytrslvxm|~vdvnphwxoeltwsnvi}shy~yxz~ujq}q|qoqzktyost~torpo}iyzxvg|nsoy~t}rfzu{puuhlqlsdpliotiyeset~swrjo}rntbxqtl~r|usrnkuju}rwzqdspwlqrrzrmpxrjuwutyyoqyk|jzwv}mmwuupmxwyxzxnql|jn|lrxbplrkiwjpjfvmqtpssjznp}xatxtevukztfniumlwtgpmyqlun}yqhtog`~haxstptpknhzfqo}lqbje}bdeprltjvqhfhlwjzqtmtllqanwwzgvmtguiu{qn|dncedyLfeululhurei}lg^ri_rioimaujmndoZll_sdrssxhtgemcnhepiutrgpugdomtgcmksfh|bmgmniqqlfulclrm_qvsY`na_k\ffev^gommyldkf\lo`nln{miadmpqquloiukwt|cjoe`jkgiq_dnbmrjljejdgfbq`ffwmc^kfxbozlxqwqzd{yx~ps|rmzlyu~unmtpxpsxyc|zz|r}uorri}xumzqncrtmwrxrqzhxntyt~uugusquniznkuji`kyyfx}lj|uyzkutvl}uyttvtszzmori~{rsksxnsxluonxkz|txxqttqgqz{v{trutykilukztqxw{uhom~x~wr{qunmntvhtxtϺtjvexturjunpsxrpxstholfuaxxtqjusl|xkgmmkmgpuqtt|kyithultvyzmovn}zswtkiknmycwmhapinocihovfurtqmsrgpurmcmoss{dzyaefmmurszpiiskbjitebfvvzZhjl|hnnnkeaqjjvwjqyemme`t}lvwrill]f_niukemtfj[olx`kuc[goe^qopj{t_~jn`|_muapjerodfgimfeqZhoddiwd``jagucmiizlmdmfplnluqeeoc]ikymjkaltb^hptljii`dj`fbteZhae`biZ[b`shp^\ik`busvu}t{npix{jtgxqnxku{hyzto{wvu|yvs}xrxm|khzybc}rlwxrknvyemqbmxi~jsow{qtqn~xxxxcwpguwrq}vrtlt{iruvro|tlsxt|qwwvssvpylyg}ruirzt{mx_stxelhopxu`rvwouzs`ml|trw|szg}{|rmqxqt~rt~w]rt|rpuihytdjxujrmwtkugfwjeokxruhytsrrwlpnrc{ljdfod|slopiwxhvexrjhjqlxlur|ryhcrvvnt}szkhvuqlahc^p_nktakfkqgq|fweplpejvmt]nmntjimna~yljp^eldhqiihtqjZdingbhi_\ljeopygclwjiqh^`ykthjh]id\llefj^pndo]ojXemh\ifmhimbifog_`\kvk]nnmdrkikhkpaattgp`jthaezieajdvdjuw[hk\k]jgbZjvloxh]shahiaahbnJ]_bfklcgd\lhWhdlddftg^e`gaojxv|touh|vvru]xuhlz|nl}xy|qlqxltyltuuwxeqv\nyr}exonw{~mbqtrvopquloixz}rwtjlmrqtjnm~gvusl}dgukp|quq|jrv|qtlp|}rxly}zs|owthpc|iunvtrjnqytut|rxdu}doYzinnyykptxuzcprntbrmeefiuwsm{nmeźwnseumk|}mplgz{qkstplpxbonu}qwuqxsptwmzjlvhjofvls|mpvtgiekgur|podxyiiqkjmiieqhvug~n[up|tlpgrrfrohocqx{pxrieproglh\eoeosjhmmp|׺uprmpj_blfmfevqen`lhddighhiu_hmjsippen^bjnXsppefjg\k`hvmhcjiZn]blihvakhjcchehictrqajnnjhhilreilmgrolmlfefc^cm`uecb`tfemqcbpnie|hfmte`dejgguakekaghphhehhYteb]xdafre`^kdfy]nkhjoy]loxyrwzp|{zwolgu{r|w~}qvqqnzg|ouxymwyvui^m|{yhss{vlvnxons{nskphwp}{h|k}zzpuvd}qsjusxsxky|iswjp{lzuw`|etswe|qlvqow`xm{sstkltonxxx{irgxdmzpmsylttnmvYgrwqzqq|xhyr{uyqy{qzmsxhntyxzsrlgplputtrmplxtq|vxztgwsozsrtlx~quowkye^mubuu{k`tp^qtlhkj{rswuwf~upvnqioxqnduzzlgbbrpojatkrxocshmsjjjinsm|nv[idlekxqxkpheifpkahqczi}gtj]`_ezjzxink^vn_ll\pkcxiep]dhmjsfknqtb_ndhu^fg]ikfkmieorliihhfhhi]Ⱥ_npjx[nanrnmi_^tbo_ftdihayfiirlbmshscri^_tjmpf`hroezfbaihgfhbmmdfijhhppqljh\f\mmnekhljicfdmjjfRuapi^dt_ddycsyz|}vsxjvjuuvnk{qiv|tv|hsu|{tx|rlyxytihw|yqseux~omup}rspqj}p|}yo~jvhnxwspkv~|xsnqr|yivxsxjr~yk{h|nvzyshvr~nsuls|voxrkmqxlyntq}oq{voinzxxrroug}utjjsxzwnwfhw|{ksmolovjlmzlouxflnx{tk̺j}n{}hosjzs}krl}yytgurv~mltvovnv{pnuytz|ox~mpxwlmrylqxlzgmnqiqhvpftrdhjtmhwsrvyscvqqnymtujth^qg|lilrefu_glckpknrrciel_kl`ighskoltn`ulwlorm|~m`wllholqkljritswjltould[jfgm\kogmnlbhXlXd{``gacplopsktpirlbloUg^plnmdelst]moemiknaiscqom]ebhlkljtnijfr^_aqjpjjsl^xdlmUtrb|dkhloejjhjatnzheb]d]]\c`r\dY][cm]mo`kut~wzyyujsus|npm~t}zusxpxoumqiyxxsw~p{vtvhd|uxujoolzrxptpznfvvsnnotztsvzqemvsjwcoul{vuvmkk~xxmmwlkvrhnsxoyqx|pitxn|jxupqonupppqsykwkvrgfwhlpw`hplvhquj{jtatmhp_x}puqmntzowdnyurypnheluyhtjkpv|uuzo~yohlzq|~elfsmoklxjljnrtuq|~xvZoiwkhzpk`rqepkhfnn{opnyhbffnmnzwzupshpqda\lhujrkme{yupltu}oqvxlnukkucps\odgqonjkqfmu}kcevnnitnwmjftjrpm{oegkiq`ddaqtyYegi\xmai_`fi[\tjvumlh`kqkjjiwjigjpy`iooemgdlk}hmbhYfr]iddflaZj{mfjchkolaxeshcZwgjh_jum{dxhiuoejjigxmmnxdnr^iegpjchqhd^ldhhszjdbm_jd^wdrejjxln{dvlxt{s}nrlqom{yttzvb{}ti|h{{us~uvzvmqkwlz~zqq{axapr}no|jkltqlrontiumdq~xxg}l}eqnuihfxmtyqp{ymju|nowu}p|t{vshjr|rotpqomstwwubywmmxmrmnpsofzrolvnyrqsurahswskmksmzvwnm|qtqtnxqwȺpzynruoyzppzwn|xnvulmZyjljuzusrtt{wuvt}yl~{qytqxutrpurybtlizhvwpqixqdko^uxbh{ivwowmjmhvgtqkxnnslrwmwenmhwdeomvoiuiosgreehoiejmboo`tfqtamcexhu]jehfmmrlq^fmk`toubzimljdmkfrZy`usmrfjpniepsthwiifcgiawhhve`ef]mpjcola`ttidif_kajh[eazdhyg`tjgbhpktniouli^hnu`cpifecihjo^_bgkzppbfwmmeclijabmicdoggljiYihkmmyww|fonru}trl~kxzstxkwyvoz|luwhnuh|nxvxwgsvolhtxuvpmxrrvxvqyqynyox]~vzyxzkmrvfsn{zvwpg|xqztx~uyu}fiobwrooxxtmtto|omvurul}iq~|twn{ltk~yrugmpvks{fuusrruounduovuavssuppuxxronalnnhtzsmfewryqk~{{v|~kstyrpnqzovhmyknrqlqrpvynrkxuk}dnpvunuwwklrmxtj{vng|tzpowhptvm]ytji~mmqkvlxmtthm{i{mvfpilipmiflwvmeypubbiix^qcfl}phpludbkllokpfjkbithv\bfkerkmm\nnsjksijbxvellnkghcldtx^ampalolddmnnm{pxbmqiv`sl`lgih^diedzfmX^_almlrRxcccchkk{`mndeqlXymciihjekpjqlb^kcga|`cwlf\^qjbhgcfh_qkflcdju^jpavuiWehfbnsvnrzq~vozqrpuxkpyozwufyvko{cmwxxnsttouuj|x|xyd~v~{ut}nvtnnm|lqt{~nshjyyvwymrsrrnvwk{hnoq~xmtiqosxo}ztxp~mlpunns{q~t|rshol{ryi{tz{vjssutrkpvnslzz|zxzskm{s|mttvjovipkrnipuvrqhmw{~ms˺nqnmdo`slupxotpmnrxiry}krshkorlnznhamp_vuh}mkpynkoto~tlrtwxetls|{qlyjhzqqohfpzbmjvuynqvqjjihsmwbdakeunmfhtt_wkdnctorhzrʺbnvjgshmk[fhphjkejnkliqlYcUfddhmg^ueikvteo\mtptkaekpljbjimgkdjuideruguoflnpg{memxnglcgqvnfl^jgguul_uamnnmneehdhl|bflVe\hdgodjf`keh^bmmaiisomr`qqda]`lia_kfd]hcZfhrlmbdhfd^lg\hz|h{lltx|xqvjnspsbsmxzo~mzhzwsuq|h|ys{v}~sqpvvx~wuy~yn{{tgyzypymuqtr~x^q}wtlups}yjzbrxucp{{isseuqtxzztmm}tvm}jp{wuzciwjvuue{vkmp|p{xzissdwlsu}mfriluduotexzuvq}tsnn_l|hln|wmtwsksovolnrneonxnmnwwqisraxnjxmty|twus_odj~nqxmnnslznu|rjqmnuwjrmtpslxuyetrqwyxtuqnzptvpvhm{dclyjhXmmlswttqqlcmirkxonjx`lkplxfecjulk}ip\gmZnljliujl`vit{jkh_vqkjugj~ijt`jjlgep\tnrjbvrdhm`celhhn_alk^tdeolai]l`oiqmu`mhjsmdhmlfcdjghnjckzhpecefi`sukzhvge^lfiglk]ngcpxmghfpjZmsceipdichbbfvbocbp`jmchn`djZdpsulrgzszpe{rtluxiho}tpnqjr}~~zdysqvwy|~|{y|ozhoiv}tu|}~szvu{mzeuouwvwxtkxpvp~lri{ke|ju{gxtexuwpt`lqrzviplydmeuxvuymx]urpdqlbupdmyvommuumly|pxihwut|vsmwh[tviknmynz~qqr||rurpvjxqjrmrv}uʺnhvm~wvlnfpuisnsszrvqkxhxumukkou_vokyeixlts~i~qpmzxtwihsjrkolulyi~w|lnnokjnlhulhjmotzkvpx{d_tfjfsuhcegu~huhrlrozdrimqiqhpuҺesnexdpdkejnrd}oygmkfvjfmpn^msj\gof}`eihmqduhyhleyeacfilc\ep]dcjk]kdcz[tgooPfchdfjhwkhgnkiokstmtbswg]nr]uvlx[mcq`d]mq_bjfvjqhiufrjmonghchd`o\ndaafmormjlggZdikieichlr_hlvXf]nibylgprwts}xryx~y~xtz|ohrztx~xrnuvhusm|rqvk|skzwj}ntpvtlsqzmotvu{pgzytnm~kht}voa|utlwyjhqyxwdpv|zppxufwjqiwitzmls{lof~xyc{|wynqo~cradlm|ivwjt{puv~{xnrohxkhkmmttxw~mYrssi|qtyoxtcptivhith|o~rxm|dhjq{jxrpqs}trsnimujiz{mtnxdd{hzhno`sihrlvtqj}n~qpo}yxrqpt~mnu}scgtui{llkitofugthp\percckxne^wmqhnvmqtqpildj}ja\rvi]pciwltoerdm`ihmtgdpsftcnjfdjh{\ingj\visqpcs]wddwilihhmlx]h]qmojcwhtdl`lldutgktompegmneumohgZnwlekX_gshnippikjldhtgqukfjpk_fmmelhmmmibold`uaq[ldgegjnmZsedkflndpef]`iqcfhlytx|hzkkqxnocnznurznqvuoxlscnpiy~ijguuomqwuz{jxqoz{zct{uppsmbuljx}yrvrzqqh|wlo{qzywztmy{ywoukdziy}rzlu{ip}ctmu}xs{t}kquʺ}kuymstupyqy_ronytibxuqzzxkfsrsstrbunu~mrxp|qhmlohhpmwl|knxqxn}mxu}tqwivjnnzxaqymumpjrgxty|^ghkhyr}vezdzm[upnwfgmqpyllczgtokeqdiksxyuh}uqgvosthbi\`zhohntkrritncvmeem}gxftmak|aeiciԺlpnievrbqeaquekt|`bmrknkmihbokplqm^\in`^ljp^jjrmugdkpj`eobftpjhdhjlkaktvq`hkj`xqj^_mcWnailbsjhied^k\nl`sgmeebf^tt^okcmnd\dwgixbmvylllh``ulriac[j[nymkoja[fqnps`lmm]bdfRidll`emgh|tqov|m}yuvyyzwsou{|rr{mjynxpu{rpz|tywksstyqppjtdu{ux|rnp{yrj}xxvsrikmxz~}wouaq~|xuqzt|otxv|smxt^w}wmtrqfp}zk{voztwj{}hy||i|uwklr~tgxpsv|zxpm{jplmnlit|ujxqlxtfm||xnmxtzu{uwsru}jxrywqp}}sxctmjr]n|tylsnnjvwotqurhrwuixtju`j|tuhptttmonvwwn`v\t_gt|itvmtdyadwwipm|]bftejmgufwifibkjtrpekd]rubrif|tplntra_rmj_ihwlzoomstlepfpamsip{lhirjrlfrfol_bjkbWqun`ilpqrflludbjimm]rngaldhk`Y]eizf_hjegq\mkmefcztkuib]v\c`]ngdrumnvhxlfl]hnogmXtni\rldlltjfproqhsnhudndpiRflcctjVffpnYclibaxiaceuzyukyyxyt|umvm|qtttkmqhtqo|yjwiewruiswtoutyrqvzz}{poyo}}~k}okn^ptmhztyvx||z{nuklyvbtnuxlw|r}peqsnyz|t|juj~g|wizvqklxxwtvumhuxmmrmfnvxxtjusyiuwjlpquyswxlm{|b]vpgmdslnrwyۺy{ntx}jyzsyotpqukxzk|ak{ppzlygyptuoyxsn~uhevrxzzh{slwcwm^bnhmn{kyoryvjdxspgptuavor{Yzwjcosqm{lymoqmgmmfbqncqyj|vtlokuiqd^ĺagujesjnp|_xltijdplljg^yhi[dqhmvldntjfelpoinlssiouca_bhhnkeneeelhh\jusxmn^ekiciTcbunqnedqkknkfojxqjnZjirk[mmjpjshjsdvuo`wnerdkkhymhdnkgfq]ynrsZhhmmhXiidth]eu\][uidfk^ci`h\Xfmyzpzuf}u~utnylix}zwuzlvtplizzybxurqrny|cxpoxx|pw|mvkf}tnsqnthq|usounzth{mtzzxynx{}{lbqvzlz|i{wrtt~|zvyhr}wuumtmsn~vmvmxem|outtxwmxvytqkqwpnzwwk{qn|assjttqsrwujnmroviizlmtsvmolvdtrvvlqk}x~hxxmluitvptzonuptyksmwnlsx|tcn~rtt~xoytwyxxgksqloyumulrgproujjmidsqotp]|pnmzllioundjo\vi}xnmumankrosdulm]h`fkgritun]boujushchiujjgzkqkh|ktis_nenlnvswu}|akyllellrmoinkrnlnrkhntiilshge_gn{]fmjhmehrismkejmerhmepalxnmlmfofpphnidmmheiihnih\]viqlrh`kjp`sinzidwcsjgjhhnliedfagqpdpcrlqp\gndlkpdn\eeghle\kpijrvvlqssn~}iuwf{uisx|uv}elyrxpky|xuopx~y{}||}rmsxkiqy}z|u~jmquzrvvxzv|w}wptrii|hprxzkxm{lwusnmxtsmuhhxtvlrxrt}tvpksuljw_}zqzqxxsztkqrutoxkploxonmz}kz|vnztynenmu[s|yklqvpllllqtusqvsxкqrqxl~zulfnvxs}y~zfhmwojwvusszjdxgllpwhcpxj}jljnghtykv{zoqhuqhtieqlltpxtsoort|sbqyeekktplqgggqnmisbh{dmonbu{iprphvrnqfxqlhmʺurgatonkmjidnimgij^erjpvjqmg}hgpylgnpfqZnix`guokiimYehsjlieahbx`jqpm`rklq`{lrfaf`fvlkk]]mlthldqfd_quhjktydtismmihirhgldmahsihop`dlmupjiofolpi]jki`hq\iqbnbq]efjfier\jeajZfdb~|vpvlqurqx{izs{kttpvvxdvo}{wpwuod|xzso||yp}wywxm|t|{|s}oqywr~xt}}znqux{uxxwmxmxuwpsriw}~xrorwq~ulysqurwx|r}s}wwtx|xsvkpo|lzwkdstrrr{puwtxup~wtkrusettwtgoushu{ruhtsqp{usoivmraqxtvuzfuxrwponznazorv{slxxuiqpyttnmgqkulyenlhnke{igtltxizvlmzn{kn|tfhswrskmwj}ggxpiyqk{alogpzanq~gok`i|otrpkskndptsevfjnlnfqlfjslukjquriqpqnnapjunoml^hobehskph~marlpkdphav|hashbozjdghmkkmvidpd_wm_tjfb_ijmcansjfikksZkv]^gdvmVmiedgpcydahkk[`eUvcg`Qhnpf}as`jlatnjtndejhnl|lk_cikceb`bjk^kjhphdcvfyshpjdalhsu}t|n~khdwh}qxnizwy{qxrnhnnzymxkyxvyqrssrnisut^tzwnn|uld{vbtx|wytkqkhl|lu|wstroy}zkdhjpsnqnlftezv}t}tYwlzhuppflt~vlto^sp˺trrtmrp{gzu|prq|ujyevo|ox}h~xkywpyuitotppxqvlvnrt~ts}rr̺{sptqzd~bs~qwvtkkr|~vcinnurotxmmxm~smm}Lotozkykensmiyo|rma~myijrult|vo|emyhupy}jytiMrwonjnaolmygtlbqwdxrgnxkdd`eiiimusucmZeklcuZivzpaxlq_boddqahmjqrujx`nm_xluj}men`sjn|lfxm`mhe^[i_rkamrwkud[jwgsllmlhl_Xdnmhjlifihfpipjiqm`m]vhqouicnmnXglemfnkeTm]osked\hh^xy^heerwqsjomg^ijsmqwelceXfil\hoXuufvZfew\k]d|rsy|o~lxzzthtrwl{wg|~yowx~qtx{vuv{uujztrqyn}sehvysz~iz}~}tt{pzhlwlmnlt~l|znxnxvurqmqput{ldqoumixpk{mvjfg}q{uuktxpsthskot|nldlryvvmrzmnnrmympxrvs}uzusy{|rqnzf}zvoxsnxxcyhqvjittoxv|jzmuc||cpmu}g{nmxt}xsxx|qlrmiybro|xvlyls|hqn~{l|uxidsgtjtpyuxumznngiups}mufxeu_euiqmcthmnkh|jd\mmirnperlnepqtmbstamsdih`fxvfqinvfdkdvihsjc`prflvpjviehjrttmmininprvdnkgxptmludndjcpohmsnop`rmi{id{liohhor^fn]nzitcbqmcgehtihjwplyvlqeie]n^cplbdkjpeptmhesbYotssnctkkajjpghffntda~nhemzp^n`cnbhaonhm}pwhrzt{twxvylq|dftslt|o{zz|{vr|l~xvv{rhjmuyn|qzwxv{vhuxy{epxhtzpf~rz~ky}zvomxywuuwsyt{prjtlrxsryxx\x}rhrxjsykwttqnhk}pv|qn{orlvuompnmoypnpjxpsjxrtml}}owr}xiuvrm~le|uo{rxuslq~ouǺy}rdxzt|tp|kzpketxu~ztvvtxmelxxpqsq}t}pzizntnqwxxrtxfoxsmanimtwtbp}yinwtfkoe~myhrsidnh~fjqndclluljb}gzpjevylusxmpjqmouֺxxtpxpejp[pnimulmliippd`pkgmlleeltanllvlfclig\oektj^egla`wel_rqikngoudalwos\Ylfsvrfoopkufdhdoebjgrrblgibhchotvso`dpcsumncveclbshjnctmmhuoitnmimj^ct`qij_ilphoYdldxrlntjjjeccc`mkr|v}hh{p~e{sdslykvnqvx{~mutsryryswxkvliywo`hrm||~t}uljvx{rlzqn}xmqslvr~ytx{{~|uuv{uuxzxxi|rxrqtqxtsxspr{pst|rtjrv|}ejytwysclusqtr{jxxlyty|wlpqxm}m|hxulwln{utlsrry|twuvrugnuqwolq{yxrssnhuljqqnhwhhqwylet}m|usxtdquqvwrxihxwntjnsqhjkpesnjutiql}btgubmqxurntkxhxqusfelfetqvpenjtofbgerwlaunsbnejnwmfmioxwhcdljrnyuaxtdk_mn_fokrri|x]fpjmakinmtqjtxerwnot~|fe`Ybggmm]ysnkkgnh\fh]ufusfnbkfnvvmnr|`hfvbhci]gmudheqfdvaglhgldiedooxbjjafgshlrqtlno^hhmu~jho|tes`nmv_fewjm^hdebjmmkllbp|vu}|xs{pvvm|{xkxquzzznvtka~~lux~lrwtyswuxtvlyymozksxkwwrul~ovewuxyuxrrs{stttwspsnpoq~xrsmvdymvljxswhtpm|zlxju|lm|tk|}wiyjq}{sxqlrouyvcwuy|tkwoours~ssyqnyrrji{sm|~hldnmҺqtho}iaajyjlvhqtmmwz|owyg|mkvsompx{}/sionywxpm|jihjkvjiullppwmy{[gwuxm|icspt}vyk}vmxfqyxjj}pfsqVtmsto`kytfvinlkteifflrdposlmcqzulofxvds`hlpljwhkr_hbnvb{gbjocevtrlumclgiojfsg}dinbkmonn\fbu`twmt^y\mnr`ulpfv\ordrcdsidp\`s[hlglfWemhhrhoog^ukchhh]hifikhscbagqhjoxUpdtkmhirqngWnl`g[frsojmjaosgie[ftbpovmxuyz{kxvqulywy~}tqqiznqlhq|~uxmtoyuusxnypnz{hwjpzx~pxx}}rps}pzr{ouowaolx|svqx{gnn{rzxph|onvovh}iykurktel{rqj|`|hypnqswhszkn}pmzqnp}~px|o]uivuxhuh|usnupfrjuxowyyrzmuxoutysyqwzu~ls~kuq{vqjmitpti|zqlewvmmnbsjux}xsjgri|rvxlkzpttoof{mzvruxrvkpromltseifz|xlttpwinm]qoubefjnuvxopeqkmxlktxnjrpkhpuepyihttzkv^hlppskl]jfokbi_h]igjyejmerijlfb|l\kigm`n~`llgixlgnicmh^gckljQdgrkgaftkljgknhmf]{tlbndn{Yojljpbbvksumbhesi]hpiktojlUpf[ehxmihl`dneilq`gnhldcizUrlacdhkiUk`deqhie^lcerfqafXd\jnWgynj}z{mus}xtyur|s~|vlvvvtnpi{txukxekg}vv|vexprtzkp{zpsstzynysznqvqxl}nmmpv|~x}lsoxsvxx~ou~qo}lqxttgzkqqgjz~}uuqmioojnxumvrkbxxpxwx|vkutpkkaqltqvjsku{wionj{yrqrxtsus~rwflznvymmmuκyrh}|t}upsupl{vzu|stvuq{|ms|~u}tosq%{lpvz`i~tdnubnm|rzotvqpqxmkrqnp^l~xtctdtdpZhvrqimnitvsrkyvdkhgqnojhnvoxmkjksphmulnrkktkhhiyhojanht_daitegixldgi\phojpljdfkj`oksedfnl]v{^looamiciihjhlnhp`imyrmmg`ao`e`qwbprtifthfeip|Ua}karoohsouekndtiurnhoftyfkkepjnfjjndliedYcfnnmibihxey[lelaYhjbudqcmdckgurgdkazm}uz~~lxx{txqz{zprxxpj{ssumn~tq{t~n~ry}tysws}~}svwtsykuxuxuvyxezspzwwji}inpt{}jyzzilazgupto|yoytsiulkoyr|xwtqyx}r{lptujymqxyfxtqltmkxoiwvirtnozuwsuh}urovn}knkuxhsmpvdvahgy`linvrxnltk|nnx}lnwu]{xvy|qxsszilmtjmyv}q|xz|v.m~tt}nxjuxuljotlpsqkk|nhwjsxkzn|tu{msnnu|okmutjlrllnondqxsrelulqvsosuxu`xosuiihrknqpr{eeghjckumnlnhqsjodtiehpplmtcnrrdhqytuq_ozf`sd{lmk]moko\ijntki_og\gtjkioii^ah^ddl_gievnihrng{mlkeivefhadeekrxtgmdtjdkka`ihqtmfgg[ichnqatnqhqtrctelfaeefjo\eeh`hshhdk^tlh]d`luiv}vqivus|z{vultr{ltxphyopnv{sru{tu|zszysuzsg~xoopmtzswnpq{lqvott|o|tstvq|eytzskomzxupkxuj~xifr|yxrpzuxjusmxzrtxkmmwzgxw_ttstxtzclvsykntumtzmixo|jvkpzvmlmuvrpкrulggno|gtu{hfuhriylr~ƺwni}xx|rprh}msxkynntmttrphkuyvtxxt~tsxyrl,vismupsx{zrgwsvlxzwrvywnrug|{qzxhlounlwmwsm_cumsfbixn`oulontnpiijwipjga_k]xjbvpnhmllvnligjygu~pjoisnnhjbkruiykljhnbkner^hjogZiviperirerovhmkr]hriqhjrvscqdi\lvdmauvgkn^kqxgjfvnjtdimkinkuhghqkeljr^walljmc^hhjzjlmijljdjou]nkaoa^wmhdxacbilk]ifbij[]kglg}mjfcf}^cfrttrph}kvvlmv|v}xxyqqx}yxg~qpiyzvsxptv}wup}zm}y{tohrzynxvdqn|`qynwrvx}f~ytv~sqvo~pp{tnq{olismio~y~eytpznwqxpntuurxuosyvxtqrec}qjvgwxtulr~{uxr{zt~ompxuvpuetowovqm~w}tfrvjzxrqztrlmxsrsw|hmylzwoxyn{u{ot{llowjj}jtqor|rpjcxkysoouimxnntdvku]jvkuuqmemhqdkkhuljpshiiyqbs||gffdjfcxhuzqmh`h_mdouxluxroqohudehldiwpohfifashseeklqdb~`kmdbobtibo_xhxuekwrmqrcmgibcnpwjeumx^rthdhieblmmfjluppsj{m|\stfjyjlognnbk]mbum]mmynwi^[j`djZZfibo^Nbmr`pSmjtohbglqivhwelthjlllemtjo^lmirYnhmaj}|wz~vz}xluzx|npuplmtch~ush{dw}ytxvkuzoo}viytszmuprettyn}zvow}otzywmwtt{~~ttuptskr{xyql~xiozs|}byor{wrquuh|wupqnutx|xuuzuvvtmihx{{p|joqqix|rq|xsarr|w}x{{bzr|cswhuirvumffuwixq|q|ºr|pzov|wwhtwpsxypu|l|yx}~tkuxmqixto!ri}{y{lurnbl}ws~xxnpvobv}`xykfmerpmlihipqmalwunsdicvnmb\pkc`min|tpoenkgxfsgtmrlhkwollutu˺`cilit\i{hqpadnvcoaqken~{pp^gtutnmeupleqevqtg`es~ifawcomflopiplgaeimkejogefhhfdnfcoitlqlemddi_lo`finmrtbqdjjt^ilp`famjlhhXkghlnjgnedgqkgjnllkcjh]f`mutdlihotolpf^`eperhemjWqcny{|rqusz|s}py{{fukxv}}r~ryjvysu}ylmysx~qyo|wstwt{uvl|iqsuzt|pd~rqjpzmo}nvmuxxwql}rwltutu|m~tns{yp}ytv}rypurw|xssok}r}suvusrzkdn{psmlo}xzrqnx|qswyyxx}hsstuivqlrhxhrlefwqtpme|ivwx~elltrfltfxsywtsqvuos|qupmo{pqm"qstphjymv|sxnwlhgvqpq{pssrn{|x}upmjtfouilhysnl~sloomnnzlrrclakm]shjkpyjlcxdjmlmovo}xlmbnuqgp{lqn}thggnipfietzhpfphjitZp_oj_lsitqpgjkr_\~ismgltlmpulv`sdd^risjxlevjorfveng]davblcecomjwnlffmapjdzjxpfm]nh^p~hpfcewl\lr\mnedjm^bomlnfijglnhimlZkodo`knlikanbZuudbyxwosvx|rqrppuruzquvq}i|ktwspt~zxqt_ytj|rwt~xxttyxcykpxuyqmxyuh{tkuxvr}l}gitvzu\oiisrtyprt}y~pqrkru}z~ykxywmszwil~w{~llq|tz{gtvhrslxninttslvuqzzzzntxlquvmlxewnliy}rop|~zwynmuh̺kxnuwumnptyj|msjqtndn_mmqxvmvruhqvvwqj!u~ghstpwsju|lmtrytluobfin{wxhwtnmdhsvknhhhykiwwtylwmqyjtwou|nrmlthv|huculknsipaϺbhwonhekqmesdnt`}vwiiommmWckt\mjmjrpmyi`ehjivkliehnbrerendoxisndgernofbpbrlo\dqgemtnxipsai{jspsct\ighoflilhgljidigehscthgqher`jwuhnsxvlemhklnZnlagfh]buvkuhreu`cvg]_iktljhhgxtytnrudrqrpuxnwt{mo|vz~ovrx}plz{hq~ox}zx{lszt~m|wvswlrpupynntkwtrax{vwwpylonz{txtmsrtfshwyh}{r}ko|rs|vuxmsw|ljohpi{qsoyxxqovw~mlv{pt|h{vuvhiiapmxw}xezs}hijwmopvqgqsrxn}|~}s|~ryzjqxnxl~}snuzutg~los~kuzgt-vo`uulnqr}pm|wfqtulrpwv}smyqniiuol_~adnglfqzqoygjrt|vlntunsntyssmjpzosurmlfkw~lmvfnfn|lhlhii]k~fxfihsthtttlglbn^i`lipb_putiflmi^hkmsosli_dpi{dpv[ijouel^h{slo~sk_njhvpdfdslppo`xwo_lfjmgknzs^l]qoxwnisfkdo]duhuebjlcmelpfk`tnkimkjpbvw]iqmpqnigshsjpi^_hp`sihnll|o^ifyxguxs{x|ymzl{hmazmm}|tg|yvtzqxsr|qz|xwm{trpujq~xpqw|mt{yrmgqwy~qrrsrxvww~sxntqpr|xqio{}|ssswfmxzwz{rrlzv{~xwet{tpsoyxpruvxvpnthpv|ntxovp}ryzpriunszplupotmty{wo}tm~rpxlnx˺wuzrpxurvrpv~wvmn|qfqvuattxpxo~suztu{p|sfozzzqqznmuodmzxlllzntpn|lmjmprlmwifmkivy}{pn|rjivqnvwogyrpmnpnoihutqhirxksfikxdҺtpw~gqkicqklbadmyY{ohfpt\n`lhlofnfdahjosptibVojfiiknacpouzfjshhfhunoidqoadnqwjgeluunirkhcnfnmeaopzujzr^ghmfqjdZuoihhdlXdi}acX]ibtkzjijdptrrshtX}j]tj_eqh^lmjerih_xXYcigreaoigqyybuprw|ouugypmnuxuuym}{tn|zwyv}pjzzyjwxq|xqfux}r~qxtstl|usu}vjpxxxvxptviwv{zhlp{y|rpmpsziuluhupg|vswrykvsntursjovxx{{vimztrwwxus{yglughrwuxwl}xlxr|oxvvy|yshtbwvj{n}y|osx{vvukspsrurovlys|ls}g|hyyzuuxujuyupmfvzq{ztopuwsa{dwyjljm}oqts`rokgyttrlugwiszqtziiushoqoujoehqmgwm}icsolrxqlrmkmgyetanqlm}tlvf_hljxslYlmlimmdqgomioictoexjhqzllmimYsk\itbigcdrokp`g{hdp`mtureliklnfhiar^jauahhbmhhdcebt[ehylmwijjkprdsikjdubm`asbthfpneiipfpndelnrtmnocfhfurchnWxivuoarjtlmoppkgp\koibz{{uzv~y|yxx}xy~ymyn~nvwqrywwwzuxuzuu}r}q|uujo{u|no{lpukuyu}txq|vpnlqxvznooyvsy~ywtnykvzzp|luvumriwysd{m|uplxq~t{r~xrqm{úxyvrkue~ymxvxehx{mrqsflxvjtsnhsswtvt}xyutmyrqvyrmru|Ⱥyjvsnlw|rwrun|oxyv{kxrsur}}~ysqvn.yzsxmrpmuqxvzlslhv{uyo}kqprpzcxgdvkvw_vq}ldwrlrzxeuixhwtkpilppfaZtqpjrqmrkqvifhkyivhújlilulunqqcwuqyoierbmjnhktkonq~mpqyjnpm`jpoixru[julinwi]nikjmmhhvypc|_jc|piifei]rtksqn]mjmgbjprkd}orlpuxybemblio}jlgllqoyrtpb|snhzgnpmjftgwbllkuj\q`jhtiekef`gqhpij_ekicmwjhsnpwfvqquysuvytwrlxxuenpxw}owy~riq|swjy{fz{qxstttysyzqq~mr|guz}u}uytnt}mvypxpt{tq~|}utoyyyutpp}pow{pvlrvtujtuxqptlwrx}uqqzymhum|uiwzz{{h|jvmpuzxotpqinzksvrgvtpwu{{}pqzzvswsqtruujywvqsnxl{j{|nhiq{w|oyzxxu$xrnrkytuluntxomzes}g`umoypuitii{vzyir{jrdh|mzmixpzq|muqwlpnwrkhfimemq~lpd}pp`zc^rukhna|uqloipqhomphfcngnkpvriih|mjhwokiplsgphbtbmhetotihnihex`^eleedrpmrgrxjkof{ealkk]mdp`zikbtjgfh`vnolm_adlkuhdleok]dgfwnp`qvomdlfujbt`tenmrptdfufhtn`meomydkfgljojrhddskfnhfmqo^{}xrbui}t~~myz{{tjmunvxxpwtxzrzqtwrpyitiortu}q|rsqpzwoxpmot|uxnvp}qxs{wltzhr{fowyvmuom}q}~z~xvthvl{xiylqlrytli|vosycuttmvw|ryrm{qhu|xost}{y}}vyl}ut~lpvnyznźrzmyylrbmururxvytuznssrmnxlupquptxuvvx0nlpspnsmmzzrr|rjqsftox|nrinjwj~|r{wivxxomsrfvvvvmpaxjtw~ts~stlcliiznqdthuosw{dnsnƺsoildblospscr{rknumeoptelotyxqrm_xosjgqpm`naxjlsfjmmnsgxmrnljnlvwsmrnlq^twlarmqawzuhoy_pwohmjdiwkksh[ldfdh{ktqjqcpmrrenxxokZihbezhedukxodphemqfxiza\glehtqkbbmuiomgt\pmfyppw~stsmputyttymv|x~}o{pmozw~uxjlrxzwruzyimiuvu]ltntsnnutuus|p|oo|t}z|xz|tdwxrvxqty_e{tszrmtqt}tlquisvwvqmfyut{n}t~zuuu~{pzoqjz~}wrk}|mxv~qlyluzp|xnx|wwzvtu|v||rzrxos~}{mݺvqwtwctsxoqszsplxpto~sssnmnzqmxz$yutv}ujvyqkrujyfwtqp{yqnyvlmzzhxfyljprvodvrmwpamndpylmpilnbqg~ftqfiiglbfrflxrpalrtmpwsjekqdiidfkrkptfitngutsnuoqt_nfixfvsfaiwhlrj`ptqsejlvc|yl`tejjqovrdpnhvltjqcfmgo]tjojtqd^ieghjilhmgqpc|spthpefmlnihwhmcmmehrs`svnkejigidaeuclgtx^vhnqljmihfxfufmhusmsXdb]ggvsv|vx}ttzzxpxsnzswunzfk|vuztzyuu|wqvxtxn||}i~|xyww{vytht຃oxufvxm|jvtuzz}qr~ʺntrol~wx}ktqcuz}mrn|qzyi{p{unx|zdosyuxo}wrerwppy~x|x|vrxkqlhodmq{~htsuumvo}|v{|znorvi~v|{py}|ryzwr̺wrrzxuwmousuktxnotmsyres~mtuuysr{z{xlw~r}sz~rxlvosljlsbmrhymr|rgxfrtvimqwnzlwgmxrthq{plitslhtoywjxmnvmvqemgzxyobktg{pmlnuƺllpseggpfxlfsmmpvje]fhlrkoqjrtmajt{k]rraurmwkgdzohghenkecftlevo]q_ctqxks[}egjmsrgdikepnqlbdeh_pdgvskc|uhdlfher`ueevflxmfyud~xt^jjrajbjngktunshzky`]jmltxj^h`idlkukYokiqeleobjnxmnzu|ty||l~wzxx}pkzx|y~svwwdkp|sxqwqn}wsrxsxp{ngurpyllz|zqyx|yxyovtvtyzxu~p{ixz|fozkuxuykxl|ysyxztsisxnuxhy}s{rlwxmq{{hk}yzwtpdigxvkptrzbjusr~twktvzuosxvijspv`okpgxuu{vuwlm}mjvos}sruxqyruttsv{,tm{l{sxkkho|foorxr}mvxevmrmyrzy{s|zosoi~btvlt|risrmzqreqjycwhlsqz}q`lfovdptvgxpwp_ta{tpnou_iiuohxo`vq{rgqpmpkxbmw{xifeynspufqhtljexyqz{pfsfhvfmsrtnoaum~a`|m[qjsopledtyrpuhguvkaerhrxrlplnlkcnhvli{iiohtnhilpjnnpnhfsltjwtsnlxl[jqpkqh]siilebgcudm[ojweholqulhgm`Wcp{ttvzvty~w{v}q}nqzstrmlxvxs|tz}ot}nity}hmmzyqyzu}~mumpsttuy~yvquxsxtxvuz}uly{j{r}{pt~rtq{{yytztz|s}{hupszk{xnlvrza{~wntϺm{qpou{tyyvxq|t{s}lmwzivkxolqq{pwosxr{wzr}^}bxvɺwsvr{~|{eytspvrvwt{wswhomn|~r|wr|lud"ptortgjrphw{y|trxtt|y|mjjqtivk|solnusntehjzmnphfltotxenk}m[llkhcn\nedlonvnwnsjtjojhmvnglrppmjrmnxljckxsmethhdYshjcmoxhhefxhttuiTnhjvirhutsplsvd~olejou]tusfqfjwpuiilZ\mrf`kmpknepikpottt{ulkv_tkxhnX}rlmlvjtqzdttdlvfplqb^i`ehj`llle]fhggatlqju\`fr|llhcdf^lyvrou{zymufxo{pwo|sxshyxn{yzyyypoy}~uwwy|sl~u{oxu|lls||p|v|muxnlp|nqlrvxxtnl~z|zxx}~lmxuzvѺvwryzn|xz{ywl|~rrdbxxlq{xr{`m}w{|~w|tzt{w{pt{wumwk}tvsyorvrmpupxiexom}mwvu|osmzxtmqowhtow~xyqnyrrun!~t|gmtvl|pmprzvxn|x]lfvexmg|wkhkklrsxqgcneq{uvv|suv{h_csyxobsdgpl_fqhq_svojjpxbikddv`s~irmrnukfo|imrYmcqlyhhvhhn^xiyhexjblmbdrrlejomdm[t|\pmtpmimsgspvpxeiwllhnwiae{qfbkqggor]en^dxqifipptxkk\tplphm{qqyloktqnhftq]tjnhkhoXn|sldflunshmag^yotclhhemsbpdikkco`[y{qr{qm~xl|huk|yunuuptpwu|yqnn}vlomu|k}tv~hrsvxvplujmouo{l}yvusyl}l~xktxm}xvjv~xlrk~{vty|vvtox{{u}yuqƺxrwstu|xnxor̺nkoi}wmlotxornu{huu~xu|t{|p}x{}nxllhyȺszh~w|zy{rvxkv|ttm{mr|tjtvsppqws$qnns|rt}z~|zt~xyiwrmtqsrxotmqivu}vzpuqws|warrsfllqqy|jpsjujqsuipeoq]~rikxnxishhjiskz`owsoqnsgui\gv|nho`jrtftgrlrqzpXmwgduwpjyojknhsfpt^jnmtslpebrgnqefrjznhlmllhpe{xdqkfmn{s_qkqmrdwonhvyorjvkuqjlhdeqadpoufio|jvrfbbu`i`lofmfdbkrhetefvsoaiengwxzpqkpe{ogqtkgi}s{pu`rwnptvyy{z|opzkjzz{oml{{zxny|}sv}}uumzlt{vu|{h~}xuwq~{{yotoq{{gs{}}mtylhzlz~qzupsksptvro~p{k{wmvxll|svjzurpxnyrto|vwh|spupszxxp|xzpqrzzqwlytwvz~tuutruprrqz}vpuxsxr{ry|ufwlxetpuutl|yxzqdu|qvxtu{l{~p7wtqg|yzlxcyv~lr}tplqonektyhz|~xfistvtrhkusy\timitpwlsmlkknpq^euzhgtp{traqqjcejhhi|uzgcjuitkftbwmpgdemvoptclghstptuobrrrmiynpsgdpjmjpqoYh_rglrel^jgyvvltpUtdt_vxwhjhefmvmramexplfhnexeqdkpjjjl`rtkgpcck~yhkjbhhssjitkh[ljqpmt]md_drltynm[dfokcjwshaifelfr[dhtkigmjrwx|p{~~|xt|hlpy{}vptxnwe}uzlvxq}v{pnz~tuu}qp|z|usim~zzv{|}hqxpiopt|q|sxmutpx|svpxtdhv}witx~tnq{w}xtzzs~ovymuttvooput}udwpntulstvf{r|}ryk|xsxm|x|u}Ǻy{st{s}{yymwpm|x}npnxoo{luxvm}svunyq{pv'xvryzxzs|yztymotor`zxtvqpwpmqhluzhnlyzfvvkltnqq}h|qmzt~wokvppxjuqchiuu`telj`ltlcrspy̺msvslhwzoxsgkxpvY|diujmpijfixrvlwoshzmyipexku{ckdmisgfhzjqhotksuzsthltlb_lllpnqej|jdgscmlde_dmqiqjajqyv}mrldtymuurfmjeio_rpbakjheea}qhonnhpujpxfgohld`]xc`oihox`ufodsl^oqpcft^r|ksmrq~|wsz~mxqxtwt~luyq||o}v|yzv~q||w~{mxx|qxws{izskrxtqtmjwgwmwsns~|v}ult}tzo{zmxvvt}eol|wssz~uxyzx~ypxlwz}hkzq}q|zwruvhr{~xqq~zytgo|{tkryxxxzy|tywxn~{poixpltoik{ooylvqax}~mvyxwnzsjtv|qt{!{xy{utxw~|uq`x|t|rx|punryuarozlpyhzwz{hud^qqokn|kusgqrihozrazpu{swhiaopsaxztqgt|uutilkqdiqjptloxklnmyytqttxjlxibf`tntnxtxiimrtrjuosoeeomwyilmkniwnmdjnlfwjhlwnkwwqrlhv`jjymuvylrl_ioxjmmqpijhdjclxpvtrllxg|dwhvwfqukqwhfosmjumm`gfcejunri^hhahiqajommskmf_jldzzq}hu{rttuxts|uhyupwqzpdkrot~}rbuwtny}mu}rrruwo}~lp|vxy}hpv{pvjyvvxwjtysy_|gu{xvyxpszgqxgruso{ytynxotwxz^mwqn|twrwtmlyzxuqtctyvwyz|mmjzrppqzv|i}qz}ioumuxr}xǺ|suxtl}rrp{~vl|tpnuxxlzf~el~{ugqut.z~xapqrr{xqxf1gxtpmejtxixyxzu{hmp~vtwcqxtevlxpikptujjfnjnnlqtzLqxmhplfkiphfumjhgft̺bzgdijsxpygvinvndggfpjvbrkxrvdydjgftustqnemkeskfjn\tpujumelfmpn|llvlrg[mfvayni[khnvldhulihnqv`spynrmtkXi}heyhna{igmjttm_`iuxgkojmVbmmrmcfoieaVkrt`hklumjkfje^`mger]llfejnjug`vvy{n|ttewxkq`zvyupuus}uw~yyomt|kx{v{~x~vwwwouvvk}zqvwg~yzz{pot|wr~jrqpu}u{q|}zw}zvm{ysyqoyx}xty}zrtwz~l|rjsyhu|qwvqwtrt}mt~qn}u}jtnznrvtzxwxtwvy}tryryl~xjhtyx{|}yns}xuq}ommvukkqq~xsurqpuz{u|t{vlxxnkur{n|phky~u{}tuly{nuxms^wuvuulnu}|ctdshjprnephsvulipnsmudeisltlinzgww{xllwsisppl|amsmnpmomwqhlh|i{jhlotfrmielkkzqzmhlhlnri{qZkjinf`qpicgposlejwjhv^s|zgkvvmmugprlijuro`sjsidnmpigq{ljrdjjY]gfifpmhsgtidfnwutqlkfphij}ztrdbnidhzd|lgbmlwt^viwRhTge{ritsryup{}zidu|rtwsiott}v~~vsus|zeivhptngyxtpnsn|ljt{l~uww{|okrz}uspsz|~qxss|p{xroqkpuu~ynox~yuyh~t~xƺ|y{sunt~rzuwvkssx|lw}ux~ptp|xxq|mt~rukhvywz޺wvtztvi|~xwyhvu|}tu}msvlpvwrq{yknoyzr!w~uy~qv~|hxuyxx|gqt|qzswlvpl}}muzqypmhxtenltenus|mktuvzxmcuioqn~ukjboromtxpf|usllqift|Ӻrxiiwxttkfgthnpnsr~fdpzg`lxnprpqVunqljjhopicoptxtdlmdnsueeqi{\ourduvccjhkjrnlugplux}{uervnsXuknz^hsumngkb^ueonhxrqxnghqpell~duemfysh|ffjxqm|lblgmbtdnpeg`neqac`uedhmjthbfdlcg}zsr~uuwxrb~wyu{wydvvvysphlzxj}|trxws}swxzx|zvsxlyevwquxx}ysrzvmu|vtz~uymnvr{rzkyu~vxrtvky|xtt~w|sxwnnvtqrzwnl~ult|n{rzx|tyouamht~txo{pinox}jq{{oxlt{xvu{q{|izoxsl~iytr}r{om|nhtjtlzrpetxy{~pywyzoq|tvg&u~omspnyxryirnkxwtvqu}zzpiruxsjvh}tq{cqtsk_ujpv{inftxxi]rpsompdojnuqyugbqui{pmtse|kmenvupghtunja|rcokhf|nra|lrmfnnnvmni{rpd{psuvkqucipkonl``~nlbfoompo{epsi{sslorhqv|kqlkuuzpvgrknepeiepw~upowbtdrlhliwlrdlqitfrizcmjtjyglidufhh`dsneqhijdpfpfinqtdmgolof_rifmff~q{{lmxsx|y{tviu{uwzrutor}~uwtx}dzuq{yqr{uzxzyung{v~y}hwqutv~|}|t}yzsxz}~lzyw~u{zzoszpnrtvmlvyyyuzxntqyu}{mxxntn|is{xzwzurv~uv|htnxsu}|s{w|q}uw~up{z}}|vsyvyvzqzux{lӺutgyrloysxztrry~qvueyt{rkexttm}ysx-wi̺|vutxuumoj|wyuxxymqtnjzro|ttst}jnm{itj{ttyprmitwv}wcbequesrrmhpwkfrnhqgjntrskllt}m`hjrpdpusm[uujhpkmlbiggmmesioolspmtxlkoa|ynohp\dqngroethpkjwtqy`xqbljnpemcmhtqacoklnfrdk`winioxumnnffujtembgsfndg[zczskjtefkhhubyauhorgkynhz_hmhfibmekxVivlldpyxddsx]qdtiunuq|nw|urlvvur~v}iqqyxvltixvw{yz~smo|owpxfpxuyws}}kp~q}~ztzp~znhxzuoimxx|{zxzwnxx}x}vt{u{qx{vrxutm{|jwumm}v|n{|jzxpustvxxzmz|kvvyx}nmtiqy|~xtqwty~t}sx|prmwjqll}p|wvptlw{k~pu{(y|uwvirpntkwt~qjtsqyukbohn~ntzs|nqpisttuopm|xrvrdfsnoub}y|sxtmorzgqpruwhwyijvrvxmyqpfurvtxlYoovyrowcueusptvrjntwvffwhqpwfumgbvnmfmqldulk}ljhtloluvmjxtnzusn`tohnxklxieekei]kjunqsmsj^rhtk{u_kuqnm}jphletcepfhx\mu{k|`tdrluh}ubqomkpqrdixholtctjoxlmiikkmrcnngcnji}~{n}u{rrus{wyz}zrxoo|yz}mt}dzqwqlup|e{}kowuy}wz|yxvlnxv{suyykx~yw{n|syzyzvrxv|ru{t{sopuz}}wylppvuv}~ulu}}uwr|ynuywvquqz}}ruztwpy|yq|u}pxtpwx{rrzs}}popem{z{f~xxxźruzkzpsoyftvwlq}}yu|hw{`~vwl{ys}1u}pxxx~lrnzz|vztywxjqxvn|whhxlvrxgyykvvmmltnp}iwtmykvx~wwlnfx~ntjnfl{h}juzpunocttxjz̺{jqzoljwpoxc|mumwjultt}p|hdoprruonlttlrqktuit\lhpnclorrponmfjp_lnifpph~temmhorpjpaqjkrmjohoqkjepprt`nursaqemsohvgmcomteyyirjglos`mllxonp_smoblkjexiijaptdrk_jgadcl]|kbwuhhxwtznt}uk|~{v{njupppxrm}p{j~zqrlw~g~h~px~y{xxm~upxxsztyvxywxmtzlz|im}zt{}yy|rr}pspt{xnwzyo}xrryx~iuyyp}}|q{wkytx|xyzmmoymzvxzv|r~qwv}{xw|st~nqtslrhvjuuzntxzyvxvn~~wlnypoxwttnyvlyu(vrtw~zsowvq~ihvo}wrwtntr~ooresmovztvrjdixxe}upuwtqmtkni~tjqmmlvrqtplllt{axvo^p|qwkl}hhrfqflqheisivmxymvhkte|netuxhx{hohddkpukkiml|nqvotqjuosteslpdp`jpadqhkbudm_medvffvmhrnxfkrnhylqdimrlbotrfp`qwnmie`fkkgphe}nnbgwtxn{ltwjmmdnlknq^fjfefmqarnphprkrjuvgtgtpczozymv{{yuv{qt|}uylosy}zx}vw{rt~xv|lnx|wyw{qrhlzx|wynh~ly}z~t|tp{x|xsu~|ss|}}tǺmyx}~qyxl~xryxrrz}tx|xvpuqon}rwkrzg|t{{pswyvvxq||yu|uup{qpvvt|x|xк|}iurtvmtxkry}myi~r{wyzbxrmyi)uoxiu|xl~uttkpmvqikia{ywntvvvqpx}tvvntsyu`atsrkztmkmtspmruvuoofpsnrs{njwhotpmpupxv׺rmlyblphydw~lqjxycrjuiybuxxdhcruevpzltpfsvyc|heomn{xxn~kj|ou~ijrfmmlgllheqsuvlil`fmcgsqlrweqbthimkuxocndv`rlsswmhffpgraw`jeklogntuxege}hdfwihselikjmggxdmozdebbmgtttbmeojmkjbynqt{|ey}puowpwpuvt|u{yw|vxxo{u~s|w{rxywyo~w|u}w|tw|x~xtxmzskurxuvv}tzqmxumqo~ozucvstruy}}|ppkvxx{xezyuxy|luqzytutovtntwur~|u{~|pnwp{quxw}}uvyt{wounnvy|tlyis~xtuxorwxepoqsn~hk|mc|yqpmty}vwG|vgxvpxpv|xuquyzztv|g||poouwbxkwjrgwuxikokpmujh`{uwhwtkhmumkq^`nlxpzumptmpotwdpmyntvydvqhfrtqmmr\kbujljodzzdxgzomljzyai{lrjjwo^x}zplpcorttmrx^roaskjfemmaqvrprsxplemnigdqkdyl|ulhmls}{flbxxqt|fv^nujxkumbtsfv_tfrfmkrln|tqaxflhqseoj[imrklotgonl]osvldnifgpmcget|vk~gs~upq|kyn}t|{t|wnmqz|z}tm||nyww|ttmxpuxzejt}wxyyp}sr||ttvtqqxv}t}owwt~zstuvlqwpnnru|drxup|pvu{zmx|vs~}y~z~mpmsz}{tx}lov|pmwvnryiz|ugjprw{պfzvznxkzhyy|o}lpu|e}hx|mo{ytpsxz(l{wt|sspxpq~us}wtlxwlyavelrczszppj|tp{ypunfivprksurrmqxjtxhu`ln|omkujtycyfgitglmjretlgjnynvmkurfqluvhiifymgvjyvu~sxhfsnmhoepkjgl}fhusvorwnmnj|mls~fivl~hrocldnsgkegvkpblsqrjjvufhlzgixjljivf_ygsslf[c{lm{aihulenipqdnjqqnomgo`nkshslhmnnldfjgdlmgthqf^jmckydqhhfjy}xmv|h|oz~}r|xx}qmyp}wi{ly~{ytr||zvswurz|}{|v{q}~|rt{~||ysxuutyopn~y|~|}s~yyoevotly|jutqq}}{rw}t~x{ptwuurr}nwz|u|syyu{pwuzu}vtxmi|txlwyzxt~xvuhu|li~vwv~wvtux}xvtu~kp}|qx}yz|xz{usrn-lslq{ynozy{tf~nxhrovr|epzks~ulpjxxkgp|neqtxxmulompzlqqueiulxsxyyu\{dzkgclhpmrkprlmjsn]zmegqevf`jssfnpmkylkst]fqxtaigxusgaqgzioc|rssdyjtikempvslhoghwuxuhsktjms}mhsliufymgaf~kpsgilksqvhbsvimkjkfoypssidi}kbuye||uwszrdgfqrsyyqkikqdfmrbZbpci`cfplphjupjhsdofw|{oqt|}ustyt{{|xz~t~|~izzfxuxv}{n|wqszzuzt}~rrvz|umtqwi|s|us|z|s}wyxyyzyoso{~xlslo~}xwepozwwmupq|}wźzx~omprwy~xvxy}yxsre||yƺ|uozuuuu}qtwrvwuyͺtxuvtxdwtsp~{tyz|nx|yx|{xprzvp|n*w|vrwq{s|hqxytsxun}{uwz}zmkvdzm{|oopjgxr{tzc|pwxvkkixrhprlsutxzn}bkpys~`nntvrӺd|uzndpxtltqjtovnniomuihzf~hjqeovnddwpnhsvvopcvpsofckapvoc|fvidijgmyamiidwbevikyxrjqtsovzunmknfdqvkmpdnnwbrgu_mezyjpbewdvs{xniu_hZbmp~jeyjmprfchuultiun}gniuld^wekhppoptbqtl}{tlq~vvymuu{vzwt~nrx|g{t|}t~tjxtvvwzp~w{t|s}ws~|pvusfmzgzxjttxuztx}wqtouywz~sm|qq|xt~v~vun{t~y}{wo{trl}uzkr|l{|}nuqvy|~wgq|vyytytx|yrxzro}s~tukwv}tjqmtzznpv~rlkuzvony~wnw}z{.vt{yw~|tysezvotohrw|rrl{uyojwfvsinpuhevyymwx`dgewk|xr}ylx{zvtutpiknisi}fhyuv|tisiksyltqxkxqwnphijlplqqshlvv^j~wtzurtirrtphmmlptvu|o[lgtzod`usixh~{hvcshydsfpfhuj~nmqfpothxxhgs^neuprglllhep{nhhfootmuppqmqocdovmhuismnsflecfatopmjtclqlejkptnvyvpedy}{smzqx|yzwuszxuypqyyb~qqxzyhx{~qxrzqwzthjxvrvwwspztyhsiyo||{txr{tqvolthow}wkzspu~skyv||{jvq|qsvzyztmsvusgy|~xgyyev{y{xz|unyy~hunzlprot~|kw~v{Һj{qwrzru{x}}wwzox|ewznu{jtq}|uy}hx6s|mh}ywy|vz|ip}t}n}`wtzxprsllyrythltqnomvxzrctt|hsprufun}{oowl[h~vrkpxmdnlpvl\s`xjƺlk}x]mwxss|zwVzxjkqiv`lkynrmnxgpuotytoucbvbzfthi\risghic^e|ikrw]`hagtj`evrensfoxhijmiuqcgdosnqtqv\oeginnhejkkaxqwdsfqq_sj`htnkmiulkim{fsloft~stu]cmydVthe^fklerjo_opteumsqxz{xwmr~tvqm~uyu|whsvryyzvyl{yt{ls~xri~xwty{ltw{zxquvwuy{xxx}xv~v{lhwsrtyr{qntwvn}y~|}oz|t}wzyr}xqmupzm|vxylxl|{vsr|z}wtyx}u}puwqyvn~sssuu|oyytlw~uy{qpj}xsx{}pr.ysops{tk}snhlqpguqysiyypxzfpuqpmkpqzplmzphlm}{jwmhpysptmupqsftuqpu{uud|jmqqmullhxr~nltko~orozelpfskwlynkwnrnrsrckxjplpmnykq{jjrurlnippwdlnhsd}ywycp{vrkvppwg{tdoqijuinoxwhtklhyx{gokmiqqhilidpmyvqhmijqioo[gnfmunel~ulxnwiixrpdtfujmmptiromjkrnwjxgum`mi_nggnhxswyjwx}pqpq~z}~}x}}mz|ksvtxyzxwv|z{~uul{~|}~|tzo}zt{wm|zqw{}hvx{wtxwu}|yw|uizs|yuvtyzw~|xrӺ~yvmqyyo{xvu|xj{szlsw}su}pxxsxy|{ps{xyy~{z|~um޺vu{q|xtm|qq~n|}{ty}plt~u|wtu$qxvwqnx~xzvvv|rrx}zru_vr{z}xzqqnmy{}seclqqm~vqfluk~urzojzntl^qmhjsnuptvqwkrxhlrlj|pxa|momu}qclwr{t{fsys{kljgvcruh~mrfulxrzfx{fkvuo`muitrulsuupdnpdtnskrtctfv|jokqmppll{nlmsjixvpos\hmrprb{m`lrtnagmnppikpduqhmmmle`lngsicplneflizpgnq`}joiyxjkrbngo|zejwkqyou|~yyvu}ywzo~~t|u|vi}{mo|pwy|~wmy~~tiy~{r||vu}xv|t~}zk{yxvzy~uw}~|hy}~q|qzs~xzt|s|xm|w~~tzzuuvx}nsowr{f~vu|jq}w~~}n|zt{}}r||pvrtnyt~rqwrptt{s}siylwyru~lx}ouuur|py~}peximqsb|!zyyperzzuygxv|qztzkx~|j~nstyncyrjxgospi}srvor{mvpxurujmynlvxpjiwsapgnuhyxuywnno|uliun|}vr{}|jtgu|lchhipvkphlpeonprjwtjllvxt}utuipvlmgsy|pjnmgltlxomuhqojihqhfoepwshuiu{hgukvhilygptvmmktgruqghyljhwghi|frhimjmygxgknxmlnjlkxkl{kvm`lkqueijoentfivevZdgglnrhu{yz|qws}snuzxqljxxxyy~y||x}w|||y~pqzyj|~{yilz~uqc}mzwsx{xp}|sy}xprvytu}xzvuzt{sz}|tzxurtpp|y|xyy}pzmszq{uwhp|ql|l}q}o|wz|puzvyyl|vx}xvi|}xuzlz~~u˺zxuq{}ugv{zyqv|yvy}yz}t}n|ts|z{x8t}voxmhvz{t}|ylt}qm{rujpr~xqs|yj{~lu}wuzhojjtmotzt}t{ljuvnvpnwts{|ov{tvyw{ihntfnhrnqĺuglqlwhzjfltkuwxx}c~glrl{vpyjntrr}`e~dahkljkmxlolirktqntcfiipsbrzlwklluoiZtonrynwu_myioryhsm`ijphlqwus]eekojlrpilutreslhxuluyhtultdqth\xunvqshskdorips^ylsbwvxmgvvqkpwutbmusxq{kynuzr|zv|rwxuu xufus}tw~o}{ttwtdq{}~wt~|mxu~|~v}w~yyt|o||r~kx{o|vznurt~wxyytorwrxtxyyxr}o~x|xq||r{j~rnhtx{txs~wzt|zzz~uy|uot|}~xͺ}sx}zv~xtzpl|v~tqlwv~}xpwy}k~|5x}xvxvut{vsxtyf|rw|iwxur{s|p|lojyzvyxkdxtuuw|qrr~kxvxriy{udrum|o|yzxkxnsnlfoxw~{pstqrp|sizlozmohejjo}ipyytxtllotizmaqjzujlttyllumpooidfttlnh`mljhjnu}gf`iosbntv^vrwnipj{pxnhrnvnbhlu`i~xxbvramuxdnei|cfpttllst}eqmujlqqpsrilevj|n^brYqt]ls{vhmjgrclfkqrbh}zyt}u{z~xu||{|~y~qn{vj~}}~wxum{uwy~}xvzp}r|r|{nu~{}zw|typx|ix~ynu~|oyyy{~~~yu{px|~Ⱥktru|rv~zystzzxyvrzy}}zppxz|x}zw|pz|ussq|ͺ~xv~w{lv}~prnyj}x}~h}{nwuxur{y||v"wghxuzvl{wvuymuwwutr~vvz~culqlnpvsiw}yvptjlujm{tusngyswsy~u{trswk|uvdzmlxi~wjonuiy|lmunuep~nkynxyjpoluoyp{ihwwhpuputnthbvi||iw_fqstwmtngrtrlqptoppylr|ulntafcuezqvoi~iqmjlpoddejuh{mkpypftuwhpjlwykjmdjonu|uojhpqojtwgnmlzw}njcirjholshohnqvhhiumrcxsnlafxtt|w|~tvz~~u||ittzv~{t{pffy{x}nxz~zvyxnvsvp}{p|mcy~xrwoiip~|~~~~{w}yvqy{v{z}|{xxtxvxoj{}{}|yuyv|d|}{}vv}~}rsq|}n~v|uoyuywv|}oyt{{kmx||s|oxmu|w}`{hon~~{{{lvx|xlwwljnzsx|#tu{zu|pmynz{~tvpmysͺmzuwsjxjvjuttmzm|pvtlhxfwsxyprlhizommhuoqdrizp}nyqqt|vvr~pcsi{}cpmr{suwrvjjduop}dottbysyiqosxmqlurbkynbq}qtpmsl|rmsrnrihnovmktwsxednufnqrjlvvasjnx|ik{m}hktntvxf}iugxgr}koqnlmytsdxzhmtqiyo~suijotwplrhp]ostfqk\iqnfucnkevzvdvdn~ptrwhavu|z|t~||wy{ytxyxytzz}{qu}l{xypywyzp~|}uw~}t~w~y}xusy{z|q|suxtpttz{krwyu}pr{xy{z|}|y{t}l~}{sl}uurz~rzov~nwy}}{x}xzrzm|qvuy|y{|xmsxx|o{|vwy̺yzyxy~nr{yy}vu|mn{sou{niyunxwtu#rwqtxz{|smx|wrt}puputywt{z~sixvlss||npmsplqslqlkeĺtyukklariplxreqhvmf{|ujtn{q˺{p{hguvyospomhkfyuavfkpvjwmigtnwlirkwxtqglwavxmifkwwrodlqltarq}alqupqhelxuphwsibjrdYzrikuwyrofbor{evyhfxyjjtikrlmjikxneikumoayso}fmptjli}cyuyxyftrj\ihmjfsaf`h{qyn]etypuxvvxy{n|wu~t~vw{nzu}y}t|yuwxyofyzxw{utvrxsrzx}~z|nziu~ytx|wouyy}ryvrwv~st}tuvlvjxn}|xu}|}t{xrzzqtss}w|yu|kw}axt~u~r|ux}{{|{y|xnxm|yypv|frwtp{wwxktk||}&{yz|s{pu{km~|kruyv||zlqxjowmrt|xky|fkqqkrsk|x{nom{jtlxioh}|vvivzxc|ukunaswsvYmknlplnmk}iniuvtxhuppuimkriwlttvptktpdtftlmfrojqehjujmrrigcwiehrmttnpaxmrljnprkprqlx|jennwhxqtmXrrmkgtksautgrgjhupa{iwe|ejnjomfutqxi}iqqyqypqkmxnjjinwerXiqvjjyvyfdxtwqauxzx}{wvztr{r{wqyvz{}}v~uws~u|xmz}|zuxt}rrz}~~ux|ww}|~hzpv{}mzx}}~~}{|~pztvvhuu{w{vzqz{w~||}z{|yx{}xr{v|mt|mx{|~z|||wy~|vvy}skuofxvryqyxku}wݺvpt||}~tx|zvvynswx~xp~psx{p.v|uyxq{~wl|pv}jtwrw|yvyeoqth{szmq}mwlvozs}qnpvomrumhsyfydqsnj{eudrsj~xowwrotiԺ~r{rxpkdfqvnoyqlgvmkqkjrqufojpeh|iuvcx{hkthmwkwxdpmsxurh{l]nqurmoxpicqvqquuf`p{g}smhxustqhomiqnlnqsdkuhnƺxjwm`j_nilqsktwbgfnpqgjsnkgxn|}trzqshiadhsmrpernsx`wvrmlonzrmplksn_|trzyv|prul{wuwy{yztw~}tsuz|ssqu{}zxywr{vlxyx}lzvx{z~u|}uzs}y}|}uyu~{{ttp|xuuy|tv~xov|{sqvxotxr~t{zzt|{nzwzpq}|jo|ikzm|{utuqz}strv~xyt~upzuxstz{k}o}szsu}x{suu~w1tv{uxxivz~u|l|xzvfux{~nyoxu|xil|kxckoblylopytknkv{ttsvluykumoyrs|gutgk|n}junylsp}ursc{rozrvpzxxvp|kttlrzjyrzxloovzxeebyjrnnqsli~i{pfsqokqq|t~oho|p|tkmsneesagngmdwjkjzxrsjdosxtl^twfit}vyuyrlr~lubrrclgwjopdpgrrbwlblmllmwrqij`jxsberhmrpxujrdcohxqtpvbzxs~|}xsupv|s{{tfv~u~txs{}xg}{yq||~~vvrxzvytrxpxp{p{zxzvm}ytsogsytv}|~nwo|trx}y{x}zy|ytytz}}vxu|tq~w{wwxx{~tmx||u|uvϺ|tt~s|x}tt}i}p|xs|v}wssry{b uyvuv~{ouwq{t~vssjsouvuv}nwllvyrln|uku`vz}lvzwvxvdotwr~ruvmatujqgosts}hzdxprк}oopsqrplinj~ktrim|sfbg}txwstiuh|jirqxmvktz|uyfzjnnnnjxtdwtntqhdihrsxmnmtdwlwpmghpnjyvmpjdbnwqfmdcyysyi|gboyn{jfuuxbhiurhpoqsc{nnrotmhuqmmven\{surrtzkhpp{sjhq`ta{vo_qqy}zwxnt|{z~vxwuvwtypwl}uyrws{uqx}xrrp~v|strzp}wvwbu~}xhzyzzxuty~xp~y{}|u~x|yz}|ts{rsuty|vq|uyut|{vzz{xvxsy}v|y~xk}wvzsxxtj}vr{y|{}u|wxuzsv~pu}wxwx{mvtmzvt1twzwwnvznzopsjn~r}}u~meumv}yx~vg{~epy~juuqptuzk|tx}epwv}olzwzmukqsyyreucymeyyhtivkmyfvxti|ovpzliqoitopskqqunu_rlhovmufyodrtuj{snuwkztnlekxqj`{yVjqhk{nl~z\pxqrwutxnptljormhvqo`ljglqrplxnxhsqhvnkstazgennywsyivqaepbtvtjppvksptgjopkevjxvmkpuajigh}qysx}z}p~npxwts~rutzpyh}xxn{su{~z{ۺv}xyz|umtwxwyx|xx|w~xxt}rh|q}{toqx{xsr}uxiszgyzmyqlyj|o~ruttu{~xtqz{|vsxnwvpx{ww}y{yyuzo~~ɺ}n|yq{pw}nwzze}|low}x}q}l#{|~zbumzqkhu~ztqwn}op{ostrhyyhyvltyoheݺrsrbykqurypvyoxyozxtnmnulsqtmm~h|lfo}gֺromrq}kayxytiytuquhzfty}qqxmpzllgmcslhrnlsoptmsotxwsglujoz|flokzl}pdz|kku}uud`q|nufmmvd`lmqztklrdtszhlqlUvqxtrvnqrkxtcgkand{qhl}xrtxjgoiuotftnuj~tkuiqqvrr|rpZ{lgvsfvphihgodyu|x{uzz~l~ex|ts|s{vsxu{nzty|yz|yxs|{uu}xy|wr}|~~t~vu|ox~x|zz{iu|spyqzqzz}}tt{{xyvo|ypyzqtqv|t~v|p~~u}~zzzux|q}u{}|~wy{uvy~y~o}vsyyyzy|sum|xu|bn{|rnqxu}txz~(mzv{}i}quw}yvqgzlyvzzersoxnq~x}esr~{kwjrwp}lups~sxppxnwxumzds}trqy~ymnyuq{iyk`urs}ipxe~rhhtmphyokv|xvomytwjw|jxognxpthjtzrrqiwtnsqexmrjtmslnxj~qieqytupolemluhmubjpmsoy|lktuildxuxbeprdiwqkujnl}jlpxilloisnsksomntutxvkumglenlnkhprxvnp|jnjsnotlkuqvvt|t~zvy|t|u~tu|uyvv~|}zt~p}ymw|{yzxxuxrxlzx}x~q~z|vuxvu}yyy}uz~y|}}xp}zruy{}ysoz{lu}~n{|}osx}tt~}z|xtu}z|}znzwz~{{v|yqnͺs~rvzrryzyw|}vr|irzz|s{tzzz-r~wsiqyyypl}vd}esxtfwthpryylx{rost|nt{yvpko|rjp{mqri}qusmkwn}yp|kelojns~j|ۺnsqjpdsln}rlkllxynfojyjtpu{epqq`t[f{dso|nklax|~|ihvrxw{sxlbojkon_rqthkkyxylolyqxni}xprtlxgmnifeo|euokpplv}thnoo~irspqubhqd{hy}m`tuodrhmobtrlm`sitenvhpxnjmxmxlpen`ixslmztun|rhwvx|untms}y}zu|u}yzyzx{nuvlq|z{z}vk~otoe~t{|ytjvhw{x|tytv||t|poz{|uyu~trruqmyysys|zz}xxvxtzx}zz}wxzx~n}hsw}v~mty~uzx~mw~xzupzx~rux|g|~~mdv|vwsu~xxmuotz$uyyvvu{{urxqx~vixrspptnhs}unlxk{ohszh|vwipxyzdgtmlcvvvoqmyqw~xosrueyuydte{|evw~tdnmsqzumrpbitlxppy|mrtskon{cnu{xpyltp}ncae]mwirjxovpmjnwpqnpvbjwvmronuosyjqgho}~ukks~kwqtmhwnsmgvnunqx|ugohmj\maxywxjzmmrygdg]omtg||gujkuyqgtmoutqkqro}cnpcrilnkihv\sls|rrqwxxs}s{xn|tvw`}~w}}y~}r{v}~ytrrzuuj{xy}}{yyxq}r{~{~t}r}ut}|wy|v~~i~lx{w~hy|wx{q}{vyxn}yoew||~s{yy|wv|~xvx}|zuui|{txwƺ|uwqzy||zmdtstxw}z~}|ywuvv|z|3{}~~zxzx}rxus{xyxvw}{~ds|voyqyg|wuelmqyyyyrzfztklnousdyy}iuelmr}ykki|vyz^|f{mzrlh~xqu{ir}ol{ayljyzpyirtthjii`yopwkopwps{fowpwuhsbvnx~rrwretlyhqvc|xpntpmqqcqfkotint_ingjkzsky}ymnsnfdfhuhrupglxsttpmuput~rrestqdkssophhmrzipuxemqt}oubzd{jxozft{aamkpzvxztrvwvspxvsy}qwz~s~q}xzzr}prss{}t}k|~qy~wyrs}mt~ppzr{w}yzpxpxwtr~{|~spzy}vty}zyy~|pnv{~ytxvusj~uzylp~ttt}yt~~}w}}|i}tyxtrvyo{smu{ym{vtvzwj|y}t|p}2wv}~z{q}m|ri~efwytv||_tc~nhyexpousxunptwhyyjsfpvtoljrpkkzhx}wmxlmgisou~ppxyjlntl|wwp{hrtikhqvgm||nrn}k|usluzxtluyoudksrirm{xydh|pqwldydssstyhp~vnsmrmk{pzatnukvxituwtjffmjsqyvxmzusppfitsr{itixj{jvr}rwlrydoletkcfterfnhxjxuprgmrwimpskzv}y}|txtr{x|yw|w{}x~~rqz{pxx~~yr|}j{z~|{jy}vj~|~lt{u}ppzoxts}v}|luqs|j|{v|tn{tyvwzxw}mvw|}~y|x|w~tx|v|p{k}{v{wxx{v|vtn˺tzwoz~rqnquxnyuxvz|vxwo|wx{1t~v~||ytp|}xwu{}nnyqr~vxwytpxw|mvomnh}yop~upy{yvtxrytvyu|zytponwmv}vpypyxrluywֺurqpurznows}gmyi}ouxsi{xtsmocrylyhxxsqrnnhupoeafmpqjnmilnljwmukjpdptnwhjjioqhl~swf{bx|gkdlotnliwtqkaprvpornopumn~pldmn{kzom~ooujiubdngsxrpfds~rptocqouj{jnzpmjttlmnlymdks||{r|uupz|wzzu~{zuyj~v{xn{t~}|l|||wz~u~|uyvrq}zy|xtyvuw}~~|typvy{rz}myuxnsvxtluw}yjxztx{~xv}x~y|uywv}{r|s}~{sy}jte~z~t|x|ugv|yx4~~~~x|yovtlx}}s{w|{yprf|m|xrp{lq}|tvgt}wvusxpqou|s}xyultuvmrtupvvfzy|uittziulkqs{slmltklvy|umhwdfouuptpxzxvkqcivpurr|tlnktbfxo|oiquimvuwnlsrrsxl]d`yykzntrjnsowruyluluyqwloyhtx`tpnoobnqleykunyosl}huquuetoyjyjuqhdwwnduyupmtjlpjthnsqlwinvrhwhrjmuap~v|y|tx||quxpo|s||~xyy}xz|zs~svzxmxrz{{y|}{zp}u~wr}}z{qxrzy{}z}{yryxjzvxv}|wx}n|pkx׺z}yo|zqx||szosyzuuxpy|ui{z~|x~}zmun~o}su~wrxt||u}p|ny{|$v{x}xvymvxu}gw|wqlm|qgv|lupx~vzpjx{ruvvjtunnv{drtmxytw~e|tmyljjpmnvtwlvqiɺ|hrypqxvpftuvqyversdiwp|yq`mitxyitrvuprg|m{d~d~nyzlsvpprsoo{qxtymylpbnunn_nyxtqvnyf|l}nltufhysiwljqgsxnhkeoqrhzvcpy{lvjueuvjprv~uxjrtnzehyfmd~~fquvj|cum`tqpteueboomylifoeyi}vxq~|{szyw}|tv~u~{rx{zxywu~z|r|}wxz~xuxy{t|{{{ttuvx~xxtyvvx}y||}||rukow~zpy{wxhx~wt}z}yuq~{utuz~uv{zvtv}vuysw~xu{zi{{w|mzlx}vsj}uu~vxf}|mxxuv|v{tq9unvky{xpqwt~zwqqpsru{|rwpzgzuvyu~plly|xqupxqixjptrhuoytxmxevlpwltsysuesluztusqmsinufoxrh|`xj~fssqwizf{xxitwwwkoeyoxvmvrjxuqjq|kusvgpsagykrtnpnlyit|o|qxqpp~xtwnmpciygx|uxntqnrrzjquiyixuknnhtrnlpgqlithkjuuytjryxqjsosirvr|lq|tpfs|cplpje~lmdutofks|y}zzxymzxxw~u~}jtzxxx~qvt}{yx}}|{tzqmz|vytuyxt||mzx||}yx~t~||wz|nrn|}||tltr{tyzxzzxnt~tqn|}tt|y{}кpvx}t{{cx}}uxsvp}}sw~tuxr wurzxuvsqxqypt{||l|txumvtwtuutytq}xnpt}tt|mzv|pv{|ntsmhwqkpoyazqzvdxgytihmttѺlqmgtserzsypx{ucpysoywv`xqvmmjxnrzzusrquqezevo~omfmk|qktxxq~xrjtbodcbdsy`zfrpkluiihrvlyntvhponusvr|jiou{srs|estzkqcjqutovr~imyjhahfzm}hundvwit{rhq|dhxfppghxy|vrnyppsuu}~zt~~~yx~sv~~|xv|u~z|t|x|y{o{rvyy|vuz~}{{w|{x{{y}}|sxsvulyz}r||uxy}k}oynwiu~xx}z|~}xr|wyt~}yj{~tjy~ts~dzxzy|~s}t~y}~zwzzpnxpvu|ru}v~zx|w~ysq#vxvs|zv{m}}q}vu}~xry|~mtx{rtjlr}twumyoz||nqrmqsu|{phvwxlpmamymprpotmlqwtfjm}xxxesudjvwz}jhxnsnhluouovry~riqyrdxht]ltwu}lpjwvhgjr{rufsqozujmpttovtur|puxwmxlkluonmmos~psoxvtchmqqmquipvwflxxlpoujsmlwroe|kriyyktixxlihtujtkvllusfmwspsobszhtaxqmwy~}~}oxw~x{t~tx|zzswpy|yz~n|uvuzu|~{}xywye{x~ux~|z|{nzuyszrxtzv{zmt}{y~ruy}sw|~p}|zv}zw~t{}xxhuuyutyxx~~uyֺxr}}rs}|ni{tky~vsqx}|v|v+v~xotrrvs|{}|}qxyzylhs|t^viz}xvxsytwtnxlzlgxqudy~yqhirtsour~pvmjozpwqrtpnhpȺw`czusy|xlpr|p|s~ynlqfwnq|uwzylvgninipnmrrqxiqnvronqmismxmznhuzuvyoeslxxtyyrkhonilpu|th}{tqntw~`Zzdvmhq|omkwknvwnullqrxfrvyhoqx|nkowkjnpvriiplontv|xopumyof|qrrgnxsz}{|u|t~}|vbtnv{zr}}}x|yu|y{xuv}{yzsu}s~yv|vy|v|p}|rt~{qrz|ixlx{trlp{z{{}vol{~z}|{yx||}y|ryu|x|x~~yy~z}׺t||w||{}{~xv}}}{~xqyt5x|}qx{t}sx~tsxy|ionxm}}q{}vnv{rtustvyr{m|{rujxvxlocpkqtpussypqruni|mr{vknwwij|r~k{vmul{uykyqyin|vkthj}~{ze~tlgukvjcgntujtrdtt}~mnotulylhof`vkhjxhq|pptdvyt}ot~jwpoyyvukotuoupsr|iymjhqvesrwxztxljv{uutshrqn~x|pxjypnlxhtxovuxeqxlsmwtytrrll\gf|iqnruol|mttxzy{}slkynu}q{xtxor}q|y|vzp|yx|tm~p|rxzv{t|xrtzl{zxwvw||vv~}x}q}{utzgox|x}wy~wrxx|x~wzyv|zqzswwsx~}y|n}yovvey~p~}zغw{~u|uzv}j{qttst|xuzmnql1|pttq{{hx}zlxxvrpny|msmmyzwqx{wytpygnumwh|euwvj~vhfrsgfrtzhp||~zzjv{muqjipdǺm|xvsnvhetyh|lltso~mqqtglo`tnznnvgldmhmdpdygnptp\sh|soszru{hyltsqmglvnnesvrosss]~yr}p|~h`hzjuijqthojmoyxxklq{|o{o}hyhqlpwprexyjo|nlujtqwls~seO{tyyxhdbnfqwbwwzdsrpnnrrjwduqy}ty|y{}vs}|t|qvnz~wmy{yz|xt}{yxpu{|tz{r~xt~||xwwzt|y{lulu~nyuy~y~oq|{~tyvzoxtx}ts|~{{|m{st{y|y}ly|yq|tvx|uxwr|}w|y}sxz~v|z~s}||yy~yx~tu sy~rmxs{xrou||x}tt}vkzyx}x}lovzyyustlrty}szxquxluntjrmufutvottupzytxy}vyzqu}mvpruntn|ymqtxtvzjtmsjjviuhzvultkquqmw|x{}osryymnqxwnhuZ~tlqavsmocdiyyguthgsqvlypgxuclkkqptjqnzojs~q{wopsufyhfomvflt}oxgshbqtpp{vwxywlxtfqxwtmnmrownvt{hu}mymiv_}|}{v{~|yr}~tvuvu|vtzwzzxvxp{}yoz{uux|~y|t~m~u|w|zvyzysy{|v|t}}}y}~y|ʺx~{su|{stzx{}zxzuxlx}sdzx}xкzvyyy}t|x}zx}yyzv|uvz}|*uyyy|yyywftv{~v|zry{vr~vpzz~spir}kvzsyvpwmniuhvjys~u{qvhxpbp~lvxvhpp}x|~w޺tctuyrcltxupnt}srvlryyieuxkzytunputcxuh}tmrrh~tvs}klrm}nqmmi||wkpnigsoiwiucumtxlnjfqtlxjxoygluxuztnhushrmku|}rqxwhrxxuf}pcxqztmtkwtttnsqtathwrljq|akssuoyqtxlmgjypptcjsnouz{}ymw|uxp~xsxy~{{zrxv~z}z~tzu}}vyyvxx|bmyzzxzst}|txvz}m}}y{|hr{~y{wuuxxz{xqp||uvvzu|fj~ztunvxvuu}}z~{v~zv~sv~|txwwtp{r|x}v8{~yovpot{mvv}|ruuv{hnlvx}yjysys{tkrohuxzljpshzv}rttmomtxypzlyn|gjxwijz~nprmwry^djxtrzspZrz}|tsxutk|ysryng{psvu{sjchworawohmrtdg}sn^oicjwy~z`bmxnolrqbwlusxqojayvoimqxkmkhupuws_nynqqyuknoxns~snulxxlueqlzhqsssry]pnv^u{yqmwjpspvjqeponps{s~[|euury||z}xw}}}{u~w~|~wyzyyvyzuzv~wp|y}~~xxvru||}zu}zp~p~pqy|rwͺnx{vvo~uy{zryqx|zy}vxzzxպ}xt{yvuy{xvtz}}z}yux||~+{mt~x{uowtxyxtq|w}{uyvvv}gqymfuxrmeusmt~yrvqw|tsoqrsxv|i}rfpvvxisumwkͺar}v{{tboryqjsx[~ptht}iypgrm}^xiu{t|ovxkynfsa~tl{zthr|}toyzmv}ixg~|sxqovnxlm}{unmalu{qytdlps|rpslhuseqlo}kvlx~o}c|}pouyqfntlxgltwzxppi|ukxxhmsne~erlqwtizqwuuyrtiys|zyzyu{|w}tz{uso~lyu~}xu}t~s}llxr~xy{vzzx}z|}wxo|}tx~|r|tvumz{y~nyv}{{|{t{tqpvz|{zz{}{y}qy}u}}xu}u}x|ly|x{}vsrwu~r}y|tp~q}}v}~&~tx}ptvv||uv}soq}ioyx}uq{y}mv|{}xse{v}fvmtgwuj|wrysttsiswj}}ylxxnxlzepvsu{pxrvlhuy`stvulyphyqtrtys~yxzvxkpl{uq|zjsssupdzxho}m~t{ts~zrhxtcrvtrvxjvnnuorlbu~lusumz|uxf{ipfgh}mszlqopx|iznyh{nu{sqm|lxekheiohrnwhdyxp}c|ceuapluxp|j}ilvrryqkxjytr~s}x~wv{v}~~~{v{vw}km}|yusx~{w}v}vx|w~|yt{~z~|xzm|{x|{||sr|zorwƺxx~ryuwts}xyy~xly~~w||~rx~}}tƺy~xr}rpyyuyrx~~|}ynu}yt*kz{slwpnmzsy~}yxznxwu{|yso{xrhsx~pumlspyyrtnzm{upxbwjotnzyrupvvowԺ|wcmkys{tliyqylxxsvtcmgmow|mutlvgjuczshxritti|t{prwqofvym}|slky}rzcojs{jnhr{wp{gnlyjtugxvmqvuynpzplmktpl}rzm~uqumstzx~dlopnsuluvrmnd|uxipwnotqvsxygkajc|snnhpe`{wmxn}y|xwvv|yz|pvvy{u}xzrz{}|sz||zv{y~txp~}tuwtvxuo}yyv|}y~}yzu|qu}vvrz~{y|wy~{u}r|z|vppwlszx{y}zyo}kx|n|wq~l}xxt|u}qx}ru|v||q~xt0~stx}|wqr|tv}}k}xkxso}mrzom{yxqy|u~xbwsxr|vzyxxr}mrrrxyyzvp{zudtmj{zygxkqz|sthejttqqrrortsx^~o}xtnsn}jpoqwgl}lmyu`uy}wluysiyvpih{i{lptkselvyynkswai{cuekqi|rzq{rxgqx|i|jw{f{wlgkhf|xltlxmtmx|s|klwkjyuqpko}q|ttkdpd|lphjn}sdmxf|pwukqrok{}{|}nunwxsv}lu|ptwrm}|y{zx|r}|zt}}m|~r{xs~{}s~wvy||~~~y}}wn~mrr~yqy|x{yt}t˺}v~zvus|r{r{xwx}w}wv}zutuغy{y~xxvx}vy|q}}{uq{uzz2}yuxywrskktnexvrpyt~k~|uxv{ozv}uvzpo~ms}itqtnwuszeumlyjtpnssrjslf{kuyzϺnlkn|rlnmmt}xqtlzy~xq~rzwr|o|y|uspsxzmonltrj}o{uumx||t~p}wfh{t~nwthv|myekrtktp|sl{rjmgzh{vqmus~uhqn{syxvtplroyurulpioturvnrlntk~pxqep`imn{h{ppmqnxqnkxlvnhtx}kxvnx~xyyt}ty{sx~}{w{{||xrtx}xv}ox~~o|w~}{x~~v|u|zux{~{xu{t~yuy{tys{txu|xu}z}x~yzu~|vy~yz~t||{xz|{~zv~vx}z|~|xtl|wx{|~|m~{w*stg~x|~q}y{}{y|{yt|{t}~u|x{}{m}wilzuxktxrrtvlx}x|pouy~otyqu{{h|~vz~wputwnwwt{|tsvx|~thnt~r{um|smqzuqttwtxwrypyluhtkyxhvifnyuqjlkzymjmtzxu|n{fstiodtqsyri|zumfsszksfcqurzueotfp~hllyrtomsxhsv|~dnllutiusrfel|hx|myeu|ulpmnnjq|juuxqtyi|vr}z{tw}|x{~{~u~{suqxmwtrlwyzy|||}~}|ptytwy{u~xr|}zy~}y{qy~zw{r̺xylyvy~}t~|zr~t~zu|}x}޺t{~w{y}~|}xpyywt}zy}}5zs}uzrh}}rtxyuyrvr}{xvitoxu|}}pxztvrwp}lko|on|xp|vznyssvl|eg|szmrtltthtlۺycg|p}siprtpzx~x~|rq{srmxyeux}toosmpt}|tty`psvbttqrlv}us{my|wjpyznxssllupmyyqpqst{p|yny{mpnln|uxkt{smrtrqolutruzyk}iv{o}vxu|vyoh}ifkmkjxhoohunywlq}rmslhtqjndqmbuot||}|yxsvn~|nmw}v~}o{uxpv~{}}|}mtptwx}|tts}~zu{u|~u}}zuutu}{v|||}wy|z}}xz|}zt{{|wrv|w}}v~xszu|y{xuv}u|nz}{w}~urmzzz|un~w*rsupxzzxxx{us}|sxytszt}m|tp{nrj|{f|uqu}xnqyw|urttkuumrwrpnzufltp{utprryjt}zttlp{mmxlvtxm}o|~jpwtrmrytvzmarwpkhznkfyilyuruklgywov}nwtjlukirktlmtqn}fl{muw}mrrywvwmspnltuwoutnu}flm|vu[skxrvja|ytqkruqnx|oq`hwpne}ittljwcybuvtthqiwyryvmqpo|}r}x{}t{xzrw|}|ynxxs}~|}wxy{r|v~||~vv}|umn~tpzz|t~r}{}~muxv}~{q}uo~x|x|sxzto|z{ow~t}ttx|v{|zx}t||}x|yv~|pvxx{vy׺n{||xs~||yytsnxzy|1|zux{~tn|u}or{}zqvp~v{y~mvsru}uuprtzlrg|vynjqy|gsvsqxz|lpxpzukzxszuwovt˺~nk|}zvkg{_nwh}pv_mxq~yyhplmkstyvmztvwsmlxnuhvut}zs}xikpttlzslromtwpontqqmgmdtrswltotq_ltixpptlkdqnnneqq|jxlyoiukx~otqx`tydtj|qliuxznmqtfpxxsbkmlvwhrqvplbhrlvtynxdxxsxx}txvz~}}h}xy{}y~xyqw~zvvywp{m~ukw|z~wku|v~uy|w~yx~v~}{}xytyjytkj~o{vx|zt|{wvz||}px{k{x}oo|zt{z|rx~s~rzx7z|~}su~j{~l}~zxuv{pzujqwutzzox~xsz{rxpzzuuzx}pkwttvvw|rzqody|ystoptoguvrnxoq{xxomztjyxop{t}uquttsowqll}lmsnoulre{p}szxqprqmtzxrlqtosorhtyh|lylvvxzopewlmtzllhmqoulxvqwmnsrjqjt~muxrwtemwr~{ytqurgo|puqucunptmlehlovj{yxihxsfuywZ~hxlu}y}~|xo{vxot|uku~u{xvp~~~w|tzzv}v}ywxx~xvlux|sjzr|tr~kq|t}}~z|̺{~p{{}y|uwz}|xuz|x||||xylrxpvy~кxyzxyu~zm}qzu|{{v}|y u}x|ywqvoyy|x}}p}s|}rvz{~xbupu|w}{trzu}}~omrnqjnz{wtnyyvzj{lv}{sftin}κui|ypznytyylyi}tkhtnqyoisvze~pjmosjlhmoznwtpqsjpmoy|lmrxhtupd~tprexqustu}{yi{no~}rzyux|sqtd|on}gmoxchprurqxsltltoypui{nwtnntpz|tsiybu~q}vlzpxnxt|~lrler}yjtmcunkhtmyt|tzwx~|~zzmyxx|{zyy|u|wyp~{~w}x|{}nz|ux}tztzuyw}|w}x|tvszy|yyz}yz|}rx}x}|qzyz~~yz~sw~x~|||jzl{vz~(otz{qrj}uoiuuyz~~mplpzttqxwxzrwyxp|p|mumkywppkquvx~}jgs|pxuv~vrnuwhnywlx~xmokp~|bovrxyzwrer~ktzj}kzm}~{ttrw{xh}mmujnhl|gsx{hhmo~iebv~ithptpwks{tsmxck`{spr{xuumjmzjy~dkimqnnxwvunplpqwuwtnutnptxexx||rmfwkbjz}hemyimcomvnyx{ttepqhmneqyrnvwv}sz{u~sux|xtsy|xqt~ws|vp~z}}t|}t}u}}{vwx~x}pyt{x||vvϺz}{uz~t~ow{}tk~{x}xix}w|y~~vҺ}w~u}q}vy~t~jy~|||u}y|z-xt|up}xr}}~{mq}{{xys{~ruo|ltujytrxvrzzkxtuum|z~{svyuustjnxwp}ot{pzt{Ѻuztw}tkyypt~zrttqmu{}uumrxi~strspp{wlwvntwryiovqntjyyrkxupjp|lsozzup~nrmkeltxvn|ocyxsm}mzpnpqwoqlvku|gvpyznuwp~pixnztwokgvrs}o|sjxow}urmqzt|uuxunvyfzjpruzhqsotptzz||x}pf{~uto|xyy|~{~|}}vv}xz}v{y}}uyr{xw{v|~{|~~}|~}yw~zzs}}{v|t{r~|}xx}ultyon~rpxzyszxxy|z~~}x{z|y}ry-w}~vrv{{}xovqm|~p}zzzw~~s}uxys{}xrx}ttlmvuysppyyvv{vfuuphtsum{yn}uzxqphpeuquz~vtmssoarxnviuiuxrssctdnyqyows{{o|ymzyykxjmzuhi~uzxkmimmywmolqxvt{nopm|~wlzxurpq|rrj|yvyy}v_ykto|ww|m~ufzuvv{ro|~r{~r|exryx_uywnixuzu|b}o}|poi}tqxossyg{n{|zzvyyx|supuzxzx~|s}wy}{{|ytvn}zzu|}w|yz{ns}xyvxvxzrzs{y~vstv{sʺlu~|{w}{kwt~r~q}tsp~oxxzvٺ|x|r||}su}r}y{p|sso-xr|pim{to{sz{uou|wu~rrmstmvqyoxokwkxyruxyy|ot|m}x|uyzylxtthz}t}Ӻerx|zus|{ynxtnzss~si{mpfl{rqvqsrl{p|zhsxxyssst|i|jqyfttt~vm|suowyxqyyouyyxiy|rirw~rjis{{lqvqurhwr|o{yv|p{vy||zjysq}u|}touxutlgqjqlpwnutmndiswlkxsxwk}srthy}ssp}~y{zxuyxxuq~}x|u|h{vzzpt|}z}y||wvyvxw|{z|q|{ztyy{n{{v|tuv|yuzzzs|~}yut|vws|{ux|wy}{}uy~xv{}w}~v|s!vwu{{pw~vuy|zquwxtxoxiuozokoxwtxl}o~oxqwnz~lqmrrxtts|lytiqtq}txxkxwhm~xuutpzrxrmnnmie}xvmmrsixwmpwwo{isjh}fdqrupwvnr}zqp{xyqrvmxmtlxspd|stmyxjovv|tzoipsxgwtl{jlz~argyxtx~|g}l}yy}lgroqyzwuosqswptxutom|wulzss^vgqlmmxxyozyxtqlrj~}|v~z}q{yz|~p~}wr|xusw|uzyx}vxutr~{zt{y|zvxt~}xuq~zy}n{{vyy}y~py}|yutzuv|u{z~z}|ߺr}yyvp{tx~|pvxwvyr7|suvv~yzxp}tx~zwx|utyx}vtpxyvxzuzxjlzsx}|ssxxzh|qqxu{tk|{lxqs{|nqsfκtn~itmsrkv|rqtyuxpm|oyyyzmpx{wmo~|mpn~howkvuqkyxnx`l|rupsfgzpaqurpwn~xtnpjtnwsv|}{tlqlux}utyzhzyvuplsjtr|krijhrvr||nspsvruuyivs{i~yft}hhwxtv}yrw{gtxlloxyssmk|myrvufsx~wyy|~|t||zu}~{yxt}suxx|~u|wz~Ѻoz}ov~~{w{yzuwwy}yz{{vvo|z{xz{x}zynqz{}~~uyzz|{~|}~{ytyy}}ty}zz}v2lq}x}yuyyz{{n|kvytz{vru{ixr~o}ptlvqstwuu|sx~}svy{v{mjourpjopzk}prv{wk|}s|shlyyszkf|yqxtzqzxopuhsomyopysizxywr}r}jluq|px|}lsuprvrtzno|srunzpopvk}nsnrx|tyso}y}|xlypysstktrpcm||u}uvkq}lvhxoxrzovyivnyqzmivjvtxnysxuslskv}vxtpjq}|vrdqhxsqnwvy~wv}{}u~||x|uy}yx~~yxowx~ly{{t{|}vxzrqxz}xks|~vz|z{~{tswҺyq}yx{||{v~x}}|~w~~|w~Ժr}}}z{zm~s~~wuw|z&ouj{ux}rptwt~zsyuvutq|xspypuyywz^vlxym~|{~jou}o}{syxwt~riyyu}uyo|txlrhxԺvqrokzp}ttrmusmltrslrqmtsoxiwum}umpxusyk^g}xvmlqtvvuxp{mwcrszsqrfv|xrwf{uxhvswc{s}zuyxjvto|rswgqoe|{rzy{{mvvwtsrl|jqtuersywxzw|hkkyp|}po|wvnvzrnqwomoxnqfuplywxxz}x||xyuv{zx|s~uywq{|t{}zx~{zwwsy|x}xuyt|~z|z}y~}uq|plxnz}w|ttz}|}}yyyv~xu~ys}~}z~xzzpx~{|tzx{ ryuwuwpznvposfzx|sx|ypoztkozyunuyz}v}q|mvzkox|pqsxsznluzzl}irukx}ryw|gtpvhztlvpnk`y~llylgs{uwyqqzyxuywnxnzxpvflxjuuvzqkwosj~xxqplykpmzsnyrsmnps{shqluhvn}|upmrtgwtkzsv{tr{swx|xmupaljtwq}vrjgq}xoy}qpqux|{pp~wvrqkty_|f|wy}|}rx|tt~q{u~}u|p|~{xu}|w~q{|xyrzz{x}}y}~}}s|y~z|t}yxxy{lyu{w|~~}ws||xuzopuyԺ|}uz|{xywzv|}}suxz~x,u|syuvzx{x}}y~|}|t}kypypszyumxvvuuvxk|tvljys}xylxksr|pznzzyҺ~zqs}xvdst|}kwr|vlzktz|yztuoxrvure{yuyxjow|slrol|ymtvrxvv}wtlxmohoxtkxkvu}l{qrkujl|rusm|pzznuunsgxxvulhzbkoprut|ht}tstlwsqoroxwksto{irv}zmwk~ysxpzxx|r{r~{zz|s|yy}}|y~}|m}y}xzy~t|t~}w}ss{yuty~~zusryzvxx~~}nxztvml{z|ywx|ru{{zw}zz~xx~|y~|~tzzpu}s~v}zp1y|~xx|{vztttmy|tul|rtpqxvx|ssx{pujvxrsurwwvl~utyqsyz~o|t}n}smwxruivz|s}x`~iu|txupy}ynx|tpsr{up|xtxh|wdp}~ou~y}wxuwnpviv|iurjvkppv|xmn}slmptoss~lrxtvyuojyr}syzrltszfxzu|vr|ozuptztkyjoj~wlplz|xnputnwewxry|xysznorvpry}y{}}vyyyxtrz}{x{||wt|{|Ժzz|}~|ttyxqxvxxy}{~zxnxyz{wzvx||w˺yup}}p~yz|~y|~zvy~x|~xz}z{{v|Ժ{{t~h}ryn{s}}y@{yy{|ztzp}|~v~z}qxxvyznyx~x|l{nxjwwxupzxzsntlnx}npyvpsutwtwz{wws{Һpsrtp}pupoylxkmmymnjxmrkym_s{hsoww|neqvsh~hp|rv}zyt}umuruplqtsulvsqtztloixswo{tvtrthxklp|x~utjv~pxokwooqmxvkttivv|}okiqzslssmtunso{l}`rgyfinqrhpjpvqsunusi~qzpsn}x|vy}y}suw{tt}~xyo}}~sz|uz{u|v~{yw}{|ux{}xwxwwx|{|l~yzzs~~x}zptv~~{{~}pq{~t}x~r}~{}|}z{4wsztv|~uxtwutyv~ypkhsutz~xqvvkyw}z}}xmxm|r{youpztys}t}~lzjthvooq{}pn~lym{h~nt~jrtx}potrtyou~xlm~wviw{hu}kvxsmhsn}pujxve}vyvqimvs{vyxyrklwhwpgwmtvu}syrmwno~rvpuk~qlmpsrtp|vp}mhv|sfvyrkx|~qt|xto{uypp~un{tm~tqxrtpwpppjmmrvkxxu|zvzxyzx|y{vo}~xz~vy{y}~z||w~yzsxt{zy}z~vrmw|txy||~{~Ⱥ~x~qs}{x~y|~||x{zz|}|p{wxz|̺y}zt}x~x~xy}y}v|~ymxup|x{}}zzs~y~x~|qyvwwltwttvzxxzvsmjz~tssnts~u}ul}ohtyxȺgz}~xn{tnq}}yto~xvsjspznya}rtns~ttywj|sosu|vqit}mp}|mvwmuk}|ptr}r|yxspxpuv}xxwxzyxryzkkvqrrwktrtrur}ztrv|msl~cyvatxhtuxcr|s}qs|pt}ztkzqvpt~vuueiujes~m~yipyot{v|u|{w{x~}m|xx{v~{q~{~t|x~o}op{{|etn~{mr~vy|svvvyw~|uz|qutw{vxu|~~}i{z}|t{rr~z{~}}}~zss}{zy}|z|}tyyvx|qzu~1r|yyw~w|~|}|xx{x}ws}m}x}wqtuzz}st{zwyvt{|uxlohz~urrtnymtyrnnn~gy|x~}wt|sy||syxtjqqeulmmumrylxpqw{zumytsr}susqv~vrlm}tm}mop|qttxhluwuh||zex{l~hry{tqttpuy{|nopyxi||lhdluqktpxsirznmwtzxxr{hfjpyxxo|puutuihimo|vsvgnzuorssqyy{~w}|w{}||u{ytzuqz}~|||qv}}yx|u{}}}|~{}~xxtu~~{{{ny~y|}xry{{~qy}ylyp~}m}̺{rustu}yx{w|t}w0x}n{uw{}nsz|yxzly}svqr|{~ry|rtxiyuzo{|vp~y|r|~rx{|znsyr|ztuwlz{xp{ܺtyrl|jsz}mq~ty{{rruzlwqvy|}ii|xm{vuphygs{uj~vvj}nt|t|v|zwrmt}nzlzwl|zm|uzutypmkym{pouwptxu|z{|{sx}x{vtxtsfxttnkp|jutouulzzyv|xk~ikyno~rlnq~soh|u||uyt~x{|~rq~s~t~|z|~utu}~unsxz{xt}z}}~z}wu}tp~}|x{y{~~xzr{v~{~yl{wy}~xr6}zzyl{yqzpu{ytrtzvu}rynz|~}qxnyzxyҺqxtvoxutvve}w|wyrrsxnn|~jvsujtxz|x}vdpxjyk||s~{{t}puvv}}kw|tvqmsulx}txlswvxuztxxv~ywxyvysx|zpzvyuivup{zntqleo{wnv}~nypr|turtyhpqfvvqru}yskpmi|jxkhnwzo|xvptotm{}gm{nsznlspyznrvwhtw}xu|wx}zz}~|{v{{}}w{|zxz|{rznyy~w~wx}zy}zw}}Ӻzxz{{|v||rwx}v~w{}y|Ǻ}|vly~t~}|}~}uy4zxm|x}}w~}zyj{yyxt|qw|wwt}zk~z}{xxtt{{ymltrcuyysx|qxtotyeͺznpzz~inuz{z|v{s}{noq{xqyx{vl|}pyz}~}nxmqtw||kvi}}s~yvj{d~~x~ruueupuworo|~h{mm}tipyn{qnnutvwc~~}uzljxhv|r|itwnuxhspwq{}ptkzfytulvytsyhmtypvznltvqswrvo|nuvvqyyzx|{x~u||r{yyz}~}wt{|yz~x~}v}x}t}x||zq|~yt}m|zu~|yuv|}~}y}~~|nzzt{syxrz}}~|}~|}s6u}}yx{|vkwsxtxv||nyp~lnz{vvn}|eslsyxzztzxymw|{vyourxzuv}m|zoru|w~tn{jzujr~tlp{xxwvy{s}|mltixn{}un{{~sy~vnk{v{wn~ut}owosqtvkyuppets}{pu{vost~wvrmfzyyrtvvrtnqw|vvyvqyw|~{y}xzmnne}pmxtzixshuvzxutsrsuulruskvutxt{u}}yur~t|{|p}yur|{}~zv{v{y}|~xy||xt{wxv}|y}ws}y{u|xryy|y}}}w{wv|x{~pv{l{z~к|wzv||xhjxry}{|{6ttxuvzxxl|}xs}}}}wt|}~q|yxyyzsuzw{yh}~x}qrt}w|twx{orvyzl|ͺ}uwsuz|igr|twq}q~qsqw{v}tj|xqjtormofrnrn}wyudz}{klaiox{snnpjoxzsxz{tuxo~qhrxmhwo}nxwvz~|usj{vjx~qnj|nusup{xtttxt}vfx|owyu~nqyt}xudssq}qxsrlxtvrzxqpz~{s{wy~w}pt{rx}~w}~|uq}~{t|~~~{}|vwzus~xl}}ys{~zz}w~wq|vt}}tz||x}~y}wv|{~v}||}|{}|~twz|}vx{|:}x{r}z||qzw{y}m~wt{y|xz|}stw}v{uz{}ytsxx~zr}pvvg~hy~vhoqfykxxrttkxynvnromwzr}m||nx~qrx{uvr{|tv{zyputxwy}w|wrtw|rmx~y}|khk|qztpmr|poxos}x|uzrtvpp|pzo{l{ivkvp~lo}urpnuy~z{qpurygmqsvwttkwx}|yptwryqophrox~sxi~|xmopx`vmszwxw~~w}|s|yztz}|x|r|uz{vwzx{y|{y|xuvyxyzz}rvx|{|tuw|v{xzzyx~~~v޺}x~}{{y{|{z3{{zu{rzq|xyrxt||lqrutpxxzy|x}rzvu|ytyn~xu{t{w}zypq~wowypspɺlvpwstxmqsfwuzmxptvo}j||rwtr{}xkxxxxy~|hxwj|zwusuofn}sulrptutm}ixymrxt}uu}u{oty}w{{txl~vv~uzutx{zzy{v{xsytsxvtrvx{vvwtwh{pxoeriuw|mmjynmvrtsw~xu{|q|y{}}k}~z|~r}{r}x|z~zu}zys|zyyw|y|yzw}x}w{hx~|tv||~y}xqprzx{y~yuzypyvyw~u}qz|sz~rxv<}u~w|}}szys~xyxz}z}|rwwr|q{}axyyx}xqplzwxht}q|rxvwvlzm~~}qu{wsz}lyr{xyrrxmvxguxu||g~ivdl}{rsvxx}xtzkxxxrvapy{ynlsswxt~rxusn|uwp}znotp|vwxv{pmmh|}mml||mz|p|svjdrwl~ttl}rtrm{~yophr|ywvxxvx{zw{vdmtvxrxnzs{ypvyjuw{x~{yt{uy|xtx}uzzys|~{u~y}}~v|||}svz}t||y}p˺|w|w}~x|~|}t{|}~}w|~|rwty~}t||~x|sv7zq{|xq}zrqv~~uvxzsmv||tyoz|ux|xyxunpn|wkttfwsrr~vuzspܺrvxmxllp}trzjtwwu|x|tu}qtww{ruvwx}zsxxsvudxznshxptut}|ixvtouk|mixq|mumzz|rnnj}t|ztntv}mzwvqenmmv~pry|xrpmloyd~uxw}z{{utomrwsex|x`zhwvqysjo{}w|~w}uxursdr|~zxzzs||yyv~t~~|{~~zyzsz{wtz|}y{}yv|k|v{|||}zt~~zp}|zwrv~~w}z||zvwx0~zw|y|t}xtzc}nv|o|}~nr|oy}{wzsr~xu{n~tnu~o||wtuu}}mjsypqzxipt}tt~{nsn|sru|wqlpxwl~oy|vovsxotysu|yzstsyusxgwton~kuh~zwwzx|vlpr{{yjx|pxl|r~ng}tg{pnwrtwrznys~zqlv{|zp~vtscor}muntqsj~xwzxv{zyvxuruxzyt|}ty||uxux{}|y|zu~||xxz{qvz~v~|}x}|||~|ĺ|z||z|xz{z{z~|~}tzu}~ww~tz~yzyu|y~|q}wvyv~~|{}}u||sr}}~}{~zt~y}y~{~xwuyv|ݺ|wxw}zuxyx}y{}{n||q}trt}syr~ok|x|{o{yt|t~~{yvtx{l{}y}u{xs}~v~lu}|}{xtnvxw}wum{}pv|t{uzy~{{vt~s~z}|xmstl~{w~|vww}u{{pu|v|x{{p}yz{}y~{{}|zwǺxsz}}u|x~|x}{{}}|w~~swu{-sxzx~r|}up|m{w|xyz~|{v}qy~vxytsp{y{|}z||~}vfzl|yyy|u}s~t|ssx}n}~~zsvyw}y~~x|{}|t~y~}yoz~y}uutul{~w{uz{y|{~yzo|lx~||ss||ws}u|{~m{zwu||y}vt{tr~v}}}{s{y}|q~{~|~{vy~yzxxx{~tty~~ں~yyxz{yrҺz}|v}|vy~{8y|}{x}yx{}swwxy{y~~||zv}{xzv{}vly||x|vyypz|xtwx}xx}u|uwv|zyzyy~}vus|wwxntymu~vokw{run}z|uxxxouyuxkxr}zy}ys}|ztv}xxt~~}xyvy|pxz|~}ouy|uv|~|{|vzy|~{rw|q}|~zy|~}{{|}y~}u|||4u{wz}{z~~|tyx|l}w~|}|~}{|p~zxwrzyi~x|xzyptqtxu|s||}{}xtwtv|z{}l~n}wxtksr|ryu}zx~qvwzy}n~qzxt}{utzwr|wy{x}yz{|}{{}uw}}y~~}xq}x|yxyx||v}r}{~u~~~|v|~}q{|ĺкu|~yzpuzzz|ں|}{xv{{;t}}~v}}oyyyuyj|x}}xtzv|غyw~u|vy{zo|{t}yz~}k}p|{t~p{~uwz~|ly}|{|ty|puy{qx{wluu}ul}t|uuz}yxyyvvy{sy{j~~xzql}|~ys{sv{~zxz|}xx{}xww~~~z||z~~~{y~usz~uyzyz}:~}xup}~~yy~xyu{rxt~znzxxy|nwx|yy}~yxuxt|zw~row~~xx|x}w|m|uyxumq}|luyzx|uwv{ytpt|wux|{{}|}yv}xw|yuyx~{}z{t|ppyzyk~zwv}z~|}q}||~z|||~~}|xx}wº||txxxz}}x{Ϻ||{|x~w8{~q}o~~{y|x}l}|x}}~}wn}|}y|{{wyպxynotrlzzvtpx~{xw~}~z{nuy{xx}w|yz~l}p}qyxu{v|zu{vwxxx|{uwyvv~z|~{}x}{z~vz{yynv}uw~ay}}~w|st{|x{~}|}|y||}~woz~yv~}|x}ux,}|mw}t|s~|m~~}yz}{yov|w}o{v}ys~zuzvwt|~xsz}v|xv~ovz|~{ststr{~vu{~yzzx~hysv}zv}yyxzx}yxy||{|nz|xuq~y|}twys}|z{|zxy~}t}trxxywxw{~z{zwx~y|x}x~p}}y|y}xyĺy~{yzz|}}~}ytغzu|{}t}>||~|yu}~|yzyx{v~}|uzx}}t}xy~x|~~|yyѺvwy}{zskpz}||tz~|}|{ry|htlvxy}u~yost{yssy{|vpsz}muu{}es{uoz}x}{h~zszp}zsmyz|ttz{|~qv{~|xuu}~{|u~zx{t}{wx~{v|yvv}y{~~z||~n~}}{}|}}/v||xv{yp~|pxy|oy~xm~x|{v~|~xt|rs}{}~|nvtztzt||}wx|{yv|vzvz}x~z}a~vwu~xxxvszx|w|wz|~y{}|}~svs~ovyvq{t{x|~z|{t|}s{u}x}y|vuy|s}z{y|~|xx׺{}w}y{{}}~|к||;{~~~}|{zv~{||zv~tyrt~z~ovrx}ʺy|sz|my}}xy|rso|z~z|tt|~vx}}ytux}{rxt|xx}q|szx}un|}wy{xwx|x|}~wvuvztv|w}w}z}|{ty}nux|t}uso}{}z}rp~zry~~~x~m}~|}w}~}xx|w{w}{~{~{~|w}{y|}y|~}||yxtzv)~~z~||vxz~y~|x{v|ypz|~{}pyuvp}vzzvtw{z~xz{~~xov|uqpvvq|sw}vx~u~wt~ynqptx}x~xxx~urytwrp}}ojz{|qx|quyvy{t|~zyyytq|z|}{{pwq|u~{y|z{|}|~v~}~y}xy|z~}ɺy}{{}|z~x⺇z{xvsw}-}|u{|zy{tu||uyr}wzyy}}uҺv|t{x~xv~trtt{~zyyz|nvyzryv|vs}eppx{u}uqyytxwzo|x|}orr|wzw|xxv}t~xz}{yw~s~pvuzyx|wrtu~ux}~vy}zj|zz|p{y}~xy{{yzp|~r{o~x|~|}xz|~}{<{~{}{}~}|vv{y{u{}z}y}xyku{|yg{{uz~y|uv}|{|zx~pvx|{yyzts~wx~~t|y~}u}t~x{y{~pttx~{}~|vx|uu~|~{zzu}}xzzx~yxux{~|~z{uts|yx}z|{~~w~|zyyx{~}{|yxwҺ}t{w}xqx|yxzٺ}|~uC{{}x||x|zy|w{|x|x}|{}q|y}uu|z{ruvxtuy~p|}ts{rppx}xrvoury|}{vu|ywpz{~yvvz~v|xx|lyx}x|{|t}x||}||}xnv~~vwy{x|}~z{z|xq{y~}}|{~yp~zx|t|~}zxy~}~?zv|xy|}zvs~t{wl}z~}wryr|}uy}x}~zz|}sx|o{v}}}|kj|wvtwzt{yzz}}w||}}xry{}~xpuvrw|}uxy{~ovir{u}uw}zu~~l|m}z~~r}xt~z|t{y|ory|zz~wzt}|wx{v|y~u}y~{~z|z{}r~{x{~ʺ}{}|pݺ||~s~u<|z~w|z|}p}}{}v|}zyuغ}x~yuzz|xu}|{~y}{xx~x|||}y|x~vyr}u~x|u~xw}}py|yzx{{ruv|smyy{k~|}y{yz{{|~ztwx}}~}~wysxrz{}w|~|zu||{|}}z}}~yy}|}~|~~{y|v}I~x{y}xv~~}xuyxuuynzv~{}zwy{xw{|z|}vsxvvvtu|}tuviuxl}~}~y|srf}u{ou|~rut}yuqyt~rwn~zn|zrt{swzw}}s~oywo{w|~|{|{||}~x|}}}z~~}}}w̺}v||z{{ܺ{=xm}{}x{~~}|~}||zຈ{z{uts~z~v{l}wzz~sxwx}}u|}z|vovx~yy{xytwxtsv}yx~Zxouuv|yzzzwz~x}|~z~{|ux~z~z}{||}~|||~~y~|~{~z}y~{{~xztv~y|~z~5y|yy{uyvxrm}|||yyzy{{}w{txxuqx|xuyqy{x{yy~}xn{}q{zxu~{~|xsur~ovxyz~x|fysz{zr{ywyvyxxp{t{y{v{}v{|zu{xwqvx|v||y|tx{vzz||~~sv~r|{{xyz~}zպ{}yy}}꺁{{ut~9||{{|~}}{|zxsy{tݺzutx|n{|s{zv|xy~v|kzvy|w{l|yq}vxy}|mux~y~|~|yw{wz~~n{x}}zphx{{wz|s|x~zx}y|xz}}}~}}~~}}z~|}y|/r~w}y{|}~|~|w}tuvwmxzwz޺y{|~{tv~usuw|}|sz~t}y{{vs|tvputs||w}zw~|wn}{y|xuu~ynx~|}z}x~ĺz{}u~x|zp}||~}}twtytq~{ynyzw}}~||zt~}|ut~x{ɺ~}|~溃~}5t{~x~xw~w~xzwzxyy~}|r~}}zy|}yxuu~ֺy{wu~z|tx}{y~|ouw}|s{|x|ozxr{ysxz|xxzy}y{zzxxzs}~|q~y}}wz}{tt|}~y~tvtx|i}}z}v{|y~~||x}}|mxx}~~|o~u~|,y||xz~|}z~~z~~quv}o}{xxyxu~xyz||xuuyxu}xqx{x|tyvw~wxh~v~|v~~tzyr|w|uuu}u|~|pyru~vz~uz~zt||z}z|{~z|xu|~z{||u~xu}wx}x|~xxt~|~޺}zv~y|~|}x}9|}|zy||uy}l}|~|z}p}s{غosyu~x}pz}}xo{zr}m~wxq~}~}}vr|uy}|vvxtw|~}}~yvxl|tuyoqzwx~|{~{}|}{zy}}y}|tytuzzxvzv}{}}~}|{w|vyz}v~y||}v}:u{z|yw~lx|y}{|}u{||{zmr~wy}{{w~z}}zs{}x{z{uutu{{wy|}uw}}u}yttwtxy|}|pxu{z|}~|~uv~{{ux~||{~u|x{}~{x{{z}{|yy}}}~v}Ѻ{x|~|~9}xw~xz}|ts{y}xj|zz}躅z~yzuw|x~yzy{|{}xzy}xzxsp{}s}}~~|~ty}u~|xzv~{y|{ztw{}}u}|x{xxz~}y~{q{~v|y||~}~x~{w{}z~}x}{y9xx|vx}ztkw|||v|zxy}}r}zrq~|y{v|}wyz|lw~~~r|{u~{z}pyy|rsyr~j}vwy||{~wyz||}v}}~rkp~hqxk{y{~}}yy~z|yz|uyt~}z}w{}{|||{غxxtB~vxv~}n|o~s}}Ժs~|~wx}~vx~|xx{t}xty|}wwwx{vuz}yvy~}uwt~x}{pu|~~~u}~xsxxybu}}}~~{u}}w~~yz{w~stv|w}}y}~}vx~}{}}*~~}~{uyxv{tvuo|}{|rv~y|{{z{z}ztwws||uxtxo}tx}|v}y~u}t}{}yt|y~}w~z~y}~|z~wv|~~}~zx}s}|}y}~}x~~亍}}}{~̺}~|ֺy|yy>7s}}z|yy}x~y|z~q}x޺~~}yv{w{y~u~}}rrsxny||z}}p|}{u}}}}~zv}w}~|~|y|{{|ux~uyy|~wyz{|}{}||~}z}}~|{~{}|z{z}}{||y̺D|~|um{~~r}n}}s}}ukup|~yz~{zy{tyz~|q{~ypwxv}~}|w}z{zsz|vxzxs}{rzvq}xuy{|}ty|x{}~y|~w}u{uw}}~x~vx~}}zغ~zԺ}z|~@z~zxzzp~w~z{{zxw{|{u}|v㺃}~{l}~~u|}yzy~|ytzwpy~wvzwvw{}}z|tx~p{y}zqxz{q|}i}|s}y|z|~ywzzyx}x|y|}~x}~{y}w}w}~y}~}t|}{}w~}޺}p||yxt}s{}~||u{||zz|s~5|w{t}~{|zuz||{x|}|t}}~~|yzz~~{Һ{v}|ܺHz|亇z}|}y|tt|~t|{|x||}||~~{u~||}}~s$y~xy}u}|~|~Ⱥ~~}x{x~~~|~{x{|~Ⱥ~|y}~~~溉Q}}v}t}~xyغ~{~z|zy~o~n}}~u|y|qy}~~|~w|}~~|yvx}xKz~~uy~{}}}u~{}zy}z~y~~~x|Ϻxۺ4{|t㺊{||{y~zu||w}||}z|v~|}~z|{By~}~z~r||{|wz|xy~szu}}~zv}}{}}y}w~~ͺ|x~ߺ|Tr{yzݺzz~}}|}}~{yzv}~|z7s{}}}|y{~yxxx{w~{y}~~~v~xmк~~ں?y(u~}x{{y|}~|~<|{}z{}~y~źy~||~||~}{̺Ϻ{zb~z|~{~~}~}{~%ɺB~y{~z{~x|u~~yy{}y{yzy{Ǻ|~}~պL~~w{y|zxy}{~I~v}|~zv}}|~uz}~zy~|ۺy}պG|}z~|} }}|}~zy~~yyH~~w {|uu~~|~~|غ亏~}9~}){~x}}{u~{}}~~zĺy~~ry|}4u}~w{}z~w|}u}|Һ캈|4||w|}~~x}~{~~~}򺕺9~x}}zy~syͺ~ߺJ||~}}}xx}y}~{}||~}~x}}|}Ixw }x~|~u~~~w}|̺{|庘~E~ ~~|}y~ɺ|}|~Qzx}{~}|~{w~xv}ݺ{}غN}v~xzz{}uź> ~|}ĺz|}~vѺ}}7~z}|t|zywκ|{F xu{y|~xwպԺ>} }~~{|}ͺ}uI|~w~|{|~~{ɺͺB}||~I~|~{z|z@}~~~}{{}}}}|}|w׺zԺ}8v|}{yuz|{}z|H||tzzyٺͺ:}~}}y}||~~{|~º;yT|~~{z㺕ٺy~ﺉ>~{{|}}~}}ĺ}~tL~| z}~u|{|}ɺ +ݺAx{|yں:}|}}}x{}zܺ뺈T~y|~s|}{~{|A|wẔ~xҺغ7}}~~~~}}}{y|0y~~|zx}ٺ⺑H}~~}}{}> |~~z~ͺ~𺔺~4{}||~~|~|ɺ}> }{w~x{غ{|wۺC~e }{}}}p|~ȺL[{}}̺㺐HX{{ﺅ~}Ǻ~8^~}}ʺ~~̺ݺG~W~}Bdz#zລ底^xF^ +|}Ӻ}v㺏{Af|}׺~oK\{y{⺝O_{ĺ=Zz~}~纝H}h ȺL`㺞Mk ɺ@8mк)COMlź|˺)úǺ˺ƺĺ̺ºʺźɺƺúʺźȺºѺ˺ȺغȺƺԺȺȺȺԺĺĺ̺ǺȺĺƺĺɺúպƺѺȺɺ]º)ºȺºɺźźĺκʺȺú̺ĺ̺ǺĺƺʺκĺݺȺź˺ȺʺĺʺƺԺ˺κκ˺˺ͺϺƺ˺ѺúȺźźººl#aٺ3ȺƺźĺɺźºȺźúԺȺӺ˺ݺӺĺúкϺźպźҺʺʺ̺úѺĺźƺҺǺĺȺ̺ɺúȺúźĺf`ʺ1Ⱥ˺ĺ˺ºźº˺źѺκƺȺ̺ǺºɺǺƺĺȺĺ˺úӺɺǺҺɺͺ̺ٺźºκѺкͺɺ̺ĺĺϺͺֺʺºԺֺƺƺɺh\+ٺúºɺĺƺźѺúºպúȺĺúͺɺºպĺӺúҺպֺ̺ƺϺԺȺѺκͺҺƺúӺú̺Ⱥź̺˺ººʺǺº|!`˺5ǺӺϺúźȺȺźʺźĺźȺʺкƺƺ˺ԺۺźǺԺٺƺȺźκʺƺźͺºкʺźӺѺֺƺѺԺȺӺǺѺĺкǺɺȺȺȺĺκ˺źĺɺɺĺ`캤Q4ºκºººĺǺźĺȺ˺úȺȺǺº̺ȺκƺƺʺźźººǺǺĺ̺ȺٺɺͺʺȺɺǺϺĺϺغкκɺպкǺƺúúúκѺͺɺºӺqͺź[<ʺͺĺĺǺºͺͺƺƺȺȺɺĺʺº˺Ⱥպٺ˺úɺʺպĺ̺ɺ̺̺غǺȺźкǺͺ˺кȺϺȺĺӺĺƺ̺úĺºgRɺ+ºƺǺĺĺκúƺúźĺǺºɺƺƺĺºͺѺѺͺº̺кȺúźӺӺѺͺɺҺܺǺ̺ƺպƺǺƺźϺѺ̺ĺкĺȺǺźúкʺº̺ԺºκúǺɺƺl+Tźº»*ƺ˺ƺĺĺºкƺźº˺ȺʺƺĺĺϺͺκ˺ĺֺúɺźȺԺʺʺɺкκϺĺкغǺ̺ɺͺźʺغƺ̺º̺ǺȺºĺʺtźMʺǺ,źϺúͺúºʺ̺ɺĺººȺںƺպú̺ºкκҺʺҺĺκкϺٺպкѺκκϺԺʺϺԺǺ˺̺ܺɺͺźɺʺɺʺúȺҺĺźpm(̺źȺƺººźº𺽺Ǻź̺ԺѺºԺźúú̺̺ºκȺȺ˺ܺκк޺ϺѺͺպѺȺպͺٺ׺˺̺˺ϺѺƺϺ޺˺źĺº˺Ⱥͺ˺ƺǺ[ºG.ȺºƺֺźźǺźʺƺɺͺºƺϺƺĺƺǺʺƺɺúúϺպϺϺպɺкɺ޺ǺغȺк׺ͺ޺ͺĺĺͺǺܺĺźκѺ˺̺кº \ No newline at end of file diff --git a/FITWorks/test alt.fit b/FITWorks/test alt.fit new file mode 100644 index 0000000..001dbf4 --- /dev/null +++ b/FITWorks/test alt.fit @@ -0,0 +1,20 @@ +SIMPLE = T / file does conform to FITS standard BITPIX = 16 / number of bits per data pixel NAXIS = 2 / number of data axes NAXIS1 = 512 / length of data axis 1 NAXIS2 = 512 / length of data axis 2 EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format defined in Astronomy andCOMMENT Astrophysics Supplement Series v44/p363, v44/p371, v73/p359, v73/p365.COMMENT Contact the NASA Science Office of Standards and Technology for the COMMENT FITS Definition document #100 and other FITS information. BZERO = 32768. / DATA ZERO BSCALE = 1. / DATA SCALE EXPOSURE= 0. / EXPOSURE IN SECONDS HBIN = 2 / HORIZONTAL BIN FACTOR VBIN = 2 / VERTICAL BIN FACTOR DATE = '2004-12-14T22:28:48' / file creation date (YYYY-MM-DDThh:mm:ss UTC) END y}~{{yz{sz~y}ú|n|zp}{twvtrxv{yxs}~|}qz|w~urzxh||}vxyvzrudo~ls|~zgyxthpzrxww]z|zxrmm~oqomt}|yxtot}tu~ms~oxvy|uvkp~nwzlynxysro|~tswywlxtvsx|u|m||mrzywuykjlxpln{l{xit|rszquvv~xw||~lzytzyu{kpisx}r~z}blrrg{xryy{ihnyzkrfxpvixsrvygbml}}lsbtx`u\tygl~x7tz{zzx|yt|qv|{txy{ºxպyxxxml}t~u|x{||ox{~wyyql|xmxyyuznzp}v|nq}|xx{xjy{s}s{kcxxx}ttmx{v{}ywzzqlr}odrwyxkvlwrw{zxz~krwzu}{p~dvzsykw`v~t}kptnzrZs}mu|atujtwol{`zss}q}ymxtWgot~_uo~||yxxslxjcwp{s}ys~p}}bwqguxtxdygtzksosu}wt~|hhpeq|pnskzrp`edxy{lwfahvpcwfuspg}hnmbmsks~zr{uv|z~|}}ms|{z}~x|zz{zxw||m||y~y{y{}vz{vw|yyt{rxvvo}~~w{otj{yuxvrnxolusxo|j^{~orii~zbyu}oy~{ph}{vo}yyrx}zv|lxwttmz~xumj{kzv|zwzjwx~vxy{mrm|y|xnnryrzryvn}ruxrm}{nx|xg}wuuirluywt|x||{|}xurxwrqyjxxn}nsy|tlboq~ln}fu}hrnzncckpr\ontrmnvumnsai]n|z{xo{~v}~|vx}~~swz~|źzu~~{|}}yw~tzyuyxvxnhݺ~ww{wpz~l{}xyu{xt~y}yz~}qiz|}zvxyyvrwm}}u}ypwzi~}zuxumzu}qymu|y}p|hzuxpw|uy~dxe}|}mɺ|swzx|niprjktvt~r|{ux~lqturxurlzy}k{wqtowx{wiztxyx}yzhxukptizyyt|vyxuwzw|touho~l\s`wszgtzr|uxvmxvixutt`xwpltovlu~tmvfjpaqrk`i\rsu|msvjjeycnx|v}x|p|txs}qzzuu}o|uvtpxt{{tq}kwuxlyt|}~zp{uxxoo}{}yj}~ryutf~vm|pvy}uytn}}uzwt{n|kzymorn|vjmtx|putulvoymy{nfty~jyt~yw}q{w~}ovuhry}|~hrrusgzthz~tpvs}utv|v{lru}`]z}wkm~ylp~jsjshslfmmgl~i~{t^qtus{tsnnvwxjt|tzxxzh|y|v~pu`putwgcjrxYo|mnudhm|_lnroolbhfqo^{t|x}~}wimzzxy|yyѺ}{u~v}{ynlmzwnhv|wy}ۺ|v|}qxzyzxr|rltprpvty|s{z||wtnu}rwyxstuv|}{j}|umhzjx}hjuxwjn|ynuyvyrxx~rx{sv}}xw㺁}{xuwv}~yitw|tmpvz~t}tvtue{smzlsu}vgttywqlxyyme{nrnkvrhtozzynlx}hxhxkotvkowzu~evmnnqxtizziyuxoxupqnjlrvzrggxl\{wslc{zyrpof|rstvjm~}|xx|rӺxz~s|~|r|xn}}vy|dkys}t}u||y~{y{lyz}w~uun|ztu}|x}~xz|x~s}p|xv|w{v{uxltjz~ryvmmwn|yxn{xzm{zsy{}zjvy{~q{jwmnmxsurn~`mvq]m|jt|ijmq~~ix{~~xulqwzsx|nmo~vju}|d{oteswpjxupjnlw{f|u~mgzoyp{yelqr}zn~ztz|}z~ouxq|wryz~ytzpnqy~}lvyrabbnwmevxpmygeurg\mx^tldZz`prgZnpktuvv|~}|txrwr~}yk}yw}txx}~кysq~}uxy~s}q|||vzez{vzv{vrҺ~i}izzzuw{x|y}w{uowwr|m~fex}wn}rt{rwwvyovh|}dty|srnuw|}{~uqv}xoauwxgcx`or̺txuhv{p|{mdzm~swopzqtqgeunt~vktvrrvrzlh{ilzlweyt~flpxd{|mxxvruxlmv{|utm}v|e|~lp}j{luthvyiixlrorp{xpznqzpqtktblsy|u{lf`zaedspffmzUhpi`pwizrl{puf]vtr|yr~y}zrm~zo|uz~|s|r~{tw{zx~nzyzvx|mp{}~zywu||~xqxwpw{zg~~|uzlzv}yzmvvyz~}hnnnypqytv|up}hx{vwxpxxtxsyq{~|pwttknuk~pq~xxs}pugxyqguql}mvwsrljlyttw~{lhztruuli}qspzwtfzzytf}yjrwrlz~yyuujmloyqclowjtxqeqytfpo_timx|y{spzzx~rsshjzm~osixv{}puthlwurtpnmcyopecmyljlemitntprgtj}xgkxisqjiunp^jy~ty}ú{}x|yy{x|t|{woz~l}twƺllnz}}u{ywn|{r{~jxssxslغts}u}||yz}z{}qx||}y|}~~}plq~vyye|vryx|ykd|ltzyxphylt|Һv]vjɺ_vzutcyv~ykod{\ygx|~yxԺqq||ntphsxxrxi{{zy|yqpqjrwztqm{zrpyjzujh}zn{ooWswrr{kyyu}mkkrj|wbtimv|xqvlwryn}ukzpypwsihvb|}wwqqvnjs~otwjq|btzfxqqqgwtlqv^odqibqZblxkruqlxpsv_]x~ysusyv|~||~yz|tz|~{||{trtvvtuy}c}w|y}yrywwjq}t{stwrwmtvojvrttod{{|yttzoyhl|yrl}}ypo}}sxz|}yzzyw~tj{jmx~r{osltvtx|x{tp|ttxp}zpyzzbtqzk|slnqoxx|whr|pnzznj|ujosvyy|srqjxjzz~nurqtqpsrp{vqivkt|s}odou|w|ggut|qoirnomv`rq|nxfxnjysoh~pphpdonZtuyimdaa{hyYpn{hxy|{x|}|y}v|z}m{x}x|{uxu{}vz||u~~z~rzzfzur{zts|z|}v{vs~sͺ}{wks~ou~ɺu}zxz}x|yqsp{nnyrmwxj}qxx}yplsy{yu|}|zy|xjxrxzhuypxqsocy|mxwy}qnuҺtszwk|rymzxuurn~nz}~vyvr}r|tymkrh|puh{~{fv`s{yuvr|hdw|}yqxw|fm}qhy|fu|impzztxlduvspzllolmyt~{znkqjr`uvgunopuyhduwtunlthkpkyzuv^orzkhlj`mdakm^dnk{kqy}}w~~|y~}}~~~|z}zms}}zxrux}t}{v~oss|~yuv|w~z~{suyxrpzy|k|}sw{tyfxmm|urt{pvZxpmdczxnvs~urx|u}t~uqyvwllvyxdmxtm}lpzv~}n}yu}tuzqxun{|et|vmt{~wqmyuqamqtqjmqltvzmx{xyyhwhtdmxiywpaq{zuxstvxxttxnpww}mt|oYi|cqhqvxafy~zmzxyonoruvz|zh{urx{{voxqw`afsty}s}hiphigmuxi{|kqdaaf`kudfxaihhuauvmvp{v~z{xs}syvr|t||xxxzw}~{{{}ttwxzƺ~kw}zw|n|~zzmtr}fyx}tlyvr~p~|Ժz~~wttppz|zj~ipp|vxxt}~ukw|lvy|u~zt|dyv|mut{n}lsr}xz|u}uvyz|rrkv{mqypuwd{s~ݺhl{oxnmy|tqflzriq|ilssxmw}oph~y|zn|jv|~~v}xkmw}mos|qknjs|hrt~jhxgpm|bi}ia~~ͺfuvsvtztf{ti~udkxul|`xryz|xest|nr|rjgvshqe{wmy{Zyl|fmddprn\xpwvr|utvr}w~}}|~tyu~z|y}}rwyx~oq}{jy~u{o{xz{zt|~k}|t|y~nwtwuw}}g~m}}|}xuyww}ty|sxwwour~|ezuu~{uxytoo|zvssyz~ly|}pvgպuxssky~{s~svx{lsmvy|v~utauzht}tltypxswnylzppfpviywwrhtu~qslw|m{umwyyvqx}xvpyvxv|m{}vngkwnp{ckkp{asrnlj}srnpz~nyts{}~{wyxpi|urqtx`}ycr}hikojsgddba\jdriqsq`yvi_kwy}vddszezxxz}}x~zk}v{~||s|}~||cz~|mv}}qvzuh}xtx}w{upкpzy}{txmv||{|zyzu}|mka}|s}}x}~~y~||o}swxvv||twnoybszi}|lv|visvpogs{zzymmx~~pvں|pft|r}rwpzczljlz||zs{omnk{rlntqgm{}woxtjtxsvitrg|{u}q|ow{xsrvprkovzlrmjpytxzrtvtwpo}uwxuvwputklqd{rv|rptpwklxvyvmnsdeddiipiyrt[mylzyoee|fqohswvl~~||Ⱥtzy}{yuvztjp~pv~tyzrw~vx|xtwsru}ts~}zv~~~||~}w|{pwzypo|z}y}||x{n}wd|p~}inzr{}tywiopywy{zq}utmzknfyk}hk|yzw}tvx|vxymonf}_~iv{inyxvyqtn~q~out~q\yv}uy}w|ziu}qnuxpnm{zm}tpuowvxln|us}|ujsntvt}s~h}ljp{wxwtzuloxntq{timnqvlsu|jswti|wsxdxrthuapllqwmrymgqdolhdhh`ndnbu}yzy}r|~{}vn~tv|zyx}tȺyy~~|wym~nuxk~κ}rzq~m~}}qupo}}}t~|}|xfxɺ|s{|lysr}xvsuz|xu}zx|u|rxmxz}izxyxzuryxs|~nu}umtg{}|x^q{xyyzgzls}uv~pltyvsuyں|ovv}yokqsvol}u`|vlwa}kxs~|snx{hsvxkdt~yol|ctj}y||lhsutttzfy}jihyzzxwh~v~ctuhmxp]f{rwwwu}^~xzdlt~zvmii~zirn}lxlzir|he{ikyjvxwi`ztyryrtijvgmemibgrljlc}~wn~~y|}y|}x||}~ur|zy}~jwxgx~ny}}~|tqtnwx|z{~vz~ztyo}y}ky|pzxruusxujxnzmi~rxszv~syxsuph~hqxplu}ysryztcpx{m~imykzxjp~n}gouy}wtjxssmpmonhg{hlzgq~vwyxxnt|ztpur}ulxqmgztuxfq_tuqvtm|x}modsugyplgksyvy~vrnkf}q~l{jsy{`lp{mxmmuuqj|~}y|\uddnx`qrxuorrrjhstn~gmrflhkliinp`sytx~xz}tx{}ur{}}y|zv|syvƺm|xtm|zr|~}pyu}~kr|yv}uut{}ں}ox~qzuzw|z~xd~ty}ܺylx{v|iwuy{~yrztvynxmpls|q}~m{yyhjv{dx}x~qqxouxvuz~jzmrvlsvsrrzvxhxrsity~{orrr|phv|wpdtxvjqi~q|aehlbnrnzo{ig|eyrmp`xf{ndyt}ivy^ns~Ztppvuwlx{p~~zm~tupyyttrklaxly~fm~~{u~omf|{hdejxljlX{jka^{|bw]lbgts]mshts}rsky{l~y{}{l}|}}n|{yuy|||zrxt{y}v~tx~iwxuqlpyu|~uxy||tpxry}rs|l~x{y}v||rszudyllt|o~uzyxt}wz||kvts|z~t}uttyvxd}toxytyxvxyx||uwtwrnsltnlk~xtr{mvwi}pwfuszuokq~xyqoytlon}}rlmqmu|ns}m|m|e|vxtfrmq|xnxmh|}ot{jcqy|lrv|hyuypri~uufquaxt}rr|y~]mxvvtrd|vvjwyb}thelxwxslmqmwnwkjjSl`rbfk~dknq|hzhsce}ow{}~vj~z~}-~|yzzxzr}}~~{}}qvsw}qzuowǺrwpz}x~nj~~v~txzmxumuslzv~}zzzv{n{txyu|nl}x|py~jqyiqy{|nyw}znhk{yp{wqx~r~yuye||qy|}tf]}x{xz~m|}nxxc޺lxvyxxtz~zv|ci|jtz|fpl}r~eokjny}}yryyxttohsxzqdrlrj{jxs{vyuvpzxsojxmzo}y{ti~|zxn}eq|~rwxnrymxxf~~onxmrxynw~xhktnro{izmlqhkjoswrd|db_xm~pc|}tes\nm`tjrpo޺{z|s~xr}{w|}x}wr|{xxsl~~x{xv|xzkux~|uwv|}y|knqz}~~~pw{ttuvtu{wwvy~or||u|twputuvvvrxu}}m~qipm{t}xxyow~o}zy|x{lxtmwqghq}t|uw||myttut~k_yrs|k}mku{vvuvy~~nzrqjhnt}nf|wht|}trynjrxynzosjoj{|}hpvq|xptyo{qy|mtolhqv}p}vzxrusxxxu~hpl~n~hyixnuw|pj}vzvt~pv|daluojoxyvvslz\fqltlnslsln]`rw}|}||z|{uz}x}|uvq~~y|tznl|~Ӻj}zrx{{xyu}{svx|vv~~uv}xںxx~~r|}sx~{x{|z{}pt eszsv_wutryllowxw}{pyygxu|x|oxuut}nms~p{xotuy|pyxo{}wwrxvwxxsx|iw{kolxxoi|llu_u~tkzukp~x`urpkwowx~sfk~zoxzm|jj~o~ph{lnwkjirvvxksxotbnn||avv{k~owuns}]t|eqrmnr{p}aut}r|hzmufyumm\tympmhvsgjqfdi]sdnhnxu{vxux~~|xxyrv|zq{pj||qvo~j}{{x~v{y|oqxw~{ujtxw~xjtq}{wvyyxvbwtrxomz}xrq|}yooslo}hcYx|m}|vupmnvtpnl}qy~zl||}xltjx{qi}}p|{qqv|ix~x~yyxqsxdnqzupx|xyqhh}|lmzpyvhxwsljxuxyqx|}{jlhoxh|xifyqflcqsshxlntovnsplvzqv~xudr{|lhu}xurxxgwxfvu~zxknnsvtald|thfpm|mzpaee{|zvplkn{xyt|~|}x{yx~u}yu~wvvyry|t{yxz}|wy~n|x|y~zvyx~~|ﺩ{|utpzpxyu}~t{oZy{}nunf}}{tlum{sx|zvznus~{mtst}u|xow|x}or~ry}qjwxxyкqq|myr~yf|urjh{|y}xuuutwy~tlul{}qouqpmwruswvp|r{mzlkvjxpr^i{m{xvww~ncu|}jt~tlzrpsveanju{dntvvftyvn{m}vxnfqluoppuf]hgdxdzkstoh{bod}{j~tz}y}o|zxoxxt{|tq|t~|~ettǺ|ºxtr|z}|t}}z~v}pl|{imy}hxzju|tx|{xmvκurv~qzzX{l~|vytly|lx~xssuyx}llhwutx}xo{~|qnrowvustn{|tlx}{|m}h~thofxhuvnq|zf{mxh|{om}ny}yrtzzly|rnww}zumzux}hrlyiygj}npits}~sptultiryn{wto|p`|{t}xz~pntzvyxmhm||kmb`}|x|iwrpomn~|lrrxmmu[uVuk}yklmbkwtjfvkgfhxz|z}x|u~xm|tzx}tyw}ur}xyyr~~{ysuyo|z|vkwxz}}rk|~}~s~v|sy|quyprr{xqxr~w}zxyth|}{dr~s|owp{svuv|nrvvu{}vxzao|os\y~gfysuww|qltպ}{|xnkums{dn{y}uvu{mm_urznvwgx}vyxstmtmoymxejzx}yuwhqylhrjyty{`ctqxtmoz}hpluprdfxv~nxe}wkh|xls~xit}lnvputqdmo}qxjz`rnvoldktjnZYrtj}jqghdnnt\mqh~hY}ymyx}~x}r{|swz|{|uzz~{|zuq~krtkqzxzs}~rxvxtw}x~|vm|ovr}ltrny}xyznyyvv"zvz|zb}q~}zsxwv|x{y|}ynrotwyzvwzyqqyrux~nhlnh|pxyl|pt|tlt~xqto||sv}pzvt|gtxuzxlx}}zy}|lugxxrtduqn|vgxszqy}hssyvtupy~ntza~uclvtkmynr}qxszznjp{oq}qut{aiupuvtmtlppvvjguvdyTutpcWuojy]uv\krkrrn|uy~|}|}vr~x|v~xru{ںغ||y{|xy}{|z}p}u|rxƺju享yyh}yteozt}~{uzszoDxty|lwolrxyxtutuolturweg}mot|z|úxyxp}i}|tw||xpxlsul}isqiu{{zzѺqwjv~{}ynxvxuxy||z~tutpw}qtqx{vtxnlyzyxurbxtz~boszlm|frbu|{c{nspn|ro{ikw|jnmy|wkssoltg|^njxb|}hunpjros|smyuzi{uxuypv}tdijiifgme}fsngbxnn~jslxzx||yw~~|}x{~kx}~~|zvyvz{vk{~v|pu}xzvzw}xzwy}zp||szlm|owyx{ysxvjuv}!z|x}z|u|zvzyaxuz}hw}r|vu}wrxxzvux~ouwoxka~ko}xxso{yuxnin~rvnvnxmgop}xoxsgwqy~dru~z|vmjx~zx|qynz~|mrtpqdtvqpky{}mmt~p`{dos~wvvlwvw^{|rir_nhso~oix~hmgs{siyxm}k}vl}xxhoygmoizu~wj_prmf\guW`vlb_o^okpfsocumv^mytغozy~}z}}~tztt}{z|wp}tyx{}wf|~~ylsu{~}vpx~w~xww|}xjzpxzn||npwrvwun~~ypxs1rxo{x~oypquypuu~xmlu|nsyh|vwuoz~ewo~vtqmmq|vt}ex}x~oyxwxttֺmsu{nzgxriz|ukzzcyn}u}~lxq{~rspwxuopitiipjt_ulzspmqqu|tnyg}u~jnrsy|grmy}hquxxyxtmzte}izlunuvtztjlzfrx{iqnmuny~hxxpxif|hyklvczdxjrik`}so\nXpg~_wusoTpx}~y~xt~||oz}|}y|o}z{|tq~{|szrxrwux|qhs{z|zrzqq}uqpwy}zuzxn}r`zy~ospx~o}wy~>{s~}sfp~|ywr}||xvtyqexxu}zy{wqulvtqo}wpxwvsv{}v~ktolp{uyicx}x~tzmrmtktujxgyo{nrolsl|zq}u~mr~hjs|xtpi~lw}xyuvo|ivlvy|vmys|hbzh~lzznrlxukauww}lzljxzkxtrjximi}mpzdykeyttuysokwz`xglofbk^ysifnjq{Zftw|{bbsmnpz{~y{~}||ylpxxxxsz{x|zx~{y~xz}|nxny}x{t~\xqw|p}~wqr~urs}zɺ}sxnx|rwtpxz{z~vtyvtvtpxpxzvv}~~tyskn|ixu}|yu~umomwtz~ojl{mztxy}}tnpnzxgo|ou{{|sYxtu{wzayx~rlk{xukykzx~eqni~mzr{pihntrv}o{utw}tqjpw\z|}q|s}vktl`n{zlktytw~vsjgpnqtgtwvozaignhrnxfx|pslmslpndqjgp~tumk|tazrrsamhnssqpljlklsihripp{relydhrz~}uxy}t{}xy{r}~oyxw|~zpozy{t}~myu{r{l~x}pk}~uhtwuw|s|l}||wk} ~x~mjerk}y{~}rzu{rtxv~ufzytr}vry}~yxr}rv~r~wt|pqxzmhnutpi|pk}~suv{zj}p{lpyl~ixoo|o}uiuop|nzxzvk}s{t{yrwlxvcm{Wjk~u}mszrygnbuoxyl[|pvktyzenywbyknnytpqm{zxktvzlnsirzq}wjzutgsqwty{ahsrlx]lwdmvb`|ssrvbinpjrt{jr~yxy~~w|sxuqy||sv|z~c~y{x{utt~zrznvyntz}~~|f~wu~pu~|~ɺ{s}wzlsvyyzx|z$~vl}eyyqy}j~}y~tvrsyznq{{v|}ozvttzspvrzou}{rvmpvwhs}xslvxl|ѺdtljpwlwjynXzw|mxmpz{rpztvvuzuypuxsmvn|vs|xgmsyou{xzvtum|}syok~e}w{usjr|pj}`othuyRdpolkqg||]splp{mxx{sxnsrhzhftm|xhcklovxnmhhjjn|~lrouj|Ժx}|}||}}r|y|mԺy~z}~v|}tyt}pu}}m~}y~tw}zqw~rptvxy~k{nqviy}ys}mx|}}}|zvn{{lvylo~}}~*qr|yv`{~z}qe{y|uvyy}k{yqspinvxi}txxm~}uronxx}bzkmpzunfs|wtyyqou||rhm~fprtrpsqpt|updrtxl~v{tispm~rgptt|~hxh|qsvxqdt_|qmxYzhnht|nnqvpzv|~iwcurfzxt|zrrsepl{zpsvdzmloycilmygqnfm`tyhxklhqmhc~gfgdermjaoh{n~|uy|}~|uxw}z{z~{w|~~{q}vy~{~t}v{g|}zk|p~ytrppzzzysv{|{iysxpoipzv~~nukvAy}uvuoyhk{yvzxqtup~l}zx}}rwnx{xyuyxxwvowu}gyuxl~u{ֺuju{`}s|qryzv|xnyoy}wzu{wshzoaqxyjutxxrnpnmmtoiv}ux||udqzlt^{totwzw}}|zlisuyiyytpnxltmhymlmhyq||fl}q~ujqxwgq}xknfuqoqqwhvuljnxsyn~cjlh~xlvlpsyhkyf|~||wyrss|v}}~zx||y|~yyutvzz~~zt}|vu|~{sy~xx|yyoyvvu|vx{zvt|lqyuvtEqv|tz~xt|}x}vju~zu~tt|xxnxxh}czqlkszu}v}vyxi|}mftxjertlueb}rty|mpoz{xts|p}u{ukz{|u~lzyjtttr~{rwzqho|jw\lv|pxlinxuym{mhn||wypouvxzjhxk|qjyzjuq~oxrzty|_wtzzptfvoug|vwjwpimpxgyy`athwlzyc{iqZoqm}^qn{^llihnclwqboauX}rozuy||xzz~wt~ryux|}x~p~{q~x|||znyb~q|}jynh}xtxykpwvy~~s{Ǻ||zuzzyrx~|w{uzrqt|w},|ul|r|pvo}syvtx~ooqn|{ctqvlph|qt{zruunt|yt}|v}uvr}κms~i}xxqxudzplthumh|~azy{rtqnuop}ywsbnv{zwqkp}zm]onuxjqopw|qvosrq|uxxmtpvltmpsxbxz~lpqxnp|vyrttmewnrpk~vrywrzy|]sx|nnuj^unpjxtdzc^{bltpjz_ikw{gm~|~}xǺ~y|z||}z~~~ux||u|zu{{~xk~||ykq||}|txsur|u}}}t|hxuyyxqzr|xo}xunzqmv{1~upz|sptmuuooulvtrxsjpu}y}~suhh{{kri~vixwtquouvrxxkh}or~tuhgu~xqvz|wltmz}iqlmvl|{wyyft|}yzv|uwhrpqtxxwz{k{svhy~m}urxmrm{dkywpw~}rrwlf}bsnegprujcswumo|snxxwuazftztiuy}spllgpqj|`}eklfihqfxphdxphjl~tyx|~z{x{z~z~}|||yutsxu~yúlt}~tnvwummnx~}{ylwzxԺnt~~utsysm|ovtvizp:uomv}y~}}txv~{mx~h~wur}v~gr~lo}~w|yktxnnuv|xqy~vtx|zsylrҺxtzwtyvkxt}{twwvtptpr}|ikzfwrvz~tphqof~oq~ttyj|znq|tn~vlzgkltwopukqnu~itvjx}r~v|`rqk_|nzxjoytwzxj|{oojp|uthju}mzhtoikupuhxdiloox{gm~mxmhlt}ovyzx~|~uy}|}{{}~|x{y{}z~qzx{vxqvro~|~x~yxyrytsy~|}t~zvr~y}~j8{zmy}vtjl}epn{}yxzwxx~~z~~xk|zvxi{jpx}r|}lt}}qqu}n`q~uqol|jxlpu~rqjr~z}hxmtjrl}uplvpvx{uzz}p|tvmuqzhzvnot}nt~vuequmxqpl|ty~po{}wkhtzzm|shujq{yzsw}u~xntnnuuoymfieljgysrl~vlrk|rymktbcutlgxuwloundtiqmejbb|}m}}v|~xw~w}|p}~~ywvx~u~ں}vtwz}y{~|xwxvx}lx|ort|}wrqκDt|rz~wrv{vxtzxkvs||~o5}m}v~}tvpz~ztspsryx||zxԺwskqyzv{|nzs|zxz~om|zw|kuntdrx}{uݺykwrxot|mvyju|ltsoxiw~kuvzopkqntf~set]wvkxzzt{x~uozxk|txz{j}xumxz~jqpzr~}rxmku|stjm|xus~}x}xttpxuzhrv|xntqilyucimopiwntll\pylktl`jn}mrjryesfmt}w|~wu}|vwzzzxixvyx}|{y}|x~z{|~zsyqvzz|~|zq|xw~}rkzغlx|xqokyx~t}p,{tymsyoxroytvtpxxtyuqnfxxjtomns{|dlviwyhxyjy~lqzuvrnuswrp~i~ru~rxt{ojur|sjxumr|ie|uztw|vfmwzlxvsvo{w}xkstqqkz}yvyj}hrlrmplyzxlywxunm}on{lrwjopljzlwy|rnymmkpor~ktkvqmrhe`debg|pxgli~f{qincpl~}|}fǺyvz}r}xup~|e}y{yxynպz{fx|r|yxvv}zuz~kx|r{Ϻui|~}rv|zst}qz}z|tvtvx|p3|xzvrx||~lyhtz}y~k|q|xyt|wzo}|pv~s~rw}{q{xotoxpuwqҺi~pvtvrmu{|zrvnnupvuyxnmnlomx|uy}xjxm~tyiys{wtfyt~rxvxfv|q|r~|{mmuqukuox}xvvqwvkqi~zzzqwv{hyuxipqo{py|gpsto~m|vvvfkxcu^timpalsqizxtʺ}~z~}||z|z|znxyn~~tvx}w{ºpny|r{{zk~|xxmx~szu|yvvq}qw~|su~ryxrw~v{sovprpzLvzz|y~lforvzv~x~n{skuyxvt}|t{u|jt}p{{wnvim{j}~whgdnivtnnuiq|tmotp}s{whruuotzlqygxdpsntrt{btd}ri{}nhph|ty{}uwmsx{}~~jysqtmmohyqzv}lrvl{yus~uzsn}|ltyrryqrthhenkdz`jjig`hsyir`nnelr~~|{x}|~|||vx|{}|x~zn~|w}Ǻpp|t|tppr{}|w{zz|yr{p˺vyvp{vsxv|q~wu}~|y|0l}~|vmskv|utrvz}pnzy|\~tkxztrdyjzm~utm|szx}|rxzg|iǺyqvps~plsovvsoxvlqvznvosyz{}~svqjkxf{mpyw}sintpurqxnjf|vmzsxp|u}vt|ywtz~stp}fht~u{lxsy~ymnyx_|wrtrvnhspsxstfknqxonyg]hqqpivej}zu}~~vyz}zz|{&|~}y}zoǺ}~yu{{|{nyz`sn}~y~{~|xmmz}v}}u~ssxu~tv|x}zy}|ĺuv|nvot|vvyvy|xws{pm}oz|m}zxyan{uzrmqzc}mnoyzpxe|xntfdt~s|u|z|ryxmtv}~qrwhpolmtyuh~z{xrswycssql{r}e}nlnpvkgbiyjyp|t}}yuhu~|j|zqwyxqtor}t~uzopmzutqp|lh~yvvhslksyytqtxypo}ujtkig}pyaduntetq{xl{hxmhodbyy~ĺy~|zwy麇}vq~zyu~Ӻ}|}pjxv|puxxzp}~}l~~yy̺isvrx}}}u|vwv~zxx}~*xw~|}x~ky}~~knv|ttn}yvlyzao|systwzzry~{vtvmspto{xytuxy˺wpyvjixtpyzzx~ol|}~}qsxm~z~~jvfznn}bxlyoefrw}}oz|yzq}}}{vlsvuk{yo||{`|sjgtuuln}vuyzuxc|xzkvs}u~dlw{p{rst`orh}hif{ycprhzjpmvsmxhl~d~yhu}y||{vxyxy}mf{{tvbv~srxxt|sv~g~tz{wt}yp}xqximǺ}eoy}qxu}z|~,x|vx~~~h~rmluxtyzz}zwylwtu|{v|}|yzrtutxwojnr}|wy}~庂zv{o}}oku~hrrlkqtpww}{d[tpu|{wd|txxxyvqne}njn||ltuytwtgxtnyhod{xoqqzstwnwymlnvt{syyznmzmn`qfysm{smjyxy~rpsmw|ix}iqhmv{a|nlfhgmsygvin`tjibwlnuip}yx~źxw||}yvyv~}kyx~ߺ{xy}xy~}sͺ{z~}miuont}zuyv{{|v̺}wkdrlzrx{msp~zzs~o|t{uu/|}wzs}u|xo{zmrtxzrxq{z^lplzh||}uv~pyzzny~xylxt~vt|mx~sttɺnopxnt{l|yvzut~n}ymwzqytju{oxnzxouk~ueaxo}unwuor}rphxuzp|k[xwunmsqzqlzo|t}pq|ut{rd|tu}jko~guuuq{xsptztmu}wfqmnwy|rw|{w}lh|m|}{m\v{`j}tnoj|phjc}~zynz~zmqw{v{}{|z{xuyx~|s}y{}xuvtut}{pyiwo}}xtwxxu~lv|tsn{}ruzoq}~c{xqr3wnnr|otkzt~|h|xwum}yu~j{yxv||z~lwpotlpx}m}kyr|}oznvxwmu|c|s{zvbspky|}z|txq|swlzxt|rzwytn{uzpr|}wmk`i|rz{px{dlv|qkvtvp{nutox|ybqev~iuzqyu{~lpd{uppy|uvu{o|qy~|{rnlhgthm}jwvtfgypktsp|uzb`pth|~}x~~vxu}p}xo{txy|~z{|~κi}}tzjy~}z~{y}zs|lowxo~}ݺvywtu}u}~ux{x~ytk~|~4zu|{q~{yxwporzq{~tjfyrn}up{ut~wtvukppo}o{yq|zxnԺbrtzou|jspmhvguswevi~xculwltvxuqwptsz{xm|swx}qve{xyuubyyw{~ynly~roqnyyxuvwuaxdc|{}trivmoptya{vm`|}ppvp{yuh~tnjxyn|nimmete`gutitkovlcfb}~κr|uz~}q}t{xuuq~|[y~xtkxsnt}vz~}u{t|u~}~}uxzmytwyomvxxyowl}p|yq{2}rlnpwpum}|sqy{t}yz{uudyvyxtt{u|cyqwts}psyvoklpt~lxwxuyzzzyj|oxq||ztvz}vtnwjxz|xj}fu}kxh|}ttp{jsjzo{tvthpby|{xdzuvxs|pyzqx^rprn|oy~of~tzsyw}jvuvxl~x{pvww|oobdcxvtisnuc_{dzorvxuy{q{wZos]s|~zzn|zzwwt||u~|~|~{˺~o~uyzywyº}{}p~y}r|vy~ɺuxtyxxxxkyxt}ykm|ym,~|~z~j|xy{||cvzu|t~zwwwrrtsuvv{xy}ywxr|ux}r|wihznm}~|zߺs|b~zuvp~zxu|zplswv~mxqt}ulvxvs|~msoc{|fxyzwrnvf~x||~z~z|hq~}jrvutvurtzezx{~qh}emoqyphvtwlk|kprhxdqeyjyjimvr{lxuujb[qhntd`ppd[|knhn|ef`xon~jw~||{v~z~y}k{}~x~}xyvuzu}~yrv|xhsu~|oyrv{xnl{~ytxqm~v}y|{yv|o~|4z}z|wsysyy|}r~xry|qq{mx}}gr~t{zfzqoqrmawst|vwrwr|vk}~rq~tr}tpptx|v]zzvky}yrcmwfvt{roxy~nhwvl}wpkmkpxxvy^wzuvpywz~lxmx{h[m~}yxwxxlywhu{y}pmcroxcy~xrcrknpxwmj}qhekmruphfuf\xrcpfiucouh{jmyyyw}~{|{~r{wyp|xzĺjt~xrwzz}zy|yr}y{|zx|wq纄}{zxs{~mvz~s|o}~p}{}xxuv=tx)|wtwgx{qu}~{}}m~m{nhy~vvnvrxh}xt|z}q|ox|otjw~sr{t|~nttlfsjtasvz}sttx}}m|mux~nrtzrlrnrsyxmtnwnx{}o}m~~yz|wu|ytuwxxw~iyq|z}q}ivqvn}kyr{xv{lh}uru|}o|{_uxft|qlprqxpy`roimtvowstjhzqstukhh`mlpnjqrtmnotyv}{}z}qz}~z|~{~x}{|y{ty~}x{qxvvv{}qzk~ztx||}zmvtuxzsr~}jyyl~!{pvvv}to||xp}tv|t}yulvuwru}m|pqrx|x|uxprrxh}yyxg{sxsywxtt~vtuyr|xozuqix|qh|xktpyqx|vjiywzw~|xpluz|puxuq||m~z|rl|j|xoe~jznkmyx~w}vrkz}|rzqelwhxujttvvrt}fk|tvqqsyzkv{z~flikrsk|xdmssauakpw{prsl{z}}~|oĺ~jxh{v{l̺y}z~r{x|}~}n|}r~uxv}ú}~Ⱥ|yuyup}|~|yurtxzxz9}|vzpк{{~s~x}rdjxlwrntobwnn|j~|zpzyot~yxq~}vmkeںu|zrmzp}xdnsjbvkx{uyhsmq|uzstr~y|ut|u|q~xtrtvzx|wrlxityk~|my|}km{vq|{hlwbtjmyzu{~}trxbptqyutlqsymzltnutnsvi}}|xtgtmnd}xu_lkyipmsvj_nitzcj~źmuxzzw纊}m}upxypvxy|wxxtº{szumxsx||ysoz{|}{{qq|xtvquxvi}wpln|v|wuy1}{}y|rvy|~jzwry}|uponuw{wu~ƺzv{sgoyvxt}rtytpxmm{lqu}t{zuq|wnuosxl}xlutrwp{zlri|mtoxpzv|tptstvv}oz~}gomphpl|xtkx~l|sjxwuisvnnttwzyv}utsthyksuiz|twz`{hxm{n|glfp|~sxoypuj{Yk~qq_onevjowki{plrosh~xy|~{x~}~z~zy}tx}w{~xu~ry~}pyxѺpsz~r{r{hpthx~||cx˺t{stv~|usy{|qzv}ytfy|x{3rx}nj~xzw}tsncipx||svvq}{uh~p|z{}x|}uuypn{q|{p}{z|n{~rvl}޺~vnzm}pymmt{~vvtyyxhvjss}yps~zv{rrtunto|vwom_}tkukmnx|sxk}kgqr{xupyvteczx}dzivgx{|ikyswfsoi|wlvvs}ol{rmnixivhma}p|akt}chnil`dmjlkmjx`pRqupu{{z~~|y~}r{tk}t|y}{v|x}nw}}x{{xuxuy}xus{kt{z~{rzz{ylwpwt}u|t}{{u{vxsut~iu~n}txh}y}r|xxy~pnyyvtxrwwy|x|{vy|ht}rslm|qwqt{wmrn`ssrvs~orjjcmstzy{ty{uoxtu{ykv~vsnqqrm{pyz|tiyi˺rz}rp~l{rpm|r{|\}vrpjyvzt|~|quxtyhwt{w|uptu`t}wvk}slxqxxphs}twlivzlnuvxflhxwg|uqgkx{sny}yl|~|}}x{|}}wxy}|ɺ}sty}wu|zut}xtxxzvx~Ժ{~t{|x}{xy~sxLz|uu~pznt}v~wswg}|}wr|xy{yqxsyizs{kx|l}zryy}ycwmtyvzxvpztlby{vq{{}nhllxy}tkkuvuxyk~xrpdwpv|voxy~ryzxp~tzpy~yyve{zrtn~r{txyv}z{kzr}tn|yov~ozu~{~muh{xitrmky|wlrvqhvv{jvfuh}xlurscrjgrermmomrvgxeljxxz}}yʺwxiyzr||q~v|s{q|{s}y|t|lswtyvzp|u|vguu{}wvw~|xyu~+r|w|{~{suyw}~~t{lyzr}fmpsyo~bu||~vw|xjy{|vy~}xsr{txxyh~vuyjlytp`ywxxi{wpwlmwu{yvgxjpzt|svyhrxu}}|xerummzux~ruruxhlsyw`li~c~|k_n|svzyvz{oqdxi~rxqz}hy|rwptfg|}ieronjpvnrsooonilriiro}rhedmxinsjku}foyw~x'}w}|xzt{~yw}n|x~}{z|޺zq|yzvz +|u|}r~zxyt~{˺{{trmv~t}z|ms{|2xut}j}tyw}rvuqnznsymsyrvxix}yrri~}mutx}t|ںf}puvfkytvxtoj}ovwxqwrwww}lqvt|uvxzyxus~skgyxzs|rxvrv}y|~hus}hvx{wir|x}utmmtqr{xxi{tszqijpyry|lhtww}eke}onnt~|hvyqfvjaeeqyrrnpn}xqz|ƺ||xyxyy{}}{{~zt}vyez}|qy||{u~}x||uvtrys|zlj~{~wvpnxz}s9{}|z|zq}tdsmvtru}{uy~peq}t~xyhsvt|ykusuo{z|w{|knx|skxxw|xszt{~||srpio{wwnexw~}r}}|axgvkduhxxvymt~|{rvoyyu|~m|}knuuptytmmj}xkd}x~~kxo~rnhxklmnolmsslntq]lsqzo}rotby|~yzv~}}}ywt|{yt{|z}x}}zv{s}}}y|jw|scp}s{ź|u|mϺy|sx|{j}|}vm~y~yz~v{wtm||tozox~}{~v|tx{x}{|}}{~~_vr|o{txxxx{syvpx}f}|y~uqyupu|zlxtzuv|ntlyrzirqz{r|uu~urvunzltyzv~qo~z}n|z|grjtqlz{ulyintmnxfmm|y{|~~mt{ro{oty}|}sevZxvo{kbgmfswuesuhle`ykx~ywz~x}kx~s~zzwxtvjl|y}yr|xyt|zysytr{zzqmu}κxmpzmsvnmfzue{}v$~mgyyvu}s{wn{jxy}lrzr|tuys{v|{puupl}jvp~غnmlytm|xozv~|mm}|~|y{}ynr|e|oqpxvz~vpyfujsxptizvjommsxr~}lzxsqmtf|z{xz}xm~jqzytpfmnnmlkt_x{o|tohxj|zzdipkxsmqz|ynfroʺzߺpsRxriw}vywx|u|{uz|sr~}tu|yo}}||xxy|kuuquvtz~druw~|wl}|~|zup~|uy{@{~|vtwy{ux|xqq|itvq}}s~yvq}|snxpxq}}wi~myoxyl}ozuusfuyzrxorj~xiqtutr|r~z}xsqrvxz}rsyuzijvsxy{hxrnlyu~s|lznyhzvst~xywwyypvsmkphzr|yxtzyqpyyotxxirutvotsxr{edi`ypwsvrzp}wmne|kivmdvv}y||u|{{uzxv~qry|xvƺ}|y|~vtyy{ww~|~}}y}mz}κtv|p|y~txz}|rz|ktz||Er|~zszxxxz{t|y}}~wt|x}}~{tt|}{{{{~wv~llupuy{ustttivƺyr~xrxuvo|}n|zrxvq~|}x~}ut{wivwsszt}}|y{jr}v~}knvumrxl|svyy{dtyrykvxxj{}t{ptsozqxlmvv}~uyp~vpwl|||txb|r~xh{u}ilpixth~zgliqsr}~z~|}}}z~{p}}}{|wtyuvkwv|rvx|~yt~~y~w}o}}yv{o|usuiyz~||z {s|}}l||su~qu~lx|}uumt~rulj|}vy|yyyuw}vysujyx{wsxuq`{vvqz}xzz{zy~qtwv|o|rmyxyuwvwu|xnkwmvuvyt|m|nvtzutt[~uomwp}xhxzt{hyyv}zxyoy|umop{sxlztyyz~xzyktsutmwyqsyrjztwgojwhaslhjt~jum|ny{~}wp{zy~w}z|}u}~}z{}zxty{t}y|wp~u{lzmxmx޺pu}zu}zrz|swooxwAz{iu|xnr~kuvnvowtZy}{zn{smut|xj}s|wvs}vltyֺq|~xxyjr~zs}n}pxrnzpl}xlymnmy~spu{vr}skzw~txryxmy|||rpjxnkvr|utz}wztt|u~lwx||zzxxjxh~xo~|gb|pwng}f~puj~}wv_}xzsowroqxp}qzkh|hp|vrbzmw||y~qu}p~{w~~|~~wq}||quu|}xr}t}|mɺky|yvvpvw}vxvvu|prvt{{iw}{yt{t|tp~p|vunu|twxzm|{yu}jfvzt}su~zq|ersv~pxq|vx}pps|lwvq{}}zp{z}v{}}}vqisnz|mqxsyzlizuiugT~rnyp|uvp{xo{pqgwlhvtzwgi}svo}umenypkjzpuytuk}sx{uqyuzwp~mp~fqm{ljxlhva{jllg|{lj{dsfo^muumm~z~u~~vߺ~r|{xy}yy~qu||qopdyu{{wͺm}pu{sx~vy}uyvnyxw%~|z}x|wxv~z~|{v~xqmurgssrzg~u{u{|puwxypxwv|wqw{r~xeuԺt|pq}u{lpzox}~pouocywn}x{yv~}t}qhpq{plvx}xzo{fsxpzhm~~iwcpyxp|yp|t|u}xwqryftxzjyj|~ox|xrkwt|jsxsznrie~vujiotqgf|roku}xtttpuepyt}}y{}{{}}tw~|tvt}w{|u~{x{|tmwvxumqwvxxtsrzr|}r|=yxvi~|x|pmzs}xxr|zuvxx}y~|h}yz|gyi{oyv|sqpopp|xxsvvxou}vkny}}vqn{{vuv|onruxrurtq}}}w{{||~{n{~}}~txvho|txz~nxm||knv}wrxrz}yjdy|vhsxxvmcw|vnptuz{siwznpxwh~ytqh}}u||ru{yyvqhtp~jjrqjfbvyںv~}}Fuk{w~vx|j|y|{}zrtz{{s}y{~~~}xxԺyqzryxyr~x|}|pywx{o~~8tuprykst}htq|~}m}r~yxsp}zmn{nt{su|m}scst~v~e|}snsxzx|}yqzx{{|qzvt|}}uk}z~uxi}}}t{mudfl~lx|ykyxwz}w~~ys|uqi|ur}xomo{m|xuylxzux|qwxzzx}rx~yyttlqwlxyo|wnxkxmqk~znnryxlfhrwZt}zt}hsnyzsyu̺~{}}~x~~vvys|q}}jvpywsgz|}|w~tuun|}|x{z~}~ty}{o`~ozyz}l|r}}yw|{}xu~wxu{uqs}}~z}z}vz}|v}m}utvnvwx}}zxjy{us~ykzcvw|imvrtipt|qp|{Ӻ}}xx}zy}wtrypsoh{v{xkqro~o}κt}m~nhymng~{nyk}t}op{xvptni}rle}|wvhzpyvxzx{wjvnk}jlhvfulianwzx~pxdyqkz{|{~~y~z}w|xq|~vx{}~ypx~}{pu{vvxzyz{uzѺy|~}~{xsuv}l}u||q.pwxum}zzy~uxw|zxlvvuoo}sjvriv|hqo}vmmvlyytxmi{pv}Ѻ{vornh|twpovpqqjx|qxqmtV~}lwx~rlzu{mwxkwowot|uxhk|}o|txxzov~uq|u|rlx}ulfvh}kp~yzsj|ykqp|}uhn~uy~syl{l|hquwsjqtvtneqlpwrmnivpmlkgmztyxsm}pvyz{}o{vv~yyrxxt}zszy}tv|||zk}rz~xzj|u}|}yqrvtrlzyr{tzlltyrx{{6rv}sxyuxuz|xrunvyw~t}zu~zllz}zxxopvuv~tms{buza|qxptwozzzuprvx|mhp~}wwo||s~r}}rxuk[yp|lqxuxhzxvvkm}sqn|zqqziu{psyvr~rszlr~~isqutlyyvy|r{znm~se{wzqtpo}yrtrqwvrbjsj|rmwsuurpnqlbhXmbisbmz~w||}|~~x{y|~uux{ww~кx~|qs}vt}sryƺ~z{{wz|ht~~rzt~#|t{yw|}||~p~x|xuxn}r~pn~zzk|~q~r~p~quuz|vqnuvtubddk~m}{pxzxmm|mtyxxsoqvvzrqxruvgfzuurqv}svvrrsnq|{sry|hr~y{v{mqvyxtx|mrty{}~vĺuzunwqyvtnlpxmti|tynjqt~yxl}zea}cxxikivrsr{nrjbtzux~|zysxr{zz}|ylj}~x|{|ytzlv{rs}z|ury}{xzwlz{{v}q~}xr}xv~$}|x~y|~w{{x|uyy{vxrvovshtuyfvtq{t}~|~n}{nmr{vwp{n~u~twzyuv{{ivo~|wr|wr}tu}~{pjnrxu~_mkjixjzv{}u~wsy|qyuknr{zm|zrm}y}|qwdvwnqu}vluqpmtxisuzot|j|||qx\zowquiynntmvwsmhoocpasx}z}xyyuxx~rƺ{|||~y{yx}{|~qvxzmvyxpxhv~ow{xxzyx$zu}}|{{u|zyzuyo}nv|zszwjnwzyxpry~}}{f}r|qw{m_zr̺h{tm|yvx}xrwruxv{muxpw|s||||w|xz|qlq|uturo}}jyek`x~sj{t{vxxov|ko|uv{|vx~try}u{xnvu}}uy|~tg{vkx|z~yqvuqspymweqje{vi~xkex}zswrqudzy˺}}}y|ںẏ|}||{}v}|}lyĺw}lux~vm~wy|vww}|zw}~zt{uot~{u|?|zx|r||vzxpj|}sxotw{|sttrxv~ztt}wl{{z}xwzxtl|zumypfvz}yi~q}~qrl~}rxtm~{|xwxy~srq}vn|ytyouutiv~xhusrozg|x}x}~qzdwlntxg}v{fn~|xw|tzqt}tir|x}lq~ytqfmsrqvjl{ti|oltflhrdrn}~sxߺyqz}xz|||vtxzu||w~sryẛyxuvzx|z}srqx||{̺q}||p}}zs|jx{{}~luvh{~6z~xvhrls{}yy}xp~|q|lu~hl~now}l}oqx{}zzyywoj~wntzvwmz}qݺ~vmlh|}yp|uexvy}u{o}y}yzzztqxyyyyvzwh~xy~y||tqp~vlvnlopu{uvs|lu|xm}zyhpv{ysu{yrum|nnn}lv|tuvv{kqutl}pzlyn}mpfiwjpzx|tklzk|pkuy{y{zy~~syzqzxqt~~yxtsr|sxx{{z{}{{~uywxvo|}{t~w||}x|s*}qz|xpvt|z}~xyn|y}y}|uyqrktyz}llv~z}xzvv|owrw~}|wqxqqvwv~zyhxfym|~z|xm{t{ox|gxm}rxp}s{mxvzv~kqvps~s{t}}u~{llwp|tnuzuyvvs{tvmzt|v~|gyfw}tpuxv{}umqwwuv~qywzfsuqpkwje`hx|bpujocr~va_~}}ܺyzwy{{|yz{x~}fz|}q{yɺxyv{{wwy{غ~~~z~ºw}||vv{{w~qzyt~{}Hyu|~ourq||xxy|t}|qxy~s~yxx~rypu{q|mz}tn{lugncxxyotpݺsz|{vuzv{zskzurxy{xzwsuxjztxozyvxk|wvteqzfyyr{iluvot}jzir}ktuirt{sz~~}|{zhssh}|st}rpdos~xtvjyywt~|zxxuwdlipzhnouys}kyub|xw~x}ylz|}u|vzyt}urw|vxmxt~rxpxss~}yyxm~~twy|!uujqup|}tpq{uczo{}{vy~zvxjyptwvlurzjvx}fuszjssw|wpvsjyu||iipxypz~fpwhv~uk{|nmntx~vtrtot|jtso~s|twuv~wur|wi|xttnjlynxulbywlqr~tpusttl~txstt||}v|{trltsndgsqr|}x~}nwpvnxvx}{|xyvz~urz~xs|s{uκ|y|~uv|osz~y~w{}pxxwѺt~xlstsye}sssrz{ytxownsx~wz|y~swxrxzv~z{~yst}|}}hxlz~mpwnwntz}ius}{t~osrtкc}}ownvlyn|mt|t||w{pm{wu~z|}}~{}uoxy{ytqw}yt|{zmo{zynyysqvwakr{lsnmo~{qwlpzvftzmixmgs|zsdnx~|qwxmukpmn}hkkvmfctrokmdyto~x\czz~}~y||}ur~q}z}{|owvrz|z}quzv~|t}sUous~yu|rxmpxwt0xwn~{lx}v{zwqo~wszutzjlp{wnzv|m~|aywtuxq~zxxnyuqzxunwz{~oozvtzu}u{aqt~qxyzpt|xjypp}u}xu}|sjcqetyxtxtzmi}xzv~roqyrtrvxyqvtuv}uou}u{ti|lnztvyvqx}xlxbilo|kg~pribdxqvu~x|r}wu~x|}}~yº}zp||~xvxz|yxxqwz~pssy|Ǻ{zux}~t|m|~}}su.yzt|twgozxk{vpxm}hpf||yyjxx|yul}jxr{vjvlx|v~ut}uptxrnwwplijsu|n}nh{lwwxms{wupm}v{{xxxh~yuu|~sxpm~xe}s}gq|z|}l{ptnzuxuy{yo~eyyzh}||mus}xmvnqz{krc|{ixy|kxyw}ryzir}~vpԺv~z|u{}xz~|quzrzv}zzv{}jz}v||zywox||}~w}x{yz(juttrtm|~lrxy~u}ycwt|rhxqux}h~j|y{s|lzq}||ztzk{jwwxs}{mtuyr~v~pwo{s}g|omp|gzrzzf~ux|oytx~l~xyqhyttxtxvttxvsgbxxlwtK}o{utlm||jsmut~totus~rumti}~jqkxoyiw^jzںyo~vzrno|lqiz{xy}|z{غ}ryxx{v|n}x{~yyzt}yۺ{x~~{p}w~s6t}m|{xwvsyz~}vv{xinxqzqyzz|~|v|q{z}qyst~ryv`~up}v{lyusnuvv|}|x{ootwy~x~ux|r|urqyll}~s~{{lwvoltxt~ryyzlxr|l^x{q}{plgun~}kxrjtyy|sygnyyry}v}inqywx|udx^xazrtnup}wyknrceyr|k~|y~~}y|z}ku~|~y}upewy|yklz}~{|yx{||wyy~tv{|mq1^urzyoz}t}ww~xy~~y|iz~pz~|tu{z{}v}w|zoq|hruz}zr{zxz|x|unuumy{xsnr|xmljtwuxvmxtux|nwyi{hzpr|pq}~xsrzzolzl|h|yzututrznyvl|v||ywos~|tp˺ܺ亽whuxphr{xsjtluknjuoxtz|vxs^yyxlkqoxzw|y|zy~}~|}rv~ty|pɺurxt|uxz}yu{trtm}~{~|wzxx}wfzq}}{}ryvq,}{uxzuar}v~lx{w}}~}luyplyz}uyo|w}yxx{vkqutӺhtxxb|mdstme~u{ittv{|powx~|~wrzkolwx{{}zvwx|ixq||yx}tuyruy}|vtqystzvrxuvwunvfstjq||ĺ~u|s}kr}xy|}xn}lhvohxru|llindlbp{z{|}Ⱥ~{v~y|}|~qy~uy|trryvszx~~w|~q{zlrutu{}xsg|u}|x|{{p;xl}~msyysqyv~v~jrui||kp}r|ezninyt}uxrtk~xu~vpr|yyxn|o{j||lw~i|xr{s{unlxgp}ts{wxun}pl|xxvzhv}xxpvp|s{qmnu{lr|t}uttvpvvkozlxs~mtdts}ۺ ٺzx|lx{ttbg}y|rqcmtqyu}t{yudvxytyrzj~|x|||{|wwxs|xlyúz|zvu|{v|kwɺ}ĺ|x{wxt~wx}szvypx(y}xyv}{~|zuumy}sx|jn|zxu{xwwzv|y{st{|ܺz~}x~~e}jlmwr~a}llknz~zux|tsdyt~pbvyrxuku{jy|{xpwtyrpyzxwax{rmryy{yyxv~jih|x|~ul{ wunwm{oyvvvz|jdd^etwkrkmkW{}xhvz}~}wt{yyz}||szpp}{outxx|~~{yxuy|p{|mqm|}pzty~}x/}t~un{zv}y`|srjwokun|rtx|||px|zw~urrp{szt~vg}tis~lpqx{lpwkuu{oy~tk{qyyxuszusitu{qnyt||~j}iu}wxpl|cn~|rxhmxos}tb~uqxsw~wqo~xw˺jxm}w~~hYuw_uw}p}lvexjihvsott~úi}~u|s}t躞twsz|}|ru~|~~t}}qrzϺj|u}zm}{t|~~ktqq.}yzs~twrxsiwp]yu|z~}~s~{zt~inzo|uzlnyoq|hwsvt|Һx|wylypvvu}|xxzpzrxe|y{z{y{~}zl|opz}wrx~uxmovoqo~m{x|}wxtywxozlx{soxurhrx}x}m{txvtn{}rsѺ׻󺸺r{yuv{ziqyvbitpqlyuvufwct_nmyotj{mup|{vyyqtuxp}p~y}xxrrw|xsx|}{}yytt}h|~xu{q|uxvyx|su~u}y7ns{y}yx}xslgqzxtxzzlrmt}t{{zx|j|yj{jty{}x|oxzvqnpyt|vzzuyz~lwu~~u}wukm|fnonvuz|syu|htluyzrx|ulhnyruv{vonoӺ𺱺swpmr}{fut^v{uuxdo{l|rluitwnjkih|tz{|zvxuw}z|zݺxpuwp{yw}xxrp}|zn}tzy|uy~txz}t(qt|{|v}~xry{}t|~ydztzx~}{x|{wuu}gzsuxyܺyz~u}yu|zxy}k}x}}rt}j{dczmfdyvtm}xtwyrtvn{lpuqhp|v~|f{nyj}x{~k|v}wzz|wu~~lq}ҺܺҺ{p|mzyumfmlopyno~o}uusw{dt`|f}tvv~~~r}y|}yxw}}||~{vvy~|}yqpytx||}p~~sy,i|}x~v}zv~y{swylypytnk~xm|zz|{|t~|qytw|tywumwt|xwy~~~zz}}~vuyn}vuv{opgxj}uwlkxuw^jws|uiyvwslmyw{tx|jt}vy~|iuuvfzon~xxyv}zurwulǺܺͺǺúxm}tu{}tvxuymyikpdl~qw|zrk}vinl|qj|{}z|su}|~rz~{ĺy}zstqyz|x|z~qu~vz}qzͺyx{|~tuɺ|~r~westIiuu{yqt{w|lusymnzqtv}sy{}ys}x~xtzhvv{lo|Ӻyywrwxlpq||}tzjrz}sotwl|zrwylr~plkmzt}}uwcpswjt|{rx~zt{vmrypxplmvtxrypmww~qxo|ypmys{nptsyxv{swrjkm|lr~p{unvt`po{{ykx{zzu}wwty}w}twy{~pqwyyx|ytyzx~}}}z|yyuv}|}nrys<}}uowp|pom~v{}p~n}y~tm||}ztdv~}}vryt|yi}ntxvqpt}{~|sznp|}uxyrwprkvv}w|{lx}{|yrqzq|rs|np|xlkxwzvzm}|v}up|pzvlpjsxsvzyzzy|}opx~s}}tm~vjr|vvd~quzu{ezyvxxzvyvklp~~tͺy~~tzy{|{~{zqɺt{x~rwzutzkxzzxov}v|}xuϺqw~{|kt}}nw}wvu,xv|ir|q}ĺ{zuzxtzpypv{y{}pxrvx{ko}wwr|tx|t|t~Ժ|wxr}{yphxsv}~~yz}ruxvun|mq{pyhty}zjz|~{rutj|qst|h|rx}|xpo~|hjnzqityrr|{x|uyz|{npkvr}{z}x|}vv}lj}ttjzy~tzqls}xxxni}yoisikmzizjjx}pn~}y{||wj|wxz|}~szp}}|xsrxzx}hF|}{uy}suxxx~vv|x~s~szxzu}wrqtqrovql~vxi}z}{vuv}p|o|~zmnuymmu~xx|itutvntuq{hyqyy|pxv|nw|dynytj}}yzxx|}s}rq~sxyjmstzyysvwkntv|to|tv{y|tnsorovzo|{grys|wl^pttfuovswobxrwonn~wfbb|x}yy|{vtl}t~tqͺ}t|}||}{x}y|n}vz{ٺty}z}wsxwszC}uyu{xo~{xt{nxv|unzov|lxupzrn~~ysmvqt|~zrٺsrbhy{|qy|}rz{yxf|oyyvuwxrsf|vq|vuumrw|}xtzziy}t~xr~~xx`zpzxzszvx}|}xnwxy|is}mt~yxoyei|}qx}luqysymtqzprknoywgo|isxh}czyy{~||y|ź}~|~txr||}|ynr|{zxyzt~{r{ww|tt{mt} y{|v|z{xyvvp~oxomxuv{]svn|}yyvuxvvytov}usq~yu{}~xvx}ro|mhqt|{xlzsx|{yuqyx|y{ur}kt|x}||}|qu}uvqsz|p|~}tx|xxjxyw{quvyt|zn{av{~z}y{|v|o{v{tusei|}uaruymjs}smiy}|wzu|t|x|yn}Ժs|r|}~{xttnzpyyqn{tͺwrt~t}}yv|t}w|~l.wn~|yz}|xux{q}opvy|~}|kx|{v{qryr|{qtwvtwtdx{Һsowp|z~k}~wzxwnvxguuo~{roxt|}v~wtq~qpw|qzsdv|}gk}|yxhyqss}vrq|tlosvl~|hxoz|you{tszsw|k}ptrpswymjlkgomwv}tzzvysvlqyjrt~}{{w}xyz}t~~}~~||~}}j|{zy~ktzz~|~f~|zu}s||y|s)s}|}twuou{ynzv{yuo}lyyp}{|l}sxsvwwtl~lxhqxvwx|tx{o|v|yj~xpm|nnwyons}}lp|vplugzmxy}tyvyxr~pz|qrtx{sr|fm|x{nxuyvlyt{{ypn|uz{rtsxx~}~~gxrs{zphs}p}sisukuoprqtpsh}gfx~zxxj}twz}}s̺wxs|yx}|}s{wຆpurkwzgz{t~vo{|x{y~|vur|{ymuozzq|pz|v}z|}wuox|r}ynz\xyuwxptm~{y}n̺xu~uqo|wsx{x~sn\n{zzr{gs}n|qzywv||lvxxvmwsrxonjjvqn|jw~rcy{uqwsxxx||g}skspzonkm||t{{}h|xyv|~mxp|{tsy}oqojl{trvvgrxvwphv~tyw|޺~|z}~{}nxz{zwwo}y||||~{vy{x|o}z|{yAvtlx}x{|v{y|oyv~~zwzru|msyz}w|t~l{wz|sv|ux}xg~|znxk~}|nwsuyĺxzxzw}uyl|{{oxuomyqr~t}tvpz|z{yq{}soxy~~y{}mxult|ospjzyqu||xyyj|jxhlp}yzmpwpx}o|o|ttloueol|eitxkpqzstxxaoit{y|~z}sro|{}v|}{szѺ~{xy~~}|r~|}~|soϺpqzmxut~}xsxysx{~n|z*xup|~|rw{s|xw|}||xryyix~wxltsul|yy}x}|wiyzs~ykr}|wux{m}avkvzѺyutsxlx{tvxvtusk}y{otzusxz{~xo{j}x|uzrx}|rox~~lqwytwq~njywsz~ourv}txy}sri|wwxzt{yx~xyzl~|uyryuey~}b{xzf{ttvih|vzqphvwjzluvip}}}s{v~||y~z|zw}owvz|~~w~}s~xz~tyo~w|x}~j{}jx~vurzzoyzt|zx~jẎjywvy~fz}~uy}p{z|rxvvtixwy|mwxu~xjiq{|nr|{|x|pwlm}l}z|~zlkunyyzu}|{zss~xvuz}l]yh|xtjmksrys{}~|tznyzntvz|hygxuv{|y|xu|~|ztgvrwozquufzwzvh}ase~v{{f~foidp}~~~xz}lz|{z{~~y}ruu{urs}~rֺsxnnxv|myvrxwolysz~u}}zzx|xr|zxnrvx}pyw|tvr|~evxnybt~uuq~v}㺎psunxvny~p{}i~~~nv~}tvoxtkp{}ul}ttx|vvnryptsv}vp{qu}y}ut|ix}vn{}tx|yxvzytx{u|wy}pk}lqv|~yrkputrx~z_vtuhx}dr~lti|tqu|{|{zx}qxo|}|u~xzy~~{lغ|~z|vzz|wkxyu~zz|tmu}}z|u{z{|xyx>|r|j{mx}rvm}zyou{~}~woztw{qrxyrtq{k~~xwxmu{u}vkjyunxxlml|t~|dzkqutytf|v{v}}yoy{~zr|||qr}ynt|xt{y}y{rlywqpgs~~us~}ymwzouu{l{r}tswzrf~wjr~kl|y~uthrntryzy{}uںĺ}r~p}tzx~}κ{}yxy{u~|t~x|{wtٺxy}z~yyjur~z~vx*x||or~my}wzd}}nm|s|uz|w|qyr}vzwrpwxkfztҺtuwzwzqyz}~hpqxvpvlsxqyyvyys||t|wziyq}}xx}ynuvtqoro||ylpq}}||xzt}mx~zqpsqxsx|up{r}zxrxsjpyytlgyp}czgvpovunovenpv}wwvyrmlxxyuu}||}{~|}xz~y}ty|xzw~z}|xrpyxzv|}z}x}xfxyx~"~}zw~lxt}~ql}||}|zv}}|whzzvvxml{wvstr}x|~yoww}}|xxynpszlvpxy~vtzryrwvqhhheyg_txw{kzl{|mtpyzvzruwm|s||x{pkqxm}y~zyuwyl~bnql}juttgwqz`|pq~{fqjbimrpvwv{}~w|y~t}x}u}Һ}y{zu}sd|z|xzxt}p}Һ|w|}x}x~z{phuz.x~ywy~{t}yqx}txxqxv}dnunxttywipsz~ߺkuxspvs{myn{r{zs}z|t}vpxsu˺pzvzwrn}xu}owtmt~x}yy{yyqtp~uu}}{yn}thlsstvokq|in}|pvpnhoyeqkjhzqpzep}yk~}uzvyysw|}|~s}v|}||}y|p|zyyu|~~tv}{{yrk}t~zyvsp|@u}zmyqqz|}sz~|xrzyn|}v{xttsu}}ytnukt|p|pu}zty|~soz}|yxtzmxvvwf{vv}z}uwuyxw}zpvu~txyx}u}pso{{v|o~pv}txtlo{xqvxtyr|y{~w{qyv}vxg~}zu|txw|ws~uu}mkkpurnz`pssktmtr~{zz}p{u}syݺ~|ut~zzzzl~|κຑxoxuvlp~mzzuvy~zt3ts~yx}|rztpvuzyy}qynjzwn{tu~zuwu|x|yr|yvhvy|qys캆uq{sxto}z{k|vyyv{mt~qypypxvtnxwtzyyt|vvxyn}uxyrzuqhzz|v|yz}q{z}onqxjivu}vuẒvxlrsr|o}tvynqxxt|}qs|trt}pms|fl|rwqx~~x|yw}rvl~y}w}~}}q~|x{~~~uxmqʺVrpwu{~wvrvvypvw{hx{s~yxx+vrtp{xw|~xvwtr}mypurwvuxq}dko|muzux}~r~lw~tr~x{}vuzy}hk|ty~s~ywvnutx~{pw{utkue~lft~z{uxyt}szs~s|ikxzjwrxmhpyaqnhuddw{lojymtsy}~}zxຎuk|tt~|wu{v޺swt}tg}us2sgqzuvqr{t~ywvtyl|vy}~~}~}}}z}}q~~t~v}wz|tzxxvvzoxsh~yi_{|hyy}}|tyqwkz{zxt~yyutvlxzxrv|x{wmmh`zt{qyw|xupxzqyxw|kv{yvvzwtr{mlluxtutvuo|jvivzxxxqqhymspx||yy~zyzx|}}w|~{x~{z|~w}~w|rz|w~v|}t9~tsz|~xiqyxy{r{~{z~xx{{uvv~ey~{{{~zq||wz|zxzppnypu}}}px{ll~yrsilh}tttz~wyxu|~n{pm{kyvxx|xxyu|yp}~my|t~ypxrwvtr}}zxwknzztttj|{kxrwxnqwo|vmkol|~qe|vy}v}|oͺ{~nz~|~|~t}lz|κt{y~t}x{ykȺ|us t}w}}x~}~|yx|xy~xz{tzlo{vuqy}v|uyw}}pvغprmtwzxttlgyqx~|~m}y}ushvuxy|pv}pu~x|ow{~xtsxyfyltryxvp~}~ztxupytjts|z|ym}ns}|wizunspkttzv\tvtmpqzzw|~~zzٺz|v||~{zy|~|y{}}{}~yz|qyxwz~ry{v}rpu~}{et}|*us{l||vy|vxxpswv}{||~{}xu|xwpwtxsn~}xqzpz~}yxv|}p|au~t|vv{uxtau|tsv~}vzzul|ovn{x|otlpuyu}{r|atnzmu}s|yz`z{utyrevm}}d~}qxluuzxtlxebfnlq{}qtrphy|zx}yt{~}xu||y}x~ֺ~~~zvvyp|ẉ|}tv{|r|uwz~~zx~{xu4j~~hz{zys}v|{}vp|szwq}utq~vluzvx~}~~vtmwmzw}纃xnxo~uv}q|ypuz}|yv|lxydstrv}xskxvu~ouwx~vto~~sxv}tvwuztwtxzp~y|z|uty~xp|uyletywry{zzilssh|m}tpst}s|lrxcv}xx{}t{}źz|zz~yzuqsu|zoxw~~zyywzzs}|lpwxr|mwDwzun~zukaz|uq|yusu~yu|umu~|j{|n||vptwtutu||r~|s|xrw}ty|lrqt~www|}}xziz|tyxzqys~~vxrqx|v~qnu|nx{`u}y{|kvy{tzn||i{sjuzryr|pv}l~~y{wz{n}wytslpxzdxml}wixorz]x|n{t||xۺ}l}x}Ẇ~|}yx}ntj~q~yk|w|{zz|~mw}y}wxl|wovAu|||y~zupo|xk{|~yu||}unxz{xzxrv~sztyxtrnz~p~wzzyպk|tzs~vww}{x{myjxz{th}co|px|zuzxƺxq~jf|q}qtxw~~ds{y~zv}~}jxznurxqzz|kyn{|zznpuxii|tqvi{|kbjti~H}|~}||{ɺ}{|xvt~r~}z~pvu{~y}trk{rx{w4~|q||opxix~~ysxi}}vr{tozgxtknvt}xtqyt~w~}tx|sxxxypz|zz~vz~ly|yxgr}|ss|rszlt{~rt|{sxm}jv|xvx|}xwndqw~y|dn}~`xtnxvotnzt{|kxro^dzjoipvlypfoututz{}w|~y~~ztԺ~u|~}}|~uz{ܺ|{}{uwu{ysxA~vu}u~~sq{x{{vxozlqyv}xzzux|}zxqq}tvк}u{vyxxls{~z~tsvt}s}}wlnpzulx{{|z}xrz}t|qgn{|z~\zvxy~xfq{zw}xr}vxp|zxxzw}wu}wyvxsz~|nv|rxvtwd{z~qjp}x~mqif|{bynsr|~|||uzsúvx~}~~}n||yuxpzs}~x}zxx{yw}|x~yy=yoz}z}zm}tn|}xoo~}|sxy}~ylnlln|xyu~q}ontgr}s{xnz}zuxk}wyw{t}}nsixlw{m~myargttwyjxxt~t~wnjhyx}xxgttpuzp~mttp{xz{~xnoyytuv}htxjwti}|ttllhzlau|]xjopbrlnx{~|||v~}ywxtºw}v}y||yxv}zvypvԺ~y}txpyv~|=l}mnuv}}|yer~|s}{x{~sw}|xvwstغ}ozt}~|prm~vٺuzdyoztt|pv|r{ypzy|~}{w}xuztxw}|r|v|m|}}q|ttvlwwwu|uy{|mutkv{uxxzk|t~osu|sly}nt~zz~ren~{x~zwpwsm}xrtkskz}xϺ~~{z~|uz~iw~u}yx|x}y|||zvyyvzxx}~~ytx{}yy~n@|e~wuv{it{vytv}yz~szx|z~eyq{}rrx|~y|tz|gp}g}wmyz|zkwtu}tsvxuwwyymswnrvlzk~uwr~puz{~n~{ntryp{|xzrps}u~oujs~hup~xuw{mkvXzzwyghtxjp|wu|qԺ~v~zx躘|w~|n~||ztz|~|Ѻxv{~js|x}}ruv|z3nh{}yq}|x}}uyuuszvsjzrnvymz}sypp}}xzusv~pwuyxrwtluvr~~x|x~ty~xwztxvzxtpizu|y}xns|~vtynqxp{zy|z|uytwyt}~zs|w|h~xxsf|~wm~~~tyt{uw{pqpk|v|{ndtx|ovw}vnmu|iv~غrպn}wy{}|{{}y|xxuyxyt|~zy~|u|z|}{x}w4|tz~urz~wx|{q}zs|xx~w|~oxylplvupcx~v|w~~ykxvwvlx~pvz|}|yxlzvs|ypomqrz}~izsyu|}{Ѻqvxvxq{yvy||~{fx{vs{uwx}{lmvzrvutxykss|otpv~sr|slhwrbqrt[}vimri~xy|}qxyy~}}~|ɺw|{}xv~}o~sn}Ⱥuw~ztv|}~{zx3rkvuvyvko|}ryot|x~{ztw~n~l~styzzttzntln|}ztwy{z}tquf|x}hxty||swny|vpy}yu|w|xw{yx~wptytmv{yr|xylx|thmpyyws~|sqxuhob~psryllrrtfpltozѺ~}y|uyt}}{~~}vx~t}tqpu~zx}|q|{tx|}||~px}r1tnzyv~|ysu}wtxzv|c~xu{|w|uyzwyktxgzyq{x}|q|s|w}}py}xtt~twksvkil~p|otyyrrqz{mptxvjls{}qsup}umkq~tpui{rpw|yyuy|pwyq||n~yz|x~rty|uvvpinqwkuhbytgjtmzxz}c}z}yx||{y~{}Ӻ|yux}}|{trz}u{кo||~q~{|{xx~2ys}}yyx}{y{u|}ptpuv}qy{~xqrtjzurz`||{yz|vzvt|tqtxxzxuxqsqoxfz}ti{rrx}|ly~pwmeirt}t{~q~lxzjwuqy_}u}|~rtv|~~qsxdlzpr||lm~rnjwl{uz|otjtyy}}ɺoyr}}npy}o}}m}}xwxu}y}~wwtj}|}|}x@}yxlvyv|{ztwzzm~wqw{}yzsuxwx|xw|hwp|t~uw}rwsypv|wvvuxvt~vlxu~~o~}lzt}}m~|v{}xxo{t|~oukwu~sw{uumuuqswuzúxl{nx}qs{nwo`wy{~xju~|}tc}zv~}}wvt~qɺ~~|~vx}y~vy~v|޺{qkٺxx~xt|~r*|sy~zq{{}{z|}}~tn|q}oxxt}tznu~Ӻ{}r|uuwexxlҺ|qy{wr|tz}{uwui{rtv{}~~}or~o|{yzn|qdtr}u{z}nz|xw|pq||{~vv{pw|xnyrytyt}|t||~t{yozvtt~}|y|x{mtlvnlaxuvx{}lkuxp}uzzz~~}yxʺ|uǺ}}z}u̺x}xpx~~yy{n~x}~ws}v}|v{z~|xz{wrxq|Ǻunz}s|uuyu|xu{|~||~zk{|vumi}x||us}}zix~ty~{z{y|s}zyo|}wuwm}xt|lurh|zs|uw|t{~up}~xzu{{snyyn~tyzniitn}kXsxtp~y||wz}}}~}zulۺ{o{r|}}̺{~~xoq|pԺvv}yx}l|y0q|qvrsxs~kvryz~zzvts~z~y~y{yxysu}jxẏryz|vuyxzsfv{y~qnxrzjs~}~viutq}|k|l{|uvzz|l|fvvphywx|u}uqtn{joyuhrzw{u~~hxvvlzsp}|wtqwyzjhmmvprlywo{|z}z~~vz~~x{tzz}zﺃz|||wx}~y~{}rzu~}xpx|~|7y|x~wx~pxutx}nwtrww{zsyn}f~|rs{u|ypn{tjxjrzv~zux|||uy|z||t|ywr{z|t|um~yzu}klypzjwtqx~nwrrxw~xsxx|{|uxsg|ny}vhy|vps{{wkltkwllegjzqnyn{ĺ|躆wv{~x|}|}ͺyyy|m{xyxr~vu||txu0~w~zx|x{nv~t}n~supsvwqﺄyvs]t|{nzusox{v}v~wrrtr}zxw~|vnu}uxnu}xzzwz~wu|ky~vyu|so}{|~vy|qy|tyn|t{mv}}}w~|{gz~}}yw|spvzp}zywvczfxqrvwwt{uvwzԺ|zy{~~yw|vo}y~xq~}vv|y}m~xqxuyvxzw~t}sppvyywk|stv~t~|}zoz|ur{uvyyzz|z}|q|pr{tmzs{ty|uyt~u{xxuy{xp~skur~|}{vpvs{ts|rr|z~jnzh|vz|u}ztxwyy|y~mvtzwh{q{||xjysiwvs|r[yxx{|z~}{~{l~y{u}~t|}x{{|z~pͺsswv~}u}zvsy~xBp{w|w|}i}vq~zqyvyxhnzmxxr}l|txmzvҺ~t}uxx|ysx~xzrxtsvjui~~rpmxvvxrz|~uyx}zt||y~nuunztzm~vnw|}yusx{s|{}x|||yzxo|tyyx|ms~yVqz{yy~vp{tv{{뺄~~~xzƺk~v~r|sty{{yrzw|}q<}y{r~}tzzzx|{uy~vvx{uw~w||{{kx}zmy}}n}|xrvh|l|kzj|r{y~||ptwzy|tvwls~x||u}z}ttq{f}|gxvs|x}o{t}w~r|r~{}yqnry{lxupxqjxrs}jsrpvdttzyrmzq|~y̺ +ĺ|~}}Ⱥ~||||w}xy}xzԺl|y~~q~1~x}|xr~wl}|{pu{~w~ru~~txoysx|tx}źx{xt}zy~|xwz~{ztut}|}}}|{x|nupr|wszuy}yn}nuqw||xyy}xtpwlty|y|rrkj}}z~xz~{oyk}xorompmyvmyz~xsix|ykjmtty||m|zv~u|}~}~||~||x|}|uyy~x{xyyxx{u}zy{~x{jvyxixBury~u|~|~lyzyt|wo|z||zytoqxu|{~|zr~z|qwtr{kt}~q{|dst{xyptu|mvpp~|~qzzqx}uu|yswzw~tzty{ytk}{mxpz|}}j{}uxyvy}ty}nyv||wulouw}utxrerlxtt{xx|u|v|vyȺhvº}~{zw~ozn|޺w||}z~zxuzx2yu~x}{~rxɺtuswq||~wyu|||~|}x{yuvugrrкou|uwxq{kzlxs~wx|tu{tuvtxg{|x|{~c{{~l|v~xwwvu|hstvzlty}y|l}u~k{w|v}zxtxw}}zi}wytto}rwtnxnwx|dprj}pvotw|v~|~{}z}p|tz|s}~{whxxx|snxv/{vsxx}x{rz}x}tox|m{w}l}˺vxt}|m|yy{u~uwzzj|yvsts|xvy|nz}|yzrr|nxr~zlxrt|}}||oz|m~xyqjquplnup{}u{mxr|{gtsvx|x{|ul}~~}wzpyvk|w~rz|ynnu{|tlpl]q{ycnzpwts{zk}||rzxzȺ|~wp|z}spxwy|}⺄wxx|ẃym{~ܺ;v~x}||x}y}{ssuozztv}qtpxvz|ur}u}xq}{zr}yʺl{|y|hvw|{s}u}|||tut{}tt~u|}|v}vy{wy|zvrryx|}skstyvpyqn|u}{vryl|tyl~wt|uvwxwup~romfzs}~qalv{q}lyzo|y~z}w{~u|u{{m{}8zv|~rx}|z}z}|uxw|v(q}xx~z|xxuswxujz~~ut||qv|{r||wywvtvzu}vgvx|t}uv|o||xrzv{u~~|m~rx}oz}|yx}r|~{xu|}z}i{|o||uitx{{wr}}l~~s}sm~|pqtwrzupv||}yʺz||}~}ۺzpq~yzv|z}||˺~|~xvx|t3zoq`}}p}ys{opvztvv~p{|y}u{xorx|wvuxxۺ}~}tswyzsx}rsvtwzyyyqntlru}wzt}xs}zqw|txyxx{w|}v~w}t|e}w~m~uy||tzpjvrq}ypxxstxz{{~w{|}zwmqwrhstxnnyiyyrԺ}~ɺhٺ{~yyxzywzu|}r~i||z|~zxt={{xm{ttmzxno}l~wzkxynztx~sy{|zwqu{t|suxppuy~vqzz|yy|nv|ywc}sz~~uptuyszzzh|ziv~q}|uq}uzu|fir{w~yrxx|{t}}wxxxzyquosqfjq||rmkotv|tuȺ~z|ٺ|u||||x|~}~xvwu|rxyxz{f~p~;}xyxu{yyvxxvz~|t|{|wf|s}|oo{zٺis~zvzjr|zp~z|j}rxueknyyxxt{t|~}}~oors|hzqwmr~u~t~zrzlxw~vxsl|szxr^x~rx{ttpp}{yx~g|rpsunh}~htstut}~x}|~}ݺzxດyyuxvw}ysqzw|~znºwzv}|{n}xlt:xmsx|y|m}~utr|zxx{~}yx{}|ortm|{{nqji{i|nvo{zxx|t~yt|u|tv|uqzso}w|}e~zuoes}xtvxyty}zz{~xxz{qvvn||}xwriutxxxvnwyzyjyw~s|n|`fsq{vxmpwx}~~~Ϻu}rȺ~yzt}{zֺzºߺuz~z}zy.oxx{w|}y}w}qx|y{{rzp}y}k|wpno~{xo򺏺ty{{t||u~{zx}|royl~ov~tzy|rfzw}vxuru{wx|j}qvtvr~qrvq~usvtun}zy~yvx}~xhyvv~v{yx׺wuy|xto|wlxuww`t}~ysuxyyir{̺}x|yٺtsv~{ry~yvryzwm{xty|9v|vm~}pv}xv~~v}xyv~wq}|}|}{wvtipx~}psyq}qy|notx~yyxy}~xxx~x|q{t|x{xtxzxzv~y~}xx|wr}uuzu|y}y}{okkryu~xofy|wk|}xs}qv}z~v||yxغ~mtyz{{tysٺyuxuyvxw~}{=xy}tq{|{}n|qu~{u|xpyxsu}lw|zx{~yxy|غtzx~pwszy~~t~|{|mwv|twovx~v{pnzrvq_{u{zyy}wvx}sp}rxvpzw~vrvf~syux|{kwxyoyjx{qzl|uwwurs|lsxw|}ຍv}~}z|ĺ}|wxz}~{n}}~~xzypt|~|z-}}zpvs}up|{}rzyt{~xrs|}ww~y~}t{|~|oj|s~{hy}uwyqr~}q}k|t{uzo|nl}~|v~t{z{y|s|}zn{z}umqm|yix|}z}xy}|p|x{}zuv}tzzt{u|mt}{}{|ٺ}u~~κ}ƺz{|tͺ|{y{tyz;~|кuy|}~}{|t|ww溎|rqp~nt~po五qy{qt~uz~yux{x|xvx{x{vxwyv|yr}}|y}mv}x}{xn|||uytvwz}|sw|otlszu{xxqvtvw|ju{x~x{zwz纎|xy{}tpsxx~xz~yqz~t|yys=z|~x|x|r|x}}v}{~~s}x}t|vvtgjzzw||}nzt}~vr|y}~}iu{tyy{o{u|}wu}uzuovv}|r|yxyyx}zu}}lqlpz|ywz|xr{~~}tztxts{~mvzvx}isjy|{cvztxpw~tl}mudz|{|u}l~~}ʺ,}{wvwt}yֺ|~z|~slz~||~xzoAz|zzy{}kx|m~xpz}izn{}y|~ֺ||l}nztoxi|xwj|zx~zk|~n|w}xvzpvyvo~wzsu~|x{xz}tvzxtpyzzxk5wyww|r{n|wvl{ryxury|xmspn~uw{y~yh|u||yt}}xy~~|~~|uswKzzr}}x{{zwp~}xzz|ztyzl|tpulztszt||wllzyuwtuvyxxvj{}vui|i}mm|qz}srtv|przx}e}yxx{z~zuzu}wp~oh~iuy}m}tq{yrug|x|j~~ry|}{tywv{tkm|zs{qyyrjsiuzvz{~}}}Ժ|~}yzsẅt}x~z|{x9xкsun~tutvzzswq~v|{|~|vyxrsox}|}z{zzغvvm}z{wy{m|ou{x}ztrz}y{y{s}{{|~z~f|t|txp{kxy~t~|}}}{xxn{x}v|r|}y~}uxwnttxxw{qntvttqp|mqwvlntussxw|{o{z}|wuԺ|}y~~}z{tx~~}}}x{{5q~sq{r~}k~nxrp}to~yxvwusnxx}r|uzxp|v}v|tnxhxyuv~z|zz|{~sxu|~prsx~|rtyzrnq|wy|}}ywr~}yrkyv~}y{t~n|~npbpytozwu|z{}~}}}~uy}pv}Ѻq}}y~{,q}y~{~{mw{q|w|z|}t||}strx||tuzr}{w~tҺuyyzr|}~{||sxutu~yvk~}xx{ĺ{o~s{ouxumvo~}ywrsttp|}|u{vttzz|vkw~xmtp}w~xu{|{`~totfr|tuw}pov}mhn~s|~vr||vyvpy}~}{v}y}}yxv*w}tu{}zxy}utrxxvinv~yu}}~{y{w}}n~vvq|z}|}{~xzufvvt|ul{}{{{xvv|vpt~wyz~~z}~x|y}ymtyvz}qi}|vz~v{uwlw|{}y|wvxjt}pmnw{{on~jtt|{~}z~}xx}|պ{|q{z˺yqyyںy|zz|y~w}t3us~x}yzt}vtwyxv~qx{~|{q{}}to~{wqº|txt~wzu~yxrx~z|}{m~jm}t{t{kxmlz}|rs~~xz|z}uzsowmux~t~z~ynssxz|sthzfyit~wswhuws}t|~Һ~{}y{}z~}v|{ts}xy2|zv~ukywy}{zv|}~zxxrxqqgt|p}|y|u|tt|e}lyzt|q}txuypy||rzzlrq|ti|w~{|stxw{~~ps~~h|}|{xuwx~w~nt|quuytxwzܺlzv|zܺ~{}~|~yǺ~~}}|z|ztٺ}|x~{n?|{~xxwtms~~y~q}}r}uzyzyx}hv~w}w~z}{~{m}tzxxӺxun~|s{}zx~~t|vzkwx~ju|}v~zmup~y~zx}t~z}}xyp}i{}zu|x|w~~~ssrzwvzzy}{xy}w~x|~onq~yxuxpoxzx~}y~{{|zl}~|~}}~|uwz~uy{8{~{|vyo{}y|syp|{tyh|uzvp}|w~ors{pzuyrx|r}{rnwwlz|}s|s~i}|xzyovzqxݺ|syxwxyrwwr}{~w~s|zx{v{ovnxnqtqnkrtlxx{~պ|vźly˺}z~zx|ʺzwzy{2}pz|v}}qmr{~t}uns|n|vp}~z~v{|{}~xy|wztq~syztuwp}y~tu~ln{xvw}v~{x~|}z}u~zozxx{q}t}}xv}xslxx`toryrzxzyx}jro|xxojvznuze{}|Ϻwx{s~w|{}~~z{~|}z|t|/uy}{u{{w}zv~rowvtk|wv{yz|p|y|vv{zv||}{xxyp~{zs{zptxu{}y|ku|uzzxzkytzz}yzq}|oynzsvu|xvms~|p}{pyxpthvppxu~pq~jo|{||}~}x yxʺ{z{~}z׺vwsizzzúoyHpu}}to}}r}sywwyz|yuzv|{tz}i{o}y|zqz{~~uv{s庁~z|vsr~{n{}xkzxyw{lv~{~|pz}|wdx}y||~|yv{ttrqww}c|}v}o|quzvwl}xkiu_l}yj~zĺ~ºwºx|y{xw{~zx'|}~|yyt~{}suz}~qvz~u}q|u~|{x{uvɺxt~{|rwzy|tm|xt~wzwu}t|udz~jqytxv~u||z}j{dyvw|t|zm}yyt~sxs~zq|xh}v~|}Ӻ}|Ժ~||{t{кxy}z9~zy}|~w}}~xu|{nx|zxu|yzx|t溈{{{}l|up~t|}zp}x~xw~wzsy}to|xzysq~|r|v{|y}~|}nyuv{xsv~}~u}svgtyusnur~m~|q~x~t~{yzxݺs|u{~|z}x|{{xz|,}~ny}~wzy||ry}{~p~}}uy|zq{~y~|svfo}q|zy~z~tzxwz{|x|tp}|omzu~}zuoupvl}}}uizyw|r}x{~tuv~ttyvyz}rmt{vjmfsyx}ztwsv~r{}{׺~{{}}̺~|wz캉yByzt}}pu{usy{~uy{vzxty}庂{}px}tzzw|no~xxus}yuy~zxxr}rp{{v{|kyu~umy{xyr}nxzq|s|}kuuy|||v~u|yw~{|duy{||uvuuwtkljsz|}}z}st{tu6}v}}xxuos|~|vvl}{x|}~v}xw{xx{yt{{x{{l}wx~}ur{pxyvl{pq~|z}un~z||uyxyvwzzzqzr~unn}}lzyqrkyu~tkskyox{|~qk޺||պ{}ݺrx{N}yzl~}rq{vz|~}|nwwz}zzu|x{y{tۺy~}vuzx{l}mvt|mmr~}z{|{yzyw}lx~o|}wvrqr}w|}~~yux~yytxqtjjp|}w}v}u}pw}z{krzs|~|~|~~}}y|wyv|||r}uD~z~xvu|xtyu~|}}x|w{mw{y~{t}uo|y}|vuttszud}t}}|znpzknpzi~|{}yn}s|ys~|tyz}~{y}|z{|tw~nx{zu|yu|r{yz|zyh}x|z{pct{qwv~z~}tuw|wxܺ}xyxj{~|O{x}~zr~wz{y|u||tz{vzຈvxdx|}~xiutwzpxtjmyv~uow}v~~~~{ntrwtxz|n}v}}xoxyx~}q~tz~y{r{|q|}qr}fqqqtzxysnzk~}|~~yպlu~ws}qyr|v{z~||-pzxo}t~}{}u}{u|oy|{vzsuuzyzv~||wu|zz|}ssw}~{wo{~ro{y{|vxu}~}yu{sqxzmoz{|yx{xr{zr|yq~p|x{|syzyxx~{zsvmq~}z~zkemzkywnsuȺúӺzuw}պv~~}}~|rzw}~y|{z|z}srppxzz{zp~x{}r}vy~uy~x}|o~vnwy|}xztrz|}p{xz{tuvx~}zu}wvnv~uyn|vx~|ź~zպ~源ú.~}uy~v|~y}~smp{}v}vpx~t}|||sy}vnxrtp}tut|u{uz{tpu{|z~w|ttzz}}{x{z}m}yj|twk~~u}޺|zyw}m|}-|}{ztt~wx|ºtry}|w|zsmv~wu}n}|w{|yvu}~|q}}|{uvyl}~y}u{v{v{z}~|qz||o}sq{x|qzzy|qxxwvwvv|uproq|p~|~s}{}y}~~غ{}ֺz}I{u|}u}z}|w|vy}||tk}y||{~}}yy}z{ںu}u|l{~x}|yvxw}n}o{wt{}ztuxsn~~}||t~xpwxyyyt|stzpx~zuxxwt|mxnuu纡z}Ǻ{{}~{}=~~z|v~~|}~~wtw{~m}t~~k~ypvxxvw~qx}xywy~uvy{y|tv~yz|lxo|{w~wy~}~wl|{ss~s{qwyy|~vq{}t溄yrt|v}~||ٺ~~ݺ~~:~u{{yx|yuw~p|{~~v|rwxts~qѺ~x||~uyqww{xytzv~~n~}z}~}yz|}}yl}zs|yu{|txs|{{|iy|r~y~tz|~tzxyttrxrsu|{~ú|~}O}zt}|}}~|nvy|wjv|}svr{xh|x|~i{qr~ys~}{ź}||}yllzk}y|yyw~rxy|z|{pztzu}zxyv|xu~}trm|̺}|zp麏||󺥺yDshz|tzxvwpsyxs~{ts}h|u{~x}{rtzwx|}wr}}xyzyu~{qb{xz}u~i}{{{qyutysxkv~}|t|yz~u~~vzxsryu}}pyxzxz{}}tx|}yxw|m|}x|z}~|xuvvq~}}~zt{v|~}||v||r|k{y|xz|vx~z}|st{tvvɺ~~񺎺v޺}庑z<~xuzzy~}r}{~vyyxuz|xo}|}z{y}|zrvt~wv|tzuuyv}}lt|yxy~~vozzz}u|yyz~vxy{~y{~z||hwzzw}wp}r||zz<|By}{}wtx}xwpz~p{~}~o~l{źwx}{pyx~p}~pyy~v}x|}uv|}}{k}|~}w|nyysq|lu~u|}~z|yv~}}z|}Ϻ{񺡺xss0}y|wluzu.z}zz}~|xun~xz|||zܺtw}|yz}nt}z|w{{u{zzuvj}yu||}xmv~ntyvpzszfzquoxy~}ú|G~|~~}𺅺~{z|stxy~jrvzvqlt{vt~~q|}~|zlxy{|txu~x~vzrxxvsy{xrzt~y~}vbusxx|zz~t~j{̺|x麡Ѻ De~v}~~{||vuqxѺ}{yz}|z}|pp|{py|ywx|utwt|~xx|x}xxu|{~xt~vw{|x}|w|sxyv||ru|vnzxysx}}}uĺҺźKy|zzv~qv}w|y}~~{u}o~}|{}q}w}zx|truux~}y|y|{s{~xr{~~w{r|wz}|}uy}rztxu}{|qxyԺz8~v~sz|v}~ux}wz|p|纉s{y~uw|s}{{px}wxzv~uy~lz~z~~}~}z~y}s~~p~~~uv|z|y||zz~sy~|wto}}|v}x|~y||8u|}}t~uw{rxt{{|xxys~~~t}yrypq{ln~wzx|n{w}{qws|s}sxtyy}qxt~kywzuzx{|{ium~zux`vxm~y~~}|躓~|ֺw_}u}~}{||vt~|~}{}qyz~ur~{zy~z}q{xumytys{|vx}z{}}v|}r{ kxz|y}z~wytftzx||}r~q~}պ{>}~z|zxzvuxm|xs|}{xg|t~qvz{ux{r|~|~zptq{{wvz~}vw}|vw}w{ywyzx~~}z~uwu}1||}uw||}|xyysͺ|||}ytk{uk}zy}|{}|ot}u}yx~m~~zzzz}{x~|uwzz|zzwu~zwxvwu~º|:}y}|uwv}t~}yq~yxsv|l{yx|}~|tqu|mys|zy~rsznszvwh~}}xw}v|ir}{v|}x~}{{{u|uvorwtt{~~|׺Ѻúͺ8|zu~zpv|~ܺq{|yqzrw}yzxtsn|yx{t{|u~uuut~{~~zzvqt{}zy~y|t}q}ux{u|ຢúúԺXzy}{|xrmmqwtzw{u}}~oxtvz}tqxkzp}xy{{}zz}}{y|y{}tzy}zyyo|}~||mxtmxzw|z亃{̺ɺȺººɺӺҺy}|y~|z{{|~m|R||}wк|~tyw{hxx}~m}xwv{y}yu~ur|z}~m{v~}|j|~}u~v|xxpm{yo||zzz}}m|s{~|xzjvm|}ƺԺ}w}Ѻ}{H|˺ܺúúźغ˺ź{}vE}|~|}n~x}z|r}u}nol}|~yzwwopzvyr~wxssz~lx|yvx|z~|vx}}s~{}w~Ժmxmww~zv|~p|z~{Ժ~ȺƺͺǺɺƺ˺źƺƺۺ˻ʺźຼD{x}}|yu}w{~z|~}vo|yzl}rx~|tzy}x|xyrmwȺzxy|}~tzu{}|t||{mw{yuvyvx}%~z}ƺʺͺú̺̺ƺúغӺ̺ʺú˺麠Gzrx}|u|x}}{w|nxyy~x|~u|xyttyx}x|xԺ~z|{}wz~ty~w}y}~u|u~xw~xx}|~yz~tx޺غººҺȺκͺ̺ͺѺúͻ&κ̺ӺºʺɺȺ?||||~|}yvt{}k{к}xu~xvzx||vxqz}|zyz}u~tq{y|v~xz}~tv~|~~|ຕ|{~~Ѻ{|{}y~|tr}|r{|úںȺʺܺ غκ̺ǺߺۺܺȺٺǺ̺˺źA|~s{yx|yy}yj{x}z}~}|wttxx{zy}yy}|x/qvo~{vm~q||xhzu|wzu~u~ut||r~|~slκ~ƺ̺ºԺ +1޺غúκǺкM~}y~xy{vx|{~~{}~~~uy}r~m}p|{tyx~~Һ}~|||u~|v~nw}}||}}||y|t~vy|sqytwz||zz{}~~}x{غ/-3 Ǻ˺ɺ˺˺>~{|Ӻ|zu|x|yyw|||}v~z~tl|frzutt|l}vzw{vrry|zwɺuts}{zxxy}wy|tºw{wҺʺκźǺɺ̺8#:Q5. i ݺȺкϺͺ:x}wt{|y~|tz~x{}q{uyz|vzr}~|yn{}z}}s|}x{~}n}qxpq~}vvz{s}|u~uysy|pt~}ox~~xĺ׺̺ܺ(/69B[XZQ55<:45* ںº˺ĺHx}yzy|y|vw}{ru|z~}~y{zzv|pẌzz~}vx|vyu~oy{}z~~klsz|||yzj}{˺˺̺źĺ.Rdbokzjgl>"%޺ƺۺͺںE|~zu|}Ժ~vvqu~yp{vx~v{xyzz|v~z~}x}}~{{ys~z~vsy~|vv~}zrrywxs~||}ɺxźҺĺӺӺ35psڻٻĻbO4 غκԺƺԺL{~~~x{~yz~{|}s|t{{}z|zxi|{wqzz}vy|}~~|}r}j}z{zuv}~|{z{}yxyu~|{qwz{}|id~}ȺѺ{κȺĺ̺ԺѺܺGElJFIC/?Ya;) ۺݺҺкֺʺ<}}xvzx}ݺzr}sz|w|rwzvz~tzvvy}x}~m|z|zwyswwu}ynuzzx|xo}|}{x~{~~uƺֺƺкͺպȺ JOpÿ~q)aһmMѺǺȺºĺDw~~o~yz||v|~wyw|x}~}nyxzz~~zrz}y|wx~}zt}lxtu}~|h躍~vȺѺѺ޺ .T XVȯCν"KĕLѻA( κ溼ĺz\x{zpyzxt{|sĺw|w|}txuvx{|tm~~u{|}~}||xtzxzpyqtuwrtr||u{n~պֺҺҺں5_' ǼcF0@Vފ"`qB-ߺԺ̺ȺTy~yxu}}~{|v}x|~~{}|z~~uwz}vwwx|}rn~o|p~ut}~}{l~|z~qkwsyy}yytź|躠𺗺ǺúϺкպٺDg 6HNS@**ȼSѺֺȺʺDw}~|}|t}y}~|yw}u}xzv}}}{tyz{{||}sryy||}{xx}u{x{tyȺɺѺҺ$}?T +A2g[7%Lͽx4Һźֺƺ~7{wx|Ӻ~~xy|v~|lzvuy|r~xw{w~wy~}|y|պy{vwzxpx~}{u{}|z||z~}w~yxt|~x|ĺ̺ɺԺϺӺֺ DLmԵRZ]z ޼\DպкպƺP}}~zy}Ժ}{}}󺏺s|~xy}w}{l|~|z|stuyw|uz|syxz|}xw|zxw~u|y{}ܺƺºҺ)>+ujQB 뼸<(ѺԺºĺJ}r}zxy{z}~xt}jz}}m||qyzx{{{zuz}}tx}y~x~t|wn|vq|ߺúںʺʺѺ>aH2}7ZMƻD(ֺĺͺPu׺x}yz}x뺙z{xy|}}sz~|~}~ly~{yxxwts~{p|}zy}s~sqtz~|}{ͺɺƺɺǺٺں!-qŚ#*7a>ֻX˺ȺúͺºHyȺ~x~z{||d~~~{x}u}zwypy~tz~uxz||w|xz||rx}|}}{}}ĺ캔캉ú˺ٺj(0wh L^}LL кĺк2~{|}wк|v}~vۺ|{x}vxzy|m}s{x{|v{~yypz{}um{mw~z}{|||x|h|}yu}}}}ºº̺Ϻ˺ĺ(1JcXq(pY3FB^ԺͺB~|xwzy~{y}{vq}~uo}y~~ź|wp~|}o|zv~{|zzzzzux~~mp~zy~غ˺ºѺźܺ +AwK%a?cnU仲\ +ܺٺպȺźºBy~t}qz}}tt}~zt|vຄz~}y}~w}{~u~|y}wxuz~~zx||u~xsκy~캜|zºԺ̺кں^A8Eg]{c@RJD(ٺԺúº>}vz{}|ym|rv}}zyy}z|~~pv~~}v{}}|~zǺz||}qxuywúny}w|y||ԺȺȺͺͺĺ!Zмʼn.DzsQwR;7ۻX' ˺޺ĺԺӺt=xw~zx|}du~ں|ttx~nwz}{y~|}}l{yvx|}}~s|||{~z{{{vzwyrvyjrpyy}Ѻպܺٺݻ%E Uf[})FIdxudG$30Wս}f- ѺĺƺɺʺS|}v{wy|x|x~}~u}vzy||u{{zv~wpv|||}}syu|~lw|p{yxvw|orz{|ẛӺʺߺԺٺ.@q\qq  + &D{^P4ݺغѺܺ7}}{}wz|v{󺀺u{w|x}uzww}|}|oq~~}~|wx|~~{~|y~}}pz}|y}}}x{|zzuw}躎|}úººúǺɺغNü} d%ɴ`Ƽeܻ4պźǺغ޻d|}{z~~zx|}{m{y~z{}zw}~~|~~|x}}~||z}u}~tywt}nzqxȺ~ຎѺú׺Ⱥں޺ $j[>n8Ù:j_ڻvX4ܺ˺ʺKxtzx޺u{pwx|~p|zy~׺u|zy|u}}|yzyqwtxw~~vvsv}u}~xt{rs~~xǺúպȺϺͺ׺$[SlW2ɽZ@yCJ ׺ӺѺ˺ºʺ8||y}yrx~|||~v}||x}|y~z|}{~swpv}{~y̺}w~t~wzu~}ʺĺƺɺºĺӺݺԻ-4=|~ڼ;BTQ5%|WY/$!ϺѺĺ˺źźH}}wq}{|y}y~~uٺp{x||y|xs~lwzv~t~xw|~y}}}x}wwpv +}|w~ztɺܺȺúܺʺٺٺϺ2.|xuz}}}|x~w~ty{|ux|}{}x~}|wyy~spmrvstѺ~Ϻ%z{o~|r~|xmwvp +|~sztx}p|}qur|~{{yz~x|~~źƺºǺ}Һɺ~Ӻƺ9|y}}{vxy|}w{~zw|zyjxy{|x|~u}}~}|~{nz}ĺ˺{Ⱥ˺4xy|z|{{|~}}{|~z|ux~oyxwúĺӺʺҺӺѺκκ}ܺź˺麢ֺ=~ƺ}{v ||{zu|}zxyoyv~zທ~}x~zyvz{}s}xƺӺȺͺǺݺ̺Ǻ˺}ֺºȺ|5}}vz}v~||}y}y~u}{yuy~zz}}qn{|q|ӺϺ׺ߺȺɺĺǺ񺢺@v~vu}~~txĺ|}{y|}{zx|~}x}zz纎zy~}|ȺԺƺƺxº亭~8y|~~{x}}~{|~zu}z}xv|zrv|xv}unx{{yx{Ժźߺɺ}꺜H}{|}x|xy~{~wuy|zy}zy|}|~tz}{}||zyĺԺĺƺĺȺͺɺxWzu},zv|{~~z}~o{y}||~{fѺͺɺ亙~亞G||~wovz|uxwz{r|z}~|~~~wyy~t{}}~|z⺐{Tt~xzv~zzvt~}||}s{uw~{~{~xwx{xz}zxy|{y|wz}*κ|Awº}x~yr~}{{}vyx~|{yyyxn|wqz}ɺҺ}Rxz~|}}𺎺yxywy}|~{}|}v{y}|w~zy{|̺˺亗ֺ/ƺztv}y }zot}||u{~{w|u}|vyyuz~ֺ㺕ĺQ~~{|~xz}{{z{vy}}}z~|}xt}}~}{t|׺u~D{yϺҺvv}xu|{̺z||}||~zy~|~|xTԺyL~}{}~w(zuusuqwxt~{}w}n|úܺ五Qyt}vtzzxr~}}ĺ}{}x||~~y|}x|~|zquq}}|{}|~ƺ}xt}Bxɺ|v!z{|{|}}~~~~|p|}{yzx~~|~wyzϺzܺǺۺP~zw}x|zy~}|}vy}zzxzk|u}kk|wux~}xnxzrߺ~J}|rz|z~{ }Һu|vƺyux~zzw}}׺ʺźxκݺ:u}tzz{~xv{{y~~}yw}x}~غ~~{C|wv}yw~~~u~~{||p{{z}{yz~xٺ~պ|ຆx}YߺzK{z}}~z}}|~~}{|}v}"y}ʺ}}H}P}~}~w{z|~{|{|}}}~wzywĺ亜~5Yy~|}y}z~sp}y}yy'{t|}|}}кxǺzɺ|FxF}xz{xyt}}~}~|x}u~|y}}}}xyv}ylvyܺۺغں||KO{|}y|}||t||t~|{úF~zzwE~z}}y~w|ry~}{}z|w|yx~zs|Ⱥ躃~8Mt~q||} xxz~y~{~{}}ֺ}v}}|}~}ú|MC{|r4{|~z|{x{}|yzxxw~}|x|q{}ມ~ͺ~뺔zw5n>ܺSx}}}~zuvqz}~}u}{v}|}~z}<ƺ)~G}}~~|}t}w|~~}|{ƺ񺓺ں}Ժ@}Ox}vz~w}xú}v~~vwz}}~}|}wz|~ryt{|Һ|HvEy~|}{zt~}z~x{~vq~}{~պ|亘{Q~N}~~yy +|~ܺ{~w}u}r}s{t~|~{rv~|})~}S|}x~s}|~wzx&|{|z|ֺں~庎vL}Xuyr{z}~{~Ⱥv~y|}||x||xĺ|ɺz}~tMq~Nx}{||yuwz}|uu~rut}|}~亢ȺϺ~HxKz|{vu~vy~s{x~u~ʺ}{E}zyFxx~z{{~{yy|z|y}}{~}xѺ|~캔|}y3~~zN~}}~~xyʺzxx}|~~o{zz~z|x~ƺIx{{~Hwxu~}|}|}u}ws|z~|z|}zyͺͺ躋պ~B}N|~}$}|}Ǻzxzwy}zy'wȺ7ȺKu~ +|~}}|z{|qw~xn{|ºyxx}||Tк|yD}~y|y}}r|v~u|z}xu~|z}̺Һ6~yPy}~y~~z}|qvywxw|xy~㺛~ٺsG~MyȺɺ~}{|x||w}{ͺ}zCJy}r~z~}xsx}yy}s~x~{xͺ̺z};}[~y|yy~{|x{|y~yz~}|ͺ/xCx~~U~~{x}}|{~~~}|xuxp~޺Ϻ3}c~|}׺|{}|}m||wºƺy躊z=z}}y|U}~{~s~z~|~y~}{}{ĺ五y}Ⱥx!{Ie{xn!}|~}y}y|~ź|,t< }}e}~p~~x{x}~~{}zvwuккݺ{$|Uxºbzyz||}|}|w{~zѺ}~5yp|Ժ{|uy0yz|}׺|{|ܺѺ#~~}Myy}u| }}~~{ty|~|Ӻ|&~8nr~~s{s|zx~{yx}vº|ú亙} +||R~к|o}{~z}y|}uxuy~ƺ~|Lzr~{|}}}y{l{~{󺡺Ϻú{6i}~}wyt|vt}}x|y}}tzͺ~}u D}u}r~u}|y}wy~}|w~~<~kź~~|}w|zyx~{|ٺ}ú C~}}}{xyx{xӺٺwv4~u}s|v}y~~{{|u~~tm~ɺvĺ ~ںxU}~uqt~~}~~{~x~ԺǺ| |غU}~v| }|~к𺏺ƺ!s}uuz;~z}}{sf|y{uy|iº:ֺ Nv|{tغw|~T~źۺ}G}t~{񺇺~txvy|xѺ}˺Ⱥ z9⺝}}y{yx~zj~~}S~|wysк|~y~~}v}~̺{}|F~˺xv}z|x|~w{|ź~ w@}|o!}|x}~yv~z~yw}y~|~ຨ˺} Dz{}~{~xz||ͺxʺź:}x}~}|yɺ{}{|}}Ѻ@˺亐yκ{|T|o||v~}||xúͺ{?}~xu|Ẍܺx{t||{z|~v||ٺ +ں/zx~ʺyt~ĺ}Һ º|}ztwǺ亐M}~ v{~{źxӺ~~{E|Ѻ~غz (p{z~~}}|º}P}t}~|sv~{y}||ں Vú}}Q~"|~~~~{~~ M}yҺȺx~}~~|s|~|к~N~{0º{}vxzxź|Ⱥź`y4y~~ +}|xϺ}}y}sº底̺kzv;y~ʺ~{zƺb}κ:||}}y~{r}|{к˺aAxy{{Ⱥ~}}z}캖~mĺzHȺ̺z}|}|~{|˺~}|L}s{x ú{zwy|x}yuq4{˺z |~}x~y0pкH}~}}|~{r}cӺK~|}Ժ }yZD}~}z}~~úƺ𺤺Q 𺑺L|~xȺsXCs|ݺ~}z{ȺٺBnz~~~zz~պԺi~}@|{v}}uɺܺĺ]J {m|xxx~ui{O󺗺~%{||hCźw|| w||5zwຈ ۺEv!%z}u}}twĺٺ\~~Qyz޻"~źc뺘o|{^~z}{}yں{二c}4ĺѺºqvG~~}~x~*z)ĺ}EzytvӺ`]ߺ D +}}|~κɺm}B}}z{v}~pkJuк~x|亠B|~z}||ĺź}a6(~~x{}~` |J}vzvǺ`'~|'|}ĺٺqL ~ʺºN = ޺{|~}|Ⱥazʺ뺦~y|uyz7 +~o \κú~}ºnIF@y򺠺Dy}||zպ}źuN غzкºM||}xѺjǺD{~ĺ̺dL!IW|ֺĺ}bz;|}ĺֺ`E+}|Wں|}yE}~(xź底cO|~zκܺͺºj˺!#Px|J}㺏າź|ƺV~~}Һ]@ }úźg' QջG x~{麣ԺI废}{ vúxVĺY˺u~zкҺʺ󺊺~Ǻºκ|4}y}źֺºkL{~캟uƺ>|yl*PܺϺ|}~̺j˺H0{ٺź}c=~}{˺úκlԺ~Kú~캠Pd7y̺u?LHx +N˺ȺylB~$}~׺V?źĺ[ ĺBQǺԺ废s޺G~{}ʺƺfպҺ8\̺Һºp@غͺκҺ-{~ƺ}ººĺmǺU6zƺpH|"yźźȺlX ۺź麘&Ⱥx|JѺ~ѺҺº~ͺ麒V|Ѻ񺢺@xʻ%x]̺Br˺Ժa ^ȺaHȺӺʺƺ}Wֺ7`̺Mpº~ۺ}κm ƺPĺ0x|źۺx+F!Ⱥ`úĺHz`ź SKκf}=u}ܺͺ_I)ú꺙Ժźúú~ϺE"ƺrMĺ|㺢亪ĺUHҺɺҺm ]y6}Ⱥ~ȺiȺ`~'ĺ}ƺ~Qκºʺںٺ{ĺ麛 vO%|ԺXTܺƺຨɺ|:~.Ⱥ|º⺠iN Ϻú~{ȺĺӺxɺú Kͺ κú˺ŻϺiԺZ}κ}ɺĺֺoຕYȺԺκĺʺĺxBԺ$Ϻúкt(^|ºκcĺKǺ󺒺ȺҺǺv躖 ºjٺ.ĺRܺĺ}T}κҺ̺WҺ׺G ĺպ\ DѺ|ɺduϺ$VvT񺒺źȺk ]ںκ&m庤9ѺºǺº~ֺSԺӺźƺĺpLغ3|享bĺT̺ĺúݺ}غպDɺ6ԺɺۺĺúW㺴]亢I~ ú亝ź̺ͺºcҺAú \ No newline at end of file diff --git a/FTPExplorer/FTPExplorer.sln b/FTPExplorer/FTPExplorer.sln new file mode 100644 index 0000000..3710356 --- /dev/null +++ b/FTPExplorer/FTPExplorer.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FTPExplorer", "FTPExplorer\FTPExplorer.csproj", "{510AD0E5-B162-4C05-A7A1-CB37B099ECA8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {510AD0E5-B162-4C05-A7A1-CB37B099ECA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {510AD0E5-B162-4C05-A7A1-CB37B099ECA8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {510AD0E5-B162-4C05-A7A1-CB37B099ECA8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {510AD0E5-B162-4C05-A7A1-CB37B099ECA8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/FTPExplorer/FTPExplorer.suo b/FTPExplorer/FTPExplorer.suo new file mode 100644 index 0000000..504ef8c Binary files /dev/null and b/FTPExplorer/FTPExplorer.suo differ diff --git a/FTPExplorer/FTPExplorer/FTPExplorer.csproj b/FTPExplorer/FTPExplorer/FTPExplorer.csproj new file mode 100644 index 0000000..a2c7d5a --- /dev/null +++ b/FTPExplorer/FTPExplorer/FTPExplorer.csproj @@ -0,0 +1,70 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {510AD0E5-B162-4C05-A7A1-CB37B099ECA8} + WinExe + Properties + FTPExplorer + FTPExplorer + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + \ No newline at end of file diff --git a/FTPExplorer/FTPExplorer/FTPExplorer.csproj.user b/FTPExplorer/FTPExplorer/FTPExplorer.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/FTPExplorer/FTPExplorer/FTPExplorer.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/FTPExplorer/FTPExplorer/Form1.Designer.cs b/FTPExplorer/FTPExplorer/Form1.Designer.cs new file mode 100644 index 0000000..5c0f784 --- /dev/null +++ b/FTPExplorer/FTPExplorer/Form1.Designer.cs @@ -0,0 +1,60 @@ +namespace FTPExplorer +{ + partial class Form1 + { + ///

+ /// 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() + { + this.listView1 = new System.Windows.Forms.ListView(); + this.SuspendLayout(); + // + // listView1 + // + this.listView1.Location = new System.Drawing.Point(12, 12); + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(315, 411); + this.listView1.TabIndex = 0; + this.listView1.View = System.Windows.Forms.View.Details; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(556, 435); + this.Controls.Add(this.listView1); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ListView listView1; + + } +} + diff --git a/FTPExplorer/FTPExplorer/Form1.cs b/FTPExplorer/FTPExplorer/Form1.cs new file mode 100644 index 0000000..34ccf0b --- /dev/null +++ b/FTPExplorer/FTPExplorer/Form1.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Net; + +namespace FTPExplorer +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + WebRequest wrq = WebRequest.Create(""); + Stream str = wrq.GetRequestStream(); + } + } +} \ No newline at end of file diff --git a/FTPExplorer/FTPExplorer/Form1.resx b/FTPExplorer/FTPExplorer/Form1.resx new file mode 100644 index 0000000..8f95d66 --- /dev/null +++ b/FTPExplorer/FTPExplorer/Form1.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FTPExplorer/FTPExplorer/Program.cs b/FTPExplorer/FTPExplorer/Program.cs new file mode 100644 index 0000000..2093978 --- /dev/null +++ b/FTPExplorer/FTPExplorer/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace FTPExplorer +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/FTPExplorer/FTPExplorer/Properties/AssemblyInfo.cs b/FTPExplorer/FTPExplorer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..824d655 --- /dev/null +++ b/FTPExplorer/FTPExplorer/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FTPExplorer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FTPExplorer")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("6945e747-b2aa-49c7-b994-33da118505b0")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/FTPExplorer/FTPExplorer/Properties/Resources.Designer.cs b/FTPExplorer/FTPExplorer/Properties/Resources.Designer.cs new file mode 100644 index 0000000..3620424 --- /dev/null +++ b/FTPExplorer/FTPExplorer/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "FTPExplorer.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "FTPExplorer.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "FTPExplorer.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace FTPExplorer.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FTPExplorer.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/FTPExplorer/FTPExplorer/Properties/Resources.resx b/FTPExplorer/FTPExplorer/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/FTPExplorer/FTPExplorer/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FTPExplorer/FTPExplorer/Properties/Settings.Designer.cs b/FTPExplorer/FTPExplorer/Properties/Settings.Designer.cs new file mode 100644 index 0000000..1afd093 --- /dev/null +++ b/FTPExplorer/FTPExplorer/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "FTPExplorer.Properties.Settings.get_Default():FTPExplorer.Properties.Settings")] + +namespace FTPExplorer.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/FTPExplorer/FTPExplorer/Properties/Settings.settings b/FTPExplorer/FTPExplorer/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/FTPExplorer/FTPExplorer/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Flo/Flo.sln b/Flo/Flo.sln new file mode 100644 index 0000000..6581459 --- /dev/null +++ b/Flo/Flo.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Flo", "Flo\Flo.csproj", "{1FC244AC-3A34-4159-9FC2-B066CF667D72}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1FC244AC-3A34-4159-9FC2-B066CF667D72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1FC244AC-3A34-4159-9FC2-B066CF667D72}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1FC244AC-3A34-4159-9FC2-B066CF667D72}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1FC244AC-3A34-4159-9FC2-B066CF667D72}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Flo/Flo.suo b/Flo/Flo.suo new file mode 100644 index 0000000..62abfd4 Binary files /dev/null and b/Flo/Flo.suo differ diff --git a/Flo/Flo/Flo.csproj b/Flo/Flo/Flo.csproj new file mode 100644 index 0000000..8807f99 --- /dev/null +++ b/Flo/Flo/Flo.csproj @@ -0,0 +1,40 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {1FC244AC-3A34-4159-9FC2-B066CF667D72} + Exe + Properties + ConsoleApplication1 + Flo + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + \ No newline at end of file diff --git a/Flo/Flo/Flo.csproj.user b/Flo/Flo/Flo.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/Flo/Flo/Flo.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/Flo/Flo/Program.cs b/Flo/Flo/Program.cs new file mode 100644 index 0000000..905996f --- /dev/null +++ b/Flo/Flo/Program.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ConsoleApplication1 +{ + class Program + { + static void Main(string[] args) + { + string text = "hallo, ich bin der josch"; + Console.WriteLine(text); + Console.WriteLine(text); + Console.WriteLine(text); + } + } +} diff --git a/Flo/Flo/Properties/AssemblyInfo.cs b/Flo/Flo/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e8dd409 --- /dev/null +++ b/Flo/Flo/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ConsoleApplication1")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ConsoleApplication1")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5a6285ef-f2e3-4835-bd30-f5614afb421e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/HexViewer/HexViewer.sln b/HexViewer/HexViewer.sln new file mode 100644 index 0000000..998cf93 --- /dev/null +++ b/HexViewer/HexViewer.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexViewer", "HexViewer\HexViewer.csproj", "{45EA2D22-757F-4B0B-87C2-F2EAACBFA31B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {45EA2D22-757F-4B0B-87C2-F2EAACBFA31B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {45EA2D22-757F-4B0B-87C2-F2EAACBFA31B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {45EA2D22-757F-4B0B-87C2-F2EAACBFA31B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {45EA2D22-757F-4B0B-87C2-F2EAACBFA31B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/HexViewer/HexViewer.suo b/HexViewer/HexViewer.suo new file mode 100644 index 0000000..f18efb6 Binary files /dev/null and b/HexViewer/HexViewer.suo differ diff --git a/HexViewer/HexViewer/Form1.Designer.cs b/HexViewer/HexViewer/Form1.Designer.cs new file mode 100644 index 0000000..2d6be2a --- /dev/null +++ b/HexViewer/HexViewer/Form1.Designer.cs @@ -0,0 +1,182 @@ +namespace HexViewer +{ + partial class Form1 + { + /// + /// 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() + { + this.panel1 = new System.Windows.Forms.Panel(); + this.button1 = new System.Windows.Forms.Button(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tbHEX = new System.Windows.Forms.TextBox(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.tbDEC = new System.Windows.Forms.TextBox(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.tbSTR = new System.Windows.Forms.TextBox(); + this.panel1.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.button1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(838, 29); + this.panel1.TabIndex = 3; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(3, 0); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 1; + this.button1.Text = "button1"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + // + // tabControl1 + // + this.tabControl1.Appearance = System.Windows.Forms.TabAppearance.FlatButtons; + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 29); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(838, 580); + this.tabControl1.TabIndex = 4; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.tbHEX); + this.tabPage1.Location = new System.Drawing.Point(4, 25); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(830, 551); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "HEX"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tbHEX + // + this.tbHEX.Dock = System.Windows.Forms.DockStyle.Fill; + this.tbHEX.Location = new System.Drawing.Point(3, 3); + this.tbHEX.Multiline = true; + this.tbHEX.Name = "tbHEX"; + this.tbHEX.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.tbHEX.Size = new System.Drawing.Size(824, 545); + this.tbHEX.TabIndex = 0; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.tbDEC); + this.tabPage2.Location = new System.Drawing.Point(4, 25); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(830, 552); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "DEC"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // tbDEC + // + this.tbDEC.Dock = System.Windows.Forms.DockStyle.Fill; + this.tbDEC.Location = new System.Drawing.Point(3, 3); + this.tbDEC.Multiline = true; + this.tbDEC.Name = "tbDEC"; + this.tbDEC.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.tbDEC.Size = new System.Drawing.Size(824, 546); + this.tbDEC.TabIndex = 1; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.tbSTR); + this.tabPage3.Location = new System.Drawing.Point(4, 25); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Padding = new System.Windows.Forms.Padding(3); + this.tabPage3.Size = new System.Drawing.Size(830, 552); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "STR"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // tbSTR + // + this.tbSTR.Dock = System.Windows.Forms.DockStyle.Fill; + this.tbSTR.Location = new System.Drawing.Point(3, 3); + this.tbSTR.Multiline = true; + this.tbSTR.Name = "tbSTR"; + this.tbSTR.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.tbSTR.Size = new System.Drawing.Size(824, 546); + this.tbSTR.TabIndex = 2; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(838, 609); + this.Controls.Add(this.tabControl1); + this.Controls.Add(this.panel1); + this.Name = "Form1"; + this.Text = "Form1"; + this.panel1.ResumeLayout(false); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.tabPage3.ResumeLayout(false); + this.tabPage3.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TextBox tbHEX; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TextBox tbDEC; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TextBox tbSTR; + } +} + diff --git a/HexViewer/HexViewer/Form1.cs b/HexViewer/HexViewer/Form1.cs new file mode 100644 index 0000000..bcc59cf --- /dev/null +++ b/HexViewer/HexViewer/Form1.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace HexViewer +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + FileStream fs = File.Open(openFileDialog1.FileName, FileMode.Open); + tbHEX.Text = ""; + for (int i = 0; i < fs.Length; i++ ) + { + if (i % 3 == 0) + { + tbHEX.Text += " "; + } + if (i - 54 % 150 == 0) + { + tbHEX.Text += "\r\n"; + } + tbHEX.Text += String.Format("{0:x2}", fs.ReadByte()).ToUpper(); + i++; + } + fs.Close(); + } + } + } +} \ No newline at end of file diff --git a/HexViewer/HexViewer/Form1.resx b/HexViewer/HexViewer/Form1.resx new file mode 100644 index 0000000..ec75df9 --- /dev/null +++ b/HexViewer/HexViewer/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 167, 17 + + \ No newline at end of file diff --git a/HexViewer/HexViewer/HexViewer.csproj b/HexViewer/HexViewer/HexViewer.csproj new file mode 100644 index 0000000..6aef691 --- /dev/null +++ b/HexViewer/HexViewer/HexViewer.csproj @@ -0,0 +1,78 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {45EA2D22-757F-4B0B-87C2-F2EAACBFA31B} + WinExe + Properties + HexViewer + HexViewer + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/HexViewer/HexViewer/Program.cs b/HexViewer/HexViewer/Program.cs new file mode 100644 index 0000000..eca19a7 --- /dev/null +++ b/HexViewer/HexViewer/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace HexViewer +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/HexViewer/HexViewer/Properties/AssemblyInfo.cs b/HexViewer/HexViewer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..3271bb0 --- /dev/null +++ b/HexViewer/HexViewer/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("HexViewer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("HexViewer")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4e3c4fe5-c8cb-410f-b3d7-7f733289c786")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/HexViewer/HexViewer/Properties/Resources.Designer.cs b/HexViewer/HexViewer/Properties/Resources.Designer.cs new file mode 100644 index 0000000..2e94895 --- /dev/null +++ b/HexViewer/HexViewer/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace HexViewer.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HexViewer.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/HexViewer/HexViewer/Properties/Resources.resx b/HexViewer/HexViewer/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/HexViewer/HexViewer/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/HexViewer/HexViewer/Properties/Settings.Designer.cs b/HexViewer/HexViewer/Properties/Settings.Designer.cs new file mode 100644 index 0000000..2a11351 --- /dev/null +++ b/HexViewer/HexViewer/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace HexViewer.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/HexViewer/HexViewer/Properties/Settings.settings b/HexViewer/HexViewer/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/HexViewer/HexViewer/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/IPUpdate/IPUpdate.sln b/IPUpdate/IPUpdate.sln new file mode 100644 index 0000000..bfbef24 --- /dev/null +++ b/IPUpdate/IPUpdate.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPUpdate", "IPUpdate\IPUpdate.csproj", "{B43D04FF-F83E-40B4-B64A-E7D0DDD2A846}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B43D04FF-F83E-40B4-B64A-E7D0DDD2A846}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B43D04FF-F83E-40B4-B64A-E7D0DDD2A846}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B43D04FF-F83E-40B4-B64A-E7D0DDD2A846}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B43D04FF-F83E-40B4-B64A-E7D0DDD2A846}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/IPUpdate/IPUpdate.suo b/IPUpdate/IPUpdate.suo new file mode 100644 index 0000000..a3f9c35 Binary files /dev/null and b/IPUpdate/IPUpdate.suo differ diff --git a/IPUpdate/IPUpdate/IPUpdate.csproj b/IPUpdate/IPUpdate/IPUpdate.csproj new file mode 100644 index 0000000..2fb7678 --- /dev/null +++ b/IPUpdate/IPUpdate/IPUpdate.csproj @@ -0,0 +1,71 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {B43D04FF-F83E-40B4-B64A-E7D0DDD2A846} + WinExe + Properties + IPUpdate + IPUpdate + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + MainWindow.cs + + + + + MainWindow.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + \ No newline at end of file diff --git a/IPUpdate/IPUpdate/IPUpdate.csproj.user b/IPUpdate/IPUpdate/IPUpdate.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/IPUpdate/IPUpdate/IPUpdate.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/IPUpdate/IPUpdate/MainWindow.Designer.cs b/IPUpdate/IPUpdate/MainWindow.Designer.cs new file mode 100644 index 0000000..8414b6f --- /dev/null +++ b/IPUpdate/IPUpdate/MainWindow.Designer.cs @@ -0,0 +1,86 @@ +namespace IPUpdate +{ + partial class MainWindow + { + /// + /// 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() + { + this.components = new System.ComponentModel.Container(); + this.timer = new System.Windows.Forms.Timer(this.components); + this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // timer + // + this.timer.Enabled = true; + this.timer.Interval = 300000; + this.timer.Tick += new System.EventHandler(this.timer_Tick); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.SystemColors.ControlText; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(0, 13); + this.label1.TabIndex = 0; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(15, 53); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox1.Size = new System.Drawing.Size(458, 265); + this.textBox1.TabIndex = 1; + // + // MainWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(485, 330); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "MainWindow"; + this.ShowInTaskbar = false; + this.Text = "IPUpdate"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Timer timer; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox1; + + } +} + diff --git a/IPUpdate/IPUpdate/MainWindow.cs b/IPUpdate/IPUpdate/MainWindow.cs new file mode 100644 index 0000000..b785d11 --- /dev/null +++ b/IPUpdate/IPUpdate/MainWindow.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Net; +using System.IO; +using System.Threading; + +namespace IPUpdate +{ + public partial class MainWindow : Form + { + private delegate void UpdateTextBoxHandler(string text); + Thread t; + + public MainWindow() + { + InitializeComponent(); + t = new Thread(new ThreadStart(Request)); + t.Start(); + } + + private void UpdateTextBox(string text) + { + //label1.Text = text; + textBox1.Text = text; + } + + private void timer_Tick(object sender, EventArgs e) + { + t.Abort(); + t.Start(); + } + + private void Request() + { + CookieContainer cookie = new CookieContainer(); + + byte[] postdata2 = Encoding.ASCII.GetBytes("login=Johannes.Schauer&kennwort=porenta&sprache=&x=0&y=18"); + byte[] postdata = Encoding.ASCII.GetBytes("domain=johannes-schauer.de&" + + "action=UPDATE&" + + "expertmode=true&" + + "subdomain_name_old=dyndns&" + + "subdomain_typ_old=A&" + + "subdomain_ziel_old=99.99.99.99&" + + "subdomain_ttl_old=&" + + "subdomain_premx_old=&" + + "subdomain_dir_old=dyndns&" + + "dotnet_old=0&" + + "frontpage_old=0&" + + "frontpage_login_old=&" + + "frontpage_kennwort_old=&" + + "ssl_old=0&" + + "subdomain_name=dyndns&" + + "subdomain_inklwww=-1&" + + "subdomain_dir=&" + + "frontpage_login=&" + + "frontpage_kennwort=&" + + "aspnet=0&ssl=0&" + + "subdomain_typ=A&" + + "subdomain_ttl=&" + + "subdomain_ziel=66.66.66.66&" + + "subdomain_premx="); + HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://webserverconfig.de/index.php"); + req.CookieContainer = cookie; + req.Method = "POST"; + req.ContentType = "application/x-www-form-urlencoded"; + Stream write = req.GetRequestStream(); + write.Write(postdata2, 0, postdata2.Length); + write.Close(); + req.GetResponse().Close(); + + HttpWebRequest req2 = (HttpWebRequest)WebRequest.Create("http://webserverconfig.de/subdomains.php"); + req2.CookieContainer = cookie; + req2.Method = "POST"; + req2.ContentType = "application/x-www-form-urlencoded"; + Stream write2 = req2.GetRequestStream(); + write2.Write(postdata, 0, postdata.Length); + write2.Close(); + req2.GetResponse().Close(); + } + } +} \ No newline at end of file diff --git a/IPUpdate/IPUpdate/MainWindow.resx b/IPUpdate/IPUpdate/MainWindow.resx new file mode 100644 index 0000000..be1fbe2 --- /dev/null +++ b/IPUpdate/IPUpdate/MainWindow.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/IPUpdate/IPUpdate/Program.cs b/IPUpdate/IPUpdate/Program.cs new file mode 100644 index 0000000..3c0d384 --- /dev/null +++ b/IPUpdate/IPUpdate/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace IPUpdate +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new MainWindow()); + } + } +} \ No newline at end of file diff --git a/IPUpdate/IPUpdate/Properties/AssemblyInfo.cs b/IPUpdate/IPUpdate/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5909e57 --- /dev/null +++ b/IPUpdate/IPUpdate/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IPUpdate")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("IPUpdate")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("68575e67-921c-4cf4-8777-a6ef680cd4fd")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/IPUpdate/IPUpdate/Properties/Resources.Designer.cs b/IPUpdate/IPUpdate/Properties/Resources.Designer.cs new file mode 100644 index 0000000..ff091f6 --- /dev/null +++ b/IPUpdate/IPUpdate/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "IPUpdate.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "IPUpdate.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "IPUpdate.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace IPUpdate.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IPUpdate.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/IPUpdate/IPUpdate/Properties/Resources.resx b/IPUpdate/IPUpdate/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/IPUpdate/IPUpdate/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IPUpdate/IPUpdate/Properties/Settings.Designer.cs b/IPUpdate/IPUpdate/Properties/Settings.Designer.cs new file mode 100644 index 0000000..68c6698 --- /dev/null +++ b/IPUpdate/IPUpdate/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "IPUpdate.Properties.Settings.get_Default():IPUpdate.Properties.Settings")] + +namespace IPUpdate.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/IPUpdate/IPUpdate/Properties/Settings.settings b/IPUpdate/IPUpdate/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/IPUpdate/IPUpdate/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ImageViewer/ImageViewer.sln b/ImageViewer/ImageViewer.sln new file mode 100644 index 0000000..ae5d5be --- /dev/null +++ b/ImageViewer/ImageViewer.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageViewer", "ImageViewer\ImageViewer.csproj", "{FA2110D7-7EF2-4264-A010-8F58D6408D0B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FA2110D7-7EF2-4264-A010-8F58D6408D0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA2110D7-7EF2-4264-A010-8F58D6408D0B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA2110D7-7EF2-4264-A010-8F58D6408D0B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA2110D7-7EF2-4264-A010-8F58D6408D0B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ImageViewer/ImageViewer.suo b/ImageViewer/ImageViewer.suo new file mode 100644 index 0000000..857285c Binary files /dev/null and b/ImageViewer/ImageViewer.suo differ diff --git a/ImageViewer/ImageViewer/BG.bmp b/ImageViewer/ImageViewer/BG.bmp new file mode 100644 index 0000000..778fdf8 Binary files /dev/null and b/ImageViewer/ImageViewer/BG.bmp differ diff --git a/ImageViewer/ImageViewer/DiaShow.bmp b/ImageViewer/ImageViewer/DiaShow.bmp new file mode 100644 index 0000000..c5e887e Binary files /dev/null and b/ImageViewer/ImageViewer/DiaShow.bmp differ diff --git a/ImageViewer/ImageViewer/DiaShow.ico b/ImageViewer/ImageViewer/DiaShow.ico new file mode 100644 index 0000000..6b80920 Binary files /dev/null and b/ImageViewer/ImageViewer/DiaShow.ico differ diff --git a/ImageViewer/ImageViewer/ImageViewer.csproj b/ImageViewer/ImageViewer/ImageViewer.csproj new file mode 100644 index 0000000..63cb4c4 --- /dev/null +++ b/ImageViewer/ImageViewer/ImageViewer.csproj @@ -0,0 +1,80 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {FA2110D7-7EF2-4264-A010-8F58D6408D0B} + WinExe + Properties + ImageViewer + ImageViewer + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Main.cs + + + + + Main.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + \ No newline at end of file diff --git a/ImageViewer/ImageViewer/ImageViewer.csproj.user b/ImageViewer/ImageViewer/ImageViewer.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/ImageViewer/ImageViewer/ImageViewer.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/ImageViewer/ImageViewer/Main.Designer.cs b/ImageViewer/ImageViewer/Main.Designer.cs new file mode 100644 index 0000000..c1675fe --- /dev/null +++ b/ImageViewer/ImageViewer/Main.Designer.cs @@ -0,0 +1,255 @@ +namespace ImageViewer +{ + partial class Main + { + /// + /// 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(Main)); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.dateiToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiffnen = new System.Windows.Forms.ToolStripMenuItem(); + this.bearbeitenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.openImageDialog = new System.Windows.Forms.OpenFileDialog(); + this.panel1 = new System.Windows.Forms.Panel(); + this.toolStripDropDownButton1 = new System.Windows.Forms.ToolStripDropDownButton(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem7 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripMenuItem(); + this.ganzesBildToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton2 = new System.Windows.Forms.ToolStripButton(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.menuStrip1.SuspendLayout(); + this.toolStrip1.SuspendLayout(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.dateiToolStripMenuItem, + this.bearbeitenToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(579, 24); + this.menuStrip1.TabIndex = 1; + this.menuStrip1.Text = "menuStrip1"; + // + // dateiToolStripMenuItem + // + this.dateiToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmiffnen}); + this.dateiToolStripMenuItem.Name = "dateiToolStripMenuItem"; + this.dateiToolStripMenuItem.Text = "Datei"; + // + // tsmiffnen + // + this.tsmiffnen.Name = "tsmiffnen"; + this.tsmiffnen.Text = "ffnen"; + this.tsmiffnen.Click += new System.EventHandler(this.tsmiffnen_Click); + // + // bearbeitenToolStripMenuItem + // + this.bearbeitenToolStripMenuItem.Name = "bearbeitenToolStripMenuItem"; + this.bearbeitenToolStripMenuItem.Text = "Bearbeiten"; + // + // toolStrip1 + // + this.toolStrip1.BackColor = System.Drawing.Color.White; + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripDropDownButton1, + this.toolStripButton1, + this.toolStripButton2}); + this.toolStrip1.Location = new System.Drawing.Point(0, 24); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System; + this.toolStrip1.Size = new System.Drawing.Size(579, 25); + this.toolStrip1.TabIndex = 3; + this.toolStrip1.Text = "toolStrip1"; + // + // openImageDialog + // + this.openImageDialog.Filter = "Image Files (*.gif;*.jpg;*.jpeg;*.bmp;*.wmf;*.png)|*.gif;*.jpg;*.jpeg;*.bmp;*.wmf" + + ";*.png|All Files|*.*"; + // + // panel1 + // + this.panel1.AutoScroll = true; + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.panel1.Controls.Add(this.pictureBox1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 49); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(579, 361); + this.panel1.TabIndex = 5; + // + // toolStripDropDownButton1 + // + this.toolStripDropDownButton1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItem2, + this.toolStripMenuItem3, + this.toolStripMenuItem4, + this.toolStripMenuItem5, + this.toolStripMenuItem6, + this.toolStripMenuItem7, + this.toolStripMenuItem8, + this.ganzesBildToolStripMenuItem}); + this.toolStripDropDownButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripDropDownButton1.Image"))); + this.toolStripDropDownButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripDropDownButton1.Name = "toolStripDropDownButton1"; + this.toolStripDropDownButton1.Text = "Zoom"; + this.toolStripDropDownButton1.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.toolStripDropDownButton1_DropDownItemClicked); + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Text = "1000%"; + // + // toolStripMenuItem3 + // + this.toolStripMenuItem3.Name = "toolStripMenuItem3"; + this.toolStripMenuItem3.Text = "500%"; + // + // toolStripMenuItem4 + // + this.toolStripMenuItem4.Name = "toolStripMenuItem4"; + this.toolStripMenuItem4.Text = "250%"; + // + // toolStripMenuItem5 + // + this.toolStripMenuItem5.Name = "toolStripMenuItem5"; + this.toolStripMenuItem5.Text = "100%"; + // + // toolStripMenuItem6 + // + this.toolStripMenuItem6.Name = "toolStripMenuItem6"; + this.toolStripMenuItem6.Text = "50%"; + // + // toolStripMenuItem7 + // + this.toolStripMenuItem7.Name = "toolStripMenuItem7"; + this.toolStripMenuItem7.Text = "25%"; + // + // toolStripMenuItem8 + // + this.toolStripMenuItem8.Name = "toolStripMenuItem8"; + this.toolStripMenuItem8.Text = "10%"; + // + // ganzesBildToolStripMenuItem + // + this.ganzesBildToolStripMenuItem.Name = "ganzesBildToolStripMenuItem"; + this.ganzesBildToolStripMenuItem.Text = "Ganzes Bild"; + // + // toolStripButton1 + // + this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton1.Image = ImageViewer.Properties.Resources.DiaShow; + this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton1.Name = "toolStripButton1"; + this.toolStripButton1.Text = "toolStripButton1"; + // + // toolStripButton2 + // + this.toolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton2.Image = ImageViewer.Properties.Resources.ZoomIn; + this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton2.Name = "toolStripButton2"; + this.toolStripButton2.Text = "toolStripButton2"; + // + // pictureBox1 + // + this.pictureBox1.BackgroundImage = ImageViewer.Properties.Resources.BG; + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(2, 2); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox1.TabIndex = 4; + this.pictureBox1.TabStop = false; + // + // statusStrip1 + // + this.statusStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Table; + this.statusStrip1.Location = new System.Drawing.Point(0, 410); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(579, 22); + this.statusStrip1.TabIndex = 2; + this.statusStrip1.Text = "statusStrip1"; + // + // Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(579, 432); + this.Controls.Add(this.panel1); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.toolStrip1); + this.Controls.Add(this.menuStrip1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "Main"; + this.Text = "ImageViewer"; + this.menuStrip1.ResumeLayout(false); + this.toolStrip1.ResumeLayout(false); + this.panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem dateiToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bearbeitenToolStripMenuItem; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripMenuItem tsmiffnen; + private System.Windows.Forms.OpenFileDialog openImageDialog; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem4; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem5; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem6; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem7; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem8; + private System.Windows.Forms.ToolStripMenuItem ganzesBildToolStripMenuItem; + private System.Windows.Forms.ToolStripButton toolStripButton1; + private System.Windows.Forms.ToolStripButton toolStripButton2; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.StatusStrip statusStrip1; + } +} + diff --git a/ImageViewer/ImageViewer/Main.cs b/ImageViewer/ImageViewer/Main.cs new file mode 100644 index 0000000..0bc4172 --- /dev/null +++ b/ImageViewer/ImageViewer/Main.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace ImageViewer +{ + public partial class Main : Form + { + Bitmap bm; + + public Main() + { + InitializeComponent(); + } + + private void tsmiffnen_Click(object sender, EventArgs e) + { + if (openImageDialog.ShowDialog() == DialogResult.OK) + { + bm = new Bitmap(Image.FromFile(openImageDialog.FileName)); + pictureBox1.ImageLocation = openImageDialog.FileName; + pictureBox1.Width = bm.Width; + pictureBox1.Height = bm.Height; + } + } + + private void toolStripDropDownButton1_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + switch (e.ClickedItem.Text) + { + case "1000%": + pictureBox1.Width = 10*bm.Width; + pictureBox1.Height = 10*bm.Height; + break; + } + } + } +} \ No newline at end of file diff --git a/ImageViewer/ImageViewer/Main.resx b/ImageViewer/ImageViewer/Main.resx new file mode 100644 index 0000000..0ea9c90 --- /dev/null +++ b/ImageViewer/ImageViewer/Main.resx @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 236, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAkVJREFUOE+tk11I + k3EUxr2MCMILI+hiYRFBYYotIwnNpHKQZh8XFrhMFLFQrNSpM0ONJvOrgaK+pfk5K9M5w+X6YosJU9DN + XjYLmlEiCM4uIii2+bTzD/2/BGFgLxzeq+d3nnPO8w8J+R9f82M7pKXrG4f2oRXVba+g1j3HDa0RuVUD + uFKmx6XCLpzPb8eZqwLWepPY58df6/sPwPttBfPeFXxYCGB6LoC9J2//G2BJdMN9OQqiMhIzNpGJu00e + 7DlRsT6AOpMY82P4+fo6Js/txFt3AB0j77E7UQKgmf8cYdW2mB75W1ybiPFUGcYcfrQ9nUF4wi3ugBYm + BUhnJtvUmcRDw04YJvxo0k9AFl/OAbTtVcCsZxEFlQIru2uZzUy2qTOJ+20+NHZaseOomgPoVAT4+MXL + hAZPH8yfh6FIz4EwOIW4lCxWrYZZdFl8qBVeYHtsGQfQnUlc2R4Uz/XCtewIQnrRMFmBi6ocGF9Ow2R5 + RwK0ji7hbvMzhB0u5QAKyZ0eAcZPeri+Otm/xVmDaksBrhku4GxeBjqfvEHjgxEGqbo3iFB5CQdQwoY8 + PWtiQaxDja0YhaNKZPSfgqJpH6KTUpCv1iFXVccgW6NVHEDxtC6YWecOtw719nKUmrOQPZCM1PtyxNfL + EKPZBnnacSjS8hCXnIktUcUcQNlucWiZbY2tCDdNSmQ+SgqKD+JYQzgTx2jC2P9QyS7sP3Iamw9IAPQw + KNsUT0oYhYTuTKeibdPCaGayTZ1JvCmiiDvYyIv+BQh9MVb8RJN+AAAAAElFTkSuQmCC + + + + 335, 17 + + + 126, 17 + + \ No newline at end of file diff --git a/ImageViewer/ImageViewer/Properties/AssemblyInfo.cs b/ImageViewer/ImageViewer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2ebc3db --- /dev/null +++ b/ImageViewer/ImageViewer/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ImageViewer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ImageViewer")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("77c6748f-08d2-4250-b380-6bcf22337106")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ImageViewer/ImageViewer/Properties/Resources.Designer.cs b/ImageViewer/ImageViewer/Properties/Resources.Designer.cs new file mode 100644 index 0000000..e013a4a --- /dev/null +++ b/ImageViewer/ImageViewer/Properties/Resources.Designer.cs @@ -0,0 +1,85 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ImageViewer.Properties.Resources.get_ResourceManager():System.Resources.ResourceM" + + "anager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ImageViewer.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ImageViewer.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Vo" + + "id")] + +namespace ImageViewer.Properties { + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if ((resourceMan == null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ImageViewer.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Bitmap BG { + get { + return ((System.Drawing.Bitmap)(ResourceManager.GetObject("BG", resourceCulture))); + } + } + + internal static System.Drawing.Bitmap DiaShow { + get { + return ((System.Drawing.Bitmap)(ResourceManager.GetObject("DiaShow", resourceCulture))); + } + } + + internal static System.Drawing.Bitmap ZoomIn { + get { + return ((System.Drawing.Bitmap)(ResourceManager.GetObject("ZoomIn", resourceCulture))); + } + } + } +} diff --git a/ImageViewer/ImageViewer/Properties/Resources.resx b/ImageViewer/ImageViewer/Properties/Resources.resx new file mode 100644 index 0000000..7f12ff0 --- /dev/null +++ b/ImageViewer/ImageViewer/Properties/Resources.resx @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\DiaShow.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\BG.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ZoomIn.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ImageViewer/ImageViewer/Properties/Settings.Designer.cs b/ImageViewer/ImageViewer/Properties/Settings.Designer.cs new file mode 100644 index 0000000..abb1f0d --- /dev/null +++ b/ImageViewer/ImageViewer/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "ImageViewer.Properties.Settings.get_Default():ImageViewer.Properties.Settings")] + +namespace ImageViewer.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/ImageViewer/ImageViewer/Properties/Settings.settings b/ImageViewer/ImageViewer/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/ImageViewer/ImageViewer/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ImageViewer/ImageViewer/TurnLeft.bmp b/ImageViewer/ImageViewer/TurnLeft.bmp new file mode 100644 index 0000000..c61a9b5 Binary files /dev/null and b/ImageViewer/ImageViewer/TurnLeft.bmp differ diff --git a/ImageViewer/ImageViewer/TurnRight.bmp b/ImageViewer/ImageViewer/TurnRight.bmp new file mode 100644 index 0000000..421a94e Binary files /dev/null and b/ImageViewer/ImageViewer/TurnRight.bmp differ diff --git a/ImageViewer/ImageViewer/ZoomIn.bmp b/ImageViewer/ImageViewer/ZoomIn.bmp new file mode 100644 index 0000000..8179565 Binary files /dev/null and b/ImageViewer/ImageViewer/ZoomIn.bmp differ diff --git a/ImageViewer/ImageViewer/ZoomOut.bmp b/ImageViewer/ImageViewer/ZoomOut.bmp new file mode 100644 index 0000000..e9e7f39 Binary files /dev/null and b/ImageViewer/ImageViewer/ZoomOut.bmp differ diff --git a/ImageViewer/ImageViewer/program.cs b/ImageViewer/ImageViewer/program.cs new file mode 100644 index 0000000..1f2d080 --- /dev/null +++ b/ImageViewer/ImageViewer/program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace ImageViewer +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Main()); + } + } +} \ No newline at end of file diff --git a/Install/Install.sln b/Install/Install.sln new file mode 100644 index 0000000..7cd8869 --- /dev/null +++ b/Install/Install.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Install", "Install\Install.csproj", "{9145CC30-DD47-4602-8100-EFE73689208B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9145CC30-DD47-4602-8100-EFE73689208B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9145CC30-DD47-4602-8100-EFE73689208B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9145CC30-DD47-4602-8100-EFE73689208B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9145CC30-DD47-4602-8100-EFE73689208B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Install/Install.suo b/Install/Install.suo new file mode 100644 index 0000000..b9950fc Binary files /dev/null and b/Install/Install.suo differ diff --git a/Install/Install/Install.csproj b/Install/Install/Install.csproj new file mode 100644 index 0000000..5a71cdd --- /dev/null +++ b/Install/Install/Install.csproj @@ -0,0 +1,94 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {9145CC30-DD47-4602-8100-EFE73689208B} + WinExe + Properties + Install + Install + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Main.cs + + + + + Main.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + ViwoTourMain.cs + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + Form + + + + + {F935DC20-1CF0-11D0-ADB9-00C04FD58A0B} + 1 + 0 + 0 + tlbimp + False + + + {00020430-0000-0000-C000-000000000046} + 2 + 0 + 0 + tlbimp + False + + + + \ No newline at end of file diff --git a/Install/Install/Install.csproj.user b/Install/Install/Install.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/Install/Install/Install.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/Install/Install/Main.Designer.cs b/Install/Install/Main.Designer.cs new file mode 100644 index 0000000..0666d1b --- /dev/null +++ b/Install/Install/Main.Designer.cs @@ -0,0 +1,166 @@ +namespace Install +{ + partial class Main + { + /// + /// 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() + { + this.lFile = new System.Windows.Forms.Label(); + this.lFolder = new System.Windows.Forms.Label(); + this.cbStartup = new System.Windows.Forms.CheckBox(); + this.cbDesktop = new System.Windows.Forms.CheckBox(); + this.cbStartmenu = new System.Windows.Forms.CheckBox(); + this.bFile = new System.Windows.Forms.Button(); + this.bFolder = new System.Windows.Forms.Button(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); + this.bStart = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // lFile + // + this.lFile.AutoSize = true; + this.lFile.Location = new System.Drawing.Point(12, 9); + this.lFile.Name = "lFile"; + this.lFile.Size = new System.Drawing.Size(22, 13); + this.lFile.TabIndex = 0; + this.lFile.Text = "File:"; + // + // lFolder + // + this.lFolder.AutoSize = true; + this.lFolder.Location = new System.Drawing.Point(12, 47); + this.lFolder.Name = "lFolder"; + this.lFolder.Size = new System.Drawing.Size(35, 13); + this.lFolder.TabIndex = 1; + this.lFolder.Text = "Folder:"; + // + // cbStartup + // + this.cbStartup.AutoSize = true; + this.cbStartup.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbStartup.Location = new System.Drawing.Point(12, 88); + this.cbStartup.Name = "cbStartup"; + this.cbStartup.Size = new System.Drawing.Size(91, 17); + this.cbStartup.TabIndex = 2; + this.cbStartup.Text = "Run on Startup"; + // + // cbDesktop + // + this.cbDesktop.AutoSize = true; + this.cbDesktop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbDesktop.Location = new System.Drawing.Point(12, 111); + this.cbDesktop.Name = "cbDesktop"; + this.cbDesktop.Size = new System.Drawing.Size(102, 17); + this.cbDesktop.TabIndex = 3; + this.cbDesktop.Text = "Desktop Shortcut"; + // + // cbStartmenu + // + this.cbStartmenu.AutoSize = true; + this.cbStartmenu.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbStartmenu.Location = new System.Drawing.Point(12, 134); + this.cbStartmenu.Name = "cbStartmenu"; + this.cbStartmenu.Size = new System.Drawing.Size(108, 17); + this.cbStartmenu.TabIndex = 4; + this.cbStartmenu.Text = "Show in Startmenu"; + // + // bFile + // + this.bFile.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bFile.Location = new System.Drawing.Point(12, 25); + this.bFile.Name = "bFile"; + this.bFile.Size = new System.Drawing.Size(85, 19); + this.bFile.TabIndex = 6; + this.bFile.Text = "Open *.exe"; + this.bFile.Click += new System.EventHandler(this.bFile_Click); + // + // bFolder + // + this.bFolder.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bFolder.Location = new System.Drawing.Point(12, 63); + this.bFolder.Name = "bFolder"; + this.bFolder.Size = new System.Drawing.Size(85, 19); + this.bFolder.TabIndex = 7; + this.bFolder.Text = "Open Folder"; + this.bFolder.Click += new System.EventHandler(this.bFolder_Click); + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + this.openFileDialog1.Filter = "Executables (*.exe)|*.exe|All files (*.*)|*.*"; + this.openFileDialog1.InitialDirectory = "/"; + // + // folderBrowserDialog1 + // + this.folderBrowserDialog1.Description = "Einen neuen Ordner erstellen und OK klicken"; + this.folderBrowserDialog1.RootFolder = System.Environment.SpecialFolder.ProgramFiles; + this.folderBrowserDialog1.SelectedPath = "folderBrowserDialog1"; + // + // bStart + // + this.bStart.Location = new System.Drawing.Point(187, 99); + this.bStart.Name = "bStart"; + this.bStart.Size = new System.Drawing.Size(81, 40); + this.bStart.TabIndex = 8; + this.bStart.Text = "Start"; + this.bStart.Click += new System.EventHandler(this.bStart_Click); + // + // Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(301, 157); + this.Controls.Add(this.bStart); + this.Controls.Add(this.bFolder); + this.Controls.Add(this.bFile); + this.Controls.Add(this.cbStartmenu); + this.Controls.Add(this.cbDesktop); + this.Controls.Add(this.cbStartup); + this.Controls.Add(this.lFolder); + this.Controls.Add(this.lFile); + this.Name = "Main"; + this.Text = "Install"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label lFile; + private System.Windows.Forms.Label lFolder; + private System.Windows.Forms.CheckBox cbStartup; + private System.Windows.Forms.CheckBox cbDesktop; + private System.Windows.Forms.CheckBox cbStartmenu; + private System.Windows.Forms.Button bFile; + private System.Windows.Forms.Button bFolder; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; + private System.Windows.Forms.Button bStart; + } +} + diff --git a/Install/Install/Main.cs b/Install/Install/Main.cs new file mode 100644 index 0000000..7424c5f --- /dev/null +++ b/Install/Install/Main.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.IO; +using IWshRuntimeLibrary; + +namespace Install +{ + public partial class Main : Form + { + public Main() + { + InitializeComponent(); + } + + private void bFolder_Click(object sender, EventArgs e) + { + if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) + { + lFolder.Text = "Folder: " + folderBrowserDialog1.SelectedPath; + } + } + + private void bFile_Click(object sender, EventArgs e) + { + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + lFile.Text = "File: " + openFileDialog1.FileName; + } + } + + private void bStart_Click(object sender, EventArgs e) + { + string filename = openFileDialog1.FileName.Split('\\')[openFileDialog1.FileName.Split('\\').Length - 1]; + string destinationpath = folderBrowserDialog1.SelectedPath + "\\" + filename; + System.IO.File.Copy(openFileDialog1.FileName, destinationpath); + + WshShell shell = new WshShell(); + if (cbStartup.Checked) + { + IWshShortcut autostart = (IWshShortcut)shell.CreateShortcut("C:\\neu.nlk"); + autostart.TargetPath = destinationpath; + autostart.Save(); + } + if (cbDesktop.Checked) + { + IWshShortcut desktop = (IWshShortcut)shell.CreateShortcut(Environment.SpecialFolder.DesktopDirectory.ToString() + "\\" + filename); + desktop.TargetPath = destinationpath; + desktop.Save(); + } + if (cbStartmenu.Checked) + { + IWshShortcut startmenu = (IWshShortcut)shell.CreateShortcut(Environment.SpecialFolder.Programs.ToString() + "\\" + filename); + startmenu.TargetPath = destinationpath; + startmenu.Save(); + } + } + } +} \ No newline at end of file diff --git a/Install/Install/Main.resx b/Install/Install/Main.resx new file mode 100644 index 0000000..a65074c --- /dev/null +++ b/Install/Install/Main.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 147, 17 + + \ No newline at end of file diff --git a/Install/Install/Program.cs b/Install/Install/Program.cs new file mode 100644 index 0000000..ce05a82 --- /dev/null +++ b/Install/Install/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Install +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Main()); + } + } +} \ No newline at end of file diff --git a/Install/Install/Properties/AssemblyInfo.cs b/Install/Install/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..ececaa3 --- /dev/null +++ b/Install/Install/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Install")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Install")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("38337419-b1d3-4378-b34e-8dc6927eb5ea")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Install/Install/Properties/Resources.Designer.cs b/Install/Install/Properties/Resources.Designer.cs new file mode 100644 index 0000000..72fa4be --- /dev/null +++ b/Install/Install/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Install.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Install.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Install.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace Install.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Install.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Install/Install/Properties/Resources.resx b/Install/Install/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/Install/Install/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Install/Install/Properties/Settings.Designer.cs b/Install/Install/Properties/Settings.Designer.cs new file mode 100644 index 0000000..c063b7c --- /dev/null +++ b/Install/Install/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Install.Properties.Settings.get_Default():Install.Properties.Settings")] + +namespace Install.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Install/Install/Properties/Settings.settings b/Install/Install/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/Install/Install/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Install/Install/ViwoTourMain.cs b/Install/Install/ViwoTourMain.cs new file mode 100644 index 0000000..a6d764d --- /dev/null +++ b/Install/Install/ViwoTourMain.cs @@ -0,0 +1,1044 @@ +/* + * Created by SharpDevelop. + * User: Johannes Schauer + * Date: 08.11.2004 + * Time: 21:13 + * + */ +using System; +using System.Collections; +using System.Data; +using System.Windows.Forms; + +using System.Threading; + + +namespace ViwoTour +{ + public class ViwoTourMain : System.Windows.Forms.Form + { + private System.Windows.Forms.TextBox scopeTextBox; + private System.Windows.Forms.Label Panel4Label3; + private System.Windows.Forms.ProgressBar ProgressTProgressBar; + private System.Windows.Forms.GroupBox Panel4GroupBox1; + private System.Windows.Forms.Label Panel5Label0; + private System.Windows.Forms.Label Panel5Label1; + private System.Windows.Forms.Button Panel5SelectButton; + private System.Windows.Forms.Label Panel5Label3; + private System.Windows.Forms.Label Panel5Label4; + private System.Windows.Forms.Label Panel5Label5; + private System.Windows.Forms.Label Panel5Label7; + private System.Windows.Forms.Label Panel5Label8; + private System.Windows.Forms.TextBox Panel2TextBox1; + private System.Windows.Forms.Button NextButton; + private System.Windows.Forms.Button Panel1StandardButton; + private System.Windows.Forms.TextBox DataSourceTextBox; + private System.Windows.Forms.TextBox InitialCatalogTextBox; + private System.Windows.Forms.Label Panel0Label1; + private System.Windows.Forms.GroupBox Panel4GroupBox2; + private System.Windows.Forms.Label Panel0Label2; + private System.Windows.Forms.Panel Panel3; + private System.Windows.Forms.Panel Panel2; + private System.Windows.Forms.Panel Panel1; + private System.Windows.Forms.Panel Panel0; + private System.Windows.Forms.Panel Panel6; + private System.Windows.Forms.Panel Panel5; + private System.Windows.Forms.Panel Panel4; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox maxTouringTextBox; + private System.Windows.Forms.Label Panel2Label1; + private System.Windows.Forms.Label Panel2Label0; + private System.Windows.Forms.Label Panel3Label0; + private System.Windows.Forms.Button AbortButton; + private System.Windows.Forms.Button Panel4StandardButton; + private System.Windows.Forms.Button Panel5SearchButton; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label Panel4Label1; + private System.Windows.Forms.GroupBox Panel1GroupBox1; + private System.Windows.Forms.Label Panel1Label4; + private System.Windows.Forms.Label Panel4Label2; + private System.Windows.Forms.GroupBox LineBottom; + private System.Windows.Forms.Label Panel4Label4; + private System.Windows.Forms.Label Panel1Label0; + private System.Windows.Forms.TextBox minWaitingTextBox; + private System.Windows.Forms.Label Panel1Label2; + private System.Windows.Forms.Label Panel1Label3; + private System.Windows.Forms.ProgressBar ProgressSProgressBar; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label Panel4Label5; + private System.Windows.Forms.Button BackButton; + private System.Windows.Forms.Label Panel6Label1; + private System.Windows.Forms.Label Panel6Label0; + private System.Windows.Forms.TextBox maxWaitingTextBox; + private System.Windows.Forms.Label Panel4Label0; + private System.Windows.Forms.Label Panel3Label1; + private System.Windows.Forms.ListBox StationsListBox; + private System.Windows.Forms.TextBox Panel6TextBox1; + private System.Windows.Forms.Button Panel2MakeButton; + private System.Windows.Forms.Label Panel1Label1; + + protected ViwoTour viwoTour; + + int ActualStep = 0; + + public ViwoTourMain() + { + viwoTour=new ViwoTour(); + + InitializeComponent(); + viwoTour.search_TProgress+=new ProgressHandler(Search_TProgress); + viwoTour.select_TProgress+=new ProgressHandler(Select_TProgress); + + minWaitingTextBox.Text=Properties.MinWaiting.ToString(); + maxWaitingTextBox.Text=Properties.MaxWaiting.ToString(); + maxTouringTextBox.Text=Properties.MaxTouring.ToString(); + scopeTextBox.Text=Properties.Scope.ToString(); + + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ViwoTourMain)); + this.Panel1Label1 = new System.Windows.Forms.Label(); + this.Panel2MakeButton = new System.Windows.Forms.Button(); + this.Panel6TextBox1 = new System.Windows.Forms.TextBox(); + this.StationsListBox = new System.Windows.Forms.ListBox(); + this.Panel3Label1 = new System.Windows.Forms.Label(); + this.Panel4Label0 = new System.Windows.Forms.Label(); + this.maxWaitingTextBox = new System.Windows.Forms.TextBox(); + this.Panel6Label0 = new System.Windows.Forms.Label(); + this.Panel6Label1 = new System.Windows.Forms.Label(); + this.BackButton = new System.Windows.Forms.Button(); + this.Panel4Label5 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.ProgressSProgressBar = new System.Windows.Forms.ProgressBar(); + this.Panel1Label3 = new System.Windows.Forms.Label(); + this.Panel1Label2 = new System.Windows.Forms.Label(); + this.minWaitingTextBox = new System.Windows.Forms.TextBox(); + this.Panel1Label0 = new System.Windows.Forms.Label(); + this.Panel4Label4 = new System.Windows.Forms.Label(); + this.LineBottom = new System.Windows.Forms.GroupBox(); + this.Panel4Label2 = new System.Windows.Forms.Label(); + this.Panel1Label4 = new System.Windows.Forms.Label(); + this.Panel1GroupBox1 = new System.Windows.Forms.GroupBox(); + this.Panel1StandardButton = new System.Windows.Forms.Button(); + this.DataSourceTextBox = new System.Windows.Forms.TextBox(); + this.InitialCatalogTextBox = new System.Windows.Forms.TextBox(); + this.Panel4Label1 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.Panel5SearchButton = new System.Windows.Forms.Button(); + this.Panel4StandardButton = new System.Windows.Forms.Button(); + this.AbortButton = new System.Windows.Forms.Button(); + this.Panel3Label0 = new System.Windows.Forms.Label(); + this.Panel2Label0 = new System.Windows.Forms.Label(); + this.Panel2Label1 = new System.Windows.Forms.Label(); + this.maxTouringTextBox = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.Panel4 = new System.Windows.Forms.Panel(); + this.scopeTextBox = new System.Windows.Forms.TextBox(); + this.Panel4GroupBox2 = new System.Windows.Forms.GroupBox(); + this.Panel4GroupBox1 = new System.Windows.Forms.GroupBox(); + this.Panel4Label3 = new System.Windows.Forms.Label(); + this.Panel5 = new System.Windows.Forms.Panel(); + this.Panel5Label8 = new System.Windows.Forms.Label(); + this.Panel5Label7 = new System.Windows.Forms.Label(); + this.Panel5Label5 = new System.Windows.Forms.Label(); + this.Panel5Label4 = new System.Windows.Forms.Label(); + this.Panel5Label3 = new System.Windows.Forms.Label(); + this.Panel5SelectButton = new System.Windows.Forms.Button(); + this.ProgressTProgressBar = new System.Windows.Forms.ProgressBar(); + this.Panel5Label1 = new System.Windows.Forms.Label(); + this.Panel5Label0 = new System.Windows.Forms.Label(); + this.Panel6 = new System.Windows.Forms.Panel(); + this.Panel0 = new System.Windows.Forms.Panel(); + this.Panel0Label2 = new System.Windows.Forms.Label(); + this.Panel0Label1 = new System.Windows.Forms.Label(); + this.Panel1 = new System.Windows.Forms.Panel(); + this.Panel2 = new System.Windows.Forms.Panel(); + this.Panel2TextBox1 = new System.Windows.Forms.TextBox(); + this.Panel3 = new System.Windows.Forms.Panel(); + this.NextButton = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.Panel1GroupBox1.SuspendLayout(); + this.Panel4.SuspendLayout(); + this.Panel4GroupBox2.SuspendLayout(); + this.Panel4GroupBox1.SuspendLayout(); + this.Panel5.SuspendLayout(); + this.Panel6.SuspendLayout(); + this.Panel0.SuspendLayout(); + this.Panel1.SuspendLayout(); + this.Panel2.SuspendLayout(); + this.Panel3.SuspendLayout(); + this.SuspendLayout(); + // + // Panel1Label1 + // + this.Panel1Label1.Location = new System.Drawing.Point(16, 45); + this.Panel1Label1.Name = "Panel1Label1"; + this.Panel1Label1.Size = new System.Drawing.Size(296, 29); + this.Panel1Label1.TabIndex = 0; + this.Panel1Label1.Text = "Geben Sie die Daten fr die Verbindung zur entsprechenden SQL Datenbank ein."; + // + // Panel2MakeButton + // + this.Panel2MakeButton.Location = new System.Drawing.Point(16, 89); + this.Panel2MakeButton.Name = "Panel2MakeButton"; + this.Panel2MakeButton.Size = new System.Drawing.Size(128, 22); + this.Panel2MakeButton.TabIndex = 4; + this.Panel2MakeButton.Text = "Tabellen erstellen"; + this.Panel2MakeButton.Click += new System.EventHandler(this.Panel2MakeButtonClick); + // + // Panel6TextBox1 + // + this.Panel6TextBox1.Location = new System.Drawing.Point(16, 74); + this.Panel6TextBox1.Multiline = true; + this.Panel6TextBox1.Name = "Panel6TextBox1"; + this.Panel6TextBox1.Size = new System.Drawing.Size(296, 201); + this.Panel6TextBox1.TabIndex = 2; + this.Panel6TextBox1.Text = resources.GetString("Panel6TextBox1.Text"); + // + // StationsListBox + // + this.StationsListBox.FormattingEnabled = true; + this.StationsListBox.Location = new System.Drawing.Point(16, 74); + this.StationsListBox.Name = "StationsListBox"; + this.StationsListBox.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple; + this.StationsListBox.Size = new System.Drawing.Size(296, 186); + this.StationsListBox.Sorted = true; + this.StationsListBox.TabIndex = 0; + // + // Panel3Label1 + // + this.Panel3Label1.Location = new System.Drawing.Point(16, 45); + this.Panel3Label1.Name = "Panel3Label1"; + this.Panel3Label1.Size = new System.Drawing.Size(288, 14); + this.Panel3Label1.TabIndex = 2; + this.Panel3Label1.Text = "Whlen Sie die gewnschten Stationen aus."; + // + // Panel4Label0 + // + this.Panel4Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Panel4Label0.Location = new System.Drawing.Point(16, 15); + this.Panel4Label0.Name = "Panel4Label0"; + this.Panel4Label0.Size = new System.Drawing.Size(224, 15); + this.Panel4Label0.TabIndex = 0; + this.Panel4Label0.Text = "Schritt Vier"; + // + // maxWaitingTextBox + // + this.maxWaitingTextBox.Location = new System.Drawing.Point(88, 45); + this.maxWaitingTextBox.Name = "maxWaitingTextBox"; + this.maxWaitingTextBox.Size = new System.Drawing.Size(192, 20); + this.maxWaitingTextBox.TabIndex = 1; + this.maxWaitingTextBox.Text = "01:00:00"; + // + // Panel6Label0 + // + this.Panel6Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Panel6Label0.Location = new System.Drawing.Point(16, 15); + this.Panel6Label0.Name = "Panel6Label0"; + this.Panel6Label0.Size = new System.Drawing.Size(152, 15); + this.Panel6Label0.TabIndex = 0; + this.Panel6Label0.Text = "Schritt Sechs"; + // + // Panel6Label1 + // + this.Panel6Label1.Location = new System.Drawing.Point(16, 45); + this.Panel6Label1.Name = "Panel6Label1"; + this.Panel6Label1.Size = new System.Drawing.Size(232, 14); + this.Panel6Label1.TabIndex = 1; + this.Panel6Label1.Text = "Hier die Auswertung:"; + // + // BackButton + // + this.BackButton.Enabled = false; + this.BackButton.Location = new System.Drawing.Point(232, 297); + this.BackButton.Name = "BackButton"; + this.BackButton.Size = new System.Drawing.Size(80, 22); + this.BackButton.TabIndex = 2; + this.BackButton.Text = "< Zurck"; + this.BackButton.Click += new System.EventHandler(this.BackButtonClick); + // + // Panel4Label5 + // + this.Panel4Label5.Location = new System.Drawing.Point(24, 215); + this.Panel4Label5.Name = "Panel4Label5"; + this.Panel4Label5.Size = new System.Drawing.Size(72, 15); + this.Panel4Label5.TabIndex = 5; + this.Panel4Label5.Text = "Sichtweite:"; + this.Panel4Label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.InitialImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.InitialImage"))); + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(164, 292); + this.pictureBox1.TabIndex = 8; + this.pictureBox1.TabStop = false; + // + // ProgressSProgressBar + // + this.ProgressSProgressBar.Location = new System.Drawing.Point(16, 119); + this.ProgressSProgressBar.Name = "ProgressSProgressBar"; + this.ProgressSProgressBar.Size = new System.Drawing.Size(296, 15); + this.ProgressSProgressBar.TabIndex = 4; + // + // Panel1Label3 + // + this.Panel1Label3.Location = new System.Drawing.Point(16, 67); + this.Panel1Label3.Name = "Panel1Label3"; + this.Panel1Label3.Size = new System.Drawing.Size(64, 15); + this.Panel1Label3.TabIndex = 3; + this.Panel1Label3.Text = "Host:"; + this.Panel1Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // Panel1Label2 + // + this.Panel1Label2.Location = new System.Drawing.Point(16, 22); + this.Panel1Label2.Name = "Panel1Label2"; + this.Panel1Label2.Size = new System.Drawing.Size(272, 45); + this.Panel1Label2.TabIndex = 2; + this.Panel1Label2.Text = "Geben Sie den Namen oder die IP des Datenbank-Rechners ein (z.B.: localhost) und " + + "den Namen der Datenbank."; + // + // minWaitingTextBox + // + this.minWaitingTextBox.Location = new System.Drawing.Point(88, 15); + this.minWaitingTextBox.Name = "minWaitingTextBox"; + this.minWaitingTextBox.Size = new System.Drawing.Size(192, 20); + this.minWaitingTextBox.TabIndex = 0; + this.minWaitingTextBox.Text = "00:05:00"; + // + // Panel1Label0 + // + this.Panel1Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Panel1Label0.Location = new System.Drawing.Point(16, 15); + this.Panel1Label0.Name = "Panel1Label0"; + this.Panel1Label0.Size = new System.Drawing.Size(100, 15); + this.Panel1Label0.TabIndex = 4; + this.Panel1Label0.Text = "Schritt Eins"; + // + // Panel4Label4 + // + this.Panel4Label4.Location = new System.Drawing.Point(8, 16); + this.Panel4Label4.Name = "Panel4Label4"; + this.Panel4Label4.Size = new System.Drawing.Size(72, 15); + this.Panel4Label4.TabIndex = 1; + this.Panel4Label4.Text = "Maximum:"; + this.Panel4Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // LineBottom + // + this.LineBottom.Location = new System.Drawing.Point(0, 292); + this.LineBottom.Name = "LineBottom"; + this.LineBottom.Size = new System.Drawing.Size(498, 2); + this.LineBottom.TabIndex = 10; + this.LineBottom.TabStop = false; + // + // Panel4Label2 + // + this.Panel4Label2.Location = new System.Drawing.Point(16, 15); + this.Panel4Label2.Name = "Panel4Label2"; + this.Panel4Label2.Size = new System.Drawing.Size(64, 15); + this.Panel4Label2.TabIndex = 2; + this.Panel4Label2.Text = "Minimum:"; + this.Panel4Label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // Panel1Label4 + // + this.Panel1Label4.Location = new System.Drawing.Point(16, 97); + this.Panel1Label4.Name = "Panel1Label4"; + this.Panel1Label4.Size = new System.Drawing.Size(64, 14); + this.Panel1Label4.TabIndex = 5; + this.Panel1Label4.Text = "Datenbank:"; + this.Panel1Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // Panel1GroupBox1 + // + this.Panel1GroupBox1.Controls.Add(this.Panel1StandardButton); + this.Panel1GroupBox1.Controls.Add(this.DataSourceTextBox); + this.Panel1GroupBox1.Controls.Add(this.InitialCatalogTextBox); + this.Panel1GroupBox1.Controls.Add(this.Panel1Label2); + this.Panel1GroupBox1.Controls.Add(this.Panel1Label3); + this.Panel1GroupBox1.Controls.Add(this.Panel1Label4); + this.Panel1GroupBox1.Location = new System.Drawing.Point(16, 89); + this.Panel1GroupBox1.Name = "Panel1GroupBox1"; + this.Panel1GroupBox1.Size = new System.Drawing.Size(296, 164); + this.Panel1GroupBox1.TabIndex = 3; + this.Panel1GroupBox1.TabStop = false; + this.Panel1GroupBox1.Text = "Datenquelle"; + // + // Panel1StandardButton + // + this.Panel1StandardButton.Location = new System.Drawing.Point(64, 126); + this.Panel1StandardButton.Name = "Panel1StandardButton"; + this.Panel1StandardButton.Size = new System.Drawing.Size(168, 23); + this.Panel1StandardButton.TabIndex = 6; + this.Panel1StandardButton.Text = "Auf Standart zurcksetzen"; + this.Panel1StandardButton.Click += new System.EventHandler(this.Panel1StandardButtonClick); + // + // DataSourceTextBox + // + this.DataSourceTextBox.Location = new System.Drawing.Point(88, 67); + this.DataSourceTextBox.Name = "DataSourceTextBox"; + this.DataSourceTextBox.Size = new System.Drawing.Size(192, 20); + this.DataSourceTextBox.TabIndex = 0; + this.DataSourceTextBox.Text = "localhost"; + // + // InitialCatalogTextBox + // + this.InitialCatalogTextBox.Location = new System.Drawing.Point(88, 97); + this.InitialCatalogTextBox.Name = "InitialCatalogTextBox"; + this.InitialCatalogTextBox.Size = new System.Drawing.Size(192, 20); + this.InitialCatalogTextBox.TabIndex = 4; + this.InitialCatalogTextBox.Text = "viwotour"; + // + // Panel4Label1 + // + this.Panel4Label1.Location = new System.Drawing.Point(16, 45); + this.Panel4Label1.Name = "Panel4Label1"; + this.Panel4Label1.Size = new System.Drawing.Size(272, 14); + this.Panel4Label1.TabIndex = 1; + this.Panel4Label1.Text = "Geben Sie hier Ihre gewnschten Einstellungen ein."; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(0, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(100, 23); + this.label3.TabIndex = 0; + // + // Panel5SearchButton + // + this.Panel5SearchButton.Location = new System.Drawing.Point(16, 67); + this.Panel5SearchButton.Name = "Panel5SearchButton"; + this.Panel5SearchButton.Size = new System.Drawing.Size(120, 22); + this.Panel5SearchButton.TabIndex = 2; + this.Panel5SearchButton.Text = "Suchen"; + this.Panel5SearchButton.Click += new System.EventHandler(this.Panel5SearchButtonClick); + // + // Panel4StandardButton + // + this.Panel4StandardButton.Location = new System.Drawing.Point(144, 245); + this.Panel4StandardButton.Name = "Panel4StandardButton"; + this.Panel4StandardButton.Size = new System.Drawing.Size(168, 22); + this.Panel4StandardButton.TabIndex = 6; + this.Panel4StandardButton.Text = "Auf Standart zurcksetzen"; + this.Panel4StandardButton.Click += new System.EventHandler(this.Panel5StandardButtonClick); + // + // AbortButton + // + this.AbortButton.Location = new System.Drawing.Point(408, 297); + this.AbortButton.Name = "AbortButton"; + this.AbortButton.Size = new System.Drawing.Size(80, 22); + this.AbortButton.TabIndex = 3; + this.AbortButton.Text = "Abbrechen"; + this.AbortButton.Click += new System.EventHandler(this.AbortButtonClick); + // + // Panel3Label0 + // + this.Panel3Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Panel3Label0.Location = new System.Drawing.Point(16, 15); + this.Panel3Label0.Name = "Panel3Label0"; + this.Panel3Label0.Size = new System.Drawing.Size(184, 15); + this.Panel3Label0.TabIndex = 1; + this.Panel3Label0.Text = "Schritt Drei"; + // + // Panel2Label0 + // + this.Panel2Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Panel2Label0.Location = new System.Drawing.Point(16, 15); + this.Panel2Label0.Name = "Panel2Label0"; + this.Panel2Label0.Size = new System.Drawing.Size(184, 15); + this.Panel2Label0.TabIndex = 3; + this.Panel2Label0.Text = "Schritt Zwei"; + // + // Panel2Label1 + // + this.Panel2Label1.Location = new System.Drawing.Point(16, 45); + this.Panel2Label1.Name = "Panel2Label1"; + this.Panel2Label1.Size = new System.Drawing.Size(288, 37); + this.Panel2Label1.TabIndex = 0; + this.Panel2Label1.Text = "Klicken Sie auf Tabellen erstellen um die Verbindung mit der Datenbank herzustell" + + "en und die Tabellen vorzubereiten."; + // + // maxTouringTextBox + // + this.maxTouringTextBox.Location = new System.Drawing.Point(88, 15); + this.maxTouringTextBox.Name = "maxTouringTextBox"; + this.maxTouringTextBox.Size = new System.Drawing.Size(192, 20); + this.maxTouringTextBox.TabIndex = 0; + this.maxTouringTextBox.Text = "10:00:00"; + // + // label4 + // + this.label4.Location = new System.Drawing.Point(48, 24); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(128, 24); + this.label4.TabIndex = 0; + this.label4.Text = "label4"; + // + // Panel4 + // + this.Panel4.Controls.Add(this.scopeTextBox); + this.Panel4.Controls.Add(this.Panel4StandardButton); + this.Panel4.Controls.Add(this.Panel4Label5); + this.Panel4.Controls.Add(this.Panel4GroupBox2); + this.Panel4.Controls.Add(this.Panel4GroupBox1); + this.Panel4.Controls.Add(this.Panel4Label1); + this.Panel4.Controls.Add(this.Panel4Label0); + this.Panel4.Location = new System.Drawing.Point(168, 7); + this.Panel4.Name = "Panel4"; + this.Panel4.Size = new System.Drawing.Size(320, 283); + this.Panel4.TabIndex = 9; + this.Panel4.Visible = false; + // + // scopeTextBox + // + this.scopeTextBox.Location = new System.Drawing.Point(104, 215); + this.scopeTextBox.Name = "scopeTextBox"; + this.scopeTextBox.Size = new System.Drawing.Size(192, 20); + this.scopeTextBox.TabIndex = 7; + // + // Panel4GroupBox2 + // + this.Panel4GroupBox2.Controls.Add(this.Panel4Label4); + this.Panel4GroupBox2.Controls.Add(this.maxTouringTextBox); + this.Panel4GroupBox2.Location = new System.Drawing.Point(16, 156); + this.Panel4GroupBox2.Name = "Panel4GroupBox2"; + this.Panel4GroupBox2.Size = new System.Drawing.Size(296, 45); + this.Panel4GroupBox2.TabIndex = 3; + this.Panel4GroupBox2.TabStop = false; + this.Panel4GroupBox2.Text = "Tourenlnge"; + // + // Panel4GroupBox1 + // + this.Panel4GroupBox1.Controls.Add(this.Panel4Label3); + this.Panel4GroupBox1.Controls.Add(this.Panel4Label2); + this.Panel4GroupBox1.Controls.Add(this.maxWaitingTextBox); + this.Panel4GroupBox1.Controls.Add(this.minWaitingTextBox); + this.Panel4GroupBox1.Location = new System.Drawing.Point(16, 67); + this.Panel4GroupBox1.Name = "Panel4GroupBox1"; + this.Panel4GroupBox1.Size = new System.Drawing.Size(296, 74); + this.Panel4GroupBox1.TabIndex = 2; + this.Panel4GroupBox1.TabStop = false; + this.Panel4GroupBox1.Text = "Wartezeit"; + // + // Panel4Label3 + // + this.Panel4Label3.Location = new System.Drawing.Point(16, 45); + this.Panel4Label3.Name = "Panel4Label3"; + this.Panel4Label3.Size = new System.Drawing.Size(64, 14); + this.Panel4Label3.TabIndex = 3; + this.Panel4Label3.Text = "Maximum:"; + this.Panel4Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // Panel5 + // + this.Panel5.Controls.Add(this.Panel5Label8); + this.Panel5.Controls.Add(this.Panel5Label7); + this.Panel5.Controls.Add(this.Panel5Label5); + this.Panel5.Controls.Add(this.Panel5Label4); + this.Panel5.Controls.Add(this.Panel5Label3); + this.Panel5.Controls.Add(this.Panel5SelectButton); + this.Panel5.Controls.Add(this.ProgressTProgressBar); + this.Panel5.Controls.Add(this.ProgressSProgressBar); + this.Panel5.Controls.Add(this.Panel5SearchButton); + this.Panel5.Controls.Add(this.Panel5Label1); + this.Panel5.Controls.Add(this.Panel5Label0); + this.Panel5.Location = new System.Drawing.Point(168, 7); + this.Panel5.Name = "Panel5"; + this.Panel5.Size = new System.Drawing.Size(320, 283); + this.Panel5.TabIndex = 11; + this.Panel5.Visible = false; + // + // Panel5Label8 + // + this.Panel5Label8.Location = new System.Drawing.Point(264, 208); + this.Panel5Label8.Name = "Panel5Label8"; + this.Panel5Label8.Size = new System.Drawing.Size(48, 15); + this.Panel5Label8.TabIndex = 13; + // + // Panel5Label7 + // + this.Panel5Label7.Location = new System.Drawing.Point(264, 97); + this.Panel5Label7.Name = "Panel5Label7"; + this.Panel5Label7.Size = new System.Drawing.Size(48, 14); + this.Panel5Label7.TabIndex = 12; + // + // Panel5Label5 + // + this.Panel5Label5.Location = new System.Drawing.Point(16, 208); + this.Panel5Label5.Name = "Panel5Label5"; + this.Panel5Label5.Size = new System.Drawing.Size(128, 15); + this.Panel5Label5.TabIndex = 10; + this.Panel5Label5.Text = "Auswhlen:"; + // + // Panel5Label4 + // + this.Panel5Label4.Location = new System.Drawing.Point(16, 156); + this.Panel5Label4.Name = "Panel5Label4"; + this.Panel5Label4.Size = new System.Drawing.Size(144, 15); + this.Panel5Label4.TabIndex = 9; + this.Panel5Label4.Text = "Klicken Sie auf Auswhlen."; + // + // Panel5Label3 + // + this.Panel5Label3.Location = new System.Drawing.Point(16, 97); + this.Panel5Label3.Name = "Panel5Label3"; + this.Panel5Label3.Size = new System.Drawing.Size(104, 14); + this.Panel5Label3.TabIndex = 8; + this.Panel5Label3.Text = "Suchen:"; + // + // Panel5SelectButton + // + this.Panel5SelectButton.Enabled = false; + this.Panel5SelectButton.Location = new System.Drawing.Point(16, 178); + this.Panel5SelectButton.Name = "Panel5SelectButton"; + this.Panel5SelectButton.Size = new System.Drawing.Size(120, 23); + this.Panel5SelectButton.TabIndex = 6; + this.Panel5SelectButton.Text = "Auswhlen"; + this.Panel5SelectButton.Click += new System.EventHandler(this.Panel5SelectButtonClick); + // + // ProgressTProgressBar + // + this.ProgressTProgressBar.Location = new System.Drawing.Point(16, 230); + this.ProgressTProgressBar.Name = "ProgressTProgressBar"; + this.ProgressTProgressBar.Size = new System.Drawing.Size(296, 15); + this.ProgressTProgressBar.TabIndex = 5; + // + // Panel5Label1 + // + this.Panel5Label1.Location = new System.Drawing.Point(16, 45); + this.Panel5Label1.Name = "Panel5Label1"; + this.Panel5Label1.Size = new System.Drawing.Size(248, 14); + this.Panel5Label1.TabIndex = 1; + this.Panel5Label1.Text = "Klicken Sie auf Suchen."; + // + // Panel5Label0 + // + this.Panel5Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Panel5Label0.Location = new System.Drawing.Point(16, 15); + this.Panel5Label0.Name = "Panel5Label0"; + this.Panel5Label0.Size = new System.Drawing.Size(192, 15); + this.Panel5Label0.TabIndex = 0; + this.Panel5Label0.Text = "Schritt Fnf"; + // + // Panel6 + // + this.Panel6.Controls.Add(this.Panel6TextBox1); + this.Panel6.Controls.Add(this.Panel6Label1); + this.Panel6.Controls.Add(this.Panel6Label0); + this.Panel6.Location = new System.Drawing.Point(168, 7); + this.Panel6.Name = "Panel6"; + this.Panel6.Size = new System.Drawing.Size(320, 283); + this.Panel6.TabIndex = 12; + this.Panel6.Visible = false; + // + // Panel0 + // + this.Panel0.BackColor = System.Drawing.SystemColors.Control; + this.Panel0.Controls.Add(this.Panel0Label2); + this.Panel0.Controls.Add(this.Panel0Label1); + this.Panel0.Location = new System.Drawing.Point(168, 7); + this.Panel0.Name = "Panel0"; + this.Panel0.Size = new System.Drawing.Size(320, 283); + this.Panel0.TabIndex = 1; + // + // Panel0Label2 + // + this.Panel0Label2.Location = new System.Drawing.Point(16, 59); + this.Panel0Label2.Name = "Panel0Label2"; + this.Panel0Label2.Size = new System.Drawing.Size(240, 30); + this.Panel0Label2.TabIndex = 1; + this.Panel0Label2.Text = "Um fortzufahren klicken Sie bitte auf Weiter."; + // + // Panel0Label1 + // + this.Panel0Label1.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Panel0Label1.Location = new System.Drawing.Point(16, 15); + this.Panel0Label1.Name = "Panel0Label1"; + this.Panel0Label1.Size = new System.Drawing.Size(296, 22); + this.Panel0Label1.TabIndex = 0; + this.Panel0Label1.Text = "Willkommen bei ViwoTour"; + // + // Panel1 + // + this.Panel1.Controls.Add(this.Panel1Label0); + this.Panel1.Controls.Add(this.Panel1GroupBox1); + this.Panel1.Controls.Add(this.Panel1Label1); + this.Panel1.Location = new System.Drawing.Point(168, 7); + this.Panel1.Name = "Panel1"; + this.Panel1.Size = new System.Drawing.Size(320, 283); + this.Panel1.TabIndex = 4; + this.Panel1.Visible = false; + // + // Panel2 + // + this.Panel2.Controls.Add(this.Panel2MakeButton); + this.Panel2.Controls.Add(this.Panel2Label0); + this.Panel2.Controls.Add(this.Panel2TextBox1); + this.Panel2.Controls.Add(this.Panel2Label1); + this.Panel2.Location = new System.Drawing.Point(168, 7); + this.Panel2.Name = "Panel2"; + this.Panel2.Size = new System.Drawing.Size(320, 283); + this.Panel2.TabIndex = 6; + this.Panel2.Visible = false; + // + // Panel2TextBox1 + // + this.Panel2TextBox1.Location = new System.Drawing.Point(16, 126); + this.Panel2TextBox1.Multiline = true; + this.Panel2TextBox1.Name = "Panel2TextBox1"; + this.Panel2TextBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.Panel2TextBox1.Size = new System.Drawing.Size(296, 141); + this.Panel2TextBox1.TabIndex = 1; + this.Panel2TextBox1.Text = "Verbinde mit viwotour auf localhost... Fertig\r\nVorbereiten... Fertig\r\nLaden... Fe" + + "rtig"; + // + // Panel3 + // + this.Panel3.Controls.Add(this.Panel3Label1); + this.Panel3.Controls.Add(this.Panel3Label0); + this.Panel3.Controls.Add(this.StationsListBox); + this.Panel3.Location = new System.Drawing.Point(168, 7); + this.Panel3.Name = "Panel3"; + this.Panel3.Size = new System.Drawing.Size(320, 283); + this.Panel3.TabIndex = 7; + this.Panel3.Visible = false; + // + // NextButton + // + this.NextButton.Location = new System.Drawing.Point(312, 297); + this.NextButton.Name = "NextButton"; + this.NextButton.Size = new System.Drawing.Size(80, 22); + this.NextButton.TabIndex = 1; + this.NextButton.Text = "Weiter >"; + this.NextButton.Click += new System.EventHandler(this.NextButtonClick); + // + // ViwoTourMain + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(496, 351); + this.Controls.Add(this.LineBottom); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.BackButton); + this.Controls.Add(this.NextButton); + this.Controls.Add(this.AbortButton); + this.Controls.Add(this.Panel6); + this.Controls.Add(this.Panel0); + this.Controls.Add(this.Panel1); + this.Controls.Add(this.Panel5); + this.Controls.Add(this.Panel4); + this.Controls.Add(this.Panel3); + this.Controls.Add(this.Panel2); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "ViwoTourMain"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "ViwoTour"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.Panel1GroupBox1.ResumeLayout(false); + this.Panel1GroupBox1.PerformLayout(); + this.Panel4.ResumeLayout(false); + this.Panel4.PerformLayout(); + this.Panel4GroupBox2.ResumeLayout(false); + this.Panel4GroupBox2.PerformLayout(); + this.Panel4GroupBox1.ResumeLayout(false); + this.Panel4GroupBox1.PerformLayout(); + this.Panel5.ResumeLayout(false); + this.Panel6.ResumeLayout(false); + this.Panel6.PerformLayout(); + this.Panel0.ResumeLayout(false); + this.Panel1.ResumeLayout(false); + this.Panel2.ResumeLayout(false); + this.Panel2.PerformLayout(); + this.Panel3.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + void AbortButtonClick(object sender, System.EventArgs e) + { + this.Close(); + } + + void NextButtonClick(object sender, System.EventArgs e) + { + switch(ActualStep) + { + case 0: + { + Panel0.Visible = false; + Panel1.Visible = true; + BackButton.Enabled = true; + ActualStep++; + break; + } + case 1: + { + Panel1.Visible = false; + Panel2.Visible = true; + NextButton.Enabled = false; + ActualStep++; + break; + } + case 2: + { + Panel2.Visible = false; + Panel3.Visible = true; + ActualStep++; + break; + } + case 3: + { + Panel3.Visible = false; + Panel4.Visible = true; + ActualStep++; + break; + } + case 4: + { + Panel4.Visible = false; + Panel5.Visible = true; + ActualStep++; + break; + } + case 5: + { + Panel5.Visible = false; + Panel6.Visible = true; + NextButton.Enabled = false; + ActualStep++; + break; + } + } + } + + + void BackButtonClick(object sender, System.EventArgs e) + { + switch(ActualStep) + { + case 1: + { + Panel1.Visible = false; + Panel0.Visible = true; + BackButton.Enabled = false; + ActualStep--; + break; + } + case 2: + { + Panel2.Visible = false; + Panel1.Visible = true; + NextButton.Enabled = true; + ActualStep--; + break; + } + case 3: + { + Panel3.Visible = false; + Panel2.Visible = true; + NextButton.Enabled = false; + ActualStep--; + break; + } + case 4: + { + Panel4.Visible = false; + Panel3.Visible = true; + ActualStep--; + break; + } + case 5: + { + Panel5.Visible = false; + Panel4.Visible = true; + ActualStep--; + break; + } + case 6: + { + Panel6.Visible = false; + Panel5.Visible = true; + NextButton.Enabled = true; + ActualStep--; + break; + } + } + } + + void Panel1StandardButtonClick(object sender, System.EventArgs e) + { + DataSourceTextBox.Text = "localhost"; + InitialCatalogTextBox.Text = "viwotour"; + } + + void Panel2MakeButtonClick(object sender, System.EventArgs e) + { + BackButton.Enabled = false; + NextButton.Enabled = false; + Panel2MakeButton.Enabled = false; + new Thread(new ThreadStart(PrepareClick)).Start(); + } + + void Panel5StandardButtonClick(object sender, System.EventArgs e) + { + minWaitingTextBox.Text=Properties.MinWaiting.ToString(); + maxWaitingTextBox.Text=Properties.MaxWaiting.ToString(); + maxTouringTextBox.Text=Properties.MaxTouring.ToString(); + scopeTextBox.Text=Properties.Scope.ToString(); + } + + void Panel5SearchButtonClick(object sender, System.EventArgs e) + { + BackButton.Enabled = false; + Panel5SearchButton.Enabled = false; + + viwoTour.S.Clear(); + foreach(string station in StationsListBox.SelectedItems) { + viwoTour.S.Add(station); + } + + new Thread(new ThreadStart(SearchStart)).Start(); + + } + + void Panel5SelectButtonClick(object sender, System.EventArgs e) + { + Panel5SelectButton.Enabled = false; + new Thread(new ThreadStart(SelectStart)).Start(); + } + + void PrepareClick() + { + Properties.DataSource = DataSourceTextBox.Text; + Properties.InitialCatalog = InitialCatalogTextBox.Text; + + Panel2TextBox1.Text += "Verbinde mit "+Properties.InitialCatalog+" auf "+Properties.DataSource+"..."; + viwoTour.Connect(); + Panel2TextBox1.Text += " Fertig"; + + Panel2TextBox1.Text += "\r\nVorbereiten..."; + viwoTour.Prepare(); + Panel2TextBox1.Text += " Fertig"; + + Panel2TextBox1.Text += "\r\nLaden..."; + viwoTour.Load(); + Panel2TextBox1.Text += "Fertig\r\n"; + + StationsListBox.Items.Clear(); + foreach(string station in viwoTour.courseBook.get_STATION_Of_Rows()) { + StationsListBox.Items.Add(station); + } + + Panel2MakeButton.Enabled = true; + NextButton.Enabled = true; + BackButton.Enabled = true; + } + + void SearchStart() + { + NextButton.Enabled = false; + viwoTour.create_A(); + viwoTour.search_T(); + + Panel5SelectButton.Enabled = true; + } + + void SelectStart() + { + viwoTour.select_T(); + + FillResultTextBox(); + + + NextButton.Enabled = true; + BackButton.Enabled = true; + Panel5SearchButton.Enabled = true; + } + + void Search_TProgress(int progress) + { + ProgressSProgressBar.Value=progress; + Panel5Label7.Text = Convert.ToString(progress)+"%"; + } + + void Select_TProgress(int progress) + { + ProgressTProgressBar.Value=progress; + Panel5Label8.Text = Convert.ToString(progress)+"%"; + } + + void FillResultTextBox() + { + ArrayList TouredIDs=new ArrayList(); + ArrayList NonTouredIDs=(ArrayList)viwoTour.courseBook.get_ID_Of_Rows().Clone(); + + int Tours=0; + + int ProductiveRows=0; + int NonProductiveRows=0; + + TimeSpan ProductiveTouring=new TimeSpan(); + TimeSpan NonProductiveTouring=new TimeSpan(); + + foreach(ArrayList t_select in viwoTour.T_select) { + Tours++; + + for(int i=0;i + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Abgearbeitete Fahrten: 125 +Nicht abgearbeitete Fahrten: 3 + +Produktive Fahrten: 97 +Unproduktive Fahrten: 28 +Fahrtenproduktivität: 77,6% + +Produktive Fahrzeit: 141,25h +Unproduktive Fahrzeit: 63h +Fahrzeitproduktivität: 69,1% + + + + + /9j/4AAQSkZJRgABAgEASABIAAD/4QZWRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAAB + AAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAMAAAExAAIAAAAbAAAAcgEyAAIAAAAUAAAAjYdpAAQAAAAB + AAAApAAAANAAAAAbAAAAAQAAABsAAAABQWRvYmUgUGhvdG9zaG9wIENTIFdpbmRvd3MAMjAwNDoxMTox + MCAxNjoyMzoxMQAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAApKADAAQAAAABAAABOgAAAAAAAAAG + AQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEu + AgIABAAAAAEAAAUgAAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklGAAECAQBIAEgAAP/tAAxBZG9i + ZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwM + DAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwR + EQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAoABUAwEiAAIRAQMRAf/dAAQA + Bv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcI + CQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT + 8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm + 9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAz + JGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1 + VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A7JyGURyG5JSMoZRCoFJSMqBRCoFJTBMU + 5TFJTEpJ0ySlkk6SSn//0OyciYlVV1xpsGtjXCt3g8CWlRcFAOcx7Xt+kwhw+ISU2KsVg+z1uY317WPs + s9QFwDR9Bmzc1Aq6c+1rXMfLX0i0Ej846ej9L6X8tSdm3nJ+1Hb6m3bEHaBx4oTcu+umqlpGyl4sZIMy + Du2u1+h7klKdgNYx1tt2yuutllhDCXB1n0ag3d7kXGwqG57cLIqF4sBsZeHOb7Nst/RtP7zUF2bc59z7 + GssbkQLa3Alp2/QjXc3aofbsgZYzPabWja1sHYBG3aGg/wDfklKGPj31/anEYVG8UNa0OtJeeXncW7W7 + U1nTLKwRY8BwyW40Aae8NsbbM/uv/m1CjLfRWaiyu2svFgZaJAeOHtgtU29SyW7y9tdxssF02N3bXgBr + XV6/mtb7UlLP6dXXXZZbkittdzqNWE7iG727dhP0lS7aqzdmXXVvreGhr7TeYBneRs/ePsQISUxhJPCS + Sn//0e1cENwRnBDcElIiFAhFIUHBJSIhQIRSFAhJSMhRhEITEJKRwmhThLakphCSnCSSn//S7khQcEVw + UCElISFAhGIUCElIiFAhFIUSElIi1RhFLVGElI4ShThLakphtSU9qSSn/9PvnBDIRiFAhJSEhQIRSFEh + JSIhRIRS1RISUiIUYRYUdqSkcJQpwlCSmEJKe1JJT//U9CIUCEQhRISUjIUC1FLVAhJSIhMQikKJCSkR + CYhELVGCkphCaCiQlCSmG1JSSSU//9X0ZwUCEaFEtSUhTEKZaokJKRlqYhETEJKRQmhEITbUlMITEKcJ + oKSmMJKUFJJT/9b0ohMpQmISUwLVEtREySkJaokI5AUS1JSGE0IpaokJKYQmUyFGElMUlLakkp//1/Ti + JUCEUqJCSkZCYqZaokJKYEJlMhNCSmCYhSIShJTCE21ThKElMNqSnCSSn//Q9QSTpklLJiE5TJKYkJiF + KExSUxhNtUkySmMJQnShJTFJShJJT//Z/+0LJlBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAHHAIAAAIA + AgA4QklNBCUAAAAAABBGDPKJJrhW2rCcAaGwp5B3OEJJTQPtAAAAAAAQAEf//wACAAIAR///AAIAAjhC + SU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAeDhCSU0EGQAAAAAABAAAAB44QklN + A/MAAAAAAAkAAAAAAAAAAAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1 + AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAAB + ADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA + /////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD///// + ////////////////////////A+gAADhCSU0EAAAAAAAAAgABOEJJTQQCAAAAAAAEAAAAADhCSU0ECAAA + AAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANLAAAABgAAAAAAAAAA + AAABOgAAAKQAAAALAFMAZQBpAHQAZQAxAEYAaQBuAGEAbAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAAAAAAAAAAApAAAAToAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAA + AG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAA + AExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAToAAAAAUmdodGxvbmcAAACkAAAABnNsaWNlc1ZsTHMA + AAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25n + AAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVl + bnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAA + AFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAE6AAAAAFJnaHRsb25nAAAA + pAAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFs + dFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAA + AAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25l + bnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xp + Y2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25n + AAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAA + AAAADAAAAAE/8AAAAAAAADhCSU0EFAAAAAAABAAAAAQ4QklNBAwAAAAABTwAAAABAAAAVAAAAKAAAAD8 + AACdgAAABSAAGAAB/9j/4AAQSkZJRgABAgEASABIAAD/7QAMQWRvYmVfQ00AAf/uAA5BZG9iZQBkgAAA + AAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwM + DAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwM + DAwMDAwMDAwMDAwMDAwMDP/AABEIAKAAVAMBIgACEQEDEQH/3QAEAAb/xAE/AAABBQEBAQEBAQAAAAAA + AAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwz + AQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2 + F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3EQACAgEC + BAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPElBhaisoMH + JjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5en + t8f/2gAMAwEAAhEDEQA/AOychlEchuSUjKGUQqBSUjKgUQqBSUwTFOUxSUxKSdMkpZJOkkp//9DsnImJ + VVdcabBrY1wrd4PAlpUXBQDnMe17fpMIcPiElNirFYPs9bmN9e1j7LPUBcA0fQZs3NQKunPta1zHy19I + tBI/OOno/S+l/LUnZt5yftR2+pt2xB2gceKE3LvrpqpaRspeLGSDMg7trtfoe5JSnYDWMdbbdsrrrZZY + QwlwdZ9GoN3e5FxsKhue3CyKheLAbGXhzm+zbLf0bT+81Bdm3Ofc+xrLG5EC2twJadv0I13N2qH27IGW + Mz2m1o2tbB2ARt2hoP8A35JShj499f2pxGFRvFDWtDrSXnl53Fu1u1NZ0yysEWPAcMluNAGnvDbG2zP7 + r/5tQoy30VmosrtrLxYGWiQHjh7YLVNvUslu8vbXcbLBdNjd214Aa11ev5rW+1JSz+nV112WW5IrbXc6 + jVhO4hu9u3YT9JUu2qs3Zl11b63hoa+03mAZ3kbP3j7ECElMYSTwkkp//9HtXBDcEZwQ3BJSIhQIRSFB + wSUiIUCEUhQISUjIUYRCExCSkcJoU4S2pKYQkpwkkp//0u5IUHBFcFAhJSEhQIRiFAhJSIhQIRSFEhJS + ItUYRS1RhJSOEoU4S2pKYbUlPakkp//T75wQyEYhQISUhIUCEUhRISUiIUSEUtUSElIiFGEWFHakpHCU + KcJQkphCSntSSU//1PQiFAhEIUSElIyFAtRS1QISUiITEIpCiQkpEQmIRC1RgpKYQmgokJQkphtSUkkl + P//V9GcFAhGhRLUlIUxCmWqJCSkZamIRExCSkUJoRCE21JTCExCnCaCkpjCSlBSSU//W9KITKUJiElMC + 1RLURMkpCWqJCOQFEtSUhhNCKWqJCSmEJlMhRhJTFJS2pJKf/9f04iVAhFKiQkpGQmKmWqJCSmBCZTIT + QkpgmIUiEoSUwhNtU4ShJTDakpwkkp//0PUEk6ZJSyYhOUySmJCYhShMUlMYTbVJMkpjCUJ0oSUxSUoS + SU//2ThCSU0EIQAAAAAAUwAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABIA + QQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAAAABADhCSU0EBgAAAAAABwAIAAAAAQEA + /+EZNGh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdX + NU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRh + LycgeDp4bXB0az0nWE1QIHRvb2xraXQgMy4wLTI4LCBmcmFtZXdvcmsgMS42Jz4KPHJkZjpSREYgeG1s + bnM6cmRmPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjJyB4bWxuczpp + WD0naHR0cDovL25zLmFkb2JlLmNvbS9pWC8xLjAvJz4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91 + dD0ndXVpZDo2ZWM3MjU3MC0zMzJjLTExZDktYTQwNi1lODAyZGMwZjAxMTknCiAgeG1sbnM6ZXhpZj0n + aHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8nPgogIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpD + b2xvclNwYWNlPgogIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNjQ8L2V4aWY6UGl4ZWxYRGltZW5zaW9u + PgogIDxleGlmOlBpeGVsWURpbWVuc2lvbj4zMTQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogPC9yZGY6 + RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9J3V1aWQ6NmVjNzI1NzAtMzMy + Yy0xMWQ5LWE0MDYtZTgwMmRjMGYwMTE5JwogIHhtbG5zOnBkZj0naHR0cDovL25zLmFkb2JlLmNvbS9w + ZGYvMS4zLyc+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0n + dXVpZDo2ZWM3MjU3MC0zMzJjLTExZDktYTQwNi1lODAyZGMwZjAxMTknCiAgeG1sbnM6cGhvdG9zaG9w + PSdodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvJz4KICA8cGhvdG9zaG9wOkhpc3Rvcnk+ + PC9waG90b3Nob3A6SGlzdG9yeT4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24g + cmRmOmFib3V0PSd1dWlkOjZlYzcyNTcwLTMzMmMtMTFkOS1hNDA2LWU4MDJkYzBmMDExOScKICB4bWxu + czp0aWZmPSdodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyc+CiAgPHRpZmY6T3JpZW50YXRpb24+ + MTwvdGlmZjpPcmllbnRhdGlvbj4KICA8dGlmZjpYUmVzb2x1dGlvbj4yNy8xPC90aWZmOlhSZXNvbHV0 + aW9uPgogIDx0aWZmOllSZXNvbHV0aW9uPjI3LzE8L3RpZmY6WVJlc29sdXRpb24+CiAgPHRpZmY6UmVz + b2x1dGlvblVuaXQ+MzwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxy + ZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSd1dWlkOjZlYzcyNTcwLTMzMmMtMTFkOS1hNDA2LWU4MDJk + YzBmMDExOScKICB4bWxuczp4YXA9J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8nPgogIDx4YXA6 + Q3JlYXRlRGF0ZT4yMDA0LTExLTEwVDE2OjIzOjExKzAxOjAwPC94YXA6Q3JlYXRlRGF0ZT4KICA8eGFw + Ok1vZGlmeURhdGU+MjAwNC0xMS0xMFQxNjoyMzoxMSswMTowMDwveGFwOk1vZGlmeURhdGU+CiAgPHhh + cDpNZXRhZGF0YURhdGU+MjAwNC0xMS0xMFQxNjoyMzoxMSswMTowMDwveGFwOk1ldGFkYXRhRGF0ZT4K + ICA8eGFwOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDUyBXaW5kb3dzPC94YXA6Q3JlYXRvclRv + b2w+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDo2 + ZWM3MjU3MC0zMzJjLTExZDktYTQwNi1lODAyZGMwZjAxMTknCiAgeG1sbnM6c3RSZWY9J2h0dHA6Ly9u + cy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMnCiAgeG1sbnM6eGFwTU09J2h0dHA6 + Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8nPgogIDx4YXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VU + eXBlPSdSZXNvdXJjZSc+CiAgIDxzdFJlZjppbnN0YW5jZUlEPnV1aWQ6MGY0YTgzMDctMzMyYy0xMWQ5 + LWE0MDYtZTgwMmRjMGYwMTE5PC9zdFJlZjppbnN0YW5jZUlEPgogICA8c3RSZWY6ZG9jdW1lbnRJRD5h + ZG9iZTpkb2NpZDpwaG90b3Nob3A6ZjE3YTM1YmEtMzFjOS0xMWQ5LTlkYTctOWM3NWVhYTY2ZThiPC9z + dFJlZjpkb2N1bWVudElEPgogIDwveGFwTU06RGVyaXZlZEZyb20+CiAgPHhhcE1NOkRvY3VtZW50SUQ+ + YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjBmNGE4MzBhLTMzMmMtMTFkOS1hNDA2LWU4MDJkYzBmMDExOTwv + eGFwTU06RG9jdW1lbnRJRD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRm + OmFib3V0PSd1dWlkOjZlYzcyNTcwLTMzMmMtMTFkOS1hNDA2LWU4MDJkYzBmMDExOScKICB4bWxuczpk + Yz0naHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8nPgogIDxkYzpmb3JtYXQ+aW1hZ2UvanBl + ZzwvZGM6Zm9ybWF0PgogPC9yZGY6RGVzY3JpcHRpb24+Cgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgog + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0ndyc/Pv/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5v + AhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAA + AAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIY + AAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANM + AAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8 + AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xl + dHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAA + EnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+i + AAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAW + SUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2 + Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0y + LjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNj + AAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAA + AAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlW + AFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2 + AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8 + AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZ + AR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHy + AfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMW + AyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSM + BJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZ + BmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiC + CJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsL + CyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34 + DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFP + EW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUS + FTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlF + GWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3s + HhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMK + IzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSii + KNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63 + Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVN + NYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8Jzxl + PKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQD + REdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwq + THJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1Tb + VShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4a + XmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fp + aD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJL + cqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1B + faF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjO + iTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0 + lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2 + oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8W + r4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70V + vY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2 + zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr7 + 24DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl + 63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3 + /Af8mP0p/br+S/7c/23////uAA5BZG9iZQBkQAAAAAH/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwP/2wBDAQEBAQEBAQEBAQECAgEC + AgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/wAARCAE6AKQD + AREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA + AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6 + Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz + tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEB + AQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEI + FEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp + anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX + 2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+l244LY7Fun/6zQBjXPX049OSPrkUAZE3 + 4d+n0HSgDJn/AMPw6+nWgDGk6Nx+H49KAMqf7rfTr+VAGOepz1zzQBnXH/LT8aAMx/un9T6e9AGXL1b/ + APX2/WgDOk/i/H1oAzZev4n/AD3oAomgCJ+v4f40AVn6/SgCqevr70AVn5Dfj0x9fWgCCgA/z/nvQBFu + I7/mPz/HPbpQA7PGO3TGDnGcY+uOaAP0hn5J+pwf64PWgDFuRhjjnjHf8/fg/SgDIn7/AI/Tp3xQBkzj + +n9f8KAMaToT15zx9e1AGVcfdbnsf89O9AGOep+v+evNAGdcDG/vn2P6A+hoAzH+7+P+NAGXMOvfj+Xe + gDOf+L8f8/SgDNlHP4/z/wAaAKR6n6mgCJ+o/wA/560AVW6mgCs33j9aAK7g5PvnHf8AnQBWNABQAzaf + 84PHf8aAFwcY/wD1/T739aAP0hmGC2eu4+vX16ntQBjXI5PUAg4PbA9sZoAyJgOeD/nqaAMqcd/f0x/+ + rrQBiSD7wGMZ7eg/GgDMnGQw/wB4e/P86AMRvvH6/wA+aAKVyOTxnK/yJ96AMl+n+f8AJzQBmzDrj0I6 + H8vSgDMcckev9aAKEw6/T+R/woAz3GD9aAInGR9KAKr9frQBXcc5/wA9hQBC4yB7UAVnXv8Ap7evSgCO + gAoAKAP0inHzNj2P+NAGNcjnp7Y9ufw5oAyJfp26/wBOnrQBkzjgn3/+v/SgDFlGGcfj3+ufXrQBmzAc + 9uh/GgDCkGG/z2oAqTjgHHqM5/TGO9AGRIMbvoTQBnzDI/DOfp+HXFAGVIMH9PyoApTKP8+/H86AM6Re + vt+ooAhPII9aAKsi4H0/UUAQEZGKAIWGDj/OKAImTuP8mgCEoD7f4c0AN8v3/T/69ABs468/p0/xoA/S + K4HP1XGfz/GgDGuV4zj1z1zkYoAyJV7dufyNAH0J45+B+gab8HtI+KXhXVtY1EXUOjXWqWeomyeGyttR + U2l0sZtLaGTzrHWZI4GyWXG49s0AY3wJ+BGk/FTT/FGu+JNW1PRdG0KS2tbe6042aie6EE13qPnPeW9w + iRWNp5LHABPm9eKAOWl034On4Ta1eW+heMJvHCXeoro+uzWurto62S+IfL09r65t3j0UXA0XCSfuwvnn + GAcUAfOWq6Lq+mLHPqOlalp8M5xBLe2NzaxTMVDERPPFGrnHPBPFAFG90fVbS0gu7zTNQtLS6CtaXV1Z + XEFtch4/NQ288saRTB4juBUnK8igDK1DQ9ZsLaG/vtI1OzsbkxrBeXdjdwWs7SxtNEsVxNEkUrSwozqF + JyoJHFAGlb/DX4ialpf9s6f4C8aX2jFDKurWfhbXLrTGiABMgv4LF7UoFYHO/HNAHX/BjwP8I/F974kh + +LXj268Aw6dBp7aNJA9rE+oTzS3i38Ugu9Pv/wDj1jhiOAEIL85oA+vLv9jb9ny18GL8Qrr4s+KofBTW + 9tdL4jaXQxp5t769h061lD/2EZNs97Oka/L95hQB8Q/GfwD8OPD3inQtE+DPi3UfiRZanpSS3MqJFe3k + esNfXcK6dbw6fp9m8rG1ijcKI2Yl+vYAHmev/Dn4g+FLNNQ8T+BfGXhzT5Cqx3+veGNb0izkLlQgS51C + xt4GZywAAbkkUAc9a6DrepWlxfafo+q31nZ7/tV5Z6fd3NrbeXGJpPtFxDC8UPlwnedzDC8nigCrZ6Br + mpw3F1pmjarqNtak/arix0+7vILbCGQ/aJreGRIcRgsdxGBzQBHHoOt3GnSavDo2qzaVDv8AO1SLTruT + T4vLO1/NvUhNsnlswzlhgnmgCjd6XqVgltLfWF5Zx3sIubOS6tZ7eO7tz/y3tXmjRbiHP8SEr70AUCB3 + H+NACFQf8/45oANo/pnj/wDVQB+jtwvfj5SfXjnH060AZFwuVPsfYcE4oAxZl6/j2649qAPuD9nG9t/H + fws8dfCvUpUZreG+SxE2MQ6f4jgnMbwrhmY6drUUk5YA7XmT2oAXxJHP8FP2WF0SVBY+JvFqPp91Gu0T + Le+JnmuNSWUD5hLZeGoGtyw+5Ii89KAOd0QZ/Yl1wf8AYR/9TiCgC7r+i3Hx2/Zk+G32MNca9pHiDwro + k8iDzbiGaLVB4HvJ7jpiN7W/ivpSflWNQ7EAEgA9A+O3hnSvib8Ode8BeFYg2sfDTxd4I0u3tI1z9na9 + sdGto/KKcG1h0XxM4YdBJbOCAVFAGX8UrPQPFXxz+BHwcuooZ/D3hzTtU8X6lpMgSW3uv7N0u6h8N2Nz + Ft8tkhOhyGSJhh4JiCu1hkA4L4l/tF/ELwp+05ovw60mezi8FWmteCtB1HRjpdlK+qxeJrXSLm7u/t8k + Lahb3Vqms7YBDLFEGhXejgsGAPn79u7wZo3h/wCJ+ka7pNtDZyeLvDwv9Xt7eNI0l1WxvZ7KXUPLUKiy + Xtr5IkwAXkjZzlnYkA908X8f8E9bUf8AUs+Cf/Vi6DQBxv7B3hvRtL8KfE/4pzWMN/r2jGbSdNMiK01l + Y2GjnWb6K0cgmF9Wknijdh822EAcFgQDrP2Tfjp43+PWufEbwP8AFX+yfE2h3Ph99UgtW0XTrO1tbK4v + o9NvdDaO0ghF5YTQ3ylDcedcKYzmU5oAb+z94ftvCXwe/a58K2cjTWfhnxh8WPD9pK53NLbaN4Xl06CR + m/iZ4rYEnuTQBxv7DQ/4sn8esd/tf5/8IlfUAdH+z34ij8HfsReKfEsuiaV4jXQ9Q8U6gNE1yH7TpOoS + QalYNDDfwD/XW6ylWK/xbcUAfnt8b/j34s+PWp6Dqvi3SvDml3Xh+wutNtE8N22pWltJbXNytzmeLU9V + 1aQzRuuMq6qR/DQB4dgeg/KgBuwe9AC7F9P1oA/R66Qndnjge/I5oAxZVz+PX09OceooAxplxnjuevqM + 596APQvg/wDEVfhd41g8RXMF1eaZNp99pmq2dmYhc3Frcos0Hkid44t8OoW8Lncw+VSB1oA2P2g/jNaf + Fu68PR6RY6jpuj6HbXrNb6ibYTT6lfyxLNMVtJ542iitrWJUJbILPwAckAhsPjVoNj+z/qXwik0nWH1q + 7+1+XqSCyGlqJ/EMesLu3XQu/lgQqcRn5/bmgDQ/Z+/aK0j4Q+H9d8PeINJ1nVrS91ePV9NOlfYibeae + 0jtNQSYXlzbbUcWcDJtLDO/IHcAzfhP+0va+BfHvxO8U+JdL1fUtO+IOpHVlsdNNo81jewajez2K4vLq + CJYYbC/aLKsWPlp1AyADzHxb8b9V1H44v8ZdAhltZbHUrKbR9OvymV0iz0+PSpNNuvIklSNdRsPNWfy2 + ODO5U55oA+h7z9ov9mfxB4m0f4peJ/h14uHxG0WOzeD7Mttc2f2/TwG0+4Vh4hsNPv2sHb9zPcWySpsB + 2/JHgA+N/jn8W9S+NHji48WXtmNMsoLODSdD0jzhcHTtJtXmmRJpxHCLi6ubu5lmkbaMNJtHyqtAHrni + D9pHwrqX7MUXwOi0HxDH4gj0jQNP/teRdN/sZpdI8Uabr07gpfNe7JbeyZF/dZ3kZAGTQBwn7NX7REnw + L1fWbbVtJn17wd4nS2XWdPtHgW/tLqzWdLfUNPS6KW1w7Q3DxTQO8SyqVJcGMAgHvGm/tNfs6/B7S/FF + 58Cvht4jt/F3imPLSa6wh0qzdPNa0jlkm1/WbmOwsZ7hpRaWsaLMRtaVAEZQDy/9mP8Aah0P4WJ460L4 + maXqviDRPHOoy67dX+nW1jf3R1e8hktdYTU9PvLmyhvLHV7cruKvmNkI8t1kJQA9J0f9r/4DeC/D/jjw + h4B+Eev+F9F161v4LG4sm0x7rUrq+065tGv9ajutVlmtVgeZVihSe5CRAkFc7FAPE/CH7Rnhfw7+zL4p + +CF1oevz6/rv9t/Z9WgGnf2PD/ad3bXEPnGS9S9/drAQ22I8njNAHxuYs+n9fz4oAjMR9x196AG+X78/ + 54oAPL9/0/8Ar0AfpDcrxnjv/L9KAMOVPmI6c5H6+vWgDIuF+Y/gR9MYP6igDJlXr+X+BoAzZkznofTo + eR6exoAxbhMNnt0PXOfyGKAM6Reo9Ofw/wD1UAZNzF1Yf5HY9+nSgDOoAz7iPknHBzzx0OT+lAGY6dfX + offtxQBTljBGO3t2NAGZLGUJ/P689RQBAQDwaAK0kXB4znnr/TrQBTePHUfj3oAgKEdOf50AMoAKACgA + oA/R6ZOGHpnjGT7AfWgDEuE6n0yenUEgfpigDJuEyDxz97gZ68Ec0AY8ydeuOn9c8cdaAM2VPz6fj+FA + GTcx5z1P4d+T1oAyJVxnrx+eP/rUAUZY88djnH5cigDGmjKnofr6jsaAKzKGBB798UAZk0RBPHQnrz29 + c980AZ7r7cHr9aAKckWRz+BoAz5Iip//AFc+4oAgoAiaIHn/AD9M+lAFZoeen9D/AIGgCBoT3xn9eO9A + EZiPof59qAG+Ue2e3agA8o+/X0P+c4oA/SS5QAk+vf2wByfY9KAMW4j6g9D3B7dz+dAGPIvUehPX0/Dv + igDInQAnrjt9D/gKAMqVMduv8+eaAM6ZM5/H2yefzzmgDIniwSemM/l0+tAGa6fkeh9DQBnzxbgeOcZ/ + +v8AQ96AMl0Kk/y9M0AQPGHHv/n6UAZssJBPb/63P+e9AGe6EZHb+XH8qAK7xgjpuHvQBRktzyV5/mP8 + aAKpQj357UANx60ANKKe1ADDEvb+X+FADfJ+n5mgA8ke35mgD9HJowwIxz2x6ZBxxQBjTRkg8ZI5H/1u + vUelAGLPFjke5Ppg8k89DmgDKmjyOnToTjp3/CgDJlj/AF44/wDrnjmgDNkTOfUdvWgDOmiyD/nPT+lA + GPLGQTkDB7An9e4oApOnqOf5igDOmhzk9DzyP5HHPFAGY6FSf84oAhkUMOe3f+nUdaAM6WHPb+Xt0oAp + PEQT1Hvj1Hp2oArsnrwaAIGiHpnryB1479f8igCs1uDnGPxHPbqRzQBCbdh2Pfpg0AR+U3+R+WfQ0AJ5 + Tf5B6+n50AHlH8PoelAH6OSpgn19/TnjvmgDIuEIO4Zx6dcD1/SgDIuI+o7MCfzzke1AGPIhBII4PIOf + f1x1oAyp48duD+hx9OtAGXNHjoP8+nrQBQkQHnnv2zj1NAGbPD1I69cduh5GO1AGTJHt4IPsfegCnIn5 + /wAwfyoAoSw7uR74x2zzzQBlyxlQ3B46/Qf/AKqAKlAETxA9ODQBUkg9vf1P5UAVWhI57dvT/HrQBEYy + eoz/APWz+NAEexfp/n3zQAhj9/zoATyx3/LH9aADyvp+XvQB+iEq5GfTjrwPf8KAMyWPII9c8f0wc0AZ + E0fVTxkZHXj0z17igDGni68fN37kfTn3oAy5I8g5GD3z7CgDLlixweuOD7cjjrQBmyoRzjjvwADn296A + KUkYPPb/ADx19aAM2aHOSAM/iPYdfSgDLki29RwP65x+FAFCRCpz2PTp+X5UAVniVgf8OfwoAzZbXuvq + SepPvkf5xQBRZGUngkDvg49vagBnXg0ARtGCPSgCEwe38jjn86AITB+Hbv8A154zQBGbf2/zx75NACfZ + zxx6k8Ef5xQAeR7c/j9PzoA/QiVNrMvY5wR0/melAGdImR7fy/TpQBmzRA84A/n+FAGRPEcnjk8HoOnH + AP0oAyJ48EkZ/KgDNmjB5xz0I9f8DQBmTRkj36/WgDNdMZ447g9vzoAoyR4JwMg//rP1oApSQhskAfT1 + 9R+NAGZLCRnIyM9MY/nzQBReEjlfxH/1vrQBTcc59aAIGiR85HXqfX65oApvadSB/wB8/T+7jtQBUaF1 + 7Z/DnHrigCMgjgjH/wBagBMZ60AJtHp7UAJtX0oANq+lAH6B3EZKtgcqee2duQR7npQBkSjHzYyO9AFK + RM5xnpjB/r+dAGVNHkEjv1Hvzn8aAMm4jwc9+cgD3/OgDMmi4JHuT7Zxjp6GgDLki6gfUf5NAGfJFnkc + N3HrQBnyxdT0PXn6kH8M0AUmjIPH655/HmgCq8StnIwfp/OgCjJBg9Pp74465z1oAoSwcEEcf07nvQBQ + aDHQ/gfx5yP8KAISrL1BH8vz6UAMKqc5A59uaAIjCh9s/j+VAETWoP8Ad/Ln8+KAIjaDjg8dh35A5J5x + QA02nPG7/P4HrQAv2X/ZP5n+XXpQB+g1zEW+cZPGCB6f5NAGBPH35+bOcZ4xjv1zQBnyR7eQOp6AcAn8 + fWgDOnTqcccnpnJ554FAGbLHvDDvjGM9xnoenWgDKljwTwef198daAMySL249v8AJ6igDOmhIO4d+v1x + QBSeNX6jn174/wAmgDNliKHDDg9Dxz64x0/SgCs8f5fqP/rUAVZE4IPvjg9u2KAKTRg//X/oaAKkkK9S + pGeMkf1NAFVofTn9f/r0AV2gX075449vbFAEJg9OO4z/AJ9KAGGF/r/jQA0xuO1ABsb0/wA9uvrQAbG6 + 4/8A1+n1oA/QBwSST0J9h24xQBi3UO1iQp8tvyz0PPX+XWgDHlj2gg5KkemPxz7UAZsqYGff9euPwxmg + DOkTBJH+enQUAUZYwfxB7dyc0AZc8JHzc5A+ueO3POKAM6SMHORkdx6dsigDPkhPUDPXGMnHpnrgYoAq + PHkEEZ9+3/6qAM+SErkjp6HPGOuPWgCq0Y5BHPOfY96AKbwA/wCRzgn2GM0AVJIyOOo7j1P+TzQBWKDp + jFADDH9D9f1oAYYvb8qAIjCOeCO3Tpx+WaAG+QPX/P60AJ5P+c0AHk+3frmgD71MfUHg9COo4bJx09KA + M+aIMpVsfgeePegDFmi2khh8p6HGAfpyaAMqeIqScAq36HnjHHPHagDKljwemOpB6j6cCgCk8YPtjqOg + /wDrGgCmycEEZH+PWgDMntypJA4PQj1Pr+AoAoPH3H8uvPXjJ/xoApyQqc4HPcde/pQBSeLt+nrQBSlj + U8EHOO4wc+x96AKTw+2Pwx+vTmgCnJEQe+O3A9u+eevegCu0OeMevTpQBCYfT3/n70ARmJgfbnH+FADN + jdx/nP8AjQAmw/3f5dqAE2f7P6f59aAF2nHTjGe2MUAfeUkW4Ajrn0556AYIGc9AfzoAzZY+vAyfx6de + +CDQBmTRA7gcjj/OR7GgDMmg4IOCvY8HHbIznnnigDHngK5PYDv3HPT1oAzJIupXJJPTjuewoApuvcce + vbr0IoAqvHnPp1x3/wAKAM+SDk9Ppzj1x9eaAM6SA9QMe2OPqKAKTx9eOc8gj09MjrQBWeIMMdxn88Yo + AqyW+OnuecHp6YHrQBVeDIYYz79s549ep+tAFNrduT6emc9fT1oAhaE+hHIGCD/PvQBEYu+Pw+nf9KAG + mIj1/wA/nQA3ysf04/zigBvkg9f0z+Z5HrQAvkr0/p/XOaAPubBPY/5//VQBWkh3A464Y5Jyc9hyc0AZ + EsfJ45z+vcE0AUJIx0IyOn09s0AUJYQM55H09cjtxwKAMma1I3OuMDGRxxwOegGM80AZskWRgDB64PcH + /GgChJGU6jjkevc8UAQMit1/MUAU5IiOGGR6/wCHoc0AUpLcYJ6j9QOccjr1/CgCi9tn7p5/znPTigCo + 0bLncvQZ/DOM+uM0AQsgP+Hb8sUAQNCOuMe498j8qAIjADnB/D/IOOaAIWtx6D16D9SDQBEbcHHHA9OM + /XPNADPswyOD9Dg8enbAGKAD7OM9D0HOD7d/rQAfZx6H64Ofp16ZoA+2mX29e3TGTjp0oAqyKQfQn1HH + /wBegDPnjBzgD3/LjBJyAPyFAGRLHg888/qOPY80AVWUY9iSMH9P5UAUpIjzgcH9D+PtQBmT246jPoMd + j6EY7DNAGdJFg4deR3I+o96AKEtuV+ZckEj5QOmfx9aAKjfLwwPv9D3+lAFdox/Cf/rdO/fgUAVXiXkg + c/l6dR0B5oAgMRGT/nr29eKAKjwIxORg9/8AP4UAVXtSOQQR75B54P4UAVmhIz8uP1Hr1HHGPWgCJ4W5 + 5YexHbB69OpoAhMLD0Ppj69/SgBvlv8A3T+lACiJz6D3PT9AaAHeScdefw/xoA+0Wj28n3OfQ+tAFV03 + Drz79M89PTigCm8ZHXuOoPoSP50AZ80QJIAHcdM+vp6E0AZM0JXdgEgHr+J4z3wPpQBSYEe3qDxnvjnj + pQBA6K3t1GO47UAUZYBgZAI6euMHpnt0oAzZLcr0wR749v60AUZYVJGV4P4DscH05oAoSWzDBT5hzkZG + R6Y6cYoApyI44PsccelAEByP4f8AH8sUAV2UHP8ATgexxxQBEY8+hoAjMXUYP9P/AK+aAGGI+mcdOOmP + r0oAYYs4JUH0yB/XtQA3yl/ufzJ5/XHFACeSv9zrz39+mOgoAPJX+7+GB6dOmc4/GgD7GljIHA+vsfTv + g4OKAM1lwcdufx/HigCCVc4Pcds9fw9vWgCqyexIP1HfA6c9KAKcsII5AIA9ugzyfcj/AOtQBjzW5yxX + 3PoDnk56YODQBnuhUn26juP8RQBESOh7/l+NAFZ0ByQTznjjB4/PrQBReEd1HzDgj8PTGe3agCjJbleV + 79uhB7D/ACfegCo0ecgj24+p/rQBTltQ3KZHqCckn2oAoywMB0GCcDqfU54zjgcUAVCjDOR05/z+H6UA + NoAKADFACbR6CgBpVee35f4e9ADcDdjHf1PTH0zQB9lTwqeMdM84yfQjJwQcigDJuINoz9CCeOOn+fr1 + oAz3U9O45oAgIHcc9P5Z/EEUAQuo46/X37fjQBRki5xyOnQckD68UAZ8tuDnj73JOOp44zyBmgDLmgKA + 8dTjHJH4HvQBSZCOn5en/wBagCu+78Prkfy4oAqsp5znr16e+RjjNAFdos5IHJB6difQfU0AQtCCemM5 + 7d88+nSgCs9vycD19+Tj19c9KAKzWw5yoPGMYI/lxQBA1omTlCOhOPc8djxn+VAERs4zjG5cHnoc9OuR + x0oAjNl6OPyOO3B+bJ70AIbLn72ePoM+nO44IoAgNqxOOPTO7oOew6k98UAN+yvnPH+TjOcZ+7zj/wDX + QB9pzwYI9iSQePTpgj16UAZU0QIIIBIVsZ6ZwRxg4xQBlTQAkjG3BJ3YI4PAznJPPagDMkQqen15z75z + k0ARUAROgb5Rjkcj6d6AKrxDkEZHfpwB2GKAKMsXJ+XIJOPX1wDxigChLbhsegB2nHf1PQ9qAM6S2YZ7 + 4PXHBHX+dAFR4iM5BHPXn/OaAKzRenqeg7e/pQBC0eOwP4f5xQBE0anjOM9vy989aAISnPJz9PT680AM + MfpjHv8A/qoAaYs9h9f6dM0AIYRjoOwx+nGRjNADDAo9snjPOBnuOc5oAr+QueRk57HHXntj1oAXyBjG + 32znn65oA+y3j3ZB6c/hypOOP8KAMea3IyDxgnA464PPTOB0/I0AZksP95Qc5AHBPTHTHQjP8qAMye3y + HIHOepONvJ9Bnj6GgDLkiIJxkc45BHGSB29vwoAgIxnjn/DP9aAIGyTnpn/I/SgCBk9eR6/5+tAFZ4Qc + 8Z/POenb60AVGhYZ9O+eT6dMc5oApyQjsO2OmQBjHQ44oApPbjsOnUDrx1P14/8ArUAUpLd1JBBI7k8/ + r+GaAKjw44PHse+P6UAQtHjk/Tg/X/CgBuwepoATy/egBDH7/kDnt0xQBCyc8HPr/wDr9hQA3YaADYc4 + 9s+3XpmgD7EIz/8Aq59OufSgCGSIOORgj6dB2PHIH+eKAMue39iR1B4IxgAdsN0649qAMuWALx3BxjqD + 9ByR+P1oAzpYBgjGB6cjgnJ7rzkfWgDMlt8AkjGMkEHjGenPXr/nuAUXjI7DOMjHcevrigCAg4OQefw/ + nQBARg4oAgf7xoAgcZPQcD2/WgCrIg4/wx/LANAFNkOW5Ixzjk8dulAEDRBjyM7Tn2O0nr6gEmgCq8Ks + emB+QwRgY9MjkUARNbIenHAAHPXjqecj8KAIzbc8Z5PtgD8zzQBE0JDcfTn8cDjIB60AQmA9ex9CMD65 + 6Z/LmgBjRMDgA8dSfpnI9V96AG+Wc9Pxx+n58emaAPsBlKnGD3/Lt+NADMev1FAEbJuI9O3t06flQBnz + Qdflxk9fTPJwM5Ge+KAMuW3wTwWDA/OVI/3c9cDBz+GMcUAZbwkcFcAZ5HKkjIyO+MUAUpYQwbpyPTke + +SDyP/rUAZ8tu3YbhwOgHr0AJ5oAoMjDqvB6ZGMnHbIznB/CgCsRkHgEgfT8sjrQBAwBJHP/ANYH1oAi + KjnB9jn8cDGMmgCExg5/lnj8+aAISgzyO/YnHH0oAhMXTgevYfhQAwwjklfXP+R6UAQNFgnHT+XXtnti + gBnl8jPp+PTnHHSgBpTg8Z/H/PagBAh64x3/ACGOnrgUAN2j09++PrigD6uZQf5Hp+HXvmgCq64J6446 + 8H6kY4NADKAIXGT0Bxkn9cfiBQBWeMN355JBx83+1ge9AFCaAEHK9uijOee3HGRnn60AZc1rjJ/4Ew5O + PxOO/f0oAoSwdQACDngHkA5Iz9eKAM94AM5UH3wDgjH1C0AUZbcEkKuM9xk4IyevZeP1oApPbEc8HJIy + MkDGe47nHp1oArNEecDIP54zxn8aAITHjjJB7/8A6qAIzF7D8O/I9qAGbB7j/OKAI2XHTOPU/wD1qAIS + nTH45oAjZPUe/wDj09aAGFBjjOc0ARsOOvB6/wBevbBoAi+XpznpnPf0+nbpQB9XMuPegCB0B559O5P6 + c4oAgeMrj39M4z6UARY/D6f5GaAIn6/THv8AzoAgk7evt1oArNED6AnAzkn26cZJHFAFSS2DYOM9++fu + 45P49frQBQltTn7vBxkEdccEgngEZ60AZ8tr7ZA5HHUdgBgYB7UAUJLYAcHjbg5Ofbv6j+VAFU24DdOc + kngd8deAQaAKzW5zx2HQ5wT0xkY6A++c0AVZLc5+Uc4PpjPXOcY5zQBXMLDjuM56cdfQ44x70AQtCR3B + Pp/X9DQBC8eM57Ht3JAP45oAqSc9Ox68/wCA4oAix+X6cjpQBEwwen+enSgBn5+vT8elAH1ky49/w6Yo + AgZCDx6kfSgCB1z/APrPvx+tAFZlxjGcUAQOD9cf/WHHrmgCu696AIm+Xr3x+tAETHkY6eo9xzQBG2Dj + dzn5SSc8cnn0GPSgCtIgPGAc8kc89OgwATxQBTktweRgDjCjA5bvnnK5/wD1UAUXgU5GDxkDr1IOOOPn + oAqSRgHpxySMcLnOMsc5XBxnvQBUeFcsPx6dO/TrwaAKTQFiQME5PTHzYPHBI6D1/wAaAK7R4BLLjBGe + BnPODnpQBTkTI6cZz7gk+o5B/KgCB4lYcjOQOTnpu+uSRQBCYEHIGfqRwOc8YwRk/XNAEZhVjkjnoeO2 + enOcc0AJ9nHT5+n97nG7rjGP/re9AH1bNalTkEYySBnIAJwq5blycUAUmBB55z/nFAETID/XPP8Aic5o + ApsOoII+owf6cUAQsAAP8+vX3oAiKA59/wDPSgCrJGQOSMYxjqf5c9KAKrDHp7df65oAgJI+v49PqDQA + 1jk5/IfTtQBA5Vx7g+x9eD6j2oAgkXIPbntwcke3O7pQBSkjJySBznJGc/xDA6dqAK7x5HTIx26HgdT1 + 596AKskX8Wf17YwfUDcD7UAUpIwTjp1HIGewGSxI4/pQBUaAsDkcjJyygDsR06nA9xQBAbdvQ8gcZwRg + fz470ANNsegVQduB06EfLjJJ6nFACi3IyBjPPA5GCOuDwMZ6UAL9mbr3ztxtX+7jr+nSgD6qKg5yPY+4 + HODx0z2oAoXFoHyyDkL6nJIzx0IOaAMl0ZCQQRgkcg9qAIXTd279fyA+lAFZkwDz/Pp+nagCsy4PGcfn + 069KAIHyDz35Ht+HagCBl6EfT0/LtQBAUXvjHp0HX169aAKrp1AyR+oz74FAFUxsMkHPOcc9+w9dtAEZ + zjDdvoe2ME+ooAgcE4xQBXdMjGMf/X6/zoAgePJwen8/8OlAFd4lzlgCfXkZ5z/OgBhiXjj/ABwfc5+t + AERhPbkZwOgIz39+D/nsAIbfrgAcDGCev49v1oAaYOO+OuOMDnoOOaAG+Qfvc/Xt6ZzjHXigD6feLI+X + HHTJPftzQBWYFc5HT/ED+ZoApTRLID8oBIPIwM9doJwR1PUg0AZksDJyASv0PHIA6/3j070AViueo9sH + p/n+VAEEkfVvT2OMZ79T05oAoSLlvm6/TBxj/GgCsy8kEn/Pf680AQshA6g/pQBWI/l9Of50AQMCCPf3 + 6nv+tAFdlOTxn9f89aAIWU5zn/P8/pQBCR3ye/vmgCJlH4dQDwfT6UANMYP+ePY9OKAI2THTkfh1P/66 + AGbPb26c+lAB5fbGP/1+vXtQAeX7Y+vbP6jpQAeWMbdq7c9Plx+WcZ9qAPo1gSOuef8A9XH1oAidcjnB + z36g478YyeKAKrREdOvJxnjjHTuAKAIWXPDD0PY+4Iz3/lQBSktFIJTg5BwT7cjcck7j9eaAKLwyIeVO + OvAJwPfjigCu0at1APseR+H938KAKM1qeWUk4PAxkkcencHPYf1oApvEw4Ydeg55/kaAITGMY5GfXr6Y + +lAELQkg469PXI6E545H60AV2ibB+TOCfXGBxwPUfzoArNHngg/yzg8npigCNoAehI65/Lj8jQBGbfI+ + 99BjGPxzzge1AERtmzwR9Cee2Ow9aAGeQ49M/kAPfOGzntigBDCwz6Z9uR+GcZ96AEMR6/L2xz6/mOMU + AN8rJyemP5+nSgA8lfU/5P8An3oA+iWHP5fn3PHAoAYR2P6+4/TrQBE6jjp16fqCPoaAK7xg5I9AOnPH + v9KAIGjIJ78nt7jsOOc0ARFevGD647/hg5oAqS2ylTt68YJyf73HB4GD+lAFFreQDIG4ew5645U85oAp + uq8jHXHf0OenTvQBA0KH+EA5B6cf985x0oArtbcnBwMj3wD1znHTt+tAFdkZSRgnHccj659DQBC8at95 + QeCQcc8+3Gc4oArmJP7vHTuM4yPrmgCJolGCCfcdRjv2oAi8vPH+c9ex4xQAeV37+49vx4NADDD19PTP + t7jGM/pQA37MN3UkemO/v1H4cUAIYVB5A9sehz75oAPLGMY7eg9OvTPSgD3pgCD9Pr+lAETZyPdgOTjj + v1wSAKAIG5we+ATzwPbHY0AQsxBxjt349/xFAEbZzzx3/SgCMoD6/wCe5oAYy4HX157D+fOKAKzjBx26 + dh2yc9M9aAKkkaEABRnv9ffBDDPegCm8Y4IGenrwOBxgc0AV3iYj8ue3TJx3OPagCuUI4I9Pz/xoAYVH + OQPfI/n+FADDEh6gdv0wP5CgCE2y5OMc549vQenSgCM20eQeRjqMAfgeMYx+dAEEkSgnr06+vrng8cig + CHyxzkZ6jn8OO2aAG+Xjp+A6UANKkdvx/T69qAEoA90ZCp56Zx7jjrx/k0ARsvBBHUY/SgCAoTnuQCOv + TOf50AQsnt/P1HfPXmgCJht7jB5579Dx360AQMM+30/z0oAjYjAyeCTj2xxjHr7e1AELEdAM5znIwD1z + 35oArlOvHXn0xnsBzmgCuyenX+fYnJoAhI4I/wAOf6c0AV3xz3H0z9KAK5A7j16/rn8qAGlRj8+/5e1A + EJIHqf8AP8qAK5JJz7//AFvbBoAjYk/eA6fTBI9+cj2oAj2Y5brnOOKAI2AbO7Azn36cexzxQBGVB7no + PT8e3rQA3YPX/wDX/hQB7s+c+2Pwz60AQsDg4zkdzg9AfcdaAK5JHOPw9OefqfegCIgeg65A64/+vQBE + 4P4DBx79ievWgCAr37nPA9f1oAiIz16d/wD9RBFAEJjx9OmenXrnHvQBC0ZJ+U4/z7fSgCFoyPlznJOO + fz54wRigCm4IGfX6egJ7ED8eaAKrjgkcckfh3HrQBCfp/nH5d6AIipPP58fTj3FADGQnj8OOOn17e/rQ + BCybc9x/Ln64zQAx0OBxz6cA/rzQBEwOduDkHGOT9PXqKAIzGTknOB25/HtjINAC+WBnj15P5dc470AJ + 5Rz2xnpk46Y6/wB7NAHtz9B16/h/+ugCI9D/AF6fjQBWk6n8ev8AT39KAIx3/Dp/vfw+1ADD0PTp36fj + 7UAVj07fj0oAi/Lr2+71PX/PSgBtADW+73/4D06f+g0AVZPu/iev4/8AjtAFZ/vfw9V6dPu/z9P9mgCk + 3Qfd/i+v8X/jv9c0AV5Ov8P3T1+91PX/AGqAIaAI3/4D0/i+o6+3/wBegBT0H/Af97/9dAEB6t9f4f8A + d/l6UARr95+vb6fd/h9/T2oAR+vb7w6/7q9P9qgAX7p/z2HX2/u0AO/g7dfx/wD1/wBKAP/Z + + + + + /9j/4AAQSkZJRgABAgEASABIAAD/4QZWRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAAB + AAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAMAAAExAAIAAAAbAAAAcgEyAAIAAAAUAAAAjYdpAAQAAAAB + AAAApAAAANAAAAAbAAAAAQAAABsAAAABQWRvYmUgUGhvdG9zaG9wIENTIFdpbmRvd3MAMjAwNDoxMTox + MCAxNjoyMzoxMQAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAApKADAAQAAAABAAABOgAAAAAAAAAG + AQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEu + AgIABAAAAAEAAAUgAAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklGAAECAQBIAEgAAP/tAAxBZG9i + ZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwM + DAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwR + EQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAoABUAwEiAAIRAQMRAf/dAAQA + Bv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcI + CQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT + 8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm + 9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAz + JGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1 + VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A7JyGURyG5JSMoZRCoFJSMqBRCoFJTBMU + 5TFJTEpJ0ySlkk6SSn//0OyciYlVV1xpsGtjXCt3g8CWlRcFAOcx7Xt+kwhw+ISU2KsVg+z1uY317WPs + s9QFwDR9Bmzc1Aq6c+1rXMfLX0i0Ej846ej9L6X8tSdm3nJ+1Hb6m3bEHaBx4oTcu+umqlpGyl4sZIMy + Du2u1+h7klKdgNYx1tt2yuutllhDCXB1n0ag3d7kXGwqG57cLIqF4sBsZeHOb7Nst/RtP7zUF2bc59z7 + GssbkQLa3Alp2/QjXc3aofbsgZYzPabWja1sHYBG3aGg/wDfklKGPj31/anEYVG8UNa0OtJeeXncW7W7 + U1nTLKwRY8BwyW40Aae8NsbbM/uv/m1CjLfRWaiyu2svFgZaJAeOHtgtU29SyW7y9tdxssF02N3bXgBr + XV6/mtb7UlLP6dXXXZZbkittdzqNWE7iG727dhP0lS7aqzdmXXVvreGhr7TeYBneRs/ePsQISUxhJPCS + Sn//0e1cENwRnBDcElIiFAhFIUHBJSIhQIRSFAhJSMhRhEITEJKRwmhThLakphCSnCSSn//S7khQcEVw + UCElISFAhGIUCElIiFAhFIUSElIi1RhFLVGElI4ShThLakphtSU9qSSn/9PvnBDIRiFAhJSEhQIRSFEh + JSIhRIRS1RISUiIUYRYUdqSkcJQpwlCSmEJKe1JJT//U9CIUCEQhRISUjIUC1FLVAhJSIhMQikKJCSkR + CYhELVGCkphCaCiQlCSmG1JSSSU//9X0ZwUCEaFEtSUhTEKZaokJKRlqYhETEJKRQmhEITbUlMITEKcJ + oKSmMJKUFJJT/9b0ohMpQmISUwLVEtREySkJaokI5AUS1JSGE0IpaokJKYQmUyFGElMUlLakkp//1/Ti + JUCEUqJCSkZCYqZaokJKYEJlMhNCSmCYhSIShJTCE21ThKElMNqSnCSSn//Q9QSTpklLJiE5TJKYkJiF + KExSUxhNtUkySmMJQnShJTFJShJJT//Z/+0LJlBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAHHAIAAAIA + AgA4QklNBCUAAAAAABBGDPKJJrhW2rCcAaGwp5B3OEJJTQPtAAAAAAAQAEf//wACAAIAR///AAIAAjhC + SU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAeDhCSU0EGQAAAAAABAAAAB44QklN + A/MAAAAAAAkAAAAAAAAAAAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1 + AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAAB + ADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA + /////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD///// + ////////////////////////A+gAADhCSU0EAAAAAAAAAgABOEJJTQQCAAAAAAAEAAAAADhCSU0ECAAA + AAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANLAAAABgAAAAAAAAAA + AAABOgAAAKQAAAALAFMAZQBpAHQAZQAxAEYAaQBuAGEAbAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAAAAAAAAAAApAAAAToAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAA + AG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAA + AExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAToAAAAAUmdodGxvbmcAAACkAAAABnNsaWNlc1ZsTHMA + AAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25n + AAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVl + bnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAA + AFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAE6AAAAAFJnaHRsb25nAAAA + pAAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFs + dFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAA + AAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25l + bnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xp + Y2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25n + AAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAA + AAAADAAAAAE/8AAAAAAAADhCSU0EFAAAAAAABAAAAAQ4QklNBAwAAAAABTwAAAABAAAAVAAAAKAAAAD8 + AACdgAAABSAAGAAB/9j/4AAQSkZJRgABAgEASABIAAD/7QAMQWRvYmVfQ00AAf/uAA5BZG9iZQBkgAAA + AAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwM + DAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwM + DAwMDAwMDAwMDAwMDAwMDP/AABEIAKAAVAMBIgACEQEDEQH/3QAEAAb/xAE/AAABBQEBAQEBAQAAAAAA + AAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwz + AQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2 + F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3EQACAgEC + BAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPElBhaisoMH + JjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5en + t8f/2gAMAwEAAhEDEQA/AOychlEchuSUjKGUQqBSUjKgUQqBSUwTFOUxSUxKSdMkpZJOkkp//9DsnImJ + VVdcabBrY1wrd4PAlpUXBQDnMe17fpMIcPiElNirFYPs9bmN9e1j7LPUBcA0fQZs3NQKunPta1zHy19I + tBI/OOno/S+l/LUnZt5yftR2+pt2xB2gceKE3LvrpqpaRspeLGSDMg7trtfoe5JSnYDWMdbbdsrrrZZY + QwlwdZ9GoN3e5FxsKhue3CyKheLAbGXhzm+zbLf0bT+81Bdm3Ofc+xrLG5EC2twJadv0I13N2qH27IGW + Mz2m1o2tbB2ARt2hoP8A35JShj499f2pxGFRvFDWtDrSXnl53Fu1u1NZ0yysEWPAcMluNAGnvDbG2zP7 + r/5tQoy30VmosrtrLxYGWiQHjh7YLVNvUslu8vbXcbLBdNjd214Aa11ev5rW+1JSz+nV112WW5IrbXc6 + jVhO4hu9u3YT9JUu2qs3Zl11b63hoa+03mAZ3kbP3j7ECElMYSTwkkp//9HtXBDcEZwQ3BJSIhQIRSFB + wSUiIUCEUhQISUjIUYRCExCSkcJoU4S2pKYQkpwkkp//0u5IUHBFcFAhJSEhQIRiFAhJSIhQIRSFEhJS + ItUYRS1RhJSOEoU4S2pKYbUlPakkp//T75wQyEYhQISUhIUCEUhRISUiIUSEUtUSElIiFGEWFHakpHCU + KcJQkphCSntSSU//1PQiFAhEIUSElIyFAtRS1QISUiITEIpCiQkpEQmIRC1RgpKYQmgokJQkphtSUkkl + P//V9GcFAhGhRLUlIUxCmWqJCSkZamIRExCSkUJoRCE21JTCExCnCaCkpjCSlBSSU//W9KITKUJiElMC + 1RLURMkpCWqJCOQFEtSUhhNCKWqJCSmEJlMhRhJTFJS2pJKf/9f04iVAhFKiQkpGQmKmWqJCSmBCZTIT + QkpgmIUiEoSUwhNtU4ShJTDakpwkkp//0PUEk6ZJSyYhOUySmJCYhShMUlMYTbVJMkpjCUJ0oSUxSUoS + SU//2ThCSU0EIQAAAAAAUwAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABIA + QQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAAAABADhCSU0EBgAAAAAABwAIAAAAAQEA + /+EZNGh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdX + NU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRh + LycgeDp4bXB0az0nWE1QIHRvb2xraXQgMy4wLTI4LCBmcmFtZXdvcmsgMS42Jz4KPHJkZjpSREYgeG1s + bnM6cmRmPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjJyB4bWxuczpp + WD0naHR0cDovL25zLmFkb2JlLmNvbS9pWC8xLjAvJz4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91 + dD0ndXVpZDo2ZWM3MjU3MC0zMzJjLTExZDktYTQwNi1lODAyZGMwZjAxMTknCiAgeG1sbnM6ZXhpZj0n + aHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8nPgogIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpD + b2xvclNwYWNlPgogIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNjQ8L2V4aWY6UGl4ZWxYRGltZW5zaW9u + PgogIDxleGlmOlBpeGVsWURpbWVuc2lvbj4zMTQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogPC9yZGY6 + RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9J3V1aWQ6NmVjNzI1NzAtMzMy + Yy0xMWQ5LWE0MDYtZTgwMmRjMGYwMTE5JwogIHhtbG5zOnBkZj0naHR0cDovL25zLmFkb2JlLmNvbS9w + ZGYvMS4zLyc+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0n + dXVpZDo2ZWM3MjU3MC0zMzJjLTExZDktYTQwNi1lODAyZGMwZjAxMTknCiAgeG1sbnM6cGhvdG9zaG9w + PSdodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvJz4KICA8cGhvdG9zaG9wOkhpc3Rvcnk+ + PC9waG90b3Nob3A6SGlzdG9yeT4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24g + cmRmOmFib3V0PSd1dWlkOjZlYzcyNTcwLTMzMmMtMTFkOS1hNDA2LWU4MDJkYzBmMDExOScKICB4bWxu + czp0aWZmPSdodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyc+CiAgPHRpZmY6T3JpZW50YXRpb24+ + MTwvdGlmZjpPcmllbnRhdGlvbj4KICA8dGlmZjpYUmVzb2x1dGlvbj4yNy8xPC90aWZmOlhSZXNvbHV0 + aW9uPgogIDx0aWZmOllSZXNvbHV0aW9uPjI3LzE8L3RpZmY6WVJlc29sdXRpb24+CiAgPHRpZmY6UmVz + b2x1dGlvblVuaXQ+MzwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxy + ZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSd1dWlkOjZlYzcyNTcwLTMzMmMtMTFkOS1hNDA2LWU4MDJk + YzBmMDExOScKICB4bWxuczp4YXA9J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8nPgogIDx4YXA6 + Q3JlYXRlRGF0ZT4yMDA0LTExLTEwVDE2OjIzOjExKzAxOjAwPC94YXA6Q3JlYXRlRGF0ZT4KICA8eGFw + Ok1vZGlmeURhdGU+MjAwNC0xMS0xMFQxNjoyMzoxMSswMTowMDwveGFwOk1vZGlmeURhdGU+CiAgPHhh + cDpNZXRhZGF0YURhdGU+MjAwNC0xMS0xMFQxNjoyMzoxMSswMTowMDwveGFwOk1ldGFkYXRhRGF0ZT4K + ICA8eGFwOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDUyBXaW5kb3dzPC94YXA6Q3JlYXRvclRv + b2w+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDo2 + ZWM3MjU3MC0zMzJjLTExZDktYTQwNi1lODAyZGMwZjAxMTknCiAgeG1sbnM6c3RSZWY9J2h0dHA6Ly9u + cy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMnCiAgeG1sbnM6eGFwTU09J2h0dHA6 + Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8nPgogIDx4YXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VU + eXBlPSdSZXNvdXJjZSc+CiAgIDxzdFJlZjppbnN0YW5jZUlEPnV1aWQ6MGY0YTgzMDctMzMyYy0xMWQ5 + LWE0MDYtZTgwMmRjMGYwMTE5PC9zdFJlZjppbnN0YW5jZUlEPgogICA8c3RSZWY6ZG9jdW1lbnRJRD5h + ZG9iZTpkb2NpZDpwaG90b3Nob3A6ZjE3YTM1YmEtMzFjOS0xMWQ5LTlkYTctOWM3NWVhYTY2ZThiPC9z + dFJlZjpkb2N1bWVudElEPgogIDwveGFwTU06RGVyaXZlZEZyb20+CiAgPHhhcE1NOkRvY3VtZW50SUQ+ + YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjBmNGE4MzBhLTMzMmMtMTFkOS1hNDA2LWU4MDJkYzBmMDExOTwv + eGFwTU06RG9jdW1lbnRJRD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRm + OmFib3V0PSd1dWlkOjZlYzcyNTcwLTMzMmMtMTFkOS1hNDA2LWU4MDJkYzBmMDExOScKICB4bWxuczpk + Yz0naHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8nPgogIDxkYzpmb3JtYXQ+aW1hZ2UvanBl + ZzwvZGM6Zm9ybWF0PgogPC9yZGY6RGVzY3JpcHRpb24+Cgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgog + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + ICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0ndyc/Pv/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5v + AhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAA + AAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIY + AAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANM + AAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8 + AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xl + dHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAA + EnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+i + AAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAW + SUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2 + Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0y + LjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNj + AAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAA + AAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlW + AFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2 + AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8 + AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZ + AR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHy + AfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMW + AyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSM + BJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZ + BmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiC + CJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsL + CyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34 + DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFP + EW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUS + FTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlF + GWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3s + HhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMK + IzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSii + KNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63 + Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVN + NYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8Jzxl + PKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQD + REdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwq + THJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1Tb + VShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4a + XmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fp + aD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJL + cqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1B + faF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjO + iTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0 + lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2 + oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8W + r4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70V + vY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2 + zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr7 + 24DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl + 63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3 + /Af8mP0p/br+S/7c/23////uAA5BZG9iZQBkQAAAAAH/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwP/2wBDAQEBAQEBAQEBAQECAgEC + AgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/wAARCAE6AKQD + AREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA + AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6 + Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz + tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEB + AQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEI + FEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp + anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX + 2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+l244LY7Fun/6zQBjXPX049OSPrkUAZE3 + 4d+n0HSgDJn/AMPw6+nWgDGk6Nx+H49KAMqf7rfTr+VAGOepz1zzQBnXH/LT8aAMx/un9T6e9AGXL1b/ + APX2/WgDOk/i/H1oAzZev4n/AD3oAomgCJ+v4f40AVn6/SgCqevr70AVn5Dfj0x9fWgCCgA/z/nvQBFu + I7/mPz/HPbpQA7PGO3TGDnGcY+uOaAP0hn5J+pwf64PWgDFuRhjjnjHf8/fg/SgDIn7/AI/Tp3xQBkzj + +n9f8KAMaToT15zx9e1AGVcfdbnsf89O9AGOep+v+evNAGdcDG/vn2P6A+hoAzH+7+P+NAGXMOvfj+Xe + gDOf+L8f8/SgDNlHP4/z/wAaAKR6n6mgCJ+o/wA/560AVW6mgCs33j9aAK7g5PvnHf8AnQBWNABQAzaf + 84PHf8aAFwcY/wD1/T739aAP0hmGC2eu4+vX16ntQBjXI5PUAg4PbA9sZoAyJgOeD/nqaAMqcd/f0x/+ + rrQBiSD7wGMZ7eg/GgDMnGQw/wB4e/P86AMRvvH6/wA+aAKVyOTxnK/yJ96AMl+n+f8AJzQBmzDrj0I6 + H8vSgDMcckev9aAKEw6/T+R/woAz3GD9aAInGR9KAKr9frQBXcc5/wA9hQBC4yB7UAVnXv8Ap7evSgCO + gAoAKAP0inHzNj2P+NAGNcjnp7Y9ufw5oAyJfp26/wBOnrQBkzjgn3/+v/SgDFlGGcfj3+ufXrQBmzAc + 9uh/GgDCkGG/z2oAqTjgHHqM5/TGO9AGRIMbvoTQBnzDI/DOfp+HXFAGVIMH9PyoApTKP8+/H86AM6Re + vt+ooAhPII9aAKsi4H0/UUAQEZGKAIWGDj/OKAImTuP8mgCEoD7f4c0AN8v3/T/69ABs468/p0/xoA/S + K4HP1XGfz/GgDGuV4zj1z1zkYoAyJV7dufyNAH0J45+B+gab8HtI+KXhXVtY1EXUOjXWqWeomyeGyttR + U2l0sZtLaGTzrHWZI4GyWXG49s0AY3wJ+BGk/FTT/FGu+JNW1PRdG0KS2tbe6042aie6EE13qPnPeW9w + iRWNp5LHABPm9eKAOWl034On4Ta1eW+heMJvHCXeoro+uzWurto62S+IfL09r65t3j0UXA0XCSfuwvnn + GAcUAfOWq6Lq+mLHPqOlalp8M5xBLe2NzaxTMVDERPPFGrnHPBPFAFG90fVbS0gu7zTNQtLS6CtaXV1Z + XEFtch4/NQ288saRTB4juBUnK8igDK1DQ9ZsLaG/vtI1OzsbkxrBeXdjdwWs7SxtNEsVxNEkUrSwozqF + JyoJHFAGlb/DX4ialpf9s6f4C8aX2jFDKurWfhbXLrTGiABMgv4LF7UoFYHO/HNAHX/BjwP8I/F974kh + +LXj268Aw6dBp7aNJA9rE+oTzS3i38Ugu9Pv/wDj1jhiOAEIL85oA+vLv9jb9ny18GL8Qrr4s+KofBTW + 9tdL4jaXQxp5t769h061lD/2EZNs97Oka/L95hQB8Q/GfwD8OPD3inQtE+DPi3UfiRZanpSS3MqJFe3k + esNfXcK6dbw6fp9m8rG1ijcKI2Yl+vYAHmev/Dn4g+FLNNQ8T+BfGXhzT5Cqx3+veGNb0izkLlQgS51C + xt4GZywAAbkkUAc9a6DrepWlxfafo+q31nZ7/tV5Z6fd3NrbeXGJpPtFxDC8UPlwnedzDC8nigCrZ6Br + mpw3F1pmjarqNtak/arix0+7vILbCGQ/aJreGRIcRgsdxGBzQBHHoOt3GnSavDo2qzaVDv8AO1SLTruT + T4vLO1/NvUhNsnlswzlhgnmgCjd6XqVgltLfWF5Zx3sIubOS6tZ7eO7tz/y3tXmjRbiHP8SEr70AUCB3 + H+NACFQf8/45oANo/pnj/wDVQB+jtwvfj5SfXjnH060AZFwuVPsfYcE4oAxZl6/j2649qAPuD9nG9t/H + fws8dfCvUpUZreG+SxE2MQ6f4jgnMbwrhmY6drUUk5YA7XmT2oAXxJHP8FP2WF0SVBY+JvFqPp91Gu0T + Le+JnmuNSWUD5hLZeGoGtyw+5Ii89KAOd0QZ/Yl1wf8AYR/9TiCgC7r+i3Hx2/Zk+G32MNca9pHiDwro + k8iDzbiGaLVB4HvJ7jpiN7W/ivpSflWNQ7EAEgA9A+O3hnSvib8Ode8BeFYg2sfDTxd4I0u3tI1z9na9 + sdGto/KKcG1h0XxM4YdBJbOCAVFAGX8UrPQPFXxz+BHwcuooZ/D3hzTtU8X6lpMgSW3uv7N0u6h8N2Nz + Ft8tkhOhyGSJhh4JiCu1hkA4L4l/tF/ELwp+05ovw60mezi8FWmteCtB1HRjpdlK+qxeJrXSLm7u/t8k + Lahb3Vqms7YBDLFEGhXejgsGAPn79u7wZo3h/wCJ+ka7pNtDZyeLvDwv9Xt7eNI0l1WxvZ7KXUPLUKiy + Xtr5IkwAXkjZzlnYkA908X8f8E9bUf8AUs+Cf/Vi6DQBxv7B3hvRtL8KfE/4pzWMN/r2jGbSdNMiK01l + Y2GjnWb6K0cgmF9Wknijdh822EAcFgQDrP2Tfjp43+PWufEbwP8AFX+yfE2h3Ph99UgtW0XTrO1tbK4v + o9NvdDaO0ghF5YTQ3ylDcedcKYzmU5oAb+z94ftvCXwe/a58K2cjTWfhnxh8WPD9pK53NLbaN4Xl06CR + m/iZ4rYEnuTQBxv7DQ/4sn8esd/tf5/8IlfUAdH+z34ij8HfsReKfEsuiaV4jXQ9Q8U6gNE1yH7TpOoS + QalYNDDfwD/XW6ylWK/xbcUAfnt8b/j34s+PWp6Dqvi3SvDml3Xh+wutNtE8N22pWltJbXNytzmeLU9V + 1aQzRuuMq6qR/DQB4dgeg/KgBuwe9AC7F9P1oA/R66Qndnjge/I5oAxZVz+PX09OceooAxplxnjuevqM + 596APQvg/wDEVfhd41g8RXMF1eaZNp99pmq2dmYhc3Frcos0Hkid44t8OoW8Lncw+VSB1oA2P2g/jNaf + Fu68PR6RY6jpuj6HbXrNb6ibYTT6lfyxLNMVtJ542iitrWJUJbILPwAckAhsPjVoNj+z/qXwik0nWH1q + 7+1+XqSCyGlqJ/EMesLu3XQu/lgQqcRn5/bmgDQ/Z+/aK0j4Q+H9d8PeINJ1nVrS91ePV9NOlfYibeae + 0jtNQSYXlzbbUcWcDJtLDO/IHcAzfhP+0va+BfHvxO8U+JdL1fUtO+IOpHVlsdNNo81jewajez2K4vLq + CJYYbC/aLKsWPlp1AyADzHxb8b9V1H44v8ZdAhltZbHUrKbR9OvymV0iz0+PSpNNuvIklSNdRsPNWfy2 + ODO5U55oA+h7z9ov9mfxB4m0f4peJ/h14uHxG0WOzeD7Mttc2f2/TwG0+4Vh4hsNPv2sHb9zPcWySpsB + 2/JHgA+N/jn8W9S+NHji48WXtmNMsoLODSdD0jzhcHTtJtXmmRJpxHCLi6ubu5lmkbaMNJtHyqtAHrni + D9pHwrqX7MUXwOi0HxDH4gj0jQNP/teRdN/sZpdI8Uabr07gpfNe7JbeyZF/dZ3kZAGTQBwn7NX7REnw + L1fWbbVtJn17wd4nS2XWdPtHgW/tLqzWdLfUNPS6KW1w7Q3DxTQO8SyqVJcGMAgHvGm/tNfs6/B7S/FF + 58Cvht4jt/F3imPLSa6wh0qzdPNa0jlkm1/WbmOwsZ7hpRaWsaLMRtaVAEZQDy/9mP8Aah0P4WJ460L4 + maXqviDRPHOoy67dX+nW1jf3R1e8hktdYTU9PvLmyhvLHV7cruKvmNkI8t1kJQA9J0f9r/4DeC/D/jjw + h4B+Eev+F9F161v4LG4sm0x7rUrq+065tGv9ajutVlmtVgeZVihSe5CRAkFc7FAPE/CH7Rnhfw7+zL4p + +CF1oevz6/rv9t/Z9WgGnf2PD/ad3bXEPnGS9S9/drAQ22I8njNAHxuYs+n9fz4oAjMR9x196AG+X78/ + 54oAPL9/0/8Ar0AfpDcrxnjv/L9KAMOVPmI6c5H6+vWgDIuF+Y/gR9MYP6igDJlXr+X+BoAzZkznofTo + eR6exoAxbhMNnt0PXOfyGKAM6Reo9Ofw/wD1UAZNzF1Yf5HY9+nSgDOoAz7iPknHBzzx0OT+lAGY6dfX + offtxQBTljBGO3t2NAGZLGUJ/P689RQBAQDwaAK0kXB4znnr/TrQBTePHUfj3oAgKEdOf50AMoAKACgA + oA/R6ZOGHpnjGT7AfWgDEuE6n0yenUEgfpigDJuEyDxz97gZ68Ec0AY8ydeuOn9c8cdaAM2VPz6fj+FA + GTcx5z1P4d+T1oAyJVxnrx+eP/rUAUZY88djnH5cigDGmjKnofr6jsaAKzKGBB798UAZk0RBPHQnrz29 + c980AZ7r7cHr9aAKckWRz+BoAz5Iip//AFc+4oAgoAiaIHn/AD9M+lAFZoeen9D/AIGgCBoT3xn9eO9A + EZiPof59qAG+Ue2e3agA8o+/X0P+c4oA/SS5QAk+vf2wByfY9KAMW4j6g9D3B7dz+dAGPIvUehPX0/Dv + igDInQAnrjt9D/gKAMqVMduv8+eaAM6ZM5/H2yefzzmgDIniwSemM/l0+tAGa6fkeh9DQBnzxbgeOcZ/ + +v8AQ96AMl0Kk/y9M0AQPGHHv/n6UAZssJBPb/63P+e9AGe6EZHb+XH8qAK7xgjpuHvQBRktzyV5/mP8 + aAKpQj357UANx60ANKKe1ADDEvb+X+FADfJ+n5mgA8ke35mgD9HJowwIxz2x6ZBxxQBjTRkg8ZI5H/1u + vUelAGLPFjke5Ppg8k89DmgDKmjyOnToTjp3/CgDJlj/AF44/wDrnjmgDNkTOfUdvWgDOmiyD/nPT+lA + GPLGQTkDB7An9e4oApOnqOf5igDOmhzk9DzyP5HHPFAGY6FSf84oAhkUMOe3f+nUdaAM6WHPb+Xt0oAp + PEQT1Hvj1Hp2oArsnrwaAIGiHpnryB1479f8igCs1uDnGPxHPbqRzQBCbdh2Pfpg0AR+U3+R+WfQ0AJ5 + Tf5B6+n50AHlH8PoelAH6OSpgn19/TnjvmgDIuEIO4Zx6dcD1/SgDIuI+o7MCfzzke1AGPIhBII4PIOf + f1x1oAyp48duD+hx9OtAGXNHjoP8+nrQBQkQHnnv2zj1NAGbPD1I69cduh5GO1AGTJHt4IPsfegCnIn5 + /wAwfyoAoSw7uR74x2zzzQBlyxlQ3B46/Qf/AKqAKlAETxA9ODQBUkg9vf1P5UAVWhI57dvT/HrQBEYy + eoz/APWz+NAEexfp/n3zQAhj9/zoATyx3/LH9aADyvp+XvQB+iEq5GfTjrwPf8KAMyWPII9c8f0wc0AZ + E0fVTxkZHXj0z17igDGni68fN37kfTn3oAy5I8g5GD3z7CgDLlixweuOD7cjjrQBmyoRzjjvwADn296A + KUkYPPb/ADx19aAM2aHOSAM/iPYdfSgDLki29RwP65x+FAFCRCpz2PTp+X5UAVniVgf8OfwoAzZbXuvq + SepPvkf5xQBRZGUngkDvg49vagBnXg0ARtGCPSgCEwe38jjn86AITB+Hbv8A154zQBGbf2/zx75NACfZ + zxx6k8Ef5xQAeR7c/j9PzoA/QiVNrMvY5wR0/melAGdImR7fy/TpQBmzRA84A/n+FAGRPEcnjk8HoOnH + AP0oAyJ48EkZ/KgDNmjB5xz0I9f8DQBmTRkj36/WgDNdMZ447g9vzoAoyR4JwMg//rP1oApSQhskAfT1 + 9R+NAGZLCRnIyM9MY/nzQBReEjlfxH/1vrQBTcc59aAIGiR85HXqfX65oApvadSB/wB8/T+7jtQBUaF1 + 7Z/DnHrigCMgjgjH/wBagBMZ60AJtHp7UAJtX0oANq+lAH6B3EZKtgcqee2duQR7npQBkSjHzYyO9AFK + RM5xnpjB/r+dAGVNHkEjv1Hvzn8aAMm4jwc9+cgD3/OgDMmi4JHuT7Zxjp6GgDLki6gfUf5NAGfJFnkc + N3HrQBnyxdT0PXn6kH8M0AUmjIPH655/HmgCq8StnIwfp/OgCjJBg9Pp74465z1oAoSwcEEcf07nvQBQ + aDHQ/gfx5yP8KAISrL1BH8vz6UAMKqc5A59uaAIjCh9s/j+VAETWoP8Ad/Ln8+KAIjaDjg8dh35A5J5x + QA02nPG7/P4HrQAv2X/ZP5n+XXpQB+g1zEW+cZPGCB6f5NAGBPH35+bOcZ4xjv1zQBnyR7eQOp6AcAn8 + fWgDOnTqcccnpnJ554FAGbLHvDDvjGM9xnoenWgDKljwTwef198daAMySL249v8AJ6igDOmhIO4d+v1x + QBSeNX6jn174/wAmgDNliKHDDg9Dxz64x0/SgCs8f5fqP/rUAVZE4IPvjg9u2KAKTRg//X/oaAKkkK9S + pGeMkf1NAFVofTn9f/r0AV2gX075449vbFAEJg9OO4z/AJ9KAGGF/r/jQA0xuO1ABsb0/wA9uvrQAbG6 + 4/8A1+n1oA/QBwSST0J9h24xQBi3UO1iQp8tvyz0PPX+XWgDHlj2gg5KkemPxz7UAZsqYGff9euPwxmg + DOkTBJH+enQUAUZYwfxB7dyc0AZc8JHzc5A+ueO3POKAM6SMHORkdx6dsigDPkhPUDPXGMnHpnrgYoAq + PHkEEZ9+3/6qAM+SErkjp6HPGOuPWgCq0Y5BHPOfY96AKbwA/wCRzgn2GM0AVJIyOOo7j1P+TzQBWKDp + jFADDH9D9f1oAYYvb8qAIjCOeCO3Tpx+WaAG+QPX/P60AJ5P+c0AHk+3frmgD71MfUHg9COo4bJx09KA + M+aIMpVsfgeePegDFmi2khh8p6HGAfpyaAMqeIqScAq36HnjHHPHagDKljwemOpB6j6cCgCk8YPtjqOg + /wDrGgCmycEEZH+PWgDMntypJA4PQj1Pr+AoAoPH3H8uvPXjJ/xoApyQqc4HPcde/pQBSeLt+nrQBSlj + U8EHOO4wc+x96AKTw+2Pwx+vTmgCnJEQe+O3A9u+eevegCu0OeMevTpQBCYfT3/n70ARmJgfbnH+FADN + jdx/nP8AjQAmw/3f5dqAE2f7P6f59aAF2nHTjGe2MUAfeUkW4Ajrn0556AYIGc9AfzoAzZY+vAyfx6de + +CDQBmTRA7gcjj/OR7GgDMmg4IOCvY8HHbIznnnigDHngK5PYDv3HPT1oAzJIupXJJPTjuewoApuvcce + vbr0IoAqvHnPp1x3/wAKAM+SDk9Ppzj1x9eaAM6SA9QMe2OPqKAKTx9eOc8gj09MjrQBWeIMMdxn88Yo + AqyW+OnuecHp6YHrQBVeDIYYz79s549ep+tAFNrduT6emc9fT1oAhaE+hHIGCD/PvQBEYu+Pw+nf9KAG + mIj1/wA/nQA3ysf04/zigBvkg9f0z+Z5HrQAvkr0/p/XOaAPubBPY/5//VQBWkh3A464Y5Jyc9hyc0AZ + EsfJ45z+vcE0AUJIx0IyOn09s0AUJYQM55H09cjtxwKAMma1I3OuMDGRxxwOegGM80AZskWRgDB64PcH + /GgChJGU6jjkevc8UAQMit1/MUAU5IiOGGR6/wCHoc0AUpLcYJ6j9QOccjr1/CgCi9tn7p5/znPTigCo + 0bLncvQZ/DOM+uM0AQsgP+Hb8sUAQNCOuMe498j8qAIjADnB/D/IOOaAIWtx6D16D9SDQBEbcHHHA9OM + /XPNADPswyOD9Dg8enbAGKAD7OM9D0HOD7d/rQAfZx6H64Ofp16ZoA+2mX29e3TGTjp0oAqyKQfQn1HH + /wBegDPnjBzgD3/LjBJyAPyFAGRLHg888/qOPY80AVWUY9iSMH9P5UAUpIjzgcH9D+PtQBmT246jPoMd + j6EY7DNAGdJFg4deR3I+o96AKEtuV+ZckEj5QOmfx9aAKjfLwwPv9D3+lAFdox/Cf/rdO/fgUAVXiXkg + c/l6dR0B5oAgMRGT/nr29eKAKjwIxORg9/8AP4UAVXtSOQQR75B54P4UAVmhIz8uP1Hr1HHGPWgCJ4W5 + 5YexHbB69OpoAhMLD0Ppj69/SgBvlv8A3T+lACiJz6D3PT9AaAHeScdefw/xoA+0Wj28n3OfQ+tAFV03 + Drz79M89PTigCm8ZHXuOoPoSP50AZ80QJIAHcdM+vp6E0AZM0JXdgEgHr+J4z3wPpQBSYEe3qDxnvjnj + pQBA6K3t1GO47UAUZYBgZAI6euMHpnt0oAzZLcr0wR749v60AUZYVJGV4P4DscH05oAoSWzDBT5hzkZG + R6Y6cYoApyI44PsccelAEByP4f8AH8sUAV2UHP8ATgexxxQBEY8+hoAjMXUYP9P/AK+aAGGI+mcdOOmP + r0oAYYs4JUH0yB/XtQA3yl/ufzJ5/XHFACeSv9zrz39+mOgoAPJX+7+GB6dOmc4/GgD7GljIHA+vsfTv + g4OKAM1lwcdufx/HigCCVc4Pcds9fw9vWgCqyexIP1HfA6c9KAKcsII5AIA9ugzyfcj/AOtQBjzW5yxX + 3PoDnk56YODQBnuhUn26juP8RQBESOh7/l+NAFZ0ByQTznjjB4/PrQBReEd1HzDgj8PTGe3agCjJbleV + 79uhB7D/ACfegCo0ecgj24+p/rQBTltQ3KZHqCckn2oAoywMB0GCcDqfU54zjgcUAVCjDOR05/z+H6UA + NoAKADFACbR6CgBpVee35f4e9ADcDdjHf1PTH0zQB9lTwqeMdM84yfQjJwQcigDJuINoz9CCeOOn+fr1 + oAz3U9O45oAgIHcc9P5Z/EEUAQuo46/X37fjQBRki5xyOnQckD68UAZ8tuDnj73JOOp44zyBmgDLmgKA + 8dTjHJH4HvQBSZCOn5en/wBagCu+78Prkfy4oAqsp5znr16e+RjjNAFdos5IHJB6difQfU0AQtCCemM5 + 7d88+nSgCs9vycD19+Tj19c9KAKzWw5yoPGMYI/lxQBA1omTlCOhOPc8djxn+VAERs4zjG5cHnoc9OuR + x0oAjNl6OPyOO3B+bJ70AIbLn72ePoM+nO44IoAgNqxOOPTO7oOew6k98UAN+yvnPH+TjOcZ+7zj/wDX + QB9pzwYI9iSQePTpgj16UAZU0QIIIBIVsZ6ZwRxg4xQBlTQAkjG3BJ3YI4PAznJPPagDMkQqen15z75z + k0ARUAROgb5Rjkcj6d6AKrxDkEZHfpwB2GKAKMsXJ+XIJOPX1wDxigChLbhsegB2nHf1PQ9qAM6S2YZ7 + 4PXHBHX+dAFR4iM5BHPXn/OaAKzRenqeg7e/pQBC0eOwP4f5xQBE0anjOM9vy989aAISnPJz9PT680AM + MfpjHv8A/qoAaYs9h9f6dM0AIYRjoOwx+nGRjNADDAo9snjPOBnuOc5oAr+QueRk57HHXntj1oAXyBjG + 32znn65oA+y3j3ZB6c/hypOOP8KAMea3IyDxgnA464PPTOB0/I0AZksP95Qc5AHBPTHTHQjP8qAMye3y + HIHOepONvJ9Bnj6GgDLkiIJxkc45BHGSB29vwoAgIxnjn/DP9aAIGyTnpn/I/SgCBk9eR6/5+tAFZ4Qc + 8Z/POenb60AVGhYZ9O+eT6dMc5oApyQjsO2OmQBjHQ44oApPbjsOnUDrx1P14/8ArUAUpLd1JBBI7k8/ + r+GaAKjw44PHse+P6UAQtHjk/Tg/X/CgBuwepoATy/egBDH7/kDnt0xQBCyc8HPr/wDr9hQA3YaADYc4 + 9s+3XpmgD7EIz/8Aq59OufSgCGSIOORgj6dB2PHIH+eKAMue39iR1B4IxgAdsN0649qAMuWALx3BxjqD + 9ByR+P1oAzpYBgjGB6cjgnJ7rzkfWgDMlt8AkjGMkEHjGenPXr/nuAUXjI7DOMjHcevrigCAg4OQefw/ + nQBARg4oAgf7xoAgcZPQcD2/WgCrIg4/wx/LANAFNkOW5Ixzjk8dulAEDRBjyM7Tn2O0nr6gEmgCq8Ks + emB+QwRgY9MjkUARNbIenHAAHPXjqecj8KAIzbc8Z5PtgD8zzQBE0JDcfTn8cDjIB60AQmA9ex9CMD65 + 6Z/LmgBjRMDgA8dSfpnI9V96AG+Wc9Pxx+n58emaAPsBlKnGD3/Lt+NADMev1FAEbJuI9O3t06flQBnz + Qdflxk9fTPJwM5Ge+KAMuW3wTwWDA/OVI/3c9cDBz+GMcUAZbwkcFcAZ5HKkjIyO+MUAUpYQwbpyPTke + +SDyP/rUAZ8tu3YbhwOgHr0AJ5oAoMjDqvB6ZGMnHbIznB/CgCsRkHgEgfT8sjrQBAwBJHP/ANYH1oAi + KjnB9jn8cDGMmgCExg5/lnj8+aAISgzyO/YnHH0oAhMXTgevYfhQAwwjklfXP+R6UAQNFgnHT+XXtnti + gBnl8jPp+PTnHHSgBpTg8Z/H/PagBAh64x3/ACGOnrgUAN2j09++PrigD6uZQf5Hp+HXvmgCq64J6446 + 8H6kY4NADKAIXGT0Bxkn9cfiBQBWeMN355JBx83+1ge9AFCaAEHK9uijOee3HGRnn60AZc1rjJ/4Ew5O + PxOO/f0oAoSwdQACDngHkA5Iz9eKAM94AM5UH3wDgjH1C0AUZbcEkKuM9xk4IyevZeP1oApPbEc8HJIy + MkDGe47nHp1oArNEecDIP54zxn8aAITHjjJB7/8A6qAIzF7D8O/I9qAGbB7j/OKAI2XHTOPU/wD1qAIS + nTH45oAjZPUe/wDj09aAGFBjjOc0ARsOOvB6/wBevbBoAi+XpznpnPf0+nbpQB9XMuPegCB0B559O5P6 + c4oAgeMrj39M4z6UARY/D6f5GaAIn6/THv8AzoAgk7evt1oArNED6AnAzkn26cZJHFAFSS2DYOM9++fu + 45P49frQBQltTn7vBxkEdccEgngEZ60AZ8tr7ZA5HHUdgBgYB7UAUJLYAcHjbg5Ofbv6j+VAFU24DdOc + kngd8deAQaAKzW5zx2HQ5wT0xkY6A++c0AVZLc5+Uc4PpjPXOcY5zQBXMLDjuM56cdfQ44x70AQtCR3B + Pp/X9DQBC8eM57Ht3JAP45oAqSc9Ox68/wCA4oAix+X6cjpQBEwwen+enSgBn5+vT8elAH1ky49/w6Yo + AgZCDx6kfSgCB1z/APrPvx+tAFZlxjGcUAQOD9cf/WHHrmgCu696AIm+Xr3x+tAETHkY6eo9xzQBG2Dj + dzn5SSc8cnn0GPSgCtIgPGAc8kc89OgwATxQBTktweRgDjCjA5bvnnK5/wD1UAUXgU5GDxkDr1IOOOPn + oAqSRgHpxySMcLnOMsc5XBxnvQBUeFcsPx6dO/TrwaAKTQFiQME5PTHzYPHBI6D1/wAaAK7R4BLLjBGe + BnPODnpQBTkTI6cZz7gk+o5B/KgCB4lYcjOQOTnpu+uSRQBCYEHIGfqRwOc8YwRk/XNAEZhVjkjnoeO2 + enOcc0AJ9nHT5+n97nG7rjGP/re9AH1bNalTkEYySBnIAJwq5blycUAUmBB55z/nFAETID/XPP8Aic5o + ApsOoII+owf6cUAQsAAP8+vX3oAiKA59/wDPSgCrJGQOSMYxjqf5c9KAKrDHp7df65oAgJI+v49PqDQA + 1jk5/IfTtQBA5Vx7g+x9eD6j2oAgkXIPbntwcke3O7pQBSkjJySBznJGc/xDA6dqAK7x5HTIx26HgdT1 + 596AKskX8Wf17YwfUDcD7UAUpIwTjp1HIGewGSxI4/pQBUaAsDkcjJyygDsR06nA9xQBAbdvQ8gcZwRg + fz470ANNsegVQduB06EfLjJJ6nFACi3IyBjPPA5GCOuDwMZ6UAL9mbr3ztxtX+7jr+nSgD6qKg5yPY+4 + HODx0z2oAoXFoHyyDkL6nJIzx0IOaAMl0ZCQQRgkcg9qAIXTd279fyA+lAFZkwDz/Pp+nagCsy4PGcfn + 069KAIHyDz35Ht+HagCBl6EfT0/LtQBAUXvjHp0HX169aAKrp1AyR+oz74FAFUxsMkHPOcc9+w9dtAEZ + zjDdvoe2ME+ooAgcE4xQBXdMjGMf/X6/zoAgePJwen8/8OlAFd4lzlgCfXkZ5z/OgBhiXjj/ABwfc5+t + AERhPbkZwOgIz39+D/nsAIbfrgAcDGCev49v1oAaYOO+OuOMDnoOOaAG+Qfvc/Xt6ZzjHXigD6feLI+X + HHTJPftzQBWYFc5HT/ED+ZoApTRLID8oBIPIwM9doJwR1PUg0AZksDJyASv0PHIA6/3j070AViueo9sH + p/n+VAEEkfVvT2OMZ79T05oAoSLlvm6/TBxj/GgCsy8kEn/Pf680AQshA6g/pQBWI/l9Of50AQMCCPf3 + 6nv+tAFdlOTxn9f89aAIWU5zn/P8/pQBCR3ye/vmgCJlH4dQDwfT6UANMYP+ePY9OKAI2THTkfh1P/66 + AGbPb26c+lAB5fbGP/1+vXtQAeX7Y+vbP6jpQAeWMbdq7c9Plx+WcZ9qAPo1gSOuef8A9XH1oAidcjnB + z36g478YyeKAKrREdOvJxnjjHTuAKAIWXPDD0PY+4Iz3/lQBSktFIJTg5BwT7cjcck7j9eaAKLwyIeVO + OvAJwPfjigCu0at1APseR+H938KAKM1qeWUk4PAxkkcencHPYf1oApvEw4Ydeg55/kaAITGMY5GfXr6Y + +lAELQkg469PXI6E545H60AV2ibB+TOCfXGBxwPUfzoArNHngg/yzg8npigCNoAehI65/Lj8jQBGbfI+ + 99BjGPxzzge1AERtmzwR9Cee2Ow9aAGeQ49M/kAPfOGzntigBDCwz6Z9uR+GcZ96AEMR6/L2xz6/mOMU + AN8rJyemP5+nSgA8lfU/5P8An3oA+iWHP5fn3PHAoAYR2P6+4/TrQBE6jjp16fqCPoaAK7xg5I9AOnPH + v9KAIGjIJ78nt7jsOOc0ARFevGD647/hg5oAqS2ylTt68YJyf73HB4GD+lAFFreQDIG4ew5645U85oAp + uq8jHXHf0OenTvQBA0KH+EA5B6cf985x0oArtbcnBwMj3wD1znHTt+tAFdkZSRgnHccj659DQBC8at95 + QeCQcc8+3Gc4oArmJP7vHTuM4yPrmgCJolGCCfcdRjv2oAi8vPH+c9ex4xQAeV37+49vx4NADDD19PTP + t7jGM/pQA37MN3UkemO/v1H4cUAIYVB5A9sehz75oAPLGMY7eg9OvTPSgD3pgCD9Pr+lAETZyPdgOTjj + v1wSAKAIG5we+ATzwPbHY0AQsxBxjt349/xFAEbZzzx3/SgCMoD6/wCe5oAYy4HX157D+fOKAKzjBx26 + dh2yc9M9aAKkkaEABRnv9ffBDDPegCm8Y4IGenrwOBxgc0AV3iYj8ue3TJx3OPagCuUI4I9Pz/xoAYVH + OQPfI/n+FADDEh6gdv0wP5CgCE2y5OMc549vQenSgCM20eQeRjqMAfgeMYx+dAEEkSgnr06+vrng8cig + CHyxzkZ6jn8OO2aAG+Xjp+A6UANKkdvx/T69qAEoA90ZCp56Zx7jjrx/k0ARsvBBHUY/SgCAoTnuQCOv + TOf50AQsnt/P1HfPXmgCJht7jB5579Dx360AQMM+30/z0oAjYjAyeCTj2xxjHr7e1AELEdAM5znIwD1z + 35oArlOvHXn0xnsBzmgCuyenX+fYnJoAhI4I/wAOf6c0AV3xz3H0z9KAK5A7j16/rn8qAGlRj8+/5e1A + EJIHqf8AP8qAK5JJz7//AFvbBoAjYk/eA6fTBI9+cj2oAj2Y5brnOOKAI2AbO7Azn36cexzxQBGVB7no + PT8e3rQA3YPX/wDX/hQB7s+c+2Pwz60AQsDg4zkdzg9AfcdaAK5JHOPw9OefqfegCIgeg65A64/+vQBE + 4P4DBx79ievWgCAr37nPA9f1oAiIz16d/wD9RBFAEJjx9OmenXrnHvQBC0ZJ+U4/z7fSgCFoyPlznJOO + fz54wRigCm4IGfX6egJ7ED8eaAKrjgkcckfh3HrQBCfp/nH5d6AIipPP58fTj3FADGQnj8OOOn17e/rQ + BCybc9x/Ln64zQAx0OBxz6cA/rzQBEwOduDkHGOT9PXqKAIzGTknOB25/HtjINAC+WBnj15P5dc470AJ + 5Rz2xnpk46Y6/wB7NAHtz9B16/h/+ugCI9D/AF6fjQBWk6n8ev8AT39KAIx3/Dp/vfw+1ADD0PTp36fj + 7UAVj07fj0oAi/Lr2+71PX/PSgBtADW+73/4D06f+g0AVZPu/iev4/8AjtAFZ/vfw9V6dPu/z9P9mgCk + 3Qfd/i+v8X/jv9c0AV5Ov8P3T1+91PX/AGqAIaAI3/4D0/i+o6+3/wBegBT0H/Af97/9dAEB6t9f4f8A + d/l6UARr95+vb6fd/h9/T2oAR+vb7w6/7q9P9qgAX7p/z2HX2/u0AO/g7dfx/wD1/wBKAP/Z + + + \ No newline at end of file diff --git a/IpWorks/IpWorks.sln b/IpWorks/IpWorks.sln new file mode 100644 index 0000000..1e8a6e6 --- /dev/null +++ b/IpWorks/IpWorks.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpWorks", "IpWorks\IpWorks.csproj", "{47B560FD-0D55-45A8-99A9-A8A9C3706000}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {47B560FD-0D55-45A8-99A9-A8A9C3706000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {47B560FD-0D55-45A8-99A9-A8A9C3706000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47B560FD-0D55-45A8-99A9-A8A9C3706000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {47B560FD-0D55-45A8-99A9-A8A9C3706000}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/IpWorks/IpWorks.suo b/IpWorks/IpWorks.suo new file mode 100644 index 0000000..185482c Binary files /dev/null and b/IpWorks/IpWorks.suo differ diff --git a/IpWorks/IpWorks/IpWorks.csproj b/IpWorks/IpWorks/IpWorks.csproj new file mode 100644 index 0000000..4e34718 --- /dev/null +++ b/IpWorks/IpWorks/IpWorks.csproj @@ -0,0 +1,40 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {47B560FD-0D55-45A8-99A9-A8A9C3706000} + Exe + Properties + IpWorks + IpWorks + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + \ No newline at end of file diff --git a/IpWorks/IpWorks/IpWorks.csproj.user b/IpWorks/IpWorks/IpWorks.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/IpWorks/IpWorks/IpWorks.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/IpWorks/IpWorks/Program.cs b/IpWorks/IpWorks/Program.cs new file mode 100644 index 0000000..addd659 --- /dev/null +++ b/IpWorks/IpWorks/Program.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Net; + +namespace IpWorks +{ + class Program + { + static void Main(string[] args) + { + while (true) + { + uint baseip = 0; + uint BorrowedBits = 0; + uint fixedbits = 0; + uint subnet = 0; + uint extendedsubnet = 0; + + Console.WriteLine("Bitte Netzwerkadresse eingeben"); + string sIP = Console.ReadLine(); + IPAddress ipNetwork; + + if (!IPAddress.TryParse(sIP, out ipNetwork)) + { Console.WriteLine("IP ungltig"); break; } + + uint baseip1 = ipNetwork.GetAddressBytes()[0]; + uint baseip2 = ipNetwork.GetAddressBytes()[1]; + uint baseip3 = ipNetwork.GetAddressBytes()[2]; + uint baseip4 = ipNetwork.GetAddressBytes()[3]; + baseip = (baseip1 << 24) | (baseip2 << 16) | (baseip3 << 8) | baseip4; + + Console.WriteLine("IP: {0}.{1}.{2}.{3}", Convert.ToString(baseip1), Convert.ToString(baseip2), Convert.ToString(baseip3), Convert.ToString(baseip4)); + + Console.WriteLine("Erste drei Bits: {0}", Convert.ToString(ipNetwork.GetAddressBytes()[0] >> 5, 2)); + + fixedbits = 0; + subnet = 0; + + if (baseip1 >> 7 == 0) //Klasse A + { + fixedbits = 8; + Console.WriteLine("A-Klasse - Standart-Subnet:"); + } + else if (baseip1 >> 6 == 2) //Klasse B + { + fixedbits = 16; + Console.WriteLine("B-Klasse - Standart-Subnet:"); + } + else if (baseip1 >> 5 == 6) //Klasse C + { + fixedbits = 24; + Console.WriteLine("C-Klasse - Standart-Subnet:"); + } + + baseip = (uint)((int)baseip >> (int)(32 - fixedbits)) << (int)(32 - fixedbits); + baseip1 = baseip >> 24; + baseip2 = (baseip & 16711680) >> 16; + baseip3 = (baseip & 65280) >> 8; + baseip4 = (baseip & 255); + + Console.WriteLine("Korrigierte Netzwerkadresse: {0}.{1}.{2}.{3}", Convert.ToString(baseip1), Convert.ToString(baseip2), Convert.ToString(baseip3), Convert.ToString(baseip4)); + + subnet = (uint)((int)(Math.Pow(2, fixedbits) - 1) << (int)(32 - fixedbits)); + uint subnet1 = subnet >> 24; + uint subnet2 = (subnet & 16711680) >> 16; + uint subnet3 = (subnet & 65280) >> 8; + uint subnet4 = (subnet & 255); + + Console.WriteLine("{0}.{1}.{2}.{3}", Convert.ToString(subnet1), subnet2.ToString(), subnet3.ToString(), subnet4.ToString()); + + Console.WriteLine("Anzahl der zu borgenden Bits eingeben (maximal {0})", Convert.ToString(30-fixedbits)); + BorrowedBits = Convert.ToUInt32(Console.ReadLine()); + if (BorrowedBits > (30 - fixedbits)) + { break; } + + extendedsubnet = subnet | (uint)((int)(Math.Pow(2, BorrowedBits)-1) << (int)(32-fixedbits-BorrowedBits)); + uint extsubnet1 = extendedsubnet >> 24; + uint extsubnet2 = (extendedsubnet & 16711680) >> 16; + uint extsubnet3 = (extendedsubnet & 65280) >> 8; + uint extsubnet4 = (extendedsubnet & 255); + + Console.WriteLine("Erweiterte Subnetzmaske: {0}.{1}.{2}.{3}", Convert.ToString(extsubnet1), Convert.ToString(extsubnet2), Convert.ToString(extsubnet3), Convert.ToString(extsubnet4)); + Console.WriteLine("Mgliche Netze: {0}", Math.Pow(2, BorrowedBits).ToString()); + Console.WriteLine("Hosts pro Netz: {0}", (Math.Pow(2, 32 - BorrowedBits - fixedbits) - 2).ToString()); + + for (int i = 0; i < Math.Pow(2, BorrowedBits); i++) + { + uint tempip = baseip | (uint)(i << (int)(32 - fixedbits - BorrowedBits)); + uint tempip1 = tempip >> 24; + uint tempip2 = (tempip & 16711680) >> 16; + uint tempip3 = (tempip & 65280) >> 8; + uint tempip4 = (tempip & 255); + Console.WriteLine("{0}.{1}.{2}.{3}", Convert.ToString(tempip1), Convert.ToString(tempip2), Convert.ToString(tempip3), Convert.ToString(tempip4)); + } + } + Console.ReadLine(); + } + } +} diff --git a/IpWorks/IpWorks/Properties/AssemblyInfo.cs b/IpWorks/IpWorks/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2bd8515 --- /dev/null +++ b/IpWorks/IpWorks/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IpWorks")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("IpWorks")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f47b78f3-b345-4009-a5bf-14055d8f0d58")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/JCMS/JCMS.sln b/JCMS/JCMS.sln new file mode 100644 index 0000000..77ac4cd --- /dev/null +++ b/JCMS/JCMS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JCMS", "JCMS\JCMS.csproj", "{5F5C717F-6F41-4F3B-B561-3F7112B530BD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5F5C717F-6F41-4F3B-B561-3F7112B530BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5F5C717F-6F41-4F3B-B561-3F7112B530BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5F5C717F-6F41-4F3B-B561-3F7112B530BD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5F5C717F-6F41-4F3B-B561-3F7112B530BD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/JCMS/JCMS.suo b/JCMS/JCMS.suo new file mode 100644 index 0000000..25cc41f Binary files /dev/null and b/JCMS/JCMS.suo differ diff --git a/JCMS/JCMS/Form1.Designer.cs b/JCMS/JCMS/Form1.Designer.cs new file mode 100644 index 0000000..c959050 --- /dev/null +++ b/JCMS/JCMS/Form1.Designer.cs @@ -0,0 +1,272 @@ +namespace JCMS +{ + partial class Form1 + { + /// + /// 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.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Inhaltsverzeichnis"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Template"); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.mainMenuStrip = new System.Windows.Forms.MenuStrip(); + this.dateiToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.MainTreeView = new System.Windows.Forms.TreeView(); + this.menuStrip2 = new System.Windows.Forms.MenuStrip(); + this.neuerEintragToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.TemplatePanel = new System.Windows.Forms.Panel(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.webBrowser1 = new System.Windows.Forms.WebBrowser(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tpInhaltDesign = new System.Windows.Forms.TabPage(); + this.tpInhaltCode = new System.Windows.Forms.TabPage(); + this.bAktualisieren = new System.Windows.Forms.Button(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.mainMenuStrip.SuspendLayout(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.menuStrip2.SuspendLayout(); + this.TemplatePanel.SuspendLayout(); + this.panel1.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tpInhaltDesign.SuspendLayout(); + this.tpInhaltCode.SuspendLayout(); + this.SuspendLayout(); + // + // mainMenuStrip + // + this.mainMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.dateiToolStripMenuItem}); + this.mainMenuStrip.Location = new System.Drawing.Point(0, 0); + this.mainMenuStrip.Name = "mainMenuStrip"; + this.mainMenuStrip.Size = new System.Drawing.Size(843, 24); + this.mainMenuStrip.TabIndex = 0; + // + // dateiToolStripMenuItem + // + this.dateiToolStripMenuItem.Name = "dateiToolStripMenuItem"; + this.dateiToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.dateiToolStripMenuItem.Text = "Datei"; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 24); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.MainTreeView); + this.splitContainer1.Panel1.Controls.Add(this.menuStrip2); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.panel1); + this.splitContainer1.Panel2.Controls.Add(this.TemplatePanel); + this.splitContainer1.Size = new System.Drawing.Size(843, 443); + this.splitContainer1.SplitterDistance = 219; + this.splitContainer1.TabIndex = 1; + // + // MainTreeView + // + this.MainTreeView.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainTreeView.Location = new System.Drawing.Point(0, 0); + this.MainTreeView.Name = "MainTreeView"; + treeNode1.Name = "Inhaltsverzeichnis"; + treeNode1.Text = "Inhaltsverzeichnis"; + treeNode2.Name = "Template"; + treeNode2.Text = "Template"; + this.MainTreeView.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode1, + treeNode2}); + this.MainTreeView.Size = new System.Drawing.Size(219, 419); + this.MainTreeView.TabIndex = 4; + this.MainTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.MainTreeView_AfterSelect); + // + // menuStrip2 + // + this.menuStrip2.Dock = System.Windows.Forms.DockStyle.Bottom; + this.menuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.neuerEintragToolStripMenuItem}); + this.menuStrip2.Location = new System.Drawing.Point(0, 419); + this.menuStrip2.Name = "menuStrip2"; + this.menuStrip2.Size = new System.Drawing.Size(219, 24); + this.menuStrip2.TabIndex = 3; + this.menuStrip2.Text = "menuStrip2"; + // + // neuerEintragToolStripMenuItem + // + this.neuerEintragToolStripMenuItem.Name = "neuerEintragToolStripMenuItem"; + this.neuerEintragToolStripMenuItem.Size = new System.Drawing.Size(85, 20); + this.neuerEintragToolStripMenuItem.Text = "Neuer Eintrag"; + this.neuerEintragToolStripMenuItem.Click += new System.EventHandler(this.neuerEintragToolStripMenuItem_Click); + // + // TemplatePanel + // + this.TemplatePanel.Controls.Add(this.textBox1); + this.TemplatePanel.Location = new System.Drawing.Point(41, 18); + this.TemplatePanel.Name = "TemplatePanel"; + this.TemplatePanel.Size = new System.Drawing.Size(369, 321); + this.TemplatePanel.TabIndex = 0; + // + // textBox1 + // + this.textBox1.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox1.Location = new System.Drawing.Point(3, 50); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(363, 268); + this.textBox1.TabIndex = 0; + // + // panel1 + // + this.panel1.Controls.Add(this.tabControl1); + this.panel1.Location = new System.Drawing.Point(202, 37); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(406, 363); + this.panel1.TabIndex = 1; + // + // webBrowser1 + // + this.webBrowser1.AllowNavigation = false; + this.webBrowser1.Dock = System.Windows.Forms.DockStyle.Fill; + this.webBrowser1.IsWebBrowserContextMenuEnabled = false; + this.webBrowser1.Location = new System.Drawing.Point(3, 3); + this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20); + this.webBrowser1.Name = "webBrowser1"; + this.webBrowser1.Size = new System.Drawing.Size(392, 331); + this.webBrowser1.TabIndex = 0; + this.webBrowser1.Url = new System.Uri("J:\\SICHERUNG\\johannes-schauer\\index.html", System.UriKind.Absolute); + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tpInhaltDesign); + this.tabControl1.Controls.Add(this.tpInhaltCode); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(406, 363); + this.tabControl1.TabIndex = 1; + // + // tpInhaltDesign + // + this.tpInhaltDesign.Controls.Add(this.webBrowser1); + this.tpInhaltDesign.Location = new System.Drawing.Point(4, 22); + this.tpInhaltDesign.Name = "tpInhaltDesign"; + this.tpInhaltDesign.Padding = new System.Windows.Forms.Padding(3); + this.tpInhaltDesign.Size = new System.Drawing.Size(398, 337); + this.tpInhaltDesign.TabIndex = 0; + this.tpInhaltDesign.Text = "Design"; + this.tpInhaltDesign.UseVisualStyleBackColor = true; + // + // tpInhaltCode + // + this.tpInhaltCode.Controls.Add(this.textBox2); + this.tpInhaltCode.Controls.Add(this.bAktualisieren); + this.tpInhaltCode.Location = new System.Drawing.Point(4, 22); + this.tpInhaltCode.Name = "tpInhaltCode"; + this.tpInhaltCode.Padding = new System.Windows.Forms.Padding(3); + this.tpInhaltCode.Size = new System.Drawing.Size(398, 337); + this.tpInhaltCode.TabIndex = 1; + this.tpInhaltCode.Text = "Code"; + // + // bAktualisieren + // + this.bAktualisieren.Dock = System.Windows.Forms.DockStyle.Bottom; + this.bAktualisieren.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bAktualisieren.Location = new System.Drawing.Point(3, 311); + this.bAktualisieren.Name = "bAktualisieren"; + this.bAktualisieren.Size = new System.Drawing.Size(392, 23); + this.bAktualisieren.TabIndex = 1; + this.bAktualisieren.Text = "Aktualisieren"; + this.bAktualisieren.UseVisualStyleBackColor = true; + // + // textBox2 + // + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox2.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox2.Location = new System.Drawing.Point(3, 3); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBox2.Size = new System.Drawing.Size(392, 308); + this.textBox2.TabIndex = 2; + this.textBox2.Text = resources.GetString("textBox2.Text"); + this.textBox2.WordWrap = false; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(843, 467); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.mainMenuStrip); + this.Name = "Form1"; + this.Text = "Form1"; + this.mainMenuStrip.ResumeLayout(false); + this.mainMenuStrip.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.ResumeLayout(false); + this.menuStrip2.ResumeLayout(false); + this.menuStrip2.PerformLayout(); + this.TemplatePanel.ResumeLayout(false); + this.TemplatePanel.PerformLayout(); + this.panel1.ResumeLayout(false); + this.tabControl1.ResumeLayout(false); + this.tpInhaltDesign.ResumeLayout(false); + this.tpInhaltCode.ResumeLayout(false); + this.tpInhaltCode.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip mainMenuStrip; + private System.Windows.Forms.ToolStripMenuItem dateiToolStripMenuItem; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.TreeView MainTreeView; + private System.Windows.Forms.MenuStrip menuStrip2; + private System.Windows.Forms.ToolStripMenuItem neuerEintragToolStripMenuItem; + private System.Windows.Forms.Panel TemplatePanel; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.WebBrowser webBrowser1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tpInhaltDesign; + private System.Windows.Forms.TabPage tpInhaltCode; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Button bAktualisieren; + } +} + diff --git a/JCMS/JCMS/Form1.cs b/JCMS/JCMS/Form1.cs new file mode 100644 index 0000000..3b37085 --- /dev/null +++ b/JCMS/JCMS/Form1.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace JCMS +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private void neuerEintragToolStripMenuItem_Click(object sender, EventArgs e) + { + if (MainTreeView.SelectedNode.Name != "Template") + { + NewNode newNode = new NewNode(); + if (newNode.ShowDialog() == DialogResult.OK) + { + MainTreeView.SelectedNode.Nodes.Add(newNode.NodeName); + } + } + } + + private void MainTreeView_AfterSelect(object sender, TreeViewEventArgs e) + { + if (e.Node.Name == "Template") + { + TemplatePanel.BringToFront(); + } + } + } +} \ No newline at end of file diff --git a/JCMS/JCMS/Form1.resx b/JCMS/JCMS/Form1.resx new file mode 100644 index 0000000..fe27931 --- /dev/null +++ b/JCMS/JCMS/Form1.resx @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 142, 17 + + + <table class="inhaltheading"> + <tr> + <td> + <b>Startseite</b> + </td> + </tr> + <tr> + <td class="inhaltunterpunkt"> + :. <a href="http://www.johannes-schauer.de/index.html">Startseite</a> + </td> + </tr> + </table> + <br /> + <table class="inhaltheading"> + <tr> + <td> + <b>Software (Full)</b> + </td> + </tr> + <tr> + <td class="inhaltunterpunkt"> + :. <a href="http://www.johannes-schauer.de/Full/Alarm.html">Alarm</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Full/BitrateCalc.html">BitrateCalc</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Full/Chat.html">Chat</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Full/CheckMail.html">CheckMail</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Full/ColorChooser.html">ColorChooser</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Full/Rename.html">Rename</a> + </td> + </tr> + </table> + <br /> + <table class="inhaltheading"> + <tr> + <td> + <b>Software (Betas)</b> + </td> + </tr> + <tr> + <td class="inhaltunterpunkt"> + :. <a href="http://www.johannes-schauer.de/Betas/Explorer.html">Explorer</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Betas/Fraktal.html">Fraktal</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Betas/NetSpeed.html">NetSpeed</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Betas/NetStat.html">NetStat</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Betas/TempMonitor.html">TempMonitor</a> + </td> + </tr> + </table> + <br /> + <table class="inhaltheading"> + <tr> + <td> + <b>Starcraft</b> + </td> + </tr> + <tr> + <td class="inhaltunterpunkt"> + :. <a href="http://www.johannes-schauer.de/Starcraft/Team.html">Team</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Starcraft/Screenshots.html">Screenshots</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Starcraft/Maps.html">Maps</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Starcraft/Replays.html">Replays</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Starcraft/Witze.html">Witze</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Starcraft/Sounds.html">Sounds</a> + </td> + </tr> + </table> + <br /> + <table class="inhaltheading"> + <tr> + <td> + <b>Modding Projects</b> + </td> + </tr> + <tr> + <td class="inhaltunterpunkt"> + :. <a href="http://www.johannes-schauer.de/Modding_Projects/HTPC.html">HTPC</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Modding_Projects/Futaba_VFD.html">Futaba VFD</a> + </td> + </tr> + </table> + <br /> + <table class="inhaltheading"> + <tr> + <td> + <b>LEGO</b> + </td> + </tr> + <tr> + <td class="inhaltunterpunkt"> + :. Sechsbeiner + </td> + </tr> + </table> + <br /> + <table class="inhaltheading"> + <tr> + <td> + <b>Rollenspiel</b> + </td> + </tr> + <tr> + <td class="inhaltunterpunkt"> + :. Vampire + <br /> + :. Waste World + <br /> + :. Wheel of Time + </td> + </tr> + </table> + <br /> + <table class="inhaltheading"> + <tr> + <td> + <b>Phsik</b> + </td> + </tr> + <tr> + <td class="inhaltunterpunkt"> + :. FITWorks + </td> + </tr> + </table> + <br /> + <table class="inhaltheading"> + <tr> + <td> + <b>Musik</b> + </td> + </tr> + <tr> + <td class="inhaltunterpunkt"> + :. <a href="http://www.johannes-schauer.de/Musik/Schandmaul.html">Schandmaul</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Musik/Subway_To_Sally.html">Subway To Sally</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Musik/Rosenfels.html">Rosenfels</a> + </td> + </tr> + </table> + <br /> + <table class="inhaltheading"> + <tr> + <td> + <b>Bücher</b> + </td> + </tr> + <tr> + <td class="inhaltunterpunkt"> + :. <a href="http://www.johannes-schauer.de/Buecher/Peter_F_Hamilton.html">Peter F. Hamilton</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Buecher/Iain_M_Banks.html">Iain M. Banks</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Buecher/Alastair_Reynolds.html">Alastair Reynolds</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Buecher/Dan_Simmons.html">Dan Simmons</a> + <br /> + :. <a href="http://www.johannes-schauer.de/Buecher/Isaac_Asimov.html">Isaac Asimov</a> + </td> + </tr> + </table> + + \ No newline at end of file diff --git a/JCMS/JCMS/JCMS.csproj b/JCMS/JCMS/JCMS.csproj new file mode 100644 index 0000000..753f48a --- /dev/null +++ b/JCMS/JCMS/JCMS.csproj @@ -0,0 +1,88 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {5F5C717F-6F41-4F3B-B561-3F7112B530BD} + WinExe + Properties + JCMS + JCMS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + Form + + + NewNode.cs + + + + + Designer + Form1.cs + + + Designer + NewNode.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/JCMS/JCMS/NewNode.Designer.cs b/JCMS/JCMS/NewNode.Designer.cs new file mode 100644 index 0000000..205de22 --- /dev/null +++ b/JCMS/JCMS/NewNode.Designer.cs @@ -0,0 +1,87 @@ +namespace JCMS +{ + partial class NewNode + { + /// + /// 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() + { + this.textBox1 = new System.Windows.Forms.TextBox(); + this.btnCancel = new System.Windows.Forms.Button(); + this.btnOK = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(12, 12); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(178, 20); + this.textBox1.TabIndex = 0; + this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(34, 38); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(75, 23); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Abbrechen"; + this.btnCancel.UseVisualStyleBackColor = true; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(115, 38); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(75, 23); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.UseVisualStyleBackColor = true; + // + // NewNode + // + this.AcceptButton = this.btnOK; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(202, 68); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.textBox1); + this.Name = "NewNode"; + this.Text = "NewNode"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnOK; + } +} \ No newline at end of file diff --git a/JCMS/JCMS/NewNode.cs b/JCMS/JCMS/NewNode.cs new file mode 100644 index 0000000..56454da --- /dev/null +++ b/JCMS/JCMS/NewNode.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace JCMS +{ + public partial class NewNode : Form + { + public string NodeName; + + public NewNode() + { + InitializeComponent(); + } + + private void textBox1_TextChanged(object sender, EventArgs e) + { + NodeName = ((TextBox)sender).Text; + } + } +} \ No newline at end of file diff --git a/JCMS/JCMS/NewNode.resx b/JCMS/JCMS/NewNode.resx new file mode 100644 index 0000000..ff31a6d --- /dev/null +++ b/JCMS/JCMS/NewNode.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/JCMS/JCMS/Program.cs b/JCMS/JCMS/Program.cs new file mode 100644 index 0000000..ca26273 --- /dev/null +++ b/JCMS/JCMS/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace JCMS +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/JCMS/JCMS/Properties/AssemblyInfo.cs b/JCMS/JCMS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d351459 --- /dev/null +++ b/JCMS/JCMS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("JCMS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("JCMS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8eee1c29-510a-4b24-ae94-3c718ce56c2b")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/JCMS/JCMS/Properties/Resources.Designer.cs b/JCMS/JCMS/Properties/Resources.Designer.cs new file mode 100644 index 0000000..1b27c6b --- /dev/null +++ b/JCMS/JCMS/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace JCMS.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("JCMS.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/JCMS/JCMS/Properties/Resources.resx b/JCMS/JCMS/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/JCMS/JCMS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/JCMS/JCMS/Properties/Settings.Designer.cs b/JCMS/JCMS/Properties/Settings.Designer.cs new file mode 100644 index 0000000..94393db --- /dev/null +++ b/JCMS/JCMS/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace JCMS.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/JCMS/JCMS/Properties/Settings.settings b/JCMS/JCMS/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/JCMS/JCMS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ListFiles/ListFiles.sln b/ListFiles/ListFiles.sln new file mode 100644 index 0000000..fccc6df --- /dev/null +++ b/ListFiles/ListFiles.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ListFiles", "ListFiles\ListFiles.csproj", "{A9F01FAF-5136-4BE8-9983-1F1662DD96A1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A9F01FAF-5136-4BE8-9983-1F1662DD96A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A9F01FAF-5136-4BE8-9983-1F1662DD96A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A9F01FAF-5136-4BE8-9983-1F1662DD96A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A9F01FAF-5136-4BE8-9983-1F1662DD96A1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ListFiles/ListFiles.suo b/ListFiles/ListFiles.suo new file mode 100644 index 0000000..ea39874 Binary files /dev/null and b/ListFiles/ListFiles.suo differ diff --git a/ListFiles/ListFiles/Form1.Designer.cs b/ListFiles/ListFiles/Form1.Designer.cs new file mode 100644 index 0000000..84211d0 --- /dev/null +++ b/ListFiles/ListFiles/Form1.Designer.cs @@ -0,0 +1,153 @@ +namespace ListFiles +{ + partial class Form1 + { + /// + /// 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() + { + this.panel1 = new System.Windows.Forms.Panel(); + this.tbOutput = new System.Windows.Forms.TextBox(); + this.openFolderButton = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.cbUseSubfolders = new System.Windows.Forms.CheckBox(); + this.goButton = new System.Windows.Forms.Button(); + this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); + this.cbShowSubfolderName = new System.Windows.Forms.CheckBox(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.AutoScroll = true; + this.panel1.Controls.Add(this.cbShowSubfolderName); + this.panel1.Controls.Add(this.goButton); + this.panel1.Controls.Add(this.cbUseSubfolders); + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.openFolderButton); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(599, 108); + this.panel1.TabIndex = 0; + // + // tbOutput + // + this.tbOutput.BackColor = System.Drawing.SystemColors.Window; + this.tbOutput.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbOutput.Dock = System.Windows.Forms.DockStyle.Fill; + this.tbOutput.Location = new System.Drawing.Point(0, 108); + this.tbOutput.Multiline = true; + this.tbOutput.Name = "tbOutput"; + this.tbOutput.ReadOnly = true; + this.tbOutput.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.tbOutput.Size = new System.Drawing.Size(599, 373); + this.tbOutput.TabIndex = 1; + // + // openFolderButton + // + this.openFolderButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.openFolderButton.Location = new System.Drawing.Point(12, 12); + this.openFolderButton.Name = "openFolderButton"; + this.openFolderButton.Size = new System.Drawing.Size(75, 23); + this.openFolderButton.TabIndex = 0; + this.openFolderButton.Text = "Open Folder"; + this.openFolderButton.UseVisualStyleBackColor = true; + this.openFolderButton.Click += new System.EventHandler(this.openFolderButton_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(93, 17); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(0, 13); + this.label1.TabIndex = 1; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // cbUseSubfolders + // + this.cbUseSubfolders.AutoSize = true; + this.cbUseSubfolders.Checked = true; + this.cbUseSubfolders.CheckState = System.Windows.Forms.CheckState.Checked; + this.cbUseSubfolders.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbUseSubfolders.Location = new System.Drawing.Point(12, 41); + this.cbUseSubfolders.Name = "cbUseSubfolders"; + this.cbUseSubfolders.Size = new System.Drawing.Size(95, 17); + this.cbUseSubfolders.TabIndex = 2; + this.cbUseSubfolders.Text = "Use Subfolders"; + this.cbUseSubfolders.UseVisualStyleBackColor = true; + this.cbUseSubfolders.CheckedChanged += new System.EventHandler(this.cbUseSubfolders_CheckedChanged); + // + // goButton + // + this.goButton.Enabled = false; + this.goButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.goButton.Location = new System.Drawing.Point(12, 64); + this.goButton.Name = "goButton"; + this.goButton.Size = new System.Drawing.Size(75, 23); + this.goButton.TabIndex = 3; + this.goButton.Text = "Go!"; + this.goButton.UseVisualStyleBackColor = true; + this.goButton.Click += new System.EventHandler(this.goButton_Click); + // + // cbShowSubfolderName + // + this.cbShowSubfolderName.AutoSize = true; + this.cbShowSubfolderName.Location = new System.Drawing.Point(114, 41); + this.cbShowSubfolderName.Name = "cbShowSubfolderName"; + this.cbShowSubfolderName.Size = new System.Drawing.Size(154, 17); + this.cbShowSubfolderName.TabIndex = 4; + this.cbShowSubfolderName.Text = "Show Names of Subfolders"; + this.cbShowSubfolderName.UseVisualStyleBackColor = true; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(599, 481); + this.Controls.Add(this.tbOutput); + this.Controls.Add(this.panel1); + this.Name = "Form1"; + this.Text = "ListFiles"; + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button goButton; + private System.Windows.Forms.CheckBox cbUseSubfolders; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button openFolderButton; + private System.Windows.Forms.TextBox tbOutput; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; + private System.Windows.Forms.CheckBox cbShowSubfolderName; + } +} + diff --git a/ListFiles/ListFiles/Form1.cs b/ListFiles/ListFiles/Form1.cs new file mode 100644 index 0000000..686187a --- /dev/null +++ b/ListFiles/ListFiles/Form1.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace ListFiles +{ + public partial class Form1 : Form + { + private DirectoryInfo currentDir; + + public Form1() + { + InitializeComponent(); + } + + private void openFolderButton_Click(object sender, EventArgs e) + { + if(folderBrowserDialog1.ShowDialog() == DialogResult.OK) + { + currentDir = new DirectoryInfo(folderBrowserDialog1.SelectedPath); + label1.Text = currentDir.FullName; + goButton.Enabled = true; + } + } + + private void goButton_Click(object sender, EventArgs e) + { + tbOutput.Text = GetFiles(currentDir); + } + + private string GetFiles(DirectoryInfo currentDir) + { + string result = ""; + if (cbUseSubfolders.Checked) + { + foreach (DirectoryInfo dir in currentDir.GetDirectories()) + { + if (cbShowSubfolderName.Checked) + { + result += "#Begin Directory " + dir.Name + "\r\n"; + } + + result += GetFiles(dir) + "\r\n"; + + + if (cbShowSubfolderName.Checked) + { + result += "#End Directory " + dir.Name + "\r\n"; + } + } + } + foreach (FileInfo file in currentDir.GetFiles()) + { + result += file.Name + "\r\n"; + } + return result; + } + + private void cbUseSubfolders_CheckedChanged(object sender, EventArgs e) + { + cbShowSubfolderName.Enabled = cbUseSubfolders.Checked; + } + } +} \ No newline at end of file diff --git a/ListFiles/ListFiles/Form1.resx b/ListFiles/ListFiles/Form1.resx new file mode 100644 index 0000000..c3fe8f1 --- /dev/null +++ b/ListFiles/ListFiles/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/ListFiles/ListFiles/ListFiles.csproj b/ListFiles/ListFiles/ListFiles.csproj new file mode 100644 index 0000000..e6ab7d9 --- /dev/null +++ b/ListFiles/ListFiles/ListFiles.csproj @@ -0,0 +1,78 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {A9F01FAF-5136-4BE8-9983-1F1662DD96A1} + WinExe + Properties + ListFiles + ListFiles + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/ListFiles/ListFiles/Program.cs b/ListFiles/ListFiles/Program.cs new file mode 100644 index 0000000..4f96915 --- /dev/null +++ b/ListFiles/ListFiles/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace ListFiles +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/ListFiles/ListFiles/Properties/AssemblyInfo.cs b/ListFiles/ListFiles/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..a52e1cc --- /dev/null +++ b/ListFiles/ListFiles/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ListFiles")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ListFiles")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("353b6c28-2953-45e3-9b8f-ee8e52df5293")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ListFiles/ListFiles/Properties/Resources.Designer.cs b/ListFiles/ListFiles/Properties/Resources.Designer.cs new file mode 100644 index 0000000..bc14846 --- /dev/null +++ b/ListFiles/ListFiles/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ListFiles.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ListFiles.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/ListFiles/ListFiles/Properties/Resources.resx b/ListFiles/ListFiles/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/ListFiles/ListFiles/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ListFiles/ListFiles/Properties/Settings.Designer.cs b/ListFiles/ListFiles/Properties/Settings.Designer.cs new file mode 100644 index 0000000..533d16c --- /dev/null +++ b/ListFiles/ListFiles/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ListFiles.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/ListFiles/ListFiles/Properties/Settings.settings b/ListFiles/ListFiles/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/ListFiles/ListFiles/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/MP3TagEdit/MP3TagEdit.sln b/MP3TagEdit/MP3TagEdit.sln new file mode 100644 index 0000000..d3a4293 --- /dev/null +++ b/MP3TagEdit/MP3TagEdit.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP3TagEdit", "MP3TagEdit\MP3TagEdit.csproj", "{4A816412-76E7-42DD-910A-632973E931A8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4A816412-76E7-42DD-910A-632973E931A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A816412-76E7-42DD-910A-632973E931A8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A816412-76E7-42DD-910A-632973E931A8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4A816412-76E7-42DD-910A-632973E931A8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/MP3TagEdit/MP3TagEdit.suo b/MP3TagEdit/MP3TagEdit.suo new file mode 100644 index 0000000..df43ffe Binary files /dev/null and b/MP3TagEdit/MP3TagEdit.suo differ diff --git a/MP3TagEdit/MP3TagEdit/Form1.Designer.cs b/MP3TagEdit/MP3TagEdit/Form1.Designer.cs new file mode 100644 index 0000000..89f8d71 --- /dev/null +++ b/MP3TagEdit/MP3TagEdit/Form1.Designer.cs @@ -0,0 +1,533 @@ +namespace MP3TagEdit +{ + partial class Form1 + { + /// + /// 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() + { + this.btnOpen = new System.Windows.Forms.Button(); + this.lFilename = new System.Windows.Forms.Label(); + this.tbTitle = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.tbArtist = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.tbAlbum = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.nUDYear = new System.Windows.Forms.NumericUpDown(); + this.label5 = new System.Windows.Forms.Label(); + this.tbComment = new System.Windows.Forms.TextBox(); + this.nUDTrack = new System.Windows.Forms.NumericUpDown(); + this.label6 = new System.Windows.Forms.Label(); + this.cbGenre = new System.Windows.Forms.ComboBox(); + this.label7 = new System.Windows.Forms.Label(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); + this.panel3 = new System.Windows.Forms.Panel(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.listView1 = new System.Windows.Forms.ListView(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader5 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader6 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader7 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader8 = new System.Windows.Forms.ColumnHeader(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel2 = new System.Windows.Forms.Panel(); + this.button4 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.nUDYear)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nUDTrack)).BeginInit(); + this.groupBox1.SuspendLayout(); + this.panel3.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // btnOpen + // + this.btnOpen.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnOpen.Location = new System.Drawing.Point(6, 19); + this.btnOpen.Name = "btnOpen"; + this.btnOpen.Size = new System.Drawing.Size(75, 23); + this.btnOpen.TabIndex = 0; + this.btnOpen.Text = "Datei ffnen"; + this.btnOpen.UseVisualStyleBackColor = true; + this.btnOpen.Click += new System.EventHandler(this.btnOpen_Click); + // + // lFilename + // + this.lFilename.AutoSize = true; + this.lFilename.Location = new System.Drawing.Point(87, 24); + this.lFilename.Name = "lFilename"; + this.lFilename.Size = new System.Drawing.Size(0, 13); + this.lFilename.TabIndex = 1; + // + // tbTitle + // + this.tbTitle.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbTitle.Location = new System.Drawing.Point(65, 48); + this.tbTitle.MaxLength = 30; + this.tbTitle.Name = "tbTitle"; + this.tbTitle.Size = new System.Drawing.Size(164, 20); + this.tbTitle.TabIndex = 2; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(5, 50); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(30, 13); + this.label1.TabIndex = 3; + this.label1.Text = "Title:"; + // + // tbArtist + // + this.tbArtist.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbArtist.Location = new System.Drawing.Point(65, 74); + this.tbArtist.MaxLength = 30; + this.tbArtist.Name = "tbArtist"; + this.tbArtist.Size = new System.Drawing.Size(164, 20); + this.tbArtist.TabIndex = 4; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(5, 77); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(33, 13); + this.label2.TabIndex = 5; + this.label2.Text = "Artist:"; + // + // tbAlbum + // + this.tbAlbum.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbAlbum.Location = new System.Drawing.Point(65, 100); + this.tbAlbum.MaxLength = 30; + this.tbAlbum.Name = "tbAlbum"; + this.tbAlbum.Size = new System.Drawing.Size(164, 20); + this.tbAlbum.TabIndex = 6; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(5, 103); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(39, 13); + this.label3.TabIndex = 7; + this.label3.Text = "Album:"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(5, 129); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(32, 13); + this.label4.TabIndex = 8; + this.label4.Text = "Year:"; + // + // nUDYear + // + this.nUDYear.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nUDYear.Location = new System.Drawing.Point(65, 126); + this.nUDYear.Maximum = new decimal(new int[] { + 2100, + 0, + 0, + 0}); + this.nUDYear.Name = "nUDYear"; + this.nUDYear.Size = new System.Drawing.Size(66, 20); + this.nUDYear.TabIndex = 9; + this.nUDYear.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(5, 156); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(54, 13); + this.label5.TabIndex = 10; + this.label5.Text = "Comment:"; + // + // tbComment + // + this.tbComment.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbComment.Location = new System.Drawing.Point(65, 153); + this.tbComment.MaxLength = 28; + this.tbComment.Name = "tbComment"; + this.tbComment.Size = new System.Drawing.Size(149, 20); + this.tbComment.TabIndex = 11; + // + // nUDTrack + // + this.nUDTrack.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nUDTrack.Location = new System.Drawing.Point(65, 179); + this.nUDTrack.Name = "nUDTrack"; + this.nUDTrack.Size = new System.Drawing.Size(66, 20); + this.nUDTrack.TabIndex = 12; + this.nUDTrack.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(5, 181); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(38, 13); + this.label6.TabIndex = 13; + this.label6.Text = "Track:"; + // + // cbGenre + // + this.cbGenre.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbGenre.FormattingEnabled = true; + this.cbGenre.Items.AddRange(new object[] { + "Blues", + "ClassicRock", + "Country", + "Dance", + "Disco", + "Funk", + "Grunge", + "HipHop", + "Jazz", + "Metal", + "NewAge", + "Oldies", + "Other", + "Pop", + "RnB", + "Rap", + "Reggae", + "Rock", + "Techno", + "Industrial", + "Alternative", + "Ska", + "DeathMetal", + "Pranks", + "Soundtrack", + "EuroTechno", + "Ambient", + "TripHop", + "Vocal", + "JazzFunk", + "Fusion", + "Trance", + "Classical", + "Instrumental", + "Acid", + "House", + "Game", + "SoundClip", + "Gospel", + "Noise", + "AlternRock", + "Bass", + "Soul", + "Punk", + "Space", + "Meditative", + "InstrumentalPop", + "InstrumentalRock", + "Ethnic", + "Gothic", + "Darkwave", + "TechnoIndustrial", + "Electronic", + "PopFolk", + "Eurodance", + "Dream", + "SouthernRock", + "Comedy", + "Cult", + "Gangsta", + "Top40", + "ChristianRap", + "PopFunk", + "Jungle", + "NativeAmerican", + "Cabaret", + "NewWave", + "Psychadelic", + "Rave", + "Showtunes", + "Trailer", + "LoFi", + "Tribal", + "AcidPunk", + "AcidJazz", + "Polka", + "Retro", + "Musical", + "RocknRoll", + "HardRock", + "None"}); + this.cbGenre.Location = new System.Drawing.Point(65, 205); + this.cbGenre.Name = "cbGenre"; + this.cbGenre.Size = new System.Drawing.Size(129, 21); + this.cbGenre.TabIndex = 14; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(5, 208); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(39, 13); + this.label7.TabIndex = 15; + this.label7.Text = "Genre:"; + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + this.openFileDialog1.Filter = "MP3 Files|*.mp3|All Files|*.*"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Controls.Add(this.btnOpen); + this.groupBox1.Controls.Add(this.label7); + this.groupBox1.Controls.Add(this.lFilename); + this.groupBox1.Controls.Add(this.cbGenre); + this.groupBox1.Controls.Add(this.tbTitle); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.nUDTrack); + this.groupBox1.Controls.Add(this.tbArtist); + this.groupBox1.Controls.Add(this.tbComment); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.label5); + this.groupBox1.Controls.Add(this.tbAlbum); + this.groupBox1.Controls.Add(this.nUDYear); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Location = new System.Drawing.Point(3, 3); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(236, 263); + this.groupBox1.TabIndex = 16; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Einfaches ffnen"; + // + // button2 + // + this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button2.Location = new System.Drawing.Point(6, 232); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(97, 23); + this.button2.TabIndex = 17; + this.button2.Text = "Aus Dateiname"; + this.button2.UseVisualStyleBackColor = true; + // + // button1 + // + this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button1.Location = new System.Drawing.Point(155, 232); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 16; + this.button1.Text = "Speichern"; + this.button1.UseVisualStyleBackColor = true; + // + // panel3 + // + this.panel3.AutoScroll = true; + this.panel3.Controls.Add(this.groupBox1); + this.panel3.Dock = System.Windows.Forms.DockStyle.Left; + this.panel3.Location = new System.Drawing.Point(0, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(256, 398); + this.panel3.TabIndex = 18; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.listView1); + this.groupBox2.Controls.Add(this.panel1); + this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox2.Location = new System.Drawing.Point(256, 0); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(580, 398); + this.groupBox2.TabIndex = 19; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Gruppe ffnen"; + // + // listView1 + // + this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1, + this.columnHeader2, + this.columnHeader3, + this.columnHeader4, + this.columnHeader5, + this.columnHeader6, + this.columnHeader7, + this.columnHeader8}); + this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.listView1.Location = new System.Drawing.Point(3, 46); + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(574, 349); + this.listView1.TabIndex = 3; + this.listView1.UseCompatibleStateImageBehavior = false; + this.listView1.View = System.Windows.Forms.View.Details; + // + // columnHeader1 + // + this.columnHeader1.Text = "Dateiname"; + // + // columnHeader2 + // + this.columnHeader2.Text = "Title"; + // + // columnHeader3 + // + this.columnHeader3.Text = "Artist"; + // + // columnHeader4 + // + this.columnHeader4.Text = "Album"; + // + // columnHeader5 + // + this.columnHeader5.Text = "Year"; + // + // columnHeader6 + // + this.columnHeader6.Text = "Comment"; + // + // columnHeader7 + // + this.columnHeader7.Text = "Track"; + // + // columnHeader8 + // + this.columnHeader8.Text = "Genre"; + // + // panel1 + // + this.panel1.Controls.Add(this.panel2); + this.panel1.Controls.Add(this.button3); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(3, 16); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(574, 30); + this.panel1.TabIndex = 2; + // + // panel2 + // + this.panel2.Controls.Add(this.button4); + this.panel2.Dock = System.Windows.Forms.DockStyle.Right; + this.panel2.Location = new System.Drawing.Point(467, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(107, 30); + this.panel2.TabIndex = 1; + // + // button4 + // + this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button4.Location = new System.Drawing.Point(3, 3); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(100, 23); + this.button4.TabIndex = 0; + this.button4.Text = "Aus Dateiname"; + this.button4.UseVisualStyleBackColor = true; + // + // button3 + // + this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button3.Location = new System.Drawing.Point(3, 3); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(105, 23); + this.button3.TabIndex = 0; + this.button3.Text = "Verzeichnis ffnen"; + this.button3.UseVisualStyleBackColor = true; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(836, 398); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.panel3); + this.Name = "Form1"; + this.Text = "MP3TagEdit"; + ((System.ComponentModel.ISupportInitialize)(this.nUDYear)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nUDTrack)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.panel3.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button btnOpen; + private System.Windows.Forms.Label lFilename; + private System.Windows.Forms.TextBox tbTitle; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox tbArtist; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox tbAlbum; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.NumericUpDown nUDYear; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox tbComment; + private System.Windows.Forms.NumericUpDown nUDTrack; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.ComboBox cbGenre; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.ListView listView1; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.ColumnHeader columnHeader3; + private System.Windows.Forms.ColumnHeader columnHeader4; + private System.Windows.Forms.ColumnHeader columnHeader5; + private System.Windows.Forms.ColumnHeader columnHeader6; + private System.Windows.Forms.ColumnHeader columnHeader7; + private System.Windows.Forms.ColumnHeader columnHeader8; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button3; + } +} + diff --git a/MP3TagEdit/MP3TagEdit/Form1.cs b/MP3TagEdit/MP3TagEdit/Form1.cs new file mode 100644 index 0000000..e6f9a13 --- /dev/null +++ b/MP3TagEdit/MP3TagEdit/Form1.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace MP3TagEdit +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private void btnOpen_Click(object sender, EventArgs e) + { + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + lFilename.Text = openFileDialog1.FileName; + MP3IDv11 mp3 = new MP3IDv11(openFileDialog1.FileName); + tbTitle.Text = mp3.Title; + tbArtist.Text = mp3.Artist; + tbAlbum.Text = mp3.Album; + nUDYear.Value = mp3.Year; + tbComment.Text = mp3.Comment; + nUDTrack.Value = mp3.Track; + cbGenre.SelectedIndex = (int)mp3.Genre != 255 ? (int)mp3.Genre : 80; + } + } + } +} \ No newline at end of file diff --git a/MP3TagEdit/MP3TagEdit/Form1.resx b/MP3TagEdit/MP3TagEdit/Form1.resx new file mode 100644 index 0000000..2b47bdd --- /dev/null +++ b/MP3TagEdit/MP3TagEdit/Form1.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 147, 17 + + \ No newline at end of file diff --git a/MP3TagEdit/MP3TagEdit/MP3IDv11.cs b/MP3TagEdit/MP3TagEdit/MP3IDv11.cs new file mode 100644 index 0000000..2ed99c2 --- /dev/null +++ b/MP3TagEdit/MP3TagEdit/MP3IDv11.cs @@ -0,0 +1,264 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +namespace MP3TagEdit +{ + class MP3IDv11 + { + private string filename; + private byte[] title; + private byte[] artist; + private byte[] album; + private byte[] year; + private byte[] comment; + private byte track; + private byte genre; + + public string Title + { + get { return Encoding.UTF8.GetString(title); } + set + { + if(value.Length<31) + Encoding.UTF8.GetBytes(value, 0, value.Length, title, 0); + else + throw new SystemException("Titel lnger als 30 Zeichen!"); + } + } + + public string Artist + { + get { return Encoding.UTF8.GetString(artist); } + set + { + if (value.Length < 31) + Encoding.UTF8.GetBytes(value, 0, value.Length, artist, 0); + else + throw new SystemException("Artist lnger als 30 Zeichen!"); + } + } + + public string Album + { + get { return Encoding.UTF8.GetString(album); } + set + { + if (value.Length < 31) + Encoding.UTF8.GetBytes(value, 0, value.Length, album, 0); + else + throw new SystemException("Album lnger als 30 Zeichen!"); + } + } + + public int Year + { + get + { + int year = 0; + int.TryParse(Encoding.UTF8.GetString(this.year), out year); + return year; + } + set + { + if (value.ToString().Length < 5) + Encoding.UTF8.GetBytes(value.ToString(), 0, value.ToString().Length, year, 0); + else + throw new SystemException("Year lnger als 4 Zeichen!"); + } + } + + public string Comment + { + get { return Encoding.UTF8.GetString(comment); } + set + { + if (value.Length < 29) + Encoding.UTF8.GetBytes(value, 0, value.Length, comment, 0); + else + throw new SystemException("Comment lnger als 28 Zeichen!"); + } + } + + public int Track + { + get { return (int)track; } + set { track = (byte)value; } + } + + public Genres Genre + { + get { return (Genres)genre; } + set { genre = (byte)value; } + } + + public enum Genres : byte + { + Blues = 0, + ClassicRock = 1, + Country = 2, + Dance = 3, + Disco = 4, + Funk = 5, + Grunge = 6, + HipHop = 7, + Jazz = 8, + Metal = 9, + NewAge = 10, + Oldies = 11, + Other = 12, + Pop = 13, + RnB = 14, + Rap = 15, + Reggae = 16, + Rock = 17, + Techno = 18, + Industrial = 19, + Alternative = 20, + Ska = 21, + DeathMetal = 22, + Pranks = 23, + Soundtrack = 24, + EuroTechno = 25, + Ambient = 26, + TripHop = 27, + Vocal = 28, + JazzFunk = 29, + Fusion = 30, + Trance = 31, + Classical = 32, + Instrumental = 33, + Acid = 34, + House = 35, + Game = 36, + SoundClip = 37, + Gospel = 38, + Noise = 39, + AlternRock = 40, + Bass = 41, + Soul = 42, + Punk = 43, + Space = 44, + Meditative = 45, + InstrumentalPop = 46, + InstrumentalRock = 47, + Ethnic = 48, + Gothic = 49, + Darkwave = 50, + TechnoIndustrial = 51, + Electronic = 52, + PopFolk = 53, + Eurodance = 54, + Dream = 55, + SouthernRock = 56, + Comedy = 57, + Cult = 58, + Gangsta = 59, + Top40 = 60, + ChristianRap = 61, + PopFunk = 62, + Jungle = 63, + NativeAmerican = 64, + Cabaret = 65, + NewWave = 66, + Psychadelic = 67, + Rave = 68, + Showtunes = 69, + Trailer = 70, + LoFi = 71, + Tribal = 72, + AcidPunk = 73, + AcidJazz = 74, + Polka = 75, + Retro = 76, + Musical = 77, + RocknRoll = 78, + HardRock = 79, + None = 255, + } + + public MP3IDv11(string filename) + { + if (File.Exists(filename)) + { + this.filename = filename; + ReloadID(); + } + else + throw new FileNotFoundException("Existiert nicht!", filename); + } + + public void SetAttributes(string title, string artist, string album, int year, string comment, int track, Genres genre) + { + Title = title; + Artist = artist; + Album = album; + Year = year; + Comment = comment; + Track = track; + Genre = genre; + } + + public void WriteID(string title, string artist, string album, int year, string comment, int track, Genres genre) + { + SetAttributes(title, artist, album, year, comment, track, genre); + + byte[] tag = new byte[128]; + + Array.Copy(new byte[] { (byte)'T', (byte)'A', (byte)'G' }, 0, tag, 0, 3); + Array.Copy(this.title, 0, tag, 3, this.title.Length); + Array.Copy(this.artist, 0, tag, 33, this.artist.Length); + Array.Copy(this.album, 0, tag, 63, this.album.Length); + Array.Copy(this.year, 0, tag, 93, this.year.Length); + Array.Copy(this.comment, 0, tag, 97, this.Comment.Length); + tag[125] = 0; + tag[126] = this.track; + tag[127] = this.genre; + + FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Write, FileShare.Write); + file.Write(tag, (int)(file.Length - tag.Length), tag.Length); + file.Close(); + } + + public void WriteID() + { + WriteID(Title, Artist, Album, Year, Comment, Track, Genre); + } + + public void ReloadID() + { + byte[] tag = new byte[128]; + + FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); + file.Position = file.Length - tag.Length; + file.Read(tag, 0, tag.Length); + file.Close(); + + if (Encoding.UTF8.GetString(tag, 0, 3) == "TAG") + { + title = new byte[30]; + Array.Copy(tag, 3, title, 0, title.Length); + artist = new byte[30]; + Array.Copy(tag, 33, artist, 0, artist.Length); + album = new byte[30]; + Array.Copy(tag, 63, album, 0, album.Length); + year = new byte[4]; + Array.Copy(tag, 93, year, 0, year.Length); + comment = new byte[28]; //unsaubere umsetzung: auch fr ID3v1 ist der comment nur 28 zeichen lang + Array.Copy(tag, 97, comment, 0, comment.Length); + if (tag[125] == 0) //ID3v11 + { + track = tag[126]; + } + else //ID3v1 + { + track = 0; + } + genre = tag[127]; + } + else + throw new Exception("Kein MP3IDv1 Tag vorhanden oder falsches Format!"); + } + } +} diff --git a/MP3TagEdit/MP3TagEdit/MP3TagEdit.csproj b/MP3TagEdit/MP3TagEdit/MP3TagEdit.csproj new file mode 100644 index 0000000..31be03f --- /dev/null +++ b/MP3TagEdit/MP3TagEdit/MP3TagEdit.csproj @@ -0,0 +1,79 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {4A816412-76E7-42DD-910A-632973E931A8} + WinExe + Properties + MP3TagEdit + MP3TagEdit + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/MP3TagEdit/MP3TagEdit/Program.cs b/MP3TagEdit/MP3TagEdit/Program.cs new file mode 100644 index 0000000..6c9f15a --- /dev/null +++ b/MP3TagEdit/MP3TagEdit/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace MP3TagEdit +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/MP3TagEdit/MP3TagEdit/Properties/AssemblyInfo.cs b/MP3TagEdit/MP3TagEdit/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..706ee1a --- /dev/null +++ b/MP3TagEdit/MP3TagEdit/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MP3TagEdit")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MP3TagEdit")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f02d30c3-dda2-43ac-aae7-b15c14dd060c")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MP3TagEdit/MP3TagEdit/Properties/Resources.Designer.cs b/MP3TagEdit/MP3TagEdit/Properties/Resources.Designer.cs new file mode 100644 index 0000000..66ec223 --- /dev/null +++ b/MP3TagEdit/MP3TagEdit/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MP3TagEdit.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MP3TagEdit.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/MP3TagEdit/MP3TagEdit/Properties/Resources.resx b/MP3TagEdit/MP3TagEdit/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/MP3TagEdit/MP3TagEdit/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MP3TagEdit/MP3TagEdit/Properties/Settings.Designer.cs b/MP3TagEdit/MP3TagEdit/Properties/Settings.Designer.cs new file mode 100644 index 0000000..99aaae9 --- /dev/null +++ b/MP3TagEdit/MP3TagEdit/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MP3TagEdit.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/MP3TagEdit/MP3TagEdit/Properties/Settings.settings b/MP3TagEdit/MP3TagEdit/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/MP3TagEdit/MP3TagEdit/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Netstat/AssemblyInfo.cs b/Netstat/AssemblyInfo.cs new file mode 100644 index 0000000..dbacda1 --- /dev/null +++ b/Netstat/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/Netstat/MainForm.cs b/Netstat/MainForm.cs new file mode 100644 index 0000000..8192846 --- /dev/null +++ b/Netstat/MainForm.cs @@ -0,0 +1,1454 @@ + +using System; +using System.Drawing; +using System.Windows.Forms; +using System.Net; +using System.Net.Sockets; +using System.Collections; +using System.Diagnostics; +using System.Threading; + +namespace Netstat +{ + interface IDWPing + { + short ping(string strHostName); + int Timeout{set;} + int Repeats{set;} + int AvgTime{get;} + int AvgTTL{get;} + string ErrorMsg{get;} + } + + struct ICMPHeader + { + public byte type; + public byte code; + public ushort chksum; + public ushort id; + public ushort seq; + public ulong timestamp; + + public byte[] toByteArray() + { + byte[] arResult = new byte[22]; + arResult[0] = this.type; + arResult[1] = this.code; + arResult[2] = (byte)chksum; + arResult[3] = (byte)(chksum >> 8); + arResult[4] = (byte)(chksum >> 16); + arResult[5] = (byte)(chksum >> 24); + arResult[6] = (byte)id; + arResult[7] = (byte)(id >> 8); + arResult[8] = (byte)(id >> 16); + arResult[9] = (byte)(id >> 24); + arResult[10] = (byte)seq; + arResult[11] = (byte)(seq >> 8); + arResult[12] = (byte)(seq >> 16); + arResult[13] = (byte)(seq >> 24); + arResult[14] = (byte)timestamp; + arResult[15] = (byte)(timestamp >> 8); + arResult[16] = (byte)(timestamp >> 16); + arResult[17] = (byte)(timestamp >> 24); + arResult[18] = (byte)(timestamp >> 32); + arResult[19] = (byte)(timestamp >> 40); + arResult[20] = (byte)(timestamp >> 48); + arResult[21] = (byte)(timestamp >> 56); + + return arResult; + } + } + + public class CDWPing : IDWPing + { + private int m_Timeout; + private int[] m_arTime; + private bool[] m_arResults; + private byte[] m_arTTL; + private int m_idxPing; + private string m_strErrorMsg; + + public int Timeout{set{m_Timeout = Math.Max(value,1);}} + public int Repeats + {set{ + int n = Math.Max(value, 1); + m_arTime = new int[n]; + m_arTTL = new byte[n]; + m_arResults = new bool[n]; + }} + public int AvgTime { get{ return this.calcAvgTime(); }} + public int AvgTTL { get{ return this.calcAvgTTL(); }} + public string ErrorMsg { get{ return m_strErrorMsg; }} + + public CDWPing() + { + m_Timeout = 200; + m_arTime = new int[1]; + m_arResults = new bool[1]; + m_arTTL = new Byte[1]; + m_strErrorMsg = "Blah"; + } + + public short ping(string strHostName) + { + m_strErrorMsg = "Doll"; + + this.clearStats(); + + short result = 0; + + try + { + IPEndPoint lep; + + const int echoPort = 7; + + if(this.isIPAddress(strHostName)) + { + IPAddress ipAddr = IPAddress.Parse(strHostName); + lep = new IPEndPoint(ipAddr, echoPort); + } + else + { + IPHostEntry lipa = Dns.Resolve(strHostName); + lep = new IPEndPoint(lipa.AddressList[0], echoPort); + } + + for(m_idxPing = 0; m_idxPing < m_arTime.Length; m_idxPing++) + { + if(tryPing(lep)) + { + m_arResults[m_idxPing] = true; + result = 1; + } + else + { + m_arResults[m_idxPing] = false; + } + } + } + catch(SocketException ex) + { + result = 0; + m_strErrorMsg = ex.Message; + } + catch(Exception ex) + { + result = 0; + m_strErrorMsg = ex.Message; + } + + return result; + } + + private bool tryPing(IPEndPoint lep) + { + bool bResult = false; + + Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); + + ICMPHeader header = new ICMPHeader(); + header.type = 8; + header.code = 0; + header.id = Convert.ToUInt16(Process.GetCurrentProcess().Id); + header.seq = 0; + header.chksum = 0; + DateTime startTime = DateTime.Now; + header.timestamp = Convert.ToUInt64(startTime.Ticks); + + byte[] arHeader = header.toByteArray(); + + byte[] arBytes = new byte[arHeader.Length + 32]; + + byte fill = Convert.ToByte('E'); + + for(int i=0; i 1) + { + chksum += (ulong)((((ushort)arBytes[i+1])<<8)+(ushort)arBytes[i]); + nSize -= 2; + i += 2; + } + + if(nSize >0) + { + chksum += arBytes[i]; + } + + chksum = (chksum >> 16) + (chksum & 0xFFFF); + chksum += (chksum >> 16); + + ushort result = (ushort)(~chksum); + return result; + } + + private bool isSocketReadible(Socket s) + { + bool bResult = false; + int n = 0; + + while(n < m_Timeout) + { + if(s.Poll(200, SelectMode.SelectRead)) + { + bResult = true; + break; + } + + n++; + } + + return bResult; + } + + private bool verifyReceivedMessage(byte[] arBytes, int nReceived, int minLengthSent) + { + int nLengthIPHeader = arBytes[0] & 0x0F; + nLengthIPHeader *= 4; + + if(nLengthIPHeader + minLengthSent > nReceived) + { + m_strErrorMsg = "Nicht genug Daten zurck gekommen"; + return false; + } + + if(arBytes[nLengthIPHeader]!=0) + { + m_strErrorMsg = "Falscher Typ zurck gekommen"; + return false; + } + + int nId = arBytes[nLengthIPHeader + 6] + arBytes[nLengthIPHeader + 7]*256; + + if(nId != Convert.ToUInt16(Process.GetCurrentProcess().Id)) + { + m_strErrorMsg = "Daten vom falschen Programm zurck gekommen"; + return false; + } + + return true; + } + + private int calcAvgTime() + { + int result = 0; + + foreach(int i in m_arTime) + { + result+=i; + } + + result /= m_arTime.Length; + return result; + } + + private int calcAvgTTL() + { + int result = 0; + + foreach(int i in m_arTTL) + { + if(m_arResults[i]) + { + result += i; + } + } + + result /= m_arTTL.Length; + return result; + } + + private void clearStats() + { + for(int i = 0; i + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Netstat/Netstat.prjx b/Netstat/Netstat.prjx new file mode 100644 index 0000000..17f715d --- /dev/null +++ b/Netstat/Netstat.prjx @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Quilt/Quilt.sln b/Quilt/Quilt.sln new file mode 100644 index 0000000..2fa443b --- /dev/null +++ b/Quilt/Quilt.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Quilt", "Quilt\Quilt.csproj", "{6F1B5C9E-8562-4EDE-8D4F-95AD13A66D8C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6F1B5C9E-8562-4EDE-8D4F-95AD13A66D8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6F1B5C9E-8562-4EDE-8D4F-95AD13A66D8C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6F1B5C9E-8562-4EDE-8D4F-95AD13A66D8C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6F1B5C9E-8562-4EDE-8D4F-95AD13A66D8C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Quilt/Quilt.suo b/Quilt/Quilt.suo new file mode 100644 index 0000000..4e3b402 Binary files /dev/null and b/Quilt/Quilt.suo differ diff --git a/Quilt/Quilt/Program.cs b/Quilt/Quilt/Program.cs new file mode 100644 index 0000000..673bc26 --- /dev/null +++ b/Quilt/Quilt/Program.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; + +namespace Quilt +{ + class Program + { + static void Main(string[] args) + { + Bitmap bm = new Bitmap("d:\\quilt.bmp"); + Random ran = new Random(); + for(int i = 0; i + + Debug + AnyCPU + 8.0.50215 + 2.0 + {6F1B5C9E-8562-4EDE-8D4F-95AD13A66D8C} + Exe + Properties + Quilt + Quilt + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + \ No newline at end of file diff --git a/Quilt/Quilt/Quilt.csproj.user b/Quilt/Quilt/Quilt.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/Quilt/Quilt/Quilt.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/README b/README new file mode 100644 index 0000000..3a3c7a8 --- /dev/null +++ b/README @@ -0,0 +1 @@ +a collection of things I did in c# when I was still young and stupid diff --git a/Rename/AssemblyInfo.cs b/Rename/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/Rename/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/Rename/MainForm.cs b/Rename/MainForm.cs new file mode 100644 index 0000000..d164bf5 --- /dev/null +++ b/Rename/MainForm.cs @@ -0,0 +1,946 @@ +using System; +using System.IO; +using System.Drawing; +using System.Windows.Forms; + +namespace Rename +{ + public class MainForm : System.Windows.Forms.Form + { + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox StaticTextBox; + private System.Windows.Forms.GroupBox UebertragenFilterGroupBox; + private System.Windows.Forms.ColumnHeader NameColumnHeader; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label VorschauLabel; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button AlleEntfernenButton; + private System.Windows.Forms.Button EntfernenButton; + private System.Windows.Forms.Button AlleUebertragenButton; + private System.Windows.Forms.TextBox EnthaeltTextBox; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ListView VorschauListView; + private System.Windows.Forms.ColumnHeader GroesseColumnHeader; + private System.Windows.Forms.ComboBox ExtensionComboBox; + private System.Windows.Forms.Button TestenButton; + private System.Windows.Forms.NumericUpDown FromNumericUpDown; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ListView FileListView; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button DurchsuchenButton; + private System.Windows.Forms.ListView SourceListView; + private System.Windows.Forms.Button UebertragenButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button SelectedUpButton; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.PictureBox VorschauPictureBox; + private System.Windows.Forms.ColumnHeader columnHeader3; + private System.Windows.Forms.Button SelectedDownButton; + private System.Windows.Forms.Button AktualisierenButton; + private System.Windows.Forms.TextBox FolderTextBox; + private System.Windows.Forms.NumericUpDown ToNumericUpDown; + private System.Windows.Forms.CheckBox EnthaeltCheckBox; + + public MainForm() + { + InitializeComponent(); + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.EnthaeltCheckBox = new System.Windows.Forms.CheckBox(); + this.ToNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.FolderTextBox = new System.Windows.Forms.TextBox(); + this.AktualisierenButton = new System.Windows.Forms.Button(); + this.SelectedDownButton = new System.Windows.Forms.Button(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.VorschauPictureBox = new System.Windows.Forms.PictureBox(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.SelectedUpButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.UebertragenButton = new System.Windows.Forms.Button(); + this.SourceListView = new System.Windows.Forms.ListView(); + this.DurchsuchenButton = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.FileListView = new System.Windows.Forms.ListView(); + this.label4 = new System.Windows.Forms.Label(); + this.FromNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.TestenButton = new System.Windows.Forms.Button(); + this.ExtensionComboBox = new System.Windows.Forms.ComboBox(); + this.GroesseColumnHeader = new System.Windows.Forms.ColumnHeader(); + this.VorschauListView = new System.Windows.Forms.ListView(); + this.label3 = new System.Windows.Forms.Label(); + this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); + this.EnthaeltTextBox = new System.Windows.Forms.TextBox(); + this.AlleUebertragenButton = new System.Windows.Forms.Button(); + this.EntfernenButton = new System.Windows.Forms.Button(); + this.AlleEntfernenButton = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.VorschauLabel = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.NameColumnHeader = new System.Windows.Forms.ColumnHeader(); + this.UebertragenFilterGroupBox = new System.Windows.Forms.GroupBox(); + this.StaticTextBox = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + ((System.ComponentModel.ISupportInitialize)(this.ToNumericUpDown)).BeginInit(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FromNumericUpDown)).BeginInit(); + this.groupBox1.SuspendLayout(); + this.UebertragenFilterGroupBox.SuspendLayout(); + this.SuspendLayout(); + // + // EnthaeltCheckBox + // + this.EnthaeltCheckBox.Location = new System.Drawing.Point(8, 32); + this.EnthaeltCheckBox.Name = "EnthaeltCheckBox"; + this.EnthaeltCheckBox.Size = new System.Drawing.Size(64, 16); + this.EnthaeltCheckBox.TabIndex = 0; + this.EnthaeltCheckBox.Text = "enthält:"; + this.EnthaeltCheckBox.CheckedChanged += new System.EventHandler(this.EnthaeltCheckBoxCheckedChanged); + // + // ToNumericUpDown + // + this.ToNumericUpDown.Enabled = false; + this.ToNumericUpDown.Location = new System.Drawing.Point(168, 64); + this.ToNumericUpDown.Maximum = new System.Decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.ToNumericUpDown.Minimum = new System.Decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.ToNumericUpDown.Name = "ToNumericUpDown"; + this.ToNumericUpDown.ReadOnly = true; + this.ToNumericUpDown.Size = new System.Drawing.Size(56, 20); + this.ToNumericUpDown.TabIndex = 7; + this.ToNumericUpDown.Value = new System.Decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + // + // FolderTextBox + // + this.FolderTextBox.Location = new System.Drawing.Point(8, 352); + this.FolderTextBox.Name = "FolderTextBox"; + this.FolderTextBox.Size = new System.Drawing.Size(256, 20); + this.FolderTextBox.TabIndex = 0; + this.FolderTextBox.Text = ""; + // + // AktualisierenButton + // + this.AktualisierenButton.Location = new System.Drawing.Point(80, 384); + this.AktualisierenButton.Name = "AktualisierenButton"; + this.AktualisierenButton.Size = new System.Drawing.Size(88, 23); + this.AktualisierenButton.TabIndex = 3; + this.AktualisierenButton.Text = "Aktualisieren"; + this.AktualisierenButton.Click += new System.EventHandler(this.AktualisierenButtonClick); + // + // SelectedDownButton + // + this.SelectedDownButton.Enabled = false; + this.SelectedDownButton.Location = new System.Drawing.Point(576, 168); + this.SelectedDownButton.Name = "SelectedDownButton"; + this.SelectedDownButton.Size = new System.Drawing.Size(24, 40); + this.SelectedDownButton.TabIndex = 11; + this.SelectedDownButton.Text = "٧"; + this.SelectedDownButton.Click += new System.EventHandler(this.SelectedDownButtonClick); + // + // columnHeader3 + // + this.columnHeader3.Text = "Umbenannt"; + this.columnHeader3.Width = 114; + // + // VorschauPictureBox + // + this.VorschauPictureBox.BackColor = System.Drawing.SystemColors.Control; + this.VorschauPictureBox.Location = new System.Drawing.Point(0, 0); + this.VorschauPictureBox.Name = "VorschauPictureBox"; + this.VorschauPictureBox.Size = new System.Drawing.Size(320, 240); + this.VorschauPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.VorschauPictureBox.TabIndex = 12; + this.VorschauPictureBox.TabStop = false; + // + // columnHeader1 + // + this.columnHeader1.Text = "Name"; + this.columnHeader1.Width = 125; + // + // SelectedUpButton + // + this.SelectedUpButton.Enabled = false; + this.SelectedUpButton.Location = new System.Drawing.Point(576, 120); + this.SelectedUpButton.Name = "SelectedUpButton"; + this.SelectedUpButton.Size = new System.Drawing.Size(24, 40); + this.SelectedUpButton.TabIndex = 10; + this.SelectedUpButton.Text = "٨"; + this.SelectedUpButton.Click += new System.EventHandler(this.SelectedUpButtonClick); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(40, 32); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(56, 23); + this.label2.TabIndex = 2; + this.label2.Text = "Statisch: "; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // UebertragenButton + // + this.UebertragenButton.Enabled = false; + this.UebertragenButton.Location = new System.Drawing.Point(272, 48); + this.UebertragenButton.Name = "UebertragenButton"; + this.UebertragenButton.Size = new System.Drawing.Size(112, 23); + this.UebertragenButton.TabIndex = 6; + this.UebertragenButton.Text = "Übertragen >"; + this.UebertragenButton.Click += new System.EventHandler(this.UebertragenButtonClick); + // + // SourceListView + // + this.SourceListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader2}); + this.SourceListView.GridLines = true; + this.SourceListView.HideSelection = false; + this.SourceListView.Location = new System.Drawing.Point(392, 8); + this.SourceListView.Name = "SourceListView"; + this.SourceListView.Size = new System.Drawing.Size(176, 336); + this.SourceListView.TabIndex = 15; + this.SourceListView.View = System.Windows.Forms.View.Details; + this.SourceListView.ItemActivate += new System.EventHandler(this.SourceListViewItemActivate); + this.SourceListView.SelectedIndexChanged += new System.EventHandler(this.SourceListViewSelectedIndexChanged); + // + // DurchsuchenButton + // + this.DurchsuchenButton.Location = new System.Drawing.Point(176, 384); + this.DurchsuchenButton.Name = "DurchsuchenButton"; + this.DurchsuchenButton.Size = new System.Drawing.Size(88, 23); + this.DurchsuchenButton.TabIndex = 1; + this.DurchsuchenButton.Text = "Durchsuchen"; + this.DurchsuchenButton.Click += new System.EventHandler(this.DurchsuchenButtonClick); + // + // panel1 + // + this.panel1.Controls.Add(this.VorschauPictureBox); + this.panel1.Location = new System.Drawing.Point(280, 352); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(320, 240); + this.panel1.TabIndex = 13; + // + // FileListView + // + this.FileListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.NameColumnHeader, + this.GroesseColumnHeader}); + this.FileListView.Enabled = false; + this.FileListView.GridLines = true; + this.FileListView.HideSelection = false; + this.FileListView.Location = new System.Drawing.Point(8, 8); + this.FileListView.Name = "FileListView"; + this.FileListView.Size = new System.Drawing.Size(256, 336); + this.FileListView.Sorting = System.Windows.Forms.SortOrder.Ascending; + this.FileListView.TabIndex = 2; + this.FileListView.View = System.Windows.Forms.View.Details; + // + // label4 + // + this.label4.Location = new System.Drawing.Point(24, 96); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(72, 23); + this.label4.TabIndex = 6; + this.label4.Text = "Dateiendung:"; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // FromNumericUpDown + // + this.FromNumericUpDown.Location = new System.Drawing.Point(72, 64); + this.FromNumericUpDown.Maximum = new System.Decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.FromNumericUpDown.Name = "FromNumericUpDown"; + this.FromNumericUpDown.Size = new System.Drawing.Size(56, 20); + this.FromNumericUpDown.TabIndex = 3; + this.FromNumericUpDown.ValueChanged += new System.EventHandler(this.FromNumericUpDownValueChanged); + this.FromNumericUpDown.Leave += new System.EventHandler(this.FromNumericUpDownLeave); + // + // TestenButton + // + this.TestenButton.Location = new System.Drawing.Point(24, 160); + this.TestenButton.Name = "TestenButton"; + this.TestenButton.Size = new System.Drawing.Size(72, 23); + this.TestenButton.TabIndex = 11; + this.TestenButton.Text = "Testen"; + this.TestenButton.Click += new System.EventHandler(this.TestenButtonClick); + // + // ExtensionComboBox + // + this.ExtensionComboBox.Items.AddRange(new object[] { + ".bmp", + ".gif", + ".jpg", + ".pcx", + ".png", + ".tiff"}); + this.ExtensionComboBox.Location = new System.Drawing.Point(104, 96); + this.ExtensionComboBox.Name = "ExtensionComboBox"; + this.ExtensionComboBox.Size = new System.Drawing.Size(121, 21); + this.ExtensionComboBox.Sorted = true; + this.ExtensionComboBox.TabIndex = 8; + this.ExtensionComboBox.Text = ".jpg"; + this.ExtensionComboBox.TextChanged += new System.EventHandler(this.ExtensionComboBoxTextChanged); + // + // GroesseColumnHeader + // + this.GroesseColumnHeader.Text = "Größe"; + this.GroesseColumnHeader.Width = 77; + // + // VorschauListView + // + this.VorschauListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1, + this.columnHeader3}); + this.VorschauListView.GridLines = true; + this.VorschauListView.HideSelection = false; + this.VorschauListView.Location = new System.Drawing.Point(616, 8); + this.VorschauListView.Name = "VorschauListView"; + this.VorschauListView.Size = new System.Drawing.Size(248, 336); + this.VorschauListView.TabIndex = 4; + this.VorschauListView.View = System.Windows.Forms.View.Details; + this.VorschauListView.ItemActivate += new System.EventHandler(this.SourceListViewItemActivate); + this.VorschauListView.SelectedIndexChanged += new System.EventHandler(this.SourceListViewSelectedIndexChanged); + // + // label3 + // + this.label3.Location = new System.Drawing.Point(136, 64); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(24, 23); + this.label3.TabIndex = 4; + this.label3.Text = "Bis:"; + this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // folderBrowserDialog + // + this.folderBrowserDialog.Description = "Wählen Sie den Pfad aus, unter dem Sie Dateien umbenennen möchten."; + this.folderBrowserDialog.SelectedPath = "E:\\Fotos"; + this.folderBrowserDialog.ShowNewFolderButton = false; + // + // EnthaeltTextBox + // + this.EnthaeltTextBox.Enabled = false; + this.EnthaeltTextBox.Location = new System.Drawing.Point(8, 56); + this.EnthaeltTextBox.Name = "EnthaeltTextBox"; + this.EnthaeltTextBox.Size = new System.Drawing.Size(96, 20); + this.EnthaeltTextBox.TabIndex = 1; + this.EnthaeltTextBox.Text = ""; + // + // AlleUebertragenButton + // + this.AlleUebertragenButton.Enabled = false; + this.AlleUebertragenButton.Location = new System.Drawing.Point(272, 88); + this.AlleUebertragenButton.Name = "AlleUebertragenButton"; + this.AlleUebertragenButton.Size = new System.Drawing.Size(112, 24); + this.AlleUebertragenButton.TabIndex = 5; + this.AlleUebertragenButton.Text = "Alle übertragen >>"; + this.AlleUebertragenButton.Click += new System.EventHandler(this.AlleUebertragenButtonClick); + // + // EntfernenButton + // + this.EntfernenButton.Enabled = false; + this.EntfernenButton.Location = new System.Drawing.Point(272, 272); + this.EntfernenButton.Name = "EntfernenButton"; + this.EntfernenButton.Size = new System.Drawing.Size(112, 23); + this.EntfernenButton.TabIndex = 8; + this.EntfernenButton.Text = "< Entfernen"; + this.EntfernenButton.Click += new System.EventHandler(this.EntfernenButtonClick); + // + // AlleEntfernenButton + // + this.AlleEntfernenButton.Enabled = false; + this.AlleEntfernenButton.Location = new System.Drawing.Point(272, 232); + this.AlleEntfernenButton.Name = "AlleEntfernenButton"; + this.AlleEntfernenButton.Size = new System.Drawing.Size(112, 23); + this.AlleEntfernenButton.TabIndex = 9; + this.AlleEntfernenButton.Text = "<< Alle entfernen"; + this.AlleEntfernenButton.Click += new System.EventHandler(this.AlleEntfernenButtonClick); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(104, 160); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(120, 23); + this.button2.TabIndex = 12; + this.button2.Text = "Umbenennen"; + // + // VorschauLabel + // + this.VorschauLabel.Location = new System.Drawing.Point(104, 128); + this.VorschauLabel.Name = "VorschauLabel"; + this.VorschauLabel.Size = new System.Drawing.Size(120, 23); + this.VorschauLabel.TabIndex = 10; + this.VorschauLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.TestenButton); + this.groupBox1.Controls.Add(this.VorschauLabel); + this.groupBox1.Controls.Add(this.label5); + this.groupBox1.Controls.Add(this.ExtensionComboBox); + this.groupBox1.Controls.Add(this.ToNumericUpDown); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.FromNumericUpDown); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.StaticTextBox); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Location = new System.Drawing.Point(616, 368); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(248, 200); + this.groupBox1.TabIndex = 14; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Optionen"; + // + // NameColumnHeader + // + this.NameColumnHeader.Text = "Name"; + this.NameColumnHeader.Width = 158; + // + // UebertragenFilterGroupBox + // + this.UebertragenFilterGroupBox.Controls.Add(this.EnthaeltTextBox); + this.UebertragenFilterGroupBox.Controls.Add(this.EnthaeltCheckBox); + this.UebertragenFilterGroupBox.Location = new System.Drawing.Point(264, 128); + this.UebertragenFilterGroupBox.Name = "UebertragenFilterGroupBox"; + this.UebertragenFilterGroupBox.Size = new System.Drawing.Size(112, 88); + this.UebertragenFilterGroupBox.TabIndex = 7; + this.UebertragenFilterGroupBox.TabStop = false; + this.UebertragenFilterGroupBox.Text = "Alle Übertragen/ Entfernen-Filter"; + // + // StaticTextBox + // + this.StaticTextBox.Location = new System.Drawing.Point(104, 32); + this.StaticTextBox.Name = "StaticTextBox"; + this.StaticTextBox.Size = new System.Drawing.Size(120, 20); + this.StaticTextBox.TabIndex = 1; + this.StaticTextBox.Text = "100_"; + this.StaticTextBox.TextChanged += new System.EventHandler(this.StaticTextBoxTextChanged); + // + // label5 + // + this.label5.Location = new System.Drawing.Point(24, 128); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(72, 24); + this.label5.TabIndex = 9; + this.label5.Text = "Vorschau:"; + this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(32, 64); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(32, 24); + this.label1.TabIndex = 0; + this.label1.Text = "Von:"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // columnHeader2 + // + this.columnHeader2.Text = "Name"; + this.columnHeader2.Width = 170; + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(872, 597); + this.Controls.Add(this.SourceListView); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.panel1); + this.Controls.Add(this.SelectedDownButton); + this.Controls.Add(this.SelectedUpButton); + this.Controls.Add(this.AlleEntfernenButton); + this.Controls.Add(this.EntfernenButton); + this.Controls.Add(this.UebertragenFilterGroupBox); + this.Controls.Add(this.UebertragenButton); + this.Controls.Add(this.AlleUebertragenButton); + this.Controls.Add(this.VorschauListView); + this.Controls.Add(this.AktualisierenButton); + this.Controls.Add(this.FileListView); + this.Controls.Add(this.DurchsuchenButton); + this.Controls.Add(this.FolderTextBox); + this.Name = "MainForm"; + this.Text = "Rename"; + ((System.ComponentModel.ISupportInitialize)(this.ToNumericUpDown)).EndInit(); + this.panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.FromNumericUpDown)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.UebertragenFilterGroupBox.ResumeLayout(false); + this.ResumeLayout(false); + } + #endregion + + /* + * ein folderBrowserDialog übergibt bei Ungültigkeit der Textboxeingabe + * UpdateFileList view den Pfad und entleert SourceListView + */ + void DurchsuchenButtonClick(object sender, System.EventArgs e) + { + if(FolderTextBox.Text != "") + { + folderBrowserDialog.SelectedPath = FolderTextBox.Text; + } + + if(folderBrowserDialog.ShowDialog() == DialogResult.OK) + { + FolderTextBox.Text = folderBrowserDialog.SelectedPath; + UpdateFileListView(folderBrowserDialog.SelectedPath); + SourceListView.Items.Clear(); //Bei jedem Durchsuchen wird SourceListView geleert + } + + UebertragenButton.Enabled = true; + AlleUebertragenButton.Enabled = true; + } + + /* + * UpdateFileListView wird der Inhalt der TextBox übergeben und SourceListView + * wird gelöscht + */ + void AktualisierenButtonClick(object sender, System.EventArgs e) + { + if(FolderTextBox.Text != "") + { + UpdateFileListView(FolderTextBox.Text); + } + + SourceListView.Items.Clear(); //Bei jedem Durchsuchen wird SourceListView geleert + + UebertragenButton.Enabled = true; + AlleUebertragenButton.Enabled = true; + } + + /* + * Der durch die TextBox oder den Browse Dialog übergebene Pfad wird auf seine + * Gültigkeit hin geprüft und dann die Dateinamen mit ihren zugehörigen + * Dateigrößen in FileListView übertragen + */ + void UpdateFileListView(string path) + { + DirectoryInfo di = new DirectoryInfo(path); + + if(di.Exists) + { + FileListView.Enabled = true; + FileListView.Items.Clear(); + FileInfo[] fiArr = di.GetFiles(); + + foreach(FileInfo fi in fiArr) + { + FileListView.Items.Add(fi.Name); + FileListView.Items[FileListView.Items.Count-1].SubItems.Add(Convert.ToString(fi.Length)); + } + } else { + FileListView.Items.Clear(); + FileListView.Items.Add("Kann Ordner nicht finden"); + FileListView.Enabled = false; + } + } + + /* + * Geht alle Markierten Einträge von FileListView durch, löscht sie + * und hängt sie an SourceListView an + */ + void UebertragenButtonClick(object sender, System.EventArgs e) + { + foreach(ListViewItem i in FileListView.SelectedItems) + { + FileListView.Items.Remove(i); + SourceListView.Items.Add(i); + } + + AlleEntfernenButton.Enabled = true; + EntfernenButton.Enabled = true; + + if(FileListView.Items.Count == 0) + { + UebertragenButton.Enabled = false; + AlleUebertragenButton.Enabled = false; + } + } + + /* + * Überprüft, ob nach Kriterien übertragen werden soll und ob das + * Textfeld nicht leer ist. + * Dann überträgt es entweder alle dateien die den gefordeten String + * enthalten oder im anderen Fall alle von FileListView nach + * SourceListView + * Aktiviert alle Buttons die in Interaktion mit SourceListView stehen + */ + void AlleUebertragenButtonClick(object sender, System.EventArgs e) + { + if(EnthaeltCheckBox.Checked && EnthaeltTextBox.Text != "") + { + foreach(ListViewItem i in FileListView.Items) + { + if(i.Text.IndexOf(EnthaeltTextBox.Text)!=-1) + { + FileListView.Items.Remove(i); + SourceListView.Items.Add(i); + } + } + } else { + foreach(ListViewItem i in FileListView.Items) + { + FileListView.Items.Remove(i); + SourceListView.Items.Add(i); + } + } + + AlleEntfernenButton.Enabled = true; + EntfernenButton.Enabled = true; + UebertragenButton.Enabled = false; + AlleUebertragenButton.Enabled = false; + } + + /* + * Bei einer Änderung des Status der Checkbox wird das Textfeld entweder + * aktiviert oder deaktiviert + */ + void EnthaeltCheckBoxCheckedChanged(object sender, System.EventArgs e) + { + switch(EnthaeltCheckBox.Checked) + { + case true: + { + EnthaeltTextBox.Enabled = true; + break; + } + case false: + { + EnthaeltTextBox.Enabled = false; + break; + } + } + } + + /* + * Entfernt alle markierten Einträge aus SourceListView und fügt sie + * in FileListView ein + * Deaktiviert alle Buttons die im Zusammenhang mit SourceListView stehen + * wenn die Liste leer ist + */ + void EntfernenButtonClick(object sender, System.EventArgs e) + { + foreach(ListViewItem i in SourceListView.SelectedItems) + { + SourceListView.Items.Remove(i); + FileListView.Items.Add(i); + } + + if(SourceListView.Items.Count == 0) + { + SelectedUpButton.Enabled = false; + SelectedDownButton.Enabled = false; + AlleEntfernenButton.Enabled = false; + EntfernenButton.Enabled = false; + } + + UebertragenButton.Enabled = true; + AlleUebertragenButton.Enabled = true; + } + + /* + * Überprüft, ob nach Kriterien übertragen werden soll und ob das + * Textfeld nicht leer ist. + * Dann überträgt es entweder alle dateien die den gefordeten String + * enthalten oder im anderen Fall alle von SourceListView nach + * FileListView + * Deaktiviert alle Buttons, die im Zusammenhang mit SourceListView stehen + */ + void AlleEntfernenButtonClick(object sender, System.EventArgs e) + { + if(EnthaeltCheckBox.Checked && EnthaeltTextBox.Text != "") + { + foreach(ListViewItem i in SourceListView.Items) + { + if(i.Text.IndexOf(EnthaeltTextBox.Text)!=-1) + { + SourceListView.Items.Remove(i); + FileListView.Items.Add(i); + } + } + } else { + foreach(ListViewItem i in SourceListView.Items) + { + SourceListView.Items.Remove(i); + FileListView.Items.Add(i); + } + } + + SelectedUpButton.Enabled = false; + SelectedDownButton.Enabled = false; + AlleEntfernenButton.Enabled = false; + EntfernenButton.Enabled = false; + UebertragenButton.Enabled = true; + AlleUebertragenButton.Enabled = true; + } + + /* + * Verschiebt alle Selektierten Elemente um einen Platz nach oben + */ + void SelectedUpButtonClick(object sender, System.EventArgs e) + { + //Erstellt ein ListViewItem Array um die selektierten ListViewItems + //aufnehmen zu können + ListViewItem[] SelectedItemsArr = new ListViewItem[SourceListView.SelectedItems.Count]; + //Erstellt ein weiteres ListViewItem Arry für alle List View Items nach + //der Selektion mit entsprechender Größe (Gesamtzahl aller Items minus + //dem Index des Letztmarkierten Eintrags) + ListViewItem[] AfterItemsArr = new ListViewItem[SourceListView.Items.Count + -SourceListView.SelectedItems[SourceListView.SelectedItems.Count-1].Index-1]; + + //Kopiert alle markierten Items in das entsprehende Array + SourceListView.SelectedItems.CopyTo(SelectedItemsArr, 0); + + //Kopiert alle Items nach der Selektion in das entsprechende Array + foreach(ListViewItem i in SourceListView.Items) + { + if(i.Index > SourceListView.SelectedItems[SourceListView.SelectedItems.Count-1].Index) + { + //Subtrahiert den Index des ersten unmarkierten Eintrags vom aktuellen Index um die + //richtige Position im Array zu erhalten + AfterItemsArr[i.Index-SourceListView.SelectedItems[SourceListView.SelectedItems.Count-1].Index-1] = i; + } + } + + //Löscht alle Einträge nach der Selektion aus dem ListView + foreach(ListViewItem i in SourceListView.Items) + { + if(i.Index > SourceListView.SelectedItems[SourceListView.SelectedItems.Count-1].Index) + { + i.Remove(); + } + } + + //Löscht alle markierten Einträge + foreach(ListViewItem i in SourceListView.Items) + { + if(i.Selected) + { + i.Remove(); + } + } + + //Erstellt ein Temporäres Item und kopiert das letzte Item des momentanen ListViews + //rein um das Item dann aus dem ListView zu löschen + ListViewItem TempItem = SourceListView.Items[SourceListView.Items.Count-1]; + SourceListView.Items[SourceListView.Items.Count-1].Remove(); + + //Fügt dem ListView alle Einträge aus dem Array mit den Selektierten Items hinzu + foreach(ListViewItem i in SelectedItemsArr) + { + SourceListView.Items.Add(i); + } + + //Hängt das TempItem an + SourceListView.Items.Add(TempItem); + + //Fügt alle Einträge des Arrays mit Items nach der anfänglichen Selektion ein + foreach(ListViewItem i in AfterItemsArr) + { + SourceListView.Items.Add(i); + } + + //Aktiviert den Down Button, da die Selektion nach dem EInfügen in die Liste + //der letzte Eintrag war und somit von SourceListViewSelectedIndexChanged + //deaktivuert wurde und das Ereignis nach Einfügen der restlichen Einträge + //niocht nochmals aufgerufen wird + SelectedDownButton.Enabled = true; + } + + /* + * Verschiebt alle Selektierten Elemente um einen Platz nach unten + */ + void SelectedDownButtonClick(object sender, System.EventArgs e) + { + ListViewItem[] SelectedItemsArr = new ListViewItem[SourceListView.SelectedItems.Count]; + ListViewItem[] AfterItemsArr = new ListViewItem[SourceListView.Items.Count + -SourceListView.SelectedItems[SourceListView.SelectedItems.Count-1].Index-2]; + + SourceListView.SelectedItems.CopyTo(SelectedItemsArr, 0); + + ListViewItem TempItem = SourceListView.Items[SourceListView.SelectedItems[SourceListView.SelectedItems.Count-1].Index+1]; + SourceListView.Items[SourceListView.SelectedItems[SourceListView.SelectedItems.Count-1].Index+1].Remove(); + + foreach(ListViewItem i in SourceListView.Items) + { + if(i.Index > SourceListView.SelectedItems[SourceListView.SelectedItems.Count-1].Index) + { + AfterItemsArr[i.Index-SourceListView.SelectedItems[SourceListView.SelectedItems.Count-1].Index-1] = i; + } + } + + foreach(ListViewItem i in SourceListView.Items) + { + if(i.Index > SourceListView.SelectedItems[SourceListView.SelectedItems.Count-1].Index) + { + i.Remove(); + } + } + + foreach(ListViewItem i in SourceListView.Items) + { + if(i.Selected) + { + i.Remove(); + } + } + + SourceListView.Items.Add(TempItem); + + foreach(ListViewItem i in SelectedItemsArr) + { + SourceListView.Items.Add(i); + } + + foreach(ListViewItem i in AfterItemsArr) + { + SourceListView.Items.Add(i); + } + + if(SourceListView.SelectedItems[SourceListView.SelectedItems.Count-1].Index == SourceListView.Items.Count-1) + { + SelectedDownButton.Enabled = false; + } + else + { + SelectedDownButton.Enabled = true; + } + } + + /* + * Überprüft ob die selektierten Elemente entweder ganz oben oder ganz + * unten liegen und aktiviert bzw. deaktiviert die Up und Down Buttons + */ + void SourceListViewSelectedIndexChanged(object sender, System.EventArgs e) + { + if(SourceListView.SelectedItems.Count == 0) + { + SelectedUpButton.Enabled = false; + SelectedDownButton.Enabled = false; + } + else + { + if(SourceListView.SelectedItems[0].Index == 0) + { + SelectedUpButton.Enabled = false; + } + else + { + SelectedUpButton.Enabled = true; + } + + if(SourceListView.SelectedItems[SourceListView.SelectedItems.Count-1].Index == SourceListView.Items.Count-1) + { + SelectedDownButton.Enabled = false; + } + else + { + SelectedDownButton.Enabled = true; + } + } + } + + /* + * Wird ein Item angewählt überprüft die Funktion das Bild auf Hoch oder + * Querformat und ändert die Größe und Lage der Picture Box in der Weise, + * dass das Bild korrekt angezeigt wird. + */ + void SourceListViewItemActivate(object sender, System.EventArgs e) + { + if(File.Exists(FolderTextBox.Text+"\\"+SourceListView.SelectedItems[0].Text)) + { + VorschauPictureBox.Visible = false; + + VorschauPictureBox.Image = Image.FromFile(FolderTextBox.Text+"\\"+SourceListView.SelectedItems[0].Text); + + decimal AspectRatio = Convert.ToDecimal(VorschauPictureBox.Image.Width)/Convert.ToDecimal(VorschauPictureBox.Image.Height); + + if(AspectRatio > 1)//Querformat + { + VorschauPictureBox.Width = 320; + VorschauPictureBox.Height = Convert.ToInt32(320/AspectRatio); + VorschauPictureBox.Left = 0; + VorschauPictureBox.Top = 120-VorschauPictureBox.Height/2; + } + else if(AspectRatio < 1)//Hochformat + { + VorschauPictureBox.Width = Convert.ToInt32(240*AspectRatio); + VorschauPictureBox.Height = 240; + VorschauPictureBox.Top = 0; + VorschauPictureBox.Left = 160-VorschauPictureBox.Width/2; + } + + VorschauPictureBox.Visible = true; + } + } + void FromNumericUpDownValueChanged(object sender, System.EventArgs e) + { + ToNumericUpDown.Value = FromNumericUpDown.Value + SourceListView.Items.Count - 1; + } + + void FromNumericUpDownLeave(object sender, System.EventArgs e) + { + ToNumericUpDown.Value = FromNumericUpDown.Value + SourceListView.Items.Count - 1; + VorschauLabel.Text = StaticTextBox.Text + FromNumericUpDown.Value.ToString() + ExtensionComboBox.Text; + } + void StaticTextBoxTextChanged(object sender, System.EventArgs e) + { + VorschauLabel.Text = StaticTextBox.Text + FromNumericUpDown.Value.ToString() + ExtensionComboBox.Text; + } + + void ExtensionComboBoxTextChanged(object sender, System.EventArgs e) + { + VorschauLabel.Text = StaticTextBox.Text + FromNumericUpDown.Value.ToString() + ExtensionComboBox.Text; + } + + void TestenButtonClick(object sender, System.EventArgs e) + { + foreach(ListViewItem i in VorschauListView.Items) + { + i.Remove(); + } + + ListViewItem[] Items = new ListViewItem[SourceListView.Items.Count]; + foreach(ListViewItem i in SourceListView.Items) + { + Items[i.Index]=(ListViewItem)i.Clone(); + } + + foreach(ListViewItem i in Items) + { + VorschauListView.Items.Add(i.Text); + } + } + } +} + +//TODO: Führende nullen des NumericUPDown werden nicht übernommen diff --git a/Rename/Rename.MainForm.resources b/Rename/Rename.MainForm.resources new file mode 100644 index 0000000..f8ef7ed Binary files /dev/null and b/Rename/Rename.MainForm.resources differ diff --git a/Rename/Rename.cmbx b/Rename/Rename.cmbx new file mode 100644 index 0000000..5e8be9a --- /dev/null +++ b/Rename/Rename.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Rename/Rename.prjx b/Rename/Rename.prjx new file mode 100644 index 0000000..99f3274 --- /dev/null +++ b/Rename/Rename.prjx @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Rename/shell32.ico b/Rename/shell32.ico new file mode 100644 index 0000000..4ba4880 Binary files /dev/null and b/Rename/shell32.ico differ diff --git a/Rename2/Rename2.rar b/Rename2/Rename2.rar new file mode 100644 index 0000000..42ce09b Binary files /dev/null and b/Rename2/Rename2.rar differ diff --git a/Rename2/Rename2/Form1.Designer.cs b/Rename2/Rename2/Form1.Designer.cs new file mode 100644 index 0000000..bf399ac --- /dev/null +++ b/Rename2/Rename2/Form1.Designer.cs @@ -0,0 +1,397 @@ +namespace Rename2 +{ + partial class Rename2 + { + /// + /// 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.Windows.Forms.Button bTesten; + this.lvVerzeichnis = new System.Windows.Forms.ListView(); + this.chName = new System.Windows.Forms.ColumnHeader(); + this.chGre = new System.Windows.Forms.ColumnHeader(); + this.tbVerzeichnis = new System.Windows.Forms.TextBox(); + this.bAktualisieren = new System.Windows.Forms.Button(); + this.bffnen = new System.Windows.Forms.Button(); + this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); + this.lvQuelle = new System.Windows.Forms.ListView(); + this.chQuelleName = new System.Windows.Forms.ColumnHeader(); + this.bbertragen = new System.Windows.Forms.Button(); + this.bAllebertragen = new System.Windows.Forms.Button(); + this.cbFilter = new System.Windows.Forms.CheckBox(); + this.tbFilter = new System.Windows.Forms.TextBox(); + this.bAlleEntfernen = new System.Windows.Forms.Button(); + this.bEntfernen = new System.Windows.Forms.Button(); + this.bNachOben = new System.Windows.Forms.Button(); + this.bNachUnten = new System.Windows.Forms.Button(); + this.lvZiel = new System.Windows.Forms.ListView(); + this.chZielName = new System.Windows.Forms.ColumnHeader(); + this.chZielUmbenannt = new System.Windows.Forms.ColumnHeader(); + this.tbVorne = new System.Windows.Forms.TextBox(); + this.nudVon = new System.Windows.Forms.NumericUpDown(); + this.nudBis = new System.Windows.Forms.NumericUpDown(); + this.tbHinten = new System.Windows.Forms.TextBox(); + this.lVorschau = new System.Windows.Forms.Label(); + this.bUmbenennen = new System.Windows.Forms.Button(); + bTesten = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.nudVon)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudBis)).BeginInit(); + this.SuspendLayout(); + // + // bTesten + // + bTesten.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + bTesten.Location = new System.Drawing.Point(590, 397); + bTesten.Name = "bTesten"; + bTesten.Size = new System.Drawing.Size(75, 23); + bTesten.TabIndex = 19; + bTesten.Text = "Testen"; + bTesten.Click += new System.EventHandler(this.bTesten_Click); + // + // lvVerzeichnis + // + this.lvVerzeichnis.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lvVerzeichnis.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.chName, + this.chGre}); + this.lvVerzeichnis.Enabled = false; + this.lvVerzeichnis.Location = new System.Drawing.Point(12, 12); + this.lvVerzeichnis.Name = "lvVerzeichnis"; + this.lvVerzeichnis.Size = new System.Drawing.Size(223, 310); + this.lvVerzeichnis.TabIndex = 0; + this.lvVerzeichnis.View = System.Windows.Forms.View.Details; + // + // chName + // + this.chName.Text = "Name"; + this.chName.Width = 125; + // + // chGre + // + this.chGre.Text = "Gre"; + this.chGre.Width = 85; + // + // tbVerzeichnis + // + this.tbVerzeichnis.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbVerzeichnis.Enabled = false; + this.tbVerzeichnis.Location = new System.Drawing.Point(12, 328); + this.tbVerzeichnis.Name = "tbVerzeichnis"; + this.tbVerzeichnis.Size = new System.Drawing.Size(223, 20); + this.tbVerzeichnis.TabIndex = 1; + // + // bAktualisieren + // + this.bAktualisieren.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bAktualisieren.Location = new System.Drawing.Point(79, 354); + this.bAktualisieren.Name = "bAktualisieren"; + this.bAktualisieren.Size = new System.Drawing.Size(75, 23); + this.bAktualisieren.TabIndex = 2; + this.bAktualisieren.Text = "Aktualisieren"; + this.bAktualisieren.Click += new System.EventHandler(this.bAktualisieren_Click); + // + // bffnen + // + this.bffnen.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bffnen.Location = new System.Drawing.Point(160, 354); + this.bffnen.Name = "bffnen"; + this.bffnen.Size = new System.Drawing.Size(75, 23); + this.bffnen.TabIndex = 3; + this.bffnen.Text = "ffnen"; + this.bffnen.Click += new System.EventHandler(this.bffnen_Click); + // + // folderBrowserDialog1 + // + this.folderBrowserDialog1.Description = "Hier den Ordner auswhlen in dem sich die umzubenennenden Dateien befinden:"; + this.folderBrowserDialog1.RootFolder = System.Environment.SpecialFolder.MyComputer; + this.folderBrowserDialog1.SelectedPath = "folderBrowserDialog1"; + this.folderBrowserDialog1.ShowNewFolderButton = false; + // + // lvQuelle + // + this.lvQuelle.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lvQuelle.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.chQuelleName}); + this.lvQuelle.HideSelection = false; + this.lvQuelle.Location = new System.Drawing.Point(354, 12); + this.lvQuelle.Name = "lvQuelle"; + this.lvQuelle.Size = new System.Drawing.Size(154, 310); + this.lvQuelle.TabIndex = 4; + this.lvQuelle.View = System.Windows.Forms.View.Details; + this.lvQuelle.SelectedIndexChanged += new System.EventHandler(this.lvQuelle_SelectedIndexChanged); + // + // chQuelleName + // + this.chQuelleName.Text = "Name"; + this.chQuelleName.Width = 143; + // + // bbertragen + // + this.bbertragen.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bbertragen.Location = new System.Drawing.Point(241, 69); + this.bbertragen.Name = "bbertragen"; + this.bbertragen.Size = new System.Drawing.Size(107, 23); + this.bbertragen.TabIndex = 5; + this.bbertragen.Text = "bertragen >"; + this.bbertragen.Click += new System.EventHandler(this.bbertragen_Click); + // + // bAllebertragen + // + this.bAllebertragen.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bAllebertragen.Location = new System.Drawing.Point(241, 98); + this.bAllebertragen.Name = "bAllebertragen"; + this.bAllebertragen.Size = new System.Drawing.Size(107, 23); + this.bAllebertragen.TabIndex = 6; + this.bAllebertragen.Text = "Alle bertragen >>"; + this.bAllebertragen.Click += new System.EventHandler(this.bAllebertragen_Click); + // + // cbFilter + // + this.cbFilter.AutoSize = true; + this.cbFilter.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbFilter.Location = new System.Drawing.Point(241, 127); + this.cbFilter.Name = "cbFilter"; + this.cbFilter.Size = new System.Drawing.Size(86, 17); + this.cbFilter.TabIndex = 7; + this.cbFilter.Text = "(Filter) Enthlt:"; + this.cbFilter.CheckedChanged += new System.EventHandler(this.cbFilter_CheckedChanged); + // + // tbFilter + // + this.tbFilter.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbFilter.Enabled = false; + this.tbFilter.Location = new System.Drawing.Point(241, 150); + this.tbFilter.Name = "tbFilter"; + this.tbFilter.Size = new System.Drawing.Size(107, 20); + this.tbFilter.TabIndex = 8; + // + // bAlleEntfernen + // + this.bAlleEntfernen.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bAlleEntfernen.Location = new System.Drawing.Point(241, 176); + this.bAlleEntfernen.Name = "bAlleEntfernen"; + this.bAlleEntfernen.Size = new System.Drawing.Size(107, 23); + this.bAlleEntfernen.TabIndex = 9; + this.bAlleEntfernen.Text = "<< Alle entfernen"; + this.bAlleEntfernen.Click += new System.EventHandler(this.bAlleEntfernen_Click); + // + // bEntfernen + // + this.bEntfernen.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bEntfernen.Location = new System.Drawing.Point(241, 205); + this.bEntfernen.Name = "bEntfernen"; + this.bEntfernen.Size = new System.Drawing.Size(107, 23); + this.bEntfernen.TabIndex = 10; + this.bEntfernen.Text = "< Entfernen"; + this.bEntfernen.Click += new System.EventHandler(this.bEntfernen_Click); + // + // bNachOben + // + this.bNachOben.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bNachOben.Location = new System.Drawing.Point(514, 12); + this.bNachOben.Name = "bNachOben"; + this.bNachOben.Size = new System.Drawing.Size(70, 23); + this.bNachOben.TabIndex = 11; + this.bNachOben.Text = "nach oben"; + this.bNachOben.Click += new System.EventHandler(this.bNachOben_Click); + // + // bNachUnten + // + this.bNachUnten.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bNachUnten.Location = new System.Drawing.Point(514, 41); + this.bNachUnten.Name = "bNachUnten"; + this.bNachUnten.Size = new System.Drawing.Size(70, 23); + this.bNachUnten.TabIndex = 12; + this.bNachUnten.Text = "nach unten"; + this.bNachUnten.Click += new System.EventHandler(this.bNachUnten_Click); + // + // lvZiel + // + this.lvZiel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lvZiel.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.chZielUmbenannt, + this.chZielName}); + this.lvZiel.FullRowSelect = true; + this.lvZiel.LabelEdit = true; + this.lvZiel.Location = new System.Drawing.Point(590, 12); + this.lvZiel.MultiSelect = false; + this.lvZiel.Name = "lvZiel"; + this.lvZiel.Size = new System.Drawing.Size(367, 310); + this.lvZiel.TabIndex = 13; + this.lvZiel.View = System.Windows.Forms.View.Details; + // + // chZielName + // + this.chZielName.Text = "Alter Name"; + this.chZielName.Width = 189; + // + // chZielUmbenannt + // + this.chZielUmbenannt.Text = "Umbenannt"; + this.chZielUmbenannt.Width = 165; + // + // tbVorne + // + this.tbVorne.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbVorne.Location = new System.Drawing.Point(590, 340); + this.tbVorne.Name = "tbVorne"; + this.tbVorne.Size = new System.Drawing.Size(194, 20); + this.tbVorne.TabIndex = 14; + this.tbVorne.TextChanged += new System.EventHandler(this.tbVorne_TextChanged); + // + // nudVon + // + this.nudVon.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudVon.Location = new System.Drawing.Point(790, 328); + this.nudVon.Maximum = new decimal(new int[] { + 99, + 0, + 0, + 0}); + this.nudVon.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudVon.Name = "nudVon"; + this.nudVon.Size = new System.Drawing.Size(52, 20); + this.nudVon.TabIndex = 15; + this.nudVon.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudVon.ValueChanged += new System.EventHandler(this.nudVon_ValueChanged); + // + // nudBis + // + this.nudBis.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudBis.Location = new System.Drawing.Point(790, 354); + this.nudBis.Maximum = new decimal(new int[] { + 1000, + 0, + 0, + 0}); + this.nudBis.Name = "nudBis"; + this.nudBis.ReadOnly = true; + this.nudBis.Size = new System.Drawing.Size(52, 20); + this.nudBis.TabIndex = 16; + // + // tbHinten + // + this.tbHinten.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbHinten.Location = new System.Drawing.Point(848, 340); + this.tbHinten.Name = "tbHinten"; + this.tbHinten.Size = new System.Drawing.Size(106, 20); + this.tbHinten.TabIndex = 17; + this.tbHinten.TextChanged += new System.EventHandler(this.tbHinten_TextChanged); + // + // lVorschau + // + this.lVorschau.AutoSize = true; + this.lVorschau.Location = new System.Drawing.Point(589, 381); + this.lVorschau.Name = "lVorschau"; + this.lVorschau.Size = new System.Drawing.Size(51, 13); + this.lVorschau.TabIndex = 18; + this.lVorschau.Text = "Vorschau:"; + // + // bUmbenennen + // + this.bUmbenennen.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bUmbenennen.Location = new System.Drawing.Point(671, 397); + this.bUmbenennen.Name = "bUmbenennen"; + this.bUmbenennen.Size = new System.Drawing.Size(90, 23); + this.bUmbenennen.TabIndex = 20; + this.bUmbenennen.Text = "Umbenennen!"; + this.bUmbenennen.Click += new System.EventHandler(this.bUmbenennen_Click); + // + // Rename2 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(969, 429); + this.Controls.Add(this.bUmbenennen); + this.Controls.Add(bTesten); + this.Controls.Add(this.lVorschau); + this.Controls.Add(this.tbHinten); + this.Controls.Add(this.nudBis); + this.Controls.Add(this.nudVon); + this.Controls.Add(this.tbVorne); + this.Controls.Add(this.lvZiel); + this.Controls.Add(this.bNachUnten); + this.Controls.Add(this.bNachOben); + this.Controls.Add(this.bEntfernen); + this.Controls.Add(this.bAlleEntfernen); + this.Controls.Add(this.tbFilter); + this.Controls.Add(this.cbFilter); + this.Controls.Add(this.bAllebertragen); + this.Controls.Add(this.bbertragen); + this.Controls.Add(this.lvQuelle); + this.Controls.Add(this.bffnen); + this.Controls.Add(this.bAktualisieren); + this.Controls.Add(this.tbVerzeichnis); + this.Controls.Add(this.lvVerzeichnis); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Name = "Rename2"; + this.Text = "Rename2"; + ((System.ComponentModel.ISupportInitialize)(this.nudVon)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudBis)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView lvVerzeichnis; + private System.Windows.Forms.ColumnHeader chName; + private System.Windows.Forms.ColumnHeader chGre; + private System.Windows.Forms.TextBox tbVerzeichnis; + private System.Windows.Forms.Button bAktualisieren; + private System.Windows.Forms.Button bffnen; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; + private System.Windows.Forms.ListView lvQuelle; + private System.Windows.Forms.ColumnHeader chQuelleName; + private System.Windows.Forms.Button bbertragen; + private System.Windows.Forms.Button bAllebertragen; + private System.Windows.Forms.CheckBox cbFilter; + private System.Windows.Forms.TextBox tbFilter; + private System.Windows.Forms.Button bAlleEntfernen; + private System.Windows.Forms.Button bEntfernen; + private System.Windows.Forms.Button bNachOben; + private System.Windows.Forms.Button bNachUnten; + private System.Windows.Forms.ListView lvZiel; + private System.Windows.Forms.ColumnHeader chZielName; + private System.Windows.Forms.ColumnHeader chZielUmbenannt; + private System.Windows.Forms.TextBox tbVorne; + private System.Windows.Forms.NumericUpDown nudVon; + private System.Windows.Forms.NumericUpDown nudBis; + private System.Windows.Forms.TextBox tbHinten; + private System.Windows.Forms.Label lVorschau; + private System.Windows.Forms.Button bUmbenennen; + + } +} + diff --git a/Rename2/Rename2/Form1.cs b/Rename2/Rename2/Form1.cs new file mode 100644 index 0000000..e6e48f3 --- /dev/null +++ b/Rename2/Rename2/Form1.cs @@ -0,0 +1,377 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace Rename2 +{ + public partial class Rename2 : Form + { + public Rename2() + { + InitializeComponent(); + } + + private void bffnen_Click(object sender, EventArgs e) + { + if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) + { + tbVerzeichnis.Text = folderBrowserDialog1.SelectedPath; + UpdatelvVerzeichnis(folderBrowserDialog1.SelectedPath); + } + + lvQuelle.Items.Clear(); + } + + void UpdatelvVerzeichnis(string path) + { + DirectoryInfo di = new DirectoryInfo(path); + + if (di.Exists) + { + lvVerzeichnis.Enabled = true; + lvVerzeichnis.Items.Clear(); + FileInfo[] fiArr = di.GetFiles(); + + foreach (FileInfo fi in fiArr) + { + lvVerzeichnis.Items.Add(fi.Name); + lvVerzeichnis.Items[lvVerzeichnis.Items.Count - 1].SubItems.Add(Convert.ToString(fi.Length)); + } + } + else + { + lvVerzeichnis.Items.Clear(); + lvVerzeichnis.Items.Add("Kann Ordner nicht finden"); + lvVerzeichnis.Enabled = false; + } + } + + private void cbFilter_CheckedChanged(object sender, EventArgs e) + { + tbFilter.Enabled = cbFilter.Checked; + } + + private void bbertragen_Click(object sender, EventArgs e) + { + foreach (ListViewItem i in lvVerzeichnis.SelectedItems) + { + lvVerzeichnis.Items.Remove(i); + lvQuelle.Items.Add(i); + } + } + + private void bAllebertragen_Click(object sender, EventArgs e) + { + if (cbFilter.Checked && tbFilter.Text != "") + { + foreach (ListViewItem i in lvVerzeichnis.Items) + { + if (i.Text.IndexOf(tbFilter.Text) != -1) + { + lvVerzeichnis.Items.Remove(i); + lvQuelle.Items.Add(i); + } + } + } + else + { + foreach (ListViewItem i in lvVerzeichnis.Items) + { + lvVerzeichnis.Items.Remove(i); + lvQuelle.Items.Add(i); + } + } + } + + private void bAlleEntfernen_Click(object sender, EventArgs e) + { + if (cbFilter.Checked && tbFilter.Text != "") + { + foreach (ListViewItem i in lvQuelle.Items) + { + if (i.Text.IndexOf(tbFilter.Text) != -1) + { + lvQuelle.Items.Remove(i); + lvVerzeichnis.Items.Add(i); + } + } + } + else + { + foreach (ListViewItem i in lvQuelle.Items) + { + lvQuelle.Items.Remove(i); + lvVerzeichnis.Items.Add(i); + } + } + } + + private void bEntfernen_Click(object sender, EventArgs e) + { + foreach (ListViewItem i in lvQuelle.SelectedItems) + { + lvQuelle.Items.Remove(i); + lvVerzeichnis.Items.Add(i); + } + } + + private void bNachOben_Click(object sender, EventArgs e) + { + //Erstellt ein ListViewItem Array um die selektierten ListViewItems + //aufnehmen zu knnen + ListViewItem[] SelectedItemsArr = new ListViewItem[lvQuelle.SelectedItems.Count]; + //Erstellt ein weiteres ListViewItem Arry fr alle List View Items nach + //der Selektion mit entsprechender Gre (Gesamtzahl aller Items minus + //dem Index des Letztmarkierten Eintrags) + ListViewItem[] AfterItemsArr = new ListViewItem[lvQuelle.Items.Count + - lvQuelle.SelectedItems[lvQuelle.SelectedItems.Count - 1].Index - 1]; + + //Kopiert alle markierten Items in das entsprehende Array + lvQuelle.SelectedItems.CopyTo(SelectedItemsArr, 0); + + //Kopiert alle Items nach der Selektion in das entsprechende Array + foreach (ListViewItem i in lvQuelle.Items) + { + if (i.Index > lvQuelle.SelectedItems[lvQuelle.SelectedItems.Count - 1].Index) + { + //Subtrahiert den Index des ersten unmarkierten Eintrags vom aktuellen Index um die + //richtige Position im Array zu erhalten + AfterItemsArr[i.Index - lvQuelle.SelectedItems[lvQuelle.SelectedItems.Count - 1].Index - 1] = i; + } + } + + //Lscht alle Eintrge nach der Selektion aus dem ListView + foreach (ListViewItem i in lvQuelle.Items) + { + if (i.Index > lvQuelle.SelectedItems[lvQuelle.SelectedItems.Count - 1].Index) + { + i.Remove(); + } + } + + //Lscht alle markierten Eintrge + foreach (ListViewItem i in lvQuelle.Items) + { + if (i.Selected) + { + i.Remove(); + } + } + + //Erstellt ein Temporres Item und kopiert das letzte Item des momentanen ListViews + //rein um das Item dann aus dem ListView zu lschen + ListViewItem TempItem = lvQuelle.Items[lvQuelle.Items.Count - 1]; + lvQuelle.Items[lvQuelle.Items.Count - 1].Remove(); + + //Fgt dem ListView alle Eintrge aus dem Array mit den Selektierten Items hinzu + foreach (ListViewItem i in SelectedItemsArr) + { + lvQuelle.Items.Add(i); + } + + //Hngt das TempItem an + lvQuelle.Items.Add(TempItem); + + //Fgt alle Eintrge des Arrays mit Items nach der anfnglichen Selektion ein + foreach (ListViewItem i in AfterItemsArr) + { + lvQuelle.Items.Add(i); + } + + bNachUnten.Enabled = true; + if (lvQuelle.SelectedItems[0].Index == 0) + { + bNachOben.Enabled = false; + } + else + { + bNachOben.Enabled = true; + } + } + + private void lvQuelle_SelectedIndexChanged(object sender, EventArgs e) + { + if (lvQuelle.SelectedItems.Count == 0) + { + bNachOben.Enabled = false; + bNachUnten.Enabled = false; + } + else + { + if (lvQuelle.SelectedItems[0].Index == 0) + { + bNachOben.Enabled = false; + } + else + { + bNachOben.Enabled = true; + } + + if (lvQuelle.SelectedItems[lvQuelle.SelectedItems.Count - 1].Index == lvQuelle.Items.Count - 1) + { + bNachUnten.Enabled = false; + } + else + { + bNachUnten.Enabled = true; + } + } + } + + private void bNachUnten_Click(object sender, EventArgs e) + { + ListViewItem[] SelectedItemsArr = new ListViewItem[lvQuelle.SelectedItems.Count]; + ListViewItem[] AfterItemsArr = new ListViewItem[lvQuelle.Items.Count + - lvQuelle.SelectedItems[lvQuelle.SelectedItems.Count - 1].Index - 2]; + + lvQuelle.SelectedItems.CopyTo(SelectedItemsArr, 0); + + ListViewItem TempItem = lvQuelle.Items[lvQuelle.SelectedItems[lvQuelle.SelectedItems.Count - 1].Index + 1]; + lvQuelle.Items[lvQuelle.SelectedItems[lvQuelle.SelectedItems.Count - 1].Index + 1].Remove(); + + foreach (ListViewItem i in lvQuelle.Items) + { + if (i.Index > lvQuelle.SelectedItems[lvQuelle.SelectedItems.Count - 1].Index) + { + AfterItemsArr[i.Index - lvQuelle.SelectedItems[lvQuelle.SelectedItems.Count - 1].Index - 1] = i; + } + } + + foreach (ListViewItem i in lvQuelle.Items) + { + if (i.Index > lvQuelle.SelectedItems[lvQuelle.SelectedItems.Count - 1].Index) + { + i.Remove(); + } + } + + foreach (ListViewItem i in lvQuelle.Items) + { + if (i.Selected) + { + i.Remove(); + } + } + + lvQuelle.Items.Add(TempItem); + + foreach (ListViewItem i in SelectedItemsArr) + { + lvQuelle.Items.Add(i); + } + + foreach (ListViewItem i in AfterItemsArr) + { + lvQuelle.Items.Add(i); + } + + bNachOben.Enabled = true; + if (lvQuelle.SelectedItems[lvQuelle.SelectedItems.Count - 1].Index == lvQuelle.Items.Count - 1) + { + bNachUnten.Enabled = false; + } + else + { + bNachUnten.Enabled = true; + } + } + + private void bAktualisieren_Click(object sender, EventArgs e) + { + if (tbVerzeichnis.Text != "") + { + UpdatelvVerzeichnis(tbVerzeichnis.Text); + lvQuelle.Items.Clear(); + } + } + + private void nudVon_ValueChanged(object sender, EventArgs e) + { + nudBis.Value = lvQuelle.Items.Count + nudVon.Value - 1; + if (nudVon.Value.ToString().Length == 1) + { + lVorschau.Text = tbVorne.Text + "0" + nudVon.Value.ToString() + tbHinten.Text; + } + else + { + lVorschau.Text = tbVorne.Text + nudVon.Value.ToString() + tbHinten.Text; + } + } + + private void bTesten_Click(object sender, EventArgs e) + { + lvZiel.Items.Clear(); + + foreach(ListViewItem i in lvQuelle.Items) + { + ListViewItem Temp = (ListViewItem)i.Clone(); + lvZiel.Items.Add(Temp); + } + + for (int i = 0; i < lvZiel.Items.Count; i++) + { + string temp = (nudVon.Value + i).ToString(); + if (temp.Length == 1) + { + lvZiel.Items[i].SubItems[1].Text = lvZiel.Items[i].SubItems[0].Text; + lvZiel.Items[i].SubItems[0].Text = tbVorne.Text + "0" + temp + tbHinten.Text; + } + else + { + lvZiel.Items[i].SubItems[1].Text = lvZiel.Items[i].SubItems[0].Text; + lvZiel.Items[i].SubItems[0].Text = tbVorne.Text + temp + tbHinten.Text; + } + } + } + + private void bUmbenennen_Click(object sender, EventArgs e) + { + foreach (ListViewItem i in lvZiel.Items) + { + FileInfo fi = new FileInfo(tbVerzeichnis.Text + "\\" + i.SubItems[1].Text); + DirectoryInfo di = new DirectoryInfo(tbVerzeichnis.Text); + if (di.GetFiles(i.SubItems[0].Text).Length == 0) + { + fi.MoveTo(tbVerzeichnis.Text + "\\"+ i.SubItems[0].Text); + } + else + { + MessageBox.Show("hiho"); + } + } + + lvQuelle.Items.Clear(); + lvZiel.Items.Clear(); + UpdatelvVerzeichnis(tbVerzeichnis.Text); + } + + private void tbVorne_TextChanged(object sender, EventArgs e) + { + if (nudVon.Value.ToString().Length == 1) + { + lVorschau.Text = tbVorne.Text + "0" + nudVon.Value.ToString() + tbHinten.Text; + } + else + { + lVorschau.Text = tbVorne.Text + nudVon.Value.ToString() + tbHinten.Text; + } + } + + private void tbHinten_TextChanged(object sender, EventArgs e) + { + if (nudVon.Value.ToString().Length == 1) + { + lVorschau.Text = tbVorne.Text + "0" + nudVon.Value.ToString() + tbHinten.Text; + } + else + { + lVorschau.Text = tbVorne.Text + nudVon.Value.ToString() + tbHinten.Text; + } + } + } +} \ No newline at end of file diff --git a/Rename2/Rename2/Form1.resx b/Rename2/Rename2/Form1.resx new file mode 100644 index 0000000..93f0173 --- /dev/null +++ b/Rename2/Rename2/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + 17, 17 + + \ No newline at end of file diff --git a/Rename2/Rename2/Program.cs b/Rename2/Rename2/Program.cs new file mode 100644 index 0000000..8c7d65d --- /dev/null +++ b/Rename2/Rename2/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Rename2 +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Rename2()); + } + } +} \ No newline at end of file diff --git a/Rename2/Rename2/Properties/AssemblyInfo.cs b/Rename2/Rename2/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4a7babf --- /dev/null +++ b/Rename2/Rename2/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Rename2")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Rename2")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("1cf5a018-fac2-40c1-9558-dc204b1ac8a0")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Rename2/Rename2/Properties/Resources.Designer.cs b/Rename2/Rename2/Properties/Resources.Designer.cs new file mode 100644 index 0000000..b02e3a8 --- /dev/null +++ b/Rename2/Rename2/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Rename2.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Rename2.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Rename2.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace Rename2.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Rename2.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Rename2/Rename2/Properties/Resources.resx b/Rename2/Rename2/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/Rename2/Rename2/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Rename2/Rename2/Properties/Settings.Designer.cs b/Rename2/Rename2/Properties/Settings.Designer.cs new file mode 100644 index 0000000..c016b66 --- /dev/null +++ b/Rename2/Rename2/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Rename2.Properties.Settings.get_Default():Rename2.Properties.Settings")] + +namespace Rename2.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Rename2/Rename2/Properties/Settings.settings b/Rename2/Rename2/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/Rename2/Rename2/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Rename2/Rename2/Rename2.csproj b/Rename2/Rename2/Rename2.csproj new file mode 100644 index 0000000..8efc980 --- /dev/null +++ b/Rename2/Rename2/Rename2.csproj @@ -0,0 +1,100 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {6225CB6C-8CC1-44CB-B674-C4EA4969C295} + WinExe + Properties + Rename2 + Rename2 + false + true + true + 32E7F313BA8DD6C5C47AA0FE25983EE6009322D9 + Rename2_TemporaryKey.pfx + E:\Quelltexte\Rename2\ + true + Disk + false + Foreground + 7 + Days + false + false + true + Rename 2 + Johannes Schauer + false + true + true + 1.0.0.* + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + True + Settings.settings + True + + + + + False + .NET Framework 2.0 Beta + true + + + + \ No newline at end of file diff --git a/Rename2/Rename2/Rename2.csproj.user b/Rename2/Rename2/Rename2.csproj.user new file mode 100644 index 0000000..bedc618 --- /dev/null +++ b/Rename2/Rename2/Rename2.csproj.user @@ -0,0 +1,17 @@ + + + 8.0.50215 + E:\Quelltexte\Rename2\|E:\Quelltexte\|http://localhost/Rename2/ + + + + + + + + + 5 + en-US + true + + \ No newline at end of file diff --git a/Rename2/Rename2/Rename2.sln b/Rename2/Rename2/Rename2.sln new file mode 100644 index 0000000..ab1f486 --- /dev/null +++ b/Rename2/Rename2/Rename2.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rename2", "Rename2.csproj", "{6225CB6C-8CC1-44CB-B674-C4EA4969C295}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6225CB6C-8CC1-44CB-B674-C4EA4969C295}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6225CB6C-8CC1-44CB-B674-C4EA4969C295}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6225CB6C-8CC1-44CB-B674-C4EA4969C295}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6225CB6C-8CC1-44CB-B674-C4EA4969C295}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Rename2/Rename2/Rename2.suo b/Rename2/Rename2/Rename2.suo new file mode 100644 index 0000000..5beb12f Binary files /dev/null and b/Rename2/Rename2/Rename2.suo differ diff --git a/Rename2/Rename2/Rename2_TemporaryKey.pfx b/Rename2/Rename2/Rename2_TemporaryKey.pfx new file mode 100644 index 0000000..58084e7 Binary files /dev/null and b/Rename2/Rename2/Rename2_TemporaryKey.pfx differ diff --git a/Rename2/Rename2/publish/Rename2.application b/Rename2/Rename2/publish/Rename2.application new file mode 100644 index 0000000..f7dbf57 --- /dev/null +++ b/Rename2/Rename2/publish/Rename2.application @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + MI8S9KJMWqjkcrdLoYoCGTjLRM8= + + + +Xz6pgIOFiufdw6tS/pStMswioqU=+S1PQhcNX8g4YBCkZXR9I95XUIw=Rd72rjZjzez9Fuu9oj8WMRl1X5IXv4xpxA70pDNh2YCCDNabB7FwpzlXqpKa0VWcnNi92YuUDJzQD7znwBuefhKXT+lWhmXuM5YCItnFmyXoxIo9kA6/f7K8L4nuaKNw4j8zvT3eHgx1MR/R4Qp9f/KK3KX1aYKHCaGiPjqsmBM=21q2E8IJ8jCDsuJTijsymATlZKQOHFBdalQFTILxVJebQSBSvP3be1rD++SG1rU1Wyf3NFUf6PCBUixU3wML4vQLe+I7w+VLoIITvdVW55BHxOt9YbdOSpJ7hCD7MuXTnbBldQ7NIRVBYL26fsqmdWp3Ikmw/dgVdjNci9N3FYE=AQABCN=JOSCH\Johannesh1V1Zs4BSjlaNqIFiKmIu/4jP7Q=Fz5FYYQz6phh8SojYPUXnlsDS3PHvZ+ZT/yMYQstSX1wR524vRkDnUhStaFIu8DXVd56mwmO0q5FKgEttIO7PUV3h2/k9yOrC2b1ztMt2Yvto4YwbwdCwxgEPycpvVuGUWxBpXwmrDSn1p0O6jUZCS/lvOrkrbc8SjjsA3ycTN4=21q2E8IJ8jCDsuJTijsymATlZKQOHFBdalQFTILxVJebQSBSvP3be1rD++SG1rU1Wyf3NFUf6PCBUixU3wML4vQLe+I7w+VLoIITvdVW55BHxOt9YbdOSpJ7hCD7MuXTnbBldQ7NIRVBYL26fsqmdWp3Ikmw/dgVdjNci9N3FYE=AQABMIIByTCCATagAwIBAgIQ544CKV+4/LRFTwYB46EcgTAJBgUrDgMCHQUAMCcxJTAjBgNVBAMeHABKAE8AUwBDAEgAXABKAG8AaABhAG4AbgBlAHMwHhcNMDUwNjI4MTgyOTM1WhcNMDYwNjI5MDAyOTM1WjAnMSUwIwYDVQQDHhwASgBPAFMAQwBIAFwASgBvAGgAYQBuAG4AZQBzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbWrYTwgnyMIOy4lOKOzKYBOVkpA4cUF1qVAVMgvFUl5tBIFK8/dt7WsP75IbWtTVbJ/c0VR/o8IFSLFTfAwvi9At74jvD5UugghO91VbnkEfE631ht05KknuEIPsy5dOdsGV1Ds0hFUFgvbp+yqZ1anciSbD92BV2M1yL03cVgQIDAQABMAkGBSsOAwIdBQADgYEARAx+SZOVqlmUHctxLYDYPn3zD+8IoSMIvNrK2cBkZKtPDaDXl0Muz46IN1C4jXd7krIC639zulO4My/CstG6RQEaUF30sejmaBD2zyqNc+saSWVd9pEFal3SfxH8WloBiFYObzqDYVx8KCDlTBxhL/tvNjVBh/Vv/WRyQ7UlgpU= \ No newline at end of file diff --git a/Rename2/Rename2/publish/Rename2_1_0_0_4/Rename2.exe.deploy b/Rename2/Rename2/publish/Rename2_1_0_0_4/Rename2.exe.deploy new file mode 100644 index 0000000..540b9bf Binary files /dev/null and b/Rename2/Rename2/publish/Rename2_1_0_0_4/Rename2.exe.deploy differ diff --git a/Rename2/Rename2/publish/Rename2_1_0_0_4/Rename2.exe.manifest b/Rename2/Rename2/publish/Rename2_1_0_0_4/Rename2.exe.manifest new file mode 100644 index 0000000..0695852 --- /dev/null +++ b/Rename2/Rename2/publish/Rename2_1_0_0_4/Rename2.exe.manifest @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + p+w12yeqQdNjboKLnoLLFYuVSy0= + + + +OGHSpvVP+g2Ti1vOHVHgm/0rtr4=e/TpqSs1hcXUQBijgbr4NMT94XE=NlmkYfUM+j61ep30dKrdlMsP4dXWLzzZoJXGKtF6VSVjUY2fiTDGMZJ1fVIPo2jnUut6TaJKOliZ0c+jUsKMVC7aTymJvXw08m8pPXV6whOKj2Ra2aIcUD59vdHcVOdmXr5Qp1fDY/lc6nV52fpcm2zhL1lz5xlWdpW3SJdKVlU=21q2E8IJ8jCDsuJTijsymATlZKQOHFBdalQFTILxVJebQSBSvP3be1rD++SG1rU1Wyf3NFUf6PCBUixU3wML4vQLe+I7w+VLoIITvdVW55BHxOt9YbdOSpJ7hCD7MuXTnbBldQ7NIRVBYL26fsqmdWp3Ikmw/dgVdjNci9N3FYE=AQABCN=JOSCH\JohannesrCXEy8TCdEA9ZO34/86ocQofjlo=i7wLF8aGMNdvgGU9fXyy2A8xcIr+T/Eo9P7m4Wejc6baeiCihguf8eaYkUgjZ+j3e/4lNqan62HH9LufEq/TAGyyaEr6KPIaA45KrPPWGvfXqRvj4nHJHZqYlicLmC6hukJYVe382KKhwAHnc0vYa5dVrn5HnGbRN9Uz1MvPde0=21q2E8IJ8jCDsuJTijsymATlZKQOHFBdalQFTILxVJebQSBSvP3be1rD++SG1rU1Wyf3NFUf6PCBUixU3wML4vQLe+I7w+VLoIITvdVW55BHxOt9YbdOSpJ7hCD7MuXTnbBldQ7NIRVBYL26fsqmdWp3Ikmw/dgVdjNci9N3FYE=AQABMIIByTCCATagAwIBAgIQ544CKV+4/LRFTwYB46EcgTAJBgUrDgMCHQUAMCcxJTAjBgNVBAMeHABKAE8AUwBDAEgAXABKAG8AaABhAG4AbgBlAHMwHhcNMDUwNjI4MTgyOTM1WhcNMDYwNjI5MDAyOTM1WjAnMSUwIwYDVQQDHhwASgBPAFMAQwBIAFwASgBvAGgAYQBuAG4AZQBzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbWrYTwgnyMIOy4lOKOzKYBOVkpA4cUF1qVAVMgvFUl5tBIFK8/dt7WsP75IbWtTVbJ/c0VR/o8IFSLFTfAwvi9At74jvD5UugghO91VbnkEfE631ht05KknuEIPsy5dOdsGV1Ds0hFUFgvbp+yqZ1anciSbD92BV2M1yL03cVgQIDAQABMAkGBSsOAwIdBQADgYEARAx+SZOVqlmUHctxLYDYPn3zD+8IoSMIvNrK2cBkZKtPDaDXl0Muz46IN1C4jXd7krIC639zulO4My/CstG6RQEaUF30sejmaBD2zyqNc+saSWVd9pEFal3SfxH8WloBiFYObzqDYVx8KCDlTBxhL/tvNjVBh/Vv/WRyQ7UlgpU= \ No newline at end of file diff --git a/Rename2/Rename2/publish/autorun.inf b/Rename2/Rename2/publish/autorun.inf new file mode 100644 index 0000000..d559ae9 --- /dev/null +++ b/Rename2/Rename2/publish/autorun.inf @@ -0,0 +1,3 @@ +[autorun] +open = setup.exe +icon = setup.exe,0 diff --git a/Rename2/Rename2/publish/setup.exe b/Rename2/Rename2/publish/setup.exe new file mode 100644 index 0000000..31f886b Binary files /dev/null and b/Rename2/Rename2/publish/setup.exe differ diff --git a/Replace/AssemblyInfo.cs b/Replace/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/Replace/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/Replace/Main.cs b/Replace/Main.cs new file mode 100644 index 0000000..8b5b61c --- /dev/null +++ b/Replace/Main.cs @@ -0,0 +1,63 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 14.03.2005 + * Time: 22:53 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.IO; +using System.Text; + +namespace Replace +{ + class MainClass + { + public static void Main(string[] args) + { + Console.WriteLine("Beginne ProcessDirectory()"); + ProcessDirectory(Directory.GetCurrentDirectory()); + } + + public static void ProcessDirectory(string path) + { + Console.WriteLine("Bearbeite {0}", path); + string[] fileEntries = Directory.GetFileSystemEntries(path, "*.html"); + foreach(string fileName in fileEntries) + { + ProcessFile(fileName); + } + + string[] subdirectoryEntries = Directory.GetDirectories(path); + foreach(string subdirectory in subdirectoryEntries) + { + ProcessDirectory(subdirectory); + } + } + + public static void ProcessFile(string filename) + { + Console.WriteLine("Bearbeite {0}", filename); + string line = String.Empty; + try + { + StreamReader sr = new StreamReader(filename); + line = sr.ReadToEnd(); + sr.Close(); + + StringBuilder sb = new StringBuilder(line); + sb.Replace("http://www.d2wissen.de/items", ".."); + + StreamWriter sw = new StreamWriter(filename); + sw.Write(sb.ToString()); + sw.Close(); + } + catch (Exception e) + { + Console.WriteLine("{0} could not be read.",filename); + Console.WriteLine(e.Message); + } + } + } +} diff --git a/Replace/MainForm.cs b/Replace/MainForm.cs new file mode 100644 index 0000000..b65a898 --- /dev/null +++ b/Replace/MainForm.cs @@ -0,0 +1,56 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 15.03.2005 + * Time: 16:56 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace Replace +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + public MainForm() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + // + // Form1 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(292, 266); + this.Text = "MainForm"; + this.Name = "MainForm"; + } + #endregion + } +} \ No newline at end of file diff --git a/Replace/Replace.cmbx b/Replace/Replace.cmbx new file mode 100644 index 0000000..0821179 --- /dev/null +++ b/Replace/Replace.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Replace/Replace.prjx b/Replace/Replace.prjx new file mode 100644 index 0000000..2145eb1 --- /dev/null +++ b/Replace/Replace.prjx @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RollYourDices/RollYourDices.sln b/RollYourDices/RollYourDices.sln new file mode 100644 index 0000000..d7f8ecb --- /dev/null +++ b/RollYourDices/RollYourDices.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RollYourDices", "RollYourDices\RollYourDices.csproj", "{3C060A8C-FA8A-4E02-AE7C-56B2440E0372}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3C060A8C-FA8A-4E02-AE7C-56B2440E0372}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3C060A8C-FA8A-4E02-AE7C-56B2440E0372}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3C060A8C-FA8A-4E02-AE7C-56B2440E0372}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3C060A8C-FA8A-4E02-AE7C-56B2440E0372}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/RollYourDices/RollYourDices.suo b/RollYourDices/RollYourDices.suo new file mode 100644 index 0000000..95feabd Binary files /dev/null and b/RollYourDices/RollYourDices.suo differ diff --git a/RollYourDices/RollYourDices/Form1.Designer.cs b/RollYourDices/RollYourDices/Form1.Designer.cs new file mode 100644 index 0000000..3298d6d --- /dev/null +++ b/RollYourDices/RollYourDices/Form1.Designer.cs @@ -0,0 +1,157 @@ +namespace RollYourDices +{ + partial class Form1 + { + /// + /// 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() + { + this.cbDice = new System.Windows.Forms.ComboBox(); + this.nUDDiceCount = new System.Windows.Forms.NumericUpDown(); + this.bRoll = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.flpRolls = new System.Windows.Forms.FlowLayoutPanel(); + this.label1 = new System.Windows.Forms.Label(); + this.bStop = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.nUDDiceCount)).BeginInit(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // cbDice + // + this.cbDice.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbDice.FormattingEnabled = true; + this.cbDice.Items.AddRange(new object[] { + "4", + "6", + "8", + "10", + "12", + "20", + "30", + "100"}); + this.cbDice.Location = new System.Drawing.Point(26, 3); + this.cbDice.Name = "cbDice"; + this.cbDice.Size = new System.Drawing.Size(51, 21); + this.cbDice.TabIndex = 0; + // + // nUDDiceCount + // + this.nUDDiceCount.Location = new System.Drawing.Point(83, 4); + this.nUDDiceCount.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nUDDiceCount.Name = "nUDDiceCount"; + this.nUDDiceCount.Size = new System.Drawing.Size(47, 20); + this.nUDDiceCount.TabIndex = 1; + this.nUDDiceCount.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.nUDDiceCount.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // bRoll + // + this.bRoll.Location = new System.Drawing.Point(136, 1); + this.bRoll.Name = "bRoll"; + this.bRoll.Size = new System.Drawing.Size(62, 22); + this.bRoll.TabIndex = 2; + this.bRoll.Text = "Roll!"; + this.bRoll.UseVisualStyleBackColor = true; + this.bRoll.Click += new System.EventHandler(this.bRoll_Click); + // + // panel1 + // + this.panel1.AutoScroll = true; + this.panel1.Controls.Add(this.bStop); + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.cbDice); + this.panel1.Controls.Add(this.bRoll); + this.panel1.Controls.Add(this.nUDDiceCount); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(378, 43); + this.panel1.TabIndex = 3; + // + // flpRolls + // + this.flpRolls.AutoScroll = true; + this.flpRolls.Dock = System.Windows.Forms.DockStyle.Fill; + this.flpRolls.Location = new System.Drawing.Point(0, 43); + this.flpRolls.Name = "flpRolls"; + this.flpRolls.Size = new System.Drawing.Size(378, 171); + this.flpRolls.TabIndex = 4; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(3, 4); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(17, 20); + this.label1.TabIndex = 3; + this.label1.Text = "d"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // bStop + // + this.bStop.Location = new System.Drawing.Point(204, 1); + this.bStop.Name = "bStop"; + this.bStop.Size = new System.Drawing.Size(48, 22); + this.bStop.TabIndex = 4; + this.bStop.Text = "Stop"; + this.bStop.UseVisualStyleBackColor = true; + this.bStop.Click += new System.EventHandler(this.bStop_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(378, 214); + this.Controls.Add(this.flpRolls); + this.Controls.Add(this.panel1); + this.Name = "Form1"; + this.Text = "Form1"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); + ((System.ComponentModel.ISupportInitialize)(this.nUDDiceCount)).EndInit(); + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ComboBox cbDice; + private System.Windows.Forms.NumericUpDown nUDDiceCount; + private System.Windows.Forms.Button bRoll; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.FlowLayoutPanel flpRolls; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button bStop; + } +} + diff --git a/RollYourDices/RollYourDices/Form1.cs b/RollYourDices/RollYourDices/Form1.cs new file mode 100644 index 0000000..fe501c9 --- /dev/null +++ b/RollYourDices/RollYourDices/Form1.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +namespace RollYourDices +{ + public partial class Form1 : Form + { + Thread t; + private delegate void AddLabelHandler(string text); + private delegate void ClearPanelHandler(); + + int DiceCount; + int Dice; + + public Form1() + { + InitializeComponent(); + t = new Thread(new ThreadStart(Roll)); + } + + private void bRoll_Click(object sender, EventArgs e) + { + DiceCount = (int)nUDDiceCount.Value; + Dice = int.Parse(cbDice.SelectedItem.ToString()); + t.Start(); + } + + private void Roll() + { + Invoke(new ClearPanelHandler(ClearPanel)); + for (int i = 0; i < DiceCount; i++) + { + Random ran = new Random(); + Invoke(new AddLabelHandler(AddLabel), new object[] { (Math.Ceiling(ran.NextDouble() * Dice)).ToString() }); + + Thread.Sleep((int)(Math.Ceiling(ran.NextDouble() * 100))); + } + } + + private void ClearPanel() + { + flpRolls.Controls.Clear(); + } + + private void AddLabel(string text) + { + Label l = new Label(); + l.Text = text; + l.AutoSize = false; + l.Size = new Size(64, 64); + l.TextAlign = ContentAlignment.MiddleCenter; + l.Font = new Font(new FontFamily("Microsoft Sans Serif"), 20, FontStyle.Bold); + l.Margin = new Padding(0); + flpRolls.Controls.Add(l); + } + + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + t.Abort(); + } + + private void bStop_Click(object sender, EventArgs e) + { + t.Abort(); + } + } +} \ No newline at end of file diff --git a/RollYourDices/RollYourDices/Form1.resx b/RollYourDices/RollYourDices/Form1.resx new file mode 100644 index 0000000..ff31a6d --- /dev/null +++ b/RollYourDices/RollYourDices/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/RollYourDices/RollYourDices/Program.cs b/RollYourDices/RollYourDices/Program.cs new file mode 100644 index 0000000..53dd11b --- /dev/null +++ b/RollYourDices/RollYourDices/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace RollYourDices +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/RollYourDices/RollYourDices/Properties/AssemblyInfo.cs b/RollYourDices/RollYourDices/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1833c80 --- /dev/null +++ b/RollYourDices/RollYourDices/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RollYourDices")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("RollYourDices")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a8d28ded-6951-479a-9d12-a3109bfb22b1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/RollYourDices/RollYourDices/Properties/Resources.Designer.cs b/RollYourDices/RollYourDices/Properties/Resources.Designer.cs new file mode 100644 index 0000000..f6b0db4 --- /dev/null +++ b/RollYourDices/RollYourDices/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace RollYourDices.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("RollYourDices.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/RollYourDices/RollYourDices/Properties/Resources.resx b/RollYourDices/RollYourDices/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/RollYourDices/RollYourDices/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/RollYourDices/RollYourDices/Properties/Settings.Designer.cs b/RollYourDices/RollYourDices/Properties/Settings.Designer.cs new file mode 100644 index 0000000..8fe136d --- /dev/null +++ b/RollYourDices/RollYourDices/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace RollYourDices.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/RollYourDices/RollYourDices/Properties/Settings.settings b/RollYourDices/RollYourDices/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/RollYourDices/RollYourDices/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/RollYourDices/RollYourDices/RollYourDices.csproj b/RollYourDices/RollYourDices/RollYourDices.csproj new file mode 100644 index 0000000..c4e396b --- /dev/null +++ b/RollYourDices/RollYourDices/RollYourDices.csproj @@ -0,0 +1,78 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {3C060A8C-FA8A-4E02-AE7C-56B2440E0372} + WinExe + Properties + RollYourDices + RollYourDices + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Scraping/AssemblyInfo.cs b/Scraping/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/Scraping/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/Scraping/COM/doc/PDFParser.idl b/Scraping/COM/doc/PDFParser.idl new file mode 100644 index 0000000..b550908 --- /dev/null +++ b/Scraping/COM/doc/PDFParser.idl @@ -0,0 +1,419 @@ + +import "oaidl.idl"; +import "ocidl.idl"; +import "pdferror.h"; +import "pdfcodecdecl.h"; +import "pdfcommondecl.h"; +import "pdfcontentdecl.h"; + +[ + uuid(4CFD0B17-7BAD-44E5-9003-3AAB04AFB85B), + version(1.0), + helpstring("3-Heights(TM) PDF Export API 1.40") +] +library PDFPARSERLib +{ + importlib("stdole32.tlb"); + importlib("stdole2.tlb"); + + [ + object, + uuid(BD23962F-DCCC-4324-9766-DD844AC272EB), + dual, + helpstring("IPDFColorSpace Interface"), + pointer_default(unique) + ] + interface IPDFColorSpace : IDispatch + { + [propget, id(1), helpstring("Get the number of components per pixel")] HRESULT ComponentsPerPixel([out, retval] short *pVal); + [propget, id(2), helpstring("Get the color space of an indexed color space")] HRESULT BaseColorSpace([out, retval] IPDFColorSpace* *pVal); + [propget, id(3), helpstring("Get the information if the color space is indexed.")] HRESULT IsIndexed([out, retval] VARIANT_BOOL *pVal); + [propget, id(4), helpstring("Get the highest index value")] HRESULT High([out, retval] short *pVal); + [propget, id(5), helpstring("Get the lookup table")] HRESULT Lookup([out, retval] VARIANT *pVal); + [propget, id(6), helpstring("Get the name of the color space")] HRESULT Name([out, retval] BSTR *pVal); + [propget, id(7), helpstring("Get the information if the color space is monochrome")] HRESULT IsMonochrome([out, retval] VARIANT_BOOL *pVal); + [propget, id(8), helpstring("Get the information if the color space is color")] HRESULT IsColor([out, retval] VARIANT_BOOL *pVal); + [propget, id(9), helpstring("Get colorant name")] HRESULT Colorant([out, retval] VARIANT *pVal); + }; + [ + object, + uuid(CC7AEA7A-40DD-4BB2-A9A7-6C34B85AF9EB), + dual, + helpstring("IPDFTransformMatrix Interface"), + pointer_default(unique) + ] + interface IPDFTransformMatrix : IDispatch + { + [propget, id(1), helpstring("Get a")] HRESULT a([out, retval] float *pVal); + [propget, id(2), helpstring("Get b")] HRESULT b([out, retval] float *pVal); + [propget, id(3), helpstring("Get c")] HRESULT c([out, retval] float *pVal); + [propget, id(4), helpstring("Get d")] HRESULT d([out, retval] float *pVal); + [propget, id(5), helpstring("Get e")] HRESULT e([out, retval] float *pVal); + [propget, id(6), helpstring("Get f")] HRESULT f([out, retval] float *pVal); + [propget, id(7), helpstring("Get Skew angle of X axis")] HRESULT XSkew([out, retval] float *pVal); + [propget, id(8), helpstring("Get Skew angle of Y axis")] HRESULT YSkew([out, retval] float *pVal); + [propget, id(9), helpstring("Get Translation along X axis")] HRESULT XTranslation([out, retval] float *pVal); + [propget, id(10), helpstring("Get Translation along Y axis")] HRESULT YTranslation([out, retval] float *pVal); + [propget, id(11), helpstring("Get Scaling of X axis")] HRESULT XScaling([out, retval] float *pVal); + [propget, id(12), helpstring("Get Scaling of Y axis")] HRESULT YScaling([out, retval] float *pVal); + [propget, id(13), helpstring("Get Rotation")] HRESULT Rotation([out, retval] float *pVal); + [propget, id(14), helpstring("Get Image orientation")] HRESULT Orientation([out, retval] TPDFOrientation *pVal); + }; + [ + object, + uuid(A7A57D1D-1041-401F-B836-BA1A0F1E54D7), + dual, + helpstring("IPDFFont Interface"), + pointer_default(unique) + ] + interface IPDFFont : IDispatch + { + [propget, id(1), helpstring("Get font type")] HRESULT Type([out, retval] BSTR *pVal); + [propget, id(2), helpstring("Get font name")] HRESULT BaseName([out, retval] BSTR *pVal); + [propget, id(5), helpstring("Get character widths")] HRESULT Widths([out, retval] VARIANT *pVal); + [propget, id(6), helpstring("Get the glyph name of each character")] HRESULT Encoding([out, retval] VARIANT *pVal); + [propget, id(7), helpstring("Get font flags")] HRESULT Flags([out, retval] long *pVal); + [propget, id(8), helpstring("Get font bounding box")] HRESULT FontBBox([out, retval] VARIANT *pVal); + [propget, id(9), helpstring("Get the counterclockwise angle of the dominant vertical strokes of the font.")] HRESULT ItalicAngle([out, retval] float *pVal); + [propget, id(10), helpstring("Get the Ascent value")] HRESULT Ascent([out, retval] float *pVal); + [propget, id(11), helpstring("Get the Descent value")] HRESULT Descent([out, retval] float *pVal); + [propget, id(12), helpstring("Get the desired spacing between baselines of consecutive lines of text.")] HRESULT Leading([out, retval] float *pVal); + [propget, id(13), helpstring("Get the height of the top of flat capital letters.")] HRESULT CapHeight([out, retval] float *pVal); + [propget, id(14), helpstring("Get the maximum height of flat non-ascending lowercase letters")] HRESULT XHeight([out, retval] float *pVal); + [propget, id(15), helpstring("Get the horizontal thickness of the dominant vertical stems of the glyphs in the font.")] HRESULT StemV([out, retval] float *pVal); + [propget, id(16), helpstring("Get the vertical thickness of the dominant horizontal stems of the glyphs in the font.")] HRESULT StemH([out, retval] float *pVal); + [propget, id(17), helpstring("Get the average with of the glyphs in the font.")] HRESULT AvgWidth([out, retval] float *pVal); + [propget, id(18), helpstring("Get the maximum with of the glyphs in the font.")] HRESULT MaxWidth([out, retval] float *pVal); + [propget, id(19), helpstring("Get the value for the missing width.")] HRESULT MissingWidth([out, retval] float *pVal); + [propget, id(20), helpstring("Get a stream that contains a Type1 font program.")] HRESULT FontFile([out, retval] VARIANT *pVal); + [propget, id(21), helpstring("Get the list of character names defined in a font subset.")] HRESULT Charset([out, retval] BSTR *pVal); + [propget, id(22), helpstring("Get the type of the font.")] HRESULT FontFileType([out, retval] short *pVal); + }; + [ + object, + uuid(91E60779-E8CF-4810-8233-9DBB12682DD6), + dual, + helpstring("IPDFGraphicsState Interface"), + pointer_default(unique) + ] + interface IPDFGraphicsState : IDispatch + { + [propget, id(1), helpstring("Get current Transform Matrix (CTM)")] HRESULT CTM([out, retval] IPDFTransformMatrix* *pVal); + [propget, id(2), helpstring("Get color space for stroke operations")] HRESULT StrokeColorSpace([out, retval] IPDFColorSpace* *pVal); + [propget, id(3), helpstring("Get color space for fill operations")] HRESULT FillColorSpace([out, retval] IPDFColorSpace* *pVal); + [propget, id(4), helpstring("Get color for stroke operations as RGB triple")] HRESULT StrokeColorRGB([out, retval] long *pVal); + [propget, id(5), helpstring("Get color for fill operations as RGB triple")] HRESULT FillColorRGB([out, retval] long *pVal); + [propget, id(6), helpstring("Get color for stroke operations as CMYK quad")] HRESULT StrokeColorCMYK([out, retval] long *pVal); + [propget, id(7), helpstring("Get color for fill operations as CMYK quad")] HRESULT FillColorCMYK([out, retval] long *pVal); + [propget, id(8), helpstring("Get space between characters")] HRESULT CharSpacing([out, retval] float *pVal); + [propget, id(9), helpstring("Get space between words")] HRESULT WordSpacing([out, retval] float *pVal); + [propget, id(10), helpstring("Get current horizontal scaling factor")] HRESULT HorizontalScaling([out, retval] float *pVal); + [propget, id(11), helpstring("Get current leading (line spacing) of a text string.")] HRESULT Leading([out, retval] float *pVal); + [propget, id(12), helpstring("Get text font")] HRESULT Font([out, retval] IPDFFont* *pVal); + [propget, id(13), helpstring("Get text font size")] HRESULT FontSize([out, retval] float *pVal); + [propget, id(14), helpstring("Get text rendering mode")] HRESULT TextRenderingMode([out, retval] short *pVal); + [propget, id(15), helpstring("Get the information on by which amount the base line of the text is moved up or down.")] HRESULT TextRise([out, retval] float *pVal); + [propget, id(16), helpstring("Get the text knockout flag.")] HRESULT TextKnockout([out, retval] VARIANT_BOOL *pVal); + [propget, id(17), helpstring("Get line width.")] HRESULT LineWidth([out, retval] float *pVal); + [propget, id(18), helpstring("Get line cap style.")] HRESULT LineCap([out, retval] short *pVal); + [propget, id(19), helpstring("Get line join styles.")] HRESULT LineJoin([out, retval] short *pVal); + [propget, id(20), helpstring("Get the miter limit.")] HRESULT MiterLimit([out, retval] float *pVal); + [propget, id(21), helpstring("Get dash phase of a line dash pattern.")] HRESULT DashPhase([out, retval] float *pVal); + [propget, id(22), helpstring("Get dash array elements.")] HRESULT DashArray([out, retval] VARIANT *pVal); + }; + [ + object, + uuid(6679C1EC-128E-4EE2-9963-7D4F7047DCA3), + dual, + helpstring("IPDFText Interface"), + pointer_default(unique) + ] + interface IPDFText : IDispatch + { + [propget, id(2), helpstring("Get text string (UTF-16)")] HRESULT UnicodeString([out, retval] BSTR *pVal); + [propget, id(6), helpstring("Get smallest rectangle that encloses the text")] HRESULT BoundingBox([out, retval] VARIANT *pVal); + [propget, id(7), helpstring("Get font size")] HRESULT FontSize([out, retval] float *pVal); + [propget, id(8), helpstring("Get width of the text")] HRESULT Width([out, retval] float *pVal); + [propget, id(9), helpstring("Get rotation (rad) of the text")] HRESULT Rotation([out, retval] float *pVal); + [propget, id(10), helpstring("Get number of characters in string")] HRESULT Length([out, retval] short *pVal); + [propget, id(11), helpstring("Get horizontal position of the string's characters")] HRESULT XPos([out, retval] VARIANT *pVal); + [propget, id(12), helpstring("Get vertical position of the string's characters")] HRESULT YPos([out, retval] VARIANT *pVal); + [propget, id(3), hidden] HRESULT NextXPos([out, retval] VARIANT *pVal); + [propget, id(4), hidden] HRESULT TextMatrix([out, retval] IPDFTransformMatrix* *pVal); + [propget, id(5), hidden] HRESULT NextYPos([out, retval] VARIANT *pVal); + }; + [ + object, + uuid(4BCEA86A-E1CD-41EF-B317-C652E39AA204), + dual, + helpstring("IPDFImage Interface"), + pointer_default(unique) + ] + interface IPDFImage : IDispatch + { + [propget, id(1), helpstring("Get the width of the image in pixels.")] HRESULT Width([out, retval] long *pVal); + [propget, id(2), helpstring("Get the height of the image in pixels.")] HRESULT Height([out, retval] long *pVal); + [propget, id(3), helpstring("Get color space information for the image.")] HRESULT ColorSpace([out, retval] IPDFColorSpace* *pVal); + [propget, id(4), helpstring("Get the number of bits that are used to represent a single color component.")] HRESULT BitsPerComponent([out, retval] short *pVal); + [propget, id(5), helpstring("Get the images data samples")] HRESULT Samples([out, retval] VARIANT *pVal); + [propget, id(6), helpstring("Get the transparency mask")] HRESULT Mask([out, retval] VARIANT *pVal); + [id(7), helpstring("Store the image in a file")] HRESULT Store(BSTR bstrPath, [optional] TPDFCompression iCompression, [out, retval] VARIANT_BOOL* pDone); + [id(8), helpstring("Store the image in memory")] HRESULT StoreInMemory(BSTR bstrExtension, [optional] TPDFCompression iCompression, [out, retval] VARIANT_BOOL* pDone); + [id(9), helpstring("Get the image in memory")] HRESULT GetImage([out, retval] VARIANT* pVal); + [id(10), helpstring("Convert image to RGB colors")] HRESULT ConvertToRGB([out, retval] VARIANT_BOOL* pDone); + [id(11), helpstring("Change the orientation")] HRESULT ChangeOrientation([in] TPDFOrientation iOrientation,[out, retval] VARIANT_BOOL* pDone); + [propget, id(12), helpstring("Get an array of alternate images")] HRESULT Alternates([out, retval] VARIANT *pVal); + [propget, id(13), helpstring("IsBitonal")] HRESULT IsBitonal([out, retval] VARIANT_BOOL *pVal); + [propget, id(14), helpstring("IsMonochrome")] HRESULT IsMonochrome([out, retval] VARIANT_BOOL *pVal); + [propget, id(15), helpstring("IsColor")] HRESULT IsColor([out, retval] VARIANT_BOOL *pVal); + [id(16), helpstring("Get the resoluting depending on the matrix.")] HRESULT GetResolution(IPDFTransformMatrix* pMatrix, [out, retval] float* pVal); + }; + [ + object, + uuid(62AE898E-B1C4-4DAE-828D-A0555BD90427), + dual, + helpstring("IPDFAlternateImage Interface"), + pointer_default(unique) + ] + interface IPDFAlternateImage : IDispatch + { + [propget, id(1), helpstring("Get an interface to the alternate image.")] HRESULT Image([out, retval] IPDFImage* *pVal); + [propget, id(2), helpstring("Get the default setting for printing.")] HRESULT DefaultForPrinting([out, retval] VARIANT_BOOL *pVal); + }; + interface IPDFDocument; + [ + object, + uuid(A4D73C27-0670-462B-A91D-00A5FAD884E0), + dual, + helpstring("IContent Interface"), + pointer_default(unique) + ] + interface IPDFContent : IDispatch + { + [propget, id(1), helpstring("Get current graphics state")] HRESULT GraphicsState([out, retval] IPDFGraphicsState* *pVal); + [propget, id(2), helpstring("Get current text")] HRESULT Text([out, retval] IPDFText* *pVal); + [propget, id(3), helpstring("Get current image")] HRESULT Image([out, retval] IPDFImage* *pVal); + [propget, id(4), helpstring("Get current path string")] HRESULT Path([out, retval] BSTR *pVal); + [propget, id(5), helpstring("Break text into words")] HRESULT BreakWords([out, retval] VARIANT_BOOL *pVal); + [propput, id(5), helpstring("Break text into words")] HRESULT BreakWords([in] VARIANT_BOOL newVal); + [id(6), helpstring("Reset the content stream")] HRESULT Reset([in, defaultvalue(FALSE)] VARIANT_BOOL bIncludeRotate); + [id(7), helpstring("Get the next text in the content stream")] HRESULT GetNextText([out, retval] IPDFText* *pVal); + [id(8), helpstring("Get the next image in the content stream")] HRESULT GetNextImage([out, retval] IPDFImage* *pVal); + [id(9), helpstring("Get the next graphics object (path) in the content stream")] HRESULT GetNextPath([out, retval] BSTR* bstrPath); + [id(10), helpstring("Get the next object (text, image, path) in the content stream")] HRESULT GetNextObject([out, retval] TPDFContentObject* pVal); + [propget, id(11), helpstring("Get the annotation flags (-1: page content)")] HRESULT Flags([out, retval] long *pVal); + }; + [ + object, + uuid(5FBE061F-1929-4213-8350-0A73FE885353), + dual, + helpstring("IPDFAnnotation Interface"), + pointer_default(unique) + ] + interface IPDFAnnotation : IDispatch + { + [propget, id(1), helpstring("Get the type of the annotation.")] HRESULT Subtype([out, retval] BSTR *pVal); + [propget, id(2), helpstring("Get the rectangle of the annotation")] HRESULT Rect([out, retval] VARIANT *pVal); + [propget, id(3), helpstring("Get the content of the annotation.")] HRESULT Contents([out, retval] BSTR *pVal); + [propget, id(4), helpstring("Get the name of the annotation.")] HRESULT Name([out, retval] BSTR *pVal); + [propget, id(5), helpstring("Get the date of the annotation.")] HRESULT Date([out, retval] DATE *pVal); + [propget, id(6), helpstring("Get the flags of the annotation.")] HRESULT Flags([out, retval] long *pVal); + [propget, id(7), helpstring("Get the color of the annotation.")] HRESULT Color([out, retval] long *pVal); + [propget, id(8), helpstring("Get the label of the text annotation.")] HRESULT TextLabel([out, retval] BSTR *pVal); + }; + [ + object, + uuid(FABFF1BB-3852-4BE4-8344-BAB92105D5A0), + dual, + helpstring("IPDFPage Interface"), + pointer_default(unique) + ] + interface IPDFPage : IDispatch + { + [propget, id(1), helpstring("Get the pages document.")] HRESULT Document([out, retval] IPDFDocument* *pVal); + [propget, id(2), helpstring("Get the media box rectangle.")] HRESULT MediaBox([out, retval] VARIANT *pVal); + [propget, id(3), helpstring("Get the crop box rectangle.")] HRESULT CropBox([out, retval] VARIANT *pVal); + [propget, id(4), helpstring("Get the pages rotation value.")] HRESULT Rotate([out, retval] short *pVal); + [propget, id(5), helpstring("Get the pages content stream.")] HRESULT Content([out, retval] IPDFContent* *pVal); + [id(6), helpstring("Get first annotation")] HRESULT GetFirstAnnotation([out, retval] IPDFAnnotation** pAnnot); + [id(7), helpstring("Get next annotation")] HRESULT GetNextAnnotation([out, retval] IPDFAnnotation** pAnnot); + [propget, id(8), helpstring("Get thebleed box rectangle")] HRESULT BleedBox([out, retval] VARIANT *pVal); + [propget, id(9), helpstring("Get the trim box rectangle")] HRESULT TrimBox([out, retval] VARIANT *pVal); + [propget, id(10), helpstring("Get the art box rectangle")] HRESULT ArtBox([out, retval] VARIANT *pVal); + [propget, id(11), helpstring("Device Colorant")] HRESULT DeviceColorant([out, retval] BSTR *pVal); + }; + [ + object, + uuid(405CA7A9-10C7-40CD-AAA1-22EFF01E2CE5), + dual, + helpstring("IPDFDestination Interface"), + pointer_default(unique) + ] + interface IPDFDestination : IDispatch + { + [propget, id(1), helpstring("Get the type of the destination.")] HRESULT Type([out, retval] BSTR *pVal); + [propget, id(2), helpstring("Get page number")] HRESULT PageNo([out, retval] long *pVal); + [propget, id(3), helpstring("Get the Left value")] HRESULT Left([out, retval] float *pVal); + [propget, id(4), helpstring("Get the bottom value.")] HRESULT Bottom([out, retval] float *pVal); + [propget, id(5), helpstring("Get the right value.")] HRESULT Right([out, retval] float *pVal); + [propget, id(6), helpstring("Get the top value.")] HRESULT Top([out, retval] float *pVal); + [propget, id(7), helpstring("Get the Zoom value of the destination.")] HRESULT Zoom([out, retval] float *pVal); + }; + [ + object, + uuid(E1AFC937-B6AC-4E19-9BC1-F46E8A125E6F), + dual, + helpstring("IPDFOutlineItem Interface"), + pointer_default(unique) + ] + interface IPDFOutlineItem : IDispatch + { + [propget, id(1), helpstring("Get the title of the outline")] HRESULT Title([out, retval] BSTR *pVal); + [propget, id(2), helpstring("Get the number of children of the current outline.")] HRESULT Count([out, retval] long *pVal); + [propget, id(3), helpstring("Get the destination")] HRESULT Dest([out, retval] IPDFDestination* *pVal); + }; + [ + object, + uuid(E46A1E80-977C-42DB-A770-65EF9D314B13), + dual, + helpstring("IPDFDocument Interface"), + pointer_default(unique) + ] + interface IPDFDocument : IDispatch + { + [propget, id(1), helpstring("Get the number of pages in the document")] HRESULT PageCount([out, retval] long *pVal); + [propget, id(2), helpstring("Get the current page number")] HRESULT PageNo([out, retval] long *pVal); + [propput, id(2), helpstring("Set the current page number")] HRESULT PageNo([in] long newVal); + [propget, id(3), helpstring("Get the current page")] HRESULT Page([out, retval] IPDFPage* *pVal); + [id(4), helpstring("Open a document from a file")] HRESULT Open(BSTR bstrPath, [optional] BSTR bstrPassword, [out, retval] VARIANT_BOOL *bDone); + [id(5), helpstring("Close the document")] HRESULT Close(); + [id(6), helpstring("Open a PDF stream from an in-memory file.")] HRESULT OpenMem(VARIANT* varMem, [optional] BSTR bstrPassword, [out, retval] VARIANT_BOOL* bDone); + [propget, id(7), helpstring("Get the error code of the last operation.")] HRESULT ErrorCode([out, retval] TPDFErrorCode *pVal); + [propget, id(8), helpstring("Return True if the file is encrypted.")] HRESULT IsEncrypted([out, retval] VARIANT_BOOL *pVal); + [propget, id(9), helpstring("Get the file's major version.")] HRESULT MajorVersion([out, retval] short *pVal); + [propget, id(10), helpstring("Get the file's minor version.")] HRESULT MinorVersion([out, retval] short *pVal); + [propget, id(12), helpstring("Get the document's title.")] HRESULT Title([out, retval] BSTR *pVal); + [propget, id(13), helpstring("Get the document's author.")] HRESULT Author([out, retval] BSTR *pVal); + [propget, id(14), helpstring("Get the document's subject.")] HRESULT Subject([out, retval] BSTR *pVal); + [propget, id(15), helpstring("Get the document's keywords.")] HRESULT Keywords([out, retval] BSTR *pVal); + [id(16), helpstring("Get an info object value given a specific key.")] HRESULT GetInfoEntry([in] BSTR szKey, [out, retval] BSTR* szValue); + [propget, id(17), helpstring("Get the document's creator")] HRESULT Creator([out, retval] BSTR *pVal); + [propget, id(18), helpstring("Get the document's producer")] HRESULT Producer([out, retval] BSTR *pVal); + [propget, id(19), helpstring("Get the document's creation date")] HRESULT CreationDate([out, retval] DATE *pVal); + [propget, id(20), helpstring("Get the document's modification date")] HRESULT ModDate([out, retval] DATE *pVal); + [id(21), helpstring("Get the first font resource")] HRESULT GetFirstFontResource([out, retval] IPDFFont* *ppFont); + [id(22), helpstring("Get the next font resource")] HRESULT GetNextFontResource([out, retval] IPDFFont* *ppFont); + [id(23), helpstring("Get the first image resource")] HRESULT GetFirstImageResource([out, retval] IPDFImage* *ppImage); + [id(24), helpstring("Get the next image resource")] HRESULT GetNextImageResource([out, retval] IPDFImage* *ppImage); + [id(25), helpstring("Get the first color space resource")] HRESULT GetFirstColorSpaceResource([out, retval] IPDFColorSpace* *ppColorSpace); + [id(26), helpstring("Get the next color space resource")] HRESULT GetNextColorSpaceResource([out, retval] IPDFColorSpace* *ppColorSpace); + [id(27), helpstring("Get the first outline item")] HRESULT GetFirstOutlineItem([out, retval] IPDFOutlineItem* *ppOutlineItem); + [id(28), helpstring("Get the next outline item")] HRESULT GetNextOutlineItem([in, defaultvalue(20)] long nMaxLevel, [in, defaultvalue(0)] VARIANT_BOOL bReturnOpenOnly, [out, retval] IPDFOutlineItem* *ppOutlineItem); + [id(29), helpstring("Get the current outline level")] HRESULT GetCurrentOutlineLevel([out, retval] long* pVal); + }; + + [ + uuid(8360A99C-F604-4DFD-8B26-A9E735E414AA), + helpstring("ColorSpace Class") + ] + coclass ColorSpace + { + [default] interface IPDFColorSpace; + }; + [ + uuid(A52F80A5-6BBE-460C-9249-E8DAB46688B5), + helpstring("TransformMatrix Class") + ] + coclass TransformMatrix + { + [default] interface IPDFTransformMatrix; + }; + [ + uuid(E46EBEE0-0E50-4A5E-88AC-519335F8714D), + helpstring("Font Class") + ] + coclass Font + { + [default] interface IPDFFont; + }; + [ + uuid(BC62F899-1C67-4D7A-A5CC-F35819051552), + helpstring("Text Class") + ] + coclass Text + { + [default] interface IPDFText; + }; + [ + uuid(ACC2258C-D7ED-468C-BF99-118795A997E0), + helpstring("Image Class") + ] + coclass Image + { + [default] interface IPDFImage; + }; + [ + uuid(39D04D8D-6AA7-42EC-B3F8-6CE5E44DD363), + helpstring("GraphicsState Class") + ] + coclass GraphicsState + { + [default] interface IPDFGraphicsState; + }; + [ + uuid(F282DB6E-18C9-4E6A-A3C6-A505FE799BA6), + helpstring("Content Class") + ] + coclass Content + { + [default] interface IPDFContent; + }; + [ + uuid(2D5A39C5-6BAC-419e-8964-9199C92F2DA0), + helpstring("Page Class") + ] + coclass Page + { + [default] interface IPDFPage; + }; + [ + uuid(2C02B78D-B66A-4ED4-ADF7-DA2491972621), + helpstring("Document Class") + ] + coclass Document + { + [default] interface IPDFDocument; + }; + [ + uuid(AA7CE8E6-5B44-49CA-A9E1-391F39695207), + helpstring("AlternateImage Class") + ] + coclass AlternateImage + { + [default] interface IPDFAlternateImage; + }; + [ + uuid(69F55E13-7315-4403-AA77-562225172C64), + helpstring("Annotation Class") + ] + coclass Annotation + { + [default] interface IPDFAnnotation; + }; + [ + uuid(F236D5D4-21EA-4FE1-A230-D4F48391A284), + helpstring("OutlineItem Class") + ] + coclass OutlineItem + { + [default] interface IPDFOutlineItem; + }; + [ + uuid(C4817A5F-DABE-4751-BF36-4643F3E38600), + helpstring("Destination Class") + ] + coclass Destination + { + [default] interface IPDFDestination; + }; +}; diff --git a/Scraping/COM/doc/expa.pdf b/Scraping/COM/doc/expa.pdf new file mode 100644 index 0000000..c310039 Binary files /dev/null and b/Scraping/COM/doc/expa.pdf differ diff --git a/Scraping/COM/doc/javadoc/allclasses-frame.html b/Scraping/COM/doc/javadoc/allclasses-frame.html new file mode 100644 index 0000000..8ccc43b --- /dev/null +++ b/Scraping/COM/doc/javadoc/allclasses-frame.html @@ -0,0 +1,88 @@ + + + + + + +All Classes + + + + + + + + + + +All Classes +
+ + + + + +
AlternateImage +
+AlternateImageArray +
+Annotation +
+ColorSpace +
+Content +
+Destination +
+Document +
+ExpaInitialize +
+ExpaInitialize.CONTENTOBJECT +
+ExpaInitialize.ORIENTATION +
+ExpaInitialize.Rectangle +
+ExpaInitialize.TransformMatrix +
+Font +
+GraphicsState +
+Image +
+NativeLibrary +
+NativeLibrary.COLORCONVERSION +
+NativeLibrary.COLORSPACE +
+NativeLibrary.COMPRESSION +
+NativeLibrary.DITHERINGMODE +
+NativeLibrary.ERRORCODE +
+NativeLibrary.FONTTYPE +
+NativeLibrary.PERMISSION +
+NativeLibrary.RENDEREROPTION +
+NativeLibrary.RENDERINGMODE +
+NativeLibrary.ROTATEMODE +
+NativeLibrary.STRIPTYPE +
+OutlineItem +
+Page +
+Text +
+
+ + + diff --git a/Scraping/COM/doc/javadoc/allclasses-noframe.html b/Scraping/COM/doc/javadoc/allclasses-noframe.html new file mode 100644 index 0000000..acf1f65 --- /dev/null +++ b/Scraping/COM/doc/javadoc/allclasses-noframe.html @@ -0,0 +1,88 @@ + + + + + + +All Classes + + + + + + + + + + +All Classes +
+ + + + + +
AlternateImage +
+AlternateImageArray +
+Annotation +
+ColorSpace +
+Content +
+Destination +
+Document +
+ExpaInitialize +
+ExpaInitialize.CONTENTOBJECT +
+ExpaInitialize.ORIENTATION +
+ExpaInitialize.Rectangle +
+ExpaInitialize.TransformMatrix +
+Font +
+GraphicsState +
+Image +
+NativeLibrary +
+NativeLibrary.COLORCONVERSION +
+NativeLibrary.COLORSPACE +
+NativeLibrary.COMPRESSION +
+NativeLibrary.DITHERINGMODE +
+NativeLibrary.ERRORCODE +
+NativeLibrary.FONTTYPE +
+NativeLibrary.PERMISSION +
+NativeLibrary.RENDEREROPTION +
+NativeLibrary.RENDERINGMODE +
+NativeLibrary.ROTATEMODE +
+NativeLibrary.STRIPTYPE +
+OutlineItem +
+Page +
+Text +
+
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.COLORCONVERSION.html b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.COLORCONVERSION.html new file mode 100644 index 0000000..c6b250f --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.COLORCONVERSION.html @@ -0,0 +1,312 @@ + + + + + + +NativeLibrary.COLORCONVERSION + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools +
+Class NativeLibrary.COLORCONVERSION

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary.COLORCONVERSION
+
+
+
Enclosing class:
NativeLibrary
+
+
+
+
public static class NativeLibrary.COLORCONVERSION
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static inteConvCMYK + +
+           
+static inteConvGray + +
+           
+static inteConvNone + +
+           
+static inteConvRGB + +
+           
+  + + + + + + + + + + +
+Constructor Summary
NativeLibrary.COLORCONVERSION() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+eConvNone

+
+public static final int eConvNone
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eConvRGB

+
+public static final int eConvRGB
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eConvCMYK

+
+public static final int eConvCMYK
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eConvGray

+
+public static final int eConvGray
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+NativeLibrary.COLORCONVERSION

+
+public NativeLibrary.COLORCONVERSION()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.COLORSPACE.html b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.COLORSPACE.html new file mode 100644 index 0000000..a7916b4 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.COLORSPACE.html @@ -0,0 +1,420 @@ + + + + + + +NativeLibrary.COLORSPACE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools +
+Class NativeLibrary.COLORSPACE

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary.COLORSPACE
+
+
+
Enclosing class:
NativeLibrary
+
+
+
+
public static class NativeLibrary.COLORSPACE
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static inteColorCMYK + +
+           
+static inteColorGray + +
+           
+static inteColorGrayA + +
+           
+static inteColorLAB + +
+           
+static inteColorOther + +
+           
+static inteColorPalette + +
+           
+static inteColorRGB + +
+           
+static inteColorRGBA + +
+           
+static inteColorYCbCr + +
+           
+static inteColorYCbCrK + +
+           
+  + + + + + + + + + + +
+Constructor Summary
NativeLibrary.COLORSPACE() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+eColorGray

+
+public static final int eColorGray
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eColorGrayA

+
+public static final int eColorGrayA
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eColorRGB

+
+public static final int eColorRGB
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eColorRGBA

+
+public static final int eColorRGBA
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eColorCMYK

+
+public static final int eColorCMYK
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eColorYCbCr

+
+public static final int eColorYCbCr
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eColorYCbCrK

+
+public static final int eColorYCbCrK
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eColorPalette

+
+public static final int eColorPalette
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eColorLAB

+
+public static final int eColorLAB
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eColorOther

+
+public static final int eColorOther
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+NativeLibrary.COLORSPACE

+
+public NativeLibrary.COLORSPACE()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.COMPRESSION.html b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.COMPRESSION.html new file mode 100644 index 0000000..cd86b59 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.COMPRESSION.html @@ -0,0 +1,420 @@ + + + + + + +NativeLibrary.COMPRESSION + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools +
+Class NativeLibrary.COMPRESSION

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary.COMPRESSION
+
+
+
Enclosing class:
NativeLibrary
+
+
+
+
public static class NativeLibrary.COMPRESSION
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static inteComprFlate + +
+           
+static inteComprGroup3 + +
+           
+static inteComprGroup3_2D + +
+           
+static inteComprGroup4 + +
+           
+static inteComprJBIG2 + +
+           
+static inteComprJPEG + +
+           
+static inteComprJPEG2000 + +
+           
+static inteComprLZW + +
+           
+static inteComprRaw + +
+           
+static inteComprUnknown + +
+           
+  + + + + + + + + + + +
+Constructor Summary
NativeLibrary.COMPRESSION() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+eComprRaw

+
+public static final int eComprRaw
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eComprJPEG

+
+public static final int eComprJPEG
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eComprFlate

+
+public static final int eComprFlate
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eComprLZW

+
+public static final int eComprLZW
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eComprGroup3

+
+public static final int eComprGroup3
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eComprGroup3_2D

+
+public static final int eComprGroup3_2D
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eComprGroup4

+
+public static final int eComprGroup4
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eComprJBIG2

+
+public static final int eComprJBIG2
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eComprJPEG2000

+
+public static final int eComprJPEG2000
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eComprUnknown

+
+public static final int eComprUnknown
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+NativeLibrary.COMPRESSION

+
+public NativeLibrary.COMPRESSION()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.DITHERINGMODE.html b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.DITHERINGMODE.html new file mode 100644 index 0000000..c293d78 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.DITHERINGMODE.html @@ -0,0 +1,348 @@ + + + + + + +NativeLibrary.DITHERINGMODE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools +
+Class NativeLibrary.DITHERINGMODE

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary.DITHERINGMODE
+
+
+
Enclosing class:
NativeLibrary
+
+
+
+
public static class NativeLibrary.DITHERINGMODE
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static inteDitherFloydSteinberg + +
+           
+static inteDitherG3Optimized + +
+           
+static inteDitherG4Optimized + +
+           
+static inteDitherHalftone + +
+           
+static inteDitherNone + +
+           
+static inteDitherPattern + +
+           
+  + + + + + + + + + + +
+Constructor Summary
NativeLibrary.DITHERINGMODE() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+eDitherNone

+
+public static final int eDitherNone
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eDitherFloydSteinberg

+
+public static final int eDitherFloydSteinberg
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eDitherHalftone

+
+public static final int eDitherHalftone
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eDitherPattern

+
+public static final int eDitherPattern
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eDitherG3Optimized

+
+public static final int eDitherG3Optimized
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eDitherG4Optimized

+
+public static final int eDitherG4Optimized
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+NativeLibrary.DITHERINGMODE

+
+public NativeLibrary.DITHERINGMODE()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.ERRORCODE.html b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.ERRORCODE.html new file mode 100644 index 0000000..054a78d --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.ERRORCODE.html @@ -0,0 +1,1086 @@ + + + + + + +NativeLibrary.ERRORCODE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools +
+Class NativeLibrary.ERRORCODE

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary.ERRORCODE
+
+
+
Enclosing class:
NativeLibrary
+
+
+
+
public static class NativeLibrary.ERRORCODE
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static intPDF_E_CHARPROC + +
+           
+static intPDF_E_CORRUPT + +
+           
+static intPDF_E_ENDOBJ + +
+           
+static intPDF_E_ENDSTREAM + +
+           
+static intPDF_E_EOF + +
+           
+static intPDF_E_FATAL + +
+           
+static intPDF_E_FILECREATE + +
+           
+static intPDF_E_FILEOPEN + +
+           
+static intPDF_E_FONTINSTALL + +
+           
+static intPDF_E_GENNO + +
+           
+static intPDF_E_HEADER + +
+           
+static intPDF_E_IDENTITY + +
+           
+static intPDF_E_LENGTH + +
+           
+static intPDF_E_NULL + +
+           
+static intPDF_E_OBJ + +
+           
+static intPDF_E_OBJNO + +
+           
+static intPDF_E_OPERANDS + +
+           
+static intPDF_E_OPERATOR + +
+           
+static intPDF_E_OPNDARRAY + +
+           
+static intPDF_E_OPNDDICT + +
+           
+static intPDF_E_OPNDNAME + +
+           
+static intPDF_E_OPNDNUMBER + +
+           
+static intPDF_E_OPNDSTRING + +
+           
+static intPDF_E_PAGE + +
+           
+static intPDF_E_PAGECOUNT + +
+           
+static intPDF_E_PAGEKIDS + +
+           
+static intPDF_E_PAGEMEDIABOX + +
+           
+static intPDF_E_PAGEPARENT + +
+           
+static intPDF_E_PAGERES + +
+           
+static intPDF_E_PAGETYPE + +
+           
+static intPDF_E_PAINTMISSING + +
+           
+static intPDF_E_PASSWORD + +
+           
+static intPDF_E_PATTERNTYPE + +
+           
+static intPDF_E_ROOT + +
+           
+static intPDF_E_SAMPLELENGTH + +
+           
+static intPDF_E_SETPOS + +
+           
+static intPDF_E_SHADINGTYPE + +
+           
+static intPDF_E_STANDARDFONT + +
+           
+static intPDF_E_TOKEN + +
+           
+static intPDF_E_TRAILER + +
+           
+static intPDF_E_UNKCOLORSPACE + +
+           
+static intPDF_E_XREF + +
+           
+static intPDF_I_OPEN + +
+           
+static intPDF_I_PAGE + +
+           
+static intPDF_S_SUCCESS + +
+           
+static intPDF_W_FONTREPLACE + +
+           
+static intPDF_W_SYSTEMFONT + +
+           
+  + + + + + + + + + + +
+Constructor Summary
NativeLibrary.ERRORCODE() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+PDF_S_SUCCESS

+
+public static final int PDF_S_SUCCESS
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_FATAL

+
+public static final int PDF_E_FATAL
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_FILEOPEN

+
+public static final int PDF_E_FILEOPEN
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_FILECREATE

+
+public static final int PDF_E_FILECREATE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_SETPOS

+
+public static final int PDF_E_SETPOS
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_HEADER

+
+public static final int PDF_E_HEADER
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_EOF

+
+public static final int PDF_E_EOF
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_XREF

+
+public static final int PDF_E_XREF
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_TRAILER

+
+public static final int PDF_E_TRAILER
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_ROOT

+
+public static final int PDF_E_ROOT
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_PASSWORD

+
+public static final int PDF_E_PASSWORD
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_CORRUPT

+
+public static final int PDF_E_CORRUPT
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_OBJNO

+
+public static final int PDF_E_OBJNO
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_GENNO

+
+public static final int PDF_E_GENNO
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_IDENTITY

+
+public static final int PDF_E_IDENTITY
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_OBJ

+
+public static final int PDF_E_OBJ
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_NULL

+
+public static final int PDF_E_NULL
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_LENGTH

+
+public static final int PDF_E_LENGTH
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_ENDSTREAM

+
+public static final int PDF_E_ENDSTREAM
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_ENDOBJ

+
+public static final int PDF_E_ENDOBJ
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_PAGE

+
+public static final int PDF_E_PAGE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_PAGETYPE

+
+public static final int PDF_E_PAGETYPE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_PAGEKIDS

+
+public static final int PDF_E_PAGEKIDS
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_PAGECOUNT

+
+public static final int PDF_E_PAGECOUNT
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_PAGEPARENT

+
+public static final int PDF_E_PAGEPARENT
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_PAGERES

+
+public static final int PDF_E_PAGERES
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_PAGEMEDIABOX

+
+public static final int PDF_E_PAGEMEDIABOX
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_I_OPEN

+
+public static final int PDF_I_OPEN
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_I_PAGE

+
+public static final int PDF_I_PAGE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_TOKEN

+
+public static final int PDF_E_TOKEN
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_OPERATOR

+
+public static final int PDF_E_OPERATOR
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_OPERANDS

+
+public static final int PDF_E_OPERANDS
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_OPNDNUMBER

+
+public static final int PDF_E_OPNDNUMBER
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_OPNDSTRING

+
+public static final int PDF_E_OPNDSTRING
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_OPNDNAME

+
+public static final int PDF_E_OPNDNAME
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_OPNDARRAY

+
+public static final int PDF_E_OPNDARRAY
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_OPNDDICT

+
+public static final int PDF_E_OPNDDICT
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_UNKCOLORSPACE

+
+public static final int PDF_E_UNKCOLORSPACE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_PAINTMISSING

+
+public static final int PDF_E_PAINTMISSING
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_PATTERNTYPE

+
+public static final int PDF_E_PATTERNTYPE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_SAMPLELENGTH

+
+public static final int PDF_E_SAMPLELENGTH
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_CHARPROC

+
+public static final int PDF_E_CHARPROC
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_SHADINGTYPE

+
+public static final int PDF_E_SHADINGTYPE
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_FONTINSTALL

+
+public static final int PDF_E_FONTINSTALL
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_E_STANDARDFONT

+
+public static final int PDF_E_STANDARDFONT
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_W_SYSTEMFONT

+
+public static final int PDF_W_SYSTEMFONT
+
+
+
See Also:
Constant Field Values
+
+
+ +

+PDF_W_FONTREPLACE

+
+public static final int PDF_W_FONTREPLACE
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+NativeLibrary.ERRORCODE

+
+public NativeLibrary.ERRORCODE()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.FONTTYPE.html b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.FONTTYPE.html new file mode 100644 index 0000000..641d8f9 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.FONTTYPE.html @@ -0,0 +1,312 @@ + + + + + + +NativeLibrary.FONTTYPE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools +
+Class NativeLibrary.FONTTYPE

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary.FONTTYPE
+
+
+
Enclosing class:
NativeLibrary
+
+
+
+
public static class NativeLibrary.FONTTYPE
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static inteFontCFF + +
+           
+static inteFontTrueType + +
+           
+static inteFontType1 + +
+           
+static inteFontType3 + +
+           
+  + + + + + + + + + + +
+Constructor Summary
NativeLibrary.FONTTYPE() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+eFontType1

+
+public static final int eFontType1
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eFontTrueType

+
+public static final int eFontTrueType
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eFontCFF

+
+public static final int eFontCFF
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eFontType3

+
+public static final int eFontType3
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+NativeLibrary.FONTTYPE

+
+public NativeLibrary.FONTTYPE()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.PERMISSION.html b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.PERMISSION.html new file mode 100644 index 0000000..7bcf5ee --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.PERMISSION.html @@ -0,0 +1,402 @@ + + + + + + +NativeLibrary.PERMISSION + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools +
+Class NativeLibrary.PERMISSION

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary.PERMISSION
+
+
+
Enclosing class:
NativeLibrary
+
+
+
+
public static class NativeLibrary.PERMISSION
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static intePermAll + +
+           
+static intePermAnnotate + +
+           
+static intePermAssemble + +
+           
+static intePermCopy + +
+           
+static intePermDigitalPrint + +
+           
+static intePermFillForms + +
+           
+static intePermModify + +
+           
+static intePermPrint + +
+           
+static intePermSupportDisabilities + +
+           
+  + + + + + + + + + + +
+Constructor Summary
NativeLibrary.PERMISSION() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+ePermPrint

+
+public static final int ePermPrint
+
+
+
See Also:
Constant Field Values
+
+
+ +

+ePermModify

+
+public static final int ePermModify
+
+
+
See Also:
Constant Field Values
+
+
+ +

+ePermCopy

+
+public static final int ePermCopy
+
+
+
See Also:
Constant Field Values
+
+
+ +

+ePermAnnotate

+
+public static final int ePermAnnotate
+
+
+
See Also:
Constant Field Values
+
+
+ +

+ePermFillForms

+
+public static final int ePermFillForms
+
+
+
See Also:
Constant Field Values
+
+
+ +

+ePermSupportDisabilities

+
+public static final int ePermSupportDisabilities
+
+
+
See Also:
Constant Field Values
+
+
+ +

+ePermAssemble

+
+public static final int ePermAssemble
+
+
+
See Also:
Constant Field Values
+
+
+ +

+ePermDigitalPrint

+
+public static final int ePermDigitalPrint
+
+
+
See Also:
Constant Field Values
+
+
+ +

+ePermAll

+
+public static final int ePermAll
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+NativeLibrary.PERMISSION

+
+public NativeLibrary.PERMISSION()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.RENDEREROPTION.html b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.RENDEREROPTION.html new file mode 100644 index 0000000..16b8e5d --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.RENDEREROPTION.html @@ -0,0 +1,492 @@ + + + + + + +NativeLibrary.RENDEREROPTION + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools +
+Class NativeLibrary.RENDEREROPTION

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary.RENDEREROPTION
+
+
+
Enclosing class:
NativeLibrary
+
+
+
+
public static class NativeLibrary.RENDEREROPTION
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static inteOptionBanding + +
+           
+static inteOptionBicubic + +
+           
+static inteOptionBilinear + +
+           
+static inteOptionBitmap + +
+           
+static inteOptionHighQuality + +
+           
+static inteOptionJPEG + +
+           
+static inteOptionNoEmbedded + +
+           
+static inteOptionOpenType + +
+           
+static inteOptionOutlines + +
+           
+static inteOptionPNG + +
+           
+static inteOptionTransparency + +
+           
+static inteOptionTrueType + +
+           
+static inteOptionType1 + +
+           
+static inteOptionWindows9x + +
+           
+  + + + + + + + + + + +
+Constructor Summary
NativeLibrary.RENDEREROPTION() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+eOptionJPEG

+
+public static final int eOptionJPEG
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOptionPNG

+
+public static final int eOptionPNG
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOptionTransparency

+
+public static final int eOptionTransparency
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOptionBanding

+
+public static final int eOptionBanding
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOptionType1

+
+public static final int eOptionType1
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOptionBitmap

+
+public static final int eOptionBitmap
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOptionTrueType

+
+public static final int eOptionTrueType
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOptionHighQuality

+
+public static final int eOptionHighQuality
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOptionBilinear

+
+public static final int eOptionBilinear
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOptionBicubic

+
+public static final int eOptionBicubic
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOptionNoEmbedded

+
+public static final int eOptionNoEmbedded
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOptionWindows9x

+
+public static final int eOptionWindows9x
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOptionOutlines

+
+public static final int eOptionOutlines
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOptionOpenType

+
+public static final int eOptionOpenType
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+NativeLibrary.RENDEREROPTION

+
+public NativeLibrary.RENDEREROPTION()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.RENDERINGMODE.html b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.RENDERINGMODE.html new file mode 100644 index 0000000..31c7a81 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.RENDERINGMODE.html @@ -0,0 +1,294 @@ + + + + + + +NativeLibrary.RENDERINGMODE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools +
+Class NativeLibrary.RENDERINGMODE

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary.RENDERINGMODE
+
+
+
Enclosing class:
NativeLibrary
+
+
+
+
public static class NativeLibrary.RENDERINGMODE
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + +
+Field Summary
+static inteModeAccurate + +
+           
+static inteModeDirect + +
+           
+static inteModeFast + +
+           
+  + + + + + + + + + + +
+Constructor Summary
NativeLibrary.RENDERINGMODE() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+eModeFast

+
+public static final int eModeFast
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eModeAccurate

+
+public static final int eModeAccurate
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eModeDirect

+
+public static final int eModeDirect
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+NativeLibrary.RENDERINGMODE

+
+public NativeLibrary.RENDERINGMODE()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.ROTATEMODE.html b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.ROTATEMODE.html new file mode 100644 index 0000000..b0826fc --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.ROTATEMODE.html @@ -0,0 +1,312 @@ + + + + + + +NativeLibrary.ROTATEMODE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools +
+Class NativeLibrary.ROTATEMODE

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary.ROTATEMODE
+
+
+
Enclosing class:
NativeLibrary
+
+
+
+
public static class NativeLibrary.ROTATEMODE
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static inteRotateAttribute + +
+           
+static inteRotateLandscape + +
+           
+static inteRotateNone + +
+           
+static inteRotatePortrait + +
+           
+  + + + + + + + + + + +
+Constructor Summary
NativeLibrary.ROTATEMODE() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+eRotateNone

+
+public static final int eRotateNone
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eRotateAttribute

+
+public static final int eRotateAttribute
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eRotatePortrait

+
+public static final int eRotatePortrait
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eRotateLandscape

+
+public static final int eRotateLandscape
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+NativeLibrary.ROTATEMODE

+
+public NativeLibrary.ROTATEMODE()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.STRIPTYPE.html b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.STRIPTYPE.html new file mode 100644 index 0000000..f4adce3 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.STRIPTYPE.html @@ -0,0 +1,348 @@ + + + + + + +NativeLibrary.STRIPTYPE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools +
+Class NativeLibrary.STRIPTYPE

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary.STRIPTYPE
+
+
+
Enclosing class:
NativeLibrary
+
+
+
+
public static class NativeLibrary.STRIPTYPE
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static inteStripMetadata + +
+           
+static inteStripPieceInfo + +
+           
+static inteStripSpider + +
+           
+static inteStripStructTree + +
+           
+static inteStripThreads + +
+           
+static inteStripThumb + +
+           
+  + + + + + + + + + + +
+Constructor Summary
NativeLibrary.STRIPTYPE() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+eStripThreads

+
+public static final int eStripThreads
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eStripMetadata

+
+public static final int eStripMetadata
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eStripPieceInfo

+
+public static final int eStripPieceInfo
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eStripStructTree

+
+public static final int eStripStructTree
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eStripThumb

+
+public static final int eStripThumb
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eStripSpider

+
+public static final int eStripSpider
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+NativeLibrary.STRIPTYPE

+
+public NativeLibrary.STRIPTYPE()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.html b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.html new file mode 100644 index 0000000..36caf70 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/NativeLibrary.html @@ -0,0 +1,359 @@ + + + + + + +NativeLibrary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools +
+Class NativeLibrary

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+
+
+
Direct Known Subclasses:
ExpaInitialize
+
+
+
+
public class NativeLibrary
extends java.lang.Object
+ + +

+The NativeLibrary class provides the basic enums for the functions in the java package. +

+ +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Nested Class Summary
+static classNativeLibrary.COLORCONVERSION + +
+           
+static classNativeLibrary.COLORSPACE + +
+           
+static classNativeLibrary.COMPRESSION + +
+           
+static classNativeLibrary.DITHERINGMODE + +
+           
+static classNativeLibrary.ERRORCODE + +
+           
+static classNativeLibrary.FONTTYPE + +
+           
+static classNativeLibrary.PERMISSION + +
+           
+static classNativeLibrary.RENDEREROPTION + +
+           
+static classNativeLibrary.RENDERINGMODE + +
+           
+static classNativeLibrary.ROTATEMODE + +
+           
+static classNativeLibrary.STRIPTYPE + +
+           
+ + + + + + + + + + +
+Field Summary
+static java.lang.StringVERSION + +
+           
+  + + + + + + + + + + +
+Constructor Summary
NativeLibrary() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+VERSION

+
+public static final java.lang.String VERSION
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+NativeLibrary

+
+public NativeLibrary()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/AlternateImage.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/AlternateImage.html new file mode 100644 index 0000000..3682de7 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/AlternateImage.html @@ -0,0 +1,321 @@ + + + + + + +AlternateImage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class AlternateImage

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+          extended by com.pdftools.expa.AlternateImage
+
+
+
+
public class AlternateImage
extends ExpaInitialize
+ + +

+


+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.expa.ExpaInitialize
ExpaInitialize.CONTENTOBJECT, ExpaInitialize.ORIENTATION, ExpaInitialize.Rectangle, ExpaInitialize.TransformMatrix
+  + + + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + +
+Constructor Summary
AlternateImage() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ booleangetDefaultForPrinting() + +
+          get the default setting for printing.
+ ImagegetImage() + +
+          get an interface to the alternate image.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+AlternateImage

+
+public AlternateImage()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getImage

+
+public Image getImage()
+
+
get an interface to the alternate image. +

+

+ +
Returns:
the interface to the alternate image.
+
+
+
+ +

+getDefaultForPrinting

+
+public boolean getDefaultForPrinting()
+
+
get the default setting for printing. This property cannot be set. +

+

+ +
Returns:
true if the alternate image is set as default for printing.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/AlternateImageArray.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/AlternateImageArray.html new file mode 100644 index 0000000..18b00f7 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/AlternateImageArray.html @@ -0,0 +1,321 @@ + + + + + + +AlternateImageArray + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class AlternateImageArray

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+          extended by com.pdftools.expa.AlternateImageArray
+
+
+
+
public class AlternateImageArray
extends ExpaInitialize
+ + +

+


+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.expa.ExpaInitialize
ExpaInitialize.CONTENTOBJECT, ExpaInitialize.ORIENTATION, ExpaInitialize.Rectangle, ExpaInitialize.TransformMatrix
+  + + + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + +
+Constructor Summary
AlternateImageArray() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ intgetCount() + +
+          get the number of alternate images in the alternate image array.
+ AlternateImagegetElement(int inx) + +
+          get an alternate image from the alternate image array.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+AlternateImageArray

+
+public AlternateImageArray()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getElement

+
+public AlternateImage getElement(int inx)
+
+
get an alternate image from the alternate image array. +

+

+
Parameters:
inx - index of the alternate image. +
Returns:
the interface to a alternate image from the array.
+
+
+
+ +

+getCount

+
+public int getCount()
+
+
get the number of alternate images in the alternate image array. +

+

+ +
Returns:
the number of alternate images in the array.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/Annotation.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/Annotation.html new file mode 100644 index 0000000..2f813f1 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/Annotation.html @@ -0,0 +1,454 @@ + + + + + + +Annotation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class Annotation

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+          extended by com.pdftools.expa.Annotation
+
+
+
+
public class Annotation
extends ExpaInitialize
+ + +

+


+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.expa.ExpaInitialize
ExpaInitialize.CONTENTOBJECT, ExpaInitialize.ORIENTATION, ExpaInitialize.Rectangle, ExpaInitialize.TransformMatrix
+  + + + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + +
+Constructor Summary
Annotation() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intgetColor() + +
+          get the color of the annotation.
+ java.lang.StringgetContents() + +
+          get the content of the annotation.
+ ExpaInitialize.RectanglegetDate() + +
+          get the date of the annotation.
+ intgetFlags() + +
+          get the flags of the annotation.
+ java.lang.StringgetName() + +
+          get the name of the annotation.
+ ExpaInitialize.RectanglegetRect() + +
+          get the rectangle of the annotation.
+ java.lang.StringgetSubtype() + +
+          get the type of the annotation.
+ java.lang.StringgetTextLabel() + +
+          get the label of the text annotation.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Annotation

+
+public Annotation()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getSubtype

+
+public java.lang.String getSubtype()
+
+
get the type of the annotation. +

+

+ +
Returns:
the type of the annotation as string, such as "Widget", "Square"...
+
+
+
+ +

+getRect

+
+public ExpaInitialize.Rectangle getRect()
+
+
get the rectangle of the annotation. +

+

+ +
Returns:
the rectangle of the annotation.
+
+
+
+ +

+getContents

+
+public java.lang.String getContents()
+
+
get the content of the annotation. +

+

+ +
Returns:
the content of the annotation.
+
+
+
+ +

+getName

+
+public java.lang.String getName()
+
+
get the name of the annotation. +

+

+ +
Returns:
the name of the annotation as string.
+
+
+
+ +

+getDate

+
+public ExpaInitialize.Rectangle getDate()
+
+
get the date of the annotation. +

+

+ +
Returns:
the date of the annotation.
+
+
+
+ +

+getFlags

+
+public int getFlags()
+
+
get the flags of the annotation. +

+

+ +
Returns:
the flags of the annotation as 32bit integer. + 1 Invisible, 2 Hidden (PDF 1.2), 3 Print (PDF 1.2), 4 NoZoom (PDF 1.3), 5 NoRotate (PDF 1.3). + 6 NoView (PDF 1.3), 7 ReadOnly (PDF 1.3), 8 Locked (PDF 1.4), 9 ToggleNoView (PDF 1.5).
+
+
+
+ +

+getColor

+
+public int getColor()
+
+
get the color of the annotation. +

+

+
+
+
+
+ +

+getTextLabel

+
+public java.lang.String getTextLabel()
+
+
get the label of the text annotation. +

+

+ +
Returns:
the label of the text annotation.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/ColorSpace.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/ColorSpace.html new file mode 100644 index 0000000..b8b5c50 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/ColorSpace.html @@ -0,0 +1,409 @@ + + + + + + +ColorSpace + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class ColorSpace

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+          extended by com.pdftools.expa.ColorSpace
+
+
+
+
public class ColorSpace
extends ExpaInitialize
+ + +

+


+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.expa.ExpaInitialize
ExpaInitialize.CONTENTOBJECT, ExpaInitialize.ORIENTATION, ExpaInitialize.Rectangle, ExpaInitialize.TransformMatrix
+  + + + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + +
+Constructor Summary
ColorSpace() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ ColorSpacegetBaseColorSpace() + +
+          get an ColorSpace interface to the base color space.
+ intgetComponentsPerPixel() + +
+          get the number of components per pixel.
+ intgetHighIndex() + +
+          get the information of the index values.
+ byte[]getLookup() + +
+          get the colorspace lookup data
+ java.lang.StringgetName() + +
+          get the name of the color space.
+ booleanisIndexed() + +
+          get the information if the color space is indexed.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ColorSpace

+
+public ColorSpace()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getComponentsPerPixel

+
+public int getComponentsPerPixel()
+
+
get the number of components per pixel. +

+

+ +
Returns:
the number of components per pixel; for RGB images, this will be 3; for CMYK images: 4.
+
+
+
+ +

+getBaseColorSpace

+
+public ColorSpace getBaseColorSpace()
+
+
get an ColorSpace interface to the base color space. +

+

+ +
Returns:
an ColorSpace interface to the base color space if it is existing.
+
+
+
+ +

+isIndexed

+
+public boolean isIndexed()
+
+
get the information if the color space is indexed. +

+

+ +
Returns:
non-zero if the color space is indexed (if there is a palette).
+
+
+
+ +

+getHighIndex

+
+public int getHighIndex()
+
+
get the information of the index values. +

+

+ +
Returns:
the number of index values minus 1.
+
+
+
+ +

+getLookup

+
+public byte[] getLookup()
+
+
get the colorspace lookup data +

+

+ +
Returns:
the colorspace lookup data (palette). + length is (HighIndex+1)*ComponentsPerPixel
+
+
+
+ +

+getName

+
+public java.lang.String getName()
+
+
get the name of the color space. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/Content.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/Content.html new file mode 100644 index 0000000..ab5fa95 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/Content.html @@ -0,0 +1,569 @@ + + + + + + +Content + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class Content

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+          extended by com.pdftools.expa.Content
+
+
+
+
public class Content
extends ExpaInitialize
+ + +

+The Content object provides information about the content of a PDF page. + To obtain a Content object, use the getContent() method of the Page class. +

+ +

+


+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.expa.ExpaInitialize
ExpaInitialize.CONTENTOBJECT, ExpaInitialize.ORIENTATION, ExpaInitialize.Rectangle, ExpaInitialize.TransformMatrix
+  + + + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + +
+Constructor Summary
Content() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intgetFlags() + +
+          Get the annotation flags (-1: page content).
+ GraphicsStategetGraphicsState() + +
+          get current graphics state information;
+ ImagegetImage() + +
+          get the image data.
+ ImagegetNextImage() + +
+          get the next image in the content stream
+ intgetNextObject() + +
+          get the information of which type of content object retrieved.
+ java.lang.StringgetNextPath() + +
+          get the next path in the content stream
+ TextgetNextText() + +
+          get the next text in the content stream
+ java.lang.StringgetPath() + +
+          get the content stream making up the current path
+ TextgetText() + +
+          get current text item.
+ voidreset() + +
+          reset the content to the beginning to start another pass through all components
+ voidreset(boolean iBoolIncludeRotate) + +
+          reset the content to the beginning to start another pass through all components.
+ voidresetContent(boolean iBoolIncludeRotate) + +
+          reset the content to the beginning to start another pass through all components.
+ voidsetBreakWords(int iBoolOn) + +
+          Set break words to control the way how the text extraction algorithm works.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Content

+
+public Content()
+
+
+ + + + + + + + +
+Method Detail
+ +

+resetContent

+
+public void resetContent(boolean iBoolIncludeRotate)
+
+
reset the content to the beginning to start another pass through all components. +

+

+
Parameters:
iBoolIncludeRotate - true to include viewer rotation for returning coordinates.
+
+
+
+ +

+reset

+
+public void reset(boolean iBoolIncludeRotate)
+
+
reset the content to the beginning to start another pass through all components. +

+

+
Parameters:
iBoolIncludeRotate - true to include viewer rotation for returning coordinates.
+
+
+
+ +

+reset

+
+public void reset()
+
+
reset the content to the beginning to start another pass through all components +

+

+
+
+
+
+ +

+getGraphicsState

+
+public GraphicsState getGraphicsState()
+
+
get current graphics state information; +

+

+ +
Returns:
the interface of the current graphics state; + This information is invalidated by the next call to getNextObject, getNextText, getNextImage, or getNextPath
+
+
+
+ +

+getText

+
+public Text getText()
+
+
get current text item. +

+

+ +
Returns:
the current text item. + This information is invalidated when reading the next text item.
+
+
+
+ +

+getImage

+
+public Image getImage()
+
+
get the image data. +

+

+ +
Returns:
the image data obtained by the last getNextObject() or getNextImage() call.
+
+
+
+ +

+getPath

+
+public java.lang.String getPath()
+
+
get the content stream making up the current path +

+

+ +
Returns:
string the bytes of the content stream making up the current path
+
+
+
+ +

+setBreakWords

+
+public void setBreakWords(int iBoolOn)
+
+
Set break words to control the way how the text extraction algorithm works. +

+

+
Parameters:
iBoolOn - true: a word breaking character such as a blank is found or the character + spacing exceeds the blank character width the text objects are split up into individual + text objects without blanks. False: Line breaking characters are treated the same as other + characters and character spacing is disregarded.
+
+
+
+ +

+getNextText

+
+public Text getNextText()
+
+
get the next text in the content stream +

+

+ +
Returns:
the next text in the content stream
+
+
+
+ +

+getNextImage

+
+public Image getNextImage()
+
+
get the next image in the content stream +

+

+ +
Returns:
the next image in the content stream
+
+
+
+ +

+getNextPath

+
+public java.lang.String getNextPath()
+
+
get the next path in the content stream +

+

+ +
Returns:
the next path in the content stream
+
+
+
+ +

+getNextObject

+
+public int getNextObject()
+
+
get the information of which type of content object retrieved. +

+

+ +
Returns:
which type of content object retrieved (eNone if at end of stream)
+
+
+
+ +

+getFlags

+
+public int getFlags()
+
+
Get the annotation flags (-1: page content). +

+

+ +
Returns:
the annotation flags (-1: page content).
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/Destination.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/Destination.html new file mode 100644 index 0000000..466cefb --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/Destination.html @@ -0,0 +1,431 @@ + + + + + + +Destination + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class Destination

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+          extended by com.pdftools.expa.Destination
+
+
+
+
public class Destination
extends ExpaInitialize
+ + +

+


+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.expa.ExpaInitialize
ExpaInitialize.CONTENTOBJECT, ExpaInitialize.ORIENTATION, ExpaInitialize.Rectangle, ExpaInitialize.TransformMatrix
+  + + + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + +
+Constructor Summary
Destination() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ floatgetBottom() + +
+          get the bottom value.
+ floatgetLeft() + +
+          get the Left value.
+ intgetPageNo() + +
+          get page number.
+ floatgetRight() + +
+          get the Right value.
+ floatgetTop() + +
+          get the Top value.
+ java.lang.StringgetType() + +
+          get the type of the destination.
+ floatgetZoom() + +
+          get the Zoom value of the destination.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Destination

+
+public Destination()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getType

+
+public java.lang.String getType()
+
+
get the type of the destination. +

+

+ +
Returns:
the type of the destination, such as "XYZ", "Fit", "FitH", "FitR", ect.
+
+
+
+ +

+getPageNo

+
+public int getPageNo()
+
+
get page number. +

+

+ +
Returns:
the target page number.
+
+
+
+ +

+getLeft

+
+public float getLeft()
+
+
get the Left value. +

+

+ +
Returns:
the Left value.
+
+
+
+ +

+getBottom

+
+public float getBottom()
+
+
get the bottom value. +

+

+ +
Returns:
the Bottom value.
+
+
+
+ +

+getRight

+
+public float getRight()
+
+
get the Right value. +

+

+ +
Returns:
the Right value.
+
+
+
+ +

+getTop

+
+public float getTop()
+
+
get the Top value. +

+

+ +
Returns:
the Top value.
+
+
+
+ +

+getZoom

+
+public float getZoom()
+
+
get the Zoom value of the destination. +

+

+ +
Returns:
the Zoom value of the destination. A value of 0 means the zoom level is left as it is.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/Document.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/Document.html new file mode 100644 index 0000000..a56420e --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/Document.html @@ -0,0 +1,935 @@ + + + + + + +Document + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class Document

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+          extended by com.pdftools.expa.Document
+
+
+
+
public class Document
extends ExpaInitialize
+ + +

+


+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.expa.ExpaInitialize
ExpaInitialize.CONTENTOBJECT, ExpaInitialize.ORIENTATION, ExpaInitialize.Rectangle, ExpaInitialize.TransformMatrix
+  + + + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + + + + + + + +
+Constructor Summary
Document() + +
+          Deprecated. replaced by Document(String, String) and Document(byte[], String)
Document(byte[] pDocumentBytes, + java.lang.String szPassword) + +
+           
Document(java.lang.String strFilename, + java.lang.String strPassword) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidclose() + +
+          close an open document.
+ voiddestroyObject() + +
+          Release handle for the process.
+ java.lang.StringgetAuthor() + +
+          get the Author of the document.
+ java.util.DategetCreationDate() + +
+          get the creation date of the document.
+ intgetCurrentOutlineLevel() + +
+          get the level of the current outline
+ ColorSpacegetFirstColorSpaceResource() + +
+          get the first color space resource
+ FontgetFirstFontResource() + +
+          get the first font resource.
+ ImagegetFirstImageResource() + +
+          get the first image resource.
+ OutlineItemgetFirstOutlineItem() + +
+          get the first outline item resource
+ java.lang.StringgetInfoEntry(java.lang.String strkey) + +
+          get the value of a custom entry of the document.
+ java.lang.StringgetKeywords() + +
+          get the keywords of the document.
+ intgetLastError() + +
+          get the latest error code.
+ intgetMajorVersion() + +
+          get the major version of the document.
+ intgetMinorVersion() + +
+          get the minor version of the document.
+ java.util.DategetModDate() + +
+          get the modification date of the document.
+ ColorSpacegetNextColorSpaceResource() + +
+          get the next color space resource
+ FontgetNextFontResource() + +
+          get the next font resource.
+ ImagegetNextImageResource() + +
+          get the next image resource.
+ OutlineItemgetNextOutlineItem(int nMaxLevel, + boolean bReturnOpenOnly) + +
+          get the next outline item resource
+ PagegetPage() + +
+          get the page interface.
+ intgetPageCount() + +
+          get the number of pages of an open document
+ intgetPageNo() + +
+          get the currently selected page of an open document.
+ java.lang.StringgetSubject() + +
+          get the subject of the document.
+ java.lang.StringgetTitle() + +
+          get the title of the document.
+ booleanisEncrypted() + +
+          get the information if the document is encrypted.
+ booleanopen(java.lang.String strFilename, + java.lang.String strPassword) + +
+          open a PDF random access disk file
+ booleanopenMem(byte[] pDocumentBytes, + java.lang.String szPassword) + +
+          open a PDF memory block
+ booleansetPageNo(int iPageNo) + +
+          set the currently selected page of an open document.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Document

+
+public Document()
+
+
Deprecated. replaced by Document(String, String) and Document(byte[], String) +

+

+
+ +

+Document

+
+public Document(java.lang.String strFilename,
+                java.lang.String strPassword)
+
+
+
+ +

+Document

+
+public Document(byte[] pDocumentBytes,
+                java.lang.String szPassword)
+
+
+ + + + + + + + +
+Method Detail
+ +

+destroyObject

+
+public void destroyObject()
+
+
Release handle for the process. +

+

+
+
+
+
+ +

+open

+
+public boolean open(java.lang.String strFilename,
+                    java.lang.String strPassword)
+
+
open a PDF random access disk file +

+

+
Parameters:
strFilename - the file name and optionally the file path
strPassword - the user or the owner password of the encrypted PDF document +
Returns:
true if the file could successfully be opened
+
+
+
+ +

+openMem

+
+public boolean openMem(byte[] pDocumentBytes,
+                       java.lang.String szPassword)
+
+
open a PDF memory block +

+

+
Parameters:
pDocumentBytes - the memory block containing the PDF file given as a one dimensional byte array
strPassword - the user or the owner password of the encrypted PDF document +
Returns:
true if the file could successfully be opened
+
+
+
+ +

+close

+
+public void close()
+
+
close an open document. If the document is already closed the method does nothing +

+

+
+
+
+
+ +

+getLastError

+
+public int getLastError()
+
+
get the latest error code. +

+

+ +
Returns:
the latest error code.
+
+
+
+ +

+isEncrypted

+
+public boolean isEncrypted()
+
+
get the information if the document is encrypted. +

+

+ +
Returns:
true if the PDF document is encrypted.
+
+
+
+ +

+getMajorVersion

+
+public int getMajorVersion()
+
+
get the major version of the document. +

+

+ +
Returns:
the major version of the document.
+
+
+
+ +

+getMinorVersion

+
+public int getMinorVersion()
+
+
get the minor version of the document. +

+

+ +
Returns:
the Minor version of the document.
+
+
+
+ +

+getTitle

+
+public java.lang.String getTitle()
+
+
get the title of the document. +

+

+ +
Returns:
the title from the documents info object.
+
+
+
+ +

+getAuthor

+
+public java.lang.String getAuthor()
+
+
get the Author of the document. +

+

+ +
Returns:
the Author from the documents info object.
+
+
+
+ +

+getSubject

+
+public java.lang.String getSubject()
+
+
get the subject of the document. +

+

+ +
Returns:
the Subject from the documents info object.
+
+
+
+ +

+getKeywords

+
+public java.lang.String getKeywords()
+
+
get the keywords of the document. +

+

+ +
Returns:
the Keywords from the documents info object.
+
+
+
+ +

+getModDate

+
+public java.util.Date getModDate()
+
+
get the modification date of the document. +

+

+ +
Returns:
the modification date from the documents info object.
+
+
+
+ +

+getCreationDate

+
+public java.util.Date getCreationDate()
+
+
get the creation date of the document. +

+

+ +
Returns:
the creation date from the documents info object.
+
+
+
+ +

+getInfoEntry

+
+public java.lang.String getInfoEntry(java.lang.String strkey)
+
+
get the value of a custom entry of the document. +

+

+ +
Returns:
the value of a custom entry from the info object.
+
+
+
+ +

+getPageCount

+
+public int getPageCount()
+
+
get the number of pages of an open document +

+

+ +
Returns:
the number of pages of an open document
+
+
+
+ +

+setPageNo

+
+public boolean setPageNo(int iPageNo)
+
+
set the currently selected page of an open document. + The numbers are counted from 1 for the first page to the value of the PageCount + attribute for the last page. +

+

+
Parameters:
iPageNo - the page no to be set +
Returns:
true on success
+
+
+
+ +

+getPageNo

+
+public int getPageNo()
+
+
get the currently selected page of an open document. + The numbers are counted from 1 for the first page to the value of the PageCount + attribute for the last page. +

+

+ +
Returns:
the page no
+
+
+
+ +

+getPage

+
+public Page getPage()
+
+
get the page interface. +

+

+ +
Returns:
an interface to the currently selected page of a document.
+
+
+
+ +

+getFirstFontResource

+
+public Font getFirstFontResource()
+
+
get the first font resource. +

+

+ +
Returns:
in interface the first font resource.
+
+
+
+ +

+getNextFontResource

+
+public Font getNextFontResource()
+
+
get the next font resource. +

+

+ +
Returns:
in interface the next font resource.
+
+
+
+ +

+getFirstImageResource

+
+public Image getFirstImageResource()
+
+
get the first image resource. +

+

+ +
Returns:
in interface the first image resource.
+
+
+
+ +

+getNextImageResource

+
+public Image getNextImageResource()
+
+
get the next image resource. +

+

+ +
Returns:
in interface the next image resource.
+
+
+
+ +

+getFirstColorSpaceResource

+
+public ColorSpace getFirstColorSpaceResource()
+
+
get the first color space resource +

+

+ +
Returns:
in interface the first color space resource
+
+
+
+ +

+getNextColorSpaceResource

+
+public ColorSpace getNextColorSpaceResource()
+
+
get the next color space resource +

+

+ +
Returns:
in interface the next color space resource
+
+
+
+ +

+getFirstOutlineItem

+
+public OutlineItem getFirstOutlineItem()
+
+
get the first outline item resource +

+

+ +
Returns:
in interface the first outline item resource
+
+
+
+ +

+getNextOutlineItem

+
+public OutlineItem getNextOutlineItem(int nMaxLevel,
+                                      boolean bReturnOpenOnly)
+
+
get the next outline item resource +

+

+
Parameters:
nMaxLevel - The maximum level of the depth of the oulines
bReturnOpenOnly - Return only outlines which are opened +
Returns:
in interface the next outline item resource
+
+
+
+ +

+getCurrentOutlineLevel

+
+public int getCurrentOutlineLevel()
+
+
get the level of the current outline +

+

+ +
Returns:
the level of the current outline
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.CONTENTOBJECT.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.CONTENTOBJECT.html new file mode 100644 index 0000000..b71385e --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.CONTENTOBJECT.html @@ -0,0 +1,312 @@ + + + + + + +ExpaInitialize.CONTENTOBJECT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class ExpaInitialize.CONTENTOBJECT

+
+java.lang.Object
+  extended by com.pdftools.expa.ExpaInitialize.CONTENTOBJECT
+
+
+
Enclosing class:
ExpaInitialize
+
+
+
+
public static class ExpaInitialize.CONTENTOBJECT
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static inteImage + +
+           
+static inteNone + +
+           
+static intePath + +
+           
+static inteText + +
+           
+  + + + + + + + + + + +
+Constructor Summary
ExpaInitialize.CONTENTOBJECT() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+eNone

+
+public static final int eNone
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eText

+
+public static final int eText
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eImage

+
+public static final int eImage
+
+
+
See Also:
Constant Field Values
+
+
+ +

+ePath

+
+public static final int ePath
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+ExpaInitialize.CONTENTOBJECT

+
+public ExpaInitialize.CONTENTOBJECT()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.ORIENTATION.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.ORIENTATION.html new file mode 100644 index 0000000..7f0ab34 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.ORIENTATION.html @@ -0,0 +1,384 @@ + + + + + + +ExpaInitialize.ORIENTATION + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class ExpaInitialize.ORIENTATION

+
+java.lang.Object
+  extended by com.pdftools.expa.ExpaInitialize.ORIENTATION
+
+
+
Enclosing class:
ExpaInitialize
+
+
+
+
public static class ExpaInitialize.ORIENTATION
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static inteOrientationBottomLeft + +
+           
+static inteOrientationBottomRight + +
+           
+static inteOrientationLeftBottom + +
+           
+static inteOrientationLeftTop + +
+           
+static inteOrientationRightBottom + +
+           
+static inteOrientationRightTop + +
+           
+static inteOrientationTopLeft + +
+           
+static inteOrientationTopRight + +
+           
+  + + + + + + + + + + +
+Constructor Summary
ExpaInitialize.ORIENTATION() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+eOrientationTopLeft

+
+public static final int eOrientationTopLeft
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOrientationTopRight

+
+public static final int eOrientationTopRight
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOrientationBottomRight

+
+public static final int eOrientationBottomRight
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOrientationBottomLeft

+
+public static final int eOrientationBottomLeft
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOrientationLeftTop

+
+public static final int eOrientationLeftTop
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOrientationRightTop

+
+public static final int eOrientationRightTop
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOrientationRightBottom

+
+public static final int eOrientationRightBottom
+
+
+
See Also:
Constant Field Values
+
+
+ +

+eOrientationLeftBottom

+
+public static final int eOrientationLeftBottom
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+ExpaInitialize.ORIENTATION

+
+public ExpaInitialize.ORIENTATION()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.Rectangle.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.Rectangle.html new file mode 100644 index 0000000..bad42d0 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.Rectangle.html @@ -0,0 +1,312 @@ + + + + + + +ExpaInitialize.Rectangle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class ExpaInitialize.Rectangle

+
+java.lang.Object
+  extended by com.pdftools.expa.ExpaInitialize.Rectangle
+
+
+
Enclosing class:
ExpaInitialize
+
+
+
+
public static class ExpaInitialize.Rectangle
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ floatbottom + +
+           
+ floatleft + +
+           
+ floatright + +
+           
+ floattop + +
+           
+  + + + + + + + + + + +
+Constructor Summary
ExpaInitialize.Rectangle() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+left

+
+public float left
+
+
+
+
+
+ +

+bottom

+
+public float bottom
+
+
+
+
+
+ +

+right

+
+public float right
+
+
+
+
+
+ +

+top

+
+public float top
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+ExpaInitialize.Rectangle

+
+public ExpaInitialize.Rectangle()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.TransformMatrix.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.TransformMatrix.html new file mode 100644 index 0000000..42685c0 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.TransformMatrix.html @@ -0,0 +1,492 @@ + + + + + + +ExpaInitialize.TransformMatrix + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class ExpaInitialize.TransformMatrix

+
+java.lang.Object
+  extended by com.pdftools.expa.ExpaInitialize.TransformMatrix
+
+
+
Enclosing class:
ExpaInitialize
+
+
+
+
public static class ExpaInitialize.TransformMatrix
extends java.lang.Object
+ + +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ floata + +
+           
+ floatb + +
+           
+ floatc + +
+           
+ floatd + +
+           
+ floate + +
+           
+ floatf + +
+           
+ intiOrientation + +
+           
+ floatRotation + +
+           
+ floatXScaling + +
+           
+ floatXSkew + +
+           
+ floatXTranslation + +
+           
+ floatYScaling + +
+           
+ floatYSkew + +
+           
+ floatYTranslation + +
+           
+  + + + + + + + + + + +
+Constructor Summary
ExpaInitialize.TransformMatrix() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+a

+
+public float a
+
+
+
+
+
+ +

+b

+
+public float b
+
+
+
+
+
+ +

+c

+
+public float c
+
+
+
+
+
+ +

+d

+
+public float d
+
+
+
+
+
+ +

+e

+
+public float e
+
+
+
+
+
+ +

+f

+
+public float f
+
+
+
+
+
+ +

+XSkew

+
+public float XSkew
+
+
+
+
+
+ +

+YSkew

+
+public float YSkew
+
+
+
+
+
+ +

+Rotation

+
+public float Rotation
+
+
+
+
+
+ +

+XTranslation

+
+public float XTranslation
+
+
+
+
+
+ +

+YTranslation

+
+public float YTranslation
+
+
+
+
+
+ +

+XScaling

+
+public float XScaling
+
+
+
+
+
+ +

+YScaling

+
+public float YScaling
+
+
+
+
+
+ +

+iOrientation

+
+public int iOrientation
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+ExpaInitialize.TransformMatrix

+
+public ExpaInitialize.TransformMatrix()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.html new file mode 100644 index 0000000..eb7b2e4 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/ExpaInitialize.html @@ -0,0 +1,296 @@ + + + + + + +ExpaInitialize + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class ExpaInitialize

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+
+
+
Direct Known Subclasses:
AlternateImage, AlternateImageArray, Annotation, ColorSpace, Content, Destination, Document, Font, GraphicsState, Image, OutlineItem, Page, Text
+
+
+
+
public class ExpaInitialize
extends NativeLibrary
+ + +

+The ExpaInitialize class provides the basic enums for the functions in the package. +

+ +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Nested Class Summary
+static classExpaInitialize.CONTENTOBJECT + +
+           
+static classExpaInitialize.ORIENTATION + +
+           
+static classExpaInitialize.Rectangle + +
+           
+static classExpaInitialize.TransformMatrix + +
+           
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + +
+Constructor Summary
ExpaInitialize() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ExpaInitialize

+
+public ExpaInitialize()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/Font.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/Font.html new file mode 100644 index 0000000..c9d3995 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/Font.html @@ -0,0 +1,732 @@ + + + + + + +Font + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class Font

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+          extended by com.pdftools.expa.Font
+
+
+
+
public class Font
extends ExpaInitialize
+ + +

+


+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.expa.ExpaInitialize
ExpaInitialize.CONTENTOBJECT, ExpaInitialize.ORIENTATION, ExpaInitialize.Rectangle, ExpaInitialize.TransformMatrix
+  + + + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + +
+Constructor Summary
Font() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ floatgetAscent() + +
+          get the Ascent value
+ floatgetAvgWidth() + +
+          get the average with of the glyphs in the font.
+ java.lang.StringgetBaseName() + +
+          get the Basename of the font.
+ float[]getBBox() + +
+          get the bounding box as array of four floats.
+ floatgetCapHeight() + +
+          get the height of the top of flat capital letters.
+ java.lang.StringgetCharSet() + +
+          get the list of character names defined in a font subset.
+ floatgetDescent() + +
+          get the Descent value.
+ java.lang.StringgetEncoding(int charIndex) + +
+          get the glyph name of each character
+ intgetFlags() + +
+          get the flags of the font.
+ byte[]getFontFile() + +
+          get a stream that contains a Type1 font program.
+ intgetFontFileType() + +
+          get the type of the font.
+ floatgetItalicAngle() + +
+          get the counterclockwise angle of the dominant vertical strokes of the font.
+ floatgetLeading() + +
+          get the desired spacing between baselines of consecutive lines of text.
+ floatgetMaxWidth() + +
+          get the maximum with of the glyphs in the font.
+ floatgetMissingWidth() + +
+          get the value for the missing width.
+ floatgetStemH() + +
+          get the vertical thickness of the dominant horizontal stems of the glyphs in the font.
+ floatgetStemV() + +
+          get the horizontal thickness of the dominant vertical stems of the glyphs in the font.
+ java.lang.StringgetType() + +
+          get the type of the font.
+ float[]getWidths() + +
+          get the character widths of the font.
+ floatgetXHeight() + +
+          get the maximum height of flat non-ascending lowercase letters
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Font

+
+public Font()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getType

+
+public java.lang.String getType()
+
+
get the type of the font. +

+

+ +
Returns:
the type of the font.
+
+
+
+ +

+getBaseName

+
+public java.lang.String getBaseName()
+
+
get the Basename of the font. +

+

+ +
Returns:
the Basename of the font.
+
+
+
+ +

+getWidths

+
+public float[] getWidths()
+
+
get the character widths of the font. +

+

+ +
Returns:
the character widths of the font. + there are 256 elements in the array that can directly be indexed + with the (unsigned) raw string character number.
+
+
+
+ +

+getEncoding

+
+public java.lang.String getEncoding(int charIndex)
+
+
get the glyph name of each character +

+

+ +
Returns:
the glyph name of each character with CharIndex running from 0 to LastChar-FirstChar
+
+
+
+ +

+getFlags

+
+public int getFlags()
+
+
get the flags of the font. +

+

+ +
Returns:
the flags of the font. + 1 FixedPitch All glyphs have the same width. + 2 Serif Glyphs have serifs. + 3 Symbolic The font contains characters outside the standard Latin character set. + 4 Script Glyphs resemble cursive handwriting. + 6 NonSymbolic Font uses standard Latin Characterset or a subset of it. + 7 Italic Glyphs are italic. + 17 AllCap Font has not lowercase letters. + 18 SmallCap Lowercase letters are small uppercase letters. + 19 ForceBold If set, bold glyphs are painted bold even at very small text size.
+
+
+
+ +

+getBBox

+
+public float[] getBBox()
+
+
get the bounding box as array of four floats. +

+

+ +
Returns:
the bounding box as array of four floats.
+
+
+
+ +

+getItalicAngle

+
+public float getItalicAngle()
+
+
get the counterclockwise angle of the dominant vertical strokes of the font. +

+

+ +
Returns:
the counterclockwise angle of the dominant vertical strokes of the font.
+
+
+
+ +

+getAscent

+
+public float getAscent()
+
+
get the Ascent value +

+

+ +
Returns:
the Ascent value. This value represents the maximum height above the baseline + reached by the glyphs in the font, excluding the height of glyphs for accented characters.
+
+
+
+ +

+getDescent

+
+public float getDescent()
+
+
get the Descent value. +

+

+ +
Returns:
the Descent value. This negative number represents the maximum + depth below the baseline reached by the glyphs in the font.
+
+
+
+ +

+getCapHeight

+
+public float getCapHeight()
+
+
get the height of the top of flat capital letters. +

+

+ +
Returns:
the height of the top of flat capital letters, measured from the baseline.
+
+
+
+ +

+getStemV

+
+public float getStemV()
+
+
get the horizontal thickness of the dominant vertical stems of the glyphs in the font. +

+

+ +
Returns:
the horizontal thickness of the dominant vertical stems of the glyphs in the font.
+
+
+
+ +

+getStemH

+
+public float getStemH()
+
+
get the vertical thickness of the dominant horizontal stems of the glyphs in the font. +

+

+
+
+
+
+ +

+getAvgWidth

+
+public float getAvgWidth()
+
+
get the average with of the glyphs in the font. +

+

+ +
Returns:
the average with of the glyphs in the font.
+
+
+
+ +

+getMaxWidth

+
+public float getMaxWidth()
+
+
get the maximum with of the glyphs in the font. +

+

+ +
Returns:
the maximum with of the glyphs in the font.
+
+
+
+ +

+getMissingWidth

+
+public float getMissingWidth()
+
+
get the value for the missing width. +

+

+ +
Returns:
the value of the width which is used for character codes for which the glyph + is missing in the font directorys Width array.
+
+
+
+ +

+getCharSet

+
+public java.lang.String getCharSet()
+
+
get the list of character names defined in a font subset. +

+

+ +
Returns:
a string listing the character names defined in a font subset. This property + is only useful for Type1 fonts.
+
+
+
+ +

+getFontFileType

+
+public int getFontFileType()
+
+
get the type of the font. +

+

+ +
Returns:
the type of the font.
+
+
+
+ +

+getFontFile

+
+public byte[] getFontFile()
+
+
get a stream that contains a Type1 font program. +

+

+ +
Returns:
a stream that contains a Type1 font program.
+
+
+
+ +

+getLeading

+
+public float getLeading()
+
+
get the desired spacing between baselines of consecutive lines of text. +

+

+ +
Returns:
the desired spacing between baselines of consecutive lines of text.
+
+
+
+ +

+getXHeight

+
+public float getXHeight()
+
+
get the maximum height of flat non-ascending lowercase letters +

+

+ +
Returns:
the maximum height of flat non-ascending lowercase letters (such as the letter x) measured + from the baseline.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/GraphicsState.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/GraphicsState.html new file mode 100644 index 0000000..573ec83 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/GraphicsState.html @@ -0,0 +1,792 @@ + + + + + + +GraphicsState + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class GraphicsState

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+          extended by com.pdftools.expa.GraphicsState
+
+
+
+
public class GraphicsState
extends ExpaInitialize
+ + +

+


+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.expa.ExpaInitialize
ExpaInitialize.CONTENTOBJECT, ExpaInitialize.ORIENTATION, ExpaInitialize.Rectangle, ExpaInitialize.TransformMatrix
+  + + + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + +
+Constructor Summary
GraphicsState() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ floatgetCharSpacing() + +
+          get current space between two characters.
+ ExpaInitialize.TransformMatrixgetCTM() + +
+          get current transform matrix.
+ float[]getDashArray() + +
+          get the dash array elements.
+ floatgetDashPhase() + +
+          get the dash phase of a line dash pattern.
+ intgetFillColorCMYK() + +
+          get the CMYK color quad for filling operations.
+ intgetFillColorRGB() + +
+          get the RGB color triple for filling operations.
+ ColorSpacegetFillColorSpace() + +
+          get current color space that is used for filling operations.
+ FontgetFont() + +
+          get the font information
+ floatgetFontSize() + +
+          get current font size for text strings.
+ floatgetHorizontalScaling() + +
+          get current horizontal scaling factor that describes the amount of horizontal stretching of a text string.
+ floatgetLeading() + +
+          get current leading (line spacing) of a text string.
+ intgetLineCap() + +
+          get line cap style.
+ intgetLineJoin() + +
+          get line join styles.
+ floatgetLineWidth() + +
+          get line width.
+ floatgetMiterLimit() + +
+          get the miter limit.
+ intgetStrokeColorCMYK() + +
+          get the CMYK color quad for stroking operations.
+ intgetStrokeColorRGB() + +
+          get the RGB color triple for stroking operations.
+ ColorSpacegetStrokeColorSpace() + +
+          get current color space that is used for stroking operations.
+ intgetTextKnockout() + +
+          get the text knockout flag.
+ intgetTextRenderingMode() + +
+          get a value that indicates whether the text should be stroked, filled, used as a clip path or some combination of the three.
+ floatgetTextRise() + +
+          get the information on by which amount the base line of the text is moved up or down.
+ floatgetWordSpacing() + +
+          get current space between two words.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+GraphicsState

+
+public GraphicsState()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getFont

+
+public Font getFont()
+
+
get the font information +

+

+ +
Returns:
the font information + The font information is valid for the current content extraction state. + Reading the next object might invalidate this object.
+
+
+
+ +

+getCTM

+
+public ExpaInitialize.TransformMatrix getCTM()
+
+
get current transform matrix. +

+

+ +
Returns:
an interface to the current transform matrix. The transform describes + the transformation of the graphic objects coordinates from user units to page + units including the effect of the page rotate attribute if requested.
+
+
+
+ +

+getStrokeColorSpace

+
+public ColorSpace getStrokeColorSpace()
+
+
get current color space that is used for stroking operations. +

+

+ +
Returns:
an interface to the current color space that is used for stroking operations. + The color space is used to interpret color values of the StrokeColor property.
+
+
+
+ +

+getFillColorSpace

+
+public ColorSpace getFillColorSpace()
+
+
get current color space that is used for filling operations. +

+

+ +
Returns:
an interface to the current color space that is used for filling operations. + The color space is used to interpret color values of the FillColor property.
+
+
+
+ +

+getStrokeColorRGB

+
+public int getStrokeColorRGB()
+
+
get the RGB color triple for stroking operations. +

+

+ +
Returns:
the RGB color triple for stroking operations. The color value is obtained by + converting the color values of the StrokeColor property by means the StrokeColorSpace. + The RGB triples are encoded using the following formula: Triple = ((R * 256) + G) * 256 + B.
+
+
+
+ +

+getFillColorRGB

+
+public int getFillColorRGB()
+
+
get the RGB color triple for filling operations. +

+

+ +
Returns:
the RGB color triple for filling operations. The color value is obtained by converting + the color values of the FillColor property by means the FillColor-Space. The RGB triples are + encoded using the following formula: Triple = ((R * 256) + G) * 256 + B
+
+
+
+ +

+getStrokeColorCMYK

+
+public int getStrokeColorCMYK()
+
+
get the CMYK color quad for stroking operations. +

+

+ +
Returns:
the CMYK color quad for stroking operations. The color value is obtained by converting + the color values of the StrokeColor property by means the StrokeColorSpace. The CMYK quads are + encoded using the following formula: Quad = (((C * 256) + M) * 256 + Y) * 256 + K.
+
+
+
+ +

+getFillColorCMYK

+
+public int getFillColorCMYK()
+
+
get the CMYK color quad for filling operations. +

+

+ +
Returns:
the CMYK color quad for filling operations. The color value is obtained by converting + the color values of the FillColor property by means the FillColorSpace. The CMYK quads are + encoded using the following formula: Quad = (((C * 256) + M) * 256 + Y) * 256 + K
+
+
+
+ +

+getCharSpacing

+
+public float getCharSpacing()
+
+
get current space between two characters. +

+

+ +
Returns:
the current space between two characters of a text string as a single precision real number + in text units.
+
+
+
+ +

+getWordSpacing

+
+public float getWordSpacing()
+
+
get current space between two words. +

+

+ +
Returns:
the current space between two words of a text string as a single precision real number in + text units.
+
+
+
+ +

+getHorizontalScaling

+
+public float getHorizontalScaling()
+
+
get current horizontal scaling factor that describes the amount of horizontal stretching of a text string. +

+

+ +
Returns:
the current horizontal scaling factor that describes the amount of horizontal stretching of + a text string. A value of greater than 1.0 stretches the string whereas a value of less than 1.0 lets + the string appear as condensed.
+
+
+
+ +

+getLeading

+
+public float getLeading()
+
+
get current leading (line spacing) of a text string. +

+

+ +
Returns:
the current leading (line spacing) of a text string as a single precision number in text units.
+
+
+
+ +

+getFontSize

+
+public float getFontSize()
+
+
get current font size for text strings. +

+

+ +
Returns:
the current font size for text strings as a single precision real number in text units.
+
+
+
+ +

+getTextRenderingMode

+
+public int getTextRenderingMode()
+
+
get a value that indicates whether the text should be stroked, filled, used as a clip path or some combination of the three. +

+

+ +
Returns:
a value that indicates whether the text should be stroked, filled, used as a clip path or + some combination of the three. + 0: Fill text. 1: Stroke text. 2: Fill, then stroke text. 3: Neither fill nor stroke text (invisible). + 4. Fill text and add path for clipping. 5: Stroke text and add path for clipping. + 6: Fill, then stroke text and add path for clipping. 7: Add path for clipping.
+
+
+
+ +

+getTextRise

+
+public float getTextRise()
+
+
get the information on by which amount the base line of the text is moved up or down. +

+

+ +
Returns:
a single precision real number in unscaled text units that indicates by which amount the base + line of the text is moved up or down. It is most commonly used to display subscripts and superscripts.
+
+
+
+ +

+getTextKnockout

+
+public int getTextKnockout()
+
+
get the text knockout flag. +

+

+ +
Returns:
the text knockout flag. This boolean flag determines what text elements are considered + elementary objects for purposes of color compositing in the transparent imaging model
+
+
+
+ +

+getLineWidth

+
+public float getLineWidth()
+
+
get line width. +

+

+ +
Returns:
a single precision real number in user units.
+
+
+
+ +

+getLineCap

+
+public int getLineCap()
+
+
get line cap style. +

+

+ +
Returns:
the line cap style. The line cap style specifies the shape to be used at the end of + open sub-paths and dashes when they are stroked. + 0: Butt cap 1: Round cap 2: Projecting square cap
+
+
+
+ +

+getLineJoin

+
+public int getLineJoin()
+
+
get line join styles. +

+

+ +
Returns:
the line join styles. The line join styles specifies the shape to be used at the corners + of paths that are stroked. + 0: Miter join 1: Round join 2: Bevel join
+
+
+
+ +

+getMiterLimit

+
+public float getMiterLimit()
+
+
get the miter limit. +

+

+ +
Returns:
the miter limit. The miter limit imposes a maximum on the ratio of the miter length to the + line width, which can be fairly large when two line segments meet at a sharp angle. When the limit + is exceeded, the join is converted from a miter to a bevel.
+
+
+
+ +

+getDashPhase

+
+public float getDashPhase()
+
+
get the dash phase of a line dash pattern. +

+

+ +
Returns:
the dash phase of a line dash pattern. The dash phase is the offset of the pattern and can + be larger as the pattern itself
+
+
+
+ +

+getDashArray

+
+public float[] getDashArray()
+
+
get the dash array elements. +

+

+ +
Returns:
the dash array elements.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/Image.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/Image.html new file mode 100644 index 0000000..60f2c77 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/Image.html @@ -0,0 +1,572 @@ + + + + + + +Image + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class Image

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+          extended by com.pdftools.expa.Image
+
+
+
+
public class Image
extends ExpaInitialize
+ + +

+


+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.expa.ExpaInitialize
ExpaInitialize.CONTENTOBJECT, ExpaInitialize.ORIENTATION, ExpaInitialize.Rectangle, ExpaInitialize.TransformMatrix
+  + + + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + +
+Constructor Summary
Image() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ booleanchangeOrientation(int iOrientation) + +
+          change image according to the specified orientation.
+ booleanconvertToRGB() + +
+          convert image to RGB;
+ AlternateImageArraygetAlternates() + +
+          get the alternative images.
+ intgetBitsPerComponent() + +
+          get the number of bits that are used to represent a single color component.
+ ColorSpacegetColorSpace() + +
+          get color space information for the image.
+ intgetHeight() + +
+          get the height of the image in pixels.
+ byte[]getImage() + +
+          get the Image in memory as byte array.
+ byte[]getMask() + +
+          get the images explicit mask.
+ byte[]getSamples() + +
+          get the images data samples in a byte array.
+ intgetWidth() + +
+          get the width of the image in pixels.
+ booleanstore(java.lang.String strFileName) + +
+          store image in a file without compression;
+ booleanstore(java.lang.String strFileName, + int iCompression) + +
+          store image in a file;
+ booleanstoreInMemory(java.lang.String strExtension, + int iCompression) + +
+          store image in Memory.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Image

+
+public Image()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getWidth

+
+public int getWidth()
+
+
get the width of the image in pixels. +

+

+ +
Returns:
the width of the image in pixels (also called samples). The unit of pixels can be converted + to a distance unit such as inch, millimeters etc. using a resolution value, i.e. 72 dpi (dots per inch).
+
+
+
+ +

+getHeight

+
+public int getHeight()
+
+
get the height of the image in pixels. +

+

+ +
Returns:
the height of the image in pixels (also called samples). The unit of pixels can be converted + to a distance unit such as inch, millimeters etc. using a resolution value, i.e. 72 dpi (dots per inch)
+
+
+
+ +

+getBitsPerComponent

+
+public int getBitsPerComponent()
+
+
get the number of bits that are used to represent a single color component. +

+

+ +
Returns:
the number of bits that are used to represent a single color component of an image sample.The number + of color components per image data sample can be retrieved through the images color space interface.
+
+
+
+ +

+getSamples

+
+public byte[] getSamples()
+
+
get the images data samples in a byte array. +

+

+ +
Returns:
the images data samples in a byte array. The sample data is ordered by line from top to bottom and + within a line from left to right. The lines are byte aligned. If the number of bits per component is less than + one byte then the samples are ordered beginning with the most significant bit first.
+
+
+
+ +

+getMask

+
+public byte[] getMask()
+
+
get the images explicit mask. +

+

+ +
Returns:
the images explicit mask if available. The masks sample data is organized the same way as the image + data except that the data contains one bit per pixel. A one bit indicates an opaque pixel and a zero bit indicates + a transparent pixel.
+
+
+
+ +

+getColorSpace

+
+public ColorSpace getColorSpace()
+
+
get color space information for the image. +

+

+ +
Returns:
color space information for the image.
+
+
+
+ +

+convertToRGB

+
+public boolean convertToRGB()
+
+
convert image to RGB; +

+

+ +
Returns:
non-zero on success; BitsPerComponent must be >= 8
+
+
+
+ +

+changeOrientation

+
+public boolean changeOrientation(int iOrientation)
+
+
change image according to the specified orientation. +

+

+
+
+
+
+ +

+store

+
+public boolean store(java.lang.String strFileName,
+                     int iCompression)
+
+
store image in a file; +

+

+
Parameters:
strFileName - The name of the disk file include path, drive.
iCompression - Compression type (refer to class COMPRESSION in NativeLibrary) +
Returns:
non-zero on success
+
+
+
+ +

+store

+
+public boolean store(java.lang.String strFileName)
+
+
store image in a file without compression; +

+

+
Parameters:
strFileName - The name of the disk file include path, drive. +
Returns:
non-zero on success
+
+
+
+ +

+storeInMemory

+
+public boolean storeInMemory(java.lang.String strExtension,
+                             int iCompression)
+
+
store image in Memory. +

+

+
Parameters:
strExtension - Extension of the image format.
iCompression - Compression type (refer to class COMPRESSION in NativeLibrary) +
Returns:
non-zero on success.
+
+
+
+ +

+getImage

+
+public byte[] getImage()
+
+
get the Image in memory as byte array. +

+

+ +
Returns:
the Image in memory as byte array.
+
+
+
+ +

+getAlternates

+
+public AlternateImageArray getAlternates()
+
+
get the alternative images. +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/OutlineItem.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/OutlineItem.html new file mode 100644 index 0000000..bf35ef9 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/OutlineItem.html @@ -0,0 +1,343 @@ + + + + + + +OutlineItem + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class OutlineItem

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+          extended by com.pdftools.expa.OutlineItem
+
+
+
+
public class OutlineItem
extends ExpaInitialize
+ + +

+


+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.expa.ExpaInitialize
ExpaInitialize.CONTENTOBJECT, ExpaInitialize.ORIENTATION, ExpaInitialize.Rectangle, ExpaInitialize.TransformMatrix
+  + + + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + +
+Constructor Summary
OutlineItem() + +
+           
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intgetCount() + +
+          get the number of children of the current outline.
+ DestinationgetDest() + +
+          get the destination.
+ java.lang.StringgetTitle() + +
+          get the title of the outline
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+OutlineItem

+
+public OutlineItem()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getTitle

+
+public java.lang.String getTitle()
+
+
get the title of the outline +

+

+ +
Returns:
the title of the outline
+
+
+
+ +

+getCount

+
+public int getCount()
+
+
get the number of children of the current outline. +

+

+ +
Returns:
the number of children of the current outline. A negative number means the child tree is not opened.
+
+
+
+ +

+getDest

+
+public Destination getDest()
+
+
get the destination. +

+

+ +
Returns:
an interface to the destination
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/Page.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/Page.html new file mode 100644 index 0000000..ebac688 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/Page.html @@ -0,0 +1,499 @@ + + + + + + +Page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class Page

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+          extended by com.pdftools.expa.Page
+
+
+
+
public class Page
extends ExpaInitialize
+ + +

+


+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.expa.ExpaInitialize
ExpaInitialize.CONTENTOBJECT, ExpaInitialize.ORIENTATION, ExpaInitialize.Rectangle, ExpaInitialize.TransformMatrix
+  + + + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + +
+Constructor Summary
Page() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ ExpaInitialize.RectanglegetArtBox() + +
+          get the art box rectangle.
+ ExpaInitialize.RectanglegetBleedBox() + +
+          get the bleed box rectangle.
+ ContentgetContent() + +
+          get the pages content stream.
+ ExpaInitialize.RectanglegetCropBox() + +
+          get the crop box rectangle.
+ DocumentgetDocument() + +
+          get the pages document.
+ AnnotationgetFirstAnnotation() + +
+          get the first annotation.
+ ExpaInitialize.RectanglegetMediaBox() + +
+          get the media box rectangle.
+ AnnotationgetNextAnnotation() + +
+          get the next annotation.
+ intgetRotate() + +
+          get the pages rotation value.
+ ExpaInitialize.RectanglegetTrimBox() + +
+          get the trim box rectangle.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Page

+
+public Page()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getDocument

+
+public Document getDocument()
+
+
get the pages document. +

+

+ +
Returns:
the interface to the pages document.
+
+
+
+ +

+getMediaBox

+
+public ExpaInitialize.Rectangle getMediaBox()
+
+
get the media box rectangle. +

+

+ +
Returns:
the media box rectangle given by the coordinates left, bottom, right, top.
+
+
+
+ +

+getCropBox

+
+public ExpaInitialize.Rectangle getCropBox()
+
+
get the crop box rectangle. +

+

+ +
Returns:
the crop box rectangle given by the coordinates left, bottom, right, top
+
+
+
+ +

+getBleedBox

+
+public ExpaInitialize.Rectangle getBleedBox()
+
+
get the bleed box rectangle. +

+

+ +
Returns:
the bleed box rectangle given by the coordinates left, bottom, right, top
+
+
+
+ +

+getTrimBox

+
+public ExpaInitialize.Rectangle getTrimBox()
+
+
get the trim box rectangle. +

+

+ +
Returns:
the trim box rectangle given by the coordinates left, bottom, right, top
+
+
+
+ +

+getArtBox

+
+public ExpaInitialize.Rectangle getArtBox()
+
+
get the art box rectangle. +

+

+ +
Returns:
the art box rectangle given by the coordinates left, bottom, right, top
+
+
+
+ +

+getRotate

+
+public int getRotate()
+
+
get the pages rotation value. +

+

+ +
Returns:
the pages rotation value. This value is used by viewer programs to turn the page by the + given number of degrees while displaying. A positive number turns the page clockwise. The value + must be a multiple of 90, i.e. valid values are -270, -180, -90, 0, 90, 180, 270
+
+
+
+ +

+getContent

+
+public Content getContent()
+
+
get the pages content stream. +

+

+ +
Returns:
an interface to the pages content stream.
+
+
+
+ +

+getFirstAnnotation

+
+public Annotation getFirstAnnotation()
+
+
get the first annotation. +

+

+ +
Returns:
an interface to the first annotation.
+
+
+
+ +

+getNextAnnotation

+
+public Annotation getNextAnnotation()
+
+
get the next annotation. +

+

+ +
Returns:
an interface to the next annotation.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/Text.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/Text.html new file mode 100644 index 0000000..9989d86 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/Text.html @@ -0,0 +1,453 @@ + + + + + + +Text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +com.pdftools.expa +
+Class Text

+
+java.lang.Object
+  extended by com.pdftools.NativeLibrary
+      extended by com.pdftools.expa.ExpaInitialize
+          extended by com.pdftools.expa.Text
+
+
+
+
public class Text
extends ExpaInitialize
+ + +

+


+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.expa.ExpaInitialize
ExpaInitialize.CONTENTOBJECT, ExpaInitialize.ORIENTATION, ExpaInitialize.Rectangle, ExpaInitialize.TransformMatrix
+  + + + + + + + + +
Nested classes/interfaces inherited from class com.pdftools.NativeLibrary
NativeLibrary.COLORCONVERSION, NativeLibrary.COLORSPACE, NativeLibrary.COMPRESSION, NativeLibrary.DITHERINGMODE, NativeLibrary.ERRORCODE, NativeLibrary.FONTTYPE, NativeLibrary.PERMISSION, NativeLibrary.RENDEREROPTION, NativeLibrary.RENDERINGMODE, NativeLibrary.ROTATEMODE, NativeLibrary.STRIPTYPE
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class com.pdftools.NativeLibrary
VERSION
+  + + + + + + + + + + +
+Constructor Summary
Text() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ float[]getBoundingBox() + +
+          get the smallest rectangle that encloses the text string.
+ floatgetFontSize() + +
+          get the font size in points.
+ floatgetRotation() + +
+          get the rotation of the text in rad units.
+ intgetStringLength() + +
+          get the number of characters contained in the text string.
+ java.lang.StringgetUnicodeString() + +
+          get the unicode string.
+ floatgetWidth() + +
+          get the width of the text in points.
+ float[]getXPos() + +
+          get the horizontal positions of the string in user coordinates.
+ float[]getYPos() + +
+          get the vertical positions of the string in user coordinates.
+ + + + + + + +
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+Text

+
+public Text()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getStringLength

+
+public int getStringLength()
+
+
get the number of characters contained in the text string. +

+

+ +
Returns:
the number of characters contained in the text string.
+
+
+
+ +

+getUnicodeString

+
+public java.lang.String getUnicodeString()
+
+
get the unicode string. +

+

+ +
Returns:
the unicode string, having getStringLength() elements, and terminated with 0x0000
+
+
+
+ +

+getXPos

+
+public float[] getXPos()
+
+
get the horizontal positions of the string in user coordinates. +

+

+ +
Returns:
the horizontal positions of the string in user coordinates.
+
+
+
+ +

+getYPos

+
+public float[] getYPos()
+
+
get the vertical positions of the string in user coordinates. +

+

+ +
Returns:
the vertical positions of the string in user coordinates.
+
+
+
+ +

+getFontSize

+
+public float getFontSize()
+
+
get the font size in points. +

+

+ +
Returns:
the font size in points.
+
+
+
+ +

+getWidth

+
+public float getWidth()
+
+
get the width of the text in points. +

+

+ +
Returns:
the width of the text in points.
+
+
+
+ +

+getRotation

+
+public float getRotation()
+
+
get the rotation of the text in rad units. +

+

+ +
Returns:
the rotation of the text in rad units.
+
+
+
+ +

+getBoundingBox

+
+public float[] getBoundingBox()
+
+
get the smallest rectangle that encloses the text string. +

+

+ +
Returns:
the smallest rectangle that encloses the text string.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/package-frame.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/package-frame.html new file mode 100644 index 0000000..df2f858 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/package-frame.html @@ -0,0 +1,66 @@ + + + + + + +com.pdftools.expa + + + + + + + + + + + +com.pdftools.expa + + + + +
+Classes  + +
+AlternateImage +
+AlternateImageArray +
+Annotation +
+ColorSpace +
+Content +
+Destination +
+Document +
+ExpaInitialize +
+ExpaInitialize.CONTENTOBJECT +
+ExpaInitialize.ORIENTATION +
+ExpaInitialize.Rectangle +
+ExpaInitialize.TransformMatrix +
+Font +
+GraphicsState +
+Image +
+OutlineItem +
+Page +
+Text
+ + + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/package-summary.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/package-summary.html new file mode 100644 index 0000000..606f313 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/package-summary.html @@ -0,0 +1,220 @@ + + + + + + +com.pdftools.expa + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package com.pdftools.expa +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
AlternateImage 
AlternateImageArray 
Annotation 
ColorSpace 
ContentThe Content object provides information about the content of a PDF page.
Destination 
Document 
ExpaInitializeThe ExpaInitialize class provides the basic enums for the functions in the package.
ExpaInitialize.CONTENTOBJECT 
ExpaInitialize.ORIENTATION 
ExpaInitialize.Rectangle 
ExpaInitialize.TransformMatrix 
Font 
GraphicsState 
Image 
OutlineItem 
Page 
Text 
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/expa/package-tree.html b/Scraping/COM/doc/javadoc/com/pdftools/expa/package-tree.html new file mode 100644 index 0000000..2e3bfd3 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/expa/package-tree.html @@ -0,0 +1,151 @@ + + + + + + +com.pdftools.expa Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package com.pdftools.expa +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/package-frame.html b/Scraping/COM/doc/javadoc/com/pdftools/package-frame.html new file mode 100644 index 0000000..e772a63 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/package-frame.html @@ -0,0 +1,54 @@ + + + + + + +com.pdftools + + + + + + + + + + + +com.pdftools + + + + +
+Classes  + +
+NativeLibrary +
+NativeLibrary.COLORCONVERSION +
+NativeLibrary.COLORSPACE +
+NativeLibrary.COMPRESSION +
+NativeLibrary.DITHERINGMODE +
+NativeLibrary.ERRORCODE +
+NativeLibrary.FONTTYPE +
+NativeLibrary.PERMISSION +
+NativeLibrary.RENDEREROPTION +
+NativeLibrary.RENDERINGMODE +
+NativeLibrary.ROTATEMODE +
+NativeLibrary.STRIPTYPE
+ + + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/package-summary.html b/Scraping/COM/doc/javadoc/com/pdftools/package-summary.html new file mode 100644 index 0000000..28ba53b --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/package-summary.html @@ -0,0 +1,196 @@ + + + + + + +com.pdftools + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package com.pdftools +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
NativeLibraryThe NativeLibrary class provides the basic enums for the functions in the java package.
NativeLibrary.COLORCONVERSION 
NativeLibrary.COLORSPACE 
NativeLibrary.COMPRESSION 
NativeLibrary.DITHERINGMODE 
NativeLibrary.ERRORCODE 
NativeLibrary.FONTTYPE 
NativeLibrary.PERMISSION 
NativeLibrary.RENDEREROPTION 
NativeLibrary.RENDERINGMODE 
NativeLibrary.ROTATEMODE 
NativeLibrary.STRIPTYPE 
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/com/pdftools/package-tree.html b/Scraping/COM/doc/javadoc/com/pdftools/package-tree.html new file mode 100644 index 0000000..153b245 --- /dev/null +++ b/Scraping/COM/doc/javadoc/com/pdftools/package-tree.html @@ -0,0 +1,147 @@ + + + + + + +com.pdftools Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package com.pdftools +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/constant-values.html b/Scraping/COM/doc/javadoc/constant-values.html new file mode 100644 index 0000000..8626e57 --- /dev/null +++ b/Scraping/COM/doc/javadoc/constant-values.html @@ -0,0 +1,1098 @@ + + + + + + +Constant Field Values + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Constant Field Values

+
+
+Contents + + + + + + +
+com.pdftools.*
+ +

+ + + + + + + + + + + + +
com.pdftools.NativeLibrary
+public static final java.lang.StringVERSION"1.4.1.25"
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
com.pdftools.NativeLibrary.COLORCONVERSION
+public static final inteConvCMYK2
+public static final inteConvGray3
+public static final inteConvNone0
+public static final inteConvRGB1
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
com.pdftools.NativeLibrary.COLORSPACE
+public static final inteColorCMYK4
+public static final inteColorGray0
+public static final inteColorGrayA1
+public static final inteColorLAB8
+public static final inteColorOther9
+public static final inteColorPalette7
+public static final inteColorRGB2
+public static final inteColorRGBA3
+public static final inteColorYCbCr5
+public static final inteColorYCbCrK6
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
com.pdftools.NativeLibrary.COMPRESSION
+public static final inteComprFlate2
+public static final inteComprGroup34
+public static final inteComprGroup3_2D5
+public static final inteComprGroup46
+public static final inteComprJBIG27
+public static final inteComprJPEG1
+public static final inteComprJPEG20008
+public static final inteComprLZW3
+public static final inteComprRaw0
+public static final inteComprUnknown9
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
com.pdftools.NativeLibrary.DITHERINGMODE
+public static final inteDitherFloydSteinberg1
+public static final inteDitherG3Optimized4
+public static final inteDitherG4Optimized5
+public static final inteDitherHalftone2
+public static final inteDitherNone0
+public static final inteDitherPattern3
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
com.pdftools.NativeLibrary.ERRORCODE
+public static final intPDF_E_CHARPROC-2143219708
+public static final intPDF_E_CORRUPT-2143223786
+public static final intPDF_E_ENDOBJ-2143223768
+public static final intPDF_E_ENDSTREAM-2143223769
+public static final intPDF_E_EOF-2143223791
+public static final intPDF_E_FATAL-2143158273
+public static final intPDF_E_FILECREATE-2143223806
+public static final intPDF_E_FILEOPEN-2143223807
+public static final intPDF_E_FONTINSTALL-2143219706
+public static final intPDF_E_GENNO-2143223774
+public static final intPDF_E_HEADER-2143223792
+public static final intPDF_E_IDENTITY-2143223773
+public static final intPDF_E_LENGTH-2143223770
+public static final intPDF_E_NULL-2143223771
+public static final intPDF_E_OBJ-2143223772
+public static final intPDF_E_OBJNO-2143223775
+public static final intPDF_E_OPERANDS-2143223741
+public static final intPDF_E_OPERATOR-2143223742
+public static final intPDF_E_OPNDARRAY-2143223737
+public static final intPDF_E_OPNDDICT-2143223736
+public static final intPDF_E_OPNDNAME-2143223738
+public static final intPDF_E_OPNDNUMBER-2143223740
+public static final intPDF_E_OPNDSTRING-2143223739
+public static final intPDF_E_PAGE-2143223759
+public static final intPDF_E_PAGECOUNT-2143223756
+public static final intPDF_E_PAGEKIDS-2143223757
+public static final intPDF_E_PAGEMEDIABOX-2143223753
+public static final intPDF_E_PAGEPARENT-2143223755
+public static final intPDF_E_PAGERES-2143223754
+public static final intPDF_E_PAGETYPE-2143223758
+public static final intPDF_E_PAINTMISSING-2143219711
+public static final intPDF_E_PASSWORD-2143223787
+public static final intPDF_E_PATTERNTYPE-2143219710
+public static final intPDF_E_ROOT-2143223788
+public static final intPDF_E_SAMPLELENGTH-2143219709
+public static final intPDF_E_SETPOS-2143223805
+public static final intPDF_E_SHADINGTYPE-2143219707
+public static final intPDF_E_STANDARDFONT-2143219705
+public static final intPDF_E_TOKEN-2143223743
+public static final intPDF_E_TRAILER-2143223789
+public static final intPDF_E_UNKCOLORSPACE-2143223735
+public static final intPDF_E_XREF-2143223790
+public static final intPDF_I_OPEN4259841
+public static final intPDF_I_PAGE4259842
+public static final intPDF_S_SUCCESS0
+public static final intPDF_W_FONTREPLACE4263945
+public static final intPDF_W_SYSTEMFONT4263944
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
com.pdftools.NativeLibrary.FONTTYPE
+public static final inteFontCFF4
+public static final inteFontTrueType2
+public static final inteFontType11
+public static final inteFontType38
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
com.pdftools.NativeLibrary.PERMISSION
+public static final intePermAll3900
+public static final intePermAnnotate32
+public static final intePermAssemble1024
+public static final intePermCopy16
+public static final intePermDigitalPrint2048
+public static final intePermFillForms256
+public static final intePermModify8
+public static final intePermPrint4
+public static final intePermSupportDisabilities512
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
com.pdftools.NativeLibrary.RENDEREROPTION
+public static final inteOptionBanding8
+public static final inteOptionBicubic512
+public static final inteOptionBilinear256
+public static final inteOptionBitmap32
+public static final inteOptionHighQuality128
+public static final inteOptionJPEG1
+public static final inteOptionNoEmbedded1024
+public static final inteOptionOpenType8192
+public static final inteOptionOutlines4096
+public static final inteOptionPNG2
+public static final inteOptionTransparency4
+public static final inteOptionTrueType64
+public static final inteOptionType116
+public static final inteOptionWindows9x2048
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + +
com.pdftools.NativeLibrary.RENDERINGMODE
+public static final inteModeAccurate1
+public static final inteModeDirect2
+public static final inteModeFast0
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
com.pdftools.NativeLibrary.ROTATEMODE
+public static final inteRotateAttribute1
+public static final inteRotateLandscape3
+public static final inteRotateNone0
+public static final inteRotatePortrait2
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
com.pdftools.NativeLibrary.STRIPTYPE
+public static final inteStripMetadata2
+public static final inteStripPieceInfo4
+public static final inteStripSpider32
+public static final inteStripStructTree8
+public static final inteStripThreads1
+public static final inteStripThumb16
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
com.pdftools.expa.ExpaInitialize.CONTENTOBJECT
+public static final inteImage2
+public static final inteNone0
+public static final intePath3
+public static final inteText1
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
com.pdftools.expa.ExpaInitialize.ORIENTATION
+public static final inteOrientationBottomLeft4
+public static final inteOrientationBottomRight3
+public static final inteOrientationLeftBottom8
+public static final inteOrientationLeftTop5
+public static final inteOrientationRightBottom7
+public static final inteOrientationRightTop6
+public static final inteOrientationTopLeft1
+public static final inteOrientationTopRight2
+ +

+ +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/deprecated-list.html b/Scraping/COM/doc/javadoc/deprecated-list.html new file mode 100644 index 0000000..8b08a9e --- /dev/null +++ b/Scraping/COM/doc/javadoc/deprecated-list.html @@ -0,0 +1,155 @@ + + + + + + +Deprecated List + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Deprecated API

+
+
+Contents + + + + + + + + + +
+Deprecated Constructors
com.pdftools.expa.Document() +
+          replaced by Document.Document(String, String) and Document.Document(byte[], String) 
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/help-doc.html b/Scraping/COM/doc/javadoc/help-doc.html new file mode 100644 index 0000000..95d4756 --- /dev/null +++ b/Scraping/COM/doc/javadoc/help-doc.html @@ -0,0 +1,213 @@ + + + + + + +API Help + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+How This API Document Is Organized

+
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

+Overview

+
+ +

+The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

+

+Package

+
+ +

+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    +
  • Interfaces (italic)
  • Classes
  • Enums
  • Exceptions
  • Errors
  • Annotation Types
+
+

+Class/Interface

+
+ +

+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description +

    +

  • Nested Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary +

    +

  • Field Detail
  • Constructor Detail
  • Method Detail
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
+ +

+Annotation Type

+
+ +

+Each annotation type has its own separate page with the following sections:

    +
  • Annotation Type declaration
  • Annotation Type description
  • Required Element Summary
  • Optional Element Summary
  • Element Detail
+
+ +

+Enum

+
+ +

+Each enum has its own separate page with the following sections:

    +
  • Enum declaration
  • Enum description
  • Enum Constant Summary
  • Enum Constant Detail
+
+

+Tree (Class Hierarchy)

+
+There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
    +
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
+
+

+Deprecated API

+
+The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
+

+Index

+
+The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
+

+Prev/Next

+These links take you to the next or previous class, interface, package, or related page.

+Frames/No Frames

+These links show and hide the HTML frames. All pages are available with or without frames. +

+

+Serialized Form

+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. +

+

+Constant Field Values

+The Constant Field Values page lists the static final fields and their values. +

+ + +This help file applies to API documentation generated using the standard doclet. + +
+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/index-all.html b/Scraping/COM/doc/javadoc/index-all.html new file mode 100644 index 0000000..ad1920a --- /dev/null +++ b/Scraping/COM/doc/javadoc/index-all.html @@ -0,0 +1,1187 @@ + + + + + + +Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G I L N O P R S T V X Y
+

+A

+
+
a - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
AlternateImage - Class in com.pdftools.expa
 
AlternateImage() - +Constructor for class com.pdftools.expa.AlternateImage +
  +
AlternateImageArray - Class in com.pdftools.expa
 
AlternateImageArray() - +Constructor for class com.pdftools.expa.AlternateImageArray +
  +
Annotation - Class in com.pdftools.expa
 
Annotation() - +Constructor for class com.pdftools.expa.Annotation +
  +
+
+

+B

+
+
b - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
bottom - +Variable in class com.pdftools.expa.ExpaInitialize.Rectangle +
  +
+
+

+C

+
+
c - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
changeOrientation(int) - +Method in class com.pdftools.expa.Image +
change image according to the specified orientation. +
close() - +Method in class com.pdftools.expa.Document +
close an open document. +
ColorSpace - Class in com.pdftools.expa
 
ColorSpace() - +Constructor for class com.pdftools.expa.ColorSpace +
  +
com.pdftools - package com.pdftools
 
com.pdftools.expa - package com.pdftools.expa
 
Content - Class in com.pdftools.expa
The Content object provides information about the content of a PDF page.
Content() - +Constructor for class com.pdftools.expa.Content +
  +
convertToRGB() - +Method in class com.pdftools.expa.Image +
convert image to RGB; +
+
+

+D

+
+
d - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
Destination - Class in com.pdftools.expa
 
Destination() - +Constructor for class com.pdftools.expa.Destination +
  +
destroyObject() - +Method in class com.pdftools.expa.Document +
Release handle for the process. +
Document - Class in com.pdftools.expa
 
Document() - +Constructor for class com.pdftools.expa.Document +
Deprecated. replaced by Document.Document(String, String) and Document.Document(byte[], String) +
Document(String, String) - +Constructor for class com.pdftools.expa.Document +
  +
Document(byte[], String) - +Constructor for class com.pdftools.expa.Document +
  +
+
+

+E

+
+
e - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
eColorCMYK - +Static variable in class com.pdftools.NativeLibrary.COLORSPACE +
  +
eColorGray - +Static variable in class com.pdftools.NativeLibrary.COLORSPACE +
  +
eColorGrayA - +Static variable in class com.pdftools.NativeLibrary.COLORSPACE +
  +
eColorLAB - +Static variable in class com.pdftools.NativeLibrary.COLORSPACE +
  +
eColorOther - +Static variable in class com.pdftools.NativeLibrary.COLORSPACE +
  +
eColorPalette - +Static variable in class com.pdftools.NativeLibrary.COLORSPACE +
  +
eColorRGB - +Static variable in class com.pdftools.NativeLibrary.COLORSPACE +
  +
eColorRGBA - +Static variable in class com.pdftools.NativeLibrary.COLORSPACE +
  +
eColorYCbCr - +Static variable in class com.pdftools.NativeLibrary.COLORSPACE +
  +
eColorYCbCrK - +Static variable in class com.pdftools.NativeLibrary.COLORSPACE +
  +
eComprFlate - +Static variable in class com.pdftools.NativeLibrary.COMPRESSION +
  +
eComprGroup3 - +Static variable in class com.pdftools.NativeLibrary.COMPRESSION +
  +
eComprGroup3_2D - +Static variable in class com.pdftools.NativeLibrary.COMPRESSION +
  +
eComprGroup4 - +Static variable in class com.pdftools.NativeLibrary.COMPRESSION +
  +
eComprJBIG2 - +Static variable in class com.pdftools.NativeLibrary.COMPRESSION +
  +
eComprJPEG - +Static variable in class com.pdftools.NativeLibrary.COMPRESSION +
  +
eComprJPEG2000 - +Static variable in class com.pdftools.NativeLibrary.COMPRESSION +
  +
eComprLZW - +Static variable in class com.pdftools.NativeLibrary.COMPRESSION +
  +
eComprRaw - +Static variable in class com.pdftools.NativeLibrary.COMPRESSION +
  +
eComprUnknown - +Static variable in class com.pdftools.NativeLibrary.COMPRESSION +
  +
eConvCMYK - +Static variable in class com.pdftools.NativeLibrary.COLORCONVERSION +
  +
eConvGray - +Static variable in class com.pdftools.NativeLibrary.COLORCONVERSION +
  +
eConvNone - +Static variable in class com.pdftools.NativeLibrary.COLORCONVERSION +
  +
eConvRGB - +Static variable in class com.pdftools.NativeLibrary.COLORCONVERSION +
  +
eDitherFloydSteinberg - +Static variable in class com.pdftools.NativeLibrary.DITHERINGMODE +
  +
eDitherG3Optimized - +Static variable in class com.pdftools.NativeLibrary.DITHERINGMODE +
  +
eDitherG4Optimized - +Static variable in class com.pdftools.NativeLibrary.DITHERINGMODE +
  +
eDitherHalftone - +Static variable in class com.pdftools.NativeLibrary.DITHERINGMODE +
  +
eDitherNone - +Static variable in class com.pdftools.NativeLibrary.DITHERINGMODE +
  +
eDitherPattern - +Static variable in class com.pdftools.NativeLibrary.DITHERINGMODE +
  +
eFontCFF - +Static variable in class com.pdftools.NativeLibrary.FONTTYPE +
  +
eFontTrueType - +Static variable in class com.pdftools.NativeLibrary.FONTTYPE +
  +
eFontType1 - +Static variable in class com.pdftools.NativeLibrary.FONTTYPE +
  +
eFontType3 - +Static variable in class com.pdftools.NativeLibrary.FONTTYPE +
  +
eImage - +Static variable in class com.pdftools.expa.ExpaInitialize.CONTENTOBJECT +
  +
eModeAccurate - +Static variable in class com.pdftools.NativeLibrary.RENDERINGMODE +
  +
eModeDirect - +Static variable in class com.pdftools.NativeLibrary.RENDERINGMODE +
  +
eModeFast - +Static variable in class com.pdftools.NativeLibrary.RENDERINGMODE +
  +
eNone - +Static variable in class com.pdftools.expa.ExpaInitialize.CONTENTOBJECT +
  +
eOptionBanding - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOptionBicubic - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOptionBilinear - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOptionBitmap - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOptionHighQuality - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOptionJPEG - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOptionNoEmbedded - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOptionOpenType - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOptionOutlines - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOptionPNG - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOptionTransparency - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOptionTrueType - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOptionType1 - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOptionWindows9x - +Static variable in class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
eOrientationBottomLeft - +Static variable in class com.pdftools.expa.ExpaInitialize.ORIENTATION +
  +
eOrientationBottomRight - +Static variable in class com.pdftools.expa.ExpaInitialize.ORIENTATION +
  +
eOrientationLeftBottom - +Static variable in class com.pdftools.expa.ExpaInitialize.ORIENTATION +
  +
eOrientationLeftTop - +Static variable in class com.pdftools.expa.ExpaInitialize.ORIENTATION +
  +
eOrientationRightBottom - +Static variable in class com.pdftools.expa.ExpaInitialize.ORIENTATION +
  +
eOrientationRightTop - +Static variable in class com.pdftools.expa.ExpaInitialize.ORIENTATION +
  +
eOrientationTopLeft - +Static variable in class com.pdftools.expa.ExpaInitialize.ORIENTATION +
  +
eOrientationTopRight - +Static variable in class com.pdftools.expa.ExpaInitialize.ORIENTATION +
  +
ePath - +Static variable in class com.pdftools.expa.ExpaInitialize.CONTENTOBJECT +
  +
ePermAll - +Static variable in class com.pdftools.NativeLibrary.PERMISSION +
  +
ePermAnnotate - +Static variable in class com.pdftools.NativeLibrary.PERMISSION +
  +
ePermAssemble - +Static variable in class com.pdftools.NativeLibrary.PERMISSION +
  +
ePermCopy - +Static variable in class com.pdftools.NativeLibrary.PERMISSION +
  +
ePermDigitalPrint - +Static variable in class com.pdftools.NativeLibrary.PERMISSION +
  +
ePermFillForms - +Static variable in class com.pdftools.NativeLibrary.PERMISSION +
  +
ePermModify - +Static variable in class com.pdftools.NativeLibrary.PERMISSION +
  +
ePermPrint - +Static variable in class com.pdftools.NativeLibrary.PERMISSION +
  +
ePermSupportDisabilities - +Static variable in class com.pdftools.NativeLibrary.PERMISSION +
  +
eRotateAttribute - +Static variable in class com.pdftools.NativeLibrary.ROTATEMODE +
  +
eRotateLandscape - +Static variable in class com.pdftools.NativeLibrary.ROTATEMODE +
  +
eRotateNone - +Static variable in class com.pdftools.NativeLibrary.ROTATEMODE +
  +
eRotatePortrait - +Static variable in class com.pdftools.NativeLibrary.ROTATEMODE +
  +
eStripMetadata - +Static variable in class com.pdftools.NativeLibrary.STRIPTYPE +
  +
eStripPieceInfo - +Static variable in class com.pdftools.NativeLibrary.STRIPTYPE +
  +
eStripSpider - +Static variable in class com.pdftools.NativeLibrary.STRIPTYPE +
  +
eStripStructTree - +Static variable in class com.pdftools.NativeLibrary.STRIPTYPE +
  +
eStripThreads - +Static variable in class com.pdftools.NativeLibrary.STRIPTYPE +
  +
eStripThumb - +Static variable in class com.pdftools.NativeLibrary.STRIPTYPE +
  +
eText - +Static variable in class com.pdftools.expa.ExpaInitialize.CONTENTOBJECT +
  +
ExpaInitialize - Class in com.pdftools.expa
The ExpaInitialize class provides the basic enums for the functions in the package.
ExpaInitialize() - +Constructor for class com.pdftools.expa.ExpaInitialize +
  +
ExpaInitialize.CONTENTOBJECT - Class in com.pdftools.expa
 
ExpaInitialize.CONTENTOBJECT() - +Constructor for class com.pdftools.expa.ExpaInitialize.CONTENTOBJECT +
  +
ExpaInitialize.ORIENTATION - Class in com.pdftools.expa
 
ExpaInitialize.ORIENTATION() - +Constructor for class com.pdftools.expa.ExpaInitialize.ORIENTATION +
  +
ExpaInitialize.Rectangle - Class in com.pdftools.expa
 
ExpaInitialize.Rectangle() - +Constructor for class com.pdftools.expa.ExpaInitialize.Rectangle +
  +
ExpaInitialize.TransformMatrix - Class in com.pdftools.expa
 
ExpaInitialize.TransformMatrix() - +Constructor for class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
+
+

+F

+
+
f - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
Font - Class in com.pdftools.expa
 
Font() - +Constructor for class com.pdftools.expa.Font +
  +
+
+

+G

+
+
getAlternates() - +Method in class com.pdftools.expa.Image +
get the alternative images. +
getArtBox() - +Method in class com.pdftools.expa.Page +
get the art box rectangle. +
getAscent() - +Method in class com.pdftools.expa.Font +
get the Ascent value +
getAuthor() - +Method in class com.pdftools.expa.Document +
get the Author of the document. +
getAvgWidth() - +Method in class com.pdftools.expa.Font +
get the average with of the glyphs in the font. +
getBaseColorSpace() - +Method in class com.pdftools.expa.ColorSpace +
get an ColorSpace interface to the base color space. +
getBaseName() - +Method in class com.pdftools.expa.Font +
get the Basename of the font. +
getBBox() - +Method in class com.pdftools.expa.Font +
get the bounding box as array of four floats. +
getBitsPerComponent() - +Method in class com.pdftools.expa.Image +
get the number of bits that are used to represent a single color component. +
getBleedBox() - +Method in class com.pdftools.expa.Page +
get the bleed box rectangle. +
getBottom() - +Method in class com.pdftools.expa.Destination +
get the bottom value. +
getBoundingBox() - +Method in class com.pdftools.expa.Text +
get the smallest rectangle that encloses the text string. +
getCapHeight() - +Method in class com.pdftools.expa.Font +
get the height of the top of flat capital letters. +
getCharSet() - +Method in class com.pdftools.expa.Font +
get the list of character names defined in a font subset. +
getCharSpacing() - +Method in class com.pdftools.expa.GraphicsState +
get current space between two characters. +
getColor() - +Method in class com.pdftools.expa.Annotation +
get the color of the annotation. +
getColorSpace() - +Method in class com.pdftools.expa.Image +
get color space information for the image. +
getComponentsPerPixel() - +Method in class com.pdftools.expa.ColorSpace +
get the number of components per pixel. +
getContent() - +Method in class com.pdftools.expa.Page +
get the pages content stream. +
getContents() - +Method in class com.pdftools.expa.Annotation +
get the content of the annotation. +
getCount() - +Method in class com.pdftools.expa.AlternateImageArray +
get the number of alternate images in the alternate image array. +
getCount() - +Method in class com.pdftools.expa.OutlineItem +
get the number of children of the current outline. +
getCreationDate() - +Method in class com.pdftools.expa.Document +
get the creation date of the document. +
getCropBox() - +Method in class com.pdftools.expa.Page +
get the crop box rectangle. +
getCTM() - +Method in class com.pdftools.expa.GraphicsState +
get current transform matrix. +
getCurrentOutlineLevel() - +Method in class com.pdftools.expa.Document +
get the level of the current outline +
getDashArray() - +Method in class com.pdftools.expa.GraphicsState +
get the dash array elements. +
getDashPhase() - +Method in class com.pdftools.expa.GraphicsState +
get the dash phase of a line dash pattern. +
getDate() - +Method in class com.pdftools.expa.Annotation +
get the date of the annotation. +
getDefaultForPrinting() - +Method in class com.pdftools.expa.AlternateImage +
get the default setting for printing. +
getDescent() - +Method in class com.pdftools.expa.Font +
get the Descent value. +
getDest() - +Method in class com.pdftools.expa.OutlineItem +
get the destination. +
getDocument() - +Method in class com.pdftools.expa.Page +
get the pages document. +
getElement(int) - +Method in class com.pdftools.expa.AlternateImageArray +
get an alternate image from the alternate image array. +
getEncoding(int) - +Method in class com.pdftools.expa.Font +
get the glyph name of each character +
getFillColorCMYK() - +Method in class com.pdftools.expa.GraphicsState +
get the CMYK color quad for filling operations. +
getFillColorRGB() - +Method in class com.pdftools.expa.GraphicsState +
get the RGB color triple for filling operations. +
getFillColorSpace() - +Method in class com.pdftools.expa.GraphicsState +
get current color space that is used for filling operations. +
getFirstAnnotation() - +Method in class com.pdftools.expa.Page +
get the first annotation. +
getFirstColorSpaceResource() - +Method in class com.pdftools.expa.Document +
get the first color space resource +
getFirstFontResource() - +Method in class com.pdftools.expa.Document +
get the first font resource. +
getFirstImageResource() - +Method in class com.pdftools.expa.Document +
get the first image resource. +
getFirstOutlineItem() - +Method in class com.pdftools.expa.Document +
get the first outline item resource +
getFlags() - +Method in class com.pdftools.expa.Annotation +
get the flags of the annotation. +
getFlags() - +Method in class com.pdftools.expa.Content +
Get the annotation flags (-1: page content). +
getFlags() - +Method in class com.pdftools.expa.Font +
get the flags of the font. +
getFont() - +Method in class com.pdftools.expa.GraphicsState +
get the font information +
getFontFile() - +Method in class com.pdftools.expa.Font +
get a stream that contains a Type1 font program. +
getFontFileType() - +Method in class com.pdftools.expa.Font +
get the type of the font. +
getFontSize() - +Method in class com.pdftools.expa.GraphicsState +
get current font size for text strings. +
getFontSize() - +Method in class com.pdftools.expa.Text +
get the font size in points. +
getGraphicsState() - +Method in class com.pdftools.expa.Content +
get current graphics state information; +
getHeight() - +Method in class com.pdftools.expa.Image +
get the height of the image in pixels. +
getHighIndex() - +Method in class com.pdftools.expa.ColorSpace +
get the information of the index values. +
getHorizontalScaling() - +Method in class com.pdftools.expa.GraphicsState +
get current horizontal scaling factor that describes the amount of horizontal stretching of a text string. +
getImage() - +Method in class com.pdftools.expa.AlternateImage +
get an interface to the alternate image. +
getImage() - +Method in class com.pdftools.expa.Content +
get the image data. +
getImage() - +Method in class com.pdftools.expa.Image +
get the Image in memory as byte array. +
getInfoEntry(String) - +Method in class com.pdftools.expa.Document +
get the value of a custom entry of the document. +
getItalicAngle() - +Method in class com.pdftools.expa.Font +
get the counterclockwise angle of the dominant vertical strokes of the font. +
getKeywords() - +Method in class com.pdftools.expa.Document +
get the keywords of the document. +
getLastError() - +Method in class com.pdftools.expa.Document +
get the latest error code. +
getLeading() - +Method in class com.pdftools.expa.Font +
get the desired spacing between baselines of consecutive lines of text. +
getLeading() - +Method in class com.pdftools.expa.GraphicsState +
get current leading (line spacing) of a text string. +
getLeft() - +Method in class com.pdftools.expa.Destination +
get the Left value. +
getLineCap() - +Method in class com.pdftools.expa.GraphicsState +
get line cap style. +
getLineJoin() - +Method in class com.pdftools.expa.GraphicsState +
get line join styles. +
getLineWidth() - +Method in class com.pdftools.expa.GraphicsState +
get line width. +
getLookup() - +Method in class com.pdftools.expa.ColorSpace +
get the colorspace lookup data +
getMajorVersion() - +Method in class com.pdftools.expa.Document +
get the major version of the document. +
getMask() - +Method in class com.pdftools.expa.Image +
get the images explicit mask. +
getMaxWidth() - +Method in class com.pdftools.expa.Font +
get the maximum with of the glyphs in the font. +
getMediaBox() - +Method in class com.pdftools.expa.Page +
get the media box rectangle. +
getMinorVersion() - +Method in class com.pdftools.expa.Document +
get the minor version of the document. +
getMissingWidth() - +Method in class com.pdftools.expa.Font +
get the value for the missing width. +
getMiterLimit() - +Method in class com.pdftools.expa.GraphicsState +
get the miter limit. +
getModDate() - +Method in class com.pdftools.expa.Document +
get the modification date of the document. +
getName() - +Method in class com.pdftools.expa.Annotation +
get the name of the annotation. +
getName() - +Method in class com.pdftools.expa.ColorSpace +
get the name of the color space. +
getNextAnnotation() - +Method in class com.pdftools.expa.Page +
get the next annotation. +
getNextColorSpaceResource() - +Method in class com.pdftools.expa.Document +
get the next color space resource +
getNextFontResource() - +Method in class com.pdftools.expa.Document +
get the next font resource. +
getNextImage() - +Method in class com.pdftools.expa.Content +
get the next image in the content stream +
getNextImageResource() - +Method in class com.pdftools.expa.Document +
get the next image resource. +
getNextObject() - +Method in class com.pdftools.expa.Content +
get the information of which type of content object retrieved. +
getNextOutlineItem(int, boolean) - +Method in class com.pdftools.expa.Document +
get the next outline item resource +
getNextPath() - +Method in class com.pdftools.expa.Content +
get the next path in the content stream +
getNextText() - +Method in class com.pdftools.expa.Content +
get the next text in the content stream +
getPage() - +Method in class com.pdftools.expa.Document +
get the page interface. +
getPageCount() - +Method in class com.pdftools.expa.Document +
get the number of pages of an open document +
getPageNo() - +Method in class com.pdftools.expa.Destination +
get page number. +
getPageNo() - +Method in class com.pdftools.expa.Document +
get the currently selected page of an open document. +
getPath() - +Method in class com.pdftools.expa.Content +
get the content stream making up the current path +
getRect() - +Method in class com.pdftools.expa.Annotation +
get the rectangle of the annotation. +
getRight() - +Method in class com.pdftools.expa.Destination +
get the Right value. +
getRotate() - +Method in class com.pdftools.expa.Page +
get the pages rotation value. +
getRotation() - +Method in class com.pdftools.expa.Text +
get the rotation of the text in rad units. +
getSamples() - +Method in class com.pdftools.expa.Image +
get the images data samples in a byte array. +
getStemH() - +Method in class com.pdftools.expa.Font +
get the vertical thickness of the dominant horizontal stems of the glyphs in the font. +
getStemV() - +Method in class com.pdftools.expa.Font +
get the horizontal thickness of the dominant vertical stems of the glyphs in the font. +
getStringLength() - +Method in class com.pdftools.expa.Text +
get the number of characters contained in the text string. +
getStrokeColorCMYK() - +Method in class com.pdftools.expa.GraphicsState +
get the CMYK color quad for stroking operations. +
getStrokeColorRGB() - +Method in class com.pdftools.expa.GraphicsState +
get the RGB color triple for stroking operations. +
getStrokeColorSpace() - +Method in class com.pdftools.expa.GraphicsState +
get current color space that is used for stroking operations. +
getSubject() - +Method in class com.pdftools.expa.Document +
get the subject of the document. +
getSubtype() - +Method in class com.pdftools.expa.Annotation +
get the type of the annotation. +
getText() - +Method in class com.pdftools.expa.Content +
get current text item. +
getTextKnockout() - +Method in class com.pdftools.expa.GraphicsState +
get the text knockout flag. +
getTextLabel() - +Method in class com.pdftools.expa.Annotation +
get the label of the text annotation. +
getTextRenderingMode() - +Method in class com.pdftools.expa.GraphicsState +
get a value that indicates whether the text should be stroked, filled, used as a clip path or some combination of the three. +
getTextRise() - +Method in class com.pdftools.expa.GraphicsState +
get the information on by which amount the base line of the text is moved up or down. +
getTitle() - +Method in class com.pdftools.expa.Document +
get the title of the document. +
getTitle() - +Method in class com.pdftools.expa.OutlineItem +
get the title of the outline +
getTop() - +Method in class com.pdftools.expa.Destination +
get the Top value. +
getTrimBox() - +Method in class com.pdftools.expa.Page +
get the trim box rectangle. +
getType() - +Method in class com.pdftools.expa.Destination +
get the type of the destination. +
getType() - +Method in class com.pdftools.expa.Font +
get the type of the font. +
getUnicodeString() - +Method in class com.pdftools.expa.Text +
get the unicode string. +
getWidth() - +Method in class com.pdftools.expa.Image +
get the width of the image in pixels. +
getWidth() - +Method in class com.pdftools.expa.Text +
get the width of the text in points. +
getWidths() - +Method in class com.pdftools.expa.Font +
get the character widths of the font. +
getWordSpacing() - +Method in class com.pdftools.expa.GraphicsState +
get current space between two words. +
getXHeight() - +Method in class com.pdftools.expa.Font +
get the maximum height of flat non-ascending lowercase letters +
getXPos() - +Method in class com.pdftools.expa.Text +
get the horizontal positions of the string in user coordinates. +
getYPos() - +Method in class com.pdftools.expa.Text +
get the vertical positions of the string in user coordinates. +
getZoom() - +Method in class com.pdftools.expa.Destination +
get the Zoom value of the destination. +
GraphicsState - Class in com.pdftools.expa
 
GraphicsState() - +Constructor for class com.pdftools.expa.GraphicsState +
  +
+
+

+I

+
+
Image - Class in com.pdftools.expa
 
Image() - +Constructor for class com.pdftools.expa.Image +
  +
iOrientation - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
isEncrypted() - +Method in class com.pdftools.expa.Document +
get the information if the document is encrypted. +
isIndexed() - +Method in class com.pdftools.expa.ColorSpace +
get the information if the color space is indexed. +
+
+

+L

+
+
left - +Variable in class com.pdftools.expa.ExpaInitialize.Rectangle +
  +
+
+

+N

+
+
NativeLibrary - Class in com.pdftools
The NativeLibrary class provides the basic enums for the functions in the java package.
NativeLibrary() - +Constructor for class com.pdftools.NativeLibrary +
  +
NativeLibrary.COLORCONVERSION - Class in com.pdftools
 
NativeLibrary.COLORCONVERSION() - +Constructor for class com.pdftools.NativeLibrary.COLORCONVERSION +
  +
NativeLibrary.COLORSPACE - Class in com.pdftools
 
NativeLibrary.COLORSPACE() - +Constructor for class com.pdftools.NativeLibrary.COLORSPACE +
  +
NativeLibrary.COMPRESSION - Class in com.pdftools
 
NativeLibrary.COMPRESSION() - +Constructor for class com.pdftools.NativeLibrary.COMPRESSION +
  +
NativeLibrary.DITHERINGMODE - Class in com.pdftools
 
NativeLibrary.DITHERINGMODE() - +Constructor for class com.pdftools.NativeLibrary.DITHERINGMODE +
  +
NativeLibrary.ERRORCODE - Class in com.pdftools
 
NativeLibrary.ERRORCODE() - +Constructor for class com.pdftools.NativeLibrary.ERRORCODE +
  +
NativeLibrary.FONTTYPE - Class in com.pdftools
 
NativeLibrary.FONTTYPE() - +Constructor for class com.pdftools.NativeLibrary.FONTTYPE +
  +
NativeLibrary.PERMISSION - Class in com.pdftools
 
NativeLibrary.PERMISSION() - +Constructor for class com.pdftools.NativeLibrary.PERMISSION +
  +
NativeLibrary.RENDEREROPTION - Class in com.pdftools
 
NativeLibrary.RENDEREROPTION() - +Constructor for class com.pdftools.NativeLibrary.RENDEREROPTION +
  +
NativeLibrary.RENDERINGMODE - Class in com.pdftools
 
NativeLibrary.RENDERINGMODE() - +Constructor for class com.pdftools.NativeLibrary.RENDERINGMODE +
  +
NativeLibrary.ROTATEMODE - Class in com.pdftools
 
NativeLibrary.ROTATEMODE() - +Constructor for class com.pdftools.NativeLibrary.ROTATEMODE +
  +
NativeLibrary.STRIPTYPE - Class in com.pdftools
 
NativeLibrary.STRIPTYPE() - +Constructor for class com.pdftools.NativeLibrary.STRIPTYPE +
  +
+
+

+O

+
+
open(String, String) - +Method in class com.pdftools.expa.Document +
open a PDF random access disk file +
openMem(byte[], String) - +Method in class com.pdftools.expa.Document +
open a PDF memory block +
OutlineItem - Class in com.pdftools.expa
 
OutlineItem() - +Constructor for class com.pdftools.expa.OutlineItem +
  +
+
+

+P

+
+
Page - Class in com.pdftools.expa
 
Page() - +Constructor for class com.pdftools.expa.Page +
  +
PDF_E_CHARPROC - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_CORRUPT - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_ENDOBJ - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_ENDSTREAM - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_EOF - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_FATAL - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_FILECREATE - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_FILEOPEN - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_FONTINSTALL - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_GENNO - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_HEADER - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_IDENTITY - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_LENGTH - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_NULL - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_OBJ - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_OBJNO - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_OPERANDS - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_OPERATOR - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_OPNDARRAY - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_OPNDDICT - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_OPNDNAME - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_OPNDNUMBER - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_OPNDSTRING - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_PAGE - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_PAGECOUNT - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_PAGEKIDS - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_PAGEMEDIABOX - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_PAGEPARENT - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_PAGERES - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_PAGETYPE - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_PAINTMISSING - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_PASSWORD - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_PATTERNTYPE - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_ROOT - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_SAMPLELENGTH - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_SETPOS - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_SHADINGTYPE - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_STANDARDFONT - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_TOKEN - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_TRAILER - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_UNKCOLORSPACE - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_E_XREF - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_I_OPEN - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_I_PAGE - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_S_SUCCESS - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_W_FONTREPLACE - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
PDF_W_SYSTEMFONT - +Static variable in class com.pdftools.NativeLibrary.ERRORCODE +
  +
+
+

+R

+
+
reset(boolean) - +Method in class com.pdftools.expa.Content +
reset the content to the beginning to start another pass through all components. +
reset() - +Method in class com.pdftools.expa.Content +
reset the content to the beginning to start another pass through all components +
resetContent(boolean) - +Method in class com.pdftools.expa.Content +
reset the content to the beginning to start another pass through all components. +
right - +Variable in class com.pdftools.expa.ExpaInitialize.Rectangle +
  +
Rotation - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
+
+

+S

+
+
setBreakWords(int) - +Method in class com.pdftools.expa.Content +
Set break words to control the way how the text extraction algorithm works. +
setPageNo(int) - +Method in class com.pdftools.expa.Document +
set the currently selected page of an open document. +
store(String, int) - +Method in class com.pdftools.expa.Image +
store image in a file; +
store(String) - +Method in class com.pdftools.expa.Image +
store image in a file without compression; +
storeInMemory(String, int) - +Method in class com.pdftools.expa.Image +
store image in Memory. +
+
+

+T

+
+
Text - Class in com.pdftools.expa
 
Text() - +Constructor for class com.pdftools.expa.Text +
  +
top - +Variable in class com.pdftools.expa.ExpaInitialize.Rectangle +
  +
+
+

+V

+
+
VERSION - +Static variable in class com.pdftools.NativeLibrary +
  +
+
+

+X

+
+
XScaling - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
XSkew - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
XTranslation - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
+
+

+Y

+
+
YScaling - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
YSkew - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
YTranslation - +Variable in class com.pdftools.expa.ExpaInitialize.TransformMatrix +
  +
+
+A B C D E F G I L N O P R S T V X Y + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/index.html b/Scraping/COM/doc/javadoc/index.html new file mode 100644 index 0000000..bd3c296 --- /dev/null +++ b/Scraping/COM/doc/javadoc/index.html @@ -0,0 +1,37 @@ + + + + + + +Generated Documentation (Untitled) + + + + + + + + + + + +<H2> +Frame Alert</H2> + +<P> +This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. +<BR> +Link to<A HREF="overview-summary.html">Non-frame version.</A> + + + diff --git a/Scraping/COM/doc/javadoc/overview-frame.html b/Scraping/COM/doc/javadoc/overview-frame.html new file mode 100644 index 0000000..bb3f651 --- /dev/null +++ b/Scraping/COM/doc/javadoc/overview-frame.html @@ -0,0 +1,44 @@ + + + + + + +Overview + + + + + + + + + + + + + + + +
+
+ + + + + +
All Classes +

+ +Packages +
+com.pdftools +
+com.pdftools.expa +
+

+ +

+  + + diff --git a/Scraping/COM/doc/javadoc/overview-summary.html b/Scraping/COM/doc/javadoc/overview-summary.html new file mode 100644 index 0000000..dad1ed7 --- /dev/null +++ b/Scraping/COM/doc/javadoc/overview-summary.html @@ -0,0 +1,150 @@ + + + + + + +Overview + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +


+ + + + + + + + + + + + + +
+Packages
com.pdftools 
com.pdftools.expa 
+ +


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/overview-tree.html b/Scraping/COM/doc/javadoc/overview-tree.html new file mode 100644 index 0000000..398552b --- /dev/null +++ b/Scraping/COM/doc/javadoc/overview-tree.html @@ -0,0 +1,150 @@ + + + + + + +Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For All Packages

+
+
+
Package Hierarchies:
com.pdftools, com.pdftools.expa
+
+

+Class Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/Scraping/COM/doc/javadoc/package-list b/Scraping/COM/doc/javadoc/package-list new file mode 100644 index 0000000..d0373c3 --- /dev/null +++ b/Scraping/COM/doc/javadoc/package-list @@ -0,0 +1,2 @@ +com.pdftools +com.pdftools.expa diff --git a/Scraping/COM/doc/javadoc/resources/inherit.gif b/Scraping/COM/doc/javadoc/resources/inherit.gif new file mode 100644 index 0000000..c814867 Binary files /dev/null and b/Scraping/COM/doc/javadoc/resources/inherit.gif differ diff --git a/Scraping/COM/doc/javadoc/stylesheet.css b/Scraping/COM/doc/javadoc/stylesheet.css new file mode 100644 index 0000000..698336c --- /dev/null +++ b/Scraping/COM/doc/javadoc/stylesheet.css @@ -0,0 +1,67 @@ +body { color: #333333; font-weight: normal; font-size: 12px; font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; text-decoration: none; background-color: white } +a:hover { color: #006699; text-decoration: underline } +a:active { } +a { text-decoration: none; color: #0088c0 } +.caption { font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; font-weight: bold; color: white; padding: 0px; margin: 0px; border: none} +.image { font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; background-color: white } +.navigation { color: black; font-weight: bold; font-size: 12px; font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; background-color: #0080c0 } +.active { color: white; font-weight: bold; font-size: 12px; font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular } +.TableHeadingColor { color: #FFFFFF; background-color: #1975A3; } +.TableRowColor { color: #333333; background-color: #FFFFFF; } +.NavBarFont1Rev {color: #000000; background-color: #FFFFFF; } +.NavBarCell1 {color: #FFFFFF; background-color: #1975A3; } +.NavBarFont1 {color: #FFFFFF; background-color: #1975A3; } +.FrameItemFont { color: red; x:#333333; } + +.FrameHeadingFont {font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; font-size: 18px; } +H1 { font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; text-align: center; font-size: 18px; } +H2 { font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; font-size: 16px; } +H3 { font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; font-size: 14px; } +CAPTION { font-weight: bold } +A.qindex {} +A.qindexRef {} +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code { text-decoration: none; font-weight: 0088c0; ncolor: #0088c0 } +A.codeRef { font-weight: normal; ncolor: 0088c0 } + +DL.el { margin-left: -1cm } +DIV.fragment { width: 100%; border: none; background-color: #eeeeee } +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } +TD.md { background-color: #f2f2ff; font-weight: bold; } +TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; } +TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; } +DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold } +DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller } +BODY { background: white } +TD.indexkey { + background-color: #eeeeff; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px +} +TD.indexvalue { + background-color: #eeeeff; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px +} +span.keyword { color: #008000 } +span.keywordtype { color: #604020 } +span.keywordflow { color: #e08000 } +span.comment { color: #800000 } +span.preprocessor { color: #806020 } +span.stringliteral { color: #002080 } +span.charliteral { color: #008080 } diff --git a/Scraping/COM/doc/pdf-eval-license-v1.4.pdf b/Scraping/COM/doc/pdf-eval-license-v1.4.pdf new file mode 100644 index 0000000..4e5f813 Binary files /dev/null and b/Scraping/COM/doc/pdf-eval-license-v1.4.pdf differ diff --git a/Scraping/COM/doc/readme.txt b/Scraping/COM/doc/readme.txt new file mode 100644 index 0000000..606d8c5 --- /dev/null +++ b/Scraping/COM/doc/readme.txt @@ -0,0 +1,67 @@ +3-Heights(TM) PDF Export API +============================ + +Version 1.50 Pre-Release + +Copyright (C) 1995-2005 PDF Tools AG + +http://www.pdf-tools.com +pdfsupport@pdf-tools.com + + +Windows +======= + +File list +--------- +bin/PDFParser.dll Dynamic link library (required) +bin/pdcjk.dll This dll contains support for asian languages (optional) +bin/unicows.dll This dll contains the Microsoft Unicode Layer for Windows98 (required) +bin/Icc/*.* Color profiles (optional) +doc/pdf-license-v1.4.pdf License terms for binary pdf tools +doc/expa.pdf API documentation (COM API notation, semantics identical for all language bindings) +doc/EXPA130HTDoc.zip HTML documentation kit for the native (C) interface +doc/readme.txt This file +doc/PDFParser.idl COM interface definition (WIN32 kit only, for documentation purposes) +include/expa_c.h C header file +include/pdferror.h supplementary C header file containting error codes +jar/EXPA.jar Java interface classes archive +lib/PDFParser.lib Stub library for C Programs +samples/*.* VB sample project (WIN32 kit only) + + +Installation on Windows Systems for use with the COM API +-------------------------------------------------------- +1. Unpack the archive in an installation directory, i.e. C:/Program Files/pdf-tools/ +2. Register the dll, using the following command: + regsvr32.exe bin\PDFParser.dll + +Installation for use with the native C Interface and Java +--------------------------------------------------------- +1. Unpack the archive in an installation directory, i.e. C:/Program Files/pdf-tools/ +2. Add the bin directory to the PATH variable + +For Java, add the jar/EXPA.jar file to the CLASSPATH. + + + +Mac OSX +======= + +File list +--------- +bin/libPDFPARSER.dylib Dynamic Library +doc/expa.pdf API documentation +doc/EXPA130HTDoc.zip HTML documentation kit for the native (C) interface +doc/readme.txt This file +doc/license.pdf License terms for binary pdf tools +include/expa_c.h C header file +include/pdferror.h supplementary C header file containting error codes +jar/EXPA.jar Java interface classes archive + +Installation for use with the native C Interface and Java +--------------------------------------------------------- +1. Unpack the archive in an installation directory, i.e. /User/lib/pdf-tools +2. Add the directory containing libPDFPARSER.dylib to the DYLD_LIBRARY_PATH. + +For Java, rename the file libPDFPARSER.dylib to libPDFPARSER.jnilib, add the jar/EXPA.jar file to the CLASSPATH. \ No newline at end of file diff --git a/Scraping/COM/include/PDFParser.h b/Scraping/COM/include/PDFParser.h new file mode 100644 index 0000000..96f63f4 --- /dev/null +++ b/Scraping/COM/include/PDFParser.h @@ -0,0 +1,5474 @@ +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + +/* File created by MIDL compiler version 5.01.0164 */ +/* at Tue Dec 06 22:40:04 2005 + */ +/* Compiler settings for P:\PDF\1.4.1.25\PDFParser\PDFParser.idl: + Oicf (OptLev=i2), W1, Zp8, env=Win32, ms_ext, c_ext + error checks: allocation ref bounds_check enum stub_data +*/ +//@@MIDL_FILE_HEADING( ) + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 440 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __PDFParser_h__ +#define __PDFParser_h__ + +#ifdef __cplusplus +extern "C"{ +#endif + +/* Forward Declarations */ + +#ifndef __IPDFColorSpace_FWD_DEFINED__ +#define __IPDFColorSpace_FWD_DEFINED__ +typedef interface IPDFColorSpace IPDFColorSpace; +#endif /* __IPDFColorSpace_FWD_DEFINED__ */ + + +#ifndef __IPDFTransformMatrix_FWD_DEFINED__ +#define __IPDFTransformMatrix_FWD_DEFINED__ +typedef interface IPDFTransformMatrix IPDFTransformMatrix; +#endif /* __IPDFTransformMatrix_FWD_DEFINED__ */ + + +#ifndef __IPDFFont_FWD_DEFINED__ +#define __IPDFFont_FWD_DEFINED__ +typedef interface IPDFFont IPDFFont; +#endif /* __IPDFFont_FWD_DEFINED__ */ + + +#ifndef __IPDFGraphicsState_FWD_DEFINED__ +#define __IPDFGraphicsState_FWD_DEFINED__ +typedef interface IPDFGraphicsState IPDFGraphicsState; +#endif /* __IPDFGraphicsState_FWD_DEFINED__ */ + + +#ifndef __IPDFText_FWD_DEFINED__ +#define __IPDFText_FWD_DEFINED__ +typedef interface IPDFText IPDFText; +#endif /* __IPDFText_FWD_DEFINED__ */ + + +#ifndef __IPDFImage_FWD_DEFINED__ +#define __IPDFImage_FWD_DEFINED__ +typedef interface IPDFImage IPDFImage; +#endif /* __IPDFImage_FWD_DEFINED__ */ + + +#ifndef __IPDFAlternateImage_FWD_DEFINED__ +#define __IPDFAlternateImage_FWD_DEFINED__ +typedef interface IPDFAlternateImage IPDFAlternateImage; +#endif /* __IPDFAlternateImage_FWD_DEFINED__ */ + + +#ifndef __IPDFDocument_FWD_DEFINED__ +#define __IPDFDocument_FWD_DEFINED__ +typedef interface IPDFDocument IPDFDocument; +#endif /* __IPDFDocument_FWD_DEFINED__ */ + + +#ifndef __IPDFContent_FWD_DEFINED__ +#define __IPDFContent_FWD_DEFINED__ +typedef interface IPDFContent IPDFContent; +#endif /* __IPDFContent_FWD_DEFINED__ */ + + +#ifndef __IPDFAnnotation_FWD_DEFINED__ +#define __IPDFAnnotation_FWD_DEFINED__ +typedef interface IPDFAnnotation IPDFAnnotation; +#endif /* __IPDFAnnotation_FWD_DEFINED__ */ + + +#ifndef __IPDFPage_FWD_DEFINED__ +#define __IPDFPage_FWD_DEFINED__ +typedef interface IPDFPage IPDFPage; +#endif /* __IPDFPage_FWD_DEFINED__ */ + + +#ifndef __IPDFDestination_FWD_DEFINED__ +#define __IPDFDestination_FWD_DEFINED__ +typedef interface IPDFDestination IPDFDestination; +#endif /* __IPDFDestination_FWD_DEFINED__ */ + + +#ifndef __IPDFOutlineItem_FWD_DEFINED__ +#define __IPDFOutlineItem_FWD_DEFINED__ +typedef interface IPDFOutlineItem IPDFOutlineItem; +#endif /* __IPDFOutlineItem_FWD_DEFINED__ */ + + +#ifndef __ColorSpace_FWD_DEFINED__ +#define __ColorSpace_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class ColorSpace ColorSpace; +#else +typedef struct ColorSpace ColorSpace; +#endif /* __cplusplus */ + +#endif /* __ColorSpace_FWD_DEFINED__ */ + + +#ifndef __TransformMatrix_FWD_DEFINED__ +#define __TransformMatrix_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class TransformMatrix TransformMatrix; +#else +typedef struct TransformMatrix TransformMatrix; +#endif /* __cplusplus */ + +#endif /* __TransformMatrix_FWD_DEFINED__ */ + + +#ifndef __Font_FWD_DEFINED__ +#define __Font_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class Font Font; +#else +typedef struct Font Font; +#endif /* __cplusplus */ + +#endif /* __Font_FWD_DEFINED__ */ + + +#ifndef __Text_FWD_DEFINED__ +#define __Text_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class Text Text; +#else +typedef struct Text Text; +#endif /* __cplusplus */ + +#endif /* __Text_FWD_DEFINED__ */ + + +#ifndef __Image_FWD_DEFINED__ +#define __Image_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class Image Image; +#else +typedef struct Image Image; +#endif /* __cplusplus */ + +#endif /* __Image_FWD_DEFINED__ */ + + +#ifndef __GraphicsState_FWD_DEFINED__ +#define __GraphicsState_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class GraphicsState GraphicsState; +#else +typedef struct GraphicsState GraphicsState; +#endif /* __cplusplus */ + +#endif /* __GraphicsState_FWD_DEFINED__ */ + + +#ifndef __Content_FWD_DEFINED__ +#define __Content_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class Content Content; +#else +typedef struct Content Content; +#endif /* __cplusplus */ + +#endif /* __Content_FWD_DEFINED__ */ + + +#ifndef __Page_FWD_DEFINED__ +#define __Page_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class Page Page; +#else +typedef struct Page Page; +#endif /* __cplusplus */ + +#endif /* __Page_FWD_DEFINED__ */ + + +#ifndef __Document_FWD_DEFINED__ +#define __Document_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class Document Document; +#else +typedef struct Document Document; +#endif /* __cplusplus */ + +#endif /* __Document_FWD_DEFINED__ */ + + +#ifndef __AlternateImage_FWD_DEFINED__ +#define __AlternateImage_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class AlternateImage AlternateImage; +#else +typedef struct AlternateImage AlternateImage; +#endif /* __cplusplus */ + +#endif /* __AlternateImage_FWD_DEFINED__ */ + + +#ifndef __Annotation_FWD_DEFINED__ +#define __Annotation_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class Annotation Annotation; +#else +typedef struct Annotation Annotation; +#endif /* __cplusplus */ + +#endif /* __Annotation_FWD_DEFINED__ */ + + +#ifndef __OutlineItem_FWD_DEFINED__ +#define __OutlineItem_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class OutlineItem OutlineItem; +#else +typedef struct OutlineItem OutlineItem; +#endif /* __cplusplus */ + +#endif /* __OutlineItem_FWD_DEFINED__ */ + + +#ifndef __Destination_FWD_DEFINED__ +#define __Destination_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class Destination Destination; +#else +typedef struct Destination Destination; +#endif /* __cplusplus */ + +#endif /* __Destination_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "oaidl.h" +#include "ocidl.h" +#include "pdferror.h" +#include "pdfcodecdecl.h" +#include "pdfcommondecl.h" +#include "pdfcontentdecl.h" + +void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t); +void __RPC_USER MIDL_user_free( void __RPC_FAR * ); + + +#ifndef __PDFPARSERLib_LIBRARY_DEFINED__ +#define __PDFPARSERLib_LIBRARY_DEFINED__ + +/* library PDFPARSERLib */ +/* [helpstring][version][uuid] */ + + + +EXTERN_C const IID LIBID_PDFPARSERLib; + +#ifndef __IPDFColorSpace_INTERFACE_DEFINED__ +#define __IPDFColorSpace_INTERFACE_DEFINED__ + +/* interface IPDFColorSpace */ +/* [unique][helpstring][dual][uuid][object] */ + + +EXTERN_C const IID IID_IPDFColorSpace; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("BD23962F-DCCC-4324-9766-DD844AC272EB") + IPDFColorSpace : public IDispatch + { + public: + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_ComponentsPerPixel( + /* [retval][out] */ short __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_BaseColorSpace( + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_IsIndexed( + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_High( + /* [retval][out] */ short __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Lookup( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Name( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_IsMonochrome( + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_IsColor( + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Colorant( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPDFColorSpaceVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IPDFColorSpace __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IPDFColorSpace __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IPDFColorSpace __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + IPDFColorSpace __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + IPDFColorSpace __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + IPDFColorSpace __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + IPDFColorSpace __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ComponentsPerPixel )( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BaseColorSpace )( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_IsIndexed )( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_High )( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Lookup )( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_IsMonochrome )( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_IsColor )( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Colorant )( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + END_INTERFACE + } IPDFColorSpaceVtbl; + + interface IPDFColorSpace + { + CONST_VTBL struct IPDFColorSpaceVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPDFColorSpace_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IPDFColorSpace_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IPDFColorSpace_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IPDFColorSpace_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define IPDFColorSpace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define IPDFColorSpace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define IPDFColorSpace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define IPDFColorSpace_get_ComponentsPerPixel(This,pVal) \ + (This)->lpVtbl -> get_ComponentsPerPixel(This,pVal) + +#define IPDFColorSpace_get_BaseColorSpace(This,pVal) \ + (This)->lpVtbl -> get_BaseColorSpace(This,pVal) + +#define IPDFColorSpace_get_IsIndexed(This,pVal) \ + (This)->lpVtbl -> get_IsIndexed(This,pVal) + +#define IPDFColorSpace_get_High(This,pVal) \ + (This)->lpVtbl -> get_High(This,pVal) + +#define IPDFColorSpace_get_Lookup(This,pVal) \ + (This)->lpVtbl -> get_Lookup(This,pVal) + +#define IPDFColorSpace_get_Name(This,pVal) \ + (This)->lpVtbl -> get_Name(This,pVal) + +#define IPDFColorSpace_get_IsMonochrome(This,pVal) \ + (This)->lpVtbl -> get_IsMonochrome(This,pVal) + +#define IPDFColorSpace_get_IsColor(This,pVal) \ + (This)->lpVtbl -> get_IsColor(This,pVal) + +#define IPDFColorSpace_get_Colorant(This,pVal) \ + (This)->lpVtbl -> get_Colorant(This,pVal) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFColorSpace_get_ComponentsPerPixel_Proxy( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + +void __RPC_STUB IPDFColorSpace_get_ComponentsPerPixel_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFColorSpace_get_BaseColorSpace_Proxy( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFColorSpace_get_BaseColorSpace_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFColorSpace_get_IsIndexed_Proxy( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + +void __RPC_STUB IPDFColorSpace_get_IsIndexed_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFColorSpace_get_High_Proxy( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + +void __RPC_STUB IPDFColorSpace_get_High_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFColorSpace_get_Lookup_Proxy( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFColorSpace_get_Lookup_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFColorSpace_get_Name_Proxy( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFColorSpace_get_Name_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFColorSpace_get_IsMonochrome_Proxy( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + +void __RPC_STUB IPDFColorSpace_get_IsMonochrome_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFColorSpace_get_IsColor_Proxy( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + +void __RPC_STUB IPDFColorSpace_get_IsColor_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFColorSpace_get_Colorant_Proxy( + IPDFColorSpace __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFColorSpace_get_Colorant_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPDFColorSpace_INTERFACE_DEFINED__ */ + + +#ifndef __IPDFTransformMatrix_INTERFACE_DEFINED__ +#define __IPDFTransformMatrix_INTERFACE_DEFINED__ + +/* interface IPDFTransformMatrix */ +/* [unique][helpstring][dual][uuid][object] */ + + +EXTERN_C const IID IID_IPDFTransformMatrix; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("CC7AEA7A-40DD-4BB2-A9A7-6C34B85AF9EB") + IPDFTransformMatrix : public IDispatch + { + public: + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_a( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_b( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_c( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_d( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_e( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_f( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_XSkew( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_YSkew( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_XTranslation( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_YTranslation( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_XScaling( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_YScaling( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Rotation( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Orientation( + /* [retval][out] */ TPDFOrientation __RPC_FAR *pVal) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPDFTransformMatrixVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IPDFTransformMatrix __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IPDFTransformMatrix __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IPDFTransformMatrix __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + IPDFTransformMatrix __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + IPDFTransformMatrix __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + IPDFTransformMatrix __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + IPDFTransformMatrix __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_a )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_b )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_c )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_d )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_e )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_f )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_XSkew )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_YSkew )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_XTranslation )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_YTranslation )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_XScaling )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_YScaling )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Rotation )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Orientation )( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ TPDFOrientation __RPC_FAR *pVal); + + END_INTERFACE + } IPDFTransformMatrixVtbl; + + interface IPDFTransformMatrix + { + CONST_VTBL struct IPDFTransformMatrixVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPDFTransformMatrix_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IPDFTransformMatrix_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IPDFTransformMatrix_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IPDFTransformMatrix_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define IPDFTransformMatrix_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define IPDFTransformMatrix_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define IPDFTransformMatrix_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define IPDFTransformMatrix_get_a(This,pVal) \ + (This)->lpVtbl -> get_a(This,pVal) + +#define IPDFTransformMatrix_get_b(This,pVal) \ + (This)->lpVtbl -> get_b(This,pVal) + +#define IPDFTransformMatrix_get_c(This,pVal) \ + (This)->lpVtbl -> get_c(This,pVal) + +#define IPDFTransformMatrix_get_d(This,pVal) \ + (This)->lpVtbl -> get_d(This,pVal) + +#define IPDFTransformMatrix_get_e(This,pVal) \ + (This)->lpVtbl -> get_e(This,pVal) + +#define IPDFTransformMatrix_get_f(This,pVal) \ + (This)->lpVtbl -> get_f(This,pVal) + +#define IPDFTransformMatrix_get_XSkew(This,pVal) \ + (This)->lpVtbl -> get_XSkew(This,pVal) + +#define IPDFTransformMatrix_get_YSkew(This,pVal) \ + (This)->lpVtbl -> get_YSkew(This,pVal) + +#define IPDFTransformMatrix_get_XTranslation(This,pVal) \ + (This)->lpVtbl -> get_XTranslation(This,pVal) + +#define IPDFTransformMatrix_get_YTranslation(This,pVal) \ + (This)->lpVtbl -> get_YTranslation(This,pVal) + +#define IPDFTransformMatrix_get_XScaling(This,pVal) \ + (This)->lpVtbl -> get_XScaling(This,pVal) + +#define IPDFTransformMatrix_get_YScaling(This,pVal) \ + (This)->lpVtbl -> get_YScaling(This,pVal) + +#define IPDFTransformMatrix_get_Rotation(This,pVal) \ + (This)->lpVtbl -> get_Rotation(This,pVal) + +#define IPDFTransformMatrix_get_Orientation(This,pVal) \ + (This)->lpVtbl -> get_Orientation(This,pVal) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_a_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_a_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_b_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_b_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_c_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_c_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_d_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_d_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_e_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_e_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_f_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_f_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_XSkew_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_XSkew_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_YSkew_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_YSkew_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_XTranslation_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_XTranslation_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_YTranslation_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_YTranslation_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_XScaling_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_XScaling_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_YScaling_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_YScaling_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_Rotation_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_Rotation_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFTransformMatrix_get_Orientation_Proxy( + IPDFTransformMatrix __RPC_FAR * This, + /* [retval][out] */ TPDFOrientation __RPC_FAR *pVal); + + +void __RPC_STUB IPDFTransformMatrix_get_Orientation_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPDFTransformMatrix_INTERFACE_DEFINED__ */ + + +#ifndef __IPDFFont_INTERFACE_DEFINED__ +#define __IPDFFont_INTERFACE_DEFINED__ + +/* interface IPDFFont */ +/* [unique][helpstring][dual][uuid][object] */ + + +EXTERN_C const IID IID_IPDFFont; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("A7A57D1D-1041-401F-B836-BA1A0F1E54D7") + IPDFFont : public IDispatch + { + public: + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Type( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_BaseName( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Widths( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Encoding( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Flags( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_FontBBox( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_ItalicAngle( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Ascent( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Descent( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Leading( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_CapHeight( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_XHeight( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_StemV( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_StemH( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_AvgWidth( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_MaxWidth( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_MissingWidth( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_FontFile( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Charset( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_FontFileType( + /* [retval][out] */ short __RPC_FAR *pVal) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPDFFontVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IPDFFont __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IPDFFont __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IPDFFont __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + IPDFFont __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + IPDFFont __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + IPDFFont __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + IPDFFont __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Type )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BaseName )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Widths )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Encoding )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Flags )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_FontBBox )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ItalicAngle )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Ascent )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Descent )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Leading )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CapHeight )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_XHeight )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_StemV )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_StemH )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_AvgWidth )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_MaxWidth )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_MissingWidth )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_FontFile )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Charset )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_FontFileType )( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + END_INTERFACE + } IPDFFontVtbl; + + interface IPDFFont + { + CONST_VTBL struct IPDFFontVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPDFFont_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IPDFFont_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IPDFFont_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IPDFFont_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define IPDFFont_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define IPDFFont_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define IPDFFont_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define IPDFFont_get_Type(This,pVal) \ + (This)->lpVtbl -> get_Type(This,pVal) + +#define IPDFFont_get_BaseName(This,pVal) \ + (This)->lpVtbl -> get_BaseName(This,pVal) + +#define IPDFFont_get_Widths(This,pVal) \ + (This)->lpVtbl -> get_Widths(This,pVal) + +#define IPDFFont_get_Encoding(This,pVal) \ + (This)->lpVtbl -> get_Encoding(This,pVal) + +#define IPDFFont_get_Flags(This,pVal) \ + (This)->lpVtbl -> get_Flags(This,pVal) + +#define IPDFFont_get_FontBBox(This,pVal) \ + (This)->lpVtbl -> get_FontBBox(This,pVal) + +#define IPDFFont_get_ItalicAngle(This,pVal) \ + (This)->lpVtbl -> get_ItalicAngle(This,pVal) + +#define IPDFFont_get_Ascent(This,pVal) \ + (This)->lpVtbl -> get_Ascent(This,pVal) + +#define IPDFFont_get_Descent(This,pVal) \ + (This)->lpVtbl -> get_Descent(This,pVal) + +#define IPDFFont_get_Leading(This,pVal) \ + (This)->lpVtbl -> get_Leading(This,pVal) + +#define IPDFFont_get_CapHeight(This,pVal) \ + (This)->lpVtbl -> get_CapHeight(This,pVal) + +#define IPDFFont_get_XHeight(This,pVal) \ + (This)->lpVtbl -> get_XHeight(This,pVal) + +#define IPDFFont_get_StemV(This,pVal) \ + (This)->lpVtbl -> get_StemV(This,pVal) + +#define IPDFFont_get_StemH(This,pVal) \ + (This)->lpVtbl -> get_StemH(This,pVal) + +#define IPDFFont_get_AvgWidth(This,pVal) \ + (This)->lpVtbl -> get_AvgWidth(This,pVal) + +#define IPDFFont_get_MaxWidth(This,pVal) \ + (This)->lpVtbl -> get_MaxWidth(This,pVal) + +#define IPDFFont_get_MissingWidth(This,pVal) \ + (This)->lpVtbl -> get_MissingWidth(This,pVal) + +#define IPDFFont_get_FontFile(This,pVal) \ + (This)->lpVtbl -> get_FontFile(This,pVal) + +#define IPDFFont_get_Charset(This,pVal) \ + (This)->lpVtbl -> get_Charset(This,pVal) + +#define IPDFFont_get_FontFileType(This,pVal) \ + (This)->lpVtbl -> get_FontFileType(This,pVal) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_Type_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_Type_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_BaseName_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_BaseName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_Widths_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_Widths_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_Encoding_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_Encoding_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_Flags_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_Flags_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_FontBBox_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_FontBBox_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_ItalicAngle_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_ItalicAngle_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_Ascent_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_Ascent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_Descent_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_Descent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_Leading_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_Leading_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_CapHeight_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_CapHeight_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_XHeight_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_XHeight_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_StemV_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_StemV_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_StemH_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_StemH_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_AvgWidth_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_AvgWidth_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_MaxWidth_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_MaxWidth_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_MissingWidth_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_MissingWidth_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_FontFile_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_FontFile_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_Charset_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_Charset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFFont_get_FontFileType_Proxy( + IPDFFont __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + +void __RPC_STUB IPDFFont_get_FontFileType_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPDFFont_INTERFACE_DEFINED__ */ + + +#ifndef __IPDFGraphicsState_INTERFACE_DEFINED__ +#define __IPDFGraphicsState_INTERFACE_DEFINED__ + +/* interface IPDFGraphicsState */ +/* [unique][helpstring][dual][uuid][object] */ + + +EXTERN_C const IID IID_IPDFGraphicsState; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("91E60779-E8CF-4810-8233-9DBB12682DD6") + IPDFGraphicsState : public IDispatch + { + public: + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_CTM( + /* [retval][out] */ IPDFTransformMatrix __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_StrokeColorSpace( + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_FillColorSpace( + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_StrokeColorRGB( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_FillColorRGB( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_StrokeColorCMYK( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_FillColorCMYK( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_CharSpacing( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_WordSpacing( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_HorizontalScaling( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Leading( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Font( + /* [retval][out] */ IPDFFont __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_FontSize( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_TextRenderingMode( + /* [retval][out] */ short __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_TextRise( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_TextKnockout( + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_LineWidth( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_LineCap( + /* [retval][out] */ short __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_LineJoin( + /* [retval][out] */ short __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_MiterLimit( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_DashPhase( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_DashArray( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPDFGraphicsStateVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IPDFGraphicsState __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IPDFGraphicsState __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IPDFGraphicsState __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + IPDFGraphicsState __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + IPDFGraphicsState __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + IPDFGraphicsState __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + IPDFGraphicsState __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CTM )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ IPDFTransformMatrix __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_StrokeColorSpace )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_FillColorSpace )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_StrokeColorRGB )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_FillColorRGB )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_StrokeColorCMYK )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_FillColorCMYK )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CharSpacing )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_WordSpacing )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_HorizontalScaling )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Leading )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Font )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ IPDFFont __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_FontSize )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TextRenderingMode )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TextRise )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TextKnockout )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_LineWidth )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_LineCap )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_LineJoin )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_MiterLimit )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DashPhase )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DashArray )( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + END_INTERFACE + } IPDFGraphicsStateVtbl; + + interface IPDFGraphicsState + { + CONST_VTBL struct IPDFGraphicsStateVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPDFGraphicsState_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IPDFGraphicsState_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IPDFGraphicsState_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IPDFGraphicsState_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define IPDFGraphicsState_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define IPDFGraphicsState_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define IPDFGraphicsState_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define IPDFGraphicsState_get_CTM(This,pVal) \ + (This)->lpVtbl -> get_CTM(This,pVal) + +#define IPDFGraphicsState_get_StrokeColorSpace(This,pVal) \ + (This)->lpVtbl -> get_StrokeColorSpace(This,pVal) + +#define IPDFGraphicsState_get_FillColorSpace(This,pVal) \ + (This)->lpVtbl -> get_FillColorSpace(This,pVal) + +#define IPDFGraphicsState_get_StrokeColorRGB(This,pVal) \ + (This)->lpVtbl -> get_StrokeColorRGB(This,pVal) + +#define IPDFGraphicsState_get_FillColorRGB(This,pVal) \ + (This)->lpVtbl -> get_FillColorRGB(This,pVal) + +#define IPDFGraphicsState_get_StrokeColorCMYK(This,pVal) \ + (This)->lpVtbl -> get_StrokeColorCMYK(This,pVal) + +#define IPDFGraphicsState_get_FillColorCMYK(This,pVal) \ + (This)->lpVtbl -> get_FillColorCMYK(This,pVal) + +#define IPDFGraphicsState_get_CharSpacing(This,pVal) \ + (This)->lpVtbl -> get_CharSpacing(This,pVal) + +#define IPDFGraphicsState_get_WordSpacing(This,pVal) \ + (This)->lpVtbl -> get_WordSpacing(This,pVal) + +#define IPDFGraphicsState_get_HorizontalScaling(This,pVal) \ + (This)->lpVtbl -> get_HorizontalScaling(This,pVal) + +#define IPDFGraphicsState_get_Leading(This,pVal) \ + (This)->lpVtbl -> get_Leading(This,pVal) + +#define IPDFGraphicsState_get_Font(This,pVal) \ + (This)->lpVtbl -> get_Font(This,pVal) + +#define IPDFGraphicsState_get_FontSize(This,pVal) \ + (This)->lpVtbl -> get_FontSize(This,pVal) + +#define IPDFGraphicsState_get_TextRenderingMode(This,pVal) \ + (This)->lpVtbl -> get_TextRenderingMode(This,pVal) + +#define IPDFGraphicsState_get_TextRise(This,pVal) \ + (This)->lpVtbl -> get_TextRise(This,pVal) + +#define IPDFGraphicsState_get_TextKnockout(This,pVal) \ + (This)->lpVtbl -> get_TextKnockout(This,pVal) + +#define IPDFGraphicsState_get_LineWidth(This,pVal) \ + (This)->lpVtbl -> get_LineWidth(This,pVal) + +#define IPDFGraphicsState_get_LineCap(This,pVal) \ + (This)->lpVtbl -> get_LineCap(This,pVal) + +#define IPDFGraphicsState_get_LineJoin(This,pVal) \ + (This)->lpVtbl -> get_LineJoin(This,pVal) + +#define IPDFGraphicsState_get_MiterLimit(This,pVal) \ + (This)->lpVtbl -> get_MiterLimit(This,pVal) + +#define IPDFGraphicsState_get_DashPhase(This,pVal) \ + (This)->lpVtbl -> get_DashPhase(This,pVal) + +#define IPDFGraphicsState_get_DashArray(This,pVal) \ + (This)->lpVtbl -> get_DashArray(This,pVal) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_CTM_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ IPDFTransformMatrix __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_CTM_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_StrokeColorSpace_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_StrokeColorSpace_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_FillColorSpace_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_FillColorSpace_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_StrokeColorRGB_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_StrokeColorRGB_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_FillColorRGB_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_FillColorRGB_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_StrokeColorCMYK_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_StrokeColorCMYK_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_FillColorCMYK_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_FillColorCMYK_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_CharSpacing_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_CharSpacing_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_WordSpacing_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_WordSpacing_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_HorizontalScaling_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_HorizontalScaling_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_Leading_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_Leading_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_Font_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ IPDFFont __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_Font_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_FontSize_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_FontSize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_TextRenderingMode_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_TextRenderingMode_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_TextRise_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_TextRise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_TextKnockout_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_TextKnockout_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_LineWidth_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_LineWidth_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_LineCap_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_LineCap_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_LineJoin_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_LineJoin_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_MiterLimit_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_MiterLimit_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_DashPhase_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_DashPhase_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFGraphicsState_get_DashArray_Proxy( + IPDFGraphicsState __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFGraphicsState_get_DashArray_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPDFGraphicsState_INTERFACE_DEFINED__ */ + + +#ifndef __IPDFText_INTERFACE_DEFINED__ +#define __IPDFText_INTERFACE_DEFINED__ + +/* interface IPDFText */ +/* [unique][helpstring][dual][uuid][object] */ + + +EXTERN_C const IID IID_IPDFText; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6679C1EC-128E-4EE2-9963-7D4F7047DCA3") + IPDFText : public IDispatch + { + public: + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_UnicodeString( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_BoundingBox( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_FontSize( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Width( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Rotation( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Length( + /* [retval][out] */ short __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_XPos( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_YPos( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [hidden][id][propget] */ HRESULT STDMETHODCALLTYPE get_NextXPos( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [hidden][id][propget] */ HRESULT STDMETHODCALLTYPE get_TextMatrix( + /* [retval][out] */ IPDFTransformMatrix __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [hidden][id][propget] */ HRESULT STDMETHODCALLTYPE get_NextYPos( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPDFTextVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IPDFText __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IPDFText __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IPDFText __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + IPDFText __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + IPDFText __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + IPDFText __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + IPDFText __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_UnicodeString )( + IPDFText __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BoundingBox )( + IPDFText __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_FontSize )( + IPDFText __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Width )( + IPDFText __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Rotation )( + IPDFText __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Length )( + IPDFText __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_XPos )( + IPDFText __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_YPos )( + IPDFText __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [hidden][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_NextXPos )( + IPDFText __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [hidden][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TextMatrix )( + IPDFText __RPC_FAR * This, + /* [retval][out] */ IPDFTransformMatrix __RPC_FAR *__RPC_FAR *pVal); + + /* [hidden][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_NextYPos )( + IPDFText __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + END_INTERFACE + } IPDFTextVtbl; + + interface IPDFText + { + CONST_VTBL struct IPDFTextVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPDFText_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IPDFText_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IPDFText_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IPDFText_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define IPDFText_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define IPDFText_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define IPDFText_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define IPDFText_get_UnicodeString(This,pVal) \ + (This)->lpVtbl -> get_UnicodeString(This,pVal) + +#define IPDFText_get_BoundingBox(This,pVal) \ + (This)->lpVtbl -> get_BoundingBox(This,pVal) + +#define IPDFText_get_FontSize(This,pVal) \ + (This)->lpVtbl -> get_FontSize(This,pVal) + +#define IPDFText_get_Width(This,pVal) \ + (This)->lpVtbl -> get_Width(This,pVal) + +#define IPDFText_get_Rotation(This,pVal) \ + (This)->lpVtbl -> get_Rotation(This,pVal) + +#define IPDFText_get_Length(This,pVal) \ + (This)->lpVtbl -> get_Length(This,pVal) + +#define IPDFText_get_XPos(This,pVal) \ + (This)->lpVtbl -> get_XPos(This,pVal) + +#define IPDFText_get_YPos(This,pVal) \ + (This)->lpVtbl -> get_YPos(This,pVal) + +#define IPDFText_get_NextXPos(This,pVal) \ + (This)->lpVtbl -> get_NextXPos(This,pVal) + +#define IPDFText_get_TextMatrix(This,pVal) \ + (This)->lpVtbl -> get_TextMatrix(This,pVal) + +#define IPDFText_get_NextYPos(This,pVal) \ + (This)->lpVtbl -> get_NextYPos(This,pVal) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFText_get_UnicodeString_Proxy( + IPDFText __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFText_get_UnicodeString_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFText_get_BoundingBox_Proxy( + IPDFText __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFText_get_BoundingBox_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFText_get_FontSize_Proxy( + IPDFText __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFText_get_FontSize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFText_get_Width_Proxy( + IPDFText __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFText_get_Width_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFText_get_Rotation_Proxy( + IPDFText __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFText_get_Rotation_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFText_get_Length_Proxy( + IPDFText __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + +void __RPC_STUB IPDFText_get_Length_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFText_get_XPos_Proxy( + IPDFText __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFText_get_XPos_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFText_get_YPos_Proxy( + IPDFText __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFText_get_YPos_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [hidden][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFText_get_NextXPos_Proxy( + IPDFText __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFText_get_NextXPos_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [hidden][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFText_get_TextMatrix_Proxy( + IPDFText __RPC_FAR * This, + /* [retval][out] */ IPDFTransformMatrix __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFText_get_TextMatrix_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [hidden][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFText_get_NextYPos_Proxy( + IPDFText __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFText_get_NextYPos_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPDFText_INTERFACE_DEFINED__ */ + + +#ifndef __IPDFImage_INTERFACE_DEFINED__ +#define __IPDFImage_INTERFACE_DEFINED__ + +/* interface IPDFImage */ +/* [unique][helpstring][dual][uuid][object] */ + + +EXTERN_C const IID IID_IPDFImage; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4BCEA86A-E1CD-41EF-B317-C652E39AA204") + IPDFImage : public IDispatch + { + public: + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Width( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Height( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_ColorSpace( + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_BitsPerComponent( + /* [retval][out] */ short __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Samples( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Mask( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Store( + BSTR bstrPath, + /* [optional] */ TPDFCompression iCompression, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pDone) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE StoreInMemory( + BSTR bstrExtension, + /* [optional] */ TPDFCompression iCompression, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pDone) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetImage( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ConvertToRGB( + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pDone) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ChangeOrientation( + /* [in] */ TPDFOrientation iOrientation, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pDone) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Alternates( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_IsBitonal( + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_IsMonochrome( + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_IsColor( + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetResolution( + IPDFTransformMatrix __RPC_FAR *pMatrix, + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPDFImageVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IPDFImage __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IPDFImage __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IPDFImage __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + IPDFImage __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + IPDFImage __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + IPDFImage __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + IPDFImage __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Width )( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Height )( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ColorSpace )( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BitsPerComponent )( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Samples )( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Mask )( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Store )( + IPDFImage __RPC_FAR * This, + BSTR bstrPath, + /* [optional] */ TPDFCompression iCompression, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pDone); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *StoreInMemory )( + IPDFImage __RPC_FAR * This, + BSTR bstrExtension, + /* [optional] */ TPDFCompression iCompression, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pDone); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetImage )( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *ConvertToRGB )( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pDone); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *ChangeOrientation )( + IPDFImage __RPC_FAR * This, + /* [in] */ TPDFOrientation iOrientation, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pDone); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Alternates )( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_IsBitonal )( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_IsMonochrome )( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_IsColor )( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetResolution )( + IPDFImage __RPC_FAR * This, + IPDFTransformMatrix __RPC_FAR *pMatrix, + /* [retval][out] */ float __RPC_FAR *pVal); + + END_INTERFACE + } IPDFImageVtbl; + + interface IPDFImage + { + CONST_VTBL struct IPDFImageVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPDFImage_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IPDFImage_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IPDFImage_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IPDFImage_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define IPDFImage_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define IPDFImage_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define IPDFImage_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define IPDFImage_get_Width(This,pVal) \ + (This)->lpVtbl -> get_Width(This,pVal) + +#define IPDFImage_get_Height(This,pVal) \ + (This)->lpVtbl -> get_Height(This,pVal) + +#define IPDFImage_get_ColorSpace(This,pVal) \ + (This)->lpVtbl -> get_ColorSpace(This,pVal) + +#define IPDFImage_get_BitsPerComponent(This,pVal) \ + (This)->lpVtbl -> get_BitsPerComponent(This,pVal) + +#define IPDFImage_get_Samples(This,pVal) \ + (This)->lpVtbl -> get_Samples(This,pVal) + +#define IPDFImage_get_Mask(This,pVal) \ + (This)->lpVtbl -> get_Mask(This,pVal) + +#define IPDFImage_Store(This,bstrPath,iCompression,pDone) \ + (This)->lpVtbl -> Store(This,bstrPath,iCompression,pDone) + +#define IPDFImage_StoreInMemory(This,bstrExtension,iCompression,pDone) \ + (This)->lpVtbl -> StoreInMemory(This,bstrExtension,iCompression,pDone) + +#define IPDFImage_GetImage(This,pVal) \ + (This)->lpVtbl -> GetImage(This,pVal) + +#define IPDFImage_ConvertToRGB(This,pDone) \ + (This)->lpVtbl -> ConvertToRGB(This,pDone) + +#define IPDFImage_ChangeOrientation(This,iOrientation,pDone) \ + (This)->lpVtbl -> ChangeOrientation(This,iOrientation,pDone) + +#define IPDFImage_get_Alternates(This,pVal) \ + (This)->lpVtbl -> get_Alternates(This,pVal) + +#define IPDFImage_get_IsBitonal(This,pVal) \ + (This)->lpVtbl -> get_IsBitonal(This,pVal) + +#define IPDFImage_get_IsMonochrome(This,pVal) \ + (This)->lpVtbl -> get_IsMonochrome(This,pVal) + +#define IPDFImage_get_IsColor(This,pVal) \ + (This)->lpVtbl -> get_IsColor(This,pVal) + +#define IPDFImage_GetResolution(This,pMatrix,pVal) \ + (This)->lpVtbl -> GetResolution(This,pMatrix,pVal) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFImage_get_Width_Proxy( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFImage_get_Width_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFImage_get_Height_Proxy( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFImage_get_Height_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFImage_get_ColorSpace_Proxy( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFImage_get_ColorSpace_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFImage_get_BitsPerComponent_Proxy( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + +void __RPC_STUB IPDFImage_get_BitsPerComponent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFImage_get_Samples_Proxy( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFImage_get_Samples_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFImage_get_Mask_Proxy( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFImage_get_Mask_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFImage_Store_Proxy( + IPDFImage __RPC_FAR * This, + BSTR bstrPath, + /* [optional] */ TPDFCompression iCompression, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pDone); + + +void __RPC_STUB IPDFImage_Store_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFImage_StoreInMemory_Proxy( + IPDFImage __RPC_FAR * This, + BSTR bstrExtension, + /* [optional] */ TPDFCompression iCompression, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pDone); + + +void __RPC_STUB IPDFImage_StoreInMemory_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFImage_GetImage_Proxy( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFImage_GetImage_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFImage_ConvertToRGB_Proxy( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pDone); + + +void __RPC_STUB IPDFImage_ConvertToRGB_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFImage_ChangeOrientation_Proxy( + IPDFImage __RPC_FAR * This, + /* [in] */ TPDFOrientation iOrientation, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pDone); + + +void __RPC_STUB IPDFImage_ChangeOrientation_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFImage_get_Alternates_Proxy( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFImage_get_Alternates_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFImage_get_IsBitonal_Proxy( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + +void __RPC_STUB IPDFImage_get_IsBitonal_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFImage_get_IsMonochrome_Proxy( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + +void __RPC_STUB IPDFImage_get_IsMonochrome_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFImage_get_IsColor_Proxy( + IPDFImage __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + +void __RPC_STUB IPDFImage_get_IsColor_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFImage_GetResolution_Proxy( + IPDFImage __RPC_FAR * This, + IPDFTransformMatrix __RPC_FAR *pMatrix, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFImage_GetResolution_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPDFImage_INTERFACE_DEFINED__ */ + + +#ifndef __IPDFAlternateImage_INTERFACE_DEFINED__ +#define __IPDFAlternateImage_INTERFACE_DEFINED__ + +/* interface IPDFAlternateImage */ +/* [unique][helpstring][dual][uuid][object] */ + + +EXTERN_C const IID IID_IPDFAlternateImage; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("62AE898E-B1C4-4DAE-828D-A0555BD90427") + IPDFAlternateImage : public IDispatch + { + public: + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Image( + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_DefaultForPrinting( + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPDFAlternateImageVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IPDFAlternateImage __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IPDFAlternateImage __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IPDFAlternateImage __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + IPDFAlternateImage __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + IPDFAlternateImage __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + IPDFAlternateImage __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + IPDFAlternateImage __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Image )( + IPDFAlternateImage __RPC_FAR * This, + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DefaultForPrinting )( + IPDFAlternateImage __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + END_INTERFACE + } IPDFAlternateImageVtbl; + + interface IPDFAlternateImage + { + CONST_VTBL struct IPDFAlternateImageVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPDFAlternateImage_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IPDFAlternateImage_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IPDFAlternateImage_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IPDFAlternateImage_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define IPDFAlternateImage_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define IPDFAlternateImage_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define IPDFAlternateImage_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define IPDFAlternateImage_get_Image(This,pVal) \ + (This)->lpVtbl -> get_Image(This,pVal) + +#define IPDFAlternateImage_get_DefaultForPrinting(This,pVal) \ + (This)->lpVtbl -> get_DefaultForPrinting(This,pVal) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFAlternateImage_get_Image_Proxy( + IPDFAlternateImage __RPC_FAR * This, + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFAlternateImage_get_Image_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFAlternateImage_get_DefaultForPrinting_Proxy( + IPDFAlternateImage __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + +void __RPC_STUB IPDFAlternateImage_get_DefaultForPrinting_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPDFAlternateImage_INTERFACE_DEFINED__ */ + + +#ifndef __IPDFDocument_INTERFACE_DEFINED__ +#define __IPDFDocument_INTERFACE_DEFINED__ + +/* interface IPDFDocument */ +/* [unique][helpstring][dual][uuid][object] */ + + +EXTERN_C const IID IID_IPDFDocument; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("E46A1E80-977C-42DB-A770-65EF9D314B13") + IPDFDocument : public IDispatch + { + public: + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_PageCount( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_PageNo( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_PageNo( + /* [in] */ long newVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Page( + /* [retval][out] */ IPDFPage __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Open( + BSTR bstrPath, + /* [optional] */ BSTR bstrPassword, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *bDone) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Close( void) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OpenMem( + VARIANT __RPC_FAR *varMem, + /* [optional] */ BSTR bstrPassword, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *bDone) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_ErrorCode( + /* [retval][out] */ TPDFErrorCode __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_IsEncrypted( + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_MajorVersion( + /* [retval][out] */ short __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_MinorVersion( + /* [retval][out] */ short __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Title( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Author( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Subject( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Keywords( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetInfoEntry( + /* [in] */ BSTR szKey, + /* [retval][out] */ BSTR __RPC_FAR *szValue) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Creator( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Producer( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_CreationDate( + /* [retval][out] */ DATE __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_ModDate( + /* [retval][out] */ DATE __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetFirstFontResource( + /* [retval][out] */ IPDFFont __RPC_FAR *__RPC_FAR *ppFont) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetNextFontResource( + /* [retval][out] */ IPDFFont __RPC_FAR *__RPC_FAR *ppFont) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetFirstImageResource( + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *ppImage) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetNextImageResource( + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *ppImage) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetFirstColorSpaceResource( + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *ppColorSpace) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetNextColorSpaceResource( + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *ppColorSpace) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetFirstOutlineItem( + /* [retval][out] */ IPDFOutlineItem __RPC_FAR *__RPC_FAR *ppOutlineItem) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetNextOutlineItem( + /* [defaultvalue][in] */ long nMaxLevel, + /* [defaultvalue][in] */ VARIANT_BOOL bReturnOpenOnly, + /* [retval][out] */ IPDFOutlineItem __RPC_FAR *__RPC_FAR *ppOutlineItem) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetCurrentOutlineLevel( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPDFDocumentVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IPDFDocument __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IPDFDocument __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IPDFDocument __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + IPDFDocument __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + IPDFDocument __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + IPDFDocument __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + IPDFDocument __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PageCount )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PageNo )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_PageNo )( + IPDFDocument __RPC_FAR * This, + /* [in] */ long newVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Page )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFPage __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Open )( + IPDFDocument __RPC_FAR * This, + BSTR bstrPath, + /* [optional] */ BSTR bstrPassword, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *bDone); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Close )( + IPDFDocument __RPC_FAR * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *OpenMem )( + IPDFDocument __RPC_FAR * This, + VARIANT __RPC_FAR *varMem, + /* [optional] */ BSTR bstrPassword, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *bDone); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ErrorCode )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ TPDFErrorCode __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_IsEncrypted )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_MajorVersion )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_MinorVersion )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Title )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Author )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Subject )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Keywords )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetInfoEntry )( + IPDFDocument __RPC_FAR * This, + /* [in] */ BSTR szKey, + /* [retval][out] */ BSTR __RPC_FAR *szValue); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Creator )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Producer )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CreationDate )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ DATE __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ModDate )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ DATE __RPC_FAR *pVal); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetFirstFontResource )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFFont __RPC_FAR *__RPC_FAR *ppFont); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetNextFontResource )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFFont __RPC_FAR *__RPC_FAR *ppFont); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetFirstImageResource )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *ppImage); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetNextImageResource )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *ppImage); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetFirstColorSpaceResource )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *ppColorSpace); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetNextColorSpaceResource )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *ppColorSpace); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetFirstOutlineItem )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFOutlineItem __RPC_FAR *__RPC_FAR *ppOutlineItem); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetNextOutlineItem )( + IPDFDocument __RPC_FAR * This, + /* [defaultvalue][in] */ long nMaxLevel, + /* [defaultvalue][in] */ VARIANT_BOOL bReturnOpenOnly, + /* [retval][out] */ IPDFOutlineItem __RPC_FAR *__RPC_FAR *ppOutlineItem); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetCurrentOutlineLevel )( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + END_INTERFACE + } IPDFDocumentVtbl; + + interface IPDFDocument + { + CONST_VTBL struct IPDFDocumentVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPDFDocument_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IPDFDocument_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IPDFDocument_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IPDFDocument_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define IPDFDocument_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define IPDFDocument_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define IPDFDocument_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define IPDFDocument_get_PageCount(This,pVal) \ + (This)->lpVtbl -> get_PageCount(This,pVal) + +#define IPDFDocument_get_PageNo(This,pVal) \ + (This)->lpVtbl -> get_PageNo(This,pVal) + +#define IPDFDocument_put_PageNo(This,newVal) \ + (This)->lpVtbl -> put_PageNo(This,newVal) + +#define IPDFDocument_get_Page(This,pVal) \ + (This)->lpVtbl -> get_Page(This,pVal) + +#define IPDFDocument_Open(This,bstrPath,bstrPassword,bDone) \ + (This)->lpVtbl -> Open(This,bstrPath,bstrPassword,bDone) + +#define IPDFDocument_Close(This) \ + (This)->lpVtbl -> Close(This) + +#define IPDFDocument_OpenMem(This,varMem,bstrPassword,bDone) \ + (This)->lpVtbl -> OpenMem(This,varMem,bstrPassword,bDone) + +#define IPDFDocument_get_ErrorCode(This,pVal) \ + (This)->lpVtbl -> get_ErrorCode(This,pVal) + +#define IPDFDocument_get_IsEncrypted(This,pVal) \ + (This)->lpVtbl -> get_IsEncrypted(This,pVal) + +#define IPDFDocument_get_MajorVersion(This,pVal) \ + (This)->lpVtbl -> get_MajorVersion(This,pVal) + +#define IPDFDocument_get_MinorVersion(This,pVal) \ + (This)->lpVtbl -> get_MinorVersion(This,pVal) + +#define IPDFDocument_get_Title(This,pVal) \ + (This)->lpVtbl -> get_Title(This,pVal) + +#define IPDFDocument_get_Author(This,pVal) \ + (This)->lpVtbl -> get_Author(This,pVal) + +#define IPDFDocument_get_Subject(This,pVal) \ + (This)->lpVtbl -> get_Subject(This,pVal) + +#define IPDFDocument_get_Keywords(This,pVal) \ + (This)->lpVtbl -> get_Keywords(This,pVal) + +#define IPDFDocument_GetInfoEntry(This,szKey,szValue) \ + (This)->lpVtbl -> GetInfoEntry(This,szKey,szValue) + +#define IPDFDocument_get_Creator(This,pVal) \ + (This)->lpVtbl -> get_Creator(This,pVal) + +#define IPDFDocument_get_Producer(This,pVal) \ + (This)->lpVtbl -> get_Producer(This,pVal) + +#define IPDFDocument_get_CreationDate(This,pVal) \ + (This)->lpVtbl -> get_CreationDate(This,pVal) + +#define IPDFDocument_get_ModDate(This,pVal) \ + (This)->lpVtbl -> get_ModDate(This,pVal) + +#define IPDFDocument_GetFirstFontResource(This,ppFont) \ + (This)->lpVtbl -> GetFirstFontResource(This,ppFont) + +#define IPDFDocument_GetNextFontResource(This,ppFont) \ + (This)->lpVtbl -> GetNextFontResource(This,ppFont) + +#define IPDFDocument_GetFirstImageResource(This,ppImage) \ + (This)->lpVtbl -> GetFirstImageResource(This,ppImage) + +#define IPDFDocument_GetNextImageResource(This,ppImage) \ + (This)->lpVtbl -> GetNextImageResource(This,ppImage) + +#define IPDFDocument_GetFirstColorSpaceResource(This,ppColorSpace) \ + (This)->lpVtbl -> GetFirstColorSpaceResource(This,ppColorSpace) + +#define IPDFDocument_GetNextColorSpaceResource(This,ppColorSpace) \ + (This)->lpVtbl -> GetNextColorSpaceResource(This,ppColorSpace) + +#define IPDFDocument_GetFirstOutlineItem(This,ppOutlineItem) \ + (This)->lpVtbl -> GetFirstOutlineItem(This,ppOutlineItem) + +#define IPDFDocument_GetNextOutlineItem(This,nMaxLevel,bReturnOpenOnly,ppOutlineItem) \ + (This)->lpVtbl -> GetNextOutlineItem(This,nMaxLevel,bReturnOpenOnly,ppOutlineItem) + +#define IPDFDocument_GetCurrentOutlineLevel(This,pVal) \ + (This)->lpVtbl -> GetCurrentOutlineLevel(This,pVal) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_PageCount_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_PageCount_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_PageNo_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_PageNo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IPDFDocument_put_PageNo_Proxy( + IPDFDocument __RPC_FAR * This, + /* [in] */ long newVal); + + +void __RPC_STUB IPDFDocument_put_PageNo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_Page_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFPage __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_Page_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFDocument_Open_Proxy( + IPDFDocument __RPC_FAR * This, + BSTR bstrPath, + /* [optional] */ BSTR bstrPassword, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *bDone); + + +void __RPC_STUB IPDFDocument_Open_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFDocument_Close_Proxy( + IPDFDocument __RPC_FAR * This); + + +void __RPC_STUB IPDFDocument_Close_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFDocument_OpenMem_Proxy( + IPDFDocument __RPC_FAR * This, + VARIANT __RPC_FAR *varMem, + /* [optional] */ BSTR bstrPassword, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *bDone); + + +void __RPC_STUB IPDFDocument_OpenMem_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_ErrorCode_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ TPDFErrorCode __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_ErrorCode_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_IsEncrypted_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_IsEncrypted_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_MajorVersion_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_MajorVersion_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_MinorVersion_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_MinorVersion_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_Title_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_Title_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_Author_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_Author_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_Subject_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_Subject_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_Keywords_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_Keywords_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFDocument_GetInfoEntry_Proxy( + IPDFDocument __RPC_FAR * This, + /* [in] */ BSTR szKey, + /* [retval][out] */ BSTR __RPC_FAR *szValue); + + +void __RPC_STUB IPDFDocument_GetInfoEntry_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_Creator_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_Creator_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_Producer_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_Producer_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_CreationDate_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ DATE __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_CreationDate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDocument_get_ModDate_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ DATE __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_get_ModDate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFDocument_GetFirstFontResource_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFFont __RPC_FAR *__RPC_FAR *ppFont); + + +void __RPC_STUB IPDFDocument_GetFirstFontResource_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFDocument_GetNextFontResource_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFFont __RPC_FAR *__RPC_FAR *ppFont); + + +void __RPC_STUB IPDFDocument_GetNextFontResource_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFDocument_GetFirstImageResource_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *ppImage); + + +void __RPC_STUB IPDFDocument_GetFirstImageResource_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFDocument_GetNextImageResource_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *ppImage); + + +void __RPC_STUB IPDFDocument_GetNextImageResource_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFDocument_GetFirstColorSpaceResource_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *ppColorSpace); + + +void __RPC_STUB IPDFDocument_GetFirstColorSpaceResource_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFDocument_GetNextColorSpaceResource_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFColorSpace __RPC_FAR *__RPC_FAR *ppColorSpace); + + +void __RPC_STUB IPDFDocument_GetNextColorSpaceResource_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFDocument_GetFirstOutlineItem_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ IPDFOutlineItem __RPC_FAR *__RPC_FAR *ppOutlineItem); + + +void __RPC_STUB IPDFDocument_GetFirstOutlineItem_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFDocument_GetNextOutlineItem_Proxy( + IPDFDocument __RPC_FAR * This, + /* [defaultvalue][in] */ long nMaxLevel, + /* [defaultvalue][in] */ VARIANT_BOOL bReturnOpenOnly, + /* [retval][out] */ IPDFOutlineItem __RPC_FAR *__RPC_FAR *ppOutlineItem); + + +void __RPC_STUB IPDFDocument_GetNextOutlineItem_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFDocument_GetCurrentOutlineLevel_Proxy( + IPDFDocument __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDocument_GetCurrentOutlineLevel_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPDFDocument_INTERFACE_DEFINED__ */ + + +#ifndef __IPDFContent_INTERFACE_DEFINED__ +#define __IPDFContent_INTERFACE_DEFINED__ + +/* interface IPDFContent */ +/* [unique][helpstring][dual][uuid][object] */ + + +EXTERN_C const IID IID_IPDFContent; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("A4D73C27-0670-462B-A91D-00A5FAD884E0") + IPDFContent : public IDispatch + { + public: + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_GraphicsState( + /* [retval][out] */ IPDFGraphicsState __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Text( + /* [retval][out] */ IPDFText __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Image( + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Path( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_BreakWords( + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_BreakWords( + /* [in] */ VARIANT_BOOL newVal) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Reset( + /* [defaultvalue][in] */ VARIANT_BOOL bIncludeRotate = FALSE) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetNextText( + /* [retval][out] */ IPDFText __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetNextImage( + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetNextPath( + /* [retval][out] */ BSTR __RPC_FAR *bstrPath) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetNextObject( + /* [retval][out] */ TPDFContentObject __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Flags( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPDFContentVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IPDFContent __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IPDFContent __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IPDFContent __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + IPDFContent __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + IPDFContent __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + IPDFContent __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + IPDFContent __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_GraphicsState )( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ IPDFGraphicsState __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Text )( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ IPDFText __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Image )( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Path )( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BreakWords )( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_BreakWords )( + IPDFContent __RPC_FAR * This, + /* [in] */ VARIANT_BOOL newVal); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Reset )( + IPDFContent __RPC_FAR * This, + /* [defaultvalue][in] */ VARIANT_BOOL bIncludeRotate); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetNextText )( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ IPDFText __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetNextImage )( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetNextPath )( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *bstrPath); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetNextObject )( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ TPDFContentObject __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Flags )( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + END_INTERFACE + } IPDFContentVtbl; + + interface IPDFContent + { + CONST_VTBL struct IPDFContentVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPDFContent_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IPDFContent_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IPDFContent_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IPDFContent_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define IPDFContent_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define IPDFContent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define IPDFContent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define IPDFContent_get_GraphicsState(This,pVal) \ + (This)->lpVtbl -> get_GraphicsState(This,pVal) + +#define IPDFContent_get_Text(This,pVal) \ + (This)->lpVtbl -> get_Text(This,pVal) + +#define IPDFContent_get_Image(This,pVal) \ + (This)->lpVtbl -> get_Image(This,pVal) + +#define IPDFContent_get_Path(This,pVal) \ + (This)->lpVtbl -> get_Path(This,pVal) + +#define IPDFContent_get_BreakWords(This,pVal) \ + (This)->lpVtbl -> get_BreakWords(This,pVal) + +#define IPDFContent_put_BreakWords(This,newVal) \ + (This)->lpVtbl -> put_BreakWords(This,newVal) + +#define IPDFContent_Reset(This,bIncludeRotate) \ + (This)->lpVtbl -> Reset(This,bIncludeRotate) + +#define IPDFContent_GetNextText(This,pVal) \ + (This)->lpVtbl -> GetNextText(This,pVal) + +#define IPDFContent_GetNextImage(This,pVal) \ + (This)->lpVtbl -> GetNextImage(This,pVal) + +#define IPDFContent_GetNextPath(This,bstrPath) \ + (This)->lpVtbl -> GetNextPath(This,bstrPath) + +#define IPDFContent_GetNextObject(This,pVal) \ + (This)->lpVtbl -> GetNextObject(This,pVal) + +#define IPDFContent_get_Flags(This,pVal) \ + (This)->lpVtbl -> get_Flags(This,pVal) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFContent_get_GraphicsState_Proxy( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ IPDFGraphicsState __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFContent_get_GraphicsState_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFContent_get_Text_Proxy( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ IPDFText __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFContent_get_Text_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFContent_get_Image_Proxy( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFContent_get_Image_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFContent_get_Path_Proxy( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFContent_get_Path_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFContent_get_BreakWords_Proxy( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal); + + +void __RPC_STUB IPDFContent_get_BreakWords_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IPDFContent_put_BreakWords_Proxy( + IPDFContent __RPC_FAR * This, + /* [in] */ VARIANT_BOOL newVal); + + +void __RPC_STUB IPDFContent_put_BreakWords_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFContent_Reset_Proxy( + IPDFContent __RPC_FAR * This, + /* [defaultvalue][in] */ VARIANT_BOOL bIncludeRotate); + + +void __RPC_STUB IPDFContent_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFContent_GetNextText_Proxy( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ IPDFText __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFContent_GetNextText_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFContent_GetNextImage_Proxy( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ IPDFImage __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFContent_GetNextImage_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFContent_GetNextPath_Proxy( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *bstrPath); + + +void __RPC_STUB IPDFContent_GetNextPath_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFContent_GetNextObject_Proxy( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ TPDFContentObject __RPC_FAR *pVal); + + +void __RPC_STUB IPDFContent_GetNextObject_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFContent_get_Flags_Proxy( + IPDFContent __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFContent_get_Flags_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPDFContent_INTERFACE_DEFINED__ */ + + +#ifndef __IPDFAnnotation_INTERFACE_DEFINED__ +#define __IPDFAnnotation_INTERFACE_DEFINED__ + +/* interface IPDFAnnotation */ +/* [unique][helpstring][dual][uuid][object] */ + + +EXTERN_C const IID IID_IPDFAnnotation; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5FBE061F-1929-4213-8350-0A73FE885353") + IPDFAnnotation : public IDispatch + { + public: + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Subtype( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Rect( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Contents( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Name( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Date( + /* [retval][out] */ DATE __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Flags( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Color( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_TextLabel( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPDFAnnotationVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IPDFAnnotation __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IPDFAnnotation __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IPDFAnnotation __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + IPDFAnnotation __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + IPDFAnnotation __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + IPDFAnnotation __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + IPDFAnnotation __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Subtype )( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Rect )( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Contents )( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Date )( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ DATE __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Flags )( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Color )( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TextLabel )( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + END_INTERFACE + } IPDFAnnotationVtbl; + + interface IPDFAnnotation + { + CONST_VTBL struct IPDFAnnotationVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPDFAnnotation_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IPDFAnnotation_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IPDFAnnotation_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IPDFAnnotation_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define IPDFAnnotation_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define IPDFAnnotation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define IPDFAnnotation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define IPDFAnnotation_get_Subtype(This,pVal) \ + (This)->lpVtbl -> get_Subtype(This,pVal) + +#define IPDFAnnotation_get_Rect(This,pVal) \ + (This)->lpVtbl -> get_Rect(This,pVal) + +#define IPDFAnnotation_get_Contents(This,pVal) \ + (This)->lpVtbl -> get_Contents(This,pVal) + +#define IPDFAnnotation_get_Name(This,pVal) \ + (This)->lpVtbl -> get_Name(This,pVal) + +#define IPDFAnnotation_get_Date(This,pVal) \ + (This)->lpVtbl -> get_Date(This,pVal) + +#define IPDFAnnotation_get_Flags(This,pVal) \ + (This)->lpVtbl -> get_Flags(This,pVal) + +#define IPDFAnnotation_get_Color(This,pVal) \ + (This)->lpVtbl -> get_Color(This,pVal) + +#define IPDFAnnotation_get_TextLabel(This,pVal) \ + (This)->lpVtbl -> get_TextLabel(This,pVal) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFAnnotation_get_Subtype_Proxy( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFAnnotation_get_Subtype_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFAnnotation_get_Rect_Proxy( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFAnnotation_get_Rect_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFAnnotation_get_Contents_Proxy( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFAnnotation_get_Contents_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFAnnotation_get_Name_Proxy( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFAnnotation_get_Name_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFAnnotation_get_Date_Proxy( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ DATE __RPC_FAR *pVal); + + +void __RPC_STUB IPDFAnnotation_get_Date_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFAnnotation_get_Flags_Proxy( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFAnnotation_get_Flags_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFAnnotation_get_Color_Proxy( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFAnnotation_get_Color_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFAnnotation_get_TextLabel_Proxy( + IPDFAnnotation __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFAnnotation_get_TextLabel_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPDFAnnotation_INTERFACE_DEFINED__ */ + + +#ifndef __IPDFPage_INTERFACE_DEFINED__ +#define __IPDFPage_INTERFACE_DEFINED__ + +/* interface IPDFPage */ +/* [unique][helpstring][dual][uuid][object] */ + + +EXTERN_C const IID IID_IPDFPage; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("FABFF1BB-3852-4BE4-8344-BAB92105D5A0") + IPDFPage : public IDispatch + { + public: + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Document( + /* [retval][out] */ IPDFDocument __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_MediaBox( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_CropBox( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Rotate( + /* [retval][out] */ short __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Content( + /* [retval][out] */ IPDFContent __RPC_FAR *__RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetFirstAnnotation( + /* [retval][out] */ IPDFAnnotation __RPC_FAR *__RPC_FAR *pAnnot) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetNextAnnotation( + /* [retval][out] */ IPDFAnnotation __RPC_FAR *__RPC_FAR *pAnnot) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_BleedBox( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_TrimBox( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_ArtBox( + /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_DeviceColorant( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPDFPageVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IPDFPage __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IPDFPage __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IPDFPage __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + IPDFPage __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + IPDFPage __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + IPDFPage __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + IPDFPage __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Document )( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ IPDFDocument __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_MediaBox )( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CropBox )( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Rotate )( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Content )( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ IPDFContent __RPC_FAR *__RPC_FAR *pVal); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetFirstAnnotation )( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ IPDFAnnotation __RPC_FAR *__RPC_FAR *pAnnot); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetNextAnnotation )( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ IPDFAnnotation __RPC_FAR *__RPC_FAR *pAnnot); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BleedBox )( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrimBox )( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ArtBox )( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DeviceColorant )( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + END_INTERFACE + } IPDFPageVtbl; + + interface IPDFPage + { + CONST_VTBL struct IPDFPageVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPDFPage_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IPDFPage_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IPDFPage_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IPDFPage_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define IPDFPage_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define IPDFPage_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define IPDFPage_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define IPDFPage_get_Document(This,pVal) \ + (This)->lpVtbl -> get_Document(This,pVal) + +#define IPDFPage_get_MediaBox(This,pVal) \ + (This)->lpVtbl -> get_MediaBox(This,pVal) + +#define IPDFPage_get_CropBox(This,pVal) \ + (This)->lpVtbl -> get_CropBox(This,pVal) + +#define IPDFPage_get_Rotate(This,pVal) \ + (This)->lpVtbl -> get_Rotate(This,pVal) + +#define IPDFPage_get_Content(This,pVal) \ + (This)->lpVtbl -> get_Content(This,pVal) + +#define IPDFPage_GetFirstAnnotation(This,pAnnot) \ + (This)->lpVtbl -> GetFirstAnnotation(This,pAnnot) + +#define IPDFPage_GetNextAnnotation(This,pAnnot) \ + (This)->lpVtbl -> GetNextAnnotation(This,pAnnot) + +#define IPDFPage_get_BleedBox(This,pVal) \ + (This)->lpVtbl -> get_BleedBox(This,pVal) + +#define IPDFPage_get_TrimBox(This,pVal) \ + (This)->lpVtbl -> get_TrimBox(This,pVal) + +#define IPDFPage_get_ArtBox(This,pVal) \ + (This)->lpVtbl -> get_ArtBox(This,pVal) + +#define IPDFPage_get_DeviceColorant(This,pVal) \ + (This)->lpVtbl -> get_DeviceColorant(This,pVal) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFPage_get_Document_Proxy( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ IPDFDocument __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFPage_get_Document_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFPage_get_MediaBox_Proxy( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFPage_get_MediaBox_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFPage_get_CropBox_Proxy( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFPage_get_CropBox_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFPage_get_Rotate_Proxy( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ short __RPC_FAR *pVal); + + +void __RPC_STUB IPDFPage_get_Rotate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFPage_get_Content_Proxy( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ IPDFContent __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFPage_get_Content_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFPage_GetFirstAnnotation_Proxy( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ IPDFAnnotation __RPC_FAR *__RPC_FAR *pAnnot); + + +void __RPC_STUB IPDFPage_GetFirstAnnotation_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IPDFPage_GetNextAnnotation_Proxy( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ IPDFAnnotation __RPC_FAR *__RPC_FAR *pAnnot); + + +void __RPC_STUB IPDFPage_GetNextAnnotation_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFPage_get_BleedBox_Proxy( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFPage_get_BleedBox_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFPage_get_TrimBox_Proxy( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFPage_get_TrimBox_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFPage_get_ArtBox_Proxy( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVal); + + +void __RPC_STUB IPDFPage_get_ArtBox_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFPage_get_DeviceColorant_Proxy( + IPDFPage __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFPage_get_DeviceColorant_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPDFPage_INTERFACE_DEFINED__ */ + + +#ifndef __IPDFDestination_INTERFACE_DEFINED__ +#define __IPDFDestination_INTERFACE_DEFINED__ + +/* interface IPDFDestination */ +/* [unique][helpstring][dual][uuid][object] */ + + +EXTERN_C const IID IID_IPDFDestination; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("405CA7A9-10C7-40CD-AAA1-22EFF01E2CE5") + IPDFDestination : public IDispatch + { + public: + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Type( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_PageNo( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Left( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Bottom( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Right( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Top( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Zoom( + /* [retval][out] */ float __RPC_FAR *pVal) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPDFDestinationVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IPDFDestination __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IPDFDestination __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IPDFDestination __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + IPDFDestination __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + IPDFDestination __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + IPDFDestination __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + IPDFDestination __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Type )( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PageNo )( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Left )( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Bottom )( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Right )( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Top )( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Zoom )( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + END_INTERFACE + } IPDFDestinationVtbl; + + interface IPDFDestination + { + CONST_VTBL struct IPDFDestinationVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPDFDestination_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IPDFDestination_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IPDFDestination_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IPDFDestination_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define IPDFDestination_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define IPDFDestination_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define IPDFDestination_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define IPDFDestination_get_Type(This,pVal) \ + (This)->lpVtbl -> get_Type(This,pVal) + +#define IPDFDestination_get_PageNo(This,pVal) \ + (This)->lpVtbl -> get_PageNo(This,pVal) + +#define IPDFDestination_get_Left(This,pVal) \ + (This)->lpVtbl -> get_Left(This,pVal) + +#define IPDFDestination_get_Bottom(This,pVal) \ + (This)->lpVtbl -> get_Bottom(This,pVal) + +#define IPDFDestination_get_Right(This,pVal) \ + (This)->lpVtbl -> get_Right(This,pVal) + +#define IPDFDestination_get_Top(This,pVal) \ + (This)->lpVtbl -> get_Top(This,pVal) + +#define IPDFDestination_get_Zoom(This,pVal) \ + (This)->lpVtbl -> get_Zoom(This,pVal) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDestination_get_Type_Proxy( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDestination_get_Type_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDestination_get_PageNo_Proxy( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDestination_get_PageNo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDestination_get_Left_Proxy( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDestination_get_Left_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDestination_get_Bottom_Proxy( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDestination_get_Bottom_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDestination_get_Right_Proxy( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDestination_get_Right_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDestination_get_Top_Proxy( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDestination_get_Top_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFDestination_get_Zoom_Proxy( + IPDFDestination __RPC_FAR * This, + /* [retval][out] */ float __RPC_FAR *pVal); + + +void __RPC_STUB IPDFDestination_get_Zoom_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPDFDestination_INTERFACE_DEFINED__ */ + + +#ifndef __IPDFOutlineItem_INTERFACE_DEFINED__ +#define __IPDFOutlineItem_INTERFACE_DEFINED__ + +/* interface IPDFOutlineItem */ +/* [unique][helpstring][dual][uuid][object] */ + + +EXTERN_C const IID IID_IPDFOutlineItem; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("E1AFC937-B6AC-4E19-9BC1-F46E8A125E6F") + IPDFOutlineItem : public IDispatch + { + public: + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Title( + /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ long __RPC_FAR *pVal) = 0; + + virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Dest( + /* [retval][out] */ IPDFDestination __RPC_FAR *__RPC_FAR *pVal) = 0; + + }; + +#else /* C style interface */ + + typedef struct IPDFOutlineItemVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IPDFOutlineItem __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IPDFOutlineItem __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IPDFOutlineItem __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( + IPDFOutlineItem __RPC_FAR * This, + /* [out] */ UINT __RPC_FAR *pctinfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( + IPDFOutlineItem __RPC_FAR * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( + IPDFOutlineItem __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames, + /* [in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID __RPC_FAR *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( + IPDFOutlineItem __RPC_FAR * This, + /* [in] */ DISPID dispIdMember, + /* [in] */ REFIID riid, + /* [in] */ LCID lcid, + /* [in] */ WORD wFlags, + /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams, + /* [out] */ VARIANT __RPC_FAR *pVarResult, + /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo, + /* [out] */ UINT __RPC_FAR *puArgErr); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Title )( + IPDFOutlineItem __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Count )( + IPDFOutlineItem __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Dest )( + IPDFOutlineItem __RPC_FAR * This, + /* [retval][out] */ IPDFDestination __RPC_FAR *__RPC_FAR *pVal); + + END_INTERFACE + } IPDFOutlineItemVtbl; + + interface IPDFOutlineItem + { + CONST_VTBL struct IPDFOutlineItemVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPDFOutlineItem_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IPDFOutlineItem_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IPDFOutlineItem_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IPDFOutlineItem_GetTypeInfoCount(This,pctinfo) \ + (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) + +#define IPDFOutlineItem_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) + +#define IPDFOutlineItem_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) + +#define IPDFOutlineItem_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) + + +#define IPDFOutlineItem_get_Title(This,pVal) \ + (This)->lpVtbl -> get_Title(This,pVal) + +#define IPDFOutlineItem_get_Count(This,pVal) \ + (This)->lpVtbl -> get_Count(This,pVal) + +#define IPDFOutlineItem_get_Dest(This,pVal) \ + (This)->lpVtbl -> get_Dest(This,pVal) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFOutlineItem_get_Title_Proxy( + IPDFOutlineItem __RPC_FAR * This, + /* [retval][out] */ BSTR __RPC_FAR *pVal); + + +void __RPC_STUB IPDFOutlineItem_get_Title_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFOutlineItem_get_Count_Proxy( + IPDFOutlineItem __RPC_FAR * This, + /* [retval][out] */ long __RPC_FAR *pVal); + + +void __RPC_STUB IPDFOutlineItem_get_Count_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IPDFOutlineItem_get_Dest_Proxy( + IPDFOutlineItem __RPC_FAR * This, + /* [retval][out] */ IPDFDestination __RPC_FAR *__RPC_FAR *pVal); + + +void __RPC_STUB IPDFOutlineItem_get_Dest_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IPDFOutlineItem_INTERFACE_DEFINED__ */ + + +EXTERN_C const CLSID CLSID_ColorSpace; + +#ifdef __cplusplus + +class DECLSPEC_UUID("8360A99C-F604-4DFD-8B26-A9E735E414AA") +ColorSpace; +#endif + +EXTERN_C const CLSID CLSID_TransformMatrix; + +#ifdef __cplusplus + +class DECLSPEC_UUID("A52F80A5-6BBE-460C-9249-E8DAB46688B5") +TransformMatrix; +#endif + +EXTERN_C const CLSID CLSID_Font; + +#ifdef __cplusplus + +class DECLSPEC_UUID("E46EBEE0-0E50-4A5E-88AC-519335F8714D") +Font; +#endif + +EXTERN_C const CLSID CLSID_Text; + +#ifdef __cplusplus + +class DECLSPEC_UUID("BC62F899-1C67-4D7A-A5CC-F35819051552") +Text; +#endif + +EXTERN_C const CLSID CLSID_Image; + +#ifdef __cplusplus + +class DECLSPEC_UUID("ACC2258C-D7ED-468C-BF99-118795A997E0") +Image; +#endif + +EXTERN_C const CLSID CLSID_GraphicsState; + +#ifdef __cplusplus + +class DECLSPEC_UUID("39D04D8D-6AA7-42EC-B3F8-6CE5E44DD363") +GraphicsState; +#endif + +EXTERN_C const CLSID CLSID_Content; + +#ifdef __cplusplus + +class DECLSPEC_UUID("F282DB6E-18C9-4E6A-A3C6-A505FE799BA6") +Content; +#endif + +EXTERN_C const CLSID CLSID_Page; + +#ifdef __cplusplus + +class DECLSPEC_UUID("2D5A39C5-6BAC-419e-8964-9199C92F2DA0") +Page; +#endif + +EXTERN_C const CLSID CLSID_Document; + +#ifdef __cplusplus + +class DECLSPEC_UUID("2C02B78D-B66A-4ED4-ADF7-DA2491972621") +Document; +#endif + +EXTERN_C const CLSID CLSID_AlternateImage; + +#ifdef __cplusplus + +class DECLSPEC_UUID("AA7CE8E6-5B44-49CA-A9E1-391F39695207") +AlternateImage; +#endif + +EXTERN_C const CLSID CLSID_Annotation; + +#ifdef __cplusplus + +class DECLSPEC_UUID("69F55E13-7315-4403-AA77-562225172C64") +Annotation; +#endif + +EXTERN_C const CLSID CLSID_OutlineItem; + +#ifdef __cplusplus + +class DECLSPEC_UUID("F236D5D4-21EA-4FE1-A230-D4F48391A284") +OutlineItem; +#endif + +EXTERN_C const CLSID CLSID_Destination; + +#ifdef __cplusplus + +class DECLSPEC_UUID("C4817A5F-DABE-4751-BF36-4643F3E38600") +Destination; +#endif +#endif /* __PDFPARSERLib_LIBRARY_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Scraping/COM/include/PDFParser_i.c b/Scraping/COM/include/PDFParser_i.c new file mode 100644 index 0000000..faccf75 --- /dev/null +++ b/Scraping/COM/include/PDFParser_i.c @@ -0,0 +1,122 @@ +/* this file contains the actual definitions of */ +/* the IIDs and CLSIDs */ + +/* link this file in with the server and any clients */ + + +/* File created by MIDL compiler version 5.01.0164 */ +/* at Tue Dec 06 22:40:04 2005 + */ +/* Compiler settings for P:\PDF\1.4.1.25\PDFParser\PDFParser.idl: + Oicf (OptLev=i2), W1, Zp8, env=Win32, ms_ext, c_ext + error checks: allocation ref bounds_check enum stub_data +*/ +//@@MIDL_FILE_HEADING( ) +#ifdef __cplusplus +extern "C"{ +#endif + + +#ifndef __IID_DEFINED__ +#define __IID_DEFINED__ + +typedef struct _IID +{ + unsigned long x; + unsigned short s1; + unsigned short s2; + unsigned char c[8]; +} IID; + +#endif // __IID_DEFINED__ + +#ifndef CLSID_DEFINED +#define CLSID_DEFINED +typedef IID CLSID; +#endif // CLSID_DEFINED + +const IID LIBID_PDFPARSERLib = {0x4CFD0B17,0x7BAD,0x44E5,{0x90,0x03,0x3A,0xAB,0x04,0xAF,0xB8,0x5B}}; + + +const IID IID_IPDFColorSpace = {0xBD23962F,0xDCCC,0x4324,{0x97,0x66,0xDD,0x84,0x4A,0xC2,0x72,0xEB}}; + + +const IID IID_IPDFTransformMatrix = {0xCC7AEA7A,0x40DD,0x4BB2,{0xA9,0xA7,0x6C,0x34,0xB8,0x5A,0xF9,0xEB}}; + + +const IID IID_IPDFFont = {0xA7A57D1D,0x1041,0x401F,{0xB8,0x36,0xBA,0x1A,0x0F,0x1E,0x54,0xD7}}; + + +const IID IID_IPDFGraphicsState = {0x91E60779,0xE8CF,0x4810,{0x82,0x33,0x9D,0xBB,0x12,0x68,0x2D,0xD6}}; + + +const IID IID_IPDFText = {0x6679C1EC,0x128E,0x4EE2,{0x99,0x63,0x7D,0x4F,0x70,0x47,0xDC,0xA3}}; + + +const IID IID_IPDFImage = {0x4BCEA86A,0xE1CD,0x41EF,{0xB3,0x17,0xC6,0x52,0xE3,0x9A,0xA2,0x04}}; + + +const IID IID_IPDFAlternateImage = {0x62AE898E,0xB1C4,0x4DAE,{0x82,0x8D,0xA0,0x55,0x5B,0xD9,0x04,0x27}}; + + +const IID IID_IPDFDocument = {0xE46A1E80,0x977C,0x42DB,{0xA7,0x70,0x65,0xEF,0x9D,0x31,0x4B,0x13}}; + + +const IID IID_IPDFContent = {0xA4D73C27,0x0670,0x462B,{0xA9,0x1D,0x00,0xA5,0xFA,0xD8,0x84,0xE0}}; + + +const IID IID_IPDFAnnotation = {0x5FBE061F,0x1929,0x4213,{0x83,0x50,0x0A,0x73,0xFE,0x88,0x53,0x53}}; + + +const IID IID_IPDFPage = {0xFABFF1BB,0x3852,0x4BE4,{0x83,0x44,0xBA,0xB9,0x21,0x05,0xD5,0xA0}}; + + +const IID IID_IPDFDestination = {0x405CA7A9,0x10C7,0x40CD,{0xAA,0xA1,0x22,0xEF,0xF0,0x1E,0x2C,0xE5}}; + + +const IID IID_IPDFOutlineItem = {0xE1AFC937,0xB6AC,0x4E19,{0x9B,0xC1,0xF4,0x6E,0x8A,0x12,0x5E,0x6F}}; + + +const CLSID CLSID_ColorSpace = {0x8360A99C,0xF604,0x4DFD,{0x8B,0x26,0xA9,0xE7,0x35,0xE4,0x14,0xAA}}; + + +const CLSID CLSID_TransformMatrix = {0xA52F80A5,0x6BBE,0x460C,{0x92,0x49,0xE8,0xDA,0xB4,0x66,0x88,0xB5}}; + + +const CLSID CLSID_Font = {0xE46EBEE0,0x0E50,0x4A5E,{0x88,0xAC,0x51,0x93,0x35,0xF8,0x71,0x4D}}; + + +const CLSID CLSID_Text = {0xBC62F899,0x1C67,0x4D7A,{0xA5,0xCC,0xF3,0x58,0x19,0x05,0x15,0x52}}; + + +const CLSID CLSID_Image = {0xACC2258C,0xD7ED,0x468C,{0xBF,0x99,0x11,0x87,0x95,0xA9,0x97,0xE0}}; + + +const CLSID CLSID_GraphicsState = {0x39D04D8D,0x6AA7,0x42EC,{0xB3,0xF8,0x6C,0xE5,0xE4,0x4D,0xD3,0x63}}; + + +const CLSID CLSID_Content = {0xF282DB6E,0x18C9,0x4E6A,{0xA3,0xC6,0xA5,0x05,0xFE,0x79,0x9B,0xA6}}; + + +const CLSID CLSID_Page = {0x2D5A39C5,0x6BAC,0x419e,{0x89,0x64,0x91,0x99,0xC9,0x2F,0x2D,0xA0}}; + + +const CLSID CLSID_Document = {0x2C02B78D,0xB66A,0x4ED4,{0xAD,0xF7,0xDA,0x24,0x91,0x97,0x26,0x21}}; + + +const CLSID CLSID_AlternateImage = {0xAA7CE8E6,0x5B44,0x49CA,{0xA9,0xE1,0x39,0x1F,0x39,0x69,0x52,0x07}}; + + +const CLSID CLSID_Annotation = {0x69F55E13,0x7315,0x4403,{0xAA,0x77,0x56,0x22,0x25,0x17,0x2C,0x64}}; + + +const CLSID CLSID_OutlineItem = {0xF236D5D4,0x21EA,0x4FE1,{0xA2,0x30,0xD4,0xF4,0x83,0x91,0xA2,0x84}}; + + +const CLSID CLSID_Destination = {0xC4817A5F,0xDABE,0x4751,{0xBF,0x36,0x46,0x43,0xF3,0xE3,0x86,0x00}}; + + +#ifdef __cplusplus +} +#endif + diff --git a/Scraping/COM/include/expa_c.h b/Scraping/COM/include/expa_c.h new file mode 100644 index 0000000..acd3dfd --- /dev/null +++ b/Scraping/COM/include/expa_c.h @@ -0,0 +1,375 @@ +/* + File: expa_c.h + Copyright: PDF-Tools AG, Switzerland (www.pdf-tools.com) + Description: C/C++ API definition for the PDF export tool (EXPA) +*/ +#ifndef __EXPA_H_ +#define __EXPA_H_ + +#include "pdfcdecl.h" +#include "pdfcodecdecl.h" +#include "pdferror.h" +#include "pdfcommondecl.h" +#include "pdfcontentdecl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef EXPAAPI +# ifdef WIN32 +# ifdef EXPA_EXPORTS +# define EXPAAPI __declspec(dllexport) +# else +# define EXPAAPI __declspec(dllimport) +# endif +# else +# define EXPAAPI +# endif +#endif + +#ifndef EXPACALL +# ifdef WIN32 +# define EXPACALL __stdcall +# else +# define EXPACALL +# endif +#endif + + +#ifdef _UNICODE +#define ExpaDocOpen ExpaDocOpenW +#define ExpaDocGetTitle ExpaDocGetTitleW +#define ExpaDocGetAuthor ExpaDocGetAuthorW +#define ExpaDocGetSubject ExpaDocGetSubjectW +#define ExpaDocGetKeywords ExpaDocGetKeywordsW +#define ExpaDocGetInfoEntry ExpaDocGetInfoEntryW +#define ExpaImageStore ExpaImageStoreW +#define ExpaAnotationGetContents ExpaAnotationGetContentsW +#define ExpaAnnotationGetTextLabel ExpaAnnotationGetTextLabelW +#define ExpaOutlineItemGetTitle ExpaOutlineItemGetTitleW +#define ExpaDocOpenMem ExpaDocOpenMemW +#define ExpaImageStoreInMemory ExpaImageStoreInMemoryW + +#else +#define ExpaDocOpen ExpaDocOpenA +#define ExpaDocGetTitle ExpaDocGetTitleA +#define ExpaDocGetAuthor ExpaDocGetAuthorA +#define ExpaDocGetSubject ExpaDocGetSubjectA +#define ExpaDocGetKeywords ExpaDocGetKeywordsA +#define ExpaDocGetInfoEntry ExpaDocGetInfoEntryA +#define ExpaImageStore ExpaImageStoreA +#define ExpaAnotationGetContents ExpaAnotationGetContentsA +#define ExpaAnnotationGetTextLabel ExpaAnnotationGetTextLabelA +#define ExpaOutlineItemGetTitle ExpaOutlineItemGetTitleA +#define ExpaDocOpenMem ExpaDocOpenMemA +#define ExpaImageStoreInMemory ExpaImageStoreInMemoryA + +#endif + +/** \defgroup types Type definitions + * @{ + */ + +typedef struct TPdfExpaDocument TPdfExpaDocument; /**< document handle type @see \ref document */ +typedef struct TPdfExpaPage TPdfExpaPage; /**< page handle type @see \ref page */ +typedef struct TPdfExpaContent TPdfExpaContent; /**< content handle type @see \ref content */ +typedef struct TPdfExpaText TPdfExpaText; /**< text handle type @see \ref text */ +typedef struct TPdfExpaFont TPdfExpaFont; /**< font handle type @see \ref font */ +typedef struct TPdfExpaColorSpace TPdfExpaColorSpace; /**< color space handle type @see \ref cs */ +typedef struct TPdfExpaGraphicsState TPdfExpaGraphicsState; /**< color space handle type @see \ref gs */ +typedef struct TPdfExpaImage TPdfExpaImage; /**< image handle type @see \ref image */ +typedef struct TPdfExpaOutlineItem TPdfExpaOutlineItem; +typedef struct TPdfExpaDestination TPdfExpaDestination; +typedef struct TPdfExpaAlternateImage TPdfExpaAlternateImage; +typedef struct TPdfExpaAnnotation TPdfExpaAnnotation; +typedef struct TPdfExpaAlternateImageArray TPdfExpaAlternateImageArray; + +typedef TPdfExpaDocument* TExpaDocument; +typedef TPdfExpaPage* TExpaPage; +typedef TPdfExpaContent* TExpaContent; +typedef TPdfExpaText* TExpaText; +typedef TPdfExpaFont* TExpaFont; +typedef TPdfExpaColorSpace* TExpaColorSpace; +typedef TPdfExpaGraphicsState* TExpaGraphicsState; +typedef TPdfExpaImage* TExpaImage; + + +typedef struct TPDFTransformMatrix /** data structure representing a PDF text matrix */ +{ + float a, b, c, d, e, f; + float XSkew; + float YSkew; + float Rotation; + float XTranslation; + float YTranslation; + float XScaling; + float YScaling; + TPDFOrientation Orientation; +} TPDFTransformMatrix; + +typedef struct TPDFVector +{ + float x; + float y; +} TPDFVector; + + /** @} + * \defgroup api API initialization and termination functions + * @{ + */ + +EXPAAPI void EXPACALL ExpaInitialize(); /**< this function must be called before using any other functions of the API */ +EXPAAPI void EXPACALL ExpaUnInitialize();/**< call this function to free resources allocated during InitializeAPI */ + +/************************** document related calls *****************************/ +/** @} + * \defgroup document Document related functions + * @{ + */ + + +EXPAAPI TPdfExpaDocument* EXPACALL ExpaCreateObject(); /**< create a document object */ +EXPAAPI void EXPACALL ExpaDestroyObject(TPdfExpaDocument* handledoc); /**< dispose the document object */ + +/** open a PDF file for data extraction; + * @return non-zero on success */ +EXPAAPI int EXPACALL ExpaDocOpenA(TPdfExpaDocument* handledoc, const char* szFilename, const char* szPassword); +EXPAAPI int EXPACALL ExpaDocOpenW(TPdfExpaDocument* handledoc, const WCHAR* pFilename, const WCHAR* szPassword); +EXPAAPI int EXPACALL ExpaDocOpenMemA(TPdfExpaDocument* handledoc,const unsigned char* pDocumentBytes, int nDocumentLength, const char* szPassword); +EXPAAPI int EXPACALL ExpaDocOpenMemW(TPdfExpaDocument* handledoc,const unsigned char* pDocumentBytes, int nDocumentLength, const WCHAR* szPassword); + +EXPAAPI int EXPACALL ExpaDocClose(TPdfExpaDocument* handledoc);/**< close the document and free all associated resources; + * multiple Open/Close calls are permitted */ +EXPAAPI TPDFErrorCode EXPACALL ExpaDocGetLastError(TPdfExpaDocument* handledoc); + + +EXPAAPI int EXPACALL ExpaDocIsEncrypted(TPdfExpaDocument* handledoc);/**< return non-zero if document is encrypted */ +EXPAAPI int EXPACALL ExpaDocGetMajorVersion(TPdfExpaDocument* handledoc); +EXPAAPI int EXPACALL ExpaDocGetMinorVersion(TPdfExpaDocument* handledoc); +EXPAAPI const char* EXPACALL ExpaDocGetTitleA(TPdfExpaDocument* handledoc); +EXPAAPI const WCHAR* EXPACALL ExpaDocGetTitleW(TPdfExpaDocument* handledoc); +EXPAAPI const char* EXPACALL ExpaDocGetAuthorA(TPdfExpaDocument* handledoc); +EXPAAPI const WCHAR* EXPACALL ExpaDocGetAuthorW(TPdfExpaDocument* handledoc); +EXPAAPI const char* EXPACALL ExpaDocGetSubjectA(TPdfExpaDocument* handledoc); +EXPAAPI const WCHAR* EXPACALL ExpaDocGetSubjectW(TPdfExpaDocument* handledoc); +EXPAAPI const char* EXPACALL ExpaDocGetKeywordsA(TPdfExpaDocument* handledoc); +EXPAAPI const WCHAR* EXPACALL ExpaDocGetKeywordsW(TPdfExpaDocument* handledoc); +EXPAAPI TPDFDate EXPACALL ExpaDocGetModDate(TPdfExpaDocument* handledoc); +EXPAAPI TPDFDate EXPACALL ExpaDocGetCreationDate(TPdfExpaDocument* handledoc); +EXPAAPI const char* EXPACALL ExpaDocGetInfoEntryA(TPdfExpaDocument* handledoc, const char* szKey); +EXPAAPI const WCHAR* EXPACALL ExpaDocGetInfoEntryW(TPdfExpaDocument* handledoc, const WCHAR* szKey); + +EXPAAPI int EXPACALL ExpaDocGetPageCount(TPdfExpaDocument* handledoc);/**< return the number of pages in the document */ +EXPAAPI int EXPACALL ExpaDocSetPageNo(TPdfExpaDocument* handledoc, int iPageNo);/** acquire the specified page for data extraction. @return non-zero on success */ +EXPAAPI int EXPACALL ExpaDocGetPageNo(TPdfExpaDocument* handledoc);/**< return the current page number */ +EXPAAPI TPdfExpaPage* EXPACALL ExpaDocGetPage(TPdfExpaDocument* handledoc); + +EXPAAPI TPdfExpaFont* EXPACALL ExpaDocGetFirstFontResource(TPdfExpaDocument* handledoc); +EXPAAPI TPdfExpaFont* EXPACALL ExpaDocGetNextFontResource(TPdfExpaDocument* handledoc); +EXPAAPI TPdfExpaImage* EXPACALL ExpaDocGetFirstImageResource(TPdfExpaDocument* handledoc); +EXPAAPI TPdfExpaImage* EXPACALL ExpaDocGetNextImageResource(TPdfExpaDocument* handledoc); +EXPAAPI TPdfExpaColorSpace* EXPACALL ExpaDocGetFirstColorSpaceResource(TPdfExpaDocument* handledoc); +EXPAAPI TPdfExpaColorSpace* EXPACALL ExpaDocGetNextColorSpaceResource(TPdfExpaDocument* handledoc); +EXPAAPI TPdfExpaOutlineItem* + EXPACALL ExpaDocGetFirstOutlineItem(TPdfExpaDocument* handledoc); + +EXPAAPI TPdfExpaOutlineItem* + EXPACALL ExpaDocGetNextOutlineItem(TPdfExpaDocument* handledoc, int nMaxLevel, int bReturnOpenOnly); +EXPAAPI int EXPACALL ExpaDocGetCurrentOutlineLevel(TPdfExpaDocument* handledoc); + +/************************** page related calls *****************************/ +/** @} + * \defgroup page Page related functions + * @{ */ +EXPAAPI TPdfExpaDocument* EXPACALL ExpaPageGetDocument(TPdfExpaPage* handlepage); +EXPAAPI TPDFRect EXPACALL ExpaPageGetMediaBox(TPdfExpaPage* handlepage); +EXPAAPI TPDFRect EXPACALL ExpaPageGetCropBox(TPdfExpaPage* handlepage); +EXPAAPI TPDFRect EXPACALL ExpaPageGetBleedBox(TPdfExpaPage* handlepage); +EXPAAPI TPDFRect EXPACALL ExpaPageGetTrimBox(TPdfExpaPage* handlepage); +EXPAAPI TPDFRect EXPACALL ExpaPageGetArtBox(TPdfExpaPage* handlepage); +EXPAAPI int EXPACALL ExpaPageGetRotate(TPdfExpaPage* handlepage); +EXPAAPI TPdfExpaContent* EXPACALL ExpaPageGetContent(TPdfExpaPage* handlepage); +EXPAAPI TPdfExpaAnnotation* + EXPACALL ExpaPageGetFirstAnnotation(TPdfExpaPage* handlepage); + +EXPAAPI TPdfExpaAnnotation* + EXPACALL ExpaPageGetNextAnnotation(TPdfExpaPage* handlepage); + + +/************************** content related calls *****************************/ +/** @} + * \defgroup content Content related functions + * @{ */ +EXPAAPI void EXPACALL ExpaContentResetContent(TPdfExpaContent* handlecont, int iBoolIncludeRotate); +EXPAAPI TPdfExpaGraphicsState* + EXPACALL ExpaContentGetGraphicsState(TPdfExpaContent* handlecont); +EXPAAPI TPdfExpaText* EXPACALL ExpaContentGetText(TPdfExpaContent* handlecont); +EXPAAPI TPdfExpaImage* EXPACALL ExpaContentGetImage(TPdfExpaContent* handlecont); +EXPAAPI const char* EXPACALL ExpaContentGetPath(TPdfExpaContent* handlecont); +EXPAAPI void EXPACALL ExpaContentSetBreakWords(TPdfExpaContent* handlecont, int iBoolOn); +EXPAAPI TPdfExpaText* EXPACALL ExpaContentGetNextText(TPdfExpaContent* handlecont); +EXPAAPI TPdfExpaImage* EXPACALL ExpaContentGetNextImage(TPdfExpaContent* handlecont); +EXPAAPI const char* EXPACALL ExpaContentGetNextPath(TPdfExpaContent* handlecont); +EXPAAPI TPDFContentObject EXPACALL ExpaContentGetNextObject(TPdfExpaContent* handlecont); +EXPAAPI int EXPACALL ExpaContentGetFlags(TPdfExpaContent* handlecont); + +/************************** text related calls *****************************/ +/** @} + * \defgroup text Text extraction related functions + * @{ */ + +EXPAAPI int EXPACALL ExpaTextGetStringLength(TPdfExpaText* handletext);/**< @return the number of characters contained in the unicode text string */ +EXPAAPI const WCHAR* EXPACALL ExpaTextGetUnicodeString(TPdfExpaText* handletext);/**< @return the unicode string, having possibly more than GetStringLength() elements, and terminated with 0x0000 */ +EXPAAPI TPDFVector* EXPACALL ExpaTextGetPosition(TPdfExpaText* handletext); +EXPAAPI float EXPACALL ExpaTextGetFontSize(TPdfExpaText* handletext); +EXPAAPI float EXPACALL ExpaTextGetWidth(TPdfExpaText* handletext); +EXPAAPI float EXPACALL ExpaTextGetRotation(TPdfExpaText* handletext); +EXPAAPI const float* EXPACALL ExpaTextGetBoundingBox(TPdfExpaText* handletext); + +/************************** font related calls *****************************/ +/** @} + * \defgroup font Font related functions + * @{ */ +EXPAAPI const char* EXPACALL ExpaFontGetType(TPdfExpaFont* handlefont); +EXPAAPI const char* EXPACALL ExpaFontGetBaseName(TPdfExpaFont* handlefont); +EXPAAPI const float* EXPACALL ExpaFontGetWidths(TPdfExpaFont* handlefont);/**< @return the character widths of the font + * there are 256 elements in the array that can directly be indexed with the (unsigned) raw string character number */ +EXPAAPI const char* EXPACALL ExpaFontGetEncoding(TPdfExpaFont* handlefont, int iCharIndex);/**< @return the glyph name of each character with CharIndex running from 0 to 255 */ +EXPAAPI long EXPACALL ExpaFontGetFlags(TPdfExpaFont* handlefont); +EXPAAPI const float* EXPACALL ExpaFontGetBBox(TPdfExpaFont* handlefont);/**< @return the bounding box as array of four floats */ +EXPAAPI float EXPACALL ExpaFontGetItalicAngle(TPdfExpaFont* handlefont); +EXPAAPI float EXPACALL ExpaFontGetAscent(TPdfExpaFont* handlefont); +EXPAAPI float EXPACALL ExpaFontGetDescent(TPdfExpaFont* handlefont); +EXPAAPI float EXPACALL ExpaFontGetCapHeight(TPdfExpaFont* handlefont); +EXPAAPI float EXPACALL ExpaFontGetStemV(TPdfExpaFont* handlefont); +EXPAAPI float EXPACALL ExpaFontGetStemH(TPdfExpaFont* handlefont); +EXPAAPI float EXPACALL ExpaFontGetAvgWidth(TPdfExpaFont* handlefont); +EXPAAPI float EXPACALL ExpaFontGetMaxWidth(TPdfExpaFont* handlefont); +EXPAAPI float EXPACALL ExpaFontGetMissingWidth(TPdfExpaFont* handlefont); +EXPAAPI const char* EXPACALL ExpaFontGetCharSet(TPdfExpaFont* handlefont); +EXPAAPI int EXPACALL ExpaFontGetFontFileType(TPdfExpaFont* handlefont); +EXPAAPI const TPDFByteArray* + EXPACALL ExpaFontGetFontFile(TPdfExpaFont* handlefont); +EXPAAPI float EXPACALL ExpaFontGetLeading(TPdfExpaFont* handlefont); +EXPAAPI float EXPACALL ExpaFontGetXHeight(TPdfExpaFont* handlefont); + +/************************** image related calls *****************************/ +/** @} + * \defgroup image Image related functions + * @{ */ +EXPAAPI int EXPACALL ExpaImageGetWidth(TPdfExpaImage* handleimg); +EXPAAPI int EXPACALL ExpaImageGetHeight(TPdfExpaImage* handleimg); +EXPAAPI int EXPACALL ExpaImageGetBitsPerComponent(TPdfExpaImage* handleimg); +EXPAAPI const TPDFByteArray* + EXPACALL ExpaImageGetSamples(TPdfExpaImage* handleimg); +EXPAAPI const TPDFByteArray* + EXPACALL ExpaImageGetMask(TPdfExpaImage* handleimg); +EXPAAPI TPdfExpaColorSpace* EXPACALL ExpaImageGetColorSpace(TPdfExpaImage* handleimg); /**< return color space information for the image */ +EXPAAPI int EXPACALL ExpaImageConvertToRGB(TPdfExpaImage* handleimg); /**< convert image to RGB; @return non-zero on success; BitsPerComponent must be >= 8 */ +EXPAAPI int EXPACALL ExpaImageChangeOrientation(TPdfExpaImage* handleimg, TPDFOrientation iOrientation); /**< change to image according to the specified orientation */ +EXPAAPI int EXPACALL ExpaImageStoreA(TPdfExpaImage* handleimg, const char* szFileName, TPDFCompression iCompression); /**< store image in a TIFF file; returns non-zero on success */ +EXPAAPI int EXPACALL ExpaImageStoreW(TPdfExpaImage* handleimg, const WCHAR* szFileName, TPDFCompression iCompression); /**< store image in a file; returns non-zero on success */ +EXPAAPI int EXPACALL ExpaImageStoreInMemoryA(TPdfExpaImage* handleimg, const char* szExtension, TPDFCompression iCompression); /**< store image in Memory; returns non-zero on success */ +EXPAAPI int EXPACALL ExpaImageStoreInMemoryW(TPdfExpaImage* handleimg, const WCHAR* szExtension, TPDFCompression iCompression); /**< store image in Memory; returns non-zero on success */ +EXPAAPI TPDFByteArray* EXPACALL ExpaImageGetImage(TPdfExpaImage* handleimg); +EXPAAPI TPdfExpaAlternateImageArray* + EXPACALL ExpaImageGetAlternates(TPdfExpaImage* handleimg); +/************************** color space related calls ************************/ +/** @} + * \defgroup cs Color Space related functions + * @{ */ +EXPAAPI int EXPACALL ExpaCSGetComponentsPerPixel(TPdfExpaColorSpace* handleclsp); /**< return the number of components per pixel; for RGB images, this will be 3; for CMYK images: 4 */ +EXPAAPI TPdfExpaColorSpace* EXPACALL ExpaCSGetBaseColorSpace(TPdfExpaColorSpace* handleclsp); +EXPAAPI int EXPACALL ExpaCSIsIndexed(TPdfExpaColorSpace* handleclsp); /**< return non-zero if the color space is indexed (if there is a palette) */ +EXPAAPI int EXPACALL ExpaCSGetHighIndex(TPdfExpaColorSpace* handleclsp); /**< return the number of index values minus 1 */ + +/** @return the colorspace lookup data (palette) + * length is (HighIndex+1)*ComponentsPerPixel */ +EXPAAPI const TPDFByteArray* + EXPACALL ExpaCSGetLookup(TPdfExpaColorSpace* handleclsp); +EXPAAPI const char* EXPACALL ExpaCSGetName(TPdfExpaColorSpace* handleclsp); + +/************************** graphics space related calls **********************/ +/** @} + * \defgroup gs Graphics State related functions + * @{ */ +EXPAAPI TPDFTransformMatrix* + EXPACALL ExpaGSGetCTM(TPdfExpaGraphicsState* handlegrst); +EXPAAPI TPdfExpaColorSpace* EXPACALL ExpaGSGetStrokeColorSpace(TPdfExpaGraphicsState* handlegrst); +EXPAAPI TPdfExpaColorSpace* EXPACALL ExpaGSGetFillColorSpace(TPdfExpaGraphicsState* handlegrst); +EXPAAPI int EXPACALL ExpaGSGetStrokeColorRGB(TPdfExpaGraphicsState* handlegrst); +EXPAAPI int EXPACALL ExpaGSGetFillColorRGB(TPdfExpaGraphicsState* handlegrst); +EXPAAPI int EXPACALL ExpaGSGetStrokeColorCMYK(TPdfExpaGraphicsState* handlegrst); +EXPAAPI int EXPACALL ExpaGSGetFillColorCMYK(TPdfExpaGraphicsState* handlegrst); +EXPAAPI float EXPACALL ExpaGSGetCharSpacing(TPdfExpaGraphicsState* handlegrst); +EXPAAPI float EXPACALL ExpaGSGetWordSpacing(TPdfExpaGraphicsState* handlegrst); +EXPAAPI float EXPACALL ExpaGSGetHorizontalScaling(TPdfExpaGraphicsState* handlegrst); +EXPAAPI float EXPACALL ExpaGSGetLeading(TPdfExpaGraphicsState* handlegrst); +EXPAAPI TPdfExpaFont* EXPACALL ExpaGSGetFont(TPdfExpaGraphicsState* handlegrst); +EXPAAPI float EXPACALL ExpaGSGetFontSize(TPdfExpaGraphicsState* handlegrst); +EXPAAPI int EXPACALL ExpaGSGetTextRenderingMode(TPdfExpaGraphicsState* handlegrst); +EXPAAPI float EXPACALL ExpaGSGetTextRise(TPdfExpaGraphicsState* handlegrst); +EXPAAPI int EXPACALL ExpaGSGetTextKnockout(TPdfExpaGraphicsState* handlegrst); +EXPAAPI float EXPACALL ExpaGSGetLineWidth(TPdfExpaGraphicsState* handlegrst); +EXPAAPI int EXPACALL ExpaGSGetLineCap(TPdfExpaGraphicsState* handlegrst); +EXPAAPI int EXPACALL ExpaGSGetLineJoin(TPdfExpaGraphicsState* handlegrst); +EXPAAPI float EXPACALL ExpaGSGetMiterLimit(TPdfExpaGraphicsState* handlegrst); +EXPAAPI float EXPACALL ExpaGSGetDashPhase(TPdfExpaGraphicsState* handlegrst); +/** retrieve the dash array elements; + * @return the dash array elements + */ +EXPAAPI const TPDFFloatArray* + EXPACALL ExpaGSGetDashArray(TPdfExpaGraphicsState* handlegrst); + +/************************** destination related calls **********************/ +/** @} + * \defgroup Dest Destination related functions + * @{ */ +EXPAAPI const char* EXPACALL ExpaDestGetType(TPdfExpaDestination* handledest); +EXPAAPI int EXPACALL ExpaDestGetPageNo(TPdfExpaDestination* handledest); +EXPAAPI float EXPACALL ExpaDestGetLeft(TPdfExpaDestination* handledest); +EXPAAPI float EXPACALL ExpaDestGetBottom(TPdfExpaDestination* handledest); +EXPAAPI float EXPACALL ExpaDestGetRight(TPdfExpaDestination* handledest); +EXPAAPI float EXPACALL ExpaDestGetTop(TPdfExpaDestination* handledest); +EXPAAPI float EXPACALL ExpaDestGetZoom(TPdfExpaDestination* handledest); + +/************************** AlternateImage related calls **********************/ +/** @} + * \defgroup Alte AlternateImage related functions + * @{ */ +EXPAAPI TPdfExpaAlternateImage* + EXPACALL ExpaAlternateArrayGetElement(TPdfExpaAlternateImageArray* handle, int inx); +EXPAAPI int EXPACALL ExpaAlternateArrayGetCount(TPdfExpaAlternateImageArray* handle); +EXPAAPI TPdfExpaImage* EXPACALL ExpaAlternateGetImage(TPdfExpaAlternateImage* handlealte); +EXPAAPI int EXPACALL ExpaAlternateGetDefaultForPrinting(TPdfExpaAlternateImage* handlealte); + +/************************** Annotation related calls **********************/ +/** @} + * \defgroup Anot Annotation related functions + * @{ */ +EXPAAPI const char* EXPACALL ExpaAnnotationGetSubtype(TPdfExpaAnnotation* handleanot); +EXPAAPI TPDFRect EXPACALL ExpaAnnotationGetRect(TPdfExpaAnnotation* handleanot); +EXPAAPI const char* EXPACALL ExpaAnnotationGetContentsA(TPdfExpaAnnotation* handleanot); +EXPAAPI const WCHAR* EXPACALL ExpaAnnotationGetContentsW(TPdfExpaAnnotation* handleanot); +EXPAAPI const char* EXPACALL ExpaAnnotationGetName(TPdfExpaAnnotation* handleanot); +EXPAAPI TPDFDate EXPACALL ExpaAnnotationGetDate(TPdfExpaAnnotation* handleanot); +EXPAAPI int EXPACALL ExpaAnnotationGetFlags(TPdfExpaAnnotation* handleanot); +EXPAAPI int EXPACALL ExpaAnnotationGetColor(TPdfExpaAnnotation* handleanot); +EXPAAPI const WCHAR* EXPACALL ExpaAnnotationGetTextLabelW(TPdfExpaAnnotation* handleanot); +EXPAAPI const char* EXPACALL ExpaAnnotationGetTextLabelA(TPdfExpaAnnotation* handleanot); + +/************************** OutlineItem related calls **********************/ +/** @} + * \defgroup Olit OutlineItem related functions + * @{ */ +EXPAAPI const char* EXPACALL ExpaOutlineItemGetTitleA(TPdfExpaOutlineItem* handleolit); +EXPAAPI const WCHAR* EXPACALL ExpaOutlineItemGetTitleW(TPdfExpaOutlineItem* handleolit); +EXPAAPI int EXPACALL ExpaOutlineItemGetCount(TPdfExpaOutlineItem* handleolit); +EXPAAPI TPdfExpaDestination* EXPACALL ExpaOutlineItemGetDest(TPdfExpaOutlineItem* handleolit); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Scraping/COM/include/pdfcdecl.h b/Scraping/COM/include/pdfcdecl.h new file mode 100644 index 0000000..3833d2e --- /dev/null +++ b/Scraping/COM/include/pdfcdecl.h @@ -0,0 +1,53 @@ + +/**************************************************************************** + * + * File: pdfdecl.h + * + * Description: The basic header file for native C interfaces. + * + * Author: Dr. Hans Brfuss, PDF Tools AG + * + * Copyright: Copyright (C) 2001 - 2005 PDF Tools AG, Switzerland + * All rights reserved. + * + ***************************************************************************/ + +#ifndef _PDFCDECL_INCLUDED +#define _PDFCDECL_INCLUDED + +#if defined(UNICODE) && !defined(_UNICODE) +#define _UNICODE +#endif + +// Character strings on Windows can be either WinAnsi (CP1252) or Unicode (UTF16). +// On Unix only char strings (8-bit, ISO encoded) are used for OS interfaces. +// WCHAR strings are always UTF16 and may be different to wchar_t. +// This simplifies interoperability with Java. +#ifdef WIN32 +#include +typedef wchar_t WCHAR; +#ifndef CDECL +#define CDECL __cdecl +#endif +#else +#ifndef WCHAR +typedef unsigned short WCHAR; // UTF-16 +#endif +#ifndef CDECL +#define CDECL +#endif +#endif // !defined(WIN32) + +typedef struct TPDFByteArray +{ + unsigned char* m_pData; + long m_nLength; +} TPDFByteArray; + +typedef struct TPDFFloatArray +{ + float* m_pData; + long m_nLength; +} TPDFFloatArray; + +#endif // _PDFCDECL_INCLUDED diff --git a/Scraping/COM/include/pdfcodecdecl.h b/Scraping/COM/include/pdfcodecdecl.h new file mode 100644 index 0000000..9c7d062 --- /dev/null +++ b/Scraping/COM/include/pdfcodecdecl.h @@ -0,0 +1,46 @@ + +/**************************************************************************** + * + * File: pdfcodecdecl.h + * + * Description: The include file for native C interfaces using codecs. + * + * Author: Dr. Hans Brfuss, PDF Tools AG + * + * Copyright: Copyright (C) 2001 - 2005 PDF Tools AG, Switzerland + * All rights reserved. + * + ***************************************************************************/ + +#ifndef _PDFCODECDECL_INCLUDED +#define _PDFCODECDECL_INCLUDED + +typedef enum TPDFCompression +{ + eComprRaw, // No compression (raw). + eComprJPEG, // Lossless DCT (Discrete Cosine Transform, JPEG) compression. + eComprFlate, // Lossless flate (ZIP)compression. + eComprLZW, // Lossless LZW (Lempel-Ziff-Welch) compression. + eComprGroup3, // Lossless CCITT Fax Group3 compression. + eComprGroup3_2D, // Lossless CCITT Fax Group3 (2D) compression. + eComprGroup4, // Lossless CCITT Fax Group4 compression. + eComprJBIG2, // Lossless JBGI2 compression. + eComprJPEG2000, // Lossy JPEG2000 compression. + eComprUnknown +} TPDFCompression; + +typedef enum TPDFColorSpace +{ + eColorGray, // One channel gray. + eColorGrayA, // Two channels gray and alpha. + eColorRGB, // Three channels red, green, blue. + eColorRGBA, // Four channels red, green, blue, alpha. + eColorCMYK, // Four channels cyan, magenta, yellow, black. + eColorYCbCr, // Three channels Luminance (Y) and Chroma (Cb, Cr) + eColorYCbCrK, // Four channels Luminance (Y), Chroma (Cb, Cr) and black. + eColorPalette, // One channel palette indices (into an RGB color table). + eColorLAB, // Three channels IEC LAB. + eColorOther +} TPDFColorSpace; + +#endif // _PDFCODECDECL_INCLUDED diff --git a/Scraping/COM/include/pdfcommondecl.h b/Scraping/COM/include/pdfcommondecl.h new file mode 100644 index 0000000..48126e1 --- /dev/null +++ b/Scraping/COM/include/pdfcommondecl.h @@ -0,0 +1,48 @@ + +/**************************************************************************** + * + * File: pdfcommondecl.h + * + * Description: The include file for native C interfaces using PDF common objects. + * + * Author: Dr. Hans Brfuss, PDF Tools AG + * + * Copyright: Copyright (C) 2001 - 2005 PDF Tools AG, Switzerland + * All rights reserved. + * + ***************************************************************************/ + +#ifndef _PDFCOMMONDECL_INCLUDED +#define _PDFCOMMONDECL_INCLUDED + +typedef struct TPDFRect +{ + float m_fRect[4]; +} TPDFRect; + +/** orientation enumeration type */ +typedef enum TPDFOrientation +{ + eOrientationTopLeft = 1, + eOrientationTopRight = 2, + eOrientationBottomRight = 3, + eOrientationBottomLeft = 4, + eOrientationLeftTop = 5, + eOrientationRightTop = 6, + eOrientationRightBottom = 7, + eOrientationLeftBottom = 8 +} TPDFOrientation; + +/** structure representing a date and time of day (e.g. CreationDate) */ +typedef struct TPDFDate +{ + short iYear; /**< year 1900..2100 */ + short iMonth ; /**< 1..12 */ + short iDay; /**< 1..31 */ + short iHour; /**< 0..23 */ + short iMinute; /**< 0..59 */ + short iSecond; /**< 0..59 */ + signed short iUtcOffset; /**< time zone information, offset to UTC in minutes */ +} TPDFDate; + +#endif //_PDFCOMMONDECL_INCLUDED diff --git a/Scraping/COM/include/pdfcontentdecl.h b/Scraping/COM/include/pdfcontentdecl.h new file mode 100644 index 0000000..dbd4975 --- /dev/null +++ b/Scraping/COM/include/pdfcontentdecl.h @@ -0,0 +1,26 @@ + +/**************************************************************************** + * + * File: pdfcontentdecl.h + * + * Description: The include file for native C interfaces using page and form contents. + * + * Author: Dr. Hans Brfuss, PDF Tools AG + * + * Copyright: Copyright (C) 2001 - 2005 PDF Tools AG, Switzerland + * All rights reserved. + * + ***************************************************************************/ + +#ifndef _PDFCONTENTDECL_INCLUDED +#define _PDFCONTENTDECL_INCLUDED + +typedef enum TPDFContentObject +{ + eNone, + eText, + eImage, + ePath +} TPDFContentObject; + +#endif //_PDFCONTENTDECL_INCLUDED diff --git a/Scraping/COM/include/pdferror.h b/Scraping/COM/include/pdferror.h new file mode 100644 index 0000000..0b07eb1 --- /dev/null +++ b/Scraping/COM/include/pdferror.h @@ -0,0 +1,143 @@ + +/**************************************************************************** + * + * File: pdferror.h + * + * Description: The PDF error codes. + * + * Author: Dr. Hans Brfuss, PDF Tools AG + * + * Copyright: Copyright (C) 2001 - 2005 PDF Tools AG, Switzerland + * All rights reserved. + * + ***************************************************************************/ + +#ifndef _PDFERROR_INCLUDED +#define _PDFERROR_INCLUDED + +#ifndef LIBPDFAPI +#define LIBPDFAPI +#endif + +#define PDF_IS_ERROR(code) (((unsigned int) (code) & 0x80000000) != 0) +#define PDF_IS_WARNING(code) (((unsigned int) (code) & 0x00008000) != 0) + +typedef enum TPDFErrorCode +{ +// PDF general codes. +PDF_S_SUCCESS = 0x00000000, // The operation was completed successfully. +PDF_E_FATAL = 0x8041ffff, // Unknown fatal error. + +// PDF stream module. +PDF_E_FILEOPEN = 0x80410001, // The file couldn't be opened. +PDF_E_FILECREATE = 0x80410002, // The file couldn't be created. +PDF_E_SETPOS = 0x80410003, // The read / write position pointer couldn't be set. + +// PDF file module. +PDF_E_HEADER = 0x80410010, // The PDF header was not found. +PDF_E_EOF = 0x80410011, // The PDF end of file mark was not found. +PDF_E_XREF = 0x80410012, // The xref table contains an error. +PDF_E_TRAILER = 0x80410013, // The trailer dictionary is missing or invalid. +PDF_E_ROOT = 0x80410014, // The root object was not found. +PDF_E_PASSWORD = 0x80410015, // The authentication failed due to a wrong password. +PDF_E_CORRUPT = 0x80410016, // The file is corrupt and needs to be repaired. +PDF_W_CORRUPT = 0x00418016, // The file is corrupt and needs to be repaired. +PDF_W_OBJNUMBER = 0x00418017, // The object with this number doesn't exist. +PDF_W_GENNUMBER = 0x00418018, // The generation numbers of the object and the objects reference do not match. + +// PDF filter module. +PDF_E_FILTER = 0x80410060, // The filter is unknown. +PDF_E_ASCIIHEX = 0x80410061, // A character in an ASCIIHex stream is invalid. +PDF_E_ASCII85_G5 = 0x80410062, // The value represented by a group of five characters in an ASCII85 stream is invalid. +PDF_E_ASCII85_Z = 0x80410063, // The position of a z character in an ASCII85 stream is invalid. +PDF_E_ASCII85_G1 = 0x80410064, // A final partial group in an ASCII85 stream contains only one character. +PDF_E_ASCII85_CH = 0x80410065, // An invalid character was encountered in an ASCII85 stream. +PDF_E_FLATE_DINI = 0x80410066, // The deflate initialization failed with %d. +PDF_E_FLATE_DFAIL = 0x80410067, // The deflate operation failed with %d. +PDF_E_FLATE_IINI = 0x80410068, // The inflate initialization failed with %d. +PDF_E_FLATE_IFAIL = 0x80410069, // The inflate operation failed with %d. +PDF_E_LZW_EOI = 0x80410070, // An EOI code was missing in an LZW stream. +PDF_E_LZW_CODE = 0x80410071, // An invalid code was encountered in an LZW stream. +PDF_E_CCITTFAX_1DEXT= 0x80410072, // The CCITTFax stream contains 1D extensions. +PDF_E_CCITTFAX_HUFF1D= 0x80410073, // The CCITTFax stream contains an invalid 1D huffman code. +PDF_E_CCITTFAX_LINE = 0x80410074, // The CCITTFax stream contains a line which is too long. +PDF_E_CCITTFAX_RUN = 0x80410075, // The CCITTFax stream contains too few runs. +PDF_E_CCITTFAX_2DEXT= 0x80410076, // The CCITTFax stream contains 2D extensions. +PDF_E_CCITTFAX_HUFF2D= 0x80410077, // The CCITTFax stream contains an invalid 2D huffman code. +PDF_E_JPX_FEATURE = 0x80410078, // The JPX stream contains unsupported features. +PDF_E_JPX_INTERNAL = 0x80410079, // The JPX stream caused an internal library error with code %d. +PDF_I_JB2 = 0x00410080, // The JB2 stream caused the information '%s'. +PDF_W_JB2 = 0x00418080, // The JB2 stream caused the warning '%s'. +PDF_E_JB2 = 0x80410080, // The JB2 stream caused the error '%s'. +PDF_E_IMAGEDATA = 0x80410081, // The image data stream is too short. + +// PDF parser module. +PDF_E_OBJNO = 0x80410021, // The object number is missing. +PDF_E_GENNO = 0x80410022, // The generation number is missing. +PDF_E_IDENTITY = 0x80410023, // The object's identity doesn't match with the reference's. +PDF_E_OBJ = 0x80410024, // The "obj" keyword is missing. +PDF_E_NULL = 0x80410025, // The object is empty (null). +PDF_E_LENGTH = 0x80410026, // The "Length" attribute of the stream object is wrong. +PDF_E_ENDSTREAM = 0x80410027, // The "endstream" keyword is missing. +PDF_E_ENDOBJ = 0x80410028, // The "endobj" keyword is missing. + +// PDF document module. +PDF_E_PAGE = 0x80410031, // The page doesn't exist (null). +PDF_E_PAGETYPE = 0x80410032, // The page has a missing or invalid "Type" attribute. +PDF_E_PAGEKIDS = 0x80410033, // The page has a missing or invalid "Kids" attribute. +PDF_E_PAGECOUNT = 0x80410034, // The page has a missing or invalid "Count" attribute. +PDF_E_PAGEPARENT = 0x80410035, // The page has a missing or invalid "Parent" attribute. +PDF_E_PAGERES = 0x80410036, // The page has a missing or invalid "Resource" attribute. +PDF_E_PAGEMEDIABOX = 0x80410037, // The page has a missing or invalid "MediaBox" attribute. +PDF_I_OPEN = 0x00410001, // The document is going to be opened. +PDF_I_PAGE = 0x00410002, // The page is going to be read. + +// PDF content module. +PDF_E_TOKEN = 0x80410041, // An unexpected token was found. +PDF_E_OPERATOR = 0x80410042, // The content stream contains an invalid operator. +PDF_E_OPERANDS = 0x80410043, // The operator has an invalid number of operands. +PDF_E_OPNDSTACK = 0x80410044, // An operand stack over- or underflow occured. +PDF_E_OPNDNUMBER = 0x80410045, // The operand must be a number. +PDF_E_OPNDSTRING = 0x80410046, // The operand must be a string. +PDF_E_OPNDNAME = 0x80410047, // The operand must be a name. +PDF_E_OPNDARRAY = 0x80410048, // The operand must be an array. +PDF_E_OPNDDICT = 0x80410049, // The operand must be a dictionary. +PDF_E_OPNDVALUE = 0x8041004A, // The value of an operand is out of range. +PDF_E_UNKCOLORSPACE = 0x8041004B, // The name of the color space is unknown. +PDF_E_UNKGS = 0x8041004C, // The name of a graphics state dictionary is unknown. +PDF_E_UNKPAT = 0x8041004D, // The name of a pattern dictionary is unknown. +PDF_E_UNKXOBJ = 0x8041004E, // The name of a xobject is unknown. +PDF_E_GSSTACK = 0x80410051, // A graphics state stack over- or underflow occurred. +PDF_E_BEGINTEXT = 0x80410052, // A begin text operator is missing. +PDF_E_ENDTEXT = 0x80410053, // An end text operator is missing. +PDF_E_BEGINPATH = 0x80410054, // A path start operator was missing. +PDF_E_EMPTYXOBJ = 0x80410055, // The form xobject has an empty or unreadable content stream. +PDF_I_UNUSEDPATH = 0x00410056, // An path was constructed but not painted. +PDF_I_GSSTATE = 0x00410057, // An unknown graphics state parameter was encountered. +PDF_W_EMPTYPATH = 0x00418058, // A path painting operator was used on an empty path. + +// PDF font module. +PDF_E_FONTPROG = 0x80410060, // The font program cannot be read. + +// PDF rendering module. +PDF_E_PATTERNTYPE = 0x81410001, // The type of pattern is unknown or not yet implemented. +PDF_E_CHARPROC = 0x81410002, // The glyph's charproc was not found. +PDF_E_SHADINGTYPE = 0x81410003, // The type of shading is unknown or not yet implemented. +PDF_E_FONTINSTALL = 0x81410004, // The font program couldn't be installed successfully. +PDF_E_STANDARDFONT = 0x81410005, // The font program of a standard font was not found. +PDF_W_SAMPLELENGTH = 0x01418006, // The length of the image's sample stream is not correct. +PDF_W_PAINTMISSING = 0x01418007, // The path is constructed but the painting operator is missing. +PDF_W_SYSTEMFONT = 0x00418008, // The font uses a pre-installed system font. +PDF_W_FONTREPLACE = 0x00418009, // The font was replaced by an other font. + +} TPDFErrorCode; + +#ifndef __midl + +typedef void (CDECL *TPDFErrorHandler)(TPDFErrorCode iErrorCode, va_list args); +LIBPDFAPI const char* CDECL GetPDFErrorMessage(TPDFErrorCode iErrorCode); + +#endif + +#endif // _PDFERROR_INCLUDED + diff --git a/Scraping/COM/include/pdfsecuritydecl.h b/Scraping/COM/include/pdfsecuritydecl.h new file mode 100644 index 0000000..457bdde --- /dev/null +++ b/Scraping/COM/include/pdfsecuritydecl.h @@ -0,0 +1,31 @@ + +/**************************************************************************** + * + * File: pdfsecuritydecl.h + * + * Description: The include file for native C interfaces using security handlers. + * + * Author: Dr. Hans Brfuss, PDF Tools AG + * + * Copyright: Copyright (C) 2001 - 2005 PDF Tools AG, Switzerland + * All rights reserved. + * + ***************************************************************************/ + +#ifndef _PDFPERMISSION_INCLUDED +#define _PDFPERMISSION_INCLUDED + +typedef enum TPDFPermission +{ + ePermPrint = 0x00000004, + ePermModify = 0x00000008, + ePermCopy = 0x00000010, + ePermAnnotate = 0x00000020, + ePermFillForms = 0x00000100, + ePermSupportDisabilities = 0x00000200, + ePermAssemble = 0x00000400, + ePermDigitalPrint = 0x00000800, + ePermAll = 0x00000F3C, +} TPDFPermission; + +#endif // _PDFPERMISSION_INCLUDED diff --git a/Scraping/COM/jar/EXPA.jar b/Scraping/COM/jar/EXPA.jar new file mode 100644 index 0000000..f3d4364 Binary files /dev/null and b/Scraping/COM/jar/EXPA.jar differ diff --git a/Scraping/COM/lib/PDFParser.lib b/Scraping/COM/lib/PDFParser.lib new file mode 100644 index 0000000..0f622f5 Binary files /dev/null and b/Scraping/COM/lib/PDFParser.lib differ diff --git a/Scraping/COM/samples/ASP/getimg.asp b/Scraping/COM/samples/ASP/getimg.asp new file mode 100644 index 0000000..fe74850 --- /dev/null +++ b/Scraping/COM/samples/ASP/getimg.asp @@ -0,0 +1,39 @@ +<%@ Language=VBScript %> + +<% + Dim pdfDoc + Dim content + Dim text + set pdfDoc = Server.CreateObject("PDFParser.Document") + + If not pdfDoc.Open(Server.Mappath("in_sample.pdf")) then + Response.Write "

" + Response.Write "Could not open file." & "
" + End if + + pdfDoc.PageNo = 1 + set content = pdfDoc.Page.content + If Not (content Is Nothing) Then + for iImg = 1 to 10 + Set image = content.GetNextImage + If Not (image Is Nothing) Then + Height = image.Height + imgName = "img" & iImg & ".jpg" + image.ConvertToRGB + image.Store Server.Mappath(imgName) + Else + Response.Write "

No more images" & "

" + Exit For + End If + Set ctm = content.GraphicsState.ctm + Width = ctm.a + Height = ctm.d + X = ctm.e + y = ctm.f + Response.Write "

Image " & iImg & ": (" & round(Height, 1) & " x " & round(Width, 1) & ") at (" & round(X, 1) & ", " & round(Y, 1) & ")
" + Response.Write " & imgName &

" + next + Else + Response.Write "

There is no content on this page" & "

" + End If +%> diff --git a/Scraping/COM/samples/ASP/getpage.asp b/Scraping/COM/samples/ASP/getpage.asp new file mode 100644 index 0000000..f573bee --- /dev/null +++ b/Scraping/COM/samples/ASP/getpage.asp @@ -0,0 +1,20 @@ +<%@ Language=VBScript %> + +<% + + option explicit + + dim pdfDoc + + set pdfDoc = Server.CreateObject("PDFParser.Document") + + if not pdfDoc.Open(Server.Mappath("in_sample.pdf")) then + Response.Write "

" + Response.Write "Could not open file." & "
" + end if + + Response.Write "

" + Response.Write "Number of pages: " & pdfDoc.PageCount & "
" + Response.Write "

" + +%> diff --git a/Scraping/COM/samples/ASP/gettext.asp b/Scraping/COM/samples/ASP/gettext.asp new file mode 100644 index 0000000..11a3598 --- /dev/null +++ b/Scraping/COM/samples/ASP/gettext.asp @@ -0,0 +1,44 @@ +<%@ Language=VBScript %> + +<% + Dim pdfDoc + Dim content + Dim text + + set pdfDoc = Server.CreateObject("PDFParser.Document") + + If not pdfDoc.Open(Server.Mappath("in_sample.pdf")) then + Response.Write "

" + Response.Write "Could not open file." & "
" + End if + + pdfDoc.PageNo = 1 + set content = pdfDoc.Page.content + If Not (content Is Nothing) Then + content.BreakWords = True + set text = content.text + content.Reset True + Yold = -1 + thetext = "" + Do + If content.GetNextText Is Nothing Then Exit Do + set text = content.text + if text.length > 0 then + YPos = text.YPos + Y = YPos(0) + If Yold = Y Then + thetext = thetext & " " & text.UnicodeString + Else + Response.Write Server.HTMLEncode(thetext) & "
" + thetext = text.UnicodeString + End If + Yold = Y + end if + loop + Else + Response.Write "

" + Response.Write "There is no content on this page" & "
" + Response.Write "

" + End If +%> + diff --git a/Scraping/COM/samples/CPP/comparser/ReadMe.txt b/Scraping/COM/samples/CPP/comparser/ReadMe.txt new file mode 100644 index 0000000..e11ce4a --- /dev/null +++ b/Scraping/COM/samples/CPP/comparser/ReadMe.txt @@ -0,0 +1,34 @@ +======================================================================== + KONSOLENANWENDUNG : comparser +======================================================================== + + +Diese comparser-Anwendung hat der Anwendungs-Assistent fr Sie erstellt. + +Diese Datei enthlt eine Zusammenfassung dessen, was Sie in jeder der Dateien +finden, die Ihre comparser-Anwendung bilden. + +comparser.dsp + Diese Datei (Projektdatei) enthlt Informationen auf Projektebene und wird zur + Erstellung eines einzelnen Projekts oder Teilprojekts verwendet. Andere Benutzer knnen + die Projektdatei (.dsp) gemeinsam nutzen, sollten aber die Makefiles lokal exportieren. + +comparser.cpp + Dieses ist die Hauptquellcodedatei der Anwendung. + + +///////////////////////////////////////////////////////////////////////////// +Weitere Standarddateien: + +StdAfx.h, StdAfx.cpp + Diese Dateien werden zum Erstellen einer vorkompilierten Header-Datei (PCH) namens + comparser.pch und einer vorkompilierten Typdatei namens StdAfx.obj verwendet. + + +///////////////////////////////////////////////////////////////////////////// +Weitere Hinweise: + +Der Anwendungs-Assistent verwendet "ZU ERLEDIGEN:", um Bereiche des Quellcodes zu +kennzeichnen, die Sie hinzufgen oder anpassen sollten. + +///////////////////////////////////////////////////////////////////////////// diff --git a/Scraping/COM/samples/CPP/comparser/StdAfx.cpp b/Scraping/COM/samples/CPP/comparser/StdAfx.cpp new file mode 100644 index 0000000..651328c --- /dev/null +++ b/Scraping/COM/samples/CPP/comparser/StdAfx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : Quelltextdatei, die nur die Standard-Includes einbindet +// comparser.pch ist die vorkompilierte Header-Datei +// stdafx.obj enthlt die vorkompilierte Typinformation + +#include "stdafx.h" + +// ZU ERLEDIGEN: Verweis auf alle zustzlichen Header-Dateien, die Sie in STDAFX.H +// und nicht in dieser Datei bentigen diff --git a/Scraping/COM/samples/CPP/comparser/StdAfx.h b/Scraping/COM/samples/CPP/comparser/StdAfx.h new file mode 100644 index 0000000..d8e10d0 --- /dev/null +++ b/Scraping/COM/samples/CPP/comparser/StdAfx.h @@ -0,0 +1,14 @@ +#if !defined(AFX_STDAFX_H__26DD6F9B_989C_4AE1_814D_BBD9DC3B3A67__INCLUDED_) +#define AFX_STDAFX_H__26DD6F9B_989C_4AE1_814D_BBD9DC3B3A67__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#define WIN32_LEAN_AND_MEAN + +#include +#include +#include + +#endif // !defined(AFX_STDAFX_H__26DD6F9B_989C_4AE1_814D_BBD9DC3B3A67__INCLUDED_) diff --git a/Scraping/COM/samples/CPP/comparser/comparser.cpp b/Scraping/COM/samples/CPP/comparser/comparser.cpp new file mode 100644 index 0000000..d0a41b2 --- /dev/null +++ b/Scraping/COM/samples/CPP/comparser/comparser.cpp @@ -0,0 +1,137 @@ +/**************************************************************************** + * + * File: comparser.cpp + * + * Usage: comparser input.pdf + * + * Description: Very simple text extraction through the COM interface. + * + * Version: 1.01 (5-April-2004) + * + * Author: Hans Baerfuss, PDF Tools AG + * + * Copyright: Copyright (C) 2004 PDF Tools AG, Switzerland + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation. This software is provided "as is" without + * express or implied warranty. + * + ***************************************************************************/ + +#include "stdafx.h" +#include "pdfparser.h" +#include "pdfparser_i.c" + +void Usage(char* argv0) +{ + printf("PDF Export API - C++ COM Sample\n" + "Usage: %s input.pdf\n", argv0); + printf("Errors: 1 - couldn't open input file\n" + " 3 - too few arguments\n" + " 4 - couldn't create COM object\n"); +} + +int main(int argc, char* argv[]) +{ + // Check if there are enough arguments. + if (argc < 2) + { + Usage(argv[0]); + return 3; + } + + // Initialize COM. + ::CoInitialize(NULL); + + // Create the COM object. + IPDFDocument* pDocument = NULL; + HRESULT hResult = ::CoCreateInstance(CLSID_Document, NULL, CLSCTX_INPROC_SERVER, IID_IPDFDocument, (void**) &pDocument); + if (FAILED(hResult)) + { + fprintf(stderr, "Couldn't create COM object\n"); + ::CoUninitialize(); + return 4; + } + + // Open the PDF input document. + USES_CONVERSION; + VARIANT_BOOL bDone; + BSTR fn = T2OLE(argv[1]); + BSTR password = OLESTR(""); + hResult = pDocument->Open(fn, password, &bDone); + if (FAILED(hResult) || bDone == 0) + { + fprintf(stderr, "Couldn't open input file\n"); + pDocument->Release(); + ::CoUninitialize(); + return 1; + } + + // Traverse the pages. + long nPageCount; + hResult = pDocument->get_PageCount(&nPageCount); + for (long i = 1; i <= nPageCount; i++) + { + printf("Page no. %d\n", i); + hResult = pDocument->put_PageNo(i); + + // Get the page interface. + IPDFPage* pPage = NULL; + hResult = pDocument->get_Page(&pPage); + if (!pPage) + continue; + + // Get the content interface. + IPDFContent* pContent = NULL; + pPage->get_Content(&pContent); + if (!pContent) + continue; + + // Traverse the objects in the page content. + for (;;) + { + TPDFContentObject iResult; + hResult = pContent->GetNextObject(&iResult); + switch (iResult) + { + // Exit when there are no more objects. + case eNone: + goto _exitloop; + + // Extract the text. + case eText: + { + IPDFText* pText = NULL; + hResult = pContent->get_Text(&pText); + + BSTR s = NULL; + hResult = pText->get_UnicodeString(&s); + if (s) + wprintf(L"Text: %s\r\n", s); + ::SysFreeString(s); + pText->Release(); + } + break; + } + } + _exitloop: + + // Release the content and page object. + pContent->Release(); + pPage->Release(); + } + + // Close the document. + hResult = pDocument->Close(); + + // Release the document object. + pDocument->Release(); + + // Uninitialize COM. + ::CoUninitialize(); + return 0; +} + diff --git a/Scraping/COM/samples/CPP/comparser/comparser.dsp b/Scraping/COM/samples/CPP/comparser/comparser.dsp new file mode 100644 index 0000000..606e839 --- /dev/null +++ b/Scraping/COM/samples/CPP/comparser/comparser.dsp @@ -0,0 +1,114 @@ +# Microsoft Developer Studio Project File - Name="comparser" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=comparser - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "comparser.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "comparser.mak" CFG="comparser - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "comparser - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "comparser - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName ""$/Support/Samples3H/PdfParser/CPP/comparser", DGJAAAAA" +# PROP Scc_LocalPath "." +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "comparser - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c +# ADD BASE RSC /l 0x807 /d "NDEBUG" +# ADD RSC /l 0x807 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "comparser - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /Yu"stdafx.h" /FD /GZ /c +# ADD BASE RSC /l 0x807 /d "_DEBUG" +# ADD RSC /l 0x807 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "comparser - Win32 Release" +# Name "comparser - Win32 Debug" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\comparser.cpp +# End Source File +# Begin Source File + +SOURCE=.\StdAfx.cpp +# ADD CPP /Yc"stdafx.h" +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\StdAfx.h +# End Source File +# End Group +# Begin Group "Ressourcendateien" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=.\ReadMe.txt +# End Source File +# End Target +# End Project diff --git a/Scraping/COM/samples/CPP/comparser/comparser.dsw b/Scraping/COM/samples/CPP/comparser/comparser.dsw new file mode 100644 index 0000000..1e06533 --- /dev/null +++ b/Scraping/COM/samples/CPP/comparser/comparser.dsw @@ -0,0 +1,58 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 + +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + + + +############################################################################### + + + +Project: "comparser"=.\comparser.dsp - Package Owner=<4> + + + +Package=<5> + +{{{ + +}}} + + + +Package=<4> + +{{{ + +}}} + + + +############################################################################### + + + +Global: + + + +Package=<5> + +{{{ + +}}} + + + +Package=<3> + +{{{ + +}}} + + + +############################################################################### + + + diff --git a/Scraping/COM/samples/CPP/imgext/imgext.cpp b/Scraping/COM/samples/CPP/imgext/imgext.cpp new file mode 100644 index 0000000..b124c7a --- /dev/null +++ b/Scraping/COM/samples/CPP/imgext/imgext.cpp @@ -0,0 +1,85 @@ +/**************************************************************************** + * + * File: imgext.cpp + * + * Usage: imgext PDF-input + * + * Description: Extracts Images of a PDF document + * + * Version: 1.00 (15-Nov-2005) + * + * Author: Philip Renggli, PDF Tools AG + * + * Copyright: Copyright (C) 2005 PDF Tools AG, Switzerland + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation. This software is provided "as is" without + * express or implied warranty. + * + ***************************************************************************/ + +#include +#include +#include +#include "expa_c.h" + + +int main(int argc, char* argv[]) +{ + TExpaDocument pDocument; + TExpaContent pContent; + TExpaGraphicsState pGs; + TExpaImage pImage; + double dWidth, dHeight; + int iImageNumber; + char cImageNumber[33]; + + if (argc < 2) + { + printf("Usage: imgext input.pdf"); + return 3; + } + + /* Create the object */ + ExpaInitialize(); + pDocument = ExpaCreateObject(); + + /* Open the document */ + if (!ExpaDocOpen(pDocument, argv[1], "")) + { + printf("error opening PDF file %s...\n",argv[1]); + return 1; + } + + /* Loop through all page and render them */ + iImageNumber = 1; + for(int iPage = 1; iPage <= ExpaDocGetPageCount(pDocument); iPage++) + { + /* Set the page number */ + ExpaDocSetPageNo(pDocument, iPage); + + /* Get the content */ + pContent = ExpaPageGetContent(ExpaDocGetPage(pDocument)); + + while (ExpaContentGetNextImage(pContent)) + { + pImage = ExpaContentGetImage(pContent); + dWidth = ExpaImageGetWidth(pImage); + dHeight = ExpaImageGetHeight(pImage); + pGs = ExpaContentGetGraphicsState(pContent); + ExpaImageChangeOrientation(pImage, ExpaGSGetCTM(pGs)->Orientation); + sprintf(cImageNumber, "%d", iImageNumber++); + /* The name of the extention decides which image type is used. i.e. tif, jpg) */ + ExpaImageStore(pImage, strcat(cImageNumber, "-image.jpg"), eComprRaw); + } + } + + /* Close and destroy the object */ + ExpaDocClose(pDocument); + ExpaDestroyObject(pDocument); + ExpaUnInitialize(); + return 0; +} diff --git a/Scraping/COM/samples/CPP/imgext/imgext.dsp b/Scraping/COM/samples/CPP/imgext/imgext.dsp new file mode 100644 index 0000000..963357e --- /dev/null +++ b/Scraping/COM/samples/CPP/imgext/imgext.dsp @@ -0,0 +1,102 @@ +# Microsoft Developer Studio Project File - Name="imgext" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=imgext - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "imgext.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "imgext.mak" CFG="imgext - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "imgext - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "imgext - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName ""$/Support/Samples3H/PdfParser/CPP/imgext", LNQAAAAA" +# PROP Scc_LocalPath "." +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "imgext - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x807 /d "NDEBUG" +# ADD RSC /l 0x807 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 e:\bin\lib\PDFParser.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "imgext - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c +# ADD BASE RSC /l 0x807 /d "_DEBUG" +# ADD RSC /l 0x807 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 PDFParser.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "imgext - Win32 Release" +# Name "imgext - Win32 Debug" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\imgext.cpp +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Ressourcendateien" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/Scraping/COM/samples/CPP/imgext/imgext.dsw b/Scraping/COM/samples/CPP/imgext/imgext.dsw new file mode 100644 index 0000000..23300fd --- /dev/null +++ b/Scraping/COM/samples/CPP/imgext/imgext.dsw @@ -0,0 +1,33 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "imgext"=.\imgext.dsp - Package Owner=<4> + +Package=<5> +{{{ + begin source code control + "$/Support/Samples3H/PdfParser/CPP/imgext", LNQAAAAA + . + end source code control +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/Scraping/COM/samples/CPP/outlineext/outlineext.cpp b/Scraping/COM/samples/CPP/outlineext/outlineext.cpp new file mode 100644 index 0000000..0e8442f --- /dev/null +++ b/Scraping/COM/samples/CPP/outlineext/outlineext.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** + * + * File: outlineext.cpp + * + * Usage: outlineext PDF-input output.txt + * + * Description: Extracts the outlines (bookmarks) of a PDF document and + * prints them to an Ascii file + * + * Version: 1.00 (25-July-2005) + * + * Author: Philip Renggli, PDF Tools AG + * + * Copyright: Copyright (C) 2005 PDF Tools AG, Switzerland + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation. This software is provided "as is" without + * express or implied warranty. + * + ***************************************************************************/ + +#include +#include +#include "expa_c.h" + +int main(int argc, char* argv[]) +{ + TExpaDocument pDocument; + TPdfExpaOutlineItem* pOutline; + FILE* out; + + if (argc < 3) + { + printf("Usage: outlineext input.pdf output.txt"); + return 3; + } + + ExpaInitialize(); + + /* Create the object */ + pDocument = ExpaCreateObject(); + + /* Open the document */ + if (!ExpaDocOpen(pDocument, argv[1], "")) + { + printf("error opening PDF file %s...\n",argv[1]); + return 1; + } + + /* Create an Ascii Output file */ + out = fopen(argv[2], "w"); + if (!out){ + fprintf(stderr, "Couldn't create file %s\n", argv[2]); + return 2; + } + + /* get root node */ + pOutline = ExpaDocGetFirstOutlineItem(pDocument); + + /* walk through outline tree and print the titles */ + while(pOutline) + { + for (int iLevel=1; iLevel < ExpaDocGetCurrentOutlineLevel(pDocument); iLevel++) + fprintf(out, " "); + fprintf(out, "%s (%s", ExpaOutlineItemGetTitleA(pOutline), ExpaDestGetType(ExpaOutlineItemGetDest(pOutline))); + fprintf(out, " %i)", ExpaDestGetPageNo(ExpaOutlineItemGetDest(pOutline))); + fprintf(out, "count = %i \n", ExpaOutlineItemGetCount(pOutline)); + pOutline = ExpaDocGetNextOutlineItem(pDocument, 1000, false); + } + + /* Close the text file */ + fclose(out); + + /* Close and Destroy the object */ + ExpaDocClose(pDocument); + ExpaDestroyObject(pDocument); + ExpaUnInitialize(); + return 0; +} + diff --git a/Scraping/COM/samples/CPP/outlineext/outlineext.dsp b/Scraping/COM/samples/CPP/outlineext/outlineext.dsp new file mode 100644 index 0000000..b85276b --- /dev/null +++ b/Scraping/COM/samples/CPP/outlineext/outlineext.dsp @@ -0,0 +1,102 @@ +# Microsoft Developer Studio Project File - Name="outlineext" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=outlineext - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "outlineext.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "outlineext.mak" CFG="outlineext - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "outlineext - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "outlineext - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName ""$/Support/Samples3H/PdfParser/CPP/outlineext", REQAAAAA" +# PROP Scc_LocalPath "." +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "outlineext - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x807 /d "NDEBUG" +# ADD RSC /l 0x807 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 PDFParser.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "outlineext - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c +# ADD BASE RSC /l 0x807 /d "_DEBUG" +# ADD RSC /l 0x807 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 PDFParser.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "outlineext - Win32 Release" +# Name "outlineext - Win32 Debug" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\outlineext.cpp +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Ressourcendateien" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/Scraping/COM/samples/CPP/outlineext/outlineext.dsw b/Scraping/COM/samples/CPP/outlineext/outlineext.dsw new file mode 100644 index 0000000..86fd089 --- /dev/null +++ b/Scraping/COM/samples/CPP/outlineext/outlineext.dsw @@ -0,0 +1,33 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "outlineext"=.\outlineext.dsp - Package Owner=<4> + +Package=<5> +{{{ + begin source code control + "$/Support/Samples3H/PdfParser/CPP/outlineext", REQAAAAA + . + end source code control +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/Scraping/COM/samples/CPP/outlineextu/outlineextu.cpp b/Scraping/COM/samples/CPP/outlineextu/outlineextu.cpp new file mode 100644 index 0000000..82e4ff5 --- /dev/null +++ b/Scraping/COM/samples/CPP/outlineextu/outlineextu.cpp @@ -0,0 +1,105 @@ +/**************************************************************************** + * + * File: outlineextu.cpp + * + * Usage: outlineextu PDF-input output.txt + * + * Description: Extracts the outlines (bookmarks) of a PDF document and + * writes them to an Unicode file + * + * Version: 1.00 (9-August-2005) + * + * Author: Philip Renggli, PDF Tools AG + * + * Copyright: Copyright (C) 2005 PDF Tools AG, Switzerland + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation. This software is provided "as is" without + * express or implied warranty. + * + ***************************************************************************/ + +#include +#include +#include "expa_c.h" +#include +#include + +void print(const WCHAR* wzStr, FILE* out) +{ + while(*wzStr) + { + if (*wzStr == '\n') + { + fputc('\r', out); + fputc(0, out); + } + fputc(*wzStr % 256, out); + fputc(*wzStr / 256, out); + wzStr++; + } +} + +int main(int argc, char* argv[]) +{ + TExpaDocument pDocument; + TPdfExpaOutlineItem* pOutline; + FILE* out; + + if (argc < 3) + { + printf("Usage: outlineext input.pdf output.txt"); + return 3; + } + + ExpaInitialize(); + + /* Create the object */ + pDocument = ExpaCreateObject(); + + /* Open the document */ + if (!ExpaDocOpen(pDocument, argv[1], "")) + { + printf("error opening PDF file %s...\n",argv[1]); + return 1; + } + + /* Create an Ascii Output file */ + out = fopen(argv[2], "wb"); + if (!out){ + fprintf(stderr, "Couldn't create file %s\n", argv[2]); + return 2; + } + + /* Create a little endian Unicode file */ +//#ifdef WIN32 + _setmode(_fileno(stdout), _O_BINARY); +//#endif + fprintf(out, "\377\376"); + + /* get root node */ + pOutline = ExpaDocGetFirstOutlineItem(pDocument); + + /* walk through outline tree and print the titles */ + while(pOutline) + { + for (int iLevel=1; iLevel < ExpaDocGetCurrentOutlineLevel(pDocument); iLevel++) + print(L" ", out); + print(ExpaOutlineItemGetTitleW(pOutline), out); + print(L"\n", out); + pOutline = ExpaDocGetNextOutlineItem(pDocument, 100, false); + } + + /* Close the text file */ + fclose(out); + + /* Close and Destroy the object */ + ExpaDocClose(pDocument); + ExpaDestroyObject(pDocument); + ExpaUnInitialize(); + return 0; +} + diff --git a/Scraping/COM/samples/CPP/outlineextu/outlineextu.dsp b/Scraping/COM/samples/CPP/outlineextu/outlineextu.dsp new file mode 100644 index 0000000..a093873 --- /dev/null +++ b/Scraping/COM/samples/CPP/outlineextu/outlineextu.dsp @@ -0,0 +1,102 @@ +# Microsoft Developer Studio Project File - Name="outlineextu" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=outlineextu - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "outlineextu.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "outlineextu.mak" CFG="outlineextu - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "outlineextu - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "outlineextu - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName ""$/Support/Samples3H/PdfParser/CPP/outlineextu", REQAAAAA" +# PROP Scc_LocalPath "." +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "outlineextu - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x807 /d "NDEBUG" +# ADD RSC /l 0x807 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 PDFParser.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "outlineextu - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c +# ADD BASE RSC /l 0x807 /d "_DEBUG" +# ADD RSC /l 0x807 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 PDFParser.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "outlineextu - Win32 Release" +# Name "outlineextu - Win32 Debug" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\outlineextu.cpp +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Ressourcendateien" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/Scraping/COM/samples/CPP/outlineextu/outlineextu.dsw b/Scraping/COM/samples/CPP/outlineextu/outlineextu.dsw new file mode 100644 index 0000000..0ef1b0f --- /dev/null +++ b/Scraping/COM/samples/CPP/outlineextu/outlineextu.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "outlineextu"=.\outlineextu.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/Scraping/COM/samples/CPP/textext/textext.cpp b/Scraping/COM/samples/CPP/textext/textext.cpp new file mode 100644 index 0000000..38f140b --- /dev/null +++ b/Scraping/COM/samples/CPP/textext/textext.cpp @@ -0,0 +1,137 @@ +/**************************************************************************** + * + * File: textext.cpp + * + * Usage: textext PDF-input + * + * Description: Extracts Text of a PDF document and prints it to a + * unicode file + * + * Version: 1.03 (12-July-2005) + * + * Author: Philip Renggli, PDF Tools AG + * + * Copyright: Copyright (C) 2005 PDF Tools AG, Switzerland + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation. This software is provided "as is" without + * express or implied warranty. + * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include "expa_c.h" + +void print(const WCHAR* wzStr, FILE* out) +{ + while(*wzStr) + { + if (*wzStr == '\n') + { + fputc('\r', out); + fputc(0, out); + } + fputc(*wzStr % 256, out); + fputc(*wzStr / 256, out); + wzStr++; + } +} + +int main(int argc, char* argv[]) +{ + TExpaDocument pDocument; + TExpaContent pContent; + TExpaText pText; + int iPage; + const unsigned short* sText; + FILE* out; + + if (argc < 3) + { + printf("Usage: textext input.pdf output.txt"); + return 3; + } + + ExpaInitialize(); + + /* Create the object */ + pDocument = ExpaCreateObject(); + + /* Open the document */ + if (!ExpaDocOpen(pDocument, argv[1], "")) + { + printf("error opening PDF file %s...\n",argv[1]); + return 1; + } + + /* Create a Unicode Output file */ + out = fopen(argv[2], "wb"); + if (!out){ + fprintf(stderr, "Couldn't create file %s\n", argv[2]); + return 2; + } +//#ifdef WIN32 + _setmode(_fileno(stdout), _O_BINARY); +//#endif + fprintf(out, "\377\376"); + + /* loop through all page and render them */ + for(iPage = 1; iPage <= ExpaDocGetPageCount(pDocument); iPage++) + { + float y; + + /* set the page number */ + ExpaDocSetPageNo(pDocument, iPage); + + /* get the content */ + pContent = ExpaPageGetContent(ExpaDocGetPage(pDocument)); + + /* extract words */ + ExpaContentResetContent(pContent, 1); + ExpaContentSetBreakWords(pContent, true); + + y = -1; + while (pText = ExpaContentGetNextText(pContent)) + { + int nLength; + + nLength = ExpaTextGetStringLength(pText); + if (nLength) + { + TPDFVector* pos; + + /* print the text, add newline if the Y coordinate changes. */ + pos = ExpaTextGetPosition(pText); + if (pos[0].y != y) + print(L"\n", out); + + /* write the text token */ + sText = ExpaTextGetUnicodeString(pText); + if (sText) + print(sText, out); + + /* add a line break or a space */ + print(L" ", out); + + /* save the Y position */ + y = pos[0].y; + } + } + } + /* Close the text file */ + fclose(out); + + /* Close and Destroy the object */ + ExpaDocClose(pDocument); + ExpaDestroyObject(pDocument); + ExpaUnInitialize(); + return 0; +} + diff --git a/Scraping/COM/samples/CPP/textext/textext.dsp b/Scraping/COM/samples/CPP/textext/textext.dsp new file mode 100644 index 0000000..1c1c5fe --- /dev/null +++ b/Scraping/COM/samples/CPP/textext/textext.dsp @@ -0,0 +1,102 @@ +# Microsoft Developer Studio Project File - Name="textext" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=textext - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "textext.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "textext.mak" CFG="textext - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "textext - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "textext - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName ""$/Support/Samples3H/PdfParser/CPP/textext", REQAAAAA" +# PROP Scc_LocalPath "." +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "textext - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x807 /d "NDEBUG" +# ADD RSC /l 0x807 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 PDFParser.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "textext - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c +# ADD BASE RSC /l 0x807 /d "_DEBUG" +# ADD RSC /l 0x807 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 PDFParser.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "textext - Win32 Release" +# Name "textext - Win32 Debug" +# Begin Group "Quellcodedateien" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\textext.cpp +# End Source File +# End Group +# Begin Group "Header-Dateien" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Ressourcendateien" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/Scraping/COM/samples/CPP/textext/textext.dsw b/Scraping/COM/samples/CPP/textext/textext.dsw new file mode 100644 index 0000000..1d3ef16 --- /dev/null +++ b/Scraping/COM/samples/CPP/textext/textext.dsw @@ -0,0 +1,33 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "textext"=.\textext.dsp - Package Owner=<4> + +Package=<5> +{{{ + begin source code control + "$/Support/Samples3H/PdfParser/CPP/textext", REQAAAAA + . + end source code control +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/Scraping/COM/samples/CS.NET/TextExt/App.ico b/Scraping/COM/samples/CS.NET/TextExt/App.ico new file mode 100644 index 0000000..3a5525f Binary files /dev/null and b/Scraping/COM/samples/CS.NET/TextExt/App.ico differ diff --git a/Scraping/COM/samples/CS.NET/TextExt/Backup/App.ico b/Scraping/COM/samples/CS.NET/TextExt/Backup/App.ico new file mode 100644 index 0000000..3a5525f Binary files /dev/null and b/Scraping/COM/samples/CS.NET/TextExt/Backup/App.ico differ diff --git a/Scraping/COM/samples/CS.NET/TextExt/Backup/Form1.cs b/Scraping/COM/samples/CS.NET/TextExt/Backup/Form1.cs new file mode 100644 index 0000000..fde1994 --- /dev/null +++ b/Scraping/COM/samples/CS.NET/TextExt/Backup/Form1.cs @@ -0,0 +1,298 @@ +/**************************************************************************** + * + * Project: TextExt, C#.NET + * + * Description: Extracts text of a page of a PDF document using the + * 3-Heights PDF Extraction Tool. + * + * Version: 1.01 (5-October-2005) + * + * Author: Philip Renggli, PDF Tools AG + * + * Copyright: Copyright (C) 2005 PDF Tools AG, Switzerland + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation. This software is provided "as is" without + * express or implied warranty. + * + ***************************************************************************/ + +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.Data; + +namespace TextExt +{ + public class Form1 : System.Windows.Forms.Form + { + private System.Windows.Forms.Button Browse; + private System.Windows.Forms.TextBox txtInput; + private System.Windows.Forms.Button ExtractText; + private AxMSComDlg.AxCommonDialog axCommonDialog; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtOutput; + private System.Windows.Forms.TextBox txtPageNo; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + + private System.ComponentModel.Container components = null; + + public Form1() + { + InitializeComponent(); + } + + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if (components != null) + { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Erforderliche Methode fr die Designeruntersttzung. + /// Der Inhalt der Methode darf nicht mit dem Code-Editor gendert werden. + /// + private void InitializeComponent() + { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1)); + this.Browse = new System.Windows.Forms.Button(); + this.txtInput = new System.Windows.Forms.TextBox(); + this.ExtractText = new System.Windows.Forms.Button(); + this.axCommonDialog = new AxMSComDlg.AxCommonDialog(); + this.txtOutput = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.txtPageNo = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.axCommonDialog)).BeginInit(); + this.SuspendLayout(); + // + // Browse + // + this.Browse.BackColor = System.Drawing.SystemColors.ControlLight; + this.Browse.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Browse.ForeColor = System.Drawing.Color.Black; + this.Browse.Location = new System.Drawing.Point(472, 488); + this.Browse.Name = "Browse"; + this.Browse.Size = new System.Drawing.Size(24, 24); + this.Browse.TabIndex = 8; + this.Browse.Text = "..."; + this.Browse.Click += new System.EventHandler(this.Browse_Click); + // + // txtInput + // + this.txtInput.Location = new System.Drawing.Point(120, 488); + this.txtInput.Name = "txtInput"; + this.txtInput.Size = new System.Drawing.Size(344, 20); + this.txtInput.TabIndex = 7; + this.txtInput.Text = ""; + // + // ExtractText + // + this.ExtractText.BackColor = System.Drawing.SystemColors.ControlLight; + this.ExtractText.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.ExtractText.ForeColor = System.Drawing.Color.Black; + this.ExtractText.Location = new System.Drawing.Point(8, 544); + this.ExtractText.Name = "ExtractText"; + this.ExtractText.Size = new System.Drawing.Size(96, 24); + this.ExtractText.TabIndex = 6; + this.ExtractText.Text = "Extract Text"; + this.ExtractText.Click += new System.EventHandler(this.ExtractText_Click); + // + // axCommonDialog + // + this.axCommonDialog.Enabled = true; + this.axCommonDialog.Location = new System.Drawing.Point(464, 520); + this.axCommonDialog.Name = "axCommonDialog"; + this.axCommonDialog.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axCommonDialog.OcxState"))); + this.axCommonDialog.Size = new System.Drawing.Size(32, 32); + this.axCommonDialog.TabIndex = 9; + // + // txtOutput + // + this.txtOutput.Location = new System.Drawing.Point(8, 32); + this.txtOutput.MaxLength = 200000; + this.txtOutput.Multiline = true; + this.txtOutput.Name = "txtOutput"; + this.txtOutput.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txtOutput.Size = new System.Drawing.Size(496, 448); + this.txtOutput.TabIndex = 10; + this.txtOutput.Text = ""; + // + // label1 + // + this.label1.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(122)), ((System.Byte)(182)), ((System.Byte)(215))); + this.label1.Font = new System.Drawing.Font("Verdana", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.label1.ForeColor = System.Drawing.Color.FromArgb(((System.Byte)(0)), ((System.Byte)(102)), ((System.Byte)(153))); + this.label1.Location = new System.Drawing.Point(0, 488); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(112, 18); + this.label1.TabIndex = 11; + this.label1.Text = " FILE NAME"; + // + // txtPageNo + // + this.txtPageNo.Location = new System.Drawing.Point(120, 512); + this.txtPageNo.Name = "txtPageNo"; + this.txtPageNo.Size = new System.Drawing.Size(40, 20); + this.txtPageNo.TabIndex = 12; + this.txtPageNo.Text = "1"; + // + // label2 + // + this.label2.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(122)), ((System.Byte)(182)), ((System.Byte)(215))); + this.label2.Font = new System.Drawing.Font("Verdana", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.label2.ForeColor = System.Drawing.Color.FromArgb(((System.Byte)(0)), ((System.Byte)(102)), ((System.Byte)(153))); + this.label2.Location = new System.Drawing.Point(0, 512); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(112, 18); + this.label2.TabIndex = 13; + this.label2.Text = " PAGE NUMBER"; + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(174)), ((System.Byte)(209)), ((System.Byte)(226))); + this.panel1.Location = new System.Drawing.Point(-8, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(120, 624); + this.panel1.TabIndex = 15; + // + // label3 + // + this.label3.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(255)), ((System.Byte)(153)), ((System.Byte)(102))); + this.label3.Font = new System.Drawing.Font("Verdana", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.label3.ForeColor = System.Drawing.Color.White; + this.label3.Location = new System.Drawing.Point(120, 8); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(384, 19); + this.label3.TabIndex = 16; + this.label3.Text = " 3-Heights PDF Extract Tool - Extract Text Sample"; + // + // label4 + // + this.label4.Location = new System.Drawing.Point(120, 544); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(384, 16); + this.label4.TabIndex = 17; + this.label4.Text = "This is a text extraction sample for the 3-Heights PDF Extract Tool."; + // + // label5 + // + this.label5.Location = new System.Drawing.Point(120, 560); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(384, 16); + this.label5.TabIndex = 18; + this.label5.Text = "Copyright (C) 2005 PDF Tools AG, Switzerland"; + // + // Form1 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(512, 581); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.label5, + this.label4, + this.label3, + this.txtPageNo, + this.txtInput, + this.label2, + this.label1, + this.txtOutput, + this.axCommonDialog, + this.Browse, + this.ExtractText, + this.panel1}); + this.Name = "Form1"; + ((System.ComponentModel.ISupportInitialize)(this.axCommonDialog)).EndInit(); + this.ResumeLayout(false); + + } + #endregion + + [STAThread] + static void Main() + { + Application.Run(new Form1()); + } + + private void Browse_Click(object sender, System.EventArgs e) + { + axCommonDialog.FileName = txtInput.Text; + axCommonDialog.ShowOpen(); + txtInput.Text = axCommonDialog.FileName; + } + + private void ExtractText_Click(object sender, System.EventArgs e) + { + PDFPARSERLib.DocumentClass document = new PDFPARSERLib.DocumentClass(); + if (document.Open(txtInput.Text, "")) + { + // clear the text control + txtOutput.Text = ""; + + // check the page range + Int32.Parse(txtPageNo.Text); + int iPageNo = Int32.Parse(txtPageNo.Text); + if(iPageNo > 0 && iPageNo <= document.PageCount) + { + // set the page number + document.PageNo = iPageNo; + // get a content handle + PDFPARSERLib.Content content = document.Page.Content; + if(content != null) + { + // get one word per token + content.BreakWords = true; + // account page rotation + content.Reset(true); + // keep track of the last y-coordinate + float y_old = -1.0f; + while(content.GetNextText() != null) + { + // get a text handle + PDFPARSERLib.Text text = content.Text; + float y_new = 1.0f; + if (text.Length > 0) + y_new = (float) ((object[])text.YPos)[0]; + // insert a blank if y-coordinate is the same as in previous token + // insert a new line if it changes + txtOutput.Text = string.Concat(txtOutput.Text, y_old == y_new ? " " : "\r\n" , text.UnicodeString); + y_old = y_new; + } + } + else + { + // no content on page + } + } + else + { + // page number out of range + } + } + else + { + // failed to open + } + } + } +} diff --git a/Scraping/COM/samples/CS.NET/TextExt/Backup/Form1.resx b/Scraping/COM/samples/CS.NET/TextExt/Backup/Form1.resx new file mode 100644 index 0000000..b527311 --- /dev/null +++ b/Scraping/COM/samples/CS.NET/TextExt/Backup/Form1.resx @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0xLjAuMzMw + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACFT + eXN0ZW0uV2luZG93cy5Gb3Jtcy5BeEhvc3QrU3RhdGUBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAhQAA + AAIBAAAAAQAAAAAkAAAAMjhDNEM4MjAtNDAxQS0xMDFCLUEzQzktMDgwMDJCMkY0OUZCAAAAAEwAAAAh + QzQSCAAAAE8DAABPAwAAhjwE+QAABgAAAAAAIAAAAAAAAAAAAAAAAQAAAAQBAAABAAAAAAAAAAAAAAAA + AAAAAAAAQQAAAAAAAAAACw== + + + + Form1 + + \ No newline at end of file diff --git a/Scraping/COM/samples/CS.NET/TextExt/Backup/TextExt.csproj b/Scraping/COM/samples/CS.NET/TextExt/Backup/TextExt.csproj new file mode 100644 index 0000000..1f8a983 --- /dev/null +++ b/Scraping/COM/samples/CS.NET/TextExt/Backup/TextExt.csproj @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Scraping/COM/samples/CS.NET/TextExt/Backup/TextExt.sln b/Scraping/COM/samples/CS.NET/TextExt/Backup/TextExt.sln new file mode 100644 index 0000000..7fef867 --- /dev/null +++ b/Scraping/COM/samples/CS.NET/TextExt/Backup/TextExt.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextExt", "TextExt.csproj", "{9B8C0668-BACA-44FE-9E84-C4CDCD42A297}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {9B8C0668-BACA-44FE-9E84-C4CDCD42A297}.Debug.ActiveCfg = Debug|.NET + {9B8C0668-BACA-44FE-9E84-C4CDCD42A297}.Debug.Build.0 = Debug|.NET + {9B8C0668-BACA-44FE-9E84-C4CDCD42A297}.Release.ActiveCfg = Release|.NET + {9B8C0668-BACA-44FE-9E84-C4CDCD42A297}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Scraping/COM/samples/CS.NET/TextExt/Form1.cs b/Scraping/COM/samples/CS.NET/TextExt/Form1.cs new file mode 100644 index 0000000..fde1994 --- /dev/null +++ b/Scraping/COM/samples/CS.NET/TextExt/Form1.cs @@ -0,0 +1,298 @@ +/**************************************************************************** + * + * Project: TextExt, C#.NET + * + * Description: Extracts text of a page of a PDF document using the + * 3-Heights PDF Extraction Tool. + * + * Version: 1.01 (5-October-2005) + * + * Author: Philip Renggli, PDF Tools AG + * + * Copyright: Copyright (C) 2005 PDF Tools AG, Switzerland + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation. This software is provided "as is" without + * express or implied warranty. + * + ***************************************************************************/ + +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.Data; + +namespace TextExt +{ + public class Form1 : System.Windows.Forms.Form + { + private System.Windows.Forms.Button Browse; + private System.Windows.Forms.TextBox txtInput; + private System.Windows.Forms.Button ExtractText; + private AxMSComDlg.AxCommonDialog axCommonDialog; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtOutput; + private System.Windows.Forms.TextBox txtPageNo; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + + private System.ComponentModel.Container components = null; + + public Form1() + { + InitializeComponent(); + } + + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if (components != null) + { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Erforderliche Methode fr die Designeruntersttzung. + /// Der Inhalt der Methode darf nicht mit dem Code-Editor gendert werden. + /// + private void InitializeComponent() + { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1)); + this.Browse = new System.Windows.Forms.Button(); + this.txtInput = new System.Windows.Forms.TextBox(); + this.ExtractText = new System.Windows.Forms.Button(); + this.axCommonDialog = new AxMSComDlg.AxCommonDialog(); + this.txtOutput = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.txtPageNo = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.axCommonDialog)).BeginInit(); + this.SuspendLayout(); + // + // Browse + // + this.Browse.BackColor = System.Drawing.SystemColors.ControlLight; + this.Browse.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Browse.ForeColor = System.Drawing.Color.Black; + this.Browse.Location = new System.Drawing.Point(472, 488); + this.Browse.Name = "Browse"; + this.Browse.Size = new System.Drawing.Size(24, 24); + this.Browse.TabIndex = 8; + this.Browse.Text = "..."; + this.Browse.Click += new System.EventHandler(this.Browse_Click); + // + // txtInput + // + this.txtInput.Location = new System.Drawing.Point(120, 488); + this.txtInput.Name = "txtInput"; + this.txtInput.Size = new System.Drawing.Size(344, 20); + this.txtInput.TabIndex = 7; + this.txtInput.Text = ""; + // + // ExtractText + // + this.ExtractText.BackColor = System.Drawing.SystemColors.ControlLight; + this.ExtractText.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.ExtractText.ForeColor = System.Drawing.Color.Black; + this.ExtractText.Location = new System.Drawing.Point(8, 544); + this.ExtractText.Name = "ExtractText"; + this.ExtractText.Size = new System.Drawing.Size(96, 24); + this.ExtractText.TabIndex = 6; + this.ExtractText.Text = "Extract Text"; + this.ExtractText.Click += new System.EventHandler(this.ExtractText_Click); + // + // axCommonDialog + // + this.axCommonDialog.Enabled = true; + this.axCommonDialog.Location = new System.Drawing.Point(464, 520); + this.axCommonDialog.Name = "axCommonDialog"; + this.axCommonDialog.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axCommonDialog.OcxState"))); + this.axCommonDialog.Size = new System.Drawing.Size(32, 32); + this.axCommonDialog.TabIndex = 9; + // + // txtOutput + // + this.txtOutput.Location = new System.Drawing.Point(8, 32); + this.txtOutput.MaxLength = 200000; + this.txtOutput.Multiline = true; + this.txtOutput.Name = "txtOutput"; + this.txtOutput.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txtOutput.Size = new System.Drawing.Size(496, 448); + this.txtOutput.TabIndex = 10; + this.txtOutput.Text = ""; + // + // label1 + // + this.label1.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(122)), ((System.Byte)(182)), ((System.Byte)(215))); + this.label1.Font = new System.Drawing.Font("Verdana", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.label1.ForeColor = System.Drawing.Color.FromArgb(((System.Byte)(0)), ((System.Byte)(102)), ((System.Byte)(153))); + this.label1.Location = new System.Drawing.Point(0, 488); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(112, 18); + this.label1.TabIndex = 11; + this.label1.Text = " FILE NAME"; + // + // txtPageNo + // + this.txtPageNo.Location = new System.Drawing.Point(120, 512); + this.txtPageNo.Name = "txtPageNo"; + this.txtPageNo.Size = new System.Drawing.Size(40, 20); + this.txtPageNo.TabIndex = 12; + this.txtPageNo.Text = "1"; + // + // label2 + // + this.label2.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(122)), ((System.Byte)(182)), ((System.Byte)(215))); + this.label2.Font = new System.Drawing.Font("Verdana", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.label2.ForeColor = System.Drawing.Color.FromArgb(((System.Byte)(0)), ((System.Byte)(102)), ((System.Byte)(153))); + this.label2.Location = new System.Drawing.Point(0, 512); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(112, 18); + this.label2.TabIndex = 13; + this.label2.Text = " PAGE NUMBER"; + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(174)), ((System.Byte)(209)), ((System.Byte)(226))); + this.panel1.Location = new System.Drawing.Point(-8, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(120, 624); + this.panel1.TabIndex = 15; + // + // label3 + // + this.label3.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(255)), ((System.Byte)(153)), ((System.Byte)(102))); + this.label3.Font = new System.Drawing.Font("Verdana", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.label3.ForeColor = System.Drawing.Color.White; + this.label3.Location = new System.Drawing.Point(120, 8); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(384, 19); + this.label3.TabIndex = 16; + this.label3.Text = " 3-Heights PDF Extract Tool - Extract Text Sample"; + // + // label4 + // + this.label4.Location = new System.Drawing.Point(120, 544); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(384, 16); + this.label4.TabIndex = 17; + this.label4.Text = "This is a text extraction sample for the 3-Heights PDF Extract Tool."; + // + // label5 + // + this.label5.Location = new System.Drawing.Point(120, 560); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(384, 16); + this.label5.TabIndex = 18; + this.label5.Text = "Copyright (C) 2005 PDF Tools AG, Switzerland"; + // + // Form1 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(512, 581); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.label5, + this.label4, + this.label3, + this.txtPageNo, + this.txtInput, + this.label2, + this.label1, + this.txtOutput, + this.axCommonDialog, + this.Browse, + this.ExtractText, + this.panel1}); + this.Name = "Form1"; + ((System.ComponentModel.ISupportInitialize)(this.axCommonDialog)).EndInit(); + this.ResumeLayout(false); + + } + #endregion + + [STAThread] + static void Main() + { + Application.Run(new Form1()); + } + + private void Browse_Click(object sender, System.EventArgs e) + { + axCommonDialog.FileName = txtInput.Text; + axCommonDialog.ShowOpen(); + txtInput.Text = axCommonDialog.FileName; + } + + private void ExtractText_Click(object sender, System.EventArgs e) + { + PDFPARSERLib.DocumentClass document = new PDFPARSERLib.DocumentClass(); + if (document.Open(txtInput.Text, "")) + { + // clear the text control + txtOutput.Text = ""; + + // check the page range + Int32.Parse(txtPageNo.Text); + int iPageNo = Int32.Parse(txtPageNo.Text); + if(iPageNo > 0 && iPageNo <= document.PageCount) + { + // set the page number + document.PageNo = iPageNo; + // get a content handle + PDFPARSERLib.Content content = document.Page.Content; + if(content != null) + { + // get one word per token + content.BreakWords = true; + // account page rotation + content.Reset(true); + // keep track of the last y-coordinate + float y_old = -1.0f; + while(content.GetNextText() != null) + { + // get a text handle + PDFPARSERLib.Text text = content.Text; + float y_new = 1.0f; + if (text.Length > 0) + y_new = (float) ((object[])text.YPos)[0]; + // insert a blank if y-coordinate is the same as in previous token + // insert a new line if it changes + txtOutput.Text = string.Concat(txtOutput.Text, y_old == y_new ? " " : "\r\n" , text.UnicodeString); + y_old = y_new; + } + } + else + { + // no content on page + } + } + else + { + // page number out of range + } + } + else + { + // failed to open + } + } + } +} diff --git a/Scraping/COM/samples/CS.NET/TextExt/Form1.resx b/Scraping/COM/samples/CS.NET/TextExt/Form1.resx new file mode 100644 index 0000000..b527311 --- /dev/null +++ b/Scraping/COM/samples/CS.NET/TextExt/Form1.resx @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0xLjAuMzMw + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACFT + eXN0ZW0uV2luZG93cy5Gb3Jtcy5BeEhvc3QrU3RhdGUBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAhQAA + AAIBAAAAAQAAAAAkAAAAMjhDNEM4MjAtNDAxQS0xMDFCLUEzQzktMDgwMDJCMkY0OUZCAAAAAEwAAAAh + QzQSCAAAAE8DAABPAwAAhjwE+QAABgAAAAAAIAAAAAAAAAAAAAAAAQAAAAQBAAABAAAAAAAAAAAAAAAA + AAAAAAAAQQAAAAAAAAAACw== + + + + Form1 + + \ No newline at end of file diff --git a/Scraping/COM/samples/CS.NET/TextExt/TextExt.csproj b/Scraping/COM/samples/CS.NET/TextExt/TextExt.csproj new file mode 100644 index 0000000..522178f --- /dev/null +++ b/Scraping/COM/samples/CS.NET/TextExt/TextExt.csproj @@ -0,0 +1,132 @@ + + + Local + 8.0.50215 + 2.0 + {9B8C0668-BACA-44FE-9E84-C4CDCD42A297} + Debug + AnyCPU + App.ico + + + TextExt + + + JScript + Grid + IE50 + false + WinExe + TextExt + OnBuildSuccess + + + + + + + + + bin\Debug\ + false + 285212672 + false + + + DEBUG;TRACE + + + true + 4096 + false + + + false + false + false + false + 4 + + + bin\Release\ + false + 285212672 + false + + + TRACE + + + false + 4096 + false + + + true + false + false + false + 4 + + + + System + + + System.Data + + + System.Drawing + + + System.Windows.Forms + + + System.XML + + + {F9043C88-F6F2-101A-A3C9-08002B2F49FB} + 1 + 2 + 0 + aximp + + + {F9043C88-F6F2-101A-A3C9-08002B2F49FB} + 1 + 2 + 0 + tlbimp + + + {4CFD0B17-7BAD-44E5-9003-3AAB04AFB85B} + 1 + 0 + 0 + tlbimp + + + {00020430-0000-0000-C000-000000000046} + 2 + 0 + 0 + primary + + + + + + Form + + + Form1.cs + + + + + + + + + + \ No newline at end of file diff --git a/Scraping/COM/samples/CS.NET/TextExt/TextExt.sln b/Scraping/COM/samples/CS.NET/TextExt/TextExt.sln new file mode 100644 index 0000000..edf1d8c --- /dev/null +++ b/Scraping/COM/samples/CS.NET/TextExt/TextExt.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextExt", "TextExt.csproj", "{9B8C0668-BACA-44FE-9E84-C4CDCD42A297}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9B8C0668-BACA-44FE-9E84-C4CDCD42A297}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9B8C0668-BACA-44FE-9E84-C4CDCD42A297}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B8C0668-BACA-44FE-9E84-C4CDCD42A297}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9B8C0668-BACA-44FE-9E84-C4CDCD42A297}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Scraping/COM/samples/CS.NET/TextExt/TextExt.suo b/Scraping/COM/samples/CS.NET/TextExt/TextExt.suo new file mode 100644 index 0000000..084e7e8 Binary files /dev/null and b/Scraping/COM/samples/CS.NET/TextExt/TextExt.suo differ diff --git a/Scraping/COM/samples/CS.NET/TextExt/UpgradeLog.XML b/Scraping/COM/samples/CS.NET/TextExt/UpgradeLog.XML new file mode 100644 index 0000000..765083e --- /dev/null +++ b/Scraping/COM/samples/CS.NET/TextExt/UpgradeLog.XML @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Scraping/COM/samples/CS.NET/TextExt/_UpgradeReport_Files/UpgradeReport.css b/Scraping/COM/samples/CS.NET/TextExt/_UpgradeReport_Files/UpgradeReport.css new file mode 100644 index 0000000..3411f63 --- /dev/null +++ b/Scraping/COM/samples/CS.NET/TextExt/_UpgradeReport_Files/UpgradeReport.css @@ -0,0 +1,207 @@ +BODY +{ + BACKGROUND-COLOR: white; + FONT-FAMILY: "Verdana", sans-serif; + FONT-SIZE: 100%; + MARGIN-LEFT: 0px; + MARGIN-TOP: 0px +} +P +{ + FONT-FAMILY: "Verdana", sans-serif; + FONT-SIZE: 70%; + LINE-HEIGHT: 12pt; + MARGIN-BOTTOM: 0px; + MARGIN-LEFT: 10px; + MARGIN-TOP: 10px +} +.note +{ + BACKGROUND-COLOR: #ffffff; + COLOR: #336699; + FONT-FAMILY: "Verdana", sans-serif; + FONT-SIZE: 100%; + MARGIN-BOTTOM: 0px; + MARGIN-LEFT: 0px; + MARGIN-TOP: 0px; + PADDING-RIGHT: 10px +} +.infotable +{ + BACKGROUND-COLOR: #f0f0e0; + BORDER-BOTTOM: #ffffff 0px solid; + BORDER-COLLAPSE: collapse; + BORDER-LEFT: #ffffff 0px solid; + BORDER-RIGHT: #ffffff 0px solid; + BORDER-TOP: #ffffff 0px solid; + FONT-SIZE: 70%; + MARGIN-LEFT: 10px +} +.issuetable +{ + BACKGROUND-COLOR: #ffffe8; + BORDER-COLLAPSE: collapse; + COLOR: #000000; + FONT-SIZE: 100%; + MARGIN-BOTTOM: 10px; + MARGIN-LEFT: 13px; + MARGIN-TOP: 0px +} +.issuetitle +{ + BACKGROUND-COLOR: #ffffff; + BORDER-BOTTOM: #dcdcdc 1px solid; + BORDER-TOP: #dcdcdc 1px; + COLOR: #003366; + FONT-WEIGHT: normal +} +.header +{ + BACKGROUND-COLOR: #cecf9c; + BORDER-BOTTOM: #ffffff 1px solid; + BORDER-LEFT: #ffffff 1px solid; + BORDER-RIGHT: #ffffff 1px solid; + BORDER-TOP: #ffffff 1px solid; + COLOR: #000000; + FONT-WEIGHT: bold +} +.issuehdr +{ + BACKGROUND-COLOR: #E0EBF5; + BORDER-BOTTOM: #dcdcdc 1px solid; + BORDER-TOP: #dcdcdc 1px solid; + COLOR: #000000; + FONT-WEIGHT: normal +} +.issuenone +{ + BACKGROUND-COLOR: #ffffff; + BORDER-BOTTOM: 0px; + BORDER-LEFT: 0px; + BORDER-RIGHT: 0px; + BORDER-TOP: 0px; + COLOR: #000000; + FONT-WEIGHT: normal +} +.content +{ + BACKGROUND-COLOR: #e7e7ce; + BORDER-BOTTOM: #ffffff 1px solid; + BORDER-LEFT: #ffffff 1px solid; + BORDER-RIGHT: #ffffff 1px solid; + BORDER-TOP: #ffffff 1px solid; + PADDING-LEFT: 3px +} +.issuecontent +{ + BACKGROUND-COLOR: #ffffff; + BORDER-BOTTOM: #dcdcdc 1px solid; + BORDER-TOP: #dcdcdc 1px solid; + PADDING-LEFT: 3px +} +A:link +{ + COLOR: #cc6633; + TEXT-DECORATION: underline +} +A:visited +{ + COLOR: #cc6633; +} +A:active +{ + COLOR: #cc6633; +} +A:hover +{ + COLOR: #cc3300; + TEXT-DECORATION: underline +} +H1 +{ + BACKGROUND-COLOR: #003366; + BORDER-BOTTOM: #336699 6px solid; + COLOR: #ffffff; + FONT-SIZE: 130%; + FONT-WEIGHT: normal; + MARGIN: 0em 0em 0em -20px; + PADDING-BOTTOM: 8px; + PADDING-LEFT: 30px; + PADDING-TOP: 16px +} +H2 +{ + COLOR: #000000; + FONT-SIZE: 80%; + FONT-WEIGHT: bold; + MARGIN-BOTTOM: 3px; + MARGIN-LEFT: 10px; + MARGIN-TOP: 20px; + PADDING-LEFT: 0px +} +H3 +{ + COLOR: #000000; + FONT-SIZE: 80%; + FONT-WEIGHT: bold; + MARGIN-BOTTOM: -5px; + MARGIN-LEFT: 10px; + MARGIN-TOP: 20px +} +H4 +{ + COLOR: #000000; + FONT-SIZE: 70%; + FONT-WEIGHT: bold; + MARGIN-BOTTOM: 0px; + MARGIN-TOP: 15px; + PADDING-BOTTOM: 0px +} +UL +{ + COLOR: #000000; + FONT-SIZE: 70%; + LIST-STYLE: square; + MARGIN-BOTTOM: 0pt; + MARGIN-TOP: 0pt +} +OL +{ + COLOR: #000000; + FONT-SIZE: 70%; + LIST-STYLE: square; + MARGIN-BOTTOM: 0pt; + MARGIN-TOP: 0pt +} +LI +{ + LIST-STYLE: square; + MARGIN-LEFT: 0px +} +.expandable +{ + CURSOR: hand +} +.expanded +{ + color: black +} +.collapsed +{ + DISPLAY: none +} +.foot +{ +BACKGROUND-COLOR: #ffffff; +BORDER-BOTTOM: #cecf9c 1px solid; +BORDER-TOP: #cecf9c 2px solid +} +.settings +{ +MARGIN-LEFT: 25PX; +} +.help +{ +TEXT-ALIGN: right; +margin-right: 10px; +} diff --git a/Scraping/COM/samples/CS.NET/TextExt/_UpgradeReport_Files/UpgradeReport.xslt b/Scraping/COM/samples/CS.NET/TextExt/_UpgradeReport_Files/UpgradeReport.xslt new file mode 100644 index 0000000..9b4bb85 --- /dev/null +++ b/Scraping/COM/samples/CS.NET/TextExt/_UpgradeReport_Files/UpgradeReport.xslt @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ Solution: + Project: + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + src + + + + + + + + + + + + +
FilenameStatusErrorsWarnings
+ javascript:document.images[''].click()src + + + + + + + Converted + +
+ + files + + + 1 file + + + Converted:
+ Not converted +
+
+
+ + + + : + + + + + + + + + Conversion Report + <xsl:if test="Properties/Property[@Name='LogNumber']"> + <xsl:value-of select="Properties/Property[@Name='LogNumber']/@Value"/> + </xsl:if> + + + + +

Conversion Report -

+ +

+ Time of Conversion:
+

+ + + + + + + + + + + + + + + + + + + + + + + + +

+ + + + + +
+ Conversion Settings +

+ + +
+
diff --git a/Scraping/COM/samples/CS.NET/TextExt/_UpgradeReport_Files/UpgradeReport_Minus.gif b/Scraping/COM/samples/CS.NET/TextExt/_UpgradeReport_Files/UpgradeReport_Minus.gif new file mode 100644 index 0000000..17751cb Binary files /dev/null and b/Scraping/COM/samples/CS.NET/TextExt/_UpgradeReport_Files/UpgradeReport_Minus.gif differ diff --git a/Scraping/COM/samples/CS.NET/TextExt/_UpgradeReport_Files/UpgradeReport_Plus.gif b/Scraping/COM/samples/CS.NET/TextExt/_UpgradeReport_Files/UpgradeReport_Plus.gif new file mode 100644 index 0000000..f6009ca Binary files /dev/null and b/Scraping/COM/samples/CS.NET/TextExt/_UpgradeReport_Files/UpgradeReport_Plus.gif differ diff --git a/Scraping/COM/samples/Delphi/text/text.dfm b/Scraping/COM/samples/Delphi/text/text.dfm new file mode 100644 index 0000000..5e2c083 --- /dev/null +++ b/Scraping/COM/samples/Delphi/text/text.dfm @@ -0,0 +1,81 @@ +object TextExtForm: TTextExtForm + Left = 233 + Top = 149 + Width = 274 + Height = 533 + Caption = 'PDF Export API Text-Extraction' + Color = clSilver + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 1 + Top = 0 + Width = 264 + Height = 33 + Alignment = taRightJustify + AutoSize = False + Caption = 'pdf-tools.com ' + Color = clWhite + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -21 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object GetText: TButton + Left = 64 + Top = 472 + Width = 145 + Height = 25 + Caption = 'Get Text' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + TabOrder = 0 + OnClick = GetTextClick + end + object Memo1: TMemo + Left = 8 + Top = 72 + Width = 249 + Height = 393 + TabOrder = 1 + end + object InFileName: TEdit + Left = 8 + Top = 40 + Width = 177 + Height = 21 + TabOrder = 2 + end + object Browse: TButton + Left = 200 + Top = 40 + Width = 57 + Height = 25 + Caption = 'Browse' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + TabOrder = 3 + OnClick = BrowseClick + end + object OpenDialog: TOpenDialog + Left = 224 + Top = 472 + end +end diff --git a/Scraping/COM/samples/Delphi/text/text.pas b/Scraping/COM/samples/Delphi/text/text.pas new file mode 100644 index 0000000..706c417 --- /dev/null +++ b/Scraping/COM/samples/Delphi/text/text.pas @@ -0,0 +1,77 @@ +unit text; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, OleServer, PDFPARSERLib_TLB; + +type + TTextExtForm = class(TForm) + GetText: TButton; + Memo1: TMemo; + Label1: TLabel; + InFileName: TEdit; + Browse: TButton; + OpenDialog: TOpenDialog; + + procedure GetTextClick(Sender: TObject); + procedure BrowseClick(Sender: TObject); + private + { Private-Deklarationen } + public + { Public-Deklarationen } + end; + +var + TextExtForm: TTextExtForm; + +implementation + +{$R *.dfm} + +procedure TTextExtForm.GetTextClick(Sender: TObject); +var + pdf : IPDFDocument; + content : IPDFContent; + i : integer; + Text : IPDFText; + Str : String; + +begin + pdf := CoDocument.Create; + if not pdf.open(InFileName.Text , '') then + with Application do + begin + NormalizeTopMosts; + MessageBox('Could not create PDF file.', 'Look'); + RestoreTopMosts; + Exit; + end; + Str := ''; + for i := 0 to pdf.pagecount-1 do + begin + pdf.pageNo := i + 1; + content := pdf.Page.content; + if content <> nil then + begin + content.breakWords := true; + Content.reset(true); + While (content.GetNextText <> nil) do + begin + Text := content.text; + Str := Str + content.text.UnicodeString + ' '; + end; + end; + end; + Memo1.Text := Str; + end; + +procedure TTextExtForm.BrowseClick(Sender: TObject); +begin + OpenDialog.FileName := InFileName.Text; + OpenDialog.Execute; + InFileName.Text := OpenDialog.FileName; +end; + +end. diff --git a/Scraping/COM/samples/Delphi/text/textproject.dpr b/Scraping/COM/samples/Delphi/text/textproject.dpr new file mode 100644 index 0000000..daac15c --- /dev/null +++ b/Scraping/COM/samples/Delphi/text/textproject.dpr @@ -0,0 +1,14 @@ +program textproject; + +uses + Forms, + text in 'text.pas' {TextExtForm}, + PDFPARSERLib_TLB in 'd:\bin\lib\PDFPARSERLib_TLB.pas'; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TTextExtForm, TextExtForm); + Application.Run; +end. diff --git a/Scraping/COM/samples/Java/ImgExt.java b/Scraping/COM/samples/Java/ImgExt.java new file mode 100644 index 0000000..db2ae6e --- /dev/null +++ b/Scraping/COM/samples/Java/ImgExt.java @@ -0,0 +1,52 @@ +/**************************************************************************** + * + * File: ImgExt.java + * + * Usage: java ImgExt PDF-InputFile + * + * Description: Extract Images and Image data of PDF-InputFile. + * + * Version: 1.02 (6-September-2004) + * + * Author: Philip Renggli, PDF Tools AG + * + * Copyright: Copyright (C) 2004 PDF Tools AG, Switzerland + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation. This software is provided "as is" without + * express or implied warranty. + * + ***************************************************************************/ + +import com.pdftools.expa.*; +import com.pdftools.*; + +public class ImgExt { + +public static void main(String[] args) { + try { + + // open input file + Document thePDF = new Document(args[0], ""); + + // select 1st page + thePDF.setPageNo(3); + + // get the content + Content theContent = thePDF.getPage().getContent(); + while(theContent.getNextImage()!= null) + { + Image theImage = theContent.getImage(); + System.out.println("Image width = " + theImage.getWidth()); + System.out.println("Image height = " + theImage.getHeight()); + theImage.store("image.tif", NativeLibrary.COMPRESSION.eComprRaw); + } + + } catch (Throwable e) { + e.printStackTrace(); + } +} +} diff --git a/Scraping/COM/samples/Java/ObjExt.java b/Scraping/COM/samples/Java/ObjExt.java new file mode 100644 index 0000000..be11285 --- /dev/null +++ b/Scraping/COM/samples/Java/ObjExt.java @@ -0,0 +1,72 @@ +/**************************************************************************** + * + * File: ObjExt.java + * + * Usage: java ObjExt PDF-InputFile + * + * Description: Extract Objects from the PDF-InputFile. + * + * Version: 1.03 (18-November-2005) + * + * Author: Philip Renggli, PDF Tools AG + * + * Copyright: Copyright (C) 2004 PDF Tools AG, Switzerland + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation. This software is provided "as is" without + * express or implied warranty. + * + ***************************************************************************/ + +import com.pdftools.expa.*; +import com.pdftools.*; + +public class ObjExt { + +public static void main(String[] args) { + try { + + // open input file + Document thePDF = new Document(args[0], ""); + + // select 1st page + thePDF.setPageNo(1); + + // get the content + Content theContent = thePDF.getPage().getContent(); + theContent.resetContent(false); + + int imageCounter = 1; + while(true) + { + int theObject = theContent.getNextObject(); + + if(theObject == ExpaInitialize.CONTENTOBJECT.eNone) + { + System.out.println("0 End:"); + break; + } + else if(theObject == ExpaInitialize.CONTENTOBJECT.eText) + { + System.out.println("1 Text: " + theContent.getText().getUnicodeString()); + } + else if(theObject == ExpaInitialize.CONTENTOBJECT.eImage) + { + Image theImage = theContent.getImage(); + System.out.println("2 Image: width=" + theImage.getWidth() + " height=" + theImage.getHeight()); + theImage.store("image" + imageCounter++ + ".tif", NativeLibrary.COMPRESSION.eComprFlate); + } + else if(theObject == ExpaInitialize.CONTENTOBJECT.ePath) + { + System.out.println("3 Path: " + new String(theContent.getPath())); + } + } + + } catch (Throwable e) { + e.printStackTrace(); + } +} +} diff --git a/Scraping/COM/samples/Java/TextExt.java b/Scraping/COM/samples/Java/TextExt.java new file mode 100644 index 0000000..13542dc --- /dev/null +++ b/Scraping/COM/samples/Java/TextExt.java @@ -0,0 +1,72 @@ +/**************************************************************************** + * + * File: TextExt.java + * + * Usage: java TextExt PDF-InputFile + * + * Description: Prints out the text of PDF-InputFile. + * + * Version: 1.03 (18-November-2005) + * + * Author: Philip Renggli, PDF Tools AG + * + * Copyright: Copyright (C) 2005 PDF Tools AG, Switzerland + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation. This software is provided "as is" without + * express or implied warranty. + * + ***************************************************************************/ + +import com.pdftools.expa.*; + +public class TextExt { + +public static void main(String[] args) { + try { + // open input file + Document thePDF = new Document(args[0], ""); + + // loop through all pages + for(int curPage = 1; curPage <= thePDF.getPageCount(); curPage++) + { + // set the page number + thePDF.setPageNo(curPage); + + // get the content + Content theContent = thePDF.getPage().getContent(); + + // extract words + theContent.resetContent(true); + theContent.resetContent(false); + + // loop through all text tokens on the page + System.out.println("** Begin Page " + curPage + " of " + thePDF.getPageCount() + " **"); + double dY_old = -1.0; + while(theContent.getNextText() != null) + { + // compare Y position with the position of the last token + if(theContent.getText().getYPos().length == 0) + { + System.out.println(); + break; + } + float dY_new = theContent.getText().getYPos()[0]; + if(dY_old == dY_new) + System.out.print(" "); + else if (dY_old != -1.0) + System.out.println(); + System.out.print(theContent.getText().getUnicodeString()); + // save the Y position + dY_old = dY_new; + } + } + thePDF.close(); + } catch (Throwable e) { + e.printStackTrace(); + } +} +} diff --git a/Scraping/COM/samples/VB.NET/ImgExt/ImgExt.resX b/Scraping/COM/samples/VB.NET/ImgExt/ImgExt.resX new file mode 100644 index 0000000..240d09f --- /dev/null +++ b/Scraping/COM/samples/VB.NET/ImgExt/ImgExt.resX @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + 17, 17 + + + Public + + + False + + + True + + + True + + + Assembly + + + Public + + + 8, 8 + + + False + + + True + + + True + + + Assembly + + + Public + + + 8, 8 + + + False + + + Assembly + + + Public + + + Assembly + + + False + + + Public + + + False + + + True + + + True + + + Assembly + + + Public + + + 8, 8 + + + False + + + True + + + True + + + Assembly + + + Public + + + 8, 8 + + + False + + + Assembly + + + Public + + + Assembly + + + False + + + Public + + + False + + + True + + + True + + + Assembly + + + Public + + + 8, 8 + + + False + + + True + + + True + + + Assembly + + + Public + + + 8, 8 + + + False + + + Assembly + + + Public + + + False + + + True + + + True + + + Assembly + + + Public + + + 8, 8 + + + False + + + Assembly + + + Public + + + False + + + Assembly + + + Public + + + Assembly + + + False + + + Public + + + Public + + + False + + + Assembly + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0xLjAuNTAw + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACFT + eXN0ZW0uV2luZG93cy5Gb3Jtcy5BeEhvc3QrU3RhdGUBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAhQAA + AAIBAAAAAQAAAAAkAAAAMjhDNEM4MjAtNDAxQS0xMDFCLUEzQzktMDgwMDJCMkY0OUZCAAAAAEwAAAAh + QzQSCAAAAE8DAABPAwAAhjwE+QAABgAAAAAAIAAAAAAAAAAAAAAAAQAAAAQBAAABAAAAAAAAAAAAAAAA + AAAAAAAAQQAAAAAAAAAACw== + + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + Form1 + + + True + + + 80 + + + True + + + Assembly + + \ No newline at end of file diff --git a/Scraping/COM/samples/VB.NET/ImgExt/ImgExt.sln b/Scraping/COM/samples/VB.NET/ImgExt/ImgExt.sln new file mode 100644 index 0000000..8cac7f5 --- /dev/null +++ b/Scraping/COM/samples/VB.NET/ImgExt/ImgExt.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ImgExt", "ImgExt.vbproj", "{8774F1C6-F056-4955-BCEB-EB129A7F950A}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8774F1C6-F056-4955-BCEB-EB129A7F950A}.Debug.ActiveCfg = Debug|.NET + {8774F1C6-F056-4955-BCEB-EB129A7F950A}.Debug.Build.0 = Debug|.NET + {8774F1C6-F056-4955-BCEB-EB129A7F950A}.Release.ActiveCfg = Release|.NET + {8774F1C6-F056-4955-BCEB-EB129A7F950A}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Scraping/COM/samples/VB.NET/ImgExt/ImgExt.vb b/Scraping/COM/samples/VB.NET/ImgExt/ImgExt.vb new file mode 100644 index 0000000..afe19fb --- /dev/null +++ b/Scraping/COM/samples/VB.NET/ImgExt/ImgExt.vb @@ -0,0 +1,446 @@ +Option Strict Off +Option Explicit On +Friend Class Form1 + Inherits System.Windows.Forms.Form +#Region "Windows Form Designer generated code " + Public Sub New() + MyBase.New() + If m_vb6FormDefInstance Is Nothing Then + If m_InitializingDefInstance Then + m_vb6FormDefInstance = Me + Else + Try + 'For the start-up form, the first instance created is the default instance. + If System.Reflection.Assembly.GetExecutingAssembly.EntryPoint.DeclaringType Is Me.GetType Then + m_vb6FormDefInstance = Me + End If + Catch + End Try + End If + End If + 'This call is required by the Windows Form Designer. + InitializeComponent() + End Sub + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal Disposing As Boolean) + If Disposing Then + If Not components Is Nothing Then + components.Dispose() + End If + End If + MyBase.Dispose(Disposing) + End Sub + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + Public ToolTip1 As System.Windows.Forms.ToolTip + Public WithEvents Extract As System.Windows.Forms.Button + Public WithEvents txtList As System.Windows.Forms.TextBox + Public WithEvents Frame4 As System.Windows.Forms.Panel + Public WithEvents Frame1 As System.Windows.Forms.Panel + Public WithEvents OpenPDF As System.Windows.Forms.Button + Public WithEvents txtInput As System.Windows.Forms.TextBox + Public WithEvents Frame3 As System.Windows.Forms.Panel + Public WithEvents Frame14 As System.Windows.Forms.Panel + Public WithEvents Frame17 As System.Windows.Forms.Panel + Public WithEvents Label22 As System.Windows.Forms.Label + Public WithEvents Frame16 As System.Windows.Forms.Panel + Public WithEvents Label10 As System.Windows.Forms.Label + Public WithEvents Label1 As System.Windows.Forms.Label + Public WithEvents Frame2 As System.Windows.Forms.Panel + Public WithEvents TextLogo As System.Windows.Forms.TextBox + Public WithEvents fileDialog As AxMSComDlg.AxCommonDialog + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1)) + Me.ToolTip1 = New System.Windows.Forms.ToolTip(Me.components) + Me.Frame1 = New System.Windows.Forms.Panel + Me.Frame4 = New System.Windows.Forms.Panel + Me.Extract = New System.Windows.Forms.Button + Me.txtList = New System.Windows.Forms.TextBox + Me.Frame14 = New System.Windows.Forms.Panel + Me.Frame3 = New System.Windows.Forms.Panel + Me.OpenPDF = New System.Windows.Forms.Button + Me.txtInput = New System.Windows.Forms.TextBox + Me.Frame17 = New System.Windows.Forms.Panel + Me.Frame16 = New System.Windows.Forms.Panel + Me.Label22 = New System.Windows.Forms.Label + Me.Frame2 = New System.Windows.Forms.Panel + Me.Label10 = New System.Windows.Forms.Label + Me.Label1 = New System.Windows.Forms.Label + Me.TextLogo = New System.Windows.Forms.TextBox + Me.fileDialog = New AxMSComDlg.AxCommonDialog + Me.Frame1.SuspendLayout() + Me.Frame4.SuspendLayout() + Me.Frame14.SuspendLayout() + Me.Frame3.SuspendLayout() + Me.Frame16.SuspendLayout() + Me.Frame2.SuspendLayout() + CType(Me.fileDialog, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'Frame1 + ' + Me.Frame1.BackColor = System.Drawing.Color.FromArgb(CType(0, Byte), CType(102, Byte), CType(153, Byte)) + Me.Frame1.Controls.Add(Me.Frame4) + Me.Frame1.Cursor = System.Windows.Forms.Cursors.Default + Me.Frame1.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Frame1.ForeColor = System.Drawing.SystemColors.WindowText + Me.Frame1.Location = New System.Drawing.Point(96, 88) + Me.Frame1.Name = "Frame1" + Me.Frame1.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.Frame1.Size = New System.Drawing.Size(500, 84) + Me.Frame1.TabIndex = 11 + ' + 'Frame4 + ' + Me.Frame4.BackColor = System.Drawing.Color.White + Me.Frame4.Controls.Add(Me.Extract) + Me.Frame4.Controls.Add(Me.txtList) + Me.Frame4.Cursor = System.Windows.Forms.Cursors.Default + Me.Frame4.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Frame4.ForeColor = System.Drawing.SystemColors.WindowText + Me.Frame4.Location = New System.Drawing.Point(2, 2) + Me.Frame4.Name = "Frame4" + Me.Frame4.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.Frame4.Size = New System.Drawing.Size(498, 82) + Me.Frame4.TabIndex = 12 + ' + 'Extract + ' + Me.Extract.BackColor = System.Drawing.SystemColors.Control + Me.Extract.Cursor = System.Windows.Forms.Cursors.Default + Me.Extract.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Extract.ForeColor = System.Drawing.SystemColors.ControlText + Me.Extract.Location = New System.Drawing.Point(424, 8) + Me.Extract.Name = "Extract" + Me.Extract.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.Extract.Size = New System.Drawing.Size(65, 33) + Me.Extract.TabIndex = 14 + Me.Extract.Text = "Extract Images" + ' + 'txtList + ' + Me.txtList.AcceptsReturn = True + Me.txtList.AutoSize = False + Me.txtList.BackColor = System.Drawing.SystemColors.Window + Me.txtList.Cursor = System.Windows.Forms.Cursors.IBeam + Me.txtList.Font = New System.Drawing.Font("Verdana", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtList.ForeColor = System.Drawing.SystemColors.WindowText + Me.txtList.Location = New System.Drawing.Point(8, 8) + Me.txtList.MaxLength = 0 + Me.txtList.Multiline = True + Me.txtList.Name = "txtList" + Me.txtList.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.txtList.Size = New System.Drawing.Size(409, 67) + Me.txtList.TabIndex = 13 + Me.txtList.Text = "" + ' + 'Frame14 + ' + Me.Frame14.BackColor = System.Drawing.Color.FromArgb(CType(0, Byte), CType(102, Byte), CType(153, Byte)) + Me.Frame14.Controls.Add(Me.Frame3) + Me.Frame14.Cursor = System.Windows.Forms.Cursors.Default + Me.Frame14.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Frame14.ForeColor = System.Drawing.SystemColors.WindowText + Me.Frame14.Location = New System.Drawing.Point(96, 48) + Me.Frame14.Name = "Frame14" + Me.Frame14.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.Frame14.Size = New System.Drawing.Size(500, 36) + Me.Frame14.TabIndex = 7 + ' + 'Frame3 + ' + Me.Frame3.BackColor = System.Drawing.Color.White + Me.Frame3.Controls.Add(Me.OpenPDF) + Me.Frame3.Controls.Add(Me.txtInput) + Me.Frame3.Cursor = System.Windows.Forms.Cursors.Default + Me.Frame3.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Frame3.ForeColor = System.Drawing.SystemColors.WindowText + Me.Frame3.Location = New System.Drawing.Point(2, 2) + Me.Frame3.Name = "Frame3" + Me.Frame3.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.Frame3.Size = New System.Drawing.Size(498, 34) + Me.Frame3.TabIndex = 8 + ' + 'OpenPDF + ' + Me.OpenPDF.BackColor = System.Drawing.SystemColors.Control + Me.OpenPDF.Cursor = System.Windows.Forms.Cursors.Default + Me.OpenPDF.Font = New System.Drawing.Font("Verdana", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OpenPDF.ForeColor = System.Drawing.SystemColors.ControlText + Me.OpenPDF.Location = New System.Drawing.Point(424, 6) + Me.OpenPDF.Name = "OpenPDF" + Me.OpenPDF.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.OpenPDF.Size = New System.Drawing.Size(65, 25) + Me.OpenPDF.TabIndex = 10 + Me.OpenPDF.Text = "Browse" + ' + 'txtInput + ' + Me.txtInput.AcceptsReturn = True + Me.txtInput.AutoSize = False + Me.txtInput.BackColor = System.Drawing.SystemColors.Window + Me.txtInput.Cursor = System.Windows.Forms.Cursors.IBeam + Me.txtInput.Font = New System.Drawing.Font("Verdana", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtInput.ForeColor = System.Drawing.SystemColors.WindowText + Me.txtInput.Location = New System.Drawing.Point(8, 8) + Me.txtInput.MaxLength = 0 + Me.txtInput.Name = "txtInput" + Me.txtInput.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.txtInput.Size = New System.Drawing.Size(409, 19) + Me.txtInput.TabIndex = 9 + Me.txtInput.Text = "" + ' + 'Frame17 + ' + Me.Frame17.BackColor = System.Drawing.Color.FromArgb(CType(0, Byte), CType(102, Byte), CType(153, Byte)) + Me.Frame17.Cursor = System.Windows.Forms.Cursors.Default + Me.Frame17.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Frame17.ForeColor = System.Drawing.SystemColors.ControlText + Me.Frame17.Location = New System.Drawing.Point(0, 216) + Me.Frame17.Name = "Frame17" + Me.Frame17.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.Frame17.Size = New System.Drawing.Size(609, 3) + Me.Frame17.TabIndex = 4 + ' + 'Frame16 + ' + Me.Frame16.BackColor = System.Drawing.Color.FromArgb(CType(174, Byte), CType(209, Byte), CType(226, Byte)) + Me.Frame16.Controls.Add(Me.Label22) + Me.Frame16.Cursor = System.Windows.Forms.Cursors.Default + Me.Frame16.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Frame16.ForeColor = System.Drawing.SystemColors.ControlText + Me.Frame16.Location = New System.Drawing.Point(0, 200) + Me.Frame16.Name = "Frame16" + Me.Frame16.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.Frame16.Size = New System.Drawing.Size(609, 17) + Me.Frame16.TabIndex = 5 + ' + 'Label22 + ' + Me.Label22.BackColor = System.Drawing.Color.Transparent + Me.Label22.Cursor = System.Windows.Forms.Cursors.Default + Me.Label22.Font = New System.Drawing.Font("Verdana", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label22.ForeColor = System.Drawing.Color.FromArgb(CType(0, Byte), CType(102, Byte), CType(153, Byte)) + Me.Label22.Location = New System.Drawing.Point(48, 0) + Me.Label22.Name = "Label22" + Me.Label22.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.Label22.Size = New System.Drawing.Size(433, 21) + Me.Label22.TabIndex = 6 + Me.Label22.Text = "Last update: November 18, 2005 - Copyright 2001-2005 PDF Tools AG" + ' + 'Frame2 + ' + Me.Frame2.BackColor = System.Drawing.Color.FromArgb(CType(174, Byte), CType(209, Byte), CType(226, Byte)) + Me.Frame2.Controls.Add(Me.Label10) + Me.Frame2.Controls.Add(Me.Label1) + Me.Frame2.Cursor = System.Windows.Forms.Cursors.Default + Me.Frame2.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Frame2.ForeColor = System.Drawing.SystemColors.ControlText + Me.Frame2.Location = New System.Drawing.Point(0, 0) + Me.Frame2.Name = "Frame2" + Me.Frame2.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.Frame2.Size = New System.Drawing.Size(89, 198) + Me.Frame2.TabIndex = 1 + ' + 'Label10 + ' + Me.Label10.BackColor = System.Drawing.Color.FromArgb(CType(122, Byte), CType(182, Byte), CType(215, Byte)) + Me.Label10.Cursor = System.Windows.Forms.Cursors.Default + Me.Label10.Font = New System.Drawing.Font("Verdana", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label10.ForeColor = System.Drawing.Color.FromArgb(CType(0, Byte), CType(102, Byte), CType(153, Byte)) + Me.Label10.Location = New System.Drawing.Point(0, 48) + Me.Label10.Name = "Label10" + Me.Label10.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.Label10.Size = New System.Drawing.Size(89, 21) + Me.Label10.TabIndex = 3 + Me.Label10.Text = " PDF FILE" + ' + 'Label1 + ' + Me.Label1.BackColor = System.Drawing.Color.FromArgb(CType(122, Byte), CType(182, Byte), CType(215, Byte)) + Me.Label1.Cursor = System.Windows.Forms.Cursors.Default + Me.Label1.Font = New System.Drawing.Font("Verdana", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.FromArgb(CType(0, Byte), CType(102, Byte), CType(153, Byte)) + Me.Label1.Location = New System.Drawing.Point(0, 96) + Me.Label1.Name = "Label1" + Me.Label1.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.Label1.Size = New System.Drawing.Size(89, 21) + Me.Label1.TabIndex = 2 + Me.Label1.Text = " Image List" + ' + 'TextLogo + ' + Me.TextLogo.AcceptsReturn = True + Me.TextLogo.AutoSize = False + Me.TextLogo.BackColor = System.Drawing.Color.FromArgb(CType(255, Byte), CType(153, Byte), CType(102, Byte)) + Me.TextLogo.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.TextLogo.Cursor = System.Windows.Forms.Cursors.IBeam + Me.TextLogo.Font = New System.Drawing.Font("Verdana", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.TextLogo.ForeColor = System.Drawing.Color.White + Me.TextLogo.Location = New System.Drawing.Point(96, 8) + Me.TextLogo.MaxLength = 0 + Me.TextLogo.Name = "TextLogo" + Me.TextLogo.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.TextLogo.Size = New System.Drawing.Size(505, 25) + Me.TextLogo.TabIndex = 0 + Me.TextLogo.Text = " 3-Heights PDF Extract Tool - Images" + ' + 'fileDialog + ' + Me.fileDialog.Enabled = True + Me.fileDialog.Location = New System.Drawing.Point(544, 168) + Me.fileDialog.Name = "fileDialog" + Me.fileDialog.OcxState = CType(resources.GetObject("fileDialog.OcxState"), System.Windows.Forms.AxHost.State) + Me.fileDialog.Size = New System.Drawing.Size(32, 32) + Me.fileDialog.TabIndex = 12 + ' + 'Form1 + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(608, 239) + Me.Controls.Add(Me.Frame1) + Me.Controls.Add(Me.Frame14) + Me.Controls.Add(Me.Frame17) + Me.Controls.Add(Me.Frame16) + Me.Controls.Add(Me.Frame2) + Me.Controls.Add(Me.TextLogo) + Me.Controls.Add(Me.fileDialog) + Me.Cursor = System.Windows.Forms.Cursors.Default + Me.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Location = New System.Drawing.Point(4, 23) + Me.Name = "Form1" + Me.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.Text = "Image Extraction" + Me.Frame1.ResumeLayout(False) + Me.Frame4.ResumeLayout(False) + Me.Frame14.ResumeLayout(False) + Me.Frame3.ResumeLayout(False) + Me.Frame16.ResumeLayout(False) + Me.Frame2.ResumeLayout(False) + CType(Me.fileDialog, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub +#End Region +#Region "Upgrade Support " + Private Shared m_vb6FormDefInstance As Form1 + Private Shared m_InitializingDefInstance As Boolean + Public Shared Property DefInstance() As Form1 + Get + If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then + m_InitializingDefInstance = True + m_vb6FormDefInstance = New Form1() + m_InitializingDefInstance = False + End If + DefInstance = m_vb6FormDefInstance + End Get + Set + m_vb6FormDefInstance = Value + End Set + End Property +#End Region + ' Extract and list images and their properties + ' -------------------------------------------- + ' + ' Visual Basic .NET sample for the 3-Heights PDF Extract Tool API + ' http://www.pdf-tools.com + ' + ' Copyright (C) 2005 PDF Tools AG, Switzerland + ' Permission to use, copy, modify, and distribute this + ' software and its documentation for any purpose and without + ' fee is hereby granted, provided that the above copyright + ' notice appear in all copies and that both that copyright + ' notice and this permission notice appear in supporting + ' documentation. This software is provided "as is" without + ' express or implied warranty. + + Private Sub Extract_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Extract.Click + Dim eLZW As Object + Dim res As Object + Dim Page As Object + Dim imagecount As Object + + Dim pdf As New PDFPARSERLib.Document + Dim content As PDFPARSERLib.Content + Dim image As PDFPARSERLib.Image + Dim ctm As PDFPARSERLib.TransformMatrix + Dim X, Width_Renamed, Height_Renamed, Y As Single + Dim sColor As String + + ' Open the input file + If pdf.Open(txtInput.Text) Then + + ' Clear Text field and reset counter + txtList.Text = "" + imagecount = 0 + + ' Loop through all pages + For Page = 1 To pdf.PageCount + + ' Set current page number + pdf.PageNo = Page + + ' Get the page content + content = pdf.Page.content + If Not (content Is Nothing) Then + + ' Loop through all images + Do + ' Get the next image from the page + image = content.GetNextImage + If Not (image Is Nothing) Then + imagecount = imagecount + 1 + + ' Get the Transformation Matrix + ctm = content.GraphicsState.ctm + res = image.GetResolution(ctm) + + ' Get the coordinates and dimensions of the image + ' Calcualte Pythagoras in case of rotated images + Width_Renamed = System.Math.Round(System.Math.Sqrt(ctm.a * ctm.a + ctm.b * ctm.b), 1) + Height_Renamed = System.Math.Round(System.Math.Sqrt(ctm.d * ctm.d + ctm.c * ctm.c), 1) + X = System.Math.Round(ctm.e, 1) + Y = System.Math.Round(ctm.f, 1) + + ' Check if it's color + If image.ColorSpace.IsColor Then + sColor = "color" + ElseIf image.ColorSpace.IsMonochrome Then + If image.BitsPerComponent > 1 Then + sColor = "greyscale" + Else + sColor = "bitonal" + End If + End If + + ' Update the Text List + txtList.Text = txtList.Text & "img: " & imagecount & ", w=" & Width_Renamed & ", h=" & Height_Renamed & ", x=" & X & ", y=" & Y & ", page=" & Page & ", " & sColor & ", res=" & System.Math.Round(res, 0) & Chr(13) & Chr(10) + + ' Store the image on a file + image.ChangeOrientation(ctm.Orientation) + image.Store(VB6.GetPath & "\out" & imagecount & ".tif", eLZW) + + Else + Exit Do + End If + Loop + End If + Next Page + pdf.Close() + Else + MsgBox("Couldn't open input file") + End If + End Sub + + Private Sub OpenPDF_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles OpenPDF.Click + ' Open File Dialog + fileDialog.FileName = txtInput.Text + fileDialog.ShowOpen() + txtInput.Text = fileDialog.FileName + End Sub +End Class \ No newline at end of file diff --git a/Scraping/COM/samples/VB.NET/ImgExt/ImgExt.vbproj b/Scraping/COM/samples/VB.NET/ImgExt/ImgExt.vbproj new file mode 100644 index 0000000..3fe32ef --- /dev/null +++ b/Scraping/COM/samples/VB.NET/ImgExt/ImgExt.vbproj @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Scraping/COM/samples/VB/GetAnnots.frm b/Scraping/COM/samples/VB/GetAnnots.frm new file mode 100644 index 0000000..663850e --- /dev/null +++ b/Scraping/COM/samples/VB/GetAnnots.frm @@ -0,0 +1,279 @@ +VERSION 5.00 +Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx" +Begin VB.Form Form1 + BackColor = &H00FFFFFF& + BorderStyle = 1 'Fixed Single + Caption = "3-Heights PDF Extract Tool -Annotations" + ClientHeight = 3600 + ClientLeft = 45 + ClientTop = 330 + ClientWidth = 9120 + FillColor = &H00FFFFFF& + LinkTopic = "Form1" + MaxButton = 0 'False + MinButton = 0 'False + ScaleHeight = 3600 + ScaleWidth = 9120 + StartUpPosition = 3 'Windows Default + Begin VB.TextBox TextLogo + BackColor = &H006699FF& + BorderStyle = 0 'None + BeginProperty Font + Name = "Verdana" + Size = 9.75 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00FFFFFF& + Height = 375 + Left = 1440 + TabIndex = 14 + Text = " 3-Heights PDF Extract Tool - Annotations" + Top = 120 + Width = 7575 + End + Begin VB.Frame Frame2 + BackColor = &H00E2D1AE& + BorderStyle = 0 'None + Height = 2970 + Left = 0 + TabIndex = 11 + Top = 0 + Width = 1335 + Begin VB.Label Label1 + BackColor = &H00D7B67A& + Caption = "Annotations" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00996600& + Height = 315 + Left = 0 + TabIndex = 13 + Top = 1440 + Width = 1335 + End + Begin VB.Label Label10 + BackColor = &H00D7B67A& + Caption = " PDF FILE" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00996600& + Height = 315 + Left = 0 + TabIndex = 12 + Top = 840 + Width = 1335 + End + End + Begin VB.Frame Frame16 + BackColor = &H00E2D1AE& + BorderStyle = 0 'None + Height = 255 + Left = 0 + TabIndex = 9 + Top = 3000 + Width = 9135 + Begin VB.Label Label22 + BackColor = &H00D7B67A& + BackStyle = 0 'Transparent + Caption = "Last update: November 22, 2005 - Copyright 2001-2005 PDF Tools AG" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00996600& + Height = 315 + Left = 720 + TabIndex = 10 + Top = 0 + Width = 6975 + End + End + Begin VB.Frame Frame17 + BackColor = &H00996600& + BorderStyle = 0 'None + Height = 45 + Left = 0 + TabIndex = 8 + Top = 3240 + Width = 9135 + End + Begin VB.Frame Frame14 + Appearance = 0 'Flat + BackColor = &H00996600& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 540 + Left = 1440 + TabIndex = 4 + Top = 720 + Width = 7500 + Begin VB.Frame Frame3 + Appearance = 0 'Flat + BackColor = &H00FFFFFF& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 500 + Left = 20 + TabIndex = 5 + Top = 20 + Width = 7460 + Begin VB.TextBox txtInput + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 400 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 285 + Left = 120 + TabIndex = 7 + Top = 120 + Width = 6135 + End + Begin VB.CommandButton OpenPDF + Caption = "Browse" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 400 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 375 + Left = 6360 + TabIndex = 6 + Top = 80 + Width = 975 + End + End + End + Begin VB.Frame Frame1 + Appearance = 0 'Flat + BackColor = &H00996600& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 1260 + Left = 1440 + TabIndex = 0 + Top = 1320 + Width = 7500 + Begin VB.Frame Frame4 + Appearance = 0 'Flat + BackColor = &H00FFFFFF& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 1220 + Left = 20 + TabIndex = 1 + Top = 20 + Width = 7460 + Begin VB.TextBox txtList + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 400 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 1005 + Left = 120 + MultiLine = -1 'True + TabIndex = 3 + Top = 120 + Width = 6135 + End + Begin VB.CommandButton Extract + Caption = "List Annots" + Height = 495 + Left = 6360 + TabIndex = 2 + Top = 120 + Width = 975 + End + End + End + Begin MSComDlg.CommonDialog fileDialog + Left = 8160 + Top = 2520 + _ExtentX = 847 + _ExtentY = 847 + _Version = 393216 + End +End +Attribute VB_Name = "Form1" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +' Visual Basic 6 sample for the 3-Heights PDF Extract Tool API +' http://www.pdf-tools.com +' +' Copyright (C) 2005 PDF Tools AG, Switzerland +' Permission to use, copy, modify, and distribute this +' software and its documentation for any purpose and without +' fee is hereby granted, provided that the above copyright +' notice appear in all copies and that both that copyright +' notice and this permission notice appear in supporting +' documentation. This software is provided "as is" without +' express or implied warranty. + +Private Sub Extract_Click() + + Dim doc As New PDFPARSERLib.Document + Dim pdf As PDFPARSERLib.Page + Dim annot As PDFPARSERLib.Annotation + + If Not doc.Open(txtInput, "") Then + MsgBox "Could not open PDF file." + Exit Sub + End If + + doc.PageNo = 1 + Set pdf = doc.Page + txtList.Text = "" + annotcount = 0 + + Set annot = pdf.GetFirstAnnotation + While Not annot Is Nothing + txtList.Text = txtList.Text & "Annotation: Page=" & doc.PageNo & ", Name=" & annot.Name & ", Subtype=" & annot.Subtype & Chr(13) & Chr(10) + Set annot = pdf.GetNextAnnotation + Wend + +End Sub + +Private Sub OpenPDF_Click() + ' Open File Dialog + fileDialog.FileName = txtInput + fileDialog.ShowOpen + txtInput = fileDialog.FileName +End Sub diff --git a/Scraping/COM/samples/VB/GetAnnots.vbp b/Scraping/COM/samples/VB/GetAnnots.vbp new file mode 100644 index 0000000..a8ccb31 --- /dev/null +++ b/Scraping/COM/samples/VB/GetAnnots.vbp @@ -0,0 +1,34 @@ +Type=Exe +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINNT\system32\stdole2.tlb#OLE Automation +Reference=*\G{4CFD0B17-7BAD-44E5-9003-3AAB04AFB85B}#1.0#0#D:\Bin\bin\PDFParser.dll#3-Heights(TM) PDF Export API 1.40 +Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; comdlg32.ocx +Form=GetAnnots.frm +Startup="Form1" +Command32="" +Name="Project1" +HelpContextID="0" +CompatibleMode="0" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +VersionCompanyName="PDF Tools AG" +CompilationType=0 +OptimizationType=0 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=0 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=0 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 + +[MS Transaction Server] +AutoRefresh=1 diff --git a/Scraping/COM/samples/VB/GetOutline.frm b/Scraping/COM/samples/VB/GetOutline.frm new file mode 100644 index 0000000..aeadab5 --- /dev/null +++ b/Scraping/COM/samples/VB/GetOutline.frm @@ -0,0 +1,283 @@ +VERSION 5.00 +Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx" +Begin VB.Form Form1 + BackColor = &H00FFFFFF& + BorderStyle = 1 'Fixed Single + Caption = "Outline Extraction" + ClientHeight = 8340 + ClientLeft = 3990 + ClientTop = 2430 + ClientWidth = 9120 + FillColor = &H00FFFFFF& + LinkTopic = "Form1" + MaxButton = 0 'False + MinButton = 0 'False + ScaleHeight = 8340 + ScaleWidth = 9120 + Begin VB.TextBox TextLogo + BackColor = &H006699FF& + BorderStyle = 0 'None + BeginProperty Font + Name = "Verdana" + Size = 9.75 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00FFFFFF& + Height = 375 + Left = 1440 + TabIndex = 14 + Text = " 3-Heights PDF Extract Tool - Outline" + Top = 120 + Width = 7575 + End + Begin VB.Frame Frame2 + BackColor = &H00E2D1AE& + BorderStyle = 0 'None + Height = 7770 + Left = 0 + TabIndex = 11 + Top = 0 + Width = 1335 + Begin VB.Label Label1 + BackColor = &H00D7B67A& + Caption = " OUTLINE" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00996600& + Height = 315 + Left = 0 + TabIndex = 13 + Top = 1440 + Width = 1335 + End + Begin VB.Label Label10 + BackColor = &H00D7B67A& + Caption = " PDF FILE" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00996600& + Height = 315 + Left = 0 + TabIndex = 12 + Top = 840 + Width = 1335 + End + End + Begin VB.Frame Frame16 + BackColor = &H00E2D1AE& + BorderStyle = 0 'None + Height = 255 + Left = 0 + TabIndex = 9 + Top = 7800 + Width = 9135 + Begin VB.Label Label22 + BackColor = &H00D7B67A& + BackStyle = 0 'Transparent + Caption = "Last update: November, 2005 - Copyright 2001-2005 PDF Tools AG" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00996600& + Height = 315 + Left = 720 + TabIndex = 10 + Top = 0 + Width = 7215 + End + End + Begin VB.Frame Frame17 + BackColor = &H00996600& + BorderStyle = 0 'None + Height = 45 + Left = 0 + TabIndex = 8 + Top = 8040 + Width = 9135 + End + Begin VB.Frame Frame14 + Appearance = 0 'Flat + BackColor = &H00996600& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 540 + Left = 1440 + TabIndex = 4 + Top = 720 + Width = 7500 + Begin VB.Frame Frame3 + Appearance = 0 'Flat + BackColor = &H00FFFFFF& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 500 + Left = 20 + TabIndex = 5 + Top = 20 + Width = 7460 + Begin VB.TextBox txtInput + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 400 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 285 + Left = 120 + TabIndex = 7 + Top = 120 + Width = 6135 + End + Begin VB.CommandButton OpenPDF + Caption = "Browse" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 400 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 375 + Left = 6360 + TabIndex = 6 + Top = 80 + Width = 975 + End + End + End + Begin VB.Frame Frame1 + Appearance = 0 'Flat + BackColor = &H00996600& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 6180 + Left = 1440 + TabIndex = 0 + Top = 1320 + Width = 7500 + Begin VB.Frame Frame4 + Appearance = 0 'Flat + BackColor = &H00FFFFFF& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 6140 + Left = 20 + TabIndex = 1 + Top = 20 + Width = 7460 + Begin VB.TextBox txtList + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 400 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 5925 + Left = 120 + MultiLine = -1 'True + ScrollBars = 2 'Vertical + TabIndex = 3 + Top = 120 + Width = 6135 + End + Begin VB.CommandButton Extract + Caption = "List Outline" + Height = 495 + Left = 6360 + TabIndex = 2 + Top = 120 + Width = 975 + End + End + End + Begin MSComDlg.CommonDialog fileDialog + Left = 8400 + Top = 7440 + _ExtentX = 847 + _ExtentY = 847 + _Version = 393216 + End +End +Attribute VB_Name = "Form1" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +' List Outlines (Bookmarks) +' ------------------------- +' +' Visual Basic 6 sample for the 3-Heights PDF Extract Tool API +' http://www.pdf-tools.com +' +' Copyright (C) 2005 PDF Tools AG, Switzerland +' Permission to use, copy, modify, and distribute this +' software and its documentation for any purpose and without +' fee is hereby granted, provided that the above copyright +' notice appear in all copies and that both that copyright +' notice and this permission notice appear in supporting +' documentation. This software is provided "as is" without +' express or implied warranty. + +Private Sub Extract_Click() + + Dim doc As New PDFPARSERLib.Document + Dim outline As PDFPARSERLib.OutlineItem + Dim blanks As String + + If Not doc.Open(txtInput, "") Then + MsgBox "Could not open PDF file." + Exit Sub + End If + + txtList.Text = "" + + Set outline = doc.GetFirstOutlineItem + While Not outline Is Nothing + blanks = "" + For blank = 1 To doc.GetCurrentOutlineLevel + blanks = blanks & " " + Next blank + txtList.Text = txtList.Text & blanks & outline.Title & Chr(13) & Chr(10) + Set outline = doc.GetNextOutlineItem + Wend + +End Sub + +Private Sub OpenPDF_Click() + ' Open File Dialog + fileDialog.FileName = txtInput + fileDialog.ShowOpen + txtInput = fileDialog.FileName +End Sub diff --git a/Scraping/COM/samples/VB/GetOutline.vbp b/Scraping/COM/samples/VB/GetOutline.vbp new file mode 100644 index 0000000..ac738e8 --- /dev/null +++ b/Scraping/COM/samples/VB/GetOutline.vbp @@ -0,0 +1,34 @@ +Type=Exe +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINNT\system32\stdole2.tlb#OLE Automation +Reference=*\G{4CFD0B17-7BAD-44E5-9003-3AAB04AFB85B}#1.0#0#D:\Bin\bin\PDFParser.dll#3-Heights(TM) PDF Export API 1.50 +Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; comdlg32.ocx +Form=GetOutline.frm +Startup="Form1" +Command32="" +Name="Project1" +HelpContextID="0" +CompatibleMode="0" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +VersionCompanyName="PDF Tools AG" +CompilationType=0 +OptimizationType=0 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=0 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=0 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 + +[MS Transaction Server] +AutoRefresh=1 diff --git a/Scraping/COM/samples/VB/ImgExt.frm b/Scraping/COM/samples/VB/ImgExt.frm new file mode 100644 index 0000000..7885d42 --- /dev/null +++ b/Scraping/COM/samples/VB/ImgExt.frm @@ -0,0 +1,330 @@ +VERSION 5.00 +Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx" +Begin VB.Form Form1 + BackColor = &H00FFFFFF& + Caption = "Image Extraction" + ClientHeight = 3585 + ClientLeft = 60 + ClientTop = 345 + ClientWidth = 9120 + LinkTopic = "Form1" + ScaleHeight = 3585 + ScaleWidth = 9120 + StartUpPosition = 3 'Windows Default + Begin VB.Frame Frame1 + Appearance = 0 'Flat + BackColor = &H00996600& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 1260 + Left = 1440 + TabIndex = 11 + Top = 1320 + Width = 7500 + Begin VB.Frame Frame4 + Appearance = 0 'Flat + BackColor = &H00FFFFFF& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 1220 + Left = 20 + TabIndex = 12 + Top = 20 + Width = 7460 + Begin VB.CommandButton Extract + Caption = "Extract Images" + Height = 495 + Left = 6360 + TabIndex = 14 + Top = 120 + Width = 975 + End + Begin VB.TextBox txtList + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 400 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 1005 + Left = 120 + MultiLine = -1 'True + TabIndex = 13 + Top = 120 + Width = 6135 + End + End + End + Begin VB.Frame Frame14 + Appearance = 0 'Flat + BackColor = &H00996600& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 540 + Left = 1440 + TabIndex = 7 + Top = 720 + Width = 7500 + Begin VB.Frame Frame3 + Appearance = 0 'Flat + BackColor = &H00FFFFFF& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 500 + Left = 20 + TabIndex = 8 + Top = 20 + Width = 7460 + Begin VB.CommandButton OpenPDF + Caption = "Browse" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 400 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 375 + Left = 6360 + TabIndex = 10 + Top = 80 + Width = 975 + End + Begin VB.TextBox txtInput + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 400 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 285 + Left = 120 + TabIndex = 9 + Top = 120 + Width = 6135 + End + End + End + Begin VB.Frame Frame17 + BackColor = &H00996600& + BorderStyle = 0 'None + Height = 45 + Left = 0 + TabIndex = 4 + Top = 3240 + Width = 9135 + End + Begin VB.Frame Frame16 + BackColor = &H00E2D1AE& + BorderStyle = 0 'None + Height = 255 + Left = 0 + TabIndex = 5 + Top = 3000 + Width = 9135 + Begin VB.Label Label22 + BackColor = &H00D7B67A& + BackStyle = 0 'Transparent + Caption = "Last update: November 22, 2005 - Copyright 2001-2005 PDF Tools AG" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00996600& + Height = 315 + Left = 720 + TabIndex = 6 + Top = 0 + Width = 6495 + End + End + Begin VB.Frame Frame2 + BackColor = &H00E2D1AE& + BorderStyle = 0 'None + Height = 2970 + Left = 0 + TabIndex = 1 + Top = 0 + Width = 1335 + Begin VB.Label Label10 + BackColor = &H00D7B67A& + Caption = " PDF FILE" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00996600& + Height = 315 + Left = 0 + TabIndex = 3 + Top = 720 + Width = 1335 + End + Begin VB.Label Label1 + BackColor = &H00D7B67A& + Caption = " Image List" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00996600& + Height = 315 + Left = 0 + TabIndex = 2 + Top = 1440 + Width = 1335 + End + End + Begin VB.TextBox TextLogo + BackColor = &H006699FF& + BorderStyle = 0 'None + BeginProperty Font + Name = "Verdana" + Size = 9.75 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00FFFFFF& + Height = 375 + Left = 1440 + TabIndex = 0 + Text = " 3-Heights PDF Extract Tool - Images" + Top = 120 + Width = 7575 + End + Begin MSComDlg.CommonDialog fileDialog + Left = 8160 + Top = 2520 + _ExtentX = 847 + _ExtentY = 847 + _Version = 393216 + End +End +Attribute VB_Name = "Form1" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +' Extract and list images and their properties +' -------------------------------------------- +' +' Visual Basic 6 sample for the 3-Heights PDF Extract Tool API +' http://www.pdf-tools.com +' +' Copyright (C) 2005 PDF Tools AG, Switzerland +' Permission to use, copy, modify, and distribute this +' software and its documentation for any purpose and without +' fee is hereby granted, provided that the above copyright +' notice appear in all copies and that both that copyright +' notice and this permission notice appear in supporting +' documentation. This software is provided "as is" without +' express or implied warranty. + +Private Sub Extract_Click() + + Dim pdf As New PDFPARSERLib.Document + Dim content As PDFPARSERLib.content + Dim image As PDFPARSERLib.image + Dim ctm As PDFPARSERLib.TransformMatrix + Dim Width As Single, Height As Single, X As Single, Y As Single + Dim sColor As String + + ' Open the input file + If pdf.Open(txtInput.Text) Then + + ' Clear Text field and reset counter + txtList.Text = "" + imagecount = 0 + + ' Loop through all pages + For Page = 1 To pdf.PageCount + + ' Set current page number + pdf.PageNo = Page + + ' Get the page content + Set content = pdf.Page.content + If Not (content Is Nothing) Then + + ' Loop through all images + Do + ' Get the next image from the page + Set image = content.GetNextImage + If Not (image Is Nothing) Then + imagecount = imagecount + 1 + + ' Get the Transformation Matrix + Set ctm = content.GraphicsState.ctm + res = image.GetResolution(ctm) + + ' Get the coordinates and dimensions of the image + ' Calcualte Pythagoras in case of rotated images + Width = Round(Sqr(ctm.a * ctm.a + ctm.b * ctm.b), 1) + Height = Round(Sqr(ctm.d * ctm.d + ctm.c * ctm.c), 1) + X = Round(ctm.e, 1) + Y = Round(ctm.f, 1) + + ' Check if it's color + If image.ColorSpace.IsColor Then + sColor = "color" + ElseIf image.ColorSpace.IsMonochrome Then + If image.BitsPerComponent > 1 Then + sColor = "greyscale" + Else + sColor = "bitonal" + End If + End If + + ' Update the Text List + txtList.Text = txtList.Text & "img: " & imagecount & ", w=" & _ + Width & ", h=" & Height & ", x=" & X & ", y=" & Y & ", page=" & _ + Page & ", " & sColor & ", res=" & Round(res, 0) & Chr(13) & Chr(10) + + ' Store the image on a file + image.ChangeOrientation (ctm.Orientation) + image.Store App.Path & "\out" & imagecount & ".tif", eLZW + + Else + Exit Do + End If + Loop + End If + Next Page + pdf.Close + Else + MsgBox "Couldn't open input file" + End If +End Sub + +Private Sub OpenPDF_Click() + ' Open File Dialog + fileDialog.FileName = txtInput + fileDialog.ShowOpen + txtInput = fileDialog.FileName +End Sub diff --git a/Scraping/COM/samples/VB/ImgExt.vbp b/Scraping/COM/samples/VB/ImgExt.vbp new file mode 100644 index 0000000..ef93f8a --- /dev/null +++ b/Scraping/COM/samples/VB/ImgExt.vbp @@ -0,0 +1,34 @@ +Type=Exe +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINNT\system32\stdole2.tlb#OLE Automation +Reference=*\G{4CFD0B17-7BAD-44E5-9003-3AAB04AFB85B}#1.0#0#D:\Bin\bin\pdfparser.dll#PDFParser 1.0 Typbibliothek +Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; comdlg32.ocx +Form=ImgExt.frm +Startup="Form1" +Command32="" +Name="Projekt1" +HelpContextID="0" +CompatibleMode="0" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +VersionCompanyName="CCS Creative Computer Software AG" +CompilationType=0 +OptimizationType=0 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=0 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=0 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 + +[MS Transaction Server] +AutoRefresh=1 diff --git a/Scraping/COM/samples/VB/ObjExt.frm b/Scraping/COM/samples/VB/ObjExt.frm new file mode 100644 index 0000000..ce7a306 --- /dev/null +++ b/Scraping/COM/samples/VB/ObjExt.frm @@ -0,0 +1,312 @@ +VERSION 5.00 +Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx" +Begin VB.Form Form1 + BackColor = &H00FFFFFF& + Caption = "Get Path" + ClientHeight = 8310 + ClientLeft = 60 + ClientTop = 345 + ClientWidth = 9090 + LinkTopic = "Form1" + ScaleHeight = 8310 + ScaleWidth = 9090 + StartUpPosition = 3 'Windows Default + Begin VB.Frame Frame1 + Appearance = 0 'Flat + BackColor = &H00996600& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 6180 + Left = 1440 + TabIndex = 11 + Top = 1320 + Width = 7500 + Begin VB.Frame Frame4 + Appearance = 0 'Flat + BackColor = &H00FFFFFF& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 6140 + Left = 20 + TabIndex = 12 + Top = 20 + Width = 7460 + Begin MSComDlg.CommonDialog FileDialog + Left = 6600 + Top = 5640 + _ExtentX = 847 + _ExtentY = 847 + _Version = 393216 + End + Begin VB.TextBox txtList + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 400 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 5925 + Left = 120 + MultiLine = -1 'True + ScrollBars = 2 'Vertical + TabIndex = 14 + Top = 120 + Width = 6135 + End + Begin VB.CommandButton Extract + Caption = "List Paths" + Height = 495 + Left = 6360 + TabIndex = 13 + Top = 120 + Width = 975 + End + End + End + Begin VB.Frame Frame14 + Appearance = 0 'Flat + BackColor = &H00996600& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 540 + Left = 1440 + TabIndex = 7 + Top = 720 + Width = 7500 + Begin VB.Frame Frame3 + Appearance = 0 'Flat + BackColor = &H00FFFFFF& + BorderStyle = 0 'None + ForeColor = &H80000008& + Height = 500 + Left = 20 + TabIndex = 8 + Top = 20 + Width = 7460 + Begin VB.TextBox txtInput + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 400 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 285 + Left = 120 + TabIndex = 10 + Top = 120 + Width = 6135 + End + Begin VB.CommandButton OpenPDF + Caption = "Browse" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 400 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 375 + Left = 6360 + TabIndex = 9 + Top = 80 + Width = 975 + End + End + End + Begin VB.Frame Frame17 + BackColor = &H00996600& + BorderStyle = 0 'None + Height = 45 + Left = 0 + TabIndex = 6 + Top = 8040 + Width = 9135 + End + Begin VB.Frame Frame16 + BackColor = &H00E2D1AE& + BorderStyle = 0 'None + Height = 255 + Left = 0 + TabIndex = 4 + Top = 7800 + Width = 9135 + Begin VB.Label Label22 + BackColor = &H00D7B67A& + BackStyle = 0 'Transparent + Caption = "Last update: October 17, 2005 - Copyright 2001-2005 PDF Tools AG" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00996600& + Height = 315 + Left = 720 + TabIndex = 5 + Top = 0 + Width = 6495 + End + End + Begin VB.Frame Frame2 + BackColor = &H00E2D1AE& + BorderStyle = 0 'None + Height = 7770 + Left = 0 + TabIndex = 1 + Top = 0 + Width = 1335 + Begin VB.Label Label1 + BackColor = &H00D7B67A& + Caption = " PATH" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00996600& + Height = 315 + Left = 0 + TabIndex = 3 + Top = 1440 + Width = 1335 + End + Begin VB.Label Label10 + BackColor = &H00D7B67A& + Caption = " PDF FILE" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00996600& + Height = 315 + Left = 0 + TabIndex = 2 + Top = 840 + Width = 1335 + End + End + Begin VB.TextBox TextLogo + BackColor = &H006699FF& + BorderStyle = 0 'None + BeginProperty Font + Name = "Verdana" + Size = 9.75 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00FFFFFF& + Height = 375 + Left = 1440 + TabIndex = 0 + Text = " 3-Heights PDF Extract Tool - Get Path" + Top = 120 + Width = 7575 + End +End +Attribute VB_Name = "Form1" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +Private Sub Extract_Click() + Dim pdf As New PDFPARSERLib.Document + Dim content As PDFPARSERLib.content + Dim image As PDFPARSERLib.image + Dim text As PDFPARSERLib.text + Dim ctm As PDFPARSERLib.TransformMatrix + Dim t As PDFPARSERLib.TPDFContentObject + Dim Width As Single + Dim Height As Single + Dim X As Single + Dim y As Single + Dim path As String + Dim i As Integer + Dim txtPage As String + + sCR = Chr(13) & Chr(10) + + If pdf.Open(txtInput.text) Then + LastPage = pdf.PageCount + If LastPage > 5 Then + LastPage = 5 + End If + txtList = "" + For CurPage = 1 To LastPage + txtPage = "" + pdf.PageNo = CurPage + Dim mBox As Variant + mBox = pdf.Page.MediaBox + txtPage = txtPage & sCR & "- - - Page " & CurPage & " - - -" & sCR + txtPage = txtPage & "MediaBox = " & mBox(0) & ", " & mBox(1) & ", " & mBox(2) & ", " & mBox(3) & sCR + Set content = pdf.Page.content ' get the page content + If Not (content Is Nothing) Then + content.Reset True ' account for rotate + Do + t = content.GetNextObject ' the the next image from the page + Select Case t + Case eNone + Exit Do + Case eImage + Set image = content.image + If Not (image Is Nothing) Then + Height = image.Height + image.Store App.path + "\out.tif" ' store the image on a file + Else + MsgBox "there is no image on this page" + End If + Set ctm = content.GraphicsState.ctm ' see the coordinates of the image + Width = Round(ctm.a, 1) ' the width + Height = Round(ctm.d, 1) ' the height + X = Round(ctm.e, 1) ' the X position + y = Round(ctm.f, 1) ' the Y position + txtPage = txtPage & "Image: Width=" & Width & ", Height=" & Height & ", Pos(" & X & ", " & y & ")" & sCR + Case eText + ' See sample TextExt.vbp + Set text = content.text + If Not (text Is Nothing) Then + End If + Case ePath + path = content.path + txtPage = txtPage & "Path: " & path & sCR + End Select + Loop + Else + txtPage = txtPage & "There is no content on this page" & sCR + End If + txtList = txtList & txtPage + Next CurPage + pdf.Close + Else + MsgBox "Couldn't open input file" + End If +End Sub +Private Sub OpenPDF_Click() + ' Open File Dialog + FileDialog.FileName = txtInput + FileDialog.ShowOpen + txtInput = FileDialog.FileName +End Sub diff --git a/Scraping/COM/samples/VB/ObjExt.vbp b/Scraping/COM/samples/VB/ObjExt.vbp new file mode 100644 index 0000000..7e3b70c --- /dev/null +++ b/Scraping/COM/samples/VB/ObjExt.vbp @@ -0,0 +1,34 @@ +Type=Exe +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINNT\system32\stdole2.tlb#OLE Automation +Reference=*\G{4CFD0B17-7BAD-44E5-9003-3AAB04AFB85B}#1.0#0#D:\Bin\bin\PDFParser.dll#PDFParser 1.0 +Form=ObjExt.frm +Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; comdlg32.ocx +Startup="Form1" +Command32="" +Name="Projekt1" +HelpContextID="0" +CompatibleMode="0" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +VersionCompanyName="CCS Creative Computer Software AG" +CompilationType=0 +OptimizationType=0 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=0 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=0 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 + +[MS Transaction Server] +AutoRefresh=1 diff --git a/Scraping/COM/samples/VB/PathExt.frm b/Scraping/COM/samples/VB/PathExt.frm new file mode 100644 index 0000000..bd53571 --- /dev/null +++ b/Scraping/COM/samples/VB/PathExt.frm @@ -0,0 +1,48 @@ +VERSION 5.00 +Begin VB.Form Form1 + Caption = "Form1" + ClientHeight = 3195 + ClientLeft = 60 + ClientTop = 345 + ClientWidth = 4680 + LinkTopic = "Form1" + ScaleHeight = 3195 + ScaleWidth = 4680 + StartUpPosition = 3 'Windows-Standard + Begin VB.CommandButton Command1 + Caption = "Command1" + Height = 855 + Left = 960 + TabIndex = 0 + Top = 960 + Width = 2775 + End +End +Attribute VB_Name = "Form1" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +Private Sub Command1_Click() + Dim pdf As New PDFPARSERLib.Document + Dim content As PDFPARSERLib.content + + a = 0 + + If pdf.Open("P:\PDF\support\SamplesClassic\pdf\out_content.pdf") Then + pdf.PageNo = 1 + Set content = pdf.Page.content ' get the page content + If Not (content Is Nothing) Then + Do + Path = content.GetNextPath ' the the next image from the page + If Path = "" Then Exit Do + Loop + Else + MsgBox "There is no content on this page" + End If + pdf.Close + Else + MsgBox "Couldn't open input file" + End If + a = 1 +End Sub diff --git a/Scraping/COM/samples/VB/PathExt.vbp b/Scraping/COM/samples/VB/PathExt.vbp new file mode 100644 index 0000000..3217c50 --- /dev/null +++ b/Scraping/COM/samples/VB/PathExt.vbp @@ -0,0 +1,33 @@ +Type=Exe +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#E:\WINNT\system32\stdole2.tlb#OLE Automation +Reference=*\G{4CFD0B17-7BAD-44E5-9003-3AAB04AFB85B}#1.0#0#E:\Bin\bin\PDFParser.dll#PDFParser 1.0 +Form=PathExt.frm +Startup="Form1" +Command32="" +Name="Projekt1" +HelpContextID="0" +CompatibleMode="0" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +VersionCompanyName="CCS Creative Computer Software AG" +CompilationType=0 +OptimizationType=0 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=0 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=0 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 + +[MS Transaction Server] +AutoRefresh=1 diff --git a/Scraping/COM/samples/VB/TextExt.frm b/Scraping/COM/samples/VB/TextExt.frm new file mode 100644 index 0000000..73d75be --- /dev/null +++ b/Scraping/COM/samples/VB/TextExt.frm @@ -0,0 +1,234 @@ +VERSION 5.00 +Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx" +Begin VB.Form Form1 + BackColor = &H00FFFFFF& + BorderStyle = 1 'Fixed Single + Caption = "Extract Text" + ClientHeight = 9285 + ClientLeft = 45 + ClientTop = 435 + ClientWidth = 5550 + Icon = "TextExt.frx":0000 + LinkTopic = "Form1" + MaxButton = 0 'False + MinButton = 0 'False + ScaleHeight = 9285 + ScaleWidth = 5550 + StartUpPosition = 3 'Windows Default + Begin VB.CommandButton GetText + Caption = "Extract" + Height = 375 + Left = 2280 + TabIndex = 9 + Top = 8760 + Width = 1095 + End + Begin MSComDlg.CommonDialog FileDialog + Left = 4080 + Top = 8760 + _ExtentX = 847 + _ExtentY = 847 + _Version = 393216 + End + Begin VB.CommandButton Browse + BackColor = &H00C0C0C0& + Caption = "..." + Height = 375 + Left = 5040 + TabIndex = 4 + Top = 8400 + Width = 375 + End + Begin VB.TextBox PDFFile + Height = 285 + Left = 1080 + TabIndex = 3 + Top = 8400 + Width = 3855 + End + Begin VB.Frame Frame1 + BackColor = &H00AC7A3E& + BorderStyle = 0 'None + ForeColor = &H00AC7A3E& + Height = 7455 + Left = 120 + TabIndex = 1 + Top = 720 + Width = 5295 + Begin VB.TextBox TextOut + BorderStyle = 0 'None + Height = 7035 + Left = 50 + MultiLine = -1 'True + ScrollBars = 2 'Vertical + TabIndex = 2 + Top = 360 + Width = 5190 + End + Begin VB.Label Label2 + BackStyle = 0 'Transparent + Caption = "Output Text" + BeginProperty Font + Name = "Verdana" + Size = 9 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00FFFFFF& + Height = 255 + Left = 120 + TabIndex = 5 + Top = 90 + Width = 2055 + End + End + Begin VB.TextBox TextLogo + BorderStyle = 0 'None + BeginProperty Font + Name = "Verdana" + Size = 12.75 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00404040& + Height = 375 + Left = 0 + TabIndex = 0 + Text = " pdf-tools.com" + Top = 120 + Width = 5535 + End + Begin VB.Frame Frame3 + BackColor = &H00E0E0E0& + BorderStyle = 0 'None + Height = 615 + Left = 0 + TabIndex = 7 + Top = 0 + Width = 5535 + End + Begin VB.Frame Frame2 + BackColor = &H00E0E0E0& + BorderStyle = 0 'None + Height = 9375 + Left = 0 + TabIndex = 6 + Top = 0 + Width = 1215 + Begin VB.Label Label1 + BackColor = &H00E0E0E0& + BackStyle = 0 'Transparent + Caption = "PDF File" + BeginProperty Font + Name = "Verdana" + Size = 8.25 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + ForeColor = &H00AC7A3E& + Height = 255 + Left = 120 + TabIndex = 8 + Top = 8400 + Width = 855 + End + End +End +Attribute VB_Name = "Form1" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +' List Fonts and Text Extraction +' ------------------------------ +' +' Visual Basic 6 sample for the 3-Heights PDF Extract Tool API +' http://www.pdf-tools.com +' +' Copyright (C) 2005 PDF Tools AG, Switzerland +' Permission to use, copy, modify, and distribute this +' software and its documentation for any purpose and without +' fee is hereby granted, provided that the above copyright +' notice appear in all copies and that both that copyright +' notice and this permission notice appear in supporting +' documentation. This software is provided "as is" without +' express or implied warranty. + +Private Sub GetText_Click() + Dim pdf As New PDFPARSERLib.Document + Dim content As PDFPARSERLib.content + Dim text As PDFPARSERLib.text + Dim cFontRes As PDFPARSERLib.Font + Dim X As Single, Y As Single, Yold As Single, FontSize As Single + Dim CurPage As Long + Dim sPageText As String ' Separate string per page to improve the + ' string concatenaten operation + If pdf.Open(PDFFile.text) Then + + ' List fonts + sCR = Chr(13) & Chr(10) ' Carriage Return + TextOut.text = "- - - Fonts - - -" & sCR & sCR + Set cFontRes = pdf.GetFirstFontResource + While Not cFontRes Is Nothing + TextOut.text = TextOut.text & cFontRes.BaseName & sCR + Set cFontRes = pdf.GetNextFontResource + Wend + + ' List text + Yold = -1 + If pdf.PageCount > 10 Then ' limit page numbers to 10 + LastPage = 10 ' due to limitation of the text control + Else + LastPage = pdf.PageCount + End If + + For CurPage = 1 To LastPage + pdf.PageNo = CurPage ' set the current page number + Set content = pdf.Page.content ' get the page's content + If Not (content Is Nothing) Then + content.BreakWords = True ' extract words + TextOut.text = TextOut.text & sCR & "- - - Page " & CurPage & " - - -" & sCR + sPageText = "" + Do + If content.GetNextText Is Nothing Then Exit Do + Set text = content.text ' at this point text properties can be accessed + If Not (text Is Nothing) Then + FontSize = text.FontSize ' the font size + If text.Length > 0 Then + X = text.XPos(0) ' the X position + Y = text.YPos(0) ' the y position + If Yold = Y Then + sPageText = sPageText & " " & text.UnicodeString + Else + sPageText = sPageText & sCR & text.UnicodeString + End If + Yold = Y + End If + End If + Loop + TextOut.text = TextOut.text & sPageText + Else + TextOut.text = TextOut.text & sCR & sCR & "- - - There is no content on page " _ + & CurPage & " - - -" & sCR + End If + Next CurPage + pdf.Close + Else + MsgBox "Couldn't open input file" + End If +End Sub + +Private Sub Browse_Click() + FileDialog.FileName = PDFFile.text + FileDialog.ShowOpen + PDFFile.text = FileDialog.FileName +End Sub diff --git a/Scraping/COM/samples/VB/TextExt.frx b/Scraping/COM/samples/VB/TextExt.frx new file mode 100644 index 0000000..473c99d Binary files /dev/null and b/Scraping/COM/samples/VB/TextExt.frx differ diff --git a/Scraping/COM/samples/VB/TextExt.vbp b/Scraping/COM/samples/VB/TextExt.vbp new file mode 100644 index 0000000..df93b79 --- /dev/null +++ b/Scraping/COM/samples/VB/TextExt.vbp @@ -0,0 +1,34 @@ +Type=Exe +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINNT\system32\stdole2.tlb#OLE Automation +Reference=*\G{4CFD0B17-7BAD-44E5-9003-3AAB04AFB85B}#1.0#0#D:\Bin\bin\pdfparser.dll#PDFParser 1.0 +Form=TextExt.frm +Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; comdlg32.ocx +Startup="Form1" +Command32="" +Name="Project1" +HelpContextID="0" +CompatibleMode="0" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +VersionCompanyName="PDF Tools AG" +CompilationType=0 +OptimizationType=0 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=0 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=0 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 + +[MS Transaction Server] +AutoRefresh=1 diff --git a/Scraping/Halle-Magdeburg.pdf b/Scraping/Halle-Magdeburg.pdf new file mode 100644 index 0000000..554e6db Binary files /dev/null and b/Scraping/Halle-Magdeburg.pdf differ diff --git a/Scraping/MainForm.cs b/Scraping/MainForm.cs new file mode 100644 index 0000000..0caa557 --- /dev/null +++ b/Scraping/MainForm.cs @@ -0,0 +1,374 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.IO; +using System.Threading; + +namespace Scraping +{ + public class MainForm : System.Windows.Forms.Form + { + private System.Windows.Forms.TextBox tbDelay; + private System.Windows.Forms.Button btnDownloadPdf; + private System.Windows.Forms.StatusBarPanel statusPanel; + private System.Windows.Forms.Label lAbBhf; + private System.Windows.Forms.TextBox tbAnBhf; + private System.Windows.Forms.GroupBox gbProperties; + private System.Windows.Forms.TextBox tbAbBhf; + private System.Windows.Forms.TextBox tbPdfAddr; + private System.Windows.Forms.Label lID; + private System.Windows.Forms.Label lAddr; + private System.Windows.Forms.TextBox tbBeginn; + private System.Windows.Forms.Label lAnBhf; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.StatusBar statusBar; + private System.Windows.Forms.Label lIdent; + private System.Windows.Forms.Label lBeginn; + + private Thread t = null; + + public MainForm() + { + InitializeComponent(); + tbBeginn.Text = DateTime.Today.Date.Day.ToString()+"."+DateTime.Today.Date.Month.ToString()+"."+DateTime.Today.Date.Year.ToString(); + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.lBeginn = new System.Windows.Forms.Label(); + this.lIdent = new System.Windows.Forms.Label(); + this.statusBar = new System.Windows.Forms.StatusBar(); + this.label1 = new System.Windows.Forms.Label(); + this.lAnBhf = new System.Windows.Forms.Label(); + this.tbBeginn = new System.Windows.Forms.TextBox(); + this.lAddr = new System.Windows.Forms.Label(); + this.lID = new System.Windows.Forms.Label(); + this.tbPdfAddr = new System.Windows.Forms.TextBox(); + this.tbAbBhf = new System.Windows.Forms.TextBox(); + this.gbProperties = new System.Windows.Forms.GroupBox(); + this.tbAnBhf = new System.Windows.Forms.TextBox(); + this.lAbBhf = new System.Windows.Forms.Label(); + this.statusPanel = new System.Windows.Forms.StatusBarPanel(); + this.btnDownloadPdf = new System.Windows.Forms.Button(); + this.tbDelay = new System.Windows.Forms.TextBox(); + this.gbProperties.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.statusPanel)).BeginInit(); + this.SuspendLayout(); + // + // lBeginn + // + this.lBeginn.Location = new System.Drawing.Point(16, 112); + this.lBeginn.Name = "lBeginn"; + this.lBeginn.Size = new System.Drawing.Size(48, 16); + this.lBeginn.TabIndex = 5; + this.lBeginn.Text = "Beginn"; + // + // lIdent + // + this.lIdent.Location = new System.Drawing.Point(256, 16); + this.lIdent.Name = "lIdent"; + this.lIdent.Size = new System.Drawing.Size(256, 24); + this.lIdent.TabIndex = 1; + this.lIdent.Text = "Ident:"; + // + // statusBar + // + this.statusBar.Location = new System.Drawing.Point(0, 247); + this.statusBar.Name = "statusBar"; + this.statusBar.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] { + this.statusPanel}); + this.statusBar.ShowPanels = true; + this.statusBar.Size = new System.Drawing.Size(520, 22); + this.statusBar.TabIndex = 7; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 152); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(100, 32); + this.label1.TabIndex = 7; + this.label1.Text = "Wartezeit bis zur Pdf Abfrage in s"; + // + // lAnBhf + // + this.lAnBhf.Location = new System.Drawing.Point(16, 80); + this.lAnBhf.Name = "lAnBhf"; + this.lAnBhf.Size = new System.Drawing.Size(40, 16); + this.lAnBhf.TabIndex = 3; + this.lAnBhf.Text = "AnBhf"; + // + // tbBeginn + // + this.tbBeginn.Location = new System.Drawing.Point(80, 112); + this.tbBeginn.Name = "tbBeginn"; + this.tbBeginn.Size = new System.Drawing.Size(104, 20); + this.tbBeginn.TabIndex = 6; + this.tbBeginn.Text = ""; + // + // lAddr + // + this.lAddr.Location = new System.Drawing.Point(256, 80); + this.lAddr.Name = "lAddr"; + this.lAddr.Size = new System.Drawing.Size(40, 24); + this.lAddr.TabIndex = 4; + this.lAddr.Text = "Addr:"; + // + // lID + // + this.lID.Location = new System.Drawing.Point(256, 48); + this.lID.Name = "lID"; + this.lID.Size = new System.Drawing.Size(256, 23); + this.lID.TabIndex = 2; + this.lID.Text = "ID:"; + // + // tbPdfAddr + // + this.tbPdfAddr.Location = new System.Drawing.Point(256, 104); + this.tbPdfAddr.Multiline = true; + this.tbPdfAddr.Name = "tbPdfAddr"; + this.tbPdfAddr.Size = new System.Drawing.Size(256, 48); + this.tbPdfAddr.TabIndex = 5; + this.tbPdfAddr.Text = ""; + // + // tbAbBhf + // + this.tbAbBhf.Location = new System.Drawing.Point(80, 48); + this.tbAbBhf.Name = "tbAbBhf"; + this.tbAbBhf.Size = new System.Drawing.Size(104, 20); + this.tbAbBhf.TabIndex = 2; + this.tbAbBhf.Text = "Salzwedel"; + // + // gbProperties + // + this.gbProperties.Controls.Add(this.tbDelay); + this.gbProperties.Controls.Add(this.label1); + this.gbProperties.Controls.Add(this.tbBeginn); + this.gbProperties.Controls.Add(this.lBeginn); + this.gbProperties.Controls.Add(this.tbAnBhf); + this.gbProperties.Controls.Add(this.lAnBhf); + this.gbProperties.Controls.Add(this.tbAbBhf); + this.gbProperties.Controls.Add(this.lAbBhf); + this.gbProperties.Controls.Add(this.btnDownloadPdf); + this.gbProperties.Location = new System.Drawing.Point(8, 8); + this.gbProperties.Name = "gbProperties"; + this.gbProperties.Size = new System.Drawing.Size(232, 232); + this.gbProperties.TabIndex = 6; + this.gbProperties.TabStop = false; + this.gbProperties.Text = "Einstellungen"; + // + // tbAnBhf + // + this.tbAnBhf.Location = new System.Drawing.Point(80, 80); + this.tbAnBhf.Name = "tbAnBhf"; + this.tbAnBhf.Size = new System.Drawing.Size(104, 20); + this.tbAnBhf.TabIndex = 4; + this.tbAnBhf.Text = "Stendal"; + // + // lAbBhf + // + this.lAbBhf.Location = new System.Drawing.Point(16, 48); + this.lAbBhf.Name = "lAbBhf"; + this.lAbBhf.Size = new System.Drawing.Size(40, 16); + this.lAbBhf.TabIndex = 1; + this.lAbBhf.Text = "AbBhf"; + // + // statusPanel + // + this.statusPanel.Text = "Fertig"; + this.statusPanel.Width = 500; + // + // btnDownloadPdf + // + this.btnDownloadPdf.Location = new System.Drawing.Point(16, 192); + this.btnDownloadPdf.Name = "btnDownloadPdf"; + this.btnDownloadPdf.Size = new System.Drawing.Size(96, 23); + this.btnDownloadPdf.TabIndex = 0; + this.btnDownloadPdf.Text = "DownloadPdf"; + this.btnDownloadPdf.Click += new System.EventHandler(this.BtnDownloadPdfClick); + // + // tbDelay + // + this.tbDelay.Location = new System.Drawing.Point(112, 152); + this.tbDelay.Name = "tbDelay"; + this.tbDelay.TabIndex = 8; + this.tbDelay.Text = "10"; + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(520, 269); + this.Controls.Add(this.statusBar); + this.Controls.Add(this.gbProperties); + this.Controls.Add(this.tbPdfAddr); + this.Controls.Add(this.lAddr); + this.Controls.Add(this.lID); + this.Controls.Add(this.lIdent); + this.Name = "MainForm"; + this.Text = "MainForm"; + this.Closed += new System.EventHandler(this.MainFormClosed); + this.gbProperties.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.statusPanel)).EndInit(); + this.ResumeLayout(false); + } + #endregion + + + public void DownloadPdf() + { + //Request 1 (holt die aktuelle ident) + + statusPanel.Text = "(1/3) Create Request..."; + WebRequest wrq1 = WebRequest.Create("http://persoenlicherfahrplan.bahn.de/bin/pf/query-p2w.exe/dn?"); + + //übernimmt die Proxy Einstellungen des IE!!!!!!!!!!!!!!! + statusPanel.Text = "(1/3) Get Response..."; + HttpWebResponse wrp1 = (HttpWebResponse)wrq1.GetResponse(); + StreamReader sr1 = new StreamReader(wrp1.GetResponseStream(), Encoding.ASCII); + StringBuilder sb1 = new StringBuilder(); + + statusPanel.Text = "(1/3) Speichere Stream..."; + while (-1 != sr1.Peek()){ + sb1.Append(sr1.ReadLine()); + } + + statusPanel.Text = "(1/3) Search Expression..."; + Regex re1 = new Regex("\\S{20,22})\"",RegexOptions.IgnoreCase); + Match m1 = re1.Match(sb1.ToString()); + + wrp1.Close(); //Beenden der Verbindung nicht vergessen!!! + + if(m1.Success) + { + //Request 2 (setzt die in Request 1 geholte ident in die spezifische Abfrage ein und holt aus ihrer Rückgabe die 16-stellige ID der Abfrage) + + string strWrq2Address = "http://persoenlicherfahrplan.bahn.de/bin/pf/query-p2w.exe/dn?"; + strWrq2Address += "ident=" + m1.Groups[1].Captures[0] + "&seqnr=0&ignore_ident=1&pfmodus=1&transfertype=xml"; //Einsetzten der ident + strWrq2Address += "&descfrom.-1=BASEREQ&majorfrom=BHF&from="+tbAbBhf.Text; + strWrq2Address += "&descto.-1=BASEREQ&majorto=BHF&to="+tbAnBhf.Text; + strWrq2Address += "&date_from="+tbBeginn.Text+"&date_to="+DateTime.Parse(tbBeginn.Text).AddDays(6).ToShortDateString(); + strWrq2Address += "&weekday_mo=checked&weekday_tu=checked&weekday_we=checked&weekday_th=checked&weekday_fr=checked&weekday_sa=checked&weekday_su=checked"; + strWrq2Address += "×el=depart&time=12%3A00&time0_from_hin=0%3A00&time0_to_hin=23%3A59&time0_from_rueck=0%3A00&time0_to_rueck=23%3A59"; + strWrq2Address += "&answerMode=download&eMailAddress=&output=pdf&maxNrOfChanges=0&pr1.4=CHECKED&outputFilter=complete&filter=&start.x=42&start.y=10"; + + statusPanel.Text = "(2/3) Create Request..."; + WebRequest wrq2 = WebRequest.Create(strWrq2Address); + //übernimmt die Proxy Einstellungen des IE!!!!!!!!!!!!!!! + + statusPanel.Text = "(2/3) Get Response..."; + WebResponse wrp2 = wrq2.GetResponse(); + StreamReader sr2 = new StreamReader(wrp2.GetResponseStream(), Encoding.ASCII); + StringBuilder sb2 = new StringBuilder(); + + statusPanel.Text = "(2/3) Speichere Stream..."; + while (-1 != sr2.Peek()){ + sb2.Append(sr2.ReadLine()); + } + + statusPanel.Text = "(2/3) Search Expression..."; + Regex re2 = new Regex("\\S{4}.\\S{4}.\\S{4}.\\S{4})",RegexOptions.IgnoreCase); + Match m2 = re2.Match(sb2.ToString()); + + wrp2.Close(); //Beenden der Verbindung nicht vergessen!!! + + if(m2.Success) + { + //Request 3 (benutzt die ID aus Request 2 um die Adresse des PDFs zu holen) + + //Thread wartet i sekunden um die Pdf berechnen zu lassen + for(int i = Convert.ToInt32(tbDelay.Text);i>=0;i--) + { + statusPanel.Text = "(3/3) Warte "+i.ToString()+" Sekunden..."; + Thread.Sleep(1000); + } + + statusPanel.Text = "(3/3) Create Request..."; + WebRequest wrq3 = WebRequest.Create("http://persoenlicherfahrplan.bahn.de/bin/pf/query-p2w.exe/dn?id="+m2.Groups[1].Captures[0]); + //übernimmt die Proxy Einstellungen des IE!!!!!!!!!!!!!!! + + statusPanel.Text = "(3/3) Get Response..."; + WebResponse wrp3 = wrq3.GetResponse(); + StreamReader sr3 = new StreamReader(wrp3.GetResponseStream(), Encoding.ASCII); + StringBuilder sb3 = new StringBuilder(); + + statusPanel.Text = "(3/3) Speichere Stream..."; + while (-1 != sr3.Peek()){ + sb3.Append(sr3.ReadLine()); + } + + statusPanel.Text = "(3/3) Search Expression..."; + Regex re3 = new Regex("\\S{0,})\">",RegexOptions.IgnoreCase); + Match m3 = re3.Match(sb3.ToString()); + + wrp3.Close(); //Beenden der Verbindung nicht vergessen!!! + + if(m3.Success){ + //Bei Erfolg wird der Link ausgegeben + lIdent.Text = "Ident: "+m1.Groups[1].Captures[0]; + lID.Text = "ID: "+m2.Groups[1].Captures[0]; + tbPdfAddr.Text = "http://persoenlicherfahrplan.bahn.de/bin/pf/query-p2w.exe/"+m3.Groups[1].Captures[0]; + + statusPanel.Text = "Downloade Pdf..."; + WebClient wc = new WebClient(); + wc.DownloadFile(tbPdfAddr.Text, tbAbBhf.Text.ToUpper()+"-"+tbAnBhf.Text.ToUpper()+".pdf"); + + statusPanel.Text = "Als "+tbAbBhf.Text.ToUpper()+"-"+tbAnBhf.Text.ToUpper()+".pdf gespeichert"; + btnDownloadPdf.Enabled = true; + btnDownloadPdf.Text = "DownloadPdf"; + } else { + MessageBox.Show("Request 3 fehlgeschlagen"); + } + } else { + //Schlägt die Abfrage der ID fehl, wird die ident ausgegeben. + MessageBox.Show("ID Abfrage fehlgeschlagen! Ident:"+m1.Groups[1].Captures[0]); + } + } else { + //Abfrage der ident schlägt fehl + MessageBox.Show("Ident Abfrage fehlgeschlagen"); + } + } + + + void MainFormClosed(object sender, System.EventArgs e) + { + if(t!=null) + { + t.Abort(); + } + } + + void BtnDownloadPdfClick(object sender, System.EventArgs e) + { + if(tbAbBhf.Text.Length!=0&&tbAnBhf.Text.Length!=0&&tbBeginn.Text.Length!=0&&tbDelay.Text.Length!=0) + { + btnDownloadPdf.Enabled = false; + btnDownloadPdf.Text = "In Progress..."; + t = new Thread(new ThreadStart(DownloadPdf)); + t.Start(); + } + else + { + ShowErrorMsg("Eingabefelder überprüfen!"); + } + } + + void ShowErrorMsg(string msg) + { + MessageBox.Show(msg, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1); + } + } +} diff --git a/Scraping/NAUMBURG-HALLE.pdf b/Scraping/NAUMBURG-HALLE.pdf new file mode 100644 index 0000000..6919665 Binary files /dev/null and b/Scraping/NAUMBURG-HALLE.pdf differ diff --git a/Scraping/SALZWEDEL-STENDAL.pdf b/Scraping/SALZWEDEL-STENDAL.pdf new file mode 100644 index 0000000..d9be221 Binary files /dev/null and b/Scraping/SALZWEDEL-STENDAL.pdf differ diff --git a/Scraping/SAW-SDL.pdf b/Scraping/SAW-SDL.pdf new file mode 100644 index 0000000..5c3810f Binary files /dev/null and b/Scraping/SAW-SDL.pdf differ diff --git a/Scraping/STENDAL-MAGDEBURG.pdf b/Scraping/STENDAL-MAGDEBURG.pdf new file mode 100644 index 0000000..0f94f95 Binary files /dev/null and b/Scraping/STENDAL-MAGDEBURG.pdf differ diff --git a/Scraping/Salzwedel-Stendal.pdf b/Scraping/Salzwedel-Stendal.pdf new file mode 100644 index 0000000..17eb9d7 Binary files /dev/null and b/Scraping/Salzwedel-Stendal.pdf differ diff --git a/Scraping/Scraping.MainForm.resources b/Scraping/Scraping.MainForm.resources new file mode 100644 index 0000000..b7835c4 Binary files /dev/null and b/Scraping/Scraping.MainForm.resources differ diff --git a/Scraping/Scraping.cmbx b/Scraping/Scraping.cmbx new file mode 100644 index 0000000..205ec43 --- /dev/null +++ b/Scraping/Scraping.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Scraping/Scraping.prjx b/Scraping/Scraping.prjx new file mode 100644 index 0000000..619821b --- /dev/null +++ b/Scraping/Scraping.prjx @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Scraping/Scraping.sln b/Scraping/Scraping.sln new file mode 100644 index 0000000..4254202 --- /dev/null +++ b/Scraping/Scraping.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Scraping", "Scraping\Scraping.csproj", "{5061FC53-6A07-47DE-88DB-B4A1EB01C91E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5061FC53-6A07-47DE-88DB-B4A1EB01C91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5061FC53-6A07-47DE-88DB-B4A1EB01C91E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5061FC53-6A07-47DE-88DB-B4A1EB01C91E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5061FC53-6A07-47DE-88DB-B4A1EB01C91E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Scraping/Scraping.suo b/Scraping/Scraping.suo new file mode 100644 index 0000000..3f64067 Binary files /dev/null and b/Scraping/Scraping.suo differ diff --git a/Scraping/Scraping/MainForm.cs b/Scraping/Scraping/MainForm.cs new file mode 100644 index 0000000..f131c9b --- /dev/null +++ b/Scraping/Scraping/MainForm.cs @@ -0,0 +1,395 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.IO; +using System.Threading; +//using PDFPARSERLib; + +namespace Scraping +{ + public class MainForm : System.Windows.Forms.Form + { + private System.Windows.Forms.TextBox tbDelay; + private System.Windows.Forms.Button btnDownloadPdf; + private System.Windows.Forms.StatusBarPanel statusPanel; + private System.Windows.Forms.Label lAbBhf; + private System.Windows.Forms.TextBox tbAnBhf; + private System.Windows.Forms.GroupBox gbProperties; + private System.Windows.Forms.TextBox tbAbBhf; + private System.Windows.Forms.TextBox tbPdfAddr; + private System.Windows.Forms.Label lID; + private System.Windows.Forms.Label lAddr; + private System.Windows.Forms.TextBox tbBeginn; + private System.Windows.Forms.Label lAnBhf; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.StatusBar statusBar; + private System.Windows.Forms.Label lIdent; + private System.Windows.Forms.Label lBeginn; + + private Thread t = null; + private delegate void UpdateStatusHandler(string text); + private delegate void ResultHandler(string Ident, string ID, string Addr); + private delegate void DownloadPdfEndHandler(); + + public MainForm() + { + InitializeComponent(); + tbBeginn.Text = DateTime.Today.Date.Day.ToString()+"."+DateTime.Today.Date.Month.ToString()+"."+DateTime.Today.Date.Year.ToString(); + } + + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.lBeginn = new System.Windows.Forms.Label(); + this.lIdent = new System.Windows.Forms.Label(); + this.statusBar = new System.Windows.Forms.StatusBar(); + this.statusPanel = new System.Windows.Forms.StatusBarPanel(); + this.label1 = new System.Windows.Forms.Label(); + this.lAnBhf = new System.Windows.Forms.Label(); + this.tbBeginn = new System.Windows.Forms.TextBox(); + this.lAddr = new System.Windows.Forms.Label(); + this.lID = new System.Windows.Forms.Label(); + this.tbPdfAddr = new System.Windows.Forms.TextBox(); + this.tbAbBhf = new System.Windows.Forms.TextBox(); + this.gbProperties = new System.Windows.Forms.GroupBox(); + this.tbDelay = new System.Windows.Forms.TextBox(); + this.tbAnBhf = new System.Windows.Forms.TextBox(); + this.lAbBhf = new System.Windows.Forms.Label(); + this.btnDownloadPdf = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.statusPanel)).BeginInit(); + this.gbProperties.SuspendLayout(); + this.SuspendLayout(); + // + // lBeginn + // + this.lBeginn.Location = new System.Drawing.Point(6, 72); + this.lBeginn.Name = "lBeginn"; + this.lBeginn.Size = new System.Drawing.Size(48, 16); + this.lBeginn.TabIndex = 5; + this.lBeginn.Text = "Beginn"; + // + // lIdent + // + this.lIdent.Location = new System.Drawing.Point(212, 9); + this.lIdent.Name = "lIdent"; + this.lIdent.Size = new System.Drawing.Size(256, 24); + this.lIdent.TabIndex = 1; + this.lIdent.Text = "Ident:"; + // + // statusBar + // + this.statusBar.Location = new System.Drawing.Point(0, 178); + this.statusBar.Name = "statusBar"; + this.statusBar.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] { + this.statusPanel}); + this.statusBar.ShowPanels = true; + this.statusBar.Size = new System.Drawing.Size(481, 22); + this.statusBar.TabIndex = 7; + // + // statusPanel + // + this.statusPanel.Name = "statusPanel"; + this.statusPanel.Text = "Fertig"; + this.statusPanel.Width = 500; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(6, 99); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(134, 32); + this.label1.TabIndex = 7; + this.label1.Text = "Wartezeit bis zur Pdf Abfrage in s"; + // + // lAnBhf + // + this.lAnBhf.Location = new System.Drawing.Point(6, 45); + this.lAnBhf.Name = "lAnBhf"; + this.lAnBhf.Size = new System.Drawing.Size(40, 16); + this.lAnBhf.TabIndex = 3; + this.lAnBhf.Text = "AnBhf"; + // + // tbBeginn + // + this.tbBeginn.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbBeginn.Location = new System.Drawing.Point(80, 68); + this.tbBeginn.Name = "tbBeginn"; + this.tbBeginn.Size = new System.Drawing.Size(104, 20); + this.tbBeginn.TabIndex = 6; + // + // lAddr + // + this.lAddr.Location = new System.Drawing.Point(212, 56); + this.lAddr.Name = "lAddr"; + this.lAddr.Size = new System.Drawing.Size(40, 24); + this.lAddr.TabIndex = 4; + this.lAddr.Text = "Addr:"; + // + // lID + // + this.lID.Location = new System.Drawing.Point(212, 33); + this.lID.Name = "lID"; + this.lID.Size = new System.Drawing.Size(256, 23); + this.lID.TabIndex = 2; + this.lID.Text = "ID:"; + // + // tbPdfAddr + // + this.tbPdfAddr.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbPdfAddr.Location = new System.Drawing.Point(213, 76); + this.tbPdfAddr.Multiline = true; + this.tbPdfAddr.Name = "tbPdfAddr"; + this.tbPdfAddr.Size = new System.Drawing.Size(256, 48); + this.tbPdfAddr.TabIndex = 5; + // + // tbAbBhf + // + this.tbAbBhf.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbAbBhf.Location = new System.Drawing.Point(80, 16); + this.tbAbBhf.Name = "tbAbBhf"; + this.tbAbBhf.Size = new System.Drawing.Size(104, 20); + this.tbAbBhf.TabIndex = 2; + this.tbAbBhf.Text = "Naumburg"; + // + // gbProperties + // + this.gbProperties.Controls.Add(this.btnDownloadPdf); + this.gbProperties.Controls.Add(this.tbDelay); + this.gbProperties.Controls.Add(this.label1); + this.gbProperties.Controls.Add(this.tbBeginn); + this.gbProperties.Controls.Add(this.lBeginn); + this.gbProperties.Controls.Add(this.tbAnBhf); + this.gbProperties.Controls.Add(this.lAnBhf); + this.gbProperties.Controls.Add(this.tbAbBhf); + this.gbProperties.Controls.Add(this.lAbBhf); + this.gbProperties.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.gbProperties.Location = new System.Drawing.Point(8, 8); + this.gbProperties.Name = "gbProperties"; + this.gbProperties.Size = new System.Drawing.Size(198, 160); + this.gbProperties.TabIndex = 6; + this.gbProperties.TabStop = false; + this.gbProperties.Text = "Einstellungen"; + // + // tbDelay + // + this.tbDelay.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbDelay.Location = new System.Drawing.Point(146, 96); + this.tbDelay.Name = "tbDelay"; + this.tbDelay.Size = new System.Drawing.Size(38, 20); + this.tbDelay.TabIndex = 8; + this.tbDelay.Text = "10"; + // + // tbAnBhf + // + this.tbAnBhf.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbAnBhf.Location = new System.Drawing.Point(80, 42); + this.tbAnBhf.Name = "tbAnBhf"; + this.tbAnBhf.Size = new System.Drawing.Size(104, 20); + this.tbAnBhf.TabIndex = 4; + this.tbAnBhf.Text = "Halle"; + // + // lAbBhf + // + this.lAbBhf.Location = new System.Drawing.Point(6, 19); + this.lAbBhf.Name = "lAbBhf"; + this.lAbBhf.Size = new System.Drawing.Size(40, 16); + this.lAbBhf.TabIndex = 1; + this.lAbBhf.Text = "AbBhf"; + // + // btnDownloadPdf + // + this.btnDownloadPdf.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDownloadPdf.Location = new System.Drawing.Point(88, 131); + this.btnDownloadPdf.Name = "btnDownloadPdf"; + this.btnDownloadPdf.Size = new System.Drawing.Size(96, 23); + this.btnDownloadPdf.TabIndex = 0; + this.btnDownloadPdf.Text = "DownloadPdf"; + this.btnDownloadPdf.Click += new System.EventHandler(this.BtnDownloadPdfClick); + // + // MainForm + // + this.ClientSize = new System.Drawing.Size(481, 200); + this.Controls.Add(this.statusBar); + this.Controls.Add(this.gbProperties); + this.Controls.Add(this.tbPdfAddr); + this.Controls.Add(this.lAddr); + this.Controls.Add(this.lID); + this.Controls.Add(this.lIdent); + this.Name = "MainForm"; + this.Text = "Scraping bahn.de"; + this.Closed += new System.EventHandler(this.MainFormClosed); + ((System.ComponentModel.ISupportInitialize)(this.statusPanel)).EndInit(); + this.gbProperties.ResumeLayout(false); + this.gbProperties.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + #endregion + + void UpdateStatus(string text) + { + statusPanel.Text = text; + } + + void Result(string Ident, string ID, string Addr) + { + lIdent.Text = "Ident: " + Ident; + lID.Text = "ID: " + ID; + tbPdfAddr.Text = Addr; + } + + void DownloadPdfEnd() + { + btnDownloadPdf.Text = "DownloadPdf"; + btnDownloadPdf.Enabled = true; + } + + public void DownloadPdf() + { + //Request 1 (holt die aktuelle ident) + + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"(1/3) Create Request..."}); + WebRequest wrq1 = WebRequest.Create("http://persoenlicherfahrplan.bahn.de/bin/pf/query-p2w.exe/dn?"); + + //übernimmt die Proxy Einstellungen des IE!!!!!!!!!!!!!!! + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"(1/3) Get Response..."}); + HttpWebResponse wrp1 = (HttpWebResponse)wrq1.GetResponse(); + StreamReader sr1 = new StreamReader(wrp1.GetResponseStream(), Encoding.ASCII); + StringBuilder sb1 = new StringBuilder(); + + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"(1/3) Speichere Stream..."}); + while (-1 != sr1.Peek()){ + sb1.Append(sr1.ReadLine()); + } + + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"(1/3) Search Expression..."}); + Regex re1 = new Regex("\\S{20,22})\"",RegexOptions.IgnoreCase); + Match m1 = re1.Match(sb1.ToString()); + + wrp1.Close(); //Beenden der Verbindung nicht vergessen!!! + + if(m1.Success) + { + //Request 2 (setzt die in Request 1 geholte ident in die spezifische Abfrage ein und holt aus ihrer Rückgabe die 16-stellige ID der Abfrage) + + string strWrq2Address = "http://persoenlicherfahrplan.bahn.de/bin/pf/query-p2w.exe/dn?"; + strWrq2Address += "ident=" + m1.Groups[1].Captures[0] + "&seqnr=0&ignore_ident=1&pfmodus=1&transfertype=xml"; //Einsetzten der ident + strWrq2Address += "&descfrom.-1=BASEREQ&majorfrom=BHF&from="+tbAbBhf.Text; + strWrq2Address += "&descto.-1=BASEREQ&majorto=BHF&to="+tbAnBhf.Text; + strWrq2Address += "&date_from="+tbBeginn.Text+"&date_to="+DateTime.Parse(tbBeginn.Text).AddDays(6).ToShortDateString(); + strWrq2Address += "&weekday_mo=checked&weekday_tu=checked&weekday_we=checked&weekday_th=checked&weekday_fr=checked&weekday_sa=checked&weekday_su=checked"; + strWrq2Address += "×el=depart&time=12%3A00&time0_from_hin=0%3A00&time0_to_hin=23%3A59&time0_from_rueck=0%3A00&time0_to_rueck=23%3A59"; + strWrq2Address += "&answerMode=download&eMailAddress=&output=pdf&maxNrOfChanges=0&pr1.4=CHECKED&outputFilter=complete&filter=&start.x=42&start.y=10"; + + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"(2/3) Create Request..."}); + WebRequest wrq2 = WebRequest.Create(strWrq2Address); + //übernimmt die Proxy Einstellungen des IE!!!!!!!!!!!!!!! + + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"(2/3) Get Response..."}); + WebResponse wrp2 = wrq2.GetResponse(); + StreamReader sr2 = new StreamReader(wrp2.GetResponseStream(), Encoding.ASCII); + StringBuilder sb2 = new StringBuilder(); + + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"(2/3) Speichere Stream..."}); + while (-1 != sr2.Peek()){ + sb2.Append(sr2.ReadLine()); + } + Invoke(new ResultHandler(Result), new object[] { "", "", strWrq2Address }); + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"(2/3) Search Expression..."}); + Regex re2 = new Regex("\\S{4}.\\S{4}.\\S{4}.\\S{4})\">",RegexOptions.IgnoreCase); + Match m2 = re2.Match(sb2.ToString()); + + wrp2.Close(); //Beenden der Verbindung nicht vergessen!!! + + if(m2.Success) + { + //Request 3 (benutzt die ID aus Request 2 um die Adresse des PDFs zu holen) + + //Thread wartet i sekunden um die Pdf berechnen zu lassen + for(int i = Convert.ToInt32(tbDelay.Text);i>=0;i--) + { + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"(3/3) Warte "+i.ToString()+" Sekunden..."}); + Thread.Sleep(1000); + } + + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"(3/3) Create Request..."}); + WebRequest wrq3 = WebRequest.Create("http://persoenlicherfahrplan.bahn.de/bin/pf/query-p2w.exe/dn?id="+m2.Groups[1].Captures[0]); + //übernimmt die Proxy Einstellungen des IE!!!!!!!!!!!!!!! + + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"(3/3) Get Response..."}); + WebResponse wrp3 = wrq3.GetResponse(); + StreamReader sr3 = new StreamReader(wrp3.GetResponseStream(), Encoding.ASCII); + StringBuilder sb3 = new StringBuilder(); + + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"(3/3) Speichere Stream..."}); + while (-1 != sr3.Peek()){ + sb3.Append(sr3.ReadLine()); + } + + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"(3/3) Search Expression..."}); + Regex re3 = new Regex("\\S{0,})\">",RegexOptions.IgnoreCase); + Match m3 = re3.Match(sb3.ToString()); + + wrp3.Close(); //Beenden der Verbindung nicht vergessen!!! + + if(m3.Success){ + //Bei Erfolg wird der Link ausgegeben + Invoke(new ResultHandler(Result), new object[] {m1.Groups[1].Captures[0].ToString(), m2.Groups[1].Captures[0].ToString(), "http://persoenlicherfahrplan.bahn.de/bin/pf/query-p2w.exe/"+m3.Groups[1].Captures[0]}); + + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"Downloade Pdf..."}); + WebClient wc = new WebClient(); + wc.DownloadFile(tbPdfAddr.Text, tbAbBhf.Text.ToUpper()+"-"+tbAnBhf.Text.ToUpper()+".pdf"); + + Invoke(new UpdateStatusHandler(UpdateStatus), new object[] {"Als "+tbAbBhf.Text.ToUpper()+"-"+tbAnBhf.Text.ToUpper()+".pdf gespeichert"}); + } else { + MessageBox.Show("Request 3 fehlgeschlagen"); + } + } else { + //Schlägt die Abfrage der ID fehl, wird die ident ausgegeben. + MessageBox.Show("ID Abfrage fehlgeschlagen! Ident:"+m1.Groups[1].Captures[0]); + } + } else { + //Abfrage der ident schlägt fehl + MessageBox.Show("Ident Abfrage fehlgeschlagen"); + } + Invoke(new DownloadPdfEndHandler(DownloadPdfEnd)); + } + + + void MainFormClosed(object sender, System.EventArgs e) + { + if(t!=null) + { + t.Abort(); + } + } + + void BtnDownloadPdfClick(object sender, System.EventArgs e) + { + if(tbAbBhf.Text.Length!=0&&tbAnBhf.Text.Length!=0&&tbBeginn.Text.Length!=0&&tbDelay.Text.Length!=0) + { + btnDownloadPdf.Enabled = false; + btnDownloadPdf.Text = "In Progress..."; + t = new Thread(new ThreadStart(DownloadPdf)); + t.Start(); + } + else + { + ShowErrorMsg("Eingabefelder überprüfen!"); + } + } + + void ShowErrorMsg(string msg) + { + MessageBox.Show(msg, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1); + } + } +} diff --git a/Scraping/Scraping/MainForm.resx b/Scraping/Scraping/MainForm.resx new file mode 100644 index 0000000..8f95d66 --- /dev/null +++ b/Scraping/Scraping/MainForm.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Scraping/Scraping/Program.cs b/Scraping/Scraping/Program.cs new file mode 100644 index 0000000..3d46c1d --- /dev/null +++ b/Scraping/Scraping/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Scraping +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new MainForm()); + } + } +} \ No newline at end of file diff --git a/Scraping/Scraping/Properties/AssemblyInfo.cs b/Scraping/Scraping/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e51e6c6 --- /dev/null +++ b/Scraping/Scraping/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Scraping")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Scraping")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("983246b4-e5e4-438a-88d2-b7786f3d7049")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Scraping/Scraping/Properties/Resources.Designer.cs b/Scraping/Scraping/Properties/Resources.Designer.cs new file mode 100644 index 0000000..6dffe49 --- /dev/null +++ b/Scraping/Scraping/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Scraping.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Scraping.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Scraping.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace Scraping.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Scraping.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Scraping/Scraping/Properties/Resources.resx b/Scraping/Scraping/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/Scraping/Scraping/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Scraping/Scraping/Properties/Settings.Designer.cs b/Scraping/Scraping/Properties/Settings.Designer.cs new file mode 100644 index 0000000..6883545 --- /dev/null +++ b/Scraping/Scraping/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Scraping.Properties.Settings.get_Default():Scraping.Properties.Settings")] + +namespace Scraping.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Scraping/Scraping/Properties/Settings.settings b/Scraping/Scraping/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/Scraping/Scraping/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Scraping/Scraping/Scraping.csproj b/Scraping/Scraping/Scraping.csproj new file mode 100644 index 0000000..f7c591d --- /dev/null +++ b/Scraping/Scraping/Scraping.csproj @@ -0,0 +1,77 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {5061FC53-6A07-47DE-88DB-B4A1EB01C91E} + WinExe + Properties + Scraping + Scraping + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + {00020430-0000-0000-C000-000000000046} + 2 + 0 + 0 + primary + False + + + + \ No newline at end of file diff --git a/Scraping/Scraping/Scraping.csproj.user b/Scraping/Scraping/Scraping.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/Scraping/Scraping/Scraping.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/ScrapingBahnDe/Scraping.aspx b/ScrapingBahnDe/Scraping.aspx new file mode 100644 index 0000000..88acc23 --- /dev/null +++ b/ScrapingBahnDe/Scraping.aspx @@ -0,0 +1,16 @@ +<%@ Page language="C#" %> + + + + + + + +
+ +
+ + diff --git a/Screensaver/Screensaver.sln b/Screensaver/Screensaver.sln new file mode 100644 index 0000000..ba1b9e4 --- /dev/null +++ b/Screensaver/Screensaver.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Screensaver", "Screensaver\Screensaver.csproj", "{0B19BA3E-A83F-4C95-A0FF-2FFBB95ED2F9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0B19BA3E-A83F-4C95-A0FF-2FFBB95ED2F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B19BA3E-A83F-4C95-A0FF-2FFBB95ED2F9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B19BA3E-A83F-4C95-A0FF-2FFBB95ED2F9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B19BA3E-A83F-4C95-A0FF-2FFBB95ED2F9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Screensaver/Screensaver.suo b/Screensaver/Screensaver.suo new file mode 100644 index 0000000..8d9e5b3 Binary files /dev/null and b/Screensaver/Screensaver.suo differ diff --git a/Screensaver/Screensaver/Controller.cs b/Screensaver/Screensaver/Controller.cs new file mode 100644 index 0000000..1a20d66 --- /dev/null +++ b/Screensaver/Screensaver/Controller.cs @@ -0,0 +1,97 @@ +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using System.Drawing; +using System.IO; +using System; + +namespace Screensaver +{ + class Controller + { + private Control targetControl; + private Device device; + private PresentParameters presentParameters; + private bool deviceLost; + private Microsoft.DirectX.Direct3D.Font font1; + int counter = 0; + + public Controller(Control targetControl) + { + this.targetControl = targetControl; + deviceLost = false; + presentParameters = new PresentParameters(); + presentParameters.Windowed = true; + presentParameters.SwapEffect = SwapEffect.Discard; + presentParameters.AutoDepthStencilFormat = DepthFormat.D16; + presentParameters.EnableAutoDepthStencil = true; + + device = new Device( + Manager.Adapters.Default.Adapter, + DeviceType.Hardware, + targetControl, + CreateFlags.HardwareVertexProcessing | CreateFlags.PureDevice, + presentParameters); + + font1 = new Microsoft.DirectX.Direct3D.Font(device, new System.Drawing.Font(FontFamily.GenericSansSerif, 620)); + } + + public void Render(int speed, string text, Color backgroundcolor, Color textcolor, int textwidth, int top) + { + if (deviceLost) + { + AttemptRecovery(); + } + + if (deviceLost) + { + return; + } + + device.Clear( + ClearFlags.Target | ClearFlags.ZBuffer, + backgroundcolor, + 1.0f, + 0); + + device.BeginScene(); + + if (counter > textwidth) + counter = 1; + + for (int i = 0; i <= targetControl.Size.Width / textwidth + 1; i++) + { + font1.DrawText(null, text, new Point(i * textwidth - counter, top), textcolor); + counter+=speed; + } + + device.EndScene(); + + try + { + device.Present(); + } + catch (Exception) + { + deviceLost = true; + } + } + + protected void AttemptRecovery() + { + try + { + device.TestCooperativeLevel(); + } + catch (Exception) + { + try + { + device.Reset(presentParameters); + deviceLost = false; + } + catch { } + } + } + } +} diff --git a/Screensaver/Screensaver/Einstellungen.Designer.cs b/Screensaver/Screensaver/Einstellungen.Designer.cs new file mode 100644 index 0000000..fde675c --- /dev/null +++ b/Screensaver/Screensaver/Einstellungen.Designer.cs @@ -0,0 +1,291 @@ +namespace Screensaver +{ + partial class Einstellungen + { + /// + /// 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() + { + this.textBox1 = new System.Windows.Forms.TextBox(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.numericUpDown2 = new System.Windows.Forms.NumericUpDown(); + this.TextColorDialog = new System.Windows.Forms.ColorDialog(); + this.BackgroundColorDialog = new System.Windows.Forms.ColorDialog(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.label5 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnAbbrechen = new System.Windows.Forms.Button(); + this.numericUpDown3 = new System.Windows.Forms.NumericUpDown(); + this.label6 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).BeginInit(); + this.SuspendLayout(); + // + // textBox1 + // + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox1.Location = new System.Drawing.Point(115, 12); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(366, 20); + this.textBox1.TabIndex = 0; + this.textBox1.Text = "Test"; + this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); + // + // numericUpDown1 + // + this.numericUpDown1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown1.Location = new System.Drawing.Point(115, 38); + this.numericUpDown1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(54, 20); + this.numericUpDown1.TabIndex = 1; + this.numericUpDown1.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown1.ValueChanged += new System.EventHandler(this.numericUpDown1_ValueChanged); + // + // numericUpDown2 + // + this.numericUpDown2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown2.Increment = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.numericUpDown2.Location = new System.Drawing.Point(115, 64); + this.numericUpDown2.Maximum = new decimal(new int[] { + 20000, + 0, + 0, + 0}); + this.numericUpDown2.Minimum = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.numericUpDown2.Name = "numericUpDown2"; + this.numericUpDown2.Size = new System.Drawing.Size(87, 20); + this.numericUpDown2.TabIndex = 2; + this.numericUpDown2.Value = new decimal(new int[] { + 1800, + 0, + 0, + 0}); + this.numericUpDown2.ValueChanged += new System.EventHandler(this.numericUpDown2_ValueChanged); + // + // TextColorDialog + // + this.TextColorDialog.AllowFullOpen = false; + this.TextColorDialog.SolidColorOnly = true; + // + // BackgroundColorDialog + // + this.BackgroundColorDialog.Color = System.Drawing.Color.White; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 15); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(31, 13); + this.label1.TabIndex = 3; + this.label1.Text = "Text:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 40); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(88, 13); + this.label2.TabIndex = 4; + this.label2.Text = "Geschwindigkeit:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 66); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(47, 13); + this.label3.TabIndex = 5; + this.label3.Text = "Intervall:"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(12, 121); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(55, 13); + this.label4.TabIndex = 6; + this.label4.Text = "Textfarbe:"; + // + // button1 + // + this.button1.BackColor = System.Drawing.Color.Black; + this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button1.Location = new System.Drawing.Point(115, 116); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 7; + this.button1.UseVisualStyleBackColor = false; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button2 + // + this.button2.BackColor = System.Drawing.Color.White; + this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button2.Location = new System.Drawing.Point(115, 145); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 8; + this.button2.UseVisualStyleBackColor = false; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(12, 150); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(89, 13); + this.label5.TabIndex = 9; + this.label5.Text = "Hintergrundfarbe:"; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnOK.Location = new System.Drawing.Point(405, 170); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(75, 23); + this.btnOK.TabIndex = 10; + this.btnOK.Text = "OK"; + this.btnOK.UseVisualStyleBackColor = true; + // + // btnAbbrechen + // + this.btnAbbrechen.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnAbbrechen.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnAbbrechen.Location = new System.Drawing.Point(324, 170); + this.btnAbbrechen.Name = "btnAbbrechen"; + this.btnAbbrechen.Size = new System.Drawing.Size(75, 23); + this.btnAbbrechen.TabIndex = 11; + this.btnAbbrechen.Text = "Abbrechen"; + this.btnAbbrechen.UseVisualStyleBackColor = true; + // + // numericUpDown3 + // + this.numericUpDown3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown3.Location = new System.Drawing.Point(115, 90); + this.numericUpDown3.Maximum = new decimal(new int[] { + 1000, + 0, + 0, + 0}); + this.numericUpDown3.Minimum = new decimal(new int[] { + 1000, + 0, + 0, + -2147483648}); + this.numericUpDown3.Name = "numericUpDown3"; + this.numericUpDown3.Size = new System.Drawing.Size(87, 20); + this.numericUpDown3.TabIndex = 12; + this.numericUpDown3.Value = new decimal(new int[] { + 165, + 0, + 0, + -2147483648}); + this.numericUpDown3.ValueChanged += new System.EventHandler(this.numericUpDown3_ValueChanged); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(12, 92); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(97, 13); + this.label6.TabIndex = 13; + this.label6.Text = "Abstand von oben:"; + // + // Einstellungen + // + this.AcceptButton = this.btnOK; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnAbbrechen; + this.ClientSize = new System.Drawing.Size(492, 205); + this.Controls.Add(this.label6); + this.Controls.Add(this.numericUpDown3); + this.Controls.Add(this.btnAbbrechen); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.label5); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.label4); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.numericUpDown2); + this.Controls.Add(this.numericUpDown1); + this.Controls.Add(this.textBox1); + this.Name = "Einstellungen"; + this.Text = "Einstellungen"; + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.NumericUpDown numericUpDown1; + private System.Windows.Forms.NumericUpDown numericUpDown2; + private System.Windows.Forms.ColorDialog TextColorDialog; + private System.Windows.Forms.ColorDialog BackgroundColorDialog; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Button btnAbbrechen; + private System.Windows.Forms.NumericUpDown numericUpDown3; + private System.Windows.Forms.Label label6; + } +} \ No newline at end of file diff --git a/Screensaver/Screensaver/Einstellungen.cs b/Screensaver/Screensaver/Einstellungen.cs new file mode 100644 index 0000000..f64b777 --- /dev/null +++ b/Screensaver/Screensaver/Einstellungen.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace Screensaver +{ + public partial class Einstellungen : Form + { + public Color TextColor; + public Color BackgroundColor; + public int width; + public int speed; + public string text; + public int top; + + public Einstellungen() + { + TextColor = System.Drawing.Color.Black; + BackgroundColor = System.Drawing.Color.White; + width = 1800; + speed = 1; + text = "Tpst"; + top = -165; + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + if (TextColorDialog.ShowDialog() == DialogResult.OK) + { + ((Button)sender).BackColor = TextColorDialog.Color; + TextColor = TextColorDialog.Color; + } + } + + private void button2_Click(object sender, EventArgs e) + { + if (BackgroundColorDialog.ShowDialog() == DialogResult.OK) + { + ((Button)sender).BackColor = BackgroundColorDialog.Color; + BackgroundColor = BackgroundColorDialog.Color; + } + } + + private void numericUpDown2_ValueChanged(object sender, EventArgs e) + { + width = (int)((NumericUpDown)sender).Value; + } + + private void numericUpDown1_ValueChanged(object sender, EventArgs e) + { + speed = (int)((NumericUpDown)sender).Value; + } + + private void textBox1_TextChanged(object sender, EventArgs e) + { + text = ((TextBox)sender).Text; + } + + private void numericUpDown3_ValueChanged(object sender, EventArgs e) + { + top = (int)((NumericUpDown)sender).Value; + } + } +} \ No newline at end of file diff --git a/Screensaver/Screensaver/Einstellungen.resx b/Screensaver/Screensaver/Einstellungen.resx new file mode 100644 index 0000000..6d95572 --- /dev/null +++ b/Screensaver/Screensaver/Einstellungen.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 147, 17 + + \ No newline at end of file diff --git a/Screensaver/Screensaver/MainWindow.cs b/Screensaver/Screensaver/MainWindow.cs new file mode 100644 index 0000000..ab82d1f --- /dev/null +++ b/Screensaver/Screensaver/MainWindow.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace Screensaver +{ + class MainWindow : Form + { + public Einstellungen einst; + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // MainWindow + // + this.ClientSize = new System.Drawing.Size(292, 273); + this.Name = "MainWindow"; + this.ResumeLayout(false); + } + } +} diff --git a/Screensaver/Screensaver/MainWindow.resx b/Screensaver/Screensaver/MainWindow.resx new file mode 100644 index 0000000..ff31a6d --- /dev/null +++ b/Screensaver/Screensaver/MainWindow.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Screensaver/Screensaver/Program.cs b/Screensaver/Screensaver/Program.cs new file mode 100644 index 0000000..cad8e9d --- /dev/null +++ b/Screensaver/Screensaver/Program.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using System.IO; +using System.Threading; + +namespace Screensaver +{ + class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + MainWindow mw = new MainWindow(); + mw.FormBorderStyle = FormBorderStyle.None; + mw.KeyDown += new KeyEventHandler(onKeyDown); + Controller c = new Controller(mw); + mw.einst = new Einstellungen(); + mw.Show(); + while (mw.Created) + { + c.Render(mw.einst.speed, mw.einst.text, mw.einst.BackgroundColor, mw.einst.TextColor, mw.einst.width, mw.einst.top); + Application.DoEvents(); + } + } + + static void onKeyDown(object sender, KeyEventArgs e) + { + if (e.KeyData == Keys.F) + { + ((Form)sender).WindowState = ((Form)sender).WindowState == FormWindowState.Maximized ? FormWindowState.Normal : FormWindowState.Maximized; + } + else if (e.KeyData == Keys.E) + { + if (((MainWindow)sender).einst.ShowDialog() == DialogResult.OK) + { + } + } + } + } +} \ No newline at end of file diff --git a/Screensaver/Screensaver/Properties/AssemblyInfo.cs b/Screensaver/Screensaver/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4b4d261 --- /dev/null +++ b/Screensaver/Screensaver/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Screensaver")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Screensaver")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("eaa2194a-a7bd-48f9-8fa6-cd14d5c76035")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Screensaver/Screensaver/Properties/Resources.Designer.cs b/Screensaver/Screensaver/Properties/Resources.Designer.cs new file mode 100644 index 0000000..4ceb356 --- /dev/null +++ b/Screensaver/Screensaver/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Screensaver.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Screensaver.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Screensaver/Screensaver/Properties/Resources.resx b/Screensaver/Screensaver/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/Screensaver/Screensaver/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Screensaver/Screensaver/Properties/Settings.Designer.cs b/Screensaver/Screensaver/Properties/Settings.Designer.cs new file mode 100644 index 0000000..11bc681 --- /dev/null +++ b/Screensaver/Screensaver/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Screensaver.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/Screensaver/Screensaver/Properties/Settings.settings b/Screensaver/Screensaver/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/Screensaver/Screensaver/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Screensaver/Screensaver/Screensaver.csproj b/Screensaver/Screensaver/Screensaver.csproj new file mode 100644 index 0000000..330e021 --- /dev/null +++ b/Screensaver/Screensaver/Screensaver.csproj @@ -0,0 +1,96 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {0B19BA3E-A83F-4C95-A0FF-2FFBB95ED2F9} + WinExe + Properties + Screensaver + Screensaver + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + C:\WINDOWS\Microsoft.NET\DirectX for Managed Code\1.0.2902.0\Microsoft.DirectX.dll + + + C:\WINDOWS\Microsoft.NET\DirectX for Managed Code\1.0.2902.0\Microsoft.DirectX.Direct3D.dll + + + C:\WINDOWS\Microsoft.NET\DirectX for Managed Code\1.0.2902.0\Microsoft.DirectX.Direct3DX.dll + + + + + + + + + + + + Form + + + Einstellungen.cs + + + Form + + + + + Designer + Einstellungen.cs + + + Designer + MainWindow.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/ServerSocket1/AssemblyInfo.cs b/ServerSocket1/AssemblyInfo.cs new file mode 100644 index 0000000..dbacda1 --- /dev/null +++ b/ServerSocket1/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/ServerSocket1/Main.cs b/ServerSocket1/Main.cs new file mode 100644 index 0000000..8020eb4 --- /dev/null +++ b/ServerSocket1/Main.cs @@ -0,0 +1,75 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 18.11.2004 + * Time: 16:58 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Net.Sockets; +using System.IO; + +namespace ServerSocket1 +{ + class MainClass + { + public static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + + try + { + bool status = true ; + string servermessage = "" ; + string clientmessage = "" ; + + TcpListener tcpListener = new TcpListener(8100) ; + tcpListener.Start() ; + + Console.WriteLine("Server Started") ; + + Socket socketForClient = tcpListener.AcceptSocket() ; + + Console.WriteLine("Client Connected"); + + NetworkStream networkStream = new NetworkStream(socketForClient) ; + StreamWriter streamwriter = new StreamWriter(networkStream) ; + StreamReader streamreader = new StreamReader(networkStream) ; + + while(status) + { + if(socketForClient.Connected) + { + servermessage = streamreader.ReadLine() ; + Console.WriteLine("Client:"+servermessage) ; + + if((servermessage== "bye" )) + { + status = false ; + streamreader.Close() ; + networkStream.Close() ; + streamwriter.Close() ; + return ; + } + + Console.Write("Server:") ; + clientmessage = Console.ReadLine() ; + streamwriter.WriteLine(clientmessage) ; + streamwriter.Flush() ; + } + } + + streamreader.Close() ; + networkStream.Close() ; + streamwriter.Close() ; + socketForClient.Close() ; + Console.WriteLine("Exiting") ; + } + catch(Exception e) + { + Console.WriteLine(e.ToString()) ; + } + } + } +} diff --git a/ServerSocket1/ServerSocket1.cmbx b/ServerSocket1/ServerSocket1.cmbx new file mode 100644 index 0000000..e41f9b0 --- /dev/null +++ b/ServerSocket1/ServerSocket1.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServerSocket1/ServerSocket1.prjx b/ServerSocket1/ServerSocket1.prjx new file mode 100644 index 0000000..0174cd5 --- /dev/null +++ b/ServerSocket1/ServerSocket1.prjx @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess.sln b/SimpleParallelPortAccess/SimpleParallelPortAccess.sln new file mode 100644 index 0000000..cbd3444 --- /dev/null +++ b/SimpleParallelPortAccess/SimpleParallelPortAccess.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleParallelPortAccess", "SimpleParallelPortAccess\SimpleParallelPortAccess.csproj", "{C3BEE903-92DD-4A8E-B660-D1896F442EB2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C3BEE903-92DD-4A8E-B660-D1896F442EB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C3BEE903-92DD-4A8E-B660-D1896F442EB2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3BEE903-92DD-4A8E-B660-D1896F442EB2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C3BEE903-92DD-4A8E-B660-D1896F442EB2}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess.suo b/SimpleParallelPortAccess/SimpleParallelPortAccess.suo new file mode 100644 index 0000000..10f7d2d Binary files /dev/null and b/SimpleParallelPortAccess/SimpleParallelPortAccess.suo differ diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess/Form1.Designer.cs b/SimpleParallelPortAccess/SimpleParallelPortAccess/Form1.Designer.cs new file mode 100644 index 0000000..7c2e2fc --- /dev/null +++ b/SimpleParallelPortAccess/SimpleParallelPortAccess/Form1.Designer.cs @@ -0,0 +1,84 @@ +namespace SimpleParallelPortAccess +{ + partial class Form1 + { + /// + /// 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() + { + this.tbCommand = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // tbCommand + // + this.tbCommand.Location = new System.Drawing.Point(12, 12); + this.tbCommand.Name = "tbCommand"; + this.tbCommand.Size = new System.Drawing.Size(100, 20); + this.tbCommand.TabIndex = 1; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(12, 38); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 2; + this.button1.Text = "Schreiben"; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(117, 87); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 3; + this.button2.Text = "button2"; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(248, 133); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.tbCommand); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox tbCommand; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + + } +} + diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess/Form1.cs b/SimpleParallelPortAccess/SimpleParallelPortAccess/Form1.cs new file mode 100644 index 0000000..6da0592 Binary files /dev/null and b/SimpleParallelPortAccess/SimpleParallelPortAccess/Form1.cs differ diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess/Form1.resx b/SimpleParallelPortAccess/SimpleParallelPortAccess/Form1.resx new file mode 100644 index 0000000..8f95d66 --- /dev/null +++ b/SimpleParallelPortAccess/SimpleParallelPortAccess/Form1.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess/Program.cs b/SimpleParallelPortAccess/SimpleParallelPortAccess/Program.cs new file mode 100644 index 0000000..334a347 --- /dev/null +++ b/SimpleParallelPortAccess/SimpleParallelPortAccess/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace SimpleParallelPortAccess +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/AssemblyInfo.cs b/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e689a0f --- /dev/null +++ b/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SimpleParallelPortAccess")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SimpleParallelPortAccess")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("80957be2-6e84-4b77-bc3e-d49216939eb0")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/Resources.Designer.cs b/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/Resources.Designer.cs new file mode 100644 index 0000000..e813f1e --- /dev/null +++ b/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="SimpleParallelPortAccess.Properties.Resources.get_ResourceManager():System.Resour" + + "ces.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="SimpleParallelPortAccess.Properties.Resources.get_Culture():System.Globalization." + + "CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="SimpleParallelPortAccess.Properties.Resources.set_Culture(System.Globalization.Cu" + + "ltureInfo):Void")] + +namespace SimpleParallelPortAccess.Properties { + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if ((resourceMan == null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SimpleParallelPortAccess.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Bitmap commands { + get { + return ((System.Drawing.Bitmap)(ResourceManager.GetObject("commands", resourceCulture))); + } + } + } +} diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/Resources.resx b/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/Resources.resx new file mode 100644 index 0000000..f4aa39c --- /dev/null +++ b/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/Resources.resx @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\commands.PNG;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/Settings.Designer.cs b/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/Settings.Designer.cs new file mode 100644 index 0000000..267dd6a --- /dev/null +++ b/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SimpleParallelPortAccess.Properties.Settings.get_Default():SimpleParallelPortAccess.Properties.Settings")] + +namespace SimpleParallelPortAccess.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/Settings.settings b/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/SimpleParallelPortAccess/SimpleParallelPortAccess/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess/SimpleParallelPortAccess.csproj b/SimpleParallelPortAccess/SimpleParallelPortAccess/SimpleParallelPortAccess.csproj new file mode 100644 index 0000000..ccf5a9c --- /dev/null +++ b/SimpleParallelPortAccess/SimpleParallelPortAccess/SimpleParallelPortAccess.csproj @@ -0,0 +1,74 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {C3BEE903-92DD-4A8E-B660-D1896F442EB2} + WinExe + Properties + SimpleParallelPortAccess + SimpleParallelPortAccess + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + \ No newline at end of file diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess/SimpleParallelPortAccess.csproj.user b/SimpleParallelPortAccess/SimpleParallelPortAccess/SimpleParallelPortAccess.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/SimpleParallelPortAccess/SimpleParallelPortAccess/SimpleParallelPortAccess.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess/commands.PNG b/SimpleParallelPortAccess/SimpleParallelPortAccess/commands.PNG new file mode 100644 index 0000000..a19e722 Binary files /dev/null and b/SimpleParallelPortAccess/SimpleParallelPortAccess/commands.PNG differ diff --git a/SimpleParallelPortAccess/SimpleParallelPortAccess/inpout32.dll b/SimpleParallelPortAccess/SimpleParallelPortAccess/inpout32.dll new file mode 100644 index 0000000..1140c01 Binary files /dev/null and b/SimpleParallelPortAccess/SimpleParallelPortAccess/inpout32.dll differ diff --git a/Solar system/AssemblyInfo.cs b/Solar system/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/Solar system/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/Solar system/Joystick.class b/Solar system/Joystick.class new file mode 100644 index 0000000..08244bf Binary files /dev/null and b/Solar system/Joystick.class differ diff --git a/Solar system/MainForm.cs b/Solar system/MainForm.cs new file mode 100644 index 0000000..8d7d27c --- /dev/null +++ b/Solar system/MainForm.cs @@ -0,0 +1,165 @@ + +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + +namespace Solar_System +{ + public class MainForm : System.Windows.Forms.Form + { + + private Device device = null; + private VertexBuffer vertexBuffer = null; + private PresentParameters presentParams = new PresentParameters(); + private Mesh mesh = null; + private Direct3D.Material[] material; + private Texture texture; + private bool pause = false; + + public bool InitializeGraphics() + { + try + { + presentParams.Windowed=true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.EnableAutoDepthStencil = true; + presentParams.AutoDepthStencilFormat = DepthFormat.D16; + device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams); + device.DeviceReset += new System.EventHandler(this.OnResetDevice); + this.OnCreateDevice(device, null); + this.OnResetDevice(device, null); + pause = false; + return true; + } + catch (DirectXException) + { + return false; + } + } + + public void OnCreateDevice(object sender, EventArgs e) + { + Device dev = (Device)sender; + vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionNormal), 100, dev, Usage.WriteOnly, CustomVertex.PositionNormal.Format, Pool.Default); + vertexBuffer.Created += new System.EventHandler(this.OnCreateVertexBuffer); + this.OnCreateVertexBuffer(vertexBuffer, null); + } + + public void OnResetDevice(object sender, EventArgs e) + { + Device dev = (Device)sender; + device.RenderState.CullMode = Cull.None; + device.RenderState.ZBufferEnable = true; + device.RenderState.Lighting = true; + + mesh = Mesh.Teapot(device); + } + + public void OnCreateVertexBuffer(object sender, EventArgs e) + { + VertexBuffer vb = (VertexBuffer)sender; + CustomVertex.PositionNormal[] verts = (CustomVertex.PositionNormal[])vb.Lock(0,0); + for (int i = 0; i < 50; i++) + { + float theta = (float)(2 * Math.PI * i) / 49; + verts[2 * i].SetPosition(new Vector3((float)Math.Sin(theta), -1, (float)Math.Cos(theta))); + verts[2 * i].SetNormal(new Vector3((float)Math.Sin(theta), 0, (float)Math.Cos(theta))); + verts[2 * i + 1].SetPosition(new Vector3((float)Math.Sin(theta), 1, (float)Math.Cos(theta))); + verts[2 * i + 1].SetNormal(new Vector3((float)Math.Sin(theta), 0, (float)Math.Cos(theta))); + } + vb.Unlock(); + } + + private void SetupMatrices() + { + device.Transform.World = Matrix.RotationAxis(new Vector3((float)Math.Cos(Environment.TickCount / 250.0f),1,(float)Math.Sin(Environment.TickCount / 250.0f)), Environment.TickCount / 3000.0f ); + device.Transform.View = Matrix.LookAtLH( new Vector3( 0.0f, 3.0f,-5.0f ), new Vector3( 0.0f, 0.0f, 0.0f ), new Vector3( 0.0f, 1.0f, 0.0f ) ); + device.Transform.Projection = Matrix.PerspectiveFovLH( (float)Math.PI / 4.0f, this.Width/this.Height, 1.0f, 100.0f ); + } + + private void SetupLights() + { + System.Drawing.Color col = System.Drawing.Color.White; + Direct3D.Material mtrl = new Direct3D.Material(); + mtrl.Diffuse = col; + mtrl.Ambient = col; + device.Material = mtrl; + + device.Lights[0].Type = LightType.Directional; + device.Lights[0].Diffuse = System.Drawing.Color.DarkTurquoise; + device.Lights[0].Direction = new Vector3((float)Math.Cos(Environment.TickCount / 250.0f), 1.0f, (float)Math.Sin(Environment.TickCount / 250.0f)); + + device.Lights[0].Commit(); + device.Lights[0].Enabled = true; + + device.RenderState.Ambient = System.Drawing.Color.FromArgb(0x202020); + } + + private void Render() + { + if (pause) + return; + + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, System.Drawing.Color.Blue, 1.0f, 0); + device.BeginScene(); + SetupLights(); + SetupMatrices(); + + device.SetStreamSource(0, vertexBuffer, 0); + device.VertexFormat = CustomVertex.PositionNormal.Format; + device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, (4*25)-2); + device.EndScene(); + device.Present(); + } + + protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) + { + this.Render(); + } + protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) + { + if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape) + this.Close(); + } + protected override void OnResize(System.EventArgs e) + { + pause = ((this.WindowState == FormWindowState.Minimized) || !this.Visible); + } + + public MainForm() + { + InitializeComponent(); + } + + [STAThread] + public static void Main(string[] args) + { + using (MainForm frm = new MainForm()) + { + if (!frm.InitializeGraphics()) + { + return; + } + frm.Show(); + + while(frm.Created) + { + frm.Render(); + Application.DoEvents(); + } + } + } + private void InitializeComponent() { + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(752, 533); + this.Name = "MainForm"; + this.Text = "MainForm"; + } + } +} diff --git a/Solar system/Programm1.mu b/Solar system/Programm1.mu new file mode 100644 index 0000000..cfdc6ab --- /dev/null +++ b/Solar system/Programm1.mu @@ -0,0 +1,84 @@ +funcdisc:=proc(func) begin +f:=eval(func); //Zu analysierende Funktion +fd1:=diff(f, x); //erste Ableitung +fd2:=diff(fd1, x); //zweite Ableitug + +x0:=solve(f, x); //Nullstellen +x0anz:=card(x0); //Anzahl der Nullstellen + +xe:=solve(fd1, x); //Extremstellen +xeanz:=card(xe); //Anzahl der Extremstellen + +xw:=solve(fd2, x); //Wendestellen +xwanz:=card(xw); //Anzahl Wendestellen + +print(Unquoted, "Folgende Funktion wird nun analysiert: f(x) = ".expr2text(f)); + +//plotfunc2d(f); + +//Nullstellen +print(Unquoted, "Nullstellen liegen bei:"); +for i from 1 to x0anz do + + //Funktionswerte auf und nahe bei jeder Nullstelle + testdavor:=float(subs(f, x=(x0[i]-0.0000001))); + test:=float(subs(f, x=x0[i])); + testdanach:=float(subs(f, x=(x0[i]+0.0000001))); + + //Bestimmung der Art des Extremums + if testdavor < test and testdanach < test then + art:="Berhrung: Maximum"; + end_if; + if testdavor > test and testdanach > test then + art:="Berhrung: Miniumum"; + end_if; + if testdavor > test and testdanach < test then + art:="Von plus zu minus"; + end_if; + if testdavor < test and testdanach > test then + art:="Von minus zu plus"; + end_if; + + print(Unquoted, "x0".i." = ".expr2text(x0[i])." Art: ".art); +end_for; + +//Erste Ableitung +print(Unquoted, "Die erste Ableitung ist gleich:"); +print(Unquoted, "f'(x) = ".expr2text(fd1)); + +//Extrempunkte +print(Unquoted, "Extrempunkte liegen bei:"); +for i from 1 to xeanz do + + //Funktionswerte auf und nahe bei jedem Extremum + testdavor:=float(subs(f, x=(xe[i]-0.0000001))); + test:=float(subs(f, x=xe[i])); + testdanach:=float(subs(f, x=(xe[i]+0.0000001))); + + //Bestimmung der Art des Extremums + if testdavor < test and testdanach < test then + art:="Maximum"; + end_if; + if testdavor > test and testdanach > test then + art:="Miniumum"; + end_if; + if testdavor > test and testdanach < test then + art:="Sattelpunkt"; + end_if; + if testdavor < test and testdanach > test then + art:="Sattelpunkt"; + end_if; + + print(Unquoted, "E".i."(".expr2text(xe[i])." | ".expr2text(subs(f, x=xe[i])).") Art: ".art); +end_for; + +//Zweite Ableitung +print(Unquoted, "Die zweite Ableitung ist gleich:"); +print(Unquoted, "f''(x) = ".expr2text(fd2)); + +//Wendepunkte +print(Unquoted, "Wendepunkte liegen bei:"); +for i from 1 to xwanz do + print(Unquoted, "W".i."(".expr2text(xw[i])." | ".expr2text(subs(f, x=xw[i])).")"); +end_for; +end_proc: diff --git a/Solar system/Solar System Data.xls b/Solar system/Solar System Data.xls new file mode 100644 index 0000000..5f17726 Binary files /dev/null and b/Solar system/Solar System Data.xls differ diff --git a/Solar system/Solar System.cmbx b/Solar system/Solar System.cmbx new file mode 100644 index 0000000..a7fba4e --- /dev/null +++ b/Solar system/Solar System.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Solar system/Solar System.prjx b/Solar system/Solar System.prjx new file mode 100644 index 0000000..ec411e3 --- /dev/null +++ b/Solar system/Solar System.prjx @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Solar system/Solar_System.MainForm.resources b/Solar system/Solar_System.MainForm.resources new file mode 100644 index 0000000..c6f910c Binary files /dev/null and b/Solar system/Solar_System.MainForm.resources differ diff --git a/Solar system/SpaceShuttle.lwo b/Solar system/SpaceShuttle.lwo new file mode 100644 index 0000000..f3b4bf0 Binary files /dev/null and b/Solar system/SpaceShuttle.lwo differ diff --git a/Solar system/default.xml b/Solar system/default.xml new file mode 100644 index 0000000..9004d29 --- /dev/null +++ b/Solar system/default.xml @@ -0,0 +1,146 @@ + + + + + + + + + ini + ini + default.xml + d:\diplomawork\source\c450\2000\sss3d\source_diploma\execute\xml + + + 1 + 1 + 2000 + 12 + 0 + 0 + 2451545.0 + kepler + + true + false + false + true + default + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Solar system/images/Thumbs.db b/Solar system/images/Thumbs.db new file mode 100644 index 0000000..b6f72fd Binary files /dev/null and b/Solar system/images/Thumbs.db differ diff --git a/Solar system/images/ariel.jpg b/Solar system/images/ariel.jpg new file mode 100644 index 0000000..41650cd Binary files /dev/null and b/Solar system/images/ariel.jpg differ diff --git a/Solar system/images/bg.jpg b/Solar system/images/bg.jpg new file mode 100644 index 0000000..e9df108 Binary files /dev/null and b/Solar system/images/bg.jpg differ diff --git a/Solar system/images/callisto.jpg b/Solar system/images/callisto.jpg new file mode 100644 index 0000000..1943ac5 Binary files /dev/null and b/Solar system/images/callisto.jpg differ diff --git a/Solar system/images/ceres.jpg b/Solar system/images/ceres.jpg new file mode 100644 index 0000000..be4d1d1 Binary files /dev/null and b/Solar system/images/ceres.jpg differ diff --git a/Solar system/images/charon.jpg b/Solar system/images/charon.jpg new file mode 100644 index 0000000..443a660 Binary files /dev/null and b/Solar system/images/charon.jpg differ diff --git a/Solar system/images/deimos.jpg b/Solar system/images/deimos.jpg new file mode 100644 index 0000000..5ac5076 Binary files /dev/null and b/Solar system/images/deimos.jpg differ diff --git a/Solar system/images/dione.jpg b/Solar system/images/dione.jpg new file mode 100644 index 0000000..c2744ab Binary files /dev/null and b/Solar system/images/dione.jpg differ diff --git a/Solar system/images/earth.jpg b/Solar system/images/earth.jpg new file mode 100644 index 0000000..dd67afd Binary files /dev/null and b/Solar system/images/earth.jpg differ diff --git a/Solar system/images/enceladus.jpg b/Solar system/images/enceladus.jpg new file mode 100644 index 0000000..5323cdc Binary files /dev/null and b/Solar system/images/enceladus.jpg differ diff --git a/Solar system/images/europa.jpg b/Solar system/images/europa.jpg new file mode 100644 index 0000000..1e21005 Binary files /dev/null and b/Solar system/images/europa.jpg differ diff --git a/Solar system/images/ganymede.jpg b/Solar system/images/ganymede.jpg new file mode 100644 index 0000000..8c2733f Binary files /dev/null and b/Solar system/images/ganymede.jpg differ diff --git a/Solar system/images/halley.jpg b/Solar system/images/halley.jpg new file mode 100644 index 0000000..5366abf Binary files /dev/null and b/Solar system/images/halley.jpg differ diff --git a/Solar system/images/hyperion.jpg b/Solar system/images/hyperion.jpg new file mode 100644 index 0000000..caf32f9 Binary files /dev/null and b/Solar system/images/hyperion.jpg differ diff --git a/Solar system/images/iapetus.jpg b/Solar system/images/iapetus.jpg new file mode 100644 index 0000000..26cf79a Binary files /dev/null and b/Solar system/images/iapetus.jpg differ diff --git a/Solar system/images/io.jpg b/Solar system/images/io.jpg new file mode 100644 index 0000000..fbc558a Binary files /dev/null and b/Solar system/images/io.jpg differ diff --git a/Solar system/images/janus.jpg b/Solar system/images/janus.jpg new file mode 100644 index 0000000..693c8e4 Binary files /dev/null and b/Solar system/images/janus.jpg differ diff --git a/Solar system/images/jupiter.jpg b/Solar system/images/jupiter.jpg new file mode 100644 index 0000000..77442f7 Binary files /dev/null and b/Solar system/images/jupiter.jpg differ diff --git a/Solar system/images/mars.jpg b/Solar system/images/mars.jpg new file mode 100644 index 0000000..5d3d99a Binary files /dev/null and b/Solar system/images/mars.jpg differ diff --git a/Solar system/images/mercury.jpg b/Solar system/images/mercury.jpg new file mode 100644 index 0000000..9bb2c0b Binary files /dev/null and b/Solar system/images/mercury.jpg differ diff --git a/Solar system/images/mimas.jpg b/Solar system/images/mimas.jpg new file mode 100644 index 0000000..e05f525 Binary files /dev/null and b/Solar system/images/mimas.jpg differ diff --git a/Solar system/images/miranda.jpg b/Solar system/images/miranda.jpg new file mode 100644 index 0000000..15ed2e2 Binary files /dev/null and b/Solar system/images/miranda.jpg differ diff --git a/Solar system/images/moon.jpg b/Solar system/images/moon.jpg new file mode 100644 index 0000000..a18feca Binary files /dev/null and b/Solar system/images/moon.jpg differ diff --git a/Solar system/images/neptune.jpg b/Solar system/images/neptune.jpg new file mode 100644 index 0000000..0d0d3f0 Binary files /dev/null and b/Solar system/images/neptune.jpg differ diff --git a/Solar system/images/nerid.jpg b/Solar system/images/nerid.jpg new file mode 100644 index 0000000..1a731c5 Binary files /dev/null and b/Solar system/images/nerid.jpg differ diff --git a/Solar system/images/oberon.jpg b/Solar system/images/oberon.jpg new file mode 100644 index 0000000..fd2babc Binary files /dev/null and b/Solar system/images/oberon.jpg differ diff --git a/Solar system/images/phobos.jpg b/Solar system/images/phobos.jpg new file mode 100644 index 0000000..bc074b1 Binary files /dev/null and b/Solar system/images/phobos.jpg differ diff --git a/Solar system/images/phoebe.jpg b/Solar system/images/phoebe.jpg new file mode 100644 index 0000000..a0f863a Binary files /dev/null and b/Solar system/images/phoebe.jpg differ diff --git a/Solar system/images/pluto.jpg b/Solar system/images/pluto.jpg new file mode 100644 index 0000000..93ae6f1 Binary files /dev/null and b/Solar system/images/pluto.jpg differ diff --git a/Solar system/images/proteus.jpg b/Solar system/images/proteus.jpg new file mode 100644 index 0000000..d0057f8 Binary files /dev/null and b/Solar system/images/proteus.jpg differ diff --git a/Solar system/images/rhea.jpg b/Solar system/images/rhea.jpg new file mode 100644 index 0000000..dd9c743 Binary files /dev/null and b/Solar system/images/rhea.jpg differ diff --git a/Solar system/images/rings.jpg b/Solar system/images/rings.jpg new file mode 100644 index 0000000..2e05278 Binary files /dev/null and b/Solar system/images/rings.jpg differ diff --git a/Solar system/images/saturn.jpg b/Solar system/images/saturn.jpg new file mode 100644 index 0000000..587dd55 Binary files /dev/null and b/Solar system/images/saturn.jpg differ diff --git a/Solar system/images/sss.gif b/Solar system/images/sss.gif new file mode 100644 index 0000000..9526a97 Binary files /dev/null and b/Solar system/images/sss.gif differ diff --git a/Solar system/images/sss3dlogo.jpg b/Solar system/images/sss3dlogo.jpg new file mode 100644 index 0000000..07bacc5 Binary files /dev/null and b/Solar system/images/sss3dlogo.jpg differ diff --git a/Solar system/images/sun.jpg b/Solar system/images/sun.jpg new file mode 100644 index 0000000..ce32d7e Binary files /dev/null and b/Solar system/images/sun.jpg differ diff --git a/Solar system/images/tethys.jpg b/Solar system/images/tethys.jpg new file mode 100644 index 0000000..dfd525c Binary files /dev/null and b/Solar system/images/tethys.jpg differ diff --git a/Solar system/images/titan.jpg b/Solar system/images/titan.jpg new file mode 100644 index 0000000..8b90f81 Binary files /dev/null and b/Solar system/images/titan.jpg differ diff --git a/Solar system/images/titania.jpg b/Solar system/images/titania.jpg new file mode 100644 index 0000000..33c8a59 Binary files /dev/null and b/Solar system/images/titania.jpg differ diff --git a/Solar system/images/triton.jpg b/Solar system/images/triton.jpg new file mode 100644 index 0000000..c57f787 Binary files /dev/null and b/Solar system/images/triton.jpg differ diff --git a/Solar system/images/umbriel.jpg b/Solar system/images/umbriel.jpg new file mode 100644 index 0000000..0651850 Binary files /dev/null and b/Solar system/images/umbriel.jpg differ diff --git a/Solar system/images/uranus.jpg b/Solar system/images/uranus.jpg new file mode 100644 index 0000000..73d36a2 Binary files /dev/null and b/Solar system/images/uranus.jpg differ diff --git a/Solar system/images/venus.jpg b/Solar system/images/venus.jpg new file mode 100644 index 0000000..699f280 Binary files /dev/null and b/Solar system/images/venus.jpg differ diff --git a/Solar system/images/warning.gif b/Solar system/images/warning.gif new file mode 100644 index 0000000..08022b3 Binary files /dev/null and b/Solar system/images/warning.gif differ diff --git a/Solar system/joystick.dll b/Solar system/joystick.dll new file mode 100644 index 0000000..fa4cfce Binary files /dev/null and b/Solar system/joystick.dll differ diff --git a/Solar system/spaceshuttle.lws b/Solar system/spaceshuttle.lws new file mode 100644 index 0000000..2f36b4d --- /dev/null +++ b/Solar system/spaceshuttle.lws @@ -0,0 +1,85 @@ +LWSC +1 + +FirstFrame 1 +LastFrame 60 +FrameStep 1 +PreviewFirstFrame 1 +PreviewLastFrame 1 +PreviewFrameStep 1 +FramesPerSecond 30.000000 + +LoadObject SpaceShuttle.lwo +ShowObject 8 7 +ObjectMotion (unnamed) + 9 + 1 + -0.01741125 0 -0.07866688 0 0 0 1 1 1 + 0 0 0 0 0 +EndBehavior 1 +ShadowOptions 7 + +AmbientColor 255 255 255 +AmbIntensity 0.250000 + +AddLight +LightName Light +ShowLight 1 7 +LightMotion (unnamed) + 9 + 1 + -2 2 -2 45 35 0 1 1 1 + 0 0 0 0 0 +EndBehavior 1 +LightColor 255 255 255 +LgtIntensity 1.000000 +LightType 0 +ShadowType 1 + +ShowCamera 1 7 +CameraMotion (unnamed) + 9 + 1 + 0 1.097071 -15.54507 0 0 0 1 1 1 + 0 0 0 0 0 +EndBehavior 1 +ZoomFactor 3.200000 +Resolution 1 +PixelAspectRatio 2 +SegmentMemory 50000000 +Antialiasing 0 +AdaptiveSampling 1 +AdaptiveThreshold 16 +FilmSize 2 +FieldRendering 0 +MotionBlur 0 +DepthOfField 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 40 80 +SkyColor 120 180 240 +GroundColor 50 40 30 +NadirColor 100 80 60 +FogType 0 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +ClipRayColors 0 +DataOverlayLabel +FullSceneParamEval 0 + +ViewMode 3 +ViewAimpoint -0.017411 0.000000 -0.078667 +ViewDirection 0.301942 -0.312414 0.000000 +ViewZoomFactor 4.000000 +GridNumber 50 +GridSize 2.000000 +ShowMotionPath 1 +ShowBGImage 0 +ShowFogRadius 0 +ShowRedraw 0 +ShowSafeAreas 0 +ShowFieldChart 0 diff --git a/Solar system/sss3d-source.zip b/Solar system/sss3d-source.zip new file mode 100644 index 0000000..1f18932 Binary files /dev/null and b/Solar system/sss3d-source.zip differ diff --git a/Solar system/sss3d-source/Joystick.java b/Solar system/sss3d-source/Joystick.java new file mode 100644 index 0000000..a543aa0 --- /dev/null +++ b/Solar system/sss3d-source/Joystick.java @@ -0,0 +1,51 @@ +/****************************************************************** +* +* Copyright (C) Satoshi Konno 1999 +* +* File : Joystick.java +* +******************************************************************/ + +public class Joystick { + + public static final int BUTTON1 = 0x0001; + public static final int BUTTON2 = 0x0002; + public static final int BUTTON3 = 0x0004; + public static final int BUTTON4 = 0x0008; + + static { + System.loadLibrary("joystick"); + } + + private int joyID = 0; + + public Joystick(int id) { + joyID = id; + } + + public native int getNumDevs(); + public native float getXPos(int id); + public native float getYPos(int id); + public native float getZPos(int id); + public native int getButtons(int id); + + public float getXPos() { + return getXPos(joyID); + } + + public float getYPos() { + return getYPos(joyID); + } + + public float getZPos() { + return getZPos(joyID); + } + + public int getButtons() { + return getButtons(joyID); + } + + public String toString() { + return "Joystick"; + } +} diff --git a/Solar system/sss3d-source/SpaceShuttle.lwo b/Solar system/sss3d-source/SpaceShuttle.lwo new file mode 100644 index 0000000..f3b4bf0 Binary files /dev/null and b/Solar system/sss3d-source/SpaceShuttle.lwo differ diff --git a/Solar system/sss3d-source/compile.bat b/Solar system/sss3d-source/compile.bat new file mode 100644 index 0000000..04f73b5 --- /dev/null +++ b/Solar system/sss3d-source/compile.bat @@ -0,0 +1,35 @@ +@echo off +echo Compilation script for the J3D Solar System Simulator +if "%1"=="" goto error + +echo Please be patient, compiling will take some time... +javac -d %1 Joystick.java +javac -d %1 sss3d\SolarSystemSimulator.java + +echo creating directory %1\images +mkdir %1\images +echo copying image files to %1\images +copy images %1\images +echo creating directory %1\xml +mkdir %1\xml +echo copying xml files to %1\xml +copy xml %1\xml +echo copying default.xml to %1 +copy default.xml %1 +echo copying joystick.dll to %1 +copy joystick.dll %1 +echo copying SpaceShuttle.lwo to %1 +copy SpaceShuttle.lwo %1 +echo copying spaceshuttle.lws to %1 +copy spaceshuttle.lws %1 +goto end + +:error +echo +echo Usage: compile.bat output_path +echo to recompile the project J3D Solar System Simulator +echo and write the all class files to output_path +echo give an *existing* output_path with *write permission* +goto end + +:end diff --git a/Solar system/sss3d-source/createdoc.bat b/Solar system/sss3d-source/createdoc.bat new file mode 100644 index 0000000..06a7c54 --- /dev/null +++ b/Solar system/sss3d-source/createdoc.bat @@ -0,0 +1,23 @@ +@echo off +echo Documentation script for J3D Solar System Simulator +if "%1"=="" goto error + +echo. +echo Please be patient, generating the Documentation will take some time... +echo Now generating Documentation.... +javadoc -d %1 -version -author -use -package -splitindex -windowtitle "Diplomawork Computergraphics: J3D Solar System Simulator" -doctitle "Solar System Simulator - Classdocumentation" sss3d sss3d.calculations sss3d.calculations.keplerequation sss3d.calculations.ellipseequation sss3d.calculations.constants sss3d.contentbranch sss3d.contentbranch.comets sss3d.contentbranch.planets sss3d.contentbranch.moons sss3d.contentbranch.rockets sss3d.contentbranch.sun sss3d.contentbranch.orbit sss3d.gui sss3d.gui.infobox sss3d.gui.startbox sss3d.gui.navigationbox sss3d.utils sss3d.utils.astronomy sss3d.utils.joystick sss3d.utils.observer sss3d.utils.xmlparser sss3d.viewbranch + +goto end + +:error +echo. +echo Usage: createdoc.bat output_path +echo. +echo To regenerate the Documentation of +echo the project J3D Solar System Simulator to output_path +echo give an *existing* output_path with *write permission* +echo. +goto end + +:end + diff --git a/Solar system/sss3d-source/default.xml b/Solar system/sss3d-source/default.xml new file mode 100644 index 0000000..b821d3f --- /dev/null +++ b/Solar system/sss3d-source/default.xml @@ -0,0 +1,146 @@ + + + + + + + + + ini + ini + default.xml + d:\diplomawork\source\c450\2000\sss3d\source_diploma\execute\xml + + + 1 + 1 + 2000 + 12 + 0 + 0 + 2451545.0 + kepler + + true + false + false + false + default + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Solar system/sss3d-source/go.bat b/Solar system/sss3d-source/go.bat new file mode 100644 index 0000000..0223326 --- /dev/null +++ b/Solar system/sss3d-source/go.bat @@ -0,0 +1,23 @@ +@echo off +echo Starting script for the J3D Solar System Simulator +if "%1"=="" goto error + +echo THIS IS A BATCH SCRIPT TO START +echo *** J3D Solar System Simulator *** +echo Diploma thesis of Bernhard Hari and Marcel Portner, 2000 +echo Biel school of engineering and architecture, Biel, Switzerland + +cd %1 +javaw -Xmx128m sss3d.SolarSystemSimulator + +goto end + +:error +echo +echo Usage: go.bat execute_path +echo to run the project J3D Solar System Simulator +echo give the right execute path where you had compiled it +goto end + +:end + diff --git a/Solar system/sss3d-source/images/bg.jpg b/Solar system/sss3d-source/images/bg.jpg new file mode 100644 index 0000000..e9df108 Binary files /dev/null and b/Solar system/sss3d-source/images/bg.jpg differ diff --git a/Solar system/sss3d-source/images/sss.gif b/Solar system/sss3d-source/images/sss.gif new file mode 100644 index 0000000..9526a97 Binary files /dev/null and b/Solar system/sss3d-source/images/sss.gif differ diff --git a/Solar system/sss3d-source/images/warning.gif b/Solar system/sss3d-source/images/warning.gif new file mode 100644 index 0000000..08022b3 Binary files /dev/null and b/Solar system/sss3d-source/images/warning.gif differ diff --git a/Solar system/sss3d-source/joystick.dll b/Solar system/sss3d-source/joystick.dll new file mode 100644 index 0000000..fa4cfce Binary files /dev/null and b/Solar system/sss3d-source/joystick.dll differ diff --git a/Solar system/sss3d-source/spaceshuttle.lws b/Solar system/sss3d-source/spaceshuttle.lws new file mode 100644 index 0000000..2f36b4d --- /dev/null +++ b/Solar system/sss3d-source/spaceshuttle.lws @@ -0,0 +1,85 @@ +LWSC +1 + +FirstFrame 1 +LastFrame 60 +FrameStep 1 +PreviewFirstFrame 1 +PreviewLastFrame 1 +PreviewFrameStep 1 +FramesPerSecond 30.000000 + +LoadObject SpaceShuttle.lwo +ShowObject 8 7 +ObjectMotion (unnamed) + 9 + 1 + -0.01741125 0 -0.07866688 0 0 0 1 1 1 + 0 0 0 0 0 +EndBehavior 1 +ShadowOptions 7 + +AmbientColor 255 255 255 +AmbIntensity 0.250000 + +AddLight +LightName Light +ShowLight 1 7 +LightMotion (unnamed) + 9 + 1 + -2 2 -2 45 35 0 1 1 1 + 0 0 0 0 0 +EndBehavior 1 +LightColor 255 255 255 +LgtIntensity 1.000000 +LightType 0 +ShadowType 1 + +ShowCamera 1 7 +CameraMotion (unnamed) + 9 + 1 + 0 1.097071 -15.54507 0 0 0 1 1 1 + 0 0 0 0 0 +EndBehavior 1 +ZoomFactor 3.200000 +Resolution 1 +PixelAspectRatio 2 +SegmentMemory 50000000 +Antialiasing 0 +AdaptiveSampling 1 +AdaptiveThreshold 16 +FilmSize 2 +FieldRendering 0 +MotionBlur 0 +DepthOfField 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 40 80 +SkyColor 120 180 240 +GroundColor 50 40 30 +NadirColor 100 80 60 +FogType 0 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +ClipRayColors 0 +DataOverlayLabel +FullSceneParamEval 0 + +ViewMode 3 +ViewAimpoint -0.017411 0.000000 -0.078667 +ViewDirection 0.301942 -0.312414 0.000000 +ViewZoomFactor 4.000000 +GridNumber 50 +GridSize 2.000000 +ShowMotionPath 1 +ShowBGImage 0 +ShowFogRadius 0 +ShowRedraw 0 +ShowSafeAreas 0 +ShowFieldChart 0 diff --git a/Solar system/sss3d-source/sss3d/SolarSystemSimulator.java b/Solar system/sss3d-source/sss3d/SolarSystemSimulator.java new file mode 100644 index 0000000..6505613 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/SolarSystemSimulator.java @@ -0,0 +1,325 @@ +/* + File: SolarSystemSimulator.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/SolarSystemSimulator.java,v 1.21 2000/12/15 02:47:29 portm Exp $ + $Author: portm $ + $Date: 2000/12/15 02:47:29 $ + $State: Exp $ + +*/ +package sss3d; + +import sss3d.gui.*; +import sss3d.gui.infobox.*; +import sss3d.gui.startbox.*; +import sss3d.gui.navigationbox.*; +import sss3d.utils.CapturingCanvas3D; +import sss3d.utils.observer.*; +import sss3d.utils.xmlparser.XMLConstants; +import sss3d.viewbranch.*; +import sss3d.contentbranch.*; +import sss3d.utils.joystick.*; // to add joystick functionality +import sss3d.contentbranch.rockets.SceneRocket; + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +import javax.swing.event.*; +import javax.media.j3d.*; +import javax.vecmath.Point3d; + +/** + * Main Programm.
+ * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.21 $ + */ +public class SolarSystemSimulator extends JFrame { + + public InfoBox lnkInfoBox; + private NavigationBox navigationBox; + private ObjectsPositions objPos = null; + private ObjectsInformation objInfo = null; + private StartBox startbox; + + private InitializationObject iniObject; + public ViewBranch lnkViewBranch; + public SceneSolarSystem lnkSceneSolarSystem; + public SmallInfoPanel infoPanel; + public CapturingCanvas3D canvas; + + private Locale locale; + private GraphicsConfiguration config; + private Dimension screenSize; + + /** + * Default constructor. + * Builds up the whole solar system simulator. + */ + public SolarSystemSimulator() { + super("J3D Solar System Simulator Version 1.0"); + + String vers = System.getProperty("java.version"); + if (vers.compareTo("1.3") < 0) { + System.out.println("!!!WARNING: Use JDK version 1.3 or higher!!!"); + System.exit(0); + } + + screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + + this.setVisible(false); + this.addWindowListener(new WindowCmd()); + + // Force SwingApplet to come up in the System L&F + String laf = UIManager.getSystemLookAndFeelClassName(); + try { + UIManager.setLookAndFeel(laf); + // If you want the Cross Platform L&F instead, comment out the above line and + // uncomment the following: + // UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); + } catch (UnsupportedLookAndFeelException exc) { + System.err.println("Warning: UnsupportedLookAndFeel: " + laf); + } catch (Exception exc) { + System.err.println("Error loading " + laf + ": " + exc); + } + + GraphicsConfigTemplate3D tmpl = new GraphicsConfigTemplate3D(); + GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice device = env.getDefaultScreenDevice(); + config = device.getBestConfiguration(tmpl); + + startbox = new StartBox(this); + } + + /** + * Sets the instance of the InitializationObject. + * It also creates a new instance of the ObjectsPosition and + * ObjectsInformation ( Observer Pattern ). + * + * @param iniObject an instance of an InitializationObject + */ + public void setInitializationObject(InitializationObject iniObject) { + this.iniObject = iniObject; + objPos = new ObjectsPositions( iniObject ); + objInfo = new ObjectsInformation( iniObject ); + } + + /** + * Returns the object of the initialization object. + * + * @returns InitializationObject a reference to the initialization object + */ + public InitializationObject getInitializationObject() { + return iniObject; + } + + /** + * Returns the instance of the information observer. + * + * @returns ObjectsInformation a reference to the ObjectsInformation object. + */ + public ObjectsInformation getObjectsInformation() { + return objInfo; + } + + /** + * Creates the solar system 3D scene. + */ + public void createScene() { + this.setSize(screenSize.width - 200, screenSize.height - 150); + this.setLocation((screenSize.width - this.getWidth()) / 2, + (screenSize.height - this.getHeight()) / 2); + + canvas = new CapturingCanvas3D(config); // The used Canvas3D + this.getContentPane().setLayout(new BorderLayout()); + this.getContentPane().add(canvas, BorderLayout.CENTER); + + infoPanel = new SmallInfoPanel(); + double date = ((Double)objInfo.getParameter(XMLConstants.JDAY)).doubleValue(); + infoPanel.setDate(date); + AnimationSpeed animationSpeed = (AnimationSpeed)objInfo.getParameter(XMLConstants.ANIMATIONSPEED); + int factor = 0; + switch(animationSpeed.getType()) { + case AnimationSpeed.DAYS_PER_SECOND: + factor = 1; + break; + case AnimationSpeed.HOURS_PER_SECOND: + factor = 24; + break; + case AnimationSpeed.MINUTES_PER_SECOND: + factor = 24 * 60; + break; + default: + } + int animSpeed = animationSpeed.getValue(); + infoPanel.setStep((double)animSpeed / (double)factor); + this.getContentPane().add(infoPanel, BorderLayout.SOUTH); + + // Create a virtual universe. + VirtualUniverse universe = new VirtualUniverse(); + + // A single hi-res. Locale node is created and attached to + // the virtual universe. + locale = new Locale(universe); + + // Necessary to use NewTextureLoader in other classes. + NewTextureLoader.setImageObserver(this); // AWT Component + + lnkSceneSolarSystem = new SceneSolarSystem(canvas, objPos, objInfo, this); + + BranchGroup scene = lnkSceneSolarSystem.createSceneGraph(); + + // The ViewBranch class creates the instances of ViewPlatform, + // View, etc. + lnkViewBranch = new ViewBranch(this, canvas, null); + BranchGroup view = lnkViewBranch.myViewBranch(); + + lnkInfoBox = new InfoBox(this, objPos, objInfo); + navigationBox = new NavigationBox(this); + + this.setVisible(true); + + // initialize joystick if available + if(((Boolean)objInfo.getParameter(XMLConstants.JOYSTICK)).booleanValue()) { + JoystickInputDevice joyDevice = new JoystickInputDevice(0); + if(joyDevice.initialize()) { + lnkViewBranch.getPhysicalEnvironment().addInputDevice(joyDevice); + + //set joystick enable to spaceshuttle only + SceneRocket sceneRocket = (SceneRocket) lnkSceneSolarSystem.getCelestial("spaceshuttle"); + + Sensor joy1 = joyDevice.getSensor(1); + SensorBehavior s = new SensorBehavior(sceneRocket.getTransformGroup(), joy1); + s.setSchedulingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), Float.MAX_VALUE)); + + BranchGroup joystick = new BranchGroup(); + joystick.addChild(s); + joystick.compile(); + + locale.addBranchGraph(joystick); + } + } + locale.addBranchGraph(view); + locale.addBranchGraph(scene); + } + + /** + * Creates the solar system 3D scene. + * Used if simulator is started with 3D Glasses. + */ + public void createStereoScene() { + this.setSize(screenSize.width, screenSize.height); + this.setLocation(0, 0); + + Canvas3D canvasL = new Canvas3D(config); + Canvas3D canvasR = new Canvas3D(config); + + canvasL.setMonoscopicViewPolicy(View.LEFT_EYE_VIEW); + canvasR.setMonoscopicViewPolicy(View.RIGHT_EYE_VIEW); + + canvasL.setStereoEnable(true); + canvasR.setStereoEnable(true); +/* + Point3d pointL = new Point3d(0.0142, 0.135, 0.4572); + Point3d pointR = new Point3d(0.0208, 0.135, 0.4572); + canvasL.setLeftManualEyeInImagePlate(pointL); + canvasR.setRightManualEyeInImagePlate(pointR); +*/ + Screen3D screenL = canvasL.getScreen3D(); + Screen3D screenR = canvasR.getScreen3D(); + + screenL.setPhysicalScreenHeight((screenL.getPhysicalScreenHeight() * 1.5)); + screenR.setPhysicalScreenHeight((screenR.getPhysicalScreenHeight() * 1.5)); + + Glasses3DLayout layout = new Glasses3DLayout(screenSize.width, screenSize.height); + + this.getContentPane().setBackground(Color.black); + this.getContentPane().setLayout(layout); + this.getContentPane().add(canvasL, layout.getLeftPanel()); + this.getContentPane().add(canvasR, layout.getRightPanel()); + + // Create a virtual universe. + VirtualUniverse universe = new VirtualUniverse(); + + // A single hi-res. Locale node is created and attached to + // the virtual universe. + Locale locale = new Locale(universe); + + // Necessary to use NewTextureLoader in other classes. + NewTextureLoader.setImageObserver(this); // AWT Component + + lnkSceneSolarSystem = new SceneSolarSystem(canvasL, objPos, objInfo, this); + + locale.addBranchGraph(lnkSceneSolarSystem.createSceneGraph()); + + // The ViewBranch class creates the instances of ViewPlatform, + // View, etc. + lnkViewBranch = new ViewBranch(this, canvasL, canvasR); + + locale.addBranchGraph(lnkViewBranch.myViewBranch()); + + this.setVisible(true); + this.setResizable(false); + } + + /** + * Adds the navigation panel to the right side of the simulator. + */ + public void addNavigation() { + this.getContentPane().add(navigationBox, BorderLayout.EAST); + this.setVisible(true); + } + + /** + * Removes the navigation panel to the right side of the simulator. + */ + public void removeNavigation() { + this.getContentPane().remove(navigationBox); + this.setVisible(true); + } + + /** + * Removes the scene. + * + * @param scene a reference to the BranchGroup that has to be removed + */ + public void removeScene(BranchGroup scene) { + locale.removeBranchGraph(scene); + } + + /** + * Adds a new scene. + * + * @param scene a reference to the BranchGroup that has to be added + */ + + public void addScene(BranchGroup scene) { + locale.addBranchGraph(scene); + } + + /** + * Window Listener for the SolarSystemSimulator JFrame. + */ + class WindowCmd extends WindowAdapter { + public void windowClosing(WindowEvent e) { + System.exit(0); + } + } + + /** + * Allows SolarSystemSimulator to be run as an application. + * @param java.lang.String args[] + */ + public static void main(String args[]) { + System.out.println("\nSolarSystemSimulator copyright Bernhard Hari & Marcel Portner"); + new SolarSystemSimulator(); + } +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/calculations/DMSConv.java b/Solar system/sss3d-source/sss3d/calculations/DMSConv.java new file mode 100644 index 0000000..ff84f01 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/calculations/DMSConv.java @@ -0,0 +1,128 @@ +/* + File: DMSConv.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/calculations/DMSConv.java,v 1.2 2000/12/12 11:16:34 portm Exp $ + $Author: portm $ + $Date: 2000/12/12 11:16:34 $ + $State: Exp $ + +*/ +package sss3d.calculations; + +/** + * This class convert the angle. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.2 $ + */ +public class DMSConv { + + private int d; // Winkelgrade + private int m; // Bogenminuten + private double s; // Bogensekunden + + private double dd; // Winkel in Grad in dezimaler Darstellung + + /** + * Initializes the DMSConv object with all value to zero. + */ + public DMSConv() { + d = 0; + m = 0; + s = 0.0; + dd = 0.0; + } + + /** + * Calculate the arcminute and arcsecond to a given angle. + * + * @param dd the angle in degree in decimal notation. + */ + public DMSConv(double dd) { + this.dd = dd; + double x = StrictMath.abs(dd); + d = (int)x; + x = (x - d) * 60.0; + m = (int)x; + s = (x - m) * 60.0; + + if(dd < 0.0) { + if(d != 0) { + d *= -1; + } else { + if(m != 0) { + m *= -1; + } else { + s *= -1.0; + } + } + } + } + + /** + * Calculate the angle in decimal notation with the three values. + * + * @param d the angle in degree []. + * @param m the arcminute [']. + * @param s the arcsecond ['']. + */ + public DMSConv(int d, int m, double s) { + this.d = d; + this.m = m; + this.s = s; + + double sign; + if((d < 0) || (m < 0) || (s < 0)) { + sign = -1.0; + } else { + sign = 1.0; + } + + dd = sign * (StrictMath.abs(d) + StrictMath.abs(m) / 60.0 + + StrictMath.abs(s) / 3600.0); + } + + /** + * Give the angle (or the hour). + * + * @return the angle. + */ + public int getAngle() { + return d; + } + + /** + * Give the arcminute (or minute). + * + * @return the arcminute. + */ + public int getMin() { + return m; + } + + /** + * Give the arcsecond (or second). + * + * @return the arcsecond. + */ + public double getSec() { + return s; + } + + /** + * Give the angle in decimal notation. + * + * @return the angle. + */ + public double getDecimal() { + return dd; + } +} diff --git a/Solar system/sss3d-source/sss3d/calculations/MoreMath.java b/Solar system/sss3d-source/sss3d/calculations/MoreMath.java new file mode 100644 index 0000000..3e0736b --- /dev/null +++ b/Solar system/sss3d-source/sss3d/calculations/MoreMath.java @@ -0,0 +1,125 @@ +/* + File: MoreMath.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/calculations/MoreMath.java,v 1.2 2000/12/12 11:16:34 portm Exp $ + $Author: portm $ + $Date: 2000/12/12 11:16:34 $ + $State: Exp $ + +*/ +package sss3d.calculations; + +/** + * This class contains mathematical function who are not supportet by JDK.
+ * For example sinus hyperbola: + *
+ *    use : MoreMath.sinh(x);
+ * 
+ * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.2 $ + */ +public final class MoreMath { + + /** + * The constant value of 2 * PI. + */ + public static final double PI2 = 2.0 * StrictMath.PI; + + /** + * The constant value for calculation to radian. + */ + public static final double RAD = StrictMath.PI / 180.0; + + /** + * The constant value for calculation to degree. + */ + public static final double DEG = 180.0 / StrictMath.PI; + + /** + * The constant value for calculation to arcs. + */ + public static final double ARCS = 3600.0 * 180.0 / StrictMath.PI; + + /** + * Give from a double value the decimal place. + * + * @param x the double value where we want the decimal place. + * + * @return the decimal place of the double value. + */ + public static double frac(double x) { + return x - StrictMath.floor(x); + } + + /** + * Calculate x mod y. + * + * @param x a double value. + * @param y a double value. + * + * @return the modulo part of x modulo y. + */ + public static double modulo(double x, double y) { + return y * frac(x / y); + } + + /** + * Calculate the sinus hyperbola. + * + * @param x an angle, in radians. + * + * @return the sinh of x [sinh(x) = (e^x - e^-x) / 2]. + */ + public static double sinh(double x) { + return (StrictMath.exp(x) - StrictMath.exp(-x)) / 2.0; + } + + /** + * Calculate the cosinus hyperbola. + * + * @param x an angle, in radians. + * + * @return the cosh of x [cosh(x) = (e^x + e^-x) / 2]. + */ + public static double cosh(double x) { + return (StrictMath.exp(x) + StrictMath.exp(-x)) / 2.0; + } + + /** + * Calculate the log of basis 10. + * + * @param x a number greater than 0.0. + * + * @return the log of basis 10. + */ + public static double log10(double x) { + return StrictMath.log(x) / StrictMath.log(10); + } + + /** + * Calculate the cos(alpha+beta) and sin(alpha+beta) with the help of addition + * low. + * + * @param c1 the cos of alpha. + * @param s1 the sin of alpha. + * @param c2 the cos of beta. + * @param s2 the sin of beta. + * + * @return a double array with cos(alpha+beta) and sin(alpha+beta). + */ + public static double[] addThe(double c1, double s1, double c2, double s2) { + double[] cs = new double[2]; + cs[0] = c1 * c2 - s1 * s2; + cs[1] = s1 * c2 + c1 * s2; + return cs; + } +} diff --git a/Solar system/sss3d-source/sss3d/calculations/OrbitCalculator.java b/Solar system/sss3d-source/sss3d/calculations/OrbitCalculator.java new file mode 100644 index 0000000..ccc4740 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/calculations/OrbitCalculator.java @@ -0,0 +1,58 @@ +/* + File: OrbitCalculator.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/calculations/OrbitCalculator.java,v 1.4 2000/12/13 13:36:17 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:36:17 $ + $State: Exp $ + +*/ +package sss3d.calculations; + +import sss3d.contentbranch.CelestialObjectInfo; + +import javax.vecmath.*; + +/** + * Abstract class that defines the skeleton for all used calculation + * methods. At the moment we have implemented the ellipse equation method. + * The method Kepler equation is not implemented yet. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.4 $ + * @see sss3d.calculations.ellipseequation.EllipseEquation + * @see sss3d.calculations.keplerequation.KeplerEquation + */ +abstract public class OrbitCalculator { + /** + * Returns the positions of the given object. + * + * @param objInfo Information about the object. + * @param jDay calculates positions corresponding to the given julian day. + * @param compressed true if the universe is logorithmic compressed or false if + * it has the real proportion. + * @return Point3f[] an array of vectors containing the positions. + */ + public abstract Point3f[] getPositions(CelestialObjectInfo objInfo, double jDay, boolean compressed); + + /** + * Returns an array of positons for the given positions, based + * on the given jDay.
+ * NOT IN USE AT THE MOMENT. + * + * @param objPos actual positions of the object. + * @param jDay calculates positions corresponding to the given julian day. + * @param compressed true if the universe is logorithmic compressed or false if + * it has the real proportion. + * @return Point3f[] an array of vectors containing the points + */ + public abstract Point3f[] updatePositions(Point3f[] objPos, double jDay, boolean compressed); +} diff --git a/Solar system/sss3d-source/sss3d/calculations/Polar.java b/Solar system/sss3d-source/sss3d/calculations/Polar.java new file mode 100644 index 0000000..87b7abe --- /dev/null +++ b/Solar system/sss3d-source/sss3d/calculations/Polar.java @@ -0,0 +1,208 @@ +/* + File: Polar.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/calculations/Polar.java,v 1.3 2000/12/12 11:16:35 portm Exp $ + $Author: portm $ + $Date: 2000/12/12 11:16:35 $ + $State: Exp $ + +*/ +package sss3d.calculations; + +/** + * This class administrated the polar coordinate system. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.3 $ + */ +public class Polar { + + private double phi; // Azimut des Vektors + private double theta; // Elevation des Vektors + private double r; // Betrag des Vektors + + private double x, y, z; + + /** + * Constructor + */ + public Polar() { + phi = 0.0; + theta = 0.0; + r = 0.0; + x = 0.0; + y = 0.0; + z = 0.0; + } + + /** + * Initializes the Polar with distance = 1.0 + * and a given azimut and elevation. + * + * @param az the azimut. + * @param elev the elevation. + */ + public Polar(double az, double elev) { + phi = az; + theta = elev; + r = 1.0; + toXYZ(); + } + + /** + * Initializes the Polar with a distance, + * a given azimut and elevation. + * + * @param az the azimut. + * @param elev the elevation. + * @param r the distance. + */ + public Polar(double az, double elev, double r) { + phi = az; + theta = elev; + this.r = r; + toXYZ(); + } + + /** + * Set the Polar with a distance, + * a given azimut and elevation. + * + * @param az the azimut. + * @param elev the elevation. + * @param r the distance. + */ + public void setPolar(double az, double elev, double r) { + phi = az; + theta = elev; + this.r = r; + toXYZ(); + } + + /** + * Scale the distance (r) of the celestial object position + * to a useful value. + * + * @param logarithmic the distance in logarithmic factor or only a + * scale factor. + * @param scale the scaling factor. + */ + public void scaleDistance(boolean logarithmic, double scale) { + if(logarithmic) { + r = 5.0 * StrictMath.log(r * scale); + } else { + r *= scale; + } + toXYZ(); + } + + /** + * Calculate the r, phi and theta to x, y and z. + */ + private void toXYZ() { + x = r * StrictMath.cos(phi) * StrictMath.cos(theta); + y = r * StrictMath.sin(phi) * StrictMath.cos(theta); + z = r * StrictMath.sin(theta); + } + + /** + * Set the x, y and z value and calculate the + * r, phi and theta parameter. + * + * @param x the x position in the universe. + * @param y the y position in the universe. + * @param z the z position in the universe. + */ + public void setXYZ(double x, double y, double z) { + + this.x = x; + this.y = y; + this.z = z; + + // Laenge der Projektion des Vektors in die x-y-Ebene + double rohSqr = x * x + y * y; + + // Betrag des Vektors + r = StrictMath.sqrt(rohSqr + z * z); + + // Azimut des Vektors + if((x == 0.0) && (y == 0.0)) { + phi = 0.0; + } else { + phi = StrictMath.atan2(y, x); + } + if(phi < 0.0) { + phi += MoreMath.PI2; + } + + // Elevation des Vektors + double roh = StrictMath.sqrt(rohSqr); + if((z == 0.0) && (roh == 0.0)) { + theta = 0.0; + } else { + theta = StrictMath.atan2(z, roh); + } + } + + /** + * Get the azimut (phi) of the current position. + * + * @return the azimut. + */ + public double getAzimut() { + return phi; + } + + /** + * Get the elevation (theta) of the current position. + * + * @return the elevation. + */ + public double getElevation() { + return theta; + } + + /** + * Get the distance (r) of the current position. + * + * @return the distance. + */ + public double getDistance() { + return r; + } + + /** + * Get the x value of the current position. + * + * @return the x value. + */ + public double getX() { + return x; + } + + /** + * Get the y value of the current position. + * + * @return the y value. + */ + public double getY() { + return y; + } + + /** + * Get the z value of the current position. + * + * @return the z value. + */ + public double getZ() { + return z; + } +} diff --git a/Solar system/sss3d-source/sss3d/calculations/PositionsArray.java b/Solar system/sss3d-source/sss3d/calculations/PositionsArray.java new file mode 100644 index 0000000..38b922e --- /dev/null +++ b/Solar system/sss3d-source/sss3d/calculations/PositionsArray.java @@ -0,0 +1,73 @@ +/* + File: PositionsArray.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/calculations/PositionsArray.java,v 1.2 2000/12/12 11:16:35 portm Exp $ + $Author: portm $ + $Date: 2000/12/12 11:16:35 $ + $State: Exp $ + +*/ +package sss3d.calculations; + +import javax.vecmath.Point3f; + +/** + * This class is used to keep the calculated positions of + * a given object. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.2 $ + */ +public class PositionsArray { + + private String name; // id of object + private Point3f[] positions; // positions of the given object + + /** + * Constructor + * + * @param name the identification of the object. + * @param positions[] an array of three-dimensional points. + */ + public PositionsArray(String name, Point3f positions[]) { + this.name = name; + this.positions = positions; + } + + /** + * This method replaces the old positions of the object + * with the given calculated positions. + * + * @param positions[] the new positions ;an array of three-dimensional points. + */ + public void setPositions(Point3f positions[]){ + this.positions = null; + this.positions = positions; + } + + /** + * Returns the positions associated with this object. + * + * @return Point3f[] an array of three-dimensional points. + */ + public Point3f[] getPositions() { + return positions; + } + + /** + * Returns the id of this object. + * + * @return String the id of this object. + */ + public String getId() { + return name; + } +} diff --git a/Solar system/sss3d-source/sss3d/calculations/TimeCalc.java b/Solar system/sss3d-source/sss3d/calculations/TimeCalc.java new file mode 100644 index 0000000..7261854 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/calculations/TimeCalc.java @@ -0,0 +1,182 @@ +/* + File: TimeCalc.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/calculations/TimeCalc.java,v 1.3 2000/12/13 13:36:17 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:36:17 $ + $State: Exp $ + +*/ +package sss3d.calculations; + +/** + * This class calculate the time. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.3 $ + */ +public class TimeCalc { + + /** + * Constructor + */ + public TimeCalc() { + + } + + /** + * Get the difference between the ephemeriden time and the world time. + * This method can only calculate the difference of this time from 1825 to 2005. + * + * @param time the time in julianish century. + * + * @return the difference between the the ephemeriden time and the world time in + * second. + */ + public double getETminUT(double time) { + int i = (int)StrictMath.floor(time / 0.25); + double t = time - i * 0.25; + double dtsec; + + if((time < -1.75) || (0.05 < time)) { + return Double.NaN; + } else { + switch(i) { + case -7: dtsec = 10.4 + t * (-80.8 + t * + ( 413.9 + t * ( -572.3))); break; // 1825- + case -6: dtsec = 6.6 + t * ( 46.3 + t * + (-358.4 + t * ( 18.8))); break; // 1850- + case -5: dtsec = -3.9 + t * (-10.8 + t * + (-166.2 + t * ( 867.4))); break; // 1875- + case -4: dtsec = -2.6 + t * (114.1 + t * + ( 327.5 + t * (-1467.4))); break; // 1900- + case -3: dtsec = 24.2 + t * ( -6.3 + t * + ( -8.2 + t * ( 483.4))); break; // 1925- + case -2: dtsec = 29.3 + t * ( 32.5 + t * + ( -3.8 + t * ( 550.7))); break; // 1950- + case -1: dtsec = 45.3 + t * (130.5 + t * + (-570.5 + t * ( 1516.7))); break; // 1975- + case 0: t += 0.25; + dtsec = 45.3 + t * (130.5 + t * + (-570.5 + t * ( 1516.7))); break; // 2000- + // 2005 + default: dtsec = Double.NaN; + } + } + return dtsec; + } + + + /** + * Get the Greenwich-time from a modified julianish time. + * + * @param time the modified julianish time. + * + * @return the Greenwich-time in [rad]. + */ + public double gmst(double mjd) { + + double secs = 86400.0; // Anzahl der Sekunden je Tag + + double mjd_0 = StrictMath.floor(mjd); + double ut = secs * (mjd - mjd_0); // [s] + double t_0 = (mjd_0 - 51544.5) / 36525.0; + double t = (mjd - 51544.5) / 36525.0; + + double gmst = 24110.54841 + 8640184.812866 * t_0 + + 1.0027379093 * ut + (0.093104 - 6.2e-6 * t) * t * t; // [sec] + + return (MoreMath.PI2 / secs) * MoreMath.modulo(gmst, secs); // [Rad] + } + + /** + * Get the modified julianish time from the calendar date. + * + * @param year the year. + * @param month the month. + * @param day the day. + * @param hour the hour. + * @param min the minute. + * @param sec the second. + * + * @return the modified julianish time. + */ + public double mjd(int year, int month, int day, + int hour, int min, double sec) { + + if(month <= 2) { + month += 12; + --year; + } + + int b; + + if((10000L * (long)year + 100L * (long)month + (long)day) <= 15821004L) { + b = -2 + ((year + 4716) / 4) - 1179; // Julianischer Kalender + } else { + b = (year / 400) - (year / 100) + (year / 4); // Gregorianischer Kalender + } + + double mjdMidnight = (double)(365L * (long)year - 679004L + (long)b + + (long)(30.6001 * (double)(month + 1)) + (long)day); + DMSConv dms = new DMSConv(hour, min, sec); + double fracOfDay = dms.getDecimal() / 24.0; + + return mjdMidnight + fracOfDay; + } + + /** + * Get from a modified julianish time an int array with all calendar + * values. + * + * @param mjd the modified julianish time. + * + * @return an int array with the follow values:
+ * int[0] = year.
+ * int[1] = month.
+ * int[2] = day.
+ * int[3] = hour.
+ * int[4] = minute.
+ * int[5] = second. + */ + public int[] calDat(double mjd) { + + int[] result = new int[6]; + + // Rechne julianische Tageszahl in Kalenderdatum um + long a = (long)(mjd + 2400001.0); + long b, c; + + if(a < 2299161L) { // Julianischer Kalender + b = 0; + c = a + 1524L; + } else { // Gregorianischer Kalender + b = (long)(((double)a - 1867216.25) / 36524.25); + c = a + b - (b / 4L) + 1525L; + } + + long d = (long)(((double)c - 122.1) / 365.25); + long e = 365L * d + d / 4; + long f = (long)((double)(c - e) / 30.6001); + + result[2] = (int)(c - e - (long)(30.6001 * (double)f)); // Day + result[1] = (int)(f - 1L - 12L * (f / 14L)); // Month + result[0] = (int)(d - 4715L - ((7L + (long)result[1]) / 10L)); // Year + + double time = 24.0 * (mjd - StrictMath.floor(mjd)); + DMSConv dms = new DMSConv(time); + result[3] = dms.getAngle(); // Hour + result[4] = dms.getMin(); // Minute + result[5] = (int)dms.getSec(); // Second + + return result; + } +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/calculations/Vec3D.java b/Solar system/sss3d-source/sss3d/calculations/Vec3D.java new file mode 100644 index 0000000..44acbaa --- /dev/null +++ b/Solar system/sss3d-source/sss3d/calculations/Vec3D.java @@ -0,0 +1,153 @@ +/* + File: Vec3D.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/calculations/Vec3D.java,v 1.6 2000/12/15 02:48:08 portm Exp $ + $Author: portm $ + $Date: 2000/12/15 02:48:08 $ + $State: Exp $ + +*/ +package sss3d.calculations; + +import javax.vecmath.Vector3d; +import javax.vecmath.Matrix3d; + +/** + * This class expand the Vector3d class of the Java3D. + * Now we can use also the polar coordinate system and + * we have two new calculation methode. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.6 $ + * @see sss3d.calculations.Polar + */ +public class Vec3D extends Vector3d { + + private Polar polar; + + /** + * Initializes a new Vec3D with a reference to the Polar class. + */ + public Vec3D() { + super(); + polar = new Polar(); + } + + /** + * Initializes a new Vec3D with his components. + * + * @param x the x component. + * @param y the y component. + * @param z the z component. + */ + public Vec3D(double x, double y, double z) { + super(x, y, z); + polar = new Polar(); + polar.setXYZ(x, y, z); + } + + /** + * Initializes a new Vec3D with a polar component object. + * + * @param polar a polar object with a radius + * and two angles. + * @see sss3d.calculations.Polar + */ + public Vec3D(Polar polar) { + super(); + this.polar = polar; + x = polar.getX(); + y = polar.getY(); + z = polar.getZ(); + } + + /** + * Calculate the norm of this vector. + * + * @return the norm of this vector. + */ + public double norm() { + return StrictMath.sqrt(dot(this)); + } + + /** + * The multiplication (product) of this vector and a matrix. + * The result is in this Vec3D object. + * + * @param mat a Matrix3d object. + */ + public void mul(Matrix3d mat) { + double m_x = 0.0; + m_x += mat.m00 * x; + m_x += mat.m10 * y; + m_x += mat.m20 * z; + + double m_y = 0.0; + m_y += mat.m01 * x; + m_y += mat.m11 * y; + m_y += mat.m21 * z; + + double m_z = 0.0; + m_z += mat.m02 * x; + m_z += mat.m12 * y; + m_z += mat.m22 * z; + + x = m_x; + y = m_y; + z = m_z; + } + + /** + * Scale the distance (r) of the celestial object position + * to a useful value. + * + * @param logarithmic the distance in logarithmic factor or only a + * scale factor. + * @param scale the scaling factor. + */ + public void scaleDistance(boolean logarithmic, double scale) { + polar.setXYZ(x, y, z); + polar.scaleDistance(logarithmic, scale); + x = polar.getX(); + y = polar.getY(); + z = polar.getZ(); + } + + /** + * Calculate the azimut (phi) of this vector. + * + * @return the azimut. + */ + public double getAzimut() { + polar.setXYZ(x, y, z); + return polar.getAzimut(); + } + + /** + * Calculate the elevation (theta) of this vector. + * + * @return the elevation. + */ + public double getElevation() { + polar.setXYZ(x, y, z); + return polar.getElevation(); + } + + /** + * Calculate the distance (r) of this vector. + * + * @return the distance. + */ + public double getDistance() { + polar.setXYZ(x, y, z); + return polar.getDistance(); + } +} diff --git a/Solar system/sss3d-source/sss3d/calculations/constants/AstronomicalConstants.java b/Solar system/sss3d-source/sss3d/calculations/constants/AstronomicalConstants.java new file mode 100644 index 0000000..6c9af47 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/calculations/constants/AstronomicalConstants.java @@ -0,0 +1,92 @@ +/* + File: AstronomicalConstants.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/calculations/constants/AstronomicalConstants.java,v 1.5 2000/12/12 11:16:46 portm Exp $ + $Author: portm $ + $Date: 2000/12/12 11:16:46 $ + $State: Exp $ + +*/ +package sss3d.calculations.constants; + +/** + * This class contains all important astronomical constants.
+ * For example AU is equivalent to one astronomical unit (AU): + *
+ *    use : AstronomicalConstants.AU = 149597870.66;
+ * 
+ * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.5 $ + */ +public final class AstronomicalConstants { + + /** + * The radius of the earth in [km]. + */ + public static final double R_EARTH = 6378.137; // [km] + + /** + * The radius of the sun in [km]. + */ + public static final double R_SUN = 696000.0; // [km] + + /** + * The radius of the moon in [km]. + */ + public static final double R_MOON = 1737.4; // [km] + + /** + * The modified julianish time in the epoch 2000. + */ + public static final double MJD_J2000 = 51544.5; // MJD der Epoche J2000.0 + + /** + * The epoch of the year 2000. + */ + public static final double T_J2000 = 0.0; // Epoche J2000.0 + + /** + * The epoch of the year 1950. + */ + public static final double T_B1950 = -0.500002108; // Epoche B1950 + + /** + * The constant of gravitation. + */ + public static final double KGAUSS = 0.01720209895; // Gravitationskonstante + + /** + * The product of the constant gravitation and the central mass. + */ + public static final double GM_SUN = KGAUSS * KGAUSS; // [AE^3/d^2] + + /** + * The astronomical unit [km]. + */ + public static final double AU = 149597870.66; // astronomical unit [km] + + /** + * The speed of light. + */ + public static final double C_LIGHT = 173.14; // Lichtgeschwindigkeit [AE/d] + + /** + * A earth year in days. + */ + public static final double DAYS = 365.242190; + + /** + * The 'smallest' exactness of a double value. + * Value from the C++ library. + */ + public static final double EPSILON = 2.2204460492503131E-016; +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/calculations/ellipseequation/EllipseEquation.java b/Solar system/sss3d-source/sss3d/calculations/ellipseequation/EllipseEquation.java new file mode 100644 index 0000000..76208c4 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/calculations/ellipseequation/EllipseEquation.java @@ -0,0 +1,158 @@ +/* + File: EllipseEquation.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/calculations/ellipseequation/EllipseEquation.java,v 1.4 2000/12/13 14:08:11 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 14:08:11 $ + $State: Exp $ + +*/ +package sss3d.calculations.ellipseequation; + +import sss3d.calculations.*; +import sss3d.contentbranch.*; + +import javax.vecmath.*; + +/** + * Used to calculate the planet positions using ellipse equation.
+ * This is a simple calculation method. For exact positions you + * have to use the class KeplerEquation. + * For example: + *
+ *    HOWTO use class / spezial Instructions.
+ *    EllipseEquation ellipseeq = new EllipseEquation();
+ *    Point3f [] positions = ellipseeq.getPositions(CelestialObjectInfo,0);
+ * 
+ * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.4 $ + * @see sss3d.calculations.keplerequation.KeplerEquation + */ +public class EllipseEquation extends OrbitCalculator { + + private double max; // maximum distance from sun + private double min; // minimum distance from sun + private double x0 = 0; // center -> sun X-axe + private double y0 = 0; // center -> sun Y-axe + private double z0 = 0; // center -> sun Z-axe + private double alpha = 0; // angle - orbit inclination to ecliptic + + /** + * Returns the positions of the given planet. + * The algorithm used is an ellipse equation. + * + * @param objInfo Information about the planet. + * @param jDay calculates positions corresponding to the given julian day + * @param compressed true if the universe is logorithmic compressed or false if + * it has the real proportion. + * @return Point3f[] an array of vectors containing the positions. + */ + public Point3f[] getPositions(CelestialObjectInfo objInfo, double jDay, boolean compressed ) { + + /** + * We used PLANPOS from the Book "Astronomie mit dem Personal Computer" + * - ISBN : 3-540-66218-9 3.Auflage, to calculate the first positions of + * the planets. Date given : Year 2000, Jan, 1., Time 00.000. + * J2000 => JD : 2451544.5 + * We got these values : + * [degree] [minutes] [seconds] + * Sun 0 0 0 + * Mercury 252 24 36.4 + * Venus 181 47 37.5 + * Earth 99 52 04.0 + * Mars 359 08 04.0 + * Jupiter 36 14 57.3 + * Saturn 45 42 12.5 + * Uranus 316 24 41.6 + * Neptune 303 55 47.9 + * Pluto 250 32 32.0 + */ + + double degree = 0.0; + String name = (objInfo.getName()).toLowerCase(); + + if(name.equals("sun")){ + degree = 0.0; + } else if(name.equals("mercury")){ + degree = 252.0; + } else if(name.equals("venus")){ + degree = 181.0; + } else if(name.equals("earth")){ + degree = 99.0; + } else if(name.equals("mars")){ + degree = 359.0; + } else if(name.equals("jupiter")){ + degree = 36.0; + } else if(name.equals("saturn")){ + degree = 45.0; + } else if(name.equals("uranus")){ + degree = 316.0; + } else if(name.equals("neptune")){ + degree = 303.0; + } else if(name.equals("pluto")){ + degree = 250.0; + } else { + // do nothing degree = 0.0 + } + + // last is used to mark the end of the array. + int nbrOfPoints = objInfo.getNbrOfPositions(); + + // calculate start position of planet (position); + // between 0 and NbrOfPositions -1 + int start = (int) Math.round( (degree/360*(nbrOfPoints-1)) ); + + max = objInfo.getMaxDistanceFromSun(); + min = objInfo.getMinDistanceFromSun(); + alpha = Math.toRadians(objInfo.getOrbitInclinationToEcliptic()); + + Point3f positions[] = new Point3f[nbrOfPoints]; + + double t = 0; + + for(int i = 0; i < nbrOfPoints; i++){ + + t = ((double)(i) / nbrOfPoints)*(2*Math.PI); + + // calculate each x,y,z position for every point + double x = x0 + max*Math.cos(t); + double z = z0 + (-min)*Math.sin(t); + double y = y0 + x * Math.tan(alpha); + + // add calculated point to the point array + // add start point of the planet (degree) to the beginning + // of the positions array + if( i < start){ + positions[(nbrOfPoints - start + i)] = new Point3f((float)x,(float)y,(float)z); + } else { + positions[(i - start)] = new Point3f((float)x,(float)y,(float)z); + } + + } + return positions; + } + + /** + * Returns an array of positons for the given positions, based + * on the given jDay.
+ * NOT IN USE AT THE MOMENT. + * + * @param objPos actual positions of the object. + * @param jDay calculates positions corresponding to the given julian day + * @param compressed true if the universe is logorithmic compressed or false if + * it has the real proportion. + * @return Point3f[] an array of vectors containing the points + */ + public Point3f[] updatePositions(Point3f[] objPos, double jDay, boolean compressed) { + return objPos; + } +} diff --git a/Solar system/sss3d-source/sss3d/calculations/keplerequation/KeplerEquation.java b/Solar system/sss3d-source/sss3d/calculations/keplerequation/KeplerEquation.java new file mode 100644 index 0000000..9a72d3b --- /dev/null +++ b/Solar system/sss3d-source/sss3d/calculations/keplerequation/KeplerEquation.java @@ -0,0 +1,252 @@ +/* + File: KeplerEquation.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/calculations/keplerequation/KeplerEquation.java,v 1.10 2000/12/13 13:36:38 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:36:38 $ + $State: Exp $ + +*/ +package sss3d.calculations.keplerequation; + +import sss3d.calculations.constants.AstronomicalConstants; +import sss3d.utils.SSS3dConstants; +import sss3d.utils.astronomy.*; +import sss3d.calculations.*; +import sss3d.contentbranch.*; +import javax.vecmath.Point3f; +import javax.vecmath.Matrix3d; + +/** + * Used to calculate the planet positions using kepler equation.
+ * This part is left as a exercise for the diploma work, at the end of + * October 2000. We use the simpler ellipse equation method instead. + * For example: + *
+ *    use : 
+ *    KeplerEquation keplereq = new KeplerEquation();
+ *    Point3f [] positions = keplereq.getPositions(CelestialObjectInfo,time);
+ * 
+ * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.10 $ + * @see sss3d.calculations.ellipseequation.EllipseEquation + */ +public class KeplerEquation extends OrbitCalculator { + + private CelestialObjectInfo objInfo; + private double jDay; + private boolean compressed; + private boolean kepler; + private int nbrOfPoints; + private Point3f[] positions; + + /** + * Returns the positions of the given planet. + * The algorithm used is the kepler equation. + * + * @param objInfo Information about the planet. + * @param jDay calculates positions corresponding to the given julian day + * @param compressed true if the universe is logorithmic compressed or false if + * it has the real proportion. + * @return Point3f[] an array of vectors containing the positions. + */ + public Point3f[] getPositions(CelestialObjectInfo objInfo, double jDay, boolean compressed) { + this.objInfo = objInfo; + // modifiziertes julianisches Datum + this.jDay = jDay - 2400000.5; + this.compressed = compressed; + kepler = false; + + // last is used to mark the end of the array. + nbrOfPoints = objInfo.getNbrOfPositions(); + + positions = new Point3f[nbrOfPoints]; + + String type = objInfo.getType(); + + if(type.equals(SSS3dConstants.TYPES[SSS3dConstants.PLANET_TYPE])) { + int planetNr = -1; + String name = objInfo.getName(); + if(name.equals(SSS3dConstants.CELESTIAL[SSS3dConstants.MERCURY])) { + planetNr = SSS3dConstants.MERCURY; + } else if(name.equals(SSS3dConstants.CELESTIAL[SSS3dConstants.VENUS])) { + planetNr = SSS3dConstants.VENUS; + } else if(name.equals(SSS3dConstants.CELESTIAL[SSS3dConstants.EARTH])) { + planetNr = SSS3dConstants.EARTH; + } else if(name.equals(SSS3dConstants.CELESTIAL[SSS3dConstants.MARS])) { + planetNr = SSS3dConstants.MARS; + } else if(name.equals(SSS3dConstants.CELESTIAL[SSS3dConstants.JUPITER])) { + planetNr = SSS3dConstants.JUPITER; + } else if(name.equals(SSS3dConstants.CELESTIAL[SSS3dConstants.SATURN])) { + planetNr = SSS3dConstants.SATURN; + } else if(name.equals(SSS3dConstants.CELESTIAL[SSS3dConstants.URANUS])) { + planetNr = SSS3dConstants.URANUS; + } else if(name.equals(SSS3dConstants.CELESTIAL[SSS3dConstants.NEPTUNE])) { + planetNr = SSS3dConstants.NEPTUNE; + } else if(name.equals(SSS3dConstants.CELESTIAL[SSS3dConstants.PLUTO])) { + planetNr = SSS3dConstants.PLUTO; + } else { + System.out.println("Error in KeplerEquation: planet not knowned"); + return null; + } + calcPlanetPos(planetNr); + } else if(type.equals(SSS3dConstants.TYPES[SSS3dConstants.MOON_TYPE])) { + String name = objInfo.getName(); + if(name.equals(SSS3dConstants.CELESTIAL[SSS3dConstants.MOON])) { + calcOurMoonPos(); + } else { + calcMoonPos(); + } + } else if(type.equals(SSS3dConstants.TYPES[SSS3dConstants.COMET_TYPE])) { + calcCometPos(); + } else { + System.out.println("Error in KeplerEquation: Other not supported yet"); + return null; + } + return positions; + } + + /** + * Returns an array of positons for the given positions, based + * on the given jDay.
+ * + * @param objPos actual positions of the object. + * @param jDay calculates positions corresponding to the given julian day + * @param compressed true if the universe is logorithmic compressed or false if + * it has the real proportion. + * @return Point3f[] an array of vectors containing the points + */ + public Point3f[] updatePositions(Point3f[] objPos, double jDay, boolean compressed) { + return objPos; + } + + /** + * Calculate the positions of the given planet as kepler ellipse. + * + * @param planetNr the planet number for the identification. + */ + private void calcPlanetPos(int planetNr) { + double step = objInfo.getOrbitPeriod() / + (double)nbrOfPoints * AstronomicalConstants.DAYS; + Planets planet = new Planets(); + PrecNut prec = new PrecNut(); + + for(int i = 0; i < nbrOfPoints; i++) { + double time = ((double)i * step + jDay - + AstronomicalConstants.MJD_J2000) / 36525.0; + + Vec3D planpos; + if(kepler) { + planpos = planet.kepPosition(planetNr, time); + } else { + planpos = planet.pertPosition(planetNr, time); + } + + // logarithmic or scalar !!! + if(compressed) { + planpos.scaleDistance(compressed, 5.0); + } else { + planpos.scaleDistance(compressed, AstronomicalConstants.AU / SSS3dConstants.SCALE); + } + + // Praezession und aequatoriale Koordinaten + Matrix3d p = prec.precMatrix_Ecl(time, AstronomicalConstants.T_J2000); + planpos.mul(p); + + positions[i] = new Point3f((float) planpos.x, + (float) planpos.z, + (float)-planpos.y); + } + } + + /** + * Calculate the positions of our moon. + */ + private void calcOurMoonPos() { + double step = objInfo.getOrbitPeriod() / (double)nbrOfPoints; + Moon moon = new Moon(); + for(int i = 0; i < nbrOfPoints; i++) { + double time = ((double)i * step + jDay - + AstronomicalConstants.MJD_J2000) / 36525.0; + + Vec3D moonpos = moon.moonEqu(time); + + // logarithmic or scalar !!! + if(compressed) { + moonpos.scaleDistance(compressed, 3e-6); + } else { + moonpos.scaleDistance(compressed, 1 / SSS3dConstants.SCALE); + } + positions[i] = new Point3f((float) moonpos.x, + (float) moonpos.z, + (float)-moonpos.y); + } + } + + /** + * Calculate the positions of any moon as a circle. + */ + private void calcMoonPos() { + double x, y, z, phi, r; + if(compressed) { + r = StrictMath.log(objInfo.getDistance() / 1000) / 5; + } else { + r = objInfo.getDistance() / SSS3dConstants.SCALE; + } + double theta = StrictMath.toRadians(objInfo.getOrbitInclinationToEcliptic()); + for(int i = 0; i < nbrOfPoints; i++) { + phi = ((double)i / nbrOfPoints) * MoreMath.PI2; + x = r * StrictMath.cos(phi); + z = -r * StrictMath.sin(phi); + y = -x * StrictMath.tan(theta); + positions[i] = new Point3f((float)x, (float)y, (float)z); + } + } + + /** + * Calculate the positions of any comet as kepler ellipse. + */ + private void calcCometPos() { + double step = objInfo.getOrbitPeriod() / + (double)nbrOfPoints * AstronomicalConstants.DAYS; + Kepler kepler = new Kepler(); + PrecNut prec = new PrecNut(); + + Matrix3d pqr = kepler.gaussVec(MoreMath.RAD * objInfo.getLongitudeNode(), + MoreMath.RAD * objInfo.getOrbitInclinationToEcliptic(), + MoreMath.RAD * objInfo.getPerihelion()); + + pqr.mul(prec.precMatrix_Ecl((objInfo.getEquinox() - 2000.0) / 100.0, + (2000.0 - 2000.0) / 100.0)); + + for(int i = 0; i < nbrOfPoints; i++) { + double time = (double)i * step + jDay; + + Vec3D[] vec = kepler.kepler(AstronomicalConstants.GM_SUN, + objInfo.getEpoch(), + time, + objInfo.getDistance(), + objInfo.getOrbitEccentricity(), + pqr); + + // logarithmic or scalar !!! + if(compressed) { + vec[0].scaleDistance(compressed, 5.0); + } else { + vec[0].scaleDistance(compressed, AstronomicalConstants.AU / SSS3dConstants.SCALE); + } + positions[i] = new Point3f((float) vec[0].x, + (float) vec[0].z, + (float)-vec[0].y); + } + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/AnimationSpeed.java b/Solar system/sss3d-source/sss3d/contentbranch/AnimationSpeed.java new file mode 100644 index 0000000..363f639 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/AnimationSpeed.java @@ -0,0 +1,182 @@ +/* + File: AnimationSpeed.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/AnimationSpeed.java,v 1.2 2000/12/12 14:29:08 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 14:29:08 $ + $State: Exp $ + +*/ + +package sss3d.contentbranch; + + +/** + * Holds the data to calculate the animation speed. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.2 $ + */ +public class AnimationSpeed { + + /** + * Constant for number of days per second simulation time + */ + public static final int DAYS_PER_SECOND = 0; + + /** + * Constant for number of hours per second simulation time + */ + public static final int HOURS_PER_SECOND = 1; + + /** + * Constant for number of minutes per second simulation time + */ + public static final int MINUTES_PER_SECOND = 2; + + /** + * Names for these constants DAYS_PER_SECOND, + * HOURS_PER_SECOND and MINUTES_PER_SECOND + */ + public static final String[] NAMES = { + "days", + "hours", + "minutes" + }; + + /** + * Minimum allowed value for days ( limit checks ) + */ + public static final int DAYS_MIN = 1; + + /** + * Maximum allowed value for days ( limit checks ) + */ + public static final int DAYS_MAX = 10; + + /** + * Minimum allowed value for hours ( limit checks ) + */ + public static final int HOURS_MIN = 1; + + /** + * Maximum allowed value for hours ( limit checks ) + */ + public static final int HOURS_MAX = 24; + + /** + * Minimum allowed value for minutes ( limit checks ) + */ + public static final int MINUTES_MIN = 1; + + /** + * Maximum allowed value for minutes ( limit checks ) + */ + public static final int MINUTES_MAX = 60; + + + // AnimationSpeed is equal to on day per second + // simulation time ( default ) + private int type = DAYS_PER_SECOND; + private int value = 1; + + /** + * Simple constructor, uses default type/value DAYS_PER_SECOND / 1 + */ + public AnimationSpeed() { + + } + + /** + * Constructor, sets the type and the value + * by the given values + * + * @param type either DAYS_PER_SECOND, HOURS_PER_SECOND or MINUTES_PER_SECOND + * @param value a value that correspond to the given type ( checks parameters internally ) + * If the parameters aren't correct, then the constructor uses the default values. + */ + public AnimationSpeed( int type, int value ) { + if ( checkParameters(type,value) ) { + this.type = type; + this.value = value; + } + } + + /** + * Returns the type of this AnimationSpeed object + * + * @return int the type of this AnimationSpeed object + */ + public int getType() { + return type; + } + + /** + * Returns the value of this AnimationSpeed object + * + * @return int the value of this AnimationSpeed object + */ + public int getValue() { + return value; + } + + + /** + * Sets the type and the corrresponding value + * + * @param type either DAYS_PER_SECOND, HOURS_PER_SECOND or MINUTES_PER_SECOND + * @param value a value that correspond to the given type ( checks parameters internally ) + * If the parameters aren't correct, then the function returns false without setting + * the new parameters. + * @param boolean true or false if the new values are set + */ + public boolean setTypeValue( int type, int value ) { + boolean set = false; + if ( checkParameters(type,value) ) { + this.type = type; + this.value = value; + set = true; + } + return set; + } + + /** + * Check parameters it there are valid and inside the + * given limits. + * + * @param type either DAYS_PER_SECOND, HOURS_PER_SECOND or MINUTES_PER_SECOND + * @param value the new value + * @return boolean true if the values are correct + */ + private boolean checkParameters( int type, int value ) { + boolean areValid = false; + + switch ( type ) { + case DAYS_PER_SECOND : + if ( value >= DAYS_MIN && value <= DAYS_MAX ) { + areValid = true; + } + break; + case HOURS_PER_SECOND : + if ( value >= HOURS_MIN && value <= HOURS_MAX ) { + areValid = true; + } + break; + case MINUTES_PER_SECOND : + if ( value >= MINUTES_MIN && value <= MINUTES_MAX ) { + areValid = true; + } + break; + default : break; + } + return areValid; + } +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/contentbranch/CelestialObject.java b/Solar system/sss3d-source/sss3d/contentbranch/CelestialObject.java new file mode 100644 index 0000000..b03c49d --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/CelestialObject.java @@ -0,0 +1,86 @@ +/* + File: CelestialObject.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/CelestialObject.java,v 1.6 2000/12/13 14:02:44 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 14:02:44 $ + $State: Exp $ + +*/ +package sss3d.contentbranch; + +/** + * This interfaces defines the methods that every celestial + * object has to implement. Examples are Planets and the Sun. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.6 $ + * @see sss3d.contentbranch.sun.Sun + * @see sss3d.contentbranch.planets.Planet + */ + +public interface CelestialObject { + + public static final int INITRADIUS = 1; + public static final int DIVISON = 30; + public static final int SMALLEST = 1; + public static final int SECOND = 1000; + + /** + * Returns a CelestialObjectInfo of the current celestial object. + * This object has all specific information of the current celestail object. + * + * @return a CelestialObjectInfo of the current celestial object. + */ + public CelestialObjectInfo getInfo(); + + /** + * Gets the ID of the current celestial object. + * + * @return the ID of the current celestial object. + */ + public String getId(); + + /** + * Gets the scaled radius of the current celestial object. + * + * @return the scaled radius of the current celestial object. + */ + public float getRadius(); + + /** + * Gets the log. radius of the current celestial object. + * + * @return the log. radius of the current celestial object. + */ + public float getLogRadius(); + + /** + * Gets the degree of the current celestial object. + * + * @return the degree of the current celestial object. + */ + public double getDegree(); + + /** + * Gets the rotation speed to the own axis of the current celestial object. + * + * @return the rotation speed to the own axis of the current celestial object. + */ + public long getRotOwnAxis(); + + /** + * Gets the rotation speed around the sun of the current celestial object. + * + * @return the rotation speed around the sun of the current celestial object. + */ + public long getRotOrbit(); +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/CelestialObjectInfo.java b/Solar system/sss3d-source/sss3d/contentbranch/CelestialObjectInfo.java new file mode 100644 index 0000000..35040e8 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/CelestialObjectInfo.java @@ -0,0 +1,599 @@ +/* + File: CelestialObjectInfo.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/CelestialObjectInfo.java,v 1.15 2000/12/13 13:37:07 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:37:07 $ + $State: Exp $ + +*/ +package sss3d.contentbranch; + +import sss3d.utils.SSS3dConstants; +import sss3d.utils.xmlparser.*; + +import org.w3c.dom.Document; + + +/** + * An instanciated class of this object contains all the + * information about a celestial object. The class provides + * methods to retrieve information from these objects.
+ * The filename given to the constructor contains the name of the + * file without the type. We used the file extension .xml for + * the information (XML) files.
+ * The next example creates an instance of an object, containing + * information about the sun. To do this the constructor calls + * the class method read () from the XMLParser object + * with the arguments this and path. + *
+ *    filename : sun.xml
+ *    use CelestialObjectInfo cObjInfo = new CelestialObjectInfo("sun");
+ * 
+ * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.15 $ + * @see sss3d.utils.xmlparser.XMLParser + */ +public class CelestialObjectInfo{ + + private XMLParser ifp; // for parsing and reading the + // information files. + private Document document = null; // holds the whole document for + // easier creating and updating + // the JTree inside InfoBox + // org.w3c.dom.Document + + private String name = null; // filename + private String parent = null; // parentname + + // Possible types : STAR, PLANET, MOON, SATELLITE, ROCKET, COMET, UNKNOWN + private int type = SSS3dConstants.UNKNOWN_TYPE; + + // parameters + private double scalingFactor = 0.0d; // scaling factor for representation + private double volume = 0.0d; // volume of the object + private double distance = 0.0d; // distance between object and sun + private double diameter = 0.0d; // mean diameter of the object + private double minDistanceFromSun = 0.0d; // used for ellipse equation + private double maxDistanceFromSun = 0.0d; // used for ellipse equation + private int nbrOfPositions = 0; // number of positions to calculate + // the flight path of the object + + private double mass = 0.0d; // mass + private double density = 0.0d; // density + private double surfaceGravity = 0.0d; // surface gravity + private double escapeVelocity = 0.0d; // escape velocity + private double rotationPeriod = 0.0d; // mean rotation period + // around the own axe + private double orbitPeriod = 0.0d; // mean rotation period + // around the sun + private double meanOrbitVelocity = 0.0d; // orbit velocity + private double orbitEccentricity = 0.0d; // orbit eccentrycity + private double orbitInclinationToEcliptic = 0.0d; // orbit inclination to ecliptic + private double inclinationOfEquatorToOrbit = 0.0d; // inclination of equator to orbit + private double tempAtSolidSurface = 0.0d; // temperature on solid surface + private String atmosphericConstitutents = null; // atmospheric constitutents + + // parameters for the kepler (comet) + private double epoch = 0.0; // Zeitpunkt des Periheldurchgangs + private double equinox = 0.0; // Aequinoktium der Bahnelemente + private double longitudeNode = 0.0; // Laenge des aufsteigenden Knotens in [] + private double perihelion = 0.0; // Argument des Perihels in [] + + /** + * Constructs a new object from the file defined by the argument filename. + * @param filename name of file without extension. + */ + public CelestialObjectInfo(String name, int type) { + this.name = name; + this.type = type; + + String path = "xml/" + name + ".xml"; // temporary until we introduce a better solution + + ifp = new XMLParser(this, XMLConstants.XML_CELESTIALOBJECT, path); + ifp.read(XMLConstants.XML_CELESTIALOBJECT); // read and set all values coresponding to this object + + } + + + /** + * Sets the document of the object given by the argument. + * @param document org.w3c.dom.Document + */ + public void setDocument(org.w3c.dom.Document document) { + this.document = document; + } + + /** + * Returns the DOM document of the object. + * @return org.w3c.dom.Document the DOM document + */ + public org.w3c.dom.Document getDocument() { + return document; + } + + + /** + * Sets the type of the object given by the argument. + * @param type type of the object + */ + public void setType(String str) { + int type = SSS3dConstants.UNKNOWN_TYPE; + + if( str.equals( SSS3dConstants.TYPES[SSS3dConstants.UNKNOWN_TYPE] )) { + type = SSS3dConstants.UNKNOWN_TYPE; + } else if( str.equals( SSS3dConstants.TYPES[SSS3dConstants.INI_TYPE] )) { + type = SSS3dConstants.INI_TYPE; + } else if( str.equals( SSS3dConstants.TYPES[SSS3dConstants.STAR_TYPE] )) { + type = SSS3dConstants.STAR_TYPE; + } else if( str.equals( SSS3dConstants.TYPES[SSS3dConstants.PLANET_TYPE] )) { + type = SSS3dConstants.PLANET_TYPE; + } else if( str.equals( SSS3dConstants.TYPES[SSS3dConstants.MOON_TYPE] )) { + type = SSS3dConstants.MOON_TYPE; + } else if( str.equals( SSS3dConstants.TYPES[SSS3dConstants.COMET_TYPE] )) { + type = SSS3dConstants.COMET_TYPE; + } else if( str.equals( SSS3dConstants.TYPES[SSS3dConstants.SATELLITE_TYPE] )) { + type = SSS3dConstants.SATELLITE_TYPE; + } else if( str.equals( SSS3dConstants.TYPES[SSS3dConstants.ROCKET_TYPE] )) { + type = SSS3dConstants.ROCKET_TYPE; + } else { + System.out.println("Error in CelestialObjectInfo: " + str); + } + + this.type = type; + } + /** + * Returns the type of the object (integer). + * @return int the type of the object + */ + public int getTypeNbr() { + return type; + } + + /** + * Returns the type of the object. (string representation) + * @return String the type of the object + */ + public String getType() { + String str = ""; + switch( type ){ + case SSS3dConstants.UNKNOWN_TYPE : + str = SSS3dConstants.TYPES[SSS3dConstants.UNKNOWN_TYPE]; + break; + case SSS3dConstants.INI_TYPE : + str = SSS3dConstants.TYPES[SSS3dConstants.INI_TYPE]; + break; + case SSS3dConstants.STAR_TYPE : + str = SSS3dConstants.TYPES[SSS3dConstants.STAR_TYPE]; + break; + case SSS3dConstants.PLANET_TYPE : + str = SSS3dConstants.TYPES[SSS3dConstants.PLANET_TYPE]; + break; + case SSS3dConstants.MOON_TYPE : + str = SSS3dConstants.TYPES[SSS3dConstants.MOON_TYPE]; + break; + case SSS3dConstants.COMET_TYPE : + str = SSS3dConstants.TYPES[SSS3dConstants.COMET_TYPE]; + break; + case SSS3dConstants.SATELLITE_TYPE : + str = SSS3dConstants.TYPES[SSS3dConstants.SATELLITE_TYPE]; + break; + case SSS3dConstants.ROCKET_TYPE : + str = SSS3dConstants.TYPES[SSS3dConstants.ROCKET_TYPE]; + break; + default : + str = SSS3dConstants.TYPES[SSS3dConstants.UNKNOWN_TYPE]; + } + return str; + } + + + /** + * Sets the name/id of the object given by the argument. + * @param name name of the object + */ + public void setName(String name) { + this.name = name; + } + + /** + * Returns the name/id of the object. + * @return String the name of the object + */ + public String getName() { + return name; + } + + /** + * Sets the name/id of the parent object given by the argument. + * @param parent name of the parent object + */ + public void setParentName(String parent) { + this.parent = parent; + } + + /** + * Returns the name/id of the parent object. + * @return String the name of the parent object + */ + public String getParentName() { + return parent; + } + + /** + * Sets the scaling factor of the object given by the argument. + * @param scalingFactor scaling value + */ + public void setScalingFactor(double scalingFactor){ + this.scalingFactor = scalingFactor; + } + + /** + * Returns the scaling factor of the object. + * @return double the scaling factor of the object + */ + public double getScalingFactor(){ + return scalingFactor; + } + + /** + * Sets the diameter of the object given by the argument. + * @param diameter diameter of the object + */ + public void setDiameter(double diameter) { + this.diameter = diameter; + } + + /** + * Returns the diameter of the object. + * @return double the diameter of the object + */ + public double getDiameter() { + return diameter; + } + + /** + * Sets the minimum distance between the sun and the object given by the argument. + * @param distance minimum distance between the object and the sun + */ + public void setMinDistanceFromSun(double distance) { + this.minDistanceFromSun = distance; + } + + /** + * Returns the minimum distance between the sun and the object. + * @return double minimum distance between the object and the sun + */ + public double getMinDistanceFromSun() { + return minDistanceFromSun; + } + + /** + * Sets the maximum distance between the sun and the object given by the argument. + * @param distance maximum distance between the object and the sun + */ + public void setMaxDistanceFromSun(double distance) { + this.maxDistanceFromSun = distance; + } + + /** + * Returns the maximum distance between the sun and the object. + * @return double maximum distance between the object and the sun + */ + public double getMaxDistanceFromSun() { + return maxDistanceFromSun; + } + + /** + * Sets the number of positions for the flight path of the object. + * @param pos number of positons + */ + public void setNbrOfPositions(int pos) { + this.nbrOfPositions = pos; + } + + /** + * Returns the number of positions for the flight path of the object. + * @return int number of positons + */ + public int getNbrOfPositions() { + return nbrOfPositions; + } + + /** + * Sets the rotation period of the object around the own axe. + * @param double rotation period + */ + public void setRotationPeriod(double rotationPeriod) { + this.rotationPeriod = rotationPeriod; + } + + /** + * Returns the rotation period of the object around the own axe. + * @return double rotation period + */ + public double getRotationPeriod() { + return rotationPeriod; + } + + /** + * Sets the period around the sun of the object. + * @param orbitPeriod period around the sun + */ + public void setOrbitPeriod(double orbitPeriod) { + this.orbitPeriod = orbitPeriod; + } + + /** + * Returns the period around the sun of the object. + * @return double period around the sun + */ + public double getOrbitPeriod() { + return orbitPeriod; + } + + /** + * Sets the mean orbit velocity of the object. + * @param meanOrbitVelocity mean orbit velocity + */ + public void setMeanOrbitVelocity(double meanOrbitVelocity) { + this.meanOrbitVelocity = meanOrbitVelocity; + } + + /** + * Returns the mean orbit velocity of the object. + * @return double mean orbit velocity + */ + public double getMeanOrbitVelocity() { + return meanOrbitVelocity; + } + + /** + * Sets the orbit eccentricity of the object. + * @param orbitEccentricity + */ + public void setOrbitEccentricity(double orbitEccentricity) { + this.orbitEccentricity = orbitEccentricity; + } + + /** + * Returns the orbit eccentricity of the object. + * @return double orbit eccentricity + */ + public double getOrbitEccentricity() { + return orbitEccentricity; + } + + /** + * Sets the orbit inclination to ecliptic value of the object. + * @param orbitInclinationToEcliptic orbit inclination to ecliptic + */ + public void setOrbitInclinationToEcliptic(double orbitInclinationToEcliptic) { + this.orbitInclinationToEcliptic = orbitInclinationToEcliptic; + } + + /** + * Returns the orbit inclination to ecliptic of the object. + * @return double orbit inclination to ecliptic + */ + public double getOrbitInclinationToEcliptic() { + return orbitInclinationToEcliptic; + } + + /** + * Sets the inclination of equator to orbit value of the object. + * @param inclination of equator to orbit + */ + public void setInclinationOfEquatorToOrbit(double inclinationOfEquatorToOrbit){ + this.inclinationOfEquatorToOrbit = inclinationOfEquatorToOrbit; + } + + /** + * Returns the inclination of equator to orbit of the object. + * @return double inclination of equator to orbit + */ + public double getInclinationOfEquatorToOrbit() { + return inclinationOfEquatorToOrbit; + } + + /** + * Sets the volume of the object. + * @param volume volume of the object + */ + public void setVolume(double volume) { + this.volume = volume; + } + + /** + * Returns the volume of the object. + * @return double the volume of the object + */ + public double getVolume() { + return volume; + } + + /** + * Sets the distance between the sun and the object. + * @param distance distance between sun and the object + */ + public void setDistance(double distance) { + this.distance = distance; + } + + /** + * Returns the distance between the sun and the object. + * @return double distance between the sun and the object + */ + public double getDistance() { + return distance; + } + + /** + * Sets the mass of the object. + * @param mass the mass of the object + */ + public void setMass(double mass) { + this.mass = mass; + } + + /** + * Returns the mass of the object. + * @return double the mass of the object + */ + public double getMass() { + return mass; + } + + /** + * Sets the density of the object. + * @param density density of the object + */ + public void setDensity(double density) { + this.density = density; + } + + /** + * Returns the density of the object. + * @return double density of the object + */ + public double getDensity() { + return density; + } + + /** + * Sets the surface gravity of the object. + * @param surfaceGravity surface gravity + */ + public void setSurfaceGravity(double surfaceGravity) { + this.surfaceGravity = surfaceGravity; + } + + /** + * Returns the surface gravity of the object. + * @return double surface gravity + */ + public double getSurfaceGravity() { + return surfaceGravity; + } + + /** + * Sets the escape velocity of the object. + * @param escapeVelocity escape velocity + */ + public void setEscapeVelocity(double escapeVelocity) { + this.escapeVelocity = escapeVelocity; + } + + /** + * Returns the escape velocity of the object. + * @return double escape velocity + */ + public double getEscapeVelocity() { + return escapeVelocity; + } + + /** + * Sets the temperature at the solid surface of the object. + * @param temperature the temperature at the solid surface + */ + public void setTempAtSolidSurface(double temperature) { + this.tempAtSolidSurface = temperature; + } + + /** + * Returns the temperature at the solid surface of the object. + * @return double temperature at the solid surface + */ + public double getTempAtSolidSurface() { + return tempAtSolidSurface; + } + + /** + * Sets the atmospheric constitutents of the object. + * @param constitutents atmospheric constitutents + */ + public void setAtmosphericConstitutents(String constitutents) { + this.atmosphericConstitutents = constitutents; + } + + /** + * Returns the atmospheric constitutents of the object. + * @return String atmospheric constitutents + */ + public String getAtmosphericConstitutents() { + return atmosphericConstitutents; + } + + /** + * Sets the epoch of the object. + * @param epoch epoch of the object + */ + public void setEpoch(double epoch) { + this.epoch = epoch; + } + + /** + * Returns the epoch of the object. + * @return double the epoch of the object + */ + public double getEpoch() { + return epoch; + } + + /** + * Sets the equinox of the object. + * @param equinox equinox of the object + */ + public void setEquinox(double equinox) { + this.equinox = equinox; + } + + /** + * Returns the equinox of the object. + * @return double the equinox of the object + */ + public double getEquinox() { + return equinox; + } + + /** + * Sets the longitudeNode of the object. + * @param longitudeNode longitudeNode of the object + */ + public void setLongitudeNode(double longitudeNode) { + this.longitudeNode = longitudeNode; + } + + /** + * Returns the longitudeNode of the object. + * @return double the longitudeNode of the object + */ + public double getLongitudeNode() { + return longitudeNode; + } + + /** + * Sets the perihelion of the object. + * @param perihelion perihelion of the object + */ + public void setPerihelion(double perihelion) { + this.perihelion = perihelion; + } + + /** + * Returns the perihelion of the object. + * @return double the perihelion of the object + */ + public double getPerihelion() { + return perihelion; + } +}// end of class CelestialObjectInfo diff --git a/Solar system/sss3d-source/sss3d/contentbranch/CoordinateSystem.java b/Solar system/sss3d-source/sss3d/contentbranch/CoordinateSystem.java new file mode 100644 index 0000000..44e82f7 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/CoordinateSystem.java @@ -0,0 +1,111 @@ +/* + File: CoordinateSystem.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/CoordinateSystem.java,v 1.3 2000/12/12 14:29:07 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 14:29:07 $ + $State: Exp $ + +*/ +package sss3d.contentbranch; + +import javax.media.j3d.*; + +/** + * This class creates a right-handed 3D coordinate system. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.3 $ + */ +public class CoordinateSystem extends Shape3D { + + /** + * Definition of the geometry of the three axis. + */ + private static final float EXTREMITES[] = { + // x-axis + 0.0f, 0.0f, 0.0f, + 1.0f, 0.0f, 0.0f, + + // y-axis + 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, + + // z-axis + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f + }; + + /** + * Colors of the three axis. + */ + private static final float COLOR[] = { + // x-axis + 1.0f, 1.0f, 0.0f, + 1.0f, 1.0f, 0.0f, + + // y-axis + 0.0f, 0.0f, 1.0f, + 0.0f, 0.0f, 1.0f, + + // z-axis + 1.0f, 0.0f, 0.0f, + 1.0f, 0.0f, 0.0f + }; + + /** + * The scale factor + */ + private static final float SCALE = 1.0f; + private float scale; + + /** + * Initializes a new coordinate system with the length + * of the axis to one meter. + */ + public CoordinateSystem() { + this(SCALE); + } + + /** + * Initializes a new coordinate system. + * + * @param scale the scale factor to adjust the axis's length in meter. + */ + public CoordinateSystem(float scale) { + this.scale = scale; + this.setGeometry(createGeometry()); + } + + /** + * Returns the Geometry of the coordinate system. + * + * @return the Geometry of a coordinate system. The axis has three + * different colors and is scaled. + */ + private Geometry createGeometry() { + + // Construction of the axis (LineArray). + LineArray axis = new LineArray(6, LineArray.COORDINATES | + LineArray.COLOR_3); + + // Scalling of the vertices of the 3 axis using scale. + float scaledExtremites[] = new float[EXTREMITES.length]; + for(int i = 0; i < EXTREMITES.length; i++) { + scaledExtremites[i] = EXTREMITES[i] * scale; + } + + axis.setCoordinates(0, scaledExtremites); + axis.setColors(0, COLOR); + + return axis; + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/IniData.java b/Solar system/sss3d-source/sss3d/contentbranch/IniData.java new file mode 100644 index 0000000..48c7fc0 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/IniData.java @@ -0,0 +1,214 @@ +/* + File: IniData.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/IniData.java,v 1.3 2000/12/13 14:02:45 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 14:02:45 $ + $State: Exp $ + +*/ +package sss3d.contentbranch; + +import sss3d.utils.*; + +import java.awt.Color; + +/** + * This class holds data such as the name, parent-name, type and the color + * of the CelestialObject. It also stores further information about + * visibility of the object, orbit, or his coordinate system. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.3 $ + */ +public class IniData { + + // stores the data of the celestial objects inside these types + private String parent = null; + private String name = null; + private int type = SSS3dConstants.UNKNOWN_TYPE; + private boolean visible = false; + private boolean orbit = false; + private boolean coordinatesystem = false; + private MyColor colororbit; + + + /** + * Constructor + * + * @param parent the name of the parent celestial object, if it exists + * @param name the name/id of the celestial object + * @param type the type of the celestial object represented by it's name + * @param visible true or false if the celestial object be visible or not + * @param orbit true or false if the orbit should be visible or not + * @param coordinatesystem true or false if the coordinate system should be visible or not + * @param colororbit the string representation of this color, it can be either + * BLACK,BLUE,CYAN,DARKGRAY,GRAY,GREEN,LIGHTGRAY,MAGENTA,ORANGE,PINK,RED,WHITE or YELLOW + * defined inside MyColor + * @see sss3d.contentbranch.MyColor + */ + public IniData(String parent, String name, int type, boolean visible, boolean orbit, + boolean coordinatesystem, String colororbit) { + + this.parent = parent; + this.name = name; + this.type = type; + this.visible = visible; + this.orbit = orbit; + this.coordinatesystem = coordinatesystem; + this.colororbit = new MyColor(colororbit); + } + + /** + * Returns true if this celestial object has a parent object + * + * @ returns boolean true or false if a parent object exists + */ + public boolean hasParent() { + return (parent != null ) ? true: false; + } + + /** + * Returns the string representing his parent + * + * @return String the name of the parent celestial object + */ + public String getParent() { + return parent; + } + + /** + * Returns the name of this celestial object. + * + * @return String the name of this celestial object + */ + public String getName() { + return name; + } + + /** + * Returns the type of this object + * + * @return int type of this celestial object + */ + public int getType() { + return type; + } + + /** + * Returns the current color of the orbit + * + * @return Color a color object representing the color of this orbit + */ + public Color getColorOrbit() { + return colororbit.getColor();; + } + + /** + * Returns true if this object is visible. + * + * @return boolean true if this celestial object is visible + */ + public boolean isVisible() { + return visible; + } + + /** + * Returns true if orbit is visible + * + * @return true if object is visible + */ + public boolean hasOrbit() { + return orbit; + } + + /** + * Returns true if the coordinate system is visible + * + * @return boolean true if the coordinate system is visible + */ + public boolean hasCoordinateSystem() { + return coordinatesystem; + } + + /** + * Set the name of his parent + * + * @param parent the name representing his parent ( orbit center ) + */ + public void setParent( String parent ) { + this.parent = parent; + } + + /** + * Sets the name of this celestial object + * + * @param name the name of this celestial object + */ + public void setName( String name ) { + this.name = name; + } + + /** + * Sets the type of this celestial object + * + * @param type the type of this celestial object + */ + public void setType( int type ) { + this.type = type; + } + + /** + * Sets the visibility of this celestial object + * + * @param visible true if this celestial object should be visible + */ + public void setVisible( boolean visible ) { + this.visible = visible; + } + + /** + * Sets the visibility of the orbit corresponding to this celestial object + * + * @param orbit true if the orbit should be visible + */ + public void setOrbit( boolean orbit ) { + this.orbit = orbit; + } + + /** + * Sets the visibility of the coordinate system corresponding to this celestial object + * + * @param coordinatesystem true if the coordinate system should be visible + */ + public void setCoordinateSystem( boolean coordinatesystem ) { + this.coordinatesystem = coordinatesystem; + } + + /** + * Sets the color of the orbit + * + * @param color the new color of the orbit + */ + public void setColorOrbit( Color color ) { + colororbit.setColor(color); + } + + /** + * Sets the color of the orbit given by the color name + * + * @param colorName the name of the new color + */ + public void setColorOrbit( String colorName ) { + colororbit.setColor( colorName ); + } + +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/contentbranch/InitializationObject.java b/Solar system/sss3d-source/sss3d/contentbranch/InitializationObject.java new file mode 100644 index 0000000..b75552d --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/InitializationObject.java @@ -0,0 +1,536 @@ +/* + File: InitializationObject.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/InitializationObject.java,v 1.11 2000/12/12 14:29:07 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 14:29:07 $ + $State: Exp $ + +*/ + +package sss3d.contentbranch; + +import sss3d.utils.xmlparser.*; + +import org.w3c.dom.Document; +import sss3d.utils.SSS3dConstants; + +import java.util.Vector; +import java.util.Enumeration; + +/** + * An instanciated class of this object contains all the + * information about the J3D Solar System Simulator. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.11 $ + */ + +public class InitializationObject{ + + private XMLParser xmlp; // for parsing and reading the + // information files. + + // Possible types : INI, STAR , PLANET, MOON, SATELLITE, ROCKET,COMET, UNKNOWN + private int id = SSS3dConstants.INI_TYPE; + + + + // parameters + private Document document = null; // holds the whole document for + // easier creating and updating + // the JTree inside InfoBox + // org.w3c.dom.Document + private String type = null; // type of xml file + private String name = null; // name + private String filename = null; // filename + private String path = null; // current path + private int day = 1; // simulation start date & time + private int month = 1; + private int year = 2000; + private int hour = 12; + private int minutes = 0; + private int seconds = 0; + private double jday = 2451545.0d; + private int calculation = SSS3dConstants.KEPLER; // calculation method + private AnimationSpeed animationspeed; // animationspeed of simulation + private boolean compressed = true; + private boolean glasses3d = false; + private boolean joystick = false; + private boolean cameraatorigin = false; + private int camera = SSS3dConstants.CAMERA_DEFAULT; // initial camera position + private Vector objects = new Vector(); + + + + /** + * Constructs a new object from the file defined by the argument filename. + * @param filename name of file without extension. + */ + public InitializationObject(String path) { + xmlp = new XMLParser(this,XMLConstants.XML_INITIALIZATION,path); + // read and set all values coresponding to this object + xmlp.read(XMLConstants.XML_INITIALIZATION); + } + + /** + * Returns the data of a celestial object + * + * @param name the name of the celestial object + * @return IniData the data of the celestial object + */ + private IniData getData( String name ) { + IniData data = null; + + if ( name != null ) { + Enumeration enum = objects.elements(); + while ( enum.hasMoreElements() ) { + IniData dataStructure = (IniData)enum.nextElement(); + if (dataStructure.getName().equals(name)) { + data = dataStructure; + break; + } + } + } + + return data; + } + + /** + * Returns an enumeration of all currently loaded celestial objects + * + * @return Enumeration all currently loaded celestial objects + */ + public Enumeration getObjects() { + return objects.elements(); + } + + /** + * Sets the object specified by the parameter. + * + * @param object the object associated to the parameter + * @param parameter the desired parameter + * @return boolean true if setting was successfully + */ + public boolean setParameter( Object object , int parameter ) { + return setParameter( object, parameter, null ); + } + + /** + * Sets the object specified by the parameter and the + * name of the celestial object. + * + * @param object the object associated to the parameter + * @param parameter the desired parameter + * @param name the name of the celestial object + * @return boolean true if setting was successfully + */ + public boolean setParameter( Object object , int parameter, String name ) { + boolean result = false; + IniData data; + + //System.out.println("Set Parameter : "+object.toString()+" Parameter : "+XMLConstants.treeElementNames[parameter]+" Name : "+name); + switch ( parameter ) { + + case XMLConstants.FILETYPE : + this.type = (String)object; + result = true; + break; + + case XMLConstants.ID : + this.name = (String)object; + result = true; + break; + + case XMLConstants.FILENAME : + this.filename = (String)object; + result = true; + break; + + case XMLConstants.PATH : + this.path = (String)object; + result = true; + break; + + case XMLConstants.DAY : + int day = ((Integer)object).intValue(); + if ( day > 0 && day < 32 ) { + this.day = day; + result = true; + } + break; + + case XMLConstants.MONTH : + int month = ((Integer)object).intValue(); + if ( month > 0 && month < 13 ) { + this.month = month; + result = true; + } + break; + + case XMLConstants.YEAR : + this.year = ((Integer)object).intValue(); + result = true; + break; + + case XMLConstants.HOUR : + int hour = ((Integer)object).intValue(); + if( hour >= 0 && hour <= 24 ) { + this.hour = hour; + result = true; + } + break; + + case XMLConstants.MINUTES : + int minutes = ((Integer)object).intValue(); + if( minutes >= 0 && minutes <= 60 ) { + this.minutes = minutes; + result = true; + } + break; + + case XMLConstants.SECONDS : + int seconds = ((Integer)object).intValue(); + if( seconds >= 0 && seconds <= 60 ) { + this.seconds = seconds; + result = true; + } + break; + + case XMLConstants.JDAY : + this.jday = ((Double)object).doubleValue(); + result = true; + break; + + case XMLConstants.CALCULATION : + int calculation = ((Integer)object).intValue(); + if ( calculation == SSS3dConstants.KEPLER || + calculation == SSS3dConstants.ELLIPSE || + calculation == SSS3dConstants.ANALYTIC ) { + this.calculation = calculation; + result = true; + } + break; + + case XMLConstants.ANIMATIONSPEED : + this.animationspeed = new AnimationSpeed( ((AnimationSpeed)object).getType(), + ((AnimationSpeed)object).getValue() ); + result = true; + break; + + case XMLConstants.COMPRESSED : + this.compressed = ((Boolean)object).booleanValue(); + result = true; + break; + + case XMLConstants.GLASSES3D : + this.glasses3d = ((Boolean)object).booleanValue(); + result = true; + break; + + case XMLConstants.JOYSTICK : + this.joystick = ((Boolean)object).booleanValue(); + result = true; + break; + + case XMLConstants.CAMERAATORIGIN : + this.cameraatorigin = ((Boolean)object).booleanValue(); + result = true; + break; + + case XMLConstants.CAMERA : + int camera = ((Integer)object).intValue(); + for( int c = 0; c < SSS3dConstants.CAMERA_POSITIONS.length ; c++ ) { + if ( camera == c ) { + this.camera = camera; + result = true; + } + } + break; + + case XMLConstants.STAR : + data = getData( ((IniData)object).getName() ); + if ( data == null ) { // check if an element already exists + objects.add((IniData)object); + result = true; + } + break; + + case XMLConstants.PLANET : + data = getData( ((IniData)object).getName() ); + if ( data == null ) { // check if an element already exists + objects.add((IniData)object); + result = true; + } + break; + + case XMLConstants.MOON : + data = getData( ((IniData)object).getName() ); + if( data == null) { + objects.add((IniData)object); + result = true; + } + break; + + case XMLConstants.COMET : + data = getData( ((IniData)object).getName() ); + if ( data == null ) { // check if an element already exists + objects.add((IniData)object); + result = true; + } + break; + + case XMLConstants.SATELLITE : + data = getData( ((IniData)object).getName() ); + if ( data == null ) { // check if an element already exists + objects.add((IniData)object); + result = true; + } + break; + + case XMLConstants.ROCKET : + data = getData( ((IniData)object).getName() ); + if ( data == null ) { // check if an element already exists + objects.add((IniData)object); + result = true; + } + break; + + case XMLConstants.PARENT : + if ( name != null ) { + data = getData(name); + if ( data != null ) { + data.setParent( (String) object ); + result = true; + } + } + break; + + case XMLConstants.VISIBLE : + if ( name != null ) { + data = getData(name); + if ( data != null ) { + data.setVisible( ((Boolean)object).booleanValue() ); + result = true; + } + } + break; + + case XMLConstants.ORBIT : + if ( name != null ) { + data = getData(name); + if ( data != null ) { + data.setOrbit( ((Boolean)object).booleanValue() ); + result = true; + } + } + break; + + case XMLConstants.COLORORBIT : + if ( name != null ) { + data = getData(name); + if ( data != null ) { + data.setColorOrbit( ((MyColor)object).getColor() ); + result = true; + } + } + break; + + case XMLConstants.COORDINATESYSTEM : + if ( name != null ) { + data = getData(name); + if ( data != null ) { + data.setCoordinateSystem( ((Boolean)object).booleanValue() ); + result = true; + } + } + break; + + + case XMLConstants.DOCUMENT : + document = (Document)object; + System.out.println(document.toString()); + result = true; + break; + + default : break; + } + return result; + } + + /** + * Returns the object specified by the parameter. + * + * @param parameter the desired parameter + * @return Object an object reference to the specified parameter + */ + public Object getParameter( int parameter ) { + return getParameter( parameter, null ); + } + + /** + * Returns the object specified by the parameter and + * the object name. + * + * @param parameter the desired parameter + * @param name the name of the celestial object + * @return Object an object reference to the specified parameter + */ + public Object getParameter( int parameter, String name ) { + Object object = null; + IniData data; + + switch ( parameter ) { + case XMLConstants.TYPE : + object = type; + break; + + case XMLConstants.NAME : + object = name; + break; + + case XMLConstants.FILENAME : + object = filename; + break; + + case XMLConstants.PATH : + object = path; + break; + + case XMLConstants.DAY : + object = new Integer(day); + break; + + case XMLConstants.MONTH : + object = new Integer(month); + break; + + case XMLConstants.YEAR : + object = new Integer(year); + break; + + case XMLConstants.HOUR : + object = new Integer(hour); + break; + + case XMLConstants.MINUTES : + object = new Integer(minutes); + break; + + case XMLConstants.SECONDS : + object = new Integer(seconds); + break; + + case XMLConstants.JDAY : + object = new Double(jday); + break; + + case XMLConstants.CALCULATION : + object = new Integer(calculation); + break; + + case XMLConstants.ANIMATIONSPEED : + //if(animationspeed != null) System.out.println(animationspeed.toString()); + object = new AnimationSpeed(animationspeed.getType(), animationspeed.getValue()); + break; + + case XMLConstants.COMPRESSED : + object = new Boolean(compressed); + break; + + case XMLConstants.GLASSES3D : + object = new Boolean(glasses3d); + break; + + case XMLConstants.JOYSTICK : + object = new Boolean(joystick); + break; + + case XMLConstants.CAMERAATORIGIN : + object = new Boolean(cameraatorigin); + break; + + case XMLConstants.CAMERA : + object = new Integer(camera); + break; + + case XMLConstants.STAR : + object = getData(name); + break; + + case XMLConstants.PLANET : + object = getData(name); + break; + + case XMLConstants.MOON : + object = getData(name); + break; + + case XMLConstants.COMET : + object = getData(name); + break; + + case XMLConstants.SATELLITE : + object = getData(name); + break; + + case XMLConstants.ROCKET : + object = getData(name); + break; + + case XMLConstants.PARENT : + data = getData(name); + if ( data != null ) { + object = data.getParent(); + } + break; + + case XMLConstants.VISIBLE : + data = getData(name); + if ( data != null ) { + object = new Boolean(data.isVisible()); + } + break; + + case XMLConstants.ORBIT : + data = getData(name); + if ( data != null ) { + object = new Boolean(data.hasOrbit()); + } + break; + + case XMLConstants.COLORORBIT : + data = getData(name); + if ( data != null ) { + object = data.getColorOrbit(); + } + break; + + case XMLConstants.COORDINATESYSTEM : + data = getData(name); + if ( data != null ) { + object = new Boolean(data.hasCoordinateSystem()); + } + break; + + case XMLConstants.DOCUMENT : + object = document; + break; + + default : break; + + + } + return object; + } + + +}// end of class CelestialObjectInfo diff --git a/Solar system/sss3d-source/sss3d/contentbranch/MyColor.java b/Solar system/sss3d-source/sss3d/contentbranch/MyColor.java new file mode 100644 index 0000000..168d313 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/MyColor.java @@ -0,0 +1,219 @@ +/* + File: MyColor.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/MyColor.java,v 1.3 2000/12/12 14:29:07 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 14:29:07 $ + $State: Exp $ + +*/ + +package sss3d.contentbranch; + +import java.awt.*; +import java.util.Hashtable; + +/** + * Because java.awt.Color doesn't support a constructor + * witch works with a given color name, we had to + * implement an own class MyColor. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.3 $ + */ +public class MyColor{ + + private Color color = null; + + private Hashtable hashtable = new Hashtable(); + + + /** + * Currently supported color names. + */ + public static final int BLACK = 0; + public static final int BLUE = 1; + public static final int CYAN = 2; + public static final int DARKGRAY = 3; + public static final int GRAY = 4; + public static final int GREEN = 5; + public static final int LIGHTGRAY = 6; + public static final int MAGENTA = 7; + public static final int ORANGE = 8; + public static final int PINK = 9; + public static final int RED = 10; + public static final int WHITE = 11; + public static final int YELLOW = 12; + + public static final String[] COLORNAMES = { + "black", + "blue", + "cyan", + "darkgray", + "gray", + "green", + "lightgray", + "magenta", + "orange", + "pink", + "red", + "white", + "yellow" + }; + + /** + * Constructs a new mycolor object with the given color + * + * @param color a color object + */ + public MyColor( Color color ) { + this.color = color; + } + + /** + * Constructs a new color with the given name + * + * @param colorName the name of the new color + */ + public MyColor( String colorName ) { + nameToColor( colorName ); + } + + /** + * Returns the current color + * + * @return Color the current color + */ + public Color getColor() { + return color; + } + + /** + * Sets the new color + * + * @param color an object reference to the new color + */ + public void setColor( Color color ) { + this.color = color; + } + + /** + * Sets the new color + * + * @param colorName the name of the new color + */ + public void setColor( String colorName ) { + nameToColor( colorName ); + } + + /** + * Converts a color given by its name into an + * color object. + * + * @param colorName the name of the new color + */ + private void nameToColor( String colorName ) { + //initialize hashtable + for (int i = 0; i < COLORNAMES.length ; i++) { + hashtable.put(COLORNAMES[i], new Integer(i)); + } + colorName = colorName.toLowerCase(); + + Integer n = (Integer)hashtable.get( colorName ); + if (n != null) { + switch ( n.intValue() ){ + case BLACK : + color = new Color( Color.black.getRed(), + Color.black.getGreen(), + Color.black.getBlue() + ); + break; + case BLUE : + color = new Color( Color.blue.getRed(), + Color.blue.getGreen(), + Color.blue.getBlue() + ); + break; + case CYAN : + color = new Color( Color.cyan.getRed(), + Color.cyan.getGreen(), + Color.cyan.getBlue() + ); + break; + case DARKGRAY : + color = new Color( Color.darkGray.getRed(), + Color.darkGray.getGreen(), + Color.darkGray.getBlue() + ); + break; + case GRAY : + color = new Color( Color.gray.getRed(), + Color.gray.getGreen(), + Color.gray.getBlue() + ); + break; + case GREEN : + color = new Color( Color.green.getRed(), + Color.green.getGreen(), + Color.green.getBlue() + ); + break; + case LIGHTGRAY : + color = new Color( Color.lightGray.getRed(), + Color.lightGray.getGreen(), + Color.lightGray.getBlue() + ); + break; + case MAGENTA : + color = new Color( Color.magenta.getRed(), + Color.magenta.getGreen(), + Color.magenta.getBlue() + ); + break; + case ORANGE : + color = new Color( Color.orange.getRed(), + Color.orange.getGreen(), + Color.orange.getBlue() + ); + break; + case PINK : + color = new Color( Color.pink.getRed(), + Color.pink.getGreen(), + Color.pink.getBlue() + ); + break; + case RED : + color = new Color( Color.red.getRed(), + Color.red.getGreen(), + Color.red.getBlue() + ); + break; + case WHITE : + color = new Color( Color.white.getRed(), + Color.white.getGreen(), + Color.white.getBlue() + ); + break; + case YELLOW : + color = new Color( Color.yellow.getRed(), + Color.yellow.getGreen(), + Color.yellow.getBlue() + ); + break; + default : + color = new Color( 255, 0, 0 ); + break; + } + } + + } + +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/contentbranch/NewTextureLoader.java b/Solar system/sss3d-source/sss3d/contentbranch/NewTextureLoader.java new file mode 100644 index 0000000..2b68370 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/NewTextureLoader.java @@ -0,0 +1,230 @@ +/* + File: NewTextureLoader.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/NewTextureLoader.java,v 1.1 2000/10/31 15:54:59 harib Exp $ + $Author: harib $ + $Date: 2000/10/31 15:54:59 $ + $State: Exp $ + +*/ +package sss3d.contentbranch; + +/* + * @(#)NewTextureLoades.java 1.0 99/10/21 + * + * Copyright (c) 1996-1999 Sun Microsystems, Inc. All Rights Reserved. + * + * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, + * modify and redistribute this software in source and binary code form, + * provided that i) this copyright notice and license appear on all copies of + * the software; and ii) Licensee does not utilize the software in a manner + * which is disparaging to Sun. + * + * This software is provided "AS IS," without a warranty of any kind. ALL + * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY + * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR + * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE + * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING + * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS + * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, + * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER + * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF + * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + * This software is not designed or intended for use in on-line control of + * aircraft, air traffic, aircraft navigation or aircraft communications; or in + * the design, construction, operation or maintenance of any nuclear + * facility. Licensee represents and warrants that it will not use or + * redistribute the Software for such purposes. + */ + +import com.sun.j3d.utils.image.TextureLoader; +import javax.media.j3d.*; +import javax.vecmath.*; + +/** + * A texture loading utility that doesn't require an image observer + * for constructing objects. This class extends the TextureLoader + * class of the com.sun.j3d.utils.image package. + * + */ +public class NewTextureLoader extends TextureLoader { + static java.awt.Component observer; + + /** + * Specify an object to server as the image observer. + * Use this method once before constructing any texture loaders. + * @param imageObserver the object to be used in subsequent + * NewTextureLoader constuctions + */ + public static void setImageObserver(java.awt.Component imageObserver){ + observer = imageObserver; + } + + /** + * Retreve the object used as the image observer for NewTextureLoader + * objects. + * Use this method when the image observer is needed. + * @return the object used in as the image observer in subsequent + * NewTextureLoader constuctions + */ + public static java.awt.Component getImageObserver(){ + return observer; + } + + // constructors without an image observer argument + /** + * Constructs a NewTextureLoader object loading the specified iamge in + * default (RGBA) format. + * The an image observer must be set using the setImageObserver() method + * before using this constructor. + * @param image the image object to load + */ + public NewTextureLoader(java.awt.Image image){ + super(image, observer); + } + + /** + * Constructs a NewTextureLoader object loading the specified image + * and option flags in the default (RGBA) format. + * The an image observer must be set using the setImageObserver() method + * before using this constructor. + * @param image the image object to load + * @param flags the flags to use in construction (e.g. generate mipmap) + */ + public NewTextureLoader(java.awt.Image image, int flags){ + super( image, flags, observer); + } + + /** + * Constructs a NewTextureLoader object loading the specified file + * using the specified format. + * The an image observer must be set using the setImageObserver() method + * before using this constructor. + * @param image the image object to load + * @param format specificaiton of which channels to use (e.g. RGB) + */ + public NewTextureLoader(java.awt.Image image, java.lang.String format){ + super( image, format, observer); + } + + /** + * Constructs a NewTextureLoader object loading the specified file + * with specified format and flags. + * The an image observer must be set using the setImageObserver() method + * before using this constructor. + * @param image the image object to load + * @param format specificaiton of which channels to use (e.g. RGB) + * @param flags the flags to use in construction (e.g. generate mipmap) + */ + public NewTextureLoader(java.awt.Image image, java.lang.String format, int flags){ + super( image, format, flags, observer); + } + + /** + * Constructs a NewTextureLoader object loading the specified file + * using the default format (RGBA). + * The an image observer must be set using the setImageObserver() method + * before using this constructor. + * @param fname the name of the file to load + */ + public NewTextureLoader(java.lang.String fname){ + super( fname, observer); + } + + /** + * Constructs a NewTextureLoader object loading the specified file + * with the specified flags. + * The an image observer must be set using the setImageObserver() method + * before using this constructor. + * @param fname the name of the file to load + * @param flags the flags to use in construction (e.g. generate mipmap) + */ + public NewTextureLoader(java.lang.String fname, int flags){ + super( fname, flags, observer); + } + + /** + * Constructs a NewTextureLoader object loading the specified file + * using the specified format. + * The an image observer must be set using the setImageObserver() method + * before using this constructor. + * @param fname the name of the file to load + * @param format specificaiton of which channels to use (e.g. RGB) + */ + public NewTextureLoader(java.lang.String fname, java.lang.String format){ + super( fname, format, observer); + } + + /** + * Constructs a NewTextureLoader object loading the specified file + * using the specified format and flags. + * The an image observer must be set using the setImageObserver() method + * before using this constructor. + * @param fname the name of the file to load + * @param format specificaiton of which channels to use (e.g. RGB) + * @param flags the flags to use in construction (e.g. generate mipmap) + */ + public NewTextureLoader(java.lang.String fname, java.lang.String format, int flags){ + super( fname, format, flags, observer); + } + + /** + * Constructs a NewTextureLoader object loading the specified URL + * using the default format. + * The an image observer must be set using the setImageObserver() method + * before using this constructor. + * @param url specifies the URL of the image to load + */ + public NewTextureLoader(java.net.URL url){ + super(url, observer); + } + + /** + * Constructs a NewTextureLoader object loading the specified URL + * using the specified flags. + * The an image observer must be set using the setImageObserver() method + * before using this constructor. + * @param url specifies the URL of the image to load + * @param flags the flags to use in construction (e.g. generate mipmap) + */ + public NewTextureLoader(java.net.URL url, int flags){ + super(url, flags, observer); + } + + /** + * Constructs a NewTextureLoader object loading the specified URL + * using the specified format. + * The an image observer must be set using the setImageObserver() method + * before using this constructor. + * @param url specifies the URL of the image to load + * @param format specificaiton of which channels to use (e.g. RGB) + */ + public NewTextureLoader(java.net.URL url, java.lang.String format){ + super(url, format, observer); + } + + /** + * Constructs a NewTextureLoader object loading the specified URL + * using the specified format and flags. + * The an image observer must be set using the setImageObserver() method + * before using this constructor. + * @param url specifies the URL of the image to load + * @param format specificaiton of which channels to use (e.g. RGB) + * @param flags the flags to use in construction (e.g. generate mipmap) + */ + public NewTextureLoader(java.net.URL url, java.lang.String format, int flags){ + super(url, format, flags, observer); + } + +} // end of TexturedPlane class + diff --git a/Solar system/sss3d-source/sss3d/contentbranch/PickingBehavior.java b/Solar system/sss3d-source/sss3d/contentbranch/PickingBehavior.java new file mode 100644 index 0000000..03e7ed0 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/PickingBehavior.java @@ -0,0 +1,145 @@ +/* + File: PickingBehavior.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/PickingBehavior.java,v 1.6 2000/11/29 09:26:59 portm Exp $ + $Author: portm $ + $Date: 2000/11/29 09:26:59 $ + $State: Exp $ + +*/ +package sss3d.contentbranch; + +import sss3d.utils.observer.*; + +import javax.media.j3d.*; +import com.sun.j3d.utils.picking.behaviors.PickMouseBehavior; +import com.sun.j3d.utils.picking.PickResult; +import com.sun.j3d.utils.geometry.Sphere; +import java.awt.event.*; +import java.awt.AWTEvent; +import java.util.Enumeration; + +/** + * This class handle the picking in the scene. + * So the celestial objects are pickable with the mouse. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.6 $ + */ +public class PickingBehavior extends PickMouseBehavior implements InfoObserver { + + private String id = "picking"; + private ObjectsInformation objInfo; + + // Wake up event + private WakeupOnAWTEvent wakeUp = new WakeupOnAWTEvent(MouseEvent.MOUSE_RELEASED); + + /** + * Initializes a new PickingBehavior. + * + * @param objRoot the root of the current BranchGroup. + * @param canvas the Canvas3D where the scene is displayed. + * @param bounds a BoundingSphere for the picking radius. + * @param objInfo an instance to the InfoBox via ObjectsInformation. + */ + public PickingBehavior(BranchGroup objRoot, Canvas3D canvas, + BoundingSphere bounds, ObjectsInformation objInfo) { + super(canvas, objRoot, bounds); + + this.setSchedulingBounds(bounds); + objRoot.addChild(this); + + // add picking behavior to info observer + this.objInfo = objInfo; + this.objInfo.attach(this); + } + + /** + * Override Behavior's initialize method to setup wakeup criteria. + */ + public void initialize() { + wakeupOn(wakeUp); + } + + /** + * Override Behavior's stimulus method to handle the event. + * This method is called when the right mouse key has been pressed. + * + * @param criteria all pressed keys in a list. + */ + public void processStimulus(Enumeration criteria) { + WakeupOnAWTEvent ev; + AWTEvent[] events; + MouseEvent eventMouse; + + if(criteria.hasMoreElements()) { + ev = (WakeupOnAWTEvent)criteria.nextElement(); + events = ev.getAWTEvent(); + eventMouse = (MouseEvent)events[0]; + + if(eventMouse.getModifiers() == MouseEvent.BUTTON3_MASK) { + updateScene(eventMouse.getX(), eventMouse.getY()); + } + } + // Set wakeup criteria for next time. + wakeupOn(wakeUp); + } + + /** + * This method is called when the left mouse key has been pressed. + * It take the closest celestial object on the scene and show the + * information about this celestial object in the InfoBox. + * + * @param xpos the x position of the mouse. + * @param ypos the y position of the mouse. + */ + public void updateScene(int xpos, int ypos) { + pickCanvas.setShapeLocation(xpos, ypos); + PickResult pickResult = pickCanvas.pickClosest(); + // only CelestialObjects are pickable + if(pickResult != null) { + CelestialObject cObject = (CelestialObject)pickResult.getNode(PickResult.PRIMITIVE); + if(cObject != null) { + objInfo.notifyObservers( cObject.getId(), ((CelestialObjectInfo)cObject.getInfo()).getTypeNbr() ); + } else { + System.out.println("Picking null pointer!!!!!!!!!!!"); + } + } + } + + /** + * Updates the information state of the object.
+ * + * @param oi a reference to the list of information observers + * @param id identification of the object that has to be updated + */ + public void update( String id, int parameter ) { + + } + + /** + * Returns the ID of the PickingBehavior class. + * + * @return the ID to idendification this PickingBehavior class. + */ + public String getId() { + return id; + } + + /** + * Returns a CelestialObjectInfo. + * + * @return a CelestialObjectInfo that is initialized with null. + */ + public CelestialObjectInfo getInfo() { + return null; + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/SceneCelestialObjects.java b/Solar system/sss3d-source/sss3d/contentbranch/SceneCelestialObjects.java new file mode 100644 index 0000000..4c415ee --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/SceneCelestialObjects.java @@ -0,0 +1,93 @@ +/* + File: SceneCelestialObjects.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/SceneCelestialObjects.java,v 1.10 2000/12/13 13:37:07 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:37:07 $ + $State: Exp $ + +*/ +package sss3d.contentbranch; + +import javax.media.j3d.*; +import java.awt.Color; + +/** + * This is the interface for all celestial objects scene graphs. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.10 $ + * @see sss3d.contentbranch.sun.SceneSun + * @see sss3d.contentbranch.planets.ScenePlanet + * @see sss3d.contentbranch.moons.SceneMoon + * @see sss3d.contentbranch.comets.SceneComet + */ +public interface SceneCelestialObjects { + + /** + * Should be called to remove this scene from the scenegraph. + */ + public void destroy(); + + /** + * Returns the BranchGroup of the created celestial object scene. + * + * @return a BranchGroup of the given celestial object. + */ + public BranchGroup createSceneGraph(); + + /** + * This method handle the animation and rotation of the celestial objects. + * + * @param animate if true, start animation; if false stop animation. + * @param rotate if true, start rotation; if false stop rotation. + */ + public void setAnimation(boolean animate, boolean rotate); + + /** + * Set the animation speed for the celestial objects. + */ + public void setAnimSpeed(); + + /** + * Add the coordinate system to this scenegraph. + */ + public void addCoord(); + + /** + * Remove the coordinate system from this scenegraph. + */ + public void removeCoord(); + + /** + * Add the color orbit to this scenegraph. + */ + public void addOrbit(); + + /** + * Remove the color orbit from this scenegraph. + */ + public void removeOrbit(); + + /** + * Set a new orbit color. + * + * @param orbitColor a color for the orbit. + */ + public void setOrbitColor(Color orbitColor); + + /** + * Get the current position of the celestial object. + * + * @return a Transfrom3D with the current position. + */ + public Transform3D getCurrentPosition(); +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/contentbranch/SceneSolarSystem.java b/Solar system/sss3d-source/sss3d/contentbranch/SceneSolarSystem.java new file mode 100644 index 0000000..d183b76 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/SceneSolarSystem.java @@ -0,0 +1,498 @@ +/* + File: SceneSolarSystem.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/SceneSolarSystem.java,v 1.21 2000/12/15 02:54:45 portm Exp $ + $Author: portm $ + $Date: 2000/12/15 02:54:45 $ + $State: Exp $ + +*/ +package sss3d.contentbranch; + +import sss3d.contentbranch.SceneCelestialObjects; +import sss3d.contentbranch.rockets.*; +import sss3d.contentbranch.planets.*; +import sss3d.contentbranch.moons.*; +import sss3d.contentbranch.orbit.*; +import sss3d.contentbranch.sun.*; +import sss3d.contentbranch.comets.*; +import sss3d.gui.LoaderBar; +import sss3d.utils.observer.*; +import sss3d.utils.SSS3dConstants; +import sss3d.utils.xmlparser.XMLConstants; +import sss3d.SolarSystemSimulator; +import sss3d.gui.LoaderBar; + +import java.util.Enumeration; +import java.util.Hashtable; +import javax.media.j3d.*; +import javax.vecmath.*; + +/** + * This class describe the scene of the solar system. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.21 $ + */ +public class SceneSolarSystem implements InfoObserver { + + private BranchGroup brGrAll; + private BranchGroup[] brGrSSS; + private int nbOfObjects; + private Hashtable celestial; + private String cameraName = "null"; + + private boolean firstTime = true; + private SceneCelestialObjects[] lnkSceneCelestialObjects; + + private Canvas3D canvas3D; + private ObjectsPositions objPos; + private ObjectsInformation objInfo; + private InitializationObject iniObject; + private SolarSystemSimulator sss3d; + + private Background backGr; + private NewTextureLoader newTextureLoader; + + /** + * Initializes a new SceneSolarSystem. + * + * @param canvas3D the active Canvas3D. + * @param objPos a reference to the concrete subject of + * the observer pattern positions + * @param objInfo a reference to the concrete subject of + * the observer pattern information + */ + public SceneSolarSystem(Canvas3D canvas3D, + ObjectsPositions objPos, + ObjectsInformation objInfo, + SolarSystemSimulator sss3d) { + this.objInfo = objInfo; + this.objInfo.attach(this); + this.canvas3D = canvas3D; + this.objPos = objPos; + this.sss3d = sss3d; + iniObject = objInfo.getInitializationObject(); + } + + /** + * Returns the BranchGroup of the created scene. + * It has the whole solar system. + * + * @return the BranchGroup of the scene. + */ + public BranchGroup createSceneGraph() { + + // do some initialization the first time only + if ( firstTime ) { + Enumeration cObjects = iniObject.getObjects(); + celestial = new Hashtable(); + int i = 0; + while(cObjects.hasMoreElements()) { + IniData dataStructure = (IniData)cObjects.nextElement(); + celestial.put(dataStructure.getName(), new Integer(i++)); + } + + nbOfObjects = celestial.size(); + + firstTime = false; + + } + + lnkSceneCelestialObjects = new SceneCelestialObjects[nbOfObjects]; + + System.out.println("SceneSolarSystem.createSceneGraph()"); + brGrAll = new BranchGroup(); + brGrAll.setCapability(BranchGroup.ALLOW_DETACH); + brGrAll.setCapability(Group.ALLOW_CHILDREN_READ); + brGrAll.setCapability(Group.ALLOW_CHILDREN_WRITE); + brGrAll.setCapability(Group.ALLOW_CHILDREN_EXTEND); + + // A BoundingSphere instance as general bounding region. + BoundingSphere boundsGen = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), + SSS3dConstants.BOUNDRADIUS); + + // Background setting for the Solar System Simulator. + newTextureLoader = new NewTextureLoader("images/bg.jpg"); + + backGr = new Background(); + backGr.setCapability(backGr.ALLOW_IMAGE_WRITE); + backGr.setApplicationBounds(boundsGen); + brGrAll.addChild(backGr); + + // Create and attach an ambient light. + Color3f ambColor = new Color3f(0.2f, 0.2f, 0.2f); + AmbientLight ambLight = new AmbientLight(ambColor); + ambLight.setInfluencingBounds(boundsGen); + brGrAll.addChild(ambLight); + + // Create and attach a point light. + Color3f pointColor = new Color3f(1.0f, 1.0f, 1.0f); + Point3f pointPos = new Point3f(0.0f, 0.0f, 0.0f); + Point3f pointAtt = new Point3f(1.0f, 0.0f, 0.0f); + PointLight pointLight = new PointLight(pointColor, pointPos, pointAtt); + pointLight.setInfluencingBounds(boundsGen); + brGrAll.addChild(pointLight); + + brGrSSS = new BranchGroup[nbOfObjects]; + + LoaderBar loader = new LoaderBar(nbOfObjects, sss3d); + + int i = 0; + + Enumeration ini = iniObject.getObjects(); + while(ini.hasMoreElements()) { + IniData dataStructure = (IniData)ini.nextElement(); + i = ((Integer)celestial.get(dataStructure.getName())).intValue(); + loader.setCount(i); + loader.setNote(dataStructure.getName()); + switch(dataStructure.getType()) { + case SSS3dConstants.STAR_TYPE : + // Create the sun. + lnkSceneCelestialObjects[i] = new SceneSun(new Sun(dataStructure.getName()), + objPos, + objInfo); + break; + + case SSS3dConstants.PLANET_TYPE : + // Create the current planet with his orbit. + lnkSceneCelestialObjects[i] = new ScenePlanet(new Planet(dataStructure.getName()), + objPos, + objInfo); + break; + + case SSS3dConstants.MOON_TYPE : + // Create the current moon with his orbit. + lnkSceneCelestialObjects[i] = new SceneMoon(new Moon(dataStructure.getName()), + objPos, + objInfo); + break; + + case SSS3dConstants.COMET_TYPE : + // Create the current moon with his orbit. + lnkSceneCelestialObjects[i] = new SceneComet(new Comet(dataStructure.getName()), + objPos, + objInfo); + break; +// for later use +/* + case SSS3dConstants.SATELLITE_TYPE : + // Create the current moon with his orbit. + lnkSceneCelestialObjects[i] = new SceneSatellite(new Satellite(dataStructure.getName()), + objPos, + objInfo); + break; +*/ + case SSS3dConstants.ROCKET_TYPE : + // Create the rocket or a space ship + lnkSceneCelestialObjects[i] = new SceneRocket(new Rocket(dataStructure.getName()), + objPos, + objInfo); + break; + + default: + System.out.println("SceneSolarSystem: the used type is not defined"); + } + brGrSSS[i] = lnkSceneCelestialObjects[i].createSceneGraph(); + brGrSSS[i].setCapability(BranchGroup.ALLOW_CHILDREN_READ); + + brGrAll.addChild(brGrSSS[i]); + if(!dataStructure.hasCoordinateSystem()) { + lnkSceneCelestialObjects[i].removeCoord(); + } + lnkSceneCelestialObjects[i].setOrbitColor(dataStructure.getColorOrbit()); + if(!dataStructure.hasOrbit()) { + lnkSceneCelestialObjects[i].removeOrbit(); + } + + if(!dataStructure.isVisible()) { + brGrSSS[i].detach(); + } + } + + // destroy the loader + loader.dispose(); + + // Now create the simple picking behavior. + brGrAll.setCapability(Node.ENABLE_PICK_REPORTING); + brGrAll.setCapability(Node.ALLOW_PICKABLE_READ); + PickingBehavior pickBehavior = new PickingBehavior(brGrAll, canvas3D, boundsGen, objInfo); + + // Compile the subgraph to optimize the performances. + brGrAll.compile(); + + setAnimationSpeed(); + + // Return the final version of the BranchGroup node brGrSSS + return brGrAll; + } + + + /** + * Reloads the whole scene. + * It's necessary to reload the whole scene after the user + * changes the simulation start date at runtime. + */ + public void reloadScene() { + + // destroy each scene + for( int i = 0; i < lnkSceneCelestialObjects.length; i++) { + lnkSceneCelestialObjects[i].destroy(); + lnkSceneCelestialObjects[i] = null; + } + + lnkSceneCelestialObjects = null; + + // remove all children + for( int i = 0; i < brGrSSS.length ; i++) { + brGrSSS[i].detach(); + brGrSSS[i] = null; + } + + // removes the root branch group + sss3d.removeScene(brGrAll); + brGrAll = null; + + // run garbage collector + System.gc(); + + // creates new scene + sss3d.addScene(createSceneGraph()); + + } + + /** + * Returns the celestial object. + * + * @param name + * + * @return SceneCelestialObjects + */ + public SceneCelestialObjects getCelestial(String name) { + int i = ((Integer)celestial.get(name)).intValue(); + return lnkSceneCelestialObjects[i]; + } + + /** + * This method handle the animation and rotation for each planet. + * + * @param animate if true, start animation; if false stop animation. + * @param rotate if true, start rotation; if false stop rotation. + */ + public void setAnimation(boolean animate, boolean rotate) { + for(int i = 0; i < nbOfObjects; i++) { + lnkSceneCelestialObjects[i].setAnimation(animate, rotate); + } + } + + /** + * Set the background in the canvas3D. + * + * @param hasImage if true, it would have an image; if false the + * background is black. + */ + public void setBackground(boolean hasImage) { + if(hasImage) { + backGr.setImage(newTextureLoader.getImage()); + } else { + backGr.setImage(null); + } + } + + /** + * Set the coordinate system of the celestial objects. + * + * @param hasCoord if true, it would have a coordinate system; if false + * it has no one. + */ + public void setCoordinate(boolean hasCoord) { + int i = 0; + Enumeration ini = iniObject.getObjects(); + while(ini.hasMoreElements()) { + IniData dataStructure = (IniData)ini.nextElement(); + if(hasCoord) { + boolean hasYetCoord = ((Boolean)iniObject.getParameter(XMLConstants.COORDINATESYSTEM, + dataStructure.getName())).booleanValue(); + if(!hasYetCoord) { + lnkSceneCelestialObjects[i].addCoord(); + } + } else { + lnkSceneCelestialObjects[i].removeCoord(); + } + iniObject.setParameter(new Boolean(hasCoord), + XMLConstants.COORDINATESYSTEM, + dataStructure.getName()); + i++; + } + } + + /** + * Set the orbit of the celestial objects. + * + * @param hasOrbit if true, it would have a orbit; if false + * it has no one. + */ + public void setOrbit(boolean hasOrbit) { + int i = 0; + Enumeration ini = iniObject.getObjects(); + while(ini.hasMoreElements()) { + IniData dataStructure = (IniData)ini.nextElement(); + if(hasOrbit) { + boolean hasYetOrbit = ((Boolean)iniObject.getParameter(XMLConstants.ORBIT, + dataStructure.getName())).booleanValue(); + if(!hasYetOrbit) { + lnkSceneCelestialObjects[i].addOrbit(); + } + } else { + lnkSceneCelestialObjects[i].removeOrbit(); + } + iniObject.setParameter(new Boolean(hasOrbit), + XMLConstants.ORBIT, + dataStructure.getName()); + i++; + } + } + + /** + * Returns the current position of an celestial object - + * selected by the camera position + * + * @return a Transform3D . + */ + public Transform3D getCurrentPosition() { + Integer cameraNr = (Integer)iniObject.getParameter(XMLConstants.CAMERA); + if(!cameraName.equals(SSS3dConstants.CAMERA_POSITIONS[cameraNr.intValue()])) { + cameraName = SSS3dConstants.CAMERA_POSITIONS[cameraNr.intValue()]; + System.out.println(cameraName); + sss3d.lnkViewBranch.setStartPosition(); + } + if(cameraName.equals(SSS3dConstants.CAMERA_POSITIONS[SSS3dConstants.CAMERA_DEFAULT])) { + return null; + } else { + int i = ((Integer)celestial.get(cameraName.toLowerCase())).intValue(); + if ( lnkSceneCelestialObjects != null ) { + if ( lnkSceneCelestialObjects[i] != null ) { + return lnkSceneCelestialObjects[i].getCurrentPosition(); + }else { + return null; + } + } + return null; + } + } + + + /** + * The update methode is used to keep the state of the concrete observer + * consistent with the state of the ObjectInfo.
+ * + * @param objInfo a reference to the ObjectInfo + * @param id the id of the concrete object that has to be updated + */ + public void update(String id, int parameter) { + switch(parameter) { + case XMLConstants.ANIMATIONSPEED: + AnimationSpeed animationSpeed = (AnimationSpeed)iniObject.getParameter(parameter); + int factor = 0; + switch(animationSpeed.getType()) { + case AnimationSpeed.DAYS_PER_SECOND: + factor = 1; + break; + case AnimationSpeed.HOURS_PER_SECOND: + factor = 24; + break; + case AnimationSpeed.MINUTES_PER_SECOND: + factor = 24 * 60; + break; + default: + } + int animSpeed = animationSpeed.getValue(); + if(sss3d.infoPanel != null) { + sss3d.infoPanel.setStep((double)animSpeed / (double)factor); + } + break; + case XMLConstants.DAY: + case XMLConstants.MONTH: + case XMLConstants.YEAR: + case XMLConstants.HOUR: + case XMLConstants.MINUTES: + case XMLConstants.SECONDS: + case XMLConstants.JDAY: + double date = ((Double)iniObject.getParameter(XMLConstants.JDAY)).doubleValue(); + if(sss3d.infoPanel != null) { + sss3d.infoPanel.setDate(date); + } + break; + case XMLConstants.VISIBLE: + Enumeration ini = iniObject.getObjects(); + while(ini.hasMoreElements()) { + IniData dataStructure = (IniData)ini.nextElement(); + if(dataStructure.getName().equals(id) ) { + int i = ((Integer)celestial.get(id)).intValue(); + if(!dataStructure.isVisible()) { + brGrSSS[i].detach(); + } else { + brGrAll.addChild(brGrSSS[i]); + } + } + } + break; + case SSS3dConstants.RELOAD : + reloadScene(); + break; + default: + } + } + + + /** + * Returns the id of the concrete observer. + * + * @return String the id of the concrete observer + */ + public String getId() { + return "scenesolarsystem"; + } + + /** + * Returns the information object from the concrete observer. + * ( not used - returns always null ) + * + * @return CelestialObjectInfo the info object from the concrete observer + */ + public CelestialObjectInfo getInfo() { + return null; + } + + private void setAnimationSpeed() { + for(int i = 0; i < nbOfObjects; i++) { + lnkSceneCelestialObjects[i].setAnimSpeed(); + } + AnimationSpeed animationSpeed = (AnimationSpeed)iniObject.getParameter(XMLConstants.ANIMATIONSPEED); + int factor = 0; + switch(animationSpeed.getType()) { + case AnimationSpeed.DAYS_PER_SECOND: + factor = 1; + break; + case AnimationSpeed.HOURS_PER_SECOND: + factor = 24; + break; + case AnimationSpeed.MINUTES_PER_SECOND: + factor = 24 * 60; + break; + default: + } + int animSpeed = animationSpeed.getValue(); + if(sss3d.infoPanel != null) { + sss3d.infoPanel.setStep((double)animSpeed / (double)factor); + } + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/SpaceShuttle.lwo b/Solar system/sss3d-source/sss3d/contentbranch/SpaceShuttle.lwo new file mode 100644 index 0000000..f3b4bf0 Binary files /dev/null and b/Solar system/sss3d-source/sss3d/contentbranch/SpaceShuttle.lwo differ diff --git a/Solar system/sss3d-source/sss3d/contentbranch/comets/Comet.java b/Solar system/sss3d-source/sss3d/contentbranch/comets/Comet.java new file mode 100644 index 0000000..fc194ca --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/comets/Comet.java @@ -0,0 +1,201 @@ +/* + File: Comet.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/comets/Comet.java,v 1.2 2000/12/12 16:23:43 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 16:23:43 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.comets; + +import sss3d.contentbranch.*; +import sss3d.utils.SSS3dConstants; +import sss3d.calculations.constants.AstronomicalConstants; + +import javax.media.j3d.*; +import javax.vecmath.*; +import com.sun.j3d.utils.geometry.Sphere; + +/** + * This class is generate a planet in our solar system. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.2 $ + */ +public class Comet extends Sphere implements CelestialObject { + + // The name of the current comet + private String comet; + + private CelestialObjectInfo lnkCelestialObjectInfo; + + /** + * Construct a new comet Sphere. The initradius of the Sphere is one meter. + * + * @param comet the name of the current comet. + */ + public Comet(String comet) { + super(INITRADIUS, Sphere.GENERATE_NORMALS | + Sphere.GENERATE_TEXTURE_COORDS, DIVISON); + this.comet = comet; + lnkCelestialObjectInfo = new CelestialObjectInfo(comet, SSS3dConstants.COMET_TYPE); + + // Set up the appearance to this Sphere object + this.setAppearance(createAppearance()); + } + + /** + * Returns a CelestialObjectInfo of the current comet. + * This object has all specific information of the current comet. + * + * @return a CelestialObjectInfo of the current comet. + */ + public CelestialObjectInfo getInfo() { + return lnkCelestialObjectInfo; + } + + /** + * Gets the ID of the current comet. + * + * @return the ID of the current comet. + */ + public String getId() { + return comet; + } + + /** + * Gets the radius of the current comet. + * + * @return the radius as a scaled factor of the current comet. + */ + public float getRadius() { + return (float)(lnkCelestialObjectInfo.getDiameter() / SSS3dConstants.SCALE); + } + + /** + * Gets the radius of the current comet. + * + * @return the radius as a logarithm factor of the current comet. + */ + public float getLogRadius() { + return (float)(Math.log(lnkCelestialObjectInfo.getDiameter() / 10) / 40); + } + + /** + * Gets the degree of the current comet. + * + * @return the degree () of the current comet. + */ + public double getDegree() { + return (double)lnkCelestialObjectInfo.getInclinationOfEquatorToOrbit(); + } + + /** + * Gets the rotation speed to the own axis of the current comet. + * + * @return the rotation speed to the own axis in day of the current comet. + * One day correspond to one second in the animation. + */ + public long getRotOwnAxis() { + return (long)(lnkCelestialObjectInfo.getRotationPeriod() * SECOND); + } + + /** + * Gets the rotation speed around the sun of the current comet. + * + * @return the rotation speed around the sun in year of the current comet. + * One year correspond to 365.242190 seconds (~6 minute) in the animation. + */ + public long getRotOrbit() { + return (long)(lnkCelestialObjectInfo.getOrbitPeriod() * SECOND * AstronomicalConstants.DAYS); + } + + /** + * Set the appearance of this comet (sphere) whith the right + * texture. + * + * @return the Appearance of the comet with his right texture. + */ + private Appearance createAppearance() { + + // Ambient-diffuse-reflection coefficient + Color3f diffAmb = new Color3f(1.0f, 1.0f, 1.0f); // white + // Diffuse-reflection coefficient + Color3f reflDiff = new Color3f(1.0f, 1.0f, 1.0f); // white + // Specular-reflection coefficient (reflectance function) + Color3f reflSpec = new Color3f(1.0f, 1.0f, 1.0f); // white + // c = shininess: cos^c in the specular reflection + float c = 1; + // Emitted light + Color3f lumEmise = new Color3f(0.2f, 0.2f, 0.2f); // black + + Appearance appearance = new Appearance(); + + // Set up the optical properties. + appearance.setMaterial(new Material(diffAmb, lumEmise, reflDiff, reflSpec, c)); + + Texture2D texture = getPlanetTexture(); + if(texture != null) { + // Set up the texture + appearance.setTexture(texture); + + // Application mode of the texture + TextureAttributes texAttr = new TextureAttributes(); + texAttr.setTextureMode(TextureAttributes.MODULATE); // there still are: BLEND, DECAL, + // and REPLACE + appearance.setTextureAttributes(texAttr); + } + + return appearance; + } + + /** + * Returns the texture of the current comet. + * + * @return the texture of the current comet. + */ + private Texture2D getPlanetTexture() { + + // Loading of the texture + NewTextureLoader newTextureLoader = new NewTextureLoader("images/" + getId() + ".jpg", + NewTextureLoader.GENERATE_MIPMAP); + + ImageComponent2D image; + try { + image = newTextureLoader.getImage(); + } catch(NullPointerException e) { + return null; + } + + int imageWidth = image.getWidth(); + int imageHeight = image.getHeight(); + + Texture2D texture = new Texture2D(Texture.MULTI_LEVEL_MIPMAP, Texture.RGBA, + imageWidth, imageHeight); + int imageLevel = 0; + + texture.setImage(imageLevel, image); + + while (imageWidth > SMALLEST || imageWidth > SMALLEST) { + imageLevel++; + if (imageWidth > SMALLEST) imageWidth /= 2; + if (imageHeight > SMALLEST) imageHeight /= 2; + image = newTextureLoader.getScaledImage(imageWidth, imageHeight); + texture.setImage(imageLevel, image); + } + + texture.setMagFilter(Texture.MULTI_LEVEL_POINT); + texture.setMinFilter(Texture.MULTI_LEVEL_POINT); + + return texture; + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/comets/SceneComet.java b/Solar system/sss3d-source/sss3d/contentbranch/comets/SceneComet.java new file mode 100644 index 0000000..d46f46b --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/comets/SceneComet.java @@ -0,0 +1,401 @@ +/* + File: SceneComet.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/comets/SceneComet.java,v 1.5 2000/12/15 02:53:08 portm Exp $ + $Author: portm $ + $Date: 2000/12/15 02:53:08 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.comets; + +import sss3d.contentbranch.*; +import sss3d.utils.SSS3dConstants; +import sss3d.utils.observer.*; +import sss3d.contentbranch.orbit.*; +import sss3d.utils.xmlparser.XMLConstants; + +import javax.media.j3d.*; +import javax.vecmath.*; +import com.sun.j3d.utils.behaviors.interpolators.*; +import java.util.Date; +import java.awt.Color; + +/** + * This class describe the scene of a comet. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.5 $ + * @see Comet + */ +public class SceneComet implements SceneCelestialObjects, PositionObserver, InfoObserver { + + private RotPosScaleTCBSplinePathInterpolator spline; + private Alpha animAlpha; + private long alphaTime = 0; + private Date date; + + private BranchGroup removableCoordBG; + private BranchGroup removableOrbitBG; + private TransformGroup trGrRotAndLeafs; + private TransformGroup trGrOrbit; + private TransformGroup trGrTendSpline; + + private ColorOrbit colorOrbit; + + private Comet comet; + + private ObjectsPositions objPos; + private ObjectsInformation objInfo; + private InitializationObject iniObject; + + + /** + * Initializes a new ScenePlanet. + * + * @param comet a object reference of a given comet. + * @param objPos a reference to the concrete subject of + * the observer pattern positions + * @param objInfo a reference to the concrete subject of + * the observer pattern information + */ + public SceneComet(Comet comet, ObjectsPositions objPos, + ObjectsInformation objInfo ) { + this.comet = comet; + this.objPos = objPos; + this.objPos.attach(this); + this.objInfo = objInfo; + this.objInfo.attach(this); + this.iniObject = objInfo.getInitializationObject(); + } + + /** + * Removes this object from the position observer list. + */ + public void destroy() { + objPos.detach(this); + objInfo.detach(this); + comet = null; + } + + /** + * Updates the position state of the object. + * + * @param orbitPos a reference to the list containing all position observer + */ + public void update(OrbitPositions orbitPos) { + + } + + /** + * Updates the information state of the object.
+ * + * @param id identification of the object that has to be updated + * @param parameter the parameter that has been changed + */ + public void update( String id, int parameter ) { + + if ( id.equals( comet.getId() ) || + id.equals("all") ) { + + IniData data = (IniData)objInfo.getParameter( XMLConstants.COMET, comet.getId() ); + + switch ( parameter ) { + case XMLConstants.VISIBLE : + // implemented inside SceneSolarSystem + break; + case XMLConstants.COORDINATESYSTEM : + if ( data.hasCoordinateSystem() ) { + addCoord(); + } else { + removeCoord(); + } + break; + case XMLConstants.ORBIT : + if ( data.hasOrbit() ) { + addOrbit(); + } else { + removeOrbit(); + } + break; + case XMLConstants.COLORORBIT : + setOrbitColor( data.getColorOrbit()); + break; + case XMLConstants.ANIMATIONSPEED : + setAnimSpeed(); + break; + default : break; + + } + } + + } + + /** + * Returns the ID of the current comet. + * + * @return the ID to idendification the comet. + */ + public String getId() { + return comet.getId(); + } + + /** + * Returns a CelestialObjectInfo of the current comet. + * This object has all specific information of the current comet. + * + * @return a CelestialObjectInfo of the current comet. + */ + public CelestialObjectInfo getInfo() { + return comet.getInfo(); + } + + /** + * This method handle the animation and rotation of the celestial objects. + * + * @param animate if true, start animation; if false stop animation. + * @param rotate if true, start rotation; if false stop rotation. + */ + public void setAnimation(boolean animate, boolean rotate) { + date = new Date(); + if(animate) { + /* + Set the stop time for the animation and rotation. + Without this trick, the celestial objects are jumping around. + Because when the animation is stop, the objects goes on + in the background. + */ + alphaTime = date.getTime() - alphaTime; + animAlpha.setStartTime(alphaTime); + } else { + // save the stop time for the animation and rotation. + alphaTime = animAlpha.getStartTime(); + alphaTime = date.getTime() - alphaTime; + } + // set the animation and rotation to stop or go. + spline.setEnable(animate); + } + + /** + * Set the animation speed for the celestial objects. + */ + public void setAnimSpeed() { + date = new Date(); + + AnimationSpeed animationSpeed = (AnimationSpeed)objInfo.getInitializationObject().getParameter(XMLConstants.ANIMATIONSPEED); + int factor = 1; + switch ( animationSpeed.getType() ) { + case AnimationSpeed.DAYS_PER_SECOND : + break; + case AnimationSpeed.HOURS_PER_SECOND : + factor = 24; + break; + case AnimationSpeed.MINUTES_PER_SECOND : + factor = 24 * 60; + break; + default : break; + + } + + long durationOrbit = (long)(comet.getRotOrbit() * factor / animationSpeed.getValue()); + + long orbitIncreasing = animAlpha.getIncreasingAlphaDuration(); + // delta t = t1*(1-T2/T1) + long diff = (long)((date.getTime() - animAlpha.getStartTime()) * + (1.0f - (float)orbitIncreasing / (float)durationOrbit)); + + animAlpha.setIncreasingAlphaDuration(durationOrbit); + + animAlpha.setStartTime(animAlpha.getStartTime() - diff); + + } + + /** + * Add the coordinate system to this scenegraph. + */ + public void addCoord() { + trGrRotAndLeafs.addChild(removableCoordBG); + } + + /** + * Remove the coordinate system from this scenegraph. + */ + public void removeCoord() { + removableCoordBG.detach(); + } + + /** + * Add the color orbit to this scenegraph. + */ + public void addOrbit() { + trGrOrbit.addChild(removableOrbitBG); + } + + /** + * Remove the color orbit from this scenegraph. + */ + public void removeOrbit() { + removableOrbitBG.detach(); + } + + /** + * Set a new orbit color. + * + * @param orbitColor the new color of the orbit + */ + public void setOrbitColor(Color orbitColor) { + colorOrbit.setColor(orbitColor); + } + + /** + * Get the current position of the comet. + * + * @return a Transform3D with the current position. + */ + public Transform3D getCurrentPosition() { + Transform3D transform = new Transform3D(); + trGrTendSpline.getTransform(transform); + return transform; + } + + /** + * Returns the BranchGroup of the created comet scene. + * It has a comet as leaf, make a rotation to the own axis and + * make with a TCB-spline function a rotation around the sun. + * + * @return the BranchGroup of the given comet. + */ + public BranchGroup createSceneGraph() { + // A BoundingSphere instance as general bounding region. + BoundingSphere boundsGen = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), + SSS3dConstants.BOUNDRADIUS); + + // Create the first TransformGroup node trGrRotAndLeafs for the comet, + // the coordinate system and the rotation + trGrRotAndLeafs = new TransformGroup(); + + // With the ALLOW_TRANSFORM_WRITE capability, we allow the + // modification of the TransformGroup's code by the behavior's + // code at run time. + trGrRotAndLeafs.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + + trGrRotAndLeafs.setCapability(Group.ALLOW_CHILDREN_READ); + trGrRotAndLeafs.setCapability(Group.ALLOW_CHILDREN_WRITE); + trGrRotAndLeafs.setCapability(Group.ALLOW_CHILDREN_EXTEND); + + // Attach the leaf node "comet" to the TransformGroup trGrRotAndLeafs. + trGrRotAndLeafs.addChild(comet); + + removableCoordBG = new BranchGroup(); + + // Create and attach a coordinate system to the TransformGroup node + // trGrRotAndLeafs, that is to the comet. + removableCoordBG.addChild(new CoordinateSystem(1.2f)); + + // Allow to detach the Coordinate System + removableCoordBG.setCapability(BranchGroup.ALLOW_DETACH); + + // Set the picking of the CoordinateSystem BranchGroup to false. + removableCoordBG.setPickable(false); + + trGrRotAndLeafs.addChild(removableCoordBG); + + // Create the second TransformGroup node trGrTendSpline for the comet's + // rotation around the sun and the tend. + trGrTendSpline = new TransformGroup(); + + // With the ALLOW_TRANSFORM_READ and ALLOW_TRANSFORM_WRITE + // capabilities, we allow the modification of the TransformGroup's + // code by the Behavior's code at run time. + trGrTendSpline.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); + trGrTendSpline.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + + // Attach trGrRotAndLeafs node to the trGrTendSpline node. + trGrTendSpline.addChild(trGrRotAndLeafs); + + Transform3D yAxis = new Transform3D(); + + // Create the alpha(t) function. + animAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, + /*comet.getRotOrbit()*/Long.MAX_VALUE, 0, 0, 0, 0, 0); + + // rotate the comet to his true tend + Matrix4d mat = new Matrix4d(); + mat.rotX(Math.toRadians(comet.getDegree())); + Quat4f r = new Quat4f(); + r.set(mat); + // set scale of the comet + float scale; + boolean compressed = ((Boolean)iniObject.getParameter(XMLConstants.COMPRESSED)).booleanValue(); + if(compressed) { + scale = comet.getLogRadius(); + } else { + scale = comet.getRadius(); + } + Point3f s = new Point3f(scale, scale, scale); + + Double time = (Double)iniObject.getParameter(XMLConstants.JDAY); + // take the positions of the comet + Point3f[] pos = objPos.getPositions(getInfo(), time.doubleValue(), compressed); + int pointNrs = pos.length; + float stepLength = 1 / (float)pointNrs; + float stepPos = 0.0f; + // save the positions in the TCBKeyFrame + TCBKeyFrame[] keyFrames = new TCBKeyFrame[pointNrs+1]; + for(int i = 0; i < pointNrs; i++) { + keyFrames[i] = new TCBKeyFrame(stepPos, 0, pos[i], r, s, 0.0f, 0.0f, 0.0f); + stepPos += stepLength; + } + keyFrames[pointNrs] = new TCBKeyFrame(1.0f, 0, pos[0], r, s, 0.0f, 0.0f, 0.0f); + + // make a spline courve of the position points + spline = new RotPosScaleTCBSplinePathInterpolator(animAlpha, + trGrTendSpline, + yAxis, + keyFrames); + spline.setSchedulingBounds(boundsGen); + trGrTendSpline.addChild(spline); + + // Create the TransformGroup node trGrOrbit for the comet orbit. + trGrOrbit = new TransformGroup(); + + trGrOrbit.addChild(trGrTendSpline); + + trGrOrbit.setCapability(Group.ALLOW_CHILDREN_READ); + trGrOrbit.setCapability(Group.ALLOW_CHILDREN_WRITE); + trGrOrbit.setCapability(Group.ALLOW_CHILDREN_EXTEND); + + removableOrbitBG = new BranchGroup(); + + colorOrbit = new ColorLineOrbit(Color.red); + + colorOrbit.setPositions(pos); + + // Attach the leaf node "orbit" to the BranchGroup removableOrbitBG. + removableOrbitBG.addChild(colorOrbit); + + removableOrbitBG.setCapability(BranchGroup.ALLOW_DETACH); + + // Set the picking of the ColorOrbit BranchGroup to false. + removableOrbitBG.setPickable(false); + + trGrOrbit.addChild(removableOrbitBG); + + BranchGroup brGrAll = new BranchGroup(); + brGrAll.addChild(trGrOrbit); + + brGrAll.setCapability(BranchGroup.ALLOW_DETACH); + + // Return the final version of the BranchGroup node brGrAll. + return brGrAll; + } +} + diff --git a/Solar system/sss3d-source/sss3d/contentbranch/moons/Moon.java b/Solar system/sss3d-source/sss3d/contentbranch/moons/Moon.java new file mode 100644 index 0000000..c189e37 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/moons/Moon.java @@ -0,0 +1,207 @@ +/* + File: Moon.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/moons/Moon.java,v 1.4 2000/12/12 16:18:15 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 16:18:15 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.moons; + +import sss3d.contentbranch.*; +import sss3d.utils.SSS3dConstants; + +import javax.media.j3d.*; +import javax.vecmath.*; +import com.sun.j3d.utils.geometry.Sphere; + +/** + * This class is generate a moon in our solar system. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.4 $ + */ +public class Moon extends Sphere implements CelestialObject { + + // The name of the current moon + private String moon; + + private CelestialObjectInfo lnkCelestialObjectInfo; + + /** + * Construct a new moon Sphere. The initradius of the Sphere is one meter. + * + * @param pName the name of the current moon. + */ + public Moon(String moon) { + super(INITRADIUS, Sphere.GENERATE_NORMALS | + Sphere.GENERATE_TEXTURE_COORDS, DIVISON); + this.moon = moon; + lnkCelestialObjectInfo = new CelestialObjectInfo(moon, SSS3dConstants.MOON_TYPE); + + // Set up the appearance to this Sphere object + this.setAppearance(createAppearance()); + } + + /** + * Returns a CelestialObjectInfo of the current moon. + * This object has all specific information of the current moon. + * + * @return a CelestialObjectInfo of the current moon. + */ + public CelestialObjectInfo getInfo() { + return lnkCelestialObjectInfo; + } + + /** + * Gets the ID of the current moon. + * + * @return the ID of the current moon. + */ + public String getId() { + return moon; + } + + /** + * Gets the parent celestial object of the current moon. + * + * @return the name of the parent celestial object. + */ + public String getParentName() { + return lnkCelestialObjectInfo.getParentName(); + } + + /** + * Gets the radius of the current moon. + * + * @return the radius as a scaled factor of the current moon. + */ + public float getRadius() { + return (float)(lnkCelestialObjectInfo.getDiameter() / SSS3dConstants.SCALE); + } + + /** + * Gets the radius of the current moon. + * + * @return the radius as a logarithm factor of the current moon. + */ + public float getLogRadius() { + return (float)(Math.log(lnkCelestialObjectInfo.getDiameter() / 10) / 40); + } + + /** + * Gets the degree of the current moon. + * + * @return the degree () of the current moon. + */ + public double getDegree() { + return (double)lnkCelestialObjectInfo.getInclinationOfEquatorToOrbit(); + } + + /** + * Gets the rotation speed to the own axis of the current moon. + * + * @return the rotation speed to the own axis in day of the current moon. + * One day correspond to one second in the animation. + */ + public long getRotOwnAxis() { + return (long)(lnkCelestialObjectInfo.getRotationPeriod() * SECOND); + } + + /** + * Gets the rotation speed around the planet of the current moon. + * + * @return the rotation speed around the planet in year of the current moon. + * One year correspond to 365.242190 seconds (~6 minute) in the animation. + */ + public long getRotOrbit() { + return (long)(lnkCelestialObjectInfo.getOrbitPeriod() * SECOND); + } + + /** + * Set the appearance of this moon (sphere) whith the right + * texture. + * + * @return the Appearance of the moon with his right texture. + */ + private Appearance createAppearance() { + + // Ambient-diffuse-reflection coefficient + Color3f diffAmb = new Color3f(1.0f, 1.0f, 1.0f); // white + // Diffuse-reflection coefficient + Color3f reflDiff = new Color3f(1.0f, 1.0f, 1.0f); // white + // Specular-reflection coefficient (reflectance function) + Color3f reflSpec = new Color3f(1.0f, 1.0f, 1.0f); // white + // c = shininess: cos^c in the specular reflection + float c = 1; + // Emitted light + Color3f lumEmise = new Color3f(0.2f, 0.2f, 0.2f); // black + + Appearance appearance = new Appearance(); + + // Set up the optical properties. + appearance.setMaterial(new Material(diffAmb, lumEmise, reflDiff, reflSpec, c)); + + Texture2D texture = getMoonTexture(); + if(texture != null) { + // Set up the texture + appearance.setTexture(texture); + + // Application mode of the texture + TextureAttributes texAttr = new TextureAttributes(); + texAttr.setTextureMode(TextureAttributes.MODULATE); // there still are: BLEND, DECAL, + // and REPLACE + appearance.setTextureAttributes(texAttr); + } + return appearance; + } + + /** + * Returns the texture of the current moon. + * + * @return the texture of the current moon. + */ + private Texture2D getMoonTexture() { + + // Loading of the texture + NewTextureLoader newTextureLoader = new NewTextureLoader("images/" + getId() + ".jpg", + NewTextureLoader.GENERATE_MIPMAP); + ImageComponent2D image; + try { + image = newTextureLoader.getImage(); + } catch(NullPointerException e) { + return null; + } + + int imageWidth = image.getWidth(); + int imageHeight = image.getHeight(); + + Texture2D texture = new Texture2D(Texture.MULTI_LEVEL_MIPMAP, Texture.RGBA, + imageWidth, imageHeight); + int imageLevel = 0; + + texture.setImage(imageLevel, image); + + while (imageWidth > SMALLEST || imageWidth > SMALLEST) { + imageLevel++; + if (imageWidth > SMALLEST) imageWidth /= 2; + if (imageHeight > SMALLEST) imageHeight /= 2; + image = newTextureLoader.getScaledImage(imageWidth, imageHeight); + texture.setImage(imageLevel, image); + } + + texture.setMagFilter(Texture.MULTI_LEVEL_POINT); + texture.setMinFilter(Texture.MULTI_LEVEL_POINT); + + return texture; + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/moons/SceneMoon.java b/Solar system/sss3d-source/sss3d/contentbranch/moons/SceneMoon.java new file mode 100644 index 0000000..5742929 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/moons/SceneMoon.java @@ -0,0 +1,511 @@ +/* + File: SceneMoon.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/moons/SceneMoon.java,v 1.11 2000/12/15 02:53:18 portm Exp $ + $Author: portm $ + $Date: 2000/12/15 02:53:18 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.moons; + +import sss3d.contentbranch.*; +import sss3d.utils.SSS3dConstants; +import sss3d.utils.observer.*; +import sss3d.contentbranch.orbit.*; +import sss3d.calculations.constants.AstronomicalConstants; +import sss3d.utils.xmlparser.XMLConstants; + +import javax.media.j3d.*; +import javax.vecmath.*; +import com.sun.j3d.utils.behaviors.interpolators.*; +import java.util.Date; +import java.awt.Color; + +/** + * This class describe the scene of a moon. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.11 $ + * @see Moon + */ +public class SceneMoon implements SceneCelestialObjects, PositionObserver, InfoObserver { + + private RotPosScaleTCBSplinePathInterpolator spline; + private RotPosScaleTCBSplinePathInterpolator parentSpline; + private RotationInterpolator rotator; + private Alpha rotationAlpha; + private Alpha animAlpha; + private Alpha parentAnimAlpha; + private long alphaTime = 0; + private Date date; + + private BranchGroup removableCoordBG; + private BranchGroup removableOrbitBG; + private TransformGroup trGrRotAndLeafs; + private TransformGroup trGrOrbit; + private TransformGroup trGrTendSpline; + private TransformGroup trGrParentSpline; + + private ColorOrbit colorOrbit; + + private Moon moon; + + private ObjectsPositions objPos; + private ObjectsInformation objInfo; + private InitializationObject iniObject; + private CelestialObjectInfo parentObject; + + /** + * Initializes a new ScenePlanet. + * + * @param moon a object reference of a given moon. + * @param objPos a reference to the concrete subject of + * the observer pattern positions + * @param objInfo a reference to the concrete subject of + * the observer pattern information + */ + public SceneMoon(Moon moon, ObjectsPositions objPos, + ObjectsInformation objInfo ) { + this.moon = moon; + this.objPos = objPos; + this.objPos.attach(this); + this.objInfo = objInfo; + this.objInfo.attach(this); + iniObject = objInfo.getInitializationObject(); + parentObject = objInfo.getInfo(moon.getParentName()); + } + + /** + * Removes this object from the position observer list. + */ + public void destroy() { + objPos.detach(this); + objInfo.detach(this); + moon = null; + } + + /** + * Updates the position state of the object.
+ * + * @param orbitPos a reference to the list containing all position observer + */ + public void update(OrbitPositions orbitPos) { + + } + + /** + * Updates the information state of the object.
+ * + * @param id identification of the object that has to be updated + * @param parameter the parameter that has been changed + */ + public void update( String id, int parameter ) { + + if ( id.equals( moon.getId() ) || + id.equals("all") ) { + + IniData data = (IniData)objInfo.getParameter( XMLConstants.MOON, moon.getId() ); + + switch ( parameter ) { + case XMLConstants.VISIBLE : + // implemented inside SceneSolarSystem + break; + case XMLConstants.COORDINATESYSTEM : + if ( data.hasCoordinateSystem() ) { + addCoord(); + } else { + removeCoord(); + } + break; + case XMLConstants.ORBIT : + if ( data.hasOrbit() ) { + addOrbit(); + } else { + removeOrbit(); + } + break; + case XMLConstants.COLORORBIT : + setOrbitColor( data.getColorOrbit()); + break; + case XMLConstants.ANIMATIONSPEED : + setAnimSpeed(); + break; + default : break; + } + } + + } + + /** + * Returns the ID of the current moon. + * + * @return the ID to idendification the moon. + */ + public String getId() { + return moon.getId(); + } + + /** + * Returns a CelestialObjectInfo of the current moon. + * This object has all specific information of the current moon. + * + * @return a CelestialObjectInfo of the current moon. + */ + public CelestialObjectInfo getInfo() { + return moon.getInfo(); + } + + /** + * This method handle the animation and rotation of the celestial objects. + * + * @param animate if true, start animation; if false stop animation. + * @param rotate if true, start rotation; if false stop rotation. + */ + public void setAnimation(boolean animate, boolean rotate) { + date = new Date(); + if(animate) { + /* + Set the stop time for the animation and rotation. + Without this trick, the celestial objects are jumping around. + Because when the animation is stop, the objects goes on + in the background. + */ + alphaTime = date.getTime() - alphaTime; + rotationAlpha.setStartTime(alphaTime); + animAlpha.setStartTime(alphaTime); + parentAnimAlpha.setStartTime(alphaTime); + } else { + // save the stop time for the animation and rotation. + alphaTime = animAlpha.getStartTime(); + alphaTime = date.getTime() - alphaTime; + } + // set the animation and rotation to stop or go. + spline.setEnable(animate); + parentSpline.setEnable(animate); + rotator.setEnable(rotate); + } + + /** + * Set the animation speed for the moon. + */ + public void setAnimSpeed() { + date = new Date(); + + AnimationSpeed animationSpeed = (AnimationSpeed)objInfo.getInitializationObject().getParameter(XMLConstants.ANIMATIONSPEED); + int factor = 0; + switch(animationSpeed.getType()) { + case AnimationSpeed.DAYS_PER_SECOND: + factor = 1; + break; + case AnimationSpeed.HOURS_PER_SECOND: + factor = 24; + break; + case AnimationSpeed.MINUTES_PER_SECOND: + factor = 24 * 60; + break; + default: + } + // moon rotation + int animSpeed = animationSpeed.getValue(); + long duration = (long)(moon.getRotOwnAxis() * factor / animSpeed); + + long increasing = rotationAlpha.getIncreasingAlphaDuration(); + // delta t = t1*(1-T2/T1) + long diff = (long)((date.getTime() - rotationAlpha.getStartTime()) * + (1.0f - (float)duration / (float)increasing)); + rotationAlpha.setIncreasingAlphaDuration(duration); + rotationAlpha.setStartTime(rotationAlpha.getStartTime() + diff); + + // moon movement + duration = (long)(moon.getRotOrbit() * factor / animSpeed); + + increasing = animAlpha.getIncreasingAlphaDuration(); + // delta t = t1*(1-T2/T1) + diff = (long)((date.getTime() - animAlpha.getStartTime()) * + (1.0f - (float)duration / (float)increasing)); + + animAlpha.setIncreasingAlphaDuration(duration); + animAlpha.setStartTime(animAlpha.getStartTime() + diff); + + // parent movement + duration = (long)(parentObject.getOrbitPeriod() * 1000 * AstronomicalConstants.DAYS * + factor / animSpeed); + + increasing = parentAnimAlpha.getIncreasingAlphaDuration(); + // delta t = t1*(1-T2/T1) + diff = (long)((date.getTime() - parentAnimAlpha.getStartTime()) * + (1.0f - (float)duration / (float)increasing)); + + parentAnimAlpha.setIncreasingAlphaDuration(duration); + parentAnimAlpha.setStartTime(parentAnimAlpha.getStartTime() + diff); + } + + /** + * Add the coordinate system to this scenegraph. + */ + public void addCoord() { + trGrRotAndLeafs.addChild(removableCoordBG); + } + + /** + * Remove the coordinate system from this scenegraph. + */ + public void removeCoord() { + removableCoordBG.detach(); + } + + /** + * Add the color orbit to this scenegraph. + */ + public void addOrbit() { + trGrOrbit.addChild(removableOrbitBG); + } + + /** + * Remove the color orbit from this scenegraph. + */ + public void removeOrbit() { + removableOrbitBG.detach(); + } + + /** + * Set a new orbit color. + * + * @param orbitColor the new color of the orbit + */ + public void setOrbitColor(Color orbitColor) { + colorOrbit.setColor(orbitColor); + } + + /** + * Get the current position of the moon. + * + * @return a Transform3D with the current position. + */ + public Transform3D getCurrentPosition() { + Transform3D transVec = new Transform3D(); + Transform3D transVecParent = new Transform3D(); + Transform3D transRot = new Transform3D(); + trGrTendSpline.getTransform(transVec); + trGrRotAndLeafs.getTransform(transRot); + trGrParentSpline.getTransform(transVecParent); + Vector3d vec = new Vector3d(); + Vector3d vecParent = new Vector3d(); + transVec.get(vec); + transVecParent.get(vecParent); + vec.add(vecParent); + transRot.setTranslation(vec); + return transRot; + } + + /** + * Returns the BranchGroup of the created moon scene. + * It has a moon as leaf, make a rotation to the own axis and + * make with a TCB-spline function a rotation around the parent planet. + * + * @return the BranchGroup of the given moon. + */ + public BranchGroup createSceneGraph() { + // A BoundingSphere instance as general bounding region. + BoundingSphere boundsGen = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), + SSS3dConstants.BOUNDRADIUS); + + // Create the first TransformGroup node trGrRotAndLeafs for the moon, + // the coordinate system and the rotation + trGrRotAndLeafs = new TransformGroup(); + + // With the ALLOW_TRANSFORM_READ and ALLOW_TRANSFORM_WRITE + // capabilities, we allow the modification of the TransformGroup's + // code by the Behavior's code at run time. + trGrRotAndLeafs.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); + trGrRotAndLeafs.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + + trGrRotAndLeafs.setCapability(Group.ALLOW_CHILDREN_READ); + trGrRotAndLeafs.setCapability(Group.ALLOW_CHILDREN_WRITE); + trGrRotAndLeafs.setCapability(Group.ALLOW_CHILDREN_EXTEND); + + // Attach the leaf node "moon" to the TransformGroup trGrRotAndLeafs. + trGrRotAndLeafs.addChild(moon); + + removableCoordBG = new BranchGroup(); + + // Create and attach a coordinate system to the TransformGroup node + // trGrRotAndLeafs, that is to the moon. + removableCoordBG.addChild(new CoordinateSystem(1.2f)); + + // Allow to detach the Coordinate System + removableCoordBG.setCapability(BranchGroup.ALLOW_DETACH); + + // Set the picking of the CoordinateSystem BranchGroup to false. + removableCoordBG.setPickable(false); + + trGrRotAndLeafs.addChild(removableCoordBG); + + // Prepare the RotationInterpolator (Behavior) for the + // moon's rotation about its own axis. + Transform3D tr3Drot = new Transform3D(); + + float startRot, endRot; + if(moon.getRotOwnAxis() > 0) { + // Create the alpha(t) function. Positiv rotation! + rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, + /*moon.getRotOwnAxis()*/Long.MAX_VALUE, 0, 0, 0, 0, 0); + startRot = 0.0f; + endRot = (float)(2.0 * Math.PI); + } else { + // Create the alpha(t) function. Negativ rotation! + rotationAlpha = new Alpha(-1, Alpha.DECREASING_ENABLE, 0, 0, 0, 0, 0, + /*Math.abs(moon.getRotOwnAxis())*/Long.MAX_VALUE, 0, 0); + startRot = (float)(2.0 * Math.PI); + endRot = 0.0f; + } + // Create the moon's rotation about its own axis. + rotator = new RotationInterpolator(rotationAlpha, + trGrRotAndLeafs, tr3Drot, + startRot, endRot); + rotator.setSchedulingBounds(boundsGen); + trGrRotAndLeafs.addChild(rotator); + + // Create the second TransformGroup node trGrTendSpline for the moon's + // rotation around the parent planet and the tend. + trGrTendSpline = new TransformGroup(); + + // With the ALLOW_TRANSFORM_READ and ALLOW_TRANSFORM_WRITE + // capabilities, we allow the modification of the TransformGroup's + // code by the Behavior's code at run time. + trGrTendSpline.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); + trGrTendSpline.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + + // Attach trGrRotAndLeafs node to the trGrTendSpline node. + trGrTendSpline.addChild(trGrRotAndLeafs); + + Transform3D yAxis = new Transform3D(); + + // Create the alpha(t) function. + animAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, + /*moon.getRotOrbit()*/Long.MAX_VALUE, 0, 0, 0, 0, 0); + + // the animation Alpha value of the parent object + long duration = (long)(parentObject.getOrbitPeriod() * 1000 * AstronomicalConstants.DAYS); + // Create the alpha(t) function. + parentAnimAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, + /*duration*/Long.MAX_VALUE, 0, 0, 0, 0, 0); + + // rotate the moon to his true tend + Matrix4d mat = new Matrix4d(); + mat.rotX(Math.toRadians(moon.getDegree())); + Quat4f r = new Quat4f(); + r.set(mat); + // set scale of the moon + float scale; + boolean compressed = ((Boolean)iniObject.getParameter(XMLConstants.COMPRESSED)).booleanValue(); + if(compressed) { + scale = moon.getLogRadius(); + } else { + scale = moon.getRadius(); + } + Point3f s = new Point3f(scale, scale, scale); + + Double time = (Double)iniObject.getParameter(XMLConstants.JDAY); + // take the positions of the moon + Point3f[] pos = objPos.getPositions(getInfo(), time.doubleValue(), compressed); + int pointNrs = pos.length; + float stepLength = 1 / (float)pointNrs; + float stepPos = 0.0f; + // save the positions in the TCBKeyFrame + TCBKeyFrame[] keyFrames = new TCBKeyFrame[pointNrs+1]; + for(int i = 0; i < pointNrs; i++) { + keyFrames[i] = new TCBKeyFrame(stepPos, 0, pos[i], r, s, 0.0f, 0.0f, 0.0f); + stepPos += stepLength; + } + keyFrames[pointNrs] = new TCBKeyFrame(1.0f, 0, pos[0], r, s, 0.0f, 0.0f, 0.0f); + + // make a spline courve of the position points + spline = new RotPosScaleTCBSplinePathInterpolator(animAlpha, + trGrTendSpline, + yAxis, + keyFrames); + spline.setSchedulingBounds(boundsGen); + trGrTendSpline.addChild(spline); + + // Create the TransformGroup node trGrOrbit for the moon orbit. + trGrOrbit = new TransformGroup(); + + trGrOrbit.addChild(trGrTendSpline); + + trGrOrbit.setCapability(Group.ALLOW_CHILDREN_READ); + trGrOrbit.setCapability(Group.ALLOW_CHILDREN_WRITE); + trGrOrbit.setCapability(Group.ALLOW_CHILDREN_EXTEND); + + removableOrbitBG = new BranchGroup(); + + colorOrbit = new ColorLineOrbit(Color.red); + + colorOrbit.setPositions(pos); + + // Attach the leaf node "orbit" to the BranchGroup removableOrbitBG. + removableOrbitBG.addChild(colorOrbit); + + removableOrbitBG.setCapability(BranchGroup.ALLOW_DETACH); + + // Set the picking of the ColorOrbit BranchGroup to false. + removableOrbitBG.setPickable(false); + + trGrOrbit.addChild(removableOrbitBG); + + trGrParentSpline = new TransformGroup(); + + // With the ALLOW_TRANSFORM_READ and ALLOW_TRANSFORM_WRITE + // capabilities, we allow the modification of the TransformGroup's + // code by the Behavior's code at run time. + trGrParentSpline.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); + trGrParentSpline.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + + // Attach trGrRotAndLeafs node to the trGrTendSpline node. + trGrParentSpline.addChild(trGrOrbit); + + r = null; + s = null; + r = new Quat4f(); + s = new Point3f(1.0f, 1.0f, 1.0f); + + // take the positions of the parent planet + Point3f[] parentPos = objPos.getPositions(parentObject, time.doubleValue(), compressed); + pointNrs = parentPos.length; + stepLength = 1 / (float)pointNrs; + stepPos = 0.0f; + // save the positions in the TCBKeyFrame + TCBKeyFrame[] parentKeyFrames = new TCBKeyFrame[pointNrs+1]; + for(int i = 0; i < pointNrs; i++) { + parentKeyFrames[i] = new TCBKeyFrame(stepPos, 0, parentPos[i], r, s, 0.0f, 0.0f, 0.0f); + stepPos += stepLength; + } + parentKeyFrames[pointNrs] = new TCBKeyFrame(1.0f, 0, parentPos[0], r, s, 0.0f, 0.0f, 0.0f); + + // make a spline courve of the position points + parentSpline = new RotPosScaleTCBSplinePathInterpolator(parentAnimAlpha, + trGrParentSpline, + yAxis, + parentKeyFrames); + + parentSpline.setSchedulingBounds(boundsGen); + trGrParentSpline.addChild(parentSpline); + + BranchGroup brGrAll = new BranchGroup(); + brGrAll.addChild(trGrParentSpline); + + brGrAll.setCapability(BranchGroup.ALLOW_DETACH); + + // Return the final version of the BranchGroup node brGrAll. + return brGrAll; + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/orbit/ColorLineOrbit.java b/Solar system/sss3d-source/sss3d/contentbranch/orbit/ColorLineOrbit.java new file mode 100644 index 0000000..5955528 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/orbit/ColorLineOrbit.java @@ -0,0 +1,86 @@ +/* + File: ColorLineOrbit.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/orbit/ColorLineOrbit.java,v 1.3 2000/12/12 16:04:55 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 16:04:55 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.orbit; + +import javax.media.j3d.*; +import javax.vecmath.*; +import java.awt.Color; + +/** + * This is a class for the color line orbit of the planet. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.3 $ + */ +public class ColorLineOrbit extends ColorOrbit { + + private LineStripArray orbit; + + /** + * Initializes a new ColorLineOrbit. + * + * @param orbitColor the awt Color for the orbit. + */ + public ColorLineOrbit(Color orbitColor) { + super(orbitColor); + } + + /** + * This method set the color orbit with the given positions. + * + * @param pos the positions of the orbit. + */ + public void setPositions(Point3f[] pos) { + nbOfPoints = pos.length + 1; + Color3f[] colors = new Color3f[nbOfPoints]; + Color3f color = new Color3f(orbitColor); + for(int i = 0; i < nbOfPoints; i++) { + colors[i] = color; + } + + int[] stripVertexCounts = { nbOfPoints }; + + orbit = new LineStripArray(nbOfPoints, + GeometryArray.COORDINATES | + /*GeometryArray.NORMALS |*/ + GeometryArray.COLOR_3, + stripVertexCounts); + + orbit.setCoordinates(0, pos); + orbit.setCoordinate(nbOfPoints - 1, pos[0]); + orbit.setColors(0, colors); + orbit.setCapability(GeometryArray.ALLOW_COLOR_WRITE); + + this.setGeometry(orbit); + } + + /** + * This method re - set the color of the orbit. + * + * @param orbitColor the awt Color for the orbit. + */ + public void setColor(Color orbitColor) { + Color3f[] colors = new Color3f[nbOfPoints]; + Color3f color = new Color3f(orbitColor); + for(int i = 0; i < nbOfPoints; i++) { + colors[i] = color; + } + orbit.setColors(0, colors); + } +} + diff --git a/Solar system/sss3d-source/sss3d/contentbranch/orbit/ColorOrbit.java b/Solar system/sss3d-source/sss3d/contentbranch/orbit/ColorOrbit.java new file mode 100644 index 0000000..d5728b7 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/orbit/ColorOrbit.java @@ -0,0 +1,59 @@ +/* + File: ColorOrbit.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/orbit/ColorOrbit.java,v 1.4 2000/12/13 13:37:43 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:37:43 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.orbit; + +import javax.media.j3d.Shape3D; +import javax.vecmath.Point3f; +import java.awt.Color; + +/** + * This is a abstract class for the orbit of the planet. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.4 $ + * @see ColorPointOrbit + * @see ColorLineOrbit + */ +abstract public class ColorOrbit extends Shape3D { + + protected Color orbitColor; + protected int nbOfPoints; + + /** + * Initializes a new ColorOrbit. + * + * @param orbitColor the awt Color for the orbit. + */ + public ColorOrbit(Color orbitColor) { + this.orbitColor = orbitColor; + } + + /** + * This method set the color orbit with the given positions. + * + * @param pos the positions of the orbit. + */ + abstract public void setPositions(Point3f[] pos); + + /** + * This method re - set the color of the orbit. + * + * @param orbitColor the awt Color for the orbit. + */ + abstract public void setColor(Color orbitColor); +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/orbit/ColorPointOrbit.java b/Solar system/sss3d-source/sss3d/contentbranch/orbit/ColorPointOrbit.java new file mode 100644 index 0000000..4c05085 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/orbit/ColorPointOrbit.java @@ -0,0 +1,80 @@ +/* + File: ColorPointOrbit.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/orbit/ColorPointOrbit.java,v 1.4 2000/12/12 16:04:55 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 16:04:55 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.orbit; + +import javax.media.j3d.*; +import javax.vecmath.*; +import java.awt.Color; + +/** + * This is a class for the color point orbit of the planet. + * NOT USED ANYMORE FOR SOLAR SYSTEM SIMULATOR ! + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.4 $ + */ +public class ColorPointOrbit extends ColorOrbit { + + private PointArray orbit; + + /** + * Initializes a new ColorPointOrbit. + * + * @param orbitColor the awt Color for the orbit. + */ + public ColorPointOrbit(Color orbitColor) { + super(orbitColor); + } + + /** + * This method set the color orbit with the given positions. + * + * @param pos the positions of the orbit. + */ + public void setPositions(Point3f[] pos) { + nbOfPoints = pos.length; + Color3f[] colors = new Color3f[nbOfPoints]; + Color3f color = new Color3f(orbitColor); + for(int i = 0; i < nbOfPoints; i++) { + colors[i] = color; + } + + orbit = new PointArray(nbOfPoints, + GeometryArray.COORDINATES | + GeometryArray.COLOR_3); + + orbit.setCoordinates(0, pos); + orbit.setColors(0, colors); + + this.setGeometry(orbit); + } + + /** + * This method re - set the color of the orbit. + * + * @param orbitColor the awt Color for the orbit. + */ + public void setColor(Color orbitColor) { + Color3f[] colors = new Color3f[nbOfPoints]; + Color3f color = new Color3f(orbitColor); + for(int i = 0; i < nbOfPoints; i++) { + colors[i] = color; + } + orbit.setColors(0, colors); + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/planets/Planet.java b/Solar system/sss3d-source/sss3d/contentbranch/planets/Planet.java new file mode 100644 index 0000000..bf2b06a --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/planets/Planet.java @@ -0,0 +1,201 @@ +/* + File: Planet.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/planets/Planet.java,v 1.9 2000/12/12 15:56:24 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 15:56:24 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.planets; + +import sss3d.contentbranch.*; +import sss3d.utils.SSS3dConstants; +import sss3d.calculations.constants.AstronomicalConstants; + +import javax.media.j3d.*; +import javax.vecmath.*; +import com.sun.j3d.utils.geometry.Sphere; + +/** + * This class is generate a planet in our solar system. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.9 $ + */ +public class Planet extends Sphere implements CelestialObject { + + // The name of the current planet + private String planet; + + private CelestialObjectInfo lnkCelestialObjectInfo; + + /** + * Construct a new planet Sphere. The initradius of the Sphere is one meter. + * + * @param pName the name of the current planet. + */ + public Planet(String planet) { + super(INITRADIUS, Sphere.GENERATE_NORMALS | + Sphere.GENERATE_TEXTURE_COORDS, DIVISON); + this.planet = planet; + lnkCelestialObjectInfo = new CelestialObjectInfo(planet, SSS3dConstants.PLANET_TYPE); + + // Set up the appearance to this Sphere object + this.setAppearance(createAppearance()); + } + + /** + * Returns a CelestialObjectInfo of the current planet. + * This object has all specific information of the current planet. + * + * @return a CelestialObjectInfo of the current planet. + */ + public CelestialObjectInfo getInfo() { + return lnkCelestialObjectInfo; + } + + /** + * Gets the ID of the current planet. + * + * @return the ID of the current planet. + */ + public String getId() { + return planet; + } + + /** + * Gets the radius of the current planet. + * + * @return the radius as a scaled factor of the current planet. + */ + public float getRadius() { + return (float)(lnkCelestialObjectInfo.getDiameter() / SSS3dConstants.SCALE); + } + + /** + * Gets the radius of the current planet. + * + * @return the radius as a logarithm factor of the current planet. + */ + public float getLogRadius() { + return (float)(Math.log(lnkCelestialObjectInfo.getDiameter() / 1000) / 10); + } + + /** + * Gets the degree of the current planet. + * + * @return the degree () of the current planet. + */ + public double getDegree() { + return (double)lnkCelestialObjectInfo.getInclinationOfEquatorToOrbit(); + } + + /** + * Gets the rotation speed to the own axis of the current planet. + * + * @return the rotation speed to the own axis in day of the current planet. + * One day correspond to one second in the animation. + */ + public long getRotOwnAxis() { + return (long)(lnkCelestialObjectInfo.getRotationPeriod() * SECOND); + } + + /** + * Gets the rotation speed around the sun of the current planet. + * + * @return the rotation speed around the sun in year of the current planet. + * One year correspond to 365.242190 seconds (~6 minute) in the animation. + */ + public long getRotOrbit() { + return (long)(lnkCelestialObjectInfo.getOrbitPeriod() * SECOND * AstronomicalConstants.DAYS); + } + + /** + * Set the appearance of this planet (sphere) whith the right + * texture. + * + * @return the Appearance of the planet with his right texture. + */ + private Appearance createAppearance() { + + // Ambient-diffuse-reflection coefficient + Color3f diffAmb = new Color3f(1.0f, 1.0f, 1.0f); // white + // Diffuse-reflection coefficient + Color3f reflDiff = new Color3f(1.0f, 1.0f, 1.0f); // white + // Specular-reflection coefficient (reflectance function) + Color3f reflSpec = new Color3f(1.0f, 1.0f, 1.0f); // white + // c = shininess: cos^c in the specular reflection + float c = 1; + // Emitted light + Color3f lumEmise = new Color3f(0.2f, 0.2f, 0.2f); // black + + Appearance appearance = new Appearance(); + + // Set up the optical properties. + appearance.setMaterial(new Material(diffAmb, lumEmise, reflDiff, reflSpec, c)); + + Texture2D texture = getPlanetTexture(); + if(texture != null) { + // Set up the texture + appearance.setTexture(texture); + + // Application mode of the texture + TextureAttributes texAttr = new TextureAttributes(); + texAttr.setTextureMode(TextureAttributes.MODULATE); // there still are: BLEND, DECAL, + // and REPLACE + appearance.setTextureAttributes(texAttr); + } + + return appearance; + } + + /** + * Returns the texture of the current planet. + * + * @return the texture of the current planet. + */ + private Texture2D getPlanetTexture() { + + // Loading of the texture + NewTextureLoader newTextureLoader = new NewTextureLoader("images/" + getId() + ".jpg", + NewTextureLoader.GENERATE_MIPMAP); + + ImageComponent2D image; + try { + image = newTextureLoader.getImage(); + } catch(NullPointerException e) { + return null; + } + + int imageWidth = image.getWidth(); + int imageHeight = image.getHeight(); + + Texture2D texture = new Texture2D(Texture.MULTI_LEVEL_MIPMAP, Texture.RGBA, + imageWidth, imageHeight); + int imageLevel = 0; + + texture.setImage(imageLevel, image); + + while (imageWidth > SMALLEST || imageWidth > SMALLEST) { + imageLevel++; + if (imageWidth > SMALLEST) imageWidth /= 2; + if (imageHeight > SMALLEST) imageHeight /= 2; + image = newTextureLoader.getScaledImage(imageWidth, imageHeight); + texture.setImage(imageLevel, image); + } + + texture.setMagFilter(Texture.MULTI_LEVEL_POINT); + texture.setMinFilter(Texture.MULTI_LEVEL_POINT); + + return texture; + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/planets/SaturnRing.java b/Solar system/sss3d-source/sss3d/contentbranch/planets/SaturnRing.java new file mode 100644 index 0000000..5530ce2 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/planets/SaturnRing.java @@ -0,0 +1,186 @@ +/* + File: SaturnRing.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/planets/SaturnRing.java,v 1.5 2000/12/12 15:56:24 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 15:56:24 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.planets; + +import sss3d.contentbranch.NewTextureLoader; + +import javax.media.j3d.*; +import javax.vecmath.*; +import java.awt.Color; + +/** + * This class constructs a ring system for the planet saturn. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.5 $ + */ +public class SaturnRing extends Shape3D { + + private static final double RMIN = 0.5; + private static final double RMAX = 1.0; + private static final Color3f COLOR = new Color3f(Color.yellow); + private static final int VERTEX = 80; + + private static final TexCoord2f[] texCoord = { + new TexCoord2f(0.0f, 0.0f), + new TexCoord2f(1.0f, 0.0f), + new TexCoord2f(1.0f, 1.0f), + new TexCoord2f(0.0f, 1.0f) + }; + + private double rMin, rMax; + private Color3f color; + private int vertex; + + /** + * Constructs a saturn ringsystem with the default values + * RMIN, RMAX, COLOR, VERTEX. + */ + public SaturnRing() { + this(RMIN, RMAX, COLOR, VERTEX); + } + + /** + * Constructs a saturn ringsystem with the values + * rMin and rMax. Default values used: COLOR and VERTEX. + * + * @param rMin the smallest radius of the ring system + * @param rMax the biggest radius of the ring system + */ + public SaturnRing(double rMin, double rMax) { + this(rMin, rMax, COLOR, VERTEX); + } + + /** + * Constructs a saturn ringsystem with the values + * rMin, rMax and color. Default value used: VERTEX. + * + * @param rMin the smallest radius of the ring system + * @param rMax the biggest radius of the ring system + * @param color the color of the ring system + */ + public SaturnRing(double rMin, double rMax, Color3f color) { + this(rMin, rMax, color, VERTEX); + } + + /** + * Constructs a saturn ringsystem with the values + * rMin, rMax, color and vertex. + * + * @param rMin the smallest radius of the ring system + * @param rMax the biggest radius of the ring system + * @param color the color of the ring system + * @param vertex the number of points to build a ring + */ + public SaturnRing(double rMin, double rMax, Color3f color, int vertex) { + this.rMin = rMin; + this.rMax = rMax; + this.color = color; + this.vertex = vertex; + this.setGeometry(createGeometry()); + this.setAppearance(createAppearance()); + } + + /** + * Creates the geometry of the saturn ring system. + * + * @returns Geometry the geometry + */ + private Geometry createGeometry() { + + QuadArray ring = new QuadArray(vertex, + /*QuadArray.NORMALS |*/ + QuadArray.COORDINATES | + QuadArray.COLOR_3 | + QuadArray.TEXTURE_COORDINATE_2); + + int v = 0; + double a = 0.0; + double fixAngle = 2.0 * StrictMath.PI / (vertex - 2); + + while(v < vertex) { + ring.setCoordinate(v++, + new Point3d(rMin * StrictMath.cos(a), + 0.0, + rMin * StrictMath.sin(a))); + ring.setCoordinate(v++, + new Point3d(rMax * StrictMath.cos(a), + 0.0, + rMax * StrictMath.sin(a))); + + a = v * fixAngle; + + ring.setCoordinate(v++, + new Point3d(rMax * StrictMath.cos(a), + 0.0, + rMax * StrictMath.sin(a))); + ring.setCoordinate(v++, + new Point3d(rMin * StrictMath.cos(a), + 0.0, + rMin * StrictMath.sin(a))); + } + + for(int i = 0; i < vertex; i++) { + ring.setTextureCoordinate(0, i, texCoord[i % 4]); + ring.setColor(i, color); + } + + return ring; + } + + /** + * Set the appearance of the saturn ring system whith the texture. + * + * @return the Appearance of the ring system with his texture. + */ + private Appearance createAppearance() { + + // Ambient-diffuse-reflection coefficient + Color3f diffAmb = new Color3f(1.0f, 1.0f, 1.0f); + // Diffuse-reflection coefficient + Color3f reflDiff = new Color3f(1.0f, 1.0f, 1.0f); + // Specular-reflection coefficient (reflectance function) + Color3f reflSpec = new Color3f(1.0f, 1.0f, 1.0f); + // c = shininess: cos^c in the specular reflection + float c = 1; + // Emitted light + Color3f lumEmise = new Color3f(0.2f, 0.2f, 0.2f); + + Appearance appearance = new Appearance(); + + // Set up the optical properties. + appearance.setMaterial(new Material(diffAmb, lumEmise, reflDiff, reflSpec, c)); + + // Loading of the texture + NewTextureLoader newTextureLoader = new NewTextureLoader("images/rings.jpg"); + + Texture texture; + try { + texture = newTextureLoader.getTexture(); + appearance.setTexture(texture); + + // Application mode of the texture + TextureAttributes texAttr = new TextureAttributes(); + texAttr.setTextureMode(TextureAttributes.MODULATE); // there still are: BLEND, DECAL, + // and REPLACE + appearance.setTextureAttributes(texAttr); + } catch(NullPointerException e) { } + + return appearance; + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/planets/ScenePlanet.java b/Solar system/sss3d-source/sss3d/contentbranch/planets/ScenePlanet.java new file mode 100644 index 0000000..eea5cc3 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/planets/ScenePlanet.java @@ -0,0 +1,466 @@ +/* + File: ScenePlanet.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/planets/ScenePlanet.java,v 1.18 2000/12/15 02:53:25 portm Exp $ + $Author: portm $ + $Date: 2000/12/15 02:53:25 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.planets; + +import sss3d.contentbranch.*; +import sss3d.utils.SSS3dConstants; +import sss3d.utils.observer.*; +import sss3d.contentbranch.orbit.*; +import sss3d.utils.xmlparser.XMLConstants; + +import javax.media.j3d.*; +import javax.vecmath.*; +import com.sun.j3d.utils.behaviors.interpolators.*; +import java.util.Date; +import java.awt.Color; + +/** + * This class describe the scene of a planet. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.18 $ + * @see Planet + */ +public class ScenePlanet implements SceneCelestialObjects, PositionObserver, InfoObserver { + + private RotPosScaleTCBSplinePathInterpolator spline; + + private RotationInterpolator rotator; + private Alpha rotationAlpha; + private Alpha animAlpha; + private long alphaTime = 0; + private Date date; + + private BranchGroup removableCoordBG; + private BranchGroup removableOrbitBG; + private TransformGroup trGrRotAndLeafs; + private TransformGroup trGrOrbit; + private TransformGroup trGrTendSpline; + + private ColorOrbit colorOrbit; + + private Planet planet; + + private ObjectsPositions objPos; + private ObjectsInformation objInfo; + private InitializationObject iniObject; + + + /** + * Initializes a new ScenePlanet. + * + * @param planet a object reference of a given planet. + * @param objPos a reference to the concrete subject of + * the observer pattern positions + * @param objInfo a reference to the concrete subject of + * the observer pattern information + */ + public ScenePlanet(Planet planet, ObjectsPositions objPos, + ObjectsInformation objInfo ) { + this.planet = planet; + this.objPos = objPos; + this.objPos.attach(this); + this.objInfo = objInfo; + this.objInfo.attach(this); + this.iniObject = objInfo.getInitializationObject(); + } + + /** + * .Removes this object from the position observer list. + */ + public void destroy() { + objPos.detach(this); + objInfo.detach(this); + planet = null; + } + + /** + * Updates the position state of the object.
+ * + * @param orbitPos a reference to the list containing all position observer + */ + public void update(OrbitPositions orbitPos) { + + } + + /** + * Updates the information state of the object.
+ * + * @param id identification of the object that has to be updated + * @param parameter the parameter that has been updated + */ + public void update( String id, int parameter ) { + + if ( id.equals( planet.getId() ) || + id.equals("all") ) { + + IniData data = (IniData)objInfo.getParameter( XMLConstants.PLANET, planet.getId() ); + + switch ( parameter ) { + case XMLConstants.VISIBLE : + // implemented inside SceneSolarSystem + break; + case XMLConstants.COORDINATESYSTEM : + if(data.hasCoordinateSystem()) { + addCoord(); + } else { + removeCoord(); + } + break; + case XMLConstants.ORBIT : + if(data.hasOrbit()) { + addOrbit(); + } else { + removeOrbit(); + } + break; + case XMLConstants.COLORORBIT : + setOrbitColor(data.getColorOrbit()); + break; + case XMLConstants.ANIMATIONSPEED : + setAnimSpeed(); + break; + default : break; + + } + } + + } + + /** + * Returns the ID of the current planet. + * + * @return the ID to idendification the planet. + */ + public String getId() { + return planet.getId(); + } + + /** + * Returns a CelestialObjectInfo of the current planet. + * This object has all specific information of the current planet. + * + * @return a CelestialObjectInfo of the current planet. + */ + public CelestialObjectInfo getInfo() { + return planet.getInfo(); + } + + /** + * This method handle the animation and rotation of the celestial objects. + * + * @param animate if true, start animation; if false stop animation. + * @param rotate if true, start rotation; if false stop rotation. + */ + public void setAnimation(boolean animate, boolean rotate) { + date = new Date(); + if(animate) { + /* + Set the stop time for the animation and rotation. + Without this trick, the celestial objects are jumping around. + Because when the animation is stop, the objects goes on + in the background. + */ + alphaTime = date.getTime() - alphaTime; + rotationAlpha.setStartTime(alphaTime); + animAlpha.setStartTime(alphaTime); + } else { + // save the stop time for the animation and rotation. + alphaTime = animAlpha.getStartTime(); + alphaTime = date.getTime() - alphaTime; + } + // set the animation and rotation to stop or go. + spline.setEnable(animate); + rotator.setEnable(rotate); + } + + /** + * Set the animation speed for the planet. + */ + public void setAnimSpeed() { + date = new Date(); + + AnimationSpeed animationSpeed = (AnimationSpeed)objInfo.getInitializationObject().getParameter(XMLConstants.ANIMATIONSPEED); + int factor = 0; + switch(animationSpeed.getType()) { + case AnimationSpeed.DAYS_PER_SECOND: + factor = 1; + break; + case AnimationSpeed.HOURS_PER_SECOND: + factor = 24; + break; + case AnimationSpeed.MINUTES_PER_SECOND: + factor = 24 * 60; + break; + default: + } + int animSpeed = animationSpeed.getValue(); + long duration = (long)(planet.getRotOwnAxis() * factor / animSpeed); + + long increasing = rotationAlpha.getIncreasingAlphaDuration(); + // delta t = t1*(1-T2/T1) + long diff = (long)((date.getTime() - rotationAlpha.getStartTime()) * + (1.0f - (float)duration / (float)increasing)); + rotationAlpha.setIncreasingAlphaDuration(duration); + rotationAlpha.setStartTime(rotationAlpha.getStartTime() + diff); + + duration = (long)(planet.getRotOrbit() * factor / animSpeed); + + increasing = animAlpha.getIncreasingAlphaDuration(); + // delta t = t1*(1-T2/T1) + diff = (long)((date.getTime() - animAlpha.getStartTime()) * + (1.0f - (float)duration / (float)increasing)); + + animAlpha.setIncreasingAlphaDuration(duration); + animAlpha.setStartTime(animAlpha.getStartTime() + diff); + } + + /** + * Add the coordinate system to this scenegraph. + */ + public void addCoord() { + trGrRotAndLeafs.addChild(removableCoordBG); + } + + /** + * Remove the coordinate system from this scenegraph. + */ + public void removeCoord() { + removableCoordBG.detach(); + } + + /** + * Add the color orbit to this scenegraph. + */ + public void addOrbit() { + trGrOrbit.addChild(removableOrbitBG); + } + + /** + * Remove the color orbit from this scenegraph. + */ + public void removeOrbit() { + removableOrbitBG.detach(); + } + + /** + * Set a new orbit color. + * + * @param orbitColor the new color of the orbit + */ + public void setOrbitColor(Color orbitColor) { + colorOrbit.setColor(orbitColor); + } + + /** + * Get the current position of the planet. + * + * @return a Transform3D with the current position. + */ + public Transform3D getCurrentPosition() { + Transform3D transVec = new Transform3D(); + Transform3D transRot = new Transform3D(); + trGrTendSpline.getTransform(transVec); + trGrRotAndLeafs.getTransform(transRot); + Vector3d vec = new Vector3d(); + transVec.get(vec); + transRot.setTranslation(vec); + return transRot; + } + + /** + * Returns the BranchGroup of the created planet scene. + * It has a planet as leaf, make a rotation to the own axis and + * make with a TCB-spline function a rotation around the sun. + * + * @return the BranchGroup of the given planet. + */ + public BranchGroup createSceneGraph() { + // A BoundingSphere instance as general bounding region. + BoundingSphere boundsGen = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), + SSS3dConstants.BOUNDRADIUS); + + // Create the first TransformGroup node trGrRotAndLeafs for the planet, + // the coordinate system and the rotation + trGrRotAndLeafs = new TransformGroup(); + + // With the ALLOW_TRANSFORM_READ and ALLOW_TRANSFORM_WRITE + // capabilities, we allow the modification of the TransformGroup's + // code by the Behavior's code at run time. + trGrRotAndLeafs.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); + trGrRotAndLeafs.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + + trGrRotAndLeafs.setCapability(Group.ALLOW_CHILDREN_READ); + trGrRotAndLeafs.setCapability(Group.ALLOW_CHILDREN_WRITE); + trGrRotAndLeafs.setCapability(Group.ALLOW_CHILDREN_EXTEND); + + // Attach the ring of the Saturn + if(getId().equals("saturn")) { + TransformGroup trGrRing = new TransformGroup(); + + // Set the picking of the CoordinateSystem BranchGroup to false. + trGrRing.setPickable(false); + + SaturnRing ring = new SaturnRing(1.3, 2.0, new Color3f(0.99f, 0.88f, 0.79f), 160); + trGrRing.addChild(ring); + + // Duplicate the ring strip geometry and set the + // appearance of the new Shape3D object without culling. + // This is done because we will see the ring on both side!!!! + PolygonAttributes polyAttrib = new PolygonAttributes(); + polyAttrib.setCullFace(PolygonAttributes.CULL_NONE); + + Appearance polyAppear = ring.getAppearance(); + polyAppear.setPolygonAttributes(polyAttrib); + trGrRing.addChild(new Shape3D(ring.getGeometry(), polyAppear)); + trGrRotAndLeafs.addChild(trGrRing); + } + + // Attach the leaf node "planet" to the TransformGroup trGrRotAndLeafs. + trGrRotAndLeafs.addChild(planet); + + removableCoordBG = new BranchGroup(); + + // Create and attach a coordinate system to the TransformGroup node + // trGrRotAndLeafs, that is to the planet. + removableCoordBG.addChild(new CoordinateSystem(1.2f)); + + // Allow to detach the Coordinate System + removableCoordBG.setCapability(BranchGroup.ALLOW_DETACH); + + // Set the picking of the CoordinateSystem BranchGroup to false. + removableCoordBG.setPickable(false); + + trGrRotAndLeafs.addChild(removableCoordBG); + + // Prepare the RotationInterpolator (Behavior) for the + // planet's rotation about its own axis. + Transform3D tr3Drot = new Transform3D(); + + float startRot, endRot; + if(planet.getRotOwnAxis() > 0) { + // Create the alpha(t) function. Positiv rotation! + rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, + /*planet.getRotOwnAxis()*/Long.MAX_VALUE, 0, 0, 0, 0, 0); + startRot = 0.0f; + endRot = (float)(2.0 * Math.PI); + } else { + // Create the alpha(t) function. Negativ rotation! + rotationAlpha = new Alpha(-1, Alpha.DECREASING_ENABLE, 0, 0, 0, 0, 0, + /*Math.abs(planet.getRotOwnAxis())*/Long.MAX_VALUE, 0, 0); + startRot = (float)(2.0 * Math.PI); + endRot = 0.0f; + } + // Create the planet's rotation about its own axis. + rotator = new RotationInterpolator(rotationAlpha, + trGrRotAndLeafs, tr3Drot, + startRot, endRot); + rotator.setSchedulingBounds(boundsGen); + trGrRotAndLeafs.addChild(rotator); + + // Create the second TransformGroup node trGrTendSpline for the planet's + // rotation around the sun and the tend. + trGrTendSpline = new TransformGroup(); + + // With the ALLOW_TRANSFORM_READ and ALLOW_TRANSFORM_WRITE + // capabilities, we allow the modification of the TransformGroup's + // code by the Behavior's code at run time. + trGrTendSpline.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); + trGrTendSpline.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + + // Attach trGrRotAndLeafs node to the trGrTendSpline node. + trGrTendSpline.addChild(trGrRotAndLeafs); + + Transform3D yAxis = new Transform3D(); + + // Create the alpha(t) function. + animAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, + /*planet.getRotOrbit()*/Long.MAX_VALUE, 0, 0, 0, 0, 0); + + // rotate the planet to his true tend + Matrix4d mat = new Matrix4d(); + mat.rotX(Math.toRadians(planet.getDegree())); + Quat4f r = new Quat4f(); + r.set(mat); + // set scale of the planet + float scale; + boolean compressed = ((Boolean)iniObject.getParameter(XMLConstants.COMPRESSED)).booleanValue(); + if(compressed) { + scale = planet.getLogRadius(); + } else { + scale = planet.getRadius(); + } + Point3f s = new Point3f(scale, scale, scale); + + Double time = (Double)iniObject.getParameter(XMLConstants.JDAY); + // take the positions of the planet + Point3f[] pos = objPos.getPositions(getInfo(), time.doubleValue(), compressed); + int pointNrs = pos.length; + float stepLength = 1 / (float)pointNrs; + float stepPos = 0.0f; + // save the positions in the TCBKeyFrame + TCBKeyFrame[] keyFrames = new TCBKeyFrame[pointNrs+1]; + for(int i = 0; i < pointNrs; i++) { + keyFrames[i] = new TCBKeyFrame(stepPos, 0, pos[i], r, s, 0.0f, 0.0f, 0.0f); + stepPos += stepLength; + } + keyFrames[pointNrs] = new TCBKeyFrame(1.0f, 0, pos[0], r, s, 0.0f, 0.0f, 0.0f); + + // make a spline courve of the position points + spline = new RotPosScaleTCBSplinePathInterpolator(animAlpha, + trGrTendSpline, + yAxis, + keyFrames); + spline.setSchedulingBounds(boundsGen); + trGrTendSpline.addChild(spline); + + // Create the TransformGroup node trGrOrbit for the planet orbit. + trGrOrbit = new TransformGroup(); + + trGrOrbit.addChild(trGrTendSpline); + + trGrOrbit.setCapability(Group.ALLOW_CHILDREN_READ); + trGrOrbit.setCapability(Group.ALLOW_CHILDREN_WRITE); + trGrOrbit.setCapability(Group.ALLOW_CHILDREN_EXTEND); + + removableOrbitBG = new BranchGroup(); + + colorOrbit = new ColorLineOrbit(Color.red); + + colorOrbit.setPositions(pos); + + // Attach the leaf node "orbit" to the BranchGroup removableOrbitBG. + removableOrbitBG.addChild(colorOrbit); + + removableOrbitBG.setCapability(BranchGroup.ALLOW_DETACH); + + // Set the picking of the ColorOrbit BranchGroup to false. + removableOrbitBG.setPickable(false); + + trGrOrbit.addChild(removableOrbitBG); + + BranchGroup brGrAll = new BranchGroup(); + brGrAll.addChild(trGrOrbit); + + brGrAll.setCapability(BranchGroup.ALLOW_DETACH); + + // Return the final version of the BranchGroup node brGrAll. + return brGrAll; + } +} + diff --git a/Solar system/sss3d-source/sss3d/contentbranch/rockets/Rocket.java b/Solar system/sss3d-source/sss3d/contentbranch/rockets/Rocket.java new file mode 100644 index 0000000..05cfe2f --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/rockets/Rocket.java @@ -0,0 +1,207 @@ +/* + File: Rocket.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/rockets/Rocket.java,v 1.4 2000/12/12 15:37:07 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 15:37:07 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.rockets; + +import sss3d.contentbranch.*; +import sss3d.utils.SSS3dConstants; + +import javax.media.j3d.*; +import javax.vecmath.*; + +/** + * This class holds the data for a rocket in the simulator. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.4 $ + */ +public class Rocket implements CelestialObject { + + // The name of the current rocket + private String name; + + private float speedFactor = 0; + + private CelestialObjectInfo lnkCelestialObjectInfo; + + /** + * Constructs a new rocket. + * + * @param name the name of the current rocket. + */ + public Rocket(String name) { + this.name = name; + lnkCelestialObjectInfo = new CelestialObjectInfo(name, SSS3dConstants.ROCKET_TYPE); + } + + /** + * Sets the speed factor of this rocket. + * + * @param speedFactor the speed factor + */ + public void setSpeedFactor( float speedFactor ) { + this.speedFactor = speedFactor; + } + + /** + * Returns the speed factor of this rocket. + * + * @param float the speed factor + */ + public float getSpeedFactor() { + return speedFactor; + } + + /** + * Returns a CelestialObjectInfo of the current rocket. + * This object has all specific information of the current rocket. + * + * @return a CelestialObjectInfo of the current rocket. + */ + public CelestialObjectInfo getInfo() { + return lnkCelestialObjectInfo; + } + + /** + * Gets the ID of the current rocket. + * + * @return the ID of the current rocket. + */ + public String getId() { + return name; + } + + /** + * Gets the radius of the current rocket. + * + * @return the radius as a scaled factor of the current rocket. + */ + public float getRadius() { + return 0.05f; + } + + /** + * Gets the radius of the current rocket. + * + * @return the radius as a logarithm factor of the current rocket. + */ + public float getLogRadius() { + return 0.004f; + } + + /** + * Gets the degree of the current rocket. + * + * @return the degree () of the current rocket. + */ + public double getDegree() { + return 0.0d; + } + + /** + * Gets the rotation speed to the own axis of the current rocket. + * + * @return the rotation speed to the own axis in day of the current rocket. + * One day correspond to one second in the animation. + */ + public long getRotOwnAxis() { + return 0; + } + + /** + * Gets the rotation speed around the sun of the current rocket. + * + * @return the rotation speed around the sun in year of the current rocket. + * One year correspond to 365.242190 seconds (~6 minute) in the animation. + */ + public long getRotOrbit() { + return 0; + } + + /** + * Set the appearance of this rocket (sphere) whith the right + * texture. + * + * @return the Appearance of the rocket with his right texture. + */ + public Appearance createAppearance() { + + if ( !name.equals("spaceshuttle") ) { + // Ambient-diffuse-reflection coefficient + Color3f diffAmb = new Color3f(1.0f, 1.0f, 1.0f); // white + // Diffuse-reflection coefficient + Color3f reflDiff = new Color3f(1.0f, 1.0f, 1.0f); // white + // Specular-reflection coefficient (reflectance function) + Color3f reflSpec = new Color3f(1.0f, 1.0f, 1.0f); // white + // c = shininess: cos^c in the specular reflection + float c = 1; + // Emitted light + Color3f lumEmise = new Color3f(0.0f, 0.0f, 0.0f); // black + + Appearance appearance = new Appearance(); + + // Set up the optical properties. + appearance.setMaterial(new Material(diffAmb, lumEmise, reflDiff, reflSpec, c)); + + return appearance; + } + + return null; + + } + + /** + * Returns the texture of the current rocket. + * + * @return the texture of the current rocket. + */ + private Texture2D getRocketTexture() { + + // Loading of the texture + NewTextureLoader newTextureLoader = new NewTextureLoader("images/" + getId() + ".jpg", + NewTextureLoader.GENERATE_MIPMAP); + + ImageComponent2D image; + try { + image = newTextureLoader.getImage(); + } catch(NullPointerException e) { + return null; + } + + int imageWidth = image.getWidth(); + int imageHeight = image.getHeight(); + + Texture2D texture = new Texture2D(Texture.MULTI_LEVEL_MIPMAP, Texture.RGBA, + imageWidth, imageHeight); + int imageLevel = 0; + + texture.setImage(imageLevel, image); + + while (imageWidth > SMALLEST || imageWidth > SMALLEST) { + imageLevel++; + if (imageWidth > SMALLEST) imageWidth /= 2; + if (imageHeight > SMALLEST) imageHeight /= 2; + image = newTextureLoader.getScaledImage(imageWidth, imageHeight); + texture.setImage(imageLevel, image); + } + + texture.setMagFilter(Texture.MULTI_LEVEL_POINT); + texture.setMinFilter(Texture.MULTI_LEVEL_POINT); + + return texture; + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/rockets/RocketNavigation.java b/Solar system/sss3d-source/sss3d/contentbranch/rockets/RocketNavigation.java new file mode 100644 index 0000000..aa17515 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/rockets/RocketNavigation.java @@ -0,0 +1,151 @@ +/* + File: RocketNavigation.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/rockets/RocketNavigation.java,v 1.4 2000/12/12 15:37:07 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 15:37:07 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.rockets; + +import java.awt.AWTEvent; +import java.util.Enumeration; +import java.awt.event.*; +import javax.vecmath.*; +import javax.media.j3d.*; + +/** + * This class is a keyboard behavior to control the navigation + * of the a rocket. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.4 $ + */ +public class RocketNavigation extends Behavior { + + private Rocket rocket; + + /** + * The TransformGroup node to modify by the keyboard interaction. + */ + private TransformGroup new_tgControl; + + /** + * Wake up event when a key is pressed. + */ + private WakeupOnAWTEvent wakeUp = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED); + + /** + * The angle to turn when the directionkeys are pressed + */ + private static final float ANGLE = (float) 0.017444f; // 1 degree + + private float speed = 0.0f; + + private Transform3D t3dView = new Transform3D(); + private Transform3D t3dRot = new Transform3D(); + + /** + * Constructor that allows to specify the desired target transform group. + * + * @param targetTG the target transform group + * @param rocket a reference to the rocket object + */ + public RocketNavigation(TransformGroup targetTG, Rocket rocket) { + new_tgControl = targetTG; + this.rocket = rocket; + } + + /** + * Override Behavior's initialize method to setup wakeup criteria. + */ + public void initialize() { + wakeupOn(wakeUp); + } + + /** + * Override Behavior's stimulus method to handle the event. + * This method is called when a key on the keyboard has been pressed and + * operates on the specified transform group to move the rocket position. + * + * @param criteria all pressed keys in a list. This will be passed by the system. + */ + public void processStimulus(Enumeration criteria) { + WakeupOnAWTEvent ev; + AWTEvent[] events; + + if(criteria.hasMoreElements()) { + + ev = (WakeupOnAWTEvent) criteria.nextElement();//object; + events = ev.getAWTEvent(); + KeyEvent eventKey = (KeyEvent) events[0]; + int keyCode = eventKey.getKeyCode(); + + new_tgControl.getTransform(t3dView); + + switch(keyCode) { + case KeyEvent.VK_NUMPAD8: // Up arrow - to move up + t3dRot.rotX(-ANGLE); + t3dView.mul(t3dRot); + new_tgControl.setTransform(t3dView); + break; + + case KeyEvent.VK_NUMPAD2: // Down arrow - to move down + t3dRot.rotX(ANGLE); + t3dView.mul(t3dRot); + new_tgControl.setTransform(t3dView); + break; + + case KeyEvent.VK_NUMPAD6: // Right arrow - to move right + t3dRot.rotZ(-ANGLE); + t3dView.mul(t3dRot); + new_tgControl.setTransform(t3dView); + break; + + case KeyEvent.VK_NUMPAD4: // Left arrow - to move left + t3dRot.rotZ(ANGLE); + t3dView.mul(t3dRot); + new_tgControl.setTransform(t3dView); + break; + + case KeyEvent.VK_NUMPAD7: // Page Up - to move forward + speed = rocket.getSpeedFactor(); + speed += 0.0001f; + rocket.setSpeedFactor(speed); + + break; + + case KeyEvent.VK_NUMPAD1: // Page Down - to move backward + speed = rocket.getSpeedFactor(); + speed -= 0.0001f; + rocket.setSpeedFactor(speed); + + break; + + case KeyEvent.VK_NUMPAD0: + speed = 0.0f; + rocket.setSpeedFactor(speed); + break; + + case KeyEvent.VK_HOME: // Home - go to the start position + t3dView.setIdentity(); + new_tgControl.setTransform(t3dView); + break; + + default: + } + } + + // Set wakeup criteria for next time. + wakeupOn(wakeUp); + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/rockets/RocketSpeed.java b/Solar system/sss3d-source/sss3d/contentbranch/rockets/RocketSpeed.java new file mode 100644 index 0000000..f2a2ff5 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/rockets/RocketSpeed.java @@ -0,0 +1,95 @@ +/* + File: RocketSpeed.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/rockets/RocketSpeed.java,v 1.3 2000/12/12 15:37:07 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 15:37:07 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.rockets; + +import java.util.Enumeration; +import javax.vecmath.*; +import javax.media.j3d.*; + +/** + * This class is a behavior to control the speed + * of a rocket. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.3 $ + */ +public class RocketSpeed extends Behavior { + + private Rocket rocket; + + /** + * The TransformGroup node to modify by the keyboard interaction. + */ + private TransformGroup new_tgControl; + + /** + * Wake up event on a elapsed frame. + */ + private WakeupOnElapsedFrames wakeUpFrame = new WakeupOnElapsedFrames(0); + + private Transform3D t3dView = new Transform3D(); + private Vector3f v3fTrans = new Vector3f(); + private Vector3f v3fTemp = new Vector3f(); + private Matrix3f m3fRot = new Matrix3f(); + + /** + * Constructor that allows to specify the desired target transform group. + * + * @param targetTG the target transform group + * @param rocket an object reference to the controlled rocket + */ + public RocketSpeed(TransformGroup targetTG, Rocket rocket) { + new_tgControl = targetTG; + this.rocket = rocket; + } + + /** + * Override Behavior's initialize method to setup wakeup criteria. + */ + public void initialize() { + wakeupOn(wakeUpFrame); + } + + /** + * Override Behavior's stimulus method to handle the event. + * This method is called each time when a new frame is painted and + * operates on the specified transform group to move the rocket position. + * + * @param criteria a enumeration - list. This will be passed by the system. + */ + public void processStimulus(Enumeration criteria) { + + if(criteria.hasMoreElements()) { + // wake up on elapsed frames... + if(rocket.getSpeedFactor() != 0.0f) { + new_tgControl.getTransform(t3dView); + + t3dView.get(v3fTrans); + t3dView.get(m3fRot); + m3fRot.transform(new Vector3f(0.0f, 0.0f, -rocket.getSpeedFactor()), v3fTemp); + v3fTrans.add(v3fTemp); + t3dView.setTranslation(v3fTrans); + + new_tgControl.setTransform(t3dView); + } + } + + // Set wakeup criteria for next time. + wakeupOn(wakeUpFrame); + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/rockets/SceneRocket.java b/Solar system/sss3d-source/sss3d/contentbranch/rockets/SceneRocket.java new file mode 100644 index 0000000..ae2df29 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/rockets/SceneRocket.java @@ -0,0 +1,381 @@ +/* + File: SceneRocket.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/rockets/SceneRocket.java,v 1.8 2000/12/13 13:38:00 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:38:00 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.rockets; + +import sss3d.contentbranch.*; +import sss3d.utils.SSS3dConstants; +import sss3d.utils.observer.*; +import sss3d.contentbranch.orbit.*; +import sss3d.utils.xmlparser.XMLConstants; + +import java.awt.Color; +import java.util.*; +import javax.media.j3d.*; +import javax.vecmath.*; + +import com.sun.j3d.loaders.lw3d.Lw3dLoader; +import com.sun.j3d.loaders.Loader; +import com.sun.j3d.loaders.Scene; + +/** + * This class describe the scene of a rocket. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.8 $ + * @see Rocket + */ +public class SceneRocket implements SceneCelestialObjects, PositionObserver, InfoObserver { + + private TransformGroup sceneTransform; + private TransformGroup trGrRotAndLeafs; + private TransformGroup trGrRot; + private RocketNavigation rocketNavRot; + private RocketSpeed rocketSpeed; + private RocketNavigation rocketNavTrans; + + private Rocket rocket; + + private ObjectsPositions objPos; + private ObjectsInformation objInfo; + private InitializationObject iniObject; + + + /** + * Initializes a new SceneRocket. + * + * @param rocket a object reference of a given rocket. + * @param objPos a reference to the concrete subject of + * the observer pattern positions + * @param objInfo a reference to the concrete subject of + * the observer pattern information + */ + public SceneRocket(Rocket rocket, ObjectsPositions objPos, + ObjectsInformation objInfo ) { + this.rocket = rocket; + this.objPos = objPos; + this.objPos.attach(this); + this.objInfo = objInfo; + this.objInfo.attach(this); + this.iniObject = objInfo.getInitializationObject(); + System.out.println("SceneRocket.constructor"); + } + + /** + * Removes this object from the position observer list. + */ + public void destroy() { + objPos.detach(this); + objInfo.detach(this); + rocket = null; + } + + /** + * Updates the position state of the object.
+ * + * @param orbitPos a reference to the list containing all position observer + */ + public void update(OrbitPositions orbitPos) { + + } + + /** + * Updates the information state of the object.
+ * + * @param id identification of the object that has to be updated + * @param parameter the parameter that has been changed + */ + public void update( String id, int parameter ) { + // currently not implemented +/* + if ( id.equals( rocket.getId() ) || + id.equals("all") ) { + + IniData data = (IniData)objInfo.getParameter( XMLConstants.ROCKET, rocket.getId() ); + + switch ( parameter ) { + case XMLConstants.VISIBLE : + // implemented inside SceneSolarSystem + break; + case XMLConstants.COORDINATESYSTEM : + if ( data.hasCoordinateSystem() ) { + addCoord(); + } else { + removeCoord(); + } + break; + case XMLConstants.ORBIT : + if ( data.hasOrbit() ) { + addOrbit(); + } else { + removeOrbit(); + } + break; + case XMLConstants.COLORORBIT : + setOrbitColor( data.getColorOrbit()); + break; + case XMLConstants.ANIMATIONSPEED : + setAnimSpeed(); + break; + default : break; + + } + } +*/ + } + + /** + * Returns the ID of the current rocket. + * + * @return the ID to idendification the rocket. + */ + public String getId() { + return rocket.getId(); + } + + /** + * Returns a CelestialObjectInfo of the current rocket. + * This object has all specific information of the current rocket. + * + * @return a CelestialObjectInfo of the current rocket. + */ + public CelestialObjectInfo getInfo() { + return rocket.getInfo(); + } + + /** + * This method handle the animation and rotation of the celestial objects. + * NOT IMPLEMENTED FOR A ROCKET. + * + * @param animate if true, start animation; if false stop animation. + * @param rotate if true, start rotation; if false stop rotation. + */ + public void setAnimation(boolean animate, boolean rotate) { + } + + /** + * Set the animation speed for the celestial objects. + * NOT IMPLEMENTED FOR A ROCKET. + * + * @param speedFactor a factor for the animation speed. + */ + public void setAnimSpeed() { + } + + /** + * Add the coordinate system to this scenegraph. + * NOT IMPLEMENTED FOR A ROCKET. + */ + public void addCoord() { + } + + /** + * Remove the coordinate system from this scenegraph. + * NOT IMPLEMENTED FOR A ROCKET. + */ + public void removeCoord() { + } + + /** + * Add the color orbit to this scenegraph. + * NOT IMPLEMENTED FOR A ROCKET. + */ + public void addOrbit() { + } + + /** + * Remove the color orbit from this scenegraph. + * NOT IMPLEMENTED FOR A ROCKET. + */ + public void removeOrbit() { + } + + /** + * Set a new orbit color. + * NOT IMPLEMENTED FOR A ROCKET. + */ + public void setOrbitColor(Color orbitColor) { + } + + /** + * Get the current position of the rocket. + * + * @return a Transform3D with the current position. + */ + public Transform3D getCurrentPosition() { + Transform3D transform = new Transform3D(); + trGrRot.getTransform(transform); + return transform; + } + + /** + * Returns the transform group to control the flight path + * + * @return TransformGrop the transform group + */ + public TransformGroup getTransformGroup() { + return trGrRot; + } + + /** + * Returns the BranchGroup of the created rocket scene. + * It has a rocket as leaf. + * + * @return the BranchGroup of the given rocket. + */ + public BranchGroup createSceneGraph() { + System.out.println("SceneRocket.createSceneGraph()"); + + // A BoundingSphere instance as general bounding region. + BoundingSphere boundsGen = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), + SSS3dConstants.BOUNDRADIUS); + + // set scale of the object + float scale; + if(((Boolean)iniObject.getParameter(XMLConstants.COMPRESSED)).booleanValue()) { + scale = rocket.getLogRadius(); + } else { + scale = rocket.getRadius(); + } + Transform3D tr3Dscale = new Transform3D(); + tr3Dscale.setScale((double)scale); + + // Create the first TransformGroup node trGrRotAndLeafs for the rocket, + // the coordinate system and the rotation + trGrRotAndLeafs = new TransformGroup(tr3Dscale); + + // With the ALLOW_TRANSFORM_WRITE capability, we allow the + // modification of the TransformGroup's code by the behavior's + // code at run time. + trGrRotAndLeafs.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + trGrRotAndLeafs.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); + trGrRotAndLeafs.setCapability(Group.ALLOW_CHILDREN_READ); + trGrRotAndLeafs.setCapability(Group.ALLOW_CHILDREN_WRITE); + trGrRotAndLeafs.setCapability(Group.ALLOW_CHILDREN_EXTEND); + + + // Construct the Lw3d loader and load the file + Loader lw3dLoader = new Lw3dLoader(Loader.LOAD_ALL); + Scene loaderScene = null; + try { + loaderScene = lw3dLoader.load( getId()+".lws"); + } + catch (Exception e) { + System.err.println("Exception loading file: " + e); + } + + + // Now add the scene graph defined in the lw3d file + if (loaderScene.getSceneGroup() != null) { + // Instead of using the default view location (which may be + // completely bogus for the particular file you're loading), + // let's use the initial view from the file. We can get + // this by getting the view groups from the scene (there's + // only one for Lightwave 3D), then using the inverse of the + // transform on that view as the transform for the entire scene. + + // First, get the view groups (shouldn't be null unless there + // was something wrong in the load + TransformGroup viewGroups[] = loaderScene.getViewGroups(); + + // Get the Transform3D from the view and invert it + Transform3D t = new Transform3D(); + viewGroups[0].getTransform(t); + Matrix4d m = new Matrix4d(); + t.get(m); + m.invert(); + m.rotY(Math.PI); + t.set(m); + + // Now we've got the transform we want. Create an + // appropriate TransformGroup and parent the scene to it. + // Then insert the new group into the main BranchGroup. + sceneTransform = new TransformGroup(t); + sceneTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + sceneTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); + + sceneTransform.addChild(loaderScene.getSceneGroup()); + BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), + SSS3dConstants.BOUNDRADIUS); + + /*Light light[] = loaderScene.getLightNodes(); + for(int l = 0;l + * + * @param orbitPos a reference to the list containing all position observer + */ + public void update(OrbitPositions orbitPos) { + + } + + /** + * Updates the information state of the object.
+ * + * @param id identification of the object that has to be updated + * @param parameter the parameter that has been changed + */ + public void update( String id, int parameter ) { + + if ( id.equals( sun.getId() ) || + id.equals("all") ) { + + IniData data = (IniData)objInfo.getParameter( XMLConstants.STAR, sun.getId() ); + + switch ( parameter ) { + case XMLConstants.VISIBLE : + // implemented inside SceneSolarSystem + break; + case XMLConstants.COORDINATESYSTEM : + if ( data.hasCoordinateSystem() ) { + addCoord(); + } else { + removeCoord(); + } + break; + case XMLConstants.ORBIT : + if ( data.hasOrbit() ) { + addOrbit(); + } else { + removeOrbit(); + } + break; + case XMLConstants.COLORORBIT : + setOrbitColor( data.getColorOrbit()); + break; + case XMLConstants.ANIMATIONSPEED : + setAnimSpeed(); + break; + default : break; + + } + } + } + + /** + * Removes this object from the position observer list. + */ + public void destroy() { + objPos.detach(this); + objInfo.detach(this); + sun = null; + } + + /** + * Returns the ID of the sun. + * + * @return the ID to idendification the sun. + */ + public String getId() { + return sun.getId(); + } + + /** + * Returns a CelestialObjectInfo of the sun. + * This object has all specific information of the sun. + * + * @return a CelestialObjectInfo of the sun. + */ + public CelestialObjectInfo getInfo() { + return sun.getInfo(); + } + + /** + * This method handle the rotation of the sun. + * + * @param animate if true, start animation; if false stop animation. + * @param rotate if true, start rotation; if false stop rotation. + */ + public void setAnimation(boolean animate, boolean rotate) { + date = new Date(); + if(animate) { + // set the stop time for the rotation. + alphaTime = date.getTime() - alphaTime; + rotationAlpha.setStartTime(alphaTime); + } else { + // save the stop time for the rotation. + alphaTime = rotationAlpha.getStartTime(); + alphaTime = date.getTime() - alphaTime; + } + // set the rotation to stop or go. + rotator.setEnable(rotate); + } + + /** + * Set the animation speed for the sun. + */ + public void setAnimSpeed() { + date = new Date(); + + AnimationSpeed animationSpeed = (AnimationSpeed)objInfo.getInitializationObject().getParameter(XMLConstants.ANIMATIONSPEED); + int factor = 0; + switch(animationSpeed.getType()) { + case AnimationSpeed.DAYS_PER_SECOND: + factor = 1; + break; + case AnimationSpeed.HOURS_PER_SECOND: + factor = 24; + break; + case AnimationSpeed.MINUTES_PER_SECOND: + factor = 24 * 60; + break; + default: + } + int animSpeed = animationSpeed.getValue(); + long duration = (long)(sun.getRotOwnAxis() * factor / animSpeed); + + long increasing = rotationAlpha.getIncreasingAlphaDuration(); + // delta t = t1*(1-T2/T1) + long diff = (long)((date.getTime() - rotationAlpha.getStartTime()) * + (1.0f - (float)duration / (float)increasing)); + rotationAlpha.setIncreasingAlphaDuration(duration); + rotationAlpha.setStartTime(rotationAlpha.getStartTime() + diff); + } + + /** + * Add the coordinate system to this scenegraph. + */ + public void addCoord() { + trGrScaleAndLeafs.addChild(removableCoordBG); + } + + /** + * Remove the coordinate system from this scenegraph. + */ + public void removeCoord() { + removableCoordBG.detach(); + } + + /** + * The sun has no color orbit. + */ + public void addOrbit() { + + } + + /** + * The sun has no color orbit. + */ + public void removeOrbit() { + + } + + /** + * The sun has no color orbit. + */ + public void setOrbitColor(Color orbitColor) { + + } + + /** + * Get the current position of the sun. + * + * @return a Transform3D with the current position. + */ + public Transform3D getCurrentPosition() { + Transform3D transform = new Transform3D(); + trGrRot.getTransform(transform); + return transform; + } + + /** + * Returns the BranchGroup of the created sun scene. + * It has the sun as leaf and it make a rotation. + * + * @return the BranchGroup of the sun. + */ + public BranchGroup createSceneGraph() { + + // A BoundingSphere instance as general bounding region. + BoundingSphere boundsGen = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), + SSS3dConstants.BOUNDRADIUS); + + // set scale of the sun + float scale; + if(((Boolean)iniObject.getParameter(XMLConstants.COMPRESSED)).booleanValue()) { + scale = sun.getLogRadius(); + } else { + scale = sun.getRadius(); + } + Transform3D tr3Dscale = new Transform3D(); + tr3Dscale.setScale((double)scale); + + // Create the first TransformGroup node trGrScaleAndLeafs for the sun, + // the coordinate system and the Transform3D scale. + trGrScaleAndLeafs = new TransformGroup(tr3Dscale); + + trGrScaleAndLeafs.setCapability(Group.ALLOW_CHILDREN_READ); + trGrScaleAndLeafs.setCapability(Group.ALLOW_CHILDREN_WRITE); + trGrScaleAndLeafs.setCapability(Group.ALLOW_CHILDREN_EXTEND); + + // Attach the leaf node sun to the TransformGroup trGrRotAndLeafs. + trGrScaleAndLeafs.addChild(sun); // Sphere sun + + removableCoordBG = new BranchGroup(); + + // Create and attach a coordinate system to the TransformGroup node + // trGrRotAndLeafs, that is to the sun. + removableCoordBG.addChild(new CoordinateSystem(1.2f)); + + // Allow to detach the Coordinate System + removableCoordBG.setCapability(BranchGroup.ALLOW_DETACH); + + // Set the picking of the CoordinateSystem BranchGroup to false. + removableCoordBG.setPickable(false); + + trGrScaleAndLeafs.addChild(removableCoordBG); + + // Create the second TransformGroup node trGrRot for the rotation + trGrRot = new TransformGroup(); + + // With the ALLOW_TRANSFORM_READ and ALLOW_TRANSFORM_WRITE + // capabilities, we allow the modification of the TransformGroup's + // code by the Behavior's code at run time. + trGrRot.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); + trGrRot.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + + // Attach the trGrScaleAndLeafs node to the trGrRot node. + trGrRot.addChild(trGrScaleAndLeafs); + + // Prepare the RotationInterpolator (Behavior) for the + // sun's rotation about its own axis. + // Create the alpha(t) function. + rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, + /*sun.getRotOwnAxis()*/Long.MAX_VALUE, 0, 0, 0, 0, 0); + + // Create the sun's rotation about its own axis. + rotator = new RotationInterpolator(rotationAlpha, trGrRot); + + rotator.setSchedulingBounds(boundsGen); + + trGrRot.addChild(rotator); + + BranchGroup brGrAll = new BranchGroup(); + brGrAll.addChild(trGrRot); + + brGrAll.setCapability(BranchGroup.ALLOW_DETACH); + + // Return the final version of the BranchGroup node brGrAll. + return brGrAll; + } +} diff --git a/Solar system/sss3d-source/sss3d/contentbranch/sun/Sun.java b/Solar system/sss3d-source/sss3d/contentbranch/sun/Sun.java new file mode 100644 index 0000000..073de0f --- /dev/null +++ b/Solar system/sss3d-source/sss3d/contentbranch/sun/Sun.java @@ -0,0 +1,162 @@ +/* + File: Sun.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/contentbranch/sun/Sun.java,v 1.10 2000/12/15 02:53:59 portm Exp $ + $Author: portm $ + $Date: 2000/12/15 02:53:59 $ + $State: Exp $ + +*/ +package sss3d.contentbranch.sun; + +import sss3d.contentbranch.*; +import sss3d.utils.SSS3dConstants; + +import javax.media.j3d.*; +import javax.vecmath.*; +import com.sun.j3d.utils.geometry.Sphere; + +/** + * This class creates the Sun by using the Sphere class + * and a given texture (sun.jpg). + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.10 $ + */ +public class Sun extends Sphere implements CelestialObject { + + // The name of the sun + private String name; + + private CelestialObjectInfo lnkCelestialObjectInfo; + + /** + * Constructs a new Sun Sphere. + */ + public Sun(String name) { + super(INITRADIUS, Sphere.GENERATE_NORMALS | + Sphere.GENERATE_TEXTURE_COORDS, DIVISON); + this.name = name; + // parameter of the sun + lnkCelestialObjectInfo = new CelestialObjectInfo(name, SSS3dConstants.STAR_TYPE); + + // Set up the appearance to this Sphere object + this.setAppearance(createAppearance()); + } + + /** + * Gets the ID of the sun. + * + * @return the ID of the sun. + */ + public String getId(){ + return name; + } + + /** + * Returns a CelestialObjectInfo of the sun. + * This object has all specific information of the sun. + * + * @return a CelestialObjectInfo of the sun. + */ + public CelestialObjectInfo getInfo() { + return lnkCelestialObjectInfo; + } + + /** + * Gets the radius of the current sun. + * + * @return the radius as a scaled factor of the current sun. + */ + public float getRadius() { + return (float)(lnkCelestialObjectInfo.getDiameter() / SSS3dConstants.SCALE); + } + + /** + * Gets the radius of the current sun. + * + * @return the radius as a logarithm factor of the current sun. + */ + public float getLogRadius() { + return (float)(Math.log(lnkCelestialObjectInfo.getDiameter() / 1000) / 10); + } + + /** + * Gets the degree of the sun. + * + * @return the degree () of the sun. + */ + public double getDegree() { + return (double)lnkCelestialObjectInfo.getInclinationOfEquatorToOrbit(); + } + + /** + * Gets the rotation speed to the own axis of the sun. + * + * @return the rotation speed to the own axis of the sun. + * One day correspond to one second in the animation. + */ + public long getRotOwnAxis() { + return (long)(lnkCelestialObjectInfo.getRotationPeriod() * SECOND); + } + + /** + * The sun has a fix position!. + * + * @return 0. + */ + public long getRotOrbit() { + return 0; + } + + /** + * Set the appearance of sun (whith the right + * texture). + * + * @return the Appearance of the sun with his right texture. + */ + private Appearance createAppearance() { + // Optical properties of the sun. + + // Ambient-diffuse-reflection coefficient + Color3f diffAmb = new Color3f(1.0f, 1.0f, 0.2f); + // Diffuse-reflection coefficient + Color3f reflDiff = new Color3f(1.0f, 1.0f, 0.0f); + // Specular-reflection coefficient (reflectance function) + Color3f reflSpec = new Color3f(1.0f, 1.0f, 0.0f); + // c = shininess: cos^c in the specular reflection + float c = 1; + // Emitted light + Color3f lumEmise = new Color3f(1.0f, 1.0f, 0.2f); + + Appearance appearance = new Appearance(); + + // Set up the optical properties. + appearance.setMaterial(new Material(diffAmb, lumEmise,reflDiff, reflSpec, c)); +/* + // Loading of the texture + NewTextureLoader newTextureLoader = new NewTextureLoader("images/" + getId() + ".jpg"); + + Texture texture = newTextureLoader.getTexture(); + if(texture == null) + System.out.println("Attention: the texture left"); + + appearance.setTexture(texture); + + // Application mode of the texture + TextureAttributes texAttr = new TextureAttributes(); + texAttr.setTextureMode(TextureAttributes.MODULATE); // there still are: BLEND, DECAL, + // and REPLACE + appearance.setTextureAttributes(texAttr); +*/ + return appearance; + } +} diff --git a/Solar system/sss3d-source/sss3d/gui/BooleanPanel.java b/Solar system/sss3d-source/sss3d/gui/BooleanPanel.java new file mode 100644 index 0000000..830de35 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/BooleanPanel.java @@ -0,0 +1,146 @@ +/* + File: BooleanPanel.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/BooleanPanel.java,v 1.6 2000/12/13 13:47:55 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:47:55 $ + $State: Exp $ + +*/ + +package sss3d.gui; + +import sss3d.gui.*; +import sss3d.contentbranch.*; +import sss3d.utils.xmlparser.XMLConstants; +import sss3d.utils.SSS3dConstants; + +import java.awt.*; +import javax.swing.*; +import java.awt.event.*; +import java.util.*; +import javax.swing.event.*; + +/** + * A simple JPanel with a JComboBox containing the boolean + * values true and false. Also a title will be displayed depending + * on the given parameter. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.6 $ + */ +public class BooleanPanel extends JPanel implements ActionListener{ + + private InitializationPanel iniPanel; + private int parameter = -1; + + private String[] booleanStrings = { "false", "true" }; + + private final int TRUE = 1; + private final int FALSE = 0; + + private JComboBox booleanList; + + /** + * Creates a simple boolean panel + * + * @param iniPanel an object reference to an instance of InitializationPanel + * @param parameter the parameter with two possible outcomes true and false + */ + public BooleanPanel( InitializationPanel iniPanel, int parameter ) { + super(); + + this.iniPanel = iniPanel; + this.parameter = parameter; + + // create GUI + setLayout( new BoxLayout( this, BoxLayout.Y_AXIS ) ); + + + // Create the combo box + booleanList = new JComboBox( booleanStrings ); + + boolean value = ((Boolean)iniPanel.getObjectsInformation().getParameter(parameter)).booleanValue(); + if ( value ) { + booleanList.setSelectedIndex(TRUE); + } else { + booleanList.setSelectedIndex(FALSE); + } + + booleanList.addActionListener(this); + booleanList.setActionCommand("changed"); + booleanList.setAlignmentX(LEFT_ALIGNMENT); + setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); + + JLabel title = new JLabel(XMLConstants.treeElementNames[parameter]); + title.setAlignmentX(LEFT_ALIGNMENT); + add( title ); + add(Box.createRigidArea(new Dimension(0, 10))); + add(booleanList); + this.setAlignmentX(LEFT_ALIGNMENT); + + // enable/disable components depending on they can be changed during + // runtime mode + if ( iniPanel != null ) { + switch ( iniPanel.getMode() ) { + case SSS3dConstants.RUNTIME_MODE : + booleanList.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[parameter]); + break; + default : break; + } + } else { + booleanList.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[parameter]); + } + + this.setVisible(true); + } + + /** + * Implementation of action listener + * + * @param e java.awt.event.ActionEvent + */ + public void actionPerformed(java.awt.event.ActionEvent e) { + if (e.getActionCommand().equals("changed")) { + + if ( booleanList.getSelectedIndex() == TRUE ) { + if ( iniPanel != null ) { + if ( iniPanel.getMode() == SSS3dConstants.INITIALIZATION_MODE || + ( iniPanel.getMode() == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[parameter]) ) { + + iniPanel.getObjectsInformation().setParameter( new Boolean(true),parameter ); + iniPanel.updateTreeViewInfo(new Boolean(true),parameter); + } + + } else { + if(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[parameter]) + iniPanel.getObjectsInformation().setParameter( new Boolean(true),parameter ); + } + + } else { + if ( iniPanel != null ) { + if ( iniPanel.getMode() == SSS3dConstants.INITIALIZATION_MODE || + ( iniPanel.getMode() == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[parameter]) ) { + + iniPanel.getObjectsInformation().setParameter( new Boolean(false),parameter ); + iniPanel.updateTreeViewInfo(new Boolean(false),parameter); + } + + } else { + if(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[parameter]) + iniPanel.getObjectsInformation().setParameter( new Boolean(false),parameter ); + } + } + } + } +} diff --git a/Solar system/sss3d-source/sss3d/gui/CelestialObjectPanel.java b/Solar system/sss3d-source/sss3d/gui/CelestialObjectPanel.java new file mode 100644 index 0000000..49cb7ca --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/CelestialObjectPanel.java @@ -0,0 +1,281 @@ +/* + File: CelestialObjectPanel.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/CelestialObjectPanel.java,v 1.8 2000/12/12 12:01:01 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 12:01:01 $ + $State: Exp $ + +*/ + +package sss3d.gui; + +import sss3d.gui.*; +import sss3d.contentbranch.*; +import sss3d.utils.*; +import sss3d.utils.xmlparser.XMLConstants; + +import java.awt.*; +import javax.swing.*; +import java.awt.event.*; +import java.util.*; +import javax.swing.event.*; + +/** + * Shows the current settings of a given CelestialObject. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.8 $ + */ +public class CelestialObjectPanel extends JPanel implements ActionListener{ + + private JLabel name; + private JLabel type; + private JLabel visible = new JLabel("Visible"); + private JLabel coordinateSystem = new JLabel("Coordinate System"); + private JLabel orbit = new JLabel("Orbit"); + private JLabel colorOrbit = new JLabel("Current Orbit Color"); + private JLabel currentColor = new JLabel(); + private JCheckBox cbVisible = new JCheckBox(); + private JCheckBox cbCoordSys = new JCheckBox(); + private JCheckBox cbOrbit = new JCheckBox(); + private JPanel upperPanel; + private JPanel colorPanel = new JPanel(); + private JPanel buttonPanel = new JPanel(); + private JButton update = new JButton("Update"); + + private InitializationPanel iniPanel; + private IniData data; + private Color newColor = null; + private int parameter; + + /** + * Creates a CelestialObjectPanel depending on the given parameter and object name. + * + * @param iniPanel an object reference to an instance of InitializationPanel + * @param parameter either XMLConstants.STAR,XMLConstants.PLANET, XMLConstants.MOON, + * XMLConstants.COMET, XMLConstants.SATELLITE or XMLConstants.ROCKET + * @param objectName the name of the object + */ + public CelestialObjectPanel( InitializationPanel iniPanel , int parameter, String objectName ) { + super(); + this.iniPanel = iniPanel; + this.parameter = parameter; + this.data = (IniData)iniPanel.getObjectsInformation().getParameter(parameter,objectName); + + if ( data.getType() == SSS3dConstants.ROCKET_TYPE ) { + upperPanel = new JPanel( new GridLayout(2,2) ); + } else { + upperPanel = new JPanel( new GridLayout(5,2) ); + } + + // create GUI + setLayout( new BoxLayout( this, BoxLayout.Y_AXIS ) ); + this.setAlignmentY(0.0f); + + switch ( data.getType() ) { + case SSS3dConstants.UNKNOWN_TYPE : + type = new JLabel("Unknown"); + break; + case SSS3dConstants.INI_TYPE : + type = new JLabel("Ini"); + break; + case SSS3dConstants.CELESTIALOBJECT_TYPE : + type = new JLabel("Celestial Object"); + break; + case SSS3dConstants.STAR_TYPE : + type = new JLabel("Star"); + break; + case SSS3dConstants.PLANET_TYPE : + type = new JLabel("Planet"); + break; + case SSS3dConstants.MOON_TYPE : + type = new JLabel("Moon"); + break; + case SSS3dConstants.COMET_TYPE : + type = new JLabel("Comet"); + break; + case SSS3dConstants.SATELLITE_TYPE : + type = new JLabel("Satellite"); + break; + case SSS3dConstants.ROCKET_TYPE : + type = new JLabel("Rocket"); + break; + default: + type = new JLabel("Unknown"); + break; + } + upperPanel.add(type); + name = new JLabel(data.getName()); + upperPanel.add(name); + + upperPanel.add(visible); + cbVisible.setSelected( data.isVisible() ); + upperPanel.add(cbVisible); + + if ( data.getType() != SSS3dConstants.ROCKET_TYPE ) { + upperPanel.add(coordinateSystem); + cbCoordSys.setSelected( data.hasCoordinateSystem() ); + upperPanel.add(cbCoordSys); + } + + upperPanel.setAlignmentY(TOP_ALIGNMENT); + add(upperPanel); + + if ( data.getType() != SSS3dConstants.STAR_TYPE && + data.getType() != SSS3dConstants.ROCKET_TYPE ) { + upperPanel.add(orbit); + cbOrbit.setSelected( data.hasOrbit() ); + upperPanel.add(cbOrbit); + + upperPanel.add(colorOrbit); + currentColor.setOpaque(true); + currentColor.setBackground( data.getColorOrbit() ); + upperPanel.add(currentColor); + + + colorPanel.setLayout( new BoxLayout( colorPanel, BoxLayout.Y_AXIS )); + //Set up color chooser for setting text color + final JColorChooser tcc = new JColorChooser( this.data.getColorOrbit() ); + tcc.getSelectionModel().addChangeListener( + new ChangeListener() { + public void stateChanged(ChangeEvent e) { + newColor = tcc.getColor(); + currentColor.setBackground( newColor ); + + } + } + ); + tcc.setPreviewPanel(new JPanel()); + tcc.setBorder(BorderFactory.createTitledBorder( + "Choose orbit color")); + + colorPanel.add(tcc); + colorPanel.setAlignmentY(TOP_ALIGNMENT); + add(colorPanel); + } + + + buttonPanel.setLayout( new BoxLayout( buttonPanel, BoxLayout.X_AXIS )); + update.setActionCommand("update"); + update.addActionListener(this); + buttonPanel.add(update); + buttonPanel.setAlignmentY(TOP_ALIGNMENT); + + add(buttonPanel); + + setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); + + // enable/disable components depending on they can be changed during + // runtime mode + if ( iniPanel != null ) { + switch ( iniPanel.getMode() ) { + case SSS3dConstants.RUNTIME_MODE : + cbVisible.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.VISIBLE]); + cbOrbit.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ORBIT]); + cbCoordSys.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.COORDINATESYSTEM]); + colorPanel.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.COLORORBIT]); + break; + default : break; + } + } else { + cbVisible.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.VISIBLE]); + cbOrbit.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ORBIT]); + cbCoordSys.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.COORDINATESYSTEM]); + colorPanel.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.COLORORBIT]); + } + + this.setVisible(true); + } + + /** + * Implementation of action listener + * + * @param e java.awt.event.ActionEvent + */ + public void actionPerformed(java.awt.event.ActionEvent e) { + if (e.getActionCommand().equals("update")) { + // check if the user changed the values + // if so we have to update the initialization object + if ( cbVisible.isSelected() != data.isVisible() ) { + if ( iniPanel != null ) { + if ( iniPanel.getMode() == SSS3dConstants.INITIALIZATION_MODE || + ( iniPanel.getMode() == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.VISIBLE]) ) { + + iniPanel.getObjectsInformation().setParameter(new Boolean(cbVisible.isSelected()),XMLConstants.VISIBLE,data.getName()); + } + } else { + if( XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.VISIBLE] ) + iniPanel.getObjectsInformation().setParameter(new Boolean(cbVisible.isSelected()),XMLConstants.VISIBLE,data.getName()); + } + } + + if ( cbCoordSys.isSelected() != data.hasCoordinateSystem() ) { + if ( iniPanel != null ) { + if ( iniPanel.getMode() == SSS3dConstants.INITIALIZATION_MODE || + ( iniPanel.getMode() == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.COORDINATESYSTEM]) ) { + + iniPanel.getObjectsInformation().setParameter(new Boolean(cbCoordSys.isSelected()),XMLConstants.COORDINATESYSTEM,data.getName()); + } + } else { + if( XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.COORDINATESYSTEM] ) + iniPanel.getObjectsInformation().setParameter(new Boolean(cbCoordSys.isSelected()),XMLConstants.COORDINATESYSTEM,data.getName()); + } + + + } + + if ( cbOrbit.isSelected() != data.hasOrbit() ) { + if ( iniPanel != null ) { + if ( iniPanel.getMode() == SSS3dConstants.INITIALIZATION_MODE || + ( iniPanel.getMode() == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ORBIT]) ) { + iniPanel.getObjectsInformation().setParameter(new Boolean(cbOrbit.isSelected()),XMLConstants.ORBIT,data.getName()); + } + } else { + if( XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ORBIT] ) + iniPanel.getObjectsInformation().setParameter(new Boolean(cbOrbit.isSelected()),XMLConstants.ORBIT,data.getName()); + } + } + + if ( newColor != null ) { + + if ( iniPanel != null ) { + if ( iniPanel.getMode() == SSS3dConstants.INITIALIZATION_MODE || + ( iniPanel.getMode() == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.COLORORBIT]) ) { + + if ( newColor.getRed() != data.getColorOrbit().getRed() || + newColor.getGreen() != data.getColorOrbit().getGreen() || + newColor.getBlue() != data.getColorOrbit().getBlue() || + newColor.getAlpha() != data.getColorOrbit().getAlpha() ) { + iniPanel.getObjectsInformation().setParameter( new MyColor(newColor) ,XMLConstants.COLORORBIT,data.getName()); + } + + } + } else { + if( XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.COLORORBIT] ) + if ( newColor.getRed() != data.getColorOrbit().getRed() || + newColor.getGreen() != data.getColorOrbit().getGreen() || + newColor.getBlue() != data.getColorOrbit().getBlue() || + newColor.getAlpha() != data.getColorOrbit().getAlpha() ) { + iniPanel.getObjectsInformation().setParameter( new MyColor(newColor) ,XMLConstants.COLORORBIT,data.getName()); + } + } + + + } + } + } + +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/gui/ComboBoxPanel.java b/Solar system/sss3d-source/sss3d/gui/ComboBoxPanel.java new file mode 100644 index 0000000..e9da819 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/ComboBoxPanel.java @@ -0,0 +1,139 @@ +/* + File: ComboBoxPanel.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/ComboBoxPanel.java,v 1.7 2000/12/12 12:01:01 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 12:01:01 $ + $State: Exp $ + +*/ + +package sss3d.gui; + +import sss3d.utils.SSS3dConstants; +import sss3d.gui.*; +import sss3d.utils.xmlparser.XMLConstants; +import sss3d.contentbranch.*; + +import java.awt.*; +import javax.swing.*; +import java.awt.event.*; +import java.util.*; +import javax.swing.event.*; + +/** + * Shows a combo box view + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.7 $ + */ +public class ComboBoxPanel extends JPanel implements ActionListener{ + + private InitializationPanel iniPanel; + private int parameter = -1; + + private JComboBox list; + + /** + * Creates a ComboBox panel depending on the given parameter. + * + * @param iniPanel an object reference to an instance of InitializationPanel + * @param parameter the parameter with two possible outcomes true and false + */ + public ComboBoxPanel( InitializationPanel iniPanel, int parameter ) { + super(); + + this.iniPanel = iniPanel; + this.parameter = parameter; + + // create GUI + setLayout( new BoxLayout( this, BoxLayout.Y_AXIS ) ); + + // Create the combo box + if ( parameter == XMLConstants.CAMERA) { + list = new JComboBox( SSS3dConstants.CAMERA_POSITIONS ); + int value = ((Integer)iniPanel.getObjectsInformation().getParameter(parameter)).intValue(); + list.setSelectedIndex(value); + + } else if ( parameter == XMLConstants.CALCULATION) { + list = new JComboBox( SSS3dConstants.CALCULATION_METHODS ); + int value = ((Integer)iniPanel.getObjectsInformation().getParameter(parameter)).intValue(); + list.setSelectedIndex(value); + } + list.addActionListener(this); + list.setActionCommand("changed"); + list.setAlignmentX(LEFT_ALIGNMENT); + + setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); + + JLabel title = new JLabel(XMLConstants.treeElementNames[parameter]); + title.setAlignmentX(LEFT_ALIGNMENT); + add( title ); + add(Box.createRigidArea(new Dimension(0, 10))); + add(list); + this.setAlignmentX(LEFT_ALIGNMENT); + + + // enable/disable components depending on they can be changed during + // runtime mode + if ( iniPanel != null ) { + switch ( iniPanel.getMode() ) { + case SSS3dConstants.RUNTIME_MODE : + list.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[parameter]); + break; + default : break; + } + } else { + list.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[parameter]); + } + + this.setVisible(true); + + } + + /** + * Implementation of action listener + * + * @param e java.awt.event.ActionEvent + */ + public void actionPerformed(java.awt.event.ActionEvent e) { + if (e.getActionCommand().equals("changed")) { + if ( parameter == XMLConstants.CAMERA ) { + if( iniPanel != null ){ + if ( iniPanel.getMode() == SSS3dConstants.INITIALIZATION_MODE || + ( iniPanel.getMode() == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.CAMERA]) ) { + + iniPanel.getObjectsInformation().setParameter( new Integer(list.getSelectedIndex()), XMLConstants.CAMERA ); + iniPanel.updateTreeViewInfo(new Integer(list.getSelectedIndex()), XMLConstants.CAMERA ); + } + } else { + if( XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.CAMERA] ) + iniPanel.getObjectsInformation().setParameter( new Integer(list.getSelectedIndex()), XMLConstants.CAMERA ); + } + } else if ( parameter == XMLConstants.CALCULATION ) { + if( iniPanel != null ){ + if ( iniPanel.getMode() == SSS3dConstants.INITIALIZATION_MODE || + ( iniPanel.getMode() == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.CALCULATION]) ) { + + iniPanel.getObjectsInformation().setParameter( new Integer(list.getSelectedIndex()), XMLConstants.CALCULATION ); + iniPanel.updateTreeViewInfo(new Integer(list.getSelectedIndex()),XMLConstants.CALCULATION); + } + } else { + if( XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.CALCULATION] ) + iniPanel.getObjectsInformation().setParameter( new Integer(list.getSelectedIndex()), XMLConstants.CALCULATION ); + } + } + } + } + +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/gui/DatePanel.java b/Solar system/sss3d-source/sss3d/gui/DatePanel.java new file mode 100644 index 0000000..085b18b --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/DatePanel.java @@ -0,0 +1,542 @@ +/* + File: DatePanel.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/DatePanel.java,v 1.7 2000/12/12 12:01:01 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 12:01:01 $ + $State: Exp $ + +*/ + +package sss3d.gui; + +import sss3d.contentbranch.*; +import sss3d.utils.xmlparser.*; +import sss3d.utils.observer.*; +import sss3d.gui.*; +import sss3d.utils.SSS3dConstants; +import sss3d.calculations.TimeCalc; // converts values between time formats + +import java.awt.*; +import javax.swing.*; +import java.awt.event.*; +import java.util.*; +import javax.swing.event.*; +import javax.swing.text.Document; + +/** + * Shows the start settings of the simulator date. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.7 $ + */ +public class DatePanel extends JPanel implements ActionListener, ItemListener, DocumentListener{ + + private InitializationPanel iniPanel; + private ObjectsInformation objInfo; + private int parameter = -1; + private int mode = SSS3dConstants.RUNTIME_MODE; + + private JComboBox day; + private JComboBox month; + private JTextField year; + private JComboBox hour; + private JComboBox minute; + private JComboBox second; + private JTextField jday; + private JTextPane warning; + private JButton button; + + // variables to check the new date + private TimeCalc timeCalculator; + private boolean changedJDay = false; + private boolean changedGCalendar = false; + private boolean update = false; + private boolean formatException = false; + int dd = 1; // day + int mm = 1; // month + int yyyy = 2000; // year + int hh = 12; // hour + int m = 0; // minute + int ss = 0; // second + double jd = 2451545.0; // julian day + + + private final String [] MONTH_NAMES = { + "January","February","March","April","May","June","July", + "August","September","October","November","December" + }; + + + int[] daysInMonth = + {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + + + /** + * Creates a DatePanel. + * + * @param iniPanel an object reference to an instance of InitializationPanel + */ + public DatePanel( InitializationPanel iniPanel ) { + super(); + this.iniPanel = iniPanel; + this.mode = iniPanel.getMode(); + objInfo = iniPanel.getObjectsInformation(); + initialize(); + } + + /** + * Creates a DatePanel. + * + * @param objInfo an object reference to an instance of ObjectsInformation + */ + public DatePanel( ObjectsInformation objInfo ) { + super(); + this.objInfo = objInfo; + initialize(); + } + + + /** + * Builds the GUI + */ + public void initialize( ) { + + timeCalculator = new TimeCalc(); + + // create GUI + setLayout( new BoxLayout( this, BoxLayout.Y_AXIS ) ); + + JLabel date = new JLabel("date"); + date.setAlignmentX(LEFT_ALIGNMENT); + add(date); + JPanel valuesPanel = new JPanel(); + valuesPanel.setAlignmentX(LEFT_ALIGNMENT); + valuesPanel.setBorder(BorderFactory.createEmptyBorder(10,0,10,0)); + + if ( iniPanel != null ) { + valuesPanel.setLayout( new GridLayout( 7,2 ) ); + } else { + valuesPanel.setLayout( new GridLayout( 14, 1) ); + } + + valuesPanel.add( new JLabel(XMLConstants.treeElementNames[XMLConstants.DAY]) ); + day = new JComboBox( createLabels(1,31) ); + int value = ((Integer)objInfo.getParameter(XMLConstants.DAY)).intValue(); + dd = value; + day.setSelectedIndex(value - 1); // index starts at 0 + day.addItemListener(this); + valuesPanel.add(day); + + valuesPanel.add( new JLabel(XMLConstants.treeElementNames[XMLConstants.MONTH]) ); + month = new JComboBox( MONTH_NAMES ); + value = ((Integer)objInfo.getParameter(XMLConstants.MONTH)).intValue(); + mm = value; + month.setSelectedIndex(value - 1); // index starts at 0 + month.addItemListener(this); + valuesPanel.add(month); + + valuesPanel.add( new JLabel(XMLConstants.treeElementNames[XMLConstants.YEAR]) ); + year = new JTextField("2000"); + value = ((Integer)objInfo.getParameter(XMLConstants.YEAR)).intValue(); + yyyy = value; + year.setText(Integer.toString(value)); + year.getDocument().addDocumentListener(this); + year.getDocument().putProperty("name","year"); + valuesPanel.add(year); + + valuesPanel.add( new JLabel(XMLConstants.treeElementNames[XMLConstants.HOUR]) ); + hour = new JComboBox( createLabels(0,23) ); + value = ((Integer)objInfo.getParameter(XMLConstants.HOUR)).intValue(); + hh = value; + hour.setSelectedIndex(value); + hour.addItemListener(this); + valuesPanel.add(hour); + + valuesPanel.add( new JLabel(XMLConstants.treeElementNames[XMLConstants.MINUTES]) ); + minute = new JComboBox( createLabels(0,59) ); + value = ((Integer)objInfo.getParameter(XMLConstants.MINUTES)).intValue(); + m = value; + minute.setSelectedIndex(value); + minute.addItemListener(this); + valuesPanel.add(minute); + + valuesPanel.add( new JLabel(XMLConstants.treeElementNames[XMLConstants.SECONDS]) ); + second = new JComboBox( createLabels(0,59) ); + value = ((Integer)objInfo.getParameter(XMLConstants.SECONDS)).intValue(); + ss = value; + second.setSelectedIndex(value); + second.addItemListener(this); + valuesPanel.add(second); + + valuesPanel.add( new JLabel(XMLConstants.treeElementNames[XMLConstants.JDAY]) ); + jday = new JTextField("2451545.0"); + Double v = (Double)objInfo.getParameter(XMLConstants.JDAY); + jd = v.doubleValue(); + jday.setText(v.toString()); + jday.getDocument().addDocumentListener(this); + jday.getDocument().putProperty("name","jday"); + valuesPanel.add(jday); + + add(valuesPanel); + button = new JButton("update"); + button.setAlignmentX(LEFT_ALIGNMENT); + button.setActionCommand("update"); + button.addActionListener(this); + add(button); + + + warning = new JTextPane(); + warning.setBackground(this.getBackground()); + warning.setText(""); + warning.setAlignmentX(LEFT_ALIGNMENT); + warning.setVisible(true); + warning.setEditable(false); + add(warning); + setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); + this.setAlignmentX(LEFT_ALIGNMENT); + + // enable/disable components depending on they can be changed during + // runtime mode + switch ( mode ) { + case SSS3dConstants.RUNTIME_MODE : + day.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.DAY]); + month.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.MONTH]); + year.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.YEAR]); + hour.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.HOUR]); + minute.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.MINUTES]); + second.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.SECONDS]); + jday.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.JDAY]); + break; + default : break; + } + + this.setVisible(true); + + + } + + /** + * Method to create the labels (numbers) of the JComboBoxes + * + * @param min the smallest selectable value + * @param max the bigest selectable value + */ + private String[] createLabels( int min, int max ) { + int offset = 0; + if( min == 0 ) offset = 1; + if( min > 1 ) offset = (- min) + 1 ; + String labels[] = new String[max + offset]; + + for ( int i = min; i <= max; i++) { + labels[ i - min ] = new String(Integer.toString(i)); + } + return labels; + } + + /** + * Checks if day, month , and year are correct. + * Makes checks on leapyear, month february and century. + * + * @ returns boolean true if given date is valid + */ + private boolean checkGregorianDay() { + boolean correct = false; + + if ( mm > 0 && mm <= 12 ) { + if ( mm == 2 ) { // checks if month is equal to February + if ( dd > 0 && dd <= 29 ) { + if ( dd == 29 ) { + if ( yyyy % 4 == 0 ) { // should be always true + if ( yyyy % 400 == 0) { + correct = true; + } else { + if ( yyyy % 100 == 0 ) { + //vallid = false; + } else { + correct = true; + } + } + } // else yyyy isn't a leapyear 29. February isnt' correct + } else { + correct = true; + } + + } + } else { // for January, March, April, May, June, July, August, September, + // October, November and December do... + int maxDays = daysInMonth[ mm -1 ]; + if ( dd > 0 && dd <= maxDays ) { + correct = true; + } + } + } + return correct; + } + + + /** + * Checks if entered days are correct + * + * @return boolean true if values are correct + */ + private boolean checkValues() { + + boolean valid = false; + if ( formatException ) { + year.setText(Integer.toString(yyyy)); + jday.setText(Double.toString(jd)); + warning.setText("Value automatically reseted !"); + formatException = false; + + } else if( changedGCalendar ) { + // user changed only values inside GCalendar + if ( checkGregorianDay() ) { + jd = timeCalculator.mjd(yyyy, mm, dd, hh, m, ss); + jd = jd + 2400000.5; + jday.setText( new Double(jd).toString() ); + valid = true; + }else { + warning.setText("Entered values are not valid !"); + } + + } else if ( changedJDay ) { + // user changed julian day + jd = ( new Double(jday.getText()) ).doubleValue(); + double j = jd - 2400000.5; + int calendar[] = timeCalculator.calDat(j); + year.setText( Integer.toString(calendar[0]) ) ; // year + month.setSelectedIndex( calendar[1] - 1 ) ; // month + day.setSelectedIndex( calendar[2] - 1) ; // day + hour.setSelectedIndex( calendar[3] ) ; // hour + minute.setSelectedIndex( calendar[4] ) ; // minute + second.setSelectedIndex( calendar[5] ) ; // second + valid = true; + + } else if ( update ) { + if ( checkGregorianDay() ) { + jd = timeCalculator.mjd(yyyy, mm, dd, hh, m, ss); + jd = jd + 2400000.5; + jday.setText( new Double(jd).toString() ); + valid = true; + }else { + warning.setText("Entered values are not valid !"); + } + } + + if( valid )warning.setText(""); + + return valid; + } + + public void update() { + + int value = ((Integer)objInfo.getParameter(XMLConstants.DAY)).intValue(); + day.setSelectedIndex(value - 1); // index starts at 0 + value = ((Integer)objInfo.getParameter(XMLConstants.MONTH)).intValue(); + month.setSelectedIndex(value - 1); // index starts at 0 + value = ((Integer)objInfo.getParameter(XMLConstants.YEAR)).intValue(); + year.setText(Integer.toString(value)); + value = ((Integer)objInfo.getParameter(XMLConstants.HOUR)).intValue(); + hour.setSelectedIndex(value); + value = ((Integer)objInfo.getParameter(XMLConstants.MINUTES)).intValue(); + minute.setSelectedIndex(value); + value = ((Integer)objInfo.getParameter(XMLConstants.SECONDS)).intValue(); + second.setSelectedIndex(value); + Double v = (Double)objInfo.getParameter(XMLConstants.JDAY); + jday.setText(v.toString()); + } + + /** + * Implementation of action listener. + * Called if user pushes the update button. + * + * @param e java.awt.event.ActionEvent + */ + public void actionPerformed(java.awt.event.ActionEvent e) { + if (e.getActionCommand().equals("update")) { + + try { + + //System.out.println("Pushed update button : "+dd+":"+mm+":"+yyyy+":"+hh+":"+m+":"+ss+":"+jd); + + update = true; + + // first check if entered values are correct + if ( checkValues() ) { + + if ( mode == SSS3dConstants.INITIALIZATION_MODE || + ( mode == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.DAY]) ) { + + objInfo.setParameter(new Integer(dd),XMLConstants.DAY); + if( iniPanel != null )iniPanel.updateTreeViewInfo( new Integer(dd),XMLConstants.DAY ); + } + + if ( mode == SSS3dConstants.INITIALIZATION_MODE || + ( mode == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.MONTH]) ) { + + objInfo.setParameter(new Integer(mm),XMLConstants.MONTH); + if( iniPanel != null )iniPanel.updateTreeViewInfo( new Integer(mm),XMLConstants.MONTH ); + } + + if ( mode == SSS3dConstants.INITIALIZATION_MODE || + ( mode == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.YEAR]) ) { + + objInfo.setParameter(new Integer(yyyy),XMLConstants.YEAR); + if( iniPanel != null )iniPanel.updateTreeViewInfo( new Integer(yyyy),XMLConstants.YEAR ); + } + + if ( mode == SSS3dConstants.INITIALIZATION_MODE || + ( mode == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.HOUR]) ) { + + objInfo.setParameter(new Integer(hh),XMLConstants.HOUR); + if( iniPanel != null )iniPanel.updateTreeViewInfo( new Integer(hh),XMLConstants.HOUR ); + } + + if ( mode == SSS3dConstants.INITIALIZATION_MODE || + ( mode == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.MINUTES]) ) { + + if( iniPanel != null )iniPanel.updateTreeViewInfo( new Integer(m),XMLConstants.MINUTES ); + objInfo.setParameter(new Integer(m),XMLConstants.MINUTES); + } + + if ( mode == SSS3dConstants.INITIALIZATION_MODE || + ( mode == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.SECONDS]) ) { + + if( iniPanel != null )iniPanel.updateTreeViewInfo( new Integer(ss),XMLConstants.SECONDS ); + objInfo.setParameter(new Integer(ss),XMLConstants.SECONDS); + } + + if ( mode == SSS3dConstants.INITIALIZATION_MODE || + ( mode == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.JDAY]) ) { + + if( iniPanel != null )iniPanel.updateTreeViewInfo( new Double(jd),XMLConstants.JDAY ); + objInfo.setParameter(new Double(jd),XMLConstants.JDAY); + } + + } + } catch(NumberFormatException nfe) { + warning.setText("Input is not a Number !!!"); + } + changedJDay = false; + changedGCalendar = false; + update = false; + } + } + + /** + * Listens to diffrent input components. + * It checks the entered values if they are correct. + * + * @param e an instance of ItemEvent + */ + public void itemStateChanged(ItemEvent e) { + + Object source = e.getItemSelectable(); + if ( day.hasFocus() || month.hasFocus() || hour.hasFocus() || + minute.hasFocus() || second.hasFocus() ) { + if (source == day || + source == month || + source == hour || + source == minute || + source == second ) { + // set values + dd = day.getSelectedIndex() + 1; + mm = month.getSelectedIndex() + 1; + hh = hour.getSelectedIndex(); + m = minute.getSelectedIndex(); + ss = second.getSelectedIndex(); + + changedGCalendar = true; + changedJDay = false; + checkValues(); + changedGCalendar = false; + } + } + + } + + /** + * DocumentListener - this method is called if user adds chars to text input field. + * + * @param e an instance of DocumentEvent + */ + public void insertUpdate(DocumentEvent e) { + + Document doc = e.getDocument(); + + if (doc.getProperty("name").equals("year")) { + if ( year.hasFocus() ) { + + // set new value + try { + yyyy = (new Integer(year.getText())).intValue(); + + changedGCalendar = true; + changedJDay = false; + checkValues(); + changedGCalendar = false; + + } catch(IllegalStateException exception) { + // it's a work around a problem + } catch(NumberFormatException nfe) { + warning.setText("Year is not an integer value !"); + //year.setText(Integer.toString(yyyy)); + // is not possible during event handling + formatException = true; + } + + } + } + else if (doc.getProperty("name").equals("jday")) { + if ( jday.hasFocus() ) { + + // set new value + try { + jd = ( new Double(jday.getText()) ).doubleValue(); + + changedJDay = true; + changedGCalendar = false; + checkValues(); + changedJDay = false; + + } catch(IllegalStateException exception) { + } catch(NumberFormatException nfe) { + warning.setText("Julian Day is not a floating point value !"); + //jday.setText(Double.toString(jd)); + // is not possible during event handling + formatException = true; + } + + } + } + } + + /** + * DocumentListener - not used at the moment + */ + public void removeUpdate(DocumentEvent e) { + } + + /** + * DocumentListener - not used at the moment + */ + public void changedUpdate(DocumentEvent e) { + } + +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/gui/Glasses3DLayout.java b/Solar system/sss3d-source/sss3d/gui/Glasses3DLayout.java new file mode 100644 index 0000000..24ff2dc --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/Glasses3DLayout.java @@ -0,0 +1,313 @@ +/* + File: Glasses3DLayout.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/Glasses3DLayout.java,v 1.5 2000/12/13 13:47:25 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:47:25 $ + $State: Exp $ + +*/ +package sss3d.gui; + +import java.awt.*; +import java.io.Serializable; +import java.util.Hashtable; + +/** + * The XYLayout component is a custom layout manager. It places + * components in a container at specific x and y coordinates relative to + * the upper-left corner of the container. Regardless of the type of display, + * the container always retains the relative x and y positions of the components. + * Resizing a container with an XYLayout, however, does not resize or reposition + * the components within the container. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.5 $ + */ +public class Glasses3DLayout implements LayoutManager2, Serializable { + + private static final long serialVersionUID = 200L; + private int width; + private int height; + private Hashtable info; + private static final XYConstraints defaultConstraints = new XYConstraints(); + private XYConstraints leftEyeConstraints; + private XYConstraints rightEyeConstraints; + + /** + * Creates an XYLayout component with the default screensize + * of 640 x 480. + */ + public Glasses3DLayout() { + this(640, 480); + } + + /** + * Creates an XYLayout component using the width and height + * specified with the width and height parameters. + * + * @param width The width of the layout manager in pixels. A value less than or + * equal to 0 means that the container's preferred size is used. + * @param height The height of the layout manager in pixels. A value less than + * or equal to 0 means that the container's preferred size is used. + */ + public Glasses3DLayout(int width, int height) { + info = new Hashtable(); + this.width = width; + this.height = width; + int offsethorizontal = 220; //227? + int offsetvertical = (int)(height * 0.05); + int w = width - offsethorizontal; + int h = (height - offsetvertical) / 2; + + leftEyeConstraints = new XYConstraints(offsethorizontal, 0, w, h); + rightEyeConstraints = new XYConstraints(0, h + offsetvertical, w, h); + } + + /** + * Returns the currently width of this component. + * + * @returns int the width + */ + public int getWidth() { + return width; + } + + /** + * The width of the XYLayout component in pixels. A value less than or + * equal to 0 means that the container's preferred width is used. + * + * @param width the new width + */ + public void setWidth(int width) { + this.width = width; + } + + /** + * Returns the currently height of this component. + * + * @returns int the height + */ + public int getHeight() { + return height; + } + + /** + * The height of the XYLayout object in pixels. A value less than + * or equal to 0 means that the container's preferred height is used. + * + * @param height the new height + */ + public void setHeight(int height) { + this.height = height; + } + + + /** + * Returns the left panel. + * + * @returns Object the left panel + */ + public Object getLeftPanel() { + return leftEyeConstraints; + } + + /** + * Returns the right panel. + * + * @returns Object the right panel + */ + public Object getRightPanel() { + return rightEyeConstraints; + } + + /** + * Returns a string that displays the width and height values. + * + * @return String a string representation of this object + */ + public String toString() { + return "XYLayout[width=" + width + ",height=" + height + "]"; + } + + /** + * Adds the specified component to the layout. + * + * @param s a string + * @param component the component to be added + */ + public void addLayoutComponent(String s, Component component) { + } + + /** + * Removes the specified component from the layout. + * + * @param component the component to be removed + */ + public void removeLayoutComponent(Component component) { + info.remove(component); + } + + /** + * Returns the dimension of this container. + * + * @returns Dimension the size of this container + */ + public Dimension preferredLayoutSize(Container container) { + return getLayoutSize(container, true); + } + + /** + * Returns the minimum dimension of this container. + * + * @returns Dimension the minimum size of this container + */ + public Dimension minimumLayoutSize(Container container) { + return getLayoutSize(container, false); + } + + /** + * Lays out the container in the specified panel. + * + * @param parent the component which needs to be laid out + */ + public void layoutContainer(Container container) { + Insets insets = container.getInsets(); + int i = container.getComponentCount(); + for(int j = 0; j < i; j++) { + Component component = container.getComponent(j); + if(component.isVisible()) { + Rectangle rectangle = getComponentBounds(component, true); + component.setBounds(insets.left + rectangle.x, + insets.top + rectangle.y, + rectangle.width, + rectangle.height); + } + } + } + + /** + * Adds the specified component to the layout. + * + * @param component the component to be added + * @param obj an instance of a XYConstraints object + */ + public void addLayoutComponent(Component component, Object obj) { + if(obj instanceof XYConstraints) { + info.put(component, obj); + } + } + + /** + * Returns the maximum size of this component. + * + * @returns Dimension the maximum size of this component. + */ + public Dimension maximumLayoutSize(Container container) { + return new Dimension(0x7fffffff, 0x7fffffff); + } + + /** + * Returns the alignment along the x axis. This specifies how the component would + * like to be aligned relative to other components. The value should be a number + * between 0 and 1 where 0 represents alignment along the origin, 1 is aligned the + * furthest away from the origin, 0.5 is centered, etc. + * + * @param float the horizontal alignment + */ + public float getLayoutAlignmentX(Container container) { + return 0.5F; + } + + /** + * Returns the alignment along the y axis. + * This specifies how the component would like to be aligned relative to other + * components. The value should be a number between 0 and 1 where 0 represents alignment + * along the origin, 1 is aligned the furthest away from the origin, 0.5 is centered, etc. + * + * @returns float the horizontal alignment + */ + public float getLayoutAlignmentY(Container container) { + return 0.5F; + } + + /** + * Invalidates the layout, indicating that if the layout manager has cached + * information it should be discarded. + * + * @param container the target + */ + public void invalidateLayout(Container container) { + } + + + /** + * Returns the bounds of the specified XYConstraints component. + * + * @param component an instance of XYConstraints + * @param flag true if preferred size of component is used + * false if minimum size of component is used + * @return Rectangle the bounds of this components + */ + private Rectangle getComponentBounds(Component component, boolean flag) { + XYConstraints xyconstraints = (XYConstraints)info.get(component); + if(xyconstraints == null) { + xyconstraints = defaultConstraints; + } + Rectangle rectangle = new Rectangle(xyconstraints.getX(), + xyconstraints.getY(), + xyconstraints.getWidth(), + xyconstraints.getHeight()); + if(rectangle.width <= 0 || rectangle.height <= 0) { + Dimension dimension = flag ? component.getPreferredSize() : component.getMinimumSize(); + if(rectangle.width <= 0) { + rectangle.width = dimension.width; + } + if(rectangle.height <= 0) { + rectangle.height = dimension.height; + } + } + return rectangle; + } + + /** + * Returns the size of the layout. + * + * @param container the container + * @param flag true if preferred size of container is used + * false if minimum size of container is used + * @returns Dimension the size of the given container + */ + private Dimension getLayoutSize(Container container, boolean flag) { + Dimension dimension = new Dimension(0, 0); + if(width <= 0 || height <= 0) { + int i = container.getComponentCount(); + for(int j = 0; j < i; j++) { + Component component = container.getComponent(j); + if(component.isVisible()) { + Rectangle rectangle = getComponentBounds(component, flag); + dimension.width = Math.max(dimension.width, rectangle.x + rectangle.width); + dimension.height = Math.max(dimension.height, rectangle.y + rectangle.height); + } + } + } + if(width > 0) { + dimension.width = width; + } + if(height > 0) { + dimension.height = height; + } + Insets insets = container.getInsets(); + dimension.width += insets.left + insets.right; + dimension.height += insets.top + insets.bottom; + return dimension; + } +} diff --git a/Solar system/sss3d-source/sss3d/gui/GlobalPanel.java b/Solar system/sss3d-source/sss3d/gui/GlobalPanel.java new file mode 100644 index 0000000..05ccf58 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/GlobalPanel.java @@ -0,0 +1,45 @@ +/* + File: GlobalPanel.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/GlobalPanel.java,v 1.1 2000/11/17 15:56:38 harib Exp $ + $Author: harib $ + $Date: 2000/11/17 15:56:38 $ + $State: Exp $ + +*/ +package sss3d.gui; + +/** + * This interfaces defines the methods that every panel + * object has to implement. + * At the moment only InitializationPanel & InfoPanel + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.1 $ + */ + +public interface GlobalPanel { + + /** + * Returns the type of the panel + * + * @return String type of the panel. + */ + public String getType(); + + /** + * Returns the document of this panel. + * + * @return org.w3c.dom.Document document. + */ + public org.w3c.dom.Document getDocument(); + +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/gui/InitializationPanel.java b/Solar system/sss3d-source/sss3d/gui/InitializationPanel.java new file mode 100644 index 0000000..00c65a4 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/InitializationPanel.java @@ -0,0 +1,408 @@ +/* + File: InitializationPanel.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/InitializationPanel.java,v 1.12 2000/12/13 14:03:18 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 14:03:18 $ + $State: Exp $ + +*/ +package sss3d.gui; + +import sss3d.contentbranch.CelestialObjectInfo; + +import sss3d.utils.xmlparser.*; +import sss3d.gui.*; +import sss3d.gui.infobox.*; +import sss3d.contentbranch.*; +import sss3d.utils.SSS3dConstants; +import sss3d.utils.observer.*; + +// awt / swing components +import java.awt.*; +import javax.swing.*; +import javax.swing.tree.*; + +// tree view +import org.w3c.dom.Document; +import org.w3c.dom.DOMException; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import java.awt.event.WindowEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.ActionListener; + +import java.util.*; +import javax.swing.event.*; +import org.w3c.dom.*; + +/** + * Shows the current settings of the J3D - Solar System Simulator. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.12 $ + * @see sss3d.gui.startbox.StartBox + * @see sss3d.gui.infobox.InfoBox + */ +public class InitializationPanel extends JPanel implements GlobalPanel, InfoObserver{ + + // GUI components tree view + private JScrollPane treeView; + private JSplitPane jSplitPane; + private JTree jTreeDocument; + private Document document; + private JPanel editView = null; + + // references the current selected node inside the tree view + private AdapterNode currentNode; + + // references the type of this panel + private String type = SSS3dConstants.TYPES[SSS3dConstants.INI_TYPE]; + + private InitializationObject iniObject; + private ObjectsInformation objInfo; + + // Current mode of Solar System Simulator + private int mode = SSS3dConstants.INITIALIZATION_MODE; + + /** + * Constructor an InitializationPanel attached to the + * objects information observer. + * + * @param iniObject a reference to an InitializationObject instance + * @param mode must be either SSS3dConstants.INITIALIZATION_MODE or + * SSS3dConstants.RUNTIME_MODE + * @see sss3d.contentbranch.InitializationObject + */ + public InitializationPanel( ObjectsInformation objInfo, int mode ) { + + this.document = (Document)objInfo.getInitializationObject().getParameter(XMLConstants.DOCUMENT); + this.iniObject = objInfo.getInitializationObject(); + this.objInfo = objInfo; + this.mode = mode; + this.objInfo.attach(this); + + try { + // build GUI + init(); + } + catch(Exception e) { + e.printStackTrace(); + } + + } + + /** + * builds the basic GUI, called by constructor + */ + public void init() throws Exception { + + setLayout(new BorderLayout()); + + if( document != null ) createTreeView(); + + editView = new JPanel(); + editView.setSize(350,500); + jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,treeView, editView); + jSplitPane.setVisible(true); + jSplitPane.setContinuousLayout( true ); + jSplitPane.setDividerLocation( 330 ); + + this.add(jSplitPane,BorderLayout.CENTER); + this.setVisible(true); + } + + /** + * Returns the type of this panel. + * + * @param String the type representing this object ( SSS3dConstants.INI_TYPE ) + * @see sss3d.gui.GlobalPanel + */ + public String getType() { + return type; + } + + /** + * Returns the document of this panel. + * + * @return Document the document containing the information + * @see sss3d.gui.GlobalPanel + */ + public Document getDocument() { + return document; + } + + /** + * Returns the reference to the ObjectInformation object. + * + * @return ObjectsInformation a reference to the ObjectsInformation object + */ + public ObjectsInformation getObjectsInformation() { + return objInfo; + } + + /** + * Returns the mode + * + * @return int SSS3dConstants.INITIALIZATION_MODE or SSS3dConstants.RUNTIME_MODE + * @see sss3d.utils.SSS3dConstants + */ + public int getMode() { + return mode; + } + + /** + * Creates the edit view. + */ + public void createEditView() { + if ( editView != null) { + remove(editView); + editView.setVisible(false); + editView = null; + } + + String nodeName = currentNode.domNode.getNodeName(); + + if ( nodeName.equals(XMLConstants.treeElementNames[XMLConstants.STAR]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.PLANET]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.MOON]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.COMET]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.SATELLITE]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.ROCKET]) ) { + + + NamedNodeMap nnm = currentNode.domNode.getAttributes(); + Node attribute = nnm.getNamedItem(XMLConstants.treeElementNames[XMLConstants.OBJECTNAME]); + + int parameter = -1; + if (nodeName.equals(XMLConstants.treeElementNames[XMLConstants.STAR])) { + parameter = XMLConstants.STAR; + } else if (nodeName.equals(XMLConstants.treeElementNames[XMLConstants.PLANET])) { + parameter = XMLConstants.PLANET; + } else if (nodeName.equals(XMLConstants.treeElementNames[XMLConstants.MOON])) { + parameter = XMLConstants.MOON; + } else if (nodeName.equals(XMLConstants.treeElementNames[XMLConstants.COMET])) { + parameter = XMLConstants.COMET; + } else if (nodeName.equals(XMLConstants.treeElementNames[XMLConstants.SATELLITE])) { + parameter = XMLConstants.SATELLITE; + } else if (nodeName.equals(XMLConstants.treeElementNames[XMLConstants.ROCKET])) { + parameter = XMLConstants.ROCKET; + } + + editView = new CelestialObjectPanel(this, parameter, attribute.getNodeValue()); + + } else if( nodeName.equals(XMLConstants.treeElementNames[XMLConstants.DAY] ) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.MONTH] ) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.YEAR] ) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.HOUR] ) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.MINUTES] ) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.SECONDS] ) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.JDAY] ) + ) { + editView = new DatePanel(this); + + } else if( nodeName.equals(XMLConstants.treeElementNames[XMLConstants.ANIMATIONSPEED] )) { + editView = new SliderPanel(this, XMLConstants.ANIMATIONSPEED); + + } else if( nodeName.equals(XMLConstants.treeElementNames[XMLConstants.COMPRESSED] )) { + editView = new BooleanPanel(this,XMLConstants.COMPRESSED); + + } else if( nodeName.equals(XMLConstants.treeElementNames[XMLConstants.GLASSES3D] )) { + editView = new BooleanPanel(this,XMLConstants.GLASSES3D); + + } else if( nodeName.equals(XMLConstants.treeElementNames[XMLConstants.JOYSTICK] )) { + editView = new BooleanPanel(this,XMLConstants.JOYSTICK); + + } else if( nodeName.equals(XMLConstants.treeElementNames[XMLConstants.CAMERAATORIGIN] )) { + editView = new BooleanPanel(this,XMLConstants.CAMERAATORIGIN); + + } else if( nodeName.equals(XMLConstants.treeElementNames[XMLConstants.CAMERA] )) { + editView = new ComboBoxPanel(this,XMLConstants.CAMERA); + + } else if( nodeName.equals(XMLConstants.treeElementNames[XMLConstants.CALCULATION] )) { + editView = new ComboBoxPanel(this,XMLConstants.CALCULATION); + + } else { + editView = new JPanel(); + editView.setSize(350,500); + } + + if ( editView != null ) { + editView.setVisible(true); + + jSplitPane.setRightComponent(editView); + jSplitPane.setDividerLocation(330); + } + + } + + + /** + * Builds the complete tree view , called by init function + * + * @param name the name + */ + private void createTreeView() + { + jTreeDocument = new JTree(new DomToTreeModelAdapter(document)); + jTreeDocument.putClientProperty("JTree.lineStyle", "Angled"); + jTreeDocument.setEditable(true); + jTreeDocument.getSelectionModel().setSelectionMode + (TreeSelectionModel.SINGLE_TREE_SELECTION); + jTreeDocument.setShowsRootHandles(true); + MyRenderer renderer = new MyRenderer(this); + jTreeDocument.setCellRenderer(renderer); + + // build tree view + treeView = new JScrollPane(jTreeDocument); + treeView.setVisible(true); + + + // Wire the two views together. Use a selection listener + // created with an anonymous inner-class adapter. + jTreeDocument.addTreeSelectionListener( + new TreeSelectionListener() { + public void valueChanged(TreeSelectionEvent e) { + TreePath p = e.getNewLeadSelectionPath(); + if (p != null) { + currentNode = + (AdapterNode) p.getLastPathComponent(); + + // build the correct view, corresponding to the selected + // node inside the edit view panel + createEditView(); + + } + } + } + ); + + } + + /** + * Returns the Node of the given parameter. + * + * @return parameter XMLConstants.parameter + */ + private Node getNode( int parameter ) { + Node node = null; + + NodeList nodes = document.getElementsByTagName(XMLConstants.treeElementNames[parameter]); + + for(int i = 0; i < nodes.getLength(); i++) { + + Node child = nodes.item(i); + if ( child.hasChildNodes() ) { + node = child.getFirstChild(); + } + } + return node; + } + + + /** + * Updates the TreeView panel after the user has changed the values. + * + * @param node node that needs to be updated + */ + public void updateTreeViewInfo( Object object, int parameter ) { + + + Node node = getNode(parameter); + + + switch ( parameter ){ + case XMLConstants.DAY : + case XMLConstants.MONTH : + case XMLConstants.YEAR : + case XMLConstants.HOUR : + case XMLConstants.MINUTES : + case XMLConstants.SECONDS : + node.setNodeValue( ((Integer)object).toString() ); + break; + case XMLConstants.JDAY : + node.setNodeValue( ((Double)object).toString() ); + break; + case XMLConstants.CALCULATION : + node.setNodeValue( SSS3dConstants.CALCULATION_METHODS[((Integer)object).intValue()]); + break; + case XMLConstants.CAMERA : + node.setNodeValue(SSS3dConstants.CAMERA_POSITIONS[((Integer)object).intValue()]); + break; + case XMLConstants.ANIMATIONSPEED :{ + NodeList nodes = document.getElementsByTagName( + XMLConstants.treeElementNames[XMLConstants.ANIMATIONSPEED]); + for(int i = 0; i < nodes.getLength(); i++) { + Node child = nodes.item(i); + NamedNodeMap nnm = child.getAttributes(); + Node type = nnm.getNamedItem(XMLConstants.treeElementNames[XMLConstants.TYPE]); + Node value = nnm.getNamedItem(XMLConstants.treeElementNames[XMLConstants.VALUE]); + type.setNodeValue( AnimationSpeed.NAMES[((AnimationSpeed)object).getType()].toLowerCase() ); + value.setNodeValue( Integer.toString(((AnimationSpeed)object).getValue()) ); + } + } + break; + case XMLConstants.COMPRESSED : + case XMLConstants.GLASSES3D : + case XMLConstants.JOYSTICK : + case XMLConstants.CAMERAATORIGIN : + node.setNodeValue(((Boolean)object).toString()); + break; + + + default : break; + } + + + // update document view + jTreeDocument.expandPath(jTreeDocument.getSelectionPath()); + jTreeDocument.repaint(); + } + + + /** + * Returns the id of the concrete observer. + * + * @return String the id of the concrete observer + */ + public String getId() { + return "initializationpanel"; + } + + + /** + * The update methode is used to keep the state of the concrete observer + * consistent with the state of the ObjectInfo.
+ * + * @param objInfo a reference to the ObjectInfo + * @param id the id of the concrete object that has to be updated + */ + public void update( String id, int parameter) { + if ( id.equals("initializationpanel") || + id.equals("all") && parameter != SSS3dConstants.RELOAD ) { + //System.out.println("update initializationpanel "+parameter ); + updateTreeViewInfo( objInfo.getParameter(parameter), parameter ); + } + } + + + + /** + * The method isn't used at the moment, but it is necessary + * to implement it -> observer pattern. + * + * @return null + */ + public CelestialObjectInfo getInfo() { + return null; + } +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/gui/LoaderBar.java b/Solar system/sss3d-source/sss3d/gui/LoaderBar.java new file mode 100644 index 0000000..ce6327a --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/LoaderBar.java @@ -0,0 +1,147 @@ +/* + File: LoaderBar.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/LoaderBar.java,v 1.6 2000/12/15 02:46:52 harib Exp $ + $Author: harib $ + $Date: 2000/12/15 02:46:52 $ + $State: Exp $ + +*/ +package sss3d.gui; + +import sss3d.SolarSystemSimulator; + +import java.awt.*; + +/** + * This class describe a pseudo progress bar in a own thread. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.6 $ + */ +public class LoaderBar extends Window implements Runnable { + + private int max; + private String cname; + private int value; + private Image logo; + + /** + * Initializes a new LoaderBar. + * + * @param max the maximum of the loaded objects. + * @param sss3d the parent Frame. + */ + public LoaderBar(int max, Frame sss3d) { + super(sss3d); + this.max = max - 1; + Thread thread = new Thread(this, "ProgressBar"); + thread.start(); + } + + /** + * The new LoaderBar thread. + */ + public void run() { + this.setBackground(Color.lightGray); + + this.setLayout(new BorderLayout()); + + Label currentName = new Label("Start", Label.CENTER); + Label currentNr = new Label("0 of " + max, Label.CENTER); + + Panel panel = new Panel(); + panel.setLayout(new GridLayout(3, 1)); + panel.add(new Label("Celestial object", Label.CENTER)); + panel.add(currentName); + panel.add(currentNr); + //Logo logo = new Logo(); + //this.add(logo, BorderLayout.CENTER); + this.add(panel, BorderLayout.CENTER); + this.pack(); + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + Dimension frameSize = this.getSize(); + if(frameSize.height > screenSize.height) { + frameSize.height = screenSize.height; + } + if(frameSize.width > screenSize.width) { + frameSize.width = screenSize.width; + } + this.setLocation((screenSize.width - frameSize.width) / 2, + (screenSize.height - frameSize.height) / 2); + this.setVisible(true); + while(value < max) { + try { + Thread.sleep(100); + } catch(InterruptedException ie) { } + currentName.setText(cname); + currentNr.setText(value + " of " + max); + this.repaint(); + } + } + + /** + * Set the actual loading number. + * + * @param i the actual loading number. + */ + public void setCount(int i) { + value = i; + } + + /** + * Set the actual loading object name. + * + * @param name the actual loading object name. + */ + public void setNote(String name) { + cname = name; + } +} + +class Logo extends Canvas { + + private Image logo; + private MediaTracker tracker; + + public Logo() { + + logo = Toolkit.getDefaultToolkit().getImage("images//sss3dlogo.jpg"); + tracker = new MediaTracker(this); + + tracker.addImage(logo, 0); + try{ + tracker.waitForID(0); + + } catch(InterruptedException e) { + System.out.println(e.toString()); + } + requestFocus(); + repaint(); + } + + public void update(Graphics g){ + paint(g); + } + + public void paint(Graphics g) { + try {tracker.waitForID(0);}catch (InterruptedException e){}; + g.drawImage(logo, 0, 0, this); + } + + public Dimension getMinimumSize() { + return new Dimension(120, 120); + } + + public Dimension getPreferredSize() { + return getMinimumSize(); + } +} diff --git a/Solar system/sss3d-source/sss3d/gui/SliderPanel.java b/Solar system/sss3d-source/sss3d/gui/SliderPanel.java new file mode 100644 index 0000000..42bf015 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/SliderPanel.java @@ -0,0 +1,327 @@ +/* + File: SliderPanel.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/SliderPanel.java,v 1.5 2000/12/12 12:01:00 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 12:01:00 $ + $State: Exp $ + +*/ + +package sss3d.gui; + +import sss3d.gui.*; +import sss3d.contentbranch.*; +import sss3d.utils.xmlparser.*; +import sss3d.utils.SSS3dConstants; + +import java.awt.*; +import javax.swing.*; +import java.awt.event.*; +import java.util.*; +import javax.swing.event.*; + +/** + * Creates a panel for adjustment with a slider + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.5 $ + */ +public class SliderPanel extends JPanel implements ActionListener, ChangeListener{ + + private InitializationPanel iniPanel; + private int parameter = -1; + private AnimationSpeed animationSpeed; + private JSlider slider; + private JButton button; + private JLabel currentValue; + private JRadioButton days; + private JRadioButton hours; + private JRadioButton minutes; + + /** + * Creates a SliderPanel depending on the given parameter + * + * @param iniPanel a reference to this Initialization ( it can be null ) + * @param parameter parameter witch needs to be adjusted + * @see javax.swing.JSlider + */ + public SliderPanel( InitializationPanel iniPanel, int parameter ) { + super(); + + this.iniPanel = iniPanel; + this.parameter = parameter; + + // create GUI + setLayout( new BoxLayout( this, BoxLayout.Y_AXIS ) ); + + // create GUI for AnimationSpeed + if ( parameter == XMLConstants.ANIMATIONSPEED ) { + animationSpeed = (AnimationSpeed)iniPanel.getObjectsInformation().getParameter(XMLConstants.ANIMATIONSPEED); + if (animationSpeed != null) { + + JLabel title = new JLabel(XMLConstants.treeElementNames[parameter]); + title.setAlignmentX(LEFT_ALIGNMENT); + add( title ); + add(Box.createRigidArea(new Dimension(0, 10))); + ButtonGroup bg = new ButtonGroup(); + days = new JRadioButton(AnimationSpeed.NAMES[AnimationSpeed.DAYS_PER_SECOND]); + hours = new JRadioButton(AnimationSpeed.NAMES[AnimationSpeed.HOURS_PER_SECOND]); + minutes = new JRadioButton(AnimationSpeed.NAMES[AnimationSpeed.MINUTES_PER_SECOND]); + bg.add(days); + bg.add(hours); + bg.add(minutes); + days.setActionCommand(AnimationSpeed.NAMES[AnimationSpeed.DAYS_PER_SECOND]); + hours.setActionCommand(AnimationSpeed.NAMES[AnimationSpeed.HOURS_PER_SECOND]); + minutes.setActionCommand(AnimationSpeed.NAMES[AnimationSpeed.MINUTES_PER_SECOND]); + days.addActionListener(this); + hours.addActionListener(this); + minutes.addActionListener(this); + days.setAlignmentX(LEFT_ALIGNMENT); + hours.setAlignmentX(LEFT_ALIGNMENT); + minutes.setAlignmentX(LEFT_ALIGNMENT); + add(days); + add(hours); + add(minutes); + + int min = 1; + int max = 10; + + + switch ( animationSpeed.getType() ) { + case AnimationSpeed.DAYS_PER_SECOND : + min = AnimationSpeed.DAYS_MIN; + max = AnimationSpeed.DAYS_MAX; + days.setSelected(true); + break; + case AnimationSpeed.HOURS_PER_SECOND : + min = AnimationSpeed.HOURS_MIN; + max = AnimationSpeed.HOURS_MAX; + hours.setSelected(true); + break; + case AnimationSpeed.MINUTES_PER_SECOND : + min = AnimationSpeed.MINUTES_MIN; + max = AnimationSpeed.MINUTES_MAX; + minutes.setSelected(true); + break; + default : days.setSelected(true); break; + } + + slider = new JSlider(JSlider.HORIZONTAL, min, max, animationSpeed.getValue()); + slider.setMinorTickSpacing(1); + slider.setLabelTable( getHashTable( animationSpeed.getType() ) ); + slider.setPaintLabels(true); + slider.setPaintTicks(true); + slider.setSnapToTicks(true); + slider.setBorder(BorderFactory.createEmptyBorder(10,0,10,0)); + slider.setAlignmentX(LEFT_ALIGNMENT); + add(slider); + + JPanel value = new JPanel(); + value.setBorder(BorderFactory.createEmptyBorder(0,0,10,0)); + value.setLayout( new BoxLayout( value, BoxLayout.X_AXIS ) ); + JLabel cValue = new JLabel("Current Value : "); + cValue.setAlignmentX(LEFT_ALIGNMENT); + value.add(cValue); + value.add(Box.createRigidArea(new Dimension(20, 0))); + currentValue = new JLabel(Integer.toString(animationSpeed.getValue())); + currentValue.setAlignmentX(RIGHT_ALIGNMENT); + value.add(currentValue); + value.setAlignmentX(LEFT_ALIGNMENT); + add(value); + + button = new JButton("update"); + button.setActionCommand("update"); + button.addActionListener(this); + slider.addChangeListener(this); + add(button); + + // enable/disable components depending on they can be changed during + // runtime mode + if ( iniPanel != null ) { + switch ( iniPanel.getMode() ) { + case SSS3dConstants.RUNTIME_MODE : + days.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED]); + hours.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED]); + minutes.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED]); + slider.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED]); + break; + default : break; + } + } else { + days.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED]); + hours.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED]); + minutes.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED]); + slider.setEnabled(XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED]); + } + } + } + + + setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); + + + this.setAlignmentX(LEFT_ALIGNMENT); + this.setVisible(true); + + } + + + /** + * Returns a Hashtable depending on the selected type, + * containing the labels for the JSlider + * + * @param type the selected type + * @return Hashtable a Hashtable containing the labels for the JSlider + * @see javax.swing.JSlider + */ + private Hashtable getHashTable( int type ) { + Hashtable labelTable = new Hashtable(); + + switch ( type ) { + case AnimationSpeed.DAYS_PER_SECOND : + for( int i = AnimationSpeed.DAYS_MIN ; i <= AnimationSpeed.DAYS_MAX; i++) { + if ( i % 1 == 0 || i == AnimationSpeed.DAYS_MIN || i == AnimationSpeed.DAYS_MAX ) { + labelTable.put( new Integer( i ), new JLabel( Integer.toString(i) ) ); + } + } + break; + case AnimationSpeed.HOURS_PER_SECOND : + for( int i = AnimationSpeed.HOURS_MIN ; i <= AnimationSpeed.HOURS_MAX; i++) { + if ( i % 4 == 0 || i == AnimationSpeed.HOURS_MIN || i == AnimationSpeed.HOURS_MAX ) { + labelTable.put( new Integer( i ), new JLabel( Integer.toString(i) ) ); + } + } + break; + case AnimationSpeed.MINUTES_PER_SECOND : + for( int i = AnimationSpeed.MINUTES_MIN ; i <= AnimationSpeed.MINUTES_MAX; i++) { + if ( i % 5 == 0 || i == AnimationSpeed.MINUTES_MIN || i == AnimationSpeed.MINUTES_MAX ) { + labelTable.put( new Integer( i ), new JLabel( Integer.toString(i) ) ); + } + } + break; + default : break; + } + return labelTable; + } + + + /** + * Implementation of action listener + * + * @param e java.awt.event.ActionEvent + */ + public void actionPerformed(java.awt.event.ActionEvent e) { + if (e.getActionCommand().equals("update")) { + // update AnimationSpeed object + if ( days.isSelected() ) { + if ( animationSpeed.setTypeValue( AnimationSpeed.DAYS_PER_SECOND,slider.getValue() ) ) { + + if ( iniPanel != null ) { + if ( iniPanel.getMode() == SSS3dConstants.INITIALIZATION_MODE || + ( iniPanel.getMode() == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED]) ) { + + iniPanel.getObjectsInformation().setParameter( animationSpeed , XMLConstants.ANIMATIONSPEED ); + + iniPanel.updateTreeViewInfo(animationSpeed, XMLConstants.ANIMATIONSPEED); + + } + } else { + if( XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED] ) + iniPanel.getObjectsInformation().setParameter( animationSpeed , XMLConstants.ANIMATIONSPEED ); + } + } + } else if ( hours.isSelected() ) { + if ( animationSpeed.setTypeValue( AnimationSpeed.HOURS_PER_SECOND,slider.getValue() ) ) { + + if ( iniPanel != null ) { + if ( iniPanel.getMode() == SSS3dConstants.INITIALIZATION_MODE || + ( iniPanel.getMode() == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED]) ) { + + iniPanel.getObjectsInformation().setParameter( animationSpeed , XMLConstants.ANIMATIONSPEED ); + + iniPanel.updateTreeViewInfo(animationSpeed, XMLConstants.ANIMATIONSPEED); + + } + } else { + if ( XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED] ) + iniPanel.getObjectsInformation().setParameter( animationSpeed , XMLConstants.ANIMATIONSPEED ); + } + } + } else if ( minutes.isSelected() ) { + if ( animationSpeed.setTypeValue( AnimationSpeed.MINUTES_PER_SECOND,slider.getValue() ) ) { + + if ( iniPanel != null ) { + if ( iniPanel.getMode() == SSS3dConstants.INITIALIZATION_MODE || + ( iniPanel.getMode() == SSS3dConstants.RUNTIME_MODE && + XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED]) ) { + + iniPanel.getObjectsInformation().setParameter( animationSpeed , XMLConstants.ANIMATIONSPEED ); + + iniPanel.updateTreeViewInfo(animationSpeed, XMLConstants.ANIMATIONSPEED); + + } + } else { + if ( XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[XMLConstants.ANIMATIONSPEED] ) + iniPanel.getObjectsInformation().setParameter( animationSpeed , XMLConstants.ANIMATIONSPEED ); + } + } + + } + slider.requestFocus(); + + // set appereance of jslider object if user selected an other radio button + } else if (e.getActionCommand().equals(AnimationSpeed.NAMES[AnimationSpeed.DAYS_PER_SECOND])) { + slider.setMinimum(AnimationSpeed.DAYS_MIN); + slider.setMaximum(AnimationSpeed.DAYS_MAX); + slider.setLabelTable( getHashTable(AnimationSpeed.DAYS_PER_SECOND) ); + slider.setPaintLabels(true); + slider.setPaintTicks(true); + slider.requestFocus(); + slider.updateUI(); + + } else if (e.getActionCommand().equals(AnimationSpeed.NAMES[AnimationSpeed.HOURS_PER_SECOND])) { + slider.setMinimum(AnimationSpeed.HOURS_MIN); + slider.setMaximum(AnimationSpeed.HOURS_MAX); + slider.setLabelTable( getHashTable(AnimationSpeed.HOURS_PER_SECOND) ); + slider.setPaintLabels(true); + slider.setPaintTicks(true); + slider.requestFocus(); + slider.updateUI(); + + } else if (e.getActionCommand().equals(AnimationSpeed.NAMES[AnimationSpeed.MINUTES_PER_SECOND])) { + slider.setMinimum(AnimationSpeed.MINUTES_MIN); + slider.setMaximum(AnimationSpeed.MINUTES_MAX); + slider.setLabelTable( getHashTable(AnimationSpeed.MINUTES_PER_SECOND) ); + slider.setPaintLabels(true); + slider.setPaintTicks(true); + slider.requestFocus(); + slider.updateUI(); + } + } + + /** + * Implementation of change listener. + * + * @param e java.awt.event.ChangeEvent + */ + public void stateChanged(ChangeEvent e) { + JSlider source = (JSlider)e.getSource(); + if (!source.getValueIsAdjusting()) { + // sets user information + int value = (int)source.getValue(); + currentValue.setText( Integer.toString(value) ); + } + } + +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/gui/SmallInfoPanel.java b/Solar system/sss3d-source/sss3d/gui/SmallInfoPanel.java new file mode 100644 index 0000000..7e10dcc --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/SmallInfoPanel.java @@ -0,0 +1,174 @@ +/* + File: SmallInfoPanel.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/SmallInfoPanel.java,v 1.6 2000/12/13 13:45:56 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:45:56 $ + $State: Exp $ + +*/ +package sss3d.gui; + +import sss3d.utils.SSS3dConstants; +import sss3d.calculations.TimeCalc; + +import java.awt.*; +import javax.swing.*; +import java.awt.event.*; +import java.util.*; +import javax.swing.event.*; + +/** + * Shows a small info panel at the bottom of the solar system simulator + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.6 $ + */ +public class SmallInfoPanel extends JPanel implements Runnable { + + private static final int DIGITSAFTERCOMA = 4; + private JLabel navigation, factor, date; + private boolean mode = true; + private double julianDate; + private double dateStep; + private Thread thread; + private boolean runDate = true; + private TimeCalc timeCalc; + + /** + * Creates a small info panel + */ + public SmallInfoPanel() { + super(); + timeCalc = new TimeCalc(); + + // create GUI + setLayout(new FlowLayout(FlowLayout.RIGHT, 15, 0)); + + navigation = new JLabel("Move"); + this.add(navigation); + + date = new JLabel("Date:"); + this.add(date); + + factor = new JLabel("Step Factor: F3"); + this.add(factor); + + this.setVisible(true); + + thread = new Thread(this, "InfoPanel"); + thread.start(); + } + + /** + * Sets the navigation mode to Turn or Move + */ + public void setNavigationMode() { + if(mode) { + navigation.setText("Turn"); + } else { + navigation.setText("Move"); + } + mode = !mode; + } + + /** + * Sets the step factor to F1/ F2/ F3 or F4 + * + * @param stepFactor the new step factor + */ + public void setFactor(int stepFactor) { + if(stepFactor == 1) { + factor.setText("Step Factor: F1"); + } else if(stepFactor == 2) { + factor.setText("Step Factor: F2"); + } else if(stepFactor == 3) { + factor.setText("Step Factor: F3"); + } else if(stepFactor == 4) { + factor.setText("Step Factor: F4"); + } + } + + /** + * Sets the gregorian date an julian date. + * + * @param julianDate the new date + */ + public void setDate(double julianDate) { + this.julianDate = julianDate; + int gregorianDate [] = timeCalc.calDat(julianDate - 2400001.0); + + String text = new String("Date: "); + if( gregorianDate[2] < 10 ) text += "0"; + text += gregorianDate[2] + ". "; // day + if( gregorianDate[1] < 10 ) text += "0"; + text += gregorianDate[1] + ". "; // month + text += gregorianDate[0] + " "; // year + if( gregorianDate[3] < 10 ) text += "0"; + text += gregorianDate[3] + ":"; // hour + if( gregorianDate[4] < 10 ) text += "0"; + text += gregorianDate[4] + " "; // minute + + // not necessary - time calc returns always 0 for second + /*if( gregorianDate[5] < 10 ) text += "0"; + text += gregorianDate[5] + " "; // second + */ + + String jdate = " JD: "; + jdate += Double.toString(julianDate); + int pos = jdate.indexOf("."); + if(jdate.length() - pos > DIGITSAFTERCOMA) { + text += jdate.substring(0, pos + DIGITSAFTERCOMA); + } else { + text += jdate; + } + + date.setText(text); + } + + /** + * Sets increasing time step. + * + * @param step - the time step + */ + public void setStep(double step) { + dateStep = step; + } + + /** + * Stops the date display from updating + */ + public void stopDate() { + runDate = false; + } + + /** + * Starts the date display to update itself + */ + public void startDate() { + runDate = true; + } + + /** + * Run method. Updates the date after an elapsed time frame. + */ + public void run() { + while(true) { + if(runDate) { + try { + Thread.sleep(100); + } catch(InterruptedException ie) { } + julianDate += dateStep / 10; + setDate(julianDate); + } + } + } +} diff --git a/Solar system/sss3d-source/sss3d/gui/XYConstraints.java b/Solar system/sss3d-source/sss3d/gui/XYConstraints.java new file mode 100644 index 0000000..384d885 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/XYConstraints.java @@ -0,0 +1,181 @@ +/* + File: XYConstraints.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/XYConstraints.java,v 1.4 2000/12/13 13:45:16 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:45:16 $ + $State: Exp $ + +*/ + +package sss3d.gui; + +import java.io.Serializable; + +/** + * The XYConstraints object is the constraint object created when a component + * is added to an XYLayout . The constraints are the x and y coordinates that + * position the upper-left corner of the control relative to the container, and + * the width and height of the control. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.4 $ + */ +public class XYConstraints implements Cloneable, Serializable { + + private int x; + private int y; + private int width; + private int height; + + /** + * Constructs a XYConstraints object with x, y, width, and height set to zero. + */ + public XYConstraints() { + this(0, 0, 0, 0); + } + + /** + * Constructs a XYConstraints object using the constraints passed to this constructor. + * + * @param x The x coordinate that specifies the number of pixels from the left edge of the container. + * @param y The y coordinate that specifies the number of pixels from the top edge of the container. + * @param width The width of the control added to the container in pixels. A value less than or equal to 0 means that the control's preferred width is used. + * @param height The height of the control added to the container in pixels. A value less than or equal to 0 means that the control's preferred height is used. + */ + public XYConstraints(int x, int y, int width, int height) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + + /** + * Returns the distancce from the left side of the container in pixels. + * + * @return int the distance x + */ + public int getX() { + return x; + } + + /** + * Stores the distance from the left side of the container in pixels. + * + * @param x the new value for x + */ + public void setX(int x) { + this.x = x; + } + + /** + * Returns the distancce from the top of the container in pixels. + * + * @return int the distance y + */ + public int getY() { + return y; + } + + /** + * Stores the distance from the top of the container in pixels. + * + * @param y the new value for y + */ + public void setY(int y) { + this.y = y; + } + + /** + * Returns the width of the control in pixels. + * + * @return int the currently used width + */ + public int getWidth() { + return width; + } + + /** + * Stores the width of the control in pixels. The width of the control added to the + * container in pixels. A value less than or equal to 0 means that the control's + * preferred width is used. + */ + public void setWidth(int width) { + this.width = width; + } + + /** + * Returns the height of the control in pixels. + * + * @return int the currently used height + */ + public int getHeight() { + return height; + } + + /** + * Stores the height of the control in pixels. The height of the control added to the + * container in pixels. A value less than or equal to 0 means that the control's + * preferred height is used. + * + * @param int the new value for height + */ + public void setHeight(int height) { + this.height = height; + } + + /** + * Returns the hashcode for this XYConstraints. + * + * @return int the hashcode + */ + public int hashCode() { + return x ^ y * 37 ^ width * 43 ^ height * 47; + } + + /** + * Compares another XYConstraints object to this one. + * equals() returns true if the objects are equal; otherwise, equals() returns false. + * + * @param obj a XYConstraints object + * @return boolean true if objects are equal, otherwise false + */ + public boolean equals(Object obj) { + if(obj instanceof XYConstraints) { + XYConstraints xyconstraints = (XYConstraints)obj; + return xyconstraints.x == x && + xyconstraints.y == y && + xyconstraints.width == width && + xyconstraints.height == height; + } else { + return false; + } + } + + /** + * Creates a copy of this XYConstraints object. The + * constraints are identical in both XYConstraints objects. + * + * @return Object a copy of this XYConstraints object + */ + public Object clone() { + return new XYConstraints(x, y, width, height); + } + + /** + * Returns a string representation ot this XYConstraints object. + * + * @return String a string representation of this object + */ + public String toString() { + return "XYConstraints[" + x + "," + y + "," + width + "," + height + "]"; + } +} diff --git a/Solar system/sss3d-source/sss3d/gui/infobox/AdapterNode.java b/Solar system/sss3d-source/sss3d/gui/infobox/AdapterNode.java new file mode 100644 index 0000000..5fbfe93 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/infobox/AdapterNode.java @@ -0,0 +1,238 @@ +/* + File: AdapterNode.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/infobox/AdapterNode.java,v 1.3 2000/12/12 09:07:47 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 09:07:47 $ + $State: Exp $ + +*/ +package sss3d.gui.infobox; + +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.JTree; +import java.awt.Component; +import javax.swing.ImageIcon; +import javax.swing.JLabel; + +import sss3d.utils.SSS3dConstants; +import sss3d.utils.xmlparser.XMLConstants; + +/** + * This class wraps a DOM node and returns the text we want to + * display in the tree. It also returns children, index values, + * and child counts. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.3 $ + */ +public class AdapterNode extends DefaultMutableTreeNode +{ + public org.w3c.dom.Node domNode; + + // show tree in compressed mode + private boolean compress = true; + + private boolean treeElement(String elementName) { + for (int i = 0; i < XMLConstants.treeElementNames.length; i++) { + if ( elementName.equals(XMLConstants.treeElementNames[i]) ) return true; + } + return false; + } + + /** + * Constructor + * + * @param node construct an Adapter node from a DOM node ( org.w3c.dom.Node ) + */ + public AdapterNode(org.w3c.dom.Node node) { + domNode = node; + } + + + /** + * Return a string that identifies this node in the tree + * + * @return String identification string from this node + */ + public String toString() { + String s = XMLConstants.typeName[domNode.getNodeType()]; + String nodeName = domNode.getNodeName(); + if (! nodeName.startsWith("#")) { + s += ": " + nodeName; + } + if (compress) { + String t = content().trim(); + int x = t.indexOf("\n"); + if (x >= 0) t = t.substring(0, x); + s += " " + t; + return s; + } + if (domNode.getNodeValue() != null) { + if (s.startsWith("ProcInstr")) + s += ", "; + else + s += ": "; + // Trim the value to get rid of NL's at the front + String t = domNode.getNodeValue().trim(); + int x = t.indexOf("\n"); + if (x >= 0) t = t.substring(0, x); + s += t; + } + return s; + } + + /** + * Returns the content from this node (value) + * + * @return String content from this node + */ + public String content() { + String s = ""; + org.w3c.dom.NodeList nodeList = domNode.getChildNodes(); + for (int i = 0; i < nodeList.getLength(); i++) { + org.w3c.dom.Node node = nodeList.item(i); + int type = node.getNodeType(); + AdapterNode adpNode = new AdapterNode(node); //inefficient, but works + if (type == XMLConstants.ELEMENT_TYPE) { + // Skip subelements that are displayed in the tree. + if ( treeElement(node.getNodeName()) ) continue; + + // EXTRA-CREDIT HOMEWORK: + // Special case the SLIDE element to use the TITLE text + // and ignore TITLE element when constructing the tree. + + // EXTRA-CREDIT + // Convert ITEM elements to html lists using + //
    ,
  • ,
tags + + s += "<" + node.getNodeName() + ">"; + s += adpNode.content(); + s += ""; + } else if (type == XMLConstants.TEXT_TYPE) { + s += node.getNodeValue(); + } else if (type == XMLConstants.ENTITYREF_TYPE) { + // The content is in the TEXT node under it + s += adpNode.content(); + } else if (type == XMLConstants.CDATA_TYPE) { + // The "value" has the text, same as a text node. + // while EntityRef has it in a text node underneath. + // (because EntityRef can contain multiple subelements) + // Convert angle brackets and ampersands for display + StringBuffer sb = new StringBuffer( node.getNodeValue() ); + for (int j=0; j"; + } + // Ignoring these: + // ATTR_TYPE -- not in the DOM tree + // ENTITY_TYPE -- does not appear in the DOM + // PROCINSTR_TYPE -- not "data" + // COMMENT_TYPE -- not "data" + // DOCUMENT_TYPE -- Root node only. No data to display. + // DOCTYPE_TYPE -- Appears under the root only + // DOCFRAG_TYPE -- equiv. to "document" for fragments + // NOTATION_TYPE -- nothing but binary data in here + } + return s; + } + + /** + * Returns index of child node + * + * @param child reference to the child node + * @return int index of child node + */ + public int index(AdapterNode child) { + int count = childCount(); + for (int i=0; i= 0 ) { + if ( XMLConstants.MODIFIABLE_VALUES_AT_RUNTIME[index] ) { + editField.setEditable(true); + updateButton.setVisible(true); + rigidArea.setVisible(true); + }else { + editField.setEditable(false); + updateButton.setVisible(false); + rigidArea.setVisible(false); + } + } + + } + } + } + ); + + } + + /** + * Updates the CelestialObjectInfo object. + * + * @param node node that needs to be updated + */ + private void updateCelestialObjectInfo(Node node) { + + String nodeName = currentNode.domNode.getNodeName(); + infoField.setVisible(false); + + // get this value and set it correctly inside + // CelestialObjectInfo..... + Integer n = (Integer)treeElements.get( nodeName ); + String value = editField.getText(); + + try { + + if (n != null) { + switch ( n.intValue() ){ + + // the first five values aren't modifiable + case 0 : // celestialobject + case 1 : // general + case 2 : // parameter + case 3 : // type + case 4 : break; // name + + case 5 : // scalingfactor + cObjInfo.setScalingFactor( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 6 : // diameter + cObjInfo.setDiameter( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 7 : // mindistancefromsun + cObjInfo.setMinDistanceFromSun( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 8 : // maxdistancefromsun + cObjInfo.setMaxDistanceFromSun( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 9 : // nbrofplanetpositions + cObjInfo.setNbrOfPositions( (new Integer( value )).intValue() ); + node.setNodeValue( value ); + break; + case 10 : // rotationperiod + cObjInfo.setRotationPeriod( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 11 : // orbitperiod + cObjInfo.setOrbitPeriod( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 12 : // meanorbitvelocity + cObjInfo.setMeanOrbitVelocity( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 13 : // orbiteccentricity + cObjInfo.setOrbitEccentricity( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 14 : // orbitinclinationtoecliptic + cObjInfo.setOrbitInclinationToEcliptic( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 15 : // inclinationofequatortoorbit + cObjInfo.setInclinationOfEquatorToOrbit( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 16 : // volume + cObjInfo.setVolume( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 17 : // distance + cObjInfo.setDistance( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 18 : // mass + cObjInfo.setMass( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 19 : // density + cObjInfo.setDensity( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 20 : // surfacegravity + cObjInfo.setSurfaceGravity( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 21 : // escapevelocity + cObjInfo.setEscapeVelocity( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 22 : // meantempatsolidsurface + cObjInfo.setTempAtSolidSurface( (new Double( value )).doubleValue() ); + node.setNodeValue( value ); + break; + case 23 : // majoratmosphericconstitutents + cObjInfo.setAtmosphericConstitutents( value ); + node.setNodeValue( value ); + break; + + default : break; + } + } + } catch( NumberFormatException e) { + ImageIcon icon = new ImageIcon("images/warning.gif"); + infoField.setIcon(icon); + if ( n.intValue() == 9 ) { // integer + infoField.setText("Please enter an integer value !"); + }else { + infoField.setText("Please enter a floating point value !"); + } + infoField.setVerticalTextPosition(SwingConstants.CENTER); + infoField.setVisible(true); + } + // update document view + jTreeDocument.expandPath(jTreeDocument.getSelectionPath()); + jTreeDocument.repaint(); + } + + /** + * Returns the CelestialObjectInfo related to this InfoPanel + * + * @return CelestialObjectInfo CelestialObjectInfo related to this InfoPanel + */ + public CelestialObjectInfo getCelestialObjectInfo() { + return cObjInfo; + } + + /** + * Sets the text of the parameter field (JLabel) + * + */ + public void setParameterText() { + + if ( currentNode != null ) { + TreePath tp = jTreeDocument.getSelectionPath(); + currentNode = (AdapterNode)tp.getLastPathComponent(); + + if ( currentNode.domNode.getNodeName().equals("#document") ) { + parameter.setText(cObjInfo.getName()); + editField.setEditable(false); + } else { + parameter.setText(currentNode.domNode.getNodeName()); + + } + } + } + + /** + * Implementation of action listener for update and close button inside edit view + * + * @param e java.awt.event.ActionEvent + */ + public void actionPerformed(java.awt.event.ActionEvent e) { + if (e.getActionCommand().equals("update")) { + + // handle new input.... + String str = editField.getText(); + + if ( currentNode != null ) { + org.w3c.dom.NodeList nl = currentNode.domNode.getChildNodes(); + + String nodeName = currentNode.domNode.getNodeName(); + + if ( !nodeName.equals(XMLConstants.treeElementNames[0]) && // celestialobject + !nodeName.equals(XMLConstants.treeElementNames[1]) && // general + !nodeName.equals(XMLConstants.treeElementNames[2]) && // parameter + !nodeName.equals(XMLConstants.treeElementNames[3]) && // type + !nodeName.equals(XMLConstants.treeElementNames[4]) // name + ) { + + for(int i = 0; i < nl.getLength(); i++) { + org.w3c.dom.Node n = nl.item(i); + if ( n.getNodeName().equals("#text") ) { + updateCelestialObjectInfo(n); + } + + } + } + + + } + + } else if(e.getActionCommand().equals("close")){ + // close this tab + JMenu menu = infobox.mObjectsInfo; + int max = menu.getItemCount(); + for(int i = 0; i < max; i++) + { + JMenuItem temp = menu.getItem(i); + if( temp.getText().toLowerCase().equals( cObjInfo.getName() ) ) + { + temp.setSelected(false); + } + } + infobox.removeInfoTab( cObjInfo ); + } + } + + +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/gui/infobox/MyJCheckBoxMenuItem.java b/Solar system/sss3d-source/sss3d/gui/infobox/MyJCheckBoxMenuItem.java new file mode 100644 index 0000000..187f483 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/infobox/MyJCheckBoxMenuItem.java @@ -0,0 +1,109 @@ +/* + File: MyJCheckBoxMenuItem.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/infobox/MyJCheckBoxMenuItem.java,v 1.7 2000/12/13 13:39:35 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:39:35 $ + $State: Exp $ + +*/ +package sss3d.gui.infobox; + +import sss3d.contentbranch.CelestialObjectInfo; +import sss3d.utils.observer.*; + +import java.awt.*; +import javax.swing.*; +import javax.vecmath.*; + +import java.awt.event.*; +import java.applet.*; +import javax.swing.*; +import javax.swing.event.*; + +/** + * MyJCheckBoxMenuItem is a subclass from JCheckBoxMenuItem. It was build to + * fit our needs for the items inside the menu. + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.7 $ + */ +public class MyJCheckBoxMenuItem extends JCheckBoxMenuItem implements ActionListener { + + private JCheckBoxMenuItem cb = null; + private JMenu jmenu = null; // parent menu + private String name = ""; // name of this item + private InfoBox infobox = null; // reference to infobox + private ObjectsInformation objInfo = null; + + /** + * Constructor creates a new menu item, based on the parameters given. + * This constructor must be used to add an information menu item. + * + * @param ibox reference to the infobox + * @param jmenu reference to the parent menu + * @param text name of the new menu item + * @param objInfo reference to object information + */ + public MyJCheckBoxMenuItem(InfoBox infobox, JMenu jmenu, + String name, ObjectsInformation objInfo){ + + super(name); + this.name = name; + this.jmenu = jmenu; + this.infobox = infobox; + cb = (JCheckBoxMenuItem) jmenu.add(this); + cb.setSelected(false); + cb.setEnabled(true); + cb.addActionListener(this); + + this.objInfo = objInfo; + + } + + + /** + * Method handles a swing component event. Based on the event it performs + * the required action. + * + * @param e the action event + */ + public void actionPerformed(ActionEvent e) { + JCheckBoxMenuItem cbmi = (JCheckBoxMenuItem)e.getSource(); + + String menu = jmenu.getText(); + + if(menu.equals("Object Positions")) { + if(cbmi.isSelected()) { + CelestialObjectInfo cObjInfo = objInfo.getInfo(name); + if(cObjInfo != null) { + infobox.addPosTab( cObjInfo ); + } + } else { + CelestialObjectInfo cObjInfo = objInfo.getInfo(name); + if(cObjInfo != null) { + infobox.removePosTab( cObjInfo ); + } + } + } else if(menu.equals("Object Information")) { + if(cbmi.isSelected()) { + CelestialObjectInfo cObjInfo = objInfo.getInfo(name); + if(cObjInfo != null) { + infobox.addInfoTab( cObjInfo ); + } + } else { + CelestialObjectInfo cObjInfo = objInfo.getInfo(name); + if(cObjInfo != null) { + infobox.removeInfoTab( cObjInfo ); + } + } + } + } +} // end of class MyJCheckBoxMenuItem \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/gui/infobox/MyRenderer.java b/Solar system/sss3d-source/sss3d/gui/infobox/MyRenderer.java new file mode 100644 index 0000000..9a63f84 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/infobox/MyRenderer.java @@ -0,0 +1,136 @@ +/* + File: MyRenderer.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/infobox/MyRenderer.java,v 1.5 2000/12/13 14:03:33 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 14:03:33 $ + $State: Exp $ + +*/ +package sss3d.gui.infobox; + +import sss3d.utils.*; +import sss3d.utils.xmlparser.XMLConstants; +import sss3d.gui.*; + +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.JTree; +import java.awt.Component; + +import javax.swing.JPanel; +import org.w3c.dom.*; + + +/** + * This class is used to render each element inside the tree view of + * the document object. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.5 $ + */ +public class MyRenderer extends DefaultTreeCellRenderer { + + private JPanel panel; + private Document document; + + /** + * Constructor. + * + * @param infoPanel an object reference to its associated InfoPanel + */ + public MyRenderer( JPanel panel ) { + this.panel = panel; + } + + /** + * Returns the tree cell renderer component. + * Implementation of method from DefaultTreeCellRenderer + * + * @see javax.swing.tree.DefaultTreeCellRenderer + */ + public Component getTreeCellRendererComponent( + JTree tree, + Object value, + boolean sel, + boolean expanded, + boolean leaf, + int row, + boolean hasFocus) { + + + AdapterNode node = (AdapterNode)value; + String nodeName = new String(node.domNode.getNodeName()); + + if ( nodeName.startsWith("#document")) { + if ( ((GlobalPanel)panel).getType().equals(SSS3dConstants.TYPES[SSS3dConstants.INI_TYPE]) ) { + nodeName = "Initialization"; + } else if ( ((GlobalPanel)panel).getType().equals(SSS3dConstants.TYPES[SSS3dConstants.CELESTIALOBJECT_TYPE]) ) { + nodeName = ((InfoPanel)panel).getCelestialObjectInfo().getName();; + } else { + nodeName = "UNKNOWN"; + } + } else if ( nodeName.startsWith(XMLConstants.treeElementNames[XMLConstants.STAR]) ) { + nodeName = XMLConstants.treeElementNames[XMLConstants.STAR] +" = "+ getObjectAttribute(node,XMLConstants.OBJECTNAME); + } else if ( nodeName.startsWith(XMLConstants.treeElementNames[XMLConstants.PLANET]) ) { + nodeName = XMLConstants.treeElementNames[XMLConstants.PLANET] +" = "+ getObjectAttribute(node,XMLConstants.OBJECTNAME); + } else if ( nodeName.startsWith(XMLConstants.treeElementNames[XMLConstants.MOON]) ) { + nodeName = XMLConstants.treeElementNames[XMLConstants.MOON] +" = "+ getObjectAttribute(node,XMLConstants.OBJECTNAME); + } else if ( nodeName.startsWith(XMLConstants.treeElementNames[XMLConstants.COMET]) ) { + nodeName = XMLConstants.treeElementNames[XMLConstants.COMET] +" = "+ getObjectAttribute(node,XMLConstants.OBJECTNAME); + } else if ( nodeName.startsWith(XMLConstants.treeElementNames[XMLConstants.SATELLITE]) ) { + nodeName = XMLConstants.treeElementNames[XMLConstants.SATELLITE] +" = "+ getObjectAttribute(node,XMLConstants.OBJECTNAME); + } else if ( nodeName.startsWith(XMLConstants.treeElementNames[XMLConstants.ROCKET]) ) { + nodeName = XMLConstants.treeElementNames[XMLConstants.ROCKET] +" = "+ getObjectAttribute(node,XMLConstants.OBJECTNAME); + } else if ( nodeName.startsWith(XMLConstants.treeElementNames[XMLConstants.ANIMATIONSPEED]) ) { + nodeName = XMLConstants.treeElementNames[XMLConstants.ANIMATIONSPEED] +" = "+ getObjectAttribute(node,XMLConstants.TYPE)+ + " value = "+getObjectAttribute(node,XMLConstants.VALUE); + } else if ( !nodeName.startsWith(XMLConstants.treeElementNames[XMLConstants.CELESTIALOBJECT]) && + !nodeName.startsWith(XMLConstants.treeElementNames[XMLConstants.INI]) && + !nodeName.startsWith(XMLConstants.treeElementNames[XMLConstants.GENERAL]) && + !nodeName.startsWith(XMLConstants.treeElementNames[XMLConstants.INFO]) && + !nodeName.startsWith(XMLConstants.treeElementNames[XMLConstants.PARAMETER]) && + !nodeName.startsWith(XMLConstants.treeElementNames[XMLConstants.VALUES])){ + nodeName += " = " + node.content(); + } + + + if ( ((GlobalPanel)panel).getType().equals(SSS3dConstants.TYPES[SSS3dConstants.CELESTIALOBJECT_TYPE]) ) { + ((InfoPanel)panel).setParameterText(); + } + + + super.getTreeCellRendererComponent( + tree, nodeName, sel, + expanded, leaf, row, + hasFocus); + + return this; + } + + /** + * Returns an object attribute given it's node and the parameter + * + * @param node the node witch attribute it has to get + * @param paramter the attribute parameter + */ + private String getObjectAttribute(AdapterNode node, int parameter) { + + String str = null; + + NamedNodeMap nnm = node.domNode.getAttributes(); + + Node n = nnm.getNamedItem(XMLConstants.treeElementNames[parameter]); + if(n != null) + str = n.getNodeValue(); + + return str; + } +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/gui/infobox/PositionsPanel.java b/Solar system/sss3d-source/sss3d/gui/infobox/PositionsPanel.java new file mode 100644 index 0000000..f545226 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/infobox/PositionsPanel.java @@ -0,0 +1,87 @@ +/* + File: PositionsPanel.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/infobox/PositionsPanel.java,v 1.3 2000/12/13 13:39:35 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:39:35 $ + $State: Exp $ + +*/ +package sss3d.gui.infobox; + +import sss3d.contentbranch.CelestialObjectInfo; + +import java.awt.*; +import javax.swing.*; +import javax.vecmath.*; + +/** + * This class is used to display the positions informations + * inside the InfoBox. It contains a reference to a private + * table and the algorithms to fill the tables. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.3 $ + */ +public class PositionsPanel extends JPanel { + + private JTable table; + private String[] columnHeads = {"Position #","X","Y","Z"}; + private int ROWS; + private int COLUMNS = 4; + + private Object[][] data; + + /** + * Constructor. + * + * @param cObjInfo contains the number of positions to display + * @param positions an array of three-dimensional points containing the positions + */ + public PositionsPanel( CelestialObjectInfo cObjInfo, Point3f[] positions ) { + + ROWS = cObjInfo.getNbrOfPositions(); + + setLayout(new BorderLayout()); + + data = new Object[ROWS][COLUMNS]; + + // fill the table + for(int r = 0; r < ROWS; r++) { + for(int c = 0; c < COLUMNS; c++) { + switch(c){ + case 0: + data[r][c] = Integer.toString(r); + break; + case 1: + data[r][c] = Float.toString(positions[r].x); + break; + case 2: + data[r][c] = Float.toString(positions[r].y); + break; + case 3: + data[r][c] = Float.toString(positions[r].z); + break; + default: data[r][c] = "null"; + } + } + } + + // create the new table + table = new JTable(data,columnHeads); + JScrollPane jsp = new JScrollPane(table, + ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, + ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); + + add(jsp,BorderLayout.CENTER); + + } +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/gui/navigationbox/NavigationBox.java b/Solar system/sss3d-source/sss3d/gui/navigationbox/NavigationBox.java new file mode 100644 index 0000000..ebce4b8 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/navigationbox/NavigationBox.java @@ -0,0 +1,139 @@ + /* + File: NavigationBox.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/navigationbox/NavigationBox.java,v 1.4 2000/12/13 13:39:46 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:39:46 $ + $State: Exp $ +*/ + +package sss3d.gui.navigationbox; + +import sss3d.utils.observer.*; +import sss3d.utils.xmlparser.*; +import sss3d.contentbranch.*; +import sss3d.gui.*; +import sss3d.SolarSystemSimulator; +import sss3d.utils.SSS3dConstants; + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +import javax.swing.event.*; + +/** + * This class is used to display a navigation box at the right side + * of the solar system simulator. It contains a date panel to modify + * the current date of the simulator. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.4 $ + * @see sss3d.gui.DatePanel + */ +public class NavigationBox extends JPanel implements Runnable, InfoObserver, ActionListener { + + private Thread thread; // navigationbox runs in a own thread + private ObjectsInformation objInfo; + + //GUI + private DatePanel datePanel; + + private SolarSystemSimulator sss; // link to control simulation + + /** + * Constructs an NavigationBox. + * + * @param sss a reference to the solar system simulator + */ + public NavigationBox( SolarSystemSimulator sss ) { + this.sss = sss; + + objInfo = sss.getObjectsInformation(); + objInfo.attach(this); + + datePanel = new DatePanel(objInfo); + + thread = new Thread(this, "NavigationBox"); + thread.start(); + } + + + /** + * Run method creates JPanel. + */ + public void run() { + setLayout( new BoxLayout( this, BoxLayout.Y_AXIS ) ); + this.setAlignmentX(0.5f); + JLabel nav = new JLabel("NAVIGATION",JLabel.CENTER); + this.add(nav); + this.add(datePanel); + this.setVisible(true); + } + + + /** + * Updates the information state of the object.
+ * + * @param id identification of the object that has to be updated + * @param parameter the parameter that has been changed + */ + public void update( String id, int parameter ) { + + if ( id.equals( getId() ) || + id.equals("all") ) { + + switch ( parameter ) { + case XMLConstants.DAY : + case XMLConstants.MONTH : + case XMLConstants.YEAR : + case XMLConstants.HOUR : + case XMLConstants.MINUTES : + case XMLConstants.SECONDS : + case XMLConstants.JDAY : + datePanel.update(); + break; + default : break; + + } + } + + } + + /** + * Returns the ID of the current rocket. + * + * @return the ID to idendification the rocket. + */ + public String getId() { + return "navigationbox"; + } + + + /** + * Not used. + * @return null + */ + public CelestialObjectInfo getInfo() { + return null; + } + + + /** + * Method handles all action events. + */ + public void actionPerformed(ActionEvent e) { + String s = e.getActionCommand(); + if(s.equals("exit")) { + System.exit(0); + } + } + +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/gui/startbox/StartBox.java b/Solar system/sss3d-source/sss3d/gui/startbox/StartBox.java new file mode 100644 index 0000000..dfeece7 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/gui/startbox/StartBox.java @@ -0,0 +1,364 @@ + /* + File: StartBox.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/gui/startbox/StartBox.java,v 1.11 2000/12/13 13:41:13 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:41:13 $ + $State: Exp $ +*/ + +package sss3d.gui.startbox; + +import sss3d.utils.xmlparser.*; +import sss3d.contentbranch.*; +import sss3d.gui.*; +import sss3d.SolarSystemSimulator; +import sss3d.utils.SSS3dConstants; + +import org.w3c.dom.*; + +import java.io.*; +import java.awt.*; +//import javax.vecmath.*; +import java.awt.event.*; +//import java.applet.*; +import javax.swing.*; +import javax.swing.event.*; + + +import java.io.IOException; + + +/** + * Startbox creates a JFrame containing all setup information for the simulator. + * Also, it allows to control the simulator by changing values. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.11 $ + */ +public class StartBox extends JFrame implements Runnable, ActionListener { + + private Thread thread; // startbox runs in a own thread + + //GUI + private JTextField pathField; + private JPanel fileChooser; + private JPanel panel; + private JMenuBar menubar = null; + private InitializationPanel iniView = null; + private InitializationObject iniObject = null; + private JButton start; + private JButton open; + private JRadioButton def; + private JRadioButton brw; + private ButtonGroup group; + private String path = ""; + + private SolarSystemSimulator sss; // link to control simulation + private Dimension screenSize; + + private int widthFC = 420; // width File Chooser + private int heightFC = 170; // height File Chooser + private int widthIV = 800; // width Initialization View + private int heightIV = 540; // height Initialization View + + /** + * Creates a startbox. Called once at startup of solar system simulator. + * + * @param sss a reference to an instance of the solar system simulator + */ + public StartBox( SolarSystemSimulator sss ) { + this.sss = sss; + + thread = new Thread(this, "StartBox"); + thread.start(); + } + + /** + * Run method creates JFrame. + */ + public void run() { + + this.setTitle("StartBox - J3D Solar System Simulator Version 1.0"); + this.setSize(widthFC,heightFC); + this.addWindowListener(new WindowCmd()); + screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + this.setLocation( (int)( screenSize.getWidth() / 2) - (widthFC / 2), + (int)( screenSize.getHeight()/ 2) - (heightFC/ 2)); + + panel = new JPanel(new BorderLayout()); + createMenuBar(); + panel.add(menubar, BorderLayout.NORTH); + fileChooser = createFileChooserPanel(); + panel.add(fileChooser, BorderLayout.CENTER); + + this.getContentPane().add(panel); + + // set default value for path to + // $current_dir$/default.xml + String userDir = null; + try { + userDir = System.getProperty("user.dir"); + userDir += System.getProperty("file.separator"); + userDir += "default.xml"; + path = userDir; + } catch(Exception e) { + // use default directory if + // an exception has been raised + } + + this.setVisible(true); + + open.requestFocus(); + open.setFocusPainted(true); + } + + /** + * Creates the menubar for the infobox. + */ + private void createMenuBar() { + + if(menubar != null) menubar = null; + + // MenuBar + menubar = new JMenuBar(); + JMenuItem mi; + + // File Menu + JMenu file = (JMenu) menubar.add(new JMenu("File")); + file.setMnemonic('F'); + + mi = (JMenuItem) file.add(new JMenuItem("Exit")); + mi.setMnemonic('x'); + mi.setActionCommand("exit"); + mi.addActionListener(this); + } + + /** + * Creates the file chooser panel. + * + * @return JPanel a new panel to select an initialization file + */ + private JPanel createFileChooserPanel() { + if (iniView != null) { + this.setSize( new Dimension(widthFC,heightFC) ); + this.setLocation( (int)( screenSize.getWidth() / 2) - (widthFC / 2), + (int)( screenSize.getHeight()/ 2) - (heightFC/ 2)); + } + + def = new JRadioButton("",true); + brw = new JRadioButton("",false); + JLabel defLabel = new JLabel("default.xml - in current directory"); + pathField = new JTextField(path,255); + open = new JButton("Open"); + JButton browse = new JButton("Browse..."); + + pathField.setEditable(false); + + // Group the radio buttons. + group = new ButtonGroup(); + group.add(def); + group.add(brw); + def.setActionCommand("rbDefault"); + brw.setActionCommand("rbBrowse"); + def.addActionListener(this); + brw.addActionListener(this); + + // add actionlisteners + open.setActionCommand("open"); + browse.setActionCommand("browse"); + open.addActionListener(this); + browse.addActionListener(this); + + JPanel controls = new JPanel(); + JPanel defaultPanel = new JPanel(); + JPanel browsePanel = new JPanel(); + JPanel openPanel = new JPanel(); + controls.setLayout(new BoxLayout(controls,BoxLayout.Y_AXIS)); + defaultPanel.setLayout(new BoxLayout(defaultPanel,BoxLayout.X_AXIS)); + browsePanel.setLayout(new BoxLayout(browsePanel,BoxLayout.X_AXIS)); + openPanel.setLayout(new BoxLayout(openPanel,BoxLayout.X_AXIS)); + + defaultPanel.add(def); + defaultPanel.add(defLabel); + + browsePanel.add(brw); + browsePanel.add(pathField); + browsePanel.add(browse); + + openPanel.add(open); + + defaultPanel.setAlignmentX(0.0f); + browsePanel.setAlignmentX(0.0f); + openPanel.setAlignmentX(0.0f); + + defaultPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + browsePanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + openPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + + controls.add(defaultPanel); + controls.add(browsePanel); + controls.add(openPanel); + controls.setBorder(BorderFactory.createTitledBorder( + "Choose initialization file")); + return controls; + } + + /** + * Shows a FileChooser Dialog to select + * an initialization file. + */ + private void openFileChooser() { + String userDir = null; + try { + userDir = System.getProperty("user.dir"); + } catch(Exception e) { + // use default directory if + // an exception has been raised + } + + JFileChooser fc = new JFileChooser(userDir); + fc.addChoosableFileFilter(new XMLFilter()); + + int returnVal = fc.showOpenDialog(this); + if(returnVal == JFileChooser.APPROVE_OPTION) { + pathField.setText( fc.getSelectedFile().getAbsolutePath() ); + } + } + + /** + * Shows the initialization panel + */ + private void createInitializationView() { + boolean checked = false; + + // check if we can open the selected file + checked = openXMLFile(); + + // create view + if (checked) { + + // set initialization object - observer pattern + sss.setInitializationObject(iniObject); + + // clean old view + this.remove(panel); + fileChooser.setVisible(false); + fileChooser = null; + menubar.setVisible(false); + menubar = null; + panel.setVisible(false); + panel = null; + + // resize startbox + this.setSize( new Dimension(widthIV,heightIV) ); + this.setLocation( (int)( screenSize.getWidth() / 2) - (widthIV / 2), + (int)( screenSize.getHeight()/ 2) - (heightIV/ 2)); + + // construct initialization view + panel = new JPanel(new BorderLayout()); + createMenuBar(); + start = new JButton("Start"); + start.setActionCommand("start"); + start.addActionListener(this); + iniView = new InitializationPanel( sss.getObjectsInformation(), SSS3dConstants.INITIALIZATION_MODE ); + panel.add(iniView,BorderLayout.CENTER); + + panel.add(menubar,BorderLayout.NORTH); + + panel.add(start,BorderLayout.SOUTH); + + this.getContentPane().add(panel); + this.setVisible(true); + + start.requestFocus(); + start.setFocusPainted(true); + + } else { + // show warning + } + } + + /** + * Method handles all action events. + */ + public void actionPerformed(ActionEvent e) { + String s = e.getActionCommand(); + if(s.equals("exit")) { + System.exit(0); + } else if(s.equals("open")) { + if ( brw.isSelected() ) { + path = pathField.getText(); + } + if( !path.equals("") ) + createInitializationView(); + } else if(s.equals("browse")) { + openFileChooser(); + pathField.setEditable(true); + brw.setSelected(true); + } else if(s.equals("rbDefault")) { + pathField.setEditable(false); + // set default value for path to + // $current_dir$/default.xml + String userDir = null; + try { + userDir = System.getProperty("user.dir"); + userDir += System.getProperty("file.separator"); + userDir += "default.xml"; + path = userDir; + } catch(Exception ePath) { + // use default directory if + // an exception has been raised + } + pathField.setEditable(false); + + } else if(s.equals("rbBrowse")) { + pathField.setEditable(true); + } else if(s.equals("start")) { + System.out.println("Start J3D - Solar System Simulator"); + this.setVisible(false); + InitializationObject iniObject = sss.getObjectsInformation().getInitializationObject(); + boolean glasses3d = ((Boolean)iniObject.getParameter(XMLConstants.GLASSES3D)).booleanValue(); + if(glasses3d) { + sss.createStereoScene(); + } else { + sss.createScene(); + } + } + } + + /** + * Open XML File. + * + * @return boolean true if the program could open the specified XML file. + */ + private boolean openXMLFile() { + boolean opened = false; + + File f = new File(path); + if ( f.exists() ) { + iniObject = new InitializationObject(path); + if(iniObject != null) opened = true; + System.out.println(path); + } + + return opened; + } + + /** + * Window Listener for the InfoBox Frame. + */ + class WindowCmd extends WindowAdapter { + public void windowClosing(WindowEvent e) { + System.exit(0); + } + } +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/utils/CapturingCanvas3D.java b/Solar system/sss3d-source/sss3d/utils/CapturingCanvas3D.java new file mode 100644 index 0000000..e890bb6 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/CapturingCanvas3D.java @@ -0,0 +1,105 @@ +/* + File: CapturingCanvas3D.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/CapturingCanvas3D.java,v 1.2 2000/12/06 11:09:01 portm Exp $ + $Author: portm $ + $Date: 2000/12/06 11:09:01 $ + $State: Exp $ + +*/ +package sss3d.utils; + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.*; +import javax.media.j3d.*; +import javax.vecmath.Point3f; +import com.sun.image.codec.jpeg.*; + +/** + * Class CapturingCanvas3D, using the instructions from the Java3D + * FAQ pages on how to capture a still image in jpeg format. + * + * A capture button would call a method that looks like + * + *
+ *  public static void captureImage(CapturingCanvas3D MyCanvas3D) {
+ *    MyCanvas3D.writeJPEG_ = true;
+ *    MyCanvas3D.repaint();
+ *  }
+ * 
+ * + * Peter Z. Kunszt + * Johns Hopkins University + * Dept of Physics and Astronomy + * Baltimore MD + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.2 $ + */ +public class CapturingCanvas3D extends Canvas3D { + + public boolean writeJPEG_; + private int postSwapCount_; + + /** + * Constructor that generate a Canvas3D. + * + * @param gc the GraphicsConfiguration + */ + public CapturingCanvas3D(GraphicsConfiguration gc) { + super(gc); + postSwapCount_ = 0; + writeJPEG_ = false; + } + + /** + * Override Canvas3D's postSwap method to save a JPEG of the canvas. + */ + public void postSwap() { + if(writeJPEG_) { + System.out.println("Writing JPEG"); + int dimX = this.getScreen3D().getSize().width; + int dimY = this.getScreen3D().getSize().height; + + // The raster components need all be set! + Raster ras = new Raster(new Point3f(-1.0f, -1.0f, -1.0f), + Raster.RASTER_COLOR, + 0, 0, + dimX, dimY, + new ImageComponent2D(ImageComponent.FORMAT_RGB, + new BufferedImage(dimX, dimY, + BufferedImage.TYPE_INT_RGB)), + null); + + GraphicsContext3D ctx = getGraphicsContext3D(); + ctx.readRaster(ras); + + // Now strip out the image info + BufferedImage img = ras.getImage().getImage(); + + // write that to disk.... + try { + FileOutputStream out = new FileOutputStream("Capture" + postSwapCount_ + ".jpg"); + JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); + JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(img); + param.setQuality(0.9f,false); // 90% qualith JPEG + encoder.setJPEGEncodeParam(param); + encoder.encode(img); + writeJPEG_ = false; + out.close(); + } catch ( IOException e ) { + System.out.println("I/O exception!"); + } + postSwapCount_++; + } + } +} diff --git a/Solar system/sss3d-source/sss3d/utils/SSS3dConstants.java b/Solar system/sss3d-source/sss3d/utils/SSS3dConstants.java new file mode 100644 index 0000000..e4bd535 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/SSS3dConstants.java @@ -0,0 +1,294 @@ +/* + File: SSS3dConstants.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/SSS3dConstants.java,v 1.15 2000/12/12 13:01:38 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 13:01:38 $ + $State: Exp $ + +*/ +package sss3d.utils; + + +/** + * This class contains constants for the + * J3D Solar System Simulator. + * + *
+ *    use : 
+ *    SSS3dConstants.TYPES[i];
+ *    ...
+ * 
+ * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.15 $ + */ +public final class SSS3dConstants { + +// public static final float VISIBILITY = 1e6f; + public static final double BOUNDRADIUS = 1e6; + public static final double SCALE = 1e4; + + // backclip / frontclip = not bigger than 3000 !!! (16 bit Z-buffer) + // 1e9 differenz bei 32 bit Z-buffer ? + public static final double FRONTCLIP = 1e-1; // in meter + public static final double BACKCLIP = 1e5; // in meter + public static final double FRONTCLIP_COMPRESSED = 1e-3; // in meter + public static final double BACKCLIP_COMPRESSED = 1e3; // in meter + + // used to call functions if no parameter is defined + public static final int UNDEFINED_PARAMETER = -1; + + // To distinguish if solar system simulator is + // in initialization or runtime mode. + // This is important to check if an attribute + // can be set in the current mode. + // In class XMLConstants we have defined an + // array MODIFIABLE_VALUES_AT_RUNTIME. + public static final int INITIALIZATION_MODE = 0; + public static final int RUNTIME_MODE = 1; + + // reload whole scene - used if date changed + public static final int RELOAD = -2; + + // types of celestial objects or initialization + // files + public static final int UNKNOWN_TYPE = 0; + public static final int INI_TYPE = 1; + public static final int CELESTIALOBJECT_TYPE = 2; + public static final int STAR_TYPE = 3; + public static final int PLANET_TYPE = 4; + public static final int MOON_TYPE = 5; + public static final int COMET_TYPE = 6; + public static final int SATELLITE_TYPE = 7; + public static final int ROCKET_TYPE = 8; + + /** + * The strings representing the types + */ + public static final String[] TYPES = { + "unknown", + "ini", + "celestialobject", + "star", + "planet", + "moon", + "comet", + "satellite", + "rocket" + }; + + public static final int SUN = 0; + public static final int MERCURY = 1; + public static final int VENUS = 2; + public static final int EARTH = 3; + public static final int MARS = 4; + public static final int JUPITER = 5; + public static final int SATURN = 6; + public static final int URANUS = 7; + public static final int NEPTUNE = 8; + public static final int PLUTO = 9; + public static final int MOON = 10; +/* + public static final int PHOBOS = 11; + public static final int DEIMOS = 12; + public static final int IO = 13; + public static final int EUROPA = 14; + public static final int GANYMEDE = 15; + public static final int CALLISTO = 16; + public static final int AMALTHEA = 17; + public static final int HIMALIA = 18; + public static final int ELARA = 19; + public static final int PASIPHAE = 20; + public static final int SINOPE = 21; + public static final int LYSITHEA = 22; + public static final int CARME = 23; + public static final int ANANKE = 24; + public static final int LEDA = 25; + public static final int THEBE = 26; + public static final int ADRASTEA = 27; + public static final int METIS = 28; + public static final int MIMAS = 29; + public static final int ENCELADUS = 30; + public static final int TETHYS = 31; + public static final int DIONE = 32; + public static final int RHEA = 33; + public static final int TITAN = 34; + public static final int HYPERION = 35; + public static final int IAPETUS = 36; + public static final int PHOEBE = 37; + public static final int JANUS = 38; + public static final int EPIMETHEUS = 39; + public static final int HELENE = 40; + public static final int TELESTO = 41; + public static final int CALYPSO = 42; + public static final int ATLAS = 43; + public static final int PROMETHEUS = 44; + public static final int PANDORA = 45; + public static final int PAN = 46; + public static final int ARIEL = 47; + public static final int UMBRIEL = 48; + public static final int TITANIA = 49; + public static final int OBERON = 50; + public static final int MIRANDA = 51; + public static final int CORDELIA = 52; + public static final int OPHELIA = 53; + public static final int BIANCA = 54; + public static final int CRESSIDA = 55; + public static final int DESDEMONA = 56; + public static final int JULIET = 57; + public static final int PORTIA = 58; + public static final int ROSALIND = 59; + public static final int BELINDA = 60; + public static final int PUCK = 61; + public static final int CALIBAN = 62; + public static final int SYCORAX = 63; + public static final int PROSPERO = 64; + public static final int SETEBOS = 65; + public static final int STEPHANO = 66; + public static final int TRITON = 67; + public static final int NEREID = 68; + public static final int NAIAD = 69; + public static final int THALASSA = 70; + public static final int DESPINA = 71; + public static final int GALATEA = 72; + public static final int LARISSA = 73; + public static final int PROTEUS = 74; + public static final int CHARON = 75; +*/ + /** + * The strings representing the celestial object names + */ + public static final String[] CELESTIAL = { + "sun", + "mercury", + "venus", + "earth", + "mars", + "jupiter", + "saturn", + "uranus", + "neptune", + "pluto", + "moon"/*, + "phobos", + "deimos", + "io", + "europa", + "ganymede", + "callisto", + "amalthea", + "himalia", + "elara", + "pasiphae", + "sinope", + "lysithea", + "carme", + "ananke", + "leda", + "thebe", + "adrastea", + "metis", + "mimas", + "enceladus", + "tethys", + "dione", + "rhea", + "titan", + "hyperion", + "iapetus", + "phoebe", + "janus", + "epimetheus", + "helene", + "telesto", + "calypso", + "atlas", + "prometheus", + "pandora", + "pan", + "ariel", + "umbriel", + "titania", + "oberon", + "miranda", + "cordelia", + "ophelia", + "bianca", + "cressida", + "desdemona", + "juliet", + "portia", + "rosalind", + "belinda", + "puck", + "caliban", + "sycorax", + "prospero", + "setebos", + "stephano", + "triton", + "nereid", + "naiad", + "thalassa", + "despina", + "galatea", + "larissa", + "proteus", + "charon"*/ + }; + + public static final int KEPLER = 0; + public static final int ELLIPSE = 1; + public static final int ANALYTIC = 2; + + /** + * The strings representing the calculation methods. + */ + public static final String[] CALCULATION_METHODS = { + "Kepler", + "Ellipse", + "Analytic" + }; + + public static final int CAMERA_DEFAULT = 0; + public static final int CAMERA_SUN = 1; + public static final int CAMERA_MERCURY = 2; + public static final int CAMERA_VENUS = 3; + public static final int CAMERA_EARTH = 4; + public static final int CAMERA_MARS = 5; + public static final int CAMERA_JUPITER = 6; + public static final int CAMERA_SATURN = 7; + public static final int CAMERA_URANUS = 8; + public static final int CAMERA_NEPTUNE = 9; + public static final int CAMERA_PLUTO = 10; + public static final int CAMERA_MOON = 11; + public static final int CAMERA_SPACESHUTTLE = 12; + + /** + * The strings representing the camera positons + */ + public static final String[] CAMERA_POSITIONS = { + "Default", + "Sun", + "Mercury", + "Venus", + "Earth", + "Mars", + "Jupiter", + "Saturn", + "Uranus", + "Neptune", + "Pluto", + "Moon", + "SpaceShuttle" + }; +} diff --git a/Solar system/sss3d-source/sss3d/utils/astronomy/Kepler.java b/Solar system/sss3d-source/sss3d/utils/astronomy/Kepler.java new file mode 100644 index 0000000..8af5e5f --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/astronomy/Kepler.java @@ -0,0 +1,616 @@ +/* + File: Phys.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/astronomy/Kepler.java,v 1.4 2000/12/13 13:42:48 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:42:48 $ + $State: Exp $ + +*/ +package sss3d.utils.astronomy; + +import sss3d.calculations.constants.AstronomicalConstants; +import sss3d.calculations.*; + +import javax.vecmath.Matrix3d; + +/** + * This class handle the two body problem. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.4 $ + */ +public class Kepler { + + /** + * Constructor + */ + public Kepler() { + + } + + /** + * Calculate the eccentric anomaly for elliptical ways. + * + * @param m middle anomaly in [rad]. + * @param e eccentric way [0,1[. + * + * @return eccentric anomaly in [rad]. + */ + public double eccAnom(double m, double e) { + + int maxit = 15; + double eps = 100.0 * AstronomicalConstants.EPSILON; + + int i = 0; + double _E, f; + + // Startwert + double _M = MoreMath.modulo(m, MoreMath.PI2); + + if(e < 0.8) { + _E = _M; + } else { + _E = StrictMath.PI; + } + + // Iteration + do { + f = _E - e * StrictMath.sin(_E) - _M; + _E = _E - f / (1.0 - e * StrictMath.cos(_E) ); + i++; + if(i == maxit) { + System.out.println("Konvergenzprobleme in eccAnom"); + break; + } + } + while(StrictMath.abs(f) > eps); + + return _E; + } + + + /** + * Calculate the eccentric anomaly for hyperbolic ways. + * + * @param mh middle anomaly in [rad]. + * @param e eccentric way [0,1[. + * + * @return eccentric anomaly in [rad]. + */ + public double hypAnom(double mh, double e) { + + int maxit = 15; + double eps = 100.0 * AstronomicalConstants.EPSILON; + + int i = 0; + double _H, f; + + // Startwert + _H = StrictMath.log(2.0 * StrictMath.abs(mh) / e + 1.8); + if(mh < 0.0) { + _H = -_H; + } + + // Iteration + do { + f = e * MoreMath.sinh(_H) - _H - mh; + _H = _H - f / (e * MoreMath.cosh(_H) - 1.0); + ++i; + if(i == maxit) { + System.out.println("Konvergenzprobleme in hypAnom"); + break; + } + } + while(StrictMath.abs(f) > eps * (1.0 + StrictMath.abs(_H + mh))); + + return _H; + } + + /** + * Calculate the place- and velocity vector for elliptical ways. + * + * @param gm product of the constant gravitation and the central mass. + * @param m middle anomaly in [rad]. + * @param a half axle of the way in [AE]. + * @param e eccentric way < 1. + * + * @return an array with the place- and velocity vector.
+ * Vec3D[0] = place vector in [AE].
+ * Vec3D[1] = velocity vector in [AE / d]. + */ + public Vec3D[] ellip(double gm, double m, double a, double e) { + + double k = StrictMath.sqrt(gm / a); + + double _E = eccAnom(m, e); + + double cosE = StrictMath.cos(_E); + double sinE = StrictMath.sin(_E); + + double fac = StrictMath.sqrt((1.0 - e) * (1.0 + e)); + + double rho = 1.0 - e * cosE; + + Vec3D[] vec = new Vec3D[2]; + vec[0] = new Vec3D(a * (cosE - e), + a * fac * sinE, + 0.0); + vec[1] = new Vec3D(-k * sinE / rho, + k * fac * cosE / rho, + 0.0); + + return vec; + } + + /** + * Calculate the place- and velocity vector for hyperbolic ways. + * + * @param gm product of the constant gravitation and the central mass. + * @param t0 time of perihel transit in julianish century. + * @param t calculation time in julianish century. + * @param a half axle of the way in [AE]. + * @param e eccentric way > 1. + * + * @return an array with the place- and velocity vector.
+ * Vec3D[0] = place vector in [AE].
+ * Vec3D[1] = velocity vector in [AE / d]. + */ + public Vec3D[] hyperb(double gm, double t0, double t, double a, double e) { + + double aa = StrictMath.abs(a); + double k = StrictMath.sqrt(gm / aa); + + double mh = k * (t - t0) / aa; + double _H = hypAnom(mh, e); + + double coshH = MoreMath.cosh(_H); + double sinhH = MoreMath.sinh(_H); + + double fac = StrictMath.sqrt((e + 1.0) * (e - 1.0)); + + double rho = e * coshH - 1.0; + + Vec3D[] vec = new Vec3D[2]; + vec[0] = new Vec3D(aa * (e - coshH), + aa * fac * sinhH, + 0.0); + vec[1] = new Vec3D(-k * sinhH / rho, + k * fac * coshH / rho, + 0.0); + + return vec; + } + + /** + * Get the difference between the ephemeriden time and the world time. + * This method can only calculate the difference of this time from 1825 to 2005. + * + * @param e2 eccentric anomaly squared (e2 = e * e) in [rad^2]. + * + * @return an array with the values:
+ * double[0] = sin(e) / e.
+ * double[1] = (1 - cos(e)) / e^2.
+ * double[2] = (e - sin(e)) / e^3. + */ + public double[] stumpff(double e2) { + + double eps = 100.0 * AstronomicalConstants.EPSILON; + double[] c = new double[3]; + + c[0] = 0.0; + c[1] = 0.0; + c[2] = 0.0; + + double add = 1.0; + double n = 1.0; + + do { + c[0] += add; + add /= (2.0 * n); + c[1] += add; + add /= (2.0 * n + 1.0); + c[2] += add; + add *= -e2; + n += 1.0; + } while(StrictMath.abs(add) >= eps); + + return c; + } + + /** + * Calculate the place- and velocity vector for parabolically ways. + * + * @param gm product of the constant gravitation and the central mass. + * @param t0 time of perihel transit in julianish century. + * @param t calculation time in julianish century. + * @param q perihel distance in [AE]. + * @param e eccentric way ~ 1. + * + * @return an array with the place- and velocity vector.
+ * Vec3D[0] = place vector in [AE].
+ * Vec3D[1] = velocity vector in [AE / d]. + */ + public Vec3D[] parab(double gm, double t0, double t, double q, double e) { + + int maxit = 15; + double eps = 100.0 * AstronomicalConstants.EPSILON; + + int i = 0; + double e2 = 0.0; + double e20, u, u2; + double[] c; + + double fac = 0.5 * e; + + double k = StrictMath.sqrt(gm / (q * (1.0 + e))); + double tau = StrictMath.sqrt(gm) * (t - t0); + + do { + i++; + + e20 = e2; + + double a = 1.5 * StrictMath.sqrt(fac / (q * q * q)) * tau; + double b = StrictMath.pow(StrictMath.sqrt(a * a + 1.0) + a, 1.0 / 3.0 ); + + u = b - 1.0 / b; + u2 = u * u; + e2 = u2 * (1.0 - e) / fac; + + c = stumpff(e2); + + fac = 3.0 * e * c[2]; + + if(i == maxit) { + System.out.println("Konvergenzprobleme in parab"); + break; + } + } while(StrictMath.abs(e2 - e20) >= eps); + + double _R = q * (1.0 + u2 * c[1] * e / fac); + + Vec3D[] vec = new Vec3D[2]; + vec[0] = new Vec3D(q * (1.0 - u2 * c[1] / fac), + q * StrictMath.sqrt((1.0 + e) / fac) * u * c[0], + 0.0); + vec[1] = new Vec3D(-k * vec[0].y / _R, + k * (vec[0].x / _R + e), + 0.0); + + return vec; + } + + /** + * Calculate the place- and velocity vector for the kepler ways based on ecliptic. + * + * @param gm product of the constant gravitation and the central mass. + * @param t0 time of perihel transit in julianish century. + * @param t calculation time in julianish century. + * @param q perihel distance in [AE]. + * @param e eccentric way. + * @param pqr Transform matrix of the plane way -> ecliptic (gauss vector). + * + * @return an array with the place- and velocity vector.
+ * Vec3D[0] = place vector in [AE].
+ * Vec3D[1] = velocity vector in [AE / d]. + */ + public Vec3D[] kepler(double gm, double t0, double t, + double q, double e, Matrix3d pqr) { + + double m0 = 0.1; // [rad] + double eps = 0.1; + + Vec3D[] vec; + + double delta = StrictMath.abs(1.0 - e); + + double invax = delta / q; + + double tau = StrictMath.sqrt(gm) * (t - t0); + double m = tau * StrictMath.sqrt(invax * invax * invax); + + if((m < m0) && (delta < eps)) { + vec = parab(gm, t0, t, q, e); + } else if(e < 1.0) { + vec = ellip(gm, m, 1.0 / invax, e); + } else { + vec = hyperb(gm, t0, t, 1.0 / invax, e); + } + + vec[0].mul(pqr); + vec[1].mul(pqr); + + return vec; + } + + /** + * Calculate the transform matrix of the coordinate system in the plane way + * to ecliptical coordinate. + * + * @param h the length of ascending nodes of the way in [rad]. + * @param i inclination of the way to the ecliptic in [rad]. + * @param j argument of the perihel in [rad]. + * + * @return a transform matrix with the gauss vectors p, q and r. + */ + public Matrix3d gaussVec(double h, double i, double j) { + + Matrix3d mat1 = new Matrix3d(); + Matrix3d mat2 = new Matrix3d(); + Matrix3d mat3 = new Matrix3d(); + + mat1.setIdentity(); + mat2.setIdentity(); + mat3.setIdentity(); + + // R_z(-h) * R_x(-i) * R_z(-j) + mat1.rotZ(-h); + mat2.rotX(-i); + mat3.rotZ(-j); + + mat3.mul(mat2); + mat3.mul(mat1); + + return mat3; + } + + /** + * Calculate the elements of a elliptical way of place- and velocity vector. + * + * @param gm product of the constant gravitation and the central mass. + * @param r heliocentrically ecliptical place in [AE]. + * @param v heliocentrically ecliptical velocity in [AE / d]. + * + * @return a double array with the follow values:
+ * double[0] = big half axle of the way in [AE].
+ * double[1] = eccentric way.
+ * double[2] = inclination of the way to the ecliptic in [rad].
+ * double[3] = the length of ascending nodes of the way in [rad].
+ * double[4] = argument of the perihel in [rad].
+ * double[5] = middle anomaly in [rad].
+ */ + public double[] elements(double gm, Vec3D r, Vec3D v) { + + double[] result = new double[6]; + + Vec3D vec = new Vec3D(); + vec.cross(r, v); // Flaechengeschwindigkeit + double h = vec.norm(); + + result[3] = StrictMath.atan2(vec.x, -vec.y); // Laenge aufst. Knoten + + result[2] = StrictMath.atan2(StrictMath.sqrt(vec.x * vec.x + vec.y * vec.y), + vec.z); // Bahnneigung + + double u = StrictMath.atan2( r.z * h, + -r.x * vec.y + r.y * vec.x); // Argument der Breite + + double _R = r.norm(); // Entfernung + double v2 = v.dot(v); // Quadrat der Geschw. + + result[0] = 1.0 / (2.0 / _R - v2 / gm); // Grosse Halbachse + + double eCosE = 1.0 - _R / result[0]; // e*cos(E) + double eSinE = r.dot(v) / StrictMath.sqrt(gm * result[0]); // e*sin(E) + + double e2 = eCosE * eCosE + eSinE * eSinE; + result[1] = StrictMath.sqrt(e2); // Exzentrizitaet + double e = StrictMath.atan2(eSinE, eCosE); // Exzentrische Anomalie + + result[5] = e - eSinE; // Mittlere Anomalie + + double nu = StrictMath.atan2(StrictMath.sqrt(1.0 - e2) * eSinE, + eCosE - e2); // Wahre Anomalie + + result[4] = u - nu; // Argument des Perihels + + if(result[3] < 0.0) { + result[3] += MoreMath.PI2; + } + if(result[4] < 0.0) { + result[4] += MoreMath.PI2; + } + if(result[5] < 0.0) { + result[5] += MoreMath.PI2; + } + + return result; + } + + /** + * Calculate the elements of a kepler way from two given places. + * + * @param gm product of the constant gravitation and the central mass. + * @param mjd_a time of the passage at place A [mjd]. + * @param mjd_b time of the passage at place B [mjd]. + * @param r_a place A in heliocentrically ecliptical coordinate in [AU]. + * @param r_b place B in heliocentrically ecliptical coordinate in [AU]. + * + * @return a double array with the follow values:
+ * double[0] = time of the perihel transit.
+ * double[1] = perihel distance in [AE].
+ * double[2] = inclination of the way to the ecliptic in [rad].
+ * double[3] = the length of ascending nodes of the way in [rad].
+ * double[4] = argument of the perihel in [rad].
+ * double[5] = middle anomaly in [rad].
+ */ + public double[] elements(double gm, double mjd_a, double mjd_b, + Vec3D r_a, Vec3D r_b) { + + double[] result = new double[6]; + + // Berechnen Vektor r_0 (Anteil von r_b, der senkrecht auf r_a steht) + // und die Betraege der Vektoren r_a,r_b und r_0 + double s_a = r_a.norm(); + Vec3D e_a = new Vec3D(); + e_a.scale(1.0 / s_a, r_a); + double s_b = r_b.norm(); + double fac = r_b.dot(e_a); + + //r_0 = r_b - fac * e_a; + Vec3D r_0 = new Vec3D(); + r_0.scale(fac, e_a); + r_0.sub(r_b, r_0); + double s_0 = r_0.norm(); + Vec3D e_0 = new Vec3D(); + e_0.scale(1.0 / s_0, r_0); + + // Bahnneigung und aufsteigender Knoten + Vec3D r = new Vec3D(); + r.cross(e_a, e_0); + result[2] = StrictMath.PI / 2.0 - r.getElevation(); + result[3] = MoreMath.modulo(StrictMath.PI / 2.0 + r.getAzimut(), + MoreMath.PI2); + + double u; + if(result[2] == 0.0) { + u = StrictMath.atan2(r_a.y, r_a.x); + } else { + u = StrictMath.atan2( e_0.x * r.y - e_0.y * r.x, + -e_a.x * r.y + e_a.y * r.x); + } + + // Semilatus rectum + double tau = StrictMath.sqrt(gm) * StrictMath.abs(mjd_b - mjd_a); + double eta = findEta(r_a, r_b, tau); + double p = StrictMath.pow(s_a * s_0 * eta / tau, 2); + + + // Exzentrizitaet, wahre Anomalie und Argument des Perihels + double cos_dnu = fac / s_b; + double sin_dnu = s_0 / s_b; + + double ecos_nu = p / s_a - 1.0; + double esin_nu = (ecos_nu * cos_dnu - (p / s_b - 1.0)) / sin_dnu; + + result[5] = StrictMath.sqrt(ecos_nu * ecos_nu + esin_nu * esin_nu); + double nu = StrictMath.atan2(esin_nu, ecos_nu); + + result[4] = MoreMath.modulo(u - nu, MoreMath.PI2); + + // Periheldistanz, grosse Halbachse und mittlere Bewegung + result[1] = p / (1.0 + result[5]); + double a = result[1] / (1.0 - result[5]); + double n = StrictMath.sqrt(gm / StrictMath.abs(a * a * a) ); + + double m; + // Mittlere Anomalie und Zeitpunkt des Periheldurchgangs + if (result[5] < 1.0) { + double e = StrictMath.atan2(StrictMath.sqrt((1.0 - result[5]) * + (1.0 + result[5])) * esin_nu, + ecos_nu + result[5] * result[5]); + m = e - result[5] * StrictMath.sin(e); + } else { + double sinhH = StrictMath.sqrt((result[5] - 1.0) * (result[5] + 1.0)) * + esin_nu / (result[5] + result[5] * ecos_nu); + m = result[5] * sinhH - + StrictMath.log(sinhH + StrictMath.sqrt(1.0 + sinhH * sinhH)); + } + result[0] = mjd_a - m / n; + + return result; + } + + /** + * Calculate the sector to triangle ratio of two given places and the meantime. + * + * @param r_a place at time A in [AE]. + * @param r_b place at time B in [AE]. + * @param tau time between the passage from A and B (kGauss * dT in [d]). + * + * @return the sector to triangle ratio. + */ + public double findEta(Vec3D r_a, Vec3D r_b, double tau) { + + int maxit = 30; + double delta = 100.0 * AstronomicalConstants.EPSILON; + + double s_a = r_a.norm(); + double s_b = r_b.norm(); + + double kappa = StrictMath.sqrt(2.0 * (s_a * s_b + r_a.dot(r_b)) ); + + double m = tau * tau / StrictMath.pow(kappa, 3); + double l = (s_a + s_b) / (2.0 * kappa) - 0.5; + + double eta_min = StrictMath.sqrt(m / (l + 1.0)); + + // Start mit der Hansen'schen Naeherung + double eta2 = (12.0 + 10.0 * + StrictMath.sqrt(1.0 + (44.0 / 9.0) * m / (l + 5.0 / 6.0))) / 22.0; + double eta1 = eta2 + 0.1; + + // Sekantenverfahren + double f1 = f(eta1, m, l); + double f2 = f(eta2, m, l); + + int i = 0; + + while(Math.abs(f2 - f1) > delta) { + double d_eta = -f2 * (eta2 - eta1) / (f2 - f1); + eta1 = eta2; + f1 = f2; + while(eta2 + d_eta <= eta_min) { + d_eta *= 0.5; + } + eta2 += d_eta; + f2 = f(eta2, m, l); + ++i; + + if(i == maxit) { + System.out.println("Konvergenzprobleme in findEta");; + break; + } + } + return eta2; + } + + /** + * Locale: used from the findEta method. + * + * @param eta a double value. + * @param m a double value. + * @param l a double value. + * + * @return the result of this arithmetic:
+ * f = 1 - eta + (m / eta^2) * w(m / eta^2-l). + */ + private double f(double eta, double m, double l) { + + double _W = 4.0 / 3.0; + double eps = 100.0 * AstronomicalConstants.EPSILON; + double w = m / (eta * eta) - l; + + if(StrictMath.abs(w) < 0.1) { // Reihenentwicklung + double a = _W; + double n = 0.0; + do { + n += 1.0; + a *= w * (n + 2.0) / (n + 1.5); + _W += a; + } while(StrictMath.abs(a) >= eps); + } else { + double g; + if(w > 0.0) { + g = 2.0 * StrictMath.asin(StrictMath.sqrt(w)); + _W = (2.0 * g - StrictMath.sin(2.0 * g)) / + StrictMath.pow(StrictMath.sin(g), 3); + } else { + g = 2.0 * StrictMath.log(StrictMath.sqrt(-w) + + StrictMath.sqrt(1.0 - w)); // =2.0*arsinh(sqrt(-w)) + _W = (MoreMath.sinh(2.0 * g) - 2.0 * g) / + StrictMath.pow(MoreMath.sinh(g), 3); + } + } + return 1.0 - eta + (w + l) * _W; + } +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/utils/astronomy/Moon.java b/Solar system/sss3d-source/sss3d/utils/astronomy/Moon.java new file mode 100644 index 0000000..57081d2 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/astronomy/Moon.java @@ -0,0 +1,276 @@ +/* + File: Moon.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/astronomy/Moon.java,v 1.4 2000/12/13 13:42:48 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:42:48 $ + $State: Exp $ + +*/ +package sss3d.utils.astronomy; + +import sss3d.calculations.*; +import javax.vecmath.Matrix3d; + +/** + * This class calculate the position of the moon. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.4 $ + */ +public class Moon { + + /** + * Constructor + */ + public Moon() { + + } + + /** + * Calculate the ecliptical position of the moon with the theory of Brown + * (Improved Lunar Ephemeris). + * + * @param time time in julianish century. + * + * @return the geocentrically position of the moon (in [km]) based + * to the ecliptic and the spring point of the date. + */ + public Vec3D moonPos(double time) { + + MoonPert pert = new MoonPert(); + + pert.init(time); // initialisierung + + // Solare Stoerungen + pert.addSol( 13.902, 14.06,-0.001, 0.2607,0, 0, 0, 4); + pert.addSol( 0.403, -4.01,+0.394, 0.0023,0, 0, 0, 3); + pert.addSol( 2369.912, 2373.36,+0.601, 28.2333,0, 0, 0, 2); + pert.addSol( -125.154, -112.79,-0.725, -0.9781,0, 0, 0, 1); + pert.addSol( 1.979, 6.98,-0.445, 0.0433,1, 0, 0, 4); + pert.addSol( 191.953, 192.72,+0.029, 3.0861,1, 0, 0, 2); + pert.addSol( -8.466, -13.51,+0.455, -0.1093,1, 0, 0, 1); + pert.addSol(22639.500,22609.07,+0.079, 186.5398,1, 0, 0, 0); + pert.addSol( 18.609, 3.59,-0.094, 0.0118,1, 0, 0,-1); + pert.addSol(-4586.465,-4578.13,-0.077, 34.3117,1, 0, 0,-2); + pert.addSol( +3.215, 5.44,+0.192, -0.0386,1, 0, 0,-3); + pert.addSol( -38.428, -38.64,+0.001, 0.6008,1, 0, 0,-4); + pert.addSol( -0.393, -1.43,-0.092, 0.0086,1, 0, 0,-6); + pert.addSol( -0.289, -1.59,+0.123, -0.0053,0, 1, 0, 4); + pert.addSol( -24.420, -25.10,+0.040, -0.3000,0, 1, 0, 2); + pert.addSol( 18.023, 17.93,+0.007, 0.1494,0, 1, 0, 1); + pert.addSol( -668.146, -126.98,-1.302, -0.3997,0, 1, 0, 0); + pert.addSol( 0.560, 0.32,-0.001, -0.0037,0, 1, 0,-1); + pert.addSol( -165.145, -165.06,+0.054, 1.9178,0, 1, 0,-2); + pert.addSol( -1.877, -6.46,-0.416, 0.0339,0, 1, 0,-4); + pert.addSol( 0.213, 1.02,-0.074, 0.0054,2, 0, 0, 4); + pert.addSol( 14.387, 14.78,-0.017, 0.2833,2, 0, 0, 2); + pert.addSol( -0.586, -1.20,+0.054, -0.0100,2, 0, 0, 1); + pert.addSol( 769.016, 767.96,+0.107, 10.1657,2, 0, 0, 0); + pert.addSol( +1.750, 2.01,-0.018, 0.0155,2, 0, 0,-1); + pert.addSol( -211.656, -152.53,+5.679, -0.3039,2, 0, 0,-2); + pert.addSol( +1.225, 0.91,-0.030, -0.0088,2, 0, 0,-3); + pert.addSol( -30.773, -34.07,-0.308, 0.3722,2, 0, 0,-4); + pert.addSol( -0.570, -1.40,-0.074, 0.0109,2, 0, 0,-6); + pert.addSol( -2.921, -11.75,+0.787, -0.0484,1, 1, 0, 2); + pert.addSol( +1.267, 1.52,-0.022, 0.0164,1, 1, 0, 1); + pert.addSol( -109.673, -115.18,+0.461, -0.9490,1, 1, 0, 0); + pert.addSol( -205.962, -182.36,+2.056, +1.4437,1, 1, 0,-2); + pert.addSol( 0.233, 0.36, 0.012, -0.0025,1, 1, 0,-3); + pert.addSol( -4.391, -9.66,-0.471, 0.0673,1, 1, 0,-4); + pert.addSol( 0.283, 1.53,-0.111, +0.0060,1,-1, 0,+4); + pert.addSol( 14.577, 31.70,-1.540, +0.2302,1,-1, 0, 2); + pert.addSol( 147.687, 138.76,+0.679, +1.1528,1,-1, 0, 0); + pert.addSol( -1.089, 0.55,+0.021, 0.0 ,1,-1, 0,-1); + pert.addSol( 28.475, 23.59,-0.443, -0.2257,1,-1, 0,-2); + pert.addSol( -0.276, -0.38,-0.006, -0.0036,1,-1, 0,-3); + pert.addSol( 0.636, 2.27,+0.146, -0.0102,1,-1, 0,-4); + pert.addSol( -0.189, -1.68,+0.131, -0.0028,0, 2, 0, 2); + pert.addSol( -7.486, -0.66,-0.037, -0.0086,0, 2, 0, 0); + pert.addSol( -8.096, -16.35,-0.740, 0.0918,0, 2, 0,-2); + pert.addSol( -5.741, -0.04, 0.0 , -0.0009,0, 0, 2, 2); + pert.addSol( 0.255, 0.0 , 0.0 , 0.0 ,0, 0, 2, 1); + pert.addSol( -411.608, -0.20, 0.0 , -0.0124,0, 0, 2, 0); + pert.addSol( 0.584, 0.84, 0.0 , +0.0071,0, 0, 2,-1); + pert.addSol( -55.173, -52.14, 0.0 , -0.1052,0, 0, 2,-2); + pert.addSol( 0.254, 0.25, 0.0 , -0.0017,0, 0, 2,-3); + pert.addSol( +0.025, -1.67, 0.0 , +0.0031,0, 0, 2,-4); + pert.addSol( 1.060, 2.96,-0.166, 0.0243,3, 0, 0,+2); + pert.addSol( 36.124, 50.64,-1.300, 0.6215,3, 0, 0, 0); + pert.addSol( -13.193, -16.40,+0.258, -0.1187,3, 0, 0,-2); + pert.addSol( -1.187, -0.74,+0.042, 0.0074,3, 0, 0,-4); + pert.addSol( -0.293, -0.31,-0.002, 0.0046,3, 0, 0,-6); + pert.addSol( -0.290, -1.45,+0.116, -0.0051,2, 1, 0, 2); + pert.addSol( -7.649, -10.56,+0.259, -0.1038,2, 1, 0, 0); + pert.addSol( -8.627, -7.59,+0.078, -0.0192,2, 1, 0,-2); + pert.addSol( -2.740, -2.54,+0.022, 0.0324,2, 1, 0,-4); + pert.addSol( 1.181, 3.32,-0.212, 0.0213,2,-1, 0,+2); + pert.addSol( 9.703, 11.67,-0.151, 0.1268,2,-1, 0, 0); + pert.addSol( -0.352, -0.37,+0.001, -0.0028,2,-1, 0,-1); + pert.addSol( -2.494, -1.17,-0.003, -0.0017,2,-1, 0,-2); + pert.addSol( 0.360, 0.20,-0.012, -0.0043,2,-1, 0,-4); + pert.addSol( -1.167, -1.25,+0.008, -0.0106,1, 2, 0, 0); + pert.addSol( -7.412, -6.12,+0.117, 0.0484,1, 2, 0,-2); + pert.addSol( -0.311, -0.65,-0.032, 0.0044,1, 2, 0,-4); + pert.addSol( +0.757, 1.82,-0.105, 0.0112,1,-2, 0, 2); + pert.addSol( +2.580, 2.32,+0.027, 0.0196,1,-2, 0, 0); + pert.addSol( +2.533, 2.40,-0.014, -0.0212,1,-2, 0,-2); + pert.addSol( -0.344, -0.57,-0.025, +0.0036,0, 3, 0,-2); + pert.addSol( -0.992, -0.02, 0.0 , 0.0 ,1, 0, 2, 2); + pert.addSol( -45.099, -0.02, 0.0 , -0.0010,1, 0, 2, 0); + pert.addSol( -0.179, -9.52, 0.0 , -0.0833,1, 0, 2,-2); + pert.addSol( -0.301, -0.33, 0.0 , 0.0014,1, 0, 2,-4); + pert.addSol( -6.382, -3.37, 0.0 , -0.0481,1, 0,-2, 2); + pert.addSol( 39.528, 85.13, 0.0 , -0.7136,1, 0,-2, 0); + pert.addSol( 9.366, 0.71, 0.0 , -0.0112,1, 0,-2,-2); + pert.addSol( 0.202, 0.02, 0.0 , 0.0 ,1, 0,-2,-4); + pert.addSol( 0.415, 0.10, 0.0 , 0.0013,0, 1, 2, 0); + pert.addSol( -2.152, -2.26, 0.0 , -0.0066,0, 1, 2,-2); + pert.addSol( -1.440, -1.30, 0.0 , +0.0014,0, 1,-2, 2); + pert.addSol( 0.384, -0.04, 0.0 , 0.0 ,0, 1,-2,-2); + pert.addSol( +1.938, +3.60,-0.145, +0.0401,4, 0, 0, 0); + pert.addSol( -0.952, -1.58,+0.052, -0.0130,4, 0, 0,-2); + pert.addSol( -0.551, -0.94,+0.032, -0.0097,3, 1, 0, 0); + pert.addSol( -0.482, -0.57,+0.005, -0.0045,3, 1, 0,-2); + pert.addSol( 0.681, 0.96,-0.026, 0.0115,3,-1, 0, 0); + pert.addSol( -0.297, -0.27, 0.002, -0.0009,2, 2, 0,-2); + pert.addSol( 0.254, +0.21,-0.003, 0.0 ,2,-2, 0,-2); + pert.addSol( -0.250, -0.22, 0.004, 0.0014,1, 3, 0,-2); + pert.addSol( -3.996, 0.0 , 0.0 , +0.0004,2, 0, 2, 0); + pert.addSol( 0.557, -0.75, 0.0 , -0.0090,2, 0, 2,-2); + pert.addSol( -0.459, -0.38, 0.0 , -0.0053,2, 0,-2, 2); + pert.addSol( -1.298, 0.74, 0.0 , +0.0004,2, 0,-2, 0); + pert.addSol( 0.538, 1.14, 0.0 , -0.0141,2, 0,-2,-2); + pert.addSol( 0.263, 0.02, 0.0 , 0.0 ,1, 1, 2, 0); + pert.addSol( 0.426, +0.07, 0.0 , -0.0006,1, 1,-2,-2); + pert.addSol( -0.304, +0.03, 0.0 , +0.0003,1,-1, 2, 0); + pert.addSol( -0.372, -0.19, 0.0 , -0.0027,1,-1,-2, 2); + pert.addSol( +0.418, 0.0 , 0.0 , 0.0 ,0, 0, 4, 0); + pert.addSol( -0.330, -0.04, 0.0 , 0.0 ,3, 0, 2, 0); + + + // Solare Stoerungen in Breite + pert.addN(-526.069, 0, 0,1,-2); pert.addN( -3.352, 0, 0,1,-4); + pert.addN( +44.297,+1, 0,1,-2); pert.addN( -6.000,+1, 0,1,-4); + pert.addN( +20.599,-1, 0,1, 0); pert.addN( -30.598,-1, 0,1,-2); + pert.addN( -24.649,-2, 0,1, 0); pert.addN( -2.000,-2, 0,1,-2); + pert.addN( -22.571, 0,+1,1,-2); pert.addN( +10.985, 0,-1,1,-2); + + + pert.planetary(time); // Planetare Stoerungen + + // Position + return new Vec3D(new Polar(pert.lambda(), + pert.beta(), + pert.dist())); + } + + /** + * Calculate the equatorialy position of the moon with the theory of Brown + * (Improved Lunar Ephemeris). + * + * @param time time in julianish century. + * + * @return the geocentrically position of the moon (in [km]) based + * to the ecliptic and the spring point of the date. + */ + public Vec3D moonEqu(double time) { + + // nutMatrix(time) * ecl2EquMatrix(time) * moonPos(time) + PrecNut precNut = new PrecNut(); + Spheric spheric = new Spheric(); + + Matrix3d sMatrix = spheric.ecl2EquMatrix(time); + Matrix3d pMatrix = precNut.nutMatrix(time); + + Vec3D vec = moonPos(time); + vec.mul(sMatrix); + vec.mul(pMatrix); + + return vec; + } + + /** + * Calculate the right ascension and declension of the moon with an + * analytical series with short precision. + * + * @param time time in julianish century. + * + * @return a double array with the values:
+ * double[0] = right ascension of the moon in [rad].
+ * double[1] = declension of the moon in [rad]. + */ + public double[] miniMoon(double time) { + + double eps = 23.43929111 * MoreMath.RAD; + + // Mittlere Elemente der Mondbahn + double l_0 = MoreMath.frac(0.606433 + 1336.855225 * time); // mittlere Laenge [Umlaeufe] + + double l = MoreMath.PI2 * MoreMath.frac(0.374897 + + 1325.552410 * time); // Mittlere Anomalie des Mondes + double ls = MoreMath.PI2 * MoreMath.frac(0.993133 + + 99.997361 * time); // Mittlere Anomalie der Sonne + double d = MoreMath.PI2 * MoreMath.frac(0.827361 + + 1236.853086 * time); // Laengendiff. Mond-Sonnne + double f = MoreMath.PI2 * MoreMath.frac(0.259086 + + 1342.227825 * time); // Knotenabstand + + + // Stoerungen in Laenge und Breite + double dL = 22640.0 * StrictMath.sin(l) - + 4586.0 * StrictMath.sin(l - 2.0 * d) + + 2370.0 * StrictMath.sin(2.0 * d) + + 769.0 * StrictMath.sin(2.0 * l) - + 668.0 * StrictMath.sin(ls) - + 412.0 * StrictMath.sin(2.0 * f) - + 212.0 * StrictMath.sin(2.0 * l - 2.0 * d) - + 206.0 * StrictMath.sin(l + ls - 2.0 * d) + + 192.0 * StrictMath.sin(l + 2.0 * d) - + 165.0 * StrictMath.sin(ls - 2.0 * d) - + 125.0 * StrictMath.sin(d) - + 110.0 * StrictMath.sin(l + ls) + + 148.0 * StrictMath.sin(l - ls) - + 55.0 * StrictMath.sin(2.0 * f - 2.0 * d); + + double s = f + (dL + 412.0 * StrictMath.sin(2.0 * f) + + 541.0 * StrictMath.sin(ls)) / MoreMath.ARCS; + + double h = f - 2.0 * d; + + double n = -526.0 * StrictMath.sin(h) + + 44.0 * StrictMath.sin(l + h) - + 31.0 * StrictMath.sin(-l + h) - + 23.0 * StrictMath.sin(ls + h) + + 11.0 * StrictMath.sin(-ls + h) - + 25.0 * StrictMath.sin(-2.0 * l + f) + + 21.0 * StrictMath.sin(-l + f); + + // Ekliptikale Laenge und Breite + double l_Moon = MoreMath.PI2 * MoreMath.frac(l_0 + dL / 1296.0e3 ); // [rad] + double b_Moon = (18520.0 * StrictMath.sin(s) + n) / MoreMath.ARCS; // [rad] + + // Aequatoriale Koordinaten + Vec3D e_Moon = new Vec3D(new Polar(l_Moon, b_Moon)); + + Matrix3d matrix = new Matrix3d(); + matrix.setIdentity(); + matrix.rotX(-eps); + e_Moon.mul(matrix); + + double[] result = new double[2]; + + result[0] = e_Moon.getAzimut(); + result[1] = e_Moon.getElevation(); + + return result; + } +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/utils/astronomy/MoonPert.java b/Solar system/sss3d-source/sss3d/utils/astronomy/MoonPert.java new file mode 100644 index 0000000..0d32218 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/astronomy/MoonPert.java @@ -0,0 +1,267 @@ +/* + File: MoonPert.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/astronomy/MoonPert.java,v 1.3 2000/12/13 13:42:48 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:42:48 $ + $State: Exp $ + +*/ +package sss3d.utils.astronomy; + +import sss3d.calculations.*; +import sss3d.calculations.constants.AstronomicalConstants; + +/** + * This class add the permutation of the moon. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.3 $ + */ +public class MoonPert { + + private static final int O = 6; // Index-Versatz + private static final int DIM = 2 * O + 1; // Dimension eines Arbeits-Feldes + + private double dgam; // Langperiodische Stoerung + private double dlam, ds, gam1C, sinPi, n; // Periodische Stoerungen + private double l0, l, ls, f, d; // Mittlere Argumente der Mondbahn + private double[][] mCos, mSin; // cos und sin d. mittleren Argumente + private double[] sincos; + + /** + * Constructor + */ + public MoonPert() { + mCos = new double[DIM][4]; + mSin = new double[DIM][4]; + sincos = new double[2]; + } + + /** + * Initialization with the current time. + * + * @param time time in julianish century. + */ + public void init(double time) { + + double dL0, dl, dls, dF, dD; // Langperiodische Stoerungen + double t2, arg, fac; // Hilfsgroessen + int max; + + t2 = time * time; // Zeit + + // Stoerungen auf Null setzen + dlam = 0.0; + ds = 0.0; + gam1C = 0.0; + sinPi = 3422.7000; + n = 0.0; + + // Langperiodische Stoerungen + double s1 = sine(0.19833 + 0.05611 * time); + double s2 = sine(0.27869 + 0.04508 * time); + double s3 = sine(0.16827 - 0.36903 * time); + double s4 = sine(0.34734 - 5.37261 * time); + double s5 = sine(0.10498 - 5.37899 * time); + double s6 = sine(0.42681 - 0.41855 * time); + double s7 = sine(0.14943 - 5.37511 * time); + + dL0 = 0.84 * s1 + 0.31 * s2 + 14.27 * s3 + 7.26 * s4 + 0.28 * s5 + 0.24 * s6; + dl = 2.94 * s1 + 0.31 * s2 + 14.27 * s3 + 9.34 * s4 + 1.12 * s5 + 0.83 * s6; + dls =-6.40 * s1 - 1.89 * s6; + dF = 0.21 * s1 + 0.31 * s2 + 14.27 * s3 - 88.70 * s4 - 15.30 * s5 + + 0.24 * s6 - 1.86 * s7; + dD = dL0 - dls; + + dgam = -3332e-9 * sine(0.59734-5.37261 * time) + - 539e-9 * sine(0.35498-5.37899 * time) + - 64e-9 * sine(0.39943-5.37511 * time); + + // Mittlere Argumente der Mondbahn (inkl. langperiodische Korrekturen) + // L0 mittlere Laenge des Mondes + // l mittlere Anomalie des Mondes l' mittlere Anomalie der Sonne + // F mittlerer Knotenabstand D mittlere Elongation von der Sonne + + l0 = MoreMath.PI2 * MoreMath.frac(0.60643382 + 1336.85522467 * time - + 0.00000313 * t2) + dL0 / MoreMath.ARCS; + l = MoreMath.PI2 * MoreMath.frac(0.37489701 + 1325.55240982 * time + + 0.00002565 * t2) + dl / MoreMath.ARCS; + ls = MoreMath.PI2 * MoreMath.frac(0.99312619 + 99.99735956 * time - + 0.00000044 * t2) + dls / MoreMath.ARCS; + f = MoreMath.PI2 * MoreMath.frac(0.25909118 + 1342.22782980 * time - + 0.00000892 * t2) + dF / MoreMath.ARCS; + d = MoreMath.PI2 * MoreMath.frac(0.82736186 + 1236.85308708 * time - + 0.00000397 * t2) + dD / MoreMath.ARCS; + + + // Kosinus und Sinus von Vielfachen der mittleren Argumente + // einschliesslich saekularer Korrekturen + for(int i = 0; i <= 3; i++) { + switch(i) { + case 0: arg=l; max=4; fac=1.000002208; break; + case 1: arg=ls; max=3; fac=0.997504612 - 0.002495388 * time; break; + case 2: arg=f; max=4; fac=1.000002708 + 139.978 * dgam; break; + case 3: arg=d; max=6; fac=1.0; break; + default: arg=0.0;max=0; fac=0; + } + + mCos[O][i] = 1.0; + mSin[O][i] = 0.0; + + mCos[O+1][i] = StrictMath.cos(arg) * fac; + mSin[O+1][i] = StrictMath.sin(arg) * fac; + + mCos[O-1][i] = +mCos[O+1][i]; + mSin[O-1][i] = -mSin[O+1][i]; + + for(int j = 2; j <= max; j++) { + sincos = MoreMath.addThe(mCos[O+j-1][i], + mSin[O+j-1][i], + mCos[O+1][i], + mSin[O+1][i]); + mCos[O+j][i] = sincos[0]; + mSin[O+j][i] = sincos[1]; + mCos[O-j][i] = +mCos[O+j][i]; + mSin[O-j][i] = -mSin[O+j][i]; + } + } + } + + /** + * Calculate the sinus and cosinus. + * + * @param p an int value. + * @param q an int value. + * @param r an int value. + * @param s an int value. + * + * @return a double array with the values:
+ * double[0] = cos(p*l+q*ls+r*F+s*D).
+ * double[1] = sin(p*l+q*ls+r*F+s*D). + */ + public double[] term(int p, int q, int r, int s) { + + int[] i = new int[4]; + + i[0] = p; + i[1] = q; + i[2] = r; + i[3] = s; + + sincos[0] = 1.0; + sincos[1] = 0.0; + + for(int k = 0; k < i.length; k++) { + if(i[k] != 0) { + sincos = MoreMath.addThe(sincos[0], + sincos[1], + mCos[O+i[k]][k], + mSin[O+i[k]][k]); + } + } + return sincos; + } + + /** + * Summation of solar interference term. + * + * @param coeffl an double value. + * @param coeffS an double value. + * @param coeffg an double value. + * @param coeffP an double value. + * @param p an int value. + * @param q an int value. + * @param r an int value. + * @param s an int value. + */ + public void addSol(double coeffl, double coeffS, double coeffg, double coeffP, + int p, int q, int r, int s) { + sincos = term(p, q, r, s); + dlam += coeffl * sincos[1]; + ds += coeffS * sincos[1]; + gam1C += coeffg * sincos[0]; + sinPi += coeffP * sincos[0]; + } + + /** + * Summation of interference in the latitude. + * + * @param coeffN an double value. + * @param p an int value. + * @param q an int value. + * @param r an int value. + * @param s an int value. + */ + public void addN(double coeffN, int p, int q, int r, int s) { + sincos = term(p, q, r, s); + n += coeffN * sincos[1]; + } + + /** + * Interference in the ecliptical latitude by the venus and jupiter. + * + * @param time time in julianish century. + */ + public void planetary(double time) { + dlam += 0.82 * sine(0.7736 - 62.5512 * time) + + 0.31 * sine(0.0466 - 125.1025 * time) + + 0.35 * sine(0.5785 - 25.1042 * time) + + 0.66 * sine(0.4591 + 1335.8075 * time) + + 0.64 * sine(0.3130 - 91.5680 * time) + + 1.14 * sine(0.1480 + 1331.2898 * time) + + 0.21 * sine(0.5918 + 1056.5859 * time) + + 0.44 * sine(0.5784 + 1322.8595 * time) + + 0.24 * sine(0.2275 - 5.7374 * time) + + 0.28 * sine(0.2965 + 2.6929 * time) + + 0.33 * sine(0.3132 + 6.3368 * time); + } + + /** + * Give the current lambda angle of the moon positon. + * + * @return the lambda value. + */ + public double lambda() { + return MoreMath.modulo(l0 + dlam / MoreMath.ARCS, MoreMath.PI2); + } + + /** + * Give the current beta angle of the moon position. + * + * @return the lambda value. + */ + public double beta() { + double s = f + ds / MoreMath.ARCS; + double fac = 1.000002708 + 139.978 * dgam; + return (fac * (18518.511 + 1.189 + gam1C) * StrictMath.sin(s) - + 6.24 * StrictMath.sin(3 * s) + n) / MoreMath.ARCS; + } + + /** + * Give the current distance of the moon. + * + * @return the distance value. + */ + public double dist() { + return AstronomicalConstants.R_EARTH * MoreMath.ARCS / (sinPi * 0.999953253); + } + + /** + * Calculate the sinus of a modified x. + * + * @return the result of this arithmetic:
+ * sine = sin(2 * PI * frac(x)). + */ + private double sine(double x) { + return StrictMath.sin(MoreMath.PI2 * MoreMath.frac(x)); + } +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/utils/astronomy/PlanetPert.java b/Solar system/sss3d-source/sss3d/utils/astronomy/PlanetPert.java new file mode 100644 index 0000000..90cefd5 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/astronomy/PlanetPert.java @@ -0,0 +1,189 @@ +/* + File: PlanetPert.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/astronomy/PlanetPert.java,v 1.2 2000/12/12 16:00:25 portm Exp $ + $Author: portm $ + $Date: 2000/12/12 16:00:25 $ + $State: Exp $ + +*/ +package sss3d.utils.astronomy; + +import sss3d.calculations.*; + +/** + * This class add the permutation of all planets. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.2 $ + */ +public class PlanetPert { + + private static final int O = 16; // Index-Versatz + private static final int DIM = 2 * O + 1; // Dimension eines Arbeits-Feldes + + private double m_T; + private double m_cosM, m_sinM; + private double m_dl, m_db, m_dr; + private double m_u, m_v; + private double[] m_C, m_S, m_c, m_s; + + private double[] sincos; + + /** + * Constructor + */ + public PlanetPert() { + m_C = new double[DIM]; + m_S = new double[DIM]; + m_c = new double[DIM]; + m_s = new double[DIM]; + sincos = new double[2]; + } + + /** + * Initialization with the current time, the middle anomaly + * and the index zone. + * + * @param time time in julianish century. + * @param _M a double value. + * @param _I_min a int value. + * @param _I_max a int value. + * @param _m a double value. + * @param _i_min a int value. + * @param _i_max a int value. + */ + public void init(double time, + double _M, int _I_min, int _I_max, + double _m, int _i_min, int _i_max) { + init(time, _M, _I_min, _I_max, _m, _i_min, _i_max, 0.0); + } + + /** + * Initialization with the current time, the middle anomaly + * and the index zone. + * + * @param time time in julianish century. + * @param _M a double value. + * @param _I_min a int value. + * @param _I_max a int value. + * @param _m a double value. + * @param _i_min a int value. + * @param _i_max a int value. + * @param phi a double value. + */ + public void init(double time, + double _M, int _I_min, int _I_max, + double _m, int _i_min, int _i_max, + double phi) { + + m_dl = 0.0; m_dr = 0.0; m_db = 0.0; // Stoerungen auf Null setzen + m_T = time; // Setze Zeit + + // Cosinus und Sinus von Vielfachen von _M + m_cosM = StrictMath.cos(_M); + m_sinM = StrictMath.sin(_M); + + m_C[O] = StrictMath.cos(phi); + m_S[O] = StrictMath.sin(phi); + + for(int i = 0; i < _I_max; i++) { + sincos = MoreMath.addThe(m_C[O+i], m_S[O+i], +m_cosM, +m_sinM); + m_C[O+i+1] = sincos[0]; + m_S[O+i+1] = sincos[1]; + } + for(int i = 0; i > _I_min; i--) { + sincos = MoreMath.addThe(m_C[O+i], m_S[O+i], +m_cosM, -m_sinM); + m_C[O+i-1] = sincos[0]; + m_S[O+i-1] = sincos[1]; + } + + // Cosinus und Sinus von Vielfachen von m + m_c[O] = 1.0; + m_s[O] = 0.0; + + m_c[O+1] = StrictMath.cos(_m); + m_s[O+1] = StrictMath.sin(_m); + + m_c[O-1] = +m_c[O+1]; + m_s[O-1] = -m_s[O+1]; + + for(int i = 1; i < _i_max; i++) { + sincos = MoreMath.addThe(m_c[O+i], m_s[O+i], m_c[O+1], m_s[O+1]); + m_c[O+i+1] = sincos[0]; + m_s[O+i+1] = sincos[1]; + } + for(int i = -1; i > _i_min; i--) { + sincos = MoreMath.addThe(m_c[O+i], m_s[O+i], m_c[O-1], m_s[O-1]); + m_c[O+i-1] = sincos[0]; + m_s[O+i-1] = sincos[1]; + } + } + + /** + * Summation of the interference in longitude, distance and latitude. + * + * @param _I a int value. + * @param i a int value. + * @param iT a int value. + * @param dlc a double value. + * @param dls a double value. + * @param drc a double value. + * @param drs a double value. + * @param dbc a double value. + * @param dbs a double value. + */ + public void term(int _I, int i, int iT, + double dlc, double dls, + double drc, double drs, + double dbc, double dbs) { + + if(iT == 0) { + sincos = MoreMath.addThe(m_C[O+_I], m_S[O+_I], m_c[O+i], m_s[O+i]); + m_u = sincos[0]; + m_v = sincos[1]; + } else { + m_u *= m_T; + m_v *= m_T; + } + + m_dl += dlc * m_u + dls * m_v; + m_dr += drc * m_u + drs * m_v; + m_db += dbc * m_u + dbs * m_v; + } + + /** + * Give the current interference longitude. + * + * @return the longitude value. + */ + public double dl() { + return m_dl; + } + + /** + * Give the current interference distance. + * + * @return the distance value. + */ + public double dr() { + return m_dr; + } + + /** + * Give the current interference latitude. + * + * @return the latitude value. + */ + public double db() { + return m_db; + } +} diff --git a/Solar system/sss3d-source/sss3d/utils/astronomy/Planets.java b/Solar system/sss3d-source/sss3d/utils/astronomy/Planets.java new file mode 100644 index 0000000..9507b8d --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/astronomy/Planets.java @@ -0,0 +1,1270 @@ +/* + File: Planets.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/astronomy/Planets.java,v 1.4 2000/12/13 13:42:49 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:42:49 $ + $State: Exp $ + +*/ +package sss3d.utils.astronomy; + +import sss3d.calculations.constants.AstronomicalConstants; +import sss3d.calculations.*; +import sss3d.utils.SSS3dConstants; + +import javax.vecmath.Matrix3d; + +/** + * This class calculate the position of all planets. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.4 $ + */ +public class Planets { + + private static final double P = 1.3970; // Praezession in einem Jahrhundert [deg] + + private PlanetPert pert; + private SunPert s_pert; + + /** + * Constructor + */ + public Planets() { + // referenz zur Stoerungs Klasse + pert = new PlanetPert(); + s_pert = new SunPert(); + } + + /** + * Calculate the place- and velocity vector for the kepler ways. + * + * @param planet the current planet number for identification. + * @param time time in julianish century. + * + * @return an array with the place- and velocity vector.
+ * Vec3D[0] = heliocentrically place vector in [AE], ecliptic and + * equinox of the date.
+ * Vec3D[1] = heliocentrically velocity vector in [AE / d], ecliptic and + * equinox of the date. + */ + public Vec3D[] state(int planet, double time) { + + double a, e, m0, o, i, w, n, t0; + + // Bahnelemente; Ekliptik und Aequinoktium J2000 + switch(planet) { + case SSS3dConstants.SUN: + Vec3D[] vec = new Vec3D[2]; + vec[0] = new Vec3D(); // Nullvektor + vec[1] = new Vec3D(); // Nullvektor + return vec; + case SSS3dConstants.MERCURY: + a = 0.387099; e = 0.205634; m0 = 174.7947; n = 149472.6738; + o = 48.331; i = 7.0048; w = 77.4552; t0 = 0.0; + break; + case SSS3dConstants.VENUS: + a = 0.723332; e = 0.006773; m0 = 50.4071; n = 58517.8149; + o = 76.680; i = 3.3946; w = 131.5718; t0 = 0.0; + break; + case SSS3dConstants.EARTH: + a = 1.000000; e = 0.016709; m0 = 357.5256; n = 35999.3720; + o = 174.876; i = 0.0000; w = 102.9400; t0 = 0.0; + break; + case SSS3dConstants.MARS: + a = 1.523692; e = 0.093405; m0 = 19.3879; n = 19140.3023; + o = 49.557; i = 1.8496; w = 336.0590; t0 = 0.0; + break; + case SSS3dConstants.JUPITER: + a = 5.204267; e = 0.048775; m0 = 18.8185; n = 3033.6272; + o = 100.4908; i = 1.3046; w = 15.5576; t0 = 0.0; + break; + case SSS3dConstants.SATURN: + a = 9.582018; e = 0.055723; m0 = 320.3477; n = 1213.8664; + o = 113.6427; i = 2.4852; w = 89.6567; t0 = 0.0; + break; + case SSS3dConstants.URANUS: + a = 19.229412; e = 0.044406; m0 = 142.9559; n = 426.9282; + o = 73.9893; i = 0.7726; w = 170.5310; t0 = 0.0; + break; + case SSS3dConstants.NEPTUNE: + a = 30.103658; e = 0.011214; m0 = 267.7649; n = 217.9599; + o = 131.7942; i = 1.7680; w = 37.4435; t0 = 0.0; + break; + case SSS3dConstants.PLUTO: + a = 39.264230; e = 0.244672; m0 = 15.0233; n = 146.3183; + o = 110.2867; i = 17.1514; w = 224.0499; t0 = 0.0; + break; + default: + a = 0.0; e = 0.0; m0 = 0.0; n = 0.0; + o = 0.0; i = 0.0; w = 0.0; t0 = 0.0; + } + + Kepler kepler = new Kepler(); + + // Zustandsvektor bezogen auf Ekliptik und Aequinoktium des Datums + Vec3D[] vec = kepler.ellip(AstronomicalConstants.GM_SUN, + MoreMath.RAD * (m0 + n * (time - t0)), + a, + e); // bezogen auf Bahnebene + + Matrix3d pqr = kepler.gaussVec(MoreMath.RAD * (o + P * time), + MoreMath.RAD * i, + MoreMath.RAD * (w - o)); // Transform. -> Ekliptik + + vec[0].mul(pqr); // Ekliptikale + vec[1].mul(pqr); // Koordinaten + + return vec; + } + + /** + * Calculate the place vector of the kepler elements. + * + * @param planet the current planet number for identification. + * @param time time in julianish century. + * + * @return heliocentrically place vector in [AE], ecliptic and + * equinox of the date + */ + public Vec3D kepPosition(int planet, double time) { + Vec3D[] vec = state(planet, time); + return vec[0]; + } + + /** + * Calculate the velocity vector of the kepler elements. + * + * @param planet the current planet number for identification. + * @param time time in julianish century. + * + * @return heliocentrically velocity vector in [AE / d], ecliptic and + * equinox of the date + */ + public Vec3D kepVelocity(int planet, double time) { + Vec3D[] vec = state(planet, time); + return vec[1]; + } + + /** + * Calculate the position of mercury with analytic series expansion. + * + * @param time time in julianish century. + * + * @return heliocentrically place vector in [AE], ecliptic and + * equinox of the date + */ + public Vec3D mercuryPos(double time) { + + double m1, m2, m3, m5, m6; // Mittlere Anomalien + double dl, dr, db; // Korrekturen in Laenge ["], + // Entfernung [AE] und Breite ["] + double l, b, r; // Ekliptikale Koordinaten + + // Mittlere Anomalien der Planeten in [rad] + m1 = MoreMath.PI2 * MoreMath.frac(0.4855407 + 415.2014314 * time); + m2 = MoreMath.PI2 * MoreMath.frac(0.1394222 + 162.5490444 * time); + m3 = MoreMath.PI2 * MoreMath.frac(0.9937861 + 99.9978139 * time); + m5 = MoreMath.PI2 * MoreMath.frac(0.0558417 + 8.4298417 * time); + m6 = MoreMath.PI2 * MoreMath.frac(0.8823333 + 3.3943333 * time); + + // Keplerbewegung und Stoerungen durch Venus + pert.init(time, m1, -1, 9, m2, -5, 0); + + pert.term( 1, 0,0, 259.74,84547.39,-78342.34, 0.01,11683.22,21203.79); + pert.term( 1, 0,1, 2.30, 5.04, -7.52, 0.02, 138.55, -71.01); + pert.term( 1, 0,2, 0.01, -0.01, 0.01, 0.01, -0.19, -0.54); + pert.term( 2, 0,0,-549.71,10394.44, -7955.45, 0.00, 2390.29, 4306.79); + pert.term( 2, 0,1, -4.77, 8.97, -1.53, 0.00, 28.49, -14.18); + pert.term( 2, 0,2, 0.00, 0.00, 0.00, 0.00, -0.04, -0.11); + pert.term( 3, 0,0,-234.04, 1748.74, -1212.86, 0.00, 535.41, 984.33); + pert.term( 3, 0,1, -2.03, 3.48, -0.35, 0.00, 6.56, -2.91); + pert.term( 4, 0,0, -77.64, 332.63, -219.23, 0.00, 124.40, 237.03); + pert.term( 4, 0,1, -0.70, 1.10, -0.08, 0.00, 1.59, -0.59); + pert.term( 5, 0,0, -23.59, 67.28, -43.54, 0.00, 29.44, 58.77); + pert.term( 5, 0,1, -0.23, 0.32, -0.02, 0.00, 0.39, -0.11); + pert.term( 6, 0,0, -6.86, 14.06, -9.18, 0.00, 7.03, 14.84); + pert.term( 6, 0,1, -0.07, 0.09, -0.01, 0.00, 0.10, -0.02); + pert.term( 7, 0,0, -1.94, 2.98, -2.02, 0.00, 1.69, 3.80); + pert.term( 8, 0,0, -0.54, 0.63, -0.46, 0.00, 0.41, 0.98); + pert.term( 9, 0,0, -0.15, 0.13, -0.11, 0.00, 0.10, 0.25); + pert.term(-1,-2,0, -0.17, -0.06, -0.05, 0.14, -0.06, -0.07); + pert.term( 0,-1,0, 0.24, -0.16, -0.11,-0.16, 0.04, -0.01); + pert.term( 0,-2,0, -0.68, -0.25, -0.26, 0.73, -0.16, -0.18); + pert.term( 0,-5,0, 0.37, 0.08, 0.06,-0.28, 0.13, 0.12); + pert.term( 1,-1,0, 0.58, -0.41, 0.26, 0.36, 0.01, -0.01); + pert.term( 1,-2,0, -3.51, -1.23, 0.23,-0.63, -0.05, -0.06); + pert.term( 1,-3,0, 0.08, 0.53, -0.11, 0.04, 0.02, -0.09); + pert.term( 1,-5,0, 1.44, 0.31, 0.30,-1.39, 0.34, 0.29); + pert.term( 2,-1,0, 0.15, -0.11, 0.09, 0.12, 0.02, -0.04); + pert.term( 2,-2,0, -1.99, -0.68, 0.65,-1.91, -0.20, 0.03); + pert.term( 2,-3,0, -0.34, -1.28, 0.97,-0.26, 0.03, 0.03); + pert.term( 2,-4,0, -0.33, 0.35, -0.13,-0.13, -0.01, 0.00); + pert.term( 2,-5,0, 7.19, 1.56, -0.05, 0.12, 0.06, 0.05); + pert.term( 3,-2,0, -0.52, -0.18, 0.13,-0.39, -0.16, 0.03); + pert.term( 3,-3,0, -0.11, -0.42, 0.36,-0.10, -0.05, -0.05); + pert.term( 3,-4,0, -0.19, 0.22, -0.23,-0.20, -0.01, 0.02); + pert.term( 3,-5,0, 2.77, 0.49, -0.45, 2.56, 0.40, -0.12); + pert.term( 4,-5,0, 0.67, 0.12, -0.09, 0.47, 0.24, -0.08); + pert.term( 5,-5,0, 0.18, 0.03, -0.02, 0.12, 0.09, -0.03); + + dl = pert.dl(); dr = pert.dr(); db = pert.db(); + + // Stoerungen durch die Erde + pert.init(time, m1, 0 ,2, m3, -4, -1); + + pert.term( 0,-4,0, -0.11, -0.07, -0.08, 0.11, -0.02, -0.04); + pert.term( 1,-1,0, 0.10, -0.20, 0.15, 0.07, 0.00, 0.00); + pert.term( 1,-2,0, -0.35, 0.28, -0.13,-0.17, -0.01, 0.00); + pert.term( 1,-4,0, -0.67, -0.45, 0.00, 0.01, -0.01, -0.01); + pert.term( 2,-2,0, -0.20, 0.16, -0.16,-0.20, -0.01, 0.02); + pert.term( 2,-3,0, 0.13, -0.02, 0.02, 0.14, 0.01, 0.00); + pert.term( 2,-4,0, -0.33, -0.18, 0.17,-0.31, -0.04, 0.00); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + // Stoerungen durch Jupiter + pert.init(time, m1, -1, 3, m5, -3, -1); + + pert.term(-1,-1,0, -0.08, 0.16, 0.15, 0.08, -0.04, 0.01); + pert.term(-1,-2,0, 0.10, -0.06, -0.07,-0.12, 0.07, -0.01); + pert.term( 0,-1,0, -0.31, 0.48, -0.02, 0.13, -0.03, -0.02); + pert.term( 0,-2,0, 0.42, -0.26, -0.38,-0.50, 0.20, -0.03); + pert.term( 1,-1,0, -0.70, 0.01, -0.02,-0.63, 0.00, 0.03); + pert.term( 1,-2,0, 2.61, -1.97, 1.74, 2.32, 0.01, 0.01); + pert.term( 1,-3,0, 0.32, -0.15, 0.13, 0.28, 0.00, 0.00); + pert.term( 2,-1,0, -0.18, 0.01, 0.00,-0.13, -0.03, 0.03); + pert.term( 2,-2,0, 0.75, -0.56, 0.45, 0.60, 0.08, -0.17); + pert.term( 3,-2,0, 0.20, -0.15, 0.10, 0.14, 0.04, -0.08); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + + // Stoerungen durch Saturn + pert.init(time, m1, 1, 1, m6, -2, -2); + + pert.term( 1,-2,0, -0.19, 0.33, 0.00, 0.00, 0.00, 0.00); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + + // Ekliptikale Koordinaten ([rad],[AE]) + dl += 2.8 + 3.2 * time; + + l = MoreMath.PI2 * MoreMath.frac(0.2151379 + m1 / MoreMath.PI2 + + ((5601.7 + 1.1 * time) * time + dl) / 1296.0e3); + r = 0.3952829 + 0.0000016 * time + dr * 1.0e-6; + b = (-2522.15 + (-30.18 + 0.04 * time) * time + db ) / MoreMath.ARCS; + + return new Vec3D(new Polar(l, b, r)); // Ort + } + + /** + * Calculate the position of venus with analytic series expansion. + * + * @param time time in julianish century. + * + * @return heliocentrically place vector in [AE], ecliptic and + * equinox of the date + */ + public Vec3D venusPos(double time) { + + double m1,m2,m3,m4,m5,m6; // Mittlere Anomalien + double dl, dr, db; // Korrekturen in Laenge ["], + // Entfernung [AE] und Breite ["] + double l,b,r; // Ekliptikale Koordinaten + + // Mittlere Anomalien der Planeten in [rad] + m1 = MoreMath.PI2 * MoreMath.frac(0.4861431 + 415.2018375 * time); + m2 = MoreMath.PI2 * MoreMath.frac(0.1400197 + 162.5494552 * time); + m3 = MoreMath.PI2 * MoreMath.frac(0.9944153 + 99.9982208 * time); + m4 = MoreMath.PI2 * MoreMath.frac(0.0556297 + 53.1674631 * time); + m5 = MoreMath.PI2 * MoreMath.frac(0.0567028 + 8.4305083 * time); + m6 = MoreMath.PI2 * MoreMath.frac(0.8830539 + 3.3947206 * time); + + // Stoerungen durch Merkur + pert.init(time, m2, 1, 5, m1, -2, -1); + + pert.term(1,-1,0, 0.00, 0.00, 0.06, -0.09, 0.01, 0.00); + pert.term(2,-1,0, 0.25, -0.09, -0.09, -0.27, 0.00, 0.00); + pert.term(4,-2,0, -0.07, -0.08, -0.14, 0.14, -0.01, -0.01); + pert.term(5,-2,0, -0.35, 0.08, 0.02, 0.09, 0.00, 0.00); + + dl = pert.dl(); dr = pert.dr(); db = pert.db(); + + // Keplerbewegung und Stoerungen durch die Erde + pert.init(time, m2, 1, 8, m3, -8, 0); + + pert.term(1, 0,0, 2.37,2793.23,-4899.07, 0.11,9995.27,7027.22); + pert.term(1, 0,1, 0.10, -19.65, 34.40, 0.22, 64.95, -86.10); + pert.term(1, 0,2, 0.06, 0.04, -0.07, 0.11, -0.55, -0.07); + pert.term(2, 0,0,-170.42, 73.13, -16.59, 0.00, 67.71, 47.56); + pert.term(2, 0,1, 0.93, 2.91, 0.23, 0.00, -0.03, -0.92); + pert.term(3, 0,0, -2.31, 0.90, -0.08, 0.00, 0.04, 2.09); + pert.term(1,-1,0, -2.38, -4.27, 3.27, -1.82, 0.00, 0.00); + pert.term(1,-2,0, 0.09, 0.00, -0.08, 0.05, -0.02, -0.25); + pert.term(2,-2,0, -9.57, -5.93, 8.57,-13.83, -0.01, -0.01); + pert.term(2,-3,0, -2.47, -2.40, 0.83, -0.95, 0.16, 0.24); + pert.term(3,-2,0, -0.09, -0.05, 0.08, -0.13, -0.28, 0.12); + pert.term(3,-3,0, 7.12, 0.32, -0.62, 13.76, -0.07, 0.01); + pert.term(3,-4,0, -0.65, -0.17, 0.18, -0.73, 0.10, 0.05); + pert.term(3,-5,0, -1.08, -0.95, -0.17, 0.22, -0.03, -0.03); + pert.term(4,-3,0, 0.06, 0.00, -0.01, 0.08, 0.14, -0.18); + pert.term(4,-4,0, 0.93, -0.46, 1.06, 2.13, -0.01, 0.01); + pert.term(4,-5,0, -1.53, 0.38, -0.64, -2.54, 0.27, 0.00); + pert.term(4,-6,0, -0.17, -0.05, 0.03, -0.11, 0.02, 0.00); + pert.term(5,-5,0, 0.18, -0.28, 0.71, 0.47, -0.02, 0.04); + pert.term(5,-6,0, 0.15, -0.14, 0.30, 0.31, -0.04, 0.03); + pert.term(5,-7,0, -0.08, 0.02, -0.03, -0.11, 0.01, 0.00); + pert.term(5,-8,0, -0.23, 0.00, 0.01, -0.04, 0.00, 0.00); + pert.term(6,-6,0, 0.01, -0.14, 0.39, 0.04, 0.00, -0.01); + pert.term(6,-7,0, 0.02, -0.05, 0.12, 0.04, -0.01, 0.01); + pert.term(6,-8,0, 0.10, -0.10, 0.19, 0.19, -0.02, 0.02); + pert.term(7,-7,0, -0.03, -0.06, 0.18, -0.08, 0.00, 0.00); + pert.term(8,-8,0, -0.03, -0.02, 0.06, -0.08, 0.00, 0.00); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + + // Stoerungen durch Mars + pert.init(time, m2, 1, 2, m4, -3, -2); + + pert.term(1,-3,0, -0.65, 1.02, -0.04, -0.02, -0.02, 0.00); + pert.term(2,-2,0, -0.05, 0.04, -0.09, -0.10, 0.00, 0.00); + pert.term(2,-3,0, -0.50, 0.45, -0.79, -0.89, 0.01, 0.03); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + + // Stoerungen durch Jupiter + pert.init(time, m2, 0, 3, m5, -3, -1); + + pert.term(0,-1,0, -0.05, 1.56, 0.16, 0.04, -0.08, -0.04); + pert.term(1,-1,0, -2.62, 1.40, -2.35, -4.40, 0.02, 0.03); + pert.term(1,-2,0, -0.47, -0.08, 0.12, -0.76, 0.04, -0.18); + pert.term(2,-2,0, -0.73, -0.51, 1.27, -1.82, -0.01, 0.01); + pert.term(2,-3,0, -0.14, -0.10, 0.25, -0.34, 0.00, 0.00); + pert.term(3,-3,0, -0.01, 0.04, -0.11, -0.02, 0.00, 0.00); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + + // Stoerungen durch Saturn + pert.init(time, m2, 0, 1, m6, -1, -1); + + pert.term(0,-1,0, 0.00, 0.21, 0.00, 0.00, 0.00, -0.01); + pert.term(1,-1,0, -0.11, -0.14, 0.24, -0.20, 0.01, 0.00); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + + // Ekliptikale Koordinaten ([rad],[AE]) + dl += 2.74 * StrictMath.sin(MoreMath.PI2 * (0.0764 + 0.4174 * time)) + + 0.27 * StrictMath.sin(MoreMath.PI2 * (0.9201 + 0.3307 * time)); + dl += 1.9 + 1.8 * time; + + l = MoreMath.PI2 * MoreMath.frac(0.3654783 + m2 / MoreMath.PI2 + + ((5071.2 + 1.1 * time) * time + dl) / 1296.0e3); + r = 0.7233482 - 0.0000002 * time + dr * 1.0e-6; + b = (-67.70 + (0.04 + 0.01 * time) * time + db ) / MoreMath.ARCS; + + return new Vec3D(new Polar(l, b, r)); // Ort + } + + /** + * Calculate the position of earth with analytic series expansion. + * + * @param time time in julianish century. + * + * @return heliocentrically place vector in [AE], ecliptic and + * equinox of the date + */ + public Vec3D earthPos(double time) { + + double m2,m3,m4,m5,m6; // Mittlere Anomalien + double d, a, u; // Mittlere Argumente der Mondbahn + double dl, dr, db; // Korrekturen in Laenge ["], + // Entfernung [AE] und Breite ["] + double l,b,r; // Ekliptikale Koordinaten + Vec3D rvec; // Ort + + // Mittlere Anomalien der Planeten und mittlere Argumente der Mondbahn in [rad] + m2 = MoreMath.PI2 * MoreMath.frac( 0.1387306 + 162.5485917 * time); + m3 = MoreMath.PI2 * MoreMath.frac( 0.9931266 + 99.9973604 * time); + m4 = MoreMath.PI2 * MoreMath.frac( 0.0543250 + 53.1666028 * time); + m5 = MoreMath.PI2 * MoreMath.frac( 0.0551750 + 8.4293972 * time); + m6 = MoreMath.PI2 * MoreMath.frac( 0.8816500 + 3.3938722 * time); + + d = MoreMath.PI2 * MoreMath.frac( 0.8274 + 1236.8531 * time); + a = MoreMath.PI2 * MoreMath.frac( 0.3749 + 1325.5524 * time); + u = MoreMath.PI2 * MoreMath.frac( 0.2591 + 1342.2278 * time); + + // Keplerbewegung und Stoerungen durch Venus + s_pert.init(time, m3, 0, 7, m2, -6, 0); + + s_pert.term( 1, 0,0,-0.22,6892.76,-16707.37, -0.54, 0.00, 0.00); + s_pert.term( 1, 0,1,-0.06, -17.35, 42.04, -0.15, 0.00, 0.00); + s_pert.term( 1, 0,2,-0.01, -0.05, 0.13, -0.02, 0.00, 0.00); + s_pert.term( 2, 0,0, 0.00, 71.98, -139.57, 0.00, 0.00, 0.00); + s_pert.term( 2, 0,1, 0.00, -0.36, 0.70, 0.00, 0.00, 0.00); + s_pert.term( 3, 0,0, 0.00, 1.04, -1.75, 0.00, 0.00, 0.00); + s_pert.term( 0,-1,0, 0.03, -0.07, -0.16, -0.07, 0.02,-0.02); + s_pert.term( 1,-1,0, 2.35, -4.23, -4.75, -2.64, 0.00, 0.00); + s_pert.term( 1,-2,0,-0.10, 0.06, 0.12, 0.20, 0.02, 0.00); + s_pert.term( 2,-1,0,-0.06, -0.03, 0.20, -0.01, 0.01,-0.09); + s_pert.term( 2,-2,0,-4.70, 2.90, 8.28, 13.42, 0.01,-0.01); + s_pert.term( 3,-2,0, 1.80, -1.74, -1.44, -1.57, 0.04,-0.06); + s_pert.term( 3,-3,0,-0.67, 0.03, 0.11, 2.43, 0.01, 0.00); + s_pert.term( 4,-2,0, 0.03, -0.03, 0.10, 0.09, 0.01,-0.01); + s_pert.term( 4,-3,0, 1.51, -0.40, -0.88, -3.36, 0.18,-0.10); + s_pert.term( 4,-4,0,-0.19, -0.09, -0.38, 0.77, 0.00, 0.00); + s_pert.term( 5,-3,0, 0.76, -0.68, 0.30, 0.37, 0.01, 0.00); + s_pert.term( 5,-4,0,-0.14, -0.04, -0.11, 0.43,-0.03, 0.00); + s_pert.term( 5,-5,0,-0.05, -0.07, -0.31, 0.21, 0.00, 0.00); + s_pert.term( 6,-4,0, 0.15, -0.04, -0.06, -0.21, 0.01, 0.00); + s_pert.term( 6,-5,0,-0.03, -0.03, -0.09, 0.09,-0.01, 0.00); + s_pert.term( 6,-6,0, 0.00, -0.04, -0.18, 0.02, 0.00, 0.00); + s_pert.term( 7,-5,0,-0.12, -0.03, -0.08, 0.31,-0.02,-0.01); + + dl = s_pert.dl(); dr = s_pert.dr(); db = s_pert.db(); + + + // Stoerungen durch Mars + s_pert.init(time, m3, 1, 5, m4, -8, -1); + + s_pert.term( 1,-1,0,-0.22, 0.17, -0.21, -0.27, 0.00, 0.00); + s_pert.term( 1,-2,0,-1.66, 0.62, 0.16, 0.28, 0.00, 0.00); + s_pert.term( 2,-2,0, 1.96, 0.57, -1.32, 4.55, 0.00, 0.01); + s_pert.term( 2,-3,0, 0.40, 0.15, -0.17, 0.46, 0.00, 0.00); + s_pert.term( 2,-4,0, 0.53, 0.26, 0.09, -0.22, 0.00, 0.00); + s_pert.term( 3,-3,0, 0.05, 0.12, -0.35, 0.15, 0.00, 0.00); + s_pert.term( 3,-4,0,-0.13, -0.48, 1.06, -0.29, 0.01, 0.00); + s_pert.term( 3,-5,0,-0.04, -0.20, 0.20, -0.04, 0.00, 0.00); + s_pert.term( 4,-4,0, 0.00, -0.03, 0.10, 0.04, 0.00, 0.00); + s_pert.term( 4,-5,0, 0.05, -0.07, 0.20, 0.14, 0.00, 0.00); + s_pert.term( 4,-6,0,-0.10, 0.11, -0.23, -0.22, 0.00, 0.00); + s_pert.term( 5,-7,0,-0.05, 0.00, 0.01, -0.14, 0.00, 0.00); + s_pert.term( 5,-8,0, 0.05, 0.01, -0.02, 0.10, 0.00, 0.00); + + dl += s_pert.dl(); dr += s_pert.dr(); db += s_pert.db(); + + + // Stoerungen durch Jupiter + s_pert.init(time, m3, -1, 3, m5, -4, -1); + + s_pert.term(-1,-1,0, 0.01, 0.07, 0.18, -0.02, 0.00,-0.02); + s_pert.term( 0,-1,0,-0.31, 2.58, 0.52, 0.34, 0.02, 0.00); + s_pert.term( 1,-1,0,-7.21, -0.06, 0.13,-16.27, 0.00,-0.02); + s_pert.term( 1,-2,0,-0.54, -1.52, 3.09, -1.12, 0.01,-0.17); + s_pert.term( 1,-3,0,-0.03, -0.21, 0.38, -0.06, 0.00,-0.02); + s_pert.term( 2,-1,0,-0.16, 0.05, -0.18, -0.31, 0.01, 0.00); + s_pert.term( 2,-2,0, 0.14, -2.73, 9.23, 0.48, 0.00, 0.00); + s_pert.term( 2,-3,0, 0.07, -0.55, 1.83, 0.25, 0.01, 0.00); + s_pert.term( 2,-4,0, 0.02, -0.08, 0.25, 0.06, 0.00, 0.00); + s_pert.term( 3,-2,0, 0.01, -0.07, 0.16, 0.04, 0.00, 0.00); + s_pert.term( 3,-3,0,-0.16, -0.03, 0.08, -0.64, 0.00, 0.00); + s_pert.term( 3,-4,0,-0.04, -0.01, 0.03, -0.17, 0.00, 0.00); + + dl += s_pert.dl(); dr += s_pert.dr(); db += s_pert.db(); + + + // Stoerungen durch Saturn + s_pert.init(time, m3, 0, 2, m6, -2, -1); + + s_pert.term( 0,-1,0, 0.00, 0.32, 0.01, 0.00, 0.00, 0.00); + s_pert.term( 1,-1,0,-0.08, -0.41, 0.97, -0.18, 0.00,-0.01); + s_pert.term( 1,-2,0, 0.04, 0.10, -0.23, 0.10, 0.00, 0.00); + s_pert.term( 2,-2,0, 0.04, 0.10, -0.35, 0.13, 0.00, 0.00); + + dl += s_pert.dl(); dr += s_pert.dr(); db += s_pert.db(); + + + // Abstand des Schwerpunkts des Erde-Mond-Systems vom Erdmittelpunkt + dl += 6.45 * StrictMath.sin(d) - + 0.42 * StrictMath.sin(d - a) + + 0.18 * StrictMath.sin(d + a) + + 0.17 * StrictMath.sin(d - m3) - + 0.06 * StrictMath.sin(d + m3); + + dr += 30.76 * StrictMath.cos(d) - + 3.06 * StrictMath.cos(d - a) + + 0.85 * StrictMath.cos(d + a) - + 0.58 * StrictMath.cos(d + m3) + + 0.57 * StrictMath.cos(d - m3); + + db += 0.576 * StrictMath.sin(u); + + + // Langperiodische Stoerungen + dl += 6.40 * StrictMath.sin(MoreMath.PI2 * (0.6983 + 0.0561 * time)) + + 1.87 * StrictMath.sin(MoreMath.PI2 * (0.5764 + 0.4174 * time)) + + 0.27 * StrictMath.sin(MoreMath.PI2 * (0.4189 + 0.3306 * time)) + + 0.20 * StrictMath.sin(MoreMath.PI2 * (0.3581 + 2.4814 * time)); + + + // Ekliptikale Koordinaten ([rad],[AE]) + l = MoreMath.PI2 * MoreMath.frac(0.7859453 + m3 / MoreMath.PI2 + + ((6191.2 + 1.1 * time) * time + dl ) / 1296.0e3); + r = 1.0001398 - 0.0000007 * time + dr * 1.0e-6; + b = db / MoreMath.ARCS; + + rvec = new Vec3D(new Polar(l, b, r)); + // die Koordinate wurde (die Erde als Zentrum!) + // fr die Sonnen berechnet. Darum muss beim Vektor die + // Vorzeichen gendert werden! + rvec.negate(); + + return rvec; // Ort + } + + /** + * Calculate the position of mars with analytic series expansion. + * + * @param time time in julianish century. + * + * @return heliocentrically place vector in [AE], ecliptic and + * equinox of the date + */ + public Vec3D marsPos(double time) { + + double m2,m3,m4,m5,m6; // Mittlere Anomalien + double dl, dr, db; // Korrekturen in Laenge ["], + // Entfernung [AE] und Breite ["] + double l,b,r; // Ekliptikale Koordinaten + + // Mittlere Anomalien der Planeten in [rad] + m2 = MoreMath.PI2 * MoreMath.frac( 0.1382208 + 162.5482542 * time); + m3 = MoreMath.PI2 * MoreMath.frac( 0.9926208 + 99.9970236 * time); + m4 = MoreMath.PI2 * MoreMath.frac( 0.0538553 + 53.1662736 * time); + m5 = MoreMath.PI2 * MoreMath.frac( 0.0548944 + 8.4290611 * time); + m6 = MoreMath.PI2 * MoreMath.frac( 0.8811167 + 3.3935250 * time); + + // Stoerungen durch Venus + pert.init(time, m4, 0, 7, m2, -2, -1); + + pert.term( 0,-1,0, -0.01, -0.03, 0.10, -0.04, 0.00, 0.00); + pert.term( 1,-1,0, 0.05, 0.10, -2.08, 0.75, 0.00, 0.00); + pert.term( 2,-1,0, -0.25, -0.57, -2.58, 1.18, 0.05, -0.04); + pert.term( 2,-2,0, 0.02, 0.02, 0.13, -0.14, 0.00, 0.00); + pert.term( 3,-1,0, 3.41, 5.38, 1.87, -1.15, 0.01, -0.01); + pert.term( 3,-2,0, 0.02, 0.02, 0.11, -0.13, 0.00, 0.00); + pert.term( 4,-1,0, 0.32, 0.49, -1.88, 1.21, -0.07, 0.07); + pert.term( 4,-2,0, 0.03, 0.03, 0.12, -0.14, 0.00, 0.00); + pert.term( 5,-1,0, 0.04, 0.06, -0.17, 0.11, -0.01, 0.01); + pert.term( 5,-2,0, 0.11, 0.09, 0.35, -0.43, -0.01, 0.01); + pert.term( 6,-2,0, -0.36, -0.28, -0.20, 0.25, 0.00, 0.00); + pert.term( 7,-2,0, -0.03, -0.03, 0.11, -0.13, 0.00, -0.01); + + dl = pert.dl(); dr = pert.dr(); db = pert.db(); + + // Keplerbewegung und Stoerungen durch die Erde + pert.init(time, m4, -1, 16, m3, -9, 0); + + pert.term( 1, 0,0, -5.32,38481.97,-141856.04, 0.40,-6321.67,1876.89); + pert.term( 1, 0,1, -1.12, 37.98, -138.67, -2.93, 37.28, 117.48); + pert.term( 1, 0,2, -0.32, -0.03, 0.12, -1.19, 1.04, -0.40); + pert.term( 2, 0,0, 28.28, 2285.80, -6608.37, 0.00, -589.35, 174.81); + pert.term( 2, 0,1, 1.64, 3.37, -12.93, 0.00, 2.89, 11.10); + pert.term( 2, 0,2, 0.00, 0.00, 0.00, 0.00, 0.10, -0.03); + pert.term( 3, 0,0, 5.31, 189.29, -461.81, 0.00, -61.98, 18.53); + pert.term( 3, 0,1, 0.31, 0.35, -1.36, 0.00, 0.25, 1.19); + pert.term( 4, 0,0, 0.81, 17.96, -38.26, 0.00, -6.88, 2.08); + pert.term( 4, 0,1, 0.05, 0.04, -0.15, 0.00, 0.02, 0.14); + pert.term( 5, 0,0, 0.11, 1.83, -3.48, 0.00, -0.79, 0.24); + pert.term( 6, 0,0, 0.02, 0.20, -0.34, 0.00, -0.09, 0.03); + pert.term(-1,-1,0, 0.09, 0.06, 0.14, -0.22, 0.02, -0.02); + pert.term( 0,-1,0, 0.72, 0.49, 1.55, -2.31, 0.12, -0.10); + pert.term( 1,-1,0, 7.00, 4.92, 13.93,-20.48, 0.08, -0.13); + pert.term( 2,-1,0, 13.08, 4.89, -4.53, 10.01, -0.05, 0.13); + pert.term( 2,-2,0, 0.14, 0.05, -0.48, -2.66, 0.01, 0.14); + pert.term( 3,-1,0, 1.38, 0.56, -2.00, 4.85, -0.01, 0.19); + pert.term( 3,-2,0, -6.85, 2.68, 8.38, 21.42, 0.00, 0.03); + pert.term( 3,-3,0, -0.08, 0.20, 1.20, 0.46, 0.00, 0.00); + pert.term( 4,-1,0, 0.16, 0.07, -0.19, 0.47, -0.01, 0.05); + pert.term( 4,-2,0, -4.41, 2.14, -3.33, -7.21, -0.07, -0.09); + pert.term( 4,-3,0, -0.12, 0.33, 2.22, 0.72, -0.03, -0.02); + pert.term( 4,-4,0, -0.04, -0.06, -0.36, 0.23, 0.00, 0.00); + pert.term( 5,-2,0, -0.44, 0.21, -0.70, -1.46, -0.06, -0.07); + pert.term( 5,-3,0, 0.48, -2.60, -7.25, -1.37, 0.00, 0.00); + pert.term( 5,-4,0, -0.09, -0.12, -0.66, 0.50, 0.00, 0.00); + pert.term( 5,-5,0, 0.03, 0.00, 0.01, -0.17, 0.00, 0.00); + pert.term( 6,-2,0, -0.05, 0.03, -0.07, -0.15, -0.01, -0.01); + pert.term( 6,-3,0, 0.10, -0.96, 2.36, 0.30, 0.04, 0.00); + pert.term( 6,-4,0, -0.17, -0.20, -1.09, 0.94, 0.02, -0.02); + pert.term( 6,-5,0, 0.05, 0.00, 0.00, -0.30, 0.00, 0.00); + pert.term( 7,-3,0, 0.01, -0.10, 0.32, 0.04, 0.02, 0.00); + pert.term( 7,-4,0, 0.86, 0.77, 1.86, -2.01, 0.01, -0.01); + pert.term( 7,-5,0, 0.09, -0.01, -0.05, -0.44, 0.00, 0.00); + pert.term( 7,-6,0, -0.01, 0.02, 0.10, 0.08, 0.00, 0.00); + pert.term( 8,-4,0, 0.20, 0.16, -0.53, 0.64, -0.01, 0.02); + pert.term( 8,-5,0, 0.17, -0.03, -0.14, -0.84, 0.00, 0.01); + pert.term( 8,-6,0, -0.02, 0.03, 0.16, 0.09, 0.00, 0.00); + pert.term( 9,-5,0, -0.55, 0.15, 0.30, 1.10, 0.00, 0.00); + pert.term( 9,-6,0, -0.02, 0.04, 0.20, 0.10, 0.00, 0.00); + pert.term(10,-5,0, -0.09, 0.03, -0.10, -0.33, 0.00, -0.01); + pert.term(10,-6,0, -0.05, 0.11, 0.48, 0.21, -0.01, 0.00); + pert.term(11,-6,0, 0.10, -0.35, -0.52, -0.15, 0.00, 0.00); + pert.term(11,-7,0, -0.01, -0.02, -0.10, 0.07, 0.00, 0.00); + pert.term(12,-6,0, 0.01, -0.04, 0.18, 0.04, 0.01, 0.00); + pert.term(12,-7,0, -0.05, -0.07, -0.29, 0.20, 0.01, 0.00); + pert.term(13,-7,0, 0.23, 0.27, 0.25, -0.21, 0.00, 0.00); + pert.term(14,-7,0, 0.02, 0.03, -0.10, 0.09, 0.00, 0.00); + pert.term(14,-8,0, 0.05, 0.01, 0.03, -0.23, 0.00, 0.03); + pert.term(15,-8,0, -1.53, 0.27, 0.06, 0.42, 0.00, 0.00); + pert.term(16,-8,0, -0.14, 0.02, -0.10, -0.55, -0.01, -0.02); + pert.term(16,-9,0, 0.03, -0.06, -0.25, -0.11, 0.00, 0.00); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + // Stoerungen durch Jupiter + pert.init(time, m4, -2, 5, m5, -5, -1); + + pert.term(-2,-1,0, 0.05, 0.03, 0.08, -0.14, 0.01, -0.01); + pert.term(-1,-1,0, 0.39, 0.27, 0.92, -1.50, -0.03, -0.06); + pert.term(-1,-2,0, -0.16, 0.03, 0.13, 0.67, -0.01, 0.06); + pert.term(-1,-3,0, -0.02, 0.01, 0.05, 0.09, 0.00, 0.01); + pert.term( 0,-1,0, 3.56, 1.13, -5.41, -7.18, -0.25, -0.24); + pert.term( 0,-2,0, -1.44, 0.25, 1.24, 7.96, 0.02, 0.31); + pert.term( 0,-3,0, -0.21, 0.11, 0.55, 1.04, 0.01, 0.05); + pert.term( 0,-4,0, -0.02, 0.02, 0.11, 0.11, 0.00, 0.01); + pert.term( 1,-1,0, 16.67, -19.15, 61.00, 53.36, -0.06, -0.07); + pert.term( 1,-2,0,-21.64, 3.18, -7.77,-54.64, -0.31, 0.50); + pert.term( 1,-3,0, -2.82, 1.45, -2.53, -5.73, 0.01, 0.07); + pert.term( 1,-4,0, -0.31, 0.28, -0.34, -0.51, 0.00, 0.00); + pert.term( 2,-1,0, 2.15, -2.29, 7.04, 6.94, 0.33, 0.19); + pert.term( 2,-2,0,-15.69, 3.31, -15.70,-73.17, -0.17, -0.25); + pert.term( 2,-3,0, -1.73, 1.95, -9.19, -7.20, 0.02, -0.03); + pert.term( 2,-4,0, -0.01, 0.33, -1.42, 0.08, 0.01, -0.01); + pert.term( 2,-5,0, 0.03, 0.03, -0.13, 0.12, 0.00, 0.00); + pert.term( 3,-1,0, 0.26, -0.28, 0.73, 0.71, 0.08, 0.04); + pert.term( 3,-2,0, -2.06, 0.46, -1.61, -6.72, -0.13, -0.25); + pert.term( 3,-3,0, -1.28, -0.27, 2.21, -6.90, -0.04, -0.02); + pert.term( 3,-4,0, -0.22, 0.08, -0.44, -1.25, 0.00, 0.01); + pert.term( 3,-5,0, -0.02, 0.03, -0.15, -0.08, 0.00, 0.00); + pert.term( 4,-1,0, 0.03, -0.03, 0.08, 0.08, 0.01, 0.01); + pert.term( 4,-2,0, -0.26, 0.06, -0.17, -0.70, -0.03, -0.05); + pert.term( 4,-3,0, -0.20, -0.05, 0.22, -0.79, -0.01, -0.02); + pert.term( 4,-4,0, -0.11, -0.14, 0.93, -0.60, 0.00, 0.00); + pert.term( 4,-5,0, -0.04, -0.02, 0.09, -0.23, 0.00, 0.00); + pert.term( 5,-4,0, -0.02, -0.03, 0.13, -0.09, 0.00, 0.00); + pert.term( 5,-5,0, 0.00, -0.03, 0.21, 0.01, 0.00, 0.00); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + // Stoerungen durch Saturn + pert.init(time, m4, -1, 3, m6, -4, -1); + + pert.term(-1,-1,0, 0.03, 0.13, 0.48, -0.13, 0.02, 0.00); + pert.term( 0,-1,0, 0.27, 0.84, 0.40, -0.43, 0.01, -0.01); + pert.term( 0,-2,0, 0.12, -0.04, -0.33, -0.55, -0.01, -0.02); + pert.term( 0,-3,0, 0.02, -0.01, -0.07, -0.08, 0.00, 0.00); + pert.term( 1,-1,0, 1.12, 0.76, -2.66, 3.91, -0.01, 0.01); + pert.term( 1,-2,0, 1.49, -0.95, 3.07, 4.83, 0.04, -0.05); + pert.term( 1,-3,0, 0.21, -0.18, 0.55, 0.64, 0.00, 0.00); + pert.term( 2,-1,0, 0.12, 0.10, -0.29, 0.34, -0.01, 0.02); + pert.term( 2,-2,0, 0.51, -0.36, 1.61, 2.25, 0.03, 0.01); + pert.term( 2,-3,0, 0.10, -0.10, 0.50, 0.43, 0.00, 0.00); + pert.term( 2,-4,0, 0.01, -0.02, 0.11, 0.05, 0.00, 0.00); + pert.term( 3,-2,0, 0.07, -0.05, 0.16, 0.22, 0.01, 0.01); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + // Ekliptikale Koordinaten ([rad],[AE]) + dl += 52.49 * StrictMath.sin(MoreMath.PI2 * (0.1868 + 0.0549 * time)) + + 0.61 * StrictMath.sin(MoreMath.PI2 * (0.9220 + 0.3307 * time)) + + 0.32 * StrictMath.sin(MoreMath.PI2 * (0.4731 + 2.1485 * time)) + + 0.28 * StrictMath.sin(MoreMath.PI2 * (0.9467 + 0.1133 * time)); + dl += 0.14 + 0.87 * time - 0.11 * time * time; + + l = MoreMath.PI2 * MoreMath.frac(0.9334591 + m4 / MoreMath.PI2 + + ((6615.5 + 1.1 * time) * time + dl ) / 1296.0e3); + r = 1.5303352 + 0.0000131 * time + dr * 1.0E-6; + b = (596.32 + (-2.92 - 0.10 * time) * time + db) / MoreMath.ARCS; + + return new Vec3D(new Polar(l, b, r)); // Ort + } + + /** + * Calculate the position of jupiter with analytic series expansion. + * + * @param time time in julianish century. + * + * @return heliocentrically place vector in [AE], ecliptic and + * equinox of the date + */ + public Vec3D jupiterPos(double time) { + + double m5,m6,m7; // Mittlere Anomalien + double phi, c, s; + double dl, dr, db; // Korrekturen in Laenge ["], + // Entfernung [AE] und Breite ["] + double l,b,r; // Ekliptikale Koordinaten + + // Mittlere Anomalien der Planeten in [rad] + m5 = MoreMath.PI2 * MoreMath.frac( 0.0565314 + 8.4302963 * time); + m6 = MoreMath.PI2 * MoreMath.frac( 0.8829867 + 3.3947688 * time); + m7 = MoreMath.PI2 * MoreMath.frac( 0.3969537 + 1.1902586 * time); + + // Keplerbewegung und Stoerungen durch Saturn + pert.init(time, m5, -1, 5, m6, -10, 0); + + pert.term(-1, -1,0, -0.2, 1.4, 2.0, 0.6, 0.1, -0.2); + pert.term( 0, -1,0, 9.4, 8.9, 3.9, -8.3, -0.4, -1.4); + pert.term( 0, -2,0, 5.6, -3.0, -5.4, -5.7, -2.0, 0.0); + pert.term( 0, -3,0, -4.0, -0.1, 0.0, 5.5, 0.0, 0.0); + pert.term( 0, -5,0, 3.3, -1.6, -1.6, -3.1, -0.5, -1.2); + pert.term( 1, 0,0,-113.1,19998.6,-25208.2,-142.2,-4670.7,288.9); + pert.term( 1, 0,1, -76.1, 66.9, -84.2, -95.8, 21.6, 29.4); + pert.term( 1, 0,2, -0.5, -0.3, 0.4, -0.7, 0.1, -0.1); + pert.term( 1, -1,0, 78.8, -14.5, 11.5, 64.4, -0.2, 0.2); + pert.term( 1, -2,0, -2.0, -132.4, 28.8, 4.3, -1.7, 0.4); + pert.term( 1, -2,1, -1.1, -0.7, 0.2, -0.3, 0.0, 0.0); + pert.term( 1, -3,0, -7.5, -6.8, -0.4, -1.1, 0.6, -0.9); + pert.term( 1, -4,0, 0.7, 0.7, 0.6, -1.1, 0.0, -0.2); + pert.term( 1, -5,0, 51.5, -26.0, -32.5, -64.4, -4.9,-12.4); + pert.term( 1, -5,1, -1.2, -2.2, -2.7, 1.5, -0.4, 0.3); + pert.term( 2, 0,0, -3.4, 632.0, -610.6, -6.5, -226.8, 12.7); + pert.term( 2, 0,1, -4.2, 3.8, -4.1, -4.5, 0.2, 0.6); + pert.term( 2, -1,0, 5.3, -0.7, 0.7, 6.1, 0.2, 1.1); + pert.term( 2, -2,0, -76.4, -185.1, 260.2,-108.0, 1.6, 0.0); + pert.term( 2, -3,0, 66.7, 47.8, -51.4, 69.8, 0.9, 0.3); + pert.term( 2, -3,1, 0.6, -1.0, 1.0, 0.6, 0.0, 0.0); + pert.term( 2, -4,0, 17.0, 1.4, -1.8, 9.6, 0.0, -0.1); + pert.term( 2, -5,0,1066.2, -518.3, -1.3, -23.9, 1.8, -0.3); + pert.term( 2, -5,1, -25.4, -40.3, -0.9, 0.3, 0.0, 0.0); + pert.term( 2, -5,2, -0.7, 0.5, 0.0, 0.0, 0.0, 0.0); + pert.term( 3, 0,0, -0.1, 28.0, -22.1, -0.2, -12.5, 0.7); + pert.term( 3, -2,0, -5.0, -11.5, 11.7, -5.4, 2.1, -1.0); + pert.term( 3, -3,0, 16.9, -6.4, 13.4, 26.9, -0.5, 0.8); + pert.term( 3, -4,0, 7.2, -13.3, 20.9, 10.5, 0.1, -0.1); + pert.term( 3, -5,0, 68.5, 134.3, -166.9, 86.5, 7.1, 15.2); + pert.term( 3, -5,1, 3.5, -2.7, 3.4, 4.3, 0.5, -0.4); + pert.term( 3, -6,0, 0.6, 1.0, -0.9, 0.5, 0.0, 0.0); + pert.term( 3, -7,0, -1.1, 1.7, -0.4, -0.2, 0.0, 0.0); + pert.term( 4, 0,0, 0.0, 1.4, -1.0, 0.0, -0.6, 0.0); + pert.term( 4, -2,0, -0.3, -0.7, 0.4, -0.2, 0.2, -0.1); + pert.term( 4, -3,0, 1.1, -0.6, 0.9, 1.2, 0.1, 0.2); + pert.term( 4, -4,0, 3.2, 1.7, -4.1, 5.8, 0.2, 0.1); + pert.term( 4, -5,0, 6.7, 8.7, -9.3, 8.7, -1.1, 1.6); + pert.term( 4, -6,0, 1.5, -0.3, 0.6, 2.4, 0.0, 0.0); + pert.term( 4, -7,0, -1.9, 2.3, -3.2, -2.7, 0.0, -0.1); + pert.term( 4, -8,0, 0.4, -1.8, 1.9, 0.5, 0.0, 0.0); + pert.term( 4, -9,0, -0.2, -0.5, 0.3, -0.1, 0.0, 0.0); + pert.term( 4,-10,0, -8.6, -6.8, -0.4, 0.1, 0.0, 0.0); + pert.term( 4,-10,1, -0.5, 0.6, 0.0, 0.0, 0.0, 0.0); + pert.term( 5, -5,0, -0.1, 1.5, -2.5, -0.8, -0.1, 0.1); + pert.term( 5, -6,0, 0.1, 0.8, -1.6, 0.1, 0.0, 0.0); + pert.term( 5, -9,0, -0.5, -0.1, 0.1, -0.8, 0.0, 0.0); + pert.term( 5,-10,0, 2.5, -2.2, 2.8, 3.1, 0.1, -0.2); + + dl = pert.dl(); dr = pert.dr(); db = pert.db(); + + // Stoerungen durch Uranus + pert.init(time, m5, 1, 1, m7, -2, -1); + + pert.term( 1, -1,0, 0.4, 0.9, 0.0, 0.0, 0.0, 0.0); + pert.term( 1, -2,0, 0.4, 0.4, -0.4, 0.3, 0.0, 0.0); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + // Stoerungen durch Saturn und Uranus + phi = (2 * m5 - 6 * m6 + 3 * m7); + c = StrictMath.cos(phi); + s = StrictMath.sin(phi); + dl += -0.8 * c + 8.5 * s; + dr += -0.1 * c; + + phi = (3 * m5 - 6 * m6 + 3 * m7); + c = StrictMath.cos(phi); + s = StrictMath.sin(phi); + dl += +0.4 * c + 0.5 * s; + dr += -0.7 * c + 0.5 * s; + db += -0.1 * c; + + // Ekliptikale Koordinaten ([rad],[AE]) + l = MoreMath.PI2 * MoreMath.frac(0.0388910 + m5 / MoreMath.PI2 + + ((5025.2 + 0.8 * time) * time + dl) / 1296.0e3); + r = 5.208873 + 0.000041 * time + dr * 1.0E-5; + b = (227.3 - 0.3 * time + db) / MoreMath.ARCS; + + return new Vec3D(new Polar(l, b, r)); // Ort + } + + /** + * Calculate the position of saturn with analytic series expansion. + * + * @param time time in julianish century. + * + * @return heliocentrically place vector in [AE], ecliptic and + * equinox of the date + */ + public Vec3D saturnPos(double time) { + + double m5,m6,m7,m8; // Mittlere Anomalien + double phi, c, s; + double dl, dr, db; // Korrekturen in Laenge ["], + // Entfernung [AE] und Breite ["] + double l,b,r; // Ekliptikale Koordinaten + + // Mittlere Anomalien der Planeten in [rad] + m5 = MoreMath.PI2 * MoreMath.frac( 0.0565314 + 8.4302963 * time); + m6 = MoreMath.PI2 * MoreMath.frac( 0.8829867 + 3.3947688 * time); + m7 = MoreMath.PI2 * MoreMath.frac( 0.3969537 + 1.1902586 * time); + m8 = MoreMath.PI2 * MoreMath.frac( 0.7208473 + 0.6068623 * time); + + // Keplerbewegung und Stoerungen durch Jupiter + pert.init(time, m6, 0, 11, m5, -6, 0); + + pert.term( 0,-1,0, 12.0, -1.4, -13.9, 6.4, 1.2, -1.8); + pert.term( 0,-2,0, 0.0, -0.2, -0.9, 1.0, 0.0, -0.1); + pert.term( 1, 1,0, 0.9, 0.4, -1.8, 1.9, 0.2, 0.2); + pert.term( 1, 0,0, -348.3,22907.7,-52915.5, -752.2,-3266.5,8314.4); + pert.term( 1, 0,1, -225.2, -146.2, 337.7, -521.3, 79.6, 17.4); + pert.term( 1, 0,2, 1.3, -1.4, 3.2, 2.9, 0.1, -0.4); + pert.term( 1,-1,0, -1.0, -30.7, 108.6, -815.0, -3.6, -9.3); + pert.term( 1,-2,0, -2.0, -2.7, -2.1, -11.9, -0.1, -0.4); + pert.term( 2, 1,0, 0.1, 0.2, -1.0, 0.3, 0.0, 0.0); + pert.term( 2, 0,0, 44.2, 724.0, -1464.3, -34.7, -188.7, 459.1); + pert.term( 2, 0,1, -17.0, -11.3, 18.9, -28.6, 1.0, -3.7); + pert.term( 2,-1,0, -3.5, -426.6, -546.5, -26.5, -1.6, -2.7); + pert.term( 2,-1,1, 3.5, -2.2, -2.6, -4.3, 0.0, 0.0); + pert.term( 2,-2,0, 10.5, -30.9, -130.5, -52.3, -1.9, 0.2); + pert.term( 2,-3,0, -0.2, -0.4, -1.2, -0.1, -0.1, 0.0); + pert.term( 3, 0,0, 6.5, 30.5, -61.1, 0.4, -11.6, 28.1); + pert.term( 3, 0,1, -1.2, -0.7, 1.1, -1.8, -0.2, -0.6); + pert.term( 3,-1,0, 29.0, -40.2, 98.2, 45.3, 3.2, -9.4); + pert.term( 3,-1,1, 0.6, 0.6, -1.0, 1.3, 0.0, 0.0); + pert.term( 3,-2,0, -27.0, -21.1, -68.5, 8.1, -19.8, 5.4); + pert.term( 3,-2,1, 0.9, -0.5, -0.4, -2.0, -0.1, -0.8); + pert.term( 3,-3,0, -5.4, -4.1, -19.1, 26.2, -0.1, -0.1); + pert.term( 4, 0,0, 0.6, 1.4, -3.0, -0.2, -0.6, 1.6); + pert.term( 4,-1,0, 1.5, -2.5, 12.4, 4.7, 1.0, -1.1); + pert.term( 4,-2,0, -821.9, -9.6, -26.0, 1873.6, -70.5, -4.4); + pert.term( 4,-2,1, 4.1, -21.9, -50.3, -9.9, 0.7, -3.0); + pert.term( 4,-3,0, -2.0, -4.7, -19.3, 8.2, -0.1, -0.3); + pert.term( 4,-4,0, -1.5, 1.3, 6.5, 7.3, 0.0, 0.0); + pert.term( 5,-2,0,-2627.6,-1277.3, 117.4, -344.1, -13.8, -4.3); + pert.term( 5,-2,1, 63.0, -98.6, 12.7, 6.7, 0.1, -0.2); + pert.term( 5,-2,2, 1.7, 1.2, -0.2, 0.3, 0.0, 0.0); + pert.term( 5,-3,0, 0.4, -3.6, -11.3, -1.6, 0.0, -0.3); + pert.term( 5,-4,0, -1.4, 0.3, 1.5, 6.3, -0.1, 0.0); + pert.term( 5,-5,0, 0.3, 0.6, 3.0, -1.7, 0.0, 0.0); + pert.term( 6,-2,0, -146.7, -73.7, 166.4, -334.3, -43.6, -46.7); + pert.term( 6,-2,1, 5.2, -6.8, 15.1, 11.4, 1.7, -1.0); + pert.term( 6,-3,0, 1.5, -2.9, -2.2, -1.3, 0.1, -0.1); + pert.term( 6,-4,0, -0.7, -0.2, -0.7, 2.8, 0.0, 0.0); + pert.term( 6,-5,0, 0.0, 0.5, 2.5, -0.1, 0.0, 0.0); + pert.term( 6,-6,0, 0.3, -0.1, -0.3, -1.2, 0.0, 0.0); + pert.term( 7,-2,0, -9.6, -3.9, 9.6, -18.6, -4.7, -5.3); + pert.term( 7,-2,1, 0.4, -0.5, 1.0, 0.9, 0.3, -0.1); + pert.term( 7,-3,0, 3.0, 5.3, 7.5, -3.5, 0.0, 0.0); + pert.term( 7,-4,0, 0.2, 0.4, 1.6, -1.3, 0.0, 0.0); + pert.term( 7,-5,0, -0.1, 0.2, 1.0, 0.5, 0.0, 0.0); + pert.term( 7,-6,0, 0.2, 0.0, 0.2, -1.0, 0.0, 0.0); + pert.term( 8,-2,0, -0.7, -0.2, 0.6, -1.2, -0.4, -0.4); + pert.term( 8,-3,0, 0.5, 1.0, -2.0, 1.5, 0.1, 0.2); + pert.term( 8,-4,0, 0.4, 1.3, 3.6, -0.9, 0.0, -0.1); + pert.term( 9,-4,0, 4.0, -8.7, -19.9, -9.9, 0.2, -0.4); + pert.term( 9,-4,1, 0.5, 0.3, 0.8, -1.8, 0.0, 0.0); + pert.term(10,-4,0, 21.3, -16.8, 3.3, 3.3, 0.2, -0.2); + pert.term(10,-4,1, 1.0, 1.7, -0.4, 0.4, 0.0, 0.0); + pert.term(11,-4,0, 1.6, -1.3, 3.0, 3.7, 0.8, -0.2); + + dl = pert.dl(); dr = pert.dr(); db = pert.db(); + + // Stoerungen durch Uranus + pert.init(time, m6, 0, 3, m7, -5, -1); + + pert.term( 0,-1,0, 1.0, 0.7, 0.4, -1.5, 0.1, 0.0); + pert.term( 0,-2,0, 0.0, -0.4, -1.1, 0.1, -0.1, -0.1); + pert.term( 0,-3,0, -0.9, -1.2, -2.7, 2.1, -0.5, -0.3); + pert.term( 1,-1,0, 7.8, -1.5, 2.3, 12.7, 0.0, 0.0); + pert.term( 1,-2,0, -1.1, -8.1, 5.2, -0.3, -0.3, -0.3); + pert.term( 1,-3,0, -16.4, -21.0, -2.1, 0.0, 0.4, 0.0); + pert.term( 2,-1,0, 0.6, -0.1, 0.1, 1.2, 0.1, 0.0); + pert.term( 2,-2,0, -4.9, -11.7, 31.5, -13.3, 0.0, -0.2); + pert.term( 2,-3,0, 19.1, 10.0, -22.1, 42.1, 0.1, -1.1); + pert.term( 2,-4,0, 0.9, -0.1, 0.1, 1.4, 0.0, 0.0); + pert.term( 3,-2,0, -0.4, -0.9, 1.7, -0.8, 0.0, -0.3); + pert.term( 3,-3,0, 2.3, 0.0, 1.0, 5.7, 0.3, 0.3); + pert.term( 3,-4,0, 0.3, -0.7, 2.0, 0.7, 0.0, 0.0); + pert.term( 3,-5,0, -0.1, -0.4, 1.1, -0.3, 0.0, 0.0); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + // Stoerungen durch Neptun + pert.init(time, m6, 1, 2, m8, -2, -1); + + pert.term( 1,-1,0, -1.3, -1.2, 2.3, -2.5, 0.0, 0.0); + pert.term( 1,-2,0, 1.0, -0.1, 0.1, 1.4, 0.0, 0.0); + pert.term( 2,-2,0, 1.1, -0.1, 0.2, 3.3, 0.0, 0.0); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + // Stoerungen durch Jupiter und Uranus + phi = (-2 * m5 + 5 * m6 - 3 * m7); + c = StrictMath.cos(phi); + s = StrictMath.sin(phi); + + dl += -0.8 * c - 0.1 * s; + dr += -0.2 * c + 1.8 * s; + db += +0.3 * c + 0.5 * s; + + phi = (-2 * m5 + 6 * m6 - 3 * m7); + c = StrictMath.cos(phi); + s = StrictMath.sin(phi); + dl += (2.4 - 0.7 * time) * c + (27.8 - 0.4 * time) * s; + dr += 2.1 * c - 0.2 * s; + + phi = (-2 * m5 + 7 * m6 - 3 * m7); + c = StrictMath.cos(phi); + s = StrictMath.sin(phi); + dl += +0.1 * c + 1.6 * s; + dr += -3.6 * c + 0.3 * s; + db += -0.2 * c + 0.6 * s; + + // Ekliptikale Koordinaten ([rad],[AE]) + l = MoreMath.PI2 * MoreMath.frac(0.2561136 + m6 / MoreMath.PI2 + + ((5018.6 + time * 1.9) * time + dl) / 1296.0e3); + r = 9.557584 - 0.000186 * time + dr * 1.0e-5; + b = (175.1 - 10.2 * time + db) / MoreMath.ARCS; + + return new Vec3D(new Polar(l, b, r)); // Ort + } + + /** + * Calculate the position of uranus with analytic series expansion. + * + * @param time time in julianish century. + * + * @return heliocentrically place vector in [AE], ecliptic and + * equinox of the date + */ + public Vec3D uranusPos(double time) { + + double m5,m6,m7,m8; // Mittlere Anomalien + double dl, dr, db; // Korrekturen in Laenge ["], + // Entfernung [AE] und Breite ["] + double l,b,r; // Ekliptikale Koordinaten + + // Mittlere Anomalien der Planeten in [rad] + m5 = MoreMath.PI2 * MoreMath.frac( 0.0564472 + 8.4302889 * time); + m6 = MoreMath.PI2 * MoreMath.frac( 0.8829611 + 3.3947583 * time); + m7 = MoreMath.PI2 * MoreMath.frac( 0.3967117 + 1.1902849 * time); + m8 = MoreMath.PI2 * MoreMath.frac( 0.7216833 + 0.6068528 * time); + + // Stoerungen durch Jupiter + pert.init(time, m7, -1, 3, m5, -2, -1); + + pert.term(-1,-1,0, 0.0, 0.0, -0.1, 1.7, -0.1, 0.0); + pert.term( 0,-1,0, 0.5, -1.2, 18.9, 9.1, -0.9, 0.1); + pert.term( 1,-1,0,-21.2, 48.7, -455.5,-198.8, 0.0, 0.0); + pert.term( 1,-2,0, -0.5, 1.2, -10.9, -4.8, 0.0, 0.0); + pert.term( 2,-1,0, -1.3, 3.2, -23.2, -11.1, 0.3, 0.1); + pert.term( 2,-2,0, -0.2, 0.2, 1.1, 1.5, 0.0, 0.0); + pert.term( 3,-1,0, 0.0, 0.2, -1.8, 0.4, 0.0, 0.0); + + dl = pert.dl(); dr = pert.dr(); db = pert.db(); + + // Stoerungen durch Saturn + pert.init(time, m7, 0, 11, m6, -6, 0); + + pert.term( 0,-1,0, 1.4, -0.5, -6.4, 9.0, -0.4, -0.8); + pert.term( 1,-1,0,-18.6, -12.6, 36.7,-336.8, 1.0, 0.3); + pert.term( 1,-2,0, -0.7, -0.3, 0.5, -7.5, 0.1, 0.0); + pert.term( 2,-1,0, 20.0, -141.6, -587.1,-107.0, 3.1, -0.8); + pert.term( 2,-1,1, 1.0, 1.4, 5.8, -4.0, 0.0, 0.0); + pert.term( 2,-2,0, 1.6, -3.8, -35.6, -16.0, 0.0, 0.0); + pert.term( 3,-1,0, 75.3, -100.9, 128.9, 77.5, -0.8, 0.1); + pert.term( 3,-1,1, 0.2, 1.8, -1.9, 0.3, 0.0, 0.0); + pert.term( 3,-2,0, 2.3, -1.3, -9.5, -17.9, 0.0, 0.1); + pert.term( 3,-3,0, -0.7, -0.5, -4.9, 6.8, 0.0, 0.0); + pert.term( 4,-1,0, 3.4, -5.0, 21.6, 14.3, -0.8, -0.5); + pert.term( 4,-2,0, 1.9, 0.1, 1.2, -12.1, 0.0, 0.0); + pert.term( 4,-3,0, -0.1, -0.4, -3.9, 1.2, 0.0, 0.0); + pert.term( 4,-4,0, -0.2, 0.1, 1.6, 1.8, 0.0, 0.0); + pert.term( 5,-1,0, 0.2, -0.3, 1.0, 0.6, -0.1, 0.0); + pert.term( 5,-2,0, -2.2, -2.2, -7.7, 8.5, 0.0, 0.0); + pert.term( 5,-3,0, 0.1, -0.2, -1.4, -0.4, 0.0, 0.0); + pert.term( 5,-4,0, -0.1, 0.0, 0.1, 1.2, 0.0, 0.0); + pert.term( 6,-2,0, -0.2, -0.6, 1.4, -0.7, 0.0, 0.0); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + // Keplerbewegung und Stoerungen durch Neptun + pert.init(time, m7, -1, 7, m8, -8, 0); + + pert.term( 1, 0,0,-78.1,19518.1,-90718.2,-334.7,2759.5,-311.9); + pert.term( 1, 0,1,-81.6, 107.7, -497.4,-379.5, -2.8, -43.7); + pert.term( 1, 0,2, -6.6, -3.1, 14.4, -30.6, -0.4, -0.5); + pert.term( 1, 0,3, 0.0, -0.5, 2.4, 0.0, 0.0, 0.0); + pert.term( 2, 0,0, -2.4, 586.1, -2145.2, -15.3, 130.6, -14.3); + pert.term( 2, 0,1, -4.5, 6.6, -24.2, -17.8, 0.7, -1.6); + pert.term( 2, 0,2, -0.4, 0.0, 0.1, -1.4, 0.0, 0.0); + pert.term( 3, 0,0, 0.0, 24.5, -76.2, -0.6, 7.0, -0.7); + pert.term( 3, 0,1, -0.2, 0.4, -1.4, -0.8, 0.1, -0.1); + pert.term( 4, 0,0, 0.0, 1.1, -3.0, 0.1, 0.4, 0.0); + pert.term(-1,-1,0, -0.2, 0.2, 0.7, 0.7, -0.1, 0.0); + pert.term( 0,-1,0, -2.8, 2.5, 8.7, 10.5, -0.4, -0.1); + pert.term( 1,-1,0,-28.4, 20.3, -51.4, -72.0, 0.0, 0.0); + pert.term( 1,-2,0, -0.6, -0.1, 4.2, -14.6, 0.2, 0.4); + pert.term( 1,-3,0, 0.2, 0.5, 3.4, -1.6, -0.1, 0.1); + pert.term( 2,-1,0, -1.8, 1.3, -5.5, -7.7, 0.0, 0.3); + pert.term( 2,-2,0, 29.4, 10.2, -29.0, 83.2, 0.0, 0.0); + pert.term( 2,-3,0, 8.8, 17.8, -41.9, 21.5, -0.1, -0.3); + pert.term( 2,-4,0, 0.0, 0.1, -2.1, -0.9, 0.1, 0.0); + pert.term( 3,-2,0, 1.5, 0.5, -1.7, 5.1, 0.1, -0.2); + pert.term( 3,-3,0, 4.4, 14.6, -84.3, 25.2, 0.1, -0.1); + pert.term( 3,-4,0, 2.4, -4.5, 12.0, 6.2, 0.0, 0.0); + pert.term( 3,-5,0, 2.9, -0.9, 2.1, 6.2, 0.0, 0.0); + pert.term( 4,-3,0, 0.3, 1.0, -4.0, 1.1, 0.1, -0.1); + pert.term( 4,-4,0, 2.1, -2.7, 17.9, 14.0, 0.0, 0.0); + pert.term( 4,-5,0, 3.0, -0.4, 2.3, 17.6, -0.1, -0.1); + pert.term( 4,-6,0, -0.6, -0.5, 1.1, -1.6, 0.0, 0.0); + pert.term( 5,-4,0, 0.2, -0.2, 1.0, 0.8, 0.0, 0.0); + pert.term( 5,-5,0, -0.9, -0.1, 0.6, -7.1, 0.0, 0.0); + pert.term( 5,-6,0, -0.5, -0.6, 3.8, -3.6, 0.0, 0.0); + pert.term( 5,-7,0, 0.0, -0.5, 3.0, 0.1, 0.0, 0.0); + pert.term( 6,-6,0, 0.2, 0.3, -2.7, 1.6, 0.0, 0.0); + pert.term( 6,-7,0, -0.1, 0.2, -2.0, -0.4, 0.0, 0.0); + pert.term( 7,-7,0, 0.1, -0.2, 1.3, 0.5, 0.0, 0.0); + pert.term( 7,-8,0, 0.1, 0.0, 0.4, 0.9, 0.0, 0.0); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + // Stoerungen durch Jupiter und Uranus + pert.init(time, m7, -2, 4, m6, -6, -4, 2*m5); + + pert.term(-2,-4,0, -0.7, 0.4, -1.5, -2.5, 0.0, 0.0); + pert.term(-1,-4,0, -0.1, -0.1, -2.2, 1.0, 0.0, 0.0); + pert.term( 1,-5,0, 0.1, -0.4, 1.4, 0.2, 0.0, 0.0); + pert.term( 1,-6,0, 0.4, 0.5, -0.8, -0.8, 0.0, 0.0); + pert.term( 2,-6,0, 5.7, 6.3, 28.5, -25.5, 0.0, 0.0); + pert.term( 2,-6,1, 0.1, -0.2, -1.1, -0.6, 0.0, 0.0); + pert.term( 3,-6,0, -1.4, 29.2, -11.4, 1.1, 0.0, 0.0); + pert.term( 3,-6,1, 0.8, -0.4, 0.2, 0.3, 0.0, 0.0); + pert.term( 4,-6,0, 0.0, 1.3, -6.0, -0.1, 0.0, 0.0); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + // Ekliptikale Koordinaten ([rad],[AE]) + l = MoreMath.PI2 * MoreMath.frac(0.4734843 + m7 / MoreMath.PI2 + + ((5082.3 + 34.2 * time) * time + dl) / 1296.0e3); + r = 19.211991 + (-0.000333 - 0.000005 * time) * time + dr * 1.0e-5; + b = (-130.61 + (-0.54 + 0.04 * time) * time + db) / MoreMath.ARCS; + + return new Vec3D(new Polar(l, b, r)); // Ort + } + + /** + * Calculate the position of neptune with analytic series expansion. + * + * @param time time in julianish century. + * + * @return heliocentrically place vector in [AE], ecliptic and + * equinox of the date + */ + public Vec3D neptunePos(double time) { + + double m5,m6,m7,m8; // Mittlere Anomalien + double dl, dr, db; // Korrekturen in Laenge ["], + // Entfernung [AE] und Breite ["] + double l,b,r; // Ekliptikale Koordinaten + + // Mittlere Anomalien der Planeten in [rad] + m5 = MoreMath.PI2 * MoreMath.frac( 0.0563867 + 8.4298907 * time); + m6 = MoreMath.PI2 * MoreMath.frac( 0.8825086 + 3.3957748 * time); + m7 = MoreMath.PI2 * MoreMath.frac( 0.3965358 + 1.1902851 * time); + m8 = MoreMath.PI2 * MoreMath.frac( 0.7214906 + 0.6068526 * time); + + // Stoerungen durch Jupiter + pert.init(time, m8, 0, 2, m5, -2, 0); + + pert.term( 0,-1,0, 0.1, 0.1, -3.0, 1.8, -0.3, -0.3); + pert.term( 1, 0,0, 0.0, 0.0, -15.9, 9.0, 0.0, 0.0); + pert.term( 1,-1,0,-17.6, -29.3, 416.1,-250.0, 0.0, 0.0); + pert.term( 1,-2,0, -0.4, -0.7, 10.4, -6.2, 0.0, 0.0); + pert.term( 2,-1,0, -0.2, -0.4, 2.4, -1.4, 0.4, -0.3); + + dl = pert.dl(); dr = pert.dr(); db = pert.db(); + + // Stoerungen durch Saturn + pert.init(time, m8, 0, 2, m6, -2, 0); + + pert.term( 0,-1,0, -0.1, 0.0, 0.2, -1.8, -0.1, -0.5); + pert.term( 1, 0,0, 0.0, 0.0, -8.3, -10.4, 0.0, 0.0); + pert.term( 1,-1,0, 13.6, -12.7, 187.5, 201.1, 0.0, 0.0); + pert.term( 1,-2,0, 0.4, -0.4, 4.5, 4.5, 0.0, 0.0); + pert.term( 2,-1,0, 0.4, -0.1, 1.7, -3.2, 0.2, 0.2); + pert.term( 2,-2,0, -0.1, 0.0, -0.2, 2.7, 0.0, 0.0); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + // Keplerbewegung und Stoerungen durch Uranus + pert.init(time, m8, 1, 6, m7, -6, 0); + + pert.term( 1, 0,0, 32.3,3549.5,-25880.2, 235.8,-6360.5,374.0); + pert.term( 1, 0,1, 31.2, 34.4, -251.4, 227.4, 34.9, 29.3); + pert.term( 1, 0,2, -1.4, 3.9, -28.6, -10.1, 0.0, -0.9); + pert.term( 2, 0,0, 6.1, 68.0, -111.4, 2.0, -54.7, 3.7); + pert.term( 2, 0,1, 0.8, -0.2, -2.1, 2.0, -0.2, 0.8); + pert.term( 3, 0,0, 0.1, 1.0, -0.7, 0.0, -0.8, 0.1); + pert.term( 0,-1,0, -0.1, -0.3, -3.6, 0.0, 0.0, 0.0); + pert.term( 1, 0,0, 0.0, 0.0, 5.5, -6.9, 0.1, 0.0); + pert.term( 1,-1,0, -2.2, -1.6, -116.3, 163.6, 0.0, -0.1); + pert.term( 1,-2,0, 0.2, 0.1, -1.2, 0.4, 0.0, -0.1); + pert.term( 2,-1,0, 4.2, -1.1, -4.4, -34.6, -0.2, 0.1); + pert.term( 2,-2,0, 8.6, -2.9, -33.4, -97.0, 0.2, 0.1); + pert.term( 3,-1,0, 0.1, -0.2, 2.1, -1.2, 0.0, 0.1); + pert.term( 3,-2,0, -4.6, 9.3, 38.2, 19.8, 0.1, 0.1); + pert.term( 3,-3,0, -0.5, 1.7, 23.5, 7.0, 0.0, 0.0); + pert.term( 4,-2,0, 0.2, 0.8, 3.3, -1.5, -0.2, -0.1); + pert.term( 4,-3,0, 0.9, 1.7, 17.9, -9.1, -0.1, 0.0); + pert.term( 4,-4,0, -0.4, -0.4, -6.2, 4.8, 0.0, 0.0); + pert.term( 5,-3,0, -1.6, -0.5, -2.2, 7.0, 0.0, 0.0); + pert.term( 5,-4,0, -0.4, -0.1, -0.7, 5.5, 0.0, 0.0); + pert.term( 5,-5,0, 0.2, 0.0, 0.0, -3.5, 0.0, 0.0); + pert.term( 6,-4,0, -0.3, 0.2, 2.1, 2.7, 0.0, 0.0); + pert.term( 6,-5,0, 0.1, -0.1, -1.4, -1.4, 0.0, 0.0); + pert.term( 6,-6,0, -0.1, 0.1, 1.4, 0.7, 0.0, 0.0); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + // Ekliptikale Koordinaten ([rad],[AE]) + l = MoreMath.PI2 * MoreMath.frac(0.1254046 + m8 / MoreMath.PI2 + + ((4982.8 - 21.3 * time) * time + dl) / 1296.0e3); + r = 30.072984 + (0.001234 + 0.000003 * time) * time + dr * 1.0e-5; + b = (54.77 + (0.26 + 0.06 * time) * time + db) / MoreMath.ARCS; + + return new Vec3D(new Polar(l, b, r)); // Ort + } + + /** + * Calculate the position of pluto with analytic series expansion. + * + * @param time time in julianish century. + * + * @return heliocentrically place vector in [AE], ecliptic and + * equinox of the date + */ + public Vec3D plutoPos(double time) { + + double m5,m6,m9; // Mittlere Anomalien + double phi,c,s; + double dl, dr, db; // Korrekturen in Laenge ["], + // Entfernung [AE] und Breite ["] + double l,b,r; // Ekliptikale Koordinaten + + // Mittlere Anomalien der Planeten in [rad] + m5 = MoreMath.PI2 * MoreMath.frac( 0.0565314 + 8.4302963 * time); + m6 = MoreMath.PI2 * MoreMath.frac( 0.8829867 + 3.3947688 * time); + m9 = MoreMath.PI2 * MoreMath.frac( 0.0385795 + 0.4026667 * time); + + // Stoerungen durch Jupiter + pert.init(time, m9, 0, 6, m5, -2, 1); + + pert.term( 1, 0,0, 0.06,100924.08,-960396.0,15965.1,51987.68,-24288.76); + pert.term( 2, 0,0,3274.74, 17835.12,-118252.2, 3632.4,12687.49, -6049.72); + pert.term( 3, 0,0,1543.52, 4631.99, -21446.6, 1167.0, 3504.00, -1853.10); + pert.term( 4, 0,0, 688.99, 1227.08, -4823.4, 213.5, 1048.19, -648.26); + pert.term( 5, 0,0, 242.27, 415.93, -1075.4, 140.6, 302.33, -209.76); + pert.term( 6, 0,0, 138.41, 110.91, -308.8, -55.3, 109.52, -93.82); + pert.term( 3,-1,0, -0.99, 5.06, -25.6, 19.8, 1.26, -1.96); + pert.term( 2,-1,0, 7.15, 5.61, -96.7, 57.2, 1.64, -2.16); + pert.term( 1,-1,0, 10.79, 23.13, -390.4, 236.4, -0.33, 0.86); + pert.term( 0, 1,0, -0.23, 4.43, 102.8, 63.2, 3.15, 0.34); + pert.term( 1, 1,0, -1.10, -0.92, 11.8, -2.3, 0.43, 0.14); + pert.term( 2, 1,0, 0.62, 0.84, 2.3, 0.7, 0.05, -0.04); + pert.term( 3, 1,0, -0.38, -0.45, 1.2, -0.8, 0.04, 0.05); + pert.term( 4, 1,0, 0.17, 0.25, 0.0, 0.2, -0.01, -0.01); + pert.term( 3,-2,0, 0.06, 0.07, -0.6, 0.3, 0.03, -0.03); + pert.term( 2,-2,0, 0.13, 0.20, -2.2, 1.5, 0.03, -0.07); + pert.term( 1,-2,0, 0.32, 0.49, -9.4, 5.7, -0.01, 0.03); + pert.term( 0,-2,0, -0.04, -0.07, 2.6, -1.5, 0.07, -0.02); + + dl = pert.dl(); dr = pert.dr(); db = pert.db(); + + // Stoerungen durch Saturn + pert.init(time, m9, 0, 3, m6, -2, 1); + + pert.term( 1,-1,0, -29.47, 75.97, -106.4, -204.9, -40.71, -17.55); + pert.term( 0, 1,0, -13.88, 18.20, 42.6, -46.1, 1.13, 0.43); + pert.term( 1, 1,0, 5.81, -23.48, 15.0, -6.8, -7.48, 3.07); + pert.term( 2, 1,0, -10.27, 14.16, -7.9, 0.4, 2.43, -0.09); + pert.term( 3, 1,0, 6.86, -10.66, 7.3, -0.3, -2.25, 0.69); + pert.term( 2,-2,0, 4.32, 2.00, 0.0, -2.2, -0.24, 0.12); + pert.term( 1,-2,0, -5.04, -0.83, -9.2, -3.1, 0.79, -0.24); + pert.term( 0,-2,0, 4.25, 2.48, -5.9, -3.3, 0.58, 0.02); + + dl += pert.dl(); dr += pert.dr(); db += pert.db(); + + // Stoerungen durch Jupiter und Saturn + phi = (m5 - m6); + c = StrictMath.cos(phi); + s = StrictMath.sin(phi); + dl += -9.11 * c + 0.12 * s; + dr += -3.40 * c - 3.30 * s; + db += +0.81 * c + 0.78 * s; + + phi = (m5 - m6 + m9); + c = StrictMath.cos(phi); + s = StrictMath.sin(phi); + dl += +5.92 * c + 0.25 * s; + dr += +2.30 * c - 3.80 * s; + db += -0.67 * c - 0.51 * s; + + // Ekliptikale Koordinaten ([rad],[AE]) + l = MoreMath.PI2 * MoreMath.frac(0.6232469 + m9 / MoreMath.PI2 + dl / 1296.0E3); + r = 40.7247248 + dr * 1.0E-5; + b = -3.909434 * MoreMath.RAD + db / MoreMath.ARCS; + + // Ort; Ekliptik und Aequinoktium B1950.0 + Vec3D rvec = new Vec3D(new Polar(l, b, r)); + + PrecNut precNut = new PrecNut(); + + // Ort; Ekliptik und Aequinoktium des Datums + rvec.mul(precNut.precMatrix_Ecl(AstronomicalConstants.T_B1950, time)); + + return rvec; + } + + /** + * Calculate the position of any planet with analytic series expansion. + * + * @param planet the current planet number for identification. + * @param time time in julianish century. + * + * @return heliocentrically place vector in [AE], ecliptic and + * equinox of the date + */ + public Vec3D pertPosition(int planet, double time) { + + Vec3D r; + + switch (planet) { + case SSS3dConstants.SUN: r = new Vec3D(); break; + case SSS3dConstants.MERCURY: r = mercuryPos(time); break; + case SSS3dConstants.VENUS: r = venusPos(time); break; + case SSS3dConstants.EARTH: r = earthPos(time); break; + case SSS3dConstants.MARS: r = marsPos(time); break; + case SSS3dConstants.JUPITER: r = jupiterPos(time); break; + case SSS3dConstants.SATURN: r = saturnPos(time); break; + case SSS3dConstants.URANUS: r = uranusPos(time); break; + case SSS3dConstants.NEPTUNE: r = neptunePos(time); break; + case SSS3dConstants.PLUTO: r = plutoPos(time); break; + default: r = null; + System.out.println("Error in Planets"); + } + return r; + } +} diff --git a/Solar system/sss3d-source/sss3d/utils/astronomy/PrecNut.java b/Solar system/sss3d-source/sss3d/utils/astronomy/PrecNut.java new file mode 100644 index 0000000..90042bf --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/astronomy/PrecNut.java @@ -0,0 +1,157 @@ +/* + File: PrecNut.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/astronomy/PrecNut.java,v 1.3 2000/12/12 16:00:25 portm Exp $ + $Author: portm $ + $Date: 2000/12/12 16:00:25 $ + $State: Exp $ + +*/ +package sss3d.utils.astronomy; + +import sss3d.calculations.*; + +import javax.vecmath.Matrix3d; + +/** + * This class calculate the precession and nutation. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.3 $ + */ +public class PrecNut { + + private Matrix3d mat1; + private Matrix3d mat2; + private Matrix3d mat3; + + /** + * Constructor + */ + public PrecNut() { + mat1 = new Matrix3d(); + mat2 = new Matrix3d(); + mat3 = new Matrix3d(); + } + + /** + * Calculate the precession of ecliptical coordinates. + * + * @param t1 given epoch in julianish century. + * @param t2 epoch, to be calculated. + * + * @return a transform matrix for precession. + */ + public Matrix3d precMatrix_Ecl(double t1, double t2) { + + double dT = t2 - t1; + double _Pi, pi, p_a; + + _Pi = 174.876383889 * MoreMath.RAD + + (((3289.4789 + 0.60622 * t1) * t1) + + ((-869.8089 - 0.50491 * t1) + 0.03536 * dT) * dT) / MoreMath.ARCS; + pi = ((47.0029 - (0.06603 - 0.000598 * t1) * t1) + + ((-0.03302 + 0.000598 * t1) + 0.000060 * dT) * dT) * dT / MoreMath.ARCS; + p_a = ((5029.0966 + (2.22226 - 0.000042 * t1) * t1) + + ((1.11113 - 0.000042 * t1) - 0.000006 * dT) * dT) * dT / MoreMath.ARCS; + + mat1.setIdentity(); + mat2.setIdentity(); + mat3.setIdentity(); + + // R_z(-(_Pi+p_a)) * R_x(pi) * R_z(_Pi) + mat1.rotZ(-(_Pi + p_a)); + mat2.rotX(pi); + mat3.rotZ(_Pi); + + mat3.mul(mat2); + mat3.mul(mat1); + + return mat3; + } + + /** + * Calculate the precession of equatorial coordinates. + * + * @param t1 given epoch in julianish century. + * @param t2 epoch, to be calculated. + * + * @return a transform matrix for precession. + */ + public Matrix3d precMatrix_Equ(double t1, double t2) { + + double dT = t2-t1; + double zeta, z, theta; + + zeta = ((2306.2181 + (1.39656 - 0.000139 * t1) * t1) + + ((0.30188 - 0.000344 * t1) + 0.017998 * dT) * dT) * dT / MoreMath.ARCS; + z = zeta + ((0.79280 + 0.000411 * t1) + 0.000205 * dT) * dT * dT / MoreMath.ARCS; + theta = ((2004.3109 - (0.85330 + 0.000217 * t1) * t1) - + ((0.42665 + 0.000217 * t1) + 0.041833 * dT) * dT) * dT / MoreMath.ARCS; + + mat1.setIdentity(); + mat2.setIdentity(); + mat3.setIdentity(); + + // R_z(-z) * R_y(theta) * R_z(-zeta) + mat1.rotZ(-z); + mat2.rotY(theta); + mat3.rotZ(-zeta); + + mat3.mul(mat2); + mat3.mul(mat1); + + return mat3; + } + + /** + * Transformation from middle equator and spring point to the real equator and + * spring point. + * + * @param time time in julianish century. + * + * @return the nutation matrix. + */ + public Matrix3d nutMatrix(double time) { + + double ls = MoreMath.PI2 * + MoreMath.frac(0.993133 + 99.997306 * time); // Mittlere Anomalie der Sonne + double d = MoreMath.PI2 * + MoreMath.frac(0.827362 + 1236.853087 * time); // Laengendifferenz Sonne-Mond + double f = MoreMath.PI2 * + MoreMath.frac(0.259089 + 1342.227826 * time); // Mittleres Argument der Breite + double n = MoreMath.PI2 * + MoreMath.frac(0.347346 - 5.372447 * time); // Laenge des aufsteigenden Knotens + + double dpsi = (-17.200 * StrictMath.sin(n) - 1.319 * StrictMath.sin(2 * (f - d + n)) - + 0.227 * StrictMath.sin(2 * (f + n)) + 0.206 * StrictMath.sin(2 * n) + + 0.143 * StrictMath.sin(ls)) / MoreMath.ARCS; + double deps = (9.203 * StrictMath.cos(n) + 0.574 * StrictMath.cos(2 * (f - d + n)) + + 0.098 * StrictMath.cos(2 * (f + n)) - 0.090 * StrictMath.cos(2 * n)) / + MoreMath.ARCS; + + double eps = 0.4090928 - 2.2696E-4 * time; // Mittlere Schiefe der Ekliptik + + mat1.setIdentity(); + mat2.setIdentity(); + mat3.setIdentity(); + + // R_x(-eps-deps)*R_z(-dpsi)*R_x(+eps) + mat1.rotX(-eps - deps); + mat2.rotZ(-dpsi); + mat3.rotX(+eps); + + mat3.mul(mat2); + mat3.mul(mat1); + + return mat3; + } +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/utils/astronomy/Spheric.java b/Solar system/sss3d-source/sss3d/utils/astronomy/Spheric.java new file mode 100644 index 0000000..9964033 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/astronomy/Spheric.java @@ -0,0 +1,188 @@ +/* + File: Spheric.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/astronomy/Spheric.java,v 1.3 2000/12/13 13:42:49 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:42:49 $ + $State: Exp $ + +*/ +package sss3d.utils.astronomy; + +import sss3d.calculations.*; +import sss3d.calculations.constants.AstronomicalConstants; + +import javax.vecmath.Matrix3d; + +/** + * This class calculate the transformation of the coordinate. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.3 $ + */ +public class Spheric { + + /** + * Constructor + */ + public Spheric() { + + } + + /** + * Transformation the equatorial coordinates in ecliptical coordinates. + * + * @param time time in julianish century. + * + * @return the transformation matrix. + */ + public Matrix3d equ2EclMatrix(double time) { + double eps = (23.43929111 - (46.8150 + (0.00059 - 0.001813 * time) * time) * + time / 3600.0) * MoreMath.RAD; + Matrix3d mat = new Matrix3d(); + mat.setIdentity(); + mat.rotX(eps); + return mat; + } + + /** + * Transformation the ecliptical coordinates in equatorial coordinates. + * + * @param time time in julianish century. + * + * @return the transformation matrix. + */ + public Matrix3d ecl2EquMatrix(double time) { + Matrix3d matrix = equ2EclMatrix(time); + matrix.transpose(); + return matrix; + } + + /** + * Transformation equatorial coordinates to horizon system. + * + * @param dec the declension in [rad]. + * @param tau the hour angle in [rad]. + * @param lat the latitude of the observer in [rad]. + * + * @return an array with the values:
+ * double[0] = elevation in [rad].
+ * double[1] = azimuth in [rad]. + */ + public double[] equ2Hor(double dec, double tau, double lat) { + // Einheitsvektor im Horizontsystem + Vec3D e_equ = new Vec3D(new Polar(tau, dec)); + Matrix3d mat = new Matrix3d(); + mat.setIdentity(); + mat.rotY(StrictMath.PI / 2.0 - lat); + e_equ.mul(mat); // Einheitsvektor im aequator. System + + double[] result = new double[2]; + + result[0] = e_equ.getElevation(); + result[1] = e_equ.getAzimut(); + return result; + } + + /** + * Transformation horizon system to equatorial coordinates. + * + * @param h the elevation in [rad]. + * @param az the azimuth in [rad]. + * @param lat the latitude of the observer in [rad]. + * + * @return an array with the values:
+ * double[0] = declension in [rad].
+ * double[1] = hour angle in [rad]. + */ + public double[] hor2Equ(double h, double az, double lat) { + // Einheitsvektor im Horizontsystem + Vec3D e_hor = new Vec3D(new Polar(az, h)); + Matrix3d mat = new Matrix3d(); + mat.setIdentity(); + mat.rotY(-(StrictMath.PI / 2.0 - lat)); + + e_hor.mul(mat); // Einheitsvektor im aequator. System + + double[] result = new double[2]; + + result[0] = e_hor.getElevation(); + result[1] = e_hor.getAzimut(); + return result; + } + + /** + * Calculate the geocentrically position of a place on the earth's surface. + * + * @param lambda the geocentrically longitude (eastward positiv) in [rad]. + * @param phi the geocentrically latitude in [rad]. + * + * @return the geocentrically position in [km]. + */ + public Vec3D site(double lambda, double phi) { + double f = 1.0 / 298.257; // Abplattung der Erde + double e_sqr = f * (2.0 - f); // Quadrat der Exzentrizitaet + double cos_phi = StrictMath.cos(phi); // (Ko)sinus der geographischen Breite + double sin_phi = StrictMath.sin(phi); + + double n = AstronomicalConstants.R_EARTH / StrictMath.sqrt(1.0 - + e_sqr * (sin_phi * sin_phi)); + + // Kartesischer Ortsvektor [km] + return new Vec3D(n * cos_phi * StrictMath.cos(lambda), + n * cos_phi * StrictMath.sin(lambda), + (1.0 - e_sqr) * n * sin_phi); + } + + /** + * Calculation from equatorial coordinates to standart coordinates. + * + * @param ra0 the right ascension of the optic axis in [rad]. + * @param dec0 the declension of the optic axis in [rad]. + * @param x the standart coordinate x. + * @param y the standart coordinate y. + * + * @return an array with the values:
+ * double[0] = the right ascension in [rad].
+ * double[1] = the declension in [rad]. + */ + public double[] stdEqu(double ra0, double dec0, double x, double y) { + double[] result = new double[2]; + + result[0] = ra0 + StrictMath.atan(-x / (StrictMath.cos(dec0) - y * StrictMath.sin(dec0))); + result[1] = StrictMath.asin((StrictMath.sin(dec0) + y * StrictMath.cos(dec0)) / + StrictMath.sqrt(1.0 + x * x + y * y)); + return result; + } + + /** + * Calculation from standart coordinates to equatorial coordinates. + * + * @param ra0 the right ascension of the optic axis in [rad]. + * @param dec0 the declension of the optic axis in [rad]. + * @param ra the right ascension in [rad]. + * @param dec the declension in [rad]. + * + * @return an array with the values:
+ * double[0] = the standart coordinate x.
+ * double[1] = the standart coordinate y. + */ + public double[] equStd(double ra0, double dec0, double ra, double dec) { + double[] result = new double[2]; + double c = StrictMath.cos(dec0) * StrictMath.cos(dec) * StrictMath.cos(ra - ra0) + + StrictMath.sin(dec0) * StrictMath.sin(dec); + + result[0] = -(StrictMath.cos(dec) * StrictMath.sin(ra - ra0)) / c; + result[1] = -(StrictMath.sin(dec0) * StrictMath.cos(dec) * StrictMath.cos(ra - ra0) - + StrictMath.cos(dec0) * StrictMath.sin(dec)) / c; + return result; + } +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/utils/astronomy/SunPert.java b/Solar system/sss3d-source/sss3d/utils/astronomy/SunPert.java new file mode 100644 index 0000000..7a3bf7e --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/astronomy/SunPert.java @@ -0,0 +1,172 @@ +/* + File: SunPert.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/astronomy/SunPert.java,v 1.2 2000/12/12 16:00:25 portm Exp $ + $Author: portm $ + $Date: 2000/12/12 16:00:25 $ + $State: Exp $ + +*/ +package sss3d.utils.astronomy; + +import sss3d.calculations.*; + +/** + * This class add the permutation of the sun. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.2 $ + */ +public class SunPert { + + private static final int O = 10; // Index-Versatz + private static final int DIM = 2 * O + 1; // Dimension eines Arbeits-Feldes + + private double m_T; + private double m_cosM, m_sinM; + private double m_dl, m_db, m_dr; + private double m_u, m_v; + private double[] m_C, m_S, m_c, m_s; + + private double[] sincos; + + /** + * Constructor + */ + public SunPert() { + m_C = new double[DIM]; + m_S = new double[DIM]; + m_c = new double[DIM]; + m_s = new double[DIM]; + sincos = new double[2]; + } + + /** + * Initialization with the current time, the middle anomaly + * and the index zone. + * + * @param time time in julianish century. + * @param _M a double value. + * @param _I_min a int value. + * @param _I_max a int value. + * @param _m a double value. + * @param _i_min a int value. + * @param _i_max a int value. + */ + public void init(double time, + double _M, int _I_min, int _I_max, + double _m, int _i_min, int _i_max) { + + m_dl = 0.0; m_dr = 0.0; m_db = 0.0; // Stoerungen auf Null setzen + m_T = time; // Setze Zeit + + // Cosinus und Sinus von Vielfachen von _M + m_C[O] = 1.0; + m_S[O] = 0.0; + + m_C[O+1] = StrictMath.cos(_M); + m_S[O+1] = StrictMath.sin(_M); + + m_C[O-1] =+ m_C[O+1]; + m_S[O-1] =- m_S[O+1]; + + for(int i = 0; i < _I_max; i++) { + sincos = MoreMath.addThe(m_C[O+i], m_S[O+i], m_C[O+1], m_S[O+1]); + m_C[O+i+1] = sincos[0]; + m_S[O+i+1] = sincos[1]; + } + for(int i = 0; i > _I_min; i--) { + sincos = MoreMath.addThe(m_C[O+i], m_S[O+i], m_C[O-1], m_S[O-1]); + m_C[O+i-1] = sincos[0]; + m_S[O+i-1] = sincos[1]; + } + + // Cosinus und Sinus von Vielfachen von m + m_c[O] = 1.0; + m_s[O] = 0.0; + + m_c[O+1] = StrictMath.cos(_m); + m_s[O+1] = StrictMath.sin(_m); + + m_c[O-1] = +m_c[O+1]; + m_s[O-1] = -m_s[O+1]; + + for(int i = 1; i < _i_max; i++) { + sincos = MoreMath.addThe(m_c[O+i], m_s[O+i], m_c[O+1], m_s[O+1]); + m_c[O+i+1] = sincos[0]; + m_s[O+i+1] = sincos[1]; + } + for(int i = -1; i > _i_min; i--) { + sincos = MoreMath.addThe(m_c[O+i], m_s[O+i], m_c[O-1], m_s[O-1]); + m_c[O+i-1] = sincos[0]; + m_s[O+i-1] = sincos[1]; + } + } + + /** + * Summation of the interference in longitude, distance and latitude. + * + * @param _I a int value. + * @param i a int value. + * @param iT a int value. + * @param dlc a double value. + * @param dls a double value. + * @param drc a double value. + * @param drs a double value. + * @param dbc a double value. + * @param dbs a double value. + */ + public void term(int _I, int i, int iT, + double dlc, double dls, + double drc, double drs, + double dbc, double dbs) { + + if(iT == 0) { + sincos = MoreMath.addThe(m_C[O+_I], m_S[O+_I], m_c[O+i], m_s[O+i]); + m_u = sincos[0]; + m_v = sincos[1]; + } else { + m_u *= m_T; + m_v *= m_T; + } + + m_dl += dlc * m_u + dls * m_v; + m_dr += drc * m_u + drs * m_v; + m_db += dbc * m_u + dbs * m_v; + } + + /** + * Give the current interference longitude. + * + * @return the longitude value. + */ + public double dl() { + return m_dl; + } + + /** + * Give the current interference distance. + * + * @return the distance value. + */ + public double dr() { + return m_dr; + } + + /** + * Give the current interference latitude. + * + * @return the latitude value. + */ + public double db() { + return m_db; + } +} diff --git a/Solar system/sss3d-source/sss3d/utils/joystick/ButtonSensorBehavior.java b/Solar system/sss3d-source/sss3d/utils/joystick/ButtonSensorBehavior.java new file mode 100644 index 0000000..9557dcc --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/joystick/ButtonSensorBehavior.java @@ -0,0 +1,68 @@ +/* + File: ButtonSensorBehavior.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/joystick/ButtonSensorBehavior.java,v 1.3 2000/12/13 13:41:49 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:41:49 $ + $State: Exp $ + +*/ +package sss3d.utils.joystick; + +import javax.media.j3d.*; +import java.util.*; + +/** + * This Class can process the Input from the Joystick Buttons. + * Up to now, it will only print out the Button number witch has been pressed. + * For further functionality you may add some other Objects to the Constructor. + * For the description of the Methods, see the Behavior Class! + * + * @version 1.1, June 1999 + * @author M. Schlegel, HTA Biel + * @see javax.media.j3d.Behavior + */ +public class ButtonSensorBehavior extends Behavior { + + private WakeupCriterion conditions = new WakeupOnElapsedFrames(4); + private Sensor sensor; + private int buttons[]= new int[4]; + + /** + * The sensorobject must support the method "lastButtons(buttons[])" to make this class working + */ + public ButtonSensorBehavior(Sensor sensor ) { + this.sensor = sensor; + } + + /** + * Initializes this behavior. + */ + public void initialize() { + wakeupOn(conditions); + } + + /** + * Processes the Stimulus. + * Currently called after four elapsed frames. + * + * @param criteria an enumeration + */ + public void processStimulus(Enumeration criteria) { + sensor.lastButtons(buttons); + for (int i=0; i<4;i++){ + if (buttons[i]!=0) + System.out.println("Button "+(i+1)+" pressed!"); + } + + wakeupOn(conditions); + } +} diff --git a/Solar system/sss3d-source/sss3d/utils/joystick/Joystick.cpp b/Solar system/sss3d-source/sss3d/utils/joystick/Joystick.cpp new file mode 100644 index 0000000..20a4f6a --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/joystick/Joystick.cpp @@ -0,0 +1,93 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +#include +#include +#include "JoyStick.h" +/* Header for class Joystick */ +#define MAX_VALUE (int)(USHRT_MAX / 2) +/* + * Class: Joystick + * Method: getButton + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_Joystick_getButtons( +JNIEnv *env, +jobject obj, +jint id) +{ + JOYINFO info; + + if (joyGetPos(id + JOYSTICKID1, &info) != JOYERR_NOERROR) + return 0; + + int button = 0; + if (info.wButtons & JOY_BUTTON1) + button |= Joystick_BUTTON1; + if (info.wButtons & JOY_BUTTON2) + button |= Joystick_BUTTON2; + if (info.wButtons & JOY_BUTTON3) + button |= Joystick_BUTTON3; + if (info.wButtons & JOY_BUTTON4) + button |= Joystick_BUTTON4; + + return button; +} +/* + * Class: Joystick + * Method: getNumDevs + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_Joystick_getNumDevs( +JNIEnv *env, +jobject obj) +{ + return joyGetNumDevs(); +} +/* + * Class: Joystick + * Method: getXPos + * Signature: (I)I + */ +JNIEXPORT jfloat JNICALL Java_Joystick_getXPos( +JNIEnv *env, +jobject obj, +jint id) +{ + JOYINFO info; + if (joyGetPos(id + JOYSTICKID1, &info) != JOYERR_NOERROR) + return 0.0f; + return (float)((int)info.wXpos - MAX_VALUE) / (float)MAX_VALUE; +} + +/* + * Class: Joystick + * Method: getYPos + * Signature: (I)I + */ +JNIEXPORT jfloat JNICALL Java_Joystick_getYPos( +JNIEnv *env, +jobject obj, +jint id) +{ + JOYINFO info; + if (joyGetPos(id + JOYSTICKID1, &info) != JOYERR_NOERROR) + return 0.0f; + return (float)((int)info.wYpos - MAX_VALUE) / (float)MAX_VALUE; +} + +/* + * Class: Joystick + * Method: getZPos + * Signature: (I)I + */ +JNIEXPORT jfloat JNICALL Java_Joystick_getZPos( +JNIEnv *env, +jobject obj, +jint id) +{ + JOYINFO info; + if (joyGetPos(id + JOYSTICKID1, &info) != JOYERR_NOERROR) + return 0.0f; + return (float)((int)info.wZpos - MAX_VALUE) / (float)MAX_VALUE; +} + diff --git a/Solar system/sss3d-source/sss3d/utils/joystick/Joystick.h b/Solar system/sss3d-source/sss3d/utils/joystick/Joystick.h new file mode 100644 index 0000000..04dacf4 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/joystick/Joystick.h @@ -0,0 +1,56 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class Joystick */ +#ifndef _Included_Joystick +#define _Included_Joystick +#ifdef __cplusplus + extern "C" { +#endif + +#undef Joystick_BUTTON1 +#define Joystick_BUTTON1 1L +#undef Joystick_BUTTON2 +#define Joystick_BUTTON2 2L +#undef Joystick_BUTTON3 +#define Joystick_BUTTON3 4L +#undef Joystick_BUTTON4 +#define Joystick_BUTTON4 8L +/* + * Class: Joystick + * Method: getButtons + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_Joystick_getButtons + (JNIEnv *, jobject, jint); +/* + * Class: Joystick + * Method: getNumDevs + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_Joystick_getNumDevs + (JNIEnv *, jobject); +/* + * Class: Joystick + * Method: getXPos + * Signature: (I)F + */ +JNIEXPORT jfloat JNICALL Java_Joystick_getXPos + (JNIEnv *, jobject, jint); +/* + * Class: Joystick + * Method: getYPos + * Signature: (I)F + */ +JNIEXPORT jfloat JNICALL Java_Joystick_getYPos + (JNIEnv *, jobject, jint); +/* + * Class: Joystick + * Method: getZPos + * Signature: (I)F + */ +JNIEXPORT jfloat JNICALL Java_Joystick_getZPos + (JNIEnv *, jobject, jint); +#ifdef __cplusplus +} +#endif +#endif diff --git a/Solar system/sss3d-source/sss3d/utils/joystick/JoystickInputDevice.java b/Solar system/sss3d-source/sss3d/utils/joystick/JoystickInputDevice.java new file mode 100644 index 0000000..03c5a24 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/joystick/JoystickInputDevice.java @@ -0,0 +1,301 @@ +/* + File: JoystickInputDevice.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/joystick/JoystickInputDevice.java,v 1.2 2000/12/12 13:03:29 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 13:03:29 $ + $State: Exp $ + +*/ +package sss3d.utils.joystick; + +import Joystick; +import javax.media.j3d.*; +import javax.vecmath.*; + +/** + * JoystickInputDevice is the class through which Java 3D and Java 3D application programs communicate + * with a joystick device driver. The joystick driver must be registered + * with Java 3D via a call toPhysicalEnvironment.addInputDevice(InputDevice). + * An joystick input device transfers information to the Java 3D implementation and + * Java 3D applications by writing transform information to sensors that the joystick device + * driver has created and manages.The joystick driver can update its sensor information each + * time the pollAndProcessInput method is called. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.2 $ + */ +public class JoystickInputDevice implements InputDevice { + /** + * If a Joystick is available and running, this Flag will be true. + */ + public static boolean jStickAvailable=true; + private Joystick joy ; + private Sensor joySensor ; + private SensorRead joySensorRead = new SensorRead(4);//4 Buttons + private Transform3D joyTransform = new Transform3D(); + private Transform3D rotTransform = new Transform3D(); + private Transform3D rotTransformX = new Transform3D(); + private float joyPos[] = new float[3]; + private float joyRot[] = new float[3]; + private Vector3f joyTransVec = new Vector3f(); + private float sensitivity = 1.0f; + private float angularRate = 1.0f; + private float minValue = 0.1f; + private float x, y, z, firstX, firstY; + private int buttons[] = new int[4]; + private int button = 0; + private boolean startup = true; + + /** + * Creates an JoystickInputDevice given by its id. + * + * @param device the device id + */ + public JoystickInputDevice(int device) { + try { + if (jStickAvailable) + joy = new Joystick(device); + else System.out.println("No Joystick!!"); + } + catch (SecurityException se) { + System.out.println("No Joystick!!"); + jStickAvailable=false; + } + catch (UnsatisfiedLinkError ule) { + System.out.println("No Joystick!!"); + jStickAvailable=false; + } + + joySensor = new Sensor(this, 1, 4); + } + + /** + * Sets the Joystick Id. + * + * @param device the id of the device + */ + public void setJoyDeviceId(int device){ + try { + if (jStickAvailable) + joy = new Joystick(device); + else System.out.println("No Joystick!!"); + } + catch (SecurityException se) {System.out.println("No Joystick!!");} + catch (UnsatisfiedLinkError ule) {System.out.println("No Joystick!!");} + } + + + /** + * Initialize the joystick position and rotation. + * + * @returns true if an instance of a joystick exists + */ + public boolean initialize() { + for (int j=0; j<3; j++) { + joyPos[j] = 0.0f; + joyRot[j] = 0.0f; + } + return (joy!=null); + } + + /** + * Not used. + */ + public void close() { + } + + /** + * Returns always DEMAND_DRIVEN; + */ + public int getProcessingMode() { + return DEMAND_DRIVEN; + } + + /** + * Returns always 1; + */ + public int getSensorCount() { + return 1; + } + + /** + * Returns the Sensor object given by the id + * + * @returns Sensor the sensor object + */ + public Sensor getSensor(int id) { + return joySensor; + } + + /** + * Not used. Mode constantly set to DEMAND_DRIVEN + */ + public void setProcessingMode(int mode) { + } + + /** + * Processes the input of the joystick + * + * @param joy a reference to the joystick object + * @param joySensor a reference to the sensor object + * @param joyPos[] a three-dimensional position array + * @param joyRot[] a three-dimensional rotation array + */ + public final void pollAndProcessInput(Joystick joy, Sensor joySensor, float joyPos[], float joyRot[]) { + + if ( startup ) { + firstX = joy.getXPos(); + firstY = joy.getYPos(); + joySensorRead.setTime(System.currentTimeMillis()); + joyTransform.setIdentity(); + joySensorRead.set( joyTransform ); + joySensorRead.setButtons( buttons ); + joySensor.setNextSensorRead( joySensorRead ); + startup = false; + } else { + + button = joy.getButtons(); + buttons[0]=(button & Joystick.BUTTON1); + buttons[1]=(button & Joystick.BUTTON2); + buttons[2]=(button & Joystick.BUTTON3); + buttons[3]=(button & Joystick.BUTTON4); + + if ( (buttons[0] != 0) && (buttons[1] != 0)) { + setNominalPositionAndOrientation(); //reset view... + //System.out.println("Button 1 & 2 pressed"); + return; + } + if ( buttons[2] != 0 ) { + // increase speed + // TODO + //System.out.println("Button 3 pressed"); + } + if ( buttons[3] != 0 ) { + // reduce speed + // TODO + //System.out.println("Button 4 pressed"); + } + + x = joy.getXPos(); + y = joy.getYPos(); + + //System.out.println("X Pos : "+x+" Y Pos"+y+" first time x"+firstX+" first time y"+firstY); + + if (Math.abs(x) < minValue) + x = 0.0f; + if (Math.abs(y) < minValue) + y = 0.0f; + + if (x>0.0f) { + joyRot[1] -= (x-minValue) * angularRate; + System.out.println("x > 0"); + } + else if (x<0.0f) { + joyRot[1] -= (x+minValue) * angularRate; + System.out.println("x < 0"); + } + if (y>0.0f) { + joyRot[0] += (y-minValue) * angularRate; + System.out.println("y > 0"); + } + else if (y<0.0f) { + joyRot[0] += (y+minValue) * angularRate; + System.out.println("y < 0"); + } + + //joyPos[2] += y * sensitivity; + + + //joyTransVec.x = joyPos[0]; + //joyTransVec.y = joyPos[1]; + //joyTransVec.z = joyPos[2]; + + rotTransform.setIdentity(); + rotTransform.rotZ(joyRot[1]); + + rotTransformX.setIdentity(); + rotTransformX.rotX(joyRot[0]); + joyTransform.setIdentity(); + //joyTransform.set(joyTransVec); + joyTransform.mul(rotTransformX); + joyTransform.mul(rotTransform); + + joySensorRead.setTime(System.currentTimeMillis()); + joySensorRead.set( joyTransform ); + joySensorRead.setButtons( buttons ); + joySensor.setNextSensorRead( joySensorRead ); + } + } + + /** + * Calls method pollAndProcessInput(joy, joySensor, joyPos, joyRot). + */ + public final void pollAndProcessInput() { + pollAndProcessInput(joy, joySensor, joyPos, joyRot); + } + + /** + * Not used. + */ + public void processStreamInput() { + } + + /** + * Sets the object to the initial position. + */ + public final void setNominalPositionAndOrientation() { + initialize(); + joySensorRead.setTime(System.currentTimeMillis()); + joyTransform.setIdentity(); + joySensorRead.set(joyTransform); + joySensor.setNextSensorRead(joySensorRead); + } + + /** + * Sets the sensitivity of the joystick device. + * + * @param value the sensitivity + */ + public void setSensitivity(float value) { + sensitivity = value; + //System.out.println("Sensitivity="+value); + } + + /** + * Returns the sensitivity of the joystick device. + * + * @returns float the sensitivity + */ + public float getSensitivity() { + return sensitivity; + } + + /** + * Sets the angular rate of the joystick device. + * + * @param value the angular rate + */ + public void setAngularRate(float value) { + angularRate = value; + //System.out.println("AngularRate="+value); + } + + /** + * Returns the angular rate of the joystick device. + * + * @returns float the angular rate + */ + public float getAngularRate() { + return angularRate; + } + +} diff --git a/Solar system/sss3d-source/sss3d/utils/joystick/SensorBehavior.java b/Solar system/sss3d-source/sss3d/utils/joystick/SensorBehavior.java new file mode 100644 index 0000000..fa883f7 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/joystick/SensorBehavior.java @@ -0,0 +1,79 @@ +/* + File: SensorBehavior.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/joystick/SensorBehavior.java,v 1.2 2000/12/12 13:03:28 harib Exp $ + $Author: harib $ + $Date: 2000/12/12 13:03:28 $ + $State: Exp $ + +*/ +package sss3d.utils.joystick; + +import javax.media.j3d.*; +import java.util.*; +import javax.media.j3d.*; +import java.util.*; +import javax.vecmath.*; + +/** + * This class is used to control a rocket with a joystick. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.2 $ + */ +public class SensorBehavior extends Behavior { + + private WakeupOnElapsedFrames conditions = new WakeupOnElapsedFrames(0); + private TransformGroup transformGroup; + private Sensor sensor; + private Transform3D transform = new Transform3D(); + + /** + * Creates a sesor behavior. + * + * @param tg a modifiable transform group + * @param sensor a sensor object + */ + public SensorBehavior( TransformGroup tg, Sensor sensor ) { + transformGroup = tg; + this.sensor = sensor; + } + + /** + * initializing this behavior + */ + public void initialize() { + wakeupOn(conditions); + } + + /** + * Processes the Stimulus. + * Currently called after each elapsed frame. + * + * @param criteria an enumeration + */ + public void processStimulus(Enumeration criteria) { + + Transform3D old = new Transform3D(); + transformGroup.getTransform(old); + + Vector3d offset = new Vector3d(); + old.get(offset); + + + transform.setZero(); + sensor.getRead(transform); + transform.setTranslation(offset); + transformGroup.setTransform(transform); + + wakeupOn(conditions); + } +} \ No newline at end of file diff --git a/Solar system/sss3d-source/sss3d/utils/joystick/joystick.dll b/Solar system/sss3d-source/sss3d/utils/joystick/joystick.dll new file mode 100644 index 0000000..fa4cfce Binary files /dev/null and b/Solar system/sss3d-source/sss3d/utils/joystick/joystick.dll differ diff --git a/Solar system/sss3d-source/sss3d/utils/observer/InfoObserver.java b/Solar system/sss3d-source/sss3d/utils/observer/InfoObserver.java new file mode 100644 index 0000000..ac4777f --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/observer/InfoObserver.java @@ -0,0 +1,56 @@ +/* + File: InfoObserver.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/observer/InfoObserver.java,v 1.4 2000/12/13 13:42:03 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:42:03 $ + $State: Exp $ + +*/ +package sss3d.utils.observer; + +import sss3d.contentbranch.*; + +/** + * The interface InfoObserver is part of the information observer - defined + * by the observer pattern. + * References : E.Gamma; Design Patterns ISBN 0-201-63361-2, Addison Wesley, 1995
+ * It defines an updating interface for objects that should be notified of changes + * in a ObjectInfo. + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.4 $ + * @see ObjectInfo + * @see ObjectsInformation + */ +public interface InfoObserver { + /** + * The update methode is used to keep the state of the concrete observer + * consistent with the state of the ObjectInfo.
+ * + * @param objInfo a reference to the ObjectInfo + * @param id the id of the concrete object that has to be updated + */ + void update(String id, int parameter); + + /** + * Returns the id of the concrete observer. + * + * @return String the id of the concrete observer + */ + String getId(); + + /** + * Returns the information object from the concrete observer. + * + * @return CelestialObjectInfo the info object from the concrete observer + */ + CelestialObjectInfo getInfo(); +} diff --git a/Solar system/sss3d-source/sss3d/utils/observer/ObjectInfo.java b/Solar system/sss3d-source/sss3d/utils/observer/ObjectInfo.java new file mode 100644 index 0000000..3906c16 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/observer/ObjectInfo.java @@ -0,0 +1,83 @@ +/* + File: ObjectInfo.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/observer/ObjectInfo.java,v 1.5 2000/12/13 13:42:03 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:42:03 $ + $State: Exp $ + +*/ +package sss3d.utils.observer; + +import java.util.*; + +/** + * Abstract class ObjectInfo is part of the information observer - defined + * by the observer pattern. + * References : E.Gamma; Design Patterns ISBN 0-201-63361-2, Addison Wesley, 1995
+ * ObjectInfo knows its observers and provides an interface for attaching and + * detaching Observer objects. + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.5 $ + * @see InfoObserver + * @see ObjectsInformation + */ +abstract public class ObjectInfo { + + protected java.util.Vector observers; // contains references to every + // information observer + /** + * Constructor + */ + public ObjectInfo() { + observers = new Vector(); + } + + /** + * Attaches an observer to the vector observers. + * + * @param observer information observer to attach + */ + public void attach(InfoObserver observer) { + observers.addElement(observer); + } + + /** + * Detaches an observer from the vector observers. + * + * @param observer removes the information observer from the list + */ + public void detach(InfoObserver observer) { + observers.removeElement(observer); + } + + /** + * Notifys an observer given by the argument. + * + * @param id id from observer inside the list + */ + public void notifyObservers(String id, int parameter) { + InfoObserver io; + Enumeration e = observers.elements(); + while(e.hasMoreElements()) { + // get identification from every object + // and update the information... + io = (InfoObserver)e.nextElement(); + + //if( (io.getId()).equals(id) ){} + // defined at the moment for infobox only + // if( (io.getId()).equals("infobox") ){ + io.update( id, parameter ); + //System.out.println("Class ObjectInfo : notifyObservers : "+io.getId()); + //} + } + } +} diff --git a/Solar system/sss3d-source/sss3d/utils/observer/ObjectsInformation.java b/Solar system/sss3d-source/sss3d/utils/observer/ObjectsInformation.java new file mode 100644 index 0000000..95b9619 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/observer/ObjectsInformation.java @@ -0,0 +1,155 @@ +/* + File: ObjectsInformation.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/observer/ObjectsInformation.java,v 1.6 2000/12/13 13:42:03 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:42:03 $ + $State: Exp $ + +*/ +package sss3d.utils.observer; + +import sss3d.contentbranch.*; +import sss3d.utils.xmlparser.XMLConstants; +import sss3d.utils.SSS3dConstants; + +import java.util.*; + +/** + * The class ObjectsInformation is part of the information observer - defined + * by the observer pattern. + * References : E.Gamma; Design Patterns ISBN 0-201-63361-2, Addison Wesley, 1995
+ * It stores the state (info) of the concrete observers and sends a notification to + * its concrete observers when its state changes. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.6 $ + * @see ObjectInfo + * @see InfoObserver + */ +public class ObjectsInformation extends ObjectInfo { + + /** + * Initialization Object, keeps the state and configuration + * of the solar system simulator + */ + private InitializationObject iniObject; + + /** + * Constructor.
+ * It calls the constructor of its parent class ObjectInfo. + */ + public ObjectsInformation( InitializationObject iniObject ) { + super(); + this.iniObject = iniObject; + } + + /** + * Returns the information from the object given by the identification. + * + * @return id the id of the concrete observer + */ + public CelestialObjectInfo getInfo(String id) { + + boolean found = false; + CelestialObjectInfo cObjInfo = null; + InfoObserver io = null; + + // gets the object from the observer list + Enumeration e = observers.elements(); + while(e.hasMoreElements()) { + io = (InfoObserver)e.nextElement(); + + if( (io.getId()).equals(id) ) { + found = true; + break; + } + } + + if(!found) { + // not specified at the moment + } else { + if( io != null){ + cObjInfo = io.getInfo(); + if(cObjInfo != null)return cObjInfo; + } + return null; + } + return null; + } // end method getInfo + + /** + * Sets the object specified by the parameter and the + * name of the celestial object. + * + * @param object the object associated to the parameter + * @param parameter the desired parameter + * @param name the name of the celestial object + */ + public void setParameter(Object object, int parameter ) { + //System.out.println("setParameter/2"); + if ( iniObject.setParameter(object, parameter, null) ) { + notifyObservers( "all", parameter ); + //System.out.println("set parameter = "+object.toString()+" "+parameter); + if ( parameter == XMLConstants.JDAY ) { + notifyObservers( "all", SSS3dConstants.RELOAD); + } + } + } + + /** + * Sets the object specified by the parameter and the + * name of the celestial object. + * + * @param object the object associated to the parameter + * @param parameter the desired parameter + * @param name the name of the celestial object + */ + public void setParameter(Object object, int parameter , String name ) { + //System.out.println("setParameter/3"); + if ( iniObject.setParameter(object, parameter, name) ) { + notifyObservers( name , parameter ); + //System.out.println("set parameter = "+object.toString()+" "+parameter+" "+name); + } + } + + /** + * Returns the object specified by the parameter. + * + * @param parameter the desired parameter + * @return Object an object reference to the specified parameter + */ + public Object getParameter( int parameter ) { + //System.out.println("get parameter = "+parameter); + return iniObject.getParameter( parameter, null ); + } + + /** + * Returns the object specified by the parameter and + * the object name. + * + * @param parameter the desired parameter + * @param name the name of the celestial object + * @return Object an object reference to the specified parameter + */ + public Object getParameter( int parameter, String name ) { + //System.out.println("get parameter = "+parameter+" name = "+name); + return iniObject.getParameter( parameter, name ); + } + + /** + * gets the whole state - initialization object + */ + public InitializationObject getInitializationObject() { + return iniObject; + } + +}// end class ObjectsInformation diff --git a/Solar system/sss3d-source/sss3d/utils/observer/ObjectsPositions.java b/Solar system/sss3d-source/sss3d/utils/observer/ObjectsPositions.java new file mode 100644 index 0000000..a619064 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/observer/ObjectsPositions.java @@ -0,0 +1,148 @@ +/* + File: ObjectsPositions.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/observer/ObjectsPositions.java,v 1.7 2000/12/13 13:42:03 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:42:03 $ + $State: Exp $ + +*/ +package sss3d.utils.observer; + +import sss3d.calculations.*; +import sss3d.calculations.ellipseequation.*; +import sss3d.calculations.keplerequation.*; +import sss3d.contentbranch.*; +import sss3d.utils.xmlparser.XMLConstants; +import sss3d.utils.SSS3dConstants; + +import java.util.*; +import javax.vecmath.Point3f; + +/** + * The class ObjectsPositions is part of the positions observer - defined + * by the observer pattern. + * References : E.Gamma; Design Patterns ISBN 0-201-63361-2, Addison Wesley, 1995
+ * It stores the state (positions) of the concrete observers and sends a notification to + * its concrete observers when its state changes. + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.7 $ + * @see OrbitPositions + * @see PositionObserver + */ +public class ObjectsPositions extends OrbitPositions { + + //private OrbitCalculator oc; + private KeplerEquation kepler; + private EllipseEquation ellipse; + private Vector positions; + private InitializationObject iniObject; + private int calculationMethod = SSS3dConstants.KEPLER; + + /** + * Constructor.
+ * It calls the constructor of its parent class OrbitPositions and + * instanciates an object EllipseEquation or KeplerEquation. Kepler equation is the + * used method per default to calculate the positions of the objects.
+ * It also instanciates a new list to hold the objects positions. + */ + public ObjectsPositions( InitializationObject iniObject ) { + super(); + this.iniObject = iniObject; + + // we can use KeplerEquation or EllipseEquation + ellipse = new EllipseEquation(); + kepler = new KeplerEquation(); + + positions = new Vector(); + } + + /** + * This method can be used to modify positions of a given object. + * It's currently not in use, it's to be defined later. + * + * @param cObjInfo a CelestialObjectInfo witch holds + * the information about the object + * @param jDay the new julian date used to calculate the new positions + * @param compressed the object positions in compressed mode + */ + public void setPositions(CelestialObjectInfo cObjInfo, double jDay, boolean compressed) { + } + + /** + * Returns the positions of a given object. If the object doesn't exists, then + * it calculates the new positions and add those to the positions list. + * + * @param cObjInfo a CelestialObjectInfo witch holds + * the information about the object + * @param jDay the new julian date used to calculate the new positions + * @param compressed the object positions in compressed mode + * @return Point3f[] the positins corresponding to the given object + */ + public Point3f[] getPositions(CelestialObjectInfo cObjInfo, double jDay, boolean compressed) { + String id = cObjInfo.getName(); + + PositionsArray pa = null; + boolean found = false; + + // Check if there already exists the positions for the given + // object. If it doesn't exists, then we have to calculate them. + Enumeration e = positions.elements(); + while(e.hasMoreElements()) { + pa = (PositionsArray)e.nextElement(); + + if( (pa.getId()).equals(id) ) { + // remove element + positions.removeElement(pa); + break; + } + } + + calculationMethod = ((Integer)iniObject.getParameter(XMLConstants.CALCULATION)).intValue(); + + // calculate positions using Kepler or Ellipse equation + if( calculationMethod == SSS3dConstants.ELLIPSE ) { + //System.out.println("EllipseEquation"); + + // at the moment only valid for planets + if (cObjInfo.getTypeNbr() == SSS3dConstants.PLANET_TYPE ) { + PositionsArray newPa = new PositionsArray( + cObjInfo.getName(), + ellipse.getPositions(cObjInfo,jDay,compressed)); + positions.addElement(newPa); + pa = newPa; + + } else { + PositionsArray newPa = new PositionsArray( + cObjInfo.getName(), + kepler.getPositions(cObjInfo,jDay,compressed)); + positions.addElement(newPa); + pa = newPa; + } + + } else { + //System.out.println("KeplerEquation"); + PositionsArray newPa = new PositionsArray( + cObjInfo.getName(), + kepler.getPositions(cObjInfo,jDay,compressed)); + positions.addElement(newPa); + pa = newPa; + } + + + + return pa.getPositions(); + + + } // end method getPositon + + +}// end class ObjectsPositions diff --git a/Solar system/sss3d-source/sss3d/utils/observer/OrbitPositions.java b/Solar system/sss3d-source/sss3d/utils/observer/OrbitPositions.java new file mode 100644 index 0000000..6c37bbf --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/observer/OrbitPositions.java @@ -0,0 +1,84 @@ +/* + File: OrbitPositions.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/observer/OrbitPositions.java,v 1.3 2000/12/13 13:42:04 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:42:04 $ + $State: Exp $ + +*/ +package sss3d.utils.observer; + +import java.util.*; + +/** + * Abstract class OrbitPositions is part of the position observer - defined + * by the observer pattern. + * References : E.Gamma; Design Patterns ISBN 0-201-63361-2, Addison Wesley, 1995
+ * OrbitPositions knows its observers and provides an interface for attaching and + * detaching Observer objects. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.3 $ + * @see PositionObserver + * @see ObjectsPositions + */ +abstract public class OrbitPositions { + + + protected java.util.Vector observers; // list containing all observers + + /** + * Creates an object of OrbitPositions witch holds a vector of + * all attached observers. + */ + public OrbitPositions() { + observers = new Vector(); + } + + /** + * Attaches an observer to the vector observers. + * + * @param observer position observer to attach + */ + public void attach(PositionObserver observer) { + observers.addElement(observer); + } + + /** + * Detaches an observer from the vector observers. + * + * @param observer removes the position observer from the list + */ + public void detach(PositionObserver observer) { + observers.removeElement(observer); + } + + /** + * Notifys an observer given by the argument. + * + * @param id id from observer inside the list + */ + public void notifyObservers(String id) { + PositionObserver po; + Enumeration e = observers.elements(); + while(e.hasMoreElements()) { + // get identification from every object + // and update the positions... + po = (PositionObserver)e.nextElement(); + + if( (po.getId()).equals(id) ){ + po.update(this); + } + } + } + +} diff --git a/Solar system/sss3d-source/sss3d/utils/observer/PositionObserver.java b/Solar system/sss3d-source/sss3d/utils/observer/PositionObserver.java new file mode 100644 index 0000000..d6ef0de --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/observer/PositionObserver.java @@ -0,0 +1,46 @@ +/* + File: PositionObserver.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/observer/PositionObserver.java,v 1.2 2000/12/13 13:42:04 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:42:04 $ + $State: Exp $ + +*/ +package sss3d.utils.observer; + +/** + * The interface PositionObserver is part of the position observer - defined + * by the observer pattern. + * References : E.Gamma; Design Patterns ISBN 0-201-63361-2, Addison Wesley, 1995
+ * It defines an updating interface for objects that should be notified of changes + * in a OrbitPositions. + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.2 $ + * @see OrbitPositions + * @see ObjectsPositions + */ +public interface PositionObserver { + /** + * The update methode is used to keep the state of the concrete observer + * consistent with the state of the OrbitPositions.
+ * + * @param orbitPos a reference to the OrbitPositions + */ + void update(OrbitPositions orbitPos); + + /** + * Returns the id of the concrete observer. + * + * @return String the id of the concrete observer + */ + String getId(); +} diff --git a/Solar system/sss3d-source/sss3d/utils/xmlparser/DomToTreeModelAdapter.java b/Solar system/sss3d-source/sss3d/utils/xmlparser/DomToTreeModelAdapter.java new file mode 100644 index 0000000..a4b3660 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/xmlparser/DomToTreeModelAdapter.java @@ -0,0 +1,183 @@ +/* + File: DomToTreeModelAdapter.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/xmlparser/DomToTreeModelAdapter.java,v 1.1 2000/11/07 14:28:11 harib Exp $ + $Author: harib $ + $Date: 2000/11/07 14:28:11 $ + $State: Exp $ + +*/ +package sss3d.utils.xmlparser; + +import sss3d.gui.infobox.AdapterNode; +import sss3d.contentbranch.CelestialObjectInfo; +import java.util.*; +import javax.swing.tree.*; +import javax.swing.event.*; +import org.w3c.dom.Document; + +/** + * This adapter converts the current Document (a DOM) into + * a JTree model. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.1 $ + */ +public class DomToTreeModelAdapter implements javax.swing.tree.TreeModel +{ + private Document document; + /** + * Constructor + * + * @param document document object - DOM + */ + public DomToTreeModelAdapter(Document document){ + this.document = document; + } + + /** + * Basic TreeModel operations. + * Returns the root object of this DOM + * + * @return Object root object of document + */ + public Object getRoot() { + return new AdapterNode(document); + } + + /** + * Returns true if the given node is a leaf node. + * + * @param aNode a reference to an object + * @return boolean true if given node is a leaf node + */ + public boolean isLeaf(Object aNode) { + // Determines whether the icon shows up to the left. + // Return true for any node with no children + AdapterNode node = (AdapterNode) aNode; + if (node.childCount() > 0) return false; + return true; + } + + /** + * Returns the number of childs related to a parent node + * + * @param parent object reference to the parent node + * @returns int number of childs associated to the parent node + */ + public int getChildCount(Object parent) { + AdapterNode node = (AdapterNode) parent; + return node.childCount(); + } + + /** + * Returns the child with the given index and parent node. + * + * @param index the index of the child node + * @param parent an object reference to the parent node + */ + public Object getChild(Object parent, int index) { + AdapterNode node = (AdapterNode) parent; + return node.child(index); + } + + /** + * Returns the index of the given child. + * + * @param parent object reference to its parent node + * @param child object reference to the child node + * @returns int the index of the child node + */ + public int getIndexOfChild(Object parent, Object child) { + AdapterNode node = (AdapterNode) parent; + return node.index((AdapterNode) child); + } + + /** + * Not used at the moment. + */ + public void valueForPathChanged(TreePath path, Object newValue) { + // Null. We won't be making changes in the GUI + // If we did, we would ensure the new value was really new, + // adjust the model, and then fire a TreeNodesChanged event. + } + + /* + * Use these methods to add and remove event listeners. + * (Needed to satisfy TreeModel interface, but not used.) + */ + private Vector listenerList = new Vector(); + + public void addTreeModelListener(TreeModelListener listener) { + if ( listener != null + && ! listenerList.contains( listener ) ) { + listenerList.addElement( listener ); + } + } + public void removeTreeModelListener(TreeModelListener listener) { + if ( listener != null ) { + listenerList.removeElement( listener ); + } + } + + // Note: Since XML works with 1.1, this example uses Vector. + // If coding for 1.2 or later, though, I'd use this instead: + // private List listenerList = new LinkedList(); + // The operations on the List are then add(), remove() and + // iteration, via: + // Iterator it = listenerList.iterator(); + // while ( it.hasNext() ) { + // TreeModelListener listener = (TreeModelListener)it.next(); + // ... + // } + + /* + * Invoke these methods to inform listeners of changes. + * (Not needed for this example.) + * Methods taken from TreeModelSupport class described at + * http://java.sun.com/products/jfc/tsc/articles/jtree/index.html + * That architecture (produced by Tom Santos and Steve Wilson) + * is more elegant. I just hacked 'em in here so they are + * immediately at hand. + */ + public void fireTreeNodesChanged( TreeModelEvent e ) { + Enumeration listeners = listenerList.elements(); + while ( listeners.hasMoreElements() ) { + TreeModelListener listener = + (TreeModelListener)listeners.nextElement(); + listener.treeNodesChanged( e ); + } + } + public void fireTreeNodesInserted( TreeModelEvent e ) { + Enumeration listeners = listenerList.elements(); + while ( listeners.hasMoreElements() ) { + TreeModelListener listener = + (TreeModelListener)listeners.nextElement(); + listener.treeNodesInserted( e ); + } + } + public void fireTreeNodesRemoved( TreeModelEvent e ) { + Enumeration listeners = listenerList.elements(); + while ( listeners.hasMoreElements() ) { + TreeModelListener listener = + (TreeModelListener)listeners.nextElement(); + listener.treeNodesRemoved( e ); + } + } + public void fireTreeStructureChanged( TreeModelEvent e ) { + Enumeration listeners = listenerList.elements(); + while ( listeners.hasMoreElements() ) { + TreeModelListener listener = + (TreeModelListener)listeners.nextElement(); + listener.treeStructureChanged( e ); + } + } +} diff --git a/Solar system/sss3d-source/sss3d/utils/xmlparser/XMLConstants.java b/Solar system/sss3d-source/sss3d/utils/xmlparser/XMLConstants.java new file mode 100644 index 0000000..a529b57 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/xmlparser/XMLConstants.java @@ -0,0 +1,339 @@ +/* + File: XMLConstants.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/xmlparser/XMLConstants.java,v 1.11 2000/12/13 13:42:17 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:42:17 $ + $State: Exp $ + +*/ +package sss3d.utils.xmlparser; + +import java.util.Hashtable; + +/** + * This class is used to parse an XML document. + * It contains frequently used constants. + * + *
+ *    use : 
+ *    XMLConstants.treeElementNames[i];
+ *    ...
+ * 
+ * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.11 $ + * @see XMLParser + */ +public class XMLConstants { + +//constants + // tree view + // An array of names for DOM node-types + public static final String[] typeName = { + "none", + "Element", + "Attr", + "Text", + "CDATA", + "EntityRef", + "Entity", + "ProcInstr", + "Comment", + "Document", + "DocType", + "DocFragment", + "Notation", + }; + + public static final int ELEMENT_TYPE = 1; + public static final int ATTR_TYPE = 2; + public static final int TEXT_TYPE = 3; + public static final int CDATA_TYPE = 4; + public static final int ENTITYREF_TYPE = 5; + public static final int ENTITY_TYPE = 6; + public static final int PROCINSTR_TYPE = 7; + public static final int COMMENT_TYPE = 8; + public static final int DOCUMENT_TYPE = 9; + public static final int DOCTYPE_TYPE = 10; + public static final int DOCFRAG_TYPE = 11; + public static final int NOTATION_TYPE = 12; + + // The list of elements to display in the tree + // This array is also used for the setup of the + // hashtable treeElements + + // first set the limits accordingly to the array treeElementNames + public static final int CELESTIALOBJECT_NAMES_MIN = 0; + public static final int CELESTIALOBJECT_NAMES_MAX = 28; + public static final int INITIALIZATION_NAMES_MIN = 29; + public static final int INITIALIZATION_NAMES_MAX = 62; + + /** + * String representations of the xml tree elements. + */ + public static final String[] treeElementNames = { + // celestialobject parameter names + "celestialobject", + "general", + "parameter", + "type", + "name", + "parent", + "scalingfactor", + "diameter", + "mindistancefromsun", + "maxdistancefromsun", + "nbrofplanetpositions", + "rotationperiod", + "orbitperiod", + "meanorbitvelocity", + "orbiteccentricity", + "orbitinclinationtoecliptic", + "inclinationofequatortoorbit", + "volume", + "distance", + "mass", + "density", + "surfacegravity", + "escapevelocity", + "meantempatsolidsurface", + "majoratmosphericconstitutents", + "epoch", + "equinox", + "longitudenode", + "perihelion", + // initialization object parameter names + "ini", + "info", + "values", + "filetype", + "id", + "filename", + "path", + "day", + "month", + "year", + "hour", + "minutes", + "seconds", + "jday", + "calculation", + "animationspeed", + "value", + "compressed", + "glasses3d", + "joystick", + "cameraatorigin", + "camera", + "star", + "planet", + "moon", + "comet", + "satellite", + "rocket", + "objectname", + "visible", + "orbit", + "colororbit", + "coordinatesystem", + "document" + + }; + + /** + * Modifiable values at runtime. + * If set to true - the simulator can modify this value at runtime + * else it's only possible at startup. + */ + public static final boolean[] MODIFIABLE_VALUES_AT_RUNTIME = { + // celestialobject parameter names + + false, // celestialobject + false, // general + false, // parameter + false, // type + false, // name + false, // parent + false, // scalingfactor + false, // diameter + false, // mindistancefromsun + false, // maxdistancefromsun + false, // nbrofplanetpositions + false, // rotationperiod + false, // orbitperiod + false, // meanorbitvelocity + false, // orbiteccentricity + false, // orbitinclinationtoecliptic + false, // inclinationofequatortoorbit + false, // volume + false, // distance + false, // mass + false, // density + false, // surfacegravity + false, // escapevelocity + false, // meantempatsolidsurface + false, // majoratmosphericconstitutents + false, // epoch + false, // equinox + false, // longitudenode + false, // perihelion + + // initialization object parameter names + false, // ini + false, // info + false, // values + false, // filetype + false, // id + false, // filename + false, // path + true, // day + true, // month + true, // year + true, // hour + true, // minutes + true, // seconds + true, // jday + false, // calculation + true, // animationspeed + true, // value + false, // compressed + false, // glasses3d + false, // joystick + true, // camera at origin + true, // camera + true, // star + true, // planet + true, // moon + true, // comet + true, // satellite + true, // rocket + true, // objectname + true, // visible + true, // orbit + true, // colororbit + true, // coordinatesystem + false // document + + }; + + /** + * Type of XML files xml file == initialization file + */ + public static final int XML_INITIALIZATION = 0; + /** + * Type of XML files xml file == celestial object info file + */ + public static final int XML_CELESTIALOBJECT = 1; + + /** + * Values according to the array treeElementNames + * Celestial object constants + */ + public static final int CELESTIALOBJECT = 0; + public static final int GENERAL = 1; + public static final int PARAMETER = 2; + public static final int TYPE = 3; + public static final int NAME = 4; + public static final int PARENT = 5; + public static final int SCALINGFACTOR = 6; + public static final int DIAMETER = 7; + public static final int MINDISTANCEFROMSUN = 8; + public static final int MAXDISTANCEFROMSUN = 9; + public static final int NBROFPLANETPOSITIONS = 10; + public static final int ROTATIONPERIOD = 11; + public static final int ORBITPERIOD = 12; + public static final int MEANORBITVELOCITY = 13; + public static final int ORBITECCENTRICITY = 14; + public static final int ORBITINCLINATIONTOECLIPTIC = 15; + public static final int INCLINATIONOFEQUATORTOORBIT = 16; + public static final int VOLUME = 17; + public static final int DISTANCE = 18; + public static final int MASS = 19; + public static final int DENSITY = 20; + public static final int SURFACEGRAVITY = 21; + public static final int ESCAPEVELOCITY = 22; + public static final int MEANTEMPATSOLIDSURFACE = 23; + public static final int MAJORATMOSPHERICCONSTITUTENTS = 24; + public static final int EPOCH = 25; + public static final int EQUINOX = 26; + public static final int LONGITUDENODE = 27; + public static final int PERIHELION = 28; + // initialization constants + public static final int INI = 29; + public static final int INFO = 30; + public static final int VALUES = 31; + public static final int FILETYPE = 32; + public static final int ID = 33; + public static final int FILENAME = 34; + public static final int PATH = 35; + public static final int DAY = 36; + public static final int MONTH = 37; + public static final int YEAR = 38; + public static final int HOUR = 39; + public static final int MINUTES = 40; + public static final int SECONDS = 41; + public static final int JDAY = 42; + public static final int CALCULATION = 43; + public static final int ANIMATIONSPEED = 44; + public static final int VALUE = 45; + public static final int COMPRESSED = 46; + public static final int GLASSES3D = 47; + public static final int JOYSTICK = 48; + public static final int CAMERAATORIGIN = 49; + public static final int CAMERA = 50; + public static final int STAR = 51; + public static final int PLANET = 52; + public static final int MOON = 53; + public static final int COMET = 54; + public static final int SATELLITE = 55; + public static final int ROCKET = 56; + public static final int OBJECTNAME = 57; + public static final int VISIBLE = 58; + public static final int ORBIT = 59; + public static final int COLORORBIT = 60; + public static final int COORDINATESYSTEM = 61; + public static final int DOCUMENT = 62; + + + private Hashtable names; + + /** + * Constructs a hashtable for simple and fast access to + * all values. + * + */ + public XMLConstants() { + names = new Hashtable(); + for (int i = 0; i< treeElementNames.length; i++) { + names.put( treeElementNames[i] , new Integer(i) ); + } + } + + /** + * returns the index of a given parameter name + * + * @param elementName the name of the parameter + * @return int the index of a given parameter name + */ + public int getElementIndex( String elementName ) { + int index = -1; + + if ( names != null ) { + Integer n = (Integer)names.get( elementName ); + if (n != null) { + index = n.intValue(); + } + } + return index; + } + +} diff --git a/Solar system/sss3d-source/sss3d/utils/xmlparser/XMLFilter.java b/Solar system/sss3d-source/sss3d/utils/xmlparser/XMLFilter.java new file mode 100644 index 0000000..8fa0061 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/xmlparser/XMLFilter.java @@ -0,0 +1,71 @@ +/* + File: XMLFilter.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/xmlparser/XMLFilter.java,v 1.1 2000/11/17 15:53:58 harib Exp $ + $Author: harib $ + $Date: 2000/11/17 15:53:58 $ + $State: Exp $ + +*/ +package sss3d.utils.xmlparser; + +import java.io.File; +import javax.swing.*; +import javax.swing.filechooser.*; + +/** + * This filter is used to display only the xml files + * inside the file chooser panel + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.1 $ + */ +public class XMLFilter extends FileFilter { + + /** + * Accept all directories and all xml files. + * + * @return boolean true if this file is an xml file or directory + */ + public boolean accept(File f) { + if (f.isDirectory()) { + return true; + } + + String extension = null; + String s = f.getName(); + + int i = s.lastIndexOf('.'); + + if (i > 0 && i < s.length() - 1) { + extension = s.substring(i+1).toLowerCase(); + } + + if (extension != null) { + if ( extension.equals("xml") ) { + return true; + } else { + return false; + } + } + + return false; + } + + /** + * The description of this filter + * + * @return String the description of this filter + */ + public String getDescription() { + return "XML Files"; + } +} diff --git a/Solar system/sss3d-source/sss3d/utils/xmlparser/XMLParser.java b/Solar system/sss3d-source/sss3d/utils/xmlparser/XMLParser.java new file mode 100644 index 0000000..6673c10 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/utils/xmlparser/XMLParser.java @@ -0,0 +1,617 @@ +/* + File: XMLParser.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/xmlparser/XMLParser.java,v 1.11 2000/12/13 13:42:17 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:42:17 $ + $State: Exp $ + +*/ +package sss3d.utils.xmlparser; + +import sss3d.contentbranch.*; +import sss3d.utils.SSS3dConstants; + +import java.io.*; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.FactoryConfigurationError; +import javax.xml.parsers.ParserConfigurationException; + +import javax.xml.parsers.DocumentBuilder; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + +import java.io.File; +import java.io.IOException; + +import org.w3c.dom.*; + +import java.util.Hashtable; + +/** + * This class is used to parse an XML document. The XML file + * holds important data about a celestial object or + * the initialization state of the solar system simulator. + * + *
+ *    use : 
+ *    XMLParser xmlp = new XMLParser(CelestialObjectInfo, "fully qualified path");
+ *    xmlp.read();
+ * 
+ * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.11 $ + * @see sss3d.contentbranch.CelestialObjectInfo + * @see sss3d.contentbranch.InitializationObject + * @see sss3d.utils.observer.ObjectsInformation + */ +public class XMLParser { + + private String path; + private InitializationObject iniObject; + private CelestialObjectInfo cObjInfo; + + /** + * Constructs an object of an XMLParser. + * + * @param object an object to store the information from the file. + * @param type the type of this xml file defined inside class SSS3dConstants + * @param path path to the file containing the information + */ + public XMLParser(Object object,int type, String path) { + if ( type == XMLConstants.XML_CELESTIALOBJECT ) { + this.cObjInfo = (CelestialObjectInfo)object; + } else if( type == XMLConstants.XML_INITIALIZATION ) { + this.iniObject = (InitializationObject)object; + } + this.path = path.toLowerCase(); + } + + /** + * Method parses an XML file. Depending on the parameters and + * their values it stores the information in the InitializationObject. + * + * @exception IOExecption throws an IOException in case of a read error + */ + private void parseInitializationFile() throws IOException { + + // get current document from CelestialObjectInfo + Document document = (Document)iniObject.getParameter(XMLConstants.DOCUMENT); + Hashtable parameters = new Hashtable(); + + // initialize hashtable + for (int i = XMLConstants.INITIALIZATION_NAMES_MIN; + i <= XMLConstants.INITIALIZATION_NAMES_MAX; i++) { + parameters.put(XMLConstants.treeElementNames[i], new Integer(i)); + } + + if ( document != null ) { + // iterate over each possible element tag + // defined in class XMLConstants + for(int tag = XMLConstants.INITIALIZATION_NAMES_MIN; + tag <= XMLConstants.INITIALIZATION_NAMES_MAX; tag++ ) { + + // get node of specific tag + // show only leaf nodes + String nodeName = XMLConstants.treeElementNames[tag]; + + if ( !nodeName.equals("ini") && + !nodeName.equals("info") && + !nodeName.equals("values") ) { + + NodeList nodes = document.getElementsByTagName(nodeName); + // search for value of node == nodeName + for(int i = 0; i < nodes.getLength(); i++) { + + Node child = nodes.item(i); + if ( child.hasChildNodes() && !( + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.STAR]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.PLANET]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.MOON]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.COMET]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.SATELLITE]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.ROCKET]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.ANIMATIONSPEED]) + )) { + + NodeList nl = child.getChildNodes(); + for(int j = 0; j < nl.getLength(); j++) { + if ( nl.item(j).getNodeType() == XMLConstants.TEXT_TYPE ) { + // get this value and set it correctly inside + // CelestialObjectInfo..... + Integer n = (Integer)parameters.get( child.getNodeName() ); + String value = nl.item(j).getNodeValue(); + //System.out.println("Name "+child.getNodeName()+" Value "+value); + + /*System.out.println("Parameter = "+child.getNodeName()+ + " Value = "+nl.item(j).getNodeValue()); + */ + + if (n != null) { + switch ( n.intValue() ){ + case XMLConstants.FILETYPE : + iniObject.setParameter(value,XMLConstants.FILETYPE); + break; + case XMLConstants.ID : + iniObject.setParameter(value,XMLConstants.ID); + break; + case XMLConstants.FILENAME : + iniObject.setParameter(value,XMLConstants.FILENAME); + break; + case XMLConstants.PATH : + iniObject.setParameter(value,XMLConstants.PATH); + break; + case XMLConstants.DAY : + iniObject.setParameter(new Integer(value),XMLConstants.DAY); + break; + case XMLConstants.MONTH : + iniObject.setParameter(new Integer(value),XMLConstants.MONTH); + break; + case XMLConstants.YEAR : + iniObject.setParameter(new Integer(value),XMLConstants.YEAR); + break; + case XMLConstants.HOUR : + iniObject.setParameter(new Integer(value),XMLConstants.HOUR); + break; + case XMLConstants.MINUTES : + iniObject.setParameter(new Integer(value),XMLConstants.MINUTES); + break; + case XMLConstants.SECONDS : + iniObject.setParameter(new Integer(value),XMLConstants.SECONDS); + break; + case XMLConstants.JDAY : + iniObject.setParameter(new Double(value),XMLConstants.JDAY); + break; + case XMLConstants.CALCULATION : + if ( value.equals("kepler") ) { + iniObject.setParameter(new Integer(SSS3dConstants.KEPLER),XMLConstants.CALCULATION); + } else if ( value.equals("ellipse") ) { + iniObject.setParameter(new Integer(SSS3dConstants.ELLIPSE),XMLConstants.CALCULATION); + } else if ( value.equals("analytic") ) { + iniObject.setParameter(new Integer(SSS3dConstants.ANALYTIC),XMLConstants.CALCULATION); + } else { + // in case of an unmatching value, use kepler as default calculation method + iniObject.setParameter(new Integer(SSS3dConstants.KEPLER),XMLConstants.CALCULATION); + } + break; + /*case XMLConstants.ANIMATIONSPEED : + iniObject.setParameter(new Integer(value),XMLConstants.ANIMATIONSPEED); + break; */ + case XMLConstants.COMPRESSED : + iniObject.setParameter(new Boolean(value),XMLConstants.COMPRESSED); + break; + case XMLConstants.GLASSES3D : + iniObject.setParameter(new Boolean(value),XMLConstants.GLASSES3D); + break; + case XMLConstants.JOYSTICK : + iniObject.setParameter(new Boolean(value),XMLConstants.JOYSTICK); + break; + case XMLConstants.CAMERAATORIGIN : + iniObject.setParameter(new Boolean(value),XMLConstants.CAMERAATORIGIN); + break; + case XMLConstants.CAMERA : + boolean found = false; + value = value.toLowerCase(); + for( int camera = 0; camera < SSS3dConstants.CAMERA_POSITIONS.length;camera++) { + if ( value.equals( (SSS3dConstants.CAMERA_POSITIONS[camera]).toLowerCase() ) ) { + iniObject.setParameter(new Integer(camera),XMLConstants.CAMERA); + found = true; + break; + } + } + if ( !found ) { + // in case of an unmatching value, use kepler as default calculation method + iniObject.setParameter(new Integer(SSS3dConstants.CAMERA_DEFAULT),XMLConstants.CAMERA); + } + + break; + default : break; + } + } + } + } + + } else if(nodeName.equals(XMLConstants.treeElementNames[XMLConstants.ANIMATIONSPEED]) ){ + AnimationSpeed animationSpeed; + + NamedNodeMap nnm = child.getAttributes(); + Node type = nnm.getNamedItem(XMLConstants.treeElementNames[XMLConstants.TYPE]); + Node value = nnm.getNamedItem(XMLConstants.treeElementNames[XMLConstants.VALUE]); + + String nodeValue = type.getNodeValue(); + + int t = AnimationSpeed.DAYS_PER_SECOND; + + if ( nodeValue.equals(AnimationSpeed.NAMES[AnimationSpeed.HOURS_PER_SECOND]) ) { + t = AnimationSpeed.HOURS_PER_SECOND; + } else if( nodeValue.equals(AnimationSpeed.NAMES[AnimationSpeed.MINUTES_PER_SECOND]) ) { + t = AnimationSpeed.MINUTES_PER_SECOND; + } + + try { + + int v = (new Integer(value.getNodeValue())).intValue(); + animationSpeed = new AnimationSpeed( t, v ); + System.out.println(animationSpeed.toString()); + } catch (NumberFormatException e) { + // create animationspeed with default values + animationSpeed = new AnimationSpeed(); + } + iniObject.setParameter(animationSpeed, XMLConstants.ANIMATIONSPEED); + + } else if(nodeName.equals(XMLConstants.treeElementNames[XMLConstants.STAR]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.PLANET]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.MOON]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.COMET]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.SATELLITE]) || + nodeName.equals(XMLConstants.treeElementNames[XMLConstants.ROCKET]) ){ + + IniData data; + + // find out parent + //System.out.println("NODENAME ---->>>>>>>>>> "+nodeName); + Node parentNode = child.getParentNode(); + NamedNodeMap pnnm = parentNode.getAttributes(); + Node attribute = pnnm.getNamedItem(XMLConstants.treeElementNames[XMLConstants.OBJECTNAME]); + + int type = SSS3dConstants.UNKNOWN_TYPE; + + if ( nodeName.equals(SSS3dConstants.TYPES[SSS3dConstants.STAR_TYPE]) ) { + type = SSS3dConstants.STAR_TYPE; + + } else if ( nodeName.equals(SSS3dConstants.TYPES[SSS3dConstants.PLANET_TYPE]) ) { + type = SSS3dConstants.PLANET_TYPE; + + } else if ( nodeName.equals(SSS3dConstants.TYPES[SSS3dConstants.MOON_TYPE]) ) { + type = SSS3dConstants.MOON_TYPE; + + } else if ( nodeName.equals(SSS3dConstants.TYPES[SSS3dConstants.COMET_TYPE]) ) { + type = SSS3dConstants.COMET_TYPE; + + } else if ( nodeName.equals(SSS3dConstants.TYPES[SSS3dConstants.SATELLITE_TYPE]) ) { + type = SSS3dConstants.SATELLITE_TYPE; + + } else if ( nodeName.equals(SSS3dConstants.TYPES[SSS3dConstants.ROCKET_TYPE]) ) { + type = SSS3dConstants.ROCKET_TYPE; + + } + + if (attribute != null) { + data = new IniData(attribute.getNodeValue(), null,type, false, false, false, "red" ); + } else { + data = new IniData(null, null,type, false, false, false, "red" ); + } + + NamedNodeMap nnm = child.getAttributes(); + + for (int j = XMLConstants.OBJECTNAME; j <= XMLConstants.COORDINATESYSTEM; j++) { + Node node = nnm.getNamedItem(XMLConstants.treeElementNames[j]); + + if (node != null) { + + // get this value and set it correctly inside + Integer n = (Integer)parameters.get( node.getNodeName() ); + + + if (n != null) { + switch ( n.intValue() ){ + case XMLConstants.OBJECTNAME : + data.setName(node.getNodeValue()); + break; + case XMLConstants.VISIBLE : + data.setVisible((new Boolean(node.getNodeValue())).booleanValue()); + break; + case XMLConstants.ORBIT : + data.setOrbit((new Boolean(node.getNodeValue())).booleanValue()); + break; + case XMLConstants.COLORORBIT : + data.setColorOrbit(node.getNodeValue()); + break; + case XMLConstants.COORDINATESYSTEM : + data.setCoordinateSystem((new Boolean(node.getNodeValue())).booleanValue()); + break; + default : break; + } + } + } + } + Integer n = (Integer)parameters.get(nodeName); + //System.out.println("switch : "+n.toString()); + if (n != null) { + switch ( n.intValue() ){ + case XMLConstants.STAR : + iniObject.setParameter(data, XMLConstants.STAR); + break; + case XMLConstants.PLANET : + iniObject.setParameter(data, XMLConstants.PLANET); + break; + case XMLConstants.MOON : + iniObject.setParameter(data, XMLConstants.MOON); + break; + case XMLConstants.COMET : + iniObject.setParameter(data, XMLConstants.COMET); + break; + case XMLConstants.SATELLITE : + iniObject.setParameter(data, XMLConstants.SATELLITE); + break; + case XMLConstants.ROCKET : + iniObject.setParameter(data, XMLConstants.ROCKET); + break; + default : break; + } + } + } + + } + } + } + } + } + + /** + * Returns a string representation of a given node type. + * + * @param node the node + * @returns String a string representing this node type + */ + private String nodeType(Node node) { + int type = node.getNodeType(); + String str = ""; + switch ( type ) { + + case XMLConstants.ATTR_TYPE : str = "attribute_node"; + break; + case XMLConstants.CDATA_TYPE : str = "cdata_section_node"; + break; + case XMLConstants.COMMENT_TYPE : str = "comment_node"; + break; + case XMLConstants.DOCFRAG_TYPE : str = "document_fragment_node"; + break; + case XMLConstants.DOCUMENT_TYPE : str = "document_node"; + break; + case XMLConstants.DOCTYPE_TYPE : str = "document_type_node"; + break; + case XMLConstants.ELEMENT_TYPE : str = "element_node"; + break; + case XMLConstants.ENTITY_TYPE : str = "entity_node"; + break; + case XMLConstants.ENTITYREF_TYPE : str = "entity_reference_node"; + break; + case XMLConstants.NOTATION_TYPE : str = "notation_node"; + break; + case XMLConstants.PROCINSTR_TYPE : str = "processsing_instruction_node"; + break; + case XMLConstants.TEXT_TYPE : str = "text_node"; + break; + default : break; + } + return str; + } + + + /** + * Method parses an XML file. Depending on the parameters and + * their values it stores the information in the CelestialObjectInfo. + * + * @exception IOExecption throws an IOException in case of a read error + */ + private void parseCelestialObjectFile() throws IOException { + + // get current document from CelestialObjectInfo + Document document = cObjInfo.getDocument(); + Hashtable parameters = new Hashtable(); + + // initialize hashtable + for (int i = XMLConstants.CELESTIALOBJECT_NAMES_MIN; + i <= XMLConstants.CELESTIALOBJECT_NAMES_MAX; i++) { + parameters.put(XMLConstants.treeElementNames[i], new Integer(i)); + } + + if ( document != null ) { + + // iterate over each possible element tag + // defined in class XMLConstants + for(int tag = 0; tag < XMLConstants.treeElementNames.length; tag++ ) { + + // get node of specific tag + // show only leaf nodes + String nodeName = XMLConstants.treeElementNames[tag]; + + if ( !nodeName.equals("celestialobject") && + !nodeName.equals("general") && + !nodeName.equals("parameter") ) { + + NodeList childNodes = document.getElementsByTagName(nodeName); + + // search for value of node == nodeName + for(int i = 0; i < childNodes.getLength(); i++) { + + Node child = childNodes.item(i); + + NodeList nl = child.getChildNodes(); + + for(int j = 0; j < childNodes.getLength(); j++) { + if ( nl.item(j).getNodeType() == XMLConstants.TEXT_TYPE ) { + + // get this value and set it correctly inside + // CelestialObjectInfo..... + Integer n = (Integer)parameters.get( child.getNodeName() ); + String value = nl.item(j).getNodeValue(); + + /*System.out.println("Parameter = "+child.getNodeName()+ + " Value = "+nl.item(j).getNodeValue()); + */ + + if (n != null) { + switch ( n.intValue() ){ + + case 0 : // celestialobject + case 1 : // general + case 2 : break; // parameter + + case 3 : // type + cObjInfo.setType( value ); + break; + case 4 : // name + cObjInfo.setName( value ); + break; + case 5 : // name + cObjInfo.setParentName( value ); + break; + case 6 : // scalingfactor + cObjInfo.setScalingFactor( (new Double( value )).doubleValue() ); + break; + case 7 : // diameter + cObjInfo.setDiameter( (new Double( value )).doubleValue() ); + break; + case 8 : // mindistancefromsun + cObjInfo.setMinDistanceFromSun( (new Double( value )).doubleValue() ); + break; + case 9 : // maxdistancefromsun + cObjInfo.setMaxDistanceFromSun( (new Double( value )).doubleValue() ); + break; + case 10 : // nbrofplanetpositions + cObjInfo.setNbrOfPositions( (new Integer( value )).intValue() ); + break; + case 11 : // rotationperiod + cObjInfo.setRotationPeriod( (new Double( value )).doubleValue() ); + break; + case 12 : // orbitperiod + cObjInfo.setOrbitPeriod( (new Double( value )).doubleValue() ); + break; + case 13 : // meanorbitvelocity + cObjInfo.setMeanOrbitVelocity( (new Double( value )).doubleValue() ); + break; + case 14 : // orbiteccentricity + cObjInfo.setOrbitEccentricity( (new Double( value )).doubleValue() ); + break; + case 15 : // orbitinclinationtoecliptic + cObjInfo.setOrbitInclinationToEcliptic( (new Double( value )).doubleValue() ); + break; + case 16 : // inclinationofequatortoorbit + cObjInfo.setInclinationOfEquatorToOrbit( (new Double( value )).doubleValue() ); + break; + case 17 : // volume + cObjInfo.setVolume( (new Double( value )).doubleValue() ); + break; + case 18 : // distance + cObjInfo.setDistance( (new Double( value )).doubleValue() ); + break; + case 19 : // mass + cObjInfo.setMass( (new Double( value )).doubleValue() ); + break; + case 20 : // density + cObjInfo.setDensity( (new Double( value )).doubleValue() ); + break; + case 21 : // surfacegravity + cObjInfo.setSurfaceGravity( (new Double( value )).doubleValue() ); + break; + case 22 : // escapevelocity + cObjInfo.setEscapeVelocity( (new Double( value )).doubleValue() ); + break; + case 23 : // meantempatsolidsurface + cObjInfo.setTempAtSolidSurface( (new Double( value )).doubleValue() ); + break; + case 24 : // majoratmosphericconstitutents + cObjInfo.setAtmosphericConstitutents( value ); + break; + + case 25 : // epoch + cObjInfo.setEpoch( (new Double( value )).doubleValue() ); + break; + + case 26 : // equinox + cObjInfo.setEquinox( (new Double( value )).doubleValue() ); + break; + + case 27 : // longitudenode + cObjInfo.setLongitudeNode( (new Double( value )).doubleValue() ); + break; + + case 28 : // perihelion + cObjInfo.setPerihelion( (new Double( value )).doubleValue() ); + break; + + default : break; + } + + } + } + } + } + } + } + } + } + + + /** + * Method opens the XML file and calls the private method parse() to + * parse the XML Document. + * + * @param type the type of the xml file + */ + public void read(int type) { + + DocumentBuilderFactory factory = + DocumentBuilderFactory.newInstance(); + try { + DocumentBuilder builder = factory.newDocumentBuilder(); + + if ( type == XMLConstants.XML_CELESTIALOBJECT ) { + System.out.println(path); + File file = new File(path); + if ( file != null ) { + cObjInfo.setDocument( builder.parse( file ) ); + parseCelestialObjectFile(); + } + } else if ( type == XMLConstants.XML_INITIALIZATION ) { + //System.out.println("XML_INITIALIZATION "+path+" "+XMLConstants.DOCUMENT); + + iniObject.setParameter( builder.parse( new File(path)), + XMLConstants.DOCUMENT ); + parseInitializationFile(); + } + + } catch (SAXParseException spe) { + // Error generated by the parser + System.out.println ("\n** Parsing error" + + ", line " + spe.getLineNumber () + + ", uri " + spe.getSystemId ()); + System.out.println(" " + spe.getMessage() ); + + // Use the contained exception, if any + Exception x = spe; + if (spe.getException() != null) + x = spe.getException(); + x.printStackTrace(); + + } catch (SAXException sxe) { + // Error generated by this application + // (or a parser-initialization error) + Exception x = sxe; + if (sxe.getException() != null) + x = sxe.getException(); + x.printStackTrace(); + + } catch (ParserConfigurationException pce) { + // Parser with specified options can't be built + pce.printStackTrace(); + + } catch (IOException ioe) { + // I/O error + ioe.printStackTrace(); + } + + } // end function read() + +}// end class XMLParser diff --git a/Solar system/sss3d-source/sss3d/viewbranch/FollowCelestialObject.java b/Solar system/sss3d-source/sss3d/viewbranch/FollowCelestialObject.java new file mode 100644 index 0000000..0a09441 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/viewbranch/FollowCelestialObject.java @@ -0,0 +1,233 @@ +/* + File: FollowCelestialObject.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/viewbranch/FollowCelestialObject.java,v 1.11 2000/12/13 13:43:41 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:43:41 $ + $State: Exp $ + +*/ +package sss3d.viewbranch; + +import sss3d.SolarSystemSimulator; +import sss3d.utils.SSS3dConstants; +import sss3d.utils.xmlparser.XMLConstants; + +import java.util.Enumeration; +import javax.vecmath.*; +import javax.media.j3d.*; + +/** + * This class follow a celestial object. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.11 $ + */ +public class FollowCelestialObject extends Behavior { + + /** + * The TransformGroup node to follow the celestial object. + */ + private TransformGroup new_tgView; + + /** + * The reference to the main class. + */ + private SolarSystemSimulator sss3d; + + /** + * Wake up event for each new frame. + */ + private WakeupOnElapsedFrames wakeUp = new WakeupOnElapsedFrames(0); + + /** + * Constructor that allows to specify the desired target transform group. + * + * @param targetTG the target transform group + * @param sss3d reference to the main class + */ + public FollowCelestialObject(TransformGroup targetTG, SolarSystemSimulator sss3d) { + new_tgView = targetTG; + this.sss3d = sss3d; + } + + /** + * Override Behavior's initialize method to setup wakeup criteria. + */ + public void initialize() { + wakeupOn(wakeUp); + } + + /** + * Override Behavior's stimulus method to handle the event. + * This method is called for each new frame and + * operates on the specified transform group to follow an object with the camera. + * + * @param criteria an enumeration of triggered wakeup criteria for this behavior. + */ + public void processStimulus(Enumeration criteria) { + + if(criteria.hasMoreElements()) { + Transform3D followObject = sss3d.lnkSceneSolarSystem.getCurrentPosition(); + + boolean follow = !((Boolean)sss3d.getInitializationObject().getParameter(XMLConstants.CAMERAATORIGIN)).booleanValue(); + boolean compressed = ((Boolean)sss3d.getInitializationObject().getParameter(XMLConstants.COMPRESSED)).booleanValue(); + + // Default camera position + if(followObject == null) { + // rotate about 270 degree at the X - axis + Matrix3d rot = new Matrix3d(); + rot.rotX(Math.toRadians(270)); + + Vector3d trans; + if(compressed) { + trans = new Vector3d(0.0, 70.0, 0.0); + } else { + trans = new Vector3d(0.0, 1000.0, 0.0); + } + followObject = new Transform3D(rot, trans, 1.0); + } else if(follow) { + // Give an offset. + Vector3d offset = new Vector3d(); + + int camera = ((Integer)sss3d.getInitializationObject().getParameter(XMLConstants.CAMERA)).intValue(); + + switch(camera) { + case SSS3dConstants.CAMERA_SUN : + followObject.get(offset); + if(compressed) { + offset.add(new Vector3d(0.0, 0.0, 11.0)); + } else { + offset.add(new Vector3d(0.0, 0.0, 500.0)); + } + followObject.set(offset); + break; + case SSS3dConstants.CAMERA_MERCURY : + followObject.get(offset); + if(compressed) { + offset.add(new Vector3d(0.0, 0.0, 2.0)); + } else { + offset.add(new Vector3d(0.0, 0.0, 5.0)); + } + followObject.set(offset); + break; + case SSS3dConstants.CAMERA_VENUS : + followObject.get(offset); + if(compressed) { + offset.add(new Vector3d(0.0, 0.0, 2.0)); + } else { + offset.add(new Vector3d(0.0, 0.0, 9.0)); + } + followObject.set(offset); + break; + case SSS3dConstants.CAMERA_EARTH : + followObject.get(offset); + if(compressed) { + offset.add(new Vector3d(0.0, 0.0, 2.0)); + } else { + offset.add(new Vector3d(0.0, 0.0, 10.0)); + } + followObject.set(offset); + break; + case SSS3dConstants.CAMERA_MARS : + followObject.get(offset); + if(compressed) { + offset.add(new Vector3d(0.0, 0.0, 2.0)); + } else { + offset.add(new Vector3d(0.0, 0.0, 9.0)); + } + followObject.set(offset); + break; + case SSS3dConstants.CAMERA_JUPITER : + followObject.get(offset); + if(compressed) { + offset.add(new Vector3d(0.0, 0.0, 8.0)); + } else { + offset.add(new Vector3d(0.0, 0.0, 40.0)); + } + followObject.set(offset); + break; + case SSS3dConstants.CAMERA_SATURN : + followObject.get(offset); + if(compressed) { + offset.add(new Vector3d(0.0, 0.0, 9.0)); + } else { + offset.add(new Vector3d(0.0, 0.0, 45.0)); + } + followObject.set(offset); + break; + case SSS3dConstants.CAMERA_URANUS : + followObject.get(offset); + if(compressed) { + offset.add(new Vector3d(0.0, 0.0, 2.0)); + } else { + offset.add(new Vector3d(0.0, 0.0, 25.0)); + } + followObject.set(offset); + break; + case SSS3dConstants.CAMERA_NEPTUNE : + followObject.get(offset); + if(compressed) { + offset.add(new Vector3d(0.0, 0.0, 2.0)); + } else { + offset.add(new Vector3d(0.0, 0.0, 25.0)); + } + followObject.set(offset); + break; + case SSS3dConstants.CAMERA_PLUTO : + followObject.get(offset); + if(compressed) { + offset.add(new Vector3d(0.0, 0.0, 2.0)); + } else { + offset.add(new Vector3d(0.0, 0.0, 5.0)); + } + followObject.set(offset); + break; + case SSS3dConstants.CAMERA_MOON : + followObject.get(offset); + if(compressed) { + offset.add(new Vector3d(0.0, 0.0, 2.0)); + } else { + offset.add(new Vector3d(0.0, 0.0, 5.0)); + } + followObject.set(offset); + break; + case SSS3dConstants.CAMERA_SPACESHUTTLE : + Matrix3d m3dRot = new Matrix3d(); + Vector3d v3dTemp = new Vector3d(); + followObject.get(m3dRot); + followObject.get(offset); + if(compressed) { + m3dRot.transform(new Vector3d(0.0, 0.02, 0.1), v3dTemp); + } else { + m3dRot.transform(new Vector3d(0.0, 0.2, 1.0), v3dTemp); + } + offset.add(v3dTemp); + followObject.setTranslation(offset); + break; + default : + followObject.get(offset); + if(compressed) { + offset.add(new Vector3d(0.0, 0.0, 2.0)); + } else { + offset.add(new Vector3d(0.0, 0.0, 5.0)); + } + followObject.set(offset); + break; + } + } + new_tgView.setTransform(followObject); + } + + // Set wakeup criteria for next time. + wakeupOn(wakeUp); + } +} diff --git a/Solar system/sss3d-source/sss3d/viewbranch/KeyNavigation.java b/Solar system/sss3d-source/sss3d/viewbranch/KeyNavigation.java new file mode 100644 index 0000000..8b00bf0 --- /dev/null +++ b/Solar system/sss3d-source/sss3d/viewbranch/KeyNavigation.java @@ -0,0 +1,265 @@ +/* + File: KeyNavigation.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/viewbranch/KeyNavigation.java,v 1.12 2000/12/15 02:58:25 portm Exp $ + $Author: portm $ + $Date: 2000/12/15 02:58:25 $ + $State: Exp $ + +*/ +package sss3d.viewbranch; + +import sss3d.SolarSystemSimulator; + +import java.awt.AWTEvent; +import java.util.Enumeration; +import java.awt.event.*; +import javax.vecmath.*; +import javax.media.j3d.*; + +/** + * This class is a keyboard behavior to control the navigation + * of the view (camera). + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.12 $ + */ +public class KeyNavigation extends Behavior { + + /** + * The reference to the main class. + */ + private SolarSystemSimulator sss3d; + + /** + * The TransformGroup node to modify by the keyboard interaction. + */ + private TransformGroup new_tgView; + + /** + * Wake up event when a key is pressed. + */ + private WakeupOnAWTEvent wakeUp = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED); + + /** + * The angle to turn when the directionkeys are pressed + */ + private static final float ANGLE = (float) Math.PI / 100; + + /** + * The step size to move when a direction key is pressed + */ + private static final float F1_STEP = 0.01f; + private static final float F2_STEP = 0.1f; + private static final float F3_STEP = 1.0f; + private static final float F4_STEP = 10.0f; + private float step = F3_STEP; + + private Transform3D t3dView = new Transform3D(); + private Transform3D t3dRot = new Transform3D(); + private Vector3f v3fTrans = new Vector3f(); + private Vector3f v3fTemp = new Vector3f(); + private Matrix3f m3fRot = new Matrix3f(); + + /** + * The turn or move modus + */ + private boolean turn = false; + + /** + * Constructor that allows to specify the desired target transform group. + * + * @param targetTG the target transform group + * @param sss3d reference to the main class + */ + public KeyNavigation(TransformGroup targetTG, SolarSystemSimulator sss3d) { + new_tgView = targetTG; + this.sss3d = sss3d; + } + + /** + * Override Behavior's initialize method to setup wakeup criteria. + */ + public void initialize() { + wakeupOn(wakeUp); + } + + /** + * Override Behavior's stimulus method to handle the event. + * This method is called when a key on the keyboard has been pressed and + * operates on the specified transform group to move the camera position. + * + * @param criteria all pressed keys in a list. This will be passed by the system. + */ + public void processStimulus(Enumeration criteria) { + WakeupOnAWTEvent ev; + AWTEvent[] events; + + if(criteria.hasMoreElements()) { + ev = (WakeupOnAWTEvent) criteria.nextElement(); + events = ev.getAWTEvent(); + KeyEvent eventKey = (KeyEvent) events[0]; + int keyCode = eventKey.getKeyCode(); + + new_tgView.getTransform(t3dView); + + if(keyCode == KeyEvent.VK_F1) { + step = F1_STEP; + if(sss3d.infoPanel != null) { + sss3d.infoPanel.setFactor(1); + } + } else if(keyCode == KeyEvent.VK_F2) { + step = F2_STEP; + if(sss3d.infoPanel != null) { + sss3d.infoPanel.setFactor(2); + } + } else if(keyCode == KeyEvent.VK_F3) { + step = F3_STEP; + if(sss3d.infoPanel != null) { + sss3d.infoPanel.setFactor(3); + } + } else if(keyCode == KeyEvent.VK_F4) { + step = F4_STEP; + if(sss3d.infoPanel != null) { + sss3d.infoPanel.setFactor(4); + } + } else if(keyCode == KeyEvent.VK_SPACE) { + turn = !turn; + if(sss3d.infoPanel != null) { + sss3d.infoPanel.setNavigationMode(); + } + } else if(keyCode == KeyEvent.VK_P) { + if(sss3d.canvas != null) { + sss3d.canvas.writeJPEG_ = true; + sss3d.canvas.repaint(); + } + } else if(keyCode == KeyEvent.VK_G) { + sss3d.lnkSceneSolarSystem.setAnimation(true, true); + if(sss3d.lnkInfoBox != null) { + sss3d.lnkInfoBox.miGo.setEnabled(false); + sss3d.lnkInfoBox.miStop.setEnabled(true); + sss3d.lnkInfoBox.miRot.setEnabled(true); + } + if(sss3d.infoPanel != null) { + sss3d.infoPanel.startDate(); + } + } else if(keyCode == KeyEvent.VK_S) { + sss3d.lnkSceneSolarSystem.setAnimation(false, false); + if(sss3d.lnkInfoBox != null) { + sss3d.lnkInfoBox.miGo.setEnabled(true); + sss3d.lnkInfoBox.miStop.setEnabled(false); + sss3d.lnkInfoBox.miRot.setEnabled(false); + } + if(sss3d.infoPanel != null) { + sss3d.infoPanel.stopDate(); + } + } else if(!turn) { + switch(keyCode) { + case KeyEvent.VK_UP: // Up arrow - to move up + t3dView.get(v3fTrans); + t3dView.get(m3fRot); + m3fRot.transform(new Vector3f(0.0f, step, 0.0f), v3fTemp); + v3fTrans.add(v3fTemp); // v3fTemp = result of the product .transform + t3dView.setTranslation(v3fTrans); + break; + + case KeyEvent.VK_DOWN: // Down arrow - to move down + t3dView.get(v3fTrans); + t3dView.get(m3fRot); + m3fRot.transform(new Vector3f(0.0f, -step, 0.0f), v3fTemp); + v3fTrans.add(v3fTemp); + t3dView.setTranslation(v3fTrans); + break; + + case KeyEvent.VK_RIGHT: // Right arrow - to move right + t3dView.get(v3fTrans); + t3dView.get(m3fRot); + m3fRot.transform(new Vector3f( step, 0.0f, 0.0f), v3fTemp); + v3fTrans.add(v3fTemp); + t3dView.setTranslation(v3fTrans); + break; + + case KeyEvent.VK_LEFT: // Left arrow - to move left + t3dView.get(v3fTrans); + t3dView.get(m3fRot); + m3fRot.transform(new Vector3f(-step, 0.0f, 0.0f), v3fTemp); + v3fTrans.add(v3fTemp); + t3dView.setTranslation(v3fTrans); + break; + + case KeyEvent.VK_PAGE_UP: // Page Up - to move forward + t3dView.get(v3fTrans); + t3dView.get(m3fRot); + m3fRot.transform(new Vector3f(0.0f, 0.0f, -step), v3fTemp); + v3fTrans.add(v3fTemp); + t3dView.setTranslation(v3fTrans); + break; + + case KeyEvent.VK_PAGE_DOWN: // Page Down - to move backward + t3dView.get(v3fTrans); + t3dView.get(m3fRot); + m3fRot.transform(new Vector3f(0.0f, 0.0f, step), v3fTemp); + v3fTrans.add(v3fTemp); + t3dView.setTranslation(v3fTrans); + break; + + case KeyEvent.VK_HOME: // Home - go to the start position + t3dView.setIdentity(); + break; + + default: + } + } else { + switch(keyCode) { + case KeyEvent.VK_UP: // Up arrow - to turn up + t3dRot.rotX(-ANGLE); + t3dView.mul(t3dRot); + break; + + case KeyEvent.VK_DOWN: // Down arrow - to turn down + t3dRot.rotX(ANGLE); + t3dView.mul(t3dRot); + break; + + case KeyEvent.VK_RIGHT: // Right arrow - to turn right + t3dRot.rotY(-ANGLE); + t3dView.mul(t3dRot); + break; + + case KeyEvent.VK_LEFT: // Left arrow - to turn left + t3dRot.rotY(ANGLE); + t3dView.mul(t3dRot); + break; + + case KeyEvent.VK_PAGE_UP: // Page Up - to turn + t3dRot.rotZ(-ANGLE); + t3dView.mul(t3dRot); + break; + + case KeyEvent.VK_PAGE_DOWN: // Page Down - to turn arround + t3dRot.rotZ(ANGLE); + t3dView.mul(t3dRot); + break; + + case KeyEvent.VK_HOME: // Home - go to the start position + t3dView.setIdentity(); + break; + + default: + } + } + new_tgView.setTransform(t3dView); + } + + // Set wakeup criteria for next time. + wakeupOn(wakeUp); + } +} diff --git a/Solar system/sss3d-source/sss3d/viewbranch/ViewBranch.java b/Solar system/sss3d-source/sss3d/viewbranch/ViewBranch.java new file mode 100644 index 0000000..3c30f0c --- /dev/null +++ b/Solar system/sss3d-source/sss3d/viewbranch/ViewBranch.java @@ -0,0 +1,184 @@ +/* + File: ViewBranch.java + + University of Applied Science Berne,HTA-Biel/Bienne, + Computer Science Department. + + Diploma thesis J3D Solar System Simulator + Originally written by Marcel Portner & Bernhard Hari (c) 2000 + + CVS - Information : + + $Header: /var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/viewbranch/ViewBranch.java,v 1.13 2000/12/13 13:44:36 portm Exp $ + $Author: portm $ + $Date: 2000/12/13 13:44:36 $ + $State: Exp $ + +*/ +package sss3d.viewbranch; + +import sss3d.utils.SSS3dConstants; +import sss3d.SolarSystemSimulator; +import sss3d.utils.xmlparser.XMLConstants; + +import javax.media.j3d.*; +import javax.vecmath.*; +import com.sun.j3d.utils.behaviors.keyboard.*; + +/** + * This class creates all necessary objects on the "View Branch" + * side of the scene graph. + * + * @author Marcel Portner & Bernhard Hari + * @version $Revision: 1.13 $ + */ +public class ViewBranch extends Object { + + private Canvas3D canvasL; + private Canvas3D canvasR; + private SolarSystemSimulator sss3d; + private PhysicalEnvironment environment; + + private TransformGroup vpTrGrKey; + + private KeyNavigation keyNav; + + /** + * Initializes a new ViewBranch that allows to specify the desired Canvas3D. + * + * @param sss3d reference to the main class + * @param canvasL the Canvas3D being used for the left eye or the default + * @param canvasR the Canvas3D being used for the right eye or null + */ + public ViewBranch(SolarSystemSimulator sss3d, Canvas3D canvasL, Canvas3D canvasR) { + this.canvasL = canvasL; + this.canvasR = canvasR; + this.sss3d = sss3d; + } + + /** + * Give the physical environment. + * + * @return the physical environment. + */ + public PhysicalEnvironment getPhysicalEnvironment() { + return environment; + } + + /** + * Create the ViewBranch. + * + * @return the root of the ViewBranch. + */ + public BranchGroup myViewBranch() { + // Create the minimal PhysicalBody and PhysicalEnvironnement + // instances with default parameters. + PhysicalBody body = new PhysicalBody(); + environment = new PhysicalEnvironment(); + + // Create a View instance and attach the Canvas3D, the PhysicalBody + // and the PhysicalEnvironment to it. + View view = new View(); + view.addCanvas3D(canvasL); + if(canvasR != null) { + view.addCanvas3D(canvasR); + } + view.setPhysicalBody(body); + view.setPhysicalEnvironment(environment); + + /* + //PHYSICAL_EYE, PHYSICAL_SCREEN, VIRTUAL_EYE, or VIRTUAL_SCREEN + view.setFrontClipPolicy(View.PHYSICAL_SCREEN); + view.setBackClipPolicy(View.PHYSICAL_SCREEN); + */ + // set back and front clipping for different views + if ( ((Boolean)sss3d.getObjectsInformation().getParameter(XMLConstants.COMPRESSED)).booleanValue() ) { + view.setFrontClipDistance(SSS3dConstants.FRONTCLIP_COMPRESSED); + view.setBackClipDistance(SSS3dConstants.BACKCLIP_COMPRESSED); + } else { + view.setFrontClipDistance(SSS3dConstants.FRONTCLIP); + view.setBackClipDistance(SSS3dConstants.BACKCLIP); + } + /* + // RELATIVE_TO_SCREEN, RELATIVE_TO_WINDOW, RELATIVE_TO_FIELD_OF_VIEW, RELATIVE_TO_COEXISTENCE + view.setWindowEyepointPolicy(View.RELATIVE_TO_COEXISTENCE); + view.setLeftManualEyeInCoexistence(new Point3d(0.0142, 0.0135, 0.4572)); + view.setRightManualEyeInCoexistence(new Point3d(0.0208, 0.0135, 0.4572)); + */ + + // Create a ViewPlatform instance and bind it with the View instance. + ViewPlatform vp = new ViewPlatform(); + // vp.setActivationRadius(SSS3dConstants.VISIBILITY); + + view.attachViewPlatform(vp); + + // Create the necessary TransformGroup node for the ViewPlatform's + // motion, which is guided by the keys. + vpTrGrKey = new TransformGroup(); + + // With the ALLOW_TRANSFORM_READ and ALLOW_TRANSFORM_WRITE + // capabilities, we allow the modification of the TransformGroup's + // code by the Behavior's code at run time. + vpTrGrKey.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); + vpTrGrKey.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + + // Attach the ViewPlatform instance to the TransformGroup + // node vpTrGrKey. + vpTrGrKey.addChild(vp); + + // View-platform's motion (rotation, zoom and translation) + keyNav = new KeyNavigation(vpTrGrKey, sss3d); + keyNav.setSchedulingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), + SSS3dConstants.BOUNDRADIUS)); + + // Attach the keyNav instance to the TransformGroup + // node vpTrGrKey. + vpTrGrKey.addChild(keyNav); + + // Create the necessary TransformGroup node for the ViewPlatform's + // motion, which is guided by the keys. + TransformGroup follow = new TransformGroup(); + + // With the ALLOW_TRANSFORM_WRITE capabilities, we allow + // the modification of the TransformGroup's code by + // the Behavior's code at run time. + follow.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + + // Attach the vpTrGrKey instance to the TransformGroup + // node follow. + follow.addChild(vpTrGrKey); + + // Create a follow celestial object + FollowCelestialObject fObject = new FollowCelestialObject(follow, sss3d); + fObject.setSchedulingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), + SSS3dConstants.BOUNDRADIUS)); + + // Attach the fObject instance to the TransformGroup + // node follow. + follow.addChild(fObject); + + // Add the TransformGroup node vpTrGrKey to the new + // BranchGroup node vbBrGr. + BranchGroup vbBrGr = new BranchGroup(); + vbBrGr.addChild(follow); + + // Compile the ViewBranch to optimize the performances. + vbBrGr.compile(); + + // Return the final version of the view branch BranchGroup node vbBrGr. + return vbBrGr; + } + + /** + * Set the camera position to the init state. + */ + public void setStartPosition() { + try { + vpTrGrKey.setTransform(new Transform3D()); + } catch(CapabilityNotSetException cnse) { + System.out.println("Error: " + cnse.toString()); + } catch(BadTransformException bte) { + System.out.println("Error: " + bte.toString()); + } + } +} diff --git a/Solar system/sss3d-source/xml/CVS/Entries b/Solar system/sss3d-source/xml/CVS/Entries new file mode 100644 index 0000000..fc8a3aa --- /dev/null +++ b/Solar system/sss3d-source/xml/CVS/Entries @@ -0,0 +1,80 @@ +/spaceshuttle.xml/1.1/Fri Dec 01 15:41:43 2000// +/adrastea.xml/1.2/Fri Dec 15 03:01:15 2000// +/amalthea.xml/1.2/Fri Dec 15 03:01:15 2000// +/ananke.xml/1.2/Fri Dec 15 03:01:15 2000// +/ariel.xml/1.2/Fri Dec 15 03:01:15 2000// +/atlas.xml/1.2/Fri Dec 15 03:01:15 2000// +/belinda.xml/1.2/Fri Dec 15 03:01:15 2000// +/bianca.xml/1.2/Fri Dec 15 03:01:15 2000// +/caliban.xml/1.2/Fri Dec 15 03:01:15 2000// +/callisto.xml/1.2/Fri Dec 15 03:01:15 2000// +/calypso.xml/1.2/Fri Dec 15 03:01:15 2000// +/carme.xml/1.2/Fri Dec 15 03:01:15 2000// +/charon.xml/1.2/Fri Dec 15 03:01:15 2000// +/cordelia.xml/1.2/Fri Dec 15 03:01:15 2000// +/cressida.xml/1.2/Fri Dec 15 03:01:16 2000// +/deimos.xml/1.2/Fri Dec 15 03:01:16 2000// +/desdemona.xml/1.2/Fri Dec 15 03:01:16 2000// +/despina.xml/1.2/Fri Dec 15 03:01:16 2000// +/dione.xml/1.2/Fri Dec 15 03:01:16 2000// +/earth.xml/1.3/Fri Dec 15 03:01:16 2000// +/elara.xml/1.2/Fri Dec 15 03:01:16 2000// +/enceladus.xml/1.2/Fri Dec 15 03:01:16 2000// +/epimetheus.xml/1.2/Fri Dec 15 03:01:16 2000// +/europa.xml/1.2/Fri Dec 15 03:01:16 2000// +/galatea.xml/1.2/Fri Dec 15 03:01:16 2000// +/ganymede.xml/1.2/Fri Dec 15 03:01:16 2000// +/hale-bopp.xml/1.3/Fri Dec 15 03:01:16 2000// +/halley.xml/1.4/Fri Dec 15 03:01:16 2000// +/helene.xml/1.2/Fri Dec 15 03:01:17 2000// +/himalia.xml/1.2/Fri Dec 15 03:01:17 2000// +/hyperion.xml/1.2/Fri Dec 15 03:01:17 2000// +/iapetus.xml/1.2/Fri Dec 15 03:01:17 2000// +/io.xml/1.2/Fri Dec 15 03:01:17 2000// +/janus.xml/1.2/Fri Dec 15 03:01:17 2000// +/juliet.xml/1.2/Fri Dec 15 03:01:17 2000// +/jupiter.xml/1.3/Fri Dec 15 03:01:17 2000// +/larissa.xml/1.2/Fri Dec 15 03:01:17 2000// +/leda.xml/1.2/Fri Dec 15 03:01:17 2000// +/lysithea.xml/1.2/Fri Dec 15 03:01:17 2000// +/mars.xml/1.3/Fri Dec 15 03:01:17 2000// +/mercury.xml/1.3/Fri Dec 15 03:01:17 2000// +/metis.xml/1.2/Fri Dec 15 03:01:17 2000// +/mimas.xml/1.2/Fri Dec 15 03:01:17 2000// +/miranda.xml/1.2/Fri Dec 15 03:01:17 2000// +/moon.xml/1.3/Fri Dec 15 03:01:17 2000// +/naiad.xml/1.2/Fri Dec 15 03:01:17 2000// +/neptune.xml/1.3/Fri Dec 15 03:01:17 2000// +/nereid.xml/1.2/Fri Dec 15 03:01:18 2000// +/oberon.xml/1.2/Fri Dec 15 03:01:18 2000// +/ophelia.xml/1.2/Fri Dec 15 03:01:18 2000// +/pan.xml/1.2/Fri Dec 15 03:01:18 2000// +/pandora.xml/1.2/Fri Dec 15 03:01:18 2000// +/pasiphae.xml/1.2/Fri Dec 15 03:01:18 2000// +/phobos.xml/1.2/Fri Dec 15 03:01:18 2000// +/phoebe.xml/1.2/Fri Dec 15 03:01:18 2000// +/pluto.xml/1.3/Fri Dec 15 03:01:18 2000// +/portia.xml/1.2/Fri Dec 15 03:01:18 2000// +/prometheus.xml/1.2/Fri Dec 15 03:01:18 2000// +/prospero.xml/1.2/Fri Dec 15 03:01:18 2000// +/proteus.xml/1.2/Fri Dec 15 03:01:18 2000// +/puck.xml/1.2/Fri Dec 15 03:01:19 2000// +/rhea.xml/1.2/Fri Dec 15 03:01:19 2000// +/rosalind.xml/1.2/Fri Dec 15 03:01:19 2000// +/saturn.xml/1.3/Fri Dec 15 03:01:19 2000// +/setebos.xml/1.2/Fri Dec 15 03:01:19 2000// +/sinope.xml/1.2/Fri Dec 15 03:01:19 2000// +/stephano.xml/1.2/Fri Dec 15 03:01:19 2000// +/sun.xml/1.3/Fri Dec 15 03:01:19 2000// +/sycorax.xml/1.2/Fri Dec 15 03:01:19 2000// +/telesto.xml/1.2/Fri Dec 15 03:01:19 2000// +/tethys.xml/1.2/Fri Dec 15 03:01:19 2000// +/thalassa.xml/1.2/Fri Dec 15 03:01:19 2000// +/thebe.xml/1.2/Fri Dec 15 03:01:19 2000// +/titan.xml/1.2/Fri Dec 15 03:01:19 2000// +/titania.xml/1.2/Fri Dec 15 03:01:19 2000// +/triton.xml/1.2/Fri Dec 15 03:01:20 2000// +/umbriel.xml/1.2/Fri Dec 15 03:01:20 2000// +/uranus.xml/1.3/Fri Dec 15 03:01:20 2000// +/venus.xml/1.3/Fri Dec 15 03:01:20 2000// +D diff --git a/Solar system/sss3d-source/xml/CVS/Repository b/Solar system/sss3d-source/xml/CVS/Repository new file mode 100644 index 0000000..62a4b8e --- /dev/null +++ b/Solar system/sss3d-source/xml/CVS/Repository @@ -0,0 +1 @@ +/var/cvsreps/projects/c450/2000/sss3d/source_diploma/sss3d/utils/xmlparser/xml diff --git a/Solar system/sss3d-source/xml/CVS/Root b/Solar system/sss3d-source/xml/CVS/Root new file mode 100644 index 0000000..a2fee59 --- /dev/null +++ b/Solar system/sss3d-source/xml/CVS/Root @@ -0,0 +1 @@ +:pserver:portm@cvs.hta-bi.bfh.ch:/var/cvsreps/projects diff --git a/Solar system/sss3d-source/xml/adrastea.xml b/Solar system/sss3d-source/xml/adrastea.xml new file mode 100644 index 0000000..06277a2 --- /dev/null +++ b/Solar system/sss3d-source/xml/adrastea.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + adrastea + jupiter + + + 1.0 + 20 + 18 + 0.298 + 0.298 + 0 + 0 + 128981 + 1.91e19 + 4.5 + + diff --git a/Solar system/sss3d-source/xml/amalthea.xml b/Solar system/sss3d-source/xml/amalthea.xml new file mode 100644 index 0000000..fd0f6cb --- /dev/null +++ b/Solar system/sss3d-source/xml/amalthea.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + amalthea + jupiter + + + 1.0 + 188 + 18 + 0.498 + 0.498 + 0.0026 + 0.363 + 181366 + 7.17e21 + 1.8 + + diff --git a/Solar system/sss3d-source/xml/ananke.xml b/Solar system/sss3d-source/xml/ananke.xml new file mode 100644 index 0000000..57f4b74 --- /dev/null +++ b/Solar system/sss3d-source/xml/ananke.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + ananke + jupiter + + + 1.0 + 30 + 18 + 610.45 + 610.45 + 0.24 + 148.89 + 21280000 + 3.82e19 + 2.7 + + diff --git a/Solar system/sss3d-source/xml/ariel.xml b/Solar system/sss3d-source/xml/ariel.xml new file mode 100644 index 0000000..d238840 --- /dev/null +++ b/Solar system/sss3d-source/xml/ariel.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + ariel + uranus + + + 1.0 + 1162 + 18 + 2.52 + 2.52 + 0.0012 + 0.042 + 190945 + 1.35e24 + 1.67 + + diff --git a/Solar system/sss3d-source/xml/atlas.xml b/Solar system/sss3d-source/xml/atlas.xml new file mode 100644 index 0000000..0a84ecb --- /dev/null +++ b/Solar system/sss3d-source/xml/atlas.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + atlas + saturn + + + 1.0 + 30 + 18 + 0.602 + 0.602 + 0 + 0 + 137662 + + diff --git a/Solar system/sss3d-source/xml/belinda.xml b/Solar system/sss3d-source/xml/belinda.xml new file mode 100644 index 0000000..eb4eb87 --- /dev/null +++ b/Solar system/sss3d-source/xml/belinda.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + belinda + uranus + + + 1.0 + 68 + 18 + 0.624 + 0.624 + 0.0001 + 0.031 + 75256 + + diff --git a/Solar system/sss3d-source/xml/bianca.xml b/Solar system/sss3d-source/xml/bianca.xml new file mode 100644 index 0000000..02ca77e --- /dev/null +++ b/Solar system/sss3d-source/xml/bianca.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + bianca + uranus + + + 1.0 + 44 + 18 + 0.435 + 0.435 + 0.0009 + 0.193 + 59166 + + diff --git a/Solar system/sss3d-source/xml/caliban.xml b/Solar system/sss3d-source/xml/caliban.xml new file mode 100644 index 0000000..8d7cbca --- /dev/null +++ b/Solar system/sss3d-source/xml/caliban.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + caliban + uranus + + + 1.0 + 60 + 18 + 580 + 580 + 0.08 + 140 + 7169000 + + diff --git a/Solar system/sss3d-source/xml/callisto.xml b/Solar system/sss3d-source/xml/callisto.xml new file mode 100644 index 0000000..118dcfe --- /dev/null +++ b/Solar system/sss3d-source/xml/callisto.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + callisto + jupiter + + + 1.0 + 4806 + 18 + 16.689 + 16.689 + 0.0074 + 0.253 + 1882759 + 1.08e26 + 1.85 + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/calypso.xml b/Solar system/sss3d-source/xml/calypso.xml new file mode 100644 index 0000000..7afa6b1 --- /dev/null +++ b/Solar system/sss3d-source/xml/calypso.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + calypso + saturn + + + 1.0 + 26 + 18 + 1.888 + 1.888 + 0.0002 + 1.471 + 294673 + + diff --git a/Solar system/sss3d-source/xml/carme.xml b/Solar system/sss3d-source/xml/carme.xml new file mode 100644 index 0000000..cec6bfd --- /dev/null +++ b/Solar system/sss3d-source/xml/carme.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + carme + jupiter + + + 1.0 + 40 + 18 + 702.28 + 702.28 + 0.25 + 164.91 + 23400000 + 9.56e19 + 2.8 + + diff --git a/Solar system/sss3d-source/xml/charon.xml b/Solar system/sss3d-source/xml/charon.xml new file mode 100644 index 0000000..59f8730 --- /dev/null +++ b/Solar system/sss3d-source/xml/charon.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + charon + pluto + + + 1.0 + 1172 + 18 + 6.387 + 6.387 + 0.0072 + 96.57 + 19662 + 1.9e24 + 2.24 + + diff --git a/Solar system/sss3d-source/xml/cordelia.xml b/Solar system/sss3d-source/xml/cordelia.xml new file mode 100644 index 0000000..746ed7e --- /dev/null +++ b/Solar system/sss3d-source/xml/cordelia.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + cordelia + uranus + + + 1.0 + 26 + 18 + 0.335 + 0.335 + 0.0003 + 0.085 + 49752 + + diff --git a/Solar system/sss3d-source/xml/cressida.xml b/Solar system/sss3d-source/xml/cressida.xml new file mode 100644 index 0000000..ad28ad1 --- /dev/null +++ b/Solar system/sss3d-source/xml/cressida.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + cressida + uranus + + + 1.0 + 66 + 18 + 0.464 + 0.464 + 0.0004 + 0.006 + 61767 + + diff --git a/Solar system/sss3d-source/xml/deimos.xml b/Solar system/sss3d-source/xml/deimos.xml new file mode 100644 index 0000000..d355cde --- /dev/null +++ b/Solar system/sss3d-source/xml/deimos.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + deimos + mars + + + 1.0 + 12 + 18 + 1.262 + 1.262 + 0.0003 + 1.79 + 23462 + 1.8e18 + 1.8 + + diff --git a/Solar system/sss3d-source/xml/desdemona.xml b/Solar system/sss3d-source/xml/desdemona.xml new file mode 100644 index 0000000..601d3f0 --- /dev/null +++ b/Solar system/sss3d-source/xml/desdemona.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + desdemona + uranus + + + 1.0 + 58 + 18 + 0.474 + 0.474 + 0.0001 + 0.113 + 62658 + + diff --git a/Solar system/sss3d-source/xml/despina.xml b/Solar system/sss3d-source/xml/despina.xml new file mode 100644 index 0000000..365678c --- /dev/null +++ b/Solar system/sss3d-source/xml/despina.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + despina + neptune + + + 1.0 + 148 + 18 + 0.335 + 0.335 + 0.0001 + 0.065 + 52526 + + diff --git a/Solar system/sss3d-source/xml/dione.xml b/Solar system/sss3d-source/xml/dione.xml new file mode 100644 index 0000000..7a6dfd9 --- /dev/null +++ b/Solar system/sss3d-source/xml/dione.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + dione + saturn + + + 1.0 + 1120 + 18 + 2.737 + 2.737 + 0.0021 + 0.021 + 377714 + 1.05e24 + 1.44 + + diff --git a/Solar system/sss3d-source/xml/earth.xml b/Solar system/sss3d-source/xml/earth.xml new file mode 100644 index 0000000..c9b034b --- /dev/null +++ b/Solar system/sss3d-source/xml/earth.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + earth + sun + + + 1.0 + 12756.28 + 3.0 + 3.4 + 36 + 0.99726968 + 0.99997862 + 29.7859 + 0.01671022 + 0.00005 + 23.45 + 1 + 1.00000011 + 5.9742e27 + 5.515 + 9.81 + 11.18 + 288 + N2,O2,Ar + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/elara.xml b/Solar system/sss3d-source/xml/elara.xml new file mode 100644 index 0000000..47e5a0a --- /dev/null +++ b/Solar system/sss3d-source/xml/elara.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + elara + jupiter + + + 1.0 + 76 + 18 + 0.5 + 259.64 + 0.22 + 26.63 + 11740000 + 7.77e20 + 3.3 + + diff --git a/Solar system/sss3d-source/xml/enceladus.xml b/Solar system/sss3d-source/xml/enceladus.xml new file mode 100644 index 0000000..90c6abe --- /dev/null +++ b/Solar system/sss3d-source/xml/enceladus.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + enceladus + saturn + + + 1.0 + 498 + 18 + 1.37 + 1.37 + 0.0048 + 0.016 + 238254 + 7.3e22 + 1.12 + + diff --git a/Solar system/sss3d-source/xml/epimetheus.xml b/Solar system/sss3d-source/xml/epimetheus.xml new file mode 100644 index 0000000..14b95cf --- /dev/null +++ b/Solar system/sss3d-source/xml/epimetheus.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + epimetheus + saturn + + + 1.0 + 114 + 18 + 0.694 + 0.694 + 0.0126 + 0.326 + 151399 + 5.59e20 + 0.6 + + diff --git a/Solar system/sss3d-source/xml/europa.xml b/Solar system/sss3d-source/xml/europa.xml new file mode 100644 index 0000000..21d1836 --- /dev/null +++ b/Solar system/sss3d-source/xml/europa.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + europa + jupiter + + + 1.0 + 3130 + 18 + 3.551 + 3.551 + 0.0101 + 0.464 + 671079 + 4.8e25 + 2.99 + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/galatea.xml b/Solar system/sss3d-source/xml/galatea.xml new file mode 100644 index 0000000..a4d4550 --- /dev/null +++ b/Solar system/sss3d-source/xml/galatea.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + galatea + neptune + + + 1.0 + 158 + 18 + 0.429 + 0.429 + 0.0001 + 0.054 + 61953 + + diff --git a/Solar system/sss3d-source/xml/ganymede.xml b/Solar system/sss3d-source/xml/ganymede.xml new file mode 100644 index 0000000..a7e9843 --- /dev/null +++ b/Solar system/sss3d-source/xml/ganymede.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + ganymede + jupiter + + + 1.0 + 5268 + 18 + 7.155 + 7.155 + 0.0006 + 0.186 + 1070428 + 1.48e26 + 1.94 + + diff --git a/Solar system/sss3d-source/xml/hale-bopp.xml b/Solar system/sss3d-source/xml/hale-bopp.xml new file mode 100644 index 0000000..4218d07 --- /dev/null +++ b/Solar system/sss3d-source/xml/hale-bopp.xml @@ -0,0 +1,41 @@ + + + + + + + + + comet + hale-bopp + + + 1.0 + 49.4079368 + 15000 + 0.0 + 2523.02857 + 0.995067461 + 89.43003640000001 + 0.914140912 + 50539.1372572 + 2000 + 282.4707034 + 130.5887545 + + diff --git a/Solar system/sss3d-source/xml/halley.xml b/Solar system/sss3d-source/xml/halley.xml new file mode 100644 index 0000000..47328fe --- /dev/null +++ b/Solar system/sss3d-source/xml/halley.xml @@ -0,0 +1,41 @@ + + + + + + + + + comet + halley + + + 1.0 + 16.4424817 + 2000 + 0.0 + 75.99865 + 0.9672772549999999 + 162.242202 + 0.587103753 + 46470.4589563 + 1950.0 + 58.8600459 + 111.8656026 + + diff --git a/Solar system/sss3d-source/xml/helene.xml b/Solar system/sss3d-source/xml/helene.xml new file mode 100644 index 0000000..c9063f7 --- /dev/null +++ b/Solar system/sss3d-source/xml/helene.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + helene + saturn + + + 1.0 + 32 + 18 + 2.737 + 2.737 + 0.0016 + 0.2 + 377416 + + diff --git a/Solar system/sss3d-source/xml/himalia.xml b/Solar system/sss3d-source/xml/himalia.xml new file mode 100644 index 0000000..fd2b549 --- /dev/null +++ b/Solar system/sss3d-source/xml/himalia.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + himalia + jupiter + + + 1.0 + 186 + 18 + 0.4 + 250.56 + 0.16 + 27.50 + 11460000 + 9.56e21 + 2.8 + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/hyperion.xml b/Solar system/sss3d-source/xml/hyperion.xml new file mode 100644 index 0000000..afc73f5 --- /dev/null +++ b/Solar system/sss3d-source/xml/hyperion.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + hyperion + saturn + + + 1.0 + 286 + 18 + 21.277 + 21.277 + 0.1046 + 0.639 + 1481471 + 1.77e22 + 1.4 + + diff --git a/Solar system/sss3d-source/xml/iapetus.xml b/Solar system/sss3d-source/xml/iapetus.xml new file mode 100644 index 0000000..ad14098 --- /dev/null +++ b/Solar system/sss3d-source/xml/iapetus.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + iapetus + saturn + + + 1.0 + 1436 + 18 + 79.331 + 79.331 + 0.0288 + 18.021 + 3562180 + 1.59e24 + 1.02 + + diff --git a/Solar system/sss3d-source/xml/io.xml b/Solar system/sss3d-source/xml/io.xml new file mode 100644 index 0000000..98dbe0b --- /dev/null +++ b/Solar system/sss3d-source/xml/io.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + io + jupiter + + + 1.0 + 3642 + 18 + 1.769 + 1.769 + 0.0041 + 0.036 + 421769 + 8.93e25 + 3.53 + + diff --git a/Solar system/sss3d-source/xml/janus.xml b/Solar system/sss3d-source/xml/janus.xml new file mode 100644 index 0000000..1dc10b3 --- /dev/null +++ b/Solar system/sss3d-source/xml/janus.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + janus + saturn + + + 1.0 + 178 + 18 + 0.695 + 0.695 + 0.0066 + 0.168 + 151447 + 1.98e21 + 0.65 + + diff --git a/Solar system/sss3d-source/xml/juliet.xml b/Solar system/sss3d-source/xml/juliet.xml new file mode 100644 index 0000000..1f0cb03 --- /dev/null +++ b/Solar system/sss3d-source/xml/juliet.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + juliet + uranus + + + 1.0 + 84 + 18 + 0.493 + 0.493 + 0.0007 + 0.065 + 64358 + + diff --git a/Solar system/sss3d-source/xml/jupiter.xml b/Solar system/sss3d-source/xml/jupiter.xml new file mode 100644 index 0000000..aef1ed2 --- /dev/null +++ b/Solar system/sss3d-source/xml/jupiter.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + jupiter + sun + + + 1.0 + 142984.0 + 6.4 + 6.8 + 36 + 0.41354 + 11.85652502 + 13.0697 + 0.04839266 + 1.30530 + 3.12 + 1316 + 5.20336301 + 1898.7e27 + 1.33 + 23.12 + 59.54 + 120 + H2,He + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/larissa.xml b/Solar system/sss3d-source/xml/larissa.xml new file mode 100644 index 0000000..94b1a32 --- /dev/null +++ b/Solar system/sss3d-source/xml/larissa.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + larissa + neptune + + + 1.0 + 192 + 18 + 0.555 + 0.555 + 0.0014 + 0.201 + 73548 + + diff --git a/Solar system/sss3d-source/xml/leda.xml b/Solar system/sss3d-source/xml/leda.xml new file mode 100644 index 0000000..9f22d1f --- /dev/null +++ b/Solar system/sss3d-source/xml/leda.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + leda + jupiter + + + 1.0 + 16 + 18 + 240.92 + 240.92 + 0.16 + 27.46 + 11160000 + 5.68e18 + 2.7 + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/lysithea.xml b/Solar system/sss3d-source/xml/lysithea.xml new file mode 100644 index 0000000..3f2a09d --- /dev/null +++ b/Solar system/sss3d-source/xml/lysithea.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + lysithea + jupiter + + + 1.0 + 36 + 18 + 259.2 + 259.2 + 0.11 + 28.30 + 11720000 + 7.77e19 + 3.1 + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/mars.xml b/Solar system/sss3d-source/xml/mars.xml new file mode 100644 index 0000000..d38a072 --- /dev/null +++ b/Solar system/sss3d-source/xml/mars.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + mars + sun + + + 1.0 + 6794.0 + 4.2 + 4.6 + 36 + 1.02595675 + 1.88071105 + 24.1309 + 0.09341233 + 1.85061 + 25.19 + 0.149 + 1.52366231 + 0.64191e27 + 3.94 + 3.71 + 5.02 + 218 + CO2,N2,Ar + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/mercury.xml b/Solar system/sss3d-source/xml/mercury.xml new file mode 100644 index 0000000..c0e979d --- /dev/null +++ b/Solar system/sss3d-source/xml/mercury.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + mercury + sun + + + 1.0 + 4879.4 + 1.4 + 1.8 + 36 + 58.6462 + 0.24084445 + 47.8725 + 0.20563069 + 7.00487 + 0.0 + 0.054 + 0.38709893 + 0.33022e27 + 5.43 + 3.7 + 4.25 + 440 + ? + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/metis.xml b/Solar system/sss3d-source/xml/metis.xml new file mode 100644 index 0000000..b42af2e --- /dev/null +++ b/Solar system/sss3d-source/xml/metis.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + metis + jupiter + + + 1.0 + 40 + 18 + 0.295 + 0.295 + 0 + 0 + 127980 + 9.56e19 + 2.8 + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/mimas.xml b/Solar system/sss3d-source/xml/mimas.xml new file mode 100644 index 0000000..db21f60 --- /dev/null +++ b/Solar system/sss3d-source/xml/mimas.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + mimas + saturn + + + 1.0 + 398 + 18 + 0.943 + 0.943 + 0.0201 + 1.585 + 185727 + 3.75e22 + 1.14 + + diff --git a/Solar system/sss3d-source/xml/miranda.xml b/Solar system/sss3d-source/xml/miranda.xml new file mode 100644 index 0000000..a926a08 --- /dev/null +++ b/Solar system/sss3d-source/xml/miranda.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + miranda + uranus + + + 1.0 + 472 + 18 + 1.413 + 1.413 + 0.0018 + 4.341 + 129872 + 6.59e21 + 1.2 + + diff --git a/Solar system/sss3d-source/xml/moon.xml b/Solar system/sss3d-source/xml/moon.xml new file mode 100644 index 0000000..ffaeabf --- /dev/null +++ b/Solar system/sss3d-source/xml/moon.xml @@ -0,0 +1,47 @@ + + + + + + + + + moon + moon + earth + + + 1.0 + 3474.8 + 18 + 27.321661 + 27.321661 + 1.023 + 0.05490049 + 5.1454 + 0 + + 384401 + 7.3483e25 + 3.341 + 1.622 + 2.38 + 260 + ? + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/naiad.xml b/Solar system/sss3d-source/xml/naiad.xml new file mode 100644 index 0000000..09d48e6 --- /dev/null +++ b/Solar system/sss3d-source/xml/naiad.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + naiad + neptune + + + 1.0 + 58 + 18 + 0.294 + 0.294 + 0.0003 + 4.738 + 48227 + + diff --git a/Solar system/sss3d-source/xml/neptune.xml b/Solar system/sss3d-source/xml/neptune.xml new file mode 100644 index 0000000..c7a3c02 --- /dev/null +++ b/Solar system/sss3d-source/xml/neptune.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + neptune + sun + + + 1.0 + 49528.0 + 12.9 + 13.5 + 36 + 0.67125 + 163.7232045 + 5.4778 + 0.00858587 + 1.76917 + 29.58 + 44 + 30.06896348 + 102.44e27 + 1.76 + 11 + 23.71 + 48 + H2,He,CH4 + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/nereid.xml b/Solar system/sss3d-source/xml/nereid.xml new file mode 100644 index 0000000..4701327 --- /dev/null +++ b/Solar system/sss3d-source/xml/nereid.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + nereid + neptune + + + 1.0 + 340 + 18 + 360.135 + 360.135 + 0.7512 + 7.232 + 5513413 + + diff --git a/Solar system/sss3d-source/xml/oberon.xml b/Solar system/sss3d-source/xml/oberon.xml new file mode 100644 index 0000000..00f3e09 --- /dev/null +++ b/Solar system/sss3d-source/xml/oberon.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + oberon + uranus + + + 1.0 + 1522 + 18 + 13.463 + 13.463 + 0.0013 + 0.069 + 583519 + 3.01e24 + 1.63 + + diff --git a/Solar system/sss3d-source/xml/ophelia.xml b/Solar system/sss3d-source/xml/ophelia.xml new file mode 100644 index 0000000..cfce934 --- /dev/null +++ b/Solar system/sss3d-source/xml/ophelia.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + ophelia + uranus + + + 1.0 + 32 + 18 + 0.376 + 0.376 + 0.0099 + 0.104 + 53763 + + diff --git a/Solar system/sss3d-source/xml/pan.xml b/Solar system/sss3d-source/xml/pan.xml new file mode 100644 index 0000000..3f7dd6e --- /dev/null +++ b/Solar system/sss3d-source/xml/pan.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + pan + saturn + + + 1.0 + 20 + 18 + 0.575 + 0.575 + 0 + 0 + 133583 + + diff --git a/Solar system/sss3d-source/xml/pandora.xml b/Solar system/sss3d-source/xml/pandora.xml new file mode 100644 index 0000000..8f641bf --- /dev/null +++ b/Solar system/sss3d-source/xml/pandora.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + pandora + saturn + + + 1.0 + 48 + 18 + 0.629 + 0.629 + 0.0044 + 0 + 141708 + 2.2e20 + 0.7 + + diff --git a/Solar system/sss3d-source/xml/pasiphae.xml b/Solar system/sss3d-source/xml/pasiphae.xml new file mode 100644 index 0000000..326c1f2 --- /dev/null +++ b/Solar system/sss3d-source/xml/pasiphae.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + pasiphae + jupiter + + + 1.0 + 50 + 18 + 708.04 + 708.04 + 0.41 + 151.43 + 23620000 + 1.91e20 + 2.9 + + diff --git a/Solar system/sss3d-source/xml/phobos.xml b/Solar system/sss3d-source/xml/phobos.xml new file mode 100644 index 0000000..02ee7d8 --- /dev/null +++ b/Solar system/sss3d-source/xml/phobos.xml @@ -0,0 +1,41 @@ + + + + + + + + + moon + phobos + mars + + + 1.0 + 22 + 18 + 0.31891023 + 0.31891023 + 0.0151 + 1.08 + 9377 + 1.063e19 + 1.9 + 108 + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/phoebe.xml b/Solar system/sss3d-source/xml/phoebe.xml new file mode 100644 index 0000000..0f0acd2 --- /dev/null +++ b/Solar system/sss3d-source/xml/phoebe.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + phoebe + saturn + + + 1.0 + 220 + 18 + 0.4 + 548.212 + 0.1644 + 174.751 + 12944346 + 4e21 + 0.7 + + diff --git a/Solar system/sss3d-source/xml/pluto.xml b/Solar system/sss3d-source/xml/pluto.xml new file mode 100644 index 0000000..0ee481b --- /dev/null +++ b/Solar system/sss3d-source/xml/pluto.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + pluto + sun + + + 1.0 + 2390.0 + 14.8 + 15.5 + 36 + -6.38718 + 248.0208 + 4.7490 + 0.24880766 + 17.14175 + 119.61 + 0.005 + 39.48168677 + 0.013e27 + 1.1 + 0.81 + 1.27 + 37 + N2,CH4,CO + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/portia.xml b/Solar system/sss3d-source/xml/portia.xml new file mode 100644 index 0000000..5d1477b --- /dev/null +++ b/Solar system/sss3d-source/xml/portia.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + portia + uranus + + + 1.0 + 110 + 18 + 0.513 + 0.513 + 0.0001 + 0.059 + 66097 + + diff --git a/Solar system/sss3d-source/xml/prometheus.xml b/Solar system/sss3d-source/xml/prometheus.xml new file mode 100644 index 0000000..7eb1fcc --- /dev/null +++ b/Solar system/sss3d-source/xml/prometheus.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + prometheus + saturn + + + 1.0 + 92 + 18 + 0.613 + 0.613 + 0.0024 + 0 + 139373 + 2.7e20 + 0.7 + + diff --git a/Solar system/sss3d-source/xml/prospero.xml b/Solar system/sss3d-source/xml/prospero.xml new file mode 100644 index 0000000..dd08bc9 --- /dev/null +++ b/Solar system/sss3d-source/xml/prospero.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + prospero + uranus + + + 1.0 + 40 + 18 + 2019 + 2019 + 0.44 + 152 + 16567800 + + diff --git a/Solar system/sss3d-source/xml/proteus.xml b/Solar system/sss3d-source/xml/proteus.xml new file mode 100644 index 0000000..4b2c2a8 --- /dev/null +++ b/Solar system/sss3d-source/xml/proteus.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + proteus + neptune + + + 1.0 + 418 + 18 + 1.122 + 1.122 + 0.0004 + 0.039 + 117647 + + diff --git a/Solar system/sss3d-source/xml/puck.xml b/Solar system/sss3d-source/xml/puck.xml new file mode 100644 index 0000000..41a3c68 --- /dev/null +++ b/Solar system/sss3d-source/xml/puck.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + puck + uranus + + + 1.0 + 154 + 18 + 0.762 + 0.762 + 0.0001 + 0.319 + 86004 + + diff --git a/Solar system/sss3d-source/xml/rhea.xml b/Solar system/sss3d-source/xml/rhea.xml new file mode 100644 index 0000000..7373194 --- /dev/null +++ b/Solar system/sss3d-source/xml/rhea.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + rhea + saturn + + + 1.0 + 1528 + 18 + 4.518 + 4.518 + 0.0002 + 0.347 + 527421 + 2.31e24 + 1.24 + + diff --git a/Solar system/sss3d-source/xml/rosalind.xml b/Solar system/sss3d-source/xml/rosalind.xml new file mode 100644 index 0000000..618aea8 --- /dev/null +++ b/Solar system/sss3d-source/xml/rosalind.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + rosalind + uranus + + + 1.0 + 54 + 18 + 0.558 + 0.558 + 0.0001 + 0.279 + 69927 + + diff --git a/Solar system/sss3d-source/xml/saturn.xml b/Solar system/sss3d-source/xml/saturn.xml new file mode 100644 index 0000000..16790d9 --- /dev/null +++ b/Solar system/sss3d-source/xml/saturn.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + saturn + sun + + + 1.0 + 120536.0 + 8.8 + 9.4 + 36 + 0.44401 + 29.42351935 + 9.6724 + 0.5415060 + 2.48446 + 26.73 + 755 + 9.53707032 + 568.51e27 + 0.70 + 8.96 + 35.49 + 88 + H2,He + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/setebos.xml b/Solar system/sss3d-source/xml/setebos.xml new file mode 100644 index 0000000..aa61e04 --- /dev/null +++ b/Solar system/sss3d-source/xml/setebos.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + setebos + uranus + + + 1.0 + 40 + 18 + 2239 + 2239 + 0.57 + 158 + 17681000 + + diff --git a/Solar system/sss3d-source/xml/sinope.xml b/Solar system/sss3d-source/xml/sinope.xml new file mode 100644 index 0000000..ffc2f80 --- /dev/null +++ b/Solar system/sss3d-source/xml/sinope.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + sinope + jupiter + + + 1.0 + 36 + 18 + 724.51 + 724.51 + 0.25 + 158.11 + 23940000 + 7.77e19 + 3.1 + + diff --git a/Solar system/sss3d-source/xml/spaceshuttle.xml b/Solar system/sss3d-source/xml/spaceshuttle.xml new file mode 100644 index 0000000..beaec25 --- /dev/null +++ b/Solar system/sss3d-source/xml/spaceshuttle.xml @@ -0,0 +1,30 @@ + + + + + + + + + rocket + spaceshuttle + + + 1.0 + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/stephano.xml b/Solar system/sss3d-source/xml/stephano.xml new file mode 100644 index 0000000..6a6121b --- /dev/null +++ b/Solar system/sss3d-source/xml/stephano.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + stephano + uranus + + + 1.0 + 30 + 18 + 674 + 674 + 0.24 + 143 + 7947700 + + diff --git a/Solar system/sss3d-source/xml/sun.xml b/Solar system/sss3d-source/xml/sun.xml new file mode 100644 index 0000000..8f0c8e9 --- /dev/null +++ b/Solar system/sss3d-source/xml/sun.xml @@ -0,0 +1,42 @@ + + + + + + + + + star + sun + + + 1.0 + 1391940.0 + 24.6 + 0 + 0 + 0 + 0 + 1.989e33 + 1.41 + 0 + 617.7 + 6400 + H,He,N,O,Ne + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/sycorax.xml b/Solar system/sss3d-source/xml/sycorax.xml new file mode 100644 index 0000000..d2402a1 --- /dev/null +++ b/Solar system/sss3d-source/xml/sycorax.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + sycorax + uranus + + + 1.0 + 120 + 18 + 1289 + 1289 + 0.51 + 153 + 12213000 + + diff --git a/Solar system/sss3d-source/xml/telesto.xml b/Solar system/sss3d-source/xml/telesto.xml new file mode 100644 index 0000000..acaf993 --- /dev/null +++ b/Solar system/sss3d-source/xml/telesto.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + telesto + saturn + + + 1.0 + 30 + 18 + 1.888 + 1.888 + 0.0009 + 1.143 + 294673 + + diff --git a/Solar system/sss3d-source/xml/tethys.xml b/Solar system/sss3d-source/xml/tethys.xml new file mode 100644 index 0000000..4233a46 --- /dev/null +++ b/Solar system/sss3d-source/xml/tethys.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + tethys + saturn + + + 1.0 + 1060 + 18 + 1.888 + 1.888 + 0.0001 + 1.09 + 295000 + 6.22e23 + 1.0 + + diff --git a/Solar system/sss3d-source/xml/thalassa.xml b/Solar system/sss3d-source/xml/thalassa.xml new file mode 100644 index 0000000..4a8dcb5 --- /dev/null +++ b/Solar system/sss3d-source/xml/thalassa.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + thalassa + neptune + + + 1.0 + 80 + 18 + 0.311 + 0.311 + 0.0002 + 0.205 + 50074 + + diff --git a/Solar system/sss3d-source/xml/thebe.xml b/Solar system/sss3d-source/xml/thebe.xml new file mode 100644 index 0000000..4339296 --- /dev/null +++ b/Solar system/sss3d-source/xml/thebe.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + thebe + jupiter + + + 1.0 + 100 + 18 + 0.675 + 0.675 + 0.0179 + 1.1 + 221889 + 7.77e20 + 1.5 + + diff --git a/Solar system/sss3d-source/xml/titan.xml b/Solar system/sss3d-source/xml/titan.xml new file mode 100644 index 0000000..efa486f --- /dev/null +++ b/Solar system/sss3d-source/xml/titan.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + titan + saturn + + + 1.0 + 5150 + 18 + 15.945 + 15.945 + 0.0289 + 0.295 + 1222224 + 1.35e26 + 1.88 + + diff --git a/Solar system/sss3d-source/xml/titania.xml b/Solar system/sss3d-source/xml/titania.xml new file mode 100644 index 0000000..faa8c70 --- /dev/null +++ b/Solar system/sss3d-source/xml/titania.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + titania + uranus + + + 1.0 + 1578 + 18 + 8.706 + 8.706 + 0.0012 + 0.112 + 436298 + 3.53e24 + 1.71 + + diff --git a/Solar system/sss3d-source/xml/triton.xml b/Solar system/sss3d-source/xml/triton.xml new file mode 100644 index 0000000..e6c6274 --- /dev/null +++ b/Solar system/sss3d-source/xml/triton.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + triton + neptune + + + 1.0 + 2706 + 18 + 5.877 + 5.877 + 0 + 156.834 + 354759 + 2.15e25 + 2.05 + + diff --git a/Solar system/sss3d-source/xml/umbriel.xml b/Solar system/sss3d-source/xml/umbriel.xml new file mode 100644 index 0000000..647eddf --- /dev/null +++ b/Solar system/sss3d-source/xml/umbriel.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + umbriel + uranus + + + 1.0 + 1170 + 18 + 4.144 + 4.144 + 0.004 + 0.133 + 265998 + 1.17e24 + 1.4 + + diff --git a/Solar system/sss3d-source/xml/uranus.xml b/Solar system/sss3d-source/xml/uranus.xml new file mode 100644 index 0000000..acaaa2c --- /dev/null +++ b/Solar system/sss3d-source/xml/uranus.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + uranus + sun + + + 1.0 + 51118.0 + 10.8 + 11.3 + 36 + -0.71833 + 83.74740682 + 6.8352 + 0.04716771 + 0.76986 + 97.86 + 52 + 19.19126393 + 86.849e27 + 1.30 + 8.69 + 21.29 + 59 + H2,He,HC4 + + \ No newline at end of file diff --git a/Solar system/sss3d-source/xml/venus.xml b/Solar system/sss3d-source/xml/venus.xml new file mode 100644 index 0000000..35e34a3 --- /dev/null +++ b/Solar system/sss3d-source/xml/venus.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + venus + sun + + + 1.0 + 12103.6 + 2.2 + 2.6 + 36 + -243.0187 + 0.61518257 + 35.0214 + 0.00677323 + 3.39471 + 177.33 + 0.88 + 0.72333199 + 4.8690e27 + 5.24 + 8.87 + 10.36 + 730 + CO2,N2 + + \ No newline at end of file diff --git a/Solar system/sss3d.jar b/Solar system/sss3d.jar new file mode 100644 index 0000000..2493f80 Binary files /dev/null and b/Solar system/sss3d.jar differ diff --git a/Solar system/start.bat b/Solar system/start.bat new file mode 100644 index 0000000..af12bdf --- /dev/null +++ b/Solar system/start.bat @@ -0,0 +1,9 @@ +@echo off +echo THIS IS A BATCH SCRIPT TO START +echo *** J3D Solar System Simulator *** +echo Diploma thesis of Bernhard Hari and Marcel Portner, 2000 +echo Biel school of engineering and architecture, Biel, Switzerland + +javaw -Xmx128m -jar sss3d.jar + + diff --git a/Solar system/xml/adrastea.xml b/Solar system/xml/adrastea.xml new file mode 100644 index 0000000..2c473b4 --- /dev/null +++ b/Solar system/xml/adrastea.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + adrastea + jupiter + + + 1.0 + 20 + 18 + 0.298 + 0.298 + 0 + 0 + 128981 + 1.91e19 + 4.5 + + diff --git a/Solar system/xml/amalthea.xml b/Solar system/xml/amalthea.xml new file mode 100644 index 0000000..b4c2c45 --- /dev/null +++ b/Solar system/xml/amalthea.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + amalthea + jupiter + + + 1.0 + 188 + 18 + 0.498 + 0.498 + 0.0026 + 0.363 + 181366 + 7.17e21 + 1.8 + + diff --git a/Solar system/xml/ananke.xml b/Solar system/xml/ananke.xml new file mode 100644 index 0000000..efde906 --- /dev/null +++ b/Solar system/xml/ananke.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + ananke + jupiter + + + 1.0 + 30 + 18 + 610.45 + 610.45 + 0.24 + 148.89 + 21280000 + 3.82e19 + 2.7 + + diff --git a/Solar system/xml/ariel.xml b/Solar system/xml/ariel.xml new file mode 100644 index 0000000..a753a25 --- /dev/null +++ b/Solar system/xml/ariel.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + ariel + uranus + + + 1.0 + 1162 + 18 + 2.52 + 2.52 + 0.0012 + 0.042 + 190945 + 1.35e24 + 1.67 + + diff --git a/Solar system/xml/atlas.xml b/Solar system/xml/atlas.xml new file mode 100644 index 0000000..1ba1d3c --- /dev/null +++ b/Solar system/xml/atlas.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + atlas + saturn + + + 1.0 + 30 + 18 + 0.602 + 0.602 + 0 + 0 + 137662 + + diff --git a/Solar system/xml/belinda.xml b/Solar system/xml/belinda.xml new file mode 100644 index 0000000..07d39db --- /dev/null +++ b/Solar system/xml/belinda.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + belinda + uranus + + + 1.0 + 68 + 18 + 0.624 + 0.624 + 0.0001 + 0.031 + 75256 + + diff --git a/Solar system/xml/bianca.xml b/Solar system/xml/bianca.xml new file mode 100644 index 0000000..50620e1 --- /dev/null +++ b/Solar system/xml/bianca.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + bianca + uranus + + + 1.0 + 44 + 18 + 0.435 + 0.435 + 0.0009 + 0.193 + 59166 + + diff --git a/Solar system/xml/caliban.xml b/Solar system/xml/caliban.xml new file mode 100644 index 0000000..6a3266c --- /dev/null +++ b/Solar system/xml/caliban.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + caliban + uranus + + + 1.0 + 60 + 18 + 580 + 580 + 0.08 + 140 + 7169000 + + diff --git a/Solar system/xml/callisto.xml b/Solar system/xml/callisto.xml new file mode 100644 index 0000000..f6a1373 --- /dev/null +++ b/Solar system/xml/callisto.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + callisto + jupiter + + + 1.0 + 4806 + 18 + 16.689 + 16.689 + 0.0074 + 0.253 + 1882759 + 1.08e26 + 1.85 + + \ No newline at end of file diff --git a/Solar system/xml/calypso.xml b/Solar system/xml/calypso.xml new file mode 100644 index 0000000..e86ed01 --- /dev/null +++ b/Solar system/xml/calypso.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + calypso + saturn + + + 1.0 + 26 + 18 + 1.888 + 1.888 + 0.0002 + 1.471 + 294673 + + diff --git a/Solar system/xml/carme.xml b/Solar system/xml/carme.xml new file mode 100644 index 0000000..2fba440 --- /dev/null +++ b/Solar system/xml/carme.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + carme + jupiter + + + 1.0 + 40 + 18 + 702.28 + 702.28 + 0.25 + 164.91 + 23400000 + 9.56e19 + 2.8 + + diff --git a/Solar system/xml/charon.xml b/Solar system/xml/charon.xml new file mode 100644 index 0000000..b6acdeb --- /dev/null +++ b/Solar system/xml/charon.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + charon + pluto + + + 1.0 + 1172 + 18 + 6.387 + 6.387 + 0.0072 + 96.57 + 19662 + 1.9e24 + 2.24 + + diff --git a/Solar system/xml/cordelia.xml b/Solar system/xml/cordelia.xml new file mode 100644 index 0000000..9bbf457 --- /dev/null +++ b/Solar system/xml/cordelia.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + cordelia + uranus + + + 1.0 + 26 + 18 + 0.335 + 0.335 + 0.0003 + 0.085 + 49752 + + diff --git a/Solar system/xml/cressida.xml b/Solar system/xml/cressida.xml new file mode 100644 index 0000000..208e406 --- /dev/null +++ b/Solar system/xml/cressida.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + cressida + uranus + + + 1.0 + 66 + 18 + 0.464 + 0.464 + 0.0004 + 0.006 + 61767 + + diff --git a/Solar system/xml/deimos.xml b/Solar system/xml/deimos.xml new file mode 100644 index 0000000..9b11eb2 --- /dev/null +++ b/Solar system/xml/deimos.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + deimos + mars + + + 1.0 + 12 + 18 + 1.262 + 1.262 + 0.0003 + 1.79 + 23462 + 1.8e18 + 1.8 + + diff --git a/Solar system/xml/desdemona.xml b/Solar system/xml/desdemona.xml new file mode 100644 index 0000000..6016dfd --- /dev/null +++ b/Solar system/xml/desdemona.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + desdemona + uranus + + + 1.0 + 58 + 18 + 0.474 + 0.474 + 0.0001 + 0.113 + 62658 + + diff --git a/Solar system/xml/despina.xml b/Solar system/xml/despina.xml new file mode 100644 index 0000000..3dab3a1 --- /dev/null +++ b/Solar system/xml/despina.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + despina + neptune + + + 1.0 + 148 + 18 + 0.335 + 0.335 + 0.0001 + 0.065 + 52526 + + diff --git a/Solar system/xml/dione.xml b/Solar system/xml/dione.xml new file mode 100644 index 0000000..051b138 --- /dev/null +++ b/Solar system/xml/dione.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + dione + saturn + + + 1.0 + 1120 + 18 + 2.737 + 2.737 + 0.0021 + 0.021 + 377714 + 1.05e24 + 1.44 + + diff --git a/Solar system/xml/earth.xml b/Solar system/xml/earth.xml new file mode 100644 index 0000000..65aad4c --- /dev/null +++ b/Solar system/xml/earth.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + earth + sun + + + 1.0 + 12756.28 + 3.0 + 3.4 + 36 + 0.99726968 + 0.99997862 + 29.7859 + 0.01671022 + 0.00005 + 23.45 + 1 + 1.00000011 + 5.9742e27 + 5.515 + 9.81 + 11.18 + 288 + N2,O2,Ar + + \ No newline at end of file diff --git a/Solar system/xml/elara.xml b/Solar system/xml/elara.xml new file mode 100644 index 0000000..906c0dc --- /dev/null +++ b/Solar system/xml/elara.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + elara + jupiter + + + 1.0 + 76 + 18 + 0.5 + 259.64 + 0.22 + 26.63 + 11740000 + 7.77e20 + 3.3 + + diff --git a/Solar system/xml/enceladus.xml b/Solar system/xml/enceladus.xml new file mode 100644 index 0000000..120de18 --- /dev/null +++ b/Solar system/xml/enceladus.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + enceladus + saturn + + + 1.0 + 498 + 18 + 1.37 + 1.37 + 0.0048 + 0.016 + 238254 + 7.3e22 + 1.12 + + diff --git a/Solar system/xml/epimetheus.xml b/Solar system/xml/epimetheus.xml new file mode 100644 index 0000000..303e068 --- /dev/null +++ b/Solar system/xml/epimetheus.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + epimetheus + saturn + + + 1.0 + 114 + 18 + 0.694 + 0.694 + 0.0126 + 0.326 + 151399 + 5.59e20 + 0.6 + + diff --git a/Solar system/xml/europa.xml b/Solar system/xml/europa.xml new file mode 100644 index 0000000..8aaf0b7 --- /dev/null +++ b/Solar system/xml/europa.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + europa + jupiter + + + 1.0 + 3130 + 18 + 3.551 + 3.551 + 0.0101 + 0.464 + 671079 + 4.8e25 + 2.99 + + \ No newline at end of file diff --git a/Solar system/xml/galatea.xml b/Solar system/xml/galatea.xml new file mode 100644 index 0000000..227b706 --- /dev/null +++ b/Solar system/xml/galatea.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + galatea + neptune + + + 1.0 + 158 + 18 + 0.429 + 0.429 + 0.0001 + 0.054 + 61953 + + diff --git a/Solar system/xml/ganymede.xml b/Solar system/xml/ganymede.xml new file mode 100644 index 0000000..8c57bcd --- /dev/null +++ b/Solar system/xml/ganymede.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + ganymede + jupiter + + + 1.0 + 5268 + 18 + 7.155 + 7.155 + 0.0006 + 0.186 + 1070428 + 1.48e26 + 1.94 + + diff --git a/Solar system/xml/hale-bopp.xml b/Solar system/xml/hale-bopp.xml new file mode 100644 index 0000000..4be2fca --- /dev/null +++ b/Solar system/xml/hale-bopp.xml @@ -0,0 +1,41 @@ + + + + + + + + + comet + hale-bopp + + + 1.0 + 49.4079368 + 15000 + 0.0 + 2523.02857 + 0.995067461 + 89.43003640000001 + 0.914140912 + 50539.1372572 + 2000 + 282.4707034 + 130.5887545 + + diff --git a/Solar system/xml/halley.xml b/Solar system/xml/halley.xml new file mode 100644 index 0000000..9105b4e --- /dev/null +++ b/Solar system/xml/halley.xml @@ -0,0 +1,41 @@ + + + + + + + + + comet + halley + + + 1.0 + 16.4424817 + 2000 + 0.0 + 75.99865 + 0.9672772549999999 + 162.242202 + 0.587103753 + 46470.4589563 + 1950.0 + 58.8600459 + 111.8656026 + + diff --git a/Solar system/xml/helene.xml b/Solar system/xml/helene.xml new file mode 100644 index 0000000..8d396af --- /dev/null +++ b/Solar system/xml/helene.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + helene + saturn + + + 1.0 + 32 + 18 + 2.737 + 2.737 + 0.0016 + 0.2 + 377416 + + diff --git a/Solar system/xml/himalia.xml b/Solar system/xml/himalia.xml new file mode 100644 index 0000000..ad221f4 --- /dev/null +++ b/Solar system/xml/himalia.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + himalia + jupiter + + + 1.0 + 186 + 18 + 0.4 + 250.56 + 0.16 + 27.50 + 11460000 + 9.56e21 + 2.8 + + \ No newline at end of file diff --git a/Solar system/xml/hyperion.xml b/Solar system/xml/hyperion.xml new file mode 100644 index 0000000..87058a1 --- /dev/null +++ b/Solar system/xml/hyperion.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + hyperion + saturn + + + 1.0 + 286 + 18 + 21.277 + 21.277 + 0.1046 + 0.639 + 1481471 + 1.77e22 + 1.4 + + diff --git a/Solar system/xml/iapetus.xml b/Solar system/xml/iapetus.xml new file mode 100644 index 0000000..90fe6e9 --- /dev/null +++ b/Solar system/xml/iapetus.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + iapetus + saturn + + + 1.0 + 1436 + 18 + 79.331 + 79.331 + 0.0288 + 18.021 + 3562180 + 1.59e24 + 1.02 + + diff --git a/Solar system/xml/io.xml b/Solar system/xml/io.xml new file mode 100644 index 0000000..04a2db9 --- /dev/null +++ b/Solar system/xml/io.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + io + jupiter + + + 1.0 + 3642 + 18 + 1.769 + 1.769 + 0.0041 + 0.036 + 421769 + 8.93e25 + 3.53 + + diff --git a/Solar system/xml/janus.xml b/Solar system/xml/janus.xml new file mode 100644 index 0000000..3e7d8f5 --- /dev/null +++ b/Solar system/xml/janus.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + janus + saturn + + + 1.0 + 178 + 18 + 0.695 + 0.695 + 0.0066 + 0.168 + 151447 + 1.98e21 + 0.65 + + diff --git a/Solar system/xml/juliet.xml b/Solar system/xml/juliet.xml new file mode 100644 index 0000000..4aba122 --- /dev/null +++ b/Solar system/xml/juliet.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + juliet + uranus + + + 1.0 + 84 + 18 + 0.493 + 0.493 + 0.0007 + 0.065 + 64358 + + diff --git a/Solar system/xml/jupiter.xml b/Solar system/xml/jupiter.xml new file mode 100644 index 0000000..3c4df52 --- /dev/null +++ b/Solar system/xml/jupiter.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + jupiter + sun + + + 1.0 + 142984.0 + 6.4 + 6.8 + 36 + 0.41354 + 11.85652502 + 13.0697 + 0.04839266 + 1.30530 + 3.12 + 1316 + 5.20336301 + 1898.7e27 + 1.33 + 23.12 + 59.54 + 120 + H2,He + + \ No newline at end of file diff --git a/Solar system/xml/larissa.xml b/Solar system/xml/larissa.xml new file mode 100644 index 0000000..60e1232 --- /dev/null +++ b/Solar system/xml/larissa.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + larissa + neptune + + + 1.0 + 192 + 18 + 0.555 + 0.555 + 0.0014 + 0.201 + 73548 + + diff --git a/Solar system/xml/leda.xml b/Solar system/xml/leda.xml new file mode 100644 index 0000000..90c3303 --- /dev/null +++ b/Solar system/xml/leda.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + leda + jupiter + + + 1.0 + 16 + 18 + 240.92 + 240.92 + 0.16 + 27.46 + 11160000 + 5.68e18 + 2.7 + + \ No newline at end of file diff --git a/Solar system/xml/lysithea.xml b/Solar system/xml/lysithea.xml new file mode 100644 index 0000000..e49ea7a --- /dev/null +++ b/Solar system/xml/lysithea.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + lysithea + jupiter + + + 1.0 + 36 + 18 + 259.2 + 259.2 + 0.11 + 28.30 + 11720000 + 7.77e19 + 3.1 + + \ No newline at end of file diff --git a/Solar system/xml/mars.xml b/Solar system/xml/mars.xml new file mode 100644 index 0000000..eb19751 --- /dev/null +++ b/Solar system/xml/mars.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + mars + sun + + + 1.0 + 6794.0 + 4.2 + 4.6 + 36 + 1.02595675 + 1.88071105 + 24.1309 + 0.09341233 + 1.85061 + 25.19 + 0.149 + 1.52366231 + 0.64191e27 + 3.94 + 3.71 + 5.02 + 218 + CO2,N2,Ar + + \ No newline at end of file diff --git a/Solar system/xml/mercury.xml b/Solar system/xml/mercury.xml new file mode 100644 index 0000000..1a593ad --- /dev/null +++ b/Solar system/xml/mercury.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + mercury + sun + + + 1.0 + 4879.4 + 1.4 + 1.8 + 36 + 58.6462 + 0.24084445 + 47.8725 + 0.20563069 + 7.00487 + 0.0 + 0.054 + 0.38709893 + 0.33022e27 + 5.43 + 3.7 + 4.25 + 440 + ? + + \ No newline at end of file diff --git a/Solar system/xml/metis.xml b/Solar system/xml/metis.xml new file mode 100644 index 0000000..757eba0 --- /dev/null +++ b/Solar system/xml/metis.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + metis + jupiter + + + 1.0 + 40 + 18 + 0.295 + 0.295 + 0 + 0 + 127980 + 9.56e19 + 2.8 + + \ No newline at end of file diff --git a/Solar system/xml/mimas.xml b/Solar system/xml/mimas.xml new file mode 100644 index 0000000..26390bf --- /dev/null +++ b/Solar system/xml/mimas.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + mimas + saturn + + + 1.0 + 398 + 18 + 0.943 + 0.943 + 0.0201 + 1.585 + 185727 + 3.75e22 + 1.14 + + diff --git a/Solar system/xml/miranda.xml b/Solar system/xml/miranda.xml new file mode 100644 index 0000000..74c3ce1 --- /dev/null +++ b/Solar system/xml/miranda.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + miranda + uranus + + + 1.0 + 472 + 18 + 1.413 + 1.413 + 0.0018 + 4.341 + 129872 + 6.59e21 + 1.2 + + diff --git a/Solar system/xml/moon.xml b/Solar system/xml/moon.xml new file mode 100644 index 0000000..752e54d --- /dev/null +++ b/Solar system/xml/moon.xml @@ -0,0 +1,47 @@ + + + + + + + + + moon + moon + earth + + + 1.0 + 3474.8 + 18 + 27.321661 + 27.321661 + 1.023 + 0.05490049 + 5.1454 + 0 + + 384401 + 7.3483e25 + 3.341 + 1.622 + 2.38 + 260 + ? + + \ No newline at end of file diff --git a/Solar system/xml/naiad.xml b/Solar system/xml/naiad.xml new file mode 100644 index 0000000..1483175 --- /dev/null +++ b/Solar system/xml/naiad.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + naiad + neptune + + + 1.0 + 58 + 18 + 0.294 + 0.294 + 0.0003 + 4.738 + 48227 + + diff --git a/Solar system/xml/neptune.xml b/Solar system/xml/neptune.xml new file mode 100644 index 0000000..89ba13b --- /dev/null +++ b/Solar system/xml/neptune.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + neptune + sun + + + 1.0 + 49528.0 + 12.9 + 13.5 + 36 + 0.67125 + 163.7232045 + 5.4778 + 0.00858587 + 1.76917 + 29.58 + 44 + 30.06896348 + 102.44e27 + 1.76 + 11 + 23.71 + 48 + H2,He,CH4 + + \ No newline at end of file diff --git a/Solar system/xml/nereid.xml b/Solar system/xml/nereid.xml new file mode 100644 index 0000000..b0b854e --- /dev/null +++ b/Solar system/xml/nereid.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + nereid + neptune + + + 1.0 + 340 + 18 + 360.135 + 360.135 + 0.7512 + 7.232 + 5513413 + + diff --git a/Solar system/xml/oberon.xml b/Solar system/xml/oberon.xml new file mode 100644 index 0000000..38bf912 --- /dev/null +++ b/Solar system/xml/oberon.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + oberon + uranus + + + 1.0 + 1522 + 18 + 13.463 + 13.463 + 0.0013 + 0.069 + 583519 + 3.01e24 + 1.63 + + diff --git a/Solar system/xml/ophelia.xml b/Solar system/xml/ophelia.xml new file mode 100644 index 0000000..7680081 --- /dev/null +++ b/Solar system/xml/ophelia.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + ophelia + uranus + + + 1.0 + 32 + 18 + 0.376 + 0.376 + 0.0099 + 0.104 + 53763 + + diff --git a/Solar system/xml/pan.xml b/Solar system/xml/pan.xml new file mode 100644 index 0000000..359065a --- /dev/null +++ b/Solar system/xml/pan.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + pan + saturn + + + 1.0 + 20 + 18 + 0.575 + 0.575 + 0 + 0 + 133583 + + diff --git a/Solar system/xml/pandora.xml b/Solar system/xml/pandora.xml new file mode 100644 index 0000000..a76445d --- /dev/null +++ b/Solar system/xml/pandora.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + pandora + saturn + + + 1.0 + 48 + 18 + 0.629 + 0.629 + 0.0044 + 0 + 141708 + 2.2e20 + 0.7 + + diff --git a/Solar system/xml/pasiphae.xml b/Solar system/xml/pasiphae.xml new file mode 100644 index 0000000..17ed58e --- /dev/null +++ b/Solar system/xml/pasiphae.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + pasiphae + jupiter + + + 1.0 + 50 + 18 + 708.04 + 708.04 + 0.41 + 151.43 + 23620000 + 1.91e20 + 2.9 + + diff --git a/Solar system/xml/phobos.xml b/Solar system/xml/phobos.xml new file mode 100644 index 0000000..4d1a3c2 --- /dev/null +++ b/Solar system/xml/phobos.xml @@ -0,0 +1,41 @@ + + + + + + + + + moon + phobos + mars + + + 1.0 + 22 + 18 + 0.31891023 + 0.31891023 + 0.0151 + 1.08 + 9377 + 1.063e19 + 1.9 + 108 + + \ No newline at end of file diff --git a/Solar system/xml/phoebe.xml b/Solar system/xml/phoebe.xml new file mode 100644 index 0000000..ac13ef6 --- /dev/null +++ b/Solar system/xml/phoebe.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + phoebe + saturn + + + 1.0 + 220 + 18 + 0.4 + 548.212 + 0.1644 + 174.751 + 12944346 + 4e21 + 0.7 + + diff --git a/Solar system/xml/pluto.xml b/Solar system/xml/pluto.xml new file mode 100644 index 0000000..a610c20 --- /dev/null +++ b/Solar system/xml/pluto.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + pluto + sun + + + 1.0 + 2390.0 + 14.8 + 15.5 + 36 + -6.38718 + 248.0208 + 4.7490 + 0.24880766 + 17.14175 + 119.61 + 0.005 + 39.48168677 + 0.013e27 + 1.1 + 0.81 + 1.27 + 37 + N2,CH4,CO + + \ No newline at end of file diff --git a/Solar system/xml/portia.xml b/Solar system/xml/portia.xml new file mode 100644 index 0000000..b912825 --- /dev/null +++ b/Solar system/xml/portia.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + portia + uranus + + + 1.0 + 110 + 18 + 0.513 + 0.513 + 0.0001 + 0.059 + 66097 + + diff --git a/Solar system/xml/prometheus.xml b/Solar system/xml/prometheus.xml new file mode 100644 index 0000000..97ed715 --- /dev/null +++ b/Solar system/xml/prometheus.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + prometheus + saturn + + + 1.0 + 92 + 18 + 0.613 + 0.613 + 0.0024 + 0 + 139373 + 2.7e20 + 0.7 + + diff --git a/Solar system/xml/prospero.xml b/Solar system/xml/prospero.xml new file mode 100644 index 0000000..5b4f546 --- /dev/null +++ b/Solar system/xml/prospero.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + prospero + uranus + + + 1.0 + 40 + 18 + 2019 + 2019 + 0.44 + 152 + 16567800 + + diff --git a/Solar system/xml/proteus.xml b/Solar system/xml/proteus.xml new file mode 100644 index 0000000..7e06ea9 --- /dev/null +++ b/Solar system/xml/proteus.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + proteus + neptune + + + 1.0 + 418 + 18 + 1.122 + 1.122 + 0.0004 + 0.039 + 117647 + + diff --git a/Solar system/xml/puck.xml b/Solar system/xml/puck.xml new file mode 100644 index 0000000..5c72067 --- /dev/null +++ b/Solar system/xml/puck.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + puck + uranus + + + 1.0 + 154 + 18 + 0.762 + 0.762 + 0.0001 + 0.319 + 86004 + + diff --git a/Solar system/xml/rhea.xml b/Solar system/xml/rhea.xml new file mode 100644 index 0000000..05b1004 --- /dev/null +++ b/Solar system/xml/rhea.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + rhea + saturn + + + 1.0 + 1528 + 18 + 4.518 + 4.518 + 0.0002 + 0.347 + 527421 + 2.31e24 + 1.24 + + diff --git a/Solar system/xml/rosalind.xml b/Solar system/xml/rosalind.xml new file mode 100644 index 0000000..0a3edf7 --- /dev/null +++ b/Solar system/xml/rosalind.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + rosalind + uranus + + + 1.0 + 54 + 18 + 0.558 + 0.558 + 0.0001 + 0.279 + 69927 + + diff --git a/Solar system/xml/saturn.xml b/Solar system/xml/saturn.xml new file mode 100644 index 0000000..1b157a3 --- /dev/null +++ b/Solar system/xml/saturn.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + saturn + sun + + + 1.0 + 120536.0 + 8.8 + 9.4 + 36 + 0.44401 + 29.42351935 + 9.6724 + 0.5415060 + 2.48446 + 26.73 + 755 + 9.53707032 + 568.51e27 + 0.70 + 8.96 + 35.49 + 88 + H2,He + + \ No newline at end of file diff --git a/Solar system/xml/setebos.xml b/Solar system/xml/setebos.xml new file mode 100644 index 0000000..7146fb6 --- /dev/null +++ b/Solar system/xml/setebos.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + setebos + uranus + + + 1.0 + 40 + 18 + 2239 + 2239 + 0.57 + 158 + 17681000 + + diff --git a/Solar system/xml/sinope.xml b/Solar system/xml/sinope.xml new file mode 100644 index 0000000..bb59b36 --- /dev/null +++ b/Solar system/xml/sinope.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + sinope + jupiter + + + 1.0 + 36 + 18 + 724.51 + 724.51 + 0.25 + 158.11 + 23940000 + 7.77e19 + 3.1 + + diff --git a/Solar system/xml/spaceshuttle.xml b/Solar system/xml/spaceshuttle.xml new file mode 100644 index 0000000..beaec25 --- /dev/null +++ b/Solar system/xml/spaceshuttle.xml @@ -0,0 +1,30 @@ + + + + + + + + + rocket + spaceshuttle + + + 1.0 + + \ No newline at end of file diff --git a/Solar system/xml/stephano.xml b/Solar system/xml/stephano.xml new file mode 100644 index 0000000..f80ce32 --- /dev/null +++ b/Solar system/xml/stephano.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + stephano + uranus + + + 1.0 + 30 + 18 + 674 + 674 + 0.24 + 143 + 7947700 + + diff --git a/Solar system/xml/sun.xml b/Solar system/xml/sun.xml new file mode 100644 index 0000000..94b0039 --- /dev/null +++ b/Solar system/xml/sun.xml @@ -0,0 +1,42 @@ + + + + + + + + + star + sun + + + 1.0 + 1391940.0 + 24.6 + 0 + 0 + 0 + 0 + 1.989e33 + 1.41 + 0 + 617.7 + 6400 + H,He,N,O,Ne + + \ No newline at end of file diff --git a/Solar system/xml/sycorax.xml b/Solar system/xml/sycorax.xml new file mode 100644 index 0000000..d6e2188 --- /dev/null +++ b/Solar system/xml/sycorax.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + sycorax + uranus + + + 1.0 + 120 + 18 + 1289 + 1289 + 0.51 + 153 + 12213000 + + diff --git a/Solar system/xml/telesto.xml b/Solar system/xml/telesto.xml new file mode 100644 index 0000000..88c4b20 --- /dev/null +++ b/Solar system/xml/telesto.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + telesto + saturn + + + 1.0 + 30 + 18 + 1.888 + 1.888 + 0.0009 + 1.143 + 294673 + + diff --git a/Solar system/xml/tethys.xml b/Solar system/xml/tethys.xml new file mode 100644 index 0000000..e5cbfd7 --- /dev/null +++ b/Solar system/xml/tethys.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + tethys + saturn + + + 1.0 + 1060 + 18 + 1.888 + 1.888 + 0.0001 + 1.09 + 295000 + 6.22e23 + 1.0 + + diff --git a/Solar system/xml/thalassa.xml b/Solar system/xml/thalassa.xml new file mode 100644 index 0000000..d6e0e31 --- /dev/null +++ b/Solar system/xml/thalassa.xml @@ -0,0 +1,38 @@ + + + + + + + + + moon + thalassa + neptune + + + 1.0 + 80 + 18 + 0.311 + 0.311 + 0.0002 + 0.205 + 50074 + + diff --git a/Solar system/xml/thebe.xml b/Solar system/xml/thebe.xml new file mode 100644 index 0000000..29242c8 --- /dev/null +++ b/Solar system/xml/thebe.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + thebe + jupiter + + + 1.0 + 100 + 18 + 0.675 + 0.675 + 0.0179 + 1.1 + 221889 + 7.77e20 + 1.5 + + diff --git a/Solar system/xml/titan.xml b/Solar system/xml/titan.xml new file mode 100644 index 0000000..8ed983b --- /dev/null +++ b/Solar system/xml/titan.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + titan + saturn + + + 1.0 + 5150 + 18 + 15.945 + 15.945 + 0.0289 + 0.295 + 1222224 + 1.35e26 + 1.88 + + diff --git a/Solar system/xml/titania.xml b/Solar system/xml/titania.xml new file mode 100644 index 0000000..0c95c60 --- /dev/null +++ b/Solar system/xml/titania.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + titania + uranus + + + 1.0 + 1578 + 18 + 8.706 + 8.706 + 0.0012 + 0.112 + 436298 + 3.53e24 + 1.71 + + diff --git a/Solar system/xml/triton.xml b/Solar system/xml/triton.xml new file mode 100644 index 0000000..fcdb8fe --- /dev/null +++ b/Solar system/xml/triton.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + triton + neptune + + + 1.0 + 2706 + 18 + 5.877 + 5.877 + 0 + 156.834 + 354759 + 2.15e25 + 2.05 + + diff --git a/Solar system/xml/umbriel.xml b/Solar system/xml/umbriel.xml new file mode 100644 index 0000000..53f61cf --- /dev/null +++ b/Solar system/xml/umbriel.xml @@ -0,0 +1,40 @@ + + + + + + + + + moon + umbriel + uranus + + + 1.0 + 1170 + 18 + 4.144 + 4.144 + 0.004 + 0.133 + 265998 + 1.17e24 + 1.4 + + diff --git a/Solar system/xml/uranus.xml b/Solar system/xml/uranus.xml new file mode 100644 index 0000000..e00d053 --- /dev/null +++ b/Solar system/xml/uranus.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + uranus + sun + + + 1.0 + 51118.0 + 10.8 + 11.3 + 36 + -0.71833 + 83.74740682 + 6.8352 + 0.04716771 + 0.76986 + 97.86 + 52 + 19.19126393 + 86.849e27 + 1.30 + 8.69 + 21.29 + 59 + H2,He,HC4 + + \ No newline at end of file diff --git a/Solar system/xml/venus.xml b/Solar system/xml/venus.xml new file mode 100644 index 0000000..8c2c2a0 --- /dev/null +++ b/Solar system/xml/venus.xml @@ -0,0 +1,49 @@ + + + + + + + + + planet + venus + sun + + + 1.0 + 12103.6 + 2.2 + 2.6 + 36 + -243.0187 + 0.61518257 + 35.0214 + 0.00677323 + 3.39471 + 177.33 + 0.88 + 0.72333199 + 4.8690e27 + 5.24 + 8.87 + 10.36 + 730 + CO2,N2 + + \ No newline at end of file diff --git a/StarcraftCheck/SendStatus/Form1.Designer.cs b/StarcraftCheck/SendStatus/Form1.Designer.cs new file mode 100644 index 0000000..0ce7a23 --- /dev/null +++ b/StarcraftCheck/SendStatus/Form1.Designer.cs @@ -0,0 +1,47 @@ +namespace SendStatus +{ + partial class Form1 + { + /// + /// 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() + { + this.SuspendLayout(); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(104, 27); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + + } + + #endregion + } +} + diff --git a/StarcraftCheck/SendStatus/Form1.cs b/StarcraftCheck/SendStatus/Form1.cs new file mode 100644 index 0000000..c2a97fe --- /dev/null +++ b/StarcraftCheck/SendStatus/Form1.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace SendStatus +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/StarcraftCheck/SendStatus/Form1.resx b/StarcraftCheck/SendStatus/Form1.resx new file mode 100644 index 0000000..8f95d66 --- /dev/null +++ b/StarcraftCheck/SendStatus/Form1.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/StarcraftCheck/SendStatus/Program.cs b/StarcraftCheck/SendStatus/Program.cs new file mode 100644 index 0000000..2283725 --- /dev/null +++ b/StarcraftCheck/SendStatus/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace SendStatus +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/StarcraftCheck/SendStatus/Properties/AssemblyInfo.cs b/StarcraftCheck/SendStatus/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..77e372d --- /dev/null +++ b/StarcraftCheck/SendStatus/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SendStatus")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SendStatus")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("ec6c42ae-5b4a-4f17-8bbe-4b89d9618f74")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/StarcraftCheck/SendStatus/Properties/Resources.Designer.cs b/StarcraftCheck/SendStatus/Properties/Resources.Designer.cs new file mode 100644 index 0000000..ce8a62f --- /dev/null +++ b/StarcraftCheck/SendStatus/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SendStatus.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SendStatus.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SendStatus.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace SendStatus.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SendStatus.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/StarcraftCheck/SendStatus/Properties/Resources.resx b/StarcraftCheck/SendStatus/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/StarcraftCheck/SendStatus/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/StarcraftCheck/SendStatus/Properties/Settings.Designer.cs b/StarcraftCheck/SendStatus/Properties/Settings.Designer.cs new file mode 100644 index 0000000..5d1df9e --- /dev/null +++ b/StarcraftCheck/SendStatus/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SendStatus.Properties.Settings.get_Default():SendStatus.Properties.Settings")] + +namespace SendStatus.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/StarcraftCheck/SendStatus/Properties/Settings.settings b/StarcraftCheck/SendStatus/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/StarcraftCheck/SendStatus/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/StarcraftCheck/SendStatus/SendStatus.csproj b/StarcraftCheck/SendStatus/SendStatus.csproj new file mode 100644 index 0000000..3150493 --- /dev/null +++ b/StarcraftCheck/SendStatus/SendStatus.csproj @@ -0,0 +1,70 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {7D0AE579-DE43-475A-AE1E-F7B1A99C8F17} + WinExe + Properties + SendStatus + SendStatus + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + \ No newline at end of file diff --git a/StarcraftCheck/SendStatus/SendStatus.csproj.user b/StarcraftCheck/SendStatus/SendStatus.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/StarcraftCheck/SendStatus/SendStatus.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/StarcraftCheck/StarcraftCheck.sln b/StarcraftCheck/StarcraftCheck.sln new file mode 100644 index 0000000..c298e15 --- /dev/null +++ b/StarcraftCheck/StarcraftCheck.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StarcraftCheck", "StarcraftCheck\StarcraftCheck.csproj", "{DB349BBB-5B46-478F-986C-FD6F3C5CD269}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SendStatus", "SendStatus\SendStatus.csproj", "{7D0AE579-DE43-475A-AE1E-F7B1A99C8F17}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DB349BBB-5B46-478F-986C-FD6F3C5CD269}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DB349BBB-5B46-478F-986C-FD6F3C5CD269}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB349BBB-5B46-478F-986C-FD6F3C5CD269}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DB349BBB-5B46-478F-986C-FD6F3C5CD269}.Release|Any CPU.Build.0 = Release|Any CPU + {7D0AE579-DE43-475A-AE1E-F7B1A99C8F17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D0AE579-DE43-475A-AE1E-F7B1A99C8F17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D0AE579-DE43-475A-AE1E-F7B1A99C8F17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D0AE579-DE43-475A-AE1E-F7B1A99C8F17}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/StarcraftCheck/StarcraftCheck.suo b/StarcraftCheck/StarcraftCheck.suo new file mode 100644 index 0000000..88bdf64 Binary files /dev/null and b/StarcraftCheck/StarcraftCheck.suo differ diff --git a/StarcraftCheck/StarcraftCheck/Form1.Designer.cs b/StarcraftCheck/StarcraftCheck/Form1.Designer.cs new file mode 100644 index 0000000..3774c3b --- /dev/null +++ b/StarcraftCheck/StarcraftCheck/Form1.Designer.cs @@ -0,0 +1,89 @@ +namespace StarcraftChat +{ + partial class Form1 + { + /// + /// 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() + { + this.components = new System.ComponentModel.Container(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // timer1 + // + this.timer1.Enabled = true; + this.timer1.Interval = 10000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(12, 2); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(46, 17); + this.checkBox1.TabIndex = 1; + this.checkBox1.Text = "Aktiv"; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(64, 3); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(0, 0); + this.label1.TabIndex = 2; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(137, 22); + this.Controls.Add(this.label1); + this.Controls.Add(this.checkBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Form1"; + this.ShowInTaskbar = false; + this.Text = "SC-Check"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Timer timer1; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.Label label1; + } +} + diff --git a/StarcraftCheck/StarcraftCheck/Form1.cs b/StarcraftCheck/StarcraftCheck/Form1.cs new file mode 100644 index 0000000..22648c5 --- /dev/null +++ b/StarcraftCheck/StarcraftCheck/Form1.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using System.Media; +using System.Diagnostics; + +namespace StarcraftChat +{ + public partial class Form1 : Form + { + Thread t; + SoundPlayer sp = new SoundPlayer(Properties.Resources.zocken); + + UdpClient udp = new UdpClient(6111, AddressFamily.InterNetwork); + + public Form1() + { + InitializeComponent(); + t = new Thread(new ThreadStart(Listen)); + t.Start(); + } + + private void Listen() + { + IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.0.255"), 6111); + while (true) + { + byte[] buffer = udp.Receive(ref ipep); + if (buffer.Length > 20) + { + sp.Play(); + MessageBox.Show("Ein neues Starcraft ist offen!!!"); + } + } + } + + private void timer1_Tick(object sender, EventArgs e) + { + if (checkBox1.Checked) + { + udp.Send(new byte[] {0x97, 0x43, 0x14, 0x00, 0x02, 0x00, +0x00, 0x00, 0x50, 0x58, 0x45, 0x53, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 20, new IPEndPoint(IPAddress.Parse("192.168.0.255"), 6111)); + } + bool found = false; + foreach(Process p in Process.GetProcesses()) + { + if(p.ProcessName == "starcraft") + { + found = true; + break; + } + } + checkBox1.Checked = !found; + label1.Text = found ? "Starcraft luft" : ""; + if (found) + { + udp.Close(); + } + else + { + try + { + udp = new UdpClient(); + } + catch { } + } + } + + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + if (checkBox1.Checked) + { + t.Resume(); + } + else + { + t.Suspend(); + } + } + + private void Form1_FormClosed(object sender, FormClosedEventArgs e) + { + t.Abort(); + udp.Close(); + } + } +} \ No newline at end of file diff --git a/StarcraftCheck/StarcraftCheck/Form1.resx b/StarcraftCheck/StarcraftCheck/Form1.resx new file mode 100644 index 0000000..3d4835c --- /dev/null +++ b/StarcraftCheck/StarcraftCheck/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/StarcraftCheck/StarcraftCheck/Program.cs b/StarcraftCheck/StarcraftCheck/Program.cs new file mode 100644 index 0000000..e52aadf --- /dev/null +++ b/StarcraftCheck/StarcraftCheck/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace StarcraftChat +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/StarcraftCheck/StarcraftCheck/Properties/AssemblyInfo.cs b/StarcraftCheck/StarcraftCheck/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..8fa0724 --- /dev/null +++ b/StarcraftCheck/StarcraftCheck/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("StarcraftChat")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("StarcraftChat")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("734103ff-fc88-49c6-9a32-b3db5ac857a8")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/StarcraftCheck/StarcraftCheck/Properties/Resources.Designer.cs b/StarcraftCheck/StarcraftCheck/Properties/Resources.Designer.cs new file mode 100644 index 0000000..5ddb479 --- /dev/null +++ b/StarcraftCheck/StarcraftCheck/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="StarcraftChat.Properties.Resources.get_ResourceManager():System.Resources.Resourc" + + "eManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="StarcraftChat.Properties.Resources.get_Culture():System.Globalization.CultureInfo" + + "")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="StarcraftChat.Properties.Resources.set_Culture(System.Globalization.CultureInfo):" + + "Void")] + +namespace StarcraftChat.Properties { + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if ((resourceMan == null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("StarcraftChat.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.IO.UnmanagedMemoryStream zocken { + get { + return ResourceManager.GetStream("zocken", resourceCulture); + } + } + } +} diff --git a/StarcraftCheck/StarcraftCheck/Properties/Resources.resx b/StarcraftCheck/StarcraftCheck/Properties/Resources.resx new file mode 100644 index 0000000..d1990d9 --- /dev/null +++ b/StarcraftCheck/StarcraftCheck/Properties/Resources.resx @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\zocken.wav;System.IO.MemoryStream, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/StarcraftCheck/StarcraftCheck/Properties/Settings.Designer.cs b/StarcraftCheck/StarcraftCheck/Properties/Settings.Designer.cs new file mode 100644 index 0000000..2fb4e83 --- /dev/null +++ b/StarcraftCheck/StarcraftCheck/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "StarcraftChat.Properties.Settings.get_Default():StarcraftChat.Properties.Settings")] + +namespace StarcraftChat.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/StarcraftCheck/StarcraftCheck/Properties/Settings.settings b/StarcraftCheck/StarcraftCheck/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/StarcraftCheck/StarcraftCheck/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/StarcraftCheck/StarcraftCheck/Resources/zocken.wav b/StarcraftCheck/StarcraftCheck/Resources/zocken.wav new file mode 100644 index 0000000..206b3db Binary files /dev/null and b/StarcraftCheck/StarcraftCheck/Resources/zocken.wav differ diff --git a/StarcraftCheck/StarcraftCheck/StarcraftCheck.csproj b/StarcraftCheck/StarcraftCheck/StarcraftCheck.csproj new file mode 100644 index 0000000..31f778d --- /dev/null +++ b/StarcraftCheck/StarcraftCheck/StarcraftCheck.csproj @@ -0,0 +1,74 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {DB349BBB-5B46-478F-986C-FD6F3C5CD269} + WinExe + Properties + StarcraftChat + StarcraftCheck + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + \ No newline at end of file diff --git a/StarcraftCheck/StarcraftCheck/StarcraftCheck.csproj.user b/StarcraftCheck/StarcraftCheck/StarcraftCheck.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/StarcraftCheck/StarcraftCheck/StarcraftCheck.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/StarcraftCheck/StarcraftCheck/zocken!!!.wav b/StarcraftCheck/StarcraftCheck/zocken!!!.wav new file mode 100644 index 0000000..30b290f Binary files /dev/null and b/StarcraftCheck/StarcraftCheck/zocken!!!.wav differ diff --git a/StarcraftCheck/zocken.mp3 b/StarcraftCheck/zocken.mp3 new file mode 100644 index 0000000..d3f603d Binary files /dev/null and b/StarcraftCheck/zocken.mp3 differ diff --git a/StarcraftCheck/zocken.wav b/StarcraftCheck/zocken.wav new file mode 100644 index 0000000..206b3db Binary files /dev/null and b/StarcraftCheck/zocken.wav differ diff --git a/SyncronMusic/SyncronMusic.sln b/SyncronMusic/SyncronMusic.sln new file mode 100644 index 0000000..314c032 --- /dev/null +++ b/SyncronMusic/SyncronMusic.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SyncronMusic", "SyncronMusic\SyncronMusic.csproj", "{AA4EC9EF-B164-4B5F-AAB4-A76652382C6D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AA4EC9EF-B164-4B5F-AAB4-A76652382C6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA4EC9EF-B164-4B5F-AAB4-A76652382C6D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA4EC9EF-B164-4B5F-AAB4-A76652382C6D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA4EC9EF-B164-4B5F-AAB4-A76652382C6D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/SyncronMusic/SyncronMusic.suo b/SyncronMusic/SyncronMusic.suo new file mode 100644 index 0000000..f01c9ca Binary files /dev/null and b/SyncronMusic/SyncronMusic.suo differ diff --git a/SyncronMusic/SyncronMusic/Form1.Designer.cs b/SyncronMusic/SyncronMusic/Form1.Designer.cs new file mode 100644 index 0000000..ce382d0 --- /dev/null +++ b/SyncronMusic/SyncronMusic/Form1.Designer.cs @@ -0,0 +1,152 @@ +namespace SyncronMusic +{ + partial class Form1 + { + /// + /// 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() + { + this.tbIP = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.bFile = new System.Windows.Forms.Button(); + this.tbPath = new System.Windows.Forms.TextBox(); + this.rbServer = new System.Windows.Forms.RadioButton(); + this.rbClient = new System.Windows.Forms.RadioButton(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.lZeit = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // tbIP + // + this.tbIP.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbIP.Location = new System.Drawing.Point(51, 12); + this.tbIP.Name = "tbIP"; + this.tbIP.Size = new System.Drawing.Size(134, 20); + this.tbIP.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 15); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(33, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Ziel-IP"; + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + // + // bFile + // + this.bFile.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bFile.Location = new System.Drawing.Point(189, 69); + this.bFile.Name = "bFile"; + this.bFile.Size = new System.Drawing.Size(91, 25); + this.bFile.TabIndex = 2; + this.bFile.Text = "ffnen"; + this.bFile.Click += new System.EventHandler(this.bFile_Click); + // + // tbPath + // + this.tbPath.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbPath.Location = new System.Drawing.Point(13, 43); + this.tbPath.Name = "tbPath"; + this.tbPath.Size = new System.Drawing.Size(267, 20); + this.tbPath.TabIndex = 3; + // + // rbServer + // + this.rbServer.AutoSize = true; + this.rbServer.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.rbServer.Location = new System.Drawing.Point(12, 77); + this.rbServer.Name = "rbServer"; + this.rbServer.Size = new System.Drawing.Size(51, 17); + this.rbServer.TabIndex = 4; + this.rbServer.Text = "Server"; + // + // rbClient + // + this.rbClient.AutoSize = true; + this.rbClient.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.rbClient.Location = new System.Drawing.Point(12, 100); + this.rbClient.Name = "rbClient"; + this.rbClient.Size = new System.Drawing.Size(46, 17); + this.rbClient.TabIndex = 5; + this.rbClient.Text = "Client"; + // + // textBox1 + // + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox1.Location = new System.Drawing.Point(39, 123); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(93, 20); + this.textBox1.TabIndex = 6; + // + // lZeit + // + this.lZeit.AutoSize = true; + this.lZeit.Location = new System.Drawing.Point(12, 126); + this.lZeit.Name = "lZeit"; + this.lZeit.Size = new System.Drawing.Size(21, 13); + this.lZeit.TabIndex = 7; + this.lZeit.Text = "Zeit"; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(292, 273); + this.Controls.Add(this.lZeit); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.rbClient); + this.Controls.Add(this.rbServer); + this.Controls.Add(this.tbPath); + this.Controls.Add(this.bFile); + this.Controls.Add(this.label1); + this.Controls.Add(this.tbIP); + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox tbIP; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.Button bFile; + private System.Windows.Forms.TextBox tbPath; + private System.Windows.Forms.RadioButton rbServer; + private System.Windows.Forms.RadioButton rbClient; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label lZeit; + } +} + diff --git a/SyncronMusic/SyncronMusic/Form1.cs b/SyncronMusic/SyncronMusic/Form1.cs new file mode 100644 index 0000000..2019add --- /dev/null +++ b/SyncronMusic/SyncronMusic/Form1.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Media; + +namespace SyncronMusic +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + SoundPlayer sp = new SoundPlayer(tbPath.Text); + } + + private void bFile_Click(object sender, EventArgs e) + { + if (DialogResult.OK == openFileDialog1.ShowDialog()) ; + { + tbPath.Text = openFileDialog1.FileName; + string text = "bla"; + } + } + + private void Form1_Load(object sender, EventArgs e) + { + + } + } +} \ No newline at end of file diff --git a/SyncronMusic/SyncronMusic/Form1.resx b/SyncronMusic/SyncronMusic/Form1.resx new file mode 100644 index 0000000..7e33884 --- /dev/null +++ b/SyncronMusic/SyncronMusic/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/SyncronMusic/SyncronMusic/Program.cs b/SyncronMusic/SyncronMusic/Program.cs new file mode 100644 index 0000000..c996ffb --- /dev/null +++ b/SyncronMusic/SyncronMusic/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace SyncronMusic +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/SyncronMusic/SyncronMusic/Properties/AssemblyInfo.cs b/SyncronMusic/SyncronMusic/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..fe45e97 --- /dev/null +++ b/SyncronMusic/SyncronMusic/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SyncronMusic")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SyncronMusic")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("86c50c96-7421-4732-94f8-0e74cfb5e837")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SyncronMusic/SyncronMusic/Properties/Resources.Designer.cs b/SyncronMusic/SyncronMusic/Properties/Resources.Designer.cs new file mode 100644 index 0000000..82d2a2c --- /dev/null +++ b/SyncronMusic/SyncronMusic/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SyncronMusic.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SyncronMusic.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SyncronMusic.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace SyncronMusic.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SyncronMusic.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/SyncronMusic/SyncronMusic/Properties/Resources.resx b/SyncronMusic/SyncronMusic/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/SyncronMusic/SyncronMusic/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SyncronMusic/SyncronMusic/Properties/Settings.Designer.cs b/SyncronMusic/SyncronMusic/Properties/Settings.Designer.cs new file mode 100644 index 0000000..dd94f1f --- /dev/null +++ b/SyncronMusic/SyncronMusic/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SyncronMusic.Properties.Settings.get_Default():SyncronMusic.Properties.Settings")] + +namespace SyncronMusic.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/SyncronMusic/SyncronMusic/Properties/Settings.settings b/SyncronMusic/SyncronMusic/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/SyncronMusic/SyncronMusic/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SyncronMusic/SyncronMusic/SyncronMusic.csproj b/SyncronMusic/SyncronMusic/SyncronMusic.csproj new file mode 100644 index 0000000..99da034 --- /dev/null +++ b/SyncronMusic/SyncronMusic/SyncronMusic.csproj @@ -0,0 +1,70 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {AA4EC9EF-B164-4B5F-AAB4-A76652382C6D} + WinExe + Properties + SyncronMusic + SyncronMusic + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + \ No newline at end of file diff --git a/SyncronMusic/SyncronMusic/SyncronMusic.csproj.user b/SyncronMusic/SyncronMusic/SyncronMusic.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/SyncronMusic/SyncronMusic/SyncronMusic.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/TRI - Character Sheets/Icon.bmp b/TRI - Character Sheets/Icon.bmp new file mode 100644 index 0000000..7fc4956 Binary files /dev/null and b/TRI - Character Sheets/Icon.bmp differ diff --git a/TRI - Character Sheets/Icon.ico b/TRI - Character Sheets/Icon.ico new file mode 100644 index 0000000..2c894c7 Binary files /dev/null and b/TRI - Character Sheets/Icon.ico differ diff --git a/TRI - Character Sheets/TRI - Character Sheets.sln b/TRI - Character Sheets/TRI - Character Sheets.sln new file mode 100644 index 0000000..62e22c2 --- /dev/null +++ b/TRI - Character Sheets/TRI - Character Sheets.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TRI - Character Sheets", "TRI - Character Sheets\TRI - Character Sheets.csproj", "{DD05693B-5E0C-46AE-B789-C4F1039FF1CD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DD05693B-5E0C-46AE-B789-C4F1039FF1CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DD05693B-5E0C-46AE-B789-C4F1039FF1CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DD05693B-5E0C-46AE-B789-C4F1039FF1CD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DD05693B-5E0C-46AE-B789-C4F1039FF1CD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/TRI - Character Sheets/TRI - Character Sheets.suo b/TRI - Character Sheets/TRI - Character Sheets.suo new file mode 100644 index 0000000..5cf21d7 Binary files /dev/null and b/TRI - Character Sheets/TRI - Character Sheets.suo differ diff --git a/TRI - Character Sheets/TRI - Character Sheets/Fertigkeiten.xml b/TRI - Character Sheets/TRI - Character Sheets/Fertigkeiten.xml new file mode 100644 index 0000000..5e62a1c Binary files /dev/null and b/TRI - Character Sheets/TRI - Character Sheets/Fertigkeiten.xml differ diff --git a/TRI - Character Sheets/TRI - Character Sheets/Main.Designer.cs b/TRI - Character Sheets/TRI - Character Sheets/Main.Designer.cs new file mode 100644 index 0000000..1dff0b9 --- /dev/null +++ b/TRI - Character Sheets/TRI - Character Sheets/Main.Designer.cs @@ -0,0 +1,2761 @@ +namespace TRI___Character_Sheets +{ + partial class Main + { + /// + /// 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(Main)); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.panel1 = new System.Windows.Forms.Panel(); + this.textBox6 = new System.Windows.Forms.TextBox(); + this.label30 = new System.Windows.Forms.Label(); + this.textBox5 = new System.Windows.Forms.TextBox(); + this.label29 = new System.Windows.Forms.Label(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.label22 = new System.Windows.Forms.Label(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.label4 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.comboBox2 = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.panel7 = new System.Windows.Forms.Panel(); + this.numericUpDown2 = new System.Windows.Forms.NumericUpDown(); + this.label34 = new System.Windows.Forms.Label(); + this.label32 = new System.Windows.Forms.Label(); + this.label33 = new System.Windows.Forms.Label(); + this.label31 = new System.Windows.Forms.Label(); + this.label28 = new System.Windows.Forms.Label(); + this.label27 = new System.Windows.Forms.Label(); + this.label26 = new System.Windows.Forms.Label(); + this.label25 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.numericUpDown9 = new System.Windows.Forms.NumericUpDown(); + this.label13 = new System.Windows.Forms.Label(); + this.numericUpDown8 = new System.Windows.Forms.NumericUpDown(); + this.label14 = new System.Windows.Forms.Label(); + this.numericUpDown7 = new System.Windows.Forms.NumericUpDown(); + this.label15 = new System.Windows.Forms.Label(); + this.numericUpDown6 = new System.Windows.Forms.NumericUpDown(); + this.label16 = new System.Windows.Forms.Label(); + this.numericUpDown5 = new System.Windows.Forms.NumericUpDown(); + this.label17 = new System.Windows.Forms.Label(); + this.numericUpDown4 = new System.Windows.Forms.NumericUpDown(); + this.label18 = new System.Windows.Forms.Label(); + this.numericUpDown3 = new System.Windows.Forms.NumericUpDown(); + this.label19 = new System.Windows.Forms.Label(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.panel9 = new System.Windows.Forms.Panel(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.numericUpDown22 = new System.Windows.Forms.NumericUpDown(); + this.label43 = new System.Windows.Forms.Label(); + this.label44 = new System.Windows.Forms.Label(); + this.numericUpDown23 = new System.Windows.Forms.NumericUpDown(); + this.label45 = new System.Windows.Forms.Label(); + this.numericUpDown24 = new System.Windows.Forms.NumericUpDown(); + this.label46 = new System.Windows.Forms.Label(); + this.numericUpDown25 = new System.Windows.Forms.NumericUpDown(); + this.label47 = new System.Windows.Forms.Label(); + this.numericUpDown26 = new System.Windows.Forms.NumericUpDown(); + this.label48 = new System.Windows.Forms.Label(); + this.numericUpDown27 = new System.Windows.Forms.NumericUpDown(); + this.label49 = new System.Windows.Forms.Label(); + this.numericUpDown28 = new System.Windows.Forms.NumericUpDown(); + this.label50 = new System.Windows.Forms.Label(); + this.numericUpDown29 = new System.Windows.Forms.NumericUpDown(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.groupBox7 = new System.Windows.Forms.GroupBox(); + this.numericUpDown38 = new System.Windows.Forms.NumericUpDown(); + this.label59 = new System.Windows.Forms.Label(); + this.label60 = new System.Windows.Forms.Label(); + this.numericUpDown39 = new System.Windows.Forms.NumericUpDown(); + this.label61 = new System.Windows.Forms.Label(); + this.numericUpDown40 = new System.Windows.Forms.NumericUpDown(); + this.label62 = new System.Windows.Forms.Label(); + this.numericUpDown41 = new System.Windows.Forms.NumericUpDown(); + this.label63 = new System.Windows.Forms.Label(); + this.numericUpDown42 = new System.Windows.Forms.NumericUpDown(); + this.label64 = new System.Windows.Forms.Label(); + this.numericUpDown43 = new System.Windows.Forms.NumericUpDown(); + this.label65 = new System.Windows.Forms.Label(); + this.numericUpDown44 = new System.Windows.Forms.NumericUpDown(); + this.label66 = new System.Windows.Forms.Label(); + this.numericUpDown45 = new System.Windows.Forms.NumericUpDown(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.numericUpDown30 = new System.Windows.Forms.NumericUpDown(); + this.label51 = new System.Windows.Forms.Label(); + this.label52 = new System.Windows.Forms.Label(); + this.numericUpDown31 = new System.Windows.Forms.NumericUpDown(); + this.label53 = new System.Windows.Forms.Label(); + this.numericUpDown32 = new System.Windows.Forms.NumericUpDown(); + this.label54 = new System.Windows.Forms.Label(); + this.numericUpDown33 = new System.Windows.Forms.NumericUpDown(); + this.label55 = new System.Windows.Forms.Label(); + this.numericUpDown34 = new System.Windows.Forms.NumericUpDown(); + this.label56 = new System.Windows.Forms.Label(); + this.numericUpDown35 = new System.Windows.Forms.NumericUpDown(); + this.label57 = new System.Windows.Forms.Label(); + this.numericUpDown36 = new System.Windows.Forms.NumericUpDown(); + this.label58 = new System.Windows.Forms.Label(); + this.numericUpDown37 = new System.Windows.Forms.NumericUpDown(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.numericUpDown14 = new System.Windows.Forms.NumericUpDown(); + this.label35 = new System.Windows.Forms.Label(); + this.label36 = new System.Windows.Forms.Label(); + this.numericUpDown15 = new System.Windows.Forms.NumericUpDown(); + this.label37 = new System.Windows.Forms.Label(); + this.numericUpDown16 = new System.Windows.Forms.NumericUpDown(); + this.label38 = new System.Windows.Forms.Label(); + this.numericUpDown17 = new System.Windows.Forms.NumericUpDown(); + this.label39 = new System.Windows.Forms.Label(); + this.numericUpDown18 = new System.Windows.Forms.NumericUpDown(); + this.label40 = new System.Windows.Forms.Label(); + this.numericUpDown19 = new System.Windows.Forms.NumericUpDown(); + this.label41 = new System.Windows.Forms.Label(); + this.numericUpDown20 = new System.Windows.Forms.NumericUpDown(); + this.label42 = new System.Windows.Forms.Label(); + this.numericUpDown21 = new System.Windows.Forms.NumericUpDown(); + this.label24 = new System.Windows.Forms.Label(); + this.tabPage5 = new System.Windows.Forms.TabPage(); + this.panel5 = new System.Windows.Forms.Panel(); + this.numericUpDown10 = new System.Windows.Forms.NumericUpDown(); + this.comboBox5 = new System.Windows.Forms.ComboBox(); + this.comboBox4 = new System.Windows.Forms.ComboBox(); + this.cbFertigkeiten = new System.Windows.Forms.ComboBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.label21 = new System.Windows.Forms.Label(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.label20 = new System.Windows.Forms.Label(); + this.panel3 = new System.Windows.Forms.Panel(); + this.listBox2 = new System.Windows.Forms.ListBox(); + this.panel6 = new System.Windows.Forms.Panel(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.label23 = new System.Windows.Forms.Label(); + this.tabPage6 = new System.Windows.Forms.TabPage(); + this.listBox1 = new System.Windows.Forms.ListBox(); + this.panel4 = new System.Windows.Forms.Panel(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.label7 = new System.Windows.Forms.Label(); + this.label67 = new System.Windows.Forms.Label(); + this.label68 = new System.Windows.Forms.Label(); + this.label69 = new System.Windows.Forms.Label(); + this.label70 = new System.Windows.Forms.Label(); + this.label71 = new System.Windows.Forms.Label(); + this.label72 = new System.Windows.Forms.Label(); + this.label73 = new System.Windows.Forms.Label(); + this.label74 = new System.Windows.Forms.Label(); + this.label75 = new System.Windows.Forms.Label(); + this.label76 = new System.Windows.Forms.Label(); + this.label77 = new System.Windows.Forms.Label(); + this.label78 = new System.Windows.Forms.Label(); + this.label79 = new System.Windows.Forms.Label(); + this.label80 = new System.Windows.Forms.Label(); + this.label81 = new System.Windows.Forms.Label(); + this.label82 = new System.Windows.Forms.Label(); + this.label83 = new System.Windows.Forms.Label(); + this.label84 = new System.Windows.Forms.Label(); + this.label85 = new System.Windows.Forms.Label(); + this.label86 = new System.Windows.Forms.Label(); + this.label87 = new System.Windows.Forms.Label(); + this.label88 = new System.Windows.Forms.Label(); + this.label89 = new System.Windows.Forms.Label(); + this.label90 = new System.Windows.Forms.Label(); + this.label91 = new System.Windows.Forms.Label(); + this.label92 = new System.Windows.Forms.Label(); + this.label93 = new System.Windows.Forms.Label(); + this.panel8 = new System.Windows.Forms.Panel(); + this.nUDSans = new System.Windows.Forms.NumericUpDown(); + this.nUDSuni = new System.Windows.Forms.NumericUpDown(); + this.nUDSihir = new System.Windows.Forms.NumericUpDown(); + this.label8 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.lVerbleibendeNebelpunkte = new System.Windows.Forms.Label(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); + this.tabPage2.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.panel7.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown9)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown8)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown7)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown6)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown5)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).BeginInit(); + this.tabPage4.SuspendLayout(); + this.panel9.SuspendLayout(); + this.groupBox5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown22)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown23)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown24)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown25)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown26)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown27)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown28)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown29)).BeginInit(); + this.groupBox7.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown38)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown39)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown40)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown41)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown42)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown43)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown44)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown45)).BeginInit(); + this.groupBox6.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown30)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown31)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown32)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown33)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown34)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown35)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown36)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown37)).BeginInit(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown14)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown15)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown16)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown17)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown18)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown19)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown20)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown21)).BeginInit(); + this.tabPage5.SuspendLayout(); + this.panel5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown10)).BeginInit(); + this.panel3.SuspendLayout(); + this.panel6.SuspendLayout(); + this.panel4.SuspendLayout(); + this.panel8.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nUDSans)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nUDSuni)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nUDSihir)).BeginInit(); + this.SuspendLayout(); + // + // toolStrip1 + // + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(612, 25); + this.toolStrip1.TabIndex = 0; + this.toolStrip1.Text = "toolStrip1"; + // + // tabControl1 + // + this.tabControl1.Appearance = System.Windows.Forms.TabAppearance.FlatButtons; + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.Controls.Add(this.tabPage4); + this.tabControl1.Controls.Add(this.tabPage5); + this.tabControl1.Controls.Add(this.tabPage6); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 25); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(612, 434); + this.tabControl1.TabIndex = 1; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.panel1); + this.tabPage1.Location = new System.Drawing.Point(4, 25); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(604, 405); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Allgemein"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // panel1 + // + this.panel1.AutoScroll = true; + this.panel1.Controls.Add(this.textBox6); + this.panel1.Controls.Add(this.label30); + this.panel1.Controls.Add(this.textBox5); + this.panel1.Controls.Add(this.label29); + this.panel1.Controls.Add(this.textBox4); + this.panel1.Controls.Add(this.label22); + this.panel1.Controls.Add(this.textBox3); + this.panel1.Controls.Add(this.label6); + this.panel1.Controls.Add(this.textBox2); + this.panel1.Controls.Add(this.label5); + this.panel1.Controls.Add(this.panel2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(3, 3); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(598, 399); + this.panel1.TabIndex = 8; + // + // textBox6 + // + this.textBox6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox6.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox6.Location = new System.Drawing.Point(0, 466); + this.textBox6.Multiline = true; + this.textBox6.Name = "textBox6"; + this.textBox6.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox6.Size = new System.Drawing.Size(582, 49); + this.textBox6.TabIndex = 18; + // + // label30 + // + this.label30.Dock = System.Windows.Forms.DockStyle.Top; + this.label30.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label30.Location = new System.Drawing.Point(0, 450); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(582, 16); + this.label30.TabIndex = 17; + this.label30.Text = "Erscheinung Ion"; + this.label30.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // textBox5 + // + this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox5.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox5.Location = new System.Drawing.Point(0, 401); + this.textBox5.Multiline = true; + this.textBox5.Name = "textBox5"; + this.textBox5.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox5.Size = new System.Drawing.Size(582, 49); + this.textBox5.TabIndex = 16; + // + // label29 + // + this.label29.Dock = System.Windows.Forms.DockStyle.Top; + this.label29.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label29.Location = new System.Drawing.Point(0, 385); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(582, 16); + this.label29.TabIndex = 15; + this.label29.Text = "Erscheinung Rulegard"; + this.label29.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // textBox4 + // + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox4.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox4.Location = new System.Drawing.Point(0, 336); + this.textBox4.Multiline = true; + this.textBox4.Name = "textBox4"; + this.textBox4.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox4.Size = new System.Drawing.Size(582, 49); + this.textBox4.TabIndex = 14; + // + // label22 + // + this.label22.Dock = System.Windows.Forms.DockStyle.Top; + this.label22.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label22.Location = new System.Drawing.Point(0, 320); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(582, 16); + this.label22.TabIndex = 13; + this.label22.Text = "Erscheinung Terra"; + this.label22.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // textBox3 + // + this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox3.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox3.Location = new System.Drawing.Point(0, 271); + this.textBox3.Multiline = true; + this.textBox3.Name = "textBox3"; + this.textBox3.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox3.Size = new System.Drawing.Size(582, 49); + this.textBox3.TabIndex = 12; + // + // label6 + // + this.label6.Dock = System.Windows.Forms.DockStyle.Top; + this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label6.Location = new System.Drawing.Point(0, 255); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(582, 16); + this.label6.TabIndex = 11; + this.label6.Text = "Erscheinung Allgemein"; + this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // textBox2 + // + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox2.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox2.Location = new System.Drawing.Point(0, 144); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox2.Size = new System.Drawing.Size(582, 111); + this.textBox2.TabIndex = 10; + // + // label5 + // + this.label5.Dock = System.Windows.Forms.DockStyle.Top; + this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.Location = new System.Drawing.Point(0, 128); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(582, 16); + this.label5.TabIndex = 9; + this.label5.Text = "Hintergrund"; + this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // panel2 + // + this.panel2.AutoScroll = true; + this.panel2.Controls.Add(this.label1); + this.panel2.Controls.Add(this.textBox1); + this.panel2.Controls.Add(this.numericUpDown1); + this.panel2.Controls.Add(this.label4); + this.panel2.Controls.Add(this.label2); + this.panel2.Controls.Add(this.comboBox1); + this.panel2.Controls.Add(this.comboBox2); + this.panel2.Controls.Add(this.label3); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(582, 128); + this.panel2.TabIndex = 8; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(5, 10); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(43, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Name:"; + // + // textBox1 + // + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox1.Location = new System.Drawing.Point(86, 7); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(182, 20); + this.textBox1.TabIndex = 4; + // + // numericUpDown1 + // + this.numericUpDown1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown1.Location = new System.Drawing.Point(86, 87); + this.numericUpDown1.Maximum = new decimal(new int[] { + 999, + 0, + 0, + 0}); + this.numericUpDown1.Minimum = new decimal(new int[] { + 16, + 0, + 0, + 0}); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(40, 20); + this.numericUpDown1.TabIndex = 7; + this.numericUpDown1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDown1.Value = new decimal(new int[] { + 16, + 0, + 0, + 0}); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(5, 89); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(37, 13); + this.label4.TabIndex = 3; + this.label4.Text = "Alter:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(5, 36); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(73, 13); + this.label2.TabIndex = 1; + this.label2.Text = "Heimatwelt:"; + // + // comboBox1 + // + this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Items.AddRange(new object[] { + "Terra", + "Rulegard", + "Ion"}); + this.comboBox1.Location = new System.Drawing.Point(86, 33); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(86, 21); + this.comboBox1.TabIndex = 5; + // + // comboBox2 + // + this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox2.FormattingEnabled = true; + this.comboBox2.Items.AddRange(new object[] { + "Mnnlich", + "Weiblich"}); + this.comboBox2.Location = new System.Drawing.Point(86, 60); + this.comboBox2.Name = "comboBox2"; + this.comboBox2.Size = new System.Drawing.Size(86, 21); + this.comboBox2.TabIndex = 6; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.Location = new System.Drawing.Point(5, 63); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(75, 13); + this.label3.TabIndex = 2; + this.label3.Text = "Geschlecht:"; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.panel8); + this.tabPage2.Controls.Add(this.lVerbleibendeNebelpunkte); + this.tabPage2.Location = new System.Drawing.Point(4, 25); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(604, 405); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Nebelattribute"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.panel7); + this.tabPage3.Controls.Add(this.label19); + this.tabPage3.Location = new System.Drawing.Point(4, 25); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(604, 405); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "Grundattribute"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // panel7 + // + this.panel7.AutoScroll = true; + this.panel7.Controls.Add(this.label90); + this.panel7.Controls.Add(this.label91); + this.panel7.Controls.Add(this.label92); + this.panel7.Controls.Add(this.label93); + this.panel7.Controls.Add(this.label86); + this.panel7.Controls.Add(this.label87); + this.panel7.Controls.Add(this.label88); + this.panel7.Controls.Add(this.label89); + this.panel7.Controls.Add(this.label82); + this.panel7.Controls.Add(this.label83); + this.panel7.Controls.Add(this.label84); + this.panel7.Controls.Add(this.label85); + this.panel7.Controls.Add(this.label78); + this.panel7.Controls.Add(this.label79); + this.panel7.Controls.Add(this.label80); + this.panel7.Controls.Add(this.label81); + this.panel7.Controls.Add(this.label74); + this.panel7.Controls.Add(this.label75); + this.panel7.Controls.Add(this.label76); + this.panel7.Controls.Add(this.label77); + this.panel7.Controls.Add(this.label70); + this.panel7.Controls.Add(this.label71); + this.panel7.Controls.Add(this.label72); + this.panel7.Controls.Add(this.label73); + this.panel7.Controls.Add(this.label7); + this.panel7.Controls.Add(this.label67); + this.panel7.Controls.Add(this.label68); + this.panel7.Controls.Add(this.label69); + this.panel7.Controls.Add(this.numericUpDown2); + this.panel7.Controls.Add(this.label34); + this.panel7.Controls.Add(this.label32); + this.panel7.Controls.Add(this.label33); + this.panel7.Controls.Add(this.label31); + this.panel7.Controls.Add(this.label28); + this.panel7.Controls.Add(this.label27); + this.panel7.Controls.Add(this.label26); + this.panel7.Controls.Add(this.label25); + this.panel7.Controls.Add(this.label11); + this.panel7.Controls.Add(this.label12); + this.panel7.Controls.Add(this.numericUpDown9); + this.panel7.Controls.Add(this.label13); + this.panel7.Controls.Add(this.numericUpDown8); + this.panel7.Controls.Add(this.label14); + this.panel7.Controls.Add(this.numericUpDown7); + this.panel7.Controls.Add(this.label15); + this.panel7.Controls.Add(this.numericUpDown6); + this.panel7.Controls.Add(this.label16); + this.panel7.Controls.Add(this.numericUpDown5); + this.panel7.Controls.Add(this.label17); + this.panel7.Controls.Add(this.numericUpDown4); + this.panel7.Controls.Add(this.label18); + this.panel7.Controls.Add(this.numericUpDown3); + this.panel7.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel7.Location = new System.Drawing.Point(0, 24); + this.panel7.Name = "panel7"; + this.panel7.Size = new System.Drawing.Size(604, 381); + this.panel7.TabIndex = 18; + // + // numericUpDown2 + // + this.numericUpDown2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown2.Location = new System.Drawing.Point(94, 25); + this.numericUpDown2.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown2.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown2.Name = "numericUpDown2"; + this.numericUpDown2.Size = new System.Drawing.Size(40, 20); + this.numericUpDown2.TabIndex = 26; + this.numericUpDown2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDown2.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // label34 + // + this.label34.Location = new System.Drawing.Point(258, 25); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(40, 16); + this.label34.TabIndex = 25; + this.label34.Text = "8"; + this.label34.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label32 + // + this.label32.Location = new System.Drawing.Point(212, 25); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(40, 16); + this.label32.TabIndex = 24; + this.label32.Text = "8"; + this.label32.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label33 + // + this.label33.Location = new System.Drawing.Point(166, 25); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(40, 16); + this.label33.TabIndex = 23; + this.label33.Text = "8"; + this.label33.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label31 + // + this.label31.Location = new System.Drawing.Point(140, 25); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(20, 16); + this.label31.TabIndex = 21; + this.label31.Text = "8"; + this.label31.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label28 + // + this.label28.Location = new System.Drawing.Point(258, 6); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(40, 16); + this.label28.TabIndex = 20; + this.label28.Text = "I"; + this.label28.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label27 + // + this.label27.Location = new System.Drawing.Point(212, 6); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(40, 16); + this.label27.TabIndex = 19; + this.label27.Text = "R"; + this.label27.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label26 + // + this.label26.Location = new System.Drawing.Point(166, 6); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(40, 16); + this.label26.TabIndex = 18; + this.label26.Text = "T"; + this.label26.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label25 + // + this.label25.Location = new System.Drawing.Point(91, 6); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(69, 16); + this.label25.TabIndex = 17; + this.label25.Text = "Basis"; + this.label25.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(8, 27); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(41, 13); + this.label11.TabIndex = 0; + this.label11.Text = "Strke:"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(8, 53); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(67, 13); + this.label12.TabIndex = 1; + this.label12.Text = "Gewandheit:"; + // + // numericUpDown9 + // + this.numericUpDown9.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown9.Location = new System.Drawing.Point(94, 207); + this.numericUpDown9.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown9.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown9.Name = "numericUpDown9"; + this.numericUpDown9.Size = new System.Drawing.Size(40, 20); + this.numericUpDown9.TabIndex = 16; + this.numericUpDown9.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDown9.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(8, 79); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(70, 13); + this.label13.TabIndex = 2; + this.label13.Text = "Schnelligkeit:"; + // + // numericUpDown8 + // + this.numericUpDown8.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown8.Location = new System.Drawing.Point(94, 181); + this.numericUpDown8.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown8.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown8.Name = "numericUpDown8"; + this.numericUpDown8.Size = new System.Drawing.Size(40, 20); + this.numericUpDown8.TabIndex = 15; + this.numericUpDown8.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDown8.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(8, 103); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(65, 13); + this.label14.TabIndex = 3; + this.label14.Text = "Konstitution:"; + // + // numericUpDown7 + // + this.numericUpDown7.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown7.Location = new System.Drawing.Point(94, 155); + this.numericUpDown7.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown7.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown7.Name = "numericUpDown7"; + this.numericUpDown7.Size = new System.Drawing.Size(40, 20); + this.numericUpDown7.TabIndex = 14; + this.numericUpDown7.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDown7.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(8, 131); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(57, 13); + this.label15.TabIndex = 4; + this.label15.Text = "Intelligenz:"; + // + // numericUpDown6 + // + this.numericUpDown6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown6.Location = new System.Drawing.Point(94, 129); + this.numericUpDown6.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown6.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown6.Name = "numericUpDown6"; + this.numericUpDown6.Size = new System.Drawing.Size(40, 20); + this.numericUpDown6.TabIndex = 13; + this.numericUpDown6.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDown6.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(8, 157); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(65, 13); + this.label16.TabIndex = 5; + this.label16.Text = "Willenskraft:"; + // + // numericUpDown5 + // + this.numericUpDown5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown5.Location = new System.Drawing.Point(94, 103); + this.numericUpDown5.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown5.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown5.Name = "numericUpDown5"; + this.numericUpDown5.Size = new System.Drawing.Size(40, 20); + this.numericUpDown5.TabIndex = 12; + this.numericUpDown5.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDown5.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(8, 183); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(53, 13); + this.label17.TabIndex = 6; + this.label17.Text = "Charisma:"; + // + // numericUpDown4 + // + this.numericUpDown4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown4.Location = new System.Drawing.Point(94, 77); + this.numericUpDown4.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown4.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown4.Name = "numericUpDown4"; + this.numericUpDown4.Size = new System.Drawing.Size(40, 20); + this.numericUpDown4.TabIndex = 11; + this.numericUpDown4.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDown4.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(8, 209); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(80, 13); + this.label18.TabIndex = 7; + this.label18.Text = "Wahrnehmung:"; + // + // numericUpDown3 + // + this.numericUpDown3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown3.Location = new System.Drawing.Point(94, 51); + this.numericUpDown3.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown3.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown3.Name = "numericUpDown3"; + this.numericUpDown3.Size = new System.Drawing.Size(40, 20); + this.numericUpDown3.TabIndex = 10; + this.numericUpDown3.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDown3.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // label19 + // + this.label19.Dock = System.Windows.Forms.DockStyle.Top; + this.label19.Location = new System.Drawing.Point(0, 0); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(604, 24); + this.label19.TabIndex = 17; + this.label19.Text = "Verbleibende Punkte: 22"; + this.label19.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.panel9); + this.tabPage4.Controls.Add(this.label24); + this.tabPage4.Location = new System.Drawing.Point(4, 25); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(604, 405); + this.tabPage4.TabIndex = 3; + this.tabPage4.Text = "Suni-Punkte"; + this.tabPage4.UseVisualStyleBackColor = true; + // + // panel9 + // + this.panel9.AutoScroll = true; + this.panel9.Controls.Add(this.groupBox5); + this.panel9.Controls.Add(this.groupBox4); + this.panel9.Controls.Add(this.groupBox7); + this.panel9.Controls.Add(this.groupBox3); + this.panel9.Controls.Add(this.groupBox6); + this.panel9.Controls.Add(this.groupBox2); + this.panel9.Controls.Add(this.groupBox1); + this.panel9.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel9.Location = new System.Drawing.Point(0, 24); + this.panel9.Name = "panel9"; + this.panel9.Size = new System.Drawing.Size(604, 381); + this.panel9.TabIndex = 9; + // + // groupBox5 + // + this.groupBox5.Controls.Add(this.numericUpDown22); + this.groupBox5.Controls.Add(this.label43); + this.groupBox5.Controls.Add(this.label44); + this.groupBox5.Controls.Add(this.numericUpDown23); + this.groupBox5.Controls.Add(this.label45); + this.groupBox5.Controls.Add(this.numericUpDown24); + this.groupBox5.Controls.Add(this.label46); + this.groupBox5.Controls.Add(this.numericUpDown25); + this.groupBox5.Controls.Add(this.label47); + this.groupBox5.Controls.Add(this.numericUpDown26); + this.groupBox5.Controls.Add(this.label48); + this.groupBox5.Controls.Add(this.numericUpDown27); + this.groupBox5.Controls.Add(this.label49); + this.groupBox5.Controls.Add(this.numericUpDown28); + this.groupBox5.Controls.Add(this.label50); + this.groupBox5.Controls.Add(this.numericUpDown29); + this.groupBox5.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox5.Location = new System.Drawing.Point(0, 510); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(588, 70); + this.groupBox5.TabIndex = 19; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "Ion - Attribute"; + // + // numericUpDown22 + // + this.numericUpDown22.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown22.Location = new System.Drawing.Point(94, 14); + this.numericUpDown22.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown22.Name = "numericUpDown22"; + this.numericUpDown22.Size = new System.Drawing.Size(40, 20); + this.numericUpDown22.TabIndex = 42; + this.numericUpDown22.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label43 + // + this.label43.AutoSize = true; + this.label43.Location = new System.Drawing.Point(8, 16); + this.label43.Name = "label43"; + this.label43.Size = new System.Drawing.Size(41, 13); + this.label43.TabIndex = 27; + this.label43.Text = "Strke:"; + // + // label44 + // + this.label44.AutoSize = true; + this.label44.Location = new System.Drawing.Point(8, 42); + this.label44.Name = "label44"; + this.label44.Size = new System.Drawing.Size(67, 13); + this.label44.TabIndex = 28; + this.label44.Text = "Gewandheit:"; + // + // numericUpDown23 + // + this.numericUpDown23.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown23.Location = new System.Drawing.Point(490, 40); + this.numericUpDown23.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown23.Name = "numericUpDown23"; + this.numericUpDown23.Size = new System.Drawing.Size(40, 20); + this.numericUpDown23.TabIndex = 41; + this.numericUpDown23.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label45 + // + this.label45.AutoSize = true; + this.label45.Location = new System.Drawing.Point(140, 16); + this.label45.Name = "label45"; + this.label45.Size = new System.Drawing.Size(70, 13); + this.label45.TabIndex = 29; + this.label45.Text = "Schnelligkeit:"; + // + // numericUpDown24 + // + this.numericUpDown24.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown24.Location = new System.Drawing.Point(490, 14); + this.numericUpDown24.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown24.Name = "numericUpDown24"; + this.numericUpDown24.Size = new System.Drawing.Size(40, 20); + this.numericUpDown24.TabIndex = 40; + this.numericUpDown24.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label46 + // + this.label46.AutoSize = true; + this.label46.Location = new System.Drawing.Point(140, 42); + this.label46.Name = "label46"; + this.label46.Size = new System.Drawing.Size(65, 13); + this.label46.TabIndex = 30; + this.label46.Text = "Konstitution:"; + // + // numericUpDown25 + // + this.numericUpDown25.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown25.Location = new System.Drawing.Point(358, 40); + this.numericUpDown25.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown25.Name = "numericUpDown25"; + this.numericUpDown25.Size = new System.Drawing.Size(40, 20); + this.numericUpDown25.TabIndex = 39; + this.numericUpDown25.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label47 + // + this.label47.AutoSize = true; + this.label47.Location = new System.Drawing.Point(272, 16); + this.label47.Name = "label47"; + this.label47.Size = new System.Drawing.Size(57, 13); + this.label47.TabIndex = 31; + this.label47.Text = "Intelligenz:"; + // + // numericUpDown26 + // + this.numericUpDown26.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown26.Location = new System.Drawing.Point(358, 14); + this.numericUpDown26.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown26.Name = "numericUpDown26"; + this.numericUpDown26.Size = new System.Drawing.Size(40, 20); + this.numericUpDown26.TabIndex = 38; + this.numericUpDown26.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label48 + // + this.label48.AutoSize = true; + this.label48.Location = new System.Drawing.Point(272, 42); + this.label48.Name = "label48"; + this.label48.Size = new System.Drawing.Size(65, 13); + this.label48.TabIndex = 32; + this.label48.Text = "Willenskraft:"; + // + // numericUpDown27 + // + this.numericUpDown27.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown27.Location = new System.Drawing.Point(226, 40); + this.numericUpDown27.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown27.Name = "numericUpDown27"; + this.numericUpDown27.Size = new System.Drawing.Size(40, 20); + this.numericUpDown27.TabIndex = 37; + this.numericUpDown27.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label49 + // + this.label49.AutoSize = true; + this.label49.Location = new System.Drawing.Point(404, 16); + this.label49.Name = "label49"; + this.label49.Size = new System.Drawing.Size(53, 13); + this.label49.TabIndex = 33; + this.label49.Text = "Charisma:"; + // + // numericUpDown28 + // + this.numericUpDown28.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown28.Location = new System.Drawing.Point(226, 14); + this.numericUpDown28.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown28.Name = "numericUpDown28"; + this.numericUpDown28.Size = new System.Drawing.Size(40, 20); + this.numericUpDown28.TabIndex = 36; + this.numericUpDown28.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label50 + // + this.label50.AutoSize = true; + this.label50.Location = new System.Drawing.Point(404, 42); + this.label50.Name = "label50"; + this.label50.Size = new System.Drawing.Size(80, 13); + this.label50.TabIndex = 34; + this.label50.Text = "Wahrnehmung:"; + // + // numericUpDown29 + // + this.numericUpDown29.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown29.Location = new System.Drawing.Point(94, 40); + this.numericUpDown29.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown29.Name = "numericUpDown29"; + this.numericUpDown29.Size = new System.Drawing.Size(40, 20); + this.numericUpDown29.TabIndex = 35; + this.numericUpDown29.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // groupBox4 + // + this.groupBox4.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox4.Location = new System.Drawing.Point(0, 410); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(588, 100); + this.groupBox4.TabIndex = 18; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "Ion - Cyber- und Bioware"; + // + // groupBox7 + // + this.groupBox7.Controls.Add(this.numericUpDown38); + this.groupBox7.Controls.Add(this.label59); + this.groupBox7.Controls.Add(this.label60); + this.groupBox7.Controls.Add(this.numericUpDown39); + this.groupBox7.Controls.Add(this.label61); + this.groupBox7.Controls.Add(this.numericUpDown40); + this.groupBox7.Controls.Add(this.label62); + this.groupBox7.Controls.Add(this.numericUpDown41); + this.groupBox7.Controls.Add(this.label63); + this.groupBox7.Controls.Add(this.numericUpDown42); + this.groupBox7.Controls.Add(this.label64); + this.groupBox7.Controls.Add(this.numericUpDown43); + this.groupBox7.Controls.Add(this.label65); + this.groupBox7.Controls.Add(this.numericUpDown44); + this.groupBox7.Controls.Add(this.label66); + this.groupBox7.Controls.Add(this.numericUpDown45); + this.groupBox7.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox7.Location = new System.Drawing.Point(0, 340); + this.groupBox7.Name = "groupBox7"; + this.groupBox7.Size = new System.Drawing.Size(588, 70); + this.groupBox7.TabIndex = 17; + this.groupBox7.TabStop = false; + this.groupBox7.Text = "Rulegard - Attribute"; + // + // numericUpDown38 + // + this.numericUpDown38.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown38.Location = new System.Drawing.Point(94, 14); + this.numericUpDown38.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown38.Name = "numericUpDown38"; + this.numericUpDown38.Size = new System.Drawing.Size(40, 20); + this.numericUpDown38.TabIndex = 42; + this.numericUpDown38.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label59 + // + this.label59.AutoSize = true; + this.label59.Location = new System.Drawing.Point(8, 16); + this.label59.Name = "label59"; + this.label59.Size = new System.Drawing.Size(41, 13); + this.label59.TabIndex = 27; + this.label59.Text = "Strke:"; + // + // label60 + // + this.label60.AutoSize = true; + this.label60.Location = new System.Drawing.Point(8, 42); + this.label60.Name = "label60"; + this.label60.Size = new System.Drawing.Size(67, 13); + this.label60.TabIndex = 28; + this.label60.Text = "Gewandheit:"; + // + // numericUpDown39 + // + this.numericUpDown39.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown39.Location = new System.Drawing.Point(490, 40); + this.numericUpDown39.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown39.Name = "numericUpDown39"; + this.numericUpDown39.Size = new System.Drawing.Size(40, 20); + this.numericUpDown39.TabIndex = 41; + this.numericUpDown39.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label61 + // + this.label61.AutoSize = true; + this.label61.Location = new System.Drawing.Point(140, 16); + this.label61.Name = "label61"; + this.label61.Size = new System.Drawing.Size(70, 13); + this.label61.TabIndex = 29; + this.label61.Text = "Schnelligkeit:"; + // + // numericUpDown40 + // + this.numericUpDown40.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown40.Location = new System.Drawing.Point(490, 14); + this.numericUpDown40.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown40.Name = "numericUpDown40"; + this.numericUpDown40.Size = new System.Drawing.Size(40, 20); + this.numericUpDown40.TabIndex = 40; + this.numericUpDown40.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label62 + // + this.label62.AutoSize = true; + this.label62.Location = new System.Drawing.Point(140, 42); + this.label62.Name = "label62"; + this.label62.Size = new System.Drawing.Size(65, 13); + this.label62.TabIndex = 30; + this.label62.Text = "Konstitution:"; + // + // numericUpDown41 + // + this.numericUpDown41.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown41.Location = new System.Drawing.Point(358, 40); + this.numericUpDown41.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown41.Name = "numericUpDown41"; + this.numericUpDown41.Size = new System.Drawing.Size(40, 20); + this.numericUpDown41.TabIndex = 39; + this.numericUpDown41.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label63 + // + this.label63.AutoSize = true; + this.label63.Location = new System.Drawing.Point(272, 16); + this.label63.Name = "label63"; + this.label63.Size = new System.Drawing.Size(57, 13); + this.label63.TabIndex = 31; + this.label63.Text = "Intelligenz:"; + // + // numericUpDown42 + // + this.numericUpDown42.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown42.Location = new System.Drawing.Point(358, 14); + this.numericUpDown42.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown42.Name = "numericUpDown42"; + this.numericUpDown42.Size = new System.Drawing.Size(40, 20); + this.numericUpDown42.TabIndex = 38; + this.numericUpDown42.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label64 + // + this.label64.AutoSize = true; + this.label64.Location = new System.Drawing.Point(272, 42); + this.label64.Name = "label64"; + this.label64.Size = new System.Drawing.Size(65, 13); + this.label64.TabIndex = 32; + this.label64.Text = "Willenskraft:"; + // + // numericUpDown43 + // + this.numericUpDown43.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown43.Location = new System.Drawing.Point(226, 40); + this.numericUpDown43.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown43.Name = "numericUpDown43"; + this.numericUpDown43.Size = new System.Drawing.Size(40, 20); + this.numericUpDown43.TabIndex = 37; + this.numericUpDown43.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label65 + // + this.label65.AutoSize = true; + this.label65.Location = new System.Drawing.Point(404, 16); + this.label65.Name = "label65"; + this.label65.Size = new System.Drawing.Size(53, 13); + this.label65.TabIndex = 33; + this.label65.Text = "Charisma:"; + // + // numericUpDown44 + // + this.numericUpDown44.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown44.Location = new System.Drawing.Point(226, 14); + this.numericUpDown44.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown44.Name = "numericUpDown44"; + this.numericUpDown44.Size = new System.Drawing.Size(40, 20); + this.numericUpDown44.TabIndex = 36; + this.numericUpDown44.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label66 + // + this.label66.AutoSize = true; + this.label66.Location = new System.Drawing.Point(404, 42); + this.label66.Name = "label66"; + this.label66.Size = new System.Drawing.Size(80, 13); + this.label66.TabIndex = 34; + this.label66.Text = "Wahrnehmung:"; + // + // numericUpDown45 + // + this.numericUpDown45.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown45.Location = new System.Drawing.Point(94, 40); + this.numericUpDown45.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown45.Name = "numericUpDown45"; + this.numericUpDown45.Size = new System.Drawing.Size(40, 20); + this.numericUpDown45.TabIndex = 35; + this.numericUpDown45.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // groupBox3 + // + this.groupBox3.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox3.Location = new System.Drawing.Point(0, 240); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(588, 100); + this.groupBox3.TabIndex = 14; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Rulegard - Rasse/Klasse"; + // + // groupBox6 + // + this.groupBox6.Controls.Add(this.numericUpDown30); + this.groupBox6.Controls.Add(this.label51); + this.groupBox6.Controls.Add(this.label52); + this.groupBox6.Controls.Add(this.numericUpDown31); + this.groupBox6.Controls.Add(this.label53); + this.groupBox6.Controls.Add(this.numericUpDown32); + this.groupBox6.Controls.Add(this.label54); + this.groupBox6.Controls.Add(this.numericUpDown33); + this.groupBox6.Controls.Add(this.label55); + this.groupBox6.Controls.Add(this.numericUpDown34); + this.groupBox6.Controls.Add(this.label56); + this.groupBox6.Controls.Add(this.numericUpDown35); + this.groupBox6.Controls.Add(this.label57); + this.groupBox6.Controls.Add(this.numericUpDown36); + this.groupBox6.Controls.Add(this.label58); + this.groupBox6.Controls.Add(this.numericUpDown37); + this.groupBox6.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox6.Location = new System.Drawing.Point(0, 170); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.Size = new System.Drawing.Size(588, 70); + this.groupBox6.TabIndex = 13; + this.groupBox6.TabStop = false; + this.groupBox6.Text = "Terra - Attribute"; + // + // numericUpDown30 + // + this.numericUpDown30.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown30.Location = new System.Drawing.Point(94, 14); + this.numericUpDown30.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown30.Name = "numericUpDown30"; + this.numericUpDown30.Size = new System.Drawing.Size(40, 20); + this.numericUpDown30.TabIndex = 42; + this.numericUpDown30.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label51 + // + this.label51.AutoSize = true; + this.label51.Location = new System.Drawing.Point(8, 16); + this.label51.Name = "label51"; + this.label51.Size = new System.Drawing.Size(41, 13); + this.label51.TabIndex = 27; + this.label51.Text = "Strke:"; + // + // label52 + // + this.label52.AutoSize = true; + this.label52.Location = new System.Drawing.Point(8, 42); + this.label52.Name = "label52"; + this.label52.Size = new System.Drawing.Size(67, 13); + this.label52.TabIndex = 28; + this.label52.Text = "Gewandheit:"; + // + // numericUpDown31 + // + this.numericUpDown31.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown31.Location = new System.Drawing.Point(490, 40); + this.numericUpDown31.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown31.Name = "numericUpDown31"; + this.numericUpDown31.Size = new System.Drawing.Size(40, 20); + this.numericUpDown31.TabIndex = 41; + this.numericUpDown31.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label53 + // + this.label53.AutoSize = true; + this.label53.Location = new System.Drawing.Point(140, 16); + this.label53.Name = "label53"; + this.label53.Size = new System.Drawing.Size(70, 13); + this.label53.TabIndex = 29; + this.label53.Text = "Schnelligkeit:"; + // + // numericUpDown32 + // + this.numericUpDown32.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown32.Location = new System.Drawing.Point(490, 14); + this.numericUpDown32.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown32.Name = "numericUpDown32"; + this.numericUpDown32.Size = new System.Drawing.Size(40, 20); + this.numericUpDown32.TabIndex = 40; + this.numericUpDown32.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label54 + // + this.label54.AutoSize = true; + this.label54.Location = new System.Drawing.Point(140, 42); + this.label54.Name = "label54"; + this.label54.Size = new System.Drawing.Size(65, 13); + this.label54.TabIndex = 30; + this.label54.Text = "Konstitution:"; + // + // numericUpDown33 + // + this.numericUpDown33.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown33.Location = new System.Drawing.Point(358, 40); + this.numericUpDown33.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown33.Name = "numericUpDown33"; + this.numericUpDown33.Size = new System.Drawing.Size(40, 20); + this.numericUpDown33.TabIndex = 39; + this.numericUpDown33.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label55 + // + this.label55.AutoSize = true; + this.label55.Location = new System.Drawing.Point(272, 16); + this.label55.Name = "label55"; + this.label55.Size = new System.Drawing.Size(57, 13); + this.label55.TabIndex = 31; + this.label55.Text = "Intelligenz:"; + // + // numericUpDown34 + // + this.numericUpDown34.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown34.Location = new System.Drawing.Point(358, 14); + this.numericUpDown34.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown34.Name = "numericUpDown34"; + this.numericUpDown34.Size = new System.Drawing.Size(40, 20); + this.numericUpDown34.TabIndex = 38; + this.numericUpDown34.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label56 + // + this.label56.AutoSize = true; + this.label56.Location = new System.Drawing.Point(272, 42); + this.label56.Name = "label56"; + this.label56.Size = new System.Drawing.Size(65, 13); + this.label56.TabIndex = 32; + this.label56.Text = "Willenskraft:"; + // + // numericUpDown35 + // + this.numericUpDown35.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown35.Location = new System.Drawing.Point(226, 40); + this.numericUpDown35.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown35.Name = "numericUpDown35"; + this.numericUpDown35.Size = new System.Drawing.Size(40, 20); + this.numericUpDown35.TabIndex = 37; + this.numericUpDown35.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label57 + // + this.label57.AutoSize = true; + this.label57.Location = new System.Drawing.Point(404, 16); + this.label57.Name = "label57"; + this.label57.Size = new System.Drawing.Size(53, 13); + this.label57.TabIndex = 33; + this.label57.Text = "Charisma:"; + // + // numericUpDown36 + // + this.numericUpDown36.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown36.Location = new System.Drawing.Point(226, 14); + this.numericUpDown36.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown36.Name = "numericUpDown36"; + this.numericUpDown36.Size = new System.Drawing.Size(40, 20); + this.numericUpDown36.TabIndex = 36; + this.numericUpDown36.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label58 + // + this.label58.AutoSize = true; + this.label58.Location = new System.Drawing.Point(404, 42); + this.label58.Name = "label58"; + this.label58.Size = new System.Drawing.Size(80, 13); + this.label58.TabIndex = 34; + this.label58.Text = "Wahrnehmung:"; + // + // numericUpDown37 + // + this.numericUpDown37.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown37.Location = new System.Drawing.Point(94, 40); + this.numericUpDown37.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown37.Name = "numericUpDown37"; + this.numericUpDown37.Size = new System.Drawing.Size(40, 20); + this.numericUpDown37.TabIndex = 35; + this.numericUpDown37.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // groupBox2 + // + this.groupBox2.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox2.Location = new System.Drawing.Point(0, 70); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(588, 100); + this.groupBox2.TabIndex = 9; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Terra - Talent"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.numericUpDown14); + this.groupBox1.Controls.Add(this.label35); + this.groupBox1.Controls.Add(this.label36); + this.groupBox1.Controls.Add(this.numericUpDown15); + this.groupBox1.Controls.Add(this.label37); + this.groupBox1.Controls.Add(this.numericUpDown16); + this.groupBox1.Controls.Add(this.label38); + this.groupBox1.Controls.Add(this.numericUpDown17); + this.groupBox1.Controls.Add(this.label39); + this.groupBox1.Controls.Add(this.numericUpDown18); + this.groupBox1.Controls.Add(this.label40); + this.groupBox1.Controls.Add(this.numericUpDown19); + this.groupBox1.Controls.Add(this.label41); + this.groupBox1.Controls.Add(this.numericUpDown20); + this.groupBox1.Controls.Add(this.label42); + this.groupBox1.Controls.Add(this.numericUpDown21); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox1.Location = new System.Drawing.Point(0, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(588, 70); + this.groupBox1.TabIndex = 8; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Auf Grundattribute"; + // + // numericUpDown14 + // + this.numericUpDown14.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown14.Location = new System.Drawing.Point(94, 14); + this.numericUpDown14.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown14.Name = "numericUpDown14"; + this.numericUpDown14.Size = new System.Drawing.Size(40, 20); + this.numericUpDown14.TabIndex = 42; + this.numericUpDown14.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label35 + // + this.label35.AutoSize = true; + this.label35.Location = new System.Drawing.Point(8, 16); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(41, 13); + this.label35.TabIndex = 27; + this.label35.Text = "Strke:"; + // + // label36 + // + this.label36.AutoSize = true; + this.label36.Location = new System.Drawing.Point(8, 42); + this.label36.Name = "label36"; + this.label36.Size = new System.Drawing.Size(67, 13); + this.label36.TabIndex = 28; + this.label36.Text = "Gewandheit:"; + // + // numericUpDown15 + // + this.numericUpDown15.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown15.Location = new System.Drawing.Point(490, 40); + this.numericUpDown15.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown15.Name = "numericUpDown15"; + this.numericUpDown15.Size = new System.Drawing.Size(40, 20); + this.numericUpDown15.TabIndex = 41; + this.numericUpDown15.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label37 + // + this.label37.AutoSize = true; + this.label37.Location = new System.Drawing.Point(140, 16); + this.label37.Name = "label37"; + this.label37.Size = new System.Drawing.Size(70, 13); + this.label37.TabIndex = 29; + this.label37.Text = "Schnelligkeit:"; + // + // numericUpDown16 + // + this.numericUpDown16.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown16.Location = new System.Drawing.Point(490, 14); + this.numericUpDown16.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown16.Name = "numericUpDown16"; + this.numericUpDown16.Size = new System.Drawing.Size(40, 20); + this.numericUpDown16.TabIndex = 40; + this.numericUpDown16.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label38 + // + this.label38.AutoSize = true; + this.label38.Location = new System.Drawing.Point(140, 42); + this.label38.Name = "label38"; + this.label38.Size = new System.Drawing.Size(65, 13); + this.label38.TabIndex = 30; + this.label38.Text = "Konstitution:"; + // + // numericUpDown17 + // + this.numericUpDown17.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown17.Location = new System.Drawing.Point(358, 40); + this.numericUpDown17.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown17.Name = "numericUpDown17"; + this.numericUpDown17.Size = new System.Drawing.Size(40, 20); + this.numericUpDown17.TabIndex = 39; + this.numericUpDown17.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label39 + // + this.label39.AutoSize = true; + this.label39.Location = new System.Drawing.Point(272, 16); + this.label39.Name = "label39"; + this.label39.Size = new System.Drawing.Size(57, 13); + this.label39.TabIndex = 31; + this.label39.Text = "Intelligenz:"; + // + // numericUpDown18 + // + this.numericUpDown18.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown18.Location = new System.Drawing.Point(358, 14); + this.numericUpDown18.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown18.Name = "numericUpDown18"; + this.numericUpDown18.Size = new System.Drawing.Size(40, 20); + this.numericUpDown18.TabIndex = 38; + this.numericUpDown18.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label40 + // + this.label40.AutoSize = true; + this.label40.Location = new System.Drawing.Point(272, 42); + this.label40.Name = "label40"; + this.label40.Size = new System.Drawing.Size(65, 13); + this.label40.TabIndex = 32; + this.label40.Text = "Willenskraft:"; + // + // numericUpDown19 + // + this.numericUpDown19.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown19.Location = new System.Drawing.Point(226, 40); + this.numericUpDown19.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown19.Name = "numericUpDown19"; + this.numericUpDown19.Size = new System.Drawing.Size(40, 20); + this.numericUpDown19.TabIndex = 37; + this.numericUpDown19.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label41 + // + this.label41.AutoSize = true; + this.label41.Location = new System.Drawing.Point(404, 16); + this.label41.Name = "label41"; + this.label41.Size = new System.Drawing.Size(53, 13); + this.label41.TabIndex = 33; + this.label41.Text = "Charisma:"; + // + // numericUpDown20 + // + this.numericUpDown20.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown20.Location = new System.Drawing.Point(226, 14); + this.numericUpDown20.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown20.Name = "numericUpDown20"; + this.numericUpDown20.Size = new System.Drawing.Size(40, 20); + this.numericUpDown20.TabIndex = 36; + this.numericUpDown20.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label42 + // + this.label42.AutoSize = true; + this.label42.Location = new System.Drawing.Point(404, 42); + this.label42.Name = "label42"; + this.label42.Size = new System.Drawing.Size(80, 13); + this.label42.TabIndex = 34; + this.label42.Text = "Wahrnehmung:"; + // + // numericUpDown21 + // + this.numericUpDown21.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown21.Location = new System.Drawing.Point(94, 40); + this.numericUpDown21.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.numericUpDown21.Name = "numericUpDown21"; + this.numericUpDown21.Size = new System.Drawing.Size(40, 20); + this.numericUpDown21.TabIndex = 35; + this.numericUpDown21.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label24 + // + this.label24.Dock = System.Windows.Forms.DockStyle.Top; + this.label24.Location = new System.Drawing.Point(0, 0); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(604, 24); + this.label24.TabIndex = 7; + this.label24.Text = "Verbleibende Punkte: X"; + this.label24.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // tabPage5 + // + this.tabPage5.Controls.Add(this.panel5); + this.tabPage5.Controls.Add(this.panel3); + this.tabPage5.Controls.Add(this.label23); + this.tabPage5.Location = new System.Drawing.Point(4, 25); + this.tabPage5.Name = "tabPage5"; + this.tabPage5.Size = new System.Drawing.Size(604, 405); + this.tabPage5.TabIndex = 4; + this.tabPage5.Text = "Fertigkeiten"; + this.tabPage5.UseVisualStyleBackColor = true; + // + // panel5 + // + this.panel5.AutoScroll = true; + this.panel5.Controls.Add(this.numericUpDown10); + this.panel5.Controls.Add(this.comboBox5); + this.panel5.Controls.Add(this.comboBox4); + this.panel5.Controls.Add(this.cbFertigkeiten); + this.panel5.Controls.Add(this.checkBox2); + this.panel5.Controls.Add(this.label21); + this.panel5.Controls.Add(this.checkBox1); + this.panel5.Controls.Add(this.label20); + this.panel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel5.Location = new System.Drawing.Point(171, 24); + this.panel5.Name = "panel5"; + this.panel5.Size = new System.Drawing.Size(433, 381); + this.panel5.TabIndex = 8; + // + // numericUpDown10 + // + this.numericUpDown10.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.numericUpDown10.Location = new System.Drawing.Point(130, 61); + this.numericUpDown10.Maximum = new decimal(new int[] { + 99, + 0, + 0, + 0}); + this.numericUpDown10.Name = "numericUpDown10"; + this.numericUpDown10.Size = new System.Drawing.Size(40, 20); + this.numericUpDown10.TabIndex = 10; + this.numericUpDown10.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // comboBox5 + // + this.comboBox5.FormattingEnabled = true; + this.comboBox5.Location = new System.Drawing.Point(130, 34); + this.comboBox5.Name = "comboBox5"; + this.comboBox5.Size = new System.Drawing.Size(121, 21); + this.comboBox5.TabIndex = 9; + // + // comboBox4 + // + this.comboBox4.FormattingEnabled = true; + this.comboBox4.Location = new System.Drawing.Point(130, 87); + this.comboBox4.Name = "comboBox4"; + this.comboBox4.Size = new System.Drawing.Size(121, 21); + this.comboBox4.TabIndex = 8; + // + // cbFertigkeiten + // + this.cbFertigkeiten.FormattingEnabled = true; + this.cbFertigkeiten.Location = new System.Drawing.Point(130, 7); + this.cbFertigkeiten.Name = "cbFertigkeiten"; + this.cbFertigkeiten.Size = new System.Drawing.Size(121, 21); + this.cbFertigkeiten.TabIndex = 5; + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.checkBox2.Location = new System.Drawing.Point(9, 88); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(107, 17); + this.checkBox2.TabIndex = 3; + this.checkBox2.Text = "Gruppenfertigkeit:"; + this.checkBox2.UseVisualStyleBackColor = true; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.Location = new System.Drawing.Point(6, 62); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(35, 13); + this.label21.TabIndex = 2; + this.label21.Text = "Stufe:"; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.checkBox1.Location = new System.Drawing.Point(9, 35); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(115, 17); + this.checkBox1.TabIndex = 1; + this.checkBox1.Text = "Ausprgung lernen:"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(6, 9); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(53, 13); + this.label20.TabIndex = 0; + this.label20.Text = "Fertigkeit:"; + // + // panel3 + // + this.panel3.Controls.Add(this.listBox2); + this.panel3.Controls.Add(this.panel6); + this.panel3.Dock = System.Windows.Forms.DockStyle.Left; + this.panel3.Location = new System.Drawing.Point(0, 24); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(171, 381); + this.panel3.TabIndex = 7; + // + // listBox2 + // + this.listBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBox2.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBox2.FormattingEnabled = true; + this.listBox2.Location = new System.Drawing.Point(0, 0); + this.listBox2.Name = "listBox2"; + this.listBox2.Size = new System.Drawing.Size(171, 340); + this.listBox2.TabIndex = 2; + // + // panel6 + // + this.panel6.Controls.Add(this.button3); + this.panel6.Controls.Add(this.button4); + this.panel6.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel6.Location = new System.Drawing.Point(0, 350); + this.panel6.Name = "panel6"; + this.panel6.Size = new System.Drawing.Size(171, 31); + this.panel6.TabIndex = 1; + // + // button3 + // + this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button3.Location = new System.Drawing.Point(89, 5); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 1; + this.button3.Text = "Lschen"; + this.button3.UseVisualStyleBackColor = true; + // + // button4 + // + this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button4.Location = new System.Drawing.Point(8, 5); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 23); + this.button4.TabIndex = 0; + this.button4.Text = "Neu"; + this.button4.UseVisualStyleBackColor = true; + // + // label23 + // + this.label23.Dock = System.Windows.Forms.DockStyle.Top; + this.label23.Location = new System.Drawing.Point(0, 0); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(604, 24); + this.label23.TabIndex = 6; + this.label23.Text = "Verbleibende Punkte: 66"; + this.label23.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // tabPage6 + // + this.tabPage6.Location = new System.Drawing.Point(4, 25); + this.tabPage6.Name = "tabPage6"; + this.tabPage6.Size = new System.Drawing.Size(604, 405); + this.tabPage6.TabIndex = 5; + this.tabPage6.Text = "Ausrstung"; + this.tabPage6.UseVisualStyleBackColor = true; + // + // listBox1 + // + this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBox1.FormattingEnabled = true; + this.listBox1.Location = new System.Drawing.Point(0, 0); + this.listBox1.Name = "listBox1"; + this.listBox1.Size = new System.Drawing.Size(171, 342); + this.listBox1.TabIndex = 2; + // + // panel4 + // + this.panel4.Controls.Add(this.button2); + this.panel4.Controls.Add(this.button1); + this.panel4.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel4.Location = new System.Drawing.Point(0, 346); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(171, 31); + this.panel4.TabIndex = 1; + // + // button2 + // + this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button2.Location = new System.Drawing.Point(89, 5); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 1; + this.button2.Text = "Lschen"; + this.button2.UseVisualStyleBackColor = true; + // + // button1 + // + this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button1.Location = new System.Drawing.Point(8, 5); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 0; + this.button1.Text = "Neu"; + this.button1.UseVisualStyleBackColor = true; + // + // label7 + // + this.label7.Location = new System.Drawing.Point(258, 51); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(40, 16); + this.label7.TabIndex = 30; + this.label7.Text = "8"; + this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label67 + // + this.label67.Location = new System.Drawing.Point(212, 51); + this.label67.Name = "label67"; + this.label67.Size = new System.Drawing.Size(40, 16); + this.label67.TabIndex = 29; + this.label67.Text = "8"; + this.label67.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label68 + // + this.label68.Location = new System.Drawing.Point(166, 51); + this.label68.Name = "label68"; + this.label68.Size = new System.Drawing.Size(40, 16); + this.label68.TabIndex = 28; + this.label68.Text = "8"; + this.label68.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label69 + // + this.label69.Location = new System.Drawing.Point(140, 51); + this.label69.Name = "label69"; + this.label69.Size = new System.Drawing.Size(20, 16); + this.label69.TabIndex = 27; + this.label69.Text = "8"; + this.label69.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label70 + // + this.label70.Location = new System.Drawing.Point(258, 77); + this.label70.Name = "label70"; + this.label70.Size = new System.Drawing.Size(40, 16); + this.label70.TabIndex = 34; + this.label70.Text = "8"; + this.label70.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label71 + // + this.label71.Location = new System.Drawing.Point(212, 77); + this.label71.Name = "label71"; + this.label71.Size = new System.Drawing.Size(40, 16); + this.label71.TabIndex = 33; + this.label71.Text = "8"; + this.label71.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label72 + // + this.label72.Location = new System.Drawing.Point(166, 77); + this.label72.Name = "label72"; + this.label72.Size = new System.Drawing.Size(40, 16); + this.label72.TabIndex = 32; + this.label72.Text = "8"; + this.label72.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label73 + // + this.label73.Location = new System.Drawing.Point(140, 77); + this.label73.Name = "label73"; + this.label73.Size = new System.Drawing.Size(20, 16); + this.label73.TabIndex = 31; + this.label73.Text = "8"; + this.label73.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label74 + // + this.label74.Location = new System.Drawing.Point(258, 103); + this.label74.Name = "label74"; + this.label74.Size = new System.Drawing.Size(40, 16); + this.label74.TabIndex = 38; + this.label74.Text = "8"; + this.label74.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label75 + // + this.label75.Location = new System.Drawing.Point(212, 103); + this.label75.Name = "label75"; + this.label75.Size = new System.Drawing.Size(40, 16); + this.label75.TabIndex = 37; + this.label75.Text = "8"; + this.label75.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label76 + // + this.label76.Location = new System.Drawing.Point(166, 103); + this.label76.Name = "label76"; + this.label76.Size = new System.Drawing.Size(40, 16); + this.label76.TabIndex = 36; + this.label76.Text = "8"; + this.label76.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label77 + // + this.label77.Location = new System.Drawing.Point(140, 103); + this.label77.Name = "label77"; + this.label77.Size = new System.Drawing.Size(20, 16); + this.label77.TabIndex = 35; + this.label77.Text = "8"; + this.label77.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label78 + // + this.label78.Location = new System.Drawing.Point(258, 129); + this.label78.Name = "label78"; + this.label78.Size = new System.Drawing.Size(40, 16); + this.label78.TabIndex = 42; + this.label78.Text = "8"; + this.label78.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label79 + // + this.label79.Location = new System.Drawing.Point(212, 129); + this.label79.Name = "label79"; + this.label79.Size = new System.Drawing.Size(40, 16); + this.label79.TabIndex = 41; + this.label79.Text = "8"; + this.label79.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label80 + // + this.label80.Location = new System.Drawing.Point(166, 129); + this.label80.Name = "label80"; + this.label80.Size = new System.Drawing.Size(40, 16); + this.label80.TabIndex = 40; + this.label80.Text = "8"; + this.label80.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label81 + // + this.label81.Location = new System.Drawing.Point(140, 129); + this.label81.Name = "label81"; + this.label81.Size = new System.Drawing.Size(20, 16); + this.label81.TabIndex = 39; + this.label81.Text = "8"; + this.label81.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label82 + // + this.label82.Location = new System.Drawing.Point(258, 155); + this.label82.Name = "label82"; + this.label82.Size = new System.Drawing.Size(40, 16); + this.label82.TabIndex = 46; + this.label82.Text = "8"; + this.label82.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label83 + // + this.label83.Location = new System.Drawing.Point(212, 155); + this.label83.Name = "label83"; + this.label83.Size = new System.Drawing.Size(40, 16); + this.label83.TabIndex = 45; + this.label83.Text = "8"; + this.label83.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label84 + // + this.label84.Location = new System.Drawing.Point(166, 155); + this.label84.Name = "label84"; + this.label84.Size = new System.Drawing.Size(40, 16); + this.label84.TabIndex = 44; + this.label84.Text = "8"; + this.label84.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label85 + // + this.label85.Location = new System.Drawing.Point(140, 155); + this.label85.Name = "label85"; + this.label85.Size = new System.Drawing.Size(20, 16); + this.label85.TabIndex = 43; + this.label85.Text = "8"; + this.label85.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label86 + // + this.label86.Location = new System.Drawing.Point(258, 181); + this.label86.Name = "label86"; + this.label86.Size = new System.Drawing.Size(40, 16); + this.label86.TabIndex = 50; + this.label86.Text = "8"; + this.label86.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label87 + // + this.label87.Location = new System.Drawing.Point(212, 181); + this.label87.Name = "label87"; + this.label87.Size = new System.Drawing.Size(40, 16); + this.label87.TabIndex = 49; + this.label87.Text = "8"; + this.label87.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label88 + // + this.label88.Location = new System.Drawing.Point(166, 181); + this.label88.Name = "label88"; + this.label88.Size = new System.Drawing.Size(40, 16); + this.label88.TabIndex = 48; + this.label88.Text = "8"; + this.label88.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label89 + // + this.label89.Location = new System.Drawing.Point(140, 181); + this.label89.Name = "label89"; + this.label89.Size = new System.Drawing.Size(20, 16); + this.label89.TabIndex = 47; + this.label89.Text = "8"; + this.label89.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label90 + // + this.label90.Location = new System.Drawing.Point(258, 207); + this.label90.Name = "label90"; + this.label90.Size = new System.Drawing.Size(40, 16); + this.label90.TabIndex = 54; + this.label90.Text = "8"; + this.label90.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label91 + // + this.label91.Location = new System.Drawing.Point(212, 207); + this.label91.Name = "label91"; + this.label91.Size = new System.Drawing.Size(40, 16); + this.label91.TabIndex = 53; + this.label91.Text = "8"; + this.label91.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label92 + // + this.label92.Location = new System.Drawing.Point(166, 207); + this.label92.Name = "label92"; + this.label92.Size = new System.Drawing.Size(40, 16); + this.label92.TabIndex = 52; + this.label92.Text = "8"; + this.label92.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label93 + // + this.label93.Location = new System.Drawing.Point(140, 207); + this.label93.Name = "label93"; + this.label93.Size = new System.Drawing.Size(20, 16); + this.label93.TabIndex = 51; + this.label93.Text = "8"; + this.label93.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // panel8 + // + this.panel8.AutoScroll = true; + this.panel8.Controls.Add(this.nUDSans); + this.panel8.Controls.Add(this.nUDSuni); + this.panel8.Controls.Add(this.nUDSihir); + this.panel8.Controls.Add(this.label8); + this.panel8.Controls.Add(this.label9); + this.panel8.Controls.Add(this.label10); + this.panel8.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel8.Location = new System.Drawing.Point(0, 24); + this.panel8.Name = "panel8"; + this.panel8.Size = new System.Drawing.Size(604, 381); + this.panel8.TabIndex = 10; + // + // nUDSans + // + this.nUDSans.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nUDSans.Location = new System.Drawing.Point(45, 60); + this.nUDSans.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.nUDSans.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nUDSans.Name = "nUDSans"; + this.nUDSans.Size = new System.Drawing.Size(40, 20); + this.nUDSans.TabIndex = 12; + this.nUDSans.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.nUDSans.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // nUDSuni + // + this.nUDSuni.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nUDSuni.Location = new System.Drawing.Point(45, 34); + this.nUDSuni.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.nUDSuni.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nUDSuni.Name = "nUDSuni"; + this.nUDSuni.Size = new System.Drawing.Size(40, 20); + this.nUDSuni.TabIndex = 11; + this.nUDSuni.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.nUDSuni.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // nUDSihir + // + this.nUDSihir.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nUDSihir.Location = new System.Drawing.Point(45, 8); + this.nUDSihir.Maximum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.nUDSihir.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nUDSihir.Name = "nUDSihir"; + this.nUDSihir.Size = new System.Drawing.Size(40, 20); + this.nUDSihir.TabIndex = 10; + this.nUDSihir.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.nUDSihir.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(5, 10); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(30, 13); + this.label8.TabIndex = 1; + this.label8.Text = "Sihir:"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(5, 36); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(31, 13); + this.label9.TabIndex = 2; + this.label9.Text = "Suni:"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(5, 62); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(34, 13); + this.label10.TabIndex = 3; + this.label10.Text = "Sans:"; + // + // lVerbleibendeNebelpunkte + // + this.lVerbleibendeNebelpunkte.Dock = System.Windows.Forms.DockStyle.Top; + this.lVerbleibendeNebelpunkte.Location = new System.Drawing.Point(0, 0); + this.lVerbleibendeNebelpunkte.Name = "lVerbleibendeNebelpunkte"; + this.lVerbleibendeNebelpunkte.Size = new System.Drawing.Size(604, 24); + this.lVerbleibendeNebelpunkte.TabIndex = 9; + this.lVerbleibendeNebelpunkte.Text = "Verbleibende Punkte: 7"; + this.lVerbleibendeNebelpunkte.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Control; + this.ClientSize = new System.Drawing.Size(612, 459); + this.Controls.Add(this.tabControl1); + this.Controls.Add(this.toolStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Main"; + this.Text = "TRI - Character Sheets"; + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); + this.tabPage2.ResumeLayout(false); + this.tabPage3.ResumeLayout(false); + this.panel7.ResumeLayout(false); + this.panel7.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown9)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown8)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown7)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown6)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown5)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).EndInit(); + this.tabPage4.ResumeLayout(false); + this.panel9.ResumeLayout(false); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown22)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown23)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown24)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown25)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown26)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown27)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown28)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown29)).EndInit(); + this.groupBox7.ResumeLayout(false); + this.groupBox7.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown38)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown39)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown40)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown41)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown42)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown43)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown44)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown45)).EndInit(); + this.groupBox6.ResumeLayout(false); + this.groupBox6.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown30)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown31)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown32)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown33)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown34)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown35)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown36)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown37)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown14)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown15)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown16)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown17)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown18)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown19)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown20)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown21)).EndInit(); + this.tabPage5.ResumeLayout(false); + this.panel5.ResumeLayout(false); + this.panel5.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown10)).EndInit(); + this.panel3.ResumeLayout(false); + this.panel6.ResumeLayout(false); + this.panel4.ResumeLayout(false); + this.panel8.ResumeLayout(false); + this.panel8.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nUDSans)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nUDSuni)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nUDSihir)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.NumericUpDown numericUpDown1; + private System.Windows.Forms.ComboBox comboBox2; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.TabPage tabPage5; + private System.Windows.Forms.TabPage tabPage6; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.NumericUpDown numericUpDown9; + private System.Windows.Forms.NumericUpDown numericUpDown8; + private System.Windows.Forms.NumericUpDown numericUpDown7; + private System.Windows.Forms.NumericUpDown numericUpDown6; + private System.Windows.Forms.NumericUpDown numericUpDown5; + private System.Windows.Forms.NumericUpDown numericUpDown4; + private System.Windows.Forms.NumericUpDown numericUpDown3; + private System.Windows.Forms.ListBox listBox1; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Panel panel5; + private System.Windows.Forms.ComboBox comboBox5; + private System.Windows.Forms.ComboBox comboBox4; + private System.Windows.Forms.ComboBox cbFertigkeiten; + private System.Windows.Forms.CheckBox checkBox2; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.ListBox listBox2; + private System.Windows.Forms.Panel panel6; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Panel panel7; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.NumericUpDown numericUpDown10; + private System.Windows.Forms.TextBox textBox6; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.TextBox textBox5; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.Label label34; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.Label label33; + private System.Windows.Forms.Panel panel9; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.NumericUpDown numericUpDown2; + private System.Windows.Forms.NumericUpDown numericUpDown14; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.Label label36; + private System.Windows.Forms.NumericUpDown numericUpDown15; + private System.Windows.Forms.Label label37; + private System.Windows.Forms.NumericUpDown numericUpDown16; + private System.Windows.Forms.Label label38; + private System.Windows.Forms.NumericUpDown numericUpDown17; + private System.Windows.Forms.Label label39; + private System.Windows.Forms.NumericUpDown numericUpDown18; + private System.Windows.Forms.Label label40; + private System.Windows.Forms.NumericUpDown numericUpDown19; + private System.Windows.Forms.Label label41; + private System.Windows.Forms.NumericUpDown numericUpDown20; + private System.Windows.Forms.Label label42; + private System.Windows.Forms.NumericUpDown numericUpDown21; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.NumericUpDown numericUpDown22; + private System.Windows.Forms.Label label43; + private System.Windows.Forms.Label label44; + private System.Windows.Forms.NumericUpDown numericUpDown23; + private System.Windows.Forms.Label label45; + private System.Windows.Forms.NumericUpDown numericUpDown24; + private System.Windows.Forms.Label label46; + private System.Windows.Forms.NumericUpDown numericUpDown25; + private System.Windows.Forms.Label label47; + private System.Windows.Forms.NumericUpDown numericUpDown26; + private System.Windows.Forms.Label label48; + private System.Windows.Forms.NumericUpDown numericUpDown27; + private System.Windows.Forms.Label label49; + private System.Windows.Forms.NumericUpDown numericUpDown28; + private System.Windows.Forms.Label label50; + private System.Windows.Forms.NumericUpDown numericUpDown29; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.GroupBox groupBox7; + private System.Windows.Forms.NumericUpDown numericUpDown38; + private System.Windows.Forms.Label label59; + private System.Windows.Forms.Label label60; + private System.Windows.Forms.NumericUpDown numericUpDown39; + private System.Windows.Forms.Label label61; + private System.Windows.Forms.NumericUpDown numericUpDown40; + private System.Windows.Forms.Label label62; + private System.Windows.Forms.NumericUpDown numericUpDown41; + private System.Windows.Forms.Label label63; + private System.Windows.Forms.NumericUpDown numericUpDown42; + private System.Windows.Forms.Label label64; + private System.Windows.Forms.NumericUpDown numericUpDown43; + private System.Windows.Forms.Label label65; + private System.Windows.Forms.NumericUpDown numericUpDown44; + private System.Windows.Forms.Label label66; + private System.Windows.Forms.NumericUpDown numericUpDown45; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.GroupBox groupBox6; + private System.Windows.Forms.NumericUpDown numericUpDown30; + private System.Windows.Forms.Label label51; + private System.Windows.Forms.Label label52; + private System.Windows.Forms.NumericUpDown numericUpDown31; + private System.Windows.Forms.Label label53; + private System.Windows.Forms.NumericUpDown numericUpDown32; + private System.Windows.Forms.Label label54; + private System.Windows.Forms.NumericUpDown numericUpDown33; + private System.Windows.Forms.Label label55; + private System.Windows.Forms.NumericUpDown numericUpDown34; + private System.Windows.Forms.Label label56; + private System.Windows.Forms.NumericUpDown numericUpDown35; + private System.Windows.Forms.Label label57; + private System.Windows.Forms.NumericUpDown numericUpDown36; + private System.Windows.Forms.Label label58; + private System.Windows.Forms.NumericUpDown numericUpDown37; + private System.Windows.Forms.Label label90; + private System.Windows.Forms.Label label91; + private System.Windows.Forms.Label label92; + private System.Windows.Forms.Label label93; + private System.Windows.Forms.Label label86; + private System.Windows.Forms.Label label87; + private System.Windows.Forms.Label label88; + private System.Windows.Forms.Label label89; + private System.Windows.Forms.Label label82; + private System.Windows.Forms.Label label83; + private System.Windows.Forms.Label label84; + private System.Windows.Forms.Label label85; + private System.Windows.Forms.Label label78; + private System.Windows.Forms.Label label79; + private System.Windows.Forms.Label label80; + private System.Windows.Forms.Label label81; + private System.Windows.Forms.Label label74; + private System.Windows.Forms.Label label75; + private System.Windows.Forms.Label label76; + private System.Windows.Forms.Label label77; + private System.Windows.Forms.Label label70; + private System.Windows.Forms.Label label71; + private System.Windows.Forms.Label label72; + private System.Windows.Forms.Label label73; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label67; + private System.Windows.Forms.Label label68; + private System.Windows.Forms.Label label69; + private System.Windows.Forms.Panel panel8; + private System.Windows.Forms.NumericUpDown nUDSans; + private System.Windows.Forms.NumericUpDown nUDSuni; + private System.Windows.Forms.NumericUpDown nUDSihir; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label lVerbleibendeNebelpunkte; + } +} + diff --git a/TRI - Character Sheets/TRI - Character Sheets/Main.cs b/TRI - Character Sheets/TRI - Character Sheets/Main.cs new file mode 100644 index 0000000..f5b1252 --- /dev/null +++ b/TRI - Character Sheets/TRI - Character Sheets/Main.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Xml; + +namespace TRI___Character_Sheets +{ + public partial class Main : Form + { + public Main() + { + InitializeComponent(); + + FertigkeitenbaumLaden(); + } + + private void FertigkeitenbaumLaden() + { + XmlTextReader reader = new XmlTextReader("Fertigkeiten.xml"); + reader.ReadStartElement(); + cbFertigkeiten.Items.Add(reader.ReadElementString("Gruppen")); + } + } +} \ No newline at end of file diff --git a/TRI - Character Sheets/TRI - Character Sheets/Main.resx b/TRI - Character Sheets/TRI - Character Sheets/Main.resx new file mode 100644 index 0000000..f79bb02 --- /dev/null +++ b/TRI - Character Sheets/TRI - Character Sheets/Main.resx @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAP8AAAAAAP8AAP8AAAAAAAAAAP8AAP8AAAAAAP8AAP8AAAAAAAAAAAAAAAAAAP8AAP8AAAAAAP8A + AP8AAAAAAAAAAP8AAP8AAAAAAP8AAP8AAAAAAAAAAAAAAAAAAP8AAP8AAAAAAP8AAP8AAAAAAAAAAP8A + AP8AAAAAAP8AAP8AAAAAAAAAAAAAAAAAAP8AAP8AAAAAAP8AAP8AAAAAAP8AAP8AAP8AAAAAAP8AAP8A + AAAAAAAAAAAAAAAAAP8AAP8AAAAAAP8AAP8AAAAAAP8AAP8AAAAAAAAAAP8AAP8AAAAAAAAAAAAAAAAA + AP8AAP8AAAAAAP8AAP8AAP8AAP8AAP8AAAAAAAAAAP8AAP8AAAAAAAAAAAAAAAAAAP8AAP8AAAAAAP8A + AP8AAAAAAAAAAP8AAP8AAAAAAP8AAP8AAAAAAAAAAAAAAAAAAP8AAP8AAAAAAP8AAP8AAAAAAAAAAP8A + AP8AAAAAAP8AAP8AAAAAAAAAAAAAAAAAAP8AAP8AAAAAAP8AAP8AAAAAAAAAAP8AAP8AAAAAAP8AAP8A + AAAAAAAAAAAAAAAAAP8AAP8AAAAAAP8AAP8AAP8AAP8AAP8AAP8AAAAAAP8AAP8AAAAAAAAAAAAAAAAA + AP8AAP8AAAAAAP8AAP8AAP8AAP8AAP8AAAAAAAAAAP8AAP8AAAAAAAAAAAAAAAAAAP8AAP8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8A + AP8AAAAAAP8AAP8AAAAAAAAAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAAAAAP8AAP8A + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + + \ No newline at end of file diff --git a/TRI - Character Sheets/TRI - Character Sheets/MainControls.cs b/TRI - Character Sheets/TRI - Character Sheets/MainControls.cs new file mode 100644 index 0000000..0f29377 --- /dev/null +++ b/TRI - Character Sheets/TRI - Character Sheets/MainControls.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace TRI___Character_Sheets +{ + partial class Main + { + private void BerechneVerbleibendeNebelpunkte(object sender, EventArgs e) + { + int iVerbleibendePunkte = 10 - (int)nUDSuni.Value - (int)nUDSihir.Value - (int)nUDSans.Value; + lVerbleibendeNebelpunkte.ForeColor = (iVerbleibendePunkte < 0) ? Color.Red : Color.Black; + lVerbleibendeNebelpunkte.Text = "Verbleibende Punkte: " + iVerbleibendePunkte.ToString(); + } + } +} \ No newline at end of file diff --git a/TRI - Character Sheets/TRI - Character Sheets/Program.cs b/TRI - Character Sheets/TRI - Character Sheets/Program.cs new file mode 100644 index 0000000..e011d0a --- /dev/null +++ b/TRI - Character Sheets/TRI - Character Sheets/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace TRI___Character_Sheets +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Main()); + } + } +} \ No newline at end of file diff --git a/TRI - Character Sheets/TRI - Character Sheets/Properties/AssemblyInfo.cs b/TRI - Character Sheets/TRI - Character Sheets/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..88cc222 --- /dev/null +++ b/TRI - Character Sheets/TRI - Character Sheets/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TRI - Character Sheets")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TRI - Character Sheets")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("fe1a96a2-af4f-4ff4-b78c-93fa7409cb9e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/TRI - Character Sheets/TRI - Character Sheets/Properties/Resources.Designer.cs b/TRI - Character Sheets/TRI - Character Sheets/Properties/Resources.Designer.cs new file mode 100644 index 0000000..48437f4 --- /dev/null +++ b/TRI - Character Sheets/TRI - Character Sheets/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace TRI___Character_Sheets.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TRI___Character_Sheets.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/TRI - Character Sheets/TRI - Character Sheets/Properties/Resources.resx b/TRI - Character Sheets/TRI - Character Sheets/Properties/Resources.resx new file mode 100644 index 0000000..5ea0895 --- /dev/null +++ b/TRI - Character Sheets/TRI - Character Sheets/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TRI - Character Sheets/TRI - Character Sheets/Properties/Settings.Designer.cs b/TRI - Character Sheets/TRI - Character Sheets/Properties/Settings.Designer.cs new file mode 100644 index 0000000..a294a49 --- /dev/null +++ b/TRI - Character Sheets/TRI - Character Sheets/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace TRI___Character_Sheets.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/TRI - Character Sheets/TRI - Character Sheets/Properties/Settings.settings b/TRI - Character Sheets/TRI - Character Sheets/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/TRI - Character Sheets/TRI - Character Sheets/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/TRI - Character Sheets/TRI - Character Sheets/TRI - Character Sheets.csproj b/TRI - Character Sheets/TRI - Character Sheets/TRI - Character Sheets.csproj new file mode 100644 index 0000000..31dcb97 --- /dev/null +++ b/TRI - Character Sheets/TRI - Character Sheets/TRI - Character Sheets.csproj @@ -0,0 +1,87 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {DD05693B-5E0C-46AE-B789-C4F1039FF1CD} + WinExe + Properties + TRI___Character_Sheets + TRI - Character Sheets + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form + + + Main.cs + + + + + Designer + Main.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + Always + + + + + \ No newline at end of file diff --git a/TempMonitor/Icon/_50.bmp b/TempMonitor/Icon/_50.bmp new file mode 100644 index 0000000..51634b2 Binary files /dev/null and b/TempMonitor/Icon/_50.bmp differ diff --git a/TempMonitor/Icon/_50.ico b/TempMonitor/Icon/_50.ico new file mode 100644 index 0000000..08bcf1b Binary files /dev/null and b/TempMonitor/Icon/_50.ico differ diff --git a/TempMonitor/Icon/_51.bmp b/TempMonitor/Icon/_51.bmp new file mode 100644 index 0000000..6c3edf3 Binary files /dev/null and b/TempMonitor/Icon/_51.bmp differ diff --git a/TempMonitor/Icon/_51.ico b/TempMonitor/Icon/_51.ico new file mode 100644 index 0000000..a6abe83 Binary files /dev/null and b/TempMonitor/Icon/_51.ico differ diff --git a/TempMonitor/Icon/_52.bmp b/TempMonitor/Icon/_52.bmp new file mode 100644 index 0000000..39acfc4 Binary files /dev/null and b/TempMonitor/Icon/_52.bmp differ diff --git a/TempMonitor/Icon/_52.ico b/TempMonitor/Icon/_52.ico new file mode 100644 index 0000000..71e9457 Binary files /dev/null and b/TempMonitor/Icon/_52.ico differ diff --git a/TempMonitor/Icon/_53.bmp b/TempMonitor/Icon/_53.bmp new file mode 100644 index 0000000..39a9d9f Binary files /dev/null and b/TempMonitor/Icon/_53.bmp differ diff --git a/TempMonitor/Icon/_53.ico b/TempMonitor/Icon/_53.ico new file mode 100644 index 0000000..f6f8e3c Binary files /dev/null and b/TempMonitor/Icon/_53.ico differ diff --git a/TempMonitor/Icon/_54.bmp b/TempMonitor/Icon/_54.bmp new file mode 100644 index 0000000..6b1a639 Binary files /dev/null and b/TempMonitor/Icon/_54.bmp differ diff --git a/TempMonitor/Icon/_54.ico b/TempMonitor/Icon/_54.ico new file mode 100644 index 0000000..a430687 Binary files /dev/null and b/TempMonitor/Icon/_54.ico differ diff --git a/TempMonitor/Icon/_55.bmp b/TempMonitor/Icon/_55.bmp new file mode 100644 index 0000000..92d0263 Binary files /dev/null and b/TempMonitor/Icon/_55.bmp differ diff --git a/TempMonitor/Icon/_55.ico b/TempMonitor/Icon/_55.ico new file mode 100644 index 0000000..b46bc34 Binary files /dev/null and b/TempMonitor/Icon/_55.ico differ diff --git a/TempMonitor/Icon/_56.bmp b/TempMonitor/Icon/_56.bmp new file mode 100644 index 0000000..e8f7d5c Binary files /dev/null and b/TempMonitor/Icon/_56.bmp differ diff --git a/TempMonitor/Icon/_56.ico b/TempMonitor/Icon/_56.ico new file mode 100644 index 0000000..9b7ca5a Binary files /dev/null and b/TempMonitor/Icon/_56.ico differ diff --git a/TempMonitor/Icon/_57.bmp b/TempMonitor/Icon/_57.bmp new file mode 100644 index 0000000..03e4b2c Binary files /dev/null and b/TempMonitor/Icon/_57.bmp differ diff --git a/TempMonitor/Icon/_57.ico b/TempMonitor/Icon/_57.ico new file mode 100644 index 0000000..51307b1 Binary files /dev/null and b/TempMonitor/Icon/_57.ico differ diff --git a/TempMonitor/Icon/_58.bmp b/TempMonitor/Icon/_58.bmp new file mode 100644 index 0000000..b3fff6b Binary files /dev/null and b/TempMonitor/Icon/_58.bmp differ diff --git a/TempMonitor/Icon/_58.ico b/TempMonitor/Icon/_58.ico new file mode 100644 index 0000000..72d5685 Binary files /dev/null and b/TempMonitor/Icon/_58.ico differ diff --git a/TempMonitor/Icon/_59.bmp b/TempMonitor/Icon/_59.bmp new file mode 100644 index 0000000..d4c6a46 Binary files /dev/null and b/TempMonitor/Icon/_59.bmp differ diff --git a/TempMonitor/Icon/_59.ico b/TempMonitor/Icon/_59.ico new file mode 100644 index 0000000..aa08bf5 Binary files /dev/null and b/TempMonitor/Icon/_59.ico differ diff --git a/TempMonitor/Icon/_60.bmp b/TempMonitor/Icon/_60.bmp new file mode 100644 index 0000000..e405d61 Binary files /dev/null and b/TempMonitor/Icon/_60.bmp differ diff --git a/TempMonitor/Icon/_60.ico b/TempMonitor/Icon/_60.ico new file mode 100644 index 0000000..f3dc6cb Binary files /dev/null and b/TempMonitor/Icon/_60.ico differ diff --git a/TempMonitor/Icon/_61.bmp b/TempMonitor/Icon/_61.bmp new file mode 100644 index 0000000..ef1682a Binary files /dev/null and b/TempMonitor/Icon/_61.bmp differ diff --git a/TempMonitor/Icon/_61.ico b/TempMonitor/Icon/_61.ico new file mode 100644 index 0000000..c034898 Binary files /dev/null and b/TempMonitor/Icon/_61.ico differ diff --git a/TempMonitor/Icon/_62.bmp b/TempMonitor/Icon/_62.bmp new file mode 100644 index 0000000..4bd18cf Binary files /dev/null and b/TempMonitor/Icon/_62.bmp differ diff --git a/TempMonitor/Icon/_62.ico b/TempMonitor/Icon/_62.ico new file mode 100644 index 0000000..189b8e4 Binary files /dev/null and b/TempMonitor/Icon/_62.ico differ diff --git a/TempMonitor/Icon/_63.bmp b/TempMonitor/Icon/_63.bmp new file mode 100644 index 0000000..a46c4cb Binary files /dev/null and b/TempMonitor/Icon/_63.bmp differ diff --git a/TempMonitor/Icon/_63.ico b/TempMonitor/Icon/_63.ico new file mode 100644 index 0000000..48ee4be Binary files /dev/null and b/TempMonitor/Icon/_63.ico differ diff --git a/TempMonitor/Icon/_64.bmp b/TempMonitor/Icon/_64.bmp new file mode 100644 index 0000000..05c0844 Binary files /dev/null and b/TempMonitor/Icon/_64.bmp differ diff --git a/TempMonitor/Icon/_64.ico b/TempMonitor/Icon/_64.ico new file mode 100644 index 0000000..04c2764 Binary files /dev/null and b/TempMonitor/Icon/_64.ico differ diff --git a/TempMonitor/Icon/_65.bmp b/TempMonitor/Icon/_65.bmp new file mode 100644 index 0000000..3a8e9e2 Binary files /dev/null and b/TempMonitor/Icon/_65.bmp differ diff --git a/TempMonitor/Icon/_65.ico b/TempMonitor/Icon/_65.ico new file mode 100644 index 0000000..f226332 Binary files /dev/null and b/TempMonitor/Icon/_65.ico differ diff --git a/TempMonitor/Icon/_66.bmp b/TempMonitor/Icon/_66.bmp new file mode 100644 index 0000000..cf068b1 Binary files /dev/null and b/TempMonitor/Icon/_66.bmp differ diff --git a/TempMonitor/Icon/_66.ico b/TempMonitor/Icon/_66.ico new file mode 100644 index 0000000..3c403a7 Binary files /dev/null and b/TempMonitor/Icon/_66.ico differ diff --git a/TempMonitor/Icon/_67.bmp b/TempMonitor/Icon/_67.bmp new file mode 100644 index 0000000..a9a28d3 Binary files /dev/null and b/TempMonitor/Icon/_67.bmp differ diff --git a/TempMonitor/Icon/_67.ico b/TempMonitor/Icon/_67.ico new file mode 100644 index 0000000..b19d026 Binary files /dev/null and b/TempMonitor/Icon/_67.ico differ diff --git a/TempMonitor/Icon/_68.bmp b/TempMonitor/Icon/_68.bmp new file mode 100644 index 0000000..c514901 Binary files /dev/null and b/TempMonitor/Icon/_68.bmp differ diff --git a/TempMonitor/Icon/_68.ico b/TempMonitor/Icon/_68.ico new file mode 100644 index 0000000..5a40b11 Binary files /dev/null and b/TempMonitor/Icon/_68.ico differ diff --git a/TempMonitor/Icon/_69.bmp b/TempMonitor/Icon/_69.bmp new file mode 100644 index 0000000..25c831d Binary files /dev/null and b/TempMonitor/Icon/_69.bmp differ diff --git a/TempMonitor/Icon/_69.ico b/TempMonitor/Icon/_69.ico new file mode 100644 index 0000000..f64e05c Binary files /dev/null and b/TempMonitor/Icon/_69.ico differ diff --git a/TempMonitor/Icon/_70.bmp b/TempMonitor/Icon/_70.bmp new file mode 100644 index 0000000..dbdd927 Binary files /dev/null and b/TempMonitor/Icon/_70.bmp differ diff --git a/TempMonitor/Icon/_70.ico b/TempMonitor/Icon/_70.ico new file mode 100644 index 0000000..f74823d Binary files /dev/null and b/TempMonitor/Icon/_70.ico differ diff --git a/TempMonitor/Icon/_71.bmp b/TempMonitor/Icon/_71.bmp new file mode 100644 index 0000000..3442d47 Binary files /dev/null and b/TempMonitor/Icon/_71.bmp differ diff --git a/TempMonitor/Icon/_71.ico b/TempMonitor/Icon/_71.ico new file mode 100644 index 0000000..06260bc Binary files /dev/null and b/TempMonitor/Icon/_71.ico differ diff --git a/TempMonitor/Icon/_72.bmp b/TempMonitor/Icon/_72.bmp new file mode 100644 index 0000000..d139f5a Binary files /dev/null and b/TempMonitor/Icon/_72.bmp differ diff --git a/TempMonitor/Icon/_72.ico b/TempMonitor/Icon/_72.ico new file mode 100644 index 0000000..74a48ca Binary files /dev/null and b/TempMonitor/Icon/_72.ico differ diff --git a/TempMonitor/Icon/_73.bmp b/TempMonitor/Icon/_73.bmp new file mode 100644 index 0000000..844b2b5 Binary files /dev/null and b/TempMonitor/Icon/_73.bmp differ diff --git a/TempMonitor/Icon/_73.ico b/TempMonitor/Icon/_73.ico new file mode 100644 index 0000000..8b0fcf2 Binary files /dev/null and b/TempMonitor/Icon/_73.ico differ diff --git a/TempMonitor/Icon/_74.bmp b/TempMonitor/Icon/_74.bmp new file mode 100644 index 0000000..f841d73 Binary files /dev/null and b/TempMonitor/Icon/_74.bmp differ diff --git a/TempMonitor/Icon/_74.ico b/TempMonitor/Icon/_74.ico new file mode 100644 index 0000000..0c0dd39 Binary files /dev/null and b/TempMonitor/Icon/_74.ico differ diff --git a/TempMonitor/Icon/_75.bmp b/TempMonitor/Icon/_75.bmp new file mode 100644 index 0000000..2192ccc Binary files /dev/null and b/TempMonitor/Icon/_75.bmp differ diff --git a/TempMonitor/Icon/_75.ico b/TempMonitor/Icon/_75.ico new file mode 100644 index 0000000..417525b Binary files /dev/null and b/TempMonitor/Icon/_75.ico differ diff --git a/TempMonitor/Icon/_76.bmp b/TempMonitor/Icon/_76.bmp new file mode 100644 index 0000000..b78dc04 Binary files /dev/null and b/TempMonitor/Icon/_76.bmp differ diff --git a/TempMonitor/Icon/_76.ico b/TempMonitor/Icon/_76.ico new file mode 100644 index 0000000..b965df3 Binary files /dev/null and b/TempMonitor/Icon/_76.ico differ diff --git a/TempMonitor/Icon/_77.bmp b/TempMonitor/Icon/_77.bmp new file mode 100644 index 0000000..041287f Binary files /dev/null and b/TempMonitor/Icon/_77.bmp differ diff --git a/TempMonitor/Icon/_77.ico b/TempMonitor/Icon/_77.ico new file mode 100644 index 0000000..a3933e8 Binary files /dev/null and b/TempMonitor/Icon/_77.ico differ diff --git a/TempMonitor/Icon/_78.bmp b/TempMonitor/Icon/_78.bmp new file mode 100644 index 0000000..8d97a6b Binary files /dev/null and b/TempMonitor/Icon/_78.bmp differ diff --git a/TempMonitor/Icon/_78.ico b/TempMonitor/Icon/_78.ico new file mode 100644 index 0000000..f731b48 Binary files /dev/null and b/TempMonitor/Icon/_78.ico differ diff --git a/TempMonitor/Icon/_79.bmp b/TempMonitor/Icon/_79.bmp new file mode 100644 index 0000000..8016e37 Binary files /dev/null and b/TempMonitor/Icon/_79.bmp differ diff --git a/TempMonitor/Icon/_79.ico b/TempMonitor/Icon/_79.ico new file mode 100644 index 0000000..ca5d20c Binary files /dev/null and b/TempMonitor/Icon/_79.ico differ diff --git a/TempMonitor/Icon/_80.bmp b/TempMonitor/Icon/_80.bmp new file mode 100644 index 0000000..5638b9d Binary files /dev/null and b/TempMonitor/Icon/_80.bmp differ diff --git a/TempMonitor/Icon/_80.ico b/TempMonitor/Icon/_80.ico new file mode 100644 index 0000000..0b0b8f3 Binary files /dev/null and b/TempMonitor/Icon/_80.ico differ diff --git a/TempMonitor/Icon/_81.bmp b/TempMonitor/Icon/_81.bmp new file mode 100644 index 0000000..ed5f488 Binary files /dev/null and b/TempMonitor/Icon/_81.bmp differ diff --git a/TempMonitor/Icon/_81.ico b/TempMonitor/Icon/_81.ico new file mode 100644 index 0000000..ba80d6c Binary files /dev/null and b/TempMonitor/Icon/_81.ico differ diff --git a/TempMonitor/Icon/_82.bmp b/TempMonitor/Icon/_82.bmp new file mode 100644 index 0000000..f947353 Binary files /dev/null and b/TempMonitor/Icon/_82.bmp differ diff --git a/TempMonitor/Icon/_82.ico b/TempMonitor/Icon/_82.ico new file mode 100644 index 0000000..1158b6e Binary files /dev/null and b/TempMonitor/Icon/_82.ico differ diff --git a/TempMonitor/Icon/_83.bmp b/TempMonitor/Icon/_83.bmp new file mode 100644 index 0000000..8c02d30 Binary files /dev/null and b/TempMonitor/Icon/_83.bmp differ diff --git a/TempMonitor/Icon/_83.ico b/TempMonitor/Icon/_83.ico new file mode 100644 index 0000000..c4e8c21 Binary files /dev/null and b/TempMonitor/Icon/_83.ico differ diff --git a/TempMonitor/Icon/_84.bmp b/TempMonitor/Icon/_84.bmp new file mode 100644 index 0000000..8b56666 Binary files /dev/null and b/TempMonitor/Icon/_84.bmp differ diff --git a/TempMonitor/Icon/_84.ico b/TempMonitor/Icon/_84.ico new file mode 100644 index 0000000..6275ec3 Binary files /dev/null and b/TempMonitor/Icon/_84.ico differ diff --git a/TempMonitor/Icon/_85.bmp b/TempMonitor/Icon/_85.bmp new file mode 100644 index 0000000..1810bfe Binary files /dev/null and b/TempMonitor/Icon/_85.bmp differ diff --git a/TempMonitor/Icon/_85.ico b/TempMonitor/Icon/_85.ico new file mode 100644 index 0000000..f8320be Binary files /dev/null and b/TempMonitor/Icon/_85.ico differ diff --git a/TempMonitor/Icon/_86.bmp b/TempMonitor/Icon/_86.bmp new file mode 100644 index 0000000..9045a4d Binary files /dev/null and b/TempMonitor/Icon/_86.bmp differ diff --git a/TempMonitor/Icon/_86.ico b/TempMonitor/Icon/_86.ico new file mode 100644 index 0000000..34fcf93 Binary files /dev/null and b/TempMonitor/Icon/_86.ico differ diff --git a/TempMonitor/Icon/_87.bmp b/TempMonitor/Icon/_87.bmp new file mode 100644 index 0000000..c5a233d Binary files /dev/null and b/TempMonitor/Icon/_87.bmp differ diff --git a/TempMonitor/Icon/_87.ico b/TempMonitor/Icon/_87.ico new file mode 100644 index 0000000..f007513 Binary files /dev/null and b/TempMonitor/Icon/_87.ico differ diff --git a/TempMonitor/Icon/_88.bmp b/TempMonitor/Icon/_88.bmp new file mode 100644 index 0000000..f37fb6d Binary files /dev/null and b/TempMonitor/Icon/_88.bmp differ diff --git a/TempMonitor/Icon/_88.ico b/TempMonitor/Icon/_88.ico new file mode 100644 index 0000000..d37c84e Binary files /dev/null and b/TempMonitor/Icon/_88.ico differ diff --git a/TempMonitor/Icon/_89.bmp b/TempMonitor/Icon/_89.bmp new file mode 100644 index 0000000..5a40c8b Binary files /dev/null and b/TempMonitor/Icon/_89.bmp differ diff --git a/TempMonitor/Icon/_89.ico b/TempMonitor/Icon/_89.ico new file mode 100644 index 0000000..2f8c868 Binary files /dev/null and b/TempMonitor/Icon/_89.ico differ diff --git a/TempMonitor/Icon/schwarz.bmp b/TempMonitor/Icon/schwarz.bmp new file mode 100644 index 0000000..fb24f64 Binary files /dev/null and b/TempMonitor/Icon/schwarz.bmp differ diff --git a/TempMonitor/Icon/weiß.bmp b/TempMonitor/Icon/weiß.bmp new file mode 100644 index 0000000..d494f08 Binary files /dev/null and b/TempMonitor/Icon/weiß.bmp differ diff --git a/TempMonitor/Logo.bmp b/TempMonitor/Logo.bmp new file mode 100644 index 0000000..9767f56 Binary files /dev/null and b/TempMonitor/Logo.bmp differ diff --git a/TempMonitor/TempMonitor.sln b/TempMonitor/TempMonitor.sln new file mode 100644 index 0000000..02f1577 --- /dev/null +++ b/TempMonitor/TempMonitor.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TempMonitor", "TempMonitor\TempMonitor.csproj", "{B9A89720-F4D0-49E1-981B-C19C3502A10E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B9A89720-F4D0-49E1-981B-C19C3502A10E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B9A89720-F4D0-49E1-981B-C19C3502A10E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9A89720-F4D0-49E1-981B-C19C3502A10E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B9A89720-F4D0-49E1-981B-C19C3502A10E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/TempMonitor/TempMonitor.suo b/TempMonitor/TempMonitor.suo new file mode 100644 index 0000000..310e58b Binary files /dev/null and b/TempMonitor/TempMonitor.suo differ diff --git a/TempMonitor/TempMonitor/Form1.Designer.cs b/TempMonitor/TempMonitor/Form1.Designer.cs new file mode 100644 index 0000000..4b6c52e --- /dev/null +++ b/TempMonitor/TempMonitor/Form1.Designer.cs @@ -0,0 +1,77 @@ +namespace TempMonitor +{ + partial class Form1 + { + /// + /// 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() + { + this.components = new System.ComponentModel.Container(); + this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); + this.CPU = new System.Windows.Forms.Label(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.SuspendLayout(); + // + // notifyIcon1 + // + this.notifyIcon1.Text = "notifyIcon1"; + this.notifyIcon1.Visible = true; + // + // CPU + // + this.CPU.AutoSize = true; + this.CPU.Location = new System.Drawing.Point(63, 55); + this.CPU.Name = "CPU"; + this.CPU.Size = new System.Drawing.Size(39, 13); + this.CPU.TabIndex = 0; + this.CPU.Text = "sdfghjkl"; + // + // timer1 + // + this.timer1.Enabled = true; + this.timer1.Interval = 1000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(292, 273); + this.Controls.Add(this.CPU); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.NotifyIcon notifyIcon1; + private System.Windows.Forms.Label CPU; + private System.Windows.Forms.Timer timer1; + } +} + diff --git a/TempMonitor/TempMonitor/Form1.cs b/TempMonitor/TempMonitor/Form1.cs new file mode 100644 index 0000000..9f300be --- /dev/null +++ b/TempMonitor/TempMonitor/Form1.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Runtime.InteropServices; + +namespace TempMonitor +{ + public partial class Form1 : Form + { + [DllImport("asusdmi.dll")] + public static extern Int32 GetCPUTemperature(); + [DllImport("asusdmi.dll")] + public static extern Int32 GetMBTemperature(); + + public Form1() + { + InitializeComponent(); + } + + private void timer1_Tick(object sender, EventArgs e) + { + CPU.Text = "CPU Temp: " + GetCPUTemperature().ToString() + "C"; + Bitmap bm = new Bitmap(32, 32); + Graphics g = Graphics.FromImage(bm); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default; + g.FillRectangle(Brushes.Transparent, new Rectangle(0, 0, bm.Width, bm.Height)); + g.DrawString("55", new Font("Lucida Console", 23), Brushes.Red, -6, 0); + this.notifyIcon1.Icon = Icon.FromHandle(bm.GetHicon()); + g.Dispose(); + bm.Dispose(); + } + } +} + +/* + Icon oIcon = null; + int dimension=16; + try + { + Bitmap bm = new Bitmap(dimension,dimension); + Graphics g = Graphics.FromImage((Image)bm); + g.SmoothingMode = SmoothingMode.AntiAlias; + Font oFont = new Font("Arial",8,FontStyle.Regular,GraphicsUnit.Pixel); + g.FillRectangle(Brushes.Transparent,new Rectangle(0, 0, bm.Width, bm.Height)); + g.FillEllipse(Brushes.Turquoise ,0,0,dimension,dimension); + g.DrawString(IconMessage,oFont,new SolidBrush(System.Drawing.Color.Black), 2,3); + oIcon = Icon.FromHandle(bm.GetHicon()); + oFont.Dispose(); + g.Dispose(); + bm.Dispose(); + } + catch (Exception e) + { + Debug.WriteLine(e.Message); + } + + return oIcon; +*/ \ No newline at end of file diff --git a/TempMonitor/TempMonitor/Form1.resx b/TempMonitor/TempMonitor/Form1.resx new file mode 100644 index 0000000..464e7ed --- /dev/null +++ b/TempMonitor/TempMonitor/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 124, 17 + + \ No newline at end of file diff --git a/TempMonitor/TempMonitor/Program.cs b/TempMonitor/TempMonitor/Program.cs new file mode 100644 index 0000000..1785845 --- /dev/null +++ b/TempMonitor/TempMonitor/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace TempMonitor +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/TempMonitor/TempMonitor/Properties/AssemblyInfo.cs b/TempMonitor/TempMonitor/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..3819d9b --- /dev/null +++ b/TempMonitor/TempMonitor/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TempMonitor")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TempMonitor")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("fe20f1f0-f117-4458-a76e-593c7ecc6a5f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/TempMonitor/TempMonitor/Properties/Resources.Designer.cs b/TempMonitor/TempMonitor/Properties/Resources.Designer.cs new file mode 100644 index 0000000..b98b29e --- /dev/null +++ b/TempMonitor/TempMonitor/Properties/Resources.Designer.cs @@ -0,0 +1,307 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="TempMonitor.Properties.Resources.get_ResourceManager():System.Resources.ResourceM" + + "anager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="TempMonitor.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="TempMonitor.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Vo" + + "id")] + +namespace TempMonitor.Properties { + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if ((resourceMan == null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TempMonitor.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Icon _50 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_50", resourceCulture))); + } + } + + internal static System.Drawing.Icon _51 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_51", resourceCulture))); + } + } + + internal static System.Drawing.Icon _52 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_52", resourceCulture))); + } + } + + internal static System.Drawing.Icon _53 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_53", resourceCulture))); + } + } + + internal static System.Drawing.Icon _54 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_54", resourceCulture))); + } + } + + internal static System.Drawing.Icon _55 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_55", resourceCulture))); + } + } + + internal static System.Drawing.Icon _56 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_56", resourceCulture))); + } + } + + internal static System.Drawing.Icon _57 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_57", resourceCulture))); + } + } + + internal static System.Drawing.Icon _58 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_58", resourceCulture))); + } + } + + internal static System.Drawing.Icon _59 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_59", resourceCulture))); + } + } + + internal static System.Drawing.Icon _60 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_60", resourceCulture))); + } + } + + internal static System.Drawing.Icon _61 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_61", resourceCulture))); + } + } + + internal static System.Drawing.Icon _62 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_62", resourceCulture))); + } + } + + internal static System.Drawing.Icon _63 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_63", resourceCulture))); + } + } + + internal static System.Drawing.Icon _64 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_64", resourceCulture))); + } + } + + internal static System.Drawing.Icon _65 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_65", resourceCulture))); + } + } + + internal static System.Drawing.Icon _66 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_66", resourceCulture))); + } + } + + internal static System.Drawing.Icon _67 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_67", resourceCulture))); + } + } + + internal static System.Drawing.Icon _68 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_68", resourceCulture))); + } + } + + internal static System.Drawing.Icon _69 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_69", resourceCulture))); + } + } + + internal static System.Drawing.Icon _70 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_70", resourceCulture))); + } + } + + internal static System.Drawing.Icon _71 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_71", resourceCulture))); + } + } + + internal static System.Drawing.Icon _72 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_72", resourceCulture))); + } + } + + internal static System.Drawing.Icon _73 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_73", resourceCulture))); + } + } + + internal static System.Drawing.Icon _74 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_74", resourceCulture))); + } + } + + internal static System.Drawing.Icon _75 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_75", resourceCulture))); + } + } + + internal static System.Drawing.Icon _76 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_76", resourceCulture))); + } + } + + internal static System.Drawing.Icon _77 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_77", resourceCulture))); + } + } + + internal static System.Drawing.Icon _78 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_78", resourceCulture))); + } + } + + internal static System.Drawing.Icon _79 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_79", resourceCulture))); + } + } + + internal static System.Drawing.Icon _80 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_80", resourceCulture))); + } + } + + internal static System.Drawing.Icon _81 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_81", resourceCulture))); + } + } + + internal static System.Drawing.Icon _82 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_82", resourceCulture))); + } + } + + internal static System.Drawing.Icon _83 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_83", resourceCulture))); + } + } + + internal static System.Drawing.Icon _84 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_84", resourceCulture))); + } + } + + internal static System.Drawing.Icon _85 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_85", resourceCulture))); + } + } + + internal static System.Drawing.Icon _86 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_86", resourceCulture))); + } + } + + internal static System.Drawing.Icon _87 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_87", resourceCulture))); + } + } + + internal static System.Drawing.Icon _88 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_88", resourceCulture))); + } + } + + internal static System.Drawing.Icon _89 { + get { + return ((System.Drawing.Icon)(ResourceManager.GetObject("_89", resourceCulture))); + } + } + } +} diff --git a/TempMonitor/TempMonitor/Properties/Resources.resx b/TempMonitor/TempMonitor/Properties/Resources.resx new file mode 100644 index 0000000..50f9432 --- /dev/null +++ b/TempMonitor/TempMonitor/Properties/Resources.resx @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\_50.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_51.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_52.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_53.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_54.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_55.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_56.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_57.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_58.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_59.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_60.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_61.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_62.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_63.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_64.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_65.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_66.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_67.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_68.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_69.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_70.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_71.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_72.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_73.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_74.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_75.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_76.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_77.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_78.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_79.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_80.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_81.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_82.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_83.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_84.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_85.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_86.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_87.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_88.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_89.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/TempMonitor/TempMonitor/Properties/Settings.Designer.cs b/TempMonitor/TempMonitor/Properties/Settings.Designer.cs new file mode 100644 index 0000000..1d349db --- /dev/null +++ b/TempMonitor/TempMonitor/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "TempMonitor.Properties.Settings.get_Default():TempMonitor.Properties.Settings")] + +namespace TempMonitor.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/TempMonitor/TempMonitor/Properties/Settings.settings b/TempMonitor/TempMonitor/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/TempMonitor/TempMonitor/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/TempMonitor/TempMonitor/Resources/_50.ico b/TempMonitor/TempMonitor/Resources/_50.ico new file mode 100644 index 0000000..08bcf1b Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_50.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_51.ico b/TempMonitor/TempMonitor/Resources/_51.ico new file mode 100644 index 0000000..a6abe83 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_51.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_52.ico b/TempMonitor/TempMonitor/Resources/_52.ico new file mode 100644 index 0000000..71e9457 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_52.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_53.ico b/TempMonitor/TempMonitor/Resources/_53.ico new file mode 100644 index 0000000..f6f8e3c Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_53.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_54.ico b/TempMonitor/TempMonitor/Resources/_54.ico new file mode 100644 index 0000000..a430687 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_54.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_55.ico b/TempMonitor/TempMonitor/Resources/_55.ico new file mode 100644 index 0000000..b46bc34 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_55.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_56.ico b/TempMonitor/TempMonitor/Resources/_56.ico new file mode 100644 index 0000000..9b7ca5a Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_56.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_57.ico b/TempMonitor/TempMonitor/Resources/_57.ico new file mode 100644 index 0000000..51307b1 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_57.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_58.ico b/TempMonitor/TempMonitor/Resources/_58.ico new file mode 100644 index 0000000..72d5685 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_58.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_59.ico b/TempMonitor/TempMonitor/Resources/_59.ico new file mode 100644 index 0000000..aa08bf5 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_59.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_60.ico b/TempMonitor/TempMonitor/Resources/_60.ico new file mode 100644 index 0000000..f3dc6cb Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_60.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_61.ico b/TempMonitor/TempMonitor/Resources/_61.ico new file mode 100644 index 0000000..c034898 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_61.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_62.ico b/TempMonitor/TempMonitor/Resources/_62.ico new file mode 100644 index 0000000..189b8e4 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_62.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_63.ico b/TempMonitor/TempMonitor/Resources/_63.ico new file mode 100644 index 0000000..48ee4be Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_63.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_64.ico b/TempMonitor/TempMonitor/Resources/_64.ico new file mode 100644 index 0000000..04c2764 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_64.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_65.ico b/TempMonitor/TempMonitor/Resources/_65.ico new file mode 100644 index 0000000..f226332 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_65.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_66.ico b/TempMonitor/TempMonitor/Resources/_66.ico new file mode 100644 index 0000000..3c403a7 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_66.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_67.ico b/TempMonitor/TempMonitor/Resources/_67.ico new file mode 100644 index 0000000..b19d026 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_67.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_68.ico b/TempMonitor/TempMonitor/Resources/_68.ico new file mode 100644 index 0000000..5a40b11 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_68.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_69.ico b/TempMonitor/TempMonitor/Resources/_69.ico new file mode 100644 index 0000000..f64e05c Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_69.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_70.ico b/TempMonitor/TempMonitor/Resources/_70.ico new file mode 100644 index 0000000..f74823d Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_70.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_71.ico b/TempMonitor/TempMonitor/Resources/_71.ico new file mode 100644 index 0000000..06260bc Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_71.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_72.ico b/TempMonitor/TempMonitor/Resources/_72.ico new file mode 100644 index 0000000..74a48ca Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_72.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_73.ico b/TempMonitor/TempMonitor/Resources/_73.ico new file mode 100644 index 0000000..8b0fcf2 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_73.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_74.ico b/TempMonitor/TempMonitor/Resources/_74.ico new file mode 100644 index 0000000..0c0dd39 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_74.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_75.ico b/TempMonitor/TempMonitor/Resources/_75.ico new file mode 100644 index 0000000..417525b Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_75.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_76.ico b/TempMonitor/TempMonitor/Resources/_76.ico new file mode 100644 index 0000000..b965df3 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_76.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_77.ico b/TempMonitor/TempMonitor/Resources/_77.ico new file mode 100644 index 0000000..a3933e8 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_77.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_78.ico b/TempMonitor/TempMonitor/Resources/_78.ico new file mode 100644 index 0000000..f731b48 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_78.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_79.ico b/TempMonitor/TempMonitor/Resources/_79.ico new file mode 100644 index 0000000..ca5d20c Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_79.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_80.ico b/TempMonitor/TempMonitor/Resources/_80.ico new file mode 100644 index 0000000..0b0b8f3 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_80.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_81.ico b/TempMonitor/TempMonitor/Resources/_81.ico new file mode 100644 index 0000000..ba80d6c Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_81.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_82.ico b/TempMonitor/TempMonitor/Resources/_82.ico new file mode 100644 index 0000000..1158b6e Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_82.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_83.ico b/TempMonitor/TempMonitor/Resources/_83.ico new file mode 100644 index 0000000..c4e8c21 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_83.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_84.ico b/TempMonitor/TempMonitor/Resources/_84.ico new file mode 100644 index 0000000..6275ec3 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_84.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_85.ico b/TempMonitor/TempMonitor/Resources/_85.ico new file mode 100644 index 0000000..f8320be Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_85.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_86.ico b/TempMonitor/TempMonitor/Resources/_86.ico new file mode 100644 index 0000000..34fcf93 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_86.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_87.ico b/TempMonitor/TempMonitor/Resources/_87.ico new file mode 100644 index 0000000..f007513 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_87.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_88.ico b/TempMonitor/TempMonitor/Resources/_88.ico new file mode 100644 index 0000000..d37c84e Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_88.ico differ diff --git a/TempMonitor/TempMonitor/Resources/_89.ico b/TempMonitor/TempMonitor/Resources/_89.ico new file mode 100644 index 0000000..2f8c868 Binary files /dev/null and b/TempMonitor/TempMonitor/Resources/_89.ico differ diff --git a/TempMonitor/TempMonitor/TempMonitor.csproj b/TempMonitor/TempMonitor/TempMonitor.csproj new file mode 100644 index 0000000..2449ed6 --- /dev/null +++ b/TempMonitor/TempMonitor/TempMonitor.csproj @@ -0,0 +1,191 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {B9A89720-F4D0-49E1-981B-C19C3502A10E} + WinExe + Properties + TempMonitor + TempMonitor + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TempMonitor/TempMonitor/TempMonitor.csproj.user b/TempMonitor/TempMonitor/TempMonitor.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/TempMonitor/TempMonitor/TempMonitor.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/TextToSpeech/TextToSpeech.sln b/TextToSpeech/TextToSpeech.sln new file mode 100644 index 0000000..40436ce --- /dev/null +++ b/TextToSpeech/TextToSpeech.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextToSpeech", "TextToSpeech\TextToSpeech.csproj", "{5E2F3519-D52F-4B07-ADC2-FED2602C52F6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5E2F3519-D52F-4B07-ADC2-FED2602C52F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5E2F3519-D52F-4B07-ADC2-FED2602C52F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5E2F3519-D52F-4B07-ADC2-FED2602C52F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5E2F3519-D52F-4B07-ADC2-FED2602C52F6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/TextToSpeech/TextToSpeech.suo b/TextToSpeech/TextToSpeech.suo new file mode 100644 index 0000000..04e2d90 Binary files /dev/null and b/TextToSpeech/TextToSpeech.suo differ diff --git a/TextToSpeech/TextToSpeech/Form1.Designer.cs b/TextToSpeech/TextToSpeech/Form1.Designer.cs new file mode 100644 index 0000000..86b8a15 --- /dev/null +++ b/TextToSpeech/TextToSpeech/Form1.Designer.cs @@ -0,0 +1,84 @@ +namespace TextToSpeech +{ + partial class Form1 + { + /// + /// 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() + { + this.button1 = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(12, 227); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 0; + this.button1.Text = "Start"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(12, 12); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(268, 209); + this.textBox1.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(93, 232); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(0, 13); + this.label1.TabIndex = 2; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(292, 258); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.button1); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label1; + } +} + diff --git a/TextToSpeech/TextToSpeech/Form1.cs b/TextToSpeech/TextToSpeech/Form1.cs new file mode 100644 index 0000000..0f3e72b --- /dev/null +++ b/TextToSpeech/TextToSpeech/Form1.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Net; +using System.IO; + +namespace TextToSpeech +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + void TextToSpeech(string text) + { + foreach(string line in textBox1.Lines) + { + HttpWebRequest wrq = (HttpWebRequest)WebRequest.Create("http://192.20.225.55/tts/cgi-bin/nph-talk"); + byte[] postData = Encoding.ASCII.GetBytes("voice=crystal&txt=" + line + "&speakButton=SPEAK"); + wrq.Method = "POST"; + wrq.ContentType = "application/x-www-form-urlencoded"; + wrq.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3"; + wrq.Accept = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; + wrq.Referer = "http://www.research.att.com/~ttsweb/tts/demo.php"; + wrq.ContentLength = postData.Length; + Stream stream = wrq.GetRequestStream(); + stream.Write(postData, 0, postData.Length); + stream.Close(); + HttpWebResponse wrp = (HttpWebResponse)wrq.GetResponse(); + Stream stream2 = wrp.GetResponseStream(); + int data = 0; + FileStream file = File.Create(line + ".wav"); + while (data != -1) + { + data = stream2.ReadByte(); + file.WriteByte((byte)data); + } + file.Close(); + stream2.Close(); + } + label1.Text = "fertig"; + } + + private void button1_Click(object sender, EventArgs e) + { + TextToSpeech("blub"); + } + } +} \ No newline at end of file diff --git a/TextToSpeech/TextToSpeech/Form1.resx b/TextToSpeech/TextToSpeech/Form1.resx new file mode 100644 index 0000000..ff31a6d --- /dev/null +++ b/TextToSpeech/TextToSpeech/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TextToSpeech/TextToSpeech/Program.cs b/TextToSpeech/TextToSpeech/Program.cs new file mode 100644 index 0000000..1241fbd --- /dev/null +++ b/TextToSpeech/TextToSpeech/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace TextToSpeech +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/TextToSpeech/TextToSpeech/Properties/AssemblyInfo.cs b/TextToSpeech/TextToSpeech/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5fcdef9 --- /dev/null +++ b/TextToSpeech/TextToSpeech/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Texttospeech")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Texttospeech")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("7c04f5f4-dd72-4be8-87e6-b5f41ab7bfec")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/TextToSpeech/TextToSpeech/Properties/Resources.Designer.cs b/TextToSpeech/TextToSpeech/Properties/Resources.Designer.cs new file mode 100644 index 0000000..bdbae44 --- /dev/null +++ b/TextToSpeech/TextToSpeech/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Texttospeech.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Texttospeech.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/TextToSpeech/TextToSpeech/Properties/Resources.resx b/TextToSpeech/TextToSpeech/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/TextToSpeech/TextToSpeech/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TextToSpeech/TextToSpeech/Properties/Settings.Designer.cs b/TextToSpeech/TextToSpeech/Properties/Settings.Designer.cs new file mode 100644 index 0000000..57acd38 --- /dev/null +++ b/TextToSpeech/TextToSpeech/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Texttospeech.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/TextToSpeech/TextToSpeech/Properties/Settings.settings b/TextToSpeech/TextToSpeech/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/TextToSpeech/TextToSpeech/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/TextToSpeech/TextToSpeech/TextToSpeech.csproj b/TextToSpeech/TextToSpeech/TextToSpeech.csproj new file mode 100644 index 0000000..1488d8d --- /dev/null +++ b/TextToSpeech/TextToSpeech/TextToSpeech.csproj @@ -0,0 +1,78 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {5E2F3519-D52F-4B07-ADC2-FED2602C52F6} + WinExe + Properties + Texttospeech + TextToSpeech + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn.sln b/The_Break_Of_Dawn/The_Break_Of_Dawn.sln new file mode 100644 index 0000000..a8ebc37 --- /dev/null +++ b/The_Break_Of_Dawn/The_Break_Of_Dawn.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "The_Break_Of_Dawn", "The_Break_Of_Dawn\The_Break_Of_Dawn.csproj", "{053F7C0F-DB7B-42AD-82DB-46CE8509E15A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {053F7C0F-DB7B-42AD-82DB-46CE8509E15A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {053F7C0F-DB7B-42AD-82DB-46CE8509E15A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {053F7C0F-DB7B-42AD-82DB-46CE8509E15A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {053F7C0F-DB7B-42AD-82DB-46CE8509E15A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn.suo b/The_Break_Of_Dawn/The_Break_Of_Dawn.suo new file mode 100644 index 0000000..901ef35 Binary files /dev/null and b/The_Break_Of_Dawn/The_Break_Of_Dawn.suo differ diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn/Program.cs b/The_Break_Of_Dawn/The_Break_Of_Dawn/Program.cs new file mode 100644 index 0000000..19fd9d4 --- /dev/null +++ b/The_Break_Of_Dawn/The_Break_Of_Dawn/Program.cs @@ -0,0 +1,46 @@ +using System; +using System.Windows.Forms; +using System.Globalization; + +namespace The_Break_Of_Dawn +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main(string[] args) + { + if (args.Length > 0) + { + // Get the 2 character command line argument + string arg = args[0].ToLower(CultureInfo.InvariantCulture).Trim().Substring(0, 2); + switch (arg) + { + case "/p": + // Don't do anything for preview + break; + case "/s": + // Show screensaver form + ShowScreenSaver(); + break; + default: + MessageBox.Show("Invalid command line argument :" + arg, "Invalid Command Line Argument", MessageBoxButtons.OK, MessageBoxIcon.Error); + break; + } + } + else + { + // If no arguments were passed in, show the screensaver + ShowScreenSaver(); + } + } + + static void ShowScreenSaver() + { + ScreenSaverForm screenSaver = new ScreenSaverForm(); + Application.Run(screenSaver); + } + } +} \ No newline at end of file diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/AssemblyInfo.cs b/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c9cccdd --- /dev/null +++ b/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("The_Break_Of_Dawn")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("The_Break_Of_Dawn")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d823b54b-a752-4685-af3d-2bb82d236aff")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/Resources.Designer.cs b/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/Resources.Designer.cs new file mode 100644 index 0000000..23c5cb3 --- /dev/null +++ b/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/Resources.Designer.cs @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace The_Break_Of_Dawn.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("The_Break_Of_Dawn.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Bitmap Break_of_Dawn { + get { + object obj = ResourceManager.GetObject("Break_of_Dawn", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/Resources.resx b/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/Resources.resx new file mode 100644 index 0000000..e096a5d --- /dev/null +++ b/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Break of Dawn.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/Settings.designer.cs b/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/Settings.designer.cs new file mode 100644 index 0000000..5693527 --- /dev/null +++ b/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/Settings.designer.cs @@ -0,0 +1,60 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "The_Break_Of_Dawn.Properties.Settings.get_Default():The_Break_Of_Dawn.Properties.Settings")] + +namespace The_Break_Of_Dawn.Properties +{ + + + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public string BackgroundImagePath + { + get + { + return ((string)(this["BackgroundImagePath"])); + } + set + { + this["BackgroundImagePath"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("http://go.microsoft.com/fwlink/?LinkId=49535")] + public string RssFeedUri + { + get + { + return ((string)(this["RssFeedUri"])); + } + set + { + this["RssFeedUri"] = value; + } + } + } +} diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/Settings.settings b/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/Settings.settings new file mode 100644 index 0000000..839e30d --- /dev/null +++ b/The_Break_Of_Dawn/The_Break_Of_Dawn/Properties/Settings.settings @@ -0,0 +1,14 @@ + + + + + + + + + + + http://go.microsoft.com/fwlink/?LinkId=49535 + + + diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn/Resources/App.ico b/The_Break_Of_Dawn/The_Break_Of_Dawn/Resources/App.ico new file mode 100644 index 0000000..64c203f Binary files /dev/null and b/The_Break_Of_Dawn/The_Break_Of_Dawn/Resources/App.ico differ diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn/Resources/Break of Dawn.png b/The_Break_Of_Dawn/The_Break_Of_Dawn/Resources/Break of Dawn.png new file mode 100644 index 0000000..10eb3a9 Binary files /dev/null and b/The_Break_Of_Dawn/The_Break_Of_Dawn/Resources/Break of Dawn.png differ diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn/ScreenSaverForm.Designer.cs b/The_Break_Of_Dawn/The_Break_Of_Dawn/ScreenSaverForm.Designer.cs new file mode 100644 index 0000000..f791684 --- /dev/null +++ b/The_Break_Of_Dawn/The_Break_Of_Dawn/ScreenSaverForm.Designer.cs @@ -0,0 +1,55 @@ +namespace The_Break_Of_Dawn +{ + partial class ScreenSaverForm + { + /// + /// 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() + { + this.SuspendLayout(); + // + // ScreenSaverForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackgroundImage = global::The_Break_Of_Dawn.Properties.Resources.Break_of_Dawn; + this.ClientSize = new System.Drawing.Size(1600, 1050); + this.Cursor = System.Windows.Forms.Cursors.Arrow; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Location = new System.Drawing.Point(80, 0); + this.Name = "ScreenSaverForm"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Text = "ScreenSaverForm"; + this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.ScreenSaverForm_MouseMove); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ScreenSaverForm_KeyDown); + this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ScreenSaverForm_MouseDown); + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn/ScreenSaverForm.cs b/The_Break_Of_Dawn/The_Break_Of_Dawn/ScreenSaverForm.cs new file mode 100644 index 0000000..b7d1b43 --- /dev/null +++ b/The_Break_Of_Dawn/The_Break_Of_Dawn/ScreenSaverForm.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace The_Break_Of_Dawn +{ + public partial class ScreenSaverForm : Form + { + private Point mouseLocation; + private bool isActive = false; + + public ScreenSaverForm() + { + InitializeComponent(); + Cursor.Hide(); + Capture = true; + } + + private void ScreenSaverForm_MouseMove(object sender, MouseEventArgs e) + { // Set IsActive and MouseLocation only the first time this event is called. + if (!isActive) + { + mouseLocation = MousePosition; + isActive = true; + } + else + { + // If the mouse has moved significantly since first call, close. + if ((Math.Abs(MousePosition.X - mouseLocation.X) > 10) || + (Math.Abs(MousePosition.Y - mouseLocation.Y) > 10)) + { + Close(); + } + } + } + + private void ScreenSaverForm_MouseDown(object sender, MouseEventArgs e) + { + Close(); + } + + private void ScreenSaverForm_KeyDown(object sender, KeyEventArgs e) + { + Close(); + } + } +} \ No newline at end of file diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn/ScreenSaverForm.resx b/The_Break_Of_Dawn/The_Break_Of_Dawn/ScreenSaverForm.resx new file mode 100644 index 0000000..ff31a6d --- /dev/null +++ b/The_Break_Of_Dawn/The_Break_Of_Dawn/ScreenSaverForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/The_Break_Of_Dawn/The_Break_Of_Dawn/The_Break_Of_Dawn.csproj b/The_Break_Of_Dawn/The_Break_Of_Dawn/The_Break_Of_Dawn.csproj new file mode 100644 index 0000000..92280f8 --- /dev/null +++ b/The_Break_Of_Dawn/The_Break_Of_Dawn/The_Break_Of_Dawn.csproj @@ -0,0 +1,81 @@ + + + Debug + 8.0.50727 + 2.0 + {053F7C0F-DB7B-42AD-82DB-46CE8509E15A} + WinExe + Properties + The_Break_Of_Dawn + The_Break_Of_Dawn + Resources\App.ico + + + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Form + + + ScreenSaverForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + Designer + ScreenSaverForm.cs + + + SettingsSingleFileGenerator + Settings.designer.cs + + + + + + + + + \ No newline at end of file diff --git a/Toolbar/Toolbar.sln b/Toolbar/Toolbar.sln new file mode 100644 index 0000000..969fd2d --- /dev/null +++ b/Toolbar/Toolbar.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Toolbar", "Toolbar\Toolbar.csproj", "{570520DD-9854-4AAB-92E2-85FC6A06C596}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {570520DD-9854-4AAB-92E2-85FC6A06C596}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {570520DD-9854-4AAB-92E2-85FC6A06C596}.Debug|Any CPU.Build.0 = Debug|Any CPU + {570520DD-9854-4AAB-92E2-85FC6A06C596}.Release|Any CPU.ActiveCfg = Release|Any CPU + {570520DD-9854-4AAB-92E2-85FC6A06C596}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Toolbar/Toolbar.suo b/Toolbar/Toolbar.suo new file mode 100644 index 0000000..2e22ef5 Binary files /dev/null and b/Toolbar/Toolbar.suo differ diff --git a/Toolbar/Toolbar/ApplicationDesktopToolbar.cs b/Toolbar/Toolbar/ApplicationDesktopToolbar.cs new file mode 100644 index 0000000..e23f1c3 --- /dev/null +++ b/Toolbar/Toolbar/ApplicationDesktopToolbar.cs @@ -0,0 +1,572 @@ +using System; +using System.Runtime.InteropServices; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace ShellLib +{ + + public class ApplicationDesktopToolbar : Form + { + #region Enums + public enum AppBarMessages + { + /// + /// Registers a new appbar and specifies the message identifier + /// that the system should use to send notification messages to + /// the appbar. + /// + New = 0x00000000, + /// + /// Unregisters an appbar, removing the bar from the system's + /// internal list. + /// + Remove = 0x00000001, + /// + /// Requests a size and screen position for an appbar. + /// + QueryPos = 0x00000002, + /// + /// Sets the size and screen position of an appbar. + /// + SetPos = 0x00000003, + /// + /// Retrieves the autohide and always-on-top states of the + /// Microsoft Windows taskbar. + /// + GetState = 0x00000004, + /// + /// Retrieves the bounding rectangle of the Windows taskbar. + /// + GetTaskBarPos = 0x00000005, + /// + /// Notifies the system that an appbar has been activated. + /// + Activate = 0x00000006, + /// + /// Retrieves the handle to the autohide appbar associated with + /// a particular edge of the screen. + /// + GetAutoHideBar = 0x00000007, + /// + /// Registers or unregisters an autohide appbar for an edge of + /// the screen. + /// + SetAutoHideBar = 0x00000008, + /// + /// Notifies the system when an appbar's position has changed. + /// + WindowPosChanged = 0x00000009, + /// + /// Sets the state of the appbar's autohide and always-on-top + /// attributes. + /// + SetState = 0x0000000a + } + + + public enum AppBarNotifications + { + /// + /// Notifies an appbar that the taskbar's autohide or + /// always-on-top state has changedthat is, the user has selected + /// or cleared the "Always on top" or "Auto hide" check box on the + /// taskbar's property sheet. + /// + StateChange = 0x00000000, + /// + /// Notifies an appbar when an event has occurred that may affect + /// the appbar's size and position. Events include changes in the + /// taskbar's size, position, and visibility state, as well as the + /// addition, removal, or resizing of another appbar on the same + /// side of the screen. + /// + PosChanged = 0x00000001, + /// + /// Notifies an appbar when a full-screen application is opening or + /// closing. This notification is sent in the form of an + /// application-defined message that is set by the ABM_NEW message. + /// + FullScreenApp = 0x00000002, + /// + /// Notifies an appbar that the user has selected the Cascade, + /// Tile Horizontally, or Tile Vertically command from the + /// taskbar's shortcut menu. + /// + WindowArrange = 0x00000003 + } + + [Flags] + public enum AppBarStates + { + AutoHide = 0x00000001, + AlwaysOnTop = 0x00000002 + } + + + public enum AppBarEdges + { + Left = 0, + Top = 1, + Right = 2, + Bottom = 3, + Float = 4 + } + + // Window Messages + public enum WM + { + ACTIVATE = 0x0006, + WINDOWPOSCHANGED = 0x0047, + NCHITTEST = 0x0084 + } + + public enum MousePositionCodes + { + HTERROR = (-2), + HTTRANSPARENT = (-1), + HTNOWHERE = 0, + HTCLIENT = 1, + HTCAPTION = 2, + HTSYSMENU = 3, + HTGROWBOX = 4, + HTSIZE = HTGROWBOX, + HTMENU = 5, + HTHSCROLL = 6, + HTVSCROLL = 7, + HTMINBUTTON = 8, + HTMAXBUTTON = 9, + HTLEFT = 10, + HTRIGHT = 11, + HTTOP = 12, + HTTOPLEFT = 13, + HTTOPRIGHT = 14, + HTBOTTOM = 15, + HTBOTTOMLEFT = 16, + HTBOTTOMRIGHT = 17, + HTBORDER = 18, + HTREDUCE = HTMINBUTTON, + HTZOOM = HTMAXBUTTON, + HTSIZEFIRST = HTLEFT, + HTSIZELAST = HTBOTTOMRIGHT, + HTOBJECT = 19, + HTCLOSE = 20, + HTHELP = 21 + } + + #endregion Enums + + #region AppBar Functions + + private Boolean AppbarNew() + { + if (CallbackMessageID == 0) + throw new Exception("CallbackMessageID is 0"); + + if (IsAppbarMode) + return true; + + m_PrevSize = Size; + m_PrevLocation = Location; + + // prepare data structure of message + ShellApi.APPBARDATA msgData = new ShellApi.APPBARDATA(); + msgData.cbSize = (UInt32)Marshal.SizeOf(msgData); + msgData.hWnd = Handle; + msgData.uCallbackMessage = CallbackMessageID; + + // install new appbar + UInt32 retVal = ShellApi.SHAppBarMessage((UInt32)AppBarMessages.New,ref msgData); + IsAppbarMode = (retVal!=0); + + SizeAppBar(); + + return IsAppbarMode; + } + + private Boolean AppbarRemove() + { + // prepare data structure of message + ShellApi.APPBARDATA msgData = new ShellApi.APPBARDATA(); + msgData.cbSize = (UInt32)Marshal.SizeOf(msgData); + msgData.hWnd = Handle; + + // remove appbar + UInt32 retVal = ShellApi.SHAppBarMessage((UInt32)AppBarMessages.Remove,ref msgData); + + IsAppbarMode = false; + + Size = m_PrevSize; + Location = m_PrevLocation; + + return (retVal!=0) ? true : false; + } + + private void AppbarQueryPos(ref ShellApi.RECT appRect) + { + // prepare data structure of message + ShellApi.APPBARDATA msgData = new ShellApi.APPBARDATA(); + msgData.cbSize = (UInt32)Marshal.SizeOf(msgData); + msgData.hWnd = Handle; + msgData.uEdge = (UInt32)m_Edge; + msgData.rc = appRect; + + // query postion for the appbar + ShellApi.SHAppBarMessage((UInt32)AppBarMessages.QueryPos, ref msgData); + appRect = msgData.rc; + } + + private void AppbarSetPos(ref ShellApi.RECT appRect) + { + // prepare data structure of message + ShellApi.APPBARDATA msgData = new ShellApi.APPBARDATA(); + msgData.cbSize = (UInt32)Marshal.SizeOf(msgData); + msgData.hWnd = Handle; + msgData.uEdge = (UInt32)m_Edge; + msgData.rc = appRect; + + // set postion for the appbar + ShellApi.SHAppBarMessage((UInt32)AppBarMessages.SetPos, ref msgData); + appRect = msgData.rc; + } + + private void AppbarActivate() + { + // prepare data structure of message + ShellApi.APPBARDATA msgData = new ShellApi.APPBARDATA(); + msgData.cbSize = (UInt32)Marshal.SizeOf(msgData); + msgData.hWnd = Handle; + + // send activate to the system + ShellApi.SHAppBarMessage((UInt32)AppBarMessages.Activate, ref msgData); + } + + private void AppbarWindowPosChanged() + { + // prepare data structure of message + ShellApi.APPBARDATA msgData = new ShellApi.APPBARDATA(); + msgData.cbSize = (UInt32)Marshal.SizeOf(msgData); + msgData.hWnd = Handle; + + // send windowposchanged to the system + ShellApi.SHAppBarMessage((UInt32)AppBarMessages.WindowPosChanged, ref msgData); + } + + private Boolean AppbarSetAutoHideBar(Boolean hideValue) + { + // prepare data structure of message + ShellApi.APPBARDATA msgData = new ShellApi.APPBARDATA(); + msgData.cbSize = (UInt32)Marshal.SizeOf(msgData); + msgData.hWnd = Handle; + msgData.uEdge = (UInt32)m_Edge; + msgData.lParam = (hideValue) ? 1 : 0; + + // set auto hide + UInt32 retVal = ShellApi.SHAppBarMessage((UInt32)AppBarMessages.SetAutoHideBar,ref msgData); + return (retVal!=0) ? true : false; + } + + private IntPtr AppbarGetAutoHideBar(AppBarEdges edge) + { + // prepare data structure of message + ShellApi.APPBARDATA msgData = new ShellApi.APPBARDATA(); + msgData.cbSize = (UInt32)Marshal.SizeOf(msgData); + msgData.uEdge = (UInt32)edge; + + // get auto hide + IntPtr retVal = (IntPtr)ShellApi.SHAppBarMessage((UInt32)AppBarMessages.GetAutoHideBar,ref msgData); + return retVal; + } + + private AppBarStates AppbarGetTaskbarState() + { + // prepare data structure of message + ShellApi.APPBARDATA msgData = new ShellApi.APPBARDATA(); + msgData.cbSize = (UInt32)Marshal.SizeOf(msgData); + + // get taskbar state + UInt32 retVal = ShellApi.SHAppBarMessage((UInt32)AppBarMessages.GetState, ref msgData); + return (AppBarStates)retVal; + } + + private void AppbarSetTaskbarState(AppBarStates state) + { + // prepare data structure of message + ShellApi.APPBARDATA msgData = new ShellApi.APPBARDATA(); + msgData.cbSize = (UInt32)Marshal.SizeOf(msgData); + msgData.lParam = (Int32)state; + + // set taskbar state + ShellApi.SHAppBarMessage((UInt32)AppBarMessages.SetState, ref msgData); + } + + private void AppbarGetTaskbarPos(out ShellApi.RECT taskRect) + { + // prepare data structure of message + ShellApi.APPBARDATA msgData = new ShellApi.APPBARDATA(); + msgData.cbSize = (UInt32)Marshal.SizeOf(msgData); + + // get taskbar position + ShellApi.SHAppBarMessage((UInt32)AppBarMessages.GetTaskBarPos, ref msgData); + taskRect = msgData.rc; + } + + #endregion AppBar Functions + + #region Private Variables + + // saves the current edge + private AppBarEdges m_Edge = AppBarEdges.Float; + + // saves the callback message id + private UInt32 CallbackMessageID = 0; + + // are we in dock mode? + private Boolean IsAppbarMode = false; + + // save the floating size and location + private Size m_PrevSize; + private Point m_PrevLocation; + + #endregion Private Variables + + public ApplicationDesktopToolbar() + { + FormBorderStyle = FormBorderStyle.SizableToolWindow; + + // Register a unique message as our callback message + CallbackMessageID = RegisterCallbackMessage(); + if (CallbackMessageID == 0) + throw new Exception("RegisterCallbackMessage failed"); + } + + private UInt32 RegisterCallbackMessage() + { + String uniqueMessageString = Guid.NewGuid().ToString(); + return ShellApi.RegisterWindowMessage(uniqueMessageString); + } + + private void SizeAppBar() + { + ShellApi.RECT rt = new ShellApi.RECT(); + + if ((m_Edge == AppBarEdges.Left) || + (m_Edge == AppBarEdges.Right)) + { + rt.top = 0; + rt.bottom = SystemInformation.PrimaryMonitorSize.Height; + if (m_Edge == AppBarEdges.Left) + { + rt.right = m_PrevSize.Width; + } + else + { + rt.right = SystemInformation.PrimaryMonitorSize.Width; + rt.left = rt.right - m_PrevSize.Width; + } + } + else + { + rt.left = 0; + rt.right = SystemInformation.PrimaryMonitorSize.Width; + if (m_Edge == AppBarEdges.Top) + { + rt.bottom = m_PrevSize.Height; + } + else + { + rt.bottom = SystemInformation.PrimaryMonitorSize.Height; + rt.top = rt.bottom - m_PrevSize.Height; + } + } + + AppbarQueryPos(ref rt); + + switch (m_Edge) + { + case AppBarEdges.Left: + rt.right = rt.left + m_PrevSize.Width; + break; + case AppBarEdges.Right: + rt.left= rt.right - m_PrevSize.Width; + break; + case AppBarEdges.Top: + rt.bottom = rt.top + m_PrevSize.Height; + break; + case AppBarEdges.Bottom: + rt.top = rt.bottom - m_PrevSize.Height; + break; + } + + AppbarSetPos(ref rt); + + Location = new Point(rt.left,rt.top); + Size = new Size(rt.right - rt.left,rt.bottom - rt.top); + } + + + #region Message Handlers + + void OnAppbarNotification(ref Message msg) + { + AppBarStates state; + AppBarNotifications msgType = (AppBarNotifications)(Int32)msg.WParam; + + switch (msgType) + { + case AppBarNotifications.PosChanged: + SizeAppBar(); + break; + + case AppBarNotifications.StateChange: + state = AppbarGetTaskbarState(); + if ((state & AppBarStates.AlwaysOnTop) !=0) + { + TopMost = true; + BringToFront(); + } + else + { + TopMost = false; + SendToBack(); + } + break; + + case AppBarNotifications.FullScreenApp: + if ((int)msg.LParam !=0) + { + TopMost = false; + SendToBack(); + } + else + { + state = AppbarGetTaskbarState(); + if ((state & AppBarStates.AlwaysOnTop) !=0) + { + TopMost = true; + BringToFront(); + } + else + { + TopMost = false; + SendToBack(); + } + } + + break; + + case AppBarNotifications.WindowArrange: + if ((int)msg.LParam != 0) // before + Visible = false; + else // after + Visible = true; + + break; + } + } + + void OnNcHitTest(ref Message msg) + { + DefWndProc(ref msg); + if ((m_Edge == AppBarEdges.Top) && ((int)msg.Result == (int)MousePositionCodes.HTBOTTOM)) + 0.ToString(); + else if ((m_Edge == AppBarEdges.Bottom) && ((int)msg.Result == (int)MousePositionCodes.HTTOP)) + 0.ToString(); + else if ((m_Edge == AppBarEdges.Left) && ((int)msg.Result == (int)MousePositionCodes.HTRIGHT)) + 0.ToString(); + else if ((m_Edge == AppBarEdges.Right) && ((int)msg.Result == (int)MousePositionCodes.HTLEFT)) + 0.ToString(); + else if ((int)msg.Result == (int)MousePositionCodes.HTCLOSE) + 0.ToString(); + else + { + msg.Result = (IntPtr)MousePositionCodes.HTCLIENT; + return; + } + base.WndProc(ref msg); + } + + + #endregion Message Handlers + + #region Window Procedure + + protected override void WndProc(ref Message msg) + { + if (IsAppbarMode) + { + if (msg.Msg == CallbackMessageID) + { + OnAppbarNotification(ref msg); + } + else if (msg.Msg == (int)WM.ACTIVATE) + { + AppbarActivate(); + } + else if (msg.Msg == (int)WM.WINDOWPOSCHANGED) + { + AppbarWindowPosChanged(); + } + else if (msg.Msg == (int)WM.NCHITTEST) + { + OnNcHitTest(ref msg); + return; + } + } + + base.WndProc(ref msg); + } + + #endregion Window Procedure + + protected override void OnLoad(EventArgs e) + { + m_PrevSize = Size; + m_PrevLocation = Location; + base.OnLoad(e); + } + + protected override void OnClosing(CancelEventArgs e) + { + AppbarRemove(); + base.OnClosing(e); + } + + protected override void OnSizeChanged(EventArgs e) + { + if (IsAppbarMode) + { + if (m_Edge == AppBarEdges.Top || m_Edge == AppBarEdges.Bottom) + m_PrevSize.Height = Size.Height; + else + m_PrevSize.Width = Size.Width; + + SizeAppBar(); + } + + base.OnSizeChanged(e); + } + + + public AppBarEdges Edge + { + get + { + return m_Edge; + } + set + { + m_Edge = value; + if (value == AppBarEdges.Float) + AppbarRemove(); + else + AppbarNew(); + + if (IsAppbarMode) + SizeAppBar(); + + } + } + } +} \ No newline at end of file diff --git a/Toolbar/Toolbar/Form1.Designer.cs b/Toolbar/Toolbar/Form1.Designer.cs new file mode 100644 index 0000000..958b18d --- /dev/null +++ b/Toolbar/Toolbar/Form1.Designer.cs @@ -0,0 +1,50 @@ +namespace Toolbar +{ + partial class Form1 + { + /// + /// 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() + { + this.SuspendLayout(); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(96, 561); + this.ControlBox = false; + this.Name = "Form1"; + this.ShowInTaskbar = false; + this.Text = "Toolbar"; + this.TopMost = true; + this.ResumeLayout(false); + + } + + #endregion + } +} + diff --git a/Toolbar/Toolbar/Form1.cs b/Toolbar/Toolbar/Form1.cs new file mode 100644 index 0000000..150c2c2 --- /dev/null +++ b/Toolbar/Toolbar/Form1.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace Toolbar +{ + public partial class Form1 : ShellLib.ApplicationDesktopToolbar + { + public Form1() + { + InitializeComponent(); + this.Edge = AppBarEdges.Left; + } + } +} \ No newline at end of file diff --git a/Toolbar/Toolbar/Form1.resx b/Toolbar/Toolbar/Form1.resx new file mode 100644 index 0000000..ff31a6d --- /dev/null +++ b/Toolbar/Toolbar/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Toolbar/Toolbar/Program.cs b/Toolbar/Toolbar/Program.cs new file mode 100644 index 0000000..33d3300 --- /dev/null +++ b/Toolbar/Toolbar/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Toolbar +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Toolbar/Toolbar/Properties/AssemblyInfo.cs b/Toolbar/Toolbar/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5c85019 --- /dev/null +++ b/Toolbar/Toolbar/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Toolbar")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Toolbar")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("93a9bae5-28dd-43eb-b462-16fb7cd1eb17")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Toolbar/Toolbar/Properties/Resources.Designer.cs b/Toolbar/Toolbar/Properties/Resources.Designer.cs new file mode 100644 index 0000000..0c050f6 --- /dev/null +++ b/Toolbar/Toolbar/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Toolbar.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Toolbar.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Toolbar/Toolbar/Properties/Resources.resx b/Toolbar/Toolbar/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/Toolbar/Toolbar/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Toolbar/Toolbar/Properties/Settings.Designer.cs b/Toolbar/Toolbar/Properties/Settings.Designer.cs new file mode 100644 index 0000000..0008eb6 --- /dev/null +++ b/Toolbar/Toolbar/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Toolbar.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Toolbar/Toolbar/Properties/Settings.settings b/Toolbar/Toolbar/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/Toolbar/Toolbar/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Toolbar/Toolbar/ShellApi.cs b/Toolbar/Toolbar/ShellApi.cs new file mode 100644 index 0000000..abb9774 --- /dev/null +++ b/Toolbar/Toolbar/ShellApi.cs @@ -0,0 +1,630 @@ +using System; +using System.Text; +using System.Runtime.InteropServices; + + +namespace ShellLib +{ + public class ShellApi + { + public delegate Int32 BrowseCallbackProc(IntPtr hwnd, UInt32 uMsg, Int32 lParam, Int32 lpData); + + // Contains parameters for the SHBrowseForFolder function and receives information about the folder selected + // by the user. + [StructLayout(LayoutKind.Sequential)] + public struct BROWSEINFO + { + public IntPtr hwndOwner; // Handle to the owner window for the dialog box. + + public IntPtr pidlRoot; // Pointer to an item identifier list (PIDL) specifying the + // location of the root folder from which to start browsing. + + [MarshalAs(UnmanagedType.LPStr)] // Address of a buffer to receive the display name of the + public String pszDisplayName; // folder selected by the user. + + [MarshalAs(UnmanagedType.LPStr)] // Address of a null-terminated string that is displayed + public String lpszTitle; // above the tree view control in the dialog box. + + public UInt32 ulFlags; // Flags specifying the options for the dialog box. + + [MarshalAs(UnmanagedType.FunctionPtr)] // Address of an application-defined function that the + public BrowseCallbackProc lpfn; // dialog box calls when an event occurs. + + public Int32 lParam; // Application-defined value that the dialog box passes to + // the callback function + + public Int32 iImage; // Variable to receive the image associated with the selected folder. + } + + [StructLayout(LayoutKind.Explicit)] + public struct STRRET + { + [FieldOffset(0)] + public UInt32 uType; // One of the STRRET_* values + + [FieldOffset(4)] + public IntPtr pOleStr; // must be freed by caller of GetDisplayNameOf + + [FieldOffset(4)] + public IntPtr pStr; // NOT USED + + [FieldOffset(4)] + public UInt32 uOffset; // Offset into SHITEMID + + [FieldOffset(4)] + public IntPtr cStr; // Buffer to fill in (ANSI) + } + + // Contains information used by ShellExecuteEx + [StructLayout(LayoutKind.Sequential)] + public struct SHELLEXECUTEINFO + { + public UInt32 cbSize; // Size of the structure, in bytes. + public UInt32 fMask; // Array of flags that indicate the content and validity of the + // other structure members. + public IntPtr hwnd; // Window handle to any message boxes that the system might produce + // while executing this function. + [MarshalAs(UnmanagedType.LPWStr)] + public String lpVerb; // String, referred to as a verb, that specifies the action to + // be performed. + [MarshalAs(UnmanagedType.LPWStr)] + public String lpFile; // Address of a null-terminated string that specifies the name of + // the file or object on which ShellExecuteEx will perform the + // action specified by the lpVerb parameter. + [MarshalAs(UnmanagedType.LPWStr)] + public String lpParameters; // Address of a null-terminated string that contains the + // application parameters. + [MarshalAs(UnmanagedType.LPWStr)] + public String lpDirectory; // Address of a null-terminated string that specifies the name of + // the working directory. + public Int32 nShow; // Flags that specify how an application is to be shown when it + // is opened. + public IntPtr hInstApp; // If the function succeeds, it sets this member to a value + // greater than 32. + public IntPtr lpIDList; // Address of an ITEMIDLIST structure to contain an item identifier + // list uniquely identifying the file to execute. + [MarshalAs(UnmanagedType.LPWStr)] + public String lpClass; // Address of a null-terminated string that specifies the name of + // a file class or a globally unique identifier (GUID). + public IntPtr hkeyClass; // Handle to the registry key for the file class. + public UInt32 dwHotKey; // Hot key to associate with the application. + public IntPtr hIconMonitor; // Handle to the icon for the file class. OR Handle to the monitor + // upon which the document is to be displayed. + public IntPtr hProcess; // Handle to the newly started application. + } + + // Contains information that the SHFileOperation function uses to perform file operations. + [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)] + public struct SHFILEOPSTRUCT + { + public IntPtr hwnd; // Window handle to the dialog box to display information about the + // status of the file operation. + public UInt32 wFunc; // Value that indicates which operation to perform. + public IntPtr pFrom; // Address of a buffer to specify one or more source file names. + // These names must be fully qualified paths. Standard Microsoft + // MS-DOS wild cards, such as "*", are permitted in the file-name + // position. Although this member is declared as a null-terminated + // string, it is used as a buffer to hold multiple file names. Each + // file name must be terminated by a single NULL character. An + // additional NULL character must be appended to the end of the + // final name to indicate the end of pFrom. + public IntPtr pTo; // Address of a buffer to contain the name of the destination file or + // directory. This parameter must be set to NULL if it is not used. + // Like pFrom, the pTo member is also a double-null terminated + // string and is handled in much the same way. + public UInt16 fFlags; // Flags that control the file operation. + public Int32 fAnyOperationsAborted; // Value that receives TRUE if the user aborted any file operations + // before they were completed, or FALSE otherwise. + public IntPtr hNameMappings; // A handle to a name mapping object containing the old and new + // names of the renamed files. This member is used only if the + // fFlags member includes the FOF_WANTMAPPINGHANDLE flag. + [MarshalAs(UnmanagedType.LPWStr)] + public String lpszProgressTitle; // Address of a string to use as the title of a progress dialog box. + // This member is used only if fFlags includes the + // FOF_SIMPLEPROGRESS flag. + } + + + [StructLayout(LayoutKind.Sequential)] + public struct RECT + { + public Int32 left; + public Int32 top; + public Int32 right; + public Int32 bottom; + } + + [StructLayout(LayoutKind.Sequential)] + public struct APPBARDATA + { + public UInt32 cbSize; + public IntPtr hWnd; + public UInt32 uCallbackMessage; + public UInt32 uEdge; + public RECT rc; + public Int32 lParam; + } + + // Retrieves a pointer to the Shell's IMalloc interface. + [DllImport("shell32.dll")] + public static extern Int32 SHGetMalloc( + out IntPtr hObject); // Address of a pointer that receives the Shell's IMalloc interface pointer. + + // Retrieves the path of a folder as an PIDL. + [DllImport("shell32.dll")] + public static extern Int32 SHGetFolderLocation( + IntPtr hwndOwner, // Handle to the owner window. + Int32 nFolder, // A CSIDL value that identifies the folder to be located. + IntPtr hToken, // Token that can be used to represent a particular user. + UInt32 dwReserved, // Reserved. + out IntPtr ppidl); // Address of a pointer to an item identifier list structure + // specifying the folder's location relative to the root of the namespace + // (the desktop). + + // Converts an item identifier list to a file system path. + [DllImport("shell32.dll")] + public static extern Int32 SHGetPathFromIDList( + IntPtr pidl, // Address of an item identifier list that specifies a file or directory location + // relative to the root of the namespace (the desktop). + StringBuilder pszPath); // Address of a buffer to receive the file system path. + + + // Takes the CSIDL of a folder and returns the pathname. + [DllImport("shell32.dll")] + public static extern Int32 SHGetFolderPath( + IntPtr hwndOwner, // Handle to an owner window. + Int32 nFolder, // A CSIDL value that identifies the folder whose path is to be retrieved. + IntPtr hToken, // An access token that can be used to represent a particular user. + UInt32 dwFlags, // Flags to specify which path is to be returned. It is used for cases where + // the folder associated with a CSIDL may be moved or renamed by the user. + StringBuilder pszPath); // Pointer to a null-terminated string which will receive the path. + + // Translates a Shell namespace object's display name into an item identifier list and returns the attributes + // of the object. This function is the preferred method to convert a string to a pointer to an item + // identifier list (PIDL). + [DllImport("shell32.dll")] + public static extern Int32 SHParseDisplayName( + [MarshalAs(UnmanagedType.LPWStr)] + String pszName, // Pointer to a zero-terminated wide string that contains the display name + // to parse. + IntPtr pbc, // Optional bind context that controls the parsing operation. This parameter + // is normally set to NULL. + out IntPtr ppidl, // Address of a pointer to a variable of type ITEMIDLIST that receives the item + // identifier list for the object. + UInt32 sfgaoIn, // ULONG value that specifies the attributes to query. + out UInt32 psfgaoOut); // Pointer to a ULONG. On return, those attributes that are true for the + // object and were requested in sfgaoIn will be set. + + + // Retrieves the IShellFolder interface for the desktop folder, which is the root of the Shell's namespace. + [DllImport("shell32.dll")] + public static extern Int32 SHGetDesktopFolder( + out IntPtr ppshf); // Address that receives an IShellFolder interface pointer for the + // desktop folder. + + // This function takes the fully-qualified pointer to an item identifier list (PIDL) of a namespace object, + // and returns a specified interface pointer on the parent object. + [DllImport("shell32.dll")] + public static extern Int32 SHBindToParent( + IntPtr pidl, // The item's PIDL. + [MarshalAs(UnmanagedType.LPStruct)] + Guid riid, // The REFIID of one of the interfaces exposed by the item's parent object. + out IntPtr ppv, // A pointer to the interface specified by riid. You must release the object when + // you are finished. + ref IntPtr ppidlLast); // The item's PIDL relative to the parent folder. This PIDL can be used with many + // of the methods supported by the parent folder's interfaces. If you set ppidlLast + // to NULL, the PIDL will not be returned. + + // Accepts a STRRET structure returned by IShellFolder::GetDisplayNameOf that contains or points to a + // string, and then returns that string as a BSTR. + [DllImport("shlwapi.dll")] + public static extern Int32 StrRetToBSTR( + ref STRRET pstr, // Pointer to a STRRET structure. + IntPtr pidl, // Pointer to an ITEMIDLIST uniquely identifying a file object or subfolder relative + // to the parent folder. + [MarshalAs(UnmanagedType.BStr)] + out String pbstr); // Pointer to a variable of type BSTR that contains the converted string. + + // Takes a STRRET structure returned by IShellFolder::GetDisplayNameOf, converts it to a string, and + // places the result in a buffer. + [DllImport("shlwapi.dll")] + public static extern Int32 StrRetToBuf( + ref STRRET pstr, // Pointer to the STRRET structure. When the function returns, this pointer will no + // longer be valid. + IntPtr pidl, // Pointer to the item's ITEMIDLIST structure. + StringBuilder pszBuf, // Buffer to hold the display name. It will be returned as a null-terminated + // string. If cchBuf is too small, the name will be truncated to fit. + UInt32 cchBuf); // Size of pszBuf, in characters. If cchBuf is too small, the string will be + // truncated to fit. + + + + // Displays a dialog box that enables the user to select a Shell folder. + [DllImport("shell32.dll")] + public static extern IntPtr SHBrowseForFolder( + ref BROWSEINFO lbpi); // Pointer to a BROWSEINFO structure that contains information used to display + // the dialog box. + + // Performs an operation on a specified file. + [DllImport("shell32.dll")] + public static extern IntPtr ShellExecute( + IntPtr hwnd, // Handle to a parent window. + [MarshalAs(UnmanagedType.LPStr)] + String lpOperation, // Pointer to a null-terminated string, referred to in this case as a verb, + // that specifies the action to be performed. + [MarshalAs(UnmanagedType.LPStr)] + String lpFile, // Pointer to a null-terminated string that specifies the file or object on which + // to execute the specified verb. + [MarshalAs(UnmanagedType.LPStr)] + String lpParameters, // If the lpFile parameter specifies an executable file, lpParameters is a pointer + // to a null-terminated string that specifies the parameters to be passed + // to the application. + [MarshalAs(UnmanagedType.LPStr)] + String lpDirectory, // Pointer to a null-terminated string that specifies the default directory. + Int32 nShowCmd); // Flags that specify how an application is to be displayed when it is opened. + + // Performs an action on a file. + [DllImport("shell32.dll")] + public static extern Int32 ShellExecuteEx( + ref SHELLEXECUTEINFO lpExecInfo); // Address of a SHELLEXECUTEINFO structure that contains and receives + // information about the application being executed. + + // Copies, moves, renames, or deletes a file system object. + [DllImport("shell32.dll" , CharSet = CharSet.Unicode)] + public static extern Int32 SHFileOperation( + ref SHFILEOPSTRUCT lpFileOp); // Address of an SHFILEOPSTRUCT structure that contains information + // this function needs to carry out the specified operation. This + // parameter must contain a valid value that is not NULL. You are + // responsibile for validating the value. If you do not validate it, + // you will experience unexpected results. + + // Notifies the system of an event that an application has performed. An application should use this function + // if it performs an action that may affect the Shell. + [DllImport("shell32.dll")] + public static extern void SHChangeNotify( + UInt32 wEventId, // Describes the event that has occurred. the + // ShellChangeNotificationEvents enum contains a list of options. + UInt32 uFlags, // Flags that indicate the meaning of the dwItem1 and dwItem2 parameters. + IntPtr dwItem1, // First event-dependent value. + IntPtr dwItem2); // Second event-dependent value. + + // Adds a document to the Shell's list of recently used documents or clears all documents from the list. + [DllImport("shell32.dll")] + public static extern void SHAddToRecentDocs( + UInt32 uFlags, // Flag that indicates the meaning of the pv parameter. + IntPtr pv); // A pointer to either a null-terminated string with the path and file name + // of the document, or a PIDL that identifies the document's file object. + // Set this parameter to NULL to clear all documents from the list. + [DllImport("shell32.dll")] + public static extern void SHAddToRecentDocs( + UInt32 uFlags, + [MarshalAs(UnmanagedType.LPWStr)] + String pv); + + // Executes a command on a printer object. + [DllImport("shell32.dll")] + public static extern Int32 SHInvokePrinterCommand( + IntPtr hwnd, // Handle of the window that will be used as the parent of any windows + // or dialog boxes that are created during the operation. + UInt32 uAction, // A value that determines the type of printer operation that will be + // performed. + [MarshalAs(UnmanagedType.LPWStr)] + String lpBuf1, // Address of a null_terminated string that contains additional + // information for the printer command. + [MarshalAs(UnmanagedType.LPWStr)] + String lpBuf2, // Address of a null-terminated string that contains additional + // information for the printer command. + Int32 fModal); // value that determines whether SHInvokePrinterCommand should return + // after initializing the command or wait until the command is completed. + + + // Sends an appbar message to the system. + [DllImport("shell32.dll")] + public static extern UInt32 SHAppBarMessage( + UInt32 dwMessage, // Appbar message value to send. + ref APPBARDATA pData); // Address of an APPBARDATA structure. The content of the structure + // depends on the value set in the dwMessage parameter. + + + // The RegisterWindowMessage function defines a new window message that is guaranteed to be unique throughout + // the system. The message value can be used when sending or posting messages. + [DllImport("user32.dll")] + public static extern UInt32 RegisterWindowMessage( + [MarshalAs(UnmanagedType.LPTStr)] + String lpString); // Pointer to a null-terminated string that specifies the message to be registered. + + public static Int16 GetHResultCode(Int32 hr) + { + hr = hr & 0x0000ffff; + return (Int16)hr; + } + + + public enum CSIDL + { + CSIDL_FLAG_CREATE = (0x8000), // Version 5.0. Combine this CSIDL with any of the following + //CSIDLs to force the creation of the associated folder. + CSIDL_ADMINTOOLS = (0x0030), // Version 5.0. The file system directory that is used to store + // administrative tools for an individual user. The Microsoft + // Management Console (MMC) will save customized consoles to + // this directory, and it will roam with the user. + CSIDL_ALTSTARTUP = (0x001d), // The file system directory that corresponds to the user's + // nonlocalized Startup program group. + CSIDL_APPDATA = (0x001a), // Version 4.71. The file system directory that serves as a + // common repository for application-specific data. A typical + // path is C:\Documents and Settings\username\Application Data. + // This CSIDL is supported by the redistributable Shfolder.dll + // for systems that do not have the Microsoft Internet + // Explorer 4.0 integrated Shell installed. + CSIDL_BITBUCKET = (0x000a), // The virtual folder containing the objects in the user's + // Recycle Bin. + CSIDL_CDBURN_AREA = (0x003b), // Version 6.0. The file system directory acting as a staging + // area for files waiting to be written to CD. A typical path + // is C:\Documents and Settings\username\Local Settings\ + // Application Data\Microsoft\CD Burning. + CSIDL_COMMON_ADMINTOOLS = (0x002f), // Version 5.0. The file system directory containing + // administrative tools for all users of the computer. + CSIDL_COMMON_ALTSTARTUP = (0x001e), // The file system directory that corresponds to the + // nonlocalized Startup program group for all users. Valid only + // for Microsoft Windows NT systems. + CSIDL_COMMON_APPDATA = (0x0023), // Version 5.0. The file system directory containing application + // data for all users. A typical path is C:\Documents and + // Settings\All Users\Application Data. + CSIDL_COMMON_DESKTOPDIRECTORY = (0x0019), // The file system directory that contains files and folders + // that appear on the desktop for all users. A typical path is + // C:\Documents and Settings\All Users\Desktop. Valid only for + // Windows NT systems. + CSIDL_COMMON_DOCUMENTS = (0x002e), // The file system directory that contains documents that are + // common to all users. A typical paths is C:\Documents and + // Settings\All Users\Documents. Valid for Windows NT systems + // and Microsoft Windows 95 and Windows 98 systems with + // Shfolder.dll installed. + CSIDL_COMMON_FAVORITES = (0x001f), // The file system directory that serves as a common repository + // for favorite items common to all users. Valid only for + // Windows NT systems. + CSIDL_COMMON_MUSIC = (0x0035), // Version 6.0. The file system directory that serves as a + // repository for music files common to all users. A typical + // path is C:\Documents and Settings\All Users\Documents\ + // My Music. + CSIDL_COMMON_PICTURES = (0x0036), // Version 6.0. The file system directory that serves as a + // repository for image files common to all users. A typical + // path is C:\Documents and Settings\All Users\Documents\ + // My Pictures. + CSIDL_COMMON_PROGRAMS = (0x0017), // The file system directory that contains the directories for + // the common program groups that appear on the Start menu for + // all users. A typical path is C:\Documents and Settings\ + // All Users\Start Menu\Programs. Valid only for Windows NT + // systems. + CSIDL_COMMON_STARTMENU = (0x0016), // The file system directory that contains the programs and + // folders that appear on the Start menu for all users. A + // typical path is C:\Documents and Settings\All Users\ + // Start Menu. Valid only for Windows NT systems. + CSIDL_COMMON_STARTUP = (0x0018), // The file system directory that contains the programs that + // appear in the Startup folder for all users. A typical path + // is C:\Documents and Settings\All Users\Start Menu\Programs\ + // Startup. Valid only for Windows NT systems. + CSIDL_COMMON_TEMPLATES = (0x002d), // The file system directory that contains the templates that + // are available to all users. A typical path is C:\Documents + // and Settings\All Users\Templates. Valid only for Windows + // NT systems. + CSIDL_COMMON_VIDEO = (0x0037), // Version 6.0. The file system directory that serves as a + // repository for video files common to all users. A typical + // path is C:\Documents and Settings\All Users\Documents\ + // My Videos. + CSIDL_CONTROLS = (0x0003), // The virtual folder containing icons for the Control Panel + // applications. + CSIDL_COOKIES = (0x0021), // The file system directory that serves as a common repository + // for Internet cookies. A typical path is C:\Documents and + // Settings\username\Cookies. + CSIDL_DESKTOP = (0x0000), // The virtual folder representing the Windows desktop, the root + // of the namespace. + CSIDL_DESKTOPDIRECTORY = (0x0010), // The file system directory used to physically store file + // objects on the desktop (not to be confused with the desktop + // folder itself). A typical path is C:\Documents and + // Settings\username\Desktop. + CSIDL_DRIVES = (0x0011), // The virtual folder representing My Computer, containing + // everything on the local computer: storage devices, printers, + // and Control Panel. The folder may also contain mapped + // network drives. + CSIDL_FAVORITES = (0x0006), // The file system directory that serves as a common repository + // for the user's favorite items. A typical path is C:\Documents + // and Settings\username\Favorites. + CSIDL_FONTS = (0x0014), // A virtual folder containing fonts. A typical path is + // C:\Windows\Fonts. + CSIDL_HISTORY = (0x0022), // The file system directory that serves as a common repository + // for Internet history items. + CSIDL_INTERNET = (0x0001), // A virtual folder representing the Internet. + CSIDL_INTERNET_CACHE = (0x0020), // Version 4.72. The file system directory that serves as a + // common repository for temporary Internet files. A typical + // path is C:\Documents and Settings\username\Local Settings\ + // Temporary Internet Files. + CSIDL_LOCAL_APPDATA = (0x001c), // Version 5.0. The file system directory that serves as a data + // repository for local (nonroaming) applications. A typical + // path is C:\Documents and Settings\username\Local Settings\ + // Application Data. + CSIDL_MYDOCUMENTS = (0x000c), // Version 6.0. The virtual folder representing the My Documents + // desktop item. This should not be confused with + // CSIDL_PERSONAL, which represents the file system folder that + // physically stores the documents. + CSIDL_MYMUSIC = (0x000d), // The file system directory that serves as a common repository + // for music files. A typical path is C:\Documents and Settings + // \User\My Documents\My Music. + CSIDL_MYPICTURES = (0x0027), // Version 5.0. The file system directory that serves as a + // common repository for image files. A typical path is + // C:\Documents and Settings\username\My Documents\My Pictures. + CSIDL_MYVIDEO = (0x000e), // Version 6.0. The file system directory that serves as a + // common repository for video files. A typical path is + // C:\Documents and Settings\username\My Documents\My Videos. + CSIDL_NETHOOD = (0x0013), // A file system directory containing the link objects that may + // exist in the My Network Places virtual folder. It is not the + // same as CSIDL_NETWORK, which represents the network namespace + // root. A typical path is C:\Documents and Settings\username\ + // NetHood. + CSIDL_NETWORK = (0x0012), // A virtual folder representing Network Neighborhood, the root + // of the network namespace hierarchy. + CSIDL_PERSONAL = (0x0005), // The file system directory used to physically store a user's + // common repository of documents. A typical path is + // C:\Documents and Settings\username\My Documents. This should + // be distinguished from the virtual My Documents folder in + // the namespace, identified by CSIDL_MYDOCUMENTS. + CSIDL_PRINTERS = (0x0004), // The virtual folder containing installed printers. + CSIDL_PRINTHOOD = (0x001b), // The file system directory that contains the link objects that + // can exist in the Printers virtual folder. A typical path is + // C:\Documents and Settings\username\PrintHood. + CSIDL_PROFILE = (0x0028), // Version 5.0. The user's profile folder. A typical path is + // C:\Documents and Settings\username. Applications should not + // create files or folders at this level; they should put their + // data under the locations referred to by CSIDL_APPDATA or + // CSIDL_LOCAL_APPDATA. + CSIDL_PROFILES = (0x003e), // Version 6.0. The file system directory containing user + // profile folders. A typical path is C:\Documents and Settings. + CSIDL_PROGRAM_FILES = (0x0026), // Version 5.0. The Program Files folder. A typical path is + // C:\Program Files. + CSIDL_PROGRAM_FILES_COMMON = (0x002b), // Version 5.0. A folder for components that are shared across + // applications. A typical path is C:\Program Files\Common. + // Valid only for Windows NT, Windows 2000, and Windows XP + // systems. Not valid for Windows Millennium Edition + // (Windows Me). + CSIDL_PROGRAMS = (0x0002), // The file system directory that contains the user's program + // groups (which are themselves file system directories). + // A typical path is C:\Documents and Settings\username\ + // Start Menu\Programs. + CSIDL_RECENT = (0x0008), // The file system directory that contains shortcuts to the + // user's most recently used documents. A typical path is + // C:\Documents and Settings\username\My Recent Documents. + // To create a shortcut in this folder, use SHAddToRecentDocs. + // In addition to creating the shortcut, this function updates + // the Shell's list of recent documents and adds the shortcut + // to the My Recent Documents submenu of the Start menu. + CSIDL_SENDTO = (0x0009), // The file system directory that contains Send To menu items. + // A typical path is C:\Documents and Settings\username\SendTo. + CSIDL_STARTMENU = (0x000b), // The file system directory containing Start menu items. A + // typical path is C:\Documents and Settings\username\Start Menu. + CSIDL_STARTUP = (0x0007), // The file system directory that corresponds to the user's + // Startup program group. The system starts these programs + // whenever any user logs onto Windows NT or starts Windows 95. + // A typical path is C:\Documents and Settings\username\ + // Start Menu\Programs\Startup. + CSIDL_SYSTEM = (0x0025), // Version 5.0. The Windows System folder. A typical path is + // C:\Windows\System32. + CSIDL_TEMPLATES = (0x0015), // The file system directory that serves as a common repository + // for document templates. A typical path is C:\Documents + // and Settings\username\Templates. + CSIDL_WINDOWS = (0x0024), // Version 5.0. The Windows directory or SYSROOT. This + // corresponds to the %windir% or %SYSTEMROOT% environment + // variables. A typical path is C:\Windows. + } + + public enum SHGFP_TYPE + { + SHGFP_TYPE_CURRENT = 0, // current value for user, verify it exists + SHGFP_TYPE_DEFAULT = 1 // default value, may not exist + } + + public enum SFGAO : uint + { + SFGAO_CANCOPY = 0x00000001, // Objects can be copied + SFGAO_CANMOVE = 0x00000002, // Objects can be moved + SFGAO_CANLINK = 0x00000004, // Objects can be linked + SFGAO_STORAGE = 0x00000008, // supports BindToObject(IID_IStorage) + SFGAO_CANRENAME = 0x00000010, // Objects can be renamed + SFGAO_CANDELETE = 0x00000020, // Objects can be deleted + SFGAO_HASPROPSHEET = 0x00000040, // Objects have property sheets + SFGAO_DROPTARGET = 0x00000100, // Objects are drop target + SFGAO_CAPABILITYMASK = 0x00000177, // This flag is a mask for the capability flags. + SFGAO_ENCRYPTED = 0x00002000, // object is encrypted (use alt color) + SFGAO_ISSLOW = 0x00004000, // 'slow' object + SFGAO_GHOSTED = 0x00008000, // ghosted icon + SFGAO_LINK = 0x00010000, // Shortcut (link) + SFGAO_SHARE = 0x00020000, // shared + SFGAO_READONLY = 0x00040000, // read-only + SFGAO_HIDDEN = 0x00080000, // hidden object + SFGAO_DISPLAYATTRMASK = 0x000FC000, // This flag is a mask for the display attributes. + SFGAO_FILESYSANCESTOR = 0x10000000, // may contain children with SFGAO_FILESYSTEM + SFGAO_FOLDER = 0x20000000, // support BindToObject(IID_IShellFolder) + SFGAO_FILESYSTEM = 0x40000000, // is a win32 file system object (file/folder/root) + SFGAO_HASSUBFOLDER = 0x80000000, // may contain children with SFGAO_FOLDER + SFGAO_CONTENTSMASK = 0x80000000, // This flag is a mask for the contents attributes. + SFGAO_VALIDATE = 0x01000000, // invalidate cached information + SFGAO_REMOVABLE = 0x02000000, // is this removeable media? + SFGAO_COMPRESSED = 0x04000000, // Object is compressed (use alt color) + SFGAO_BROWSABLE = 0x08000000, // supports IShellFolder, but only implements CreateViewObject() (non-folder view) + SFGAO_NONENUMERATED = 0x00100000, // is a non-enumerated object + SFGAO_NEWCONTENT = 0x00200000, // should show bold in explorer tree + SFGAO_CANMONIKER = 0x00400000, // defunct + SFGAO_HASSTORAGE = 0x00400000, // defunct + SFGAO_STREAM = 0x00400000, // supports BindToObject(IID_IStream) + SFGAO_STORAGEANCESTOR = 0x00800000, // may contain children with SFGAO_STORAGE or SFGAO_STREAM + SFGAO_STORAGECAPMASK = 0x70C50008 // for determining storage capabilities, ie for open/save semantics + + } + + public enum SHCONTF + { + SHCONTF_FOLDERS = 0x0020, // only want folders enumerated (SFGAO_FOLDER) + SHCONTF_NONFOLDERS = 0x0040, // include non folders + SHCONTF_INCLUDEHIDDEN = 0x0080, // show items normally hidden + SHCONTF_INIT_ON_FIRST_NEXT = 0x0100, // allow EnumObject() to return before validating enum + SHCONTF_NETPRINTERSRCH = 0x0200, // hint that client is looking for printers + SHCONTF_SHAREABLE = 0x0400, // hint that client is looking sharable resources (remote shares) + SHCONTF_STORAGE = 0x0800, // include all items with accessible storage and their ancestors + } + + public enum SHCIDS : uint + { + SHCIDS_ALLFIELDS = 0x80000000, // Compare all the information contained in the ITEMIDLIST + // structure, not just the display names + SHCIDS_CANONICALONLY = 0x10000000, // When comparing by name, compare the system names but not the + // display names. + SHCIDS_BITMASK = 0xFFFF0000, + SHCIDS_COLUMNMASK = 0x0000FFFF + } + + public enum SHGNO + { + SHGDN_NORMAL = 0x0000, // default (display purpose) + SHGDN_INFOLDER = 0x0001, // displayed under a folder (relative) + SHGDN_FOREDITING = 0x1000, // for in-place editing + SHGDN_FORADDRESSBAR = 0x4000, // UI friendly parsing name (remove ugly stuff) + SHGDN_FORPARSING = 0x8000 // parsing name for ParseDisplayName() + } + + public enum STRRET_TYPE + { + STRRET_WSTR = 0x0000, // Use STRRET.pOleStr + STRRET_OFFSET = 0x0001, // Use STRRET.uOffset to Ansi + STRRET_CSTR = 0x0002 // Use STRRET.cStr + } + + + public enum PrinterActions + { + PRINTACTION_OPEN = 0, // The printer specified by the name in lpBuf1 will be opened. + // lpBuf2 is ignored. + PRINTACTION_PROPERTIES = 1, // The properties for the printer specified by the name in lpBuf1 + // will be displayed. lpBuf2 can either be NULL or specify. + PRINTACTION_NETINSTALL = 2, // The network printer specified by the name in lpBuf1 will be + // installed. lpBuf2 is ignored. + PRINTACTION_NETINSTALLLINK = 3, // A shortcut to the network printer specified by the name in lpBuf1 + // will be created. lpBuf2 specifies the drive and path of the folder + // in which the shortcut will be created. The network printer must + // have already been installed on the local computer. + PRINTACTION_TESTPAGE = 4, // A test page will be printed on the printer specified by the name + // in lpBuf1. lpBuf2 is ignored. + PRINTACTION_OPENNETPRN = 5, // The network printer specified by the name in lpBuf1 will be + // opened. lpBuf2 is ignored. + PRINTACTION_DOCUMENTDEFAULTS = 6, // Microsoft Windows NT only. The default document properties for + // the printer specified by the name in lpBuf1 will be displayed. + // lpBuf2 is ignored. + PRINTACTION_SERVERPROPERTIES = 7 // Windows NT only. The properties for the server of the printer + // specified by the name in lpBuf1 will be displayed. lpBuf2 + // is ignored. + } + + + } + + +} + + diff --git a/Toolbar/Toolbar/Toolbar.csproj b/Toolbar/Toolbar/Toolbar.csproj new file mode 100644 index 0000000..7c9fefc --- /dev/null +++ b/Toolbar/Toolbar/Toolbar.csproj @@ -0,0 +1,82 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {570520DD-9854-4AAB-92E2-85FC6A06C596} + WinExe + Properties + Toolbar + Toolbar + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + \ No newline at end of file diff --git a/UI/AssemblyInfo.cs b/UI/AssemblyInfo.cs new file mode 100644 index 0000000..dbacda1 --- /dev/null +++ b/UI/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/UI/DynaDis.MainForm.resources b/UI/DynaDis.MainForm.resources new file mode 100644 index 0000000..c5603bb Binary files /dev/null and b/UI/DynaDis.MainForm.resources differ diff --git a/UI/DynaDis.cs b/UI/DynaDis.cs new file mode 100644 index 0000000..7ccbd1b --- /dev/null +++ b/UI/DynaDis.cs @@ -0,0 +1,244 @@ +/* aputze */ + +using System; +using System.Collections; + +using System.Data; +using System.Data.SqlClient; + +namespace DynaDis { + public delegate void ProgressHandler(int progress); + + public class DynaDis { + public string dataSource="localhost"; + public string initialCatalog="DynaDis"; + + public TimeSpan minWaiting=new TimeSpan(0,5,0); + public TimeSpan maxWaiting=new TimeSpan(0,15,0); + + public TimeSpan maxTouring=new TimeSpan(8,0,0); + + public int day=1; + + public DataSet dataSet; + + protected DataTable trainTable; + protected DataTable deviceTable; + protected DataTable employeeTable; + + protected SqlConnection connection; + protected SqlDataAdapter dataAdapter1; //TrainTable + protected SqlDataAdapter dataAdapter2; //DeviceTable + protected SqlDataAdapter dataAdapter3; //EmployeeTable + + protected Hashtable A; + + protected ArrayList T; + protected ArrayList t; + + public DynaDis() { + dataSet=new DataSet("DynaDis"); + + trainTable=dataSet.Tables.Add("TrainTable"); + deviceTable=dataSet.Tables.Add("DeviceTable"); + employeeTable=dataSet.Tables.Add("EmployeeTable"); + } + + public void Connect() { + connection=new SqlConnection("Data Source="+dataSource+";"+ + "Initial Catalog="+initialCatalog+";"+ + "Integrated Security=true;"); + connection.Open(); + } + public void Disconnect() { + connection.Close(); + } + + public void Prepare() { + dataAdapter1=new SqlDataAdapter("SELECT * FROM TrainTable WHERE (Available & "+day+")=1", connection); + + dataAdapter1.UpdateCommand=new SqlCommand("UPDATE TrainTable SET "+ + "Departure=@1,DepartureStation=@2,"+ + "Arrival=@3,ArrivalStation=@4,"+ + "Available=@5,"+ + "ToDo=@6,Done=@7"+ + " WHERE TrainId=@0", connection); + dataAdapter1.UpdateCommand.Parameters.Add("@0",SqlDbType.Int,4,"TrainId"); + dataAdapter1.UpdateCommand.Parameters.Add("@1",SqlDbType.DateTime,8,"Departure"); + dataAdapter1.UpdateCommand.Parameters.Add("@2",SqlDbType.VarChar,50,"DepartureStation"); + dataAdapter1.UpdateCommand.Parameters.Add("@3",SqlDbType.DateTime,8,"Arrival"); + dataAdapter1.UpdateCommand.Parameters.Add("@4",SqlDbType.VarChar,50,"ArrivalStation"); + dataAdapter1.UpdateCommand.Parameters.Add("@5",SqlDbType.Int,4,"Available"); + dataAdapter1.UpdateCommand.Parameters.Add("@6",SqlDbType.Int,4,"ToDo"); + dataAdapter1.UpdateCommand.Parameters.Add("@7",SqlDbType.Int,4,"Done"); + + dataAdapter1.InsertCommand=new SqlCommand("INSERT INTO TrainTable "+ + "(Departure,DepartureStation,"+ + "Arrival,ArrivalStation,"+ + "Available,"+ + "ToDo,Done)"+ + " VALUES "+ + "(@0,@1,@2,@3,@4,@5,@6)", connection); + dataAdapter1.InsertCommand.Parameters.Add("@0",SqlDbType.DateTime,8,"Departure"); + dataAdapter1.InsertCommand.Parameters.Add("@1",SqlDbType.VarChar,50,"DepartureStation"); + dataAdapter1.InsertCommand.Parameters.Add("@2",SqlDbType.DateTime,8,"Arrival"); + dataAdapter1.InsertCommand.Parameters.Add("@3",SqlDbType.VarChar,50,"ArrivalStation"); + dataAdapter1.InsertCommand.Parameters.Add("@4",SqlDbType.Int,4,"Available"); + dataAdapter1.InsertCommand.Parameters.Add("@5",SqlDbType.Int,4,"ToDo"); + dataAdapter1.InsertCommand.Parameters.Add("@6",SqlDbType.Int,4,"Done"); + + dataAdapter1.DeleteCommand=new SqlCommand("DELETE FROM TrainTable WHERE TrainId=@0", connection); + dataAdapter1.DeleteCommand.Parameters.Add("@0",SqlDbType.Int,4,"TrainId"); + + dataAdapter2=new SqlDataAdapter("SELECT * FROM DeviceTable WHERE (Available & "+day+")=1", connection); + + dataAdapter2.UpdateCommand=new SqlCommand("UPDATE DeviceTable SET "+ + "Vendor=@1,Model=@2,"+ + "Available=@3"+ + " WHERE DeviceId=@0", connection); + dataAdapter2.UpdateCommand.Parameters.Add("@0",SqlDbType.Int,4,"DeviceId"); + dataAdapter2.UpdateCommand.Parameters.Add("@1",SqlDbType.VarChar,50,"Vendor"); + dataAdapter2.UpdateCommand.Parameters.Add("@2",SqlDbType.VarChar,50,"Model"); + dataAdapter2.UpdateCommand.Parameters.Add("@3",SqlDbType.Int,4,"Available"); + + dataAdapter2.InsertCommand=new SqlCommand("INSERT INTO DeviceTable "+ + "(Vendor,Model,Available)"+ + " VALUES "+ + "(@0,@1,@2)", connection); + dataAdapter2.InsertCommand.Parameters.Add("@0",SqlDbType.VarChar,50,"Vendor"); + dataAdapter2.InsertCommand.Parameters.Add("@1",SqlDbType.VarChar,50,"Model"); + dataAdapter2.InsertCommand.Parameters.Add("@2",SqlDbType.Int,4,"Available"); + + dataAdapter2.DeleteCommand=new SqlCommand("DELETE FROM DeviceTable WHERE DeviceId=@0", connection); + dataAdapter2.DeleteCommand.Parameters.Add("@0",SqlDbType.Int,4,"DeviceId"); + + dataAdapter3=new SqlDataAdapter("SELECT * FROM EmployeeTable WHERE (Available & "+day+")=1", connection); + + dataAdapter3.UpdateCommand=new SqlCommand("UPDATE EmployeeTable SET "+ + "DeviceId=@1,"+ + "Name=@2,Address=@3,"+ + "Station=@4,Available=@5"+ + " WHERE EmployeeId=@0", connection); + dataAdapter3.UpdateCommand.Parameters.Add("@0",SqlDbType.Int,4,"EmployeeId"); + dataAdapter3.UpdateCommand.Parameters.Add("@1",SqlDbType.Int,4,"DeviceId"); + dataAdapter3.UpdateCommand.Parameters.Add("@2",SqlDbType.VarChar,50,"Name"); + dataAdapter3.UpdateCommand.Parameters.Add("@3",SqlDbType.VarChar,50,"Address"); + dataAdapter3.UpdateCommand.Parameters.Add("@4",SqlDbType.VarChar,50,"Station"); + dataAdapter3.UpdateCommand.Parameters.Add("@5",SqlDbType.Int,4,"Available"); + + dataAdapter3.InsertCommand=new SqlCommand("INSERT INTO EmployeeTable "+ + "(DeviceId,"+ + "Name,Address,"+ + "Station,Available)"+ + " VALUES "+ + "(@0,@1,@2,@3,@4)", connection); + dataAdapter3.InsertCommand.Parameters.Add("@0",SqlDbType.Int,4,"DeviceId"); + dataAdapter3.InsertCommand.Parameters.Add("@1",SqlDbType.VarChar,50,"Name"); + dataAdapter3.InsertCommand.Parameters.Add("@2",SqlDbType.VarChar,50,"Address"); + dataAdapter3.InsertCommand.Parameters.Add("@3",SqlDbType.VarChar,50,"Station"); + dataAdapter3.InsertCommand.Parameters.Add("@4",SqlDbType.Int,4,"Available"); + + dataAdapter3.DeleteCommand=new SqlCommand("DELETE FROM EmployeeTable WHERE EmployeeId=@0", connection); + dataAdapter3.DeleteCommand.Parameters.Add("@0",SqlDbType.Int,4,"EmployeeId"); + } + + public void Fill() { + dataSet.Clear(); + + dataAdapter1.FillSchema(dataSet,SchemaType.Source,"TrainTable"); + dataAdapter1.Fill(dataSet,"TrainTable"); + dataAdapter2.FillSchema(dataSet,SchemaType.Source,"DeviceTable"); + dataAdapter2.Fill(dataSet,"DeviceTable"); + dataAdapter3.FillSchema(dataSet,SchemaType.Source,"EmployeeTable"); + dataAdapter3.Fill(dataSet,"EmployeeTable"); + } + public void Update() { + dataAdapter1.Update(dataSet,"TrainTable"); + dataAdapter2.Update(dataSet,"DeviceTable"); + dataAdapter3.Update(dataSet,"EmployeeTable"); + } + + public event ProgressHandler selectProgress; + public void Select() { + if(selectProgress!=null) { selectProgress(0); } + + DateTime dateTime1=DateTime.Now; + Create_A(); + DateTime dateTime2=DateTime.Now; + Create_T(); + DateTime dateTime3=DateTime.Now; + Create_t(); + DateTime dateTime4=DateTime.Now; + + Console.WriteLine("Create_A() {0}",dateTime2-dateTime1); + Console.WriteLine("Create_T() {0}",dateTime3-dateTime2); + Console.WriteLine("Create_t() {0}",dateTime4-dateTime3); + + Console.WriteLine("|T|={0}",T.Count); + Console.WriteLine("|t|={0}",t.Count); + + if(selectProgress!=null) { selectProgress(100); } + } + + protected void Create_A() { + A=new Hashtable(); + + foreach(DataRow trainRow1 in trainTable.Rows) { + foreach(DataRow trainRow2 in trainTable.Rows) { + if((string)trainRow2["DepartureStation"]==(string)trainRow1["ArrivalStation"] && + ((DateTime)trainRow2["Departure"]-(DateTime)trainRow1["Arrival"])>=minWaiting && + ((DateTime)trainRow2["Departure"]-(DateTime)trainRow1["Arrival"])<=maxWaiting) { + + if(!A.Contains(trainRow1["TrainId"])) { + A.Add(trainRow1["TrainId"],new ArrayList()); + } + ((ArrayList)A[trainRow1["TrainId"]]).Add(trainRow2); + } + } + } + } + + protected void Create_T() { + T=new ArrayList(); + + foreach(DataRow employeeRow in employeeTable.Rows) { + ArrayList T1=new ArrayList(); + ArrayList T2=new ArrayList(); + + foreach(DataRow trainRow1 in trainTable.Rows) { + if((string)trainRow1["DepartureStation"]==(string)employeeRow["Station"]) { + ArrayList tour1=new ArrayList(); + tour1.Add(trainRow1); T1.Add(tour1); + } + } + + while(T1.Count>0) { + foreach(ArrayList tour1 in T1) { + DataRow trainRow0=(DataRow)tour1[0]; + DataRow trainRow1=(DataRow)tour1[tour1.Count-1]; + + try { + foreach(DataRow trainRow2 in (ArrayList)A[trainRow1["TrainId"]]) { + if(((DateTime)trainRow2["Arrival"]-(DateTime)trainRow0["Departure"])<=maxTouring) { + ArrayList tour2=(ArrayList)tour1.Clone(); + tour2.Add(trainRow2); T2.Add(tour2); + + if((string)trainRow2["ArrivalStation"]==(string)employeeRow["Station"]) { + T.Add(tour2); + } + } + } + } catch { continue; } + } + + T1=T2; + T2=new ArrayList(); + } + } + } + + protected void Create_t() { + t=new ArrayList(); + } + } +} diff --git a/UI/MainForm.cs b/UI/MainForm.cs new file mode 100644 index 0000000..0e5c000 --- /dev/null +++ b/UI/MainForm.cs @@ -0,0 +1,592 @@ +/* aputze */ + +using System; +using System.Drawing; +using System.Windows.Forms; + +using System.Threading; + +namespace DynaDis { + public class MainForm : System.Windows.Forms.Form { + private System.Windows.Forms.Label maxWaitingLabel; + private System.Windows.Forms.DataGridTextBoxColumn arrivalStyle; + private System.Windows.Forms.DataGridTextBoxColumn toDoStyle; + private System.Windows.Forms.TabPage deviceTabPage; + private System.Windows.Forms.MenuItem databaseMenu; + private System.Windows.Forms.MenuItem updateMenuItem; + private System.Windows.Forms.TextBox dataSourceTextBox; + private System.Windows.Forms.TabPage employeeTabPage; + private System.Windows.Forms.DataGridTextBoxColumn doneStyle; + private System.Windows.Forms.DataGridTableStyle trainTableStyle; + private System.Windows.Forms.TextBox initialCatalogTextBox; + private System.Windows.Forms.TabPage selectTabPage; + private System.Windows.Forms.MenuItem disconnectMenuItem; + private System.Windows.Forms.DataGrid employeeGrid; + private System.Windows.Forms.ProgressBar selectProgressBar; + private System.Windows.Forms.TabPage trainTabPage; + private System.Windows.Forms.Label dayLabel; + private System.Windows.Forms.TextBox maxTouringTextBox; + private System.Windows.Forms.Label maxTouringLabel; + private System.Windows.Forms.TabPage propertiesTabPage; + private System.Windows.Forms.DataGridTextBoxColumn departureStationStyle; + private System.Windows.Forms.TabPage tourTabPage; + private System.Windows.Forms.MenuItem fillMenuItem; + private System.Windows.Forms.DataGrid trainGrid; + private System.Windows.Forms.DataGridTextBoxColumn trainIdStyle; + private System.Windows.Forms.Button selectButton; + private System.Windows.Forms.DataGrid deviceGrid; + private System.Windows.Forms.Label dataSourceLabel; + private System.Windows.Forms.StatusBar statusBar; + private System.Windows.Forms.Label initialCatalogLabel; + private System.Windows.Forms.DataGridTextBoxColumn availableStyle; + private System.Windows.Forms.TextBox minWaitingTextBox; + private System.Windows.Forms.DataGridTextBoxColumn departureStyle; + private System.Windows.Forms.ComboBox dayComboBox; + private System.Windows.Forms.TextBox maxWaitingTextBox; + private System.Windows.Forms.Label minWaitingLabel; + private System.Windows.Forms.MenuItem connectMenuItem; + private System.Windows.Forms.MainMenu mainMenu; + private System.Windows.Forms.DataGridTextBoxColumn arrivalStationStyle; + private System.Windows.Forms.TabControl tabControl; + private System.Windows.Forms.MenuItem prepareMenuItem; + + private DynaDis dynaDis=new DynaDis(); + + public MainForm() { + InitializeComponent(); + + dynaDis.selectProgress+=new ProgressHandler(SelectProgress); + + trainGrid.SetDataBinding(dynaDis.dataSet,"TrainTable"); + deviceGrid.SetDataBinding(dynaDis.dataSet,"DeviceTable"); + employeeGrid.SetDataBinding(dynaDis.dataSet,"EmployeeTable"); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.prepareMenuItem = new System.Windows.Forms.MenuItem(); + this.tabControl = new System.Windows.Forms.TabControl(); + this.arrivalStationStyle = new System.Windows.Forms.DataGridTextBoxColumn(); + this.mainMenu = new System.Windows.Forms.MainMenu(); + this.connectMenuItem = new System.Windows.Forms.MenuItem(); + this.minWaitingLabel = new System.Windows.Forms.Label(); + this.maxWaitingTextBox = new System.Windows.Forms.TextBox(); + this.dayComboBox = new System.Windows.Forms.ComboBox(); + this.departureStyle = new System.Windows.Forms.DataGridTextBoxColumn(); + this.minWaitingTextBox = new System.Windows.Forms.TextBox(); + this.availableStyle = new System.Windows.Forms.DataGridTextBoxColumn(); + this.initialCatalogLabel = new System.Windows.Forms.Label(); + this.statusBar = new System.Windows.Forms.StatusBar(); + this.dataSourceLabel = new System.Windows.Forms.Label(); + this.deviceGrid = new System.Windows.Forms.DataGrid(); + this.selectButton = new System.Windows.Forms.Button(); + this.trainIdStyle = new System.Windows.Forms.DataGridTextBoxColumn(); + this.trainGrid = new System.Windows.Forms.DataGrid(); + this.fillMenuItem = new System.Windows.Forms.MenuItem(); + this.tourTabPage = new System.Windows.Forms.TabPage(); + this.departureStationStyle = new System.Windows.Forms.DataGridTextBoxColumn(); + this.propertiesTabPage = new System.Windows.Forms.TabPage(); + this.maxTouringLabel = new System.Windows.Forms.Label(); + this.maxTouringTextBox = new System.Windows.Forms.TextBox(); + this.dayLabel = new System.Windows.Forms.Label(); + this.trainTabPage = new System.Windows.Forms.TabPage(); + this.selectProgressBar = new System.Windows.Forms.ProgressBar(); + this.employeeGrid = new System.Windows.Forms.DataGrid(); + this.disconnectMenuItem = new System.Windows.Forms.MenuItem(); + this.selectTabPage = new System.Windows.Forms.TabPage(); + this.initialCatalogTextBox = new System.Windows.Forms.TextBox(); + this.trainTableStyle = new System.Windows.Forms.DataGridTableStyle(); + this.doneStyle = new System.Windows.Forms.DataGridTextBoxColumn(); + this.employeeTabPage = new System.Windows.Forms.TabPage(); + this.dataSourceTextBox = new System.Windows.Forms.TextBox(); + this.updateMenuItem = new System.Windows.Forms.MenuItem(); + this.databaseMenu = new System.Windows.Forms.MenuItem(); + this.deviceTabPage = new System.Windows.Forms.TabPage(); + this.toDoStyle = new System.Windows.Forms.DataGridTextBoxColumn(); + this.arrivalStyle = new System.Windows.Forms.DataGridTextBoxColumn(); + this.maxWaitingLabel = new System.Windows.Forms.Label(); + this.tabControl.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.deviceGrid)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.trainGrid)).BeginInit(); + this.propertiesTabPage.SuspendLayout(); + this.trainTabPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.employeeGrid)).BeginInit(); + this.selectTabPage.SuspendLayout(); + this.employeeTabPage.SuspendLayout(); + this.deviceTabPage.SuspendLayout(); + this.SuspendLayout(); + // + // prepareMenuItem + // + this.prepareMenuItem.Index = 2; + this.prepareMenuItem.Shortcut = System.Windows.Forms.Shortcut.CtrlP; + this.prepareMenuItem.Text = "Prepare"; + this.prepareMenuItem.Click += new System.EventHandler(this.PrepareMenuItemClick); + // + // tabControl + // + this.tabControl.Controls.Add(this.propertiesTabPage); + this.tabControl.Controls.Add(this.selectTabPage); + this.tabControl.Controls.Add(this.trainTabPage); + this.tabControl.Controls.Add(this.deviceTabPage); + this.tabControl.Controls.Add(this.employeeTabPage); + this.tabControl.Controls.Add(this.tourTabPage); + this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl.Location = new System.Drawing.Point(0, 0); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 0; + this.tabControl.Size = new System.Drawing.Size(292, 244); + this.tabControl.TabIndex = 2; + // + // arrivalStationStyle + // + this.arrivalStationStyle.Format = ""; + this.arrivalStationStyle.HeaderText = "ArrivalStation"; + this.arrivalStationStyle.MappingName = "ArrivalStation"; + this.arrivalStationStyle.Width = 125; + // + // mainMenu + // + this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.databaseMenu}); + // + // connectMenuItem + // + this.connectMenuItem.Index = 0; + this.connectMenuItem.Shortcut = System.Windows.Forms.Shortcut.CtrlC; + this.connectMenuItem.Text = "Connect"; + this.connectMenuItem.Click += new System.EventHandler(this.ConnectMenuItemClick); + // + // minWaitingLabel + // + this.minWaitingLabel.Location = new System.Drawing.Point(8, 80); + this.minWaitingLabel.Name = "minWaitingLabel"; + this.minWaitingLabel.TabIndex = 14; + this.minWaitingLabel.Text = "Min Waiting"; + // + // maxWaitingTextBox + // + this.maxWaitingTextBox.Location = new System.Drawing.Point(120, 112); + this.maxWaitingTextBox.Name = "maxWaitingTextBox"; + this.maxWaitingTextBox.Size = new System.Drawing.Size(152, 20); + this.maxWaitingTextBox.TabIndex = 17; + this.maxWaitingTextBox.Text = ""; + this.maxWaitingTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.MaxWaitingTextBoxValidating); + // + // dayComboBox + // + this.dayComboBox.Items.AddRange(new object[] { + "1", + "2", + "4", + "8", + "16", + "32", + "64"}); + this.dayComboBox.Location = new System.Drawing.Point(120, 176); + this.dayComboBox.Name = "dayComboBox"; + this.dayComboBox.Size = new System.Drawing.Size(152, 21); + this.dayComboBox.TabIndex = 21; + this.dayComboBox.Validating += new System.ComponentModel.CancelEventHandler(this.DayComboBoxValidating); + // + // departureStyle + // + this.departureStyle.Format = "g"; + this.departureStyle.HeaderText = "Departure"; + this.departureStyle.MappingName = "Departure"; + this.departureStyle.Width = 125; + // + // minWaitingTextBox + // + this.minWaitingTextBox.Location = new System.Drawing.Point(120, 80); + this.minWaitingTextBox.Name = "minWaitingTextBox"; + this.minWaitingTextBox.Size = new System.Drawing.Size(152, 20); + this.minWaitingTextBox.TabIndex = 15; + this.minWaitingTextBox.Text = ""; + this.minWaitingTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.MinWaitingTextBoxValidating); + // + // availableStyle + // + this.availableStyle.Format = ""; + this.availableStyle.HeaderText = "Available"; + this.availableStyle.MappingName = "Available"; + this.availableStyle.Width = 50; + // + // initialCatalogLabel + // + this.initialCatalogLabel.Location = new System.Drawing.Point(8, 40); + this.initialCatalogLabel.Name = "initialCatalogLabel"; + this.initialCatalogLabel.TabIndex = 12; + this.initialCatalogLabel.Text = "Initial Catalog"; + // + // statusBar + // + this.statusBar.Location = new System.Drawing.Point(0, 244); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(292, 22); + this.statusBar.TabIndex = 1; + // + // dataSourceLabel + // + this.dataSourceLabel.Location = new System.Drawing.Point(8, 8); + this.dataSourceLabel.Name = "dataSourceLabel"; + this.dataSourceLabel.TabIndex = 10; + this.dataSourceLabel.Text = "Data Source"; + // + // deviceGrid + // + this.deviceGrid.CaptionVisible = false; + this.deviceGrid.DataMember = ""; + this.deviceGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.deviceGrid.HeaderForeColor = System.Drawing.SystemColors.ControlText; + this.deviceGrid.Location = new System.Drawing.Point(0, 0); + this.deviceGrid.Name = "deviceGrid"; + this.deviceGrid.Size = new System.Drawing.Size(284, 218); + this.deviceGrid.TabIndex = 0; + // + // selectButton + // + this.selectButton.Location = new System.Drawing.Point(8, 8); + this.selectButton.Name = "selectButton"; + this.selectButton.TabIndex = 0; + this.selectButton.Text = "Select"; + this.selectButton.Click += new System.EventHandler(this.SelectButtonClick); + // + // trainIdStyle + // + this.trainIdStyle.Format = ""; + this.trainIdStyle.HeaderText = "TrainId"; + this.trainIdStyle.MappingName = "TrainId"; + this.trainIdStyle.Width = 75; + // + // trainGrid + // + this.trainGrid.CaptionVisible = false; + this.trainGrid.DataMember = ""; + this.trainGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.trainGrid.HeaderForeColor = System.Drawing.SystemColors.ControlText; + this.trainGrid.Location = new System.Drawing.Point(0, 0); + this.trainGrid.Name = "trainGrid"; + this.trainGrid.Size = new System.Drawing.Size(284, 218); + this.trainGrid.TabIndex = 0; + this.trainGrid.TableStyles.AddRange(new System.Windows.Forms.DataGridTableStyle[] { + this.trainTableStyle}); + // + // fillMenuItem + // + this.fillMenuItem.Index = 3; + this.fillMenuItem.Shortcut = System.Windows.Forms.Shortcut.CtrlF; + this.fillMenuItem.Text = "Fill"; + this.fillMenuItem.Click += new System.EventHandler(this.FillMenuItemClick); + // + // tourTabPage + // + this.tourTabPage.Location = new System.Drawing.Point(4, 22); + this.tourTabPage.Name = "tourTabPage"; + this.tourTabPage.Size = new System.Drawing.Size(284, 218); + this.tourTabPage.TabIndex = 4; + this.tourTabPage.Text = "TourTable"; + // + // departureStationStyle + // + this.departureStationStyle.Format = ""; + this.departureStationStyle.HeaderText = "DepartureStation"; + this.departureStationStyle.MappingName = "DepartureStation"; + this.departureStationStyle.Width = 125; + // + // propertiesTabPage + // + this.propertiesTabPage.Controls.Add(this.dayComboBox); + this.propertiesTabPage.Controls.Add(this.dayLabel); + this.propertiesTabPage.Controls.Add(this.maxTouringTextBox); + this.propertiesTabPage.Controls.Add(this.maxTouringLabel); + this.propertiesTabPage.Controls.Add(this.maxWaitingTextBox); + this.propertiesTabPage.Controls.Add(this.maxWaitingLabel); + this.propertiesTabPage.Controls.Add(this.minWaitingTextBox); + this.propertiesTabPage.Controls.Add(this.minWaitingLabel); + this.propertiesTabPage.Controls.Add(this.initialCatalogTextBox); + this.propertiesTabPage.Controls.Add(this.initialCatalogLabel); + this.propertiesTabPage.Controls.Add(this.dataSourceTextBox); + this.propertiesTabPage.Controls.Add(this.dataSourceLabel); + this.propertiesTabPage.Location = new System.Drawing.Point(4, 22); + this.propertiesTabPage.Name = "propertiesTabPage"; + this.propertiesTabPage.Size = new System.Drawing.Size(284, 218); + this.propertiesTabPage.TabIndex = 0; + this.propertiesTabPage.Text = "Properties"; + // + // maxTouringLabel + // + this.maxTouringLabel.Location = new System.Drawing.Point(8, 144); + this.maxTouringLabel.Name = "maxTouringLabel"; + this.maxTouringLabel.TabIndex = 18; + this.maxTouringLabel.Text = "Max Touring"; + // + // maxTouringTextBox + // + this.maxTouringTextBox.Location = new System.Drawing.Point(120, 144); + this.maxTouringTextBox.Name = "maxTouringTextBox"; + this.maxTouringTextBox.Size = new System.Drawing.Size(152, 20); + this.maxTouringTextBox.TabIndex = 19; + this.maxTouringTextBox.Text = ""; + this.maxTouringTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.MaxTouringTextBoxValidating); + // + // dayLabel + // + this.dayLabel.Location = new System.Drawing.Point(8, 176); + this.dayLabel.Name = "dayLabel"; + this.dayLabel.TabIndex = 20; + this.dayLabel.Text = "Day"; + // + // trainTabPage + // + this.trainTabPage.Controls.Add(this.trainGrid); + this.trainTabPage.Location = new System.Drawing.Point(4, 22); + this.trainTabPage.Name = "trainTabPage"; + this.trainTabPage.Size = new System.Drawing.Size(284, 218); + this.trainTabPage.TabIndex = 1; + this.trainTabPage.Text = "TrainTable"; + // + // selectProgressBar + // + this.selectProgressBar.Location = new System.Drawing.Point(8, 40); + this.selectProgressBar.Name = "selectProgressBar"; + this.selectProgressBar.Size = new System.Drawing.Size(272, 23); + this.selectProgressBar.TabIndex = 1; + // + // employeeGrid + // + this.employeeGrid.CaptionVisible = false; + this.employeeGrid.DataMember = ""; + this.employeeGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.employeeGrid.HeaderForeColor = System.Drawing.SystemColors.ControlText; + this.employeeGrid.Location = new System.Drawing.Point(0, 0); + this.employeeGrid.Name = "employeeGrid"; + this.employeeGrid.Size = new System.Drawing.Size(284, 218); + this.employeeGrid.TabIndex = 0; + // + // disconnectMenuItem + // + this.disconnectMenuItem.Index = 1; + this.disconnectMenuItem.Shortcut = System.Windows.Forms.Shortcut.CtrlD; + this.disconnectMenuItem.Text = "Disconnect"; + this.disconnectMenuItem.Click += new System.EventHandler(this.DisconnectMenuItemClick); + // + // selectTabPage + // + this.selectTabPage.Controls.Add(this.selectProgressBar); + this.selectTabPage.Controls.Add(this.selectButton); + this.selectTabPage.Location = new System.Drawing.Point(4, 22); + this.selectTabPage.Name = "selectTabPage"; + this.selectTabPage.Size = new System.Drawing.Size(284, 218); + this.selectTabPage.TabIndex = 5; + this.selectTabPage.Text = "Select"; + // + // initialCatalogTextBox + // + this.initialCatalogTextBox.Location = new System.Drawing.Point(120, 40); + this.initialCatalogTextBox.Name = "initialCatalogTextBox"; + this.initialCatalogTextBox.Size = new System.Drawing.Size(152, 20); + this.initialCatalogTextBox.TabIndex = 13; + this.initialCatalogTextBox.Text = ""; + this.initialCatalogTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.InitialCatalogTextBoxValidating); + // + // trainTableStyle + // + this.trainTableStyle.DataGrid = this.trainGrid; + this.trainTableStyle.GridColumnStyles.AddRange(new System.Windows.Forms.DataGridColumnStyle[] { + this.trainIdStyle, + this.departureStyle, + this.departureStationStyle, + this.arrivalStyle, + this.arrivalStationStyle, + this.availableStyle, + this.toDoStyle, + this.doneStyle}); + this.trainTableStyle.HeaderForeColor = System.Drawing.SystemColors.ControlText; + this.trainTableStyle.MappingName = "TrainTable"; + // + // doneStyle + // + this.doneStyle.Format = ""; + this.doneStyle.HeaderText = "Done"; + this.doneStyle.MappingName = "Done"; + this.doneStyle.Width = 50; + // + // employeeTabPage + // + this.employeeTabPage.Controls.Add(this.employeeGrid); + this.employeeTabPage.Location = new System.Drawing.Point(4, 22); + this.employeeTabPage.Name = "employeeTabPage"; + this.employeeTabPage.Size = new System.Drawing.Size(284, 218); + this.employeeTabPage.TabIndex = 3; + this.employeeTabPage.Text = "EmployeeTable"; + // + // dataSourceTextBox + // + this.dataSourceTextBox.Location = new System.Drawing.Point(120, 8); + this.dataSourceTextBox.Name = "dataSourceTextBox"; + this.dataSourceTextBox.Size = new System.Drawing.Size(152, 20); + this.dataSourceTextBox.TabIndex = 11; + this.dataSourceTextBox.Text = ""; + this.dataSourceTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.DataSourceTextBoxValidating); + // + // updateMenuItem + // + this.updateMenuItem.Index = 4; + this.updateMenuItem.Shortcut = System.Windows.Forms.Shortcut.CtrlU; + this.updateMenuItem.Text = "Update"; + this.updateMenuItem.Click += new System.EventHandler(this.UpdateMenuItemClick); + // + // databaseMenu + // + this.databaseMenu.Index = 0; + this.databaseMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.connectMenuItem, + this.disconnectMenuItem, + this.prepareMenuItem, + this.fillMenuItem, + this.updateMenuItem}); + this.databaseMenu.Text = "Database"; + // + // deviceTabPage + // + this.deviceTabPage.Controls.Add(this.deviceGrid); + this.deviceTabPage.Location = new System.Drawing.Point(4, 22); + this.deviceTabPage.Name = "deviceTabPage"; + this.deviceTabPage.Size = new System.Drawing.Size(284, 218); + this.deviceTabPage.TabIndex = 2; + this.deviceTabPage.Text = "DeviceTable"; + // + // toDoStyle + // + this.toDoStyle.Format = ""; + this.toDoStyle.HeaderText = "ToDo"; + this.toDoStyle.MappingName = "ToDo"; + this.toDoStyle.Width = 50; + // + // arrivalStyle + // + this.arrivalStyle.Format = "g"; + this.arrivalStyle.HeaderText = "Arrival"; + this.arrivalStyle.MappingName = "Arrival"; + this.arrivalStyle.Width = 125; + // + // maxWaitingLabel + // + this.maxWaitingLabel.Location = new System.Drawing.Point(8, 112); + this.maxWaitingLabel.Name = "maxWaitingLabel"; + this.maxWaitingLabel.TabIndex = 16; + this.maxWaitingLabel.Text = "Max Waiting"; + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(292, 266); + this.Controls.Add(this.tabControl); + this.Controls.Add(this.statusBar); + this.Menu = this.mainMenu; + this.Name = "MainForm"; + this.Text = "DynaDis"; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.Load += new System.EventHandler(this.MainFormLoad); + this.tabControl.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.deviceGrid)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.trainGrid)).EndInit(); + this.propertiesTabPage.ResumeLayout(false); + this.trainTabPage.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.employeeGrid)).EndInit(); + this.selectTabPage.ResumeLayout(false); + this.employeeTabPage.ResumeLayout(false); + this.deviceTabPage.ResumeLayout(false); + this.ResumeLayout(false); + } + #endregion + + [STAThread] + public static void Main() { + //Application.Run(new MainForm()); + } + + void ConnectMenuItemClick(object sender, System.EventArgs e) { + dynaDis.Connect(); + statusBar.Text="Connected"; + } + void DisconnectMenuItemClick(object sender, System.EventArgs e) { + dynaDis.Disconnect(); + statusBar.Text="Disconnected"; + } + + void PrepareMenuItemClick(object sender, System.EventArgs e) { + dynaDis.Prepare(); + statusBar.Text="Prepared"; + } + + void FillMenuItemClick(object sender, System.EventArgs e) { + dynaDis.Fill(); + statusBar.Text="Filled"; + } + void UpdateMenuItemClick(object sender, System.EventArgs e) { + dynaDis.Update(); + statusBar.Text="Updated"; + } + + void SelectButtonClick(object sender, System.EventArgs e) { + new Thread(new ThreadStart(SelectStart)).Start(); + } + void SelectStart() { + dynaDis.Select(); + statusBar.Text="Selected"; + } + void SelectProgress(int progress) { + selectProgressBar.Value=progress; + } + + void MainFormLoad(object sender, System.EventArgs e) { + dataSourceTextBox.Text=dynaDis.dataSource; + initialCatalogTextBox.Text=dynaDis.initialCatalog; + + minWaitingTextBox.Text=dynaDis.minWaiting.ToString(); + maxWaitingTextBox.Text=dynaDis.maxWaiting.ToString(); + maxTouringTextBox.Text=dynaDis.maxTouring.ToString(); + + dayComboBox.Text=dynaDis.day.ToString(); + } + + void DataSourceTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e) { + dynaDis.dataSource=dataSourceTextBox.Text; + } + void InitialCatalogTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e) { + dynaDis.initialCatalog=initialCatalogTextBox.Text; + } + void MinWaitingTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e) { + try { + dynaDis.minWaiting=TimeSpan.Parse(minWaitingTextBox.Text); + } catch { e.Cancel=true; } + } + void MaxWaitingTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e) { + try { + dynaDis.maxWaiting=TimeSpan.Parse(maxWaitingTextBox.Text); + } catch { e.Cancel=true; } + } + void MaxTouringTextBoxValidating(object sender, System.ComponentModel.CancelEventArgs e) { + try { + dynaDis.maxTouring=TimeSpan.Parse(maxTouringTextBox.Text); + } catch { e.Cancel=true; } + } + void DayComboBoxValidating(object sender, System.ComponentModel.CancelEventArgs e) { + if(!dayComboBox.Items.Contains(dayComboBox.Text)) { + e.Cancel=true; + } else { + try { + dynaDis.day=Int32.Parse(dayComboBox.Text); + } catch { e.Cancel=true; } + } + } + + } +} diff --git a/UI/UI.cmbx b/UI/UI.cmbx new file mode 100644 index 0000000..82c7b40 --- /dev/null +++ b/UI/UI.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UI/UI.prjx b/UI/UI.prjx new file mode 100644 index 0000000..2fcdbd3 --- /dev/null +++ b/UI/UI.prjx @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WebDownloader/Shortcut to WebDownloader.lnk b/WebDownloader/Shortcut to WebDownloader.lnk new file mode 100644 index 0000000..a16935a Binary files /dev/null and b/WebDownloader/Shortcut to WebDownloader.lnk differ diff --git a/WebDownloader/WebDownloader.sln b/WebDownloader/WebDownloader.sln new file mode 100644 index 0000000..ee2b7f3 --- /dev/null +++ b/WebDownloader/WebDownloader.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebDownloader", "WebDownloader\WebDownloader.csproj", "{FF6FB79A-AA3D-421D-A6D1-DFD7F4CB06BE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FF6FB79A-AA3D-421D-A6D1-DFD7F4CB06BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FF6FB79A-AA3D-421D-A6D1-DFD7F4CB06BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FF6FB79A-AA3D-421D-A6D1-DFD7F4CB06BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FF6FB79A-AA3D-421D-A6D1-DFD7F4CB06BE}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/WebDownloader/WebDownloader.suo b/WebDownloader/WebDownloader.suo new file mode 100644 index 0000000..9a2100b Binary files /dev/null and b/WebDownloader/WebDownloader.suo differ diff --git a/WebDownloader/WebDownloader/Main.Designer.cs b/WebDownloader/WebDownloader/Main.Designer.cs new file mode 100644 index 0000000..939f4aa --- /dev/null +++ b/WebDownloader/WebDownloader/Main.Designer.cs @@ -0,0 +1,478 @@ +namespace MegaTokyoDownloader +{ + partial class WebDownloader + { + /// + /// 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() + { + this.label1 = new System.Windows.Forms.Label(); + this.tbPfad = new System.Windows.Forms.TextBox(); + this.btnDurchsuchen = new System.Windows.Forms.Button(); + this.Log = new System.Windows.Forms.TextBox(); + this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); + this.Starten = new System.Windows.Forms.Button(); + this.Abbrechen = new System.Windows.Forms.Button(); + this.nUDFrom = new System.Windows.Forms.NumericUpDown(); + this.nUDto = new System.Windows.Forms.NumericUpDown(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.tbURI = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.tbFilename = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.lExample = new System.Windows.Forms.Label(); + this.gbSettings = new System.Windows.Forms.GroupBox(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.label11 = new System.Windows.Forms.Label(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.label12 = new System.Windows.Forms.Label(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.label13 = new System.Windows.Forms.Label(); + this.tbNewProjectName = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.nUDFrom)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nUDto)).BeginInit(); + this.gbSettings.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 172); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(64, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Speicherort:"; + // + // tbPfad + // + this.tbPfad.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbPfad.Location = new System.Drawing.Point(80, 170); + this.tbPfad.Name = "tbPfad"; + this.tbPfad.Size = new System.Drawing.Size(295, 20); + this.tbPfad.TabIndex = 1; + // + // btnDurchsuchen + // + this.btnDurchsuchen.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDurchsuchen.Location = new System.Drawing.Point(381, 168); + this.btnDurchsuchen.Name = "btnDurchsuchen"; + this.btnDurchsuchen.Size = new System.Drawing.Size(81, 21); + this.btnDurchsuchen.TabIndex = 2; + this.btnDurchsuchen.Text = "Durchsuchen"; + this.btnDurchsuchen.Click += new System.EventHandler(this.Durchsuchen_Click); + // + // Log + // + this.Log.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.Log.Location = new System.Drawing.Point(12, 334); + this.Log.Multiline = true; + this.Log.Name = "Log"; + this.Log.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.Log.Size = new System.Drawing.Size(468, 170); + this.Log.TabIndex = 3; + // + // folderBrowserDialog1 + // + this.folderBrowserDialog1.SelectedPath = "folderBrowserDialog1"; + // + // Starten + // + this.Starten.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.Starten.Location = new System.Drawing.Point(12, 305); + this.Starten.Name = "Starten"; + this.Starten.Size = new System.Drawing.Size(75, 23); + this.Starten.TabIndex = 4; + this.Starten.Text = "Starten!"; + this.Starten.Click += new System.EventHandler(this.Starten_Click); + // + // Abbrechen + // + this.Abbrechen.Enabled = false; + this.Abbrechen.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.Abbrechen.Location = new System.Drawing.Point(92, 305); + this.Abbrechen.Name = "Abbrechen"; + this.Abbrechen.Size = new System.Drawing.Size(75, 23); + this.Abbrechen.TabIndex = 5; + this.Abbrechen.Text = "Abbrechen"; + this.Abbrechen.Click += new System.EventHandler(this.Abbrechen_Click); + // + // nUDFrom + // + this.nUDFrom.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nUDFrom.Location = new System.Drawing.Point(108, 66); + this.nUDFrom.Name = "nUDFrom"; + this.nUDFrom.Size = new System.Drawing.Size(50, 20); + this.nUDFrom.TabIndex = 6; + this.nUDFrom.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // nUDto + // + this.nUDto.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nUDto.Location = new System.Drawing.Point(190, 66); + this.nUDto.Name = "nUDto"; + this.nUDto.Size = new System.Drawing.Size(50, 20); + this.nUDto.TabIndex = 7; + this.nUDto.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(77, 68); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(25, 13); + this.label2.TabIndex = 8; + this.label2.Text = "von"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(164, 68); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(20, 13); + this.label3.TabIndex = 9; + this.label3.Text = "bis"; + // + // tbURI + // + this.tbURI.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbURI.Location = new System.Drawing.Point(80, 14); + this.tbURI.Name = "tbURI"; + this.tbURI.Size = new System.Drawing.Size(382, 20); + this.tbURI.TabIndex = 10; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(6, 16); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(54, 13); + this.label4.TabIndex = 11; + this.label4.Text = "Webpath:"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(6, 44); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(68, 13); + this.label5.TabIndex = 12; + this.label5.Text = "Filename #1:"; + // + // tbFilename + // + this.tbFilename.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbFilename.Location = new System.Drawing.Point(80, 42); + this.tbFilename.Name = "tbFilename"; + this.tbFilename.Size = new System.Drawing.Size(187, 20); + this.tbFilename.TabIndex = 13; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(6, 68); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(40, 13); + this.label6.TabIndex = 14; + this.label6.Text = "Zhler:"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(6, 94); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(68, 13); + this.label7.TabIndex = 15; + this.label7.Text = "Filename #2:"; + // + // textBox1 + // + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox1.Location = new System.Drawing.Point(80, 92); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(187, 20); + this.textBox1.TabIndex = 16; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(6, 120); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(103, 13); + this.label8.TabIndex = 17; + this.label8.Text = "Possible Extensions:"; + // + // textBox2 + // + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox2.Location = new System.Drawing.Point(115, 118); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(178, 20); + this.textBox2.TabIndex = 18; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(299, 120); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(118, 13); + this.label9.TabIndex = 19; + this.label9.Text = "(Example: \"gif jpg png\")"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(6, 147); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(46, 13); + this.label10.TabIndex = 20; + this.label10.Text = "Beispiel:"; + // + // lExample + // + this.lExample.AutoSize = true; + this.lExample.Location = new System.Drawing.Point(77, 147); + this.lExample.Name = "lExample"; + this.lExample.Size = new System.Drawing.Size(13, 13); + this.lExample.TabIndex = 21; + this.lExample.Text = "0"; + // + // gbSettings + // + this.gbSettings.Controls.Add(this.numericUpDown1); + this.gbSettings.Controls.Add(this.label11); + this.gbSettings.Controls.Add(this.label4); + this.gbSettings.Controls.Add(this.lExample); + this.gbSettings.Controls.Add(this.nUDFrom); + this.gbSettings.Controls.Add(this.label10); + this.gbSettings.Controls.Add(this.btnDurchsuchen); + this.gbSettings.Controls.Add(this.nUDto); + this.gbSettings.Controls.Add(this.tbPfad); + this.gbSettings.Controls.Add(this.label9); + this.gbSettings.Controls.Add(this.label1); + this.gbSettings.Controls.Add(this.label2); + this.gbSettings.Controls.Add(this.textBox2); + this.gbSettings.Controls.Add(this.label3); + this.gbSettings.Controls.Add(this.label8); + this.gbSettings.Controls.Add(this.tbURI); + this.gbSettings.Controls.Add(this.textBox1); + this.gbSettings.Controls.Add(this.label5); + this.gbSettings.Controls.Add(this.label7); + this.gbSettings.Controls.Add(this.tbFilename); + this.gbSettings.Controls.Add(this.label6); + this.gbSettings.Location = new System.Drawing.Point(12, 68); + this.gbSettings.Name = "gbSettings"; + this.gbSettings.Size = new System.Drawing.Size(468, 202); + this.gbSettings.TabIndex = 22; + this.gbSettings.TabStop = false; + this.gbSettings.Text = "Einstellungen"; + // + // numericUpDown1 + // + this.numericUpDown1.Location = new System.Drawing.Point(329, 66); + this.numericUpDown1.Maximum = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.numericUpDown1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(34, 20); + this.numericUpDown1.TabIndex = 23; + this.numericUpDown1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDown1.Value = new decimal(new int[] { + 4, + 0, + 0, + 0}); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(246, 68); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(77, 13); + this.label11.TabIndex = 22; + this.label11.Text = "Anzahl Stellen:"; + // + // comboBox1 + // + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(128, 12); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(352, 21); + this.comboBox1.TabIndex = 23; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(12, 15); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(110, 13); + this.label12.TabIndex = 24; + this.label12.Text = "Vorhandene Projekte:"; + // + // button2 + // + this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button2.Location = new System.Drawing.Point(161, 39); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(181, 23); + this.button2.TabIndex = 26; + this.button2.Text = "Projekt Einstellungen bearbeiten"; + this.button2.UseVisualStyleBackColor = true; + // + // button3 + // + this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button3.Location = new System.Drawing.Point(348, 39); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(132, 23); + this.button3.TabIndex = 27; + this.button3.Text = "nderungen speichern"; + this.button3.UseVisualStyleBackColor = true; + // + // button1 + // + this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button1.Location = new System.Drawing.Point(12, 276); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(135, 23); + this.button1.TabIndex = 28; + this.button1.Text = "Neues Projekt erstellen"; + this.button1.UseVisualStyleBackColor = true; + // + // button4 + // + this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button4.Location = new System.Drawing.Point(405, 276); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 23); + this.button4.TabIndex = 29; + this.button4.Text = "Speichern"; + this.button4.UseVisualStyleBackColor = true; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(153, 281); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(20, 13); + this.label13.TabIndex = 30; + this.label13.Text = "als"; + // + // tbNewProjectName + // + this.tbNewProjectName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbNewProjectName.Location = new System.Drawing.Point(179, 278); + this.tbNewProjectName.Name = "tbNewProjectName"; + this.tbNewProjectName.Size = new System.Drawing.Size(220, 20); + this.tbNewProjectName.TabIndex = 31; + // + // WebDownloader + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(492, 516); + this.Controls.Add(this.tbNewProjectName); + this.Controls.Add(this.label13); + this.Controls.Add(this.button4); + this.Controls.Add(this.button1); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.label12); + this.Controls.Add(this.comboBox1); + this.Controls.Add(this.gbSettings); + this.Controls.Add(this.Abbrechen); + this.Controls.Add(this.Starten); + this.Controls.Add(this.Log); + this.MaximizeBox = false; + this.Name = "WebDownloader"; + this.Text = "Der Webcomic Downloader - relax, it downloads for j00"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MegaTokyoDownloader_FormClosing); + ((System.ComponentModel.ISupportInitialize)(this.nUDFrom)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nUDto)).EndInit(); + this.gbSettings.ResumeLayout(false); + this.gbSettings.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox tbPfad; + private System.Windows.Forms.Button btnDurchsuchen; + private System.Windows.Forms.TextBox Log; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; + private System.Windows.Forms.Button Starten; + private System.Windows.Forms.Button Abbrechen; + private System.Windows.Forms.NumericUpDown nUDFrom; + private System.Windows.Forms.NumericUpDown nUDto; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox tbURI; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox tbFilename; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label lExample; + private System.Windows.Forms.GroupBox gbSettings; + private System.Windows.Forms.NumericUpDown numericUpDown1; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox tbNewProjectName; + } +} + diff --git a/WebDownloader/WebDownloader/Main.cs b/WebDownloader/WebDownloader/Main.cs new file mode 100644 index 0000000..a96f528 --- /dev/null +++ b/WebDownloader/WebDownloader/Main.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Net; +using System.IO; + +namespace MegaTokyoDownloader +{ + public partial class WebDownloader : Form + { + private delegate void addloghandler(string text); + + private Thread t = null; + + public WebDownloader() + { + InitializeComponent(); + } + + private void Durchsuchen_Click(object sender, EventArgs e) + { + if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) + { + tbPfad.Text = folderBrowserDialog1.SelectedPath; + } + } + + private void Starten_Click(object sender, EventArgs e) + { + Starten.Enabled = false; + Abbrechen.Enabled = true; + t = new Thread(new ThreadStart(Download)); + t.Start(); + } + + private void Abbrechen_Click(object sender, EventArgs e) + { + t.Abort(); + Abbrechen.Enabled = false; + Starten.Enabled = true; + } + + void Download() + { + WebClient wc = new WebClient(); + for (int i = 286; i <= 326; i++) + { + string si = i.ToString(); + while (si.Length < 4) + { + si = "0" + si; + } + + wc.DownloadFile("http://www.giantitp.com/oots/oots" + si + ".gif", "E:\\oots\\oots" + si + ".gif"); + Invoke(new addloghandler(addlog), new object[] { si }); + + /* + if(i<10) + { + if (File.Exists(tbPfad.Text + "\\000" + i + ".gif")) + { + this.Invoke(new addloghandler(addlog), new object[] { "000" + i + ".gif" + " already exits!\r\n" }); + } + else + { + try + { + this.Invoke(new addloghandler(addlog), new object[] { "Downloading http://www.megatokyo.com/strips/000" + i.ToString() + ".gif..." }); + wc.DownloadFile("http://www.megatokyo.com/strips/000" + i + ".gif", tbPfad.Text + "\\000" + i + ".gif"); + this.Invoke(new addloghandler(addlog), new object[] { " Complete!\r\n" }); + } + catch (WebException we) + { + this.Invoke(new addloghandler(addlog), new object[] { "Download failed: " + we.Message + "\r\n" }); + } + } + } + if (i >= 10 && i < 100) + { + if (File.Exists(tbPfad.Text + "\\00" + i + ".gif")) + { + this.Invoke(new addloghandler(addlog), new object[] { "00" + i + ".gif" + " already exits!\r\n" }); + } + else + { + try + { + this.Invoke(new addloghandler(addlog), new object[] { "Downloading http://www.megatokyo.com/strips/00" + i.ToString() + ".gif..." }); + wc.DownloadFile("http://www.megatokyo.com/strips/00" + i + ".gif", tbPfad.Text + "\\00" + i + ".gif"); + this.Invoke(new addloghandler(addlog), new object[] { " Complete!\r\n" }); + } + catch (WebException we) + { + this.Invoke(new addloghandler(addlog), new object[] { "Download failed: " + we.Message + "\r\n" }); + this.Invoke(new addloghandler(addlog), new object[] { "Trying to download JPG \r\n" }); + if (File.Exists(tbPfad.Text + "\\00" + i + ".jpg")) + { + this.Invoke(new addloghandler(addlog), new object[] { "00" + i + ".jpg" + " already exits!\r\n" }); + } + else + { + try + { + this.Invoke(new addloghandler(addlog), new object[] { "Downloading http://www.megatokyo.com/strips/00" + i.ToString() + ".jpg..." }); + wc.DownloadFile("http://www.megatokyo.com/strips/00" + i + ".jpg", tbPfad.Text + "\\00" + i + ".jpg"); + this.Invoke(new addloghandler(addlog), new object[] { " Complete!\r\n" }); + } + catch (WebException we2) + { + this.Invoke(new addloghandler(addlog), new object[] { "Download failed: " + we2.Message + "\r\n" }); + this.Invoke(new addloghandler(addlog), new object[] { "No GIF or JPG exists! \r\n" }); + } + } + } + } + } + if (i >= 100 && i < 1000) + { + if (File.Exists(tbPfad.Text + "\\0" + i + ".gif")) + { + this.Invoke(new addloghandler(addlog), new object[] { "0" + i + ".gif" + " already exits!\r\n" }); + } + else + { + try + { + this.Invoke(new addloghandler(addlog), new object[] { "Downloading http://www.megatokyo.com/strips/0" + i.ToString() + ".gif..." }); + wc.DownloadFile("http://www.megatokyo.com/strips/0" + i + ".gif", tbPfad.Text + "\\0" + i + ".gif"); + this.Invoke(new addloghandler(addlog), new object[] { " Complete!\r\n" }); + } + catch (WebException we) + { + this.Invoke(new addloghandler(addlog), new object[] { "Download failed: " + we.Message + "\r\n" }); + this.Invoke(new addloghandler(addlog), new object[] { "Trying to download JPG \r\n" }); + if (File.Exists(tbPfad.Text + "\\0" + i + ".jpg")) + { + this.Invoke(new addloghandler(addlog), new object[] { "0" + i + ".jpg" + " already exits!\r\n" }); + } + else + { + try + { + this.Invoke(new addloghandler(addlog), new object[] { "Downloading http://www.megatokyo.com/strips/0" + i.ToString() + ".jpg..." }); + wc.DownloadFile("http://www.megatokyo.com/strips/0" + i + ".jpg", tbPfad.Text + "\\0" + i + ".jpg"); + this.Invoke(new addloghandler(addlog), new object[] { " Complete!\r\n" }); + } + catch (WebException we2) + { + this.Invoke(new addloghandler(addlog), new object[] { "Download failed: " + we2.Message + "\r\n" }); + this.Invoke(new addloghandler(addlog), new object[] { "No GIF or JPG exists! \r\n" }); + } + } + } + } + } + */ + } + } + + void addlog(string text) + { + Log.Text += text; + Log.Select(Log.Text.Length, 0); + Log.ScrollToCaret(); + } + + private void MegaTokyoDownloader_FormClosing(object sender, FormClosingEventArgs e) + { + if (t != null) + { + t.Abort(); + } + } + } +} \ No newline at end of file diff --git a/WebDownloader/WebDownloader/Main.resx b/WebDownloader/WebDownloader/Main.resx new file mode 100644 index 0000000..c3fe8f1 --- /dev/null +++ b/WebDownloader/WebDownloader/Main.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/WebDownloader/WebDownloader/Program.cs b/WebDownloader/WebDownloader/Program.cs new file mode 100644 index 0000000..4bdc779 --- /dev/null +++ b/WebDownloader/WebDownloader/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace MegaTokyoDownloader +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.Run(new WebDownloader()); + } + } +} \ No newline at end of file diff --git a/WebDownloader/WebDownloader/Properties/AssemblyInfo.cs b/WebDownloader/WebDownloader/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..b107381 --- /dev/null +++ b/WebDownloader/WebDownloader/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MegaTokyoDownloader")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MegaTokyoDownloader")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("98cbd93b-ba11-45fe-ae6d-0e1128bd096b")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/WebDownloader/WebDownloader/Properties/Resources.Designer.cs b/WebDownloader/WebDownloader/Properties/Resources.Designer.cs new file mode 100644 index 0000000..bdeadb9 --- /dev/null +++ b/WebDownloader/WebDownloader/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "MegaTokyoDownloader.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "MegaTokyoDownloader.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "MegaTokyoDownloader.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace MegaTokyoDownloader.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MegaTokyoDownloader.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/WebDownloader/WebDownloader/Properties/Resources.resx b/WebDownloader/WebDownloader/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/WebDownloader/WebDownloader/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WebDownloader/WebDownloader/Properties/Settings.Designer.cs b/WebDownloader/WebDownloader/Properties/Settings.Designer.cs new file mode 100644 index 0000000..d606c59 --- /dev/null +++ b/WebDownloader/WebDownloader/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "MegaTokyoDownloader.Properties.Settings.get_Default():MegaTokyoDownloader.Properties.Settings")] + +namespace MegaTokyoDownloader.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/WebDownloader/WebDownloader/Properties/Settings.settings b/WebDownloader/WebDownloader/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/WebDownloader/WebDownloader/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/WebDownloader/WebDownloader/WebDownloader.csproj b/WebDownloader/WebDownloader/WebDownloader.csproj new file mode 100644 index 0000000..ed72ebb --- /dev/null +++ b/WebDownloader/WebDownloader/WebDownloader.csproj @@ -0,0 +1,71 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {FF6FB79A-AA3D-421D-A6D1-DFD7F4CB06BE} + WinExe + Properties + MegaTokyoDownloader + MegaTokyoDownloader + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Main.cs + + + + + Main.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + \ No newline at end of file diff --git a/WebDownloader/WebDownloader/WebDownloader.csproj.user b/WebDownloader/WebDownloader/WebDownloader.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/WebDownloader/WebDownloader/WebDownloader.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets.sln b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets.sln new file mode 100644 index 0000000..6fd3434 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wheel of Time - Character Sheets", "Wheel of Time - Character Sheets\Wheel of Time - Character Sheets.csproj", "{EF1B18F8-E9DA-4C39-8D81-1A4A4B71CD09}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EF1B18F8-E9DA-4C39-8D81-1A4A4B71CD09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EF1B18F8-E9DA-4C39-8D81-1A4A4B71CD09}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF1B18F8-E9DA-4C39-8D81-1A4A4B71CD09}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EF1B18F8-E9DA-4C39-8D81-1A4A4B71CD09}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets.suo b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets.suo new file mode 100644 index 0000000..7a8371e Binary files /dev/null and b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets.suo differ diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/AboutBox1.Designer.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/AboutBox1.Designer.cs new file mode 100644 index 0000000..d1f91a7 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/AboutBox1.Designer.cs @@ -0,0 +1,130 @@ +namespace Wheel_of_Time___Character_Sheets +{ + partial class AboutBox1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + 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() + { + this.okButton = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.label4 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.okButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.okButton.Location = new System.Drawing.Point(219, 124); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(74, 22); + this.okButton.TabIndex = 24; + this.okButton.Text = "&OK"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Parchment", 48F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(3, -3); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(265, 68); + this.label1.TabIndex = 25; + this.label1.Text = "the Wheel of Time"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(36, 65); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(146, 20); + this.label2.TabIndex = 26; + this.label2.Text = "Character Sheets"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 93); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(209, 13); + this.label3.TabIndex = 27; + this.label3.Text = "Programming 2005 by Johannes Schauer"; + // + // linkLabel1 + // + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(227, 93); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(101, 13); + this.linkLabel1.TabIndex = 28; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "J.Schauer@email.de"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(26, 124); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(156, 13); + this.label4.TabIndex = 29; + this.label4.Text = "Design && Planung by Taires Bayl"; + // + // AboutBox1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(337, 167); + this.Controls.Add(this.label4); + this.Controls.Add(this.linkLabel1); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.okButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AboutBox1"; + this.Padding = new System.Windows.Forms.Padding(9); + this.ShowIcon = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Wheel of Time About"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.LinkLabel linkLabel1; + private System.Windows.Forms.Label label4; + + } +} diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/AboutBox1.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/AboutBox1.cs new file mode 100644 index 0000000..c8dc149 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/AboutBox1.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using System.Reflection; + +namespace Wheel_of_Time___Character_Sheets +{ + partial class AboutBox1 : Form + { + public AboutBox1() + { + InitializeComponent(); + + // Initialize the AboutBox to display the product information from the assembly information. + // Change assembly information settings for your application through either: + // - Project->Properties->Application->Assembly Information + // - AssemblyInfo.cs + } + + #region Assembly Attibute Accessors + + public string AssemblyTitle + { + get + { + // Get all Title attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); + // If there is at least one Title attribute + if (attributes.Length > 0) + { + // Select the first one + AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; + // If it is not an empty string, return it + if (titleAttribute.Title != "") + return titleAttribute.Title; + } + // If there was no Title attribute, or if the Title attribute was the empty string, return the .exe name + return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); + } + } + + public string AssemblyVersion + { + get + { + return Assembly.GetExecutingAssembly().GetName().Version.ToString(); + } + } + + public string AssemblyDescription + { + get + { + // Get all Description attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); + // If there aren't any Description attributes, return an empty string + if (attributes.Length == 0) + return ""; + // If there is a Description attribute, return its value + return ((AssemblyDescriptionAttribute)attributes[0]).Description; + } + } + + public string AssemblyProduct + { + get + { + // Get all Product attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); + // If there aren't any Product attributes, return an empty string + if (attributes.Length == 0) + return ""; + // If there is a Product attribute, return its value + return ((AssemblyProductAttribute)attributes[0]).Product; + } + } + + public string AssemblyCopyright + { + get + { + // Get all Copyright attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); + // If there aren't any Copyright attributes, return an empty string + if (attributes.Length == 0) + return ""; + // If there is a Copyright attribute, return its value + return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; + } + } + + public string AssemblyCompany + { + get + { + // Get all Company attributes on this assembly + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); + // If there aren't any Company attributes, return an empty string + if (attributes.Length == 0) + return ""; + // If there is a Company attribute, return its value + return ((AssemblyCompanyAttribute)attributes[0]).Company; + } + } + #endregion + } +} diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/AboutBox1.resx b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/AboutBox1.resx new file mode 100644 index 0000000..8f95d66 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/AboutBox1.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Char.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Char.cs new file mode 100644 index 0000000..6e65cec --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Char.cs @@ -0,0 +1,326 @@ +using System; +using System.Collections; +using System.Text; +using System.ComponentModel; +using System.Drawing; + +namespace Wheel_of_Time___Character_Sheets +{ + [DefaultPropertyAttribute("Name")] + public class Char + { + private string name; + private string spieler; + internal class c_background + { internal static string[] background = { "Aiel", "Atha'an Miere", "Borderlander", + "Cairhienin", "Domani", "Ebou Dari", "Illianer", "Midlander", "Ogier", "Tairen", "Tar Valoner", "Taraboner"};} + private string background; + internal class c_sex + { internal static string[] sex = { "mnnlich", "weiblich" }; } + private string sex; + internal class c_level + { internal static string[] level = { "Bauer", "Springer", "Lufer", "Turm", "Knigin", "Knig" }; } + private string level; + private string chronik; + + private bool algai_d_siswai; + private bool armsman; + private bool initiate; + private bool noble; + private bool wanderer; + private bool wilder; + private bool woodsman; + + private Color haare; + private int gre; + private int alter; + private int gewicht; + private Color augen; + private Color haut; + + private int strke; + private int geschicklichkeit; + private int konstitution; + private int intelligenz; + private int weisheit; + private int charisma; + private int maxskillpoints; + + private string skillspath; + + [CategoryAttribute("Misc"), + DescriptionAttribute("Der Pfad zu den zustzlichen Skills")] + public string SkillsPath + { + get { return skillspath; } + set { skillspath = value; } + } + [CategoryAttribute("Misc"), + DescriptionAttribute("Maximale Skill Punkte")] + public int MaxSkillPoints + { + get { return maxskillpoints; } + set { maxskillpoints = value; } + } + + [CategoryAttribute("Attribute"), + DescriptionAttribute("Das Charisma")] + public int Charisma + { + get { return charisma; } + set { charisma = value; } + } + + [CategoryAttribute("Attribute"), + DescriptionAttribute("Die Weisheit")] + public int Weisheit + { + get { return weisheit; } + set { weisheit = value; } + } + + [CategoryAttribute("Attribute"), + DescriptionAttribute("Die Intelligenz")] + public int Intelligenz + { + get { return intelligenz; } + set { intelligenz = value; } + } + + [CategoryAttribute("Attribute"), + DescriptionAttribute("Die Konstitution")] + public int Konstitution + { + get { return konstitution; } + set { konstitution = value; } + } + + [CategoryAttribute("Attribute"), + DescriptionAttribute("Die Gesundheit")] + public int Geschicklichkeit + { + get { return geschicklichkeit; } + set { geschicklichkeit = value; } + } + + [CategoryAttribute("Attribute"), + DescriptionAttribute("Die Strke")] + public int Strke + { + get { return strke; } + set { strke = value; } + } + + [CategoryAttribute("Allgemein"), + DescriptionAttribute("Die Hautfarbe")] + public Color Haut + { + get { return haut; } + set { haut = value; } + } + + [CategoryAttribute("Allgemein"), + DescriptionAttribute("Die Augenfarbe")] + public Color Augen + { + get { return augen; } + set { augen = value; } + } + + [CategoryAttribute("Allgemein"), + DescriptionAttribute("Das Gewicht in Kilogramm")] + public int Gewicht + { + get { return gewicht; } + set { gewicht = value; } + } + + [CategoryAttribute("Allgemein"), + DescriptionAttribute("Das Alter")] + public int Alter + { + get { return alter; } + set { alter = value; } + } + + [CategoryAttribute("Allgemein"), + DescriptionAttribute("Die Krpergre in Centimetern")] + public int Gre + { + get { return gre; } + set { gre = value; } + } + + [CategoryAttribute("Allgemein"), + DescriptionAttribute("Der Name")] + public string Name + { + get { return name; } + set { name = value; } + } + + [CategoryAttribute("Allgemein"), + DescriptionAttribute("Der Spielername")] + public string Spieler + { + get { return spieler; } + set { spieler = value; } + } + + [CategoryAttribute("Allgemein"), + DescriptionAttribute("Die Haarfarbe")] + public Color Haare + { + get { return haare; } + set { haare = value; } + } + + [CategoryAttribute("Allgemein"), + DescriptionAttribute("Die Chronik")] + public string Chronik + { + get { return chronik; } + set { chronik = value; } + } + + [CategoryAttribute("Klasse"), + DescriptionAttribute("Woodsman")] + public bool Woodsman + { + get { return woodsman; } + set { woodsman = value; } + } + + [CategoryAttribute("Klasse"), + DescriptionAttribute("Wilder")] + public bool Wilder + { + get { return wilder; } + set { wilder = value; } + } + + [CategoryAttribute("Klasse"), + DescriptionAttribute("Wanderer")] + public bool Wanderer + { + get { return wanderer; } + set { wanderer = value; } + } + + [CategoryAttribute("Klasse"), + DescriptionAttribute("Noble")] + public bool Noble + { + get { return noble; } + set { noble = value; } + } + + [CategoryAttribute("Klasse"), + DescriptionAttribute("Initiate")] + public bool Initiate + { + get { return initiate; } + set { initiate = value; } + } + + [CategoryAttribute("Klasse"), + DescriptionAttribute("Armsman")] + public bool Armsman + { + get { return armsman; } + set { armsman = value; } + } + + [CategoryAttribute("Klasse"), + DescriptionAttribute("Algai'd'Siswai")] + public bool Algai_d_Siswai + { + get { return algai_d_siswai; } + set { algai_d_siswai = value; } + } + + [Browsable(true), + TypeConverter(typeof(BackgroundRuleConverter)), + CategoryAttribute("Allgemein"), + DescriptionAttribute("Der Background")] + public string Background + { + get { return background; } + set { background = value; } + } + + [Browsable(true), + TypeConverter(typeof(SexRuleConverter)), + CategoryAttribute("Allgemein"), + DescriptionAttribute("Das Geschlecht")] + public string Geschlecht + { + get { return sex; } + set { sex = value; } + } + + [Browsable(true), + TypeConverter(typeof(LevelRuleConverter)), + CategoryAttribute("Allgemein"), + DescriptionAttribute("Der Level")] + public string Level + { + get { return level; } + set { level = value; } + } + + public class SexRuleConverter : StringConverter + { + public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) + { + return new StandardValuesCollection(c_sex.sex); + } + + public override bool GetStandardValuesSupported(ITypeDescriptorContext context) + { + return true; + } + + public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) + { + return true; + } + } + + public class BackgroundRuleConverter : StringConverter + { + public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) + { + return new StandardValuesCollection(c_background.background); + } + + public override bool GetStandardValuesSupported(ITypeDescriptorContext context) + { + return true; + } + + public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) + { + return true; + } + } + + public class LevelRuleConverter : StringConverter + { + public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) + { + return new StandardValuesCollection(c_level.level); + } + + public override bool GetStandardValuesSupported(ITypeDescriptorContext context) + { + return true; + } + + public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) + { + return true; + } + } + } +} diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd.Designer.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd.Designer.cs new file mode 100644 index 0000000..64a145c --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd.Designer.cs @@ -0,0 +1,2835 @@ +namespace Wheel_of_Time___Character_Sheets +{ + partial class ChildWnd + { + /// + /// 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(ChildWnd)); + this.printDocument1 = new System.Drawing.Printing.PrintDocument(); + this.printDialog1 = new System.Windows.Forms.PrintDialog(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.toolStripSaveButton1 = new System.Windows.Forms.ToolStripButton(); + this.tsbSaveAs = new System.Windows.Forms.ToolStripButton(); + this.toolStripPrintButton = new System.Windows.Forms.ToolStripButton(); + this.bBackground = new System.Windows.Forms.ToolStripButton(); + this.bPrintPreview = new System.Windows.Forms.ToolStripButton(); + this.bAktualisieren = new System.Windows.Forms.ToolStripButton(); + this.saveWOTFileDialog = new System.Windows.Forms.SaveFileDialog(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.printPreviewControl1 = new System.Windows.Forms.PrintPreviewControl(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.propertyGrid1 = new System.Windows.Forms.PropertyGrid(); + this.tpBackgroundSkills = new System.Windows.Forms.TabPage(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.SkillsPanel = new System.Windows.Forms.Panel(); + this.pAnimal_Empathy = new Wheel_of_Time___Character_Sheets.Points(); + this.pAppraise = new Wheel_of_Time___Character_Sheets.Points(); + this.pBalance = new Wheel_of_Time___Character_Sheets.Points(); + this.pBluff = new Wheel_of_Time___Character_Sheets.Points(); + this.pClimb = new Wheel_of_Time___Character_Sheets.Points(); + this.pConcentration = new Wheel_of_Time___Character_Sheets.Points(); + this.pCraft = new Wheel_of_Time___Character_Sheets.Points(); + this.pDecipher_Script = new Wheel_of_Time___Character_Sheets.Points(); + this.pDiplomacy = new Wheel_of_Time___Character_Sheets.Points(); + this.pDisable_Device = new Wheel_of_Time___Character_Sheets.Points(); + this.pDisguise = new Wheel_of_Time___Character_Sheets.Points(); + this.pEscape_Artist = new Wheel_of_Time___Character_Sheets.Points(); + this.pForgery = new Wheel_of_Time___Character_Sheets.Points(); + this.pGather_Information = new Wheel_of_Time___Character_Sheets.Points(); + this.pHandle_Animal = new Wheel_of_Time___Character_Sheets.Points(); + this.pHeal = new Wheel_of_Time___Character_Sheets.Points(); + this.pHide = new Wheel_of_Time___Character_Sheets.Points(); + this.pInnuendo = new Wheel_of_Time___Character_Sheets.Points(); + this.pIntimidate = new Wheel_of_Time___Character_Sheets.Points(); + this.pIntuit_Direction = new Wheel_of_Time___Character_Sheets.Points(); + this.pJump = new Wheel_of_Time___Character_Sheets.Points(); + this.pKnowledge_Legends = new Wheel_of_Time___Character_Sheets.Points(); + this.pKnowledge_Arcana = new Wheel_of_Time___Character_Sheets.Points(); + this.pKnowledge_Arch = new Wheel_of_Time___Character_Sheets.Points(); + this.pKnowledge_Blight = new Wheel_of_Time___Character_Sheets.Points(); + this.pKnowledge_Geography = new Wheel_of_Time___Character_Sheets.Points(); + this.pKnowledge_History = new Wheel_of_Time___Character_Sheets.Points(); + this.pKnowledge_Local = new Wheel_of_Time___Character_Sheets.Points(); + this.pKnowledge_Nature = new Wheel_of_Time___Character_Sheets.Points(); + this.pKnowledge_Nobility = new Wheel_of_Time___Character_Sheets.Points(); + this.pListen = new Wheel_of_Time___Character_Sheets.Points(); + this.pMove_Silently = new Wheel_of_Time___Character_Sheets.Points(); + this.pOpen_Lock = new Wheel_of_Time___Character_Sheets.Points(); + this.pPick_Pocket = new Wheel_of_Time___Character_Sheets.Points(); + this.pRead_Lips = new Wheel_of_Time___Character_Sheets.Points(); + this.pRide = new Wheel_of_Time___Character_Sheets.Points(); + this.pSearch = new Wheel_of_Time___Character_Sheets.Points(); + this.pSense_Motive = new Wheel_of_Time___Character_Sheets.Points(); + this.pSpot = new Wheel_of_Time___Character_Sheets.Points(); + this.pSwim = new Wheel_of_Time___Character_Sheets.Points(); + this.pTumble = new Wheel_of_Time___Character_Sheets.Points(); + this.pUse_Rope = new Wheel_of_Time___Character_Sheets.Points(); + this.pWeavesight = new Wheel_of_Time___Character_Sheets.Points(); + this.pWilderness_Lore = new Wheel_of_Time___Character_Sheets.Points(); + this.panel2 = new System.Windows.Forms.Panel(); + this.bClear = new System.Windows.Forms.Button(); + this.bLoadSkills = new System.Windows.Forms.Button(); + this.bSaveSkills = new System.Windows.Forms.Button(); + this.bCreateSkill = new System.Windows.Forms.Button(); + this.tbSkillName = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.lSkillRest = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.lSkillUsed = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.lSkillGesamt = new System.Windows.Forms.Label(); + this.tpBackground_Feats = new System.Windows.Forms.TabPage(); + this.tpFeats = new System.Windows.Forms.TabPage(); + this.gbLost_Ability_Feats = new System.Windows.Forms.GroupBox(); + this.cbLatent_Dreamer = new System.Windows.Forms.CheckBox(); + this.cbDreamwalk = new System.Windows.Forms.CheckBox(); + this.cbBend_Dream = new System.Windows.Forms.CheckBox(); + this.cbDreamjump = new System.Windows.Forms.CheckBox(); + this.cbWaken_Dream = new System.Windows.Forms.CheckBox(); + this.cbDreamwatch = new System.Windows.Forms.CheckBox(); + this.cbLatent_Foreteller = new System.Windows.Forms.CheckBox(); + this.cbForeteller = new System.Windows.Forms.CheckBox(); + this.cbLatent_Old_Blood = new System.Windows.Forms.CheckBox(); + this.cbOld_Blood = new System.Windows.Forms.CheckBox(); + this.cbLatent_Sniffer = new System.Windows.Forms.CheckBox(); + this.cbSniffer = new System.Windows.Forms.CheckBox(); + this.cbLatent_Treesinger = new System.Windows.Forms.CheckBox(); + this.cbTreesinger = new System.Windows.Forms.CheckBox(); + this.cbLatent_Viewer = new System.Windows.Forms.CheckBox(); + this.cbViewing = new System.Windows.Forms.CheckBox(); + this.gbChanneling_Feats = new System.Windows.Forms.GroupBox(); + this.cbCombat_Casting = new System.Windows.Forms.CheckBox(); + this.cbExtra_Affinity = new System.Windows.Forms.CheckBox(); + this.cbExtra_Talent = new System.Windows.Forms.CheckBox(); + this.cbMultiweave = new System.Windows.Forms.CheckBox(); + this.cbPower_Heightened_Senses = new System.Windows.Forms.CheckBox(); + this.cbSense_Residue = new System.Windows.Forms.CheckBox(); + this.cbTie_Off_Weave = new System.Windows.Forms.CheckBox(); + this.gbSpecial_Feats = new System.Windows.Forms.GroupBox(); + this.cbEliminate_Block = new System.Windows.Forms.CheckBox(); + this.cbWeapon_Specializiation = new System.Windows.Forms.CheckBox(); + this.tbWeapon_Specializiation = new System.Windows.Forms.TextBox(); + this.gbGeneral_Feats = new System.Windows.Forms.GroupBox(); + this.cbAlertness = new System.Windows.Forms.CheckBox(); + this.cbAmbidextrous = new System.Windows.Forms.CheckBox(); + this.cbAnimal_Affinity = new System.Windows.Forms.CheckBox(); + this.cbArmor_Proficiency_light = new System.Windows.Forms.CheckBox(); + this.cbArmor_Proficiency_medium = new System.Windows.Forms.CheckBox(); + this.cbArmor_Proficiency_heavy = new System.Windows.Forms.CheckBox(); + this.cbImproved_Critical = new System.Windows.Forms.CheckBox(); + this.cbAthletic = new System.Windows.Forms.CheckBox(); + this.cbBlind_Fight = new System.Windows.Forms.CheckBox(); + this.cbCombat_Expertise = new System.Windows.Forms.CheckBox(); + this.cbImproved_Disarm = new System.Windows.Forms.CheckBox(); + this.cbImproved_Trip = new System.Windows.Forms.CheckBox(); + this.cbWhirlwind_Attack = new System.Windows.Forms.CheckBox(); + this.cbCombat_Reflexes = new System.Windows.Forms.CheckBox(); + this.cbThe_Dark_One_s_own_Luck = new System.Windows.Forms.CheckBox(); + this.cbDodge = new System.Windows.Forms.CheckBox(); + this.cbMobility = new System.Windows.Forms.CheckBox(); + this.cbSpring_Attack = new System.Windows.Forms.CheckBox(); + this.cbEndurance = new System.Windows.Forms.CheckBox(); + this.cbExotic_Weapon_Proficiency = new System.Windows.Forms.CheckBox(); + this.cbFame = new System.Windows.Forms.CheckBox(); + this.cbGreat_Fortitude = new System.Windows.Forms.CheckBox(); + this.cbImproved_Initiative = new System.Windows.Forms.CheckBox(); + this.cbImproved_Unarmed_Strike = new System.Windows.Forms.CheckBox(); + this.cbIron_Will = new System.Windows.Forms.CheckBox(); + this.cbLightning_Reflexes = new System.Windows.Forms.CheckBox(); + this.cbMartial_Weapon_Proficiency = new System.Windows.Forms.CheckBox(); + this.cbMental_Stability = new System.Windows.Forms.CheckBox(); + this.cbMimic = new System.Windows.Forms.CheckBox(); + this.cbMounted_Combat = new System.Windows.Forms.CheckBox(); + this.cbMounted_Archery = new System.Windows.Forms.CheckBox(); + this.cbTrample = new System.Windows.Forms.CheckBox(); + this.cbRide_By_Attack = new System.Windows.Forms.CheckBox(); + this.cbNimble = new System.Windows.Forms.CheckBox(); + this.cbPersuasive = new System.Windows.Forms.CheckBox(); + this.cbPoint_Blank_Shot = new System.Windows.Forms.CheckBox(); + this.cbFar_Shot = new System.Windows.Forms.CheckBox(); + this.cbPrecise_Shot = new System.Windows.Forms.CheckBox(); + this.cbRapid_Shot = new System.Windows.Forms.CheckBox(); + this.cbShot_on_the_Run = new System.Windows.Forms.CheckBox(); + this.cbPower_Attack = new System.Windows.Forms.CheckBox(); + this.cbCleave = new System.Windows.Forms.CheckBox(); + this.cbGreat_Cleave = new System.Windows.Forms.CheckBox(); + this.cbImproved_Bull_Rush = new System.Windows.Forms.CheckBox(); + this.cbQuick_Draw = new System.Windows.Forms.CheckBox(); + this.cbQuickness = new System.Windows.Forms.CheckBox(); + this.cbRun = new System.Windows.Forms.CheckBox(); + this.cbSharp_eyed = new System.Windows.Forms.CheckBox(); + this.cbShield_Proficiency = new System.Windows.Forms.CheckBox(); + this.cbSimple_Weapon_Proficiency = new System.Windows.Forms.CheckBox(); + this.cbSkill_Emphasis = new System.Windows.Forms.CheckBox(); + this.cbStealthy = new System.Windows.Forms.CheckBox(); + this.cbToughness = new System.Windows.Forms.CheckBox(); + this.cbTrack = new System.Windows.Forms.CheckBox(); + this.cbTrustworthy = new System.Windows.Forms.CheckBox(); + this.cbTwo_Weapon_Fighting = new System.Windows.Forms.CheckBox(); + this.cbImproved_Two_Weapon_Fighting = new System.Windows.Forms.CheckBox(); + this.cbWeapon_Finesse = new System.Windows.Forms.CheckBox(); + this.cbWeapon_Focus = new System.Windows.Forms.CheckBox(); + this.tbWeapon_Focus = new System.Windows.Forms.TextBox(); + this.tbWeapon_Finesse = new System.Windows.Forms.TextBox(); + this.tbMartial_Weapon_Proficiency = new System.Windows.Forms.TextBox(); + this.tbExotic_Weapon_Proficiency = new System.Windows.Forms.TextBox(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.gbAffinities = new System.Windows.Forms.GroupBox(); + this.cbAir = new System.Windows.Forms.CheckBox(); + this.cbEarth = new System.Windows.Forms.CheckBox(); + this.cbWater = new System.Windows.Forms.CheckBox(); + this.cbFire = new System.Windows.Forms.CheckBox(); + this.cbSpirit = new System.Windows.Forms.CheckBox(); + this.gbTalents = new System.Windows.Forms.GroupBox(); + this.cbBalefire = new System.Windows.Forms.CheckBox(); + this.cbTravling = new System.Windows.Forms.CheckBox(); + this.cbIllusion = new System.Windows.Forms.CheckBox(); + this.cbWarding = new System.Windows.Forms.CheckBox(); + this.cbHealing = new System.Windows.Forms.CheckBox(); + this.cbCloudDancing = new System.Windows.Forms.CheckBox(); + this.cbElementalism = new System.Windows.Forms.CheckBox(); + this.cbEarthSinging = new System.Windows.Forms.CheckBox(); + this.cbConjunction = new System.Windows.Forms.CheckBox(); + this.tpHistory = new System.Windows.Forms.TabPage(); + this.tbGeschichte = new System.Windows.Forms.TextBox(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.tbSprche = new System.Windows.Forms.TextBox(); + this.bKopieren = new System.Windows.Forms.Button(); + this.tbSpruch = new System.Windows.Forms.TextBox(); + this.printPreviewDialog1 = new System.Windows.Forms.PrintPreviewDialog(); + this.saveSKLFileDialog = new System.Windows.Forms.SaveFileDialog(); + this.openSKLFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.toolStrip1.SuspendLayout(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.SkillsPanel.SuspendLayout(); + this.panel2.SuspendLayout(); + this.tpFeats.SuspendLayout(); + this.gbLost_Ability_Feats.SuspendLayout(); + this.gbChanneling_Feats.SuspendLayout(); + this.gbSpecial_Feats.SuspendLayout(); + this.gbGeneral_Feats.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.gbAffinities.SuspendLayout(); + this.gbTalents.SuspendLayout(); + this.tpHistory.SuspendLayout(); + this.tabPage4.SuspendLayout(); + this.SuspendLayout(); + // + // printDocument1 + // + this.printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.PrintPreview); + // + // printDialog1 + // + this.printDialog1.AllowSelection = true; + this.printDialog1.AllowSomePages = true; + this.printDialog1.Document = this.printDocument1; + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + // + // toolStrip1 + // + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripSaveButton1, + this.tsbSaveAs, + this.toolStripSeparator1, + this.toolStripPrintButton, + this.bBackground, + this.bPrintPreview, + this.bAktualisieren}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(1170, 25); + this.toolStrip1.TabIndex = 3; + this.toolStrip1.Text = "toolStrip1"; + this.toolStrip1.Visible = false; + // + // toolStripSaveButton1 + // + this.toolStripSaveButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripSaveButton1.Image"))); + this.toolStripSaveButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripSaveButton1.Name = "toolStripSaveButton1"; + this.toolStripSaveButton1.Text = "Speichern"; + this.toolStripSaveButton1.Click += new System.EventHandler(this.toolStripSaveButton1_Click); + // + // tsbSaveAs + // + this.tsbSaveAs.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbSaveAs.Image = ((System.Drawing.Image)(resources.GetObject("tsbSaveAs.Image"))); + this.tsbSaveAs.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbSaveAs.Name = "tsbSaveAs"; + this.tsbSaveAs.Text = "Speichern unter"; + this.tsbSaveAs.Click += new System.EventHandler(this.tsbSaveAs_Click); + // + // toolStripPrintButton + // + this.toolStripPrintButton.Image = ((System.Drawing.Image)(resources.GetObject("toolStripPrintButton.Image"))); + this.toolStripPrintButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripPrintButton.Name = "toolStripPrintButton"; + this.toolStripPrintButton.Text = "Drucken"; + this.toolStripPrintButton.Click += new System.EventHandler(this.toolStripPrintButton_Click); + // + // bBackground + // + this.bBackground.CheckOnClick = true; + this.bBackground.Image = ((System.Drawing.Image)(resources.GetObject("bBackground.Image"))); + this.bBackground.ImageTransparentColor = System.Drawing.Color.Magenta; + this.bBackground.Name = "bBackground"; + this.bBackground.Text = "Background on/off"; + this.bBackground.Click += new System.EventHandler(this.bBackground_Click); + // + // bPrintPreview + // + this.bPrintPreview.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.bPrintPreview.Image = ((System.Drawing.Image)(resources.GetObject("bPrintPreview.Image"))); + this.bPrintPreview.ImageTransparentColor = System.Drawing.Color.Magenta; + this.bPrintPreview.Name = "bPrintPreview"; + this.bPrintPreview.Text = "Druckvorschau"; + this.bPrintPreview.Click += new System.EventHandler(this.bPrintPreview_Click); + // + // bAktualisieren + // + this.bAktualisieren.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.bAktualisieren.Image = ((System.Drawing.Image)(resources.GetObject("bAktualisieren.Image"))); + this.bAktualisieren.ImageTransparentColor = System.Drawing.Color.Magenta; + this.bAktualisieren.Name = "bAktualisieren"; + this.bAktualisieren.Text = "Aktualisieren"; + this.bAktualisieren.Click += new System.EventHandler(this.bAktualisieren_Click); + // + // saveWOTFileDialog + // + this.saveWOTFileDialog.DefaultExt = "wot"; + this.saveWOTFileDialog.Filter = "Wheel of Time Character Sheets (*.wot)|*.wot|Alle Dateien|*.*"; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.printPreviewControl1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.tabControl1); + this.splitContainer1.Size = new System.Drawing.Size(1170, 575); + this.splitContainer1.SplitterDistance = 716; + this.splitContainer1.TabIndex = 5; + this.splitContainer1.Text = "splitContainer1"; + // + // printPreviewControl1 + // + this.printPreviewControl1.AutoZoom = false; + this.printPreviewControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.printPreviewControl1.Document = this.printDocument1; + this.printPreviewControl1.Location = new System.Drawing.Point(0, 0); + this.printPreviewControl1.Name = "printPreviewControl1"; + this.printPreviewControl1.Rows = 2; + this.printPreviewControl1.Size = new System.Drawing.Size(716, 575); + this.printPreviewControl1.TabIndex = 0; + this.printPreviewControl1.Zoom = 1; + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tpFeats); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Controls.Add(this.tpHistory); + this.tabControl1.Controls.Add(this.tabPage4); + this.tabControl1.Controls.Add(this.tpBackgroundSkills); + this.tabControl1.Controls.Add(this.tpBackground_Feats); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(450, 575); + this.tabControl1.TabIndex = 16; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.propertyGrid1); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Padding = new System.Windows.Forms.Padding(3); + this.tabPage3.Size = new System.Drawing.Size(442, 549); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "Properties"; + // + // propertyGrid1 + // + this.propertyGrid1.Dock = System.Windows.Forms.DockStyle.Fill; + this.propertyGrid1.Location = new System.Drawing.Point(3, 3); + this.propertyGrid1.Name = "propertyGrid1"; + this.propertyGrid1.Size = new System.Drawing.Size(436, 543); + this.propertyGrid1.TabIndex = 2; + this.propertyGrid1.ToolbarVisible = false; + this.propertyGrid1.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.propertyGrid1_PropertyValueChanged); + // + // tpBackgroundSkills + // + this.tpBackgroundSkills.Location = new System.Drawing.Point(4, 22); + this.tpBackgroundSkills.Name = "tpBackgroundSkills"; + this.tpBackgroundSkills.Size = new System.Drawing.Size(442, 549); + this.tpBackgroundSkills.TabIndex = 4; + this.tpBackgroundSkills.Text = "Background Skills"; + this.tpBackgroundSkills.Leave += new System.EventHandler(this.tpBackgroundSkills_Leave); + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.SkillsPanel); + this.tabPage1.Controls.Add(this.panel2); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(442, 549); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Skills"; + // + // SkillsPanel + // + this.SkillsPanel.AutoScroll = true; + this.SkillsPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.SkillsPanel.Controls.Add(this.pAnimal_Empathy); + this.SkillsPanel.Controls.Add(this.pAppraise); + this.SkillsPanel.Controls.Add(this.pBalance); + this.SkillsPanel.Controls.Add(this.pBluff); + this.SkillsPanel.Controls.Add(this.pClimb); + this.SkillsPanel.Controls.Add(this.pConcentration); + this.SkillsPanel.Controls.Add(this.pCraft); + this.SkillsPanel.Controls.Add(this.pDecipher_Script); + this.SkillsPanel.Controls.Add(this.pDiplomacy); + this.SkillsPanel.Controls.Add(this.pDisable_Device); + this.SkillsPanel.Controls.Add(this.pDisguise); + this.SkillsPanel.Controls.Add(this.pEscape_Artist); + this.SkillsPanel.Controls.Add(this.pForgery); + this.SkillsPanel.Controls.Add(this.pGather_Information); + this.SkillsPanel.Controls.Add(this.pHandle_Animal); + this.SkillsPanel.Controls.Add(this.pHeal); + this.SkillsPanel.Controls.Add(this.pHide); + this.SkillsPanel.Controls.Add(this.pInnuendo); + this.SkillsPanel.Controls.Add(this.pIntimidate); + this.SkillsPanel.Controls.Add(this.pIntuit_Direction); + this.SkillsPanel.Controls.Add(this.pJump); + this.SkillsPanel.Controls.Add(this.pKnowledge_Legends); + this.SkillsPanel.Controls.Add(this.pKnowledge_Arcana); + this.SkillsPanel.Controls.Add(this.pKnowledge_Arch); + this.SkillsPanel.Controls.Add(this.pKnowledge_Blight); + this.SkillsPanel.Controls.Add(this.pKnowledge_Geography); + this.SkillsPanel.Controls.Add(this.pKnowledge_History); + this.SkillsPanel.Controls.Add(this.pKnowledge_Local); + this.SkillsPanel.Controls.Add(this.pKnowledge_Nature); + this.SkillsPanel.Controls.Add(this.pKnowledge_Nobility); + this.SkillsPanel.Controls.Add(this.pListen); + this.SkillsPanel.Controls.Add(this.pMove_Silently); + this.SkillsPanel.Controls.Add(this.pOpen_Lock); + this.SkillsPanel.Controls.Add(this.pPick_Pocket); + this.SkillsPanel.Controls.Add(this.pRead_Lips); + this.SkillsPanel.Controls.Add(this.pRide); + this.SkillsPanel.Controls.Add(this.pSearch); + this.SkillsPanel.Controls.Add(this.pSense_Motive); + this.SkillsPanel.Controls.Add(this.pSpot); + this.SkillsPanel.Controls.Add(this.pSwim); + this.SkillsPanel.Controls.Add(this.pTumble); + this.SkillsPanel.Controls.Add(this.pUse_Rope); + this.SkillsPanel.Controls.Add(this.pWeavesight); + this.SkillsPanel.Controls.Add(this.pWilderness_Lore); + this.SkillsPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.SkillsPanel.Location = new System.Drawing.Point(3, 57); + this.SkillsPanel.Name = "SkillsPanel"; + this.SkillsPanel.Size = new System.Drawing.Size(436, 489); + this.SkillsPanel.TabIndex = 16; + this.SkillsPanel.Leave += new System.EventHandler(this.SkillsPanel_Leave); + // + // pAnimal_Empathy + // + this.pAnimal_Empathy.Aktiv = true; + this.pAnimal_Empathy.BackgroundSkill = false; + this.pAnimal_Empathy.GivenPoints = 0; + this.pAnimal_Empathy.Location = new System.Drawing.Point(0, 6); + this.pAnimal_Empathy.Multiplier = 1; + this.pAnimal_Empathy.Name = "pAnimal_Empathy"; + this.pAnimal_Empathy.OgierBackgroundSkill = false; + this.pAnimal_Empathy.Size = new System.Drawing.Size(397, 20); + this.pAnimal_Empathy.SkillName = "Animal Empathy"; + this.pAnimal_Empathy.TabIndex = 0; + this.pAnimal_Empathy.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pAppraise + // + this.pAppraise.Aktiv = true; + this.pAppraise.BackgroundSkill = false; + this.pAppraise.GivenPoints = 0; + this.pAppraise.Location = new System.Drawing.Point(0, 28); + this.pAppraise.Multiplier = 1; + this.pAppraise.Name = "pAppraise"; + this.pAppraise.OgierBackgroundSkill = false; + this.pAppraise.Size = new System.Drawing.Size(397, 20); + this.pAppraise.SkillName = "Appraise"; + this.pAppraise.TabIndex = 1; + this.pAppraise.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pBalance + // + this.pBalance.Aktiv = true; + this.pBalance.BackgroundSkill = false; + this.pBalance.GivenPoints = 0; + this.pBalance.Location = new System.Drawing.Point(0, 50); + this.pBalance.Multiplier = 1; + this.pBalance.Name = "pBalance"; + this.pBalance.OgierBackgroundSkill = false; + this.pBalance.Size = new System.Drawing.Size(397, 20); + this.pBalance.SkillName = "Balance"; + this.pBalance.TabIndex = 2; + this.pBalance.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pBluff + // + this.pBluff.Aktiv = true; + this.pBluff.BackgroundSkill = false; + this.pBluff.GivenPoints = 0; + this.pBluff.Location = new System.Drawing.Point(0, 72); + this.pBluff.Multiplier = 1; + this.pBluff.Name = "pBluff"; + this.pBluff.OgierBackgroundSkill = false; + this.pBluff.Size = new System.Drawing.Size(397, 20); + this.pBluff.SkillName = "Bluff"; + this.pBluff.TabIndex = 3; + this.pBluff.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pClimb + // + this.pClimb.Aktiv = true; + this.pClimb.BackgroundSkill = false; + this.pClimb.GivenPoints = 0; + this.pClimb.Location = new System.Drawing.Point(0, 94); + this.pClimb.Multiplier = 1; + this.pClimb.Name = "pClimb"; + this.pClimb.OgierBackgroundSkill = false; + this.pClimb.Size = new System.Drawing.Size(397, 20); + this.pClimb.SkillName = "Climb"; + this.pClimb.TabIndex = 4; + this.pClimb.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pConcentration + // + this.pConcentration.Aktiv = true; + this.pConcentration.BackgroundSkill = false; + this.pConcentration.GivenPoints = 0; + this.pConcentration.Location = new System.Drawing.Point(0, 116); + this.pConcentration.Multiplier = 1; + this.pConcentration.Name = "pConcentration"; + this.pConcentration.OgierBackgroundSkill = false; + this.pConcentration.Size = new System.Drawing.Size(397, 20); + this.pConcentration.SkillName = "Concentration"; + this.pConcentration.TabIndex = 6; + this.pConcentration.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pCraft + // + this.pCraft.Aktiv = true; + this.pCraft.BackgroundSkill = false; + this.pCraft.GivenPoints = 0; + this.pCraft.Location = new System.Drawing.Point(0, 138); + this.pCraft.Multiplier = 1; + this.pCraft.Name = "pCraft"; + this.pCraft.OgierBackgroundSkill = false; + this.pCraft.Size = new System.Drawing.Size(397, 20); + this.pCraft.SkillName = "Craft"; + this.pCraft.TabIndex = 7; + this.pCraft.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pDecipher_Script + // + this.pDecipher_Script.Aktiv = true; + this.pDecipher_Script.BackgroundSkill = false; + this.pDecipher_Script.GivenPoints = 0; + this.pDecipher_Script.Location = new System.Drawing.Point(0, 160); + this.pDecipher_Script.Multiplier = 1; + this.pDecipher_Script.Name = "pDecipher_Script"; + this.pDecipher_Script.OgierBackgroundSkill = false; + this.pDecipher_Script.Size = new System.Drawing.Size(397, 20); + this.pDecipher_Script.SkillName = "Decipher Script"; + this.pDecipher_Script.TabIndex = 8; + this.pDecipher_Script.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pDiplomacy + // + this.pDiplomacy.Aktiv = true; + this.pDiplomacy.BackgroundSkill = false; + this.pDiplomacy.GivenPoints = 0; + this.pDiplomacy.Location = new System.Drawing.Point(0, 182); + this.pDiplomacy.Multiplier = 1; + this.pDiplomacy.Name = "pDiplomacy"; + this.pDiplomacy.OgierBackgroundSkill = false; + this.pDiplomacy.Size = new System.Drawing.Size(397, 20); + this.pDiplomacy.SkillName = "Diplomacy"; + this.pDiplomacy.TabIndex = 9; + this.pDiplomacy.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pDisable_Device + // + this.pDisable_Device.Aktiv = true; + this.pDisable_Device.BackgroundSkill = false; + this.pDisable_Device.GivenPoints = 0; + this.pDisable_Device.Location = new System.Drawing.Point(0, 204); + this.pDisable_Device.Multiplier = 1; + this.pDisable_Device.Name = "pDisable_Device"; + this.pDisable_Device.OgierBackgroundSkill = false; + this.pDisable_Device.Size = new System.Drawing.Size(397, 20); + this.pDisable_Device.SkillName = "Disable Device"; + this.pDisable_Device.TabIndex = 10; + this.pDisable_Device.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pDisguise + // + this.pDisguise.Aktiv = true; + this.pDisguise.BackgroundSkill = false; + this.pDisguise.GivenPoints = 0; + this.pDisguise.Location = new System.Drawing.Point(0, 226); + this.pDisguise.Multiplier = 1; + this.pDisguise.Name = "pDisguise"; + this.pDisguise.OgierBackgroundSkill = false; + this.pDisguise.Size = new System.Drawing.Size(397, 20); + this.pDisguise.SkillName = "Disguise"; + this.pDisguise.TabIndex = 11; + this.pDisguise.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pEscape_Artist + // + this.pEscape_Artist.Aktiv = true; + this.pEscape_Artist.BackgroundSkill = false; + this.pEscape_Artist.GivenPoints = 0; + this.pEscape_Artist.Location = new System.Drawing.Point(0, 248); + this.pEscape_Artist.Multiplier = 1; + this.pEscape_Artist.Name = "pEscape_Artist"; + this.pEscape_Artist.OgierBackgroundSkill = false; + this.pEscape_Artist.Size = new System.Drawing.Size(397, 20); + this.pEscape_Artist.SkillName = "Escape Artist"; + this.pEscape_Artist.TabIndex = 12; + this.pEscape_Artist.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pForgery + // + this.pForgery.Aktiv = true; + this.pForgery.BackgroundSkill = false; + this.pForgery.GivenPoints = 0; + this.pForgery.Location = new System.Drawing.Point(0, 270); + this.pForgery.Multiplier = 1; + this.pForgery.Name = "pForgery"; + this.pForgery.OgierBackgroundSkill = false; + this.pForgery.Size = new System.Drawing.Size(397, 20); + this.pForgery.SkillName = "Forgery"; + this.pForgery.TabIndex = 14; + this.pForgery.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pGather_Information + // + this.pGather_Information.Aktiv = true; + this.pGather_Information.BackgroundSkill = false; + this.pGather_Information.GivenPoints = 0; + this.pGather_Information.Location = new System.Drawing.Point(0, 292); + this.pGather_Information.Multiplier = 1; + this.pGather_Information.Name = "pGather_Information"; + this.pGather_Information.OgierBackgroundSkill = false; + this.pGather_Information.Size = new System.Drawing.Size(397, 20); + this.pGather_Information.SkillName = "Gather Information"; + this.pGather_Information.TabIndex = 15; + this.pGather_Information.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pHandle_Animal + // + this.pHandle_Animal.Aktiv = true; + this.pHandle_Animal.BackgroundSkill = false; + this.pHandle_Animal.GivenPoints = 0; + this.pHandle_Animal.Location = new System.Drawing.Point(0, 314); + this.pHandle_Animal.Multiplier = 1; + this.pHandle_Animal.Name = "pHandle_Animal"; + this.pHandle_Animal.OgierBackgroundSkill = false; + this.pHandle_Animal.Size = new System.Drawing.Size(397, 20); + this.pHandle_Animal.SkillName = "Handle Animal"; + this.pHandle_Animal.TabIndex = 16; + this.pHandle_Animal.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pHeal + // + this.pHeal.Aktiv = true; + this.pHeal.BackgroundSkill = false; + this.pHeal.GivenPoints = 0; + this.pHeal.Location = new System.Drawing.Point(0, 336); + this.pHeal.Multiplier = 1; + this.pHeal.Name = "pHeal"; + this.pHeal.OgierBackgroundSkill = false; + this.pHeal.Size = new System.Drawing.Size(397, 20); + this.pHeal.SkillName = "Heal"; + this.pHeal.TabIndex = 17; + this.pHeal.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pHide + // + this.pHide.Aktiv = true; + this.pHide.BackgroundSkill = false; + this.pHide.GivenPoints = 0; + this.pHide.Location = new System.Drawing.Point(0, 358); + this.pHide.Multiplier = 1; + this.pHide.Name = "pHide"; + this.pHide.OgierBackgroundSkill = false; + this.pHide.Size = new System.Drawing.Size(397, 20); + this.pHide.SkillName = "Hide"; + this.pHide.TabIndex = 18; + this.pHide.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pInnuendo + // + this.pInnuendo.Aktiv = true; + this.pInnuendo.BackgroundSkill = false; + this.pInnuendo.GivenPoints = 0; + this.pInnuendo.Location = new System.Drawing.Point(0, 380); + this.pInnuendo.Multiplier = 1; + this.pInnuendo.Name = "pInnuendo"; + this.pInnuendo.OgierBackgroundSkill = false; + this.pInnuendo.Size = new System.Drawing.Size(397, 20); + this.pInnuendo.SkillName = "Innuendo"; + this.pInnuendo.TabIndex = 19; + this.pInnuendo.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pIntimidate + // + this.pIntimidate.Aktiv = true; + this.pIntimidate.BackgroundSkill = false; + this.pIntimidate.GivenPoints = 0; + this.pIntimidate.Location = new System.Drawing.Point(0, 402); + this.pIntimidate.Multiplier = 1; + this.pIntimidate.Name = "pIntimidate"; + this.pIntimidate.OgierBackgroundSkill = false; + this.pIntimidate.Size = new System.Drawing.Size(397, 20); + this.pIntimidate.SkillName = "Intimidate"; + this.pIntimidate.TabIndex = 20; + this.pIntimidate.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pIntuit_Direction + // + this.pIntuit_Direction.Aktiv = true; + this.pIntuit_Direction.BackgroundSkill = false; + this.pIntuit_Direction.GivenPoints = 0; + this.pIntuit_Direction.Location = new System.Drawing.Point(0, 424); + this.pIntuit_Direction.Multiplier = 1; + this.pIntuit_Direction.Name = "pIntuit_Direction"; + this.pIntuit_Direction.OgierBackgroundSkill = false; + this.pIntuit_Direction.Size = new System.Drawing.Size(397, 20); + this.pIntuit_Direction.SkillName = "Intuit Direction"; + this.pIntuit_Direction.TabIndex = 21; + this.pIntuit_Direction.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pJump + // + this.pJump.Aktiv = true; + this.pJump.BackgroundSkill = false; + this.pJump.GivenPoints = 0; + this.pJump.Location = new System.Drawing.Point(0, 446); + this.pJump.Multiplier = 1; + this.pJump.Name = "pJump"; + this.pJump.OgierBackgroundSkill = false; + this.pJump.Size = new System.Drawing.Size(397, 20); + this.pJump.SkillName = "Jump"; + this.pJump.TabIndex = 22; + this.pJump.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pKnowledge_Legends + // + this.pKnowledge_Legends.Aktiv = true; + this.pKnowledge_Legends.BackgroundSkill = false; + this.pKnowledge_Legends.GivenPoints = 0; + this.pKnowledge_Legends.Location = new System.Drawing.Point(0, 468); + this.pKnowledge_Legends.Multiplier = 1; + this.pKnowledge_Legends.Name = "pKnowledge_Legends"; + this.pKnowledge_Legends.OgierBackgroundSkill = false; + this.pKnowledge_Legends.Size = new System.Drawing.Size(397, 20); + this.pKnowledge_Legends.SkillName = "Knowledge (Legends)"; + this.pKnowledge_Legends.TabIndex = 23; + this.pKnowledge_Legends.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pKnowledge_Arcana + // + this.pKnowledge_Arcana.Aktiv = true; + this.pKnowledge_Arcana.BackgroundSkill = false; + this.pKnowledge_Arcana.GivenPoints = 0; + this.pKnowledge_Arcana.Location = new System.Drawing.Point(0, 490); + this.pKnowledge_Arcana.Multiplier = 1; + this.pKnowledge_Arcana.Name = "pKnowledge_Arcana"; + this.pKnowledge_Arcana.OgierBackgroundSkill = false; + this.pKnowledge_Arcana.Size = new System.Drawing.Size(397, 20); + this.pKnowledge_Arcana.SkillName = "Knowledge (Arcana)"; + this.pKnowledge_Arcana.TabIndex = 24; + this.pKnowledge_Arcana.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pKnowledge_Arch + // + this.pKnowledge_Arch.Aktiv = true; + this.pKnowledge_Arch.BackgroundSkill = false; + this.pKnowledge_Arch.GivenPoints = 0; + this.pKnowledge_Arch.Location = new System.Drawing.Point(0, 512); + this.pKnowledge_Arch.Multiplier = 1; + this.pKnowledge_Arch.Name = "pKnowledge_Arch"; + this.pKnowledge_Arch.OgierBackgroundSkill = false; + this.pKnowledge_Arch.Size = new System.Drawing.Size(397, 20); + this.pKnowledge_Arch.SkillName = "Knowledge (Arch)"; + this.pKnowledge_Arch.TabIndex = 25; + this.pKnowledge_Arch.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pKnowledge_Blight + // + this.pKnowledge_Blight.Aktiv = true; + this.pKnowledge_Blight.BackgroundSkill = false; + this.pKnowledge_Blight.GivenPoints = 0; + this.pKnowledge_Blight.Location = new System.Drawing.Point(0, 534); + this.pKnowledge_Blight.Multiplier = 1; + this.pKnowledge_Blight.Name = "pKnowledge_Blight"; + this.pKnowledge_Blight.OgierBackgroundSkill = false; + this.pKnowledge_Blight.Size = new System.Drawing.Size(397, 20); + this.pKnowledge_Blight.SkillName = "Knowledge (Blight)"; + this.pKnowledge_Blight.TabIndex = 26; + this.pKnowledge_Blight.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pKnowledge_Geography + // + this.pKnowledge_Geography.Aktiv = true; + this.pKnowledge_Geography.BackgroundSkill = false; + this.pKnowledge_Geography.GivenPoints = 0; + this.pKnowledge_Geography.Location = new System.Drawing.Point(0, 556); + this.pKnowledge_Geography.Multiplier = 1; + this.pKnowledge_Geography.Name = "pKnowledge_Geography"; + this.pKnowledge_Geography.OgierBackgroundSkill = false; + this.pKnowledge_Geography.Size = new System.Drawing.Size(397, 20); + this.pKnowledge_Geography.SkillName = "Knowledge (Geography)"; + this.pKnowledge_Geography.TabIndex = 27; + this.pKnowledge_Geography.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pKnowledge_History + // + this.pKnowledge_History.Aktiv = true; + this.pKnowledge_History.BackgroundSkill = false; + this.pKnowledge_History.GivenPoints = 0; + this.pKnowledge_History.Location = new System.Drawing.Point(0, 578); + this.pKnowledge_History.Multiplier = 1; + this.pKnowledge_History.Name = "pKnowledge_History"; + this.pKnowledge_History.OgierBackgroundSkill = false; + this.pKnowledge_History.Size = new System.Drawing.Size(397, 20); + this.pKnowledge_History.SkillName = "Knowledge (History)"; + this.pKnowledge_History.TabIndex = 28; + this.pKnowledge_History.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pKnowledge_Local + // + this.pKnowledge_Local.Aktiv = true; + this.pKnowledge_Local.BackgroundSkill = false; + this.pKnowledge_Local.GivenPoints = 0; + this.pKnowledge_Local.Location = new System.Drawing.Point(0, 600); + this.pKnowledge_Local.Multiplier = 1; + this.pKnowledge_Local.Name = "pKnowledge_Local"; + this.pKnowledge_Local.OgierBackgroundSkill = false; + this.pKnowledge_Local.Size = new System.Drawing.Size(397, 20); + this.pKnowledge_Local.SkillName = "Knowledge (Local)"; + this.pKnowledge_Local.TabIndex = 29; + this.pKnowledge_Local.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pKnowledge_Nature + // + this.pKnowledge_Nature.Aktiv = true; + this.pKnowledge_Nature.BackgroundSkill = false; + this.pKnowledge_Nature.GivenPoints = 0; + this.pKnowledge_Nature.Location = new System.Drawing.Point(0, 622); + this.pKnowledge_Nature.Multiplier = 1; + this.pKnowledge_Nature.Name = "pKnowledge_Nature"; + this.pKnowledge_Nature.OgierBackgroundSkill = false; + this.pKnowledge_Nature.Size = new System.Drawing.Size(397, 20); + this.pKnowledge_Nature.SkillName = "Knowledge (Nature)"; + this.pKnowledge_Nature.TabIndex = 30; + this.pKnowledge_Nature.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pKnowledge_Nobility + // + this.pKnowledge_Nobility.Aktiv = true; + this.pKnowledge_Nobility.BackgroundSkill = false; + this.pKnowledge_Nobility.GivenPoints = 0; + this.pKnowledge_Nobility.Location = new System.Drawing.Point(0, 644); + this.pKnowledge_Nobility.Multiplier = 1; + this.pKnowledge_Nobility.Name = "pKnowledge_Nobility"; + this.pKnowledge_Nobility.OgierBackgroundSkill = false; + this.pKnowledge_Nobility.Size = new System.Drawing.Size(397, 20); + this.pKnowledge_Nobility.SkillName = "Knowledge (Nobility)"; + this.pKnowledge_Nobility.TabIndex = 31; + this.pKnowledge_Nobility.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pListen + // + this.pListen.Aktiv = true; + this.pListen.BackgroundSkill = false; + this.pListen.GivenPoints = 0; + this.pListen.Location = new System.Drawing.Point(0, 666); + this.pListen.Multiplier = 1; + this.pListen.Name = "pListen"; + this.pListen.OgierBackgroundSkill = false; + this.pListen.Size = new System.Drawing.Size(397, 20); + this.pListen.SkillName = "Listen"; + this.pListen.TabIndex = 32; + this.pListen.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pMove_Silently + // + this.pMove_Silently.Aktiv = true; + this.pMove_Silently.BackgroundSkill = false; + this.pMove_Silently.GivenPoints = 0; + this.pMove_Silently.Location = new System.Drawing.Point(0, 688); + this.pMove_Silently.Multiplier = 1; + this.pMove_Silently.Name = "pMove_Silently"; + this.pMove_Silently.OgierBackgroundSkill = false; + this.pMove_Silently.Size = new System.Drawing.Size(397, 20); + this.pMove_Silently.SkillName = "Move Silently"; + this.pMove_Silently.TabIndex = 33; + this.pMove_Silently.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pOpen_Lock + // + this.pOpen_Lock.Aktiv = true; + this.pOpen_Lock.BackgroundSkill = false; + this.pOpen_Lock.GivenPoints = 0; + this.pOpen_Lock.Location = new System.Drawing.Point(0, 710); + this.pOpen_Lock.Multiplier = 1; + this.pOpen_Lock.Name = "pOpen_Lock"; + this.pOpen_Lock.OgierBackgroundSkill = false; + this.pOpen_Lock.Size = new System.Drawing.Size(397, 20); + this.pOpen_Lock.SkillName = "Open Lock"; + this.pOpen_Lock.TabIndex = 34; + this.pOpen_Lock.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pPick_Pocket + // + this.pPick_Pocket.Aktiv = true; + this.pPick_Pocket.BackgroundSkill = false; + this.pPick_Pocket.GivenPoints = 0; + this.pPick_Pocket.Location = new System.Drawing.Point(0, 732); + this.pPick_Pocket.Multiplier = 1; + this.pPick_Pocket.Name = "pPick_Pocket"; + this.pPick_Pocket.OgierBackgroundSkill = false; + this.pPick_Pocket.Size = new System.Drawing.Size(397, 20); + this.pPick_Pocket.SkillName = "Pick Pocket"; + this.pPick_Pocket.TabIndex = 35; + this.pPick_Pocket.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pRead_Lips + // + this.pRead_Lips.Aktiv = true; + this.pRead_Lips.BackgroundSkill = false; + this.pRead_Lips.GivenPoints = 0; + this.pRead_Lips.Location = new System.Drawing.Point(0, 754); + this.pRead_Lips.Multiplier = 1; + this.pRead_Lips.Name = "pRead_Lips"; + this.pRead_Lips.OgierBackgroundSkill = false; + this.pRead_Lips.Size = new System.Drawing.Size(397, 20); + this.pRead_Lips.SkillName = "Read Lips"; + this.pRead_Lips.TabIndex = 36; + this.pRead_Lips.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pRide + // + this.pRide.Aktiv = true; + this.pRide.BackgroundSkill = false; + this.pRide.GivenPoints = 0; + this.pRide.Location = new System.Drawing.Point(0, 776); + this.pRide.Multiplier = 1; + this.pRide.Name = "pRide"; + this.pRide.OgierBackgroundSkill = false; + this.pRide.Size = new System.Drawing.Size(397, 20); + this.pRide.SkillName = "Ride"; + this.pRide.TabIndex = 37; + this.pRide.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pSearch + // + this.pSearch.Aktiv = true; + this.pSearch.BackgroundSkill = false; + this.pSearch.GivenPoints = 0; + this.pSearch.Location = new System.Drawing.Point(0, 798); + this.pSearch.Multiplier = 1; + this.pSearch.Name = "pSearch"; + this.pSearch.OgierBackgroundSkill = false; + this.pSearch.Size = new System.Drawing.Size(397, 20); + this.pSearch.SkillName = "Search"; + this.pSearch.TabIndex = 38; + this.pSearch.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pSense_Motive + // + this.pSense_Motive.Aktiv = true; + this.pSense_Motive.BackgroundSkill = false; + this.pSense_Motive.GivenPoints = 0; + this.pSense_Motive.Location = new System.Drawing.Point(0, 820); + this.pSense_Motive.Multiplier = 1; + this.pSense_Motive.Name = "pSense_Motive"; + this.pSense_Motive.OgierBackgroundSkill = false; + this.pSense_Motive.Size = new System.Drawing.Size(397, 20); + this.pSense_Motive.SkillName = "Sense Motive"; + this.pSense_Motive.TabIndex = 39; + this.pSense_Motive.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pSpot + // + this.pSpot.Aktiv = true; + this.pSpot.BackgroundSkill = false; + this.pSpot.GivenPoints = 0; + this.pSpot.Location = new System.Drawing.Point(0, 842); + this.pSpot.Multiplier = 1; + this.pSpot.Name = "pSpot"; + this.pSpot.OgierBackgroundSkill = false; + this.pSpot.Size = new System.Drawing.Size(397, 20); + this.pSpot.SkillName = "Spot"; + this.pSpot.TabIndex = 40; + this.pSpot.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pSwim + // + this.pSwim.Aktiv = true; + this.pSwim.BackgroundSkill = false; + this.pSwim.GivenPoints = 0; + this.pSwim.Location = new System.Drawing.Point(0, 864); + this.pSwim.Multiplier = 1; + this.pSwim.Name = "pSwim"; + this.pSwim.OgierBackgroundSkill = false; + this.pSwim.Size = new System.Drawing.Size(397, 20); + this.pSwim.SkillName = "Swim"; + this.pSwim.TabIndex = 41; + this.pSwim.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pTumble + // + this.pTumble.Aktiv = true; + this.pTumble.BackgroundSkill = false; + this.pTumble.GivenPoints = 0; + this.pTumble.Location = new System.Drawing.Point(0, 886); + this.pTumble.Multiplier = 1; + this.pTumble.Name = "pTumble"; + this.pTumble.OgierBackgroundSkill = false; + this.pTumble.Size = new System.Drawing.Size(397, 20); + this.pTumble.SkillName = "Tumble"; + this.pTumble.TabIndex = 42; + this.pTumble.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pUse_Rope + // + this.pUse_Rope.Aktiv = true; + this.pUse_Rope.BackgroundSkill = false; + this.pUse_Rope.GivenPoints = 0; + this.pUse_Rope.Location = new System.Drawing.Point(0, 908); + this.pUse_Rope.Multiplier = 1; + this.pUse_Rope.Name = "pUse_Rope"; + this.pUse_Rope.OgierBackgroundSkill = false; + this.pUse_Rope.Size = new System.Drawing.Size(397, 20); + this.pUse_Rope.SkillName = "Use Rope"; + this.pUse_Rope.TabIndex = 44; + this.pUse_Rope.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pWeavesight + // + this.pWeavesight.Aktiv = true; + this.pWeavesight.BackgroundSkill = false; + this.pWeavesight.GivenPoints = 0; + this.pWeavesight.Location = new System.Drawing.Point(0, 930); + this.pWeavesight.Multiplier = 1; + this.pWeavesight.Name = "pWeavesight"; + this.pWeavesight.OgierBackgroundSkill = false; + this.pWeavesight.Size = new System.Drawing.Size(397, 20); + this.pWeavesight.SkillName = "Weavesight"; + this.pWeavesight.TabIndex = 45; + this.pWeavesight.Blub += new System.EventHandler(this.pBlub_Blub); + // + // pWilderness_Lore + // + this.pWilderness_Lore.Aktiv = true; + this.pWilderness_Lore.BackgroundSkill = false; + this.pWilderness_Lore.GivenPoints = 0; + this.pWilderness_Lore.Location = new System.Drawing.Point(0, 952); + this.pWilderness_Lore.Multiplier = 1; + this.pWilderness_Lore.Name = "pWilderness_Lore"; + this.pWilderness_Lore.OgierBackgroundSkill = false; + this.pWilderness_Lore.Size = new System.Drawing.Size(397, 20); + this.pWilderness_Lore.SkillName = "Wilderness Lore"; + this.pWilderness_Lore.TabIndex = 46; + this.pWilderness_Lore.Blub += new System.EventHandler(this.pBlub_Blub); + // + // panel2 + // + this.panel2.Controls.Add(this.bClear); + this.panel2.Controls.Add(this.bLoadSkills); + this.panel2.Controls.Add(this.bSaveSkills); + this.panel2.Controls.Add(this.bCreateSkill); + this.panel2.Controls.Add(this.tbSkillName); + this.panel2.Controls.Add(this.label3); + this.panel2.Controls.Add(this.lSkillRest); + this.panel2.Controls.Add(this.label1); + this.panel2.Controls.Add(this.lSkillUsed); + this.panel2.Controls.Add(this.label2); + this.panel2.Controls.Add(this.lSkillGesamt); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(3, 3); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(436, 54); + this.panel2.TabIndex = 14; + // + // bClear + // + this.bClear.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bClear.Location = new System.Drawing.Point(194, 28); + this.bClear.Name = "bClear"; + this.bClear.Size = new System.Drawing.Size(75, 20); + this.bClear.TabIndex = 18; + this.bClear.Text = "Clear Custom"; + this.bClear.Click += new System.EventHandler(this.bClear_Click); + // + // bLoadSkills + // + this.bLoadSkills.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bLoadSkills.Location = new System.Drawing.Point(356, 28); + this.bLoadSkills.Name = "bLoadSkills"; + this.bLoadSkills.Size = new System.Drawing.Size(75, 20); + this.bLoadSkills.TabIndex = 17; + this.bLoadSkills.Text = "Load"; + this.bLoadSkills.Click += new System.EventHandler(this.bLoadSkills_Click); + // + // bSaveSkills + // + this.bSaveSkills.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bSaveSkills.Location = new System.Drawing.Point(275, 28); + this.bSaveSkills.Name = "bSaveSkills"; + this.bSaveSkills.Size = new System.Drawing.Size(75, 20); + this.bSaveSkills.TabIndex = 16; + this.bSaveSkills.Text = "Save"; + this.bSaveSkills.Click += new System.EventHandler(this.bSaveSkills_Click); + // + // bCreateSkill + // + this.bCreateSkill.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bCreateSkill.Location = new System.Drawing.Point(343, 6); + this.bCreateSkill.Name = "bCreateSkill"; + this.bCreateSkill.Size = new System.Drawing.Size(42, 20); + this.bCreateSkill.TabIndex = 15; + this.bCreateSkill.Text = "Neu"; + this.bCreateSkill.Click += new System.EventHandler(this.bCreateSkill_Click); + // + // tbSkillName + // + this.tbSkillName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbSkillName.Location = new System.Drawing.Point(209, 6); + this.tbSkillName.Name = "tbSkillName"; + this.tbSkillName.Size = new System.Drawing.Size(128, 20); + this.tbSkillName.TabIndex = 14; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(3, 32); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(123, 13); + this.label3.TabIndex = 10; + this.label3.Text = "Verbleibende Skillpunkte:"; + // + // lSkillRest + // + this.lSkillRest.AutoSize = true; + this.lSkillRest.Location = new System.Drawing.Point(166, 32); + this.lSkillRest.Name = "lSkillRest"; + this.lSkillRest.Size = new System.Drawing.Size(9, 13); + this.lSkillRest.TabIndex = 13; + this.lSkillRest.Text = "0"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 6); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(157, 13); + this.label1.TabIndex = 8; + this.label1.Text = "Gesamte verfgabre Skillpunkte:"; + // + // lSkillUsed + // + this.lSkillUsed.AutoSize = true; + this.lSkillUsed.Location = new System.Drawing.Point(166, 19); + this.lSkillUsed.Name = "lSkillUsed"; + this.lSkillUsed.Size = new System.Drawing.Size(9, 13); + this.lSkillUsed.TabIndex = 12; + this.lSkillUsed.Text = "0"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(3, 19); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(119, 13); + this.label2.TabIndex = 9; + this.label2.Text = "Verbrauchte Skillpunkte:"; + // + // lSkillGesamt + // + this.lSkillGesamt.AutoSize = true; + this.lSkillGesamt.Location = new System.Drawing.Point(166, 6); + this.lSkillGesamt.Name = "lSkillGesamt"; + this.lSkillGesamt.Size = new System.Drawing.Size(15, 13); + this.lSkillGesamt.TabIndex = 11; + this.lSkillGesamt.Text = "40"; + // + // tpBackground_Feats + // + this.tpBackground_Feats.Location = new System.Drawing.Point(4, 22); + this.tpBackground_Feats.Name = "tpBackground_Feats"; + this.tpBackground_Feats.Padding = new System.Windows.Forms.Padding(3); + this.tpBackground_Feats.Size = new System.Drawing.Size(442, 549); + this.tpBackground_Feats.TabIndex = 3; + this.tpBackground_Feats.Text = "Background Feats"; + this.tpBackground_Feats.Leave += new System.EventHandler(this.tpFeats_Leave); + // + // tpFeats + // + this.tpFeats.AutoScroll = true; + this.tpFeats.Controls.Add(this.gbLost_Ability_Feats); + this.tpFeats.Controls.Add(this.gbChanneling_Feats); + this.tpFeats.Controls.Add(this.gbSpecial_Feats); + this.tpFeats.Controls.Add(this.gbGeneral_Feats); + this.tpFeats.Location = new System.Drawing.Point(4, 22); + this.tpFeats.Name = "tpFeats"; + this.tpFeats.Padding = new System.Windows.Forms.Padding(3); + this.tpFeats.Size = new System.Drawing.Size(442, 549); + this.tpFeats.TabIndex = 7; + this.tpFeats.Text = "Feats"; + // + // gbLost_Ability_Feats + // + this.gbLost_Ability_Feats.Controls.Add(this.cbLatent_Dreamer); + this.gbLost_Ability_Feats.Controls.Add(this.cbDreamwalk); + this.gbLost_Ability_Feats.Controls.Add(this.cbBend_Dream); + this.gbLost_Ability_Feats.Controls.Add(this.cbDreamjump); + this.gbLost_Ability_Feats.Controls.Add(this.cbWaken_Dream); + this.gbLost_Ability_Feats.Controls.Add(this.cbDreamwatch); + this.gbLost_Ability_Feats.Controls.Add(this.cbLatent_Foreteller); + this.gbLost_Ability_Feats.Controls.Add(this.cbForeteller); + this.gbLost_Ability_Feats.Controls.Add(this.cbLatent_Old_Blood); + this.gbLost_Ability_Feats.Controls.Add(this.cbOld_Blood); + this.gbLost_Ability_Feats.Controls.Add(this.cbLatent_Sniffer); + this.gbLost_Ability_Feats.Controls.Add(this.cbSniffer); + this.gbLost_Ability_Feats.Controls.Add(this.cbLatent_Treesinger); + this.gbLost_Ability_Feats.Controls.Add(this.cbTreesinger); + this.gbLost_Ability_Feats.Controls.Add(this.cbLatent_Viewer); + this.gbLost_Ability_Feats.Controls.Add(this.cbViewing); + this.gbLost_Ability_Feats.Dock = System.Windows.Forms.DockStyle.Top; + this.gbLost_Ability_Feats.Location = new System.Drawing.Point(3, 1626); + this.gbLost_Ability_Feats.Name = "gbLost_Ability_Feats"; + this.gbLost_Ability_Feats.Size = new System.Drawing.Size(420, 384); + this.gbLost_Ability_Feats.TabIndex = 3; + this.gbLost_Ability_Feats.TabStop = false; + this.gbLost_Ability_Feats.Text = "Lost Ability Feats"; + // + // cbLatent_Dreamer + // + this.cbLatent_Dreamer.AutoSize = true; + this.cbLatent_Dreamer.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbLatent_Dreamer.Location = new System.Drawing.Point(6, 19); + this.cbLatent_Dreamer.Name = "cbLatent_Dreamer"; + this.cbLatent_Dreamer.Size = new System.Drawing.Size(92, 17); + this.cbLatent_Dreamer.TabIndex = 0; + this.cbLatent_Dreamer.Text = "Latent Dreamer"; + this.cbLatent_Dreamer.CheckedChanged += new System.EventHandler(this.cbLatent_Dreamer_CheckedChanged); + // + // cbDreamwalk + // + this.cbDreamwalk.AutoCheck = false; + this.cbDreamwalk.AutoSize = true; + this.cbDreamwalk.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbDreamwalk.Location = new System.Drawing.Point(26, 42); + this.cbDreamwalk.Name = "cbDreamwalk"; + this.cbDreamwalk.Size = new System.Drawing.Size(72, 17); + this.cbDreamwalk.TabIndex = 1; + this.cbDreamwalk.Text = "Dreamwalk"; + // + // cbBend_Dream + // + this.cbBend_Dream.AutoCheck = false; + this.cbBend_Dream.AutoSize = true; + this.cbBend_Dream.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbBend_Dream.Location = new System.Drawing.Point(26, 65); + this.cbBend_Dream.Name = "cbBend_Dream"; + this.cbBend_Dream.Size = new System.Drawing.Size(78, 17); + this.cbBend_Dream.TabIndex = 2; + this.cbBend_Dream.Text = "Bend Dream"; + // + // cbDreamjump + // + this.cbDreamjump.AutoCheck = false; + this.cbDreamjump.AutoSize = true; + this.cbDreamjump.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbDreamjump.Location = new System.Drawing.Point(26, 88); + this.cbDreamjump.Name = "cbDreamjump"; + this.cbDreamjump.Size = new System.Drawing.Size(72, 17); + this.cbDreamjump.TabIndex = 3; + this.cbDreamjump.Text = "Dreamjump"; + // + // cbWaken_Dream + // + this.cbWaken_Dream.AutoCheck = false; + this.cbWaken_Dream.AutoSize = true; + this.cbWaken_Dream.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbWaken_Dream.Location = new System.Drawing.Point(26, 111); + this.cbWaken_Dream.Name = "cbWaken_Dream"; + this.cbWaken_Dream.Size = new System.Drawing.Size(88, 17); + this.cbWaken_Dream.TabIndex = 4; + this.cbWaken_Dream.Text = "Waken Dream"; + // + // cbDreamwatch + // + this.cbDreamwatch.AutoCheck = false; + this.cbDreamwatch.AutoSize = true; + this.cbDreamwatch.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbDreamwatch.Location = new System.Drawing.Point(26, 134); + this.cbDreamwatch.Name = "cbDreamwatch"; + this.cbDreamwatch.Size = new System.Drawing.Size(79, 17); + this.cbDreamwatch.TabIndex = 5; + this.cbDreamwatch.Text = "Dreamwatch"; + // + // cbLatent_Foreteller + // + this.cbLatent_Foreteller.AutoSize = true; + this.cbLatent_Foreteller.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbLatent_Foreteller.Location = new System.Drawing.Point(6, 157); + this.cbLatent_Foreteller.Name = "cbLatent_Foreteller"; + this.cbLatent_Foreteller.Size = new System.Drawing.Size(95, 17); + this.cbLatent_Foreteller.TabIndex = 6; + this.cbLatent_Foreteller.Text = "Latent Foreteller"; + this.cbLatent_Foreteller.CheckedChanged += new System.EventHandler(this.cbLatent_Foreteller_CheckedChanged); + // + // cbForeteller + // + this.cbForeteller.AutoCheck = false; + this.cbForeteller.AutoSize = true; + this.cbForeteller.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbForeteller.Location = new System.Drawing.Point(26, 180); + this.cbForeteller.Name = "cbForeteller"; + this.cbForeteller.Size = new System.Drawing.Size(62, 17); + this.cbForeteller.TabIndex = 7; + this.cbForeteller.Text = "Foreteller"; + // + // cbLatent_Old_Blood + // + this.cbLatent_Old_Blood.AutoSize = true; + this.cbLatent_Old_Blood.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbLatent_Old_Blood.Location = new System.Drawing.Point(6, 203); + this.cbLatent_Old_Blood.Name = "cbLatent_Old_Blood"; + this.cbLatent_Old_Blood.Size = new System.Drawing.Size(98, 17); + this.cbLatent_Old_Blood.TabIndex = 8; + this.cbLatent_Old_Blood.Text = "Latent Old Blood"; + this.cbLatent_Old_Blood.CheckedChanged += new System.EventHandler(this.cbLatent_Old_Blood_CheckedChanged); + // + // cbOld_Blood + // + this.cbOld_Blood.AutoCheck = false; + this.cbOld_Blood.AutoSize = true; + this.cbOld_Blood.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbOld_Blood.Location = new System.Drawing.Point(26, 226); + this.cbOld_Blood.Name = "cbOld_Blood"; + this.cbOld_Blood.Size = new System.Drawing.Size(65, 17); + this.cbOld_Blood.TabIndex = 9; + this.cbOld_Blood.Text = "Old Blood"; + // + // cbLatent_Sniffer + // + this.cbLatent_Sniffer.AutoSize = true; + this.cbLatent_Sniffer.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbLatent_Sniffer.Location = new System.Drawing.Point(6, 249); + this.cbLatent_Sniffer.Name = "cbLatent_Sniffer"; + this.cbLatent_Sniffer.Size = new System.Drawing.Size(82, 17); + this.cbLatent_Sniffer.TabIndex = 10; + this.cbLatent_Sniffer.Text = "Latent Sniffer"; + this.cbLatent_Sniffer.CheckedChanged += new System.EventHandler(this.cbLatent_Sniffer_CheckedChanged); + // + // cbSniffer + // + this.cbSniffer.AutoCheck = false; + this.cbSniffer.AutoSize = true; + this.cbSniffer.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbSniffer.Location = new System.Drawing.Point(26, 272); + this.cbSniffer.Name = "cbSniffer"; + this.cbSniffer.Size = new System.Drawing.Size(49, 17); + this.cbSniffer.TabIndex = 11; + this.cbSniffer.Text = "Sniffer"; + // + // cbLatent_Treesinger + // + this.cbLatent_Treesinger.AutoSize = true; + this.cbLatent_Treesinger.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbLatent_Treesinger.Location = new System.Drawing.Point(6, 295); + this.cbLatent_Treesinger.Name = "cbLatent_Treesinger"; + this.cbLatent_Treesinger.Size = new System.Drawing.Size(102, 17); + this.cbLatent_Treesinger.TabIndex = 12; + this.cbLatent_Treesinger.Text = "Latent Treesinger"; + this.cbLatent_Treesinger.CheckedChanged += new System.EventHandler(this.cbLatent_Treesinger_CheckedChanged); + // + // cbTreesinger + // + this.cbTreesinger.AutoCheck = false; + this.cbTreesinger.AutoSize = true; + this.cbTreesinger.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbTreesinger.Location = new System.Drawing.Point(26, 318); + this.cbTreesinger.Name = "cbTreesinger"; + this.cbTreesinger.Size = new System.Drawing.Size(69, 17); + this.cbTreesinger.TabIndex = 13; + this.cbTreesinger.Text = "Treesinger"; + // + // cbLatent_Viewer + // + this.cbLatent_Viewer.AutoSize = true; + this.cbLatent_Viewer.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbLatent_Viewer.Location = new System.Drawing.Point(6, 341); + this.cbLatent_Viewer.Name = "cbLatent_Viewer"; + this.cbLatent_Viewer.Size = new System.Drawing.Size(84, 17); + this.cbLatent_Viewer.TabIndex = 14; + this.cbLatent_Viewer.Text = "Latent Viewer"; + // + // cbViewing + // + this.cbViewing.AutoCheck = false; + this.cbViewing.AutoSize = true; + this.cbViewing.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbViewing.Location = new System.Drawing.Point(26, 364); + this.cbViewing.Name = "cbViewing"; + this.cbViewing.Size = new System.Drawing.Size(59, 17); + this.cbViewing.TabIndex = 15; + this.cbViewing.Text = "Viewing "; + // + // gbChanneling_Feats + // + this.gbChanneling_Feats.Controls.Add(this.cbCombat_Casting); + this.gbChanneling_Feats.Controls.Add(this.cbExtra_Affinity); + this.gbChanneling_Feats.Controls.Add(this.cbExtra_Talent); + this.gbChanneling_Feats.Controls.Add(this.cbMultiweave); + this.gbChanneling_Feats.Controls.Add(this.cbPower_Heightened_Senses); + this.gbChanneling_Feats.Controls.Add(this.cbSense_Residue); + this.gbChanneling_Feats.Controls.Add(this.cbTie_Off_Weave); + this.gbChanneling_Feats.Dock = System.Windows.Forms.DockStyle.Top; + this.gbChanneling_Feats.Location = new System.Drawing.Point(3, 1447); + this.gbChanneling_Feats.Name = "gbChanneling_Feats"; + this.gbChanneling_Feats.Size = new System.Drawing.Size(420, 179); + this.gbChanneling_Feats.TabIndex = 2; + this.gbChanneling_Feats.TabStop = false; + this.gbChanneling_Feats.Text = "Channeling Feats"; + // + // cbCombat_Casting + // + this.cbCombat_Casting.AutoSize = true; + this.cbCombat_Casting.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbCombat_Casting.Location = new System.Drawing.Point(6, 19); + this.cbCombat_Casting.Name = "cbCombat_Casting"; + this.cbCombat_Casting.Size = new System.Drawing.Size(93, 17); + this.cbCombat_Casting.TabIndex = 0; + this.cbCombat_Casting.Text = "Combat Casting"; + // + // cbExtra_Affinity + // + this.cbExtra_Affinity.AutoSize = true; + this.cbExtra_Affinity.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbExtra_Affinity.Location = new System.Drawing.Point(6, 42); + this.cbExtra_Affinity.Name = "cbExtra_Affinity"; + this.cbExtra_Affinity.Size = new System.Drawing.Size(77, 17); + this.cbExtra_Affinity.TabIndex = 1; + this.cbExtra_Affinity.Text = "Extra Affinity"; + // + // cbExtra_Talent + // + this.cbExtra_Talent.AutoSize = true; + this.cbExtra_Talent.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbExtra_Talent.Location = new System.Drawing.Point(6, 65); + this.cbExtra_Talent.Name = "cbExtra_Talent"; + this.cbExtra_Talent.Size = new System.Drawing.Size(76, 17); + this.cbExtra_Talent.TabIndex = 2; + this.cbExtra_Talent.Text = "Extra Talent"; + // + // cbMultiweave + // + this.cbMultiweave.AutoSize = true; + this.cbMultiweave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbMultiweave.Location = new System.Drawing.Point(6, 88); + this.cbMultiweave.Name = "cbMultiweave"; + this.cbMultiweave.Size = new System.Drawing.Size(73, 17); + this.cbMultiweave.TabIndex = 3; + this.cbMultiweave.Text = "Multiweave"; + // + // cbPower_Heightened_Senses + // + this.cbPower_Heightened_Senses.AutoSize = true; + this.cbPower_Heightened_Senses.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbPower_Heightened_Senses.Location = new System.Drawing.Point(6, 111); + this.cbPower_Heightened_Senses.Name = "cbPower_Heightened_Senses"; + this.cbPower_Heightened_Senses.Size = new System.Drawing.Size(145, 17); + this.cbPower_Heightened_Senses.TabIndex = 4; + this.cbPower_Heightened_Senses.Text = "Power-Heightened Senses"; + // + // cbSense_Residue + // + this.cbSense_Residue.AutoSize = true; + this.cbSense_Residue.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbSense_Residue.Location = new System.Drawing.Point(6, 134); + this.cbSense_Residue.Name = "cbSense_Residue"; + this.cbSense_Residue.Size = new System.Drawing.Size(91, 17); + this.cbSense_Residue.TabIndex = 5; + this.cbSense_Residue.Text = "Sense Residue"; + // + // cbTie_Off_Weave + // + this.cbTie_Off_Weave.AutoSize = true; + this.cbTie_Off_Weave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbTie_Off_Weave.Location = new System.Drawing.Point(6, 157); + this.cbTie_Off_Weave.Name = "cbTie_Off_Weave"; + this.cbTie_Off_Weave.Size = new System.Drawing.Size(89, 17); + this.cbTie_Off_Weave.TabIndex = 6; + this.cbTie_Off_Weave.Text = "Tie Off Weave"; + // + // gbSpecial_Feats + // + this.gbSpecial_Feats.Controls.Add(this.cbEliminate_Block); + this.gbSpecial_Feats.Controls.Add(this.cbWeapon_Specializiation); + this.gbSpecial_Feats.Controls.Add(this.tbWeapon_Specializiation); + this.gbSpecial_Feats.Dock = System.Windows.Forms.DockStyle.Top; + this.gbSpecial_Feats.Location = new System.Drawing.Point(3, 1380); + this.gbSpecial_Feats.Name = "gbSpecial_Feats"; + this.gbSpecial_Feats.Size = new System.Drawing.Size(420, 67); + this.gbSpecial_Feats.TabIndex = 1; + this.gbSpecial_Feats.TabStop = false; + this.gbSpecial_Feats.Text = "Special Feats"; + // + // cbEliminate_Block + // + this.cbEliminate_Block.AutoSize = true; + this.cbEliminate_Block.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbEliminate_Block.Location = new System.Drawing.Point(6, 19); + this.cbEliminate_Block.Name = "cbEliminate_Block"; + this.cbEliminate_Block.Size = new System.Drawing.Size(91, 17); + this.cbEliminate_Block.TabIndex = 0; + this.cbEliminate_Block.Text = "Eliminate Block"; + // + // cbWeapon_Specializiation + // + this.cbWeapon_Specializiation.AutoSize = true; + this.cbWeapon_Specializiation.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbWeapon_Specializiation.Location = new System.Drawing.Point(6, 42); + this.cbWeapon_Specializiation.Name = "cbWeapon_Specializiation"; + this.cbWeapon_Specializiation.Size = new System.Drawing.Size(130, 17); + this.cbWeapon_Specializiation.TabIndex = 1; + this.cbWeapon_Specializiation.Text = "Weapon Specializiation"; + this.cbWeapon_Specializiation.CheckedChanged += new System.EventHandler(this.cbWeapon_Specializiation_CheckedChanged); + // + // tbWeapon_Specializiation + // + this.tbWeapon_Specializiation.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbWeapon_Specializiation.Enabled = false; + this.tbWeapon_Specializiation.Location = new System.Drawing.Point(142, 41); + this.tbWeapon_Specializiation.Name = "tbWeapon_Specializiation"; + this.tbWeapon_Specializiation.Size = new System.Drawing.Size(254, 20); + this.tbWeapon_Specializiation.TabIndex = 2; + // + // gbGeneral_Feats + // + this.gbGeneral_Feats.Controls.Add(this.cbAlertness); + this.gbGeneral_Feats.Controls.Add(this.cbAmbidextrous); + this.gbGeneral_Feats.Controls.Add(this.cbAnimal_Affinity); + this.gbGeneral_Feats.Controls.Add(this.cbArmor_Proficiency_light); + this.gbGeneral_Feats.Controls.Add(this.cbArmor_Proficiency_medium); + this.gbGeneral_Feats.Controls.Add(this.cbArmor_Proficiency_heavy); + this.gbGeneral_Feats.Controls.Add(this.cbImproved_Critical); + this.gbGeneral_Feats.Controls.Add(this.cbAthletic); + this.gbGeneral_Feats.Controls.Add(this.cbBlind_Fight); + this.gbGeneral_Feats.Controls.Add(this.cbCombat_Expertise); + this.gbGeneral_Feats.Controls.Add(this.cbImproved_Disarm); + this.gbGeneral_Feats.Controls.Add(this.cbImproved_Trip); + this.gbGeneral_Feats.Controls.Add(this.cbWhirlwind_Attack); + this.gbGeneral_Feats.Controls.Add(this.cbCombat_Reflexes); + this.gbGeneral_Feats.Controls.Add(this.cbThe_Dark_One_s_own_Luck); + this.gbGeneral_Feats.Controls.Add(this.cbDodge); + this.gbGeneral_Feats.Controls.Add(this.cbMobility); + this.gbGeneral_Feats.Controls.Add(this.cbSpring_Attack); + this.gbGeneral_Feats.Controls.Add(this.cbEndurance); + this.gbGeneral_Feats.Controls.Add(this.cbExotic_Weapon_Proficiency); + this.gbGeneral_Feats.Controls.Add(this.cbFame); + this.gbGeneral_Feats.Controls.Add(this.cbGreat_Fortitude); + this.gbGeneral_Feats.Controls.Add(this.cbImproved_Initiative); + this.gbGeneral_Feats.Controls.Add(this.cbImproved_Unarmed_Strike); + this.gbGeneral_Feats.Controls.Add(this.cbIron_Will); + this.gbGeneral_Feats.Controls.Add(this.cbLightning_Reflexes); + this.gbGeneral_Feats.Controls.Add(this.cbMartial_Weapon_Proficiency); + this.gbGeneral_Feats.Controls.Add(this.cbMental_Stability); + this.gbGeneral_Feats.Controls.Add(this.cbMimic); + this.gbGeneral_Feats.Controls.Add(this.cbMounted_Combat); + this.gbGeneral_Feats.Controls.Add(this.cbMounted_Archery); + this.gbGeneral_Feats.Controls.Add(this.cbTrample); + this.gbGeneral_Feats.Controls.Add(this.cbRide_By_Attack); + this.gbGeneral_Feats.Controls.Add(this.cbNimble); + this.gbGeneral_Feats.Controls.Add(this.cbPersuasive); + this.gbGeneral_Feats.Controls.Add(this.cbPoint_Blank_Shot); + this.gbGeneral_Feats.Controls.Add(this.cbFar_Shot); + this.gbGeneral_Feats.Controls.Add(this.cbPrecise_Shot); + this.gbGeneral_Feats.Controls.Add(this.cbRapid_Shot); + this.gbGeneral_Feats.Controls.Add(this.cbShot_on_the_Run); + this.gbGeneral_Feats.Controls.Add(this.cbPower_Attack); + this.gbGeneral_Feats.Controls.Add(this.cbCleave); + this.gbGeneral_Feats.Controls.Add(this.cbGreat_Cleave); + this.gbGeneral_Feats.Controls.Add(this.cbImproved_Bull_Rush); + this.gbGeneral_Feats.Controls.Add(this.cbQuick_Draw); + this.gbGeneral_Feats.Controls.Add(this.cbQuickness); + this.gbGeneral_Feats.Controls.Add(this.cbRun); + this.gbGeneral_Feats.Controls.Add(this.cbSharp_eyed); + this.gbGeneral_Feats.Controls.Add(this.cbShield_Proficiency); + this.gbGeneral_Feats.Controls.Add(this.cbSimple_Weapon_Proficiency); + this.gbGeneral_Feats.Controls.Add(this.cbSkill_Emphasis); + this.gbGeneral_Feats.Controls.Add(this.cbStealthy); + this.gbGeneral_Feats.Controls.Add(this.cbToughness); + this.gbGeneral_Feats.Controls.Add(this.cbTrack); + this.gbGeneral_Feats.Controls.Add(this.cbTrustworthy); + this.gbGeneral_Feats.Controls.Add(this.cbTwo_Weapon_Fighting); + this.gbGeneral_Feats.Controls.Add(this.cbImproved_Two_Weapon_Fighting); + this.gbGeneral_Feats.Controls.Add(this.cbWeapon_Finesse); + this.gbGeneral_Feats.Controls.Add(this.cbWeapon_Focus); + this.gbGeneral_Feats.Controls.Add(this.tbWeapon_Focus); + this.gbGeneral_Feats.Controls.Add(this.tbWeapon_Finesse); + this.gbGeneral_Feats.Controls.Add(this.tbMartial_Weapon_Proficiency); + this.gbGeneral_Feats.Controls.Add(this.tbExotic_Weapon_Proficiency); + this.gbGeneral_Feats.Dock = System.Windows.Forms.DockStyle.Top; + this.gbGeneral_Feats.Location = new System.Drawing.Point(3, 3); + this.gbGeneral_Feats.Name = "gbGeneral_Feats"; + this.gbGeneral_Feats.Size = new System.Drawing.Size(420, 1377); + this.gbGeneral_Feats.TabIndex = 0; + this.gbGeneral_Feats.TabStop = false; + this.gbGeneral_Feats.Text = "General Feats"; + // + // cbAlertness + // + this.cbAlertness.AutoSize = true; + this.cbAlertness.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbAlertness.Location = new System.Drawing.Point(6, 19); + this.cbAlertness.Name = "cbAlertness"; + this.cbAlertness.Size = new System.Drawing.Size(62, 17); + this.cbAlertness.TabIndex = 0; + this.cbAlertness.Text = "Alertness"; + // + // cbAmbidextrous + // + this.cbAmbidextrous.AutoSize = true; + this.cbAmbidextrous.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbAmbidextrous.Location = new System.Drawing.Point(6, 42); + this.cbAmbidextrous.Name = "cbAmbidextrous"; + this.cbAmbidextrous.Size = new System.Drawing.Size(82, 17); + this.cbAmbidextrous.TabIndex = 1; + this.cbAmbidextrous.Text = "Ambidextrous"; + // + // cbAnimal_Affinity + // + this.cbAnimal_Affinity.AutoSize = true; + this.cbAnimal_Affinity.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbAnimal_Affinity.Location = new System.Drawing.Point(6, 65); + this.cbAnimal_Affinity.Name = "cbAnimal_Affinity"; + this.cbAnimal_Affinity.Size = new System.Drawing.Size(84, 17); + this.cbAnimal_Affinity.TabIndex = 2; + this.cbAnimal_Affinity.Text = "Animal Affinity"; + // + // cbArmor_Proficiency_light + // + this.cbArmor_Proficiency_light.AutoSize = true; + this.cbArmor_Proficiency_light.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbArmor_Proficiency_light.Location = new System.Drawing.Point(6, 88); + this.cbArmor_Proficiency_light.Name = "cbArmor_Proficiency_light"; + this.cbArmor_Proficiency_light.Size = new System.Drawing.Size(129, 17); + this.cbArmor_Proficiency_light.TabIndex = 3; + this.cbArmor_Proficiency_light.Text = "Armor Proficiency (light)"; + this.cbArmor_Proficiency_light.CheckedChanged += new System.EventHandler(this.cbArmor_Proficiency_light_CheckedChanged); + // + // cbArmor_Proficiency_medium + // + this.cbArmor_Proficiency_medium.AutoCheck = false; + this.cbArmor_Proficiency_medium.AutoSize = true; + this.cbArmor_Proficiency_medium.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbArmor_Proficiency_medium.Location = new System.Drawing.Point(26, 111); + this.cbArmor_Proficiency_medium.Name = "cbArmor_Proficiency_medium"; + this.cbArmor_Proficiency_medium.Size = new System.Drawing.Size(146, 17); + this.cbArmor_Proficiency_medium.TabIndex = 4; + this.cbArmor_Proficiency_medium.Text = "Armor Proficiency (medium)"; + this.cbArmor_Proficiency_medium.CheckedChanged += new System.EventHandler(this.cbArmor_Proficiency_medium_CheckedChanged); + // + // cbArmor_Proficiency_heavy + // + this.cbArmor_Proficiency_heavy.AutoCheck = false; + this.cbArmor_Proficiency_heavy.AutoSize = true; + this.cbArmor_Proficiency_heavy.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbArmor_Proficiency_heavy.Location = new System.Drawing.Point(46, 134); + this.cbArmor_Proficiency_heavy.Name = "cbArmor_Proficiency_heavy"; + this.cbArmor_Proficiency_heavy.Size = new System.Drawing.Size(139, 17); + this.cbArmor_Proficiency_heavy.TabIndex = 5; + this.cbArmor_Proficiency_heavy.Text = "Armor Proficiency (heavy)"; + // + // cbImproved_Critical + // + this.cbImproved_Critical.AutoCheck = false; + this.cbImproved_Critical.AutoSize = true; + this.cbImproved_Critical.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbImproved_Critical.Location = new System.Drawing.Point(26, 157); + this.cbImproved_Critical.Name = "cbImproved_Critical"; + this.cbImproved_Critical.Size = new System.Drawing.Size(97, 17); + this.cbImproved_Critical.TabIndex = 23; + this.cbImproved_Critical.Text = "Improved Critical"; + // + // cbAthletic + // + this.cbAthletic.AutoSize = true; + this.cbAthletic.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbAthletic.Location = new System.Drawing.Point(6, 180); + this.cbAthletic.Name = "cbAthletic"; + this.cbAthletic.Size = new System.Drawing.Size(54, 17); + this.cbAthletic.TabIndex = 6; + this.cbAthletic.Text = "Athletic"; + // + // cbBlind_Fight + // + this.cbBlind_Fight.AutoSize = true; + this.cbBlind_Fight.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbBlind_Fight.Location = new System.Drawing.Point(6, 203); + this.cbBlind_Fight.Name = "cbBlind_Fight"; + this.cbBlind_Fight.Size = new System.Drawing.Size(68, 17); + this.cbBlind_Fight.TabIndex = 7; + this.cbBlind_Fight.Text = "Blind-Fight"; + // + // cbCombat_Expertise + // + this.cbCombat_Expertise.AutoSize = true; + this.cbCombat_Expertise.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbCombat_Expertise.Location = new System.Drawing.Point(6, 226); + this.cbCombat_Expertise.Name = "cbCombat_Expertise"; + this.cbCombat_Expertise.Size = new System.Drawing.Size(101, 17); + this.cbCombat_Expertise.TabIndex = 8; + this.cbCombat_Expertise.Text = "Combat Expertise"; + this.cbCombat_Expertise.CheckedChanged += new System.EventHandler(this.cbCombat_Expertise_CheckedChanged); + // + // cbImproved_Disarm + // + this.cbImproved_Disarm.AutoCheck = false; + this.cbImproved_Disarm.AutoSize = true; + this.cbImproved_Disarm.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbImproved_Disarm.Location = new System.Drawing.Point(26, 249); + this.cbImproved_Disarm.Name = "cbImproved_Disarm"; + this.cbImproved_Disarm.Size = new System.Drawing.Size(98, 17); + this.cbImproved_Disarm.TabIndex = 9; + this.cbImproved_Disarm.Text = "Improved Disarm"; + // + // cbImproved_Trip + // + this.cbImproved_Trip.AutoCheck = false; + this.cbImproved_Trip.AutoSize = true; + this.cbImproved_Trip.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbImproved_Trip.Location = new System.Drawing.Point(26, 272); + this.cbImproved_Trip.Name = "cbImproved_Trip"; + this.cbImproved_Trip.Size = new System.Drawing.Size(84, 17); + this.cbImproved_Trip.TabIndex = 10; + this.cbImproved_Trip.Text = "Improved Trip"; + // + // cbWhirlwind_Attack + // + this.cbWhirlwind_Attack.AutoCheck = false; + this.cbWhirlwind_Attack.AutoSize = true; + this.cbWhirlwind_Attack.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbWhirlwind_Attack.Location = new System.Drawing.Point(26, 295); + this.cbWhirlwind_Attack.Name = "cbWhirlwind_Attack"; + this.cbWhirlwind_Attack.Size = new System.Drawing.Size(99, 17); + this.cbWhirlwind_Attack.TabIndex = 11; + this.cbWhirlwind_Attack.Text = "Whirlwind Attack"; + // + // cbCombat_Reflexes + // + this.cbCombat_Reflexes.AutoSize = true; + this.cbCombat_Reflexes.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbCombat_Reflexes.Location = new System.Drawing.Point(6, 318); + this.cbCombat_Reflexes.Name = "cbCombat_Reflexes"; + this.cbCombat_Reflexes.Size = new System.Drawing.Size(99, 17); + this.cbCombat_Reflexes.TabIndex = 12; + this.cbCombat_Reflexes.Text = "Combat Reflexes"; + // + // cbThe_Dark_One_s_own_Luck + // + this.cbThe_Dark_One_s_own_Luck.AutoSize = true; + this.cbThe_Dark_One_s_own_Luck.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbThe_Dark_One_s_own_Luck.Location = new System.Drawing.Point(6, 341); + this.cbThe_Dark_One_s_own_Luck.Name = "cbThe_Dark_One_s_own_Luck"; + this.cbThe_Dark_One_s_own_Luck.Size = new System.Drawing.Size(144, 17); + this.cbThe_Dark_One_s_own_Luck.TabIndex = 13; + this.cbThe_Dark_One_s_own_Luck.Text = "The Dark One\'s own Luck"; + // + // cbDodge + // + this.cbDodge.AutoSize = true; + this.cbDodge.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbDodge.Location = new System.Drawing.Point(6, 364); + this.cbDodge.Name = "cbDodge"; + this.cbDodge.Size = new System.Drawing.Size(51, 17); + this.cbDodge.TabIndex = 14; + this.cbDodge.Text = "Dodge"; + this.cbDodge.CheckedChanged += new System.EventHandler(this.cbDodge_CheckedChanged); + // + // cbMobility + // + this.cbMobility.AutoCheck = false; + this.cbMobility.AutoSize = true; + this.cbMobility.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbMobility.Location = new System.Drawing.Point(26, 387); + this.cbMobility.Name = "cbMobility"; + this.cbMobility.Size = new System.Drawing.Size(54, 17); + this.cbMobility.TabIndex = 15; + this.cbMobility.Text = "Mobility"; + this.cbMobility.CheckedChanged += new System.EventHandler(this.cbMobility_CheckedChanged); + // + // cbSpring_Attack + // + this.cbSpring_Attack.AutoCheck = false; + this.cbSpring_Attack.AutoSize = true; + this.cbSpring_Attack.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbSpring_Attack.Location = new System.Drawing.Point(46, 410); + this.cbSpring_Attack.Name = "cbSpring_Attack"; + this.cbSpring_Attack.Size = new System.Drawing.Size(83, 17); + this.cbSpring_Attack.TabIndex = 16; + this.cbSpring_Attack.Text = "Spring Attack"; + // + // cbEndurance + // + this.cbEndurance.AutoSize = true; + this.cbEndurance.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbEndurance.Location = new System.Drawing.Point(6, 433); + this.cbEndurance.Name = "cbEndurance"; + this.cbEndurance.Size = new System.Drawing.Size(71, 17); + this.cbEndurance.TabIndex = 17; + this.cbEndurance.Text = "Endurance"; + // + // cbExotic_Weapon_Proficiency + // + this.cbExotic_Weapon_Proficiency.AutoSize = true; + this.cbExotic_Weapon_Proficiency.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbExotic_Weapon_Proficiency.Location = new System.Drawing.Point(6, 456); + this.cbExotic_Weapon_Proficiency.Name = "cbExotic_Weapon_Proficiency"; + this.cbExotic_Weapon_Proficiency.Size = new System.Drawing.Size(147, 17); + this.cbExotic_Weapon_Proficiency.TabIndex = 18; + this.cbExotic_Weapon_Proficiency.Text = "Exotic Weapon Proficiency"; + this.cbExotic_Weapon_Proficiency.CheckedChanged += new System.EventHandler(this.cbExotic_Weapon_Proficiency_CheckedChanged); + // + // cbFame + // + this.cbFame.AutoSize = true; + this.cbFame.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbFame.Location = new System.Drawing.Point(6, 479); + this.cbFame.Name = "cbFame"; + this.cbFame.Size = new System.Drawing.Size(45, 17); + this.cbFame.TabIndex = 20; + this.cbFame.Text = "Fame"; + // + // cbGreat_Fortitude + // + this.cbGreat_Fortitude.AutoSize = true; + this.cbGreat_Fortitude.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbGreat_Fortitude.Location = new System.Drawing.Point(6, 502); + this.cbGreat_Fortitude.Name = "cbGreat_Fortitude"; + this.cbGreat_Fortitude.Size = new System.Drawing.Size(89, 17); + this.cbGreat_Fortitude.TabIndex = 21; + this.cbGreat_Fortitude.Text = "Great Fortitude"; + // + // cbImproved_Initiative + // + this.cbImproved_Initiative.AutoSize = true; + this.cbImproved_Initiative.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbImproved_Initiative.Location = new System.Drawing.Point(6, 525); + this.cbImproved_Initiative.Name = "cbImproved_Initiative"; + this.cbImproved_Initiative.Size = new System.Drawing.Size(105, 17); + this.cbImproved_Initiative.TabIndex = 24; + this.cbImproved_Initiative.Text = "Improved Initiative"; + // + // cbImproved_Unarmed_Strike + // + this.cbImproved_Unarmed_Strike.AutoSize = true; + this.cbImproved_Unarmed_Strike.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbImproved_Unarmed_Strike.Location = new System.Drawing.Point(6, 548); + this.cbImproved_Unarmed_Strike.Name = "cbImproved_Unarmed_Strike"; + this.cbImproved_Unarmed_Strike.Size = new System.Drawing.Size(139, 17); + this.cbImproved_Unarmed_Strike.TabIndex = 25; + this.cbImproved_Unarmed_Strike.Text = "Improved Unarmed Strike"; + // + // cbIron_Will + // + this.cbIron_Will.AutoSize = true; + this.cbIron_Will.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbIron_Will.Location = new System.Drawing.Point(6, 571); + this.cbIron_Will.Name = "cbIron_Will"; + this.cbIron_Will.Size = new System.Drawing.Size(57, 17); + this.cbIron_Will.TabIndex = 26; + this.cbIron_Will.Text = "Iron Will"; + // + // cbLightning_Reflexes + // + this.cbLightning_Reflexes.AutoSize = true; + this.cbLightning_Reflexes.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbLightning_Reflexes.Location = new System.Drawing.Point(6, 594); + this.cbLightning_Reflexes.Name = "cbLightning_Reflexes"; + this.cbLightning_Reflexes.Size = new System.Drawing.Size(106, 17); + this.cbLightning_Reflexes.TabIndex = 27; + this.cbLightning_Reflexes.Text = "Lightning Reflexes"; + // + // cbMartial_Weapon_Proficiency + // + this.cbMartial_Weapon_Proficiency.AutoSize = true; + this.cbMartial_Weapon_Proficiency.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbMartial_Weapon_Proficiency.Location = new System.Drawing.Point(6, 617); + this.cbMartial_Weapon_Proficiency.Name = "cbMartial_Weapon_Proficiency"; + this.cbMartial_Weapon_Proficiency.Size = new System.Drawing.Size(149, 17); + this.cbMartial_Weapon_Proficiency.TabIndex = 28; + this.cbMartial_Weapon_Proficiency.Text = "Martial Weapon Proficiency"; + this.cbMartial_Weapon_Proficiency.CheckedChanged += new System.EventHandler(this.cbMartial_Weapon_Proficiency_CheckedChanged); + // + // cbMental_Stability + // + this.cbMental_Stability.AutoSize = true; + this.cbMental_Stability.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbMental_Stability.Location = new System.Drawing.Point(6, 640); + this.cbMental_Stability.Name = "cbMental_Stability"; + this.cbMental_Stability.Size = new System.Drawing.Size(90, 17); + this.cbMental_Stability.TabIndex = 29; + this.cbMental_Stability.Text = "Mental Stability"; + // + // cbMimic + // + this.cbMimic.AutoSize = true; + this.cbMimic.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbMimic.Location = new System.Drawing.Point(6, 663); + this.cbMimic.Name = "cbMimic"; + this.cbMimic.Size = new System.Drawing.Size(46, 17); + this.cbMimic.TabIndex = 30; + this.cbMimic.Text = "Mimic"; + // + // cbMounted_Combat + // + this.cbMounted_Combat.AutoSize = true; + this.cbMounted_Combat.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbMounted_Combat.Location = new System.Drawing.Point(6, 686); + this.cbMounted_Combat.Name = "cbMounted_Combat"; + this.cbMounted_Combat.Size = new System.Drawing.Size(100, 17); + this.cbMounted_Combat.TabIndex = 31; + this.cbMounted_Combat.Text = "Mounted Combat"; + this.cbMounted_Combat.CheckedChanged += new System.EventHandler(this.cbMounted_Combat_CheckedChanged); + // + // cbMounted_Archery + // + this.cbMounted_Archery.AutoCheck = false; + this.cbMounted_Archery.AutoSize = true; + this.cbMounted_Archery.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbMounted_Archery.Location = new System.Drawing.Point(26, 709); + this.cbMounted_Archery.Name = "cbMounted_Archery"; + this.cbMounted_Archery.Size = new System.Drawing.Size(100, 17); + this.cbMounted_Archery.TabIndex = 32; + this.cbMounted_Archery.Text = "Mounted Archery"; + // + // cbTrample + // + this.cbTrample.AutoCheck = false; + this.cbTrample.AutoSize = true; + this.cbTrample.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbTrample.Location = new System.Drawing.Point(26, 732); + this.cbTrample.Name = "cbTrample"; + this.cbTrample.Size = new System.Drawing.Size(57, 17); + this.cbTrample.TabIndex = 34; + this.cbTrample.Text = "Trample"; + // + // cbRide_By_Attack + // + this.cbRide_By_Attack.AutoCheck = false; + this.cbRide_By_Attack.AutoSize = true; + this.cbRide_By_Attack.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbRide_By_Attack.Location = new System.Drawing.Point(26, 755); + this.cbRide_By_Attack.Name = "cbRide_By_Attack"; + this.cbRide_By_Attack.Size = new System.Drawing.Size(90, 17); + this.cbRide_By_Attack.TabIndex = 35; + this.cbRide_By_Attack.Text = "Ride-By Attack"; + // + // cbNimble + // + this.cbNimble.AutoSize = true; + this.cbNimble.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbNimble.Location = new System.Drawing.Point(6, 778); + this.cbNimble.Name = "cbNimble"; + this.cbNimble.Size = new System.Drawing.Size(51, 17); + this.cbNimble.TabIndex = 36; + this.cbNimble.Text = "Nimble"; + // + // cbPersuasive + // + this.cbPersuasive.AutoSize = true; + this.cbPersuasive.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbPersuasive.Location = new System.Drawing.Point(6, 801); + this.cbPersuasive.Name = "cbPersuasive"; + this.cbPersuasive.Size = new System.Drawing.Size(71, 17); + this.cbPersuasive.TabIndex = 37; + this.cbPersuasive.Text = "Persuasive"; + // + // cbPoint_Blank_Shot + // + this.cbPoint_Blank_Shot.AutoSize = true; + this.cbPoint_Blank_Shot.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbPoint_Blank_Shot.Location = new System.Drawing.Point(6, 824); + this.cbPoint_Blank_Shot.Name = "cbPoint_Blank_Shot"; + this.cbPoint_Blank_Shot.Size = new System.Drawing.Size(98, 17); + this.cbPoint_Blank_Shot.TabIndex = 38; + this.cbPoint_Blank_Shot.Text = "Point Blank Shot"; + this.cbPoint_Blank_Shot.CheckedChanged += new System.EventHandler(this.cbPoint_Blank_Shot_CheckedChanged); + // + // cbFar_Shot + // + this.cbFar_Shot.AutoCheck = false; + this.cbFar_Shot.AutoSize = true; + this.cbFar_Shot.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbFar_Shot.Location = new System.Drawing.Point(26, 847); + this.cbFar_Shot.Name = "cbFar_Shot"; + this.cbFar_Shot.Size = new System.Drawing.Size(59, 17); + this.cbFar_Shot.TabIndex = 39; + this.cbFar_Shot.Text = "Far Shot"; + // + // cbPrecise_Shot + // + this.cbPrecise_Shot.AutoCheck = false; + this.cbPrecise_Shot.AutoSize = true; + this.cbPrecise_Shot.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbPrecise_Shot.Location = new System.Drawing.Point(26, 870); + this.cbPrecise_Shot.Name = "cbPrecise_Shot"; + this.cbPrecise_Shot.Size = new System.Drawing.Size(79, 17); + this.cbPrecise_Shot.TabIndex = 40; + this.cbPrecise_Shot.Text = "Precise Shot"; + // + // cbRapid_Shot + // + this.cbRapid_Shot.AutoCheck = false; + this.cbRapid_Shot.AutoSize = true; + this.cbRapid_Shot.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbRapid_Shot.Location = new System.Drawing.Point(26, 893); + this.cbRapid_Shot.Name = "cbRapid_Shot"; + this.cbRapid_Shot.Size = new System.Drawing.Size(72, 17); + this.cbRapid_Shot.TabIndex = 41; + this.cbRapid_Shot.Text = "Rapid Shot"; + // + // cbShot_on_the_Run + // + this.cbShot_on_the_Run.AutoCheck = false; + this.cbShot_on_the_Run.AutoSize = true; + this.cbShot_on_the_Run.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbShot_on_the_Run.Location = new System.Drawing.Point(26, 916); + this.cbShot_on_the_Run.Name = "cbShot_on_the_Run"; + this.cbShot_on_the_Run.Size = new System.Drawing.Size(97, 17); + this.cbShot_on_the_Run.TabIndex = 42; + this.cbShot_on_the_Run.Text = "Shot on the Run"; + // + // cbPower_Attack + // + this.cbPower_Attack.AutoSize = true; + this.cbPower_Attack.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbPower_Attack.Location = new System.Drawing.Point(6, 939); + this.cbPower_Attack.Name = "cbPower_Attack"; + this.cbPower_Attack.Size = new System.Drawing.Size(83, 17); + this.cbPower_Attack.TabIndex = 43; + this.cbPower_Attack.Text = "Power Attack"; + this.cbPower_Attack.CheckedChanged += new System.EventHandler(this.cbPower_Attack_CheckedChanged); + // + // cbCleave + // + this.cbCleave.AutoCheck = false; + this.cbCleave.AutoSize = true; + this.cbCleave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbCleave.Location = new System.Drawing.Point(26, 962); + this.cbCleave.Name = "cbCleave"; + this.cbCleave.Size = new System.Drawing.Size(52, 17); + this.cbCleave.TabIndex = 44; + this.cbCleave.Text = "Cleave"; + this.cbCleave.CheckedChanged += new System.EventHandler(this.cbCleave_CheckedChanged); + // + // cbGreat_Cleave + // + this.cbGreat_Cleave.AutoCheck = false; + this.cbGreat_Cleave.AutoSize = true; + this.cbGreat_Cleave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbGreat_Cleave.Location = new System.Drawing.Point(46, 985); + this.cbGreat_Cleave.Name = "cbGreat_Cleave"; + this.cbGreat_Cleave.Size = new System.Drawing.Size(81, 17); + this.cbGreat_Cleave.TabIndex = 45; + this.cbGreat_Cleave.Text = "Great Cleave"; + // + // cbImproved_Bull_Rush + // + this.cbImproved_Bull_Rush.AutoCheck = false; + this.cbImproved_Bull_Rush.AutoSize = true; + this.cbImproved_Bull_Rush.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbImproved_Bull_Rush.Location = new System.Drawing.Point(26, 1008); + this.cbImproved_Bull_Rush.Name = "cbImproved_Bull_Rush"; + this.cbImproved_Bull_Rush.Size = new System.Drawing.Size(111, 17); + this.cbImproved_Bull_Rush.TabIndex = 46; + this.cbImproved_Bull_Rush.Text = "Improved Bull Rush"; + // + // cbQuick_Draw + // + this.cbQuick_Draw.AutoSize = true; + this.cbQuick_Draw.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbQuick_Draw.Location = new System.Drawing.Point(6, 1031); + this.cbQuick_Draw.Name = "cbQuick_Draw"; + this.cbQuick_Draw.Size = new System.Drawing.Size(75, 17); + this.cbQuick_Draw.TabIndex = 47; + this.cbQuick_Draw.Text = "Quick Draw"; + // + // cbQuickness + // + this.cbQuickness.AutoSize = true; + this.cbQuickness.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbQuickness.Location = new System.Drawing.Point(6, 1054); + this.cbQuickness.Name = "cbQuickness"; + this.cbQuickness.Size = new System.Drawing.Size(69, 17); + this.cbQuickness.TabIndex = 48; + this.cbQuickness.Text = "Quickness"; + // + // cbRun + // + this.cbRun.AutoSize = true; + this.cbRun.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbRun.Location = new System.Drawing.Point(6, 1077); + this.cbRun.Name = "cbRun"; + this.cbRun.Size = new System.Drawing.Size(39, 17); + this.cbRun.TabIndex = 49; + this.cbRun.Text = "Run"; + // + // cbSharp_eyed + // + this.cbSharp_eyed.AutoSize = true; + this.cbSharp_eyed.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbSharp_eyed.Location = new System.Drawing.Point(6, 1100); + this.cbSharp_eyed.Name = "cbSharp_eyed"; + this.cbSharp_eyed.Size = new System.Drawing.Size(73, 17); + this.cbSharp_eyed.TabIndex = 50; + this.cbSharp_eyed.Text = "Sharp-eyed"; + // + // cbShield_Proficiency + // + this.cbShield_Proficiency.AutoSize = true; + this.cbShield_Proficiency.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbShield_Proficiency.Location = new System.Drawing.Point(6, 1123); + this.cbShield_Proficiency.Name = "cbShield_Proficiency"; + this.cbShield_Proficiency.Size = new System.Drawing.Size(103, 17); + this.cbShield_Proficiency.TabIndex = 51; + this.cbShield_Proficiency.Text = "Shield Proficiency"; + // + // cbSimple_Weapon_Proficiency + // + this.cbSimple_Weapon_Proficiency.AutoSize = true; + this.cbSimple_Weapon_Proficiency.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbSimple_Weapon_Proficiency.Location = new System.Drawing.Point(6, 1146); + this.cbSimple_Weapon_Proficiency.Name = "cbSimple_Weapon_Proficiency"; + this.cbSimple_Weapon_Proficiency.Size = new System.Drawing.Size(149, 17); + this.cbSimple_Weapon_Proficiency.TabIndex = 52; + this.cbSimple_Weapon_Proficiency.Text = "Simple Weapon Proficiency"; + // + // cbSkill_Emphasis + // + this.cbSkill_Emphasis.AutoSize = true; + this.cbSkill_Emphasis.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbSkill_Emphasis.Location = new System.Drawing.Point(6, 1169); + this.cbSkill_Emphasis.Name = "cbSkill_Emphasis"; + this.cbSkill_Emphasis.Size = new System.Drawing.Size(86, 17); + this.cbSkill_Emphasis.TabIndex = 53; + this.cbSkill_Emphasis.Text = "Skill Emphasis"; + // + // cbStealthy + // + this.cbStealthy.AutoSize = true; + this.cbStealthy.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbStealthy.Location = new System.Drawing.Point(6, 1192); + this.cbStealthy.Name = "cbStealthy"; + this.cbStealthy.Size = new System.Drawing.Size(57, 17); + this.cbStealthy.TabIndex = 54; + this.cbStealthy.Text = "Stealthy"; + // + // cbToughness + // + this.cbToughness.AutoSize = true; + this.cbToughness.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbToughness.Location = new System.Drawing.Point(6, 1215); + this.cbToughness.Name = "cbToughness"; + this.cbToughness.Size = new System.Drawing.Size(72, 17); + this.cbToughness.TabIndex = 55; + this.cbToughness.Text = "Toughness"; + // + // cbTrack + // + this.cbTrack.AutoSize = true; + this.cbTrack.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbTrack.Location = new System.Drawing.Point(6, 1238); + this.cbTrack.Name = "cbTrack"; + this.cbTrack.Size = new System.Drawing.Size(47, 17); + this.cbTrack.TabIndex = 56; + this.cbTrack.Text = "Track"; + // + // cbTrustworthy + // + this.cbTrustworthy.AutoSize = true; + this.cbTrustworthy.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbTrustworthy.Location = new System.Drawing.Point(6, 1261); + this.cbTrustworthy.Name = "cbTrustworthy"; + this.cbTrustworthy.Size = new System.Drawing.Size(74, 17); + this.cbTrustworthy.TabIndex = 57; + this.cbTrustworthy.Text = "Trustworthy"; + // + // cbTwo_Weapon_Fighting + // + this.cbTwo_Weapon_Fighting.AutoSize = true; + this.cbTwo_Weapon_Fighting.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbTwo_Weapon_Fighting.Location = new System.Drawing.Point(6, 1284); + this.cbTwo_Weapon_Fighting.Name = "cbTwo_Weapon_Fighting"; + this.cbTwo_Weapon_Fighting.Size = new System.Drawing.Size(124, 17); + this.cbTwo_Weapon_Fighting.TabIndex = 58; + this.cbTwo_Weapon_Fighting.Text = "Two-Weapon Fighting"; + this.cbTwo_Weapon_Fighting.CheckedChanged += new System.EventHandler(this.cbTwo_Weapon_Fighting_CheckedChanged); + // + // cbImproved_Two_Weapon_Fighting + // + this.cbImproved_Two_Weapon_Fighting.AutoCheck = false; + this.cbImproved_Two_Weapon_Fighting.AutoSize = true; + this.cbImproved_Two_Weapon_Fighting.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbImproved_Two_Weapon_Fighting.Location = new System.Drawing.Point(26, 1307); + this.cbImproved_Two_Weapon_Fighting.Name = "cbImproved_Two_Weapon_Fighting"; + this.cbImproved_Two_Weapon_Fighting.Size = new System.Drawing.Size(171, 17); + this.cbImproved_Two_Weapon_Fighting.TabIndex = 59; + this.cbImproved_Two_Weapon_Fighting.Text = "Improved Two-Weapon Fighting"; + // + // cbWeapon_Finesse + // + this.cbWeapon_Finesse.AutoSize = true; + this.cbWeapon_Finesse.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbWeapon_Finesse.Location = new System.Drawing.Point(6, 1330); + this.cbWeapon_Finesse.Name = "cbWeapon_Finesse"; + this.cbWeapon_Finesse.Size = new System.Drawing.Size(99, 17); + this.cbWeapon_Finesse.TabIndex = 60; + this.cbWeapon_Finesse.Text = "Weapon Finesse"; + this.cbWeapon_Finesse.CheckedChanged += new System.EventHandler(this.cbWeapon_Finesse_CheckedChanged); + // + // cbWeapon_Focus + // + this.cbWeapon_Focus.AutoSize = true; + this.cbWeapon_Focus.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbWeapon_Focus.Location = new System.Drawing.Point(6, 1353); + this.cbWeapon_Focus.Name = "cbWeapon_Focus"; + this.cbWeapon_Focus.Size = new System.Drawing.Size(92, 17); + this.cbWeapon_Focus.TabIndex = 61; + this.cbWeapon_Focus.Text = "Weapon Focus"; + this.cbWeapon_Focus.CheckedChanged += new System.EventHandler(this.cbWeapon_Focus_CheckedChanged); + // + // tbWeapon_Focus + // + this.tbWeapon_Focus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbWeapon_Focus.Enabled = false; + this.tbWeapon_Focus.Location = new System.Drawing.Point(104, 1351); + this.tbWeapon_Focus.Name = "tbWeapon_Focus"; + this.tbWeapon_Focus.Size = new System.Drawing.Size(292, 20); + this.tbWeapon_Focus.TabIndex = 63; + // + // tbWeapon_Finesse + // + this.tbWeapon_Finesse.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbWeapon_Finesse.Enabled = false; + this.tbWeapon_Finesse.Location = new System.Drawing.Point(111, 1330); + this.tbWeapon_Finesse.Name = "tbWeapon_Finesse"; + this.tbWeapon_Finesse.Size = new System.Drawing.Size(285, 20); + this.tbWeapon_Finesse.TabIndex = 62; + // + // tbMartial_Weapon_Proficiency + // + this.tbMartial_Weapon_Proficiency.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbMartial_Weapon_Proficiency.Enabled = false; + this.tbMartial_Weapon_Proficiency.Location = new System.Drawing.Point(161, 617); + this.tbMartial_Weapon_Proficiency.Name = "tbMartial_Weapon_Proficiency"; + this.tbMartial_Weapon_Proficiency.Size = new System.Drawing.Size(235, 20); + this.tbMartial_Weapon_Proficiency.TabIndex = 33; + // + // tbExotic_Weapon_Proficiency + // + this.tbExotic_Weapon_Proficiency.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbExotic_Weapon_Proficiency.Enabled = false; + this.tbExotic_Weapon_Proficiency.Location = new System.Drawing.Point(159, 456); + this.tbExotic_Weapon_Proficiency.Name = "tbExotic_Weapon_Proficiency"; + this.tbExotic_Weapon_Proficiency.Size = new System.Drawing.Size(237, 20); + this.tbExotic_Weapon_Proficiency.TabIndex = 19; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.gbAffinities); + this.tabPage2.Controls.Add(this.gbTalents); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(442, 549); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Talents"; + this.tabPage2.Leave += new System.EventHandler(this.tabPage2_Leave); + // + // gbAffinities + // + this.gbAffinities.Controls.Add(this.cbAir); + this.gbAffinities.Controls.Add(this.cbEarth); + this.gbAffinities.Controls.Add(this.cbWater); + this.gbAffinities.Controls.Add(this.cbFire); + this.gbAffinities.Controls.Add(this.cbSpirit); + this.gbAffinities.Dock = System.Windows.Forms.DockStyle.Top; + this.gbAffinities.Location = new System.Drawing.Point(3, 227); + this.gbAffinities.Name = "gbAffinities"; + this.gbAffinities.Size = new System.Drawing.Size(436, 134); + this.gbAffinities.TabIndex = 17; + this.gbAffinities.TabStop = false; + this.gbAffinities.Text = "One Power Affinities"; + // + // cbAir + // + this.cbAir.AutoSize = true; + this.cbAir.BackColor = System.Drawing.SystemColors.Control; + this.cbAir.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbAir.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbAir.ForeColor = System.Drawing.Color.DeepSkyBlue; + this.cbAir.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.cbAir.Location = new System.Drawing.Point(6, 19); + this.cbAir.Name = "cbAir"; + this.cbAir.Size = new System.Drawing.Size(34, 17); + this.cbAir.TabIndex = 11; + this.cbAir.Text = "Air"; + this.cbAir.UseVisualStyleBackColor = false; + // + // cbEarth + // + this.cbEarth.AutoSize = true; + this.cbEarth.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbEarth.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbEarth.ForeColor = System.Drawing.Color.Brown; + this.cbEarth.Location = new System.Drawing.Point(6, 42); + this.cbEarth.Name = "cbEarth"; + this.cbEarth.Size = new System.Drawing.Size(49, 17); + this.cbEarth.TabIndex = 12; + this.cbEarth.Text = "Earth"; + // + // cbWater + // + this.cbWater.AutoSize = true; + this.cbWater.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbWater.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbWater.ForeColor = System.Drawing.Color.LightSeaGreen; + this.cbWater.Location = new System.Drawing.Point(6, 111); + this.cbWater.Name = "cbWater"; + this.cbWater.Size = new System.Drawing.Size(53, 17); + this.cbWater.TabIndex = 15; + this.cbWater.Text = "Water"; + // + // cbFire + // + this.cbFire.AutoSize = true; + this.cbFire.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbFire.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbFire.ForeColor = System.Drawing.Color.OrangeRed; + this.cbFire.Location = new System.Drawing.Point(6, 65); + this.cbFire.Name = "cbFire"; + this.cbFire.Size = new System.Drawing.Size(40, 17); + this.cbFire.TabIndex = 13; + this.cbFire.Text = "Fire"; + // + // cbSpirit + // + this.cbSpirit.AutoSize = true; + this.cbSpirit.BackColor = System.Drawing.SystemColors.Control; + this.cbSpirit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbSpirit.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbSpirit.ForeColor = System.Drawing.Color.Yellow; + this.cbSpirit.Location = new System.Drawing.Point(6, 88); + this.cbSpirit.Name = "cbSpirit"; + this.cbSpirit.Size = new System.Drawing.Size(48, 17); + this.cbSpirit.TabIndex = 14; + this.cbSpirit.Text = "Spirit"; + this.cbSpirit.UseVisualStyleBackColor = false; + // + // gbTalents + // + this.gbTalents.Controls.Add(this.cbBalefire); + this.gbTalents.Controls.Add(this.cbTravling); + this.gbTalents.Controls.Add(this.cbIllusion); + this.gbTalents.Controls.Add(this.cbWarding); + this.gbTalents.Controls.Add(this.cbHealing); + this.gbTalents.Controls.Add(this.cbCloudDancing); + this.gbTalents.Controls.Add(this.cbElementalism); + this.gbTalents.Controls.Add(this.cbEarthSinging); + this.gbTalents.Controls.Add(this.cbConjunction); + this.gbTalents.Dock = System.Windows.Forms.DockStyle.Top; + this.gbTalents.Location = new System.Drawing.Point(3, 3); + this.gbTalents.Name = "gbTalents"; + this.gbTalents.Size = new System.Drawing.Size(436, 224); + this.gbTalents.TabIndex = 16; + this.gbTalents.TabStop = false; + this.gbTalents.Text = "Talents"; + // + // cbBalefire + // + this.cbBalefire.AutoSize = true; + this.cbBalefire.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbBalefire.Location = new System.Drawing.Point(6, 19); + this.cbBalefire.Name = "cbBalefire"; + this.cbBalefire.Size = new System.Drawing.Size(54, 17); + this.cbBalefire.TabIndex = 0; + this.cbBalefire.Text = "Balefire"; + // + // cbTravling + // + this.cbTravling.AutoSize = true; + this.cbTravling.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbTravling.Location = new System.Drawing.Point(6, 180); + this.cbTravling.Name = "cbTravling"; + this.cbTravling.Size = new System.Drawing.Size(63, 17); + this.cbTravling.TabIndex = 7; + this.cbTravling.Text = "Traveling"; + // + // cbIllusion + // + this.cbIllusion.AutoSize = true; + this.cbIllusion.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbIllusion.Location = new System.Drawing.Point(6, 157); + this.cbIllusion.Name = "cbIllusion"; + this.cbIllusion.Size = new System.Drawing.Size(51, 17); + this.cbIllusion.TabIndex = 6; + this.cbIllusion.Text = "Illusion"; + // + // cbWarding + // + this.cbWarding.AutoSize = true; + this.cbWarding.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbWarding.Location = new System.Drawing.Point(6, 203); + this.cbWarding.Name = "cbWarding"; + this.cbWarding.Size = new System.Drawing.Size(59, 17); + this.cbWarding.TabIndex = 8; + this.cbWarding.Text = "Warding"; + // + // cbHealing + // + this.cbHealing.AutoSize = true; + this.cbHealing.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbHealing.Location = new System.Drawing.Point(6, 134); + this.cbHealing.Name = "cbHealing"; + this.cbHealing.Size = new System.Drawing.Size(55, 17); + this.cbHealing.TabIndex = 5; + this.cbHealing.Text = "Healing"; + // + // cbCloudDancing + // + this.cbCloudDancing.AutoSize = true; + this.cbCloudDancing.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbCloudDancing.Location = new System.Drawing.Point(6, 42); + this.cbCloudDancing.Name = "cbCloudDancing"; + this.cbCloudDancing.Size = new System.Drawing.Size(89, 17); + this.cbCloudDancing.TabIndex = 1; + this.cbCloudDancing.Text = "Cloud Dancing"; + // + // cbElementalism + // + this.cbElementalism.AutoSize = true; + this.cbElementalism.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbElementalism.Location = new System.Drawing.Point(6, 111); + this.cbElementalism.Name = "cbElementalism"; + this.cbElementalism.Size = new System.Drawing.Size(80, 17); + this.cbElementalism.TabIndex = 4; + this.cbElementalism.Text = "Elementalism"; + // + // cbEarthSinging + // + this.cbEarthSinging.AutoSize = true; + this.cbEarthSinging.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbEarthSinging.Location = new System.Drawing.Point(6, 88); + this.cbEarthSinging.Name = "cbEarthSinging"; + this.cbEarthSinging.Size = new System.Drawing.Size(82, 17); + this.cbEarthSinging.TabIndex = 3; + this.cbEarthSinging.Text = "Earth Singing"; + // + // cbConjunction + // + this.cbConjunction.AutoSize = true; + this.cbConjunction.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbConjunction.Location = new System.Drawing.Point(6, 65); + this.cbConjunction.Name = "cbConjunction"; + this.cbConjunction.Size = new System.Drawing.Size(75, 17); + this.cbConjunction.TabIndex = 2; + this.cbConjunction.Text = "Conjunction"; + // + // tpHistory + // + this.tpHistory.Controls.Add(this.tbGeschichte); + this.tpHistory.Location = new System.Drawing.Point(4, 22); + this.tpHistory.Name = "tpHistory"; + this.tpHistory.Padding = new System.Windows.Forms.Padding(3); + this.tpHistory.Size = new System.Drawing.Size(442, 549); + this.tpHistory.TabIndex = 5; + this.tpHistory.Text = "Geschichte"; + // + // tbGeschichte + // + this.tbGeschichte.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbGeschichte.Dock = System.Windows.Forms.DockStyle.Fill; + this.tbGeschichte.Location = new System.Drawing.Point(3, 3); + this.tbGeschichte.Multiline = true; + this.tbGeschichte.Name = "tbGeschichte"; + this.tbGeschichte.Size = new System.Drawing.Size(436, 543); + this.tbGeschichte.TabIndex = 0; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.tbSprche); + this.tabPage4.Controls.Add(this.bKopieren); + this.tabPage4.Controls.Add(this.tbSpruch); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Padding = new System.Windows.Forms.Padding(3); + this.tabPage4.Size = new System.Drawing.Size(442, 549); + this.tabPage4.TabIndex = 6; + this.tabPage4.Text = "Spruch"; + // + // tbSprche + // + this.tbSprche.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbSprche.Dock = System.Windows.Forms.DockStyle.Fill; + this.tbSprche.Location = new System.Drawing.Point(3, 85); + this.tbSprche.Multiline = true; + this.tbSprche.Name = "tbSprche"; + this.tbSprche.ReadOnly = true; + this.tbSprche.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.tbSprche.Size = new System.Drawing.Size(436, 461); + this.tbSprche.TabIndex = 3; + this.tbSprche.Text = resources.GetString("tbSprche.Text"); + // + // bKopieren + // + this.bKopieren.Dock = System.Windows.Forms.DockStyle.Top; + this.bKopieren.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bKopieren.Location = new System.Drawing.Point(3, 62); + this.bKopieren.Name = "bKopieren"; + this.bKopieren.Size = new System.Drawing.Size(436, 23); + this.bKopieren.TabIndex = 2; + this.bKopieren.Text = "Kopieren"; + this.bKopieren.Click += new System.EventHandler(this.bKopieren_Click); + // + // tbSpruch + // + this.tbSpruch.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.tbSpruch.Dock = System.Windows.Forms.DockStyle.Top; + this.tbSpruch.Location = new System.Drawing.Point(3, 3); + this.tbSpruch.Multiline = true; + this.tbSpruch.Name = "tbSpruch"; + this.tbSpruch.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.tbSpruch.Size = new System.Drawing.Size(436, 59); + this.tbSpruch.TabIndex = 0; + // + // printPreviewDialog1 + // + this.printPreviewDialog1.AutoScrollMargin = new System.Drawing.Size(0, 0); + this.printPreviewDialog1.AutoScrollMinSize = new System.Drawing.Size(0, 0); + this.printPreviewDialog1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.printPreviewDialog1.ClientSize = new System.Drawing.Size(400, 300); + this.printPreviewDialog1.Document = this.printDocument1; + this.printPreviewDialog1.Enabled = true; + this.printPreviewDialog1.Icon = ((System.Drawing.Icon)(resources.GetObject("printPreviewDialog1.Icon"))); + this.printPreviewDialog1.Name = "printPreviewDialog1"; + this.printPreviewDialog1.Visible = false; + // + // saveSKLFileDialog + // + this.saveSKLFileDialog.DefaultExt = "skl"; + this.saveSKLFileDialog.Filter = "Wheel of Time Skills (*.skl)|*.skl|Alle Dateien|*.*"; + // + // openSKLFileDialog + // + this.openSKLFileDialog.Filter = "Wheel of Time Skills (*.skl)|*.skl|Alle Dateien|*.*"; + // + // ChildWnd + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1170, 575); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.toolStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ChildWnd"; + this.Text = "ChildWnd"; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.toolStrip1.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.ResumeLayout(false); + this.tabControl1.ResumeLayout(false); + this.tabPage3.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.SkillsPanel.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.tpFeats.ResumeLayout(false); + this.gbLost_Ability_Feats.ResumeLayout(false); + this.gbLost_Ability_Feats.PerformLayout(); + this.gbChanneling_Feats.ResumeLayout(false); + this.gbChanneling_Feats.PerformLayout(); + this.gbSpecial_Feats.ResumeLayout(false); + this.gbSpecial_Feats.PerformLayout(); + this.gbGeneral_Feats.ResumeLayout(false); + this.gbGeneral_Feats.PerformLayout(); + this.tabPage2.ResumeLayout(false); + this.gbAffinities.ResumeLayout(false); + this.gbAffinities.PerformLayout(); + this.gbTalents.ResumeLayout(false); + this.gbTalents.PerformLayout(); + this.tpHistory.ResumeLayout(false); + this.tpHistory.PerformLayout(); + this.tabPage4.ResumeLayout(false); + this.tabPage4.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PrintDialog printDialog1; + private System.Drawing.Printing.PrintDocument printDocument1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.SaveFileDialog saveWOTFileDialog; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.PrintPreviewControl printPreviewControl1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.PropertyGrid propertyGrid1; + private System.Windows.Forms.TabPage tpBackground_Feats; + private System.Windows.Forms.TabPage tpBackgroundSkills; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.Panel SkillsPanel; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Button bLoadSkills; + private System.Windows.Forms.Button bSaveSkills; + private System.Windows.Forms.Button bCreateSkill; + private System.Windows.Forms.TextBox tbSkillName; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label lSkillRest; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label lSkillUsed; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label lSkillGesamt; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.GroupBox gbAffinities; + private System.Windows.Forms.CheckBox cbAir; + private System.Windows.Forms.CheckBox cbEarth; + private System.Windows.Forms.CheckBox cbWater; + private System.Windows.Forms.CheckBox cbFire; + private System.Windows.Forms.CheckBox cbSpirit; + private System.Windows.Forms.GroupBox gbTalents; + private System.Windows.Forms.CheckBox cbBalefire; + private System.Windows.Forms.CheckBox cbTravling; + private System.Windows.Forms.CheckBox cbIllusion; + private System.Windows.Forms.CheckBox cbWarding; + private System.Windows.Forms.CheckBox cbHealing; + private System.Windows.Forms.CheckBox cbCloudDancing; + private System.Windows.Forms.CheckBox cbElementalism; + private System.Windows.Forms.CheckBox cbEarthSinging; + private System.Windows.Forms.CheckBox cbConjunction; + private System.Windows.Forms.ToolStripButton toolStripSaveButton1; + private System.Windows.Forms.ToolStripButton tsbSaveAs; + private System.Windows.Forms.ToolStripButton toolStripPrintButton; + private System.Windows.Forms.TabPage tpHistory; + private System.Windows.Forms.TextBox tbGeschichte; + private System.Windows.Forms.ToolStripButton bBackground; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.TextBox tbSpruch; + private System.Windows.Forms.ToolStripButton bPrintPreview; + private System.Windows.Forms.PrintPreviewDialog printPreviewDialog1; + private System.Windows.Forms.ToolStripButton bAktualisieren; + private System.Windows.Forms.Button bKopieren; + private System.Windows.Forms.TextBox tbSprche; + private System.Windows.Forms.TabPage tpFeats; + private System.Windows.Forms.GroupBox gbSpecial_Feats; + private System.Windows.Forms.GroupBox gbGeneral_Feats; + private System.Windows.Forms.GroupBox gbLost_Ability_Feats; + private System.Windows.Forms.GroupBox gbChanneling_Feats; + private System.Windows.Forms.CheckBox cbAlertness; + private System.Windows.Forms.CheckBox cbAmbidextrous; + private System.Windows.Forms.CheckBox cbAnimal_Affinity; + private System.Windows.Forms.CheckBox cbArmor_Proficiency_light; + private System.Windows.Forms.CheckBox cbArmor_Proficiency_medium; + private System.Windows.Forms.CheckBox cbArmor_Proficiency_heavy; + private System.Windows.Forms.CheckBox cbAthletic; + private System.Windows.Forms.CheckBox cbBlind_Fight; + private System.Windows.Forms.CheckBox cbCombat_Expertise; + private System.Windows.Forms.CheckBox cbImproved_Disarm; + private System.Windows.Forms.CheckBox cbImproved_Trip; + private System.Windows.Forms.CheckBox cbWhirlwind_Attack; + private System.Windows.Forms.CheckBox cbCombat_Reflexes; + private System.Windows.Forms.CheckBox cbThe_Dark_One_s_own_Luck; + private System.Windows.Forms.CheckBox cbDodge; + private System.Windows.Forms.CheckBox cbMobility; + private System.Windows.Forms.CheckBox cbSpring_Attack; + private System.Windows.Forms.CheckBox cbEndurance; + private System.Windows.Forms.CheckBox cbExotic_Weapon_Proficiency; + private System.Windows.Forms.CheckBox cbFame; + private System.Windows.Forms.TextBox tbExotic_Weapon_Proficiency; + private System.Windows.Forms.CheckBox cbGreat_Fortitude; + private System.Windows.Forms.CheckBox cbImproved_Critical; + private System.Windows.Forms.CheckBox cbImproved_Initiative; + private System.Windows.Forms.CheckBox cbImproved_Unarmed_Strike; + private System.Windows.Forms.CheckBox cbIron_Will; + private System.Windows.Forms.CheckBox cbLightning_Reflexes; + private System.Windows.Forms.CheckBox cbMental_Stability; + private System.Windows.Forms.CheckBox cbMartial_Weapon_Proficiency; + private System.Windows.Forms.CheckBox cbMimic; + private System.Windows.Forms.CheckBox cbMounted_Combat; + private System.Windows.Forms.CheckBox cbMounted_Archery; + private System.Windows.Forms.TextBox tbMartial_Weapon_Proficiency; + private System.Windows.Forms.CheckBox cbTrample; + private System.Windows.Forms.CheckBox cbRide_By_Attack; + private System.Windows.Forms.CheckBox cbNimble; + private System.Windows.Forms.CheckBox cbPersuasive; + private System.Windows.Forms.CheckBox cbPoint_Blank_Shot; + private System.Windows.Forms.CheckBox cbFar_Shot; + private System.Windows.Forms.CheckBox cbPrecise_Shot; + private System.Windows.Forms.CheckBox cbRapid_Shot; + private System.Windows.Forms.CheckBox cbShot_on_the_Run; + private System.Windows.Forms.CheckBox cbPower_Attack; + private System.Windows.Forms.CheckBox cbCleave; + private System.Windows.Forms.CheckBox cbGreat_Cleave; + private System.Windows.Forms.CheckBox cbImproved_Bull_Rush; + private System.Windows.Forms.CheckBox cbQuick_Draw; + private System.Windows.Forms.CheckBox cbQuickness; + private System.Windows.Forms.CheckBox cbRun; + private System.Windows.Forms.CheckBox cbSharp_eyed; + private System.Windows.Forms.CheckBox cbShield_Proficiency; + private System.Windows.Forms.CheckBox cbSimple_Weapon_Proficiency; + private System.Windows.Forms.CheckBox cbSkill_Emphasis; + private System.Windows.Forms.CheckBox cbStealthy; + private System.Windows.Forms.CheckBox cbToughness; + private System.Windows.Forms.CheckBox cbTrack; + private System.Windows.Forms.CheckBox cbTrustworthy; + private System.Windows.Forms.CheckBox cbTwo_Weapon_Fighting; + private System.Windows.Forms.CheckBox cbImproved_Two_Weapon_Fighting; + private System.Windows.Forms.CheckBox cbWeapon_Finesse; + private System.Windows.Forms.CheckBox cbWeapon_Focus; + private System.Windows.Forms.TextBox tbWeapon_Focus; + private System.Windows.Forms.TextBox tbWeapon_Finesse; + private System.Windows.Forms.CheckBox cbEliminate_Block; + private System.Windows.Forms.CheckBox cbWeapon_Specializiation; + private System.Windows.Forms.CheckBox cbCombat_Casting; + private System.Windows.Forms.TextBox tbWeapon_Specializiation; + private System.Windows.Forms.CheckBox cbExtra_Affinity; + private System.Windows.Forms.CheckBox cbExtra_Talent; + private System.Windows.Forms.CheckBox cbMultiweave; + private System.Windows.Forms.CheckBox cbPower_Heightened_Senses; + private System.Windows.Forms.CheckBox cbSense_Residue; + private System.Windows.Forms.CheckBox cbTie_Off_Weave; + private System.Windows.Forms.CheckBox cbLatent_Dreamer; + private System.Windows.Forms.CheckBox cbDreamwalk; + private System.Windows.Forms.CheckBox cbBend_Dream; + private System.Windows.Forms.CheckBox cbDreamjump; + private System.Windows.Forms.CheckBox cbWaken_Dream; + private System.Windows.Forms.CheckBox cbDreamwatch; + private System.Windows.Forms.CheckBox cbLatent_Foreteller; + private System.Windows.Forms.CheckBox cbForeteller; + private System.Windows.Forms.CheckBox cbLatent_Old_Blood; + private System.Windows.Forms.CheckBox cbOld_Blood; + private System.Windows.Forms.CheckBox cbLatent_Sniffer; + private System.Windows.Forms.CheckBox cbSniffer; + private System.Windows.Forms.CheckBox cbLatent_Treesinger; + private System.Windows.Forms.CheckBox cbTreesinger; + private System.Windows.Forms.CheckBox cbLatent_Viewer; + private System.Windows.Forms.CheckBox cbViewing; + private System.Windows.Forms.SaveFileDialog saveSKLFileDialog; + private System.Windows.Forms.OpenFileDialog openSKLFileDialog; + private System.Windows.Forms.Button bClear; + private Points pAnimal_Empathy; + private Points pAppraise; + private Points pBalance; + private Points pBluff; + private Points pClimb; + private Points pConcentration; + private Points pCraft; + private Points pDecipher_Script; + private Points pDiplomacy; + private Points pDisable_Device; + private Points pDisguise; + private Points pEscape_Artist; + private Points pForgery; + private Points pGather_Information; + private Points pHandle_Animal; + private Points pHeal; + private Points pHide; + private Points pInnuendo; + private Points pIntimidate; + private Points pIntuit_Direction; + private Points pJump; + private Points pKnowledge_Legends; + private Points pKnowledge_Arcana; + private Points pKnowledge_Arch; + private Points pKnowledge_Blight; + private Points pKnowledge_Geography; + private Points pKnowledge_History; + private Points pKnowledge_Local; + private Points pKnowledge_Nature; + private Points pKnowledge_Nobility; + private Points pListen; + private Points pMove_Silently; + private Points pOpen_Lock; + private Points pPick_Pocket; + private Points pRead_Lips; + private Points pRide; + private Points pSearch; + private Points pSense_Motive; + private Points pSpot; + private Points pSwim; + private Points pTumble; + private Points pUse_Rope; + private Points pWeavesight; + private Points pWilderness_Lore; + } +} \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd.cs new file mode 100644 index 0000000..945e522 Binary files /dev/null and b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd.cs differ diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd.resx b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd.resx new file mode 100644 index 0000000..03d74a5 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd.resx @@ -0,0 +1,535 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 267, 17 + + + 398, 17 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAilJREFUOE+tk91L + k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz + V7TEoabYRDD49ju/6Pm1Mm/qB+fy8znPOef7qFT/4z17GgWVr30Zbd4lPHYvoLEhgvuOGdTWfIL9dgg3 + yqdQWjKBwoLXyMsdxYXzQSi9CeztAWqqV7HRW1ldgzGtF4fTnvBSBN7WRS6orPjyV57gyMIKdpufQ62W + YTnkEQL3o3kuKC35vK7gJ/w+vIg4kw8Fl6dxwNwkBM76WS64ZHv3h+BXeGQygm2SF9accaSmOIWg7m6Y + C7KzRmMEv8ODwTA2692Q5QBMJocQVFd95AL5TEARrAf3+D9gU2IDjhx9gaSkWiG4WTmN7i6wUwLHT76C + 5dgA3zYtjGamz6bOP+A+HLR0QpLsQnC1bBIdPrAMAE2ub+zuX1F+fY4vlRZGM2dmBBU4ObUdBkOFEFwp + HIenGXjoXGPBicKYnhNT5hM2pJ8r4p2TUxi83wO9vkwIbHljDAaq7kR5ZxJQSOK0EobezmJsag5y7jXs + NbZxWLvHBZ2uSAgolo57UD6bBASfzb+FN6F5hGaWcLHYjni9i8GNiN/1ANrEfCHIzBhmcy/zmbcaPNiy + Q0JLRz98XYPo7vNj4OUQ9pksUOvqkcDg7Zo6aDTWWMHpU/08npQwCgndmU5F26aF0czUlYrgnQnZQvAv + f/R3bGg6a0rM640AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAkVJREFUOE+tk11I + k3EUxr2MCMILI+hiYRFBYYotIwnNpHKQZh8XFrhMFLFQrNSpM0ONJvOrgaK+pfk5K9M5w+X6YosJU9DN + XjYLmlEiCM4uIii2+bTzD/2/BGFgLxzeq+d3nnPO8w8J+R9f82M7pKXrG4f2oRXVba+g1j3HDa0RuVUD + uFKmx6XCLpzPb8eZqwLWepPY58df6/sPwPttBfPeFXxYCGB6LoC9J2//G2BJdMN9OQqiMhIzNpGJu00e + 7DlRsT6AOpMY82P4+fo6Js/txFt3AB0j77E7UQKgmf8cYdW2mB75W1ybiPFUGcYcfrQ9nUF4wi3ugBYm + BUhnJtvUmcRDw04YJvxo0k9AFl/OAbTtVcCsZxEFlQIru2uZzUy2qTOJ+20+NHZaseOomgPoVAT4+MXL + hAZPH8yfh6FIz4EwOIW4lCxWrYZZdFl8qBVeYHtsGQfQnUlc2R4Uz/XCtewIQnrRMFmBi6ocGF9Ow2R5 + RwK0ji7hbvMzhB0u5QAKyZ0eAcZPeri+Otm/xVmDaksBrhku4GxeBjqfvEHjgxEGqbo3iFB5CQdQwoY8 + PWtiQaxDja0YhaNKZPSfgqJpH6KTUpCv1iFXVccgW6NVHEDxtC6YWecOtw719nKUmrOQPZCM1PtyxNfL + EKPZBnnacSjS8hCXnIktUcUcQNlucWiZbY2tCDdNSmQ+SgqKD+JYQzgTx2jC2P9QyS7sP3Iamw9IAPQw + KNsUT0oYhYTuTKeibdPCaGayTZ1JvCmiiDvYyIv+BQh9MVb8RJN+AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAi5JREFUOE+tk+1P + klEYxlkf+39aW1utttpM1NJqwzIjnM5J0TAmBSHLCFNJ7cVaUqNH5gLdQxY4RkxrbDqDzBJdOt0SKLAg + TEDDeLl6nkPgSNz64L1d29nZ7ut3nfucw+HsdBltUxi0f4RpdGZb0SNubMtlDd67ffi3Nn4n4fGvYNA6 + gZJzV8GtvrLVhG1mlUqlEQxH4HB9IhqyO2Ewj8M140WVSE0MCibQW1z4/DWcB2fJq9E4ZheXQduchFyQ + rqXHwSrJ0L2BUB7d6piG0+1BZYMKx87LodG+wL0+62YKRecz0jzinCd0lpolB0IxzC+F0Guwo5Qvg7Kr + H0/oMZQyRuQYTW16qB8OgTK/wyOjA/qXb3GXsuH6HSPELVrwGztQXqNA8VkpTl+4iW6dBRKVFsXZId5+ + +gqRWHzL1NmNRDKF9XiCzOB7eB1fvkUhb6dQJ+1iEsgyCVQPTDC/+YDndhco02vc7xuGumcAsnYdRM09 + EFzuAK+hBccFchSdkeAis1cpvIGDJ0UZA2X3AHz+YMEEkbUNeAKr2A0O0S6KA764DSXVUuw5WpMxaO40 + YHpuCczccsWuf0QTmPOtYWw2TJotfw1O1CpwoEK4aaDUUND00vAG4wjH0vD/TGNxOYWJhV8Ynoyi37FC + yFkd4YlJcy5BvaQVsls6jE76yN3+j/IM2GNIVI9RUadEmeAauMwzLapqwmFeIw6duoT95ULsK6vHXm5t + jpyj78RP/gPgHTGb+rLlcwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAkVJREFUOE+tk11I + k3EUxr2MCMILI+hiYRFBYYotIwnNpHKQZh8XFrhMFLFQrNSpM0ONJvOrgaK+pfk5K9M5w+X6YosJU9DN + XjYLmlEiCM4uIii2+bTzD/2/BGFgLxzeq+d3nnPO8w8J+R9f82M7pKXrG4f2oRXVba+g1j3HDa0RuVUD + uFKmx6XCLpzPb8eZqwLWepPY58df6/sPwPttBfPeFXxYCGB6LoC9J2//G2BJdMN9OQqiMhIzNpGJu00e + 7DlRsT6AOpMY82P4+fo6Js/txFt3AB0j77E7UQKgmf8cYdW2mB75W1ybiPFUGcYcfrQ9nUF4wi3ugBYm + BUhnJtvUmcRDw04YJvxo0k9AFl/OAbTtVcCsZxEFlQIru2uZzUy2qTOJ+20+NHZaseOomgPoVAT4+MXL + hAZPH8yfh6FIz4EwOIW4lCxWrYZZdFl8qBVeYHtsGQfQnUlc2R4Uz/XCtewIQnrRMFmBi6ocGF9Ow2R5 + RwK0ji7hbvMzhB0u5QAKyZ0eAcZPeri+Otm/xVmDaksBrhku4GxeBjqfvEHjgxEGqbo3iFB5CQdQwoY8 + PWtiQaxDja0YhaNKZPSfgqJpH6KTUpCv1iFXVccgW6NVHEDxtC6YWecOtw719nKUmrOQPZCM1PtyxNfL + EKPZBnnacSjS8hCXnIktUcUcQNlucWiZbY2tCDdNSmQ+SgqKD+JYQzgTx2jC2P9QyS7sP3Iamw9IAPQw + KNsUT0oYhYTuTKeibdPCaGayTZ1JvCmiiDvYyIv+BQh9MVb8RJN+AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAkVJREFUOE+tk11I + k3EUxr2MCMILI+hiYRFBYYotIwnNpHKQZh8XFrhMFLFQrNSpM0ONJvOrgaK+pfk5K9M5w+X6YosJU9DN + XjYLmlEiCM4uIii2+bTzD/2/BGFgLxzeq+d3nnPO8w8J+R9f82M7pKXrG4f2oRXVba+g1j3HDa0RuVUD + uFKmx6XCLpzPb8eZqwLWepPY58df6/sPwPttBfPeFXxYCGB6LoC9J2//G2BJdMN9OQqiMhIzNpGJu00e + 7DlRsT6AOpMY82P4+fo6Js/txFt3AB0j77E7UQKgmf8cYdW2mB75W1ybiPFUGcYcfrQ9nUF4wi3ugBYm + BUhnJtvUmcRDw04YJvxo0k9AFl/OAbTtVcCsZxEFlQIru2uZzUy2qTOJ+20+NHZaseOomgPoVAT4+MXL + hAZPH8yfh6FIz4EwOIW4lCxWrYZZdFl8qBVeYHtsGQfQnUlc2R4Uz/XCtewIQnrRMFmBi6ocGF9Ow2R5 + RwK0ji7hbvMzhB0u5QAKyZ0eAcZPeri+Otm/xVmDaksBrhku4GxeBjqfvEHjgxEGqbo3iFB5CQdQwoY8 + PWtiQaxDja0YhaNKZPSfgqJpH6KTUpCv1iFXVccgW6NVHEDxtC6YWecOtw719nKUmrOQPZCM1PtyxNfL + EKPZBnnacSjS8hCXnIktUcUcQNlucWiZbY2tCDdNSmQ+SgqKD+JYQzgTx2jC2P9QyS7sP3Iamw9IAPQw + KNsUT0oYhYTuTKeibdPCaGayTZ1JvCmiiDvYyIv+BQh9MVb8RJN+AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAkVJREFUOE+tk11I + k3EUxr2MCMILI+hiYRFBYYotIwnNpHKQZh8XFrhMFLFQrNSpM0ONJvOrgaK+pfk5K9M5w+X6YosJU9DN + XjYLmlEiCM4uIii2+bTzD/2/BGFgLxzeq+d3nnPO8w8J+R9f82M7pKXrG4f2oRXVba+g1j3HDa0RuVUD + uFKmx6XCLpzPb8eZqwLWepPY58df6/sPwPttBfPeFXxYCGB6LoC9J2//G2BJdMN9OQqiMhIzNpGJu00e + 7DlRsT6AOpMY82P4+fo6Js/txFt3AB0j77E7UQKgmf8cYdW2mB75W1ybiPFUGcYcfrQ9nUF4wi3ugBYm + BUhnJtvUmcRDw04YJvxo0k9AFl/OAbTtVcCsZxEFlQIru2uZzUy2qTOJ+20+NHZaseOomgPoVAT4+MXL + hAZPH8yfh6FIz4EwOIW4lCxWrYZZdFl8qBVeYHtsGQfQnUlc2R4Uz/XCtewIQnrRMFmBi6ocGF9Ow2R5 + RwK0ji7hbvMzhB0u5QAKyZ0eAcZPeri+Otm/xVmDaksBrhku4GxeBjqfvEHjgxEGqbo3iFB5CQdQwoY8 + PWtiQaxDja0YhaNKZPSfgqJpH6KTUpCv1iFXVccgW6NVHEDxtC6YWecOtw719nKUmrOQPZCM1PtyxNfL + EKPZBnnacSjS8hCXnIktUcUcQNlucWiZbY2tCDdNSmQ+SgqKD+JYQzgTx2jC2P9QyS7sP3Iamw9IAPQw + KNsUT0oYhYTuTKeibdPCaGayTZ1JvCmiiDvYyIv+BQh9MVb8RJN+AAAAAElFTkSuQmCC + + + + 510, 17 + + + "Was in der Fäule stirbt, ist verloren." - Lan + +"Es ist unklug zu versuchen, einen Mann von seinem Schwert zu trennen." - Lan + +"Das Rad der Zeit webt uns in das Muster, wie es ihm beliebt, aber das Muster ist das Werk des Lichts." - Moiraine + +Wenn es sechs mit Schwertern bewaffneten Männern am hellichten Tag nicht gelang, einen Mann zu töten, dann schaffte es vielleicht eine Frau in der Dunkelheit. + +"Neunhundert Jahre lang sind wir gekommen, wenn der Weiße Turm uns gerufen hat, aber wo war der Turm, als Malkier starb?" - Lan zu Moiraine + +"Man gibt auf, wenn man tot ist." - Lan + +"Tja, wir werden's überleben, so das Licht will. Und wenn das Licht nicht will, werden wir trotzdem überleben." - Sprichwort in den Zwei Flüssen + +"Blut und Asche! Blut und blutige Asche!" - Mat Cauthon + +"Ihr möchtet Geschichten hören? Ich habe Geschichten, und ich werde sie Euch erzählen. Ich werde sie vor Euren Augen zum Leben erwecken." - Thom Merrilin + +"Der Blick der Augenlosen bedeutet Angst." - Sprichwort in den Grenzlanden + +"Dovie andi se tovya sagain - Es ist Zeit die Würfel rollen zu lassen." - Mat + +"Das alte Blut fließt tatsächlich noch sehr stark im Land der Zwei Flüsse." - Moiraine + +"Möge der Stein stehen, bis ich zu Staub geworden bin." - Thom + +"Bis wir unser Ziel erreichen, muss ich eben jedem misstrauen. Dort dann nur noch jedem zweiten." - Lan + +"Es gibt keine Entschuldigung für die Anwendung von Gewalt. Keine einzige. Niemals." - Raen, ein Sucher der Tuatha'an + +"Nimm das Leben, wie es kommt. Renn weg, wenn du musst, kämpfe, wenn du musst, und ruhe dich aus, wenn du kannst." - Elyas Machera + +"Ila hat mir einiges darüber gesagt, was es heißt, eine Frau zu sein." +"Ha! Niemand sagt uns, was es heißt, Mann zu sein. Wir sind es einfach." +"Das ist vielleicht auch der Grund, warum ihr das so schlecht macht." +Egwene u.Perrin + +"Der Drache ist eins mit dem Land, und das Land ist eins mit dem Drachen." - Thom, in einem Traum Rands + +"Politik ist wie ein nebliger Sumpf voll Schlangen." - Basel Gill + +"Die Welt gehört euch, euch und eurer Art. Das Stedding gehört mir." - Loial zu Rand + +"Stur bis zum letzten. Vielleicht stur genug, um dich am Ende zu retten." - Lan zu Perrin + +"Gib dich nie mit einer Aes Sedai ab, außer in einem Stedding." - Loial + +"Carai an Ellisande! Al Ellisande! Mordero daghain pas duente cuebiyar! Al Ellisande!" - Mat + +"Die alten Schranken werden brüchig. In unserer Zeit liegt etwas von Auflösung und Veränderung. Alte Dinge kommen zurück, und neue werden geboren. Wir erleben vielleicht das Ende eines Zeitalters." - Lan + +"Bis aller Schatten verflogen, alles Wasser verdunstet ist, hinein in die Dunkelheit des Bösen mit gebleckten Zähnen, mit dem letzten Atemzug noch den Trotz entgegenschreien und dem Sichtblender ins Auge speien, auch noch am letzten Tag." - Die Aiel + +"Ich bin deinen Blassen und Trollocs entkommen und deinen Schattenfreunden. Ich habe dich hierher verfolgt und auf dem Weg dein Heer zerstört. Du webst das Muster nicht." - Rand zu Ba'alzamon + +"Entweder bleiben und heiraten oder durch die Kurzen Wege reisen. Wenn man ta'veren zum Freund hat, ist das Leben ziemlich riskant." - Loial + +"Der Tod ist leichter als eine Feder, aber die Pflicht ist schwerer als ein Berg." - Sprichwort in den Grenzlanden + +"Du hast doch immer etwas mit Frauen, die dich in Schwierigkeiten bringen, Lews Therin." - Brigitte + +"Ich werde mein Bestes geben. Weil niemand anders da ist und es getan werden muss und weil ich in der Pflicht stehe." - Rand + +"Besser die Sonne umarmen, als eine Aes Sedai zu ärgern." - Loial + +"Plant immer für den schlimmsten Fall, dann werdet Ihr nur angenehm überrascht." - Verin + +"Der Dunkle König ist die Verkörperung des Paradoxen und des Chaos, der Zerstörer von Vernunft und Logik, der Störer allen Gleichgewichts, der Hinderer aller Ordnung." - Verin + +"Von allen Tieren ist der Mann am leichtesten an die Leine zu legen, doch am schwersten daran zu halten." - Siuan Sanche + +"Ich bin kein Held. Ich tue, was sein muss, aber ein Held bin ich nicht." - Mat + +"Es gibt immer einen Ausgleich für alles, weißt du? Gut und Böse, Licht und Schatten. Wir wären keine Menschen, wenn sich nicht alles ausgleichen würde." – Thom zu Mat + +"Wo ich auch hinkomme, immer seid ihr Menschen so aktiv, immer in Eile, immer passieren euch solche Sachen. Wie könnt ihr nur soviel Aufregung ertragen?" – Loial + +"Der Tod kommt zu uns allen. Wir können lediglich wählen, wie wir ihm gegenübertreten wollen." – Aviendha + +"Schwimmen. Bedeutet das... ins Wasser gehen? In soviel Wasser hinein?" – Jolien, eine Aiel + +"Eine hübsche Frau bedeutet Spaß beim Tanzen. Zwei hübsche Frauen bringen Probleme ins Haus. Drei hübsche Frauen, und man sollte besser wegrennen." – Mats Vater + +"Männer vergessen, vergeben aber nie; Frauen vergeben, vergessen aber nie." – Thom + +"Niemand kommt an mir vorbei, solange ich am Leben bin, Perrin. Nicht einmal ein Myrddraal oder der Dunkle König selbst." - Loial + +"Die Welt der Träume ist ein gefährlicher Ort. Soviel wissen wir." – Nynaeve + +"Seid Ihr taub und blind, Frau? Ich bin kein Teppich, über den man einfach wegläuft, und ich habe doch wohl höflich genug gegrüßt. Wenn ich Euch in den Hintern kneife, könnt Ihr mir ruhig eine Ohrfeige versetzen, aber bis dahin erwarte ich Höflichkeit als Antwort auf Höflichkeit!" – Mat, zu Berelain + +"Ich habe gehört, dass sie das Dreifache Land als das Land des Todes bezeichnen. Wir jagen die Trollocs, Feuchtländer, und nicht sie uns." - Aviendha zu Mat + +"Ich habe gehört, dass man nichts glauben sollte, was man hört, und nur die Hälfte dessen, was man sieht." - Rand + +"Falls ein paar der Töchter des Speers Euch auffordern, mit ihnen den 'Kuss der Jungfrau' zu spielen, dann schlagt es ihnen ab. Höflich." - Mat + +"Hübsche Frauen sehe ich mir immer an, ist dir das noch nicht aufgefallen?" - Mat, zu Egeanin + +"Solchermaßen wird unser Vertrag niedergeschrieben. + Solchermaßen wird die Vereinbarung geschlossen. Der + Gedanke ist der Pfeil der Zeit. Die Erinnerung wird + niemals verblassen. Worum gebeten wurde, das wurde + gegeben. Der Preis wurde bezahlt." - Spruch auf dem Ashandarai + +"Tia mi aven Moridinisainde vadin" - Spruch auf dem Horn von Valere + +"Das Grab kann meinem Ruf nicht widerstehen." - Spruch auf dem Horn von Valere + + + 638, 17 + + + + AAABAAYAICAQAAAAAADoAgAAZgAAABAQEAAAAAAAKAEAAE4DAAAgIAAAAQAIAKgIAAB2BAAAEBAAAAEA + CABoBQAAHg0AACAgAAABACAAqBAAAIYSAAAQEAAAAQAgAGgEAAAuIwAAKAAAACAAAABAAAAAAQAEAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA + /wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIoiI + iIiIiIiIiIiIiIiIiIiCIigiIiIozMzMzMzMyCIogiIoIiIiKM7m5ubm5sgiKIIiKCIiIijObm5ubm7I + IiiCIigiIiIozubm5ubmyCIogiIoIiIiKM5ubm5ubsgiKIIiKCIiIijO5ubm5ubIIiiIiIiIiIiIzm5u + bm5uyCIogRERERERGM7u7u7u7sgiKIHZWVlZWRjMzMzMzMzIIiiB1ZWVlZUYiIiIiIiIiIiIgdlZWVlZ + GDMzMzMzMzMzOIHVlZWVlRg/uLi4uLi4uDiB2VlZWVkYP7uLi4uLi4s4gdWVlZWVGD+4uLi4uLi4OIHZ + WVlZWRg/u4uLi4uLiziB1ZWVlZUYP7i4uLi4uLg4gdlZWVlZGD+7i4uLi4uLOIHVlZWVlRg/uLi4uLi4 + uDiB3d3d3d0YP7uLi4uLi4s4gRERERERGD+4uLi4uLi4OIiIiIiIiIg/u4uLi4uLiziCIiIiIiIoP7i4 + uLi4uLg4giIiIiIiKD+7i4uLi4uLOIIiIiIiIig/uLi4uLi4uDiCIiIiIiIoP7u7u7u7u7s4giIiIiIi + KD//////////OIIiIiIiIigzMzMzMzMzMziIiIiIiIiIiIiIiIiIiIiIIiIiIiIiIiIiIiIiIiIiIv// + ////////AAAAAHv4AA57+AAOe/gADnv4AA57+AAOe/gADgAAAA4AAAAOAAAADgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/4AAB/+AAAf/gAAH/4AAB/+AAAf/gAAAAA + AAD/////KAAAABAAAAAgAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACA + gACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAiIiIiIiIiIoiI + iIiIiIiIgigijMzMyCiCKCKM5mbIKIiIiIzu7sgogRERjMzMyCiB2ZGIiIiIiIHZkYMzMzM4gdmRg/u7 + uziB3dGD+7u7OIEREYP7u7s4iIiIg/u7uziCIiKD+7u7OIIiIoP///84giIigzMzMziIiIiIiIiIiP// + KCIAACjObALm5mwCIigAAoiIAAKIzgAAbm4AACIoAAAREQAAGM4AAO7uAAAiKHwAWVl8ABjMfADMzAAA + IigoAAAAIAAAAEAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA + AACAAIAAgIAAAICAgADA3MAA8MqmAKo/KgD/PyoAAF8qAFVfKgCqXyoA/18qAAB/KgBVfyoAqn8qAP9/ + KgAAnyoAVZ8qAKqfKgD/nyoAAL8qAFW/KgCqvyoA/78qAADfKgBV3yoAqt8qAP/fKgAA/yoAVf8qAKr/ + KgD//yoAAABVAFUAVQCqAFUA/wBVAAAfVQBVH1UAqh9VAP8fVQAAP1UAVT9VAKo/VQD/P1UAAF9VAFVf + VQCqX1UA/19VAAB/VQBVf1UAqn9VAP9/VQAAn1UAVZ9VAKqfVQD/n1UAAL9VAFW/VQCqv1UA/79VAADf + VQBV31UAqt9VAP/fVQAA/1UAVf9VAKr/VQD//1UAAAB/AFUAfwCqAH8A/wB/AAAffwBVH38Aqh9/AP8f + fwAAP38AVT9/AKo/fwD/P38AAF9/AFVffwCqX38A/19/AAB/fwBVf38Aqn9/AP9/fwAAn38AVZ9/AKqf + fwD/n38AAL9/AFW/fwCqv38A/79/AADffwBV338Aqt9/AP/ffwAA/38AVf9/AKr/fwD//38AAACqAFUA + qgCqAKoA/wCqAAAfqgBVH6oAqh+qAP8fqgAAP6oAVT+qAKo/qgD/P6oAAF+qAFVfqgCqX6oA/1+qAAB/ + qgBVf6oAqn+qAP9/qgAAn6oAVZ+qAKqfqgD/n6oAAL+qAFW/qgCqv6oA/7+qAADfqgBV36oAqt+qAP/f + qgAA/6oAVf+qAKr/qgD//6oAAADUAFUA1ACqANQA/wDUAAAf1ABVH9QAqh/UAP8f1AAAP9QAVT/UAKo/ + 1AD/P9QAAF/UAFVf1ACqX9QA/1/UAAB/1ABVf9QAqn/UAP9/1AAAn9QAVZ/UAKqf1AD/n9QAAL/UAFW/ + 1ACqv9QA/7/UAADf1ABV39QAqt/UAP/f1AAA/9QAVf/UAKr/1AD//9QAVQD/AKoA/wAAH/8AVR//AKof + /wD/H/8AAD//AFU//wCqP/8A/z//AABf/wBVX/8Aql//AP9f/wAAf/8AVX//AKp//wD/f/8AAJ//AFWf + /wCqn/8A/5//AAC//wBVv/8Aqr//AP+//wAA3/8AVd//AKrf/wD/3/8AVf//AKr//wD/zMwA/8z/AP// + MwD//2YA//+ZAP//zAAAfwAAVX8AAKp/AAD/fwAAAJ8AAFWfAACqnwAA/58AAAC/AABVvwAAqr8AAP+/ + AAAA3wAAVd8AAKrfAAD/3wAAVf8AAKr/AAAAACoAVQAqAKoAKgD/ACoAAB8qAFUfKgCqHyoA/x8qAAA/ + KgBVPyoA8Pv/AKSgoACAgIAAAAD/AAD/AAAA//8A/wAAAAAAAAD//wAA////AP39/f39/f39/f39/f39 + /f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39 + /f39/f39/f39/f39/f39/f39/f39/f39qoYIqoYIhqoIqgiqCaoIqgiqhqqGhoYIhoYIqv39/f0I/f39 + /ar9/f39/YY2Ng4yDg4ODgoOCgoKCgqG/f39/Yb9/f39CP39/f39qjY7Ozs3Nzc3NjMSMjIOCqr9/f39 + qv39/f2G/f39/f0IN19fOzs3Nzc3NjcODg4KCP39/f0I/f39/ar9/f39/ao6X19fXzs7Ozc3NzY3NgqG + /f39/Yb9/f39CP39/f39hl9jY19jX187Ozs7Nzc3Dqr9/f39qv39/f2G/f39/f0IOodjh19jX19fXztf + OzcOCP39/f0ICAmqCAiqCKoICapfCYdjh2ODY19fXzs7Ow6q/f39/QhITEwoSCUoKSQoqmMJCYcJCWNj + Y2NfY19fNgj9/f39qkyZmZmYmJRwlCmqX19fXl9fX186WzY3Njc2gv39/f0JcJ2dmZmZlJmUJAmqCaoJ + hggIqggICKoIqggI/f39/YZwnp2dnZmZmJVMqnx8fHx8fFR8VHhUVFRUVKr9/f39CHChoZ2dnZ2ZmUwJ + fKSkxqSkxqSkpKSkpKBUCP39/f2qcKLDoqGdnZ2ZTKp8ysakxqSkxqSkxqSkpFSq/f39/QiUpqbDoqHE + nZ1Mq3ykqMakyqSkxqSkpKSkVAj9/f39hpTIyKbHoqGhoXAIfMrLpMqkxqSkxqTGpKRUqv39/f0IlMym + yKbIpcShcAh8y6jKpMqkxsqkpKSkxlQI/f39/aqUzMzMyKbIpqJwqnzLy8qpxsqkpMakxqSkeAj9/f39 + CJSUlJSUlJSUlJQJgMupy8qpysqkyqSkxqRUqv39/f2GCKoIqgiqCKoIhgigrcvPqcuoy8qkxsqkxnyG + /f39/ar9/f39/f39/f39qnzPz6nLy8uoyqnKpKTKVAj9/f39CP39/f39/f39/f0IfNDPz8+py8upyqjG + yqR8hv39/f2G/f39/f39/f39/Qik0K7P0M+ty8vLy6jKpXyq/f39/ar9/f39/f39/f39CHzQ09Ctz8/P + qcupy6jKeAj9/f39CP39/f39/f39/f2qoNPQ0NPQ0M/Qz8vLy6l8CP39/f2G/f39/f39/f39/QmkfKR8 + oHx8fHx8fHx8fHyG/f39/aoIqgiqCKoIqgiqCKoIqgiqCKoIqgiqCKoIqgj9/f39/f39/f39/f39/f39 + /f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3///////////// + ///AAAAD3vgAA974AAPe+AAD3vgAA974AAPe+AADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AA + AAPAAAADwAAAA8AAAAPAAAADwAAAA9/4AAPf+AAD3/gAA9/4AAPf+AAD3/gAA8AAAAP//////////ygA + AAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAA + gACAgAAAgICAAMDcwADwyqYAqj8qAP8/KgAAXyoAVV8qAKpfKgD/XyoAAH8qAFV/KgCqfyoA/38qAACf + KgBVnyoAqp8qAP+fKgAAvyoAVb8qAKq/KgD/vyoAAN8qAFXfKgCq3yoA/98qAAD/KgBV/yoAqv8qAP// + KgAAAFUAVQBVAKoAVQD/AFUAAB9VAFUfVQCqH1UA/x9VAAA/VQBVP1UAqj9VAP8/VQAAX1UAVV9VAKpf + VQD/X1UAAH9VAFV/VQCqf1UA/39VAACfVQBVn1UAqp9VAP+fVQAAv1UAVb9VAKq/VQD/v1UAAN9VAFXf + VQCq31UA/99VAAD/VQBV/1UAqv9VAP//VQAAAH8AVQB/AKoAfwD/AH8AAB9/AFUffwCqH38A/x9/AAA/ + fwBVP38Aqj9/AP8/fwAAX38AVV9/AKpffwD/X38AAH9/AFV/fwCqf38A/39/AACffwBVn38Aqp9/AP+f + fwAAv38AVb9/AKq/fwD/v38AAN9/AFXffwCq338A/99/AAD/fwBV/38Aqv9/AP//fwAAAKoAVQCqAKoA + qgD/AKoAAB+qAFUfqgCqH6oA/x+qAAA/qgBVP6oAqj+qAP8/qgAAX6oAVV+qAKpfqgD/X6oAAH+qAFV/ + qgCqf6oA/3+qAACfqgBVn6oAqp+qAP+fqgAAv6oAVb+qAKq/qgD/v6oAAN+qAFXfqgCq36oA/9+qAAD/ + qgBV/6oAqv+qAP//qgAAANQAVQDUAKoA1AD/ANQAAB/UAFUf1ACqH9QA/x/UAAA/1ABVP9QAqj/UAP8/ + 1AAAX9QAVV/UAKpf1AD/X9QAAH/UAFV/1ACqf9QA/3/UAACf1ABVn9QAqp/UAP+f1AAAv9QAVb/UAKq/ + 1AD/v9QAAN/UAFXf1ACq39QA/9/UAAD/1ABV/9QAqv/UAP//1ABVAP8AqgD/AAAf/wBVH/8Aqh//AP8f + /wAAP/8AVT//AKo//wD/P/8AAF//AFVf/wCqX/8A/1//AAB//wBVf/8Aqn//AP9//wAAn/8AVZ//AKqf + /wD/n/8AAL//AFW//wCqv/8A/7//AADf/wBV3/8Aqt//AP/f/wBV//8Aqv//AP/MzAD/zP8A//8zAP// + ZgD//5kA///MAAB/AABVfwAAqn8AAP9/AAAAnwAAVZ8AAKqfAAD/nwAAAL8AAFW/AACqvwAA/78AAADf + AABV3wAAqt8AAP/fAABV/wAAqv8AAAAAKgBVACoAqgAqAP8AKgAAHyoAVR8qAKofKgD/HyoAAD8qAFU/ + KgDw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8A/f39/f39/f39/f39/f39/f0I + hgiqCKoICKoICKaGCP39qv39hv2GNg4ODjII/ar9/Yb9/ar9qjdjXzsOCP2G/f0IhquGCAleCWNfNob9 + qv39qkxMTEgIX19fX18I/Qj9/QhwnZlMqoYIqggIqgiG/f2qcKadcAl8fFQDVFQDqv39CHDMpnCqfMvL + ysrKVAj9/QiUlHBwCYDPy8/LylSG/f2GqoYIqgig0M/Py8t8qv39CP39/f2GpNDQ0M/PfAn9/ar9/f39 + qqT20NDQ0Hyq/f2G/f39/QmkpKSloKR8CP39CKoIhgiqCIYIqgiGCKr9/f39/f39/f39/f39/f39/f// + hv2AAf0ItAX9/bQFX2OABWNfgAU7O4ABNzeAAf39gAGq/YAB/YaAAf39vAE6h7wBX2O8AV9fgAE7N/// + /f0oAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADCv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/ + wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/ + wf/Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wAAAAAAAAAAAAAAAAAA + AAAAAAAAwr/B/7Z3Sf+zckT/rm0//6toO/+nYjb/pF4y/6BZLv+dVCr/mlEn/5dNI/+VSiH/kkce/5FE + HP+RRBz/kUUb/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/AAAAAAAA + AAAAAAAAAAAAAAAAAADCv8H/v4JS//+aZv//lWD/+5Bc//WLV//uh1P/54FO/997S//Wdkb/zXBD/8Vr + QP+9Zj3/tGI5/65dN/+RRRz/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/AAAAAAAAAAAAAAAAAAAAAMK/ + wf8AAAAAAAAAAAAAAAAAAAAAAAAAAMK/wf/GjFv//6Rz//+fbf//m2f//5Zh//yRXf/3jVj/8IhV/+mD + UP/hfUz/2HhI/9ByRP/HbED/v2c9/5VJIf/Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8AAAAAAAAAAAAA + AAAAAAAAwr/B/wAAAAAAAAAAAAAAAAAAAAAAAAAAwr/B/86WZP//r4L//6p7//+mdf//oW7//5xo//+X + Yv/9kl7/+I5a//KJVf/rhFH/4n5N/9t4SP/Sc0X/mlEm/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wAA + AAAAAAAAAAAAAAAAAADCv8H/AAAAAAAAAAAAAAAAAAAAAAAAAADCv8H/1J9s//+4kf//tIv//6+E//+r + ff//p3f//6Jw//+eav//mWT//pRf//qQWv/0i1b/7IVS/+V/Tv+gWC7/wr/B/wAAAAAAAAAAAAAAAAAA + AADCv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8AAAAAAAAAAAAAAAAAAAAAAAAAAMK/wf/apnP//7+d//+7 + mP//uJL//7WM//+whv//rH///6d4//+jcf//n2v//5ll//+VYP/6kVv/9YxY/6diN//Cv8H/AAAAAAAA + AAAAAAAAAAAAAMK/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/96t + eP//wqL//8Gi//+/nv//vJn//7mT//+2jv//sYj//66A//+pev//pHP//6Bt//+bZ///l2L/r20//8K/ + wf8AAAAAAAAAAAAAAAAAAAAAwr/B/xYXev8XF3b/GBVx/xkUbf8ZFGr/GhNm/xoSY/8bEV//HBFd/xwQ + W//Cv8H/4K96///Cov//wqL//8Ki///Cov//wJ///72b//+6lf//t4///7KJ//+ugv//qnv//6V0//+h + bv+3d0n/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/FRqE/0dN1v8/RNL/Nz3Q/y40zv8nLcz/ISfK/xwh + yf8WHMf/GxJh/8K/wf/gr3r/4K96/+Cvev/gr3r/3614/9yqdf/apnL/16Nw/9Sea//Rmmj/zZZk/8qR + X//GjFz/w4dW/7+CUv/Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8SHZD/WF3a/05U1/9FS9X/PUPS/zU7 + 0P8uM83/JyzL/yAmyf8aFGn/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/ + wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/xAfnP9obt7/YGTc/1Zb + 2f9NU9f/RUrU/ztB0v80OdD/LDHO/xgWcv/Cv8H/Dn+n/w18pP8MeqH/DHie/wt1m/8Kc5j/CXGV/wlv + k/8JbJD/CGqN/wdpi/8HZ4j/BmWH/wZkhf8GYoP/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/DiKp/3l+ + 4/9vdeH/Zmze/11i2/9UWtn/S1HW/0NI1P86P9H/Fhh9/8K/wf8Ogar/Barp/wGo6P8Apef/AKPm/wCi + 5P8An+L/AJ7h/wCd3/8AnN7/AJnc/wCY2/8AmNn/AJbX/wZjhP/Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/ + wf8MJbX/iI7n/4CF5v93fOP/bnPg/2Vr3f9bYdv/UljY/0lP1v8UGoj/wr/B/w+Erf8Lrur/Bqvq/wOo + 6f8Apuf/AKTm/wCi5f8AoOT/AJ/i/wCd4f8AnN//AJrd/wCZ2/8AmNr/BmWH/8K/wf8AAAAAAAAAAAAA + AAAAAAAAwr/B/wkowP+WnOz/jpTq/4aL6P9+hOX/dXri/2xx4P9jaN3/WV/b/xEek//Cv8H/EIaw/xay + 7P8Or+z/Cavr/wWq6v8Bp+j/AKbn/wCj5f8AoeT/AJ/j/wCe4f8AnOD/AJve/wCa3f8HZ4n/wr/B/wAA + AAAAAAAAAAAAAAAAAADCv8H/CCrK/6Ko7/+coe7/lZrr/42T6f+Fiub/fIHl/3N54v9rcN//ECGg/8K/ + wf8QiLP/I7nu/xq07f8Ssez/C63r/war6v8Cqen/AKbo/wCk5v8AouX/AKHk/wCf4f8AneH/AJzf/who + i//Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8GLNP/q7Hy/6as8P+hpu//mp/u/5OY6/+LkOj/g4nm/3qA + 5P8NI6z/wr/B/xCKtv8xvvD/J7rv/x627f8Vsuz/Dq/s/wmr6/8Equn/Aafo/wCl5/8Ao+X/AKHk/wCf + 4v8AnuH/CGqO/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wUu2/+vtPP/r7Tz/6qv8v+mq/D/oKXv/5me + 7f+Sl+v/io/p/wsmt//Cv8H/Eo24/0HF8f82wfD/LLzv/yK47v8atO3/EbHs/wut6/8Gq+r/A6np/wCm + 6P8Apeb/AKLl/wCh5P8IbJD/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/BC/h/wQv3/8FL9z/BS3Z/wYt + 1v8GLNL/ByvP/wgqy/8IKcb/CSnC/8K/wf8Sjrv/Uszy/0fH8f87w/H/Mb7v/ye67/8et+7/FbPt/w6v + 6/8IrOv/BKnp/wGo6P8Apef/AKPl/wluk//Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf/Cv8H/wr/B/8K/ + wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/xKRvf9j0/P/WM/z/0zK8f9BxfH/N8Hw/yy8 + 7/8iuO7/GbTt/xGx7P8Lruv/Bqrq/wOo6f8Apuf/CnGV/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCv8H/E5LA/3Ta8/9q1fP/XtHz/1LM + 8v9Hx/H/O8Pw/zG+7/8nu+//Hrbt/xay7f8Or+v/CKzq/wSq6f8Kc5j/wr/B/wAAAAAAAAAAAAAAAAAA + AADCv8H/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK/wf8UlMH/hOD1/3rc + 9f9v2PP/ZNTy/1jO8v9NyvH/Qsbx/zbB8P8svO//I7ju/xm07f8SsOz/C67r/wt2m//Cv8H/AAAAAAAA + AAAAAAAAAAAAAMK/wf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwr/B/xSW + w/+T5vb/iuL1/3/e9P912vT/adbz/13R8/9SzPL/R8jx/zzD8P8xvvD/J7rv/x627v8Vsuz/C3ie/8K/ + wf8AAAAAAAAAAAAAAAAAAAAAwr/B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADCv8H/FJbG/57r9/+X6Pb/juT1/4Th9f963fX/b9j0/2PT8/9Yz/L/TMrx/0HF8f83wO//LLzv/yK4 + 7v8MeqH/wr/B/wAAAAAAAAAAAAAAAAAAAADCv8H/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMK/wf8VmMf/qO/3/6Lt9/+b6vb/kub2/4rj9f9/3vX/dNrz/2rV8/9d0fP/Uszy/0fI + 8f88w/D/Mr7v/w19pP/Cv8H/AAAAAAAAAAAAAAAAAAAAAMK/wf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAwr/B/xWZyP8UmMf/FZfF/xSVw/8TlML/E5K//xOQvf8Sjrv/EYy4/xGK + tv8QiLL/D4Ww/w+Erf8Pgar/Dn+n/8K/wf8AAAAAAAAAAAAAAAAAAAAAwr/B/8K/wf/Cv8H/wr/B/8K/ + wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/ + wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/8K/wf/Cv8H/wr/B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////////////8AAAAPe+AAD3vgAA974AAPe+AAD3vgAA974AAPAAAADwAAAA8AAAAPAAAADwAAAA8AA + AAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAAD3/gAA9/4AAPf+AAD3/gAA9/4AAPf+AADwAAAA/// + ////////KAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA/8DA + wP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP8AAAAAAAAAAMDA + wP8AAAAAAAAAAMDAwP8AAAAAwMDA/8F2R/+9bj//umc6/7diNf+3YjX/wMDA/wAAAADAwMD/AAAAAAAA + AADAwMD/AAAAAAAAAADAwMD/AAAAAMDAwP/RkmD//7aP//+ldP/8kl3/vW0//8DAwP8AAAAAwMDA/wAA + AAAAAAAAwMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/3ap2///Cov//to7//6V0/8uJWP/AwMD/AAAAAMDA + wP8AAAAAAAAAAMDAwP8THI7/FBqF/xYYfP8XFnP/wMDA/+Cvev/gr3r/4K96/92qdv/ao3D/wMDA/wAA + AADAwMD/AAAAAAAAAADAwMD/ECCd/2Fn3P8zOc//FRmC/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DA + wP/AwMD/wMDA/wAAAAAAAAAAwMDA/w0krP+Pler/YWbd/xIcj//AwMD/DHmf/wpzmP8Ib5L/B2uO/wdq + jf8Gao3/B2qN/8DAwP8AAAAAAAAAAMDAwP8KJrv/r7Tz/5CU6v8PIJ//wMDA/w+Dq/87y/z/Kcb8/xrD + /P8QwPv/EMD7/wdqjf/AwMD/AAAAAAAAAADAwMD/CCrI/woowP8LJrf/DSSu/8DAwP8Sjbj/Zdb9/0/Q + /P88y/v/Kcf7/xrC+/8IbZD/wMDA/wAAAAAAAAAAwMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/FpfG/43h + /f962/3/Zdb8/0/Q/P87zPz/CXSZ/8DAwP8AAAAAAAAAAMDAwP8AAAAAAAAAAAAAAAAAAAAAwMDA/xif + z/+u6f7/n+X9/47h/f953P3/ZNb9/w19pP/AwMD/AAAAAAAAAADAwMD/AAAAAAAAAAAAAAAAAAAAAMDA + wP8apNX/uez+/7ns/v+u6f7/oOX9/43h/f8Rh7H/wMDA/wAAAAAAAAAAwMDA/wAAAAAAAAAAAAAAAAAA + AADAwMD/GqTV/xqk1f8apNX/GaHR/xecy/8WmMb/FJK+/8DAwP8AAAAAAAAAAMDAwP/AwMD/wMDA/8DA + wP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAgAEAALQF + wf+0BQAAgAUAAIAFAACAAQAAgAHB/4ABAACAAQAAgAEAALwBAAC8AQAAvAHB/4ABbP///5H/ + + + + 789, 17 + + + 930, 17 + + + + AAABAAEAICAQAAEABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAIAAAIAAAACAgAAAAACAAACAgACAAIAAgICAAMDAwAAA/wAA/wAAAP//AAAAAP8AAP//AP8A + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////PzgD8z84A/MfOfPzHjnz8x45 + 8/MMOfPzDDnz8ww58/MMOfPzDDnz8wA58/MAOfPzITnz8yE58/MhOfPzMznz8zM58/MzOfPzMznz8z85 + 8/M/OfPzPznz8z858/M/OfPzPznz8z858/M/OfPzPznz8z84A4A/OAOA/////w== + + + \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd/PopulateBackgroundSkilllsTab.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd/PopulateBackgroundSkilllsTab.cs new file mode 100644 index 0000000..e29ace5 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd/PopulateBackgroundSkilllsTab.cs @@ -0,0 +1,280 @@ +using System; +using System.Windows.Forms; +using System.Drawing; + +namespace Wheel_of_Time___Character_Sheets +{ + partial class ChildWnd + { + private void PopulateBackgroundSkillsTab() + { + string[] Aiel = { "Hide", "Move Silently", "Spot", "Wilderness Lore" }; + string[] Atha_an_Miere = { "Intuit Direction", "Profession (Sailor)", "Swim", "Use Rope" }; + string[] Borderlander = { "Knowledge (Blight)", "Listen", "Move Silently", "Ride" }; + string[] Cairhienin = { "Diplomacy", "Forgery", "Innuendo", "Sense Motive" }; + string[] Domani = { "Bluff", "Diplomacy", "Gather Information", "Perform" }; + string[] Ebou_Dari = { "Appraise", "Balance", "Hide", "Open Lock" }; + string[] Illianer = { "Intimidate", "Search" }; + string[] Midlander = { "Handle Animal", "Heal", "Ride", "Wilderness Lore" }; + string[] Ogier = { "Craft" }; + string[] Tairen = { "Ride", "Search", "Sense Motive" }; + string[] Tar_Valoner = { "Concentration" }; + string[] Taraboner = { "Appraise", "Hide", "Move Silently", "Open Lock" }; + + switch (character.Background) + { + case "Aiel": + for (int i = 0; i < Aiel.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Aiel[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + break; + case "Atha'an Miere": + for (int i = 0; i < Atha_an_Miere.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Atha_an_Miere[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + break; + case "Borderlander": + for (int i = 0; i < Borderlander.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Borderlander[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + break; + case "Cairhienin": + for (int i = 0; i < Cairhienin.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Cairhienin[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + break; + case "Domani": + for (int i = 0; i < Domani.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Domani[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + break; + case "Ebou Dari": + for (int i = 0; i < Ebou_Dari.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Ebou_Dari[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + break; + case "Illianer": + ListAllCraftSkills(); + ListAllKnowledgeSkills(); + for (int i = 0; i < Illianer.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Illianer[i]; + cb.Location = new Point(6, 6 + tpBackgroundSkills.Controls.Count * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + break; + case "Midlander": + for (int i = 0; i < Midlander.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Midlander[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + break; + case "Ogier": + ListAllKnowledgeSkills(); + for (int i = 0; i < Ogier.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Ogier[i]; + cb.Location = new Point(6, 6 + tpBackgroundSkills.Controls.Count * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + break; + case "Tairen": + ListAllProfessionSkills(); + for (int i = 0; i < Tairen.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Tairen[i]; + cb.Location = new Point(6, 6 + tpBackgroundSkills.Controls.Count * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + break; + case "Tar Valoner": + ListAllCraftSkills(); + ListAllKnowledgeSkills(); + ListAllProfessionSkills(); + for (int i = 0; i < Tar_Valoner.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Tar_Valoner[i]; + cb.Location = new Point(6, 6 + tpBackgroundSkills.Controls.Count * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + break; + case "Taraboner": + for (int i = 0; i < Taraboner.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Taraboner[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + break; + } + } + + void BackgroundSkillClick(object sender, EventArgs e) + { + CheckBox Sender = (CheckBox)sender; + if (!Sender.Checked) + { + int numberofchecked = 0; + foreach (CheckBox cb in tpBackgroundSkills.Controls) + { + if (cb.Checked) + { + numberofchecked++; + } + } + if (numberofchecked < 2) + { + Sender.Checked = true; + } + } + else + { + Sender.Checked = false; + } + } + + private void ListAllCraftSkills() + { + foreach (Points p in SkillsPanel.Controls) + { + if (p.SkillName.Length >= 5) + { + if (p.SkillName.Substring(0, 5) == "Craft") + { + CheckBox cb = new CheckBox(); + cb.Text = p.SkillName; + cb.Location = new Point(6, 6 + tpBackgroundSkills.Controls.Count * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + } + } + } + + private void ListAllKnowledgeSkills() + { + foreach (Points p in SkillsPanel.Controls) + { + if (p.SkillName.Length >= 9) + { + if (p.SkillName.Substring(0, 9) == "Knowledge") + { + CheckBox cb = new CheckBox(); + cb.Text = p.SkillName; + cb.Location = new Point(6, 6 + tpBackgroundSkills.Controls.Count * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + } + } + } + + private void ListAllProfessionSkills() + { + foreach (Points p in SkillsPanel.Controls) + { + if (p.SkillName.Length >= 10) + { + if (p.SkillName.Substring(0, 10) == "Profession") + { + CheckBox cb = new CheckBox(); + cb.Text = p.SkillName; + cb.Location = new Point(6, 6 + tpBackgroundSkills.Controls.Count * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(BackgroundSkillClick); + tpBackgroundSkills.Controls.Add(cb); + } + } + } + } + } +} + diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd/PopulateFeatsTab.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd/PopulateFeatsTab.cs new file mode 100644 index 0000000..c5785c2 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd/PopulateFeatsTab.cs @@ -0,0 +1,185 @@ +using System; +using System.Windows.Forms; +using System.Drawing; + +namespace Wheel_of_Time___Character_Sheets +{ + partial class ChildWnd + { + private void PopulateBackgroundFeatsTab() + { + string[] Aiel = { "Blooded", "Bullheaded", "Disciplined", "Stealthy", "Survivor" }; + string[] Atha_an_Miere = { "Disciplined", "Mercantile Background", "Sea Legs", "Silver Palm", "Smooth Talk" }; + string[] Borderlander = { "Blooded", "Saddleback", "Shadowspawn Hunter", "Stealthy", "Strong Soul" }; + string[] Cairhienin = { "Cosmopolitan", "Militia", "Silver Palm", "Smooth Talk", "Street Smart" }; + string[] Domani = { "Cosmopolitan", "Militia", "Seductive", "Street Smart" }; + string[] Ebou_Dari = { "Cosmopolitan", "Duelist", "Gambler", "Mercantile Background", "Street Smart" }; + string[] Illianer = { "Cosmopolitan", "Mecantile Background", "Militia", "Silver Palm", "Street Smart" }; + string[] Midlander = { "Bullheaded", "Luck of Heroes", "Militia", "Strong Soul" }; + string[] Ogier = { "Artist", "Education", "Smooth Talk", "Bullheaded", "Luck of Heroes" }; + string[] Tairen = { "Gambler", "Mercantile Background", "Militia", "Saddleback" }; + string[] Tar_Valoner = { "Cosmopolitan", "Education", "Militia", "Smooth Talk" }; + string[] Taraboner = { "Artist", "Living History", "Mercantile Background" }; + + switch (character.Background) + { + case "Aiel": + for (int i = 0; i < Aiel.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Aiel[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(FeatsClick); + tpBackground_Feats.Controls.Add(cb); + } + break; + case "Atha'an Miere": + for (int i = 0; i < Atha_an_Miere.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Atha_an_Miere[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(FeatsClick); + tpBackground_Feats.Controls.Add(cb); + } + break; + case "Borderlander": + for (int i = 0; i < Borderlander.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Borderlander[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(FeatsClick); + tpBackground_Feats.Controls.Add(cb); + } + break; + case "Cairhienin": + for (int i = 0; i < Cairhienin.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Cairhienin[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(FeatsClick); + tpBackground_Feats.Controls.Add(cb); + } + break; + case "Domani": + for (int i = 0; i < Domani.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Domani[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(FeatsClick); + tpBackground_Feats.Controls.Add(cb); + } + break; + case "Ebou Dari": + for (int i = 0; i < Ebou_Dari.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Ebou_Dari[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(FeatsClick); + tpBackground_Feats.Controls.Add(cb); + } + break; + case "Illianer": + for (int i = 0; i < Illianer.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Illianer[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(FeatsClick); + tpBackground_Feats.Controls.Add(cb); + } + break; + case "Midlander": + for (int i = 0; i < Midlander.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Midlander[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(FeatsClick); + tpBackground_Feats.Controls.Add(cb); + } + break; + case "Ogier": + for (int i = 0; i < Ogier.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Ogier[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(FeatsClick); + tpBackground_Feats.Controls.Add(cb); + } + break; + case "Tairen": + for (int i = 0; i < Tairen.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Tairen[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(FeatsClick); + tpBackground_Feats.Controls.Add(cb); + } + break; + case "Tar Valoner": + for (int i = 0; i < Tar_Valoner.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Tar_Valoner[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(FeatsClick); + tpBackground_Feats.Controls.Add(cb); + } + break; + case "Taraboner": + for (int i = 0; i < Taraboner.Length; i++) + { + CheckBox cb = new CheckBox(); + cb.Text = Taraboner[i]; + cb.Location = new Point(6, 6 + i * cb.Height); + cb.AutoSize = true; + cb.FlatStyle = FlatStyle.Flat; + cb.AutoCheck = false; + cb.Click += new EventHandler(FeatsClick); + tpBackground_Feats.Controls.Add(cb); + } + break; + } + } + } +} \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd/PrintPreview.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd/PrintPreview.cs new file mode 100644 index 0000000..a8cd3e1 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd/PrintPreview.cs @@ -0,0 +1,478 @@ +using System; +using System.Drawing; +using System.Drawing.Printing; +using System.Windows.Forms; + +namespace Wheel_of_Time___Character_Sheets +{ + partial class ChildWnd + { + int currentpage = 1; + private void PrintPreview(object sender, PrintPageEventArgs e) + { + //pagewidth = 826 + + + + Font ParchmentBig = new Font("Parchment", 65, FontStyle.Bold); + Font Corsiva = new Font("Monotype Corsiva", 15, FontStyle.Italic); + Font CorsivaSmall = new Font("Monotype Corsiva", 10, FontStyle.Italic); + Font MicrosoftSansSerif = new Font("Microsoft Sans Serif", 11, FontStyle.Bold); + + //Hintergrund + if (bBackground.Checked) + { + e.Graphics.DrawImage(Wheel_of_Time___Character_Sheets.Properties.Resources.Hintergrund, new Rectangle(0, 0, e.PageBounds.Width, e.PageBounds.Height)); + } + + //Seitenzahl + //e.Graphics.DrawString("("+currentpage+"/2)", MicrosoftSansSerif, Brushes.Black, 400, 4); + + //berschrift + e.Graphics.DrawString("the Wheel of Time", ParchmentBig, Brushes.Black, 200, 10); + + //Allgemein + //Zeile y=100 + e.Graphics.DrawString("Chronik:", Corsiva, Brushes.Black, 100, 100); + e.Graphics.DrawString(character.Chronik, Corsiva, Brushes.Black, 210, 100); + //Zeile y=125 + e.Graphics.DrawString("Spieler:", Corsiva, Brushes.Black, 100, 125); + e.Graphics.DrawString(character.Spieler, Corsiva, Brushes.Black, 210, 125); + e.Graphics.DrawString("Name:", Corsiva, Brushes.Black, 360, 125); + e.Graphics.DrawString(character.Name, Corsiva, Brushes.Black, 470, 125); + + if (currentpage == 1) + { + string Klasse = ""; + Klasse += character.Algai_d_Siswai ? "Algei'd'Siswai " : ""; + Klasse += character.Armsman ? "Armsman " : ""; + Klasse += character.Initiate ? "Initiate " : ""; + Klasse += character.Noble ? "Noble " : ""; + Klasse += character.Wanderer ? "Wanderer " : ""; + Klasse += character.Wilder ? "Wilder " : ""; + Klasse += character.Woodsman ? "Woodsman" : ""; + + string Augen = ""; + if (character.Augen.IsKnownColor) + { Augen = character.Augen.ToKnownColor().ToString(); } + else + { Augen = character.Augen.R.ToString() + " " + character.Augen.G.ToString() + " " + character.Augen.B.ToString(); } + + string Haare = ""; + if (character.Haare.IsKnownColor) + { Haare = character.Haare.ToKnownColor().ToString(); } + else + { Haare = character.Haare.R.ToString() + " " + character.Haare.G.ToString() + " " + character.Haare.B.ToString(); } + + string Haut = ""; + if (character.Haut.IsKnownColor) + { Haut = character.Haut.ToKnownColor().ToString(); } + else + { Haut = character.Haut.R.ToString() + " " + character.Haut.G.ToString() + " " + character.Haut.B.ToString(); } + + string BackgroundFeats = ""; + bool firstBackgroundFeat = true; + foreach (CheckBox cb in tpBackground_Feats.Controls) + { + if (cb.Checked) + { + BackgroundFeats += cb.Text; + if (firstBackgroundFeat) + { + BackgroundFeats += ", "; + firstBackgroundFeat = false; + } + } + } + + //Zeile y=175 + e.Graphics.DrawString("Background:", Corsiva, Brushes.Black, 100, 175); + e.Graphics.DrawString(character.Background, Corsiva, Brushes.Black, 210, 175); + e.Graphics.DrawString("Geschlecht:", Corsiva, Brushes.Black, 360, 175); + e.Graphics.DrawString(character.Geschlecht, Corsiva, Brushes.Black, 470, 175); + e.Graphics.DrawString("Level:", Corsiva, Brushes.Black, 600, 175); + e.Graphics.DrawString(character.Level, Corsiva, Brushes.Black, 660, 175); + //Zeile y=200 + e.Graphics.DrawString("Klasse:", Corsiva, Brushes.Black, 100, 200); + e.Graphics.DrawString(Klasse, Corsiva, Brushes.Black, 210, 200); + e.Graphics.DrawString("Alter:", Corsiva, Brushes.Black, 600, 200); + e.Graphics.DrawString(character.Alter.ToString(), Corsiva, Brushes.Black, 660, 200); + //Linie y=225 + e.Graphics.DrawLine(new Pen(Brushes.Black), 100, 225, e.PageBounds.Width - 100, 225); + //Zeile y=225 + e.Graphics.DrawString("Gre:", Corsiva, Brushes.Black, 100, 225); + e.Graphics.DrawString(character.Gre.ToString() + " cm", Corsiva, Brushes.Black, 210, 225); + e.Graphics.DrawString("Gewicht:", Corsiva, Brushes.Black, 340, 225); + e.Graphics.DrawString(character.Gewicht.ToString() + " kg", Corsiva, Brushes.Black, 450, 225); + //Zeile y=250 + e.Graphics.DrawString("Augenfarbe:", Corsiva, Brushes.Black, 100, 250); + e.Graphics.DrawString(Augen, Corsiva, Brushes.Black, 210, 250); + e.Graphics.DrawString("Haarfarbe:", Corsiva, Brushes.Black, 340, 250); + e.Graphics.DrawString(Haare, Corsiva, Brushes.Black, 450, 250); + e.Graphics.DrawString("Hautfarbe:", Corsiva, Brushes.Black, 580, 250); + e.Graphics.DrawString(Haut, Corsiva, Brushes.Black, 690, 250); + //Linie y=275 + e.Graphics.DrawLine(new Pen(Brushes.Black), 100, 275, e.PageBounds.Width - 100, 275); + //Zeile y=275 + e.Graphics.DrawString("Charisma:", Corsiva, Brushes.Black, 100, 275); + e.Graphics.DrawString(character.Charisma.ToString(), Corsiva, Brushes.Black, 210, 275); + e.Graphics.DrawString("Geschick:", Corsiva, Brushes.Black, 340, 275); + e.Graphics.DrawString(character.Geschicklichkeit.ToString(), Corsiva, Brushes.Black, 450, 275); + e.Graphics.DrawString("Intelligenz:", Corsiva, Brushes.Black, 580, 275); + e.Graphics.DrawString(character.Intelligenz.ToString(), Corsiva, Brushes.Black, 690, 275); + //Zeile y=300 + e.Graphics.DrawString("Konstitution:", Corsiva, Brushes.Black, 100, 300); + e.Graphics.DrawString(character.Konstitution.ToString(), Corsiva, Brushes.Black, 210, 300); + e.Graphics.DrawString("Strke:", Corsiva, Brushes.Black, 340, 300); + e.Graphics.DrawString(character.Strke.ToString(), Corsiva, Brushes.Black, 450, 300); + e.Graphics.DrawString("Weisheit:", Corsiva, Brushes.Black, 580, 300); + e.Graphics.DrawString(character.Weisheit.ToString(), Corsiva, Brushes.Black, 690, 300); + //Linie y=325 + //e.Graphics.DrawLine(new Pen(Brushes.Black), 100, 325, e.PageBounds.Width - 100, 325); + //Linie Mitte + //e.Graphics.DrawLine(new Pen(Brushes.Black), e.PageBounds.Width / 2, 345, e.PageBounds.Width / 2, 840); + + int LineHeight = 0; + int Half = 0; + int Count = 0; + if (SkillsPanel.Controls.Count != 0) + { + for (int i = 0; i < SkillsPanel.Controls.Count; i++) + { + Points p = (Points)SkillsPanel.Controls[i]; + if (p.Aktiv) + { + Count++; + } + } + + Points[] AktiveSkills = new Points[Count]; + Count = 0; + for (int i = 0; i < SkillsPanel.Controls.Count; i++) + { + Points p = (Points)SkillsPanel.Controls[i]; + if (p.Aktiv) + { + AktiveSkills[Count] = p; + Count++; + } + } + + Half = Convert.ToInt32(Math.Ceiling(AktiveSkills.Length / 2.0)); + LineHeight = Convert.ToInt32(Math.Floor(500.0 / Half)); + + for (int i = 0; i < Half; i++) + { + e.Graphics.DrawString(AktiveSkills[i].SkillName, Corsiva, Brushes.Black, 100, 350 + (i) * LineHeight); + for (int k = 0; k < 8; k++) + { + e.Graphics.DrawEllipse(new Pen(Brushes.Black), 290 + k * 15, 358 + (i) * LineHeight, 10, 10); + } + for (int j = 0; j < AktiveSkills[i].GivenPoints; j++) + { + e.Graphics.FillEllipse(Brushes.Black, 290 + j * 15, 358 + (i) * LineHeight, 10, 10); + } + } + + for (int i = Half; i < AktiveSkills.Length; i++) + { + e.Graphics.DrawString(AktiveSkills[i].SkillName, Corsiva, Brushes.Black, 410, 350 + (i - Half) * LineHeight); + for (int k = 0; k < 8; k++) + { + e.Graphics.DrawEllipse(new Pen(Brushes.Black), 604 + k * 15, 358 + (i - Half) * LineHeight, 10, 10); + } + for (int j = 0; j < AktiveSkills[i].GivenPoints; j++) + { + e.Graphics.FillEllipse(Brushes.Black, 604 + j * 15, 358 + (i - Half) * LineHeight, 10, 10); + } + } + } + + //Linie y=875 + //e.Graphics.DrawLine(new Pen(Brushes.Black), 100, 875, e.PageBounds.Width - 100, 875); + //Zeile y=875 + e.Graphics.DrawString("Background Feats:", Corsiva, Brushes.Black, 100, 875); + e.Graphics.DrawString(BackgroundFeats, Corsiva, Brushes.Black, 260, 875); + + //Zeile y=925 + e.Graphics.DrawString(tbSpruch.Text, Corsiva, Brushes.Black, new Rectangle(100, 925, 626, 300)); + } + if (currentpage == 2) + { + + int Line = 175; + if (character.Initiate || character.Wilder) + { + string BalefireTalents = ""; + string CloudDancingTalents = ""; + string ConjunctionTalents = ""; + string EarthSingingTalents = ""; + string ElementalismTalents = ""; + string HealingTalents = ""; + string IllusionTalents = ""; + string TravelingTalents = ""; + string WardingTalents = ""; + if (cbBalefire.Checked) + { + BalefireTalents += "Balefire: Balefire (Lost)\r\n"; + } + if (cbCloudDancing.Checked) + { + CloudDancingTalents += cbAir.Checked || cbWater.Checked ? "Foretell Weather, " : ""; + CloudDancingTalents += cbAir.Checked || cbWater.Checked ? "Harness the Wind, " : ""; + CloudDancingTalents += cbAir.Checked || cbFire.Checked ? "Lightning, " : ""; + CloudDancingTalents += cbAir.Checked || cbWater.Checked ? "Raise Fog, " : ""; + CloudDancingTalents += cbAir.Checked || cbFire.Checked ? "Warmth" : ""; + } + if (cbConjunction.Checked) + { + ConjunctionTalents += cbSpirit.Checked ? "Bond Warder, " : ""; + ConjunctionTalents += "Compulsion (Lost), "; + ConjunctionTalents += cbAir.Checked || cbEarth.Checked || cbSpirit.Checked ? "False Trail, " : ""; + ConjunctionTalents += cbSpirit.Checked ? "Pass Bond, " : ""; + ConjunctionTalents += cbSpirit.Checked ? "Sense Shadowspawn, " : ""; + ConjunctionTalents += cbSpirit.Checked ? "Trace" : ""; + } + if (cbEarthSinging.Checked) + { + EarthSingingTalents += cbEarth.Checked ? "Earth Delving, " : ""; + EarthSingingTalents += cbEarth.Checked ? "Earthquake, " : ""; + EarthSingingTalents += cbEarth.Checked || cbFire.Checked ? "Grenade, " : ""; + EarthSingingTalents += cbEarth.Checked ? "Polish, " : ""; + EarthSingingTalents += cbEarth.Checked || cbFire.Checked ? "Riven Earth" : ""; + } + if (cbElementalism.Checked) + { + ElementalismTalents += cbAir.Checked ? "Arms of Air, " : ""; + ElementalismTalents += cbAir.Checked || cbFire.Checked ? "Blade of Fire, " : ""; + ElementalismTalents += cbFire.Checked ? "Create Fire, " : ""; + ElementalismTalents += cbSpirit.Checked || cbWater.Checked ? "Current, " : ""; + ElementalismTalents += cbAir.Checked || cbFire.Checked ? "Cutting Lines of Fire (Lost), " : ""; + ElementalismTalents += cbWater.Checked ? "Dry, " : ""; + ElementalismTalents += cbAir.Checked || cbEarth.Checked ? "False Wall, " : ""; + ElementalismTalents += cbAir.Checked || cbFire.Checked || cbSpirit.Checked ? "Fiery Sword, " : ""; + ElementalismTalents += cbAir.Checked || cbFire.Checked ? "Fireball, " : ""; + ElementalismTalents += cbAir.Checked || cbSpirit.Checked ? "Fly (Lost), " : ""; + ElementalismTalents += cbAir.Checked ? "Harden Air, " : ""; + ElementalismTalents += cbFire.Checked || cbSpirit.Checked ? "Immolate, " : ""; + ElementalismTalents += cbAir.Checked || cbFire.Checked ? "Light, " : ""; + ElementalismTalents += cbWater.Checked ? "Move Water, " : ""; + ElementalismTalents += cbAir.Checked ? "Tool of Air, " : ""; + ElementalismTalents += cbEarth.Checked || cbFire.Checked ? "Wand of Fire, " : ""; + ElementalismTalents += cbSpirit.Checked || cbWater.Checked ? "Whirlpool" : ""; + } + if (cbHealing.Checked) + { + HealingTalents += cbSpirit.Checked ? "Delive, " : ""; + HealingTalents += cbAir.Checked || cbSpirit.Checked || cbWater.Checked ? "Heal, " : ""; + HealingTalents += cbAir.Checked || cbSpirit.Checked || cbWater.Checked ? "Heal the Mind, " : ""; + HealingTalents += cbAir.Checked || cbSpirit.Checked || cbWater.Checked ? "Rend (Rare), " : ""; + HealingTalents += cbAir.Checked || cbSpirit.Checked || cbWater.Checked ? "Renew, " : ""; + HealingTalents += "Restore the Power (Lost), "; + HealingTalents += cbSpirit.Checked ? "Sever, " : ""; + HealingTalents += cbEarth.Checked || cbFire.Checked || cbSpirit.Checked || cbWater.Checked ? "Touch of Death (Lost)" : ""; + } + if (cbIllusion.Checked) + { + IllusionTalents += cbAir.Checked || cbFire.Checked || cbSpirit.Checked ? "Disguise, " : ""; + IllusionTalents += cbAir.Checked || cbSpirit.Checked ? "Distant Eve (Lost), " : ""; + IllusionTalents += cbAir.Checked || cbSpirit.Checked ? "Eavesdrop, " : ""; + IllusionTalents += cbAir.Checked || cbFire.Checked ? "Folded Light, " : ""; + IllusionTalents += cbAir.Checked || cbFire.Checked || cbSpirit.Checked ? "Mirror of Mists, " : ""; + IllusionTalents += cbAir.Checked || cbFire.Checked ? "Voice of Power" : ""; + } + if (cbTravling.Checked) + { + TravelingTalents += cbEarth.Checked || cbSpirit.Checked ? "Bridge Between Worlds (Lost), " : ""; + TravelingTalents += cbSpirit.Checked ? "Create Gateway (Lost), " : ""; + TravelingTalents += cbAir.Checked || cbEarth.Checked || cbSpirit.Checked ? "Skimming (Lost), " : ""; + TravelingTalents += cbSpirit.Checked ? "Use Portal Stone (Rare)" : ""; + } + if (cbWarding.Checked) + { + WardingTalents += "Warding: "; + WardingTalents += cbAir.Checked || cbFire.Checked || cbSpirit.Checked ? "Barrier to Sight, " : ""; + WardingTalents += cbAir.Checked || cbFire.Checked || cbWater.Checked ? "Circle of Silence, " : ""; + WardingTalents += cbSpirit.Checked ? "Dream Shielding, " : ""; + WardingTalents += cbAir.Checked || cbFire.Checked || cbSpirit.Checked ? "Fire Trap (Rare), " : ""; + WardingTalents += "Master Ward, "; + WardingTalents += cbAir.Checked || cbFire.Checked || cbSpirit.Checked ? "Seal, " : ""; + WardingTalents += cbSpirit.Checked ? "Shield, " : ""; + WardingTalents += cbAir.Checked || cbFire.Checked || cbSpirit.Checked ? "Strike of Death, " : ""; + WardingTalents += cbAir.Checked || cbFire.Checked || cbSpirit.Checked ? "Ward against People, " : ""; + WardingTalents += "Ward against the One Power, "; + WardingTalents += cbAir.Checked || cbFire.Checked || cbSpirit.Checked ? "Ward against Shadowspawn, " : ""; + WardingTalents += "Ward Bore (Lost)"; + WardingTalents += "\r\n"; + } + + if (BalefireTalents != "") + { + e.Graphics.DrawString("Balefire:", Corsiva, Brushes.Black, 100, Line); + e.Graphics.DrawString(BalefireTalents, CorsivaSmall, Brushes.Black, new Rectangle(220, Line + 6, 556, 300)); + Line += 20; + } + if (CloudDancingTalents != "") + { + e.Graphics.DrawString("Cloud Dancing:", Corsiva, Brushes.Black, 100, Line); + e.Graphics.DrawString(CloudDancingTalents, CorsivaSmall, Brushes.Black, new Rectangle(220, Line + 6, 556, 300)); + Line += 20; + } + if (ConjunctionTalents != "") + { + e.Graphics.DrawString("Conjunction:", Corsiva, Brushes.Black, 100, Line); + e.Graphics.DrawString(ConjunctionTalents, CorsivaSmall, Brushes.Black, new Rectangle(220, Line + 6, 556, 300)); + Line += 20; + } + if (EarthSingingTalents != "") + { + e.Graphics.DrawString("Earth Singing:", Corsiva, Brushes.Black, 100, Line); + e.Graphics.DrawString(EarthSingingTalents, CorsivaSmall, Brushes.Black, new Rectangle(220, Line + 6, 556, 300)); + Line += 20; + } + if (ElementalismTalents != "") + { + e.Graphics.DrawString("Elementalism:", Corsiva, Brushes.Black, 100, Line); + e.Graphics.DrawString(ElementalismTalents, CorsivaSmall, Brushes.Black, new Rectangle(220, Line + 6, 556, 300)); + Line += 40; + } + if (HealingTalents != "") + { + e.Graphics.DrawString("Healing:", Corsiva, Brushes.Black, 100, Line); + e.Graphics.DrawString(HealingTalents, CorsivaSmall, Brushes.Black, new Rectangle(220, Line + 6, 556, 300)); + Line += 20; + } + if (IllusionTalents != "") + { + e.Graphics.DrawString("Illusion:", Corsiva, Brushes.Black, 100, Line); + e.Graphics.DrawString(IllusionTalents, CorsivaSmall, Brushes.Black, new Rectangle(220, Line + 6, 556, 300)); + Line += 20; + } + if (TravelingTalents != "") + { + e.Graphics.DrawString("Traveling:", Corsiva, Brushes.Black, 100, Line); + e.Graphics.DrawString(TravelingTalents, CorsivaSmall, Brushes.Black, new Rectangle(220, Line + 6, 556, 300)); + Line += 20; + } + if (WardingTalents != "") + { + e.Graphics.DrawString("Warding:", Corsiva, Brushes.Black, 100, Line); + e.Graphics.DrawString(WardingTalents, CorsivaSmall, Brushes.Black, new Rectangle(220, Line + 6, 556, 300)); + Line += 20; + } + Line += 25; + } + + //Zeile Line + + e.Graphics.DrawString("Geschichte:", Corsiva, Brushes.Black, 100, Line); + + //Zeile Line+25 + e.Graphics.DrawString(tbGeschichte.Text, Corsiva, Brushes.Black, new Rectangle(100, Line+25, 626, 300)); + + string General_Feats = "General Feats: "; + foreach (Control c in gbGeneral_Feats.Controls) + { + try + { + CheckBox cb = (CheckBox)c; + if (cb.Checked) + { + General_Feats += cb.Text; + if (cb.Text == "Exotic Weapon Proficiency") + { + General_Feats += " (" + tbExotic_Weapon_Proficiency.Text + ")"; + } + if (cb.Text == "Martial Weapon Proficiency") + { + General_Feats += " (" + tbMartial_Weapon_Proficiency.Text + ")"; + } + if (cb.Text == "Weapon Finesse") + { + General_Feats += " (" + tbWeapon_Finesse.Text + ")"; + } + if (cb.Text == "Weapon Focus") + { + General_Feats += " (" + tbWeapon_Focus.Text + ")"; + } + General_Feats += ", "; + } + } + catch { } + } + string Special_Feats = "Special Feats: "; + foreach (Control c in gbSpecial_Feats.Controls) + { + try + { + CheckBox cb = (CheckBox)c; + if (cb.Checked) + { + Special_Feats += cb.Text; + Special_Feats += ", "; + if (cb.Text == "Weapon Specializiation") + { + General_Feats += " (" + tbWeapon_Specializiation.Text + ")"; + } + } + } + catch { } + } + string Channeling_Feats = "Channeling Feats: "; + foreach (Control c in gbChanneling_Feats.Controls) + { + try + { + CheckBox cb = (CheckBox)c; + if (cb.Checked) + { + Channeling_Feats += cb.Text; + Channeling_Feats += ", "; + } + } + catch { } + } + string Lost_Ability_Feats = "Lost Ability Feats: "; + foreach (Control c in gbLost_Ability_Feats.Controls) + { + try + { + CheckBox cb = (CheckBox)c; + if (cb.Checked) + { + Lost_Ability_Feats += cb.Text; + Lost_Ability_Feats += ", "; + } + } + catch { } + } + + //Zeile Line+350 + e.Graphics.DrawLine(new Pen(Brushes.Black), 100, Line + 350, 626, Line + 350); + + //Zeile Line+375 + e.Graphics.DrawString(General_Feats, Corsiva, Brushes.Black, new Rectangle(100, Line + 375, 626, 325)); + + //Zeile Line+700 + e.Graphics.DrawString(Special_Feats, Corsiva, Brushes.Black, new Rectangle(100, Line + 700, 626, 50)); + + //Zeile Line+750 + e.Graphics.DrawString(Channeling_Feats, Corsiva, Brushes.Black, new Rectangle(100, Line + 750, 626, 75)); + + //Zeile Line+825 + e.Graphics.DrawString(Lost_Ability_Feats, Corsiva, Brushes.Black, new Rectangle(100, Line + 825, 626, 200)); + } + + if (currentpage != 2) + { + e.HasMorePages = true; + currentpage++; + } + else + { + e.HasMorePages = false; + currentpage = 1; + } + } + } +} \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd/UpdateSkillsPanel.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd/UpdateSkillsPanel.cs new file mode 100644 index 0000000..e236f57 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/ChildWnd/UpdateSkillsPanel.cs @@ -0,0 +1,299 @@ +using System.Windows.Forms; + +namespace Wheel_of_Time___Character_Sheets +{ + partial class ChildWnd + { + private void UpdateSkillsPanel() + { + //Animal Empathy + pAnimal_Empathy.Aktiv = character.Woodsman || (character.Background == "Ogier"); + if (character.Woodsman) + { pAnimal_Empathy.Multiplier = 1; } + else + { pAnimal_Empathy.Multiplier = 2; } + + //Appraise + pAppraise.Aktiv = true; + if (character.Noble || character.Wanderer) + { pAppraise.Multiplier = 1; } + else + { pAppraise.Multiplier = 2; } + + //Balance + pBalance.Aktiv = true; + if (character.Algai_d_Siswai || character.Wanderer) + { pBalance.Multiplier = 1; } + else + { pBalance.Multiplier = 2; } + + //Bluff + pBluff.Aktiv = !(character.Background == "Ogier"); + if (character.Noble || character.Wanderer) + { pBluff.Multiplier = 1; } + else + { pBluff.Multiplier = 2; } + + //Climb + pClimb.Aktiv = true; + if (character.Algai_d_Siswai || character.Armsman || character.Wanderer) + { pClimb.Multiplier = 1; } + else + { pClimb.Multiplier = 2; } + + //Concentration + pConcentration.Aktiv = true; + if (character.Initiate || character.Wilder || (character.Background == "Ogier")) + { pConcentration.Multiplier = 1; } + else + { pConcentration.Multiplier = 2; } + + //Disable Device + pDisable_Device.Aktiv = true; + if (character.Background == "Ogier") + { pDisable_Device.Multiplier = 2; } + else + { pDisable_Device.Multiplier = 1; } + + //Disguise + pDisguise.Aktiv = !(character.Background == "Ogier"); + + //Escape Artist + pEscape_Artist.Aktiv = true; + if (character.Background == "Ogier") + { pEscape_Artist.Multiplier = 2; } + else + { pEscape_Artist.Multiplier = 1; } + + //Forgery + pForgery.Aktiv = !(character.Background == "Ogier"); + + //Gather Information + pGather_Information.Aktiv = true; + if (character.Background == "Ogier") + { pGather_Information.Multiplier = 1; } + else + { pGather_Information.Multiplier = 2; } + + //Handle Animal + pHandle_Animal.Aktiv = true; + if (character.Background == "Ogier") + { pHandle_Animal.Multiplier = 1; } + else + { pHandle_Animal.Multiplier = 2; } + + //Heal + pHeal.Aktiv = true; + if (character.Background == "Ogier") + { pHeal.Multiplier = 1; } + else + { pHeal.Multiplier = 2; } + + //Hide + pHide.Aktiv = !(character.Background == "Ogier"); + if (character.Algai_d_Siswai || character.Wanderer || character.Woodsman) + { pHide.Multiplier = 1; } + else + { pHide.Multiplier = 2; } + + //Innuendo + pInnuendo.Aktiv = !(character.Background == "Ogier"); ; + if (character.Noble || character.Wanderer) + { pInnuendo.Multiplier = 1; } + else + { pInnuendo.Multiplier = 2; } + + //Intimidate + pIntimidate.Aktiv = !(character.Background == "Ogier"); + pInnuendo.Multiplier = 1; + + //Intuit Direction + pIntuit_Direction.Aktiv = true; + if (character.Algai_d_Siswai || character.Wanderer || character.Woodsman || (character.Background == "Ogier")) + { pIntuit_Direction.Multiplier = 1; } + else + { pIntuit_Direction.Multiplier = 2; } + + //Jump + pJump.Aktiv = true; + if (character.Algai_d_Siswai || character.Armsman || character.Wanderer || character.Woodsman) + { pJump.Multiplier = 1; } + else + { pJump.Multiplier = 2; } + + //Knowledge + if (character.Initiate || character.Noble || character.Wanderer || character.Wilder || character.Woodsman || (character.Background == "Ogier")) + { + pKnowledge_Arcana.Multiplier = 1; + pKnowledge_Arch.Multiplier = 1; + pKnowledge_Blight.Multiplier = 1; + pKnowledge_Geography.Multiplier = 1; + pKnowledge_History.Multiplier = 1; + pKnowledge_Legends.Multiplier = 1; + pKnowledge_Local.Multiplier = 1; + pKnowledge_Nature.Multiplier = 1; + pKnowledge_Nobility.Multiplier = 1; + } + else + { + pKnowledge_Arcana.Multiplier = 2; + pKnowledge_Arch.Multiplier = 2; + pKnowledge_Blight.Multiplier = 2; + pKnowledge_Geography.Multiplier = 2; + pKnowledge_History.Multiplier = 2; + pKnowledge_Legends.Multiplier = 2; + pKnowledge_Local.Multiplier = 2; + pKnowledge_Nature.Multiplier = 2; + pKnowledge_Nobility.Multiplier = 2; + } + + //Listen + pListen.Aktiv = true; + if (character.Algai_d_Siswai || character.Noble || character.Wanderer || character.Woodsman || (character.Background == "Ogier")) + { pListen.Multiplier = 1; } + else + { pListen.Multiplier = 2; } + + //Move Silently + pMove_Silently.Aktiv = !(character.Background == "Ogier"); + if (character.Algai_d_Siswai || character.Wanderer || character.Woodsman) + { pMove_Silently.Multiplier = 1; } + else + { pMove_Silently.Multiplier = 2; } + + //Open Lock + pOpen_Lock.Aktiv = !(character.Background == "Ogier"); + if (character.Wanderer) + { pOpen_Lock.Multiplier = 1; } + else + { pOpen_Lock.Multiplier = 2; } + + //Pick Pocket + pPick_Pocket.Aktiv = !(character.Background == "Ogier"); + if (character.Wanderer) + { pPick_Pocket.Multiplier = 1; } + else + { pPick_Pocket.Multiplier = 2; } + + //Read Lips + pRead_Lips.Aktiv = character.Wanderer; + if (character.Wanderer) + { pRead_Lips.Multiplier = 1; } + else + { pRead_Lips.Multiplier = 2; } + + //Ride + pRide.Aktiv = !(character.Background == "Ogier"); + if (character.Armsman || character.Noble || character.Woodsman) + { pRide.Multiplier = 1; } + else + { pRide.Multiplier = 2; } + + //Search + pSearch.Aktiv = true; + if (character.Wanderer || character.Woodsman || (character.Background == "Ogier")) + { pSearch.Multiplier = 1; } + else + { pSearch.Multiplier = 2; } + + //Sense Motive + pSense_Motive.Aktiv = true; + if (character.Initiate || character.Noble || character.Wanderer || character.Wilder) + { pSense_Motive.Multiplier = 1; } + else + { pSense_Motive.Multiplier = 2; } + + //Spot + pSpot.Aktiv = true; + if (character.Wanderer || character.Woodsman || (character.Background == "Ogier")) + { pSpot.Multiplier = 1; } + else + { pSpot.Multiplier = 2; } + + //Swim + pSwim.Aktiv = true; + if (character.Armsman || character.Wanderer || character.Woodsman) + { pSwim.Multiplier = 1; } + else + { pSwim.Multiplier = 2; } + + //Tumble + pTumble.Aktiv = true; + if (character.Wanderer) + { pTumble.Multiplier = 1; } + else + { pTumble.Multiplier = 2; } + + //Use Rope + pUse_Rope.Aktiv = true; + if (character.Wanderer || character.Woodsman) + { pUse_Rope.Multiplier = 1; } + else + { pUse_Rope.Multiplier = 2; } + + //Weavesight + pWeavesight.Aktiv = character.Initiate || character.Wilder; + if (character.Initiate || character.Wilder) + { pWeavesight.Multiplier = 1; } + else + { pWeavesight.Multiplier = 2; } + + //Wilderness Lore + pWilderness_Lore.Aktiv = true; + if (character.Algai_d_Siswai || character.Woodsman) + { pWilderness_Lore.Multiplier = 1; } + else + { pWilderness_Lore.Multiplier = 2; } + + foreach(Points p in SkillsPanel.Controls) + { + bool isbackgroundskill = false; + foreach (CheckBox c in tpBackgroundSkills.Controls) + { + if (character.Background == "Ogier") + { + if (c.Text == p.SkillName && c.Checked) + { + if (p.GivenPoints < 4) + { p.GivenPoints = 4; } + p.OgierBackgroundSkill = true; + isbackgroundskill = true; + break; + } + } + else + { + if (c.Text == p.SkillName && c.Checked) + { + if (p.GivenPoints < 4) + { p.GivenPoints = 4; } + p.BackgroundSkill = true; + isbackgroundskill = true; + break; + } + } + } + if (!isbackgroundskill) + { p.BackgroundSkill = false; } + } + + if (character.Background == "Ogier") + { + if (pDecipher_Script.GivenPoints < 2) {pDecipher_Script.GivenPoints = 2; } + pDecipher_Script.OgierBackgroundSkill = true; + if (pHandle_Animal.GivenPoints < 2) { pHandle_Animal.GivenPoints = 2; } + pHandle_Animal.OgierBackgroundSkill = true; + if (pIntuit_Direction.GivenPoints < 2) { pIntuit_Direction.GivenPoints = 2; } + pIntuit_Direction.OgierBackgroundSkill = true; + if (pListen.GivenPoints < 2) { pListen.GivenPoints = 2; } + pListen.OgierBackgroundSkill = true; + if (pSpot.GivenPoints < 2) { pSpot.GivenPoints = 2; } + pSpot.OgierBackgroundSkill = true; + if (pWilderness_Lore.GivenPoints < 2) { pWilderness_Lore.GivenPoints = 2; } + pWilderness_Lore.OgierBackgroundSkill = true; + } + + CalculatePoints(); + } + } +} \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Hannes_Bild.png b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Hannes_Bild.png new file mode 100644 index 0000000..c74eefd Binary files /dev/null and b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Hannes_Bild.png differ diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Hintergrund.jpg b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Hintergrund.jpg new file mode 100644 index 0000000..8b40ff0 Binary files /dev/null and b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Hintergrund.jpg differ diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Main.Designer.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Main.Designer.cs new file mode 100644 index 0000000..2643542 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Main.Designer.cs @@ -0,0 +1,336 @@ +namespace Wheel_of_Time___Character_Sheets +{ + partial class Main + { + /// + /// 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() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); + this.menuStrip = new System.Windows.Forms.MenuStrip(); + this.fileMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.windowsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.newWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.cascadeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tileVerticalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tileHorizontalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.closeAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.arrangeIconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.contentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.indexToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.searchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); + this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStrip = new System.Windows.Forms.ToolStrip(); + this.newToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.openToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.helpToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.ToolTip = new System.Windows.Forms.ToolTip(this.components); + this.menuStrip.SuspendLayout(); + this.toolStrip.SuspendLayout(); + this.statusStrip.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip + // + this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileMenu, + this.windowsMenu, + this.helpMenu}); + this.menuStrip.Location = new System.Drawing.Point(0, 0); + this.menuStrip.MdiWindowListItem = this.windowsMenu; + this.menuStrip.Name = "menuStrip"; + this.menuStrip.Size = new System.Drawing.Size(632, 24); + this.menuStrip.TabIndex = 0; + this.menuStrip.Text = "MenuStrip"; + // + // fileMenu + // + this.fileMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripMenuItem, + this.openToolStripMenuItem, + this.toolStripSeparator3, + this.exitToolStripMenuItem, + this.toolStripSeparator5}); + this.fileMenu.ImageTransparentColor = System.Drawing.SystemColors.ActiveBorder; + this.fileMenu.Name = "fileMenu"; + this.fileMenu.Text = "&File"; + // + // newToolStripMenuItem + // + this.newToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("newToolStripMenuItem.Image"))); + this.newToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.newToolStripMenuItem.Name = "newToolStripMenuItem"; + this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); + this.newToolStripMenuItem.Text = "&New"; + this.newToolStripMenuItem.Click += new System.EventHandler(this.ShowNewForm); + // + // openToolStripMenuItem + // + this.openToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripMenuItem.Image"))); + this.openToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.openToolStripMenuItem.Name = "openToolStripMenuItem"; + this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); + this.openToolStripMenuItem.Text = "&Open"; + this.openToolStripMenuItem.Click += new System.EventHandler(this.OpenFile); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Text = "E&xit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolsStripMenuItem_Click); + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + // + // windowsMenu + // + this.windowsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newWindowToolStripMenuItem, + this.cascadeToolStripMenuItem, + this.tileVerticalToolStripMenuItem, + this.tileHorizontalToolStripMenuItem, + this.closeAllToolStripMenuItem, + this.arrangeIconsToolStripMenuItem}); + this.windowsMenu.Name = "windowsMenu"; + this.windowsMenu.Text = "&Windows"; + // + // newWindowToolStripMenuItem + // + this.newWindowToolStripMenuItem.Name = "newWindowToolStripMenuItem"; + this.newWindowToolStripMenuItem.Text = "&New Window"; + this.newWindowToolStripMenuItem.Click += new System.EventHandler(this.ShowNewForm); + // + // cascadeToolStripMenuItem + // + this.cascadeToolStripMenuItem.Name = "cascadeToolStripMenuItem"; + this.cascadeToolStripMenuItem.Text = "&Cascade"; + this.cascadeToolStripMenuItem.Click += new System.EventHandler(this.CascadeToolStripMenuItem_Click); + // + // tileVerticalToolStripMenuItem + // + this.tileVerticalToolStripMenuItem.Name = "tileVerticalToolStripMenuItem"; + this.tileVerticalToolStripMenuItem.Text = "Tile &Vertical"; + this.tileVerticalToolStripMenuItem.Click += new System.EventHandler(this.TileVerticleToolStripMenuItem_Click); + // + // tileHorizontalToolStripMenuItem + // + this.tileHorizontalToolStripMenuItem.Name = "tileHorizontalToolStripMenuItem"; + this.tileHorizontalToolStripMenuItem.Text = "Tile &Horizontal"; + this.tileHorizontalToolStripMenuItem.Click += new System.EventHandler(this.TileHorizontalToolStripMenuItem_Click); + // + // closeAllToolStripMenuItem + // + this.closeAllToolStripMenuItem.Name = "closeAllToolStripMenuItem"; + this.closeAllToolStripMenuItem.Text = "C&lose All"; + this.closeAllToolStripMenuItem.Click += new System.EventHandler(this.CloseAllToolStripMenuItem_Click); + // + // arrangeIconsToolStripMenuItem + // + this.arrangeIconsToolStripMenuItem.Name = "arrangeIconsToolStripMenuItem"; + this.arrangeIconsToolStripMenuItem.Text = "&Arrange Icons"; + this.arrangeIconsToolStripMenuItem.Click += new System.EventHandler(this.ArrangeIconsToolStripMenuItem_Click); + // + // helpMenu + // + this.helpMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.contentsToolStripMenuItem, + this.indexToolStripMenuItem, + this.searchToolStripMenuItem, + this.toolStripSeparator8, + this.aboutToolStripMenuItem}); + this.helpMenu.Name = "helpMenu"; + this.helpMenu.Text = "&Help"; + // + // contentsToolStripMenuItem + // + this.contentsToolStripMenuItem.Name = "contentsToolStripMenuItem"; + this.contentsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F1))); + this.contentsToolStripMenuItem.Text = "&Contents"; + // + // indexToolStripMenuItem + // + this.indexToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("indexToolStripMenuItem.Image"))); + this.indexToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.indexToolStripMenuItem.Name = "indexToolStripMenuItem"; + this.indexToolStripMenuItem.Text = "&Index"; + // + // searchToolStripMenuItem + // + this.searchToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("searchToolStripMenuItem.Image"))); + this.searchToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Black; + this.searchToolStripMenuItem.Name = "searchToolStripMenuItem"; + this.searchToolStripMenuItem.Text = "&Search"; + // + // toolStripSeparator8 + // + this.toolStripSeparator8.Name = "toolStripSeparator8"; + // + // aboutToolStripMenuItem + // + this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + this.aboutToolStripMenuItem.Text = "&About ..."; + this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); + // + // toolStrip + // + this.toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripButton, + this.openToolStripButton, + this.toolStripSeparator1, + this.helpToolStripButton, + this.toolStripSeparator2}); + this.toolStrip.Location = new System.Drawing.Point(0, 24); + this.toolStrip.Name = "toolStrip"; + this.toolStrip.Size = new System.Drawing.Size(632, 25); + this.toolStrip.TabIndex = 1; + this.toolStrip.Text = "ToolStrip"; + // + // newToolStripButton + // + this.newToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.newToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("newToolStripButton.Image"))); + this.newToolStripButton.ImageTransparentColor = System.Drawing.Color.Black; + this.newToolStripButton.Name = "newToolStripButton"; + this.newToolStripButton.Text = "New"; + this.newToolStripButton.Click += new System.EventHandler(this.ShowNewForm); + // + // openToolStripButton + // + this.openToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.openToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripButton.Image"))); + this.openToolStripButton.ImageTransparentColor = System.Drawing.Color.Black; + this.openToolStripButton.Name = "openToolStripButton"; + this.openToolStripButton.Text = "Open"; + this.openToolStripButton.Click += new System.EventHandler(this.OpenFile); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + // + // helpToolStripButton + // + this.helpToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.helpToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("helpToolStripButton.Image"))); + this.helpToolStripButton.ImageTransparentColor = System.Drawing.Color.Black; + this.helpToolStripButton.Name = "helpToolStripButton"; + this.helpToolStripButton.Text = "Help"; + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + // + // statusStrip + // + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel}); + this.statusStrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Table; + this.statusStrip.Location = new System.Drawing.Point(0, 430); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.ManagerRenderMode; + this.statusStrip.Size = new System.Drawing.Size(632, 23); + this.statusStrip.SizingGrip = false; + this.statusStrip.TabIndex = 2; + this.statusStrip.Text = "StatusStrip"; + // + // toolStripStatusLabel + // + this.toolStripStatusLabel.Name = "toolStripStatusLabel"; + this.toolStripStatusLabel.Text = "Status"; + // + // Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(632, 453); + this.Controls.Add(this.statusStrip); + this.Controls.Add(this.toolStrip); + this.Controls.Add(this.menuStrip); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.IsMdiContainer = true; + this.Name = "Main"; + this.Text = "Wheel of Time Character Sheet Editor"; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.menuStrip.ResumeLayout(false); + this.toolStrip.ResumeLayout(false); + this.statusStrip.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + #endregion + + + private System.Windows.Forms.MenuStrip menuStrip; + private System.Windows.Forms.ToolStrip toolStrip; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel; + private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem tileHorizontalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem fileMenu; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem windowsMenu; + private System.Windows.Forms.ToolStripMenuItem newWindowToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem cascadeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem tileVerticalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem closeAllToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem arrangeIconsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpMenu; + private System.Windows.Forms.ToolStripMenuItem contentsToolStripMenuItem; + private System.Windows.Forms.ToolTip ToolTip; + private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem indexToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem; + private System.Windows.Forms.ToolStripButton newToolStripButton; + private System.Windows.Forms.ToolStripButton openToolStripButton; + private System.Windows.Forms.ToolStripButton helpToolStripButton; + } +} + + + diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Main.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Main.cs new file mode 100644 index 0000000..4ef7ea4 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Main.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Drawing.Printing; + +namespace Wheel_of_Time___Character_Sheets +{ + public partial class Main : Form + { + private int childFormNumber = 0; + + public Main(string[] args) + { + InitializeComponent(); + + if (args.Length == 0) + { + ChildWnd childwnd = new ChildWnd(""); + childwnd.MdiParent = this; + childwnd.Text = "Dokument " + childFormNumber++; + childwnd.Show(); + } + else + { + ChildWnd childwnd = new ChildWnd(args[0]); + childwnd.MdiParent = this; + childwnd.Text = args[0]; + childwnd.Show(); + } + } + + private void ShowNewForm(object sender, EventArgs e) + { + ChildWnd childwnd = new ChildWnd(""); + childwnd.MdiParent = this; + childwnd.Text = "Dokument " + childFormNumber++; + childwnd.Show(); + } + + private void OpenFile(object sender, EventArgs e) + { + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); + openFileDialog.Filter = "Wheel of Time Character Files (*.wot)|*.wot"; + openFileDialog.ShowDialog(this); + + ChildWnd childwnd = new ChildWnd(openFileDialog.FileName); + childwnd.MdiParent = this; + childwnd.Text = openFileDialog.FileName; + childwnd.Show(); + } + + private void SaveAsToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); + saveFileDialog.Filter = "Text Files (*.txt)|*.txt"; + saveFileDialog.ShowDialog(this); + + string FileName = saveFileDialog.FileName; + // TODO: Add code here to save the current contents of the form to a file. + } + + private void ExitToolsStripMenuItem_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void CascadeToolStripMenuItem_Click(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.Cascade); + } + + private void TileVerticleToolStripMenuItem_Click(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.TileVertical); + } + + private void TileHorizontalToolStripMenuItem_Click(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.TileHorizontal); + } + + private void ArrangeIconsToolStripMenuItem_Click(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.ArrangeIcons); + } + + private void CloseAllToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (Form childForm in MdiChildren) + { + childForm.Close(); + } + } + + private void aboutToolStripMenuItem_Click(object sender, EventArgs e) + { + AboutBox1 ab = new AboutBox1(); + ab.ShowDialog(); + } + } +} \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Main.resx b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Main.resx new file mode 100644 index 0000000..27ed87e --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Main.resx @@ -0,0 +1,261 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 209, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQpJREFUOE+t021L + wlAUB3C/VH6H+hr5jSRfiPSiFiEDgwWGRhZm0EoQcQN7QoblWPNp6py6h3/cwWDkvde98MDhvrnndznn + cFOpfYVU7+J/lmoKipUWhGs5TO5bpJgVBfEB6aMMH7m6V5nAiVBB9UnhI+Jtmwlkz27C4iiprVyWm0zA + 9XwQJIKowLn0TAWCIIDtbGCM7BA4ODymD/O09EgF1hsPY8uBplt8IF+sbQGeH2BmrzEwF3jXxnwgd1Hd + ApyVC3OyRO9nis6HyQdIf/Egg5vOV+gbM3R7I7yqenIgPrjP/gTtt180Wt/Jgfjg1K8h5M4Ady9aMiDa + N+tkrjHaMbmwK/f1gUPnD9/19ZYU1J08AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAl9JREFUOE+9k1tI + E2AYhnfRRVcWaVEIRpaEXYiBIdVFSNJJUUqzwkgTylMHDMU2D206dXMnp650mNt0TZ1WlmFYIRSKRGip + o8S0LCgqxcxQydPT3EKTLPCmH96bn+99vvf7fn6B4H+cnGIzEq2Fy3ITeToraUojy+obnawjLF7lMJ0X + lpNlh6VIDUQlFyOoM2tYSo01sr92SUgrITxRRWh8gRPQ22VkYqTWoR/DFqYGDVhNKurN0iUhYQlqQuO0 + BMcWIaitUDM+XLXIPPOphClbElXlcipLczEUZ6EvyOSaUkSRLHUxtNqoYPyLcb7zrN1MrwhssUvqD8CN + MhnfP+odsefMTXUKh+5b82mwyLhdmYvVkI1FL8Gku8J1bTqlahE6hdCZplKfy+i7QuZiv2kRU1+lZuaN + BAaki/XWftefBj3J8DKRzpoILsaEIDDosvnWJ4f3Su5Uq2h7oHQW/T7CiyhoD2e6NYiJhwG8rvDh3Kn9 + TkCZVszXVxIGWjOotyiZ7RdDd5wT0BljNx5nui2EieZ9jDbuZqhuO5J4L04EujmXWaLOYKhLyE2zgo4n + 9iQ9SXbAGeg4yezTw0w+PshY0x6G6/34XO1Ne85qIoM88dvq4gTo8kV0N2dyy5wPfZnw3B732VEmW4IZ + exTASIM/g1YfPhi3YFO6Io7djO8294WnLMxLpdYkx3Y3gXaNYF5tyhU0y1ZyL2sVNelrMaS6c/XSRiIP + bcLf12MBoJGmoBGfJU8YTdqFY47FnI4I5MiBnezd5cMOHy+8Pd3x2ODGujUurHf9FX1Zv+kfxT8BMS7u + X4BvNFkAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAqRJREFUOE+Fk1tI + 01EYwOdr0HOJvfdm9FpPBZFQDyFBCb71ZoZooZiXMeetnJs6L9O8m2s6clNRN7VdtDmnS5uXleQQ3Zzm + XRMvYfz6b6KVZn3wceBwfr/zfecSIjojqurcbG98F21u7ogODhBlZFwPOWvtqfkAHEiXa5Wa2inUbyaR + SgdIT7fxX8kR7HCsUqJyYbGu8M7ko9c0i6bJjSTDfrboJNzRuYjNtk2/ZQurZYPenlV0unkaGieEigb/ + FJ2E29r9mE0bdHUt09q2SIsANmtnaaifRqVyI5ePkpk9eNjSSVin9wVBvd5Pk2aO+noPlZVTlJRMoFCM + kJMzzNMEE7FPDBzDLtd6sGdN0yxa7Rzq1zPU1kzT1OpD1rxOVNEekbItJJU+5CVjxDw2oGsdOBRomseR + K5zU1Hl4VfGZsmI3ysJxqrR+4jVQboEPc0J6obbvgAfZXlpMbqa9M4jEEisa7RgSaR+ygiFk+SO8zHNS + 3eghTg3aIZhf2CQ118jth1XBUe/Y4WackzylA9GzRAMziz6M5lGSU3oQi63BO89qWEJlJhhH8PCoNygp + qrUjVS8QHWNElJqupkDZzcKmn9llob9CM9KsPu7lrqEfPRQEIlBFQHDtbhmljSM09O8TerkU0Yv8QWHn + XiENmGzjrO1/xWL/RITYh+43wda3vSCcmGlkekk4C/MuF8Jyfr1MSWYfKWk9FBRb8fjnUHXOI2/fOa7A + Luwur3TgEeBx4TATitxERFadftopaSaeC6IO8xduJXykw7nP7g8wvPcSfqOAyXko7Vjh/FUl2Urz3/9G + mthMUnI3dS2TXIkyIq6eQWPbpdGyQ7xiknPhCmKT3tI/4vv351JVOMlX2ol+1EropSwuhqVy5345MpWV + wTF/EP4JaStxoteu5NMAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAtpJREFUOE+Vk1lP + k1EQhutC/CHGGBM1MWpc4oVLSFGhRogfFAREqVCQshSoRRAQSlFUSitQwqKtqChBEepH3IKCC4agxoi4 + YdSw1FTQCFpE5LEfF1aCXjhX55yced7MzDuzZH9ERrGIdGVyUjbXZ7Zsns8c2ei3cdnIV7ds0vNWnhMy + 68//086ZJS0ctIjY29q5/roLsa8Fe28uSWIMguEk0Rl2VJmnpwRmxAGTiMEm0tB9hYdfntIzNkBaYwGm + V1nEXVaw0VhEmKGDUH0NUbrq6RDdMQdZFgcVnWZanDZuDXfSNdpNj9tFfX8zMVYjcusz1lgaWVumQkgu + ZmdKuRciAfLsItZHRZT16rC9t2DvM1L+xE782XrUFUOEHXvL0nNBLDrjz/r8REISSryA1CNNVDjeYRBN + 7HuwjeTOALQ2PWm1nrKqLmEw16AvKibSHMfiUjmLjwQSpC7yApKMjVReGyOnshLFOTlbxVBU5WZKTzdz + o+0Og66PvHe6qL3YRESmhvkFfiiiDV6AJr8Bs8PNgVoXkXoV/pV70NbmcbW1DSl+TMCI+ycDwxNYai6w + ThPElshsL2DfoXqSy96gqfqO2txLYIbGM86j9H9w/U52fv7Bi/5xmtufExQRjm+o3guIyz1PfOFtok98 + Jco0TGj+XfYXGuj7MDSl7Pw04Un+TscLNxUNHWwXgtkgaL0AdU7dlEl2FzxEediJPLcTIV9L09VWBj95 + lAfGuf/SzZWuURJ02QQIu8jLSp3uBclhETo7IQfvsjTVyDJtOLHaFKrrHDS292C92EFCejbByh3UmcJp + siZSYkibDpEcpkwsZXOSGV9VPAq1ESE2B2HnbgIFJWHB27FoNzF4Ss7Pe1HYjqfMhEgOk0wizVkaldRt + qWFSzWEKX2IDVvA4eyV91g0MNQeTHrPt77vxr42TADH+y7mpW81evyUo/Vf9H0ACS5B1yxbit3bBVPIv + gLX/NgWpi8gAAAAASUVORK5CYII= + + + + 311, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQpJREFUOE+t021L + wlAUB3C/VH6H+hr5jSRfiPSiFiEDgwWGRhZm0EoQcQN7QoblWPNp6py6h3/cwWDkvde98MDhvrnndznn + cFOpfYVU7+J/lmoKipUWhGs5TO5bpJgVBfEB6aMMH7m6V5nAiVBB9UnhI+Jtmwlkz27C4iiprVyWm0zA + 9XwQJIKowLn0TAWCIIDtbGCM7BA4ODymD/O09EgF1hsPY8uBplt8IF+sbQGeH2BmrzEwF3jXxnwgd1Hd + ApyVC3OyRO9nis6HyQdIf/Egg5vOV+gbM3R7I7yqenIgPrjP/gTtt180Wt/Jgfjg1K8h5M4Ady9aMiDa + N+tkrjHaMbmwK/f1gUPnD9/19ZYU1J08AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAl9JREFUOE+9k1tI + E2AYhnfRRVcWaVEIRpaEXYiBIdVFSNJJUUqzwkgTylMHDMU2D206dXMnp650mNt0TZ1WlmFYIRSKRGip + o8S0LCgqxcxQydPT3EKTLPCmH96bn+99vvf7fn6B4H+cnGIzEq2Fy3ITeToraUojy+obnawjLF7lMJ0X + lpNlh6VIDUQlFyOoM2tYSo01sr92SUgrITxRRWh8gRPQ22VkYqTWoR/DFqYGDVhNKurN0iUhYQlqQuO0 + BMcWIaitUDM+XLXIPPOphClbElXlcipLczEUZ6EvyOSaUkSRLHUxtNqoYPyLcb7zrN1MrwhssUvqD8CN + MhnfP+odsefMTXUKh+5b82mwyLhdmYvVkI1FL8Gku8J1bTqlahE6hdCZplKfy+i7QuZiv2kRU1+lZuaN + BAaki/XWftefBj3J8DKRzpoILsaEIDDosvnWJ4f3Su5Uq2h7oHQW/T7CiyhoD2e6NYiJhwG8rvDh3Kn9 + TkCZVszXVxIGWjOotyiZ7RdDd5wT0BljNx5nui2EieZ9jDbuZqhuO5J4L04EujmXWaLOYKhLyE2zgo4n + 9iQ9SXbAGeg4yezTw0w+PshY0x6G6/34XO1Ne85qIoM88dvq4gTo8kV0N2dyy5wPfZnw3B732VEmW4IZ + exTASIM/g1YfPhi3YFO6Io7djO8294WnLMxLpdYkx3Y3gXaNYF5tyhU0y1ZyL2sVNelrMaS6c/XSRiIP + bcLf12MBoJGmoBGfJU8YTdqFY47FnI4I5MiBnezd5cMOHy+8Pd3x2ODGujUurHf9FX1Zv+kfxT8BMS7u + X4BvNFkAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAqRJREFUOE+Fk1tI + 01EYwOdr0HOJvfdm9FpPBZFQDyFBCb71ZoZooZiXMeetnJs6L9O8m2s6clNRN7VdtDmnS5uXleQQ3Zzm + XRMvYfz6b6KVZn3wceBwfr/zfecSIjojqurcbG98F21u7ogODhBlZFwPOWvtqfkAHEiXa5Wa2inUbyaR + SgdIT7fxX8kR7HCsUqJyYbGu8M7ko9c0i6bJjSTDfrboJNzRuYjNtk2/ZQurZYPenlV0unkaGieEigb/ + FJ2E29r9mE0bdHUt09q2SIsANmtnaaifRqVyI5ePkpk9eNjSSVin9wVBvd5Pk2aO+noPlZVTlJRMoFCM + kJMzzNMEE7FPDBzDLtd6sGdN0yxa7Rzq1zPU1kzT1OpD1rxOVNEekbItJJU+5CVjxDw2oGsdOBRomseR + K5zU1Hl4VfGZsmI3ysJxqrR+4jVQboEPc0J6obbvgAfZXlpMbqa9M4jEEisa7RgSaR+ygiFk+SO8zHNS + 3eghTg3aIZhf2CQ118jth1XBUe/Y4WackzylA9GzRAMziz6M5lGSU3oQi63BO89qWEJlJhhH8PCoNygp + qrUjVS8QHWNElJqupkDZzcKmn9llob9CM9KsPu7lrqEfPRQEIlBFQHDtbhmljSM09O8TerkU0Yv8QWHn + XiENmGzjrO1/xWL/RITYh+43wda3vSCcmGlkekk4C/MuF8Jyfr1MSWYfKWk9FBRb8fjnUHXOI2/fOa7A + Luwur3TgEeBx4TATitxERFadftopaSaeC6IO8xduJXykw7nP7g8wvPcSfqOAyXko7Vjh/FUl2Urz3/9G + mthMUnI3dS2TXIkyIq6eQWPbpdGyQ7xiknPhCmKT3tI/4vv351JVOMlX2ol+1EropSwuhqVy5345MpWV + wTF/EP4JaStxoteu5NMAAAAASUVORK5CYII= + + + + 17, 17 + + + 121, 17 + + + 51 + + + + AAABAAEAICAQAAEABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAIAAAIAAAACAgAAAAACAAACAgACAAIAAgICAAMDAwAAA/wAA/wAAAP//AAAAAP8AAP//AP8A + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////PzgD8z84A/MfOfPzHjnz8x45 + 8/MMOfPzDDnz8ww58/MMOfPzDDnz8wA58/MAOfPzITnz8yE58/MhOfPzMznz8zM58/MzOfPzMznz8z85 + 8/M/OfPzPznz8z858/M/OfPzPznz8z858/M/OfPzPznz8z84A4A/OAOA/////w== + + + \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Points.Designer.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Points.Designer.cs new file mode 100644 index 0000000..961a2a0 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Points.Designer.cs @@ -0,0 +1,265 @@ +namespace Wheel_of_Time___Character_Sheets +{ + partial class Points + { + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton4 = new System.Windows.Forms.RadioButton(); + this.radioButton5 = new System.Windows.Forms.RadioButton(); + this.radioButton6 = new System.Windows.Forms.RadioButton(); + this.radioButton7 = new System.Windows.Forms.RadioButton(); + this.radioButton8 = new System.Windows.Forms.RadioButton(); + this.lSkillName = new System.Windows.Forms.Label(); + this.cbSkillName = new System.Windows.Forms.CheckBox(); + this.nudSkillLevel = new System.Windows.Forms.NumericUpDown(); + this.label1 = new System.Windows.Forms.Label(); + this.lMultiplier = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.lGesamt = new System.Windows.Forms.Label(); + this.bDelete = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.nudSkillLevel)).BeginInit(); + this.SuspendLayout(); + // + // radioButton1 + // + this.radioButton1.AutoCheck = false; + this.radioButton1.AutoSize = true; + this.radioButton1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.radioButton1.ForeColor = System.Drawing.SystemColors.ControlText; + this.radioButton1.Location = new System.Drawing.Point(142, 3); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(13, 12); + this.radioButton1.TabIndex = 0; + this.radioButton1.Click += new System.EventHandler(this.radioButton1_Click); + // + // radioButton2 + // + this.radioButton2.AutoCheck = false; + this.radioButton2.AutoSize = true; + this.radioButton2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.radioButton2.Location = new System.Drawing.Point(155, 3); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(13, 12); + this.radioButton2.TabIndex = 1; + this.radioButton2.Click += new System.EventHandler(this.radioButton2_Click); + // + // radioButton3 + // + this.radioButton3.AutoCheck = false; + this.radioButton3.AutoSize = true; + this.radioButton3.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.radioButton3.Location = new System.Drawing.Point(168, 3); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(13, 12); + this.radioButton3.TabIndex = 2; + this.radioButton3.Click += new System.EventHandler(this.radioButton3_Click); + // + // radioButton4 + // + this.radioButton4.AutoCheck = false; + this.radioButton4.AutoSize = true; + this.radioButton4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.radioButton4.Location = new System.Drawing.Point(181, 3); + this.radioButton4.Name = "radioButton4"; + this.radioButton4.Size = new System.Drawing.Size(13, 12); + this.radioButton4.TabIndex = 3; + this.radioButton4.Click += new System.EventHandler(this.radioButton4_Click); + // + // radioButton5 + // + this.radioButton5.AutoCheck = false; + this.radioButton5.AutoSize = true; + this.radioButton5.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.radioButton5.Location = new System.Drawing.Point(194, 3); + this.radioButton5.Name = "radioButton5"; + this.radioButton5.Size = new System.Drawing.Size(13, 12); + this.radioButton5.TabIndex = 4; + this.radioButton5.Click += new System.EventHandler(this.radioButton5_Click); + // + // radioButton6 + // + this.radioButton6.AutoCheck = false; + this.radioButton6.AutoSize = true; + this.radioButton6.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.radioButton6.Location = new System.Drawing.Point(207, 3); + this.radioButton6.Name = "radioButton6"; + this.radioButton6.Size = new System.Drawing.Size(13, 12); + this.radioButton6.TabIndex = 5; + this.radioButton6.Click += new System.EventHandler(this.radioButton6_Click); + // + // radioButton7 + // + this.radioButton7.AutoCheck = false; + this.radioButton7.AutoSize = true; + this.radioButton7.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.radioButton7.Location = new System.Drawing.Point(220, 3); + this.radioButton7.Name = "radioButton7"; + this.radioButton7.Size = new System.Drawing.Size(13, 12); + this.radioButton7.TabIndex = 6; + this.radioButton7.Click += new System.EventHandler(this.radioButton7_Click); + // + // radioButton8 + // + this.radioButton8.AutoCheck = false; + this.radioButton8.AutoSize = true; + this.radioButton8.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.radioButton8.Location = new System.Drawing.Point(233, 3); + this.radioButton8.Name = "radioButton8"; + this.radioButton8.Size = new System.Drawing.Size(13, 12); + this.radioButton8.TabIndex = 7; + this.radioButton8.Click += new System.EventHandler(this.radioButton8_Click); + // + // lSkillName + // + this.lSkillName.AutoSize = true; + this.lSkillName.Location = new System.Drawing.Point(3, 3); + this.lSkillName.Name = "lSkillName"; + this.lSkillName.Size = new System.Drawing.Size(0, 0); + this.lSkillName.TabIndex = 8; + // + // cbSkillName + // + this.cbSkillName.AutoSize = true; + this.cbSkillName.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cbSkillName.Location = new System.Drawing.Point(4, 0); + this.cbSkillName.Name = "cbSkillName"; + this.cbSkillName.Size = new System.Drawing.Size(12, 11); + this.cbSkillName.TabIndex = 9; + this.cbSkillName.CheckedChanged += new System.EventHandler(this.cbSkillName_CheckedChanged); + // + // nudSkillLevel + // + this.nudSkillLevel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.nudSkillLevel.Location = new System.Drawing.Point(252, 0); + this.nudSkillLevel.Maximum = new decimal(new int[] { + 8, + 0, + 0, + 0}); + this.nudSkillLevel.Name = "nudSkillLevel"; + this.nudSkillLevel.Size = new System.Drawing.Size(39, 20); + this.nudSkillLevel.TabIndex = 10; + this.nudSkillLevel.ValueChanged += new System.EventHandler(this.nudSkillLevel_ValueChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(297, 3); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(8, 13); + this.label1.TabIndex = 11; + this.label1.Text = "x"; + // + // lMultiplier + // + this.lMultiplier.AutoSize = true; + this.lMultiplier.Location = new System.Drawing.Point(311, 3); + this.lMultiplier.Name = "lMultiplier"; + this.lMultiplier.Size = new System.Drawing.Size(9, 13); + this.lMultiplier.TabIndex = 12; + this.lMultiplier.Text = "1"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(326, 3); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(9, 13); + this.label3.TabIndex = 13; + this.label3.Text = "="; + // + // lGesamt + // + this.lGesamt.AutoSize = true; + this.lGesamt.Location = new System.Drawing.Point(341, 3); + this.lGesamt.Name = "lGesamt"; + this.lGesamt.Size = new System.Drawing.Size(9, 13); + this.lGesamt.TabIndex = 14; + this.lGesamt.Text = "0"; + // + // bDelete + // + this.bDelete.Enabled = false; + this.bDelete.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.bDelete.Location = new System.Drawing.Point(362, 0); + this.bDelete.Name = "bDelete"; + this.bDelete.Size = new System.Drawing.Size(35, 20); + this.bDelete.TabIndex = 15; + this.bDelete.Text = "DEL"; + this.bDelete.Click += new System.EventHandler(this.bDelete_Click); + // + // Points + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.bDelete); + this.Controls.Add(this.lGesamt); + this.Controls.Add(this.label3); + this.Controls.Add(this.lMultiplier); + this.Controls.Add(this.label1); + this.Controls.Add(this.nudSkillLevel); + this.Controls.Add(this.cbSkillName); + this.Controls.Add(this.lSkillName); + this.Controls.Add(this.radioButton8); + this.Controls.Add(this.radioButton7); + this.Controls.Add(this.radioButton6); + this.Controls.Add(this.radioButton5); + this.Controls.Add(this.radioButton4); + this.Controls.Add(this.radioButton3); + this.Controls.Add(this.radioButton2); + this.Controls.Add(this.radioButton1); + this.Name = "Points"; + this.Size = new System.Drawing.Size(397, 20); + ((System.ComponentModel.ISupportInitialize)(this.nudSkillLevel)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.RadioButton radioButton4; + private System.Windows.Forms.RadioButton radioButton5; + private System.Windows.Forms.RadioButton radioButton6; + private System.Windows.Forms.RadioButton radioButton7; + private System.Windows.Forms.RadioButton radioButton8; + private System.Windows.Forms.Label lSkillName; + private System.Windows.Forms.CheckBox cbSkillName; + private System.Windows.Forms.NumericUpDown nudSkillLevel; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label lMultiplier; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label lGesamt; + private System.Windows.Forms.Button bDelete; + } +} diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Points.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Points.cs new file mode 100644 index 0000000..5f197fe --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Points.cs @@ -0,0 +1,324 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; + +namespace Wheel_of_Time___Character_Sheets +{ + public partial class Points : UserControl + { + private int givenpoints = 0; + private bool aktiv = true; + private bool backgroundskill = false; + private bool ogierbackgroundskill = false; + + public event EventHandler Blub; + public event EventHandler OnDisposing; + + [CategoryAttribute("Attribute"), + DescriptionAttribute("Das Blub")] + public int Multiplier + { + get { return int.Parse(lMultiplier.Text); } + set { lMultiplier.Text = value.ToString(); } + } + + [CategoryAttribute("Attribute"), + DescriptionAttribute("Das Blub")] + public bool BackgroundSkill + { + get { return backgroundskill; } + set + { + if (value) + { + nudSkillLevel.Minimum = 4; + lGesamt.Text = ((nudSkillLevel.Value - 4) * int.Parse(lMultiplier.Text)).ToString(); + } + else + { + nudSkillLevel.Minimum = 0; + lGesamt.Text = (nudSkillLevel.Value * int.Parse(lMultiplier.Text)).ToString(); + } + cbSkillName.AutoCheck = !value; + backgroundskill = value; + } + } + + [CategoryAttribute("Attribute"), + DescriptionAttribute("Das Blub")] + public bool OgierBackgroundSkill + { + get { return ogierbackgroundskill; } + set + { + if (value) + { + nudSkillLevel.Minimum = 2; + lGesamt.Text = ((nudSkillLevel.Value - 2) * int.Parse(lMultiplier.Text)).ToString(); + } + else + { + nudSkillLevel.Minimum = 0; + lGesamt.Text = (nudSkillLevel.Value * int.Parse(lMultiplier.Text)).ToString(); + } + cbSkillName.AutoCheck = !value; + ogierbackgroundskill = value; + } + } + + [CategoryAttribute("Attribute"), + DescriptionAttribute("Das Blub")] + public string SkillName + { + get { return cbSkillName.Text; } + set { cbSkillName.Text = value; } + } + + [CategoryAttribute("Attribute"), + DescriptionAttribute("Das Blub")] + public int GivenPoints + { + get { return givenpoints; } + set { CheckButtons(value); givenpoints = value; } + } + + [CategoryAttribute("Attribute"), + DescriptionAttribute("Das Blub")] + public int UsedPoints + { + get { return int.Parse(lGesamt.Text); } + } + + [CategoryAttribute("Attribute"), + DescriptionAttribute("Das Blub")] + public bool Aktiv + { + get { return aktiv; } + set { SetActive(value); aktiv = value; } + } + + public Points() + { + InitializeComponent(); + } + + public Points(string Text, int LocationY, EventHandler Blub, EventHandler OnDisposing) + { + InitializeComponent(); + SkillName = Text; + this.Location = new Point(0, LocationY); + this.Blub += Blub; + this.OnDisposing += OnDisposing; + bDelete.Enabled = true; + } + + private void cbSkillName_CheckedChanged(object sender, EventArgs e) + { + if (cbSkillName.Checked == false) + { + nudSkillLevel.Value = 0; + } + else if (nudSkillLevel.Value == 0) + { + nudSkillLevel.Value = 1; + } + } + + private void SetActive(bool active) + { + if (!active) + { + nudSkillLevel.Value = 0; + } + cbSkillName.Enabled = active; + nudSkillLevel.Enabled = active; + radioButton1.Enabled = active; + radioButton2.Enabled = active; + radioButton3.Enabled = active; + radioButton4.Enabled = active; + radioButton5.Enabled = active; + radioButton6.Enabled = active; + radioButton7.Enabled = active; + radioButton8.Enabled = active; + } + + private void radioButton1_Click(object sender, EventArgs e) + { + if (!backgroundskill && !ogierbackgroundskill) + { + nudSkillLevel.Value = 1; + } + } + + private void radioButton2_Click(object sender, EventArgs e) + { + if (!backgroundskill) + { + nudSkillLevel.Value = 2; + } + } + + private void radioButton3_Click(object sender, EventArgs e) + { + if (!backgroundskill) + { + nudSkillLevel.Value = 3; + } + } + + private void radioButton4_Click(object sender, EventArgs e) + { + nudSkillLevel.Value = 4; + } + + private void radioButton5_Click(object sender, EventArgs e) + { + nudSkillLevel.Value = 5; + } + + private void radioButton6_Click(object sender, EventArgs e) + { + nudSkillLevel.Value = 6; + } + + private void radioButton7_Click(object sender, EventArgs e) + { + nudSkillLevel.Value = 7; + } + + private void radioButton8_Click(object sender, EventArgs e) + { + nudSkillLevel.Value = 8; + } + + private void CheckButtons(int num) + { + switch (num) + { + case 0: + cbSkillName.Checked = false; + radioButton1.Checked = false; + radioButton2.Checked = false; + radioButton3.Checked = false; + radioButton4.Checked = false; + radioButton5.Checked = false; + radioButton6.Checked = false; + radioButton7.Checked = false; + radioButton8.Checked = false; + break; + case 1: + cbSkillName.Checked = true; + radioButton1.Checked = true; + radioButton2.Checked = false; + radioButton3.Checked = false; + radioButton4.Checked = false; + radioButton5.Checked = false; + radioButton6.Checked = false; + radioButton7.Checked = false; + radioButton8.Checked = false; + break; + case 2: + cbSkillName.Checked = true; + radioButton1.Checked = true; + radioButton2.Checked = true; + radioButton3.Checked = false; + radioButton4.Checked = false; + radioButton5.Checked = false; + radioButton6.Checked = false; + radioButton7.Checked = false; + radioButton8.Checked = false; + break; + case 3: + cbSkillName.Checked = true; + radioButton1.Checked = true; + radioButton2.Checked = true; + radioButton3.Checked = true; + radioButton4.Checked = false; + radioButton5.Checked = false; + radioButton6.Checked = false; + radioButton7.Checked = false; + radioButton8.Checked = false; + break; + case 4: + cbSkillName.Checked = true; + radioButton1.Checked = true; + radioButton2.Checked = true; + radioButton3.Checked = true; + radioButton4.Checked = true; + radioButton5.Checked = false; + radioButton6.Checked = false; + radioButton7.Checked = false; + radioButton8.Checked = false; + break; + case 5: + cbSkillName.Checked = true; + radioButton1.Checked = true; + radioButton2.Checked = true; + radioButton3.Checked = true; + radioButton4.Checked = true; + radioButton5.Checked = true; + radioButton6.Checked = false; + radioButton7.Checked = false; + radioButton8.Checked = false; + break; + case 6: + cbSkillName.Checked = true; + radioButton1.Checked = true; + radioButton2.Checked = true; + radioButton3.Checked = true; + radioButton4.Checked = true; + radioButton5.Checked = true; + radioButton6.Checked = true; + radioButton7.Checked = false; + radioButton8.Checked = false; + break; + case 7: + cbSkillName.Checked = true; + radioButton1.Checked = true; + radioButton2.Checked = true; + radioButton3.Checked = true; + radioButton4.Checked = true; + radioButton5.Checked = true; + radioButton6.Checked = true; + radioButton7.Checked = true; + radioButton8.Checked = false; + break; + case 8: + cbSkillName.Checked = true; + radioButton1.Checked = true; + radioButton2.Checked = true; + radioButton3.Checked = true; + radioButton4.Checked = true; + radioButton5.Checked = true; + radioButton6.Checked = true; + radioButton7.Checked = true; + radioButton8.Checked = true; + break; + default: + break; + } + } + + private void nudSkillLevel_ValueChanged(object sender, EventArgs e) + { + GivenPoints = Convert.ToInt32(nudSkillLevel.Value); + if (backgroundskill) + { lGesamt.Text = ((nudSkillLevel.Value - 4) * int.Parse(lMultiplier.Text)).ToString(); } + else if (ogierbackgroundskill) + { lGesamt.Text = ((nudSkillLevel.Value - 2) * int.Parse(lMultiplier.Text)).ToString(); } + else + { lGesamt.Text = (nudSkillLevel.Value * int.Parse(lMultiplier.Text)).ToString(); } + Blub(null, null); + } + + private void bDelete_Click(object sender, EventArgs e) + { + OnDisposing(SkillName, null); + this.Dispose(); + } + } +} diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Points.resx b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Points.resx new file mode 100644 index 0000000..8f95d66 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Points.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Program.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Program.cs new file mode 100644 index 0000000..e2432c7 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Wheel_of_Time___Character_Sheets +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main(string[] args) + { + Splash splash = new Splash(); + splash.Show(); + Application.EnableVisualStyles(); + Application.Run(new Main(args)); + } + } +} \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/AssemblyInfo.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c8abc22 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Wheel of Time - Character Sheets")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Wheel of Time - Character Sheets")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("84812b26-3a59-4bf5-84bf-ecdfaf868322")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/Resources.Designer.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/Resources.Designer.cs new file mode 100644 index 0000000..e487e77 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/Resources.Designer.cs @@ -0,0 +1,80 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="Wheel_of_Time___Character_Sheets.Properties.Resources.get_ResourceManager():Syste" + + "m.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="Wheel_of_Time___Character_Sheets.Properties.Resources.get_Culture():System.Global" + + "ization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="Wheel_of_Time___Character_Sheets.Properties.Resources.set_Culture(System.Globaliz" + + "ation.CultureInfo):Void")] + +namespace Wheel_of_Time___Character_Sheets.Properties { + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if ((resourceMan == null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Wheel_of_Time___Character_Sheets.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Bitmap Hintergrund { + get { + return ((System.Drawing.Bitmap)(ResourceManager.GetObject("Hintergrund", resourceCulture))); + } + } + + internal static System.Drawing.Bitmap wotwebsize { + get { + return ((System.Drawing.Bitmap)(ResourceManager.GetObject("wotwebsize", resourceCulture))); + } + } + } +} diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/Resources.resx b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/Resources.resx new file mode 100644 index 0000000..c1dc688 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Hintergrund.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\wotwebsize.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/Settings.Designer.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/Settings.Designer.cs new file mode 100644 index 0000000..802eb38 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Wheel_of_Time___Character_Sheets.Properties.Settings.get_Default():Wheel_of_Time___Character_Sheets.Properties.Settings")] + +namespace Wheel_of_Time___Character_Sheets.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/Settings.settings b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Splash.Designer.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Splash.Designer.cs new file mode 100644 index 0000000..d80a16c --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Splash.Designer.cs @@ -0,0 +1,64 @@ +namespace Wheel_of_Time___Character_Sheets +{ + partial class Splash + { + /// + /// 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() + { + this.components = new System.ComponentModel.Container(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.SuspendLayout(); + // + // timer1 + // + this.timer1.Enabled = true; + this.timer1.Interval = 1500; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // Splash + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackgroundImage = Wheel_of_Time___Character_Sheets.Properties.Resources.wotwebsize; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ClientSize = new System.Drawing.Size(469, 270); + this.ControlBox = false; + this.Cursor = System.Windows.Forms.Cursors.AppStarting; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "Splash"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Splash"; + this.TopMost = true; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Timer timer1; + } +} \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Splash.cs b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Splash.cs new file mode 100644 index 0000000..207850c --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Splash.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace Wheel_of_Time___Character_Sheets +{ + public partial class Splash : Form + { + public Splash() + { + InitializeComponent(); + } + + private void timer1_Tick(object sender, EventArgs e) + { + this.Close(); + } + } +} \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Splash.resx b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Splash.resx new file mode 100644 index 0000000..3d4835c --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Splash.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/WOT32.ico b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/WOT32.ico new file mode 100644 index 0000000..b060d6d Binary files /dev/null and b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/WOT32.ico differ diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/WOT32.png b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/WOT32.png new file mode 100644 index 0000000..c626cbc Binary files /dev/null and b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/WOT32.png differ diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/WOT64.png b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/WOT64.png new file mode 100644 index 0000000..1c1e906 Binary files /dev/null and b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/WOT64.png differ diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets.csproj b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets.csproj new file mode 100644 index 0000000..c578460 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets.csproj @@ -0,0 +1,131 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {EF1B18F8-E9DA-4C39-8D81-1A4A4B71CD09} + WinExe + Properties + Wheel_of_Time___Character_Sheets + Wheel of Time - Character Sheets + joschicon48.ico + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + AboutBox1.cs + + + + Form + + + ChildWnd.cs + + + Form + + + Form + + + Form + + + Main.cs + + + UserControl + + + Points.cs + + + Form + + + + + AboutBox1.cs + + + ChildWnd.cs + + + Main.cs + + + Points.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + Splash.cs + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + Form + + + Splash.cs + + + Form + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets.csproj.user b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/hannes.ico b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/hannes.ico new file mode 100644 index 0000000..a87dd63 Binary files /dev/null and b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/hannes.ico differ diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/joschicon.ico b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/joschicon.ico new file mode 100644 index 0000000..cbd90fd Binary files /dev/null and b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/joschicon.ico differ diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/joschicon48.ico b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/joschicon48.ico new file mode 100644 index 0000000..b86a879 Binary files /dev/null and b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/joschicon48.ico differ diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/klein.png b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/klein.png new file mode 100644 index 0000000..868197c Binary files /dev/null and b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/klein.png differ diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/wotwebsize.jpg b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/wotwebsize.jpg new file mode 100644 index 0000000..f2f281e Binary files /dev/null and b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/wotwebsize.jpg differ diff --git a/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/wotwebsize.png b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/wotwebsize.png new file mode 100644 index 0000000..63d2cfd Binary files /dev/null and b/Wheel of Time - Character Sheets/Wheel of Time - Character Sheets/wotwebsize.png differ diff --git a/WinXPKeyGen/WinXPKeyGen.sln b/WinXPKeyGen/WinXPKeyGen.sln new file mode 100644 index 0000000..931e900 --- /dev/null +++ b/WinXPKeyGen/WinXPKeyGen.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinXPKeyGen", "WinXPKeyGen\WinXPKeyGen.csproj", "{ABE7E850-ACC9-48AB-ADCF-BF9CBFCB1527}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {ABE7E850-ACC9-48AB-ADCF-BF9CBFCB1527}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ABE7E850-ACC9-48AB-ADCF-BF9CBFCB1527}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ABE7E850-ACC9-48AB-ADCF-BF9CBFCB1527}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ABE7E850-ACC9-48AB-ADCF-BF9CBFCB1527}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/WinXPKeyGen/WinXPKeyGen.suo b/WinXPKeyGen/WinXPKeyGen.suo new file mode 100644 index 0000000..738a58b Binary files /dev/null and b/WinXPKeyGen/WinXPKeyGen.suo differ diff --git a/WinXPKeyGen/WinXPKeyGen/Form1.Designer.cs b/WinXPKeyGen/WinXPKeyGen/Form1.Designer.cs new file mode 100644 index 0000000..b6a504b --- /dev/null +++ b/WinXPKeyGen/WinXPKeyGen/Form1.Designer.cs @@ -0,0 +1,39 @@ +namespace WinXPKeyGen +{ + partial class Form1 + { + /// + /// 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() + { + this.components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Text = "Form1"; + } + + #endregion + } +} + diff --git a/WinXPKeyGen/WinXPKeyGen/Form1.cs b/WinXPKeyGen/WinXPKeyGen/Form1.cs new file mode 100644 index 0000000..41b0fe7 --- /dev/null +++ b/WinXPKeyGen/WinXPKeyGen/Form1.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Management; + +namespace WinXPKeyGen +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + ManagementObjectCollection wmicoll = (new ManagementObjectSearcher("SELECT * FROM Win32_WindowsProductActivation")).Get(); + try + { + foreach (ManagementObject obj in wmicoll) + { + if ((UInt32)obj.Properties["ActivationRequired"].Value == 1) + { + Random ran = new Random(); + int value = Math.Ceiling(ran.NextDouble() * 36); + switch (value) + { + } + obj.InvokeMethod("SetProductKey", new object[] { "HMT4VK8GJHW86HKMBH6DFJV9G" }); + } + } + } + catch (ManagementException me) + { + MessageBox.Show(me.Message); + } + catch (Exception e) + { + MessageBox.Show(e.Message); + } + } + } +} \ No newline at end of file diff --git a/WinXPKeyGen/WinXPKeyGen/Program.cs b/WinXPKeyGen/WinXPKeyGen/Program.cs new file mode 100644 index 0000000..c8035d1 --- /dev/null +++ b/WinXPKeyGen/WinXPKeyGen/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace WinXPKeyGen +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/WinXPKeyGen/WinXPKeyGen/Properties/AssemblyInfo.cs b/WinXPKeyGen/WinXPKeyGen/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..93b180e --- /dev/null +++ b/WinXPKeyGen/WinXPKeyGen/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WinXPKeyGen")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("WinXPKeyGen")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b03de9c0-a670-403c-94bf-bd5756ba6e7d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/WinXPKeyGen/WinXPKeyGen/Properties/Resources.Designer.cs b/WinXPKeyGen/WinXPKeyGen/Properties/Resources.Designer.cs new file mode 100644 index 0000000..b08c65c --- /dev/null +++ b/WinXPKeyGen/WinXPKeyGen/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WinXPKeyGen.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WinXPKeyGen.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/WinXPKeyGen/WinXPKeyGen/Properties/Resources.resx b/WinXPKeyGen/WinXPKeyGen/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/WinXPKeyGen/WinXPKeyGen/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WinXPKeyGen/WinXPKeyGen/Properties/Settings.Designer.cs b/WinXPKeyGen/WinXPKeyGen/Properties/Settings.Designer.cs new file mode 100644 index 0000000..4b3eaab --- /dev/null +++ b/WinXPKeyGen/WinXPKeyGen/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WinXPKeyGen.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/WinXPKeyGen/WinXPKeyGen/Properties/Settings.settings b/WinXPKeyGen/WinXPKeyGen/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/WinXPKeyGen/WinXPKeyGen/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/WinXPKeyGen/WinXPKeyGen/WinXPKeyGen.csproj b/WinXPKeyGen/WinXPKeyGen/WinXPKeyGen.csproj new file mode 100644 index 0000000..b5254f3 --- /dev/null +++ b/WinXPKeyGen/WinXPKeyGen/WinXPKeyGen.csproj @@ -0,0 +1,75 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {ABE7E850-ACC9-48AB-ADCF-BF9CBFCB1527} + WinExe + Properties + WinXPKeyGen + WinXPKeyGen + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + Form + + + Form1.cs + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/fraktal/AssemblyInfo.cs b/fraktal/AssemblyInfo.cs new file mode 100644 index 0000000..dbacda1 --- /dev/null +++ b/fraktal/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/fraktal/Main.cs b/fraktal/Main.cs new file mode 100644 index 0000000..11d38ed --- /dev/null +++ b/fraktal/Main.cs @@ -0,0 +1,20 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 24.01.2005 + * Time: 14:00 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; + +namespace fraktal +{ + class MainClass + { + public static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + } + } +} \ No newline at end of file diff --git a/fraktal/MainForm.cs b/fraktal/MainForm.cs new file mode 100644 index 0000000..c842133 --- /dev/null +++ b/fraktal/MainForm.cs @@ -0,0 +1,206 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 24.01.2005 + * Time: 14:01 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Windows.Forms; + +namespace fraktal +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + public MainForm() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(512, 517); + this.Name = "MainForm"; + this.Text = "MainForm"; + this.Paint += new System.Windows.Forms.PaintEventHandler(this.MainFormPaint); + } + #endregion + + void MainFormPaint(object sender, System.Windows.Forms.PaintEventArgs e) + { + for(int k=1;k<=64;k++) + { + string filename = "c:\\Bit"+k+".bmp"; + Bitmap bit = new Bitmap(filename); + Bitmap frakt = new Bitmap("c:\\Frakt.bmp"); + + int[] Drehung = SetType(bit); + + int width = 4; + + while(width<512) + { + for(int y = 0; y + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fraktal/fraktal.prjx b/fraktal/fraktal.prjx new file mode 100644 index 0000000..33b9d64 --- /dev/null +++ b/fraktal/fraktal.prjx @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ftpupload/AssemblyInfo.cs b/ftpupload/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/ftpupload/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/ftpupload/Main.cs b/ftpupload/Main.cs new file mode 100644 index 0000000..aefba9e --- /dev/null +++ b/ftpupload/Main.cs @@ -0,0 +1,20 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 26.02.2005 + * Time: 10:04 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; + +namespace ftpupload +{ + class MainClass + { + public static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + } + } +} \ No newline at end of file diff --git a/ftpupload/MainForm.cs b/ftpupload/MainForm.cs new file mode 100644 index 0000000..8f33845 --- /dev/null +++ b/ftpupload/MainForm.cs @@ -0,0 +1,51 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 26.02.2005 + * Time: 10:05 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace FTPUpload +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + public MainForm() + { + InitializeComponent(); + + + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + // + // Form1 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(292, 266); + this.Text = "MainForm"; + this.Name = "MainForm"; + } + #endregion + } +} diff --git a/ftpupload/ftpupload.cmbx b/ftpupload/ftpupload.cmbx new file mode 100644 index 0000000..b505ae7 --- /dev/null +++ b/ftpupload/ftpupload.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ftpupload/ftpupload.prjx b/ftpupload/ftpupload.prjx new file mode 100644 index 0000000..78c0f4c --- /dev/null +++ b/ftpupload/ftpupload.prjx @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/hash/AssemblyInfo.cs b/hash/AssemblyInfo.cs new file mode 100644 index 0000000..dbacda1 --- /dev/null +++ b/hash/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/hash/Form1.cs b/hash/Form1.cs new file mode 100644 index 0000000..0b62d99 --- /dev/null +++ b/hash/Form1.cs @@ -0,0 +1,49 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 23.02.2005 + * Time: 13:38 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace hash +{ + /// + /// Description of Form1. + /// + public class Form1 : System.Windows.Forms.Form + { + public static void Main(string[] args) + { + Application.Run(new Form1()); + } + + public Form1() + { + + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + // + // Form1 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(292, 266); + this.Text = "Form1"; + this.Name = "Form1"; + } + #endregion + } +} diff --git a/hash/Main.cs b/hash/Main.cs new file mode 100644 index 0000000..38cb380 --- /dev/null +++ b/hash/Main.cs @@ -0,0 +1,29 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 23.02.2005 + * Time: 12:47 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; + +namespace hash +{ + class MainClass + { + public static void Main(string[] args) + { + + string s="foo"; + Console.WriteLine(s.GetHashCode()); + } + + private void foo() + { + Console.WriteLine("Hallo"); + } + } + + +} diff --git a/hash/MainForm.cs b/hash/MainForm.cs new file mode 100644 index 0000000..54d23b7 --- /dev/null +++ b/hash/MainForm.cs @@ -0,0 +1,56 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 23.02.2005 + * Time: 13:42 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace hash +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + public MainForm() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + // + // Form1 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(292, 266); + this.Text = "MainForm"; + this.Name = "MainForm"; + } + #endregion + } +} \ No newline at end of file diff --git a/hash/convertedProject/AssemblyInfo.vb b/hash/convertedProject/AssemblyInfo.vb new file mode 100644 index 0000000..f064726 --- /dev/null +++ b/hash/convertedProject/AssemblyInfo.vb @@ -0,0 +1,13 @@ +Imports System.Reflection +Imports System.Runtime.CompilerServices + + + + + + + + + + + diff --git a/hash/convertedProject/Form1.vb b/hash/convertedProject/Form1.vb new file mode 100644 index 0000000..4af0e5a --- /dev/null +++ b/hash/convertedProject/Form1.vb @@ -0,0 +1,23 @@ +Imports System +Imports System.Drawing +Imports System.Windows.Forms +Namespace hash + + Public Class Form1 + Inherits System.Windows.Forms.Form + + Public Shared Sub Main(ByVal args As String()) + Application.Run(New Form1) + End Sub + + Public Sub New() + End Sub + + Private Sub InitializeComponent() + Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) + Me.ClientSize = New System.Drawing.Size(292, 266) + Me.Text = "Form1" + Me.Name = "Form1" + End Sub + End Class +End Namespace diff --git a/hash/convertedProject/hash converted.prjx b/hash/convertedProject/hash converted.prjx new file mode 100644 index 0000000..9249a04 --- /dev/null +++ b/hash/convertedProject/hash converted.prjx @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/hash/hash.cmbx b/hash/hash.cmbx new file mode 100644 index 0000000..e34409f --- /dev/null +++ b/hash/hash.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/hash/hash.prjx b/hash/hash.prjx new file mode 100644 index 0000000..951803c --- /dev/null +++ b/hash/hash.prjx @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/md5hash/AssemblyInfo.cs b/md5hash/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/md5hash/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/md5hash/Main.cs b/md5hash/Main.cs new file mode 100644 index 0000000..51af4ec --- /dev/null +++ b/md5hash/Main.cs @@ -0,0 +1,25 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 09.03.2005 + * Time: 15:24 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Security.Cryptography; +using System.Text; + +namespace md5hash +{ + class MainClass + { + public static void Main(string[] args) + { + MD5 md5 = new MD5CryptoServiceProvider(); + ASCIIEncoding encoder = new ASCIIEncoding(); + + Console.WriteLine(encoder.GetString(md5.ComputeHash(encoder.GetBytes("i")))); + } + } +} diff --git a/md5hash/md5hash.cmbx b/md5hash/md5hash.cmbx new file mode 100644 index 0000000..32556af --- /dev/null +++ b/md5hash/md5hash.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/md5hash/md5hash.prjx b/md5hash/md5hash.prjx new file mode 100644 index 0000000..49483cc --- /dev/null +++ b/md5hash/md5hash.prjx @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/netspeed/AssemblyInfo.cs b/netspeed/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/netspeed/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/netspeed/MainForm.cs b/netspeed/MainForm.cs new file mode 100644 index 0000000..fdaed7f --- /dev/null +++ b/netspeed/MainForm.cs @@ -0,0 +1,323 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 25.05.2005 + * Time: 21:00 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Windows.Forms; +using System.Threading; +using System.Net; +using System.IO; + +namespace netspeed +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + private System.Windows.Forms.Panel HGpanel; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Button RunButton; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Button AbortButton; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ProgressBar progress; + + private Thread t = null; + private Thread t2 = null; + + public MainForm() + { + InitializeComponent(); + + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(MainForm)); + this.progress = new System.Windows.Forms.ProgressBar(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.AbortButton = new System.Windows.Forms.Button(); + this.label7 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.RunButton = new System.Windows.Forms.Button(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.HGpanel = new System.Windows.Forms.Panel(); + this.panel1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // progress + // + this.progress.Location = new System.Drawing.Point(8, 24); + this.progress.Name = "progress"; + this.progress.Size = new System.Drawing.Size(232, 24); + this.progress.Step = 1; + this.progress.TabIndex = 6; + // + // label4 + // + this.label4.Location = new System.Drawing.Point(16, 56); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(216, 24); + this.label4.TabIndex = 7; + this.label4.Text = "Vollständig:"; + // + // label5 + // + this.label5.Location = new System.Drawing.Point(16, 56); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(216, 24); + this.label5.TabIndex = 9; + this.label5.Text = "Verbleibend:"; + // + // AbortButton + // + this.AbortButton.Location = new System.Drawing.Point(176, 8); + this.AbortButton.Name = "AbortButton"; + this.AbortButton.Size = new System.Drawing.Size(72, 24); + this.AbortButton.TabIndex = 8; + this.AbortButton.Text = "A&bbrechen"; + this.AbortButton.Click += new System.EventHandler(this.AbortButtonClick); + // + // label7 + // + this.label7.Font = new System.Drawing.Font("Tahoma", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.label7.Location = new System.Drawing.Point(40, 64); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(184, 32); + this.label7.TabIndex = 12; + this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.Red; + this.panel1.Controls.Add(this.HGpanel); + this.panel1.Location = new System.Drawing.Point(272, 8); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(24, 336); + this.panel1.TabIndex = 5; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 24); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(216, 24); + this.label1.TabIndex = 1; + this.label1.Text = "Vergangen:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(16, 40); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(216, 24); + this.label2.TabIndex = 2; + this.label2.Text = "Geschwindigkeit:"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(16, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(216, 23); + this.label3.TabIndex = 3; + this.label3.Text = "Geladen:"; + // + // label6 + // + this.label6.Location = new System.Drawing.Point(16, 88); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(216, 23); + this.label6.TabIndex = 10; + this.label6.Text = "Gesamt:"; + // + // RunButton + // + this.RunButton.Location = new System.Drawing.Point(8, 8); + this.RunButton.Name = "RunButton"; + this.RunButton.Size = new System.Drawing.Size(136, 24); + this.RunButton.TabIndex = 0; + this.RunButton.Text = "&Run Benchmark!"; + this.RunButton.Click += new System.EventHandler(this.RunButtonClick); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.label6); + this.groupBox2.Controls.Add(this.label1); + this.groupBox2.Controls.Add(this.label5); + this.groupBox2.Location = new System.Drawing.Point(8, 224); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(248, 120); + this.groupBox2.TabIndex = 11; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Zeit"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.progress); + this.groupBox1.Location = new System.Drawing.Point(8, 104); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(248, 112); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Fortschritt"; + // + // HGpanel + // + this.HGpanel.BackColor = System.Drawing.Color.White; + this.HGpanel.Location = new System.Drawing.Point(0, 0); + this.HGpanel.Name = "HGpanel"; + this.HGpanel.Size = new System.Drawing.Size(24, 336); + this.HGpanel.TabIndex = 4; + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); + this.ClientSize = new System.Drawing.Size(304, 349); + this.Controls.Add(this.label7); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.AbortButton); + this.Controls.Add(this.label2); + this.Controls.Add(this.RunButton); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "MainForm"; + this.Text = "netspeed"; + this.Closed += new System.EventHandler(this.MainFormClosed); + this.panel1.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + } + #endregion + void RunButtonClick(object sender, System.EventArgs e) + { + RunButton.Enabled = false; + t = new Thread(new ThreadStart(RunBenchmark)); + t.Start(); + } + + void MainFormClosed(object sender, System.EventArgs e) + { + if(t!=null) + { + t.Abort(); + } + if(t2!=null) + { + t2.Abort(); + } + } + + void RunBenchmark() + { + WebClient wc = new WebClient(); + + DateTime before = DateTime.Now; + + t2 = new Thread(new ThreadStart(ShowInfo)); + t2.Start(); + wc.DownloadFile("http://192.168.0.1/test.avi", "test.avi"); + t2.Abort(); + + TimeSpan duration = DateTime.Now.Subtract(before); + + label2.Text = "Geschwindigkeit: "+Math.Round(548672/duration.TotalSeconds).ToString()+" kByte/s\r\n"; + label3.Text = "Geladen: 535.8 MByte"; + + switch(MessageBox.Show("Soll die heruntergeladene Datei gelöscht werden?", "Löschen?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)) { + case DialogResult.Yes: + File.Delete("test.avi"); + break; + case DialogResult.No: + break; + } + + RunButton.Enabled = true; + } + + void ShowInfo() + { + DateTime before = DateTime.Now; + float filesize = 0.0f; + + while(true) + { + FileInfo fi = new FileInfo("test.avi"); + if(fi.Exists) + { + filesize = fi.Length; + } + TimeSpan duration = DateTime.Now.Subtract(before); + label1.Text = "Vergangen: "+TimeSpan.FromSeconds(Math.Round(Convert.ToDouble(duration.TotalSeconds),0)); + if(duration.TotalSeconds!=0) + { + label2.Text = "Geschwindigkeit: "+Math.Round((filesize/1024)/duration.TotalSeconds).ToString()+" kByte/s"; + label7.Text = Math.Round((filesize*0.000008)/duration.TotalSeconds,2).ToString()+" MBit/s"; + label5.Text = "Verbleibend: "+TimeSpan.FromSeconds(Math.Round((535.8-filesize/1048576)/(filesize/1048576/duration.TotalSeconds),0)); + label6.Text = "Gesamt: "+TimeSpan.FromSeconds(Math.Round((535.8)/(filesize/1048576/duration.TotalSeconds),0)); + HGpanel.SetBounds(0,0,24,Convert.ToInt32((1-Math.Round((filesize*0.00000008)/duration.TotalSeconds,2))*336)); + } + label3.Text = "Geladen: "+Math.Round((filesize/1048576),2).ToString()+" MByte von 535.8 MByte"; + label4.Text = "Vollständig: "+Math.Round((((filesize/1048576)/535.8)*100),0).ToString()+"%"; + + progress.Value = Convert.ToInt32((((filesize/1048576)/535.8)*100)); + Thread.Sleep(1000); + } + } + void AbortButtonClick(object sender, System.EventArgs e) + { + if(t!=null) + { + t.Abort(); + } + if(t2!=null) + { + t2.Abort(); + } + RunButton.Enabled = true; + } + + void MainFormLoad(object sender, System.EventArgs e) + { + + } + + void TextBox1TextChanged(object sender, System.EventArgs e) + { + } + + } +} diff --git a/netspeed/NetSpeed.sln b/netspeed/NetSpeed.sln new file mode 100644 index 0000000..513d370 --- /dev/null +++ b/netspeed/NetSpeed.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetSpeed", "NetSpeed\NetSpeed.csproj", "{AAB289C5-8AC3-4CEF-A133-E245C218A844}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AAB289C5-8AC3-4CEF-A133-E245C218A844}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AAB289C5-8AC3-4CEF-A133-E245C218A844}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AAB289C5-8AC3-4CEF-A133-E245C218A844}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AAB289C5-8AC3-4CEF-A133-E245C218A844}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/netspeed/NetSpeed.suo b/netspeed/NetSpeed.suo new file mode 100644 index 0000000..0fe1bc3 Binary files /dev/null and b/netspeed/NetSpeed.suo differ diff --git a/netspeed/NetSpeed/MainForm.cs b/netspeed/NetSpeed/MainForm.cs new file mode 100644 index 0000000..eb39cb2 --- /dev/null +++ b/netspeed/NetSpeed/MainForm.cs @@ -0,0 +1,333 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 25.05.2005 + * Time: 21:00 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Windows.Forms; +using System.Threading; +using System.Net; +using System.IO; + +namespace netspeed +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + private System.Windows.Forms.Panel HGpanel; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Button RunButton; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Button AbortButton; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ProgressBar progress; + + private Thread t = null; + private TextBox textBox1; + private Thread t2 = null; + + public MainForm() + { + InitializeComponent(); + + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.progress = new System.Windows.Forms.ProgressBar(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.AbortButton = new System.Windows.Forms.Button(); + this.label7 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.HGpanel = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.RunButton = new System.Windows.Forms.Button(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.panel1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // progress + // + this.progress.Location = new System.Drawing.Point(6, 19); + this.progress.Name = "progress"; + this.progress.Size = new System.Drawing.Size(232, 23); + this.progress.Step = 1; + this.progress.TabIndex = 6; + // + // label4 + // + this.label4.Location = new System.Drawing.Point(6, 45); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(216, 22); + this.label4.TabIndex = 7; + this.label4.Text = "Vollständig:"; + // + // label5 + // + this.label5.Location = new System.Drawing.Point(6, 39); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(216, 22); + this.label5.TabIndex = 9; + this.label5.Text = "Verbleibend:"; + // + // AbortButton + // + this.AbortButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.AbortButton.Location = new System.Drawing.Point(157, 37); + this.AbortButton.Name = "AbortButton"; + this.AbortButton.Size = new System.Drawing.Size(72, 23); + this.AbortButton.TabIndex = 8; + this.AbortButton.Text = "A&bbrechen"; + this.AbortButton.Click += new System.EventHandler(this.AbortButtonClick); + // + // label7 + // + this.label7.Font = new System.Drawing.Font("Tahoma", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label7.Location = new System.Drawing.Point(37, 104); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(184, 30); + this.label7.TabIndex = 12; + this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.Red; + this.panel1.Controls.Add(this.HGpanel); + this.panel1.Location = new System.Drawing.Point(262, 12); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(24, 312); + this.panel1.TabIndex = 5; + // + // HGpanel + // + this.HGpanel.BackColor = System.Drawing.Color.White; + this.HGpanel.Location = new System.Drawing.Point(0, 0); + this.HGpanel.Name = "HGpanel"; + this.HGpanel.Size = new System.Drawing.Size(24, 312); + this.HGpanel.TabIndex = 4; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(6, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(216, 23); + this.label1.TabIndex = 1; + this.label1.Text = "Vergangen:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(14, 72); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(216, 22); + this.label2.TabIndex = 2; + this.label2.Text = "Geschwindigkeit:"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(6, 67); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(216, 24); + this.label3.TabIndex = 3; + this.label3.Text = "Geladen:"; + // + // label6 + // + this.label6.Location = new System.Drawing.Point(6, 61); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(216, 21); + this.label6.TabIndex = 10; + this.label6.Text = "Gesamt:"; + // + // RunButton + // + this.RunButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.RunButton.Location = new System.Drawing.Point(15, 37); + this.RunButton.Name = "RunButton"; + this.RunButton.Size = new System.Drawing.Size(136, 23); + this.RunButton.TabIndex = 0; + this.RunButton.Text = "&Run Benchmark!"; + this.RunButton.Click += new System.EventHandler(this.RunButtonClick); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.label6); + this.groupBox2.Controls.Add(this.label1); + this.groupBox2.Controls.Add(this.label5); + this.groupBox2.Location = new System.Drawing.Point(8, 237); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(248, 87); + this.groupBox2.TabIndex = 11; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Zeit"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.progress); + this.groupBox1.Location = new System.Drawing.Point(8, 137); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(248, 94); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Fortschritt"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(14, 11); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(235, 20); + this.textBox1.TabIndex = 13; + this.textBox1.Text = "ftp://largedownloads.ea.com/pub/patches/battlefield_1942_patch_v1.6.19.exe"; + // + // MainForm + // + this.ClientSize = new System.Drawing.Size(294, 334); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.label7); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.AbortButton); + this.Controls.Add(this.label2); + this.Controls.Add(this.RunButton); + this.Controls.Add(this.panel1); + this.Name = "MainForm"; + this.Text = "netspeed"; + this.Closed += new System.EventHandler(this.MainFormClosed); + this.panel1.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + #endregion + void RunButtonClick(object sender, System.EventArgs e) + {/* + RunButton.Enabled = false; + t = new Thread(new ThreadStart(RunBenchmark)); + t.Start(); + */ + RunBenchmark(); + } + + void MainFormClosed(object sender, System.EventArgs e) + { + if(t!=null) + { + t.Abort(); + } + if(t2!=null) + { + t2.Abort(); + } + } + + void RunBenchmark() + { + WebClient wc = new WebClient(); + + DateTime before = DateTime.Now; + ShowInfo(); + //t2 = new Thread(new ThreadStart(ShowInfo)); + //t2.Start(); + wc.DownloadFile(textBox1.Text, "FILE"); + //t2.Abort(); + + TimeSpan duration = DateTime.Now.Subtract(before); + + label2.Text = "Geschwindigkeit: "+Math.Round(548672/duration.TotalSeconds).ToString()+" kByte/s\r\n"; + label3.Text = "Geladen: 535.8 MByte"; + + switch(MessageBox.Show("Soll die heruntergeladene Datei gelöscht werden?", "Löschen?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)) { + case DialogResult.Yes: + File.Delete("FILE"); + break; + case DialogResult.No: + break; + } + + RunButton.Enabled = true; + } + + void ShowInfo() + { + DateTime before = DateTime.Now; + float filesize = 0.0f; + + while(true) + { + FileInfo fi = new FileInfo("test.avi"); + if(fi.Exists) + { + filesize = fi.Length; + } + TimeSpan duration = DateTime.Now.Subtract(before); + label1.Text = "Vergangen: "+TimeSpan.FromSeconds(Math.Round(Convert.ToDouble(duration.TotalSeconds),0)); + if(duration.TotalSeconds!=0) + { + label2.Text = "Geschwindigkeit: "+Math.Round((filesize/1024)/duration.TotalSeconds).ToString()+" kByte/s"; + label7.Text = Math.Round((filesize*0.000008)/duration.TotalSeconds,2).ToString()+" MBit/s"; + label5.Text = "Verbleibend: "+TimeSpan.FromSeconds(Math.Round((535.8-filesize/1048576)/(filesize/1048576/duration.TotalSeconds),0)); + label6.Text = "Gesamt: "+TimeSpan.FromSeconds(Math.Round((535.8)/(filesize/1048576/duration.TotalSeconds),0)); + HGpanel.SetBounds(0,0,24,Convert.ToInt32((1-Math.Round((filesize*0.00000008)/duration.TotalSeconds,2))*336)); + } + label3.Text = "Geladen: "+Math.Round((filesize/1048576),2).ToString()+" MByte von 535.8 MByte"; + label4.Text = "Vollständig: "+Math.Round((((filesize/1048576)/535.8)*100),0).ToString()+"%"; + + progress.Value = Convert.ToInt32((((filesize/1048576)/535.8)*100)); + Thread.Sleep(1000); + } + } + void AbortButtonClick(object sender, System.EventArgs e) + { + if(t!=null) + { + t.Abort(); + } + if(t2!=null) + { + t2.Abort(); + } + RunButton.Enabled = true; + } + + void MainFormLoad(object sender, System.EventArgs e) + { + + } + + } +} diff --git a/netspeed/NetSpeed/MainForm.resx b/netspeed/NetSpeed/MainForm.resx new file mode 100644 index 0000000..8f95d66 --- /dev/null +++ b/netspeed/NetSpeed/MainForm.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/netspeed/NetSpeed/NetSpeed.csproj b/netspeed/NetSpeed/NetSpeed.csproj new file mode 100644 index 0000000..3a1af3b --- /dev/null +++ b/netspeed/NetSpeed/NetSpeed.csproj @@ -0,0 +1,66 @@ + + + Debug + AnyCPU + 8.0.50215 + 2.0 + {AAB289C5-8AC3-4CEF-A133-E245C218A844} + WinExe + Properties + NetSpeed + NetSpeed + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + \ No newline at end of file diff --git a/netspeed/NetSpeed/NetSpeed.csproj.user b/netspeed/NetSpeed/NetSpeed.csproj.user new file mode 100644 index 0000000..b180ed9 --- /dev/null +++ b/netspeed/NetSpeed/NetSpeed.csproj.user @@ -0,0 +1,5 @@ + + + 8.0.50215 + + \ No newline at end of file diff --git a/netspeed/NetSpeed/Properties/AssemblyInfo.cs b/netspeed/NetSpeed/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c6fe7e1 --- /dev/null +++ b/netspeed/NetSpeed/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("NetSpeed")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("NetSpeed")] +[assembly: AssemblyCopyright("Copyright 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3cb23aca-eca5-473e-a726-e053807edeec")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/netspeed/NetSpeed/Properties/Resources.Designer.cs b/netspeed/NetSpeed/Properties/Resources.Designer.cs new file mode 100644 index 0000000..bc5f033 --- /dev/null +++ b/netspeed/NetSpeed/Properties/Resources.Designer.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "NetSpeed.Properties.Resources.get_ResourceManager():System.Resources.ResourceManager")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "NetSpeed.Properties.Resources.get_Culture():System.Globalization.CultureInfo")] +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "NetSpeed.Properties.Resources.set_Culture(System.Globalization.CultureInfo):Void")] + +namespace NetSpeed.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NetSpeed.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/netspeed/NetSpeed/Properties/Resources.resx b/netspeed/NetSpeed/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/netspeed/NetSpeed/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/netspeed/NetSpeed/Properties/Settings.Designer.cs b/netspeed/NetSpeed/Properties/Settings.Designer.cs new file mode 100644 index 0000000..7fe6bd1 --- /dev/null +++ b/netspeed/NetSpeed/Properties/Settings.Designer.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50215.44 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "NetSpeed.Properties.Settings.get_Default():NetSpeed.Properties.Settings")] + +namespace NetSpeed.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = new Settings(); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/netspeed/NetSpeed/Properties/Settings.settings b/netspeed/NetSpeed/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/netspeed/NetSpeed/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/netspeed/netspeed.MainForm.resources b/netspeed/netspeed.MainForm.resources new file mode 100644 index 0000000..270d5f8 Binary files /dev/null and b/netspeed/netspeed.MainForm.resources differ diff --git a/netspeed/netspeed.cmbx b/netspeed/netspeed.cmbx new file mode 100644 index 0000000..5e5d5d5 --- /dev/null +++ b/netspeed/netspeed.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/netspeed/netspeed.prjx b/netspeed/netspeed.prjx new file mode 100644 index 0000000..e91c2ac --- /dev/null +++ b/netspeed/netspeed.prjx @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pdfxml/AssemblyInfo.cs b/pdfxml/AssemblyInfo.cs new file mode 100644 index 0000000..0e5b82c --- /dev/null +++ b/pdfxml/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/pdfxml/MainForm.cs b/pdfxml/MainForm.cs new file mode 100644 index 0000000..a52b33e --- /dev/null +++ b/pdfxml/MainForm.cs @@ -0,0 +1,74 @@ +/* + * Created by SharpDevelop. + * User: Johannes + * Date: 25.05.2005 + * Time: 15:47 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Windows.Forms; +using Acrobat; + +namespace pdfxml +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + public MainForm() + { + AcroPDDoc acrodoc=new AcroPDDoc(); + if(acrodoc.Open(@"E:\Quelltexte\pdfxml\bin\Debug\file.pdf")) + { + MessageBox.Show("Öffnen geht"); + } + else + { + MessageBox.Show("Öffnen geht net"); + } + if(acrodoc.Save(1, @"E:\Quelltexte\pdfxml\bin\Debug\new.xml")) + { + MessageBox.Show("Speichern geht"); + } + else + { + MessageBox.Show("Speichern geht net"); + } + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + // + // Form1 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(292, 266); + this.Text = "MainForm"; + this.Name = "MainForm"; + } + #endregion + } +} diff --git a/pdfxml/pdfxml.cmbx b/pdfxml/pdfxml.cmbx new file mode 100644 index 0000000..35e4f8d --- /dev/null +++ b/pdfxml/pdfxml.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pdfxml/pdfxml.prjx b/pdfxml/pdfxml.prjx new file mode 100644 index 0000000..2047bc8 --- /dev/null +++ b/pdfxml/pdfxml.prjx @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plot/AssemblyInfo.cs b/plot/AssemblyInfo.cs new file mode 100644 index 0000000..dbacda1 --- /dev/null +++ b/plot/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/plot/MainForm.cs b/plot/MainForm.cs new file mode 100644 index 0000000..f603218 --- /dev/null +++ b/plot/MainForm.cs @@ -0,0 +1,141 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 25.01.2005 + * Time: 23:07 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Windows.Forms; + +namespace plot +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button1; + public MainForm() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.button1 = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(632, 80); + this.button1.Name = "button1"; + this.button1.TabIndex = 0; + this.button1.Text = "Test"; + this.button1.Click += new System.EventHandler(this.Button1Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(616, 160); + this.label1.Name = "label1"; + this.label1.TabIndex = 1; + this.label1.Text = "label1"; + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(720, 517); + this.Controls.Add(this.label1); + this.Controls.Add(this.button1); + this.Name = "MainForm"; + this.Text = "MainForm"; + this.Paint += new System.Windows.Forms.PaintEventHandler(this.MainFormPaint); + this.ResumeLayout(false); + } + #endregion + void MainFormPaint(object sender, System.Windows.Forms.PaintEventArgs e) + { + Bitmap func = new Bitmap("c:\\plot.bmp"); + + Pen pen = new Pen(Color.Black); + + for(int k=-256;k<256;k++) + { + int y=Convert.ToInt32(Math.Floor(Convert.ToDouble(Math.Pow(k, 2)/102))); + + if(-256<=y&&256>y) + { + func.SetPixel(k+255,255-y, Color.Black); + } + + func.SetPixel(k+256, 255, Color.Black); + } + + for(int k=0; k<511; k++) + { + func.SetPixel(255, k, Color.Black); + } + + e.Graphics.DrawLine(pen, 255, 0, 255, 511); + + e.Graphics.DrawImage(func, 0, 0); + } + + void Button1Click(object sender, System.EventArgs e) + { + label1.Text = ""; + + string foo = "blah, blah, blah name: ich blah, blah"; + + bool found = false; + + short num = 0; + + foreach(char ch in foo) + { + if(ch==Convert.ToChar(":")) + { + found = true; + break; + } + + if(found) + { + label1.Text += ch; + + num++; + + if(num==4) + { + found=false; + } + } + } + } + + } +} diff --git a/plot/plot.MainForm.resources b/plot/plot.MainForm.resources new file mode 100644 index 0000000..c01e510 Binary files /dev/null and b/plot/plot.MainForm.resources differ diff --git a/plot/plot.cmbx b/plot/plot.cmbx new file mode 100644 index 0000000..675bac6 --- /dev/null +++ b/plot/plot.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plot/plot.prjx b/plot/plot.prjx new file mode 100644 index 0000000..0a640ae --- /dev/null +++ b/plot/plot.prjx @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test1/AssemblyInfo.cs b/test1/AssemblyInfo.cs new file mode 100644 index 0000000..dbacda1 --- /dev/null +++ b/test1/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/test1/Form1.cs b/test1/Form1.cs new file mode 100644 index 0000000..8315859 --- /dev/null +++ b/test1/Form1.cs @@ -0,0 +1,51 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 27.10.2004 + * Time: 17:04 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace test1 +{ + /// + /// Description of Form1. + /// + public class Form1 : System.Windows.Forms.Form + { + public Form1() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + // + // Form1 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(292, 266); + this.Text = "Form1"; + this.Name = "Form1"; + } + #endregion + } +} diff --git a/test1/Main.cs b/test1/Main.cs new file mode 100644 index 0000000..6d1e6b0 --- /dev/null +++ b/test1/Main.cs @@ -0,0 +1,22 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 27.10.2004 + * Time: 17:04 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; + +namespace test1 +{ + class MainClass + { + public static void Main(string[] args) + { +// Console.WriteLine("Hello World!"); + Form1 myForm = new Form1(); + myForm.ShowDialog(); + } + } +} diff --git a/test1/test1.cmbx b/test1/test1.cmbx new file mode 100644 index 0000000..76b6292 --- /dev/null +++ b/test1/test1.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test1/test1.prjx b/test1/test1.prjx new file mode 100644 index 0000000..591469d --- /dev/null +++ b/test1/test1.prjx @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test2/Main.cs b/test2/Main.cs new file mode 100644 index 0000000..f5fe3ff --- /dev/null +++ b/test2/Main.cs @@ -0,0 +1,22 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 27.10.2004 + * Time: 17:04 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; + +namespace test1 +{ + class MainClass + { + public static void Main(string[] args) + { +// Console.WriteLine("Hello World!"); +// Form1 myForm = new Form1(); +// myForm.ShowDialog(); + } + } +} diff --git a/test2/test2.cmbx b/test2/test2.cmbx new file mode 100644 index 0000000..ec77665 --- /dev/null +++ b/test2/test2.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test2/test2.prjx b/test2/test2.prjx new file mode 100644 index 0000000..b0acd3b --- /dev/null +++ b/test2/test2.prjx @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test3/AssemblyInfo.cs b/test3/AssemblyInfo.cs new file mode 100644 index 0000000..dbacda1 --- /dev/null +++ b/test3/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/test3/Form1.cs b/test3/Form1.cs new file mode 100644 index 0000000..32e475a --- /dev/null +++ b/test3/Form1.cs @@ -0,0 +1,172 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 27.10.2004 + * Time: 17:19 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace test3 +{ + /// + /// Description of Form1. + /// + public class Form1 : System.Windows.Forms.Form + { + private System.Windows.Forms.StatusBarPanel statusBarPanel1; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Button ButtonCancel; + private System.Windows.Forms.Button ButtonAbort; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button ButtonOK; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.StatusBar statusBar1; + public Form1() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1)); + this.statusBar1 = new System.Windows.Forms.StatusBar(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.ButtonOK = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.ButtonAbort = new System.Windows.Forms.Button(); + this.ButtonCancel = new System.Windows.Forms.Button(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.statusBarPanel1 = new System.Windows.Forms.StatusBarPanel(); + ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).BeginInit(); + this.SuspendLayout(); + // + // statusBar1 + // + this.statusBar1.Location = new System.Drawing.Point(0, 441); + this.statusBar1.Name = "statusBar1"; + this.statusBar1.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] { + this.statusBarPanel1}); + this.statusBar1.ShowPanels = true; + this.statusBar1.Size = new System.Drawing.Size(682, 22); + this.statusBar1.TabIndex = 6; + this.statusBar1.Text = "statusBar1"; + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(96, 232); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(400, 32); + this.progressBar1.Step = 1; + this.progressBar1.TabIndex = 4; + this.progressBar1.Value = 20; + // + // ButtonOK + // + this.ButtonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.ButtonOK.Location = new System.Drawing.Point(496, 408); + this.ButtonOK.Name = "ButtonOK"; + this.ButtonOK.Size = new System.Drawing.Size(80, 24); + this.ButtonOK.TabIndex = 0; + this.ButtonOK.Text = "Weiter >"; + this.ButtonOK.Click += new System.EventHandler(this.ButtonOKClick); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(80, 168); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(144, 24); + this.button1.TabIndex = 5; + this.button1.Text = "Start"; + this.button1.Click += new System.EventHandler(this.Button1Click); + // + // ButtonAbort + // + this.ButtonAbort.DialogResult = System.Windows.Forms.DialogResult.Abort; + this.ButtonAbort.Location = new System.Drawing.Point(592, 408); + this.ButtonAbort.Name = "ButtonAbort"; + this.ButtonAbort.Size = new System.Drawing.Size(80, 24); + this.ButtonAbort.TabIndex = 1; + this.ButtonAbort.Text = "Abbrechen"; + this.ButtonAbort.Click += new System.EventHandler(this.ButtonAbortClick); + // + // ButtonCancel + // + this.ButtonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.ButtonCancel.Enabled = false; + this.ButtonCancel.Location = new System.Drawing.Point(416, 408); + this.ButtonCancel.Name = "ButtonCancel"; + this.ButtonCancel.Size = new System.Drawing.Size(80, 24); + this.ButtonCancel.TabIndex = 2; + this.ButtonCancel.Text = "< Zurck"; + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(688, 80); + this.pictureBox1.TabIndex = 3; + this.pictureBox1.TabStop = false; + // + // statusBarPanel1 + // + this.statusBarPanel1.Text = "statusBarPanel1"; + this.statusBarPanel1.ToolTipText = "StatusBar"; + this.statusBarPanel1.Width = 500; + // + // Form1 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(682, 463); + this.ControlBox = false; + this.Controls.Add(this.statusBar1); + this.Controls.Add(this.button1); + this.Controls.Add(this.progressBar1); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.ButtonCancel); + this.Controls.Add(this.ButtonAbort); + this.Controls.Add(this.ButtonOK); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Name = "Form1"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Schritt Eins"; + ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).EndInit(); + this.ResumeLayout(false); + } + #endregion + + + void ButtonAbortClick(object sender, System.EventArgs e) + { + } + + void ButtonOKClick(object sender, System.EventArgs e) + { + Close(); + } + + void Button1Click(object sender, System.EventArgs e) + { + for(int i=progressBar1.Minimum; i + /// Description of Form2. + /// + public class Form2 : System.Windows.Forms.Form + { + private System.Windows.Forms.Button ButtonOK; + private System.Windows.Forms.Button ButtonCancel; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Button ButtonAbort; + public Form2() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form2)); + this.ButtonAbort = new System.Windows.Forms.Button(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.ButtonCancel = new System.Windows.Forms.Button(); + this.ButtonOK = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // ButtonAbort + // + this.ButtonAbort.DialogResult = System.Windows.Forms.DialogResult.Abort; + this.ButtonAbort.Location = new System.Drawing.Point(592, 424); + this.ButtonAbort.Name = "ButtonAbort"; + this.ButtonAbort.Size = new System.Drawing.Size(80, 24); + this.ButtonAbort.TabIndex = 0; + this.ButtonAbort.Text = "Abbrechen"; + this.ButtonAbort.Click += new System.EventHandler(this.ButtonAbortClick); + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(680, 80); + this.pictureBox1.TabIndex = 1; + this.pictureBox1.TabStop = false; + // + // ButtonCancel + // + this.ButtonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.ButtonCancel.Location = new System.Drawing.Point(416, 424); + this.ButtonCancel.Name = "ButtonCancel"; + this.ButtonCancel.Size = new System.Drawing.Size(80, 24); + this.ButtonCancel.TabIndex = 3; + this.ButtonCancel.Text = "< Zurck"; + this.ButtonCancel.Click += new System.EventHandler(this.ButtonCancelClick); + // + // ButtonOK + // + this.ButtonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.ButtonOK.Location = new System.Drawing.Point(496, 424); + this.ButtonOK.Name = "ButtonOK"; + this.ButtonOK.Size = new System.Drawing.Size(80, 24); + this.ButtonOK.TabIndex = 2; + this.ButtonOK.Text = "Weiter >"; + this.ButtonOK.Click += new System.EventHandler(this.ButtonAbortClick); + // + // Form2 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(682, 463); + this.ControlBox = false; + this.Controls.Add(this.ButtonCancel); + this.Controls.Add(this.ButtonOK); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.ButtonAbort); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Name = "Form2"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Schritt Zwei"; + this.ResumeLayout(false); + } + #endregion + void ButtonAbortClick(object sender, System.EventArgs e) + { + } + + void ButtonCancelClick(object sender, System.EventArgs e) + { + Close(); + } + + void TreeView1AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) + { + + } + + } +} diff --git a/test3/Form3.cs b/test3/Form3.cs new file mode 100644 index 0000000..9e25ac8 --- /dev/null +++ b/test3/Form3.cs @@ -0,0 +1,117 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 03.11.2004 + * Time: 15:10 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace test3 +{ + /// + /// Description of Form3. + /// + public class Form3 : System.Windows.Forms.Form + { + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.PictureBox pictureBox1; + public Form3() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form3)); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(680, 80); + this.pictureBox1.TabIndex = 4; + this.pictureBox1.TabStop = false; + // + // button1 + // + this.button1.DialogResult = System.Windows.Forms.DialogResult.Abort; + this.button1.Enabled = false; + this.button1.Location = new System.Drawing.Point(592, 424); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(80, 24); + this.button1.TabIndex = 1; + this.button1.Text = "Abbrechen"; + // + // button2 + // + this.button2.DialogResult = System.Windows.Forms.DialogResult.OK; + this.button2.Location = new System.Drawing.Point(496, 424); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(80, 24); + this.button2.TabIndex = 2; + this.button2.Text = "Fertigstellen"; + this.button2.Click += new System.EventHandler(this.ButtonOKClick); + // + // button3 + // + this.button3.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.button3.Location = new System.Drawing.Point(416, 424); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(80, 24); + this.button3.TabIndex = 3; + this.button3.Text = "< Zurck"; + this.button3.Click += new System.EventHandler(this.ButtonCancelClick); + // + // Form3 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(682, 463); + this.ControlBox = false; + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.pictureBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Name = "Form3"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Schritt Drei"; + this.ResumeLayout(false); + } + #endregion + void ButtonCancelClick(object sender, System.EventArgs e) + { + Close(); + } + + void ButtonOKClick(object sender, System.EventArgs e) + { + Close(); + } + + } +} diff --git a/test3/MainForm.cs b/test3/MainForm.cs new file mode 100644 index 0000000..d9a0b63 --- /dev/null +++ b/test3/MainForm.cs @@ -0,0 +1,94 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 27.10.2004 + * Time: 17:12 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace test3 +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + public MainForm() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + + public static void openForm1() + { + Form1 myForm = new Form1(); + if(myForm.ShowDialog()==DialogResult.OK) + {openForm2();} + } + + public static void openForm2() + { + Form2 myForm = new Form2(); + + DialogResult Result = myForm.ShowDialog(); + + if(Result==DialogResult.OK) + {openForm3();} + else if(Result==DialogResult.Cancel) + {openForm1();} + } + + public static void openForm3() + { + Form3 myForm = new Form3(); + + DialogResult Result = myForm.ShowDialog(); + + if(Result==DialogResult.Cancel) + {openForm2();} + } + + [STAThread] + public static void Main(string[] args) + { +// Application.Run(new MainForm()); +// Form1 myForm = new Form1(); +// if(myForm.ShowDialog()==DialogResult.OK) +// { +// Form2 myForm2 = new Form2(); +// myForm2.ShowDialog(); +// } + + openForm1(); + + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(292, 266); + this.Name = "MainForm"; + this.Text = "MainForm"; + } + #endregion + } +} diff --git a/test3/test3.Form1.resources b/test3/test3.Form1.resources new file mode 100644 index 0000000..b343fe4 Binary files /dev/null and b/test3/test3.Form1.resources differ diff --git a/test3/test3.Form2.resources b/test3/test3.Form2.resources new file mode 100644 index 0000000..8967dbe Binary files /dev/null and b/test3/test3.Form2.resources differ diff --git a/test3/test3.Form3.resources b/test3/test3.Form3.resources new file mode 100644 index 0000000..50176bc Binary files /dev/null and b/test3/test3.Form3.resources differ diff --git a/test3/test3.MainForm.resources b/test3/test3.MainForm.resources new file mode 100644 index 0000000..bf8d7ca Binary files /dev/null and b/test3/test3.MainForm.resources differ diff --git a/test3/test3.cmbx b/test3/test3.cmbx new file mode 100644 index 0000000..79aa829 --- /dev/null +++ b/test3/test3.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test3/test3.prjx b/test3/test3.prjx new file mode 100644 index 0000000..68a4a21 --- /dev/null +++ b/test3/test3.prjx @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tottis test/AssemblyInfo.cs b/tottis test/AssemblyInfo.cs new file mode 100644 index 0000000..dbacda1 --- /dev/null +++ b/tottis test/AssemblyInfo.cs @@ -0,0 +1,32 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes specify the key for the sign of your assembly. See the +// .NET Framework documentation for more information about signing. +// This is not required, if you don't want signing let these attributes like they're. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] diff --git a/tottis test/MainForm.cs b/tottis test/MainForm.cs new file mode 100644 index 0000000..105aac4 --- /dev/null +++ b/tottis test/MainForm.cs @@ -0,0 +1,56 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 27.01.2005 + * Time: 18:12 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace tottis test +{ + /// + /// Description of MainForm. + /// + public class MainForm : System.Windows.Forms.Form + { + public MainForm() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainForm()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + // + // Form1 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(292, 266); + this.Text = "MainForm"; + this.Name = "MainForm"; + } + #endregion + } +} \ No newline at end of file diff --git a/tottis test/tottis test.cmbx b/tottis test/tottis test.cmbx new file mode 100644 index 0000000..fbb9805 --- /dev/null +++ b/tottis test/tottis test.cmbx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tottis test/tottis test.prjx b/tottis test/tottis test.prjx new file mode 100644 index 0000000..17d40bb --- /dev/null +++ b/tottis test/tottis test.prjx @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ubbParser/ubbParser.sln b/ubbParser/ubbParser.sln new file mode 100644 index 0000000..fda1817 --- /dev/null +++ b/ubbParser/ubbParser.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual C# Express 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ubbParser", "ubbParser\ubbParser.csproj", "{C4F5A98F-E986-47C1-BF50-EE72B95F8AD3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C4F5A98F-E986-47C1-BF50-EE72B95F8AD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C4F5A98F-E986-47C1-BF50-EE72B95F8AD3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C4F5A98F-E986-47C1-BF50-EE72B95F8AD3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C4F5A98F-E986-47C1-BF50-EE72B95F8AD3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ubbParser/ubbParser.suo b/ubbParser/ubbParser.suo new file mode 100644 index 0000000..0e7ee02 Binary files /dev/null and b/ubbParser/ubbParser.suo differ diff --git a/ubbParser/ubbParser/Form1.Designer.cs b/ubbParser/ubbParser/Form1.Designer.cs new file mode 100644 index 0000000..73b2bac --- /dev/null +++ b/ubbParser/ubbParser/Form1.Designer.cs @@ -0,0 +1,87 @@ +namespace ubbParser +{ + partial class Form1 + { + /// + /// 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() + { + this.textBox1 = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // textBox1 + // + this.textBox1.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox1.Location = new System.Drawing.Point(0, 0); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(366, 129); + this.textBox1.TabIndex = 0; + // + // button1 + // + this.button1.Dock = System.Windows.Forms.DockStyle.Top; + this.button1.Location = new System.Drawing.Point(0, 129); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(366, 23); + this.button1.TabIndex = 1; + this.button1.Text = "button1"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // textBox2 + // + this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox2.Location = new System.Drawing.Point(0, 152); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(366, 178); + this.textBox2.TabIndex = 2; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(366, 330); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.button1); + this.Controls.Add(this.textBox1); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TextBox textBox2; + } +} + diff --git a/ubbParser/ubbParser/Form1.cs b/ubbParser/ubbParser/Form1.cs new file mode 100644 index 0000000..81353e6 --- /dev/null +++ b/ubbParser/ubbParser/Form1.cs @@ -0,0 +1,476 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; + +namespace ubbParser +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + textBox2.Text = DateTime.Now.ToLongDateString(); + //textBox2.Text = DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day + " " + DateTime.Now.ToShortTimeString();//GetFormattedText(textBox1.Text); + } + + public string GetFormattedText(string text) + { + DateTime bevore = DateTime.Now; + int normalTextBeginn = 0; + string normalText = ""; + for (int i = 0; i < text.Length; i++) + { + if (text[i] == '[') //erkenne mglichen Tag anfang + { + int startTagStart = i; + int startTagEnd = text.IndexOf(']', i); + if (startTagEnd != -1) + { + string parameter = ""; + string ubbTag = GetUbbTag(text.Substring(startTagStart, startTagEnd + 1 - startTagStart), out parameter); + if (ubbTag != "") //ubb Tag? + { + //existiert ein gleicher Tag innerhalb? Erhalte den wahren EndTag + int endTagStart = startTagEnd + 1 + GetEndTagStart(ubbTag, text.Substring(startTagEnd + 1, text.Length - (startTagEnd + 1))); + + if (endTagStart != startTagEnd) //existiert eine TagEnde? + { + int endTagEnd = endTagStart + ("[/" + ubbTag + "]").Length; + string html = ""; + + switch (ubbTag) + { + case "b": + html = Schachtel( + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)), + ""); + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "i": + html = Schachtel( + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)), + ""); + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "u": + html = Schachtel( + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)), + ""); + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "color": + html = Schachtel( + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)), + ""); + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "size": + html = Schachtel( + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)), + ""); + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "img": + html = "\"""; + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "url": + if (parameter == "") + { + html = "
" + + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)) + + ""; + } + else + { + html = "" + + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)) + + ""; + } + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "email": + html = "" + + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)) + + ""; + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "code": + html = "
" + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)) + "
"; + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "quote": + html = "
" + + "Zitat von: " + + parameter + "
" + + TextParser(text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1))) + + "
"; + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "list": + switch (parameter) + { + case "1": + html = "
    "; + html += ParseList(text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1))); + html += "
"; + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "a": + html = "
    "; + html += ParseList(text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1))); + html += "
"; + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + default: + html = "
    "; + html += ParseList(text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1))); + html += "
"; + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + } + break; + } + normalText = text.Substring(normalTextBeginn, startTagStart - normalTextBeginn); + normalText = ReplaceHyperlinks(normalText); + normalText = normalText.Replace("\r\n", "
"); + text = text.Remove(normalTextBeginn, startTagStart - normalTextBeginn); + text = text.Insert(normalTextBeginn, normalText); + i = normalTextBeginn + normalText.Length + html.Length - 1; + normalTextBeginn = i; + } + } + } + } + } + normalText = text.Substring(normalTextBeginn, text.Length - normalTextBeginn); + normalText = ReplaceHyperlinks(normalText); + normalText = normalText.Replace("\r\n", "
"); + text = text.Remove(normalTextBeginn, text.Length - normalTextBeginn); + text = text.Insert(normalTextBeginn, normalText); + + return text + (DateTime.Now - bevore).Milliseconds; + } + + private string ParseList(string list) + { + string[] tokens = list.Split(new string[] { "[*]" }, StringSplitOptions.RemoveEmptyEntries); + list = ""; + foreach (string item in tokens) + { + list += "
  • " + TextParser(item) + "
  • "; + } + + return list; + } + + private string ReplaceHyperlinks(string text) + { + for (int i = 0; i < text.Length; i++) + { + int hyperlinkStart = text.IndexOf("http://", i); + if (hyperlinkStart != -1) + { + Regex whitespace = new Regex(@"\s"); + Match mwhitespace = whitespace.Match(text, hyperlinkStart + 6); + string url = ""; + if (mwhitespace.Success) + { + url = text.Substring(hyperlinkStart, mwhitespace.Index - hyperlinkStart); + text = text.Remove(hyperlinkStart, mwhitespace.Index - hyperlinkStart); + text = text.Insert(hyperlinkStart, "" + url + ""); + i = hyperlinkStart + 2*url.Length + 15; + } + else + { + url = text.Substring(hyperlinkStart, text.Length - hyperlinkStart); + text = text.Remove(hyperlinkStart, text.Length - hyperlinkStart); + text = text.Insert(hyperlinkStart, "" + url + ""); + i = hyperlinkStart + 2 * url.Length + 15; + } + } + else + { + break; + } + } + return text; + } + + private string GetUbbTag(string text, out string parameter) + { + string result = ""; + parameter = ""; + text = text.Substring(1, text.Length - 2); //Klammern entfernen + + string[] token = text.Split(new char[] { '=' }, 2); //Teile in zwei teile - dies beugt vor, dass geteilt wird wenn ein = in einer url ist + + if (token[0] == "b" + || token[0] == "u" + || token[0] == "i" + || token[0] == "color" + || token[0] == "size" + || token[0] == "quote" + || token[0] == "code" + || token[0] == "list" + || token[0] == "url" + || token[0] == "email" + || token[0] == "img") + { + result = token[0]; + + if (token.Length == 2) + { + parameter = token[1]; + } + } + + return token[0]; + } + + private string Schachtel(string innerCode, string html) //nur dafr da geschachtelte UBBs zu einem span zusammen zu fassen + { + if (innerCode.Length > 0 && innerCode[0] == '[') + { + int startTagEnd = innerCode.IndexOf(']'); + string parameter = ""; + string ubbTag = GetUbbTag(innerCode.Substring(0, startTagEnd + 1), out parameter); + if (ubbTag != "" + && (ubbTag == "b" + || ubbTag == "i" + || ubbTag == "u" + || ubbTag == "color" + || ubbTag == "size")) + { + int endTagStart = startTagEnd + 1 + GetEndTagStart(ubbTag, innerCode.Substring(startTagEnd + 1, innerCode.Length - (startTagEnd + 1))); + if (endTagStart + ("[/" + ubbTag + "]").Length == innerCode.Length) //berprfen ob endtag am ende liegt + { + switch (ubbTag) + { + case "b": + innerCode = innerCode.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)); + html = html.Insert(html.Length - 9, "font-weight:bold; "); + html = Schachtel(innerCode, html); + break; + case "i": + innerCode = innerCode.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)); + html = html.Insert(html.Length - 9, "font-style:italic; "); + html = Schachtel(innerCode, html); + break; + case "u": + innerCode = innerCode.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)); + html = html.Insert(html.Length - 9, "text-decoration:underline; "); + html = Schachtel(innerCode, html); + break; + case "color": + innerCode = innerCode.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)); + html = html.Insert(html.Length - 9, "color:" + parameter + "; "); + html = Schachtel(innerCode, html); + break; + case "size": + innerCode = innerCode.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)); + html = html.Insert(html.Length - 9, "font-size:" + parameter + "px; "); + html = Schachtel(innerCode, html); + break; + } + } + else + { + html = html.Insert(html.Length - "".Length, TextParser(innerCode)); + } + } + else + { + html = html.Insert(html.Length - "".Length, TextParser(innerCode)); + } + } + else + { + html = html.Insert(html.Length - "".Length, TextParser(innerCode)); + } + //wenn was schief luft, ist der code halt nicht geschachtelt und es wird normal weiter gemacht + + return html; + } + + private string TextParser(string text) //genereller Parser fr innerCode + { + int textBeginn = 0; + string normalText = ""; + for (int i = 0; i < text.Length; i++) + { + if (text[i] == '[') //erkenne mglichen Tag anfang + { + int startTagStart = i; + int startTagEnd = text.IndexOf(']', i); + if (startTagEnd != -1) + { + string parameter = ""; + string ubbTag = GetUbbTag(text.Substring(startTagStart, startTagEnd + 1 - startTagStart), out parameter); + if (ubbTag != "") //ubb Tag? + { + int endTagStart = startTagEnd + 1 + GetEndTagStart(ubbTag, text.Substring(startTagEnd + 1, text.Length - (startTagEnd + 1))); + if (endTagStart != startTagEnd) //existiert eine TagEnde? + { + int endTagEnd = endTagStart + ("[/" + ubbTag + "]").Length; + string html = ""; + + switch (ubbTag) + { + case "b": + html = Schachtel( + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)), + ""); + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "i": + html = Schachtel( + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)), + ""); + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "u": + html = Schachtel( + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)), + ""); + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "color": + html = Schachtel( + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)), + ""); + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "size": + html = Schachtel( + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)), + ""); + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "img": + html = "\"""; + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "url": + if (parameter == "") + { + html = "" + + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)) + + ""; + } + else + { + html = "" + + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)) + + ""; + } + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "email": + html = "" + + text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1)) + + ""; + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + case "quote": + html = "
    " + + "Zitat von: " + + parameter + "
    " + + TextParser(text.Substring(startTagEnd + 1, endTagStart - (startTagEnd + 1))) + + "
    "; + text = text.Remove(startTagStart, endTagEnd - startTagStart); + text = text.Insert(startTagStart, html); + break; + } + normalText = text.Substring(textBeginn, startTagStart - textBeginn); + normalText = ReplaceHyperlinks(normalText); + normalText = normalText.Replace("\r\n", "
    "); + text = text.Remove(textBeginn, startTagStart - textBeginn); + text = text.Insert(textBeginn, normalText); + i = textBeginn + normalText.Length + html.Length - 1; + textBeginn = i; + } + } + } + } + } + + normalText = text.Substring(textBeginn, text.Length - textBeginn); + normalText = ReplaceHyperlinks(normalText); + normalText = normalText.Replace("\r\n", "
    "); + text = text.Remove(textBeginn, text.Length - textBeginn); + text = text.Insert(textBeginn, normalText); + return text; + } + + private int GetEndTagStart(string ubbCode, string text) + { + int firstEndTag = text.IndexOf("[/" + ubbCode + "]"); + for (int i = 0; i < text.Length; i++) + { + int startTagStart = text.IndexOf("["+ubbCode,i); + if (startTagStart != -1) + { + int startTagEnd = text.IndexOf("]", startTagStart); + if (startTagStart < firstEndTag) + { + int endTagStart = startTagEnd + 1 + GetEndTagStart(ubbCode, text.Substring(startTagEnd + 1, text.Length - (startTagEnd + 1))); + firstEndTag = text.IndexOf("[/" + ubbCode + "]", endTagStart + ("[/" + ubbCode + "]").Length); + i = endTagStart + ("[/" + ubbCode + "]").Length; + } + } + } + return firstEndTag; + } + } +} \ No newline at end of file diff --git a/ubbParser/ubbParser/Form1.resx b/ubbParser/ubbParser/Form1.resx new file mode 100644 index 0000000..ff31a6d --- /dev/null +++ b/ubbParser/ubbParser/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ubbParser/ubbParser/Program.cs b/ubbParser/ubbParser/Program.cs new file mode 100644 index 0000000..db91837 --- /dev/null +++ b/ubbParser/ubbParser/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace ubbParser +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/ubbParser/ubbParser/Properties/AssemblyInfo.cs b/ubbParser/ubbParser/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..52e9a1e --- /dev/null +++ b/ubbParser/ubbParser/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ubbParser")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ubbParser")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("558cd730-8e7c-4b9d-bcb7-cab99c07fe98")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ubbParser/ubbParser/Properties/Resources.Designer.cs b/ubbParser/ubbParser/Properties/Resources.Designer.cs new file mode 100644 index 0000000..2b702e2 --- /dev/null +++ b/ubbParser/ubbParser/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ubbParser.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ubbParser.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/ubbParser/ubbParser/Properties/Resources.resx b/ubbParser/ubbParser/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/ubbParser/ubbParser/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ubbParser/ubbParser/Properties/Settings.Designer.cs b/ubbParser/ubbParser/Properties/Settings.Designer.cs new file mode 100644 index 0000000..7e3ccf0 --- /dev/null +++ b/ubbParser/ubbParser/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ubbParser.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/ubbParser/ubbParser/Properties/Settings.settings b/ubbParser/ubbParser/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/ubbParser/ubbParser/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ubbParser/ubbParser/ubbParser.csproj b/ubbParser/ubbParser/ubbParser.csproj new file mode 100644 index 0000000..147ed36 --- /dev/null +++ b/ubbParser/ubbParser/ubbParser.csproj @@ -0,0 +1,78 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {C4F5A98F-E986-47C1-BF50-EE72B95F8AD3} + WinExe + Properties + ubbParser + ubbParser + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/viwotour 2/About.cs b/viwotour 2/About.cs new file mode 100644 index 0000000..f60ff3f --- /dev/null +++ b/viwotour 2/About.cs @@ -0,0 +1,85 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 24.11.2004 + * Time: 23:01 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace ViwoTour +{ + /// + /// Description of About. + /// + public class About : System.Windows.Forms.Form + { + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label3; + public About() + { + InitializeComponent(); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(About)); + this.label3 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label3 + // + this.label3.Location = new System.Drawing.Point(32, 88); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(216, 24); + this.label3.TabIndex = 2; + this.label3.Text = "Johannes Schauer (J.Schauer@web.de)"; + // + // label1 + // + this.label1.Font = new System.Drawing.Font("Tahoma", 14.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(144, 24); + this.label1.TabIndex = 0; + this.label1.Text = "Viwotour by"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 56); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(184, 24); + this.label2.TabIndex = 1; + this.label2.Text = "Adam Reichold (aputze@uni.de)"; + // + // About + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); + this.ClientSize = new System.Drawing.Size(304, 135); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "About"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "ber..."; + this.ResumeLayout(false); + } + #endregion + } +} diff --git a/viwotour 2/AssemblyInfo.cs b/viwotour 2/AssemblyInfo.cs new file mode 100644 index 0000000..2f43cf8 --- /dev/null +++ b/viwotour 2/AssemblyInfo.cs @@ -0,0 +1,12 @@ +using System.Reflection; + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ViwoTour")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +[assembly: AssemblyVersion("1.0.*")] diff --git a/viwotour 2/Baumansicht.ico b/viwotour 2/Baumansicht.ico new file mode 100644 index 0000000..9786f19 Binary files /dev/null and b/viwotour 2/Baumansicht.ico differ diff --git a/viwotour 2/CourseBook.cs b/viwotour 2/CourseBook.cs new file mode 100644 index 0000000..19d279d --- /dev/null +++ b/viwotour 2/CourseBook.cs @@ -0,0 +1,61 @@ +/* + * User: aputze + * Date: 03.11.2004 + * Time: 11:09 + */ + +using System; +using System.Collections; + +using System.Data; + +namespace ViwoTour { + public class CourseBook : DataTable { + ArrayList ID_Of_Rows; + ArrayList STATION_Of_Rows; + + public CourseBook() : base("COURSE_BOOK") { + Columns.Add(new DataColumn("ID",typeof(int))); + Columns.Add(new DataColumn("DEPARTUR",typeof(DateTime))); + Columns.Add(new DataColumn("DEPARTURE_STATION",typeof(string))); + Columns.Add(new DataColumn("ARRIVAL",typeof(DateTime))); + Columns.Add(new DataColumn("ARRIVAL_STATION",typeof(string))); + } + + public ArrayList get_ID_Of_Rows() { return ID_Of_Rows; } + public ArrayList get_STATION_Of_Rows() { return STATION_Of_Rows; } + + public void create_ID_Of_Rows() { + ID_Of_Rows=new ArrayList(); + + foreach(DataRow row in Rows) { + if(!ID_Of_Rows.Contains(row["ID"])) { + ID_Of_Rows.Add(row["ID"]); + } + } + } + public void create_STATION_Of_Rows() { + STATION_Of_Rows=new ArrayList(); + + ArrayList DEPARTURE_STATION_Of_Rows=new ArrayList(); + foreach(DataRow row in Rows) { + if(!DEPARTURE_STATION_Of_Rows.Contains(row["DEPARTURE_STATION"])) { + DEPARTURE_STATION_Of_Rows.Add(row["DEPARTURE_STATION"]); + } + } + + ArrayList ARRIVAL_STATION_Of_Rows=new ArrayList(); + foreach(DataRow row in Rows) { + if(!ARRIVAL_STATION_Of_Rows.Contains(row["ARRIVAL_STATION"])) { + ARRIVAL_STATION_Of_Rows.Add(row["ARRIVAL_STATION"]); + } + } + + foreach(string s in DEPARTURE_STATION_Of_Rows) { + if(ARRIVAL_STATION_Of_Rows.Contains(s)) { + STATION_Of_Rows.Add(s); + } + } + } + } +} diff --git a/viwotour 2/CoursePlan.cs b/viwotour 2/CoursePlan.cs new file mode 100644 index 0000000..b288c51 --- /dev/null +++ b/viwotour 2/CoursePlan.cs @@ -0,0 +1,53 @@ +/* + * User: aputze + * Date: 03.11.2004 + * Time: 11:11 + */ + +using System; +using System.Collections; + +using System.Data; + +namespace ViwoTour { + public class CoursePlan : DataTable { + Hashtable Rows_By_DEPARTURE_STATION; + Hashtable Rows_By_ARRIVAL_STATION; + + public CoursePlan() : base("COURSE_PLAN") { + Columns.Add(new DataColumn("ID",typeof(int))); + Columns.Add(new DataColumn("DEPARTURE",typeof(DateTime))); + Columns.Add(new DataColumn("DEPARTURE_STATION",typeof(string))); + Columns.Add(new DataColumn("ARRIVAL",typeof(DateTime))); + Columns.Add(new DataColumn("ARRIVAL_STATION",typeof(string))); + } + + public ArrayList get_Rows_By_DEPARTURE_STATION(string s) { return (ArrayList)Rows_By_DEPARTURE_STATION[s]; } + public ArrayList get_Rows_By_ARRIVAL_STATION(string s) { return (ArrayList)Rows_By_ARRIVAL_STATION[s]; } + + public void create_Rows_By_DEPARTURE_STATION() { + Rows_By_DEPARTURE_STATION=new Hashtable(); + + for(int i=0;i=Properties.Edge.MinimalDuration && + (v2.vertexData.Departure-v1.vertexData.Arrival)<=Properties.Edge.MaximalDuration) { + EdgeData edgeData=new EdgeData(); + edgeData.Duration=v2.vertexData.Departure-v1.vertexData.Arrival; + + Edge e=new Edge(edgeData); + e.v1=v1; + e.v2=v2; + E.Add(e); + + v1.outboundDegree++; + v2.inboundDegree++; + } + } + } + + foreach(Vertex v in V) { + if(!V_By_DepartureStation.Contains(v.vertexData.DepartureStation)) { V_By_DepartureStation.Add(v.vertexData.DepartureStation,new ArrayList()); } + ((ArrayList)V_By_DepartureStation[v.vertexData.DepartureStation]).Add(v); + + + if(!V_By_ArrivalStation.Contains(v.vertexData.ArrivalStation)) { V_By_ArrivalStation.Add(v.vertexData.ArrivalStation,new ArrayList()); } + ((ArrayList)V_By_ArrivalStation[v.vertexData.ArrivalStation]).Add(v); + } + + foreach(Edge e in E) { + if(!E_By_v1.Contains(e.v1)) { E_By_v1.Add(e.v1,new ArrayList()); } + ((ArrayList)E_By_v1[e.v1]).Add(e); + + if(!E_By_v2.Contains(e.v2)) { E_By_v2.Add(e.v2,new ArrayList()); } + ((ArrayList)E_By_v2[e.v2]).Add(e); + } + } + } +} diff --git a/viwotour 2/Icon.bmp b/viwotour 2/Icon.bmp new file mode 100644 index 0000000..a3b80f2 Binary files /dev/null and b/viwotour 2/Icon.bmp differ diff --git a/viwotour 2/Icon.ico b/viwotour 2/Icon.ico new file mode 100644 index 0000000..ba227b7 Binary files /dev/null and b/viwotour 2/Icon.ico differ diff --git a/viwotour 2/MainForm.cs b/viwotour 2/MainForm.cs new file mode 100644 index 0000000..1b6f06c --- /dev/null +++ b/viwotour 2/MainForm.cs @@ -0,0 +1,826 @@ +/* + * User: aputze + * Date: 14.11.2004 + * Time: 14:01 + */ + +using System; +using System.Collections; + +using System.Data; +using System.Threading; + +using System.Windows.Forms; + +namespace ViwoTour { + public class MainForm : System.Windows.Forms.Form { + private System.Windows.Forms.TextBox scopeTextBox; + private System.Windows.Forms.Label toursLabel; + private System.Windows.Forms.Label maxWaitingLabel; + private System.Windows.Forms.TextBox productivity_TouringTextBox; + private System.Windows.Forms.TabControl tabControl; + private System.Windows.Forms.Label nonProductiveTouringLabel; + private System.Windows.Forms.Button summaryButton; + private System.Windows.Forms.MenuItem search_TMenuItem; + private System.Windows.Forms.Label search_TLabel; + private System.Windows.Forms.TextBox nonTouredRowsTextBox; + private System.Windows.Forms.Label productivity_TouringLabel; + private System.Windows.Forms.TextBox dataSourceTextBox; + private System.Windows.Forms.MenuItem storeMenuItem; + private System.Windows.Forms.MenuItem sqlMenuItem; + private System.Windows.Forms.Label select_TLabel; + private System.Windows.Forms.ListBox nonTouredRowsListBox; + private System.Windows.Forms.TextBox productivity_RowsTextBox; + private System.Windows.Forms.TextBox initialCatalogTextBox; + private System.Windows.Forms.CheckedListBox stationCheckedListBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox nonProductiveTouringTextBox; + private System.Windows.Forms.TabPage sqlTabPage; + private System.Windows.Forms.TextBox productiveTouringTextBox; + private System.Windows.Forms.TextBox maxTouringTextBox; + private System.Windows.Forms.Label productivity_RowsLabel; + private System.Windows.Forms.TextBox touredRowsTextBox; + private System.Windows.Forms.TabPage propertiesTabPage; + private System.Windows.Forms.MenuItem graphMenuItem; + private System.Windows.Forms.StatusBar statusBar; + private System.Windows.Forms.TabPage summaryTabPage; + private System.Windows.Forms.TextBox nonProductiveRowsTextBox; + private System.Windows.Forms.ListBox touredRowsListBox; + private System.Windows.Forms.TabPage stationTabPage; + private System.Windows.Forms.Label scopeLabel; + private System.Windows.Forms.MenuItem select_TMenuItem; + private System.Windows.Forms.MenuItem disconnectMenuItem; + private System.Windows.Forms.Label dataSourceLabel; + private System.Windows.Forms.Label touredRowsLabel; + private System.Windows.Forms.ProgressBar select_TProgressBar; + private System.Windows.Forms.Label productiveTouringLabel; + private System.Windows.Forms.Label initialCatalogLabel; + private System.Windows.Forms.TextBox maxWaitingTextBox; + private System.Windows.Forms.TextBox minWaitingTextBox; + private System.Windows.Forms.MenuItem create_AMenuItem; + private System.Windows.Forms.TextBox toursTextBox; + private System.Windows.Forms.TextBox productiveRowsTextBox; + private System.Windows.Forms.MenuItem loadMenuItem; + private System.Windows.Forms.Label minWaitingLabel; + private System.Windows.Forms.MenuItem connectMenuItem; + private System.Windows.Forms.MainMenu mainMenu; + private System.Windows.Forms.TabPage progressTabPage; + private System.Windows.Forms.Label maxTouringLabel; + private System.Windows.Forms.Label productiveRowsLabel; + private System.Windows.Forms.ProgressBar search_TProgressBar; + private System.Windows.Forms.MenuItem prepareMenuItem; + + private ViwoTour viwoTour; + + public MainForm() { + InitializeComponent(); + + viwoTour=new ViwoTour(); + viwoTour.search_TProgress+=new ProgressHandler(Search_TProgress); + viwoTour.select_TProgress+=new ProgressHandler(Select_TProgress); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.prepareMenuItem = new System.Windows.Forms.MenuItem(); + this.search_TProgressBar = new System.Windows.Forms.ProgressBar(); + this.productiveRowsLabel = new System.Windows.Forms.Label(); + this.maxTouringLabel = new System.Windows.Forms.Label(); + this.progressTabPage = new System.Windows.Forms.TabPage(); + this.mainMenu = new System.Windows.Forms.MainMenu(); + this.connectMenuItem = new System.Windows.Forms.MenuItem(); + this.minWaitingLabel = new System.Windows.Forms.Label(); + this.loadMenuItem = new System.Windows.Forms.MenuItem(); + this.productiveRowsTextBox = new System.Windows.Forms.TextBox(); + this.toursTextBox = new System.Windows.Forms.TextBox(); + this.create_AMenuItem = new System.Windows.Forms.MenuItem(); + this.minWaitingTextBox = new System.Windows.Forms.TextBox(); + this.maxWaitingTextBox = new System.Windows.Forms.TextBox(); + this.initialCatalogLabel = new System.Windows.Forms.Label(); + this.productiveTouringLabel = new System.Windows.Forms.Label(); + this.select_TProgressBar = new System.Windows.Forms.ProgressBar(); + this.touredRowsLabel = new System.Windows.Forms.Label(); + this.dataSourceLabel = new System.Windows.Forms.Label(); + this.disconnectMenuItem = new System.Windows.Forms.MenuItem(); + this.select_TMenuItem = new System.Windows.Forms.MenuItem(); + this.scopeLabel = new System.Windows.Forms.Label(); + this.stationTabPage = new System.Windows.Forms.TabPage(); + this.touredRowsListBox = new System.Windows.Forms.ListBox(); + this.nonProductiveRowsTextBox = new System.Windows.Forms.TextBox(); + this.summaryTabPage = new System.Windows.Forms.TabPage(); + this.statusBar = new System.Windows.Forms.StatusBar(); + this.graphMenuItem = new System.Windows.Forms.MenuItem(); + this.propertiesTabPage = new System.Windows.Forms.TabPage(); + this.touredRowsTextBox = new System.Windows.Forms.TextBox(); + this.productivity_RowsLabel = new System.Windows.Forms.Label(); + this.maxTouringTextBox = new System.Windows.Forms.TextBox(); + this.productiveTouringTextBox = new System.Windows.Forms.TextBox(); + this.sqlTabPage = new System.Windows.Forms.TabPage(); + this.nonProductiveTouringTextBox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.stationCheckedListBox = new System.Windows.Forms.CheckedListBox(); + this.initialCatalogTextBox = new System.Windows.Forms.TextBox(); + this.productivity_RowsTextBox = new System.Windows.Forms.TextBox(); + this.nonTouredRowsListBox = new System.Windows.Forms.ListBox(); + this.select_TLabel = new System.Windows.Forms.Label(); + this.sqlMenuItem = new System.Windows.Forms.MenuItem(); + this.storeMenuItem = new System.Windows.Forms.MenuItem(); + this.dataSourceTextBox = new System.Windows.Forms.TextBox(); + this.productivity_TouringLabel = new System.Windows.Forms.Label(); + this.nonTouredRowsTextBox = new System.Windows.Forms.TextBox(); + this.search_TLabel = new System.Windows.Forms.Label(); + this.search_TMenuItem = new System.Windows.Forms.MenuItem(); + this.summaryButton = new System.Windows.Forms.Button(); + this.nonProductiveTouringLabel = new System.Windows.Forms.Label(); + this.tabControl = new System.Windows.Forms.TabControl(); + this.productivity_TouringTextBox = new System.Windows.Forms.TextBox(); + this.maxWaitingLabel = new System.Windows.Forms.Label(); + this.toursLabel = new System.Windows.Forms.Label(); + this.scopeTextBox = new System.Windows.Forms.TextBox(); + this.progressTabPage.SuspendLayout(); + this.stationTabPage.SuspendLayout(); + this.summaryTabPage.SuspendLayout(); + this.propertiesTabPage.SuspendLayout(); + this.sqlTabPage.SuspendLayout(); + this.tabControl.SuspendLayout(); + this.SuspendLayout(); + // + // prepareMenuItem + // + this.prepareMenuItem.Index = 2; + this.prepareMenuItem.Text = "Prepare"; + this.prepareMenuItem.Click += new System.EventHandler(this.PrepareMenuItemClick); + // + // search_TProgressBar + // + this.search_TProgressBar.Location = new System.Drawing.Point(8, 48); + this.search_TProgressBar.Name = "search_TProgressBar"; + this.search_TProgressBar.Size = new System.Drawing.Size(400, 24); + this.search_TProgressBar.TabIndex = 3; + // + // productiveRowsLabel + // + this.productiveRowsLabel.Location = new System.Drawing.Point(296, 16); + this.productiveRowsLabel.Name = "productiveRowsLabel"; + this.productiveRowsLabel.Size = new System.Drawing.Size(112, 24); + this.productiveRowsLabel.TabIndex = 8; + this.productiveRowsLabel.Text = "Productive Rows"; + // + // maxTouringLabel + // + this.maxTouringLabel.Location = new System.Drawing.Point(16, 88); + this.maxTouringLabel.Name = "maxTouringLabel"; + this.maxTouringLabel.Size = new System.Drawing.Size(112, 24); + this.maxTouringLabel.TabIndex = 4; + this.maxTouringLabel.Text = "Max Touring"; + // + // progressTabPage + // + this.progressTabPage.Controls.Add(this.select_TProgressBar); + this.progressTabPage.Controls.Add(this.select_TLabel); + this.progressTabPage.Controls.Add(this.search_TProgressBar); + this.progressTabPage.Controls.Add(this.search_TLabel); + this.progressTabPage.Location = new System.Drawing.Point(4, 22); + this.progressTabPage.Name = "progressTabPage"; + this.progressTabPage.Size = new System.Drawing.Size(576, 436); + this.progressTabPage.TabIndex = 3; + this.progressTabPage.Text = "Progress"; + // + // mainMenu + // + this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.sqlMenuItem, + this.graphMenuItem}); + // + // connectMenuItem + // + this.connectMenuItem.Index = 0; + this.connectMenuItem.Text = "Connect"; + this.connectMenuItem.Click += new System.EventHandler(this.ConnectMenuItemClick); + // + // minWaitingLabel + // + this.minWaitingLabel.Location = new System.Drawing.Point(16, 16); + this.minWaitingLabel.Name = "minWaitingLabel"; + this.minWaitingLabel.Size = new System.Drawing.Size(112, 24); + this.minWaitingLabel.TabIndex = 0; + this.minWaitingLabel.Text = "Min Waiting"; + // + // loadMenuItem + // + this.loadMenuItem.Index = 3; + this.loadMenuItem.Text = "Load"; + this.loadMenuItem.Click += new System.EventHandler(this.LoadMenuItemClick); + // + // productiveRowsTextBox + // + this.productiveRowsTextBox.Location = new System.Drawing.Point(424, 16); + this.productiveRowsTextBox.Name = "productiveRowsTextBox"; + this.productiveRowsTextBox.ReadOnly = true; + this.productiveRowsTextBox.Size = new System.Drawing.Size(136, 21); + this.productiveRowsTextBox.TabIndex = 9; + this.productiveRowsTextBox.Text = ""; + // + // toursTextBox + // + this.toursTextBox.Location = new System.Drawing.Point(144, 16); + this.toursTextBox.Name = "toursTextBox"; + this.toursTextBox.ReadOnly = true; + this.toursTextBox.Size = new System.Drawing.Size(136, 21); + this.toursTextBox.TabIndex = 1; + this.toursTextBox.Text = ""; + // + // create_AMenuItem + // + this.create_AMenuItem.Index = 0; + this.create_AMenuItem.Text = "create_A"; + this.create_AMenuItem.Click += new System.EventHandler(this.Create_AMenuItemClick); + // + // minWaitingTextBox + // + this.minWaitingTextBox.Location = new System.Drawing.Point(144, 16); + this.minWaitingTextBox.Name = "minWaitingTextBox"; + this.minWaitingTextBox.Size = new System.Drawing.Size(136, 21); + this.minWaitingTextBox.TabIndex = 1; + this.minWaitingTextBox.Text = ""; + this.minWaitingTextBox.TextChanged += new System.EventHandler(this.MinWaitingTextBoxTextChanged); + // + // maxWaitingTextBox + // + this.maxWaitingTextBox.Location = new System.Drawing.Point(144, 48); + this.maxWaitingTextBox.Name = "maxWaitingTextBox"; + this.maxWaitingTextBox.Size = new System.Drawing.Size(136, 21); + this.maxWaitingTextBox.TabIndex = 3; + this.maxWaitingTextBox.Text = ""; + this.maxWaitingTextBox.TextChanged += new System.EventHandler(this.MaxWaitingTextBoxTextChanged); + // + // initialCatalogLabel + // + this.initialCatalogLabel.Location = new System.Drawing.Point(16, 48); + this.initialCatalogLabel.Name = "initialCatalogLabel"; + this.initialCatalogLabel.Size = new System.Drawing.Size(112, 24); + this.initialCatalogLabel.TabIndex = 2; + this.initialCatalogLabel.Text = "Initial Catalog"; + // + // productiveTouringLabel + // + this.productiveTouringLabel.Location = new System.Drawing.Point(296, 120); + this.productiveTouringLabel.Name = "productiveTouringLabel"; + this.productiveTouringLabel.Size = new System.Drawing.Size(112, 24); + this.productiveTouringLabel.TabIndex = 14; + this.productiveTouringLabel.Text = "Productive Touring"; + // + // select_TProgressBar + // + this.select_TProgressBar.Location = new System.Drawing.Point(8, 120); + this.select_TProgressBar.Name = "select_TProgressBar"; + this.select_TProgressBar.Size = new System.Drawing.Size(400, 24); + this.select_TProgressBar.TabIndex = 5; + // + // touredRowsLabel + // + this.touredRowsLabel.Location = new System.Drawing.Point(16, 48); + this.touredRowsLabel.Name = "touredRowsLabel"; + this.touredRowsLabel.Size = new System.Drawing.Size(112, 24); + this.touredRowsLabel.TabIndex = 2; + this.touredRowsLabel.Text = "Toured Rows"; + // + // dataSourceLabel + // + this.dataSourceLabel.Location = new System.Drawing.Point(16, 16); + this.dataSourceLabel.Name = "dataSourceLabel"; + this.dataSourceLabel.Size = new System.Drawing.Size(112, 24); + this.dataSourceLabel.TabIndex = 0; + this.dataSourceLabel.Text = "Data Source"; + // + // disconnectMenuItem + // + this.disconnectMenuItem.Index = 1; + this.disconnectMenuItem.Text = "Disconnect"; + this.disconnectMenuItem.Click += new System.EventHandler(this.DisconnectMenuItemClick); + // + // select_TMenuItem + // + this.select_TMenuItem.Index = 2; + this.select_TMenuItem.Text = "select_T"; + this.select_TMenuItem.Click += new System.EventHandler(this.Select_TMenuItemClick); + // + // scopeLabel + // + this.scopeLabel.Location = new System.Drawing.Point(16, 128); + this.scopeLabel.Name = "scopeLabel"; + this.scopeLabel.Size = new System.Drawing.Size(112, 24); + this.scopeLabel.TabIndex = 6; + this.scopeLabel.Text = "Scope"; + // + // stationTabPage + // + this.stationTabPage.Controls.Add(this.stationCheckedListBox); + this.stationTabPage.Location = new System.Drawing.Point(4, 22); + this.stationTabPage.Name = "stationTabPage"; + this.stationTabPage.Size = new System.Drawing.Size(576, 436); + this.stationTabPage.TabIndex = 2; + this.stationTabPage.Text = "Station"; + // + // touredRowsListBox + // + this.touredRowsListBox.Location = new System.Drawing.Point(144, 48); + this.touredRowsListBox.Name = "touredRowsListBox"; + this.touredRowsListBox.Size = new System.Drawing.Size(136, 95); + this.touredRowsListBox.TabIndex = 3; + // + // nonProductiveRowsTextBox + // + this.nonProductiveRowsTextBox.Location = new System.Drawing.Point(424, 48); + this.nonProductiveRowsTextBox.Name = "nonProductiveRowsTextBox"; + this.nonProductiveRowsTextBox.ReadOnly = true; + this.nonProductiveRowsTextBox.Size = new System.Drawing.Size(136, 21); + this.nonProductiveRowsTextBox.TabIndex = 11; + this.nonProductiveRowsTextBox.Text = ""; + // + // summaryTabPage + // + this.summaryTabPage.Controls.Add(this.summaryButton); + this.summaryTabPage.Controls.Add(this.productivity_TouringTextBox); + this.summaryTabPage.Controls.Add(this.productivity_TouringLabel); + this.summaryTabPage.Controls.Add(this.nonProductiveTouringTextBox); + this.summaryTabPage.Controls.Add(this.nonProductiveTouringLabel); + this.summaryTabPage.Controls.Add(this.productiveTouringTextBox); + this.summaryTabPage.Controls.Add(this.productiveTouringLabel); + this.summaryTabPage.Controls.Add(this.productivity_RowsTextBox); + this.summaryTabPage.Controls.Add(this.productivity_RowsLabel); + this.summaryTabPage.Controls.Add(this.nonProductiveRowsTextBox); + this.summaryTabPage.Controls.Add(this.label2); + this.summaryTabPage.Controls.Add(this.productiveRowsTextBox); + this.summaryTabPage.Controls.Add(this.productiveRowsLabel); + this.summaryTabPage.Controls.Add(this.nonTouredRowsTextBox); + this.summaryTabPage.Controls.Add(this.nonTouredRowsListBox); + this.summaryTabPage.Controls.Add(this.label1); + this.summaryTabPage.Controls.Add(this.touredRowsTextBox); + this.summaryTabPage.Controls.Add(this.touredRowsListBox); + this.summaryTabPage.Controls.Add(this.touredRowsLabel); + this.summaryTabPage.Controls.Add(this.toursTextBox); + this.summaryTabPage.Controls.Add(this.toursLabel); + this.summaryTabPage.Location = new System.Drawing.Point(4, 22); + this.summaryTabPage.Name = "summaryTabPage"; + this.summaryTabPage.Size = new System.Drawing.Size(576, 364); + this.summaryTabPage.TabIndex = 4; + this.summaryTabPage.Text = "Summary"; + // + // statusBar + // + this.statusBar.Location = new System.Drawing.Point(0, 390); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(584, 24); + this.statusBar.TabIndex = 0; + // + // graphMenuItem + // + this.graphMenuItem.Index = 1; + this.graphMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.create_AMenuItem, + this.search_TMenuItem, + this.select_TMenuItem}); + this.graphMenuItem.Text = "Graph"; + // + // propertiesTabPage + // + this.propertiesTabPage.Controls.Add(this.scopeTextBox); + this.propertiesTabPage.Controls.Add(this.scopeLabel); + this.propertiesTabPage.Controls.Add(this.maxTouringTextBox); + this.propertiesTabPage.Controls.Add(this.maxTouringLabel); + this.propertiesTabPage.Controls.Add(this.maxWaitingTextBox); + this.propertiesTabPage.Controls.Add(this.maxWaitingLabel); + this.propertiesTabPage.Controls.Add(this.minWaitingTextBox); + this.propertiesTabPage.Controls.Add(this.minWaitingLabel); + this.propertiesTabPage.Location = new System.Drawing.Point(4, 22); + this.propertiesTabPage.Name = "propertiesTabPage"; + this.propertiesTabPage.Size = new System.Drawing.Size(576, 436); + this.propertiesTabPage.TabIndex = 1; + this.propertiesTabPage.Text = "Properties"; + // + // touredRowsTextBox + // + this.touredRowsTextBox.Location = new System.Drawing.Point(144, 152); + this.touredRowsTextBox.Name = "touredRowsTextBox"; + this.touredRowsTextBox.ReadOnly = true; + this.touredRowsTextBox.Size = new System.Drawing.Size(136, 21); + this.touredRowsTextBox.TabIndex = 4; + this.touredRowsTextBox.Text = ""; + // + // productivity_RowsLabel + // + this.productivity_RowsLabel.Location = new System.Drawing.Point(296, 80); + this.productivity_RowsLabel.Name = "productivity_RowsLabel"; + this.productivity_RowsLabel.Size = new System.Drawing.Size(112, 24); + this.productivity_RowsLabel.TabIndex = 12; + this.productivity_RowsLabel.Text = "Productivity"; + // + // maxTouringTextBox + // + this.maxTouringTextBox.Location = new System.Drawing.Point(144, 88); + this.maxTouringTextBox.Name = "maxTouringTextBox"; + this.maxTouringTextBox.Size = new System.Drawing.Size(136, 21); + this.maxTouringTextBox.TabIndex = 5; + this.maxTouringTextBox.Text = ""; + this.maxTouringTextBox.TextChanged += new System.EventHandler(this.MaxTouringTextBoxTextChanged); + // + // productiveTouringTextBox + // + this.productiveTouringTextBox.Location = new System.Drawing.Point(424, 120); + this.productiveTouringTextBox.Name = "productiveTouringTextBox"; + this.productiveTouringTextBox.ReadOnly = true; + this.productiveTouringTextBox.Size = new System.Drawing.Size(136, 21); + this.productiveTouringTextBox.TabIndex = 15; + this.productiveTouringTextBox.Text = ""; + // + // sqlTabPage + // + this.sqlTabPage.Controls.Add(this.initialCatalogTextBox); + this.sqlTabPage.Controls.Add(this.initialCatalogLabel); + this.sqlTabPage.Controls.Add(this.dataSourceTextBox); + this.sqlTabPage.Controls.Add(this.dataSourceLabel); + this.sqlTabPage.Location = new System.Drawing.Point(4, 22); + this.sqlTabPage.Name = "sqlTabPage"; + this.sqlTabPage.Size = new System.Drawing.Size(576, 436); + this.sqlTabPage.TabIndex = 0; + this.sqlTabPage.Text = "Sql"; + // + // nonProductiveTouringTextBox + // + this.nonProductiveTouringTextBox.Location = new System.Drawing.Point(424, 152); + this.nonProductiveTouringTextBox.Name = "nonProductiveTouringTextBox"; + this.nonProductiveTouringTextBox.ReadOnly = true; + this.nonProductiveTouringTextBox.Size = new System.Drawing.Size(136, 21); + this.nonProductiveTouringTextBox.TabIndex = 17; + this.nonProductiveTouringTextBox.Text = ""; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 184); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(120, 24); + this.label1.TabIndex = 5; + this.label1.Text = "Non-Toured Rows"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(296, 48); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(112, 24); + this.label2.TabIndex = 10; + this.label2.Text = "Non-Productive Rows"; + // + // stationCheckedListBox + // + this.stationCheckedListBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.stationCheckedListBox.Location = new System.Drawing.Point(0, 0); + this.stationCheckedListBox.Name = "stationCheckedListBox"; + this.stationCheckedListBox.Size = new System.Drawing.Size(576, 436); + this.stationCheckedListBox.TabIndex = 0; + // + // initialCatalogTextBox + // + this.initialCatalogTextBox.Location = new System.Drawing.Point(144, 48); + this.initialCatalogTextBox.Name = "initialCatalogTextBox"; + this.initialCatalogTextBox.Size = new System.Drawing.Size(136, 21); + this.initialCatalogTextBox.TabIndex = 3; + this.initialCatalogTextBox.Text = ""; + this.initialCatalogTextBox.TextChanged += new System.EventHandler(this.InitialCatalogTextBoxTextChanged); + // + // productivity_RowsTextBox + // + this.productivity_RowsTextBox.Location = new System.Drawing.Point(424, 80); + this.productivity_RowsTextBox.Name = "productivity_RowsTextBox"; + this.productivity_RowsTextBox.ReadOnly = true; + this.productivity_RowsTextBox.Size = new System.Drawing.Size(136, 21); + this.productivity_RowsTextBox.TabIndex = 13; + this.productivity_RowsTextBox.Text = ""; + // + // nonTouredRowsListBox + // + this.nonTouredRowsListBox.Location = new System.Drawing.Point(144, 184); + this.nonTouredRowsListBox.Name = "nonTouredRowsListBox"; + this.nonTouredRowsListBox.Size = new System.Drawing.Size(136, 95); + this.nonTouredRowsListBox.TabIndex = 6; + // + // select_TLabel + // + this.select_TLabel.Location = new System.Drawing.Point(16, 88); + this.select_TLabel.Name = "select_TLabel"; + this.select_TLabel.Size = new System.Drawing.Size(112, 24); + this.select_TLabel.TabIndex = 4; + this.select_TLabel.Text = "select_T"; + // + // sqlMenuItem + // + this.sqlMenuItem.Index = 0; + this.sqlMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.connectMenuItem, + this.disconnectMenuItem, + this.prepareMenuItem, + this.loadMenuItem, + this.storeMenuItem}); + this.sqlMenuItem.Text = "Sql"; + // + // storeMenuItem + // + this.storeMenuItem.Index = 4; + this.storeMenuItem.Text = "Store"; + this.storeMenuItem.Click += new System.EventHandler(this.StoreMenuItemClick); + // + // dataSourceTextBox + // + this.dataSourceTextBox.Location = new System.Drawing.Point(144, 16); + this.dataSourceTextBox.Name = "dataSourceTextBox"; + this.dataSourceTextBox.Size = new System.Drawing.Size(136, 21); + this.dataSourceTextBox.TabIndex = 1; + this.dataSourceTextBox.Text = ""; + this.dataSourceTextBox.TextChanged += new System.EventHandler(this.DataSourceTextBoxTextChanged); + // + // productivity_TouringLabel + // + this.productivity_TouringLabel.Location = new System.Drawing.Point(296, 184); + this.productivity_TouringLabel.Name = "productivity_TouringLabel"; + this.productivity_TouringLabel.Size = new System.Drawing.Size(112, 24); + this.productivity_TouringLabel.TabIndex = 18; + this.productivity_TouringLabel.Text = "Productivity"; + // + // nonTouredRowsTextBox + // + this.nonTouredRowsTextBox.Location = new System.Drawing.Point(144, 288); + this.nonTouredRowsTextBox.Name = "nonTouredRowsTextBox"; + this.nonTouredRowsTextBox.ReadOnly = true; + this.nonTouredRowsTextBox.Size = new System.Drawing.Size(136, 21); + this.nonTouredRowsTextBox.TabIndex = 7; + this.nonTouredRowsTextBox.Text = ""; + // + // search_TLabel + // + this.search_TLabel.Location = new System.Drawing.Point(16, 16); + this.search_TLabel.Name = "search_TLabel"; + this.search_TLabel.Size = new System.Drawing.Size(112, 24); + this.search_TLabel.TabIndex = 2; + this.search_TLabel.Text = "search_T"; + // + // search_TMenuItem + // + this.search_TMenuItem.Index = 1; + this.search_TMenuItem.Text = "search_T"; + this.search_TMenuItem.Click += new System.EventHandler(this.Search_TMenuItemClick); + // + // summaryButton + // + this.summaryButton.Location = new System.Drawing.Point(16, 328); + this.summaryButton.Name = "summaryButton"; + this.summaryButton.Size = new System.Drawing.Size(120, 24); + this.summaryButton.TabIndex = 20; + this.summaryButton.Text = "Summary"; + this.summaryButton.Click += new System.EventHandler(this.SummaryButtonClick); + // + // nonProductiveTouringLabel + // + this.nonProductiveTouringLabel.Location = new System.Drawing.Point(296, 152); + this.nonProductiveTouringLabel.Name = "nonProductiveTouringLabel"; + this.nonProductiveTouringLabel.Size = new System.Drawing.Size(112, 24); + this.nonProductiveTouringLabel.TabIndex = 16; + this.nonProductiveTouringLabel.Text = "Non-Productive Touring"; + // + // tabControl + // + this.tabControl.Controls.Add(this.sqlTabPage); + this.tabControl.Controls.Add(this.propertiesTabPage); + this.tabControl.Controls.Add(this.stationTabPage); + this.tabControl.Controls.Add(this.progressTabPage); + this.tabControl.Controls.Add(this.summaryTabPage); + this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl.Location = new System.Drawing.Point(0, 0); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 0; + this.tabControl.Size = new System.Drawing.Size(584, 390); + this.tabControl.TabIndex = 1; + // + // productivity_TouringTextBox + // + this.productivity_TouringTextBox.Location = new System.Drawing.Point(424, 184); + this.productivity_TouringTextBox.Name = "productivity_TouringTextBox"; + this.productivity_TouringTextBox.ReadOnly = true; + this.productivity_TouringTextBox.Size = new System.Drawing.Size(136, 21); + this.productivity_TouringTextBox.TabIndex = 19; + this.productivity_TouringTextBox.Text = ""; + // + // maxWaitingLabel + // + this.maxWaitingLabel.Location = new System.Drawing.Point(16, 48); + this.maxWaitingLabel.Name = "maxWaitingLabel"; + this.maxWaitingLabel.Size = new System.Drawing.Size(112, 24); + this.maxWaitingLabel.TabIndex = 2; + this.maxWaitingLabel.Text = "Max Waiting"; + // + // toursLabel + // + this.toursLabel.Location = new System.Drawing.Point(16, 16); + this.toursLabel.Name = "toursLabel"; + this.toursLabel.Size = new System.Drawing.Size(112, 24); + this.toursLabel.TabIndex = 0; + this.toursLabel.Text = "Tours"; + // + // scopeTextBox + // + this.scopeTextBox.Location = new System.Drawing.Point(144, 128); + this.scopeTextBox.Name = "scopeTextBox"; + this.scopeTextBox.Size = new System.Drawing.Size(136, 21); + this.scopeTextBox.TabIndex = 7; + this.scopeTextBox.Text = ""; + this.scopeTextBox.TextChanged += new System.EventHandler(this.ScopeTextBoxTextChanged); + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); + this.ClientSize = new System.Drawing.Size(584, 414); + this.Controls.Add(this.tabControl); + this.Controls.Add(this.statusBar); + this.Menu = this.mainMenu; + this.Name = "MainForm"; + this.Text = "MainForm"; + this.Load += new System.EventHandler(this.MainFormLoad); + this.progressTabPage.ResumeLayout(false); + this.stationTabPage.ResumeLayout(false); + this.summaryTabPage.ResumeLayout(false); + this.propertiesTabPage.ResumeLayout(false); + this.sqlTabPage.ResumeLayout(false); + this.tabControl.ResumeLayout(false); + this.ResumeLayout(false); + } + #endregion + + [STAThread] + public static void Main() { + Application.Run(new MainForm()); + } + void MainFormLoad(object sender, System.EventArgs e) { + minWaitingTextBox.Text=Properties.MinWaiting.ToString(); + maxWaitingTextBox.Text=Properties.MaxWaiting.ToString(); + + maxTouringTextBox.Text=Properties.MaxTouring.ToString(); + + scopeTextBox.Text=Properties.Scope.ToString(); + } + + void DataSourceTextBoxTextChanged(object sender, System.EventArgs e) { Properties.DataSource=dataSourceTextBox.Text; } + void InitialCatalogTextBoxTextChanged(object sender, System.EventArgs e) { Properties.InitialCatalog=initialCatalogTextBox.Text; } + + void MinWaitingTextBoxTextChanged(object sender, System.EventArgs e) { + try { Properties.MinWaiting=TimeSpan.Parse(minWaitingTextBox.Text); } catch {} + } + void MaxWaitingTextBoxTextChanged(object sender, System.EventArgs e) { + try { Properties.MaxWaiting=TimeSpan.Parse(maxWaitingTextBox.Text); } catch {} + } + void MaxTouringTextBoxTextChanged(object sender, System.EventArgs e) { + try { Properties.MaxTouring=TimeSpan.Parse(maxTouringTextBox.Text); } catch {} + } + void ScopeTextBoxTextChanged(object sender, System.EventArgs e) { + try { Properties.Scope=System.Int32.Parse(scopeTextBox.Text); } catch {} + } + + void ConnectMenuItemClick(object sender, System.EventArgs e) { + viwoTour.Connect(); + statusBar.Text="Connected"; + } + void DisconnectMenuItemClick(object sender, System.EventArgs e) { + viwoTour.Disconnect(); + statusBar.Text="Disconnected"; + } + + void PrepareMenuItemClick(object sender, System.EventArgs e) { + viwoTour.Prepare(); + statusBar.Text="Prepared"; + } + + void LoadMenuItemClick(object sender, System.EventArgs e) { + statusBar.Text="Load..."; + viwoTour.Load(); + statusBar.Text="Loaded"; + + //HACK + stationCheckedListBox.Items.Clear(); + foreach(string station in viwoTour.courseBook.get_STATION_Of_Rows()) { + stationCheckedListBox.Items.Add(station); + } + } + void StoreMenuItemClick(object sender, System.EventArgs e) { + statusBar.Text="Store..."; + viwoTour.Store(); + statusBar.Text="Stored"; + } + + void Create_AMenuItemClick(object sender, System.EventArgs e) { + new Thread(new ThreadStart(Create_AStart)).Start(); + } + void Create_AStart() { + statusBar.Text="create_A..."; + viwoTour.create_A(); + statusBar.Text="create_A done"; + } + + void Search_TMenuItemClick(object sender, System.EventArgs e) { + //HACK + viwoTour.S.Clear(); + foreach(string station in stationCheckedListBox.CheckedItems) { + viwoTour.S.Add(station); + } + + new Thread(new ThreadStart(Search_TStart)).Start(); + } + void Search_TStart() { + statusBar.Text="search_T..."; + + DateTime begin=DateTime.Now; + viwoTour.search_T(); + DateTime end=DateTime.Now; + + statusBar.Text="search_T done in "+(end-begin); + } + void Search_TProgress(int Progress) { search_TProgressBar.Value=Progress; } + + void Select_TMenuItemClick(object sender, System.EventArgs e) { + new Thread(new ThreadStart(Select_TStart)).Start(); + } + void Select_TStart() { + statusBar.Text="select_T..."; + + DateTime begin=DateTime.Now; + viwoTour.select_T(); + DateTime end=DateTime.Now; + + statusBar.Text="select_T done in "+(end-begin); + } + void Select_TProgress(int Progress) { select_TProgressBar.Value=Progress; } + + void SummaryButtonClick(object sender, System.EventArgs e) { + ArrayList TouredIDs=new ArrayList(); + ArrayList NonTouredIDs=(ArrayList)viwoTour.courseBook.get_ID_Of_Rows().Clone(); + + int Tours=0; + + int ProductiveRows=0; + int NonProductiveRows=0; + + TimeSpan ProductiveTouring=new TimeSpan(); + TimeSpan NonProductiveTouring=new TimeSpan(); + + foreach(ArrayList t_select in viwoTour.T_select) { + Tours++; + + for(int i=0;i + /// Description of MainWindow. + /// + public class MainWindow : System.Windows.Forms.Form + { + private System.ComponentModel.IContainer components; + private System.Windows.Forms.TreeView Baumansicht; + private System.Windows.Forms.StatusBar Statusleiste; + private System.Windows.Forms.MenuItem ExtrasMenuItem; + private System.Windows.Forms.Label TourenoptionenLabel0; + private System.Windows.Forms.MenuItem AnsichtMenuItem; + private System.Windows.Forms.MenuItem UeberMenuItem; + private System.Windows.Forms.DataGrid QuellTabelleAnzeigenDataGrid; + private System.Windows.Forms.StatusBarPanel StatusBarPanel2; + private System.Windows.Forms.Label DatenbankEinstellungenLabel0; + private System.Windows.Forms.TextBox DataSourceTextBox; + private System.Windows.Forms.Label DatenbankEinstellungenLabel2; + private System.Windows.Forms.Label DatenbankEinstellungenLabel3; + private System.Windows.Forms.Label DatenbankEinstellungenLabel4; + private System.Windows.Forms.Panel StartbahnhoefePanel; + private System.Windows.Forms.ToolBar Werkzeugleiste; + private System.Windows.Forms.Button TourenoptionenWeiterButton; + private System.Windows.Forms.MenuItem StatusleisteMenuItem; + private System.Windows.Forms.GroupBox DatenbankEinstellungenGroupBox1; + private System.Windows.Forms.MenuItem HilfeMenuItem; + private System.Windows.Forms.ToolBarButton StatusleisteToolBarButton; + private System.Windows.Forms.Splitter splitter1; + private System.Windows.Forms.MenuItem BaumansichtMenuItem; + private System.Windows.Forms.MenuItem OptionenMenuItem; + private System.Windows.Forms.TextBox InitialCatalogTextBox; + private System.Windows.Forms.Button DatenbankEinstellungenTestButton; + private System.Windows.Forms.MenuItem DateiMenuItem; + private System.Windows.Forms.MainMenu MainMenu; + private System.Windows.Forms.Button DatenbankEinstellungenWeiterButton; + private System.Windows.Forms.MenuItem WerkzeugleisteMenuItem; + private System.Windows.Forms.Button StartbahnhoefeWeiterButton; + private System.Windows.Forms.Timer Timer; + private System.Windows.Forms.MenuItem BeendenMenuItem; + private System.Windows.Forms.MenuItem menuItem1; + private System.Windows.Forms.ImageList ImageList; + private System.Windows.Forms.Panel TourenoptionenPanel; + private System.Windows.Forms.Label StartbahnhoefeLabel0; + private System.Windows.Forms.Button DatenbankEinstellungenStandardButton; + private System.Windows.Forms.StatusBarPanel StatusBarPanel1; + private System.Windows.Forms.ToolBarButton BaumansichtToolBarButton; + private System.Windows.Forms.ListBox StationsListBox; + private System.Windows.Forms.Panel DatenbankEinstellungenPanel; + + private DataSet QuellTabelleAnzeigenDataSet; + + private short status = 0; + + /* + * 0 nicht verbunden + * 1 verbunden + * 2 prepared + * 3 startbahnhfe listbox gefllt + */ + + protected About about; + protected Optionen optionen; + protected ViwoTour viwotour; + protected RegistryWork registrywork; + + public MainWindow() + { + InitializeComponent(); + + viwotour = new ViwoTour(); + about = new About(); + optionen = new Optionen(); + registrywork = new RegistryWork(); + QuellTabelleAnzeigenDataSet = new DataSet(); + + InitViwoTour(); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(MainWindow)); + this.DatenbankEinstellungenPanel = new System.Windows.Forms.Panel(); + this.StationsListBox = new System.Windows.Forms.ListBox(); + this.BaumansichtToolBarButton = new System.Windows.Forms.ToolBarButton(); + this.StatusBarPanel1 = new System.Windows.Forms.StatusBarPanel(); + this.DatenbankEinstellungenStandardButton = new System.Windows.Forms.Button(); + this.StartbahnhoefeLabel0 = new System.Windows.Forms.Label(); + this.TourenoptionenPanel = new System.Windows.Forms.Panel(); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + this.menuItem1 = new System.Windows.Forms.MenuItem(); + this.BeendenMenuItem = new System.Windows.Forms.MenuItem(); + this.Timer = new System.Windows.Forms.Timer(this.components); + this.StartbahnhoefeWeiterButton = new System.Windows.Forms.Button(); + this.WerkzeugleisteMenuItem = new System.Windows.Forms.MenuItem(); + this.DatenbankEinstellungenWeiterButton = new System.Windows.Forms.Button(); + this.MainMenu = new System.Windows.Forms.MainMenu(); + this.DateiMenuItem = new System.Windows.Forms.MenuItem(); + this.DatenbankEinstellungenTestButton = new System.Windows.Forms.Button(); + this.InitialCatalogTextBox = new System.Windows.Forms.TextBox(); + this.OptionenMenuItem = new System.Windows.Forms.MenuItem(); + this.BaumansichtMenuItem = new System.Windows.Forms.MenuItem(); + this.splitter1 = new System.Windows.Forms.Splitter(); + this.StatusleisteToolBarButton = new System.Windows.Forms.ToolBarButton(); + this.HilfeMenuItem = new System.Windows.Forms.MenuItem(); + this.DatenbankEinstellungenGroupBox1 = new System.Windows.Forms.GroupBox(); + this.StatusleisteMenuItem = new System.Windows.Forms.MenuItem(); + this.TourenoptionenWeiterButton = new System.Windows.Forms.Button(); + this.Werkzeugleiste = new System.Windows.Forms.ToolBar(); + this.StartbahnhoefePanel = new System.Windows.Forms.Panel(); + this.DatenbankEinstellungenLabel4 = new System.Windows.Forms.Label(); + this.DatenbankEinstellungenLabel3 = new System.Windows.Forms.Label(); + this.DatenbankEinstellungenLabel2 = new System.Windows.Forms.Label(); + this.DataSourceTextBox = new System.Windows.Forms.TextBox(); + this.DatenbankEinstellungenLabel0 = new System.Windows.Forms.Label(); + this.StatusBarPanel2 = new System.Windows.Forms.StatusBarPanel(); + this.QuellTabelleAnzeigenDataGrid = new System.Windows.Forms.DataGrid(); + this.UeberMenuItem = new System.Windows.Forms.MenuItem(); + this.AnsichtMenuItem = new System.Windows.Forms.MenuItem(); + this.TourenoptionenLabel0 = new System.Windows.Forms.Label(); + this.ExtrasMenuItem = new System.Windows.Forms.MenuItem(); + this.Statusleiste = new System.Windows.Forms.StatusBar(); + this.Baumansicht = new System.Windows.Forms.TreeView(); + this.DatenbankEinstellungenPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.StatusBarPanel1)).BeginInit(); + this.TourenoptionenPanel.SuspendLayout(); + this.DatenbankEinstellungenGroupBox1.SuspendLayout(); + this.StartbahnhoefePanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.StatusBarPanel2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.QuellTabelleAnzeigenDataGrid)).BeginInit(); + this.SuspendLayout(); + // + // DatenbankEinstellungenPanel + // + this.DatenbankEinstellungenPanel.Controls.Add(this.DatenbankEinstellungenLabel0); + this.DatenbankEinstellungenPanel.Controls.Add(this.DatenbankEinstellungenWeiterButton); + this.DatenbankEinstellungenPanel.Controls.Add(this.DatenbankEinstellungenGroupBox1); + this.DatenbankEinstellungenPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.DatenbankEinstellungenPanel.Location = new System.Drawing.Point(235, 28); + this.DatenbankEinstellungenPanel.Name = "DatenbankEinstellungenPanel"; + this.DatenbankEinstellungenPanel.Size = new System.Drawing.Size(685, 467); + this.DatenbankEinstellungenPanel.TabIndex = 6; + // + // StationsListBox + // + this.StationsListBox.Location = new System.Drawing.Point(16, 48); + this.StationsListBox.Name = "StationsListBox"; + this.StationsListBox.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple; + this.StationsListBox.Size = new System.Drawing.Size(440, 290); + this.StationsListBox.Sorted = true; + this.StationsListBox.TabIndex = 1; + this.StationsListBox.SelectedIndexChanged += new System.EventHandler(this.StationsListBoxSelectedIndexChanged); + // + // BaumansichtToolBarButton + // + this.BaumansichtToolBarButton.ImageIndex = 0; + this.BaumansichtToolBarButton.Pushed = true; + this.BaumansichtToolBarButton.Style = System.Windows.Forms.ToolBarButtonStyle.ToggleButton; + this.BaumansichtToolBarButton.ToolTipText = "Baumansicht"; + // + // StatusBarPanel1 + // + this.StatusBarPanel1.MinWidth = 400; + this.StatusBarPanel1.Text = "Bereit"; + this.StatusBarPanel1.ToolTipText = "Statusleiste"; + this.StatusBarPanel1.Width = 400; + // + // DatenbankEinstellungenStandardButton + // + this.DatenbankEinstellungenStandardButton.Location = new System.Drawing.Point(240, 224); + this.DatenbankEinstellungenStandardButton.Name = "DatenbankEinstellungenStandardButton"; + this.DatenbankEinstellungenStandardButton.Size = new System.Drawing.Size(168, 24); + this.DatenbankEinstellungenStandardButton.TabIndex = 6; + this.DatenbankEinstellungenStandardButton.Text = "Auf Standart zurcksetzen"; + this.DatenbankEinstellungenStandardButton.Click += new System.EventHandler(this.DatenbankEinstellungenStandardButtonClick); + // + // StartbahnhoefeLabel0 + // + this.StartbahnhoefeLabel0.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.StartbahnhoefeLabel0.Location = new System.Drawing.Point(16, 8); + this.StartbahnhoefeLabel0.Name = "StartbahnhoefeLabel0"; + this.StartbahnhoefeLabel0.Size = new System.Drawing.Size(248, 24); + this.StartbahnhoefeLabel0.TabIndex = 0; + this.StartbahnhoefeLabel0.Text = "Schritt Zwei: Startbahnhfe"; + // + // TourenoptionenPanel + // + this.TourenoptionenPanel.Controls.Add(this.TourenoptionenWeiterButton); + this.TourenoptionenPanel.Controls.Add(this.TourenoptionenLabel0); + this.TourenoptionenPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.TourenoptionenPanel.Location = new System.Drawing.Point(235, 28); + this.TourenoptionenPanel.Name = "TourenoptionenPanel"; + this.TourenoptionenPanel.Size = new System.Drawing.Size(685, 467); + this.TourenoptionenPanel.TabIndex = 10; + // + // ImageList + // + this.ImageList.ImageSize = new System.Drawing.Size(16, 16); + this.ImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ImageList.ImageStream"))); + this.ImageList.TransparentColor = System.Drawing.Color.Transparent; + // + // menuItem1 + // + this.menuItem1.Index = 1; + this.menuItem1.Text = "Hilfe"; + this.menuItem1.Click += new System.EventHandler(this.MenuItem1Click); + // + // BeendenMenuItem + // + this.BeendenMenuItem.Index = 0; + this.BeendenMenuItem.Text = "Beenden"; + this.BeendenMenuItem.Click += new System.EventHandler(this.BeendenMenuItemClick); + // + // Timer + // + this.Timer.Enabled = true; + this.Timer.Interval = 1000; + this.Timer.Tick += new System.EventHandler(this.TimerTick); + // + // StartbahnhoefeWeiterButton + // + this.StartbahnhoefeWeiterButton.Location = new System.Drawing.Point(336, 360); + this.StartbahnhoefeWeiterButton.Name = "StartbahnhoefeWeiterButton"; + this.StartbahnhoefeWeiterButton.Size = new System.Drawing.Size(120, 24); + this.StartbahnhoefeWeiterButton.TabIndex = 2; + this.StartbahnhoefeWeiterButton.Text = "Weiter >>"; + this.StartbahnhoefeWeiterButton.Click += new System.EventHandler(this.StartbahnhoefeWeiterButtonClick); + // + // WerkzeugleisteMenuItem + // + this.WerkzeugleisteMenuItem.Checked = true; + this.WerkzeugleisteMenuItem.Index = 0; + this.WerkzeugleisteMenuItem.Text = "Werkzeugleiste"; + this.WerkzeugleisteMenuItem.Click += new System.EventHandler(this.WerkzeugleisteMenuItemClick); + // + // DatenbankEinstellungenWeiterButton + // + this.DatenbankEinstellungenWeiterButton.Location = new System.Drawing.Point(336, 360); + this.DatenbankEinstellungenWeiterButton.Name = "DatenbankEinstellungenWeiterButton"; + this.DatenbankEinstellungenWeiterButton.Size = new System.Drawing.Size(120, 24); + this.DatenbankEinstellungenWeiterButton.TabIndex = 5; + this.DatenbankEinstellungenWeiterButton.Text = "Weiter >>"; + this.DatenbankEinstellungenWeiterButton.Click += new System.EventHandler(this.DatenbankEinstellungenWeiterButtonClick); + // + // MainMenu + // + this.MainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.DateiMenuItem, + this.AnsichtMenuItem, + this.ExtrasMenuItem, + this.HilfeMenuItem}); + // + // DateiMenuItem + // + this.DateiMenuItem.Index = 0; + this.DateiMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.BeendenMenuItem}); + this.DateiMenuItem.Text = "Datei"; + // + // DatenbankEinstellungenTestButton + // + this.DatenbankEinstellungenTestButton.Location = new System.Drawing.Point(48, 224); + this.DatenbankEinstellungenTestButton.Name = "DatenbankEinstellungenTestButton"; + this.DatenbankEinstellungenTestButton.Size = new System.Drawing.Size(160, 24); + this.DatenbankEinstellungenTestButton.TabIndex = 7; + this.DatenbankEinstellungenTestButton.Text = "Verbindung testen"; + this.DatenbankEinstellungenTestButton.Click += new System.EventHandler(this.DatenbankEinstellungenTestButtonClick); + // + // InitialCatalogTextBox + // + this.InitialCatalogTextBox.Location = new System.Drawing.Point(128, 160); + this.InitialCatalogTextBox.Name = "InitialCatalogTextBox"; + this.InitialCatalogTextBox.Size = new System.Drawing.Size(192, 20); + this.InitialCatalogTextBox.TabIndex = 4; + this.InitialCatalogTextBox.Text = ""; + this.InitialCatalogTextBox.TextChanged += new System.EventHandler(this.InitialCatalogTextBoxTextChanged); + // + // OptionenMenuItem + // + this.OptionenMenuItem.Index = 0; + this.OptionenMenuItem.Text = "Optionen"; + this.OptionenMenuItem.Click += new System.EventHandler(this.OptionenMenuItemClick); + // + // BaumansichtMenuItem + // + this.BaumansichtMenuItem.Checked = true; + this.BaumansichtMenuItem.Index = 1; + this.BaumansichtMenuItem.Text = "Baumansicht"; + this.BaumansichtMenuItem.Click += new System.EventHandler(this.BaumansichtMenuItemClick); + // + // splitter1 + // + this.splitter1.Location = new System.Drawing.Point(232, 28); + this.splitter1.Name = "splitter1"; + this.splitter1.Size = new System.Drawing.Size(3, 467); + this.splitter1.TabIndex = 7; + this.splitter1.TabStop = false; + // + // StatusleisteToolBarButton + // + this.StatusleisteToolBarButton.ImageIndex = 1; + this.StatusleisteToolBarButton.Pushed = true; + this.StatusleisteToolBarButton.Style = System.Windows.Forms.ToolBarButtonStyle.ToggleButton; + this.StatusleisteToolBarButton.ToolTipText = "Statusleiste"; + // + // HilfeMenuItem + // + this.HilfeMenuItem.Index = 3; + this.HilfeMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.UeberMenuItem, + this.menuItem1}); + this.HilfeMenuItem.Text = "?"; + // + // DatenbankEinstellungenGroupBox1 + // + this.DatenbankEinstellungenGroupBox1.Controls.Add(this.DatenbankEinstellungenTestButton); + this.DatenbankEinstellungenGroupBox1.Controls.Add(this.DatenbankEinstellungenStandardButton); + this.DatenbankEinstellungenGroupBox1.Controls.Add(this.DataSourceTextBox); + this.DatenbankEinstellungenGroupBox1.Controls.Add(this.InitialCatalogTextBox); + this.DatenbankEinstellungenGroupBox1.Controls.Add(this.DatenbankEinstellungenLabel2); + this.DatenbankEinstellungenGroupBox1.Controls.Add(this.DatenbankEinstellungenLabel3); + this.DatenbankEinstellungenGroupBox1.Controls.Add(this.DatenbankEinstellungenLabel4); + this.DatenbankEinstellungenGroupBox1.Location = new System.Drawing.Point(16, 40); + this.DatenbankEinstellungenGroupBox1.Name = "DatenbankEinstellungenGroupBox1"; + this.DatenbankEinstellungenGroupBox1.Size = new System.Drawing.Size(440, 304); + this.DatenbankEinstellungenGroupBox1.TabIndex = 4; + this.DatenbankEinstellungenGroupBox1.TabStop = false; + this.DatenbankEinstellungenGroupBox1.Text = "Datenquelle"; + // + // StatusleisteMenuItem + // + this.StatusleisteMenuItem.Checked = true; + this.StatusleisteMenuItem.Index = 2; + this.StatusleisteMenuItem.Text = "Statusleiste"; + this.StatusleisteMenuItem.Click += new System.EventHandler(this.StatusleisteMenuItemClick); + // + // TourenoptionenWeiterButton + // + this.TourenoptionenWeiterButton.Location = new System.Drawing.Point(336, 360); + this.TourenoptionenWeiterButton.Name = "TourenoptionenWeiterButton"; + this.TourenoptionenWeiterButton.Size = new System.Drawing.Size(120, 24); + this.TourenoptionenWeiterButton.TabIndex = 1; + this.TourenoptionenWeiterButton.Text = "Weiter >>"; + // + // Werkzeugleiste + // + this.Werkzeugleiste.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] { + this.BaumansichtToolBarButton, + this.StatusleisteToolBarButton}); + this.Werkzeugleiste.DropDownArrows = true; + this.Werkzeugleiste.ImageList = this.ImageList; + this.Werkzeugleiste.Location = new System.Drawing.Point(0, 0); + this.Werkzeugleiste.Name = "Werkzeugleiste"; + this.Werkzeugleiste.ShowToolTips = true; + this.Werkzeugleiste.Size = new System.Drawing.Size(920, 28); + this.Werkzeugleiste.TabIndex = 4; + this.Werkzeugleiste.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(this.WerkzeugleisteButtonClick); + // + // StartbahnhoefePanel + // + this.StartbahnhoefePanel.Controls.Add(this.StartbahnhoefeWeiterButton); + this.StartbahnhoefePanel.Controls.Add(this.StationsListBox); + this.StartbahnhoefePanel.Controls.Add(this.StartbahnhoefeLabel0); + this.StartbahnhoefePanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.StartbahnhoefePanel.Location = new System.Drawing.Point(235, 28); + this.StartbahnhoefePanel.Name = "StartbahnhoefePanel"; + this.StartbahnhoefePanel.Size = new System.Drawing.Size(685, 467); + this.StartbahnhoefePanel.TabIndex = 8; + // + // DatenbankEinstellungenLabel4 + // + this.DatenbankEinstellungenLabel4.Location = new System.Drawing.Point(64, 160); + this.DatenbankEinstellungenLabel4.Name = "DatenbankEinstellungenLabel4"; + this.DatenbankEinstellungenLabel4.Size = new System.Drawing.Size(64, 16); + this.DatenbankEinstellungenLabel4.TabIndex = 5; + this.DatenbankEinstellungenLabel4.Text = "Datenbank:"; + this.DatenbankEinstellungenLabel4.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // DatenbankEinstellungenLabel3 + // + this.DatenbankEinstellungenLabel3.Location = new System.Drawing.Point(64, 104); + this.DatenbankEinstellungenLabel3.Name = "DatenbankEinstellungenLabel3"; + this.DatenbankEinstellungenLabel3.Size = new System.Drawing.Size(64, 16); + this.DatenbankEinstellungenLabel3.TabIndex = 3; + this.DatenbankEinstellungenLabel3.Text = "Host:"; + this.DatenbankEinstellungenLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // DatenbankEinstellungenLabel2 + // + this.DatenbankEinstellungenLabel2.Location = new System.Drawing.Point(16, 24); + this.DatenbankEinstellungenLabel2.Name = "DatenbankEinstellungenLabel2"; + this.DatenbankEinstellungenLabel2.Size = new System.Drawing.Size(416, 48); + this.DatenbankEinstellungenLabel2.TabIndex = 2; + this.DatenbankEinstellungenLabel2.Text = "Geben Sie den Namen oder die IP des Datenbank-Rechners ein (z.B.: localhost) und " + +"den Namen der Datenbank."; + // + // DataSourceTextBox + // + this.DataSourceTextBox.Location = new System.Drawing.Point(128, 104); + this.DataSourceTextBox.Name = "DataSourceTextBox"; + this.DataSourceTextBox.Size = new System.Drawing.Size(192, 20); + this.DataSourceTextBox.TabIndex = 0; + this.DataSourceTextBox.Text = ""; + this.DataSourceTextBox.TextChanged += new System.EventHandler(this.DataSourceTextBoxTextChanged); + // + // DatenbankEinstellungenLabel0 + // + this.DatenbankEinstellungenLabel0.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.DatenbankEinstellungenLabel0.Location = new System.Drawing.Point(16, 8); + this.DatenbankEinstellungenLabel0.Name = "DatenbankEinstellungenLabel0"; + this.DatenbankEinstellungenLabel0.Size = new System.Drawing.Size(400, 24); + this.DatenbankEinstellungenLabel0.TabIndex = 0; + this.DatenbankEinstellungenLabel0.Text = "Schritt Eins: Datenbank Einstellungen"; + // + // StatusBarPanel2 + // + this.StatusBarPanel2.MinWidth = 300; + this.StatusBarPanel2.ToolTipText = "Datum/Uhrzeit"; + this.StatusBarPanel2.Width = 300; + // + // QuellTabelleAnzeigenDataGrid + // + this.QuellTabelleAnzeigenDataGrid.AlternatingBackColor = System.Drawing.Color.Lavender; + this.QuellTabelleAnzeigenDataGrid.BackColor = System.Drawing.Color.WhiteSmoke; + this.QuellTabelleAnzeigenDataGrid.BackgroundColor = System.Drawing.Color.LightGray; + this.QuellTabelleAnzeigenDataGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.QuellTabelleAnzeigenDataGrid.CaptionBackColor = System.Drawing.Color.LightSteelBlue; + this.QuellTabelleAnzeigenDataGrid.CaptionFont = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.QuellTabelleAnzeigenDataGrid.CaptionForeColor = System.Drawing.Color.MidnightBlue; + this.QuellTabelleAnzeigenDataGrid.DataMember = ""; + this.QuellTabelleAnzeigenDataGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.QuellTabelleAnzeigenDataGrid.FlatMode = true; + this.QuellTabelleAnzeigenDataGrid.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.QuellTabelleAnzeigenDataGrid.ForeColor = System.Drawing.Color.MidnightBlue; + this.QuellTabelleAnzeigenDataGrid.GridLineColor = System.Drawing.Color.Gainsboro; + this.QuellTabelleAnzeigenDataGrid.GridLineStyle = System.Windows.Forms.DataGridLineStyle.None; + this.QuellTabelleAnzeigenDataGrid.HeaderBackColor = System.Drawing.Color.MidnightBlue; + this.QuellTabelleAnzeigenDataGrid.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.QuellTabelleAnzeigenDataGrid.HeaderForeColor = System.Drawing.Color.WhiteSmoke; + this.QuellTabelleAnzeigenDataGrid.LinkColor = System.Drawing.Color.Teal; + this.QuellTabelleAnzeigenDataGrid.Location = new System.Drawing.Point(235, 28); + this.QuellTabelleAnzeigenDataGrid.Name = "QuellTabelleAnzeigenDataGrid"; + this.QuellTabelleAnzeigenDataGrid.ParentRowsBackColor = System.Drawing.Color.Gainsboro; + this.QuellTabelleAnzeigenDataGrid.ParentRowsForeColor = System.Drawing.Color.MidnightBlue; + this.QuellTabelleAnzeigenDataGrid.SelectionBackColor = System.Drawing.Color.CadetBlue; + this.QuellTabelleAnzeigenDataGrid.SelectionForeColor = System.Drawing.Color.WhiteSmoke; + this.QuellTabelleAnzeigenDataGrid.Size = new System.Drawing.Size(685, 467); + this.QuellTabelleAnzeigenDataGrid.TabIndex = 9; + // + // UeberMenuItem + // + this.UeberMenuItem.Index = 0; + this.UeberMenuItem.Text = "ber..."; + this.UeberMenuItem.Click += new System.EventHandler(this.UeberMenuItemClick); + // + // AnsichtMenuItem + // + this.AnsichtMenuItem.Index = 1; + this.AnsichtMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.WerkzeugleisteMenuItem, + this.BaumansichtMenuItem, + this.StatusleisteMenuItem}); + this.AnsichtMenuItem.Text = "Ansicht"; + // + // TourenoptionenLabel0 + // + this.TourenoptionenLabel0.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.TourenoptionenLabel0.Location = new System.Drawing.Point(16, 8); + this.TourenoptionenLabel0.Name = "TourenoptionenLabel0"; + this.TourenoptionenLabel0.Size = new System.Drawing.Size(208, 24); + this.TourenoptionenLabel0.TabIndex = 0; + this.TourenoptionenLabel0.Text = "Schritt Drei: Tourenoptionen"; + // + // ExtrasMenuItem + // + this.ExtrasMenuItem.Index = 2; + this.ExtrasMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.OptionenMenuItem}); + this.ExtrasMenuItem.Text = "Extras"; + // + // Statusleiste + // + this.Statusleiste.Location = new System.Drawing.Point(0, 495); + this.Statusleiste.Name = "Statusleiste"; + this.Statusleiste.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] { + this.StatusBarPanel1, + this.StatusBarPanel2}); + this.Statusleiste.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.Statusleiste.ShowPanels = true; + this.Statusleiste.Size = new System.Drawing.Size(920, 22); + this.Statusleiste.TabIndex = 1; + // + // Baumansicht + // + this.Baumansicht.Dock = System.Windows.Forms.DockStyle.Left; + this.Baumansicht.ImageList = this.ImageList; + this.Baumansicht.Location = new System.Drawing.Point(0, 28); + this.Baumansicht.Name = "Baumansicht"; + this.Baumansicht.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + new System.Windows.Forms.TreeNode("Datenbank Einstellungen", new System.Windows.Forms.TreeNode[] { + new System.Windows.Forms.TreeNode("Quell Tabelle anzeigen")}), + new System.Windows.Forms.TreeNode("Startbahnhfe"), + new System.Windows.Forms.TreeNode("Tourenoptionen"), + new System.Windows.Forms.TreeNode("Suche durchfhren"), + new System.Windows.Forms.TreeNode("Auswertung anzeigen")}); + this.Baumansicht.Size = new System.Drawing.Size(232, 467); + this.Baumansicht.TabIndex = 5; + this.Baumansicht.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.BaumansichtAfterSelect); + // + // MainWindow + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(920, 517); + this.Controls.Add(this.QuellTabelleAnzeigenDataGrid); + this.Controls.Add(this.StartbahnhoefePanel); + this.Controls.Add(this.TourenoptionenPanel); + this.Controls.Add(this.DatenbankEinstellungenPanel); + this.Controls.Add(this.splitter1); + this.Controls.Add(this.Baumansicht); + this.Controls.Add(this.Werkzeugleiste); + this.Controls.Add(this.Statusleiste); + this.Menu = this.MainMenu; + this.Name = "MainWindow"; + this.Text = "MainWindow"; + this.Closed += new System.EventHandler(this.MainWindowClosed); + this.DatenbankEinstellungenPanel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.StatusBarPanel1)).EndInit(); + this.TourenoptionenPanel.ResumeLayout(false); + this.DatenbankEinstellungenGroupBox1.ResumeLayout(false); + this.StartbahnhoefePanel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.StatusBarPanel2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.QuellTabelleAnzeigenDataGrid)).EndInit(); + this.ResumeLayout(false); + } + #endregion + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new MainWindow()); + } + + void WerkzeugleisteMenuItemClick(object sender, System.EventArgs e) + { + if(WerkzeugleisteMenuItem.Checked) + { + WerkzeugleisteMenuItem.Checked = false; + Werkzeugleiste.Visible = false; + } + else + { + WerkzeugleisteMenuItem.Checked = true; + Werkzeugleiste.Visible = true; + } + } + + void UeberMenuItemClick(object sender, System.EventArgs e) + { + about.ShowDialog(); + } + + void BaumansichtMenuItemClick(object sender, System.EventArgs e) + { + if(BaumansichtMenuItem.Checked) + { + BaumansichtMenuItem.Checked = false; + Baumansicht.Visible = false; + } + else + { + BaumansichtMenuItem.Checked = true; + Baumansicht.Visible = true; + } + } + + void StatusleisteMenuItemClick(object sender, System.EventArgs e) + { + if(StatusleisteMenuItem.Checked) + { + StatusleisteMenuItem.Checked = false; + Statusleiste.Visible = false; + } + else + { + StatusleisteMenuItem.Checked = true; + Statusleiste.Visible = true; + } + } + + void WerkzeugleisteButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) + { + if(e.Button == BaumansichtToolBarButton) + { + if(BaumansichtToolBarButton.Pushed) + { + Baumansicht.Visible = true; + } + else + { + Baumansicht.Visible = false; + } + } + else if(e.Button == StatusleisteToolBarButton) + { + if(StatusleisteToolBarButton.Pushed) + { + Statusleiste.Visible = true; + } + else + { + Statusleiste.Visible = false; + } + } + } + + void OptionenMenuItemClick(object sender, System.EventArgs e) + { + optionen.ShowDialog(); + } + + void BaumansichtAfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) + { + switch(e.Node.Text) + { + case "Datenbank Einstellungen": + { + DatenbankEinstellungenPanel.BringToFront();break; + } + case "Quell Tabelle anzeigen": + { + if(status==0) + { + Properties.DataSource = DataSourceTextBox.Text; + Properties.InitialCatalog = InitialCatalogTextBox.Text; + + StatusBarPanel1.Text = "Verbinde..."; + + if(viwotour.Connect()) + { + StatusBarPanel1.Text = "Vorbereiten..."; + viwotour.Prepare(); + viwotour.Load(); + viwotour.dataAdapter.Fill(QuellTabelleAnzeigenDataSet); + QuellTabelleAnzeigenDataGrid.SetDataBinding(QuellTabelleAnzeigenDataSet, "table"); + StatusBarPanel1.Text = "Fertig Vorbereitet!"; + QuellTabelleAnzeigenDataGrid.BringToFront(); + status = 2; + } + else + { + StatusBarPanel1.Text = "Verbindung fehlgeschlagen! Datenbank Einstellungen berprfen!"; + QuellTabelleAnzeigenDataSet.Clear(); + QuellTabelleAnzeigenDataGrid.BringToFront(); + } + } + else if(status==1) + { + StatusBarPanel1.Text = "Vorbereiten..."; + viwotour.Prepare(); + viwotour.Load(); + viwotour.dataAdapter.Fill(QuellTabelleAnzeigenDataSet); + QuellTabelleAnzeigenDataGrid.SetDataBinding(QuellTabelleAnzeigenDataSet, "table"); + StatusBarPanel1.Text = "Fertig Vorbereitet!"; + QuellTabelleAnzeigenDataGrid.BringToFront(); + status = 2; + } + else if(status>=2) + { + QuellTabelleAnzeigenDataGrid.BringToFront(); + } + break; + } + case "Startbahnhfe": + { + if(status==0) + { + Properties.DataSource = DataSourceTextBox.Text; + Properties.InitialCatalog = InitialCatalogTextBox.Text; + + StatusBarPanel1.Text = "Verbinde..."; + + if(viwotour.Connect()) + { + StatusBarPanel1.Text = "Vorbereiten..."; + viwotour.Prepare(); + viwotour.Load(); + viwotour.dataAdapter.Fill(QuellTabelleAnzeigenDataSet); + QuellTabelleAnzeigenDataGrid.SetDataBinding(QuellTabelleAnzeigenDataSet, "table"); + StatusBarPanel1.Text = "Fertig Vorbereitet!"; + + StationsListBox.Items.Clear(); + foreach(string station in viwotour.courseBook.get_STATION_Of_Rows()) + { + StationsListBox.Items.Add(station); + } + + SelectStations(); + + StartbahnhoefePanel.BringToFront(); + status = 3; + } + else + { + StatusBarPanel1.Text = "Verbindung fehlgeschlagen! Datenbank Einstellungen berprfen!"; + QuellTabelleAnzeigenDataSet.Clear(); + StationsListBox.Items.Clear(); + + StartbahnhoefePanel.BringToFront(); + } + } + else if(status==1) + { + StatusBarPanel1.Text = "Vorbereiten..."; + viwotour.Prepare(); + viwotour.Load(); + viwotour.dataAdapter.Fill(QuellTabelleAnzeigenDataSet); + QuellTabelleAnzeigenDataGrid.SetDataBinding(QuellTabelleAnzeigenDataSet, "table"); + StatusBarPanel1.Text = "Fertig Vorbereitet!"; + + StationsListBox.Items.Clear(); + foreach(string station in viwotour.courseBook.get_STATION_Of_Rows()) + { + StationsListBox.Items.Add(station); + } + + SelectStations(); + + StartbahnhoefePanel.BringToFront(); + status = 3; + } + else if(status==2) + { + StationsListBox.Items.Clear(); + foreach(string station in viwotour.courseBook.get_STATION_Of_Rows()) + { + StationsListBox.Items.Add(station); + } + + SelectStations(); + + StartbahnhoefePanel.BringToFront(); + status = 3; + } + else if(status>=3) + { + StartbahnhoefePanel.BringToFront(); + } + break; + } + case "Tourenoptionen": + { + TourenoptionenPanel.BringToFront(); + break; + } + } + } + + void DatenbankEinstellungenStandardButtonClick(object sender, System.EventArgs e) + { + DataSourceTextBox.Text = "localhost"; + InitialCatalogTextBox.Text = "viwotour"; + } + + void DatenbankEinstellungenWeiterButtonClick(object sender, System.EventArgs e) + { + StartbahnhoefePanel.BringToFront(); + + SelectNode("Startbahnhfe"); + } + + void SelectNode(string name) + { + foreach(System.Windows.Forms.TreeNode node in Baumansicht.Nodes) + { + if(node.Text == name){Baumansicht.SelectedNode = node;break;} + } + } + + void BeendenMenuItemClick(object sender, System.EventArgs e) + { + if(MessageBox.Show("Viwotour wirklich beenden?", "Beenden?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) + { + Application.Exit(); + } + } + + void DatenbankEinstellungenTestButtonClick(object sender, System.EventArgs e) + { + Properties.DataSource = DataSourceTextBox.Text; + Properties.InitialCatalog = InitialCatalogTextBox.Text; + + if(status!=0) + { + StatusBarPanel1.Text = "Trenne Verbindung..."; + viwotour.Disconnect(); + StatusBarPanel1.Text = "Verbindung erfolgreich getrennt!"; + } + + StatusBarPanel1.Text = "Verbinde..."; + + if(viwotour.Connect()) + { + StatusBarPanel1.Text = "Verbindung zu "+InitialCatalogTextBox.Text+" auf "+DataSourceTextBox.Text+" erfolgreich!"; + status=1; + } + else + { + StatusBarPanel1.Text = "Verbindung fehlgeschlagen! Datenbank Einstellungen berprfen!"; + status=0; + } + } + + void TimerTick(object sender, System.EventArgs e) + { + StatusBarPanel2.Text = System.Convert.ToString(status); + } + + void InitialCatalogTextBoxTextChanged(object sender, System.EventArgs e) + { + Properties.InitialCatalog = InitialCatalogTextBox.Text; + status = 0; + } + + void InitViwoTour() + { + DataSourceTextBox.Text = Properties.DataSource; + InitialCatalogTextBox.Text = Properties.InitialCatalog; + } + + void MainWindowClosed(object sender, System.EventArgs e) + { + registrywork.setKey("DataSource", Properties.DataSource); + registrywork.setKey("InitialCatalog", Properties.InitialCatalog); + registrywork.setKey("StationsList", Properties.StationsList); + } + + void DataSourceTextBoxTextChanged(object sender, System.EventArgs e) + { + Properties.DataSource = DataSourceTextBox.Text; + status = 0; + } + + void StationsListBoxSelectedIndexChanged(object sender, System.EventArgs e) + { + Properties.StationsList = ""; + + for(int i=0; i < StationsListBox.SelectedItems.Count; i++) + { + Properties.StationsList += StationsListBox.SelectedItems[i].ToString()+"|"; + } + } + + void SelectStations() + { + string[] tokens = Properties.StationsList.Split(new char[]{'|'}); + + for(int i=0; i<(StationsListBox.Items.Count-1); i++) + { + for(int j=0; j + /// Description of Optionen. + /// + public class Optionen : System.Windows.Forms.Form + { + private System.Windows.Forms.CheckBox EinstellungenSpeichernCheckBox; + private System.Windows.Forms.Button OKButton; + private System.Windows.Forms.Button AbbrechenButton; + public Optionen() + { + InitializeComponent(); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.AbbrechenButton = new System.Windows.Forms.Button(); + this.OKButton = new System.Windows.Forms.Button(); + this.EinstellungenSpeichernCheckBox = new System.Windows.Forms.CheckBox(); + this.SuspendLayout(); + // + // AbbrechenButton + // + this.AbbrechenButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.AbbrechenButton.Location = new System.Drawing.Point(224, 192); + this.AbbrechenButton.Name = "AbbrechenButton"; + this.AbbrechenButton.Size = new System.Drawing.Size(88, 24); + this.AbbrechenButton.TabIndex = 2; + this.AbbrechenButton.Text = "Abbrechen"; + // + // OKButton + // + this.OKButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OKButton.Location = new System.Drawing.Point(120, 192); + this.OKButton.Name = "OKButton"; + this.OKButton.Size = new System.Drawing.Size(88, 24); + this.OKButton.TabIndex = 1; + this.OKButton.Text = "OK"; + // + // EinstellungenSpeichernCheckBox + // + this.EinstellungenSpeichernCheckBox.Location = new System.Drawing.Point(24, 32); + this.EinstellungenSpeichernCheckBox.Name = "EinstellungenSpeichernCheckBox"; + this.EinstellungenSpeichernCheckBox.Size = new System.Drawing.Size(264, 40); + this.EinstellungenSpeichernCheckBox.TabIndex = 0; + this.EinstellungenSpeichernCheckBox.Text = "Einstellungen nach dem Beenden speichern(noch nicht implementiert)"; + // + // Optionen + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); + this.ClientSize = new System.Drawing.Size(328, 229); + this.Controls.Add(this.AbbrechenButton); + this.Controls.Add(this.OKButton); + this.Controls.Add(this.EinstellungenSpeichernCheckBox); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Optionen"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Optionen"; + this.ResumeLayout(false); + } + #endregion + } +} diff --git a/viwotour 2/Pfeil.ico b/viwotour 2/Pfeil.ico new file mode 100644 index 0000000..a23973d Binary files /dev/null and b/viwotour 2/Pfeil.ico differ diff --git a/viwotour 2/Properties.cs b/viwotour 2/Properties.cs new file mode 100644 index 0000000..7798fcb --- /dev/null +++ b/viwotour 2/Properties.cs @@ -0,0 +1,23 @@ +/* + * User: aputze + * Date: 28.10.2004 + * Time: 16:41 + */ + +using System; + +namespace ViwoTour { + public class Properties { + public static string DataSource; + public static string InitialCatalog; + + public static string StationsList; + + public static TimeSpan MinWaiting=new TimeSpan(0,5,0); + public static TimeSpan MaxWaiting=new TimeSpan(0,15,0); + + public static TimeSpan MaxTouring=new TimeSpan(10,0,0); + + public static int Scope=10000; + } +} diff --git a/viwotour 2/Registry.cs b/viwotour 2/Registry.cs new file mode 100644 index 0000000..dabbc21 --- /dev/null +++ b/viwotour 2/Registry.cs @@ -0,0 +1,38 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 08.12.2004 + * Time: 14:54 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using Microsoft.Win32; + +namespace ViwoTour +{ + /// + /// Description of Registry. + /// + public class RegistryWork + { + public Registry() + { + RegistryKey SoftwareKey = Registry.LocalMachine.OpenSubKey("Software", true); + + try + { + RegistryKey ViwoTourKey = SoftwareKey.OpenSubKey("viwotour", true); + Properties.DataSource = Convert.ToString(ViwoTourKey.GetValue("DataSource")); + Properties.InitialCatalog = Convert.ToString(ViwoTourKey.GetValue("InitialCatalog")); + } + catch + { + RegistryKey newkey = SoftwareKey.CreateSubKey("viwotour"); + newkey.SetValue("DataSource", Properties.DataSource); + newkey.SetValue("InitialCatalog", Properties.InitialCatalog); + } + } + } +} diff --git a/viwotour 2/RegistryWork.cs b/viwotour 2/RegistryWork.cs new file mode 100644 index 0000000..1da0e86 --- /dev/null +++ b/viwotour 2/RegistryWork.cs @@ -0,0 +1,48 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 08.12.2004 + * Time: 15:18 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using Microsoft.Win32; + +namespace ViwoTour +{ + /// + /// Description of RegistryWork. + /// + public class RegistryWork + { + RegistryKey SoftwareKey = Registry.LocalMachine.OpenSubKey("Software", true); + RegistryKey ViwoTourKey; + + public RegistryWork() + { + try + { + ViwoTourKey = SoftwareKey.OpenSubKey("viwotour", true); + Properties.DataSource = Convert.ToString(ViwoTourKey.GetValue("DataSource")); + Properties.InitialCatalog = Convert.ToString(ViwoTourKey.GetValue("InitialCatalog")); + Properties.StationsList = Convert.ToString(ViwoTourKey.GetValue("StationsList")); + } + catch + { + ViwoTourKey = SoftwareKey.CreateSubKey("viwotour"); + ViwoTourKey.SetValue("DataSource", Properties.DataSource); + ViwoTourKey.SetValue("InitialCatalog", Properties.InitialCatalog); + ViwoTourKey.SetValue("StationsList", Properties.StationsList); + } + } + + public void setKey(string name, string val) + { + ViwoTourKey.SetValue(name, val); + } + + + } +} diff --git a/viwotour 2/Seite1.jpg b/viwotour 2/Seite1.jpg new file mode 100644 index 0000000..c2aefee Binary files /dev/null and b/viwotour 2/Seite1.jpg differ diff --git a/viwotour 2/Seite1Final.jpg b/viwotour 2/Seite1Final.jpg new file mode 100644 index 0000000..3d61a4f Binary files /dev/null and b/viwotour 2/Seite1Final.jpg differ diff --git a/viwotour 2/Seite1Final.psd b/viwotour 2/Seite1Final.psd new file mode 100644 index 0000000..af20540 Binary files /dev/null and b/viwotour 2/Seite1Final.psd differ diff --git a/viwotour 2/Statusleiste.ico b/viwotour 2/Statusleiste.ico new file mode 100644 index 0000000..c7544c1 Binary files /dev/null and b/viwotour 2/Statusleiste.ico differ diff --git a/viwotour 2/Thumbs.db b/viwotour 2/Thumbs.db new file mode 100644 index 0000000..7ea9f60 Binary files /dev/null and b/viwotour 2/Thumbs.db differ diff --git a/viwotour 2/Tour.cs b/viwotour 2/Tour.cs new file mode 100644 index 0000000..89e0d72 --- /dev/null +++ b/viwotour 2/Tour.cs @@ -0,0 +1,85 @@ +/* + * User: aputze + * Date: 28.10.2004 + * Time: 15:50 + */ + +using System; +using System.Collections; + +namespace ViwoTour { + public class TourData { + public static int lastId=0; + public int Id; + + public int ProductiveIds; + public int UnproductiveIds; + + public TimeSpan ProductiveDuration; + public TimeSpan UnproductiveDuration; + + public int MaxWorkforce; + + public int ProductiveWorkforceRide; + public int UnproductiveWorkforceRide; + + public decimal P; + + public TourData() { + Id=0; + + ProductiveIds=0; + UnproductiveIds=0; + + ProductiveDuration=new TimeSpan(); + UnproductiveDuration=new TimeSpan(); + + P=0.0m; + } + + public void GenId() { Id=++lastId; } + + public object Clone() { + TourData tourData=new TourData(); + tourData.Id=Id; + + tourData.ProductiveIds=ProductiveIds; + tourData.UnproductiveIds=UnproductiveIds; + + tourData.ProductiveDuration=ProductiveDuration; + tourData.UnproductiveDuration=UnproductiveDuration; + + return tourData; + } + } + + public class Tour { + public TourData tourData; + + public ArrayList V; + public ArrayList E; + + public Tour() { + tourData=new TourData(); + + V=new ArrayList(); + E=new ArrayList(); + } + public Tour(TourData tourData) { + this.tourData=tourData; + + V=new ArrayList(); + E=new ArrayList(); + } + + public object Clone() { + Tour tour=new Tour(); + tour.tourData=(TourData)tourData.Clone(); + + tour.V=(ArrayList)V.Clone(); + tour.E=(ArrayList)E.Clone(); + + return tour; + } + } +} diff --git a/viwotour 2/TourPlan.cs b/viwotour 2/TourPlan.cs new file mode 100644 index 0000000..f300e9a --- /dev/null +++ b/viwotour 2/TourPlan.cs @@ -0,0 +1,22 @@ +/* + * User: aputze + * Date: 03.11.2004 + * Time: 11:13 + */ + +using System; + +using System.Data; + +namespace ViwoTour { + public class TourPlan : DataTable { + public TourPlan() : base("TOUR_PLAN") { + Columns.Add(new DataColumn("ID",typeof(int))); + Columns.Add(new DataColumn("ID1",typeof(int))); + Columns.Add(new DataColumn("DEPARTURE",typeof(DateTime))); + Columns.Add(new DataColumn("DEPARTURE_STATION",typeof(string))); + Columns.Add(new DataColumn("ARRIVAL",typeof(DateTime))); + Columns.Add(new DataColumn("ARRIVAL_STATION",typeof(string))); + } + } +} diff --git a/viwotour 2/Vertex.cs b/viwotour 2/Vertex.cs new file mode 100644 index 0000000..f15f8a9 --- /dev/null +++ b/viwotour 2/Vertex.cs @@ -0,0 +1,78 @@ +/* + * User: aputze + * Date: 28.10.2004 + * Time: 15:48 + */ + +using System; + +namespace ViwoTour { + public class VertexData { + public static int lastId=0; + public int Id; + + public DateTime Departure; + public string DepartureStation; + + public DateTime Arrival; + public string ArrivalStation; + + public int Workforce; + + public VertexData() { + Id=0; + + Departure=new DateTime(); + DepartureStation=""; + + Arrival=new DateTime(); + ArrivalStation=""; + + Workforce=0; + } + + public void GenId() { Id=++lastId; } + + public object Clone() { + VertexData vertexData=new VertexData(); + vertexData.Id=Id; + + vertexData.Departure=Departure; + vertexData.DepartureStation=DepartureStation; + vertexData.Arrival=Arrival; + vertexData.ArrivalStation=ArrivalStation; + + return vertexData; + } + } + + public class Vertex { + public VertexData vertexData; + + public int inboundDegree; + public int outboundDegree; + + public Vertex() { + vertexData=new VertexData(); + + inboundDegree=0; + outboundDegree=0; + } + public Vertex(VertexData vertexData) { + this.vertexData=vertexData; + + inboundDegree=0; + outboundDegree=0; + } + + public object Clone() { + Vertex vertex=new Vertex(); + vertex.vertexData=(VertexData)vertexData.Clone(); + + vertex.inboundDegree=inboundDegree; + vertex.outboundDegree=outboundDegree; + + return vertexData; + } + } +} diff --git a/viwotour 2/ViwoTour.About.resources b/viwotour 2/ViwoTour.About.resources new file mode 100644 index 0000000..0254a00 Binary files /dev/null and b/viwotour 2/ViwoTour.About.resources differ diff --git a/viwotour 2/ViwoTour.MainWindow.resources b/viwotour 2/ViwoTour.MainWindow.resources new file mode 100644 index 0000000..d75c001 Binary files /dev/null and b/viwotour 2/ViwoTour.MainWindow.resources differ diff --git a/viwotour 2/ViwoTour.Optionen.resources b/viwotour 2/ViwoTour.Optionen.resources new file mode 100644 index 0000000..2a8ae62 Binary files /dev/null and b/viwotour 2/ViwoTour.Optionen.resources differ diff --git a/viwotour 2/ViwoTour.cs b/viwotour 2/ViwoTour.cs new file mode 100644 index 0000000..6cfd89e --- /dev/null +++ b/viwotour 2/ViwoTour.cs @@ -0,0 +1,315 @@ +/* + * User: aputze + * Date: 12.11.2004 + * Time: 23:43 + */ + +using System; +using System.Collections; + +using System.Data; +using System.Data.SqlClient; +using System.Data.SqlTypes; + +namespace ViwoTour { + public delegate void ProgressHandler(int Progress); + + public class ViwoTour { + public CourseBook courseBook; + public CoursePlan coursePlan; + public TourPlan tourPlan; + + protected SqlConnection connection; + + public SqlDataAdapter dataAdapter; + protected SqlDataAdapter dataAdapter1; + protected SqlDataAdapter dataAdapter2; + + protected SqlCommand command; + protected SqlCommand command1; + + protected bool[,] A; + + public ArrayList S; + + public ArrayList T_search; + public ArrayList T_select; + + public ViwoTour() { + courseBook=new CourseBook(); + coursePlan=new CoursePlan(); + tourPlan=new TourPlan(); + + S=new ArrayList(); + + T_search=new ArrayList(); + T_select=new ArrayList(); + } + + public bool Connect() { + try + { + connection=new SqlConnection("Data Source="+Properties.DataSource+";"+ + "Integrated Security=true;"+ + "Initial Catalog="+Properties.InitialCatalog+";"); + connection.Open(); + return true; + } + catch + { + return false; + } + } + public void Disconnect() { + connection.Close(); + } + + public void Prepare() { + dataAdapter=new SqlDataAdapter(); + dataAdapter.SelectCommand=new SqlCommand("SELECT "+ + "ID,"+ + "DEPARTURE,DEPARTURE_STATION,"+ + "ARRIVAL,ARRIVAL_STATION," + + "MON,TUE,WED,THU,FRI,SAT,SUN"+ + " FROM COURSE_BOOK",connection); + + dataAdapter1=new SqlDataAdapter(); + dataAdapter1.InsertCommand=new SqlCommand("INSERT INTO COURSE_PLAN "+ + "(ID,"+ + "DEPARTURE,DEPARTURE_STATION,"+ + "ARRIVAL,ARRIVAL_STATION)"+ + " VALUES "+ + "(@0,@1,@2,@3,@4)",connection); + + dataAdapter1.InsertCommand.Parameters.Add("@0",SqlDbType.Int,4,"ID"); + dataAdapter1.InsertCommand.Parameters.Add("@1",SqlDbType.DateTime,8,"DEPARTURE"); + dataAdapter1.InsertCommand.Parameters.Add("@2",SqlDbType.NVarChar,50,"DEPARTURE_STATION"); + dataAdapter1.InsertCommand.Parameters.Add("@3",SqlDbType.DateTime,8,"ARRIVAL"); + dataAdapter1.InsertCommand.Parameters.Add("@4",SqlDbType.NVarChar,50,"ARRIVAL_STATION"); + + dataAdapter2=new SqlDataAdapter(); + dataAdapter2.InsertCommand=new SqlCommand("INSERT INTO TOUR_PLAN "+ + "(ID,ID1,"+ + "DEPARTURE,DEPARTURE_STATION,"+ + "ARRIVAL,ARRIVAL_STATION)"+ + " VALUES "+ + "(@0,@1,@2,@3,@4,@5)",connection); + + dataAdapter2.InsertCommand.Parameters.Add("@0",SqlDbType.Int,4,"ID"); + dataAdapter2.InsertCommand.Parameters.Add("@1",SqlDbType.Int,4,"ID1"); + dataAdapter2.InsertCommand.Parameters.Add("@2",SqlDbType.DateTime,8,"DEPARTURE"); + dataAdapter2.InsertCommand.Parameters.Add("@3",SqlDbType.NVarChar,50,"DEPARTURE_STATION"); + dataAdapter2.InsertCommand.Parameters.Add("@4",SqlDbType.DateTime,8,"ARRIVAL"); + dataAdapter2.InsertCommand.Parameters.Add("@5",SqlDbType.NVarChar,50,"ARRIVAL_STATION"); + + command=new SqlCommand("DELETE FROM COURSE_PLAN",connection); + command1=new SqlCommand("DELETE FROM TOUR_PLAN",connection); + } + + public void Load() { + courseBook.Rows.Clear(); + coursePlan.Rows.Clear(); + + dataAdapter.Fill(courseBook); + + string[] dayName=new string[] {"MON","TUE","WED","THU","FRI","SAT","SUN"}; + TimeSpan[] dayOffset=new TimeSpan[] {new TimeSpan(0,0,0,0), + new TimeSpan(1,0,0,0), + new TimeSpan(2,0,0,0), + new TimeSpan(3,0,0,0), + new TimeSpan(4,0,0,0), + new TimeSpan(5,0,0,0), + new TimeSpan(6,0,0,0)}; + TimeSpan[] dayOffset1=new TimeSpan[] {new TimeSpan(1,0,0,0), + new TimeSpan(2,0,0,0), + new TimeSpan(3,0,0,0), + new TimeSpan(4,0,0,0), + new TimeSpan(5,0,0,0), + new TimeSpan(6,0,0,0), + new TimeSpan(7,0,0,0)}; + + foreach(DataRow row in courseBook.Rows) { + for(int day=0;day<7;day++) { + if((int)row[dayName[day]]==1) { + coursePlan.Rows.Add(new object[] {row["ID"], + ((DateTime)row["DEPARTURE"]).Add(dayOffset[day]),row["DEPARTURE_STATION"], + (DateTime)row["DEPARTURE"]<(DateTime)row["ARRIVAL"] ? + ((DateTime)row["ARRIVAL"]).Add(dayOffset[day]) : + ((DateTime)row["ARRIVAL"]).Add(dayOffset1[day]),row["ARRIVAL_STATION"]}); + } + } + } + + courseBook.create_ID_Of_Rows(); + courseBook.create_STATION_Of_Rows(); + + coursePlan.create_Rows_By_DEPARTURE_STATION(); + coursePlan.create_Rows_By_ARRIVAL_STATION(); + } + public void Store() { + foreach(ArrayList t_select in T_select) { + foreach(int r in t_select) { + DataRow row=coursePlan.Rows[r]; + + tourPlan.Rows.Add(new object[] {T_select.IndexOf(t_select),row["ID"], + row["DEPARTURE"],row["DEPARTURE_STATION"], + row["ARRIVAL"],row["ARRIVAL_STATION"]}); + } + } + + command.ExecuteNonQuery(); + command1.ExecuteNonQuery(); + + dataAdapter1.Update(coursePlan); + dataAdapter2.Update(tourPlan); + } + + public void create_A() { + A=new bool[coursePlan.Rows.Count,coursePlan.Rows.Count]; + + for(int i=0;i=Properties.MinWaiting && + ((DateTime)row2[1]-(DateTime)row1[3])<=Properties.MaxWaiting; + } + } + } + + public event ProgressHandler search_TProgress; + public void search_T() { + if(search_TProgress!=null) { search_TProgress(0); } + + T_search.Clear(); + + foreach(string s in S) { + ArrayList R1=coursePlan.get_Rows_By_DEPARTURE_STATION(s); + ArrayList R2=coursePlan.get_Rows_By_ARRIVAL_STATION(s); + + if(R1==null || R2==null) { continue; } + + ArrayList T=new ArrayList(); + ArrayList T_prev; + ArrayList T_next; + + T_prev=new ArrayList(); + foreach(int r1 in R1) { + ArrayList t1=new ArrayList(); + t1.Add(r1); + + T_prev.Add(t1); + } + + while(T_prev.Count>0) { + T_next=new ArrayList(); + + foreach(ArrayList t_prev in T_prev) { + int r1=(int)t_prev[0]; + + int r_prev=(int)t_prev[t_prev.Count-1]; + for(int r_next=0;r_next0) { + int ID=(int)IDsToDo[0]; + + ArrayList T_filter=new ArrayList(); + foreach(ArrayList t_search in T_search) { + foreach(int r in t_search) { + DataRow row=coursePlan.Rows[r]; + + if(ID==(int)row[0]) { + T_filter.Add(t_search); + + break; + } + } + } + if(T_filter.Count==0) { + IDsToDo.Remove(ID); + if(!IDsDone.Contains(ID)) { IDsDone.Add(ID); } + + continue; + } + + double[] P=new double[T_filter.Count]; + for(int i=0;iP[k]) { k=l; } + } + + foreach(int r in (ArrayList)T_filter[k]) { + DataRow row=coursePlan.Rows[r]; + + IDsToDo.Remove(row[0]); + if(!IDsDone.Contains(row[0])) { IDsDone.Add(row[0]); } + } + + T_select.Add(T_filter[k]); + + if(select_TProgress!=null) { select_TProgress((100*IDsDone.Count)/(IDsToDo.Count+IDsDone.Count)); } + } + + if(select_TProgress!=null) { select_TProgress(100); } + } + } +} diff --git a/viwotour 2/ViwoTourMain.cs b/viwotour 2/ViwoTourMain.cs new file mode 100644 index 0000000..2b14e0c --- /dev/null +++ b/viwotour 2/ViwoTourMain.cs @@ -0,0 +1,1033 @@ +/* + * Created by SharpDevelop. + * User: Johannes Schauer + * Date: 08.11.2004 + * Time: 21:13 + * + */ +using System; +using System.Collections; +using System.Data; +using System.Windows.Forms; + +using System.Threading; + + +namespace ViwoTour +{ + public class ViwoTourMain : System.Windows.Forms.Form + { + private System.Windows.Forms.TextBox scopeTextBox; + private System.Windows.Forms.Label Panel4Label3; + private System.Windows.Forms.ProgressBar ProgressTProgressBar; + private System.Windows.Forms.GroupBox Panel4GroupBox1; + private System.Windows.Forms.Label Panel5Label0; + private System.Windows.Forms.Label Panel5Label1; + private System.Windows.Forms.Button Panel5SelectButton; + private System.Windows.Forms.Label Panel5Label3; + private System.Windows.Forms.Label Panel5Label4; + private System.Windows.Forms.Label Panel5Label5; + private System.Windows.Forms.Label Panel5Label7; + private System.Windows.Forms.Label Panel5Label8; + private System.Windows.Forms.TextBox Panel2TextBox1; + private System.Windows.Forms.Button NextButton; + private System.Windows.Forms.Button Panel1StandardButton; + private System.Windows.Forms.TextBox DataSourceTextBox; + private System.Windows.Forms.TextBox InitialCatalogTextBox; + private System.Windows.Forms.Label Panel0Label1; + private System.Windows.Forms.GroupBox Panel4GroupBox2; + private System.Windows.Forms.Label Panel0Label2; + private System.Windows.Forms.Panel Panel3; + private System.Windows.Forms.Panel Panel2; + private System.Windows.Forms.Panel Panel1; + private System.Windows.Forms.Panel Panel0; + private System.Windows.Forms.Panel Panel6; + private System.Windows.Forms.Panel Panel5; + private System.Windows.Forms.Panel Panel4; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox maxTouringTextBox; + private System.Windows.Forms.Label Panel2Label1; + private System.Windows.Forms.Label Panel2Label0; + private System.Windows.Forms.Label Panel3Label0; + private System.Windows.Forms.Button AbortButton; + private System.Windows.Forms.Button Panel4StandardButton; + private System.Windows.Forms.Button Panel5SearchButton; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label Panel4Label1; + private System.Windows.Forms.GroupBox Panel1GroupBox1; + private System.Windows.Forms.Label Panel1Label4; + private System.Windows.Forms.Label Panel4Label2; + private System.Windows.Forms.GroupBox LineBottom; + private System.Windows.Forms.Label Panel4Label4; + private System.Windows.Forms.Label Panel1Label0; + private System.Windows.Forms.TextBox minWaitingTextBox; + private System.Windows.Forms.Label Panel1Label2; + private System.Windows.Forms.Label Panel1Label3; + private System.Windows.Forms.ProgressBar ProgressSProgressBar; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label Panel4Label5; + private System.Windows.Forms.Button BackButton; + private System.Windows.Forms.Label Panel6Label1; + private System.Windows.Forms.Label Panel6Label0; + private System.Windows.Forms.TextBox maxWaitingTextBox; + private System.Windows.Forms.Label Panel4Label0; + private System.Windows.Forms.Label Panel3Label1; + private System.Windows.Forms.ListBox StationsListBox; + private System.Windows.Forms.TextBox Panel6TextBox1; + private System.Windows.Forms.Button Panel2MakeButton; + private System.Windows.Forms.Label Panel1Label1; + + protected ViwoTour viwoTour; + + int ActualStep = 0; + + public ViwoTourMain() + { + viwoTour=new ViwoTour(); + + InitializeComponent(); + viwoTour.search_TProgress+=new ProgressHandler(Search_TProgress); + viwoTour.select_TProgress+=new ProgressHandler(Select_TProgress); + + minWaitingTextBox.Text=Properties.MinWaiting.ToString(); + maxWaitingTextBox.Text=Properties.MaxWaiting.ToString(); + maxTouringTextBox.Text=Properties.MaxTouring.ToString(); + scopeTextBox.Text=Properties.Scope.ToString(); + + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(ViwoTourMain)); + this.Panel1Label1 = new System.Windows.Forms.Label(); + this.Panel2MakeButton = new System.Windows.Forms.Button(); + this.Panel6TextBox1 = new System.Windows.Forms.TextBox(); + this.StationsListBox = new System.Windows.Forms.ListBox(); + this.Panel3Label1 = new System.Windows.Forms.Label(); + this.Panel4Label0 = new System.Windows.Forms.Label(); + this.maxWaitingTextBox = new System.Windows.Forms.TextBox(); + this.Panel6Label0 = new System.Windows.Forms.Label(); + this.Panel6Label1 = new System.Windows.Forms.Label(); + this.BackButton = new System.Windows.Forms.Button(); + this.Panel4Label5 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.ProgressSProgressBar = new System.Windows.Forms.ProgressBar(); + this.Panel1Label3 = new System.Windows.Forms.Label(); + this.Panel1Label2 = new System.Windows.Forms.Label(); + this.minWaitingTextBox = new System.Windows.Forms.TextBox(); + this.Panel1Label0 = new System.Windows.Forms.Label(); + this.Panel4Label4 = new System.Windows.Forms.Label(); + this.LineBottom = new System.Windows.Forms.GroupBox(); + this.Panel4Label2 = new System.Windows.Forms.Label(); + this.Panel1Label4 = new System.Windows.Forms.Label(); + this.Panel1GroupBox1 = new System.Windows.Forms.GroupBox(); + this.Panel4Label1 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.Panel5SearchButton = new System.Windows.Forms.Button(); + this.Panel4StandardButton = new System.Windows.Forms.Button(); + this.AbortButton = new System.Windows.Forms.Button(); + this.Panel3Label0 = new System.Windows.Forms.Label(); + this.Panel2Label0 = new System.Windows.Forms.Label(); + this.Panel2Label1 = new System.Windows.Forms.Label(); + this.maxTouringTextBox = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.Panel4 = new System.Windows.Forms.Panel(); + this.Panel5 = new System.Windows.Forms.Panel(); + this.Panel6 = new System.Windows.Forms.Panel(); + this.Panel0 = new System.Windows.Forms.Panel(); + this.Panel1 = new System.Windows.Forms.Panel(); + this.Panel2 = new System.Windows.Forms.Panel(); + this.Panel3 = new System.Windows.Forms.Panel(); + this.Panel0Label2 = new System.Windows.Forms.Label(); + this.Panel4GroupBox2 = new System.Windows.Forms.GroupBox(); + this.Panel0Label1 = new System.Windows.Forms.Label(); + this.InitialCatalogTextBox = new System.Windows.Forms.TextBox(); + this.DataSourceTextBox = new System.Windows.Forms.TextBox(); + this.Panel1StandardButton = new System.Windows.Forms.Button(); + this.NextButton = new System.Windows.Forms.Button(); + this.Panel2TextBox1 = new System.Windows.Forms.TextBox(); + this.Panel5Label8 = new System.Windows.Forms.Label(); + this.Panel5Label7 = new System.Windows.Forms.Label(); + this.Panel5Label5 = new System.Windows.Forms.Label(); + this.Panel5Label4 = new System.Windows.Forms.Label(); + this.Panel5Label3 = new System.Windows.Forms.Label(); + this.Panel5SelectButton = new System.Windows.Forms.Button(); + this.Panel5Label1 = new System.Windows.Forms.Label(); + this.Panel5Label0 = new System.Windows.Forms.Label(); + this.Panel4GroupBox1 = new System.Windows.Forms.GroupBox(); + this.ProgressTProgressBar = new System.Windows.Forms.ProgressBar(); + this.Panel4Label3 = new System.Windows.Forms.Label(); + this.scopeTextBox = new System.Windows.Forms.TextBox(); + this.Panel1GroupBox1.SuspendLayout(); + this.Panel4.SuspendLayout(); + this.Panel5.SuspendLayout(); + this.Panel6.SuspendLayout(); + this.Panel0.SuspendLayout(); + this.Panel1.SuspendLayout(); + this.Panel2.SuspendLayout(); + this.Panel3.SuspendLayout(); + this.Panel4GroupBox2.SuspendLayout(); + this.Panel4GroupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // Panel1Label1 + // + this.Panel1Label1.Location = new System.Drawing.Point(16, 48); + this.Panel1Label1.Name = "Panel1Label1"; + this.Panel1Label1.Size = new System.Drawing.Size(296, 32); + this.Panel1Label1.TabIndex = 0; + this.Panel1Label1.Text = "Geben Sie die Daten fr die Verbindung zur entsprechenden SQL Datenbank ein."; + // + // Panel2MakeButton + // + this.Panel2MakeButton.Location = new System.Drawing.Point(16, 96); + this.Panel2MakeButton.Name = "Panel2MakeButton"; + this.Panel2MakeButton.Size = new System.Drawing.Size(128, 24); + this.Panel2MakeButton.TabIndex = 4; + this.Panel2MakeButton.Text = "Tabellen erstellen"; + this.Panel2MakeButton.Click += new System.EventHandler(this.Panel2MakeButtonClick); + // + // Panel6TextBox1 + // + this.Panel6TextBox1.Location = new System.Drawing.Point(16, 80); + this.Panel6TextBox1.Multiline = true; + this.Panel6TextBox1.Name = "Panel6TextBox1"; + this.Panel6TextBox1.Size = new System.Drawing.Size(296, 216); + this.Panel6TextBox1.TabIndex = 2; + this.Panel6TextBox1.Text = ""; + // + // StationsListBox + // + this.StationsListBox.Location = new System.Drawing.Point(16, 80); + this.StationsListBox.Name = "StationsListBox"; + this.StationsListBox.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple; + this.StationsListBox.Size = new System.Drawing.Size(296, 212); + this.StationsListBox.Sorted = true; + this.StationsListBox.TabIndex = 0; + // + // Panel3Label1 + // + this.Panel3Label1.Location = new System.Drawing.Point(16, 48); + this.Panel3Label1.Name = "Panel3Label1"; + this.Panel3Label1.Size = new System.Drawing.Size(288, 16); + this.Panel3Label1.TabIndex = 2; + this.Panel3Label1.Text = "Whlen Sie die gewnschten Stationen aus."; + // + // Panel4Label0 + // + this.Panel4Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel4Label0.Location = new System.Drawing.Point(16, 16); + this.Panel4Label0.Name = "Panel4Label0"; + this.Panel4Label0.Size = new System.Drawing.Size(224, 16); + this.Panel4Label0.TabIndex = 0; + this.Panel4Label0.Text = "Schritt Vier"; + // + // maxWaitingTextBox + // + this.maxWaitingTextBox.Location = new System.Drawing.Point(88, 48); + this.maxWaitingTextBox.Name = "maxWaitingTextBox"; + this.maxWaitingTextBox.Size = new System.Drawing.Size(192, 21); + this.maxWaitingTextBox.TabIndex = 1; + this.maxWaitingTextBox.Text = "01:00:00"; + // + // Panel6Label0 + // + this.Panel6Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel6Label0.Location = new System.Drawing.Point(16, 16); + this.Panel6Label0.Name = "Panel6Label0"; + this.Panel6Label0.Size = new System.Drawing.Size(152, 16); + this.Panel6Label0.TabIndex = 0; + this.Panel6Label0.Text = "Schritt Sechs"; + // + // Panel6Label1 + // + this.Panel6Label1.Location = new System.Drawing.Point(16, 48); + this.Panel6Label1.Name = "Panel6Label1"; + this.Panel6Label1.Size = new System.Drawing.Size(232, 16); + this.Panel6Label1.TabIndex = 1; + this.Panel6Label1.Text = "Hier die Auswertung:"; + // + // BackButton + // + this.BackButton.Enabled = false; + this.BackButton.Location = new System.Drawing.Point(232, 320); + this.BackButton.Name = "BackButton"; + this.BackButton.Size = new System.Drawing.Size(80, 24); + this.BackButton.TabIndex = 2; + this.BackButton.Text = "< Zurck"; + this.BackButton.Click += new System.EventHandler(this.BackButtonClick); + // + // Panel4Label5 + // + this.Panel4Label5.Location = new System.Drawing.Point(24, 232); + this.Panel4Label5.Name = "Panel4Label5"; + this.Panel4Label5.Size = new System.Drawing.Size(72, 16); + this.Panel4Label5.TabIndex = 5; + this.Panel4Label5.Text = "Sichtweite:"; + this.Panel4Label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(164, 314); + this.pictureBox1.TabIndex = 8; + this.pictureBox1.TabStop = false; + // + // ProgressSProgressBar + // + this.ProgressSProgressBar.Location = new System.Drawing.Point(16, 128); + this.ProgressSProgressBar.Name = "ProgressSProgressBar"; + this.ProgressSProgressBar.Size = new System.Drawing.Size(296, 16); + this.ProgressSProgressBar.TabIndex = 4; + // + // Panel1Label3 + // + this.Panel1Label3.Location = new System.Drawing.Point(16, 72); + this.Panel1Label3.Name = "Panel1Label3"; + this.Panel1Label3.Size = new System.Drawing.Size(64, 16); + this.Panel1Label3.TabIndex = 3; + this.Panel1Label3.Text = "Host:"; + this.Panel1Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // Panel1Label2 + // + this.Panel1Label2.Location = new System.Drawing.Point(16, 24); + this.Panel1Label2.Name = "Panel1Label2"; + this.Panel1Label2.Size = new System.Drawing.Size(272, 48); + this.Panel1Label2.TabIndex = 2; + this.Panel1Label2.Text = "Geben Sie den Namen oder die IP des Datenbank-Rechners ein (z.B.: localhost) und " + +"den Namen der Datenbank."; + // + // minWaitingTextBox + // + this.minWaitingTextBox.Location = new System.Drawing.Point(88, 16); + this.minWaitingTextBox.Name = "minWaitingTextBox"; + this.minWaitingTextBox.Size = new System.Drawing.Size(192, 21); + this.minWaitingTextBox.TabIndex = 0; + this.minWaitingTextBox.Text = "00:05:00"; + // + // Panel1Label0 + // + this.Panel1Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel1Label0.Location = new System.Drawing.Point(16, 16); + this.Panel1Label0.Name = "Panel1Label0"; + this.Panel1Label0.Size = new System.Drawing.Size(100, 16); + this.Panel1Label0.TabIndex = 4; + this.Panel1Label0.Text = "Schritt Eins"; + // + // Panel4Label4 + // + this.Panel4Label4.Location = new System.Drawing.Point(8, 17); + this.Panel4Label4.Name = "Panel4Label4"; + this.Panel4Label4.Size = new System.Drawing.Size(72, 16); + this.Panel4Label4.TabIndex = 1; + this.Panel4Label4.Text = "Maximum:"; + this.Panel4Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // LineBottom + // + this.LineBottom.Location = new System.Drawing.Point(0, 314); + this.LineBottom.Name = "LineBottom"; + this.LineBottom.Size = new System.Drawing.Size(498, 3); + this.LineBottom.TabIndex = 10; + this.LineBottom.TabStop = false; + // + // Panel4Label2 + // + this.Panel4Label2.Location = new System.Drawing.Point(16, 16); + this.Panel4Label2.Name = "Panel4Label2"; + this.Panel4Label2.Size = new System.Drawing.Size(64, 16); + this.Panel4Label2.TabIndex = 2; + this.Panel4Label2.Text = "Minimum:"; + this.Panel4Label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // Panel1Label4 + // + this.Panel1Label4.Location = new System.Drawing.Point(16, 104); + this.Panel1Label4.Name = "Panel1Label4"; + this.Panel1Label4.Size = new System.Drawing.Size(64, 16); + this.Panel1Label4.TabIndex = 5; + this.Panel1Label4.Text = "Datenbank:"; + this.Panel1Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // Panel1GroupBox1 + // + this.Panel1GroupBox1.Controls.Add(this.Panel1StandardButton); + this.Panel1GroupBox1.Controls.Add(this.DataSourceTextBox); + this.Panel1GroupBox1.Controls.Add(this.InitialCatalogTextBox); + this.Panel1GroupBox1.Controls.Add(this.Panel1Label2); + this.Panel1GroupBox1.Controls.Add(this.Panel1Label3); + this.Panel1GroupBox1.Controls.Add(this.Panel1Label4); + this.Panel1GroupBox1.Location = new System.Drawing.Point(16, 96); + this.Panel1GroupBox1.Name = "Panel1GroupBox1"; + this.Panel1GroupBox1.Size = new System.Drawing.Size(296, 176); + this.Panel1GroupBox1.TabIndex = 3; + this.Panel1GroupBox1.TabStop = false; + this.Panel1GroupBox1.Text = "Datenquelle"; + // + // Panel4Label1 + // + this.Panel4Label1.Location = new System.Drawing.Point(16, 48); + this.Panel4Label1.Name = "Panel4Label1"; + this.Panel4Label1.Size = new System.Drawing.Size(272, 16); + this.Panel4Label1.TabIndex = 1; + this.Panel4Label1.Text = "Geben Sie hier Ihre gewnschten Einstellungen ein."; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(0, 0); + this.label3.Name = "label3"; + this.label3.TabIndex = 0; + // + // Panel5SearchButton + // + this.Panel5SearchButton.Location = new System.Drawing.Point(16, 72); + this.Panel5SearchButton.Name = "Panel5SearchButton"; + this.Panel5SearchButton.Size = new System.Drawing.Size(120, 24); + this.Panel5SearchButton.TabIndex = 2; + this.Panel5SearchButton.Text = "Suchen"; + this.Panel5SearchButton.Click += new System.EventHandler(this.Panel5SearchButtonClick); + // + // Panel4StandardButton + // + this.Panel4StandardButton.Location = new System.Drawing.Point(144, 264); + this.Panel4StandardButton.Name = "Panel4StandardButton"; + this.Panel4StandardButton.Size = new System.Drawing.Size(168, 24); + this.Panel4StandardButton.TabIndex = 6; + this.Panel4StandardButton.Text = "Auf Standart zurcksetzen"; + this.Panel4StandardButton.Click += new System.EventHandler(this.Panel5StandardButtonClick); + // + // AbortButton + // + this.AbortButton.Location = new System.Drawing.Point(408, 320); + this.AbortButton.Name = "AbortButton"; + this.AbortButton.Size = new System.Drawing.Size(80, 24); + this.AbortButton.TabIndex = 3; + this.AbortButton.Text = "Abbrechen"; + this.AbortButton.Click += new System.EventHandler(this.AbortButtonClick); + // + // Panel3Label0 + // + this.Panel3Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel3Label0.Location = new System.Drawing.Point(16, 16); + this.Panel3Label0.Name = "Panel3Label0"; + this.Panel3Label0.Size = new System.Drawing.Size(184, 16); + this.Panel3Label0.TabIndex = 1; + this.Panel3Label0.Text = "Schritt Drei"; + // + // Panel2Label0 + // + this.Panel2Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel2Label0.Location = new System.Drawing.Point(16, 16); + this.Panel2Label0.Name = "Panel2Label0"; + this.Panel2Label0.Size = new System.Drawing.Size(184, 16); + this.Panel2Label0.TabIndex = 3; + this.Panel2Label0.Text = "Schritt Zwei"; + // + // Panel2Label1 + // + this.Panel2Label1.Location = new System.Drawing.Point(16, 48); + this.Panel2Label1.Name = "Panel2Label1"; + this.Panel2Label1.Size = new System.Drawing.Size(288, 40); + this.Panel2Label1.TabIndex = 0; + this.Panel2Label1.Text = "Klicken Sie auf Tabellen erstellen um die Verbindung mit der Datenbank herzustell" + +"en und die Tabellen vorzubereiten."; + // + // maxTouringTextBox + // + this.maxTouringTextBox.Location = new System.Drawing.Point(88, 16); + this.maxTouringTextBox.Name = "maxTouringTextBox"; + this.maxTouringTextBox.Size = new System.Drawing.Size(192, 21); + this.maxTouringTextBox.TabIndex = 0; + this.maxTouringTextBox.Text = "10:00:00"; + // + // label4 + // + this.label4.Location = new System.Drawing.Point(48, 24); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(128, 24); + this.label4.TabIndex = 0; + this.label4.Text = "label4"; + // + // Panel4 + // + this.Panel4.Controls.Add(this.scopeTextBox); + this.Panel4.Controls.Add(this.Panel4StandardButton); + this.Panel4.Controls.Add(this.Panel4Label5); + this.Panel4.Controls.Add(this.Panel4GroupBox2); + this.Panel4.Controls.Add(this.Panel4GroupBox1); + this.Panel4.Controls.Add(this.Panel4Label1); + this.Panel4.Controls.Add(this.Panel4Label0); + this.Panel4.Location = new System.Drawing.Point(168, 8); + this.Panel4.Name = "Panel4"; + this.Panel4.Size = new System.Drawing.Size(320, 304); + this.Panel4.TabIndex = 9; + this.Panel4.Visible = false; + // + // Panel5 + // + this.Panel5.Controls.Add(this.Panel5Label8); + this.Panel5.Controls.Add(this.Panel5Label7); + this.Panel5.Controls.Add(this.Panel5Label5); + this.Panel5.Controls.Add(this.Panel5Label4); + this.Panel5.Controls.Add(this.Panel5Label3); + this.Panel5.Controls.Add(this.Panel5SelectButton); + this.Panel5.Controls.Add(this.ProgressTProgressBar); + this.Panel5.Controls.Add(this.ProgressSProgressBar); + this.Panel5.Controls.Add(this.Panel5SearchButton); + this.Panel5.Controls.Add(this.Panel5Label1); + this.Panel5.Controls.Add(this.Panel5Label0); + this.Panel5.Location = new System.Drawing.Point(168, 8); + this.Panel5.Name = "Panel5"; + this.Panel5.Size = new System.Drawing.Size(320, 304); + this.Panel5.TabIndex = 11; + this.Panel5.Visible = false; + // + // Panel6 + // + this.Panel6.Controls.Add(this.Panel6TextBox1); + this.Panel6.Controls.Add(this.Panel6Label1); + this.Panel6.Controls.Add(this.Panel6Label0); + this.Panel6.Location = new System.Drawing.Point(168, 8); + this.Panel6.Name = "Panel6"; + this.Panel6.Size = new System.Drawing.Size(320, 304); + this.Panel6.TabIndex = 12; + this.Panel6.Visible = false; + // + // Panel0 + // + this.Panel0.BackColor = System.Drawing.SystemColors.Control; + this.Panel0.Controls.Add(this.Panel0Label2); + this.Panel0.Controls.Add(this.Panel0Label1); + this.Panel0.Location = new System.Drawing.Point(168, 8); + this.Panel0.Name = "Panel0"; + this.Panel0.Size = new System.Drawing.Size(320, 304); + this.Panel0.TabIndex = 1; + // + // Panel1 + // + this.Panel1.Controls.Add(this.Panel1Label0); + this.Panel1.Controls.Add(this.Panel1GroupBox1); + this.Panel1.Controls.Add(this.Panel1Label1); + this.Panel1.Location = new System.Drawing.Point(168, 8); + this.Panel1.Name = "Panel1"; + this.Panel1.Size = new System.Drawing.Size(320, 304); + this.Panel1.TabIndex = 4; + this.Panel1.Visible = false; + // + // Panel2 + // + this.Panel2.Controls.Add(this.Panel2MakeButton); + this.Panel2.Controls.Add(this.Panel2Label0); + this.Panel2.Controls.Add(this.Panel2TextBox1); + this.Panel2.Controls.Add(this.Panel2Label1); + this.Panel2.Location = new System.Drawing.Point(168, 8); + this.Panel2.Name = "Panel2"; + this.Panel2.Size = new System.Drawing.Size(320, 304); + this.Panel2.TabIndex = 6; + this.Panel2.Visible = false; + // + // Panel3 + // + this.Panel3.Controls.Add(this.Panel3Label1); + this.Panel3.Controls.Add(this.Panel3Label0); + this.Panel3.Controls.Add(this.StationsListBox); + this.Panel3.Location = new System.Drawing.Point(168, 8); + this.Panel3.Name = "Panel3"; + this.Panel3.Size = new System.Drawing.Size(320, 304); + this.Panel3.TabIndex = 7; + this.Panel3.Visible = false; + // + // Panel0Label2 + // + this.Panel0Label2.Location = new System.Drawing.Point(16, 64); + this.Panel0Label2.Name = "Panel0Label2"; + this.Panel0Label2.Size = new System.Drawing.Size(240, 32); + this.Panel0Label2.TabIndex = 1; + this.Panel0Label2.Text = "Um fortzufahren klicken Sie bitte auf Weiter."; + // + // Panel4GroupBox2 + // + this.Panel4GroupBox2.Controls.Add(this.Panel4Label4); + this.Panel4GroupBox2.Controls.Add(this.maxTouringTextBox); + this.Panel4GroupBox2.Location = new System.Drawing.Point(16, 168); + this.Panel4GroupBox2.Name = "Panel4GroupBox2"; + this.Panel4GroupBox2.Size = new System.Drawing.Size(296, 48); + this.Panel4GroupBox2.TabIndex = 3; + this.Panel4GroupBox2.TabStop = false; + this.Panel4GroupBox2.Text = "Tourenlnge"; + // + // Panel0Label1 + // + this.Panel0Label1.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel0Label1.Location = new System.Drawing.Point(16, 16); + this.Panel0Label1.Name = "Panel0Label1"; + this.Panel0Label1.Size = new System.Drawing.Size(296, 24); + this.Panel0Label1.TabIndex = 0; + this.Panel0Label1.Text = "Willkommen bei ViwoTour"; + // + // InitialCatalogTextBox + // + this.InitialCatalogTextBox.Location = new System.Drawing.Point(88, 104); + this.InitialCatalogTextBox.Name = "InitialCatalogTextBox"; + this.InitialCatalogTextBox.Size = new System.Drawing.Size(192, 21); + this.InitialCatalogTextBox.TabIndex = 4; + this.InitialCatalogTextBox.Text = "viwotour"; + // + // DataSourceTextBox + // + this.DataSourceTextBox.Location = new System.Drawing.Point(88, 72); + this.DataSourceTextBox.Name = "DataSourceTextBox"; + this.DataSourceTextBox.Size = new System.Drawing.Size(192, 21); + this.DataSourceTextBox.TabIndex = 0; + this.DataSourceTextBox.Text = "localhost"; + // + // Panel1StandardButton + // + this.Panel1StandardButton.Location = new System.Drawing.Point(64, 136); + this.Panel1StandardButton.Name = "Panel1StandardButton"; + this.Panel1StandardButton.Size = new System.Drawing.Size(168, 24); + this.Panel1StandardButton.TabIndex = 6; + this.Panel1StandardButton.Text = "Auf Standart zurcksetzen"; + this.Panel1StandardButton.Click += new System.EventHandler(this.Panel1StandardButtonClick); + // + // NextButton + // + this.NextButton.Location = new System.Drawing.Point(312, 320); + this.NextButton.Name = "NextButton"; + this.NextButton.Size = new System.Drawing.Size(80, 24); + this.NextButton.TabIndex = 1; + this.NextButton.Text = "Weiter >"; + this.NextButton.Click += new System.EventHandler(this.NextButtonClick); + // + // Panel2TextBox1 + // + this.Panel2TextBox1.Location = new System.Drawing.Point(16, 136); + this.Panel2TextBox1.Multiline = true; + this.Panel2TextBox1.Name = "Panel2TextBox1"; + this.Panel2TextBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.Panel2TextBox1.Size = new System.Drawing.Size(296, 152); + this.Panel2TextBox1.TabIndex = 1; + this.Panel2TextBox1.Text = ""; + // + // Panel5Label8 + // + this.Panel5Label8.Location = new System.Drawing.Point(264, 224); + this.Panel5Label8.Name = "Panel5Label8"; + this.Panel5Label8.Size = new System.Drawing.Size(48, 16); + this.Panel5Label8.TabIndex = 13; + // + // Panel5Label7 + // + this.Panel5Label7.Location = new System.Drawing.Point(264, 104); + this.Panel5Label7.Name = "Panel5Label7"; + this.Panel5Label7.Size = new System.Drawing.Size(48, 16); + this.Panel5Label7.TabIndex = 12; + // + // Panel5Label5 + // + this.Panel5Label5.Location = new System.Drawing.Point(16, 224); + this.Panel5Label5.Name = "Panel5Label5"; + this.Panel5Label5.Size = new System.Drawing.Size(128, 16); + this.Panel5Label5.TabIndex = 10; + this.Panel5Label5.Text = "Auswhlen:"; + // + // Panel5Label4 + // + this.Panel5Label4.Location = new System.Drawing.Point(16, 168); + this.Panel5Label4.Name = "Panel5Label4"; + this.Panel5Label4.Size = new System.Drawing.Size(144, 16); + this.Panel5Label4.TabIndex = 9; + this.Panel5Label4.Text = "Klicken Sie auf Auswhlen."; + // + // Panel5Label3 + // + this.Panel5Label3.Location = new System.Drawing.Point(16, 104); + this.Panel5Label3.Name = "Panel5Label3"; + this.Panel5Label3.Size = new System.Drawing.Size(104, 16); + this.Panel5Label3.TabIndex = 8; + this.Panel5Label3.Text = "Suchen:"; + // + // Panel5SelectButton + // + this.Panel5SelectButton.Enabled = false; + this.Panel5SelectButton.Location = new System.Drawing.Point(16, 192); + this.Panel5SelectButton.Name = "Panel5SelectButton"; + this.Panel5SelectButton.Size = new System.Drawing.Size(120, 24); + this.Panel5SelectButton.TabIndex = 6; + this.Panel5SelectButton.Text = "Auswhlen"; + this.Panel5SelectButton.Click += new System.EventHandler(this.Panel5SelectButtonClick); + // + // Panel5Label1 + // + this.Panel5Label1.Location = new System.Drawing.Point(16, 48); + this.Panel5Label1.Name = "Panel5Label1"; + this.Panel5Label1.Size = new System.Drawing.Size(248, 16); + this.Panel5Label1.TabIndex = 1; + this.Panel5Label1.Text = "Klicken Sie auf Suchen."; + // + // Panel5Label0 + // + this.Panel5Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel5Label0.Location = new System.Drawing.Point(16, 16); + this.Panel5Label0.Name = "Panel5Label0"; + this.Panel5Label0.Size = new System.Drawing.Size(192, 16); + this.Panel5Label0.TabIndex = 0; + this.Panel5Label0.Text = "Schritt Fnf"; + // + // Panel4GroupBox1 + // + this.Panel4GroupBox1.Controls.Add(this.Panel4Label3); + this.Panel4GroupBox1.Controls.Add(this.Panel4Label2); + this.Panel4GroupBox1.Controls.Add(this.maxWaitingTextBox); + this.Panel4GroupBox1.Controls.Add(this.minWaitingTextBox); + this.Panel4GroupBox1.Location = new System.Drawing.Point(16, 72); + this.Panel4GroupBox1.Name = "Panel4GroupBox1"; + this.Panel4GroupBox1.Size = new System.Drawing.Size(296, 80); + this.Panel4GroupBox1.TabIndex = 2; + this.Panel4GroupBox1.TabStop = false; + this.Panel4GroupBox1.Text = "Wartezeit"; + // + // ProgressTProgressBar + // + this.ProgressTProgressBar.Location = new System.Drawing.Point(16, 248); + this.ProgressTProgressBar.Name = "ProgressTProgressBar"; + this.ProgressTProgressBar.Size = new System.Drawing.Size(296, 16); + this.ProgressTProgressBar.TabIndex = 5; + // + // Panel4Label3 + // + this.Panel4Label3.Location = new System.Drawing.Point(16, 48); + this.Panel4Label3.Name = "Panel4Label3"; + this.Panel4Label3.Size = new System.Drawing.Size(64, 16); + this.Panel4Label3.TabIndex = 3; + this.Panel4Label3.Text = "Maximum:"; + this.Panel4Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // scopeTextBox + // + this.scopeTextBox.Location = new System.Drawing.Point(104, 232); + this.scopeTextBox.Name = "scopeTextBox"; + this.scopeTextBox.Size = new System.Drawing.Size(192, 21); + this.scopeTextBox.TabIndex = 7; + this.scopeTextBox.Text = ""; + // + // ViwoTourMain + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); + this.ClientSize = new System.Drawing.Size(496, 351); + this.Controls.Add(this.Panel1); + this.Controls.Add(this.Panel5); + this.Controls.Add(this.Panel4); + this.Controls.Add(this.Panel3); + this.Controls.Add(this.Panel2); + this.Controls.Add(this.Panel6); + this.Controls.Add(this.LineBottom); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.BackButton); + this.Controls.Add(this.NextButton); + this.Controls.Add(this.AbortButton); + this.Controls.Add(this.Panel0); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "ViwoTourMain"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "ViwoTour"; + this.Panel1GroupBox1.ResumeLayout(false); + this.Panel4.ResumeLayout(false); + this.Panel5.ResumeLayout(false); + this.Panel6.ResumeLayout(false); + this.Panel0.ResumeLayout(false); + this.Panel1.ResumeLayout(false); + this.Panel2.ResumeLayout(false); + this.Panel3.ResumeLayout(false); + this.Panel4GroupBox2.ResumeLayout(false); + this.Panel4GroupBox1.ResumeLayout(false); + this.ResumeLayout(false); + } + #endregion + + + + void AbortButtonClick(object sender, System.EventArgs e) + { + this.Close(); + } + + void NextButtonClick(object sender, System.EventArgs e) + { + switch(ActualStep) + { + case 0: + { + Panel0.Visible = false; + Panel1.Visible = true; + BackButton.Enabled = true; + ActualStep++; + break; + } + case 1: + { + Panel1.Visible = false; + Panel2.Visible = true; + NextButton.Enabled = false; + ActualStep++; + break; + } + case 2: + { + Panel2.Visible = false; + Panel3.Visible = true; + ActualStep++; + break; + } + case 3: + { + Panel3.Visible = false; + Panel4.Visible = true; + ActualStep++; + break; + } + case 4: + { + Panel4.Visible = false; + Panel5.Visible = true; + ActualStep++; + break; + } + case 5: + { + Panel5.Visible = false; + Panel6.Visible = true; + NextButton.Enabled = false; + ActualStep++; + break; + } + } + } + + + void BackButtonClick(object sender, System.EventArgs e) + { + switch(ActualStep) + { + case 1: + { + Panel1.Visible = false; + Panel0.Visible = true; + BackButton.Enabled = false; + ActualStep--; + break; + } + case 2: + { + Panel2.Visible = false; + Panel1.Visible = true; + NextButton.Enabled = true; + ActualStep--; + break; + } + case 3: + { + Panel3.Visible = false; + Panel2.Visible = true; + NextButton.Enabled = false; + ActualStep--; + break; + } + case 4: + { + Panel4.Visible = false; + Panel3.Visible = true; + ActualStep--; + break; + } + case 5: + { + Panel5.Visible = false; + Panel4.Visible = true; + ActualStep--; + break; + } + case 6: + { + Panel6.Visible = false; + Panel5.Visible = true; + NextButton.Enabled = true; + ActualStep--; + break; + } + } + } + + void Panel1StandardButtonClick(object sender, System.EventArgs e) + { + DataSourceTextBox.Text = "localhost"; + InitialCatalogTextBox.Text = "viwotour"; + } + + void Panel2MakeButtonClick(object sender, System.EventArgs e) + { + BackButton.Enabled = false; + NextButton.Enabled = false; + Panel2MakeButton.Enabled = false; + new Thread(new ThreadStart(PrepareClick)).Start(); + } + + void Panel5StandardButtonClick(object sender, System.EventArgs e) + { + minWaitingTextBox.Text=Properties.MinWaiting.ToString(); + maxWaitingTextBox.Text=Properties.MaxWaiting.ToString(); + maxTouringTextBox.Text=Properties.MaxTouring.ToString(); + scopeTextBox.Text=Properties.Scope.ToString(); + } + + void Panel5SearchButtonClick(object sender, System.EventArgs e) + { + BackButton.Enabled = false; + Panel5SearchButton.Enabled = false; + + viwoTour.S.Clear(); + foreach(string station in StationsListBox.SelectedItems) { + viwoTour.S.Add(station); + } + + new Thread(new ThreadStart(SearchStart)).Start(); + + } + + void Panel5SelectButtonClick(object sender, System.EventArgs e) + { + Panel5SelectButton.Enabled = false; + new Thread(new ThreadStart(SelectStart)).Start(); + } + + void PrepareClick() + { + Properties.DataSource = DataSourceTextBox.Text; + Properties.InitialCatalog = InitialCatalogTextBox.Text; + + Panel2TextBox1.Text += "Verbinde mit "+Properties.InitialCatalog+" auf "+Properties.DataSource+"..."; + viwoTour.Connect(); + Panel2TextBox1.Text += " Fertig"; + + Panel2TextBox1.Text += "\r\nVorbereiten..."; + viwoTour.Prepare(); + Panel2TextBox1.Text += " Fertig"; + + Panel2TextBox1.Text += "\r\nLaden..."; + viwoTour.Load(); + Panel2TextBox1.Text += "Fertig\r\n"; + + StationsListBox.Items.Clear(); + foreach(string station in viwoTour.courseBook.get_STATION_Of_Rows()) { + StationsListBox.Items.Add(station); + } + + Panel2MakeButton.Enabled = true; + NextButton.Enabled = true; + BackButton.Enabled = true; + } + + void SearchStart() + { + NextButton.Enabled = false; + viwoTour.create_A(); + viwoTour.search_T(); + + Panel5SelectButton.Enabled = true; + } + + void SelectStart() + { + viwoTour.select_T(); + + FillResultTextBox(); + + + NextButton.Enabled = true; + BackButton.Enabled = true; + Panel5SearchButton.Enabled = true; + } + + void Search_TProgress(int progress) + { + ProgressSProgressBar.Value=progress; + Panel5Label7.Text = Convert.ToString(progress)+"%"; + } + + void Select_TProgress(int progress) + { + ProgressTProgressBar.Value=progress; + Panel5Label8.Text = Convert.ToString(progress)+"%"; + } + + void FillResultTextBox() + { + ArrayList TouredIDs=new ArrayList(); + ArrayList NonTouredIDs=(ArrayList)viwoTour.courseBook.get_ID_Of_Rows().Clone(); + + int Tours=0; + + int ProductiveRows=0; + int NonProductiveRows=0; + + TimeSpan ProductiveTouring=new TimeSpan(); + TimeSpan NonProductiveTouring=new TimeSpan(); + + foreach(ArrayList t_select in viwoTour.T_select) { + Tours++; + + for(int i=0;i + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/viwotour 2/viwotour.prjx b/viwotour 2/viwotour.prjx new file mode 100644 index 0000000..e1319bf --- /dev/null +++ b/viwotour 2/viwotour.prjx @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/viwotour/About.cs b/viwotour/About.cs new file mode 100644 index 0000000..36dac8f --- /dev/null +++ b/viwotour/About.cs @@ -0,0 +1,51 @@ +/* + * Created by SharpDevelop. + * User: windows + * Date: 24.11.2004 + * Time: 23:01 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace ViwoTour +{ + /// + /// Description of About. + /// + public class About : System.Windows.Forms.Form + { + public About() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + + // + // TODO: Add constructor code after the InitializeComponent() call. + // + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + // + // About + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(292, 266); + this.Text = "About"; + this.Name = "About"; + } + #endregion + } +} diff --git a/viwotour/AssemblyInfo.cs b/viwotour/AssemblyInfo.cs new file mode 100644 index 0000000..2f43cf8 --- /dev/null +++ b/viwotour/AssemblyInfo.cs @@ -0,0 +1,12 @@ +using System.Reflection; + +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ViwoTour")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +[assembly: AssemblyVersion("1.0.*")] diff --git a/viwotour/CourseBook.cs b/viwotour/CourseBook.cs new file mode 100644 index 0000000..19d279d --- /dev/null +++ b/viwotour/CourseBook.cs @@ -0,0 +1,61 @@ +/* + * User: aputze + * Date: 03.11.2004 + * Time: 11:09 + */ + +using System; +using System.Collections; + +using System.Data; + +namespace ViwoTour { + public class CourseBook : DataTable { + ArrayList ID_Of_Rows; + ArrayList STATION_Of_Rows; + + public CourseBook() : base("COURSE_BOOK") { + Columns.Add(new DataColumn("ID",typeof(int))); + Columns.Add(new DataColumn("DEPARTUR",typeof(DateTime))); + Columns.Add(new DataColumn("DEPARTURE_STATION",typeof(string))); + Columns.Add(new DataColumn("ARRIVAL",typeof(DateTime))); + Columns.Add(new DataColumn("ARRIVAL_STATION",typeof(string))); + } + + public ArrayList get_ID_Of_Rows() { return ID_Of_Rows; } + public ArrayList get_STATION_Of_Rows() { return STATION_Of_Rows; } + + public void create_ID_Of_Rows() { + ID_Of_Rows=new ArrayList(); + + foreach(DataRow row in Rows) { + if(!ID_Of_Rows.Contains(row["ID"])) { + ID_Of_Rows.Add(row["ID"]); + } + } + } + public void create_STATION_Of_Rows() { + STATION_Of_Rows=new ArrayList(); + + ArrayList DEPARTURE_STATION_Of_Rows=new ArrayList(); + foreach(DataRow row in Rows) { + if(!DEPARTURE_STATION_Of_Rows.Contains(row["DEPARTURE_STATION"])) { + DEPARTURE_STATION_Of_Rows.Add(row["DEPARTURE_STATION"]); + } + } + + ArrayList ARRIVAL_STATION_Of_Rows=new ArrayList(); + foreach(DataRow row in Rows) { + if(!ARRIVAL_STATION_Of_Rows.Contains(row["ARRIVAL_STATION"])) { + ARRIVAL_STATION_Of_Rows.Add(row["ARRIVAL_STATION"]); + } + } + + foreach(string s in DEPARTURE_STATION_Of_Rows) { + if(ARRIVAL_STATION_Of_Rows.Contains(s)) { + STATION_Of_Rows.Add(s); + } + } + } + } +} diff --git a/viwotour/CoursePlan.cs b/viwotour/CoursePlan.cs new file mode 100644 index 0000000..b288c51 --- /dev/null +++ b/viwotour/CoursePlan.cs @@ -0,0 +1,53 @@ +/* + * User: aputze + * Date: 03.11.2004 + * Time: 11:11 + */ + +using System; +using System.Collections; + +using System.Data; + +namespace ViwoTour { + public class CoursePlan : DataTable { + Hashtable Rows_By_DEPARTURE_STATION; + Hashtable Rows_By_ARRIVAL_STATION; + + public CoursePlan() : base("COURSE_PLAN") { + Columns.Add(new DataColumn("ID",typeof(int))); + Columns.Add(new DataColumn("DEPARTURE",typeof(DateTime))); + Columns.Add(new DataColumn("DEPARTURE_STATION",typeof(string))); + Columns.Add(new DataColumn("ARRIVAL",typeof(DateTime))); + Columns.Add(new DataColumn("ARRIVAL_STATION",typeof(string))); + } + + public ArrayList get_Rows_By_DEPARTURE_STATION(string s) { return (ArrayList)Rows_By_DEPARTURE_STATION[s]; } + public ArrayList get_Rows_By_ARRIVAL_STATION(string s) { return (ArrayList)Rows_By_ARRIVAL_STATION[s]; } + + public void create_Rows_By_DEPARTURE_STATION() { + Rows_By_DEPARTURE_STATION=new Hashtable(); + + for(int i=0;i=Properties.Edge.MinimalDuration && + (v2.vertexData.Departure-v1.vertexData.Arrival)<=Properties.Edge.MaximalDuration) { + EdgeData edgeData=new EdgeData(); + edgeData.Duration=v2.vertexData.Departure-v1.vertexData.Arrival; + + Edge e=new Edge(edgeData); + e.v1=v1; + e.v2=v2; + E.Add(e); + + v1.outboundDegree++; + v2.inboundDegree++; + } + } + } + + foreach(Vertex v in V) { + if(!V_By_DepartureStation.Contains(v.vertexData.DepartureStation)) { V_By_DepartureStation.Add(v.vertexData.DepartureStation,new ArrayList()); } + ((ArrayList)V_By_DepartureStation[v.vertexData.DepartureStation]).Add(v); + + + if(!V_By_ArrivalStation.Contains(v.vertexData.ArrivalStation)) { V_By_ArrivalStation.Add(v.vertexData.ArrivalStation,new ArrayList()); } + ((ArrayList)V_By_ArrivalStation[v.vertexData.ArrivalStation]).Add(v); + } + + foreach(Edge e in E) { + if(!E_By_v1.Contains(e.v1)) { E_By_v1.Add(e.v1,new ArrayList()); } + ((ArrayList)E_By_v1[e.v1]).Add(e); + + if(!E_By_v2.Contains(e.v2)) { E_By_v2.Add(e.v2,new ArrayList()); } + ((ArrayList)E_By_v2[e.v2]).Add(e); + } + } + } +} diff --git a/viwotour/MainForm.cs b/viwotour/MainForm.cs new file mode 100644 index 0000000..1b6f06c --- /dev/null +++ b/viwotour/MainForm.cs @@ -0,0 +1,826 @@ +/* + * User: aputze + * Date: 14.11.2004 + * Time: 14:01 + */ + +using System; +using System.Collections; + +using System.Data; +using System.Threading; + +using System.Windows.Forms; + +namespace ViwoTour { + public class MainForm : System.Windows.Forms.Form { + private System.Windows.Forms.TextBox scopeTextBox; + private System.Windows.Forms.Label toursLabel; + private System.Windows.Forms.Label maxWaitingLabel; + private System.Windows.Forms.TextBox productivity_TouringTextBox; + private System.Windows.Forms.TabControl tabControl; + private System.Windows.Forms.Label nonProductiveTouringLabel; + private System.Windows.Forms.Button summaryButton; + private System.Windows.Forms.MenuItem search_TMenuItem; + private System.Windows.Forms.Label search_TLabel; + private System.Windows.Forms.TextBox nonTouredRowsTextBox; + private System.Windows.Forms.Label productivity_TouringLabel; + private System.Windows.Forms.TextBox dataSourceTextBox; + private System.Windows.Forms.MenuItem storeMenuItem; + private System.Windows.Forms.MenuItem sqlMenuItem; + private System.Windows.Forms.Label select_TLabel; + private System.Windows.Forms.ListBox nonTouredRowsListBox; + private System.Windows.Forms.TextBox productivity_RowsTextBox; + private System.Windows.Forms.TextBox initialCatalogTextBox; + private System.Windows.Forms.CheckedListBox stationCheckedListBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox nonProductiveTouringTextBox; + private System.Windows.Forms.TabPage sqlTabPage; + private System.Windows.Forms.TextBox productiveTouringTextBox; + private System.Windows.Forms.TextBox maxTouringTextBox; + private System.Windows.Forms.Label productivity_RowsLabel; + private System.Windows.Forms.TextBox touredRowsTextBox; + private System.Windows.Forms.TabPage propertiesTabPage; + private System.Windows.Forms.MenuItem graphMenuItem; + private System.Windows.Forms.StatusBar statusBar; + private System.Windows.Forms.TabPage summaryTabPage; + private System.Windows.Forms.TextBox nonProductiveRowsTextBox; + private System.Windows.Forms.ListBox touredRowsListBox; + private System.Windows.Forms.TabPage stationTabPage; + private System.Windows.Forms.Label scopeLabel; + private System.Windows.Forms.MenuItem select_TMenuItem; + private System.Windows.Forms.MenuItem disconnectMenuItem; + private System.Windows.Forms.Label dataSourceLabel; + private System.Windows.Forms.Label touredRowsLabel; + private System.Windows.Forms.ProgressBar select_TProgressBar; + private System.Windows.Forms.Label productiveTouringLabel; + private System.Windows.Forms.Label initialCatalogLabel; + private System.Windows.Forms.TextBox maxWaitingTextBox; + private System.Windows.Forms.TextBox minWaitingTextBox; + private System.Windows.Forms.MenuItem create_AMenuItem; + private System.Windows.Forms.TextBox toursTextBox; + private System.Windows.Forms.TextBox productiveRowsTextBox; + private System.Windows.Forms.MenuItem loadMenuItem; + private System.Windows.Forms.Label minWaitingLabel; + private System.Windows.Forms.MenuItem connectMenuItem; + private System.Windows.Forms.MainMenu mainMenu; + private System.Windows.Forms.TabPage progressTabPage; + private System.Windows.Forms.Label maxTouringLabel; + private System.Windows.Forms.Label productiveRowsLabel; + private System.Windows.Forms.ProgressBar search_TProgressBar; + private System.Windows.Forms.MenuItem prepareMenuItem; + + private ViwoTour viwoTour; + + public MainForm() { + InitializeComponent(); + + viwoTour=new ViwoTour(); + viwoTour.search_TProgress+=new ProgressHandler(Search_TProgress); + viwoTour.select_TProgress+=new ProgressHandler(Select_TProgress); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + this.prepareMenuItem = new System.Windows.Forms.MenuItem(); + this.search_TProgressBar = new System.Windows.Forms.ProgressBar(); + this.productiveRowsLabel = new System.Windows.Forms.Label(); + this.maxTouringLabel = new System.Windows.Forms.Label(); + this.progressTabPage = new System.Windows.Forms.TabPage(); + this.mainMenu = new System.Windows.Forms.MainMenu(); + this.connectMenuItem = new System.Windows.Forms.MenuItem(); + this.minWaitingLabel = new System.Windows.Forms.Label(); + this.loadMenuItem = new System.Windows.Forms.MenuItem(); + this.productiveRowsTextBox = new System.Windows.Forms.TextBox(); + this.toursTextBox = new System.Windows.Forms.TextBox(); + this.create_AMenuItem = new System.Windows.Forms.MenuItem(); + this.minWaitingTextBox = new System.Windows.Forms.TextBox(); + this.maxWaitingTextBox = new System.Windows.Forms.TextBox(); + this.initialCatalogLabel = new System.Windows.Forms.Label(); + this.productiveTouringLabel = new System.Windows.Forms.Label(); + this.select_TProgressBar = new System.Windows.Forms.ProgressBar(); + this.touredRowsLabel = new System.Windows.Forms.Label(); + this.dataSourceLabel = new System.Windows.Forms.Label(); + this.disconnectMenuItem = new System.Windows.Forms.MenuItem(); + this.select_TMenuItem = new System.Windows.Forms.MenuItem(); + this.scopeLabel = new System.Windows.Forms.Label(); + this.stationTabPage = new System.Windows.Forms.TabPage(); + this.touredRowsListBox = new System.Windows.Forms.ListBox(); + this.nonProductiveRowsTextBox = new System.Windows.Forms.TextBox(); + this.summaryTabPage = new System.Windows.Forms.TabPage(); + this.statusBar = new System.Windows.Forms.StatusBar(); + this.graphMenuItem = new System.Windows.Forms.MenuItem(); + this.propertiesTabPage = new System.Windows.Forms.TabPage(); + this.touredRowsTextBox = new System.Windows.Forms.TextBox(); + this.productivity_RowsLabel = new System.Windows.Forms.Label(); + this.maxTouringTextBox = new System.Windows.Forms.TextBox(); + this.productiveTouringTextBox = new System.Windows.Forms.TextBox(); + this.sqlTabPage = new System.Windows.Forms.TabPage(); + this.nonProductiveTouringTextBox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.stationCheckedListBox = new System.Windows.Forms.CheckedListBox(); + this.initialCatalogTextBox = new System.Windows.Forms.TextBox(); + this.productivity_RowsTextBox = new System.Windows.Forms.TextBox(); + this.nonTouredRowsListBox = new System.Windows.Forms.ListBox(); + this.select_TLabel = new System.Windows.Forms.Label(); + this.sqlMenuItem = new System.Windows.Forms.MenuItem(); + this.storeMenuItem = new System.Windows.Forms.MenuItem(); + this.dataSourceTextBox = new System.Windows.Forms.TextBox(); + this.productivity_TouringLabel = new System.Windows.Forms.Label(); + this.nonTouredRowsTextBox = new System.Windows.Forms.TextBox(); + this.search_TLabel = new System.Windows.Forms.Label(); + this.search_TMenuItem = new System.Windows.Forms.MenuItem(); + this.summaryButton = new System.Windows.Forms.Button(); + this.nonProductiveTouringLabel = new System.Windows.Forms.Label(); + this.tabControl = new System.Windows.Forms.TabControl(); + this.productivity_TouringTextBox = new System.Windows.Forms.TextBox(); + this.maxWaitingLabel = new System.Windows.Forms.Label(); + this.toursLabel = new System.Windows.Forms.Label(); + this.scopeTextBox = new System.Windows.Forms.TextBox(); + this.progressTabPage.SuspendLayout(); + this.stationTabPage.SuspendLayout(); + this.summaryTabPage.SuspendLayout(); + this.propertiesTabPage.SuspendLayout(); + this.sqlTabPage.SuspendLayout(); + this.tabControl.SuspendLayout(); + this.SuspendLayout(); + // + // prepareMenuItem + // + this.prepareMenuItem.Index = 2; + this.prepareMenuItem.Text = "Prepare"; + this.prepareMenuItem.Click += new System.EventHandler(this.PrepareMenuItemClick); + // + // search_TProgressBar + // + this.search_TProgressBar.Location = new System.Drawing.Point(8, 48); + this.search_TProgressBar.Name = "search_TProgressBar"; + this.search_TProgressBar.Size = new System.Drawing.Size(400, 24); + this.search_TProgressBar.TabIndex = 3; + // + // productiveRowsLabel + // + this.productiveRowsLabel.Location = new System.Drawing.Point(296, 16); + this.productiveRowsLabel.Name = "productiveRowsLabel"; + this.productiveRowsLabel.Size = new System.Drawing.Size(112, 24); + this.productiveRowsLabel.TabIndex = 8; + this.productiveRowsLabel.Text = "Productive Rows"; + // + // maxTouringLabel + // + this.maxTouringLabel.Location = new System.Drawing.Point(16, 88); + this.maxTouringLabel.Name = "maxTouringLabel"; + this.maxTouringLabel.Size = new System.Drawing.Size(112, 24); + this.maxTouringLabel.TabIndex = 4; + this.maxTouringLabel.Text = "Max Touring"; + // + // progressTabPage + // + this.progressTabPage.Controls.Add(this.select_TProgressBar); + this.progressTabPage.Controls.Add(this.select_TLabel); + this.progressTabPage.Controls.Add(this.search_TProgressBar); + this.progressTabPage.Controls.Add(this.search_TLabel); + this.progressTabPage.Location = new System.Drawing.Point(4, 22); + this.progressTabPage.Name = "progressTabPage"; + this.progressTabPage.Size = new System.Drawing.Size(576, 436); + this.progressTabPage.TabIndex = 3; + this.progressTabPage.Text = "Progress"; + // + // mainMenu + // + this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.sqlMenuItem, + this.graphMenuItem}); + // + // connectMenuItem + // + this.connectMenuItem.Index = 0; + this.connectMenuItem.Text = "Connect"; + this.connectMenuItem.Click += new System.EventHandler(this.ConnectMenuItemClick); + // + // minWaitingLabel + // + this.minWaitingLabel.Location = new System.Drawing.Point(16, 16); + this.minWaitingLabel.Name = "minWaitingLabel"; + this.minWaitingLabel.Size = new System.Drawing.Size(112, 24); + this.minWaitingLabel.TabIndex = 0; + this.minWaitingLabel.Text = "Min Waiting"; + // + // loadMenuItem + // + this.loadMenuItem.Index = 3; + this.loadMenuItem.Text = "Load"; + this.loadMenuItem.Click += new System.EventHandler(this.LoadMenuItemClick); + // + // productiveRowsTextBox + // + this.productiveRowsTextBox.Location = new System.Drawing.Point(424, 16); + this.productiveRowsTextBox.Name = "productiveRowsTextBox"; + this.productiveRowsTextBox.ReadOnly = true; + this.productiveRowsTextBox.Size = new System.Drawing.Size(136, 21); + this.productiveRowsTextBox.TabIndex = 9; + this.productiveRowsTextBox.Text = ""; + // + // toursTextBox + // + this.toursTextBox.Location = new System.Drawing.Point(144, 16); + this.toursTextBox.Name = "toursTextBox"; + this.toursTextBox.ReadOnly = true; + this.toursTextBox.Size = new System.Drawing.Size(136, 21); + this.toursTextBox.TabIndex = 1; + this.toursTextBox.Text = ""; + // + // create_AMenuItem + // + this.create_AMenuItem.Index = 0; + this.create_AMenuItem.Text = "create_A"; + this.create_AMenuItem.Click += new System.EventHandler(this.Create_AMenuItemClick); + // + // minWaitingTextBox + // + this.minWaitingTextBox.Location = new System.Drawing.Point(144, 16); + this.minWaitingTextBox.Name = "minWaitingTextBox"; + this.minWaitingTextBox.Size = new System.Drawing.Size(136, 21); + this.minWaitingTextBox.TabIndex = 1; + this.minWaitingTextBox.Text = ""; + this.minWaitingTextBox.TextChanged += new System.EventHandler(this.MinWaitingTextBoxTextChanged); + // + // maxWaitingTextBox + // + this.maxWaitingTextBox.Location = new System.Drawing.Point(144, 48); + this.maxWaitingTextBox.Name = "maxWaitingTextBox"; + this.maxWaitingTextBox.Size = new System.Drawing.Size(136, 21); + this.maxWaitingTextBox.TabIndex = 3; + this.maxWaitingTextBox.Text = ""; + this.maxWaitingTextBox.TextChanged += new System.EventHandler(this.MaxWaitingTextBoxTextChanged); + // + // initialCatalogLabel + // + this.initialCatalogLabel.Location = new System.Drawing.Point(16, 48); + this.initialCatalogLabel.Name = "initialCatalogLabel"; + this.initialCatalogLabel.Size = new System.Drawing.Size(112, 24); + this.initialCatalogLabel.TabIndex = 2; + this.initialCatalogLabel.Text = "Initial Catalog"; + // + // productiveTouringLabel + // + this.productiveTouringLabel.Location = new System.Drawing.Point(296, 120); + this.productiveTouringLabel.Name = "productiveTouringLabel"; + this.productiveTouringLabel.Size = new System.Drawing.Size(112, 24); + this.productiveTouringLabel.TabIndex = 14; + this.productiveTouringLabel.Text = "Productive Touring"; + // + // select_TProgressBar + // + this.select_TProgressBar.Location = new System.Drawing.Point(8, 120); + this.select_TProgressBar.Name = "select_TProgressBar"; + this.select_TProgressBar.Size = new System.Drawing.Size(400, 24); + this.select_TProgressBar.TabIndex = 5; + // + // touredRowsLabel + // + this.touredRowsLabel.Location = new System.Drawing.Point(16, 48); + this.touredRowsLabel.Name = "touredRowsLabel"; + this.touredRowsLabel.Size = new System.Drawing.Size(112, 24); + this.touredRowsLabel.TabIndex = 2; + this.touredRowsLabel.Text = "Toured Rows"; + // + // dataSourceLabel + // + this.dataSourceLabel.Location = new System.Drawing.Point(16, 16); + this.dataSourceLabel.Name = "dataSourceLabel"; + this.dataSourceLabel.Size = new System.Drawing.Size(112, 24); + this.dataSourceLabel.TabIndex = 0; + this.dataSourceLabel.Text = "Data Source"; + // + // disconnectMenuItem + // + this.disconnectMenuItem.Index = 1; + this.disconnectMenuItem.Text = "Disconnect"; + this.disconnectMenuItem.Click += new System.EventHandler(this.DisconnectMenuItemClick); + // + // select_TMenuItem + // + this.select_TMenuItem.Index = 2; + this.select_TMenuItem.Text = "select_T"; + this.select_TMenuItem.Click += new System.EventHandler(this.Select_TMenuItemClick); + // + // scopeLabel + // + this.scopeLabel.Location = new System.Drawing.Point(16, 128); + this.scopeLabel.Name = "scopeLabel"; + this.scopeLabel.Size = new System.Drawing.Size(112, 24); + this.scopeLabel.TabIndex = 6; + this.scopeLabel.Text = "Scope"; + // + // stationTabPage + // + this.stationTabPage.Controls.Add(this.stationCheckedListBox); + this.stationTabPage.Location = new System.Drawing.Point(4, 22); + this.stationTabPage.Name = "stationTabPage"; + this.stationTabPage.Size = new System.Drawing.Size(576, 436); + this.stationTabPage.TabIndex = 2; + this.stationTabPage.Text = "Station"; + // + // touredRowsListBox + // + this.touredRowsListBox.Location = new System.Drawing.Point(144, 48); + this.touredRowsListBox.Name = "touredRowsListBox"; + this.touredRowsListBox.Size = new System.Drawing.Size(136, 95); + this.touredRowsListBox.TabIndex = 3; + // + // nonProductiveRowsTextBox + // + this.nonProductiveRowsTextBox.Location = new System.Drawing.Point(424, 48); + this.nonProductiveRowsTextBox.Name = "nonProductiveRowsTextBox"; + this.nonProductiveRowsTextBox.ReadOnly = true; + this.nonProductiveRowsTextBox.Size = new System.Drawing.Size(136, 21); + this.nonProductiveRowsTextBox.TabIndex = 11; + this.nonProductiveRowsTextBox.Text = ""; + // + // summaryTabPage + // + this.summaryTabPage.Controls.Add(this.summaryButton); + this.summaryTabPage.Controls.Add(this.productivity_TouringTextBox); + this.summaryTabPage.Controls.Add(this.productivity_TouringLabel); + this.summaryTabPage.Controls.Add(this.nonProductiveTouringTextBox); + this.summaryTabPage.Controls.Add(this.nonProductiveTouringLabel); + this.summaryTabPage.Controls.Add(this.productiveTouringTextBox); + this.summaryTabPage.Controls.Add(this.productiveTouringLabel); + this.summaryTabPage.Controls.Add(this.productivity_RowsTextBox); + this.summaryTabPage.Controls.Add(this.productivity_RowsLabel); + this.summaryTabPage.Controls.Add(this.nonProductiveRowsTextBox); + this.summaryTabPage.Controls.Add(this.label2); + this.summaryTabPage.Controls.Add(this.productiveRowsTextBox); + this.summaryTabPage.Controls.Add(this.productiveRowsLabel); + this.summaryTabPage.Controls.Add(this.nonTouredRowsTextBox); + this.summaryTabPage.Controls.Add(this.nonTouredRowsListBox); + this.summaryTabPage.Controls.Add(this.label1); + this.summaryTabPage.Controls.Add(this.touredRowsTextBox); + this.summaryTabPage.Controls.Add(this.touredRowsListBox); + this.summaryTabPage.Controls.Add(this.touredRowsLabel); + this.summaryTabPage.Controls.Add(this.toursTextBox); + this.summaryTabPage.Controls.Add(this.toursLabel); + this.summaryTabPage.Location = new System.Drawing.Point(4, 22); + this.summaryTabPage.Name = "summaryTabPage"; + this.summaryTabPage.Size = new System.Drawing.Size(576, 364); + this.summaryTabPage.TabIndex = 4; + this.summaryTabPage.Text = "Summary"; + // + // statusBar + // + this.statusBar.Location = new System.Drawing.Point(0, 390); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(584, 24); + this.statusBar.TabIndex = 0; + // + // graphMenuItem + // + this.graphMenuItem.Index = 1; + this.graphMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.create_AMenuItem, + this.search_TMenuItem, + this.select_TMenuItem}); + this.graphMenuItem.Text = "Graph"; + // + // propertiesTabPage + // + this.propertiesTabPage.Controls.Add(this.scopeTextBox); + this.propertiesTabPage.Controls.Add(this.scopeLabel); + this.propertiesTabPage.Controls.Add(this.maxTouringTextBox); + this.propertiesTabPage.Controls.Add(this.maxTouringLabel); + this.propertiesTabPage.Controls.Add(this.maxWaitingTextBox); + this.propertiesTabPage.Controls.Add(this.maxWaitingLabel); + this.propertiesTabPage.Controls.Add(this.minWaitingTextBox); + this.propertiesTabPage.Controls.Add(this.minWaitingLabel); + this.propertiesTabPage.Location = new System.Drawing.Point(4, 22); + this.propertiesTabPage.Name = "propertiesTabPage"; + this.propertiesTabPage.Size = new System.Drawing.Size(576, 436); + this.propertiesTabPage.TabIndex = 1; + this.propertiesTabPage.Text = "Properties"; + // + // touredRowsTextBox + // + this.touredRowsTextBox.Location = new System.Drawing.Point(144, 152); + this.touredRowsTextBox.Name = "touredRowsTextBox"; + this.touredRowsTextBox.ReadOnly = true; + this.touredRowsTextBox.Size = new System.Drawing.Size(136, 21); + this.touredRowsTextBox.TabIndex = 4; + this.touredRowsTextBox.Text = ""; + // + // productivity_RowsLabel + // + this.productivity_RowsLabel.Location = new System.Drawing.Point(296, 80); + this.productivity_RowsLabel.Name = "productivity_RowsLabel"; + this.productivity_RowsLabel.Size = new System.Drawing.Size(112, 24); + this.productivity_RowsLabel.TabIndex = 12; + this.productivity_RowsLabel.Text = "Productivity"; + // + // maxTouringTextBox + // + this.maxTouringTextBox.Location = new System.Drawing.Point(144, 88); + this.maxTouringTextBox.Name = "maxTouringTextBox"; + this.maxTouringTextBox.Size = new System.Drawing.Size(136, 21); + this.maxTouringTextBox.TabIndex = 5; + this.maxTouringTextBox.Text = ""; + this.maxTouringTextBox.TextChanged += new System.EventHandler(this.MaxTouringTextBoxTextChanged); + // + // productiveTouringTextBox + // + this.productiveTouringTextBox.Location = new System.Drawing.Point(424, 120); + this.productiveTouringTextBox.Name = "productiveTouringTextBox"; + this.productiveTouringTextBox.ReadOnly = true; + this.productiveTouringTextBox.Size = new System.Drawing.Size(136, 21); + this.productiveTouringTextBox.TabIndex = 15; + this.productiveTouringTextBox.Text = ""; + // + // sqlTabPage + // + this.sqlTabPage.Controls.Add(this.initialCatalogTextBox); + this.sqlTabPage.Controls.Add(this.initialCatalogLabel); + this.sqlTabPage.Controls.Add(this.dataSourceTextBox); + this.sqlTabPage.Controls.Add(this.dataSourceLabel); + this.sqlTabPage.Location = new System.Drawing.Point(4, 22); + this.sqlTabPage.Name = "sqlTabPage"; + this.sqlTabPage.Size = new System.Drawing.Size(576, 436); + this.sqlTabPage.TabIndex = 0; + this.sqlTabPage.Text = "Sql"; + // + // nonProductiveTouringTextBox + // + this.nonProductiveTouringTextBox.Location = new System.Drawing.Point(424, 152); + this.nonProductiveTouringTextBox.Name = "nonProductiveTouringTextBox"; + this.nonProductiveTouringTextBox.ReadOnly = true; + this.nonProductiveTouringTextBox.Size = new System.Drawing.Size(136, 21); + this.nonProductiveTouringTextBox.TabIndex = 17; + this.nonProductiveTouringTextBox.Text = ""; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 184); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(120, 24); + this.label1.TabIndex = 5; + this.label1.Text = "Non-Toured Rows"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(296, 48); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(112, 24); + this.label2.TabIndex = 10; + this.label2.Text = "Non-Productive Rows"; + // + // stationCheckedListBox + // + this.stationCheckedListBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.stationCheckedListBox.Location = new System.Drawing.Point(0, 0); + this.stationCheckedListBox.Name = "stationCheckedListBox"; + this.stationCheckedListBox.Size = new System.Drawing.Size(576, 436); + this.stationCheckedListBox.TabIndex = 0; + // + // initialCatalogTextBox + // + this.initialCatalogTextBox.Location = new System.Drawing.Point(144, 48); + this.initialCatalogTextBox.Name = "initialCatalogTextBox"; + this.initialCatalogTextBox.Size = new System.Drawing.Size(136, 21); + this.initialCatalogTextBox.TabIndex = 3; + this.initialCatalogTextBox.Text = ""; + this.initialCatalogTextBox.TextChanged += new System.EventHandler(this.InitialCatalogTextBoxTextChanged); + // + // productivity_RowsTextBox + // + this.productivity_RowsTextBox.Location = new System.Drawing.Point(424, 80); + this.productivity_RowsTextBox.Name = "productivity_RowsTextBox"; + this.productivity_RowsTextBox.ReadOnly = true; + this.productivity_RowsTextBox.Size = new System.Drawing.Size(136, 21); + this.productivity_RowsTextBox.TabIndex = 13; + this.productivity_RowsTextBox.Text = ""; + // + // nonTouredRowsListBox + // + this.nonTouredRowsListBox.Location = new System.Drawing.Point(144, 184); + this.nonTouredRowsListBox.Name = "nonTouredRowsListBox"; + this.nonTouredRowsListBox.Size = new System.Drawing.Size(136, 95); + this.nonTouredRowsListBox.TabIndex = 6; + // + // select_TLabel + // + this.select_TLabel.Location = new System.Drawing.Point(16, 88); + this.select_TLabel.Name = "select_TLabel"; + this.select_TLabel.Size = new System.Drawing.Size(112, 24); + this.select_TLabel.TabIndex = 4; + this.select_TLabel.Text = "select_T"; + // + // sqlMenuItem + // + this.sqlMenuItem.Index = 0; + this.sqlMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.connectMenuItem, + this.disconnectMenuItem, + this.prepareMenuItem, + this.loadMenuItem, + this.storeMenuItem}); + this.sqlMenuItem.Text = "Sql"; + // + // storeMenuItem + // + this.storeMenuItem.Index = 4; + this.storeMenuItem.Text = "Store"; + this.storeMenuItem.Click += new System.EventHandler(this.StoreMenuItemClick); + // + // dataSourceTextBox + // + this.dataSourceTextBox.Location = new System.Drawing.Point(144, 16); + this.dataSourceTextBox.Name = "dataSourceTextBox"; + this.dataSourceTextBox.Size = new System.Drawing.Size(136, 21); + this.dataSourceTextBox.TabIndex = 1; + this.dataSourceTextBox.Text = ""; + this.dataSourceTextBox.TextChanged += new System.EventHandler(this.DataSourceTextBoxTextChanged); + // + // productivity_TouringLabel + // + this.productivity_TouringLabel.Location = new System.Drawing.Point(296, 184); + this.productivity_TouringLabel.Name = "productivity_TouringLabel"; + this.productivity_TouringLabel.Size = new System.Drawing.Size(112, 24); + this.productivity_TouringLabel.TabIndex = 18; + this.productivity_TouringLabel.Text = "Productivity"; + // + // nonTouredRowsTextBox + // + this.nonTouredRowsTextBox.Location = new System.Drawing.Point(144, 288); + this.nonTouredRowsTextBox.Name = "nonTouredRowsTextBox"; + this.nonTouredRowsTextBox.ReadOnly = true; + this.nonTouredRowsTextBox.Size = new System.Drawing.Size(136, 21); + this.nonTouredRowsTextBox.TabIndex = 7; + this.nonTouredRowsTextBox.Text = ""; + // + // search_TLabel + // + this.search_TLabel.Location = new System.Drawing.Point(16, 16); + this.search_TLabel.Name = "search_TLabel"; + this.search_TLabel.Size = new System.Drawing.Size(112, 24); + this.search_TLabel.TabIndex = 2; + this.search_TLabel.Text = "search_T"; + // + // search_TMenuItem + // + this.search_TMenuItem.Index = 1; + this.search_TMenuItem.Text = "search_T"; + this.search_TMenuItem.Click += new System.EventHandler(this.Search_TMenuItemClick); + // + // summaryButton + // + this.summaryButton.Location = new System.Drawing.Point(16, 328); + this.summaryButton.Name = "summaryButton"; + this.summaryButton.Size = new System.Drawing.Size(120, 24); + this.summaryButton.TabIndex = 20; + this.summaryButton.Text = "Summary"; + this.summaryButton.Click += new System.EventHandler(this.SummaryButtonClick); + // + // nonProductiveTouringLabel + // + this.nonProductiveTouringLabel.Location = new System.Drawing.Point(296, 152); + this.nonProductiveTouringLabel.Name = "nonProductiveTouringLabel"; + this.nonProductiveTouringLabel.Size = new System.Drawing.Size(112, 24); + this.nonProductiveTouringLabel.TabIndex = 16; + this.nonProductiveTouringLabel.Text = "Non-Productive Touring"; + // + // tabControl + // + this.tabControl.Controls.Add(this.sqlTabPage); + this.tabControl.Controls.Add(this.propertiesTabPage); + this.tabControl.Controls.Add(this.stationTabPage); + this.tabControl.Controls.Add(this.progressTabPage); + this.tabControl.Controls.Add(this.summaryTabPage); + this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl.Location = new System.Drawing.Point(0, 0); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 0; + this.tabControl.Size = new System.Drawing.Size(584, 390); + this.tabControl.TabIndex = 1; + // + // productivity_TouringTextBox + // + this.productivity_TouringTextBox.Location = new System.Drawing.Point(424, 184); + this.productivity_TouringTextBox.Name = "productivity_TouringTextBox"; + this.productivity_TouringTextBox.ReadOnly = true; + this.productivity_TouringTextBox.Size = new System.Drawing.Size(136, 21); + this.productivity_TouringTextBox.TabIndex = 19; + this.productivity_TouringTextBox.Text = ""; + // + // maxWaitingLabel + // + this.maxWaitingLabel.Location = new System.Drawing.Point(16, 48); + this.maxWaitingLabel.Name = "maxWaitingLabel"; + this.maxWaitingLabel.Size = new System.Drawing.Size(112, 24); + this.maxWaitingLabel.TabIndex = 2; + this.maxWaitingLabel.Text = "Max Waiting"; + // + // toursLabel + // + this.toursLabel.Location = new System.Drawing.Point(16, 16); + this.toursLabel.Name = "toursLabel"; + this.toursLabel.Size = new System.Drawing.Size(112, 24); + this.toursLabel.TabIndex = 0; + this.toursLabel.Text = "Tours"; + // + // scopeTextBox + // + this.scopeTextBox.Location = new System.Drawing.Point(144, 128); + this.scopeTextBox.Name = "scopeTextBox"; + this.scopeTextBox.Size = new System.Drawing.Size(136, 21); + this.scopeTextBox.TabIndex = 7; + this.scopeTextBox.Text = ""; + this.scopeTextBox.TextChanged += new System.EventHandler(this.ScopeTextBoxTextChanged); + // + // MainForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); + this.ClientSize = new System.Drawing.Size(584, 414); + this.Controls.Add(this.tabControl); + this.Controls.Add(this.statusBar); + this.Menu = this.mainMenu; + this.Name = "MainForm"; + this.Text = "MainForm"; + this.Load += new System.EventHandler(this.MainFormLoad); + this.progressTabPage.ResumeLayout(false); + this.stationTabPage.ResumeLayout(false); + this.summaryTabPage.ResumeLayout(false); + this.propertiesTabPage.ResumeLayout(false); + this.sqlTabPage.ResumeLayout(false); + this.tabControl.ResumeLayout(false); + this.ResumeLayout(false); + } + #endregion + + [STAThread] + public static void Main() { + Application.Run(new MainForm()); + } + void MainFormLoad(object sender, System.EventArgs e) { + minWaitingTextBox.Text=Properties.MinWaiting.ToString(); + maxWaitingTextBox.Text=Properties.MaxWaiting.ToString(); + + maxTouringTextBox.Text=Properties.MaxTouring.ToString(); + + scopeTextBox.Text=Properties.Scope.ToString(); + } + + void DataSourceTextBoxTextChanged(object sender, System.EventArgs e) { Properties.DataSource=dataSourceTextBox.Text; } + void InitialCatalogTextBoxTextChanged(object sender, System.EventArgs e) { Properties.InitialCatalog=initialCatalogTextBox.Text; } + + void MinWaitingTextBoxTextChanged(object sender, System.EventArgs e) { + try { Properties.MinWaiting=TimeSpan.Parse(minWaitingTextBox.Text); } catch {} + } + void MaxWaitingTextBoxTextChanged(object sender, System.EventArgs e) { + try { Properties.MaxWaiting=TimeSpan.Parse(maxWaitingTextBox.Text); } catch {} + } + void MaxTouringTextBoxTextChanged(object sender, System.EventArgs e) { + try { Properties.MaxTouring=TimeSpan.Parse(maxTouringTextBox.Text); } catch {} + } + void ScopeTextBoxTextChanged(object sender, System.EventArgs e) { + try { Properties.Scope=System.Int32.Parse(scopeTextBox.Text); } catch {} + } + + void ConnectMenuItemClick(object sender, System.EventArgs e) { + viwoTour.Connect(); + statusBar.Text="Connected"; + } + void DisconnectMenuItemClick(object sender, System.EventArgs e) { + viwoTour.Disconnect(); + statusBar.Text="Disconnected"; + } + + void PrepareMenuItemClick(object sender, System.EventArgs e) { + viwoTour.Prepare(); + statusBar.Text="Prepared"; + } + + void LoadMenuItemClick(object sender, System.EventArgs e) { + statusBar.Text="Load..."; + viwoTour.Load(); + statusBar.Text="Loaded"; + + //HACK + stationCheckedListBox.Items.Clear(); + foreach(string station in viwoTour.courseBook.get_STATION_Of_Rows()) { + stationCheckedListBox.Items.Add(station); + } + } + void StoreMenuItemClick(object sender, System.EventArgs e) { + statusBar.Text="Store..."; + viwoTour.Store(); + statusBar.Text="Stored"; + } + + void Create_AMenuItemClick(object sender, System.EventArgs e) { + new Thread(new ThreadStart(Create_AStart)).Start(); + } + void Create_AStart() { + statusBar.Text="create_A..."; + viwoTour.create_A(); + statusBar.Text="create_A done"; + } + + void Search_TMenuItemClick(object sender, System.EventArgs e) { + //HACK + viwoTour.S.Clear(); + foreach(string station in stationCheckedListBox.CheckedItems) { + viwoTour.S.Add(station); + } + + new Thread(new ThreadStart(Search_TStart)).Start(); + } + void Search_TStart() { + statusBar.Text="search_T..."; + + DateTime begin=DateTime.Now; + viwoTour.search_T(); + DateTime end=DateTime.Now; + + statusBar.Text="search_T done in "+(end-begin); + } + void Search_TProgress(int Progress) { search_TProgressBar.Value=Progress; } + + void Select_TMenuItemClick(object sender, System.EventArgs e) { + new Thread(new ThreadStart(Select_TStart)).Start(); + } + void Select_TStart() { + statusBar.Text="select_T..."; + + DateTime begin=DateTime.Now; + viwoTour.select_T(); + DateTime end=DateTime.Now; + + statusBar.Text="select_T done in "+(end-begin); + } + void Select_TProgress(int Progress) { select_TProgressBar.Value=Progress; } + + void SummaryButtonClick(object sender, System.EventArgs e) { + ArrayList TouredIDs=new ArrayList(); + ArrayList NonTouredIDs=(ArrayList)viwoTour.courseBook.get_ID_Of_Rows().Clone(); + + int Tours=0; + + int ProductiveRows=0; + int NonProductiveRows=0; + + TimeSpan ProductiveTouring=new TimeSpan(); + TimeSpan NonProductiveTouring=new TimeSpan(); + + foreach(ArrayList t_select in viwoTour.T_select) { + Tours++; + + for(int i=0;i=Properties.MinWaiting && + ((DateTime)row2[1]-(DateTime)row1[3])<=Properties.MaxWaiting; + } + } + } + + public event ProgressHandler search_TProgress; + public void search_T() { + if(search_TProgress!=null) { search_TProgress(0); } + + T_search.Clear(); + + foreach(string s in S) { + ArrayList R1=coursePlan.get_Rows_By_DEPARTURE_STATION(s); + ArrayList R2=coursePlan.get_Rows_By_ARRIVAL_STATION(s); + + if(R1==null || R2==null) { continue; } + + ArrayList T=new ArrayList(); + ArrayList T_prev; + ArrayList T_next; + + T_prev=new ArrayList(); + foreach(int r1 in R1) { + ArrayList t1=new ArrayList(); + t1.Add(r1); + + T_prev.Add(t1); + } + + while(T_prev.Count>0) { + T_next=new ArrayList(); + + foreach(ArrayList t_prev in T_prev) { + int r1=(int)t_prev[0]; + + int r_prev=(int)t_prev[t_prev.Count-1]; + for(int r_next=0;r_next0) { + int ID=(int)IDsToDo[0]; + + ArrayList T_filter=new ArrayList(); + foreach(ArrayList t_search in T_search) { + foreach(int r in t_search) { + DataRow row=coursePlan.Rows[r]; + + if(ID==(int)row[0]) { + T_filter.Add(t_search); + + break; + } + } + } + if(T_filter.Count==0) { + IDsToDo.Remove(ID); + if(!IDsDone.Contains(ID)) { IDsDone.Add(ID); } + + continue; + } + + double[] P=new double[T_filter.Count]; + for(int i=0;iP[k]) { k=l; } + } + + foreach(int r in (ArrayList)T_filter[k]) { + DataRow row=coursePlan.Rows[r]; + + IDsToDo.Remove(row[0]); + if(!IDsDone.Contains(row[0])) { IDsDone.Add(row[0]); } + } + + T_select.Add(T_filter[k]); + + if(select_TProgress!=null) { select_TProgress((100*IDsDone.Count)/(IDsToDo.Count+IDsDone.Count)); } + } + + if(select_TProgress!=null) { select_TProgress(100); } + } + } +} diff --git a/viwotour/ViwoTourMain.cs b/viwotour/ViwoTourMain.cs new file mode 100644 index 0000000..d033209 --- /dev/null +++ b/viwotour/ViwoTourMain.cs @@ -0,0 +1,1038 @@ +/* + * Created by SharpDevelop. + * User: Johannes Schauer + * Date: 08.11.2004 + * Time: 21:13 + * + */ +using System; +using System.Collections; +using System.Data; +using System.Windows.Forms; + +using System.Threading; + + +namespace ViwoTour +{ + public class ViwoTourMain : System.Windows.Forms.Form + { + private System.Windows.Forms.TextBox scopeTextBox; + private System.Windows.Forms.Label Panel4Label3; + private System.Windows.Forms.ProgressBar ProgressTProgressBar; + private System.Windows.Forms.GroupBox Panel4GroupBox1; + private System.Windows.Forms.Label Panel5Label0; + private System.Windows.Forms.Label Panel5Label1; + private System.Windows.Forms.Label Panel5Label3; + private System.Windows.Forms.Label Panel5Label4; + private System.Windows.Forms.Label Panel5Label5; + private System.Windows.Forms.Label Panel5Label7; + private System.Windows.Forms.Label Panel5Label8; + private System.Windows.Forms.TextBox Panel2TextBox1; + private System.Windows.Forms.Button NextButton; + private System.Windows.Forms.Button Panel1StandardButton; + private System.Windows.Forms.TextBox DataSourceTextBox; + private System.Windows.Forms.TextBox InitialCatalogTextBox; + private System.Windows.Forms.Label Panel0Label1; + private System.Windows.Forms.GroupBox Panel4GroupBox2; + private System.Windows.Forms.Label Panel0Label2; + private System.Windows.Forms.Panel Panel3; + private System.Windows.Forms.Panel Panel2; + private System.Windows.Forms.Panel Panel1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label Panel1Label1; + private System.Windows.Forms.Panel Panel5; + private System.Windows.Forms.Panel Panel4; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox maxTouringTextBox; + private System.Windows.Forms.Label Panel2Label1; + private System.Windows.Forms.Label Panel2Label0; + private System.Windows.Forms.Label Panel3Label0; + private System.Windows.Forms.Button AbortButton; + private System.Windows.Forms.Button Panel4StandardButton; + private System.Windows.Forms.Button Panel5SelectButton; + private System.Windows.Forms.Button Panel5SearchButton; + private System.Windows.Forms.Label Panel4Label1; + private System.Windows.Forms.GroupBox Panel1GroupBox1; + private System.Windows.Forms.Label Panel1Label4; + private System.Windows.Forms.Label Panel4Label2; + private System.Windows.Forms.GroupBox LineBottom; + private System.Windows.Forms.Label Panel4Label4; + private System.Windows.Forms.Label Panel1Label0; + private System.Windows.Forms.TextBox minWaitingTextBox; + private System.Windows.Forms.Label Panel1Label2; + private System.Windows.Forms.Label Panel1Label3; + private System.Windows.Forms.ProgressBar ProgressSProgressBar; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label Panel4Label5; + private System.Windows.Forms.Button BackButton; + private System.Windows.Forms.Label Panel6Label1; + private System.Windows.Forms.Label Panel6Label0; + private System.Windows.Forms.TextBox maxWaitingTextBox; + private System.Windows.Forms.Label Panel4Label0; + private System.Windows.Forms.Label Panel3Label1; + private System.Windows.Forms.Panel Panel0; + private System.Windows.Forms.Panel Panel6; + private System.Windows.Forms.ListBox StationsListBox; + private System.Windows.Forms.TextBox Panel6TextBox1; + private System.Windows.Forms.Button Panel2MakeButton; + + protected ViwoTour viwoTour; + + int ActualStep = 0; + + public ViwoTourMain() + { + viwoTour=new ViwoTour(); + + InitializeComponent(); + viwoTour.search_TProgress+=new ProgressHandler(Search_TProgress); + viwoTour.select_TProgress+=new ProgressHandler(Select_TProgress); + + minWaitingTextBox.Text=Properties.MinWaiting.ToString(); + maxWaitingTextBox.Text=Properties.MaxWaiting.ToString(); + maxTouringTextBox.Text=Properties.MaxTouring.ToString(); + scopeTextBox.Text=Properties.Scope.ToString(); + + } + + [STAThread] + public static void Main(string[] args) + { + Application.Run(new ViwoTourMain()); + } + + #region Windows Forms Designer generated code + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(ViwoTourMain)); + this.Panel2MakeButton = new System.Windows.Forms.Button(); + this.Panel6TextBox1 = new System.Windows.Forms.TextBox(); + this.StationsListBox = new System.Windows.Forms.ListBox(); + this.Panel6 = new System.Windows.Forms.Panel(); + this.Panel0 = new System.Windows.Forms.Panel(); + this.Panel3Label1 = new System.Windows.Forms.Label(); + this.Panel4Label0 = new System.Windows.Forms.Label(); + this.maxWaitingTextBox = new System.Windows.Forms.TextBox(); + this.Panel6Label0 = new System.Windows.Forms.Label(); + this.Panel6Label1 = new System.Windows.Forms.Label(); + this.BackButton = new System.Windows.Forms.Button(); + this.Panel4Label5 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.ProgressSProgressBar = new System.Windows.Forms.ProgressBar(); + this.Panel1Label3 = new System.Windows.Forms.Label(); + this.Panel1Label2 = new System.Windows.Forms.Label(); + this.minWaitingTextBox = new System.Windows.Forms.TextBox(); + this.Panel1Label0 = new System.Windows.Forms.Label(); + this.Panel4Label4 = new System.Windows.Forms.Label(); + this.LineBottom = new System.Windows.Forms.GroupBox(); + this.Panel4Label2 = new System.Windows.Forms.Label(); + this.Panel1Label4 = new System.Windows.Forms.Label(); + this.Panel1GroupBox1 = new System.Windows.Forms.GroupBox(); + this.Panel4Label1 = new System.Windows.Forms.Label(); + this.Panel5SearchButton = new System.Windows.Forms.Button(); + this.Panel5SelectButton = new System.Windows.Forms.Button(); + this.Panel4StandardButton = new System.Windows.Forms.Button(); + this.AbortButton = new System.Windows.Forms.Button(); + this.Panel3Label0 = new System.Windows.Forms.Label(); + this.Panel2Label0 = new System.Windows.Forms.Label(); + this.Panel2Label1 = new System.Windows.Forms.Label(); + this.maxTouringTextBox = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.Panel4 = new System.Windows.Forms.Panel(); + this.Panel5 = new System.Windows.Forms.Panel(); + this.Panel1Label1 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.Panel1 = new System.Windows.Forms.Panel(); + this.Panel2 = new System.Windows.Forms.Panel(); + this.Panel3 = new System.Windows.Forms.Panel(); + this.Panel0Label2 = new System.Windows.Forms.Label(); + this.Panel4GroupBox2 = new System.Windows.Forms.GroupBox(); + this.Panel0Label1 = new System.Windows.Forms.Label(); + this.InitialCatalogTextBox = new System.Windows.Forms.TextBox(); + this.DataSourceTextBox = new System.Windows.Forms.TextBox(); + this.Panel1StandardButton = new System.Windows.Forms.Button(); + this.NextButton = new System.Windows.Forms.Button(); + this.Panel2TextBox1 = new System.Windows.Forms.TextBox(); + this.Panel5Label8 = new System.Windows.Forms.Label(); + this.Panel5Label7 = new System.Windows.Forms.Label(); + this.Panel5Label5 = new System.Windows.Forms.Label(); + this.Panel5Label4 = new System.Windows.Forms.Label(); + this.Panel5Label3 = new System.Windows.Forms.Label(); + this.Panel5Label1 = new System.Windows.Forms.Label(); + this.Panel5Label0 = new System.Windows.Forms.Label(); + this.Panel4GroupBox1 = new System.Windows.Forms.GroupBox(); + this.ProgressTProgressBar = new System.Windows.Forms.ProgressBar(); + this.Panel4Label3 = new System.Windows.Forms.Label(); + this.scopeTextBox = new System.Windows.Forms.TextBox(); + this.Panel6.SuspendLayout(); + this.Panel0.SuspendLayout(); + this.Panel1GroupBox1.SuspendLayout(); + this.Panel4.SuspendLayout(); + this.Panel5.SuspendLayout(); + this.Panel1.SuspendLayout(); + this.Panel2.SuspendLayout(); + this.Panel3.SuspendLayout(); + this.Panel4GroupBox2.SuspendLayout(); + this.Panel4GroupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // Panel2MakeButton + // + this.Panel2MakeButton.Location = new System.Drawing.Point(16, 96); + this.Panel2MakeButton.Name = "Panel2MakeButton"; + this.Panel2MakeButton.Size = new System.Drawing.Size(128, 24); + this.Panel2MakeButton.TabIndex = 4; + this.Panel2MakeButton.Text = "Tabellen erstellen"; + this.Panel2MakeButton.Click += new System.EventHandler(this.Panel2MakeButtonClick); + // + // Panel6TextBox1 + // + this.Panel6TextBox1.Location = new System.Drawing.Point(16, 80); + this.Panel6TextBox1.Multiline = true; + this.Panel6TextBox1.Name = "Panel6TextBox1"; + this.Panel6TextBox1.Size = new System.Drawing.Size(296, 216); + this.Panel6TextBox1.TabIndex = 2; + this.Panel6TextBox1.Text = ""; + // + // StationsListBox + // + this.StationsListBox.Location = new System.Drawing.Point(16, 80); + this.StationsListBox.Name = "StationsListBox"; + this.StationsListBox.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple; + this.StationsListBox.Size = new System.Drawing.Size(296, 212); + this.StationsListBox.Sorted = true; + this.StationsListBox.TabIndex = 0; + // + // Panel6 + // + this.Panel6.Controls.Add(this.Panel6TextBox1); + this.Panel6.Controls.Add(this.Panel6Label1); + this.Panel6.Controls.Add(this.Panel6Label0); + this.Panel6.Location = new System.Drawing.Point(168, 8); + this.Panel6.Name = "Panel6"; + this.Panel6.Size = new System.Drawing.Size(320, 304); + this.Panel6.TabIndex = 12; + this.Panel6.Visible = false; + // + // Panel0 + // + this.Panel0.BackColor = System.Drawing.SystemColors.Control; + this.Panel0.Controls.Add(this.Panel0Label2); + this.Panel0.Controls.Add(this.Panel0Label1); + this.Panel0.Location = new System.Drawing.Point(168, 8); + this.Panel0.Name = "Panel0"; + this.Panel0.Size = new System.Drawing.Size(320, 304); + this.Panel0.TabIndex = 1; + // + // Panel3Label1 + // + this.Panel3Label1.Location = new System.Drawing.Point(16, 48); + this.Panel3Label1.Name = "Panel3Label1"; + this.Panel3Label1.Size = new System.Drawing.Size(288, 16); + this.Panel3Label1.TabIndex = 2; + this.Panel3Label1.Text = "Whlen Sie die gewnschten Stationen aus."; + // + // Panel4Label0 + // + this.Panel4Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel4Label0.Location = new System.Drawing.Point(16, 16); + this.Panel4Label0.Name = "Panel4Label0"; + this.Panel4Label0.Size = new System.Drawing.Size(224, 16); + this.Panel4Label0.TabIndex = 0; + this.Panel4Label0.Text = "Schritt Vier"; + // + // maxWaitingTextBox + // + this.maxWaitingTextBox.Location = new System.Drawing.Point(88, 48); + this.maxWaitingTextBox.Name = "maxWaitingTextBox"; + this.maxWaitingTextBox.Size = new System.Drawing.Size(192, 20); + this.maxWaitingTextBox.TabIndex = 1; + this.maxWaitingTextBox.Text = "01:00:00"; + // + // Panel6Label0 + // + this.Panel6Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel6Label0.Location = new System.Drawing.Point(16, 16); + this.Panel6Label0.Name = "Panel6Label0"; + this.Panel6Label0.Size = new System.Drawing.Size(152, 16); + this.Panel6Label0.TabIndex = 0; + this.Panel6Label0.Text = "Schritt Sechs"; + // + // Panel6Label1 + // + this.Panel6Label1.Location = new System.Drawing.Point(16, 48); + this.Panel6Label1.Name = "Panel6Label1"; + this.Panel6Label1.Size = new System.Drawing.Size(232, 16); + this.Panel6Label1.TabIndex = 1; + this.Panel6Label1.Text = "Hier die Auswertung:"; + // + // BackButton + // + this.BackButton.Enabled = false; + this.BackButton.Location = new System.Drawing.Point(232, 320); + this.BackButton.Name = "BackButton"; + this.BackButton.Size = new System.Drawing.Size(80, 24); + this.BackButton.TabIndex = 2; + this.BackButton.Text = "< Zurck"; + this.BackButton.Click += new System.EventHandler(this.BackButtonClick); + // + // Panel4Label5 + // + this.Panel4Label5.Location = new System.Drawing.Point(24, 232); + this.Panel4Label5.Name = "Panel4Label5"; + this.Panel4Label5.Size = new System.Drawing.Size(72, 16); + this.Panel4Label5.TabIndex = 5; + this.Panel4Label5.Text = "Sichtweite:"; + this.Panel4Label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(164, 314); + this.pictureBox1.TabIndex = 8; + this.pictureBox1.TabStop = false; + // + // ProgressSProgressBar + // + this.ProgressSProgressBar.Location = new System.Drawing.Point(16, 128); + this.ProgressSProgressBar.Name = "ProgressSProgressBar"; + this.ProgressSProgressBar.Size = new System.Drawing.Size(296, 16); + this.ProgressSProgressBar.TabIndex = 4; + // + // Panel1Label3 + // + this.Panel1Label3.Location = new System.Drawing.Point(16, 72); + this.Panel1Label3.Name = "Panel1Label3"; + this.Panel1Label3.Size = new System.Drawing.Size(64, 16); + this.Panel1Label3.TabIndex = 3; + this.Panel1Label3.Text = "Host:"; + this.Panel1Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // Panel1Label2 + // + this.Panel1Label2.Location = new System.Drawing.Point(16, 24); + this.Panel1Label2.Name = "Panel1Label2"; + this.Panel1Label2.Size = new System.Drawing.Size(272, 48); + this.Panel1Label2.TabIndex = 2; + this.Panel1Label2.Text = "Geben Sie den Namen oder die IP des Datenbank-Rechners ein (z.B.: localhost) und " + +"den Namen der Datenbank."; + // + // minWaitingTextBox + // + this.minWaitingTextBox.Location = new System.Drawing.Point(88, 16); + this.minWaitingTextBox.Name = "minWaitingTextBox"; + this.minWaitingTextBox.Size = new System.Drawing.Size(192, 20); + this.minWaitingTextBox.TabIndex = 0; + this.minWaitingTextBox.Text = "00:05:00"; + // + // Panel1Label0 + // + this.Panel1Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel1Label0.Location = new System.Drawing.Point(16, 16); + this.Panel1Label0.Name = "Panel1Label0"; + this.Panel1Label0.Size = new System.Drawing.Size(100, 16); + this.Panel1Label0.TabIndex = 4; + this.Panel1Label0.Text = "Schritt Eins"; + // + // Panel4Label4 + // + this.Panel4Label4.Location = new System.Drawing.Point(8, 17); + this.Panel4Label4.Name = "Panel4Label4"; + this.Panel4Label4.Size = new System.Drawing.Size(72, 16); + this.Panel4Label4.TabIndex = 1; + this.Panel4Label4.Text = "Maximum:"; + this.Panel4Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // LineBottom + // + this.LineBottom.Location = new System.Drawing.Point(0, 314); + this.LineBottom.Name = "LineBottom"; + this.LineBottom.Size = new System.Drawing.Size(498, 3); + this.LineBottom.TabIndex = 10; + this.LineBottom.TabStop = false; + // + // Panel4Label2 + // + this.Panel4Label2.Location = new System.Drawing.Point(16, 16); + this.Panel4Label2.Name = "Panel4Label2"; + this.Panel4Label2.Size = new System.Drawing.Size(64, 16); + this.Panel4Label2.TabIndex = 2; + this.Panel4Label2.Text = "Minimum:"; + this.Panel4Label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // Panel1Label4 + // + this.Panel1Label4.Location = new System.Drawing.Point(16, 104); + this.Panel1Label4.Name = "Panel1Label4"; + this.Panel1Label4.Size = new System.Drawing.Size(64, 16); + this.Panel1Label4.TabIndex = 5; + this.Panel1Label4.Text = "Datenbank:"; + this.Panel1Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // Panel1GroupBox1 + // + this.Panel1GroupBox1.Controls.Add(this.Panel1StandardButton); + this.Panel1GroupBox1.Controls.Add(this.DataSourceTextBox); + this.Panel1GroupBox1.Controls.Add(this.InitialCatalogTextBox); + this.Panel1GroupBox1.Controls.Add(this.Panel1Label2); + this.Panel1GroupBox1.Controls.Add(this.Panel1Label3); + this.Panel1GroupBox1.Controls.Add(this.Panel1Label4); + this.Panel1GroupBox1.Location = new System.Drawing.Point(16, 96); + this.Panel1GroupBox1.Name = "Panel1GroupBox1"; + this.Panel1GroupBox1.Size = new System.Drawing.Size(296, 176); + this.Panel1GroupBox1.TabIndex = 3; + this.Panel1GroupBox1.TabStop = false; + this.Panel1GroupBox1.Text = "Datenquelle"; + // + // Panel4Label1 + // + this.Panel4Label1.Location = new System.Drawing.Point(16, 48); + this.Panel4Label1.Name = "Panel4Label1"; + this.Panel4Label1.Size = new System.Drawing.Size(272, 16); + this.Panel4Label1.TabIndex = 1; + this.Panel4Label1.Text = "Geben Sie hier Ihre gewnschten Einstellungen ein."; + // + // Panel5SearchButton + // + this.Panel5SearchButton.Location = new System.Drawing.Point(16, 72); + this.Panel5SearchButton.Name = "Panel5SearchButton"; + this.Panel5SearchButton.Size = new System.Drawing.Size(120, 24); + this.Panel5SearchButton.TabIndex = 2; + this.Panel5SearchButton.Text = "Suchen"; + this.Panel5SearchButton.Click += new System.EventHandler(this.Panel5SearchButtonClick); + // + // Panel5SelectButton + // + this.Panel5SelectButton.Enabled = false; + this.Panel5SelectButton.Location = new System.Drawing.Point(16, 192); + this.Panel5SelectButton.Name = "Panel5SelectButton"; + this.Panel5SelectButton.Size = new System.Drawing.Size(120, 24); + this.Panel5SelectButton.TabIndex = 6; + this.Panel5SelectButton.Text = "Auswhlen"; + this.Panel5SelectButton.Click += new System.EventHandler(this.Panel5SelectButtonClick); + // + // Panel4StandardButton + // + this.Panel4StandardButton.Location = new System.Drawing.Point(144, 264); + this.Panel4StandardButton.Name = "Panel4StandardButton"; + this.Panel4StandardButton.Size = new System.Drawing.Size(168, 24); + this.Panel4StandardButton.TabIndex = 6; + this.Panel4StandardButton.Text = "Auf Standart zurcksetzen"; + this.Panel4StandardButton.Click += new System.EventHandler(this.Panel5StandardButtonClick); + // + // AbortButton + // + this.AbortButton.Location = new System.Drawing.Point(408, 320); + this.AbortButton.Name = "AbortButton"; + this.AbortButton.Size = new System.Drawing.Size(80, 24); + this.AbortButton.TabIndex = 3; + this.AbortButton.Text = "Abbrechen"; + this.AbortButton.Click += new System.EventHandler(this.AbortButtonClick); + // + // Panel3Label0 + // + this.Panel3Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel3Label0.Location = new System.Drawing.Point(16, 16); + this.Panel3Label0.Name = "Panel3Label0"; + this.Panel3Label0.Size = new System.Drawing.Size(184, 16); + this.Panel3Label0.TabIndex = 1; + this.Panel3Label0.Text = "Schritt Drei"; + // + // Panel2Label0 + // + this.Panel2Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel2Label0.Location = new System.Drawing.Point(16, 16); + this.Panel2Label0.Name = "Panel2Label0"; + this.Panel2Label0.Size = new System.Drawing.Size(184, 16); + this.Panel2Label0.TabIndex = 3; + this.Panel2Label0.Text = "Schritt Zwei"; + // + // Panel2Label1 + // + this.Panel2Label1.Location = new System.Drawing.Point(16, 48); + this.Panel2Label1.Name = "Panel2Label1"; + this.Panel2Label1.Size = new System.Drawing.Size(288, 40); + this.Panel2Label1.TabIndex = 0; + this.Panel2Label1.Text = "Klicken Sie auf Tabellen erstellen um die Verbindung mit der Datenbank herzustell" + +"en und die Tabellen vorzubereiten."; + // + // maxTouringTextBox + // + this.maxTouringTextBox.Location = new System.Drawing.Point(88, 16); + this.maxTouringTextBox.Name = "maxTouringTextBox"; + this.maxTouringTextBox.Size = new System.Drawing.Size(192, 20); + this.maxTouringTextBox.TabIndex = 0; + this.maxTouringTextBox.Text = "10:00:00"; + // + // label4 + // + this.label4.Location = new System.Drawing.Point(48, 24); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(128, 24); + this.label4.TabIndex = 0; + this.label4.Text = "label4"; + // + // Panel4 + // + this.Panel4.Controls.Add(this.scopeTextBox); + this.Panel4.Controls.Add(this.Panel4StandardButton); + this.Panel4.Controls.Add(this.Panel4Label5); + this.Panel4.Controls.Add(this.Panel4GroupBox2); + this.Panel4.Controls.Add(this.Panel4GroupBox1); + this.Panel4.Controls.Add(this.Panel4Label1); + this.Panel4.Controls.Add(this.Panel4Label0); + this.Panel4.Location = new System.Drawing.Point(168, 8); + this.Panel4.Name = "Panel4"; + this.Panel4.Size = new System.Drawing.Size(320, 304); + this.Panel4.TabIndex = 9; + this.Panel4.Visible = false; + // + // Panel5 + // + this.Panel5.Controls.Add(this.Panel5Label8); + this.Panel5.Controls.Add(this.Panel5Label7); + this.Panel5.Controls.Add(this.Panel5Label5); + this.Panel5.Controls.Add(this.Panel5Label4); + this.Panel5.Controls.Add(this.Panel5Label3); + this.Panel5.Controls.Add(this.Panel5SelectButton); + this.Panel5.Controls.Add(this.ProgressTProgressBar); + this.Panel5.Controls.Add(this.ProgressSProgressBar); + this.Panel5.Controls.Add(this.Panel5SearchButton); + this.Panel5.Controls.Add(this.Panel5Label1); + this.Panel5.Controls.Add(this.Panel5Label0); + this.Panel5.Location = new System.Drawing.Point(168, 8); + this.Panel5.Name = "Panel5"; + this.Panel5.Size = new System.Drawing.Size(320, 304); + this.Panel5.TabIndex = 11; + this.Panel5.Visible = false; + // + // Panel1Label1 + // + this.Panel1Label1.Location = new System.Drawing.Point(16, 48); + this.Panel1Label1.Name = "Panel1Label1"; + this.Panel1Label1.Size = new System.Drawing.Size(296, 32); + this.Panel1Label1.TabIndex = 0; + this.Panel1Label1.Text = "Geben Sie die Daten fr die Verbindung zur entsprechenden SQL Datenbank ein."; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(0, 0); + this.label3.Name = "label3"; + this.label3.TabIndex = 0; + // + // Panel1 + // + this.Panel1.Controls.Add(this.Panel1Label0); + this.Panel1.Controls.Add(this.Panel1GroupBox1); + this.Panel1.Controls.Add(this.Panel1Label1); + this.Panel1.Location = new System.Drawing.Point(168, 8); + this.Panel1.Name = "Panel1"; + this.Panel1.Size = new System.Drawing.Size(320, 304); + this.Panel1.TabIndex = 4; + this.Panel1.Visible = false; + // + // Panel2 + // + this.Panel2.Controls.Add(this.Panel2MakeButton); + this.Panel2.Controls.Add(this.Panel2Label0); + this.Panel2.Controls.Add(this.Panel2TextBox1); + this.Panel2.Controls.Add(this.Panel2Label1); + this.Panel2.Location = new System.Drawing.Point(168, 8); + this.Panel2.Name = "Panel2"; + this.Panel2.Size = new System.Drawing.Size(320, 304); + this.Panel2.TabIndex = 6; + this.Panel2.Visible = false; + // + // Panel3 + // + this.Panel3.Controls.Add(this.Panel3Label1); + this.Panel3.Controls.Add(this.Panel3Label0); + this.Panel3.Controls.Add(this.StationsListBox); + this.Panel3.Location = new System.Drawing.Point(168, 8); + this.Panel3.Name = "Panel3"; + this.Panel3.Size = new System.Drawing.Size(320, 304); + this.Panel3.TabIndex = 7; + this.Panel3.Visible = false; + // + // Panel0Label2 + // + this.Panel0Label2.Location = new System.Drawing.Point(16, 64); + this.Panel0Label2.Name = "Panel0Label2"; + this.Panel0Label2.Size = new System.Drawing.Size(240, 32); + this.Panel0Label2.TabIndex = 1; + this.Panel0Label2.Text = "Um fortzufahren klicken Sie bitte auf Weiter."; + // + // Panel4GroupBox2 + // + this.Panel4GroupBox2.Controls.Add(this.Panel4Label4); + this.Panel4GroupBox2.Controls.Add(this.maxTouringTextBox); + this.Panel4GroupBox2.Location = new System.Drawing.Point(16, 168); + this.Panel4GroupBox2.Name = "Panel4GroupBox2"; + this.Panel4GroupBox2.Size = new System.Drawing.Size(296, 48); + this.Panel4GroupBox2.TabIndex = 3; + this.Panel4GroupBox2.TabStop = false; + this.Panel4GroupBox2.Text = "Tourenlnge"; + // + // Panel0Label1 + // + this.Panel0Label1.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel0Label1.Location = new System.Drawing.Point(16, 16); + this.Panel0Label1.Name = "Panel0Label1"; + this.Panel0Label1.Size = new System.Drawing.Size(296, 24); + this.Panel0Label1.TabIndex = 0; + this.Panel0Label1.Text = "Willkommen bei ViwoTour"; + // + // InitialCatalogTextBox + // + this.InitialCatalogTextBox.Location = new System.Drawing.Point(88, 104); + this.InitialCatalogTextBox.Name = "InitialCatalogTextBox"; + this.InitialCatalogTextBox.Size = new System.Drawing.Size(192, 20); + this.InitialCatalogTextBox.TabIndex = 4; + this.InitialCatalogTextBox.Text = "viwotour"; + // + // DataSourceTextBox + // + this.DataSourceTextBox.Location = new System.Drawing.Point(88, 72); + this.DataSourceTextBox.Name = "DataSourceTextBox"; + this.DataSourceTextBox.Size = new System.Drawing.Size(192, 20); + this.DataSourceTextBox.TabIndex = 0; + this.DataSourceTextBox.Text = "localhost"; + // + // Panel1StandardButton + // + this.Panel1StandardButton.Location = new System.Drawing.Point(64, 136); + this.Panel1StandardButton.Name = "Panel1StandardButton"; + this.Panel1StandardButton.Size = new System.Drawing.Size(168, 24); + this.Panel1StandardButton.TabIndex = 6; + this.Panel1StandardButton.Text = "Auf Standart zurcksetzen"; + this.Panel1StandardButton.Click += new System.EventHandler(this.Panel1StandardButtonClick); + // + // NextButton + // + this.NextButton.Location = new System.Drawing.Point(312, 320); + this.NextButton.Name = "NextButton"; + this.NextButton.Size = new System.Drawing.Size(80, 24); + this.NextButton.TabIndex = 1; + this.NextButton.Text = "Weiter >"; + this.NextButton.Click += new System.EventHandler(this.NextButtonClick); + // + // Panel2TextBox1 + // + this.Panel2TextBox1.Location = new System.Drawing.Point(16, 136); + this.Panel2TextBox1.Multiline = true; + this.Panel2TextBox1.Name = "Panel2TextBox1"; + this.Panel2TextBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.Panel2TextBox1.Size = new System.Drawing.Size(296, 152); + this.Panel2TextBox1.TabIndex = 1; + this.Panel2TextBox1.Text = ""; + // + // Panel5Label8 + // + this.Panel5Label8.Location = new System.Drawing.Point(264, 224); + this.Panel5Label8.Name = "Panel5Label8"; + this.Panel5Label8.Size = new System.Drawing.Size(48, 16); + this.Panel5Label8.TabIndex = 13; + // + // Panel5Label7 + // + this.Panel5Label7.Location = new System.Drawing.Point(264, 104); + this.Panel5Label7.Name = "Panel5Label7"; + this.Panel5Label7.Size = new System.Drawing.Size(48, 16); + this.Panel5Label7.TabIndex = 12; + // + // Panel5Label5 + // + this.Panel5Label5.Location = new System.Drawing.Point(16, 224); + this.Panel5Label5.Name = "Panel5Label5"; + this.Panel5Label5.Size = new System.Drawing.Size(128, 16); + this.Panel5Label5.TabIndex = 10; + this.Panel5Label5.Text = "Auswhlen:"; + // + // Panel5Label4 + // + this.Panel5Label4.Location = new System.Drawing.Point(16, 168); + this.Panel5Label4.Name = "Panel5Label4"; + this.Panel5Label4.Size = new System.Drawing.Size(144, 16); + this.Panel5Label4.TabIndex = 9; + this.Panel5Label4.Text = "Klicken Sie auf Auswhlen."; + // + // Panel5Label3 + // + this.Panel5Label3.Location = new System.Drawing.Point(16, 104); + this.Panel5Label3.Name = "Panel5Label3"; + this.Panel5Label3.Size = new System.Drawing.Size(104, 16); + this.Panel5Label3.TabIndex = 8; + this.Panel5Label3.Text = "Suchen:"; + // + // Panel5Label1 + // + this.Panel5Label1.Location = new System.Drawing.Point(16, 48); + this.Panel5Label1.Name = "Panel5Label1"; + this.Panel5Label1.Size = new System.Drawing.Size(248, 16); + this.Panel5Label1.TabIndex = 1; + this.Panel5Label1.Text = "Klicken Sie auf Suchen."; + // + // Panel5Label0 + // + this.Panel5Label0.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Panel5Label0.Location = new System.Drawing.Point(16, 16); + this.Panel5Label0.Name = "Panel5Label0"; + this.Panel5Label0.Size = new System.Drawing.Size(192, 16); + this.Panel5Label0.TabIndex = 0; + this.Panel5Label0.Text = "Schritt Fnf"; + // + // Panel4GroupBox1 + // + this.Panel4GroupBox1.Controls.Add(this.Panel4Label3); + this.Panel4GroupBox1.Controls.Add(this.Panel4Label2); + this.Panel4GroupBox1.Controls.Add(this.maxWaitingTextBox); + this.Panel4GroupBox1.Controls.Add(this.minWaitingTextBox); + this.Panel4GroupBox1.Location = new System.Drawing.Point(16, 72); + this.Panel4GroupBox1.Name = "Panel4GroupBox1"; + this.Panel4GroupBox1.Size = new System.Drawing.Size(296, 80); + this.Panel4GroupBox1.TabIndex = 2; + this.Panel4GroupBox1.TabStop = false; + this.Panel4GroupBox1.Text = "Wartezeit"; + // + // ProgressTProgressBar + // + this.ProgressTProgressBar.Location = new System.Drawing.Point(16, 248); + this.ProgressTProgressBar.Name = "ProgressTProgressBar"; + this.ProgressTProgressBar.Size = new System.Drawing.Size(296, 16); + this.ProgressTProgressBar.TabIndex = 5; + // + // Panel4Label3 + // + this.Panel4Label3.Location = new System.Drawing.Point(16, 48); + this.Panel4Label3.Name = "Panel4Label3"; + this.Panel4Label3.Size = new System.Drawing.Size(64, 16); + this.Panel4Label3.TabIndex = 3; + this.Panel4Label3.Text = "Maximum:"; + this.Panel4Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // scopeTextBox + // + this.scopeTextBox.Location = new System.Drawing.Point(104, 232); + this.scopeTextBox.Name = "scopeTextBox"; + this.scopeTextBox.Size = new System.Drawing.Size(192, 20); + this.scopeTextBox.TabIndex = 7; + this.scopeTextBox.Text = ""; + // + // ViwoTourMain + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(496, 351); + this.Controls.Add(this.Panel3); + this.Controls.Add(this.Panel4); + this.Controls.Add(this.Panel6); + this.Controls.Add(this.Panel2); + this.Controls.Add(this.Panel5); + this.Controls.Add(this.Panel1); + this.Controls.Add(this.LineBottom); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.BackButton); + this.Controls.Add(this.NextButton); + this.Controls.Add(this.AbortButton); + this.Controls.Add(this.Panel0); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "ViwoTourMain"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "ViwoTour"; + this.Panel6.ResumeLayout(false); + this.Panel0.ResumeLayout(false); + this.Panel1GroupBox1.ResumeLayout(false); + this.Panel4.ResumeLayout(false); + this.Panel5.ResumeLayout(false); + this.Panel1.ResumeLayout(false); + this.Panel2.ResumeLayout(false); + this.Panel3.ResumeLayout(false); + this.Panel4GroupBox2.ResumeLayout(false); + this.Panel4GroupBox1.ResumeLayout(false); + this.ResumeLayout(false); + } + #endregion + + + + void AbortButtonClick(object sender, System.EventArgs e) + { + this.Close(); + } + + void NextButtonClick(object sender, System.EventArgs e) + { + switch(ActualStep) + { + case 0: + { + Panel0.Visible = false; + Panel1.Visible = true; + BackButton.Enabled = true; + ActualStep++; + break; + } + case 1: + { + Panel1.Visible = false; + Panel2.Visible = true; + NextButton.Enabled = false; + ActualStep++; + break; + } + case 2: + { + Panel2.Visible = false; + Panel3.Visible = true; + ActualStep++; + break; + } + case 3: + { + Panel3.Visible = false; + Panel4.Visible = true; + ActualStep++; + break; + } + case 4: + { + Panel4.Visible = false; + Panel5.Visible = true; + ActualStep++; + break; + } + case 5: + { + Panel5.Visible = false; + Panel6.Visible = true; + NextButton.Enabled = false; + ActualStep++; + break; + } + } + } + + + void BackButtonClick(object sender, System.EventArgs e) + { + switch(ActualStep) + { + case 1: + { + Panel1.Visible = false; + Panel0.Visible = true; + BackButton.Enabled = false; + ActualStep--; + break; + } + case 2: + { + Panel2.Visible = false; + Panel1.Visible = true; + NextButton.Enabled = true; + ActualStep--; + break; + } + case 3: + { + Panel3.Visible = false; + Panel2.Visible = true; + NextButton.Enabled = false; + ActualStep--; + break; + } + case 4: + { + Panel4.Visible = false; + Panel3.Visible = true; + ActualStep--; + break; + } + case 5: + { + Panel5.Visible = false; + Panel4.Visible = true; + ActualStep--; + break; + } + case 6: + { + Panel6.Visible = false; + Panel5.Visible = true; + NextButton.Enabled = true; + ActualStep--; + break; + } + } + } + + void Panel1StandardButtonClick(object sender, System.EventArgs e) + { + DataSourceTextBox.Text = "localhost"; + InitialCatalogTextBox.Text = "viwotour"; + } + + void Panel2MakeButtonClick(object sender, System.EventArgs e) + { + BackButton.Enabled = false; + NextButton.Enabled = false; + Panel2MakeButton.Enabled = false; + new Thread(new ThreadStart(PrepareClick)).Start(); + } + + void Panel5StandardButtonClick(object sender, System.EventArgs e) + { + minWaitingTextBox.Text=Properties.MinWaiting.ToString(); + maxWaitingTextBox.Text=Properties.MaxWaiting.ToString(); + maxTouringTextBox.Text=Properties.MaxTouring.ToString(); + scopeTextBox.Text=Properties.Scope.ToString(); + } + + void Panel5SearchButtonClick(object sender, System.EventArgs e) + { + BackButton.Enabled = false; + Panel5SearchButton.Enabled = false; + + viwoTour.S.Clear(); + foreach(string station in StationsListBox.SelectedItems) { + viwoTour.S.Add(station); + } + + new Thread(new ThreadStart(SearchStart)).Start(); + + } + + void Panel5SelectButtonClick(object sender, System.EventArgs e) + { + Panel5SelectButton.Enabled = false; + new Thread(new ThreadStart(SelectStart)).Start(); + } + + void PrepareClick() + { + Properties.DataSource = DataSourceTextBox.Text; + Properties.InitialCatalog = InitialCatalogTextBox.Text; + + Panel2TextBox1.Text += "Verbinde mit "+Properties.InitialCatalog+" auf "+Properties.DataSource+"..."; + viwoTour.Connect(); + Panel2TextBox1.Text += " Fertig"; + + Panel2TextBox1.Text += "\r\nVorbereiten..."; + viwoTour.Prepare(); + Panel2TextBox1.Text += " Fertig"; + + Panel2TextBox1.Text += "\r\nLaden..."; + viwoTour.Load(); + Panel2TextBox1.Text += "Fertig\r\n"; + + StationsListBox.Items.Clear(); + foreach(string station in viwoTour.courseBook.get_STATION_Of_Rows()) { + StationsListBox.Items.Add(station); + } + + Panel2MakeButton.Enabled = true; + NextButton.Enabled = true; + BackButton.Enabled = true; + } + + void SearchStart() + { + NextButton.Enabled = false; + viwoTour.create_A(); + viwoTour.search_T(); + + Panel5SelectButton.Enabled = true; + } + + void SelectStart() + { + viwoTour.select_T(); + + FillResultTextBox(); + + + NextButton.Enabled = true; + BackButton.Enabled = true; + Panel5SearchButton.Enabled = true; + } + + void Search_TProgress(int progress) + { + ProgressSProgressBar.Value=progress; + Panel5Label7.Text = Convert.ToString(progress)+"%"; + } + + void Select_TProgress(int progress) + { + ProgressTProgressBar.Value=progress; + Panel5Label8.Text = Convert.ToString(progress)+"%"; + } + + void FillResultTextBox() + { + ArrayList TouredIDs=new ArrayList(); + ArrayList NonTouredIDs=(ArrayList)viwoTour.courseBook.get_ID_Of_Rows().Clone(); + + int Tours=0; + + int ProductiveRows=0; + int NonProductiveRows=0; + + TimeSpan ProductiveTouring=new TimeSpan(); + TimeSpan NonProductiveTouring=new TimeSpan(); + + foreach(ArrayList t_select in viwoTour.T_select) { + Tours++; + + for(int i=0;i + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/viwotour/viwotour.prjx b/viwotour/viwotour.prjx new file mode 100644 index 0000000..9342e61 --- /dev/null +++ b/viwotour/viwotour.prjx @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file